{"id":"43678f55a3ef48531b5ad2350a78a276","_format":"hh-sol-build-info-1","solcVersion":"0.8.10","solcLongVersion":"0.8.10+commit.fc410830","input":{"language":"Solidity","sources":{"contracts/dependencies/chainlink/AggregatorInterface.sol":{"content":"// SPDX-License-Identifier: MIT\n// Chainlink Contracts v0.8\npragma solidity ^0.8.0;\n\ninterface AggregatorInterface {\n  function latestAnswer() external view returns (int256);\n\n  function latestTimestamp() external view returns (uint256);\n\n  function latestRound() external view returns (uint256);\n\n  function getAnswer(uint256 roundId) external view returns (int256);\n\n  function getTimestamp(uint256 roundId) external view returns (uint256);\n\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\n\n  event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\n}\n"},"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-or-later\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\n\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\n/// @author Gnosis Developers\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\nlibrary GPv2SafeERC20 {\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\n  /// also when the token returns `false`.\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\n    bytes4 selector_ = token.transfer.selector;\n\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n      let freeMemoryPointer := mload(0x40)\n      mstore(freeMemoryPointer, selector_)\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n      mstore(add(freeMemoryPointer, 36), value)\n\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\n        returndatacopy(0, 0, returndatasize())\n        revert(0, returndatasize())\n      }\n    }\n\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\n  }\n\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\n  /// reverts also when the token returns `false`.\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n    bytes4 selector_ = token.transferFrom.selector;\n\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n      let freeMemoryPointer := mload(0x40)\n      mstore(freeMemoryPointer, selector_)\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n      mstore(add(freeMemoryPointer, 68), value)\n\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\n        returndatacopy(0, 0, returndatasize())\n        revert(0, returndatasize())\n      }\n    }\n\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\n  }\n\n  /// @dev Verifies that the last return was a successful `transfer*` call.\n  /// This is done by checking that the return data is either empty, or\n  /// is a valid ABI encoded boolean.\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\n    // NOTE: Inspecting previous return data requires assembly. Note that\n    // we write the return data to memory 0 in the case where the return\n    // data size is 32, this is OK since the first 64 bytes of memory are\n    // reserved by Solidy as a scratch space that can be used within\n    // assembly blocks.\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n      /// @dev Revert with an ABI encoded Solidity error with a message\n      /// that fits into 32-bytes.\n      ///\n      /// An ABI encoded Solidity error has the following memory layout:\n      ///\n      /// ------------+----------------------------------\n      ///  byte range | value\n      /// ------------+----------------------------------\n      ///  0x00..0x04 |        selector(\"Error(string)\")\n      ///  0x04..0x24 |      string offset (always 0x20)\n      ///  0x24..0x44 |                    string length\n      ///  0x44..0x64 | string value, padded to 32-bytes\n      function revertWithMessage(length, message) {\n        mstore(0x00, '\\x08\\xc3\\x79\\xa0')\n        mstore(0x04, 0x20)\n        mstore(0x24, length)\n        mstore(0x44, message)\n        revert(0x00, 0x64)\n      }\n\n      switch returndatasize()\n      // Non-standard ERC20 transfer without return.\n      case 0 {\n        // NOTE: When the return data size is 0, verify that there\n        // is code at the address. This is done in order to maintain\n        // compatibility with Solidity calling conventions.\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\n        if iszero(extcodesize(token)) {\n          revertWithMessage(20, 'GPv2: not a contract')\n        }\n\n        success := 1\n      }\n      // Standard ERC20 transfer returning boolean success value.\n      case 32 {\n        returndatacopy(0, 0, returndatasize())\n\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\n        // as `true` for a boolean. In order to stay compatible with\n        // OpenZeppelin's `SafeERC20` library which is known to work\n        // with the existing ERC20 implementation we care about,\n        // make sure we return success for any non-zero return value\n        // from the `transfer*` call.\n        success := iszero(iszero(mload(0)))\n      }\n      default {\n        revertWithMessage(31, 'GPv2: malformed transfer result')\n      }\n    }\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/AccessControl.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport './IAccessControl.sol';\nimport './Context.sol';\nimport './Strings.sol';\nimport './ERC165.sol';\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```\n * function foo() public {\n *     require(hasRole(MY_ROLE, msg.sender));\n *     ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it.\n */\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\n  struct RoleData {\n    mapping(address => bool) members;\n    bytes32 adminRole;\n  }\n\n  mapping(bytes32 => RoleData) private _roles;\n\n  bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n  /**\n   * @dev Modifier that checks that an account has a specific role. Reverts\n   * with a standardized message including the required role.\n   *\n   * The format of the revert reason is given by the following regular expression:\n   *\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n   *\n   * _Available since v4.1._\n   */\n  modifier onlyRole(bytes32 role) {\n    _checkRole(role, _msgSender());\n    _;\n  }\n\n  /**\n   * @dev See {IERC165-supportsInterface}.\n   */\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n    return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n  }\n\n  /**\n   * @dev Returns `true` if `account` has been granted `role`.\n   */\n  function hasRole(bytes32 role, address account) public view override returns (bool) {\n    return _roles[role].members[account];\n  }\n\n  /**\n   * @dev Revert with a standard message if `account` is missing `role`.\n   *\n   * The format of the revert reason is given by the following regular expression:\n   *\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n   */\n  function _checkRole(bytes32 role, address account) internal view {\n    if (!hasRole(role, account)) {\n      revert(\n        string(\n          abi.encodePacked(\n            'AccessControl: account ',\n            Strings.toHexString(uint160(account), 20),\n            ' is missing role ',\n            Strings.toHexString(uint256(role), 32)\n          )\n        )\n      );\n    }\n  }\n\n  /**\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\n   * {revokeRole}.\n   *\n   * To change a role's admin, use {_setRoleAdmin}.\n   */\n  function getRoleAdmin(bytes32 role) public view override returns (bytes32) {\n    return _roles[role].adminRole;\n  }\n\n  /**\n   * @dev Grants `role` to `account`.\n   *\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\n   * event.\n   *\n   * Requirements:\n   *\n   * - the caller must have ``role``'s admin role.\n   */\n  function grantRole(\n    bytes32 role,\n    address account\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\n    _grantRole(role, account);\n  }\n\n  /**\n   * @dev Revokes `role` from `account`.\n   *\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\n   *\n   * Requirements:\n   *\n   * - the caller must have ``role``'s admin role.\n   */\n  function revokeRole(\n    bytes32 role,\n    address account\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\n    _revokeRole(role, account);\n  }\n\n  /**\n   * @dev Revokes `role` from the calling account.\n   *\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\n   * purpose is to provide a mechanism for accounts to lose their privileges\n   * if they are compromised (such as when a trusted device is misplaced).\n   *\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\n   * event.\n   *\n   * Requirements:\n   *\n   * - the caller must be `account`.\n   */\n  function renounceRole(bytes32 role, address account) public virtual override {\n    require(account == _msgSender(), 'AccessControl: can only renounce roles for self');\n\n    _revokeRole(role, account);\n  }\n\n  /**\n   * @dev Grants `role` to `account`.\n   *\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\n   * event. Note that unlike {grantRole}, this function doesn't perform any\n   * checks on the calling account.\n   *\n   * [WARNING]\n   * ====\n   * This function should only be called from the constructor when setting\n   * up the initial roles for the system.\n   *\n   * Using this function in any other way is effectively circumventing the admin\n   * system imposed by {AccessControl}.\n   * ====\n   */\n  function _setupRole(bytes32 role, address account) internal virtual {\n    _grantRole(role, account);\n  }\n\n  /**\n   * @dev Sets `adminRole` as ``role``'s admin role.\n   *\n   * Emits a {RoleAdminChanged} event.\n   */\n  function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n    bytes32 previousAdminRole = getRoleAdmin(role);\n    _roles[role].adminRole = adminRole;\n    emit RoleAdminChanged(role, previousAdminRole, adminRole);\n  }\n\n  function _grantRole(bytes32 role, address account) private {\n    if (!hasRole(role, account)) {\n      _roles[role].members[account] = true;\n      emit RoleGranted(role, account, _msgSender());\n    }\n  }\n\n  function _revokeRole(bytes32 role, address account) private {\n    if (hasRole(role, account)) {\n      _roles[role].members[account] = false;\n      emit RoleRevoked(role, account, _msgSender());\n    }\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n  /**\n   * @dev Returns true if `account` is a contract.\n   *\n   * [IMPORTANT]\n   * ====\n   * It is unsafe to assume that an address for which this function returns\n   * false is an externally-owned account (EOA) and not a contract.\n   *\n   * Among others, `isContract` will return false for the following\n   * types of addresses:\n   *\n   *  - an externally-owned account\n   *  - a contract in construction\n   *  - an address where a contract will be created\n   *  - an address where a contract lived, but was destroyed\n   * ====\n   */\n  function isContract(address account) internal view returns (bool) {\n    // This method relies on extcodesize, which returns 0 for contracts in\n    // construction, since the code is only stored at the end of the\n    // constructor execution.\n\n    uint256 size;\n    assembly {\n      size := extcodesize(account)\n    }\n    return size > 0;\n  }\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n   */\n  function sendValue(address payable recipient, uint256 amount) internal {\n    require(address(this).balance >= amount, 'Address: insufficient balance');\n\n    (bool success, ) = recipient.call{value: amount}('');\n    require(success, 'Address: unable to send value, recipient may have reverted');\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, it is bubbled up by this\n   * function (like regular Solidity function calls).\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   * _Available since v3.1._\n   */\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n    return functionCall(target, data, 'Address: low-level call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n   * `errorMessage` as a fallback revert reason when `target` reverts.\n   *\n   * _Available since v3.1._\n   */\n  function functionCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    return functionCallWithValue(target, data, 0, errorMessage);\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   * _Available since v3.1._\n   */\n  function functionCallWithValue(\n    address target,\n    bytes memory data,\n    uint256 value\n  ) internal returns (bytes memory) {\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\n   *\n   * _Available since v3.1._\n   */\n  function functionCallWithValue(\n    address target,\n    bytes memory data,\n    uint256 value,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\n    require(isContract(target), 'Address: call to non-contract');\n\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n   * but performing a static call.\n   *\n   * _Available since v3.3._\n   */\n  function functionStaticCall(\n    address target,\n    bytes memory data\n  ) internal view returns (bytes memory) {\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n   * but performing a static call.\n   *\n   * _Available since v3.3._\n   */\n  function functionStaticCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal view returns (bytes memory) {\n    require(isContract(target), 'Address: static call to non-contract');\n\n    (bool success, bytes memory returndata) = target.staticcall(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n   * but performing a delegate call.\n   *\n   * _Available since v3.4._\n   */\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n   * but performing a delegate call.\n   *\n   * _Available since v3.4._\n   */\n  function functionDelegateCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    require(isContract(target), 'Address: delegate call to non-contract');\n\n    (bool success, bytes memory returndata) = target.delegatecall(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n   * revert reason using the provided one.\n   *\n   * _Available since v4.3._\n   */\n  function verifyCallResult(\n    bool success,\n    bytes memory returndata,\n    string memory errorMessage\n  ) internal pure returns (bytes memory) {\n    if (success) {\n      return returndata;\n    } else {\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 {\n          let returndata_size := mload(returndata)\n          revert(add(32, returndata), returndata_size)\n        }\n      } else {\n        revert(errorMessage);\n      }\n    }\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/Context.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\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 GSN 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 payable) {\n    return payable(msg.sender);\n  }\n\n  function _msgData() internal view virtual returns (bytes memory) {\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n    return msg.data;\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/ERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport './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 *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n  /**\n   * @dev See {IERC165-supportsInterface}.\n   */\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n    return interfaceId == type(IERC165).interfaceId;\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport './Context.sol';\nimport './IERC20.sol';\nimport './SafeMath.sol';\nimport './Address.sol';\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20 {\n  using SafeMath for uint256;\n  using Address for address;\n\n  mapping(address => uint256) private _balances;\n\n  mapping(address => mapping(address => uint256)) private _allowances;\n\n  uint256 private _totalSupply;\n\n  string private _name;\n  string private _symbol;\n  uint8 private _decimals;\n\n  /**\n   * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n   * a default value of 18.\n   *\n   * To select a different value for {decimals}, use {_setupDecimals}.\n   *\n   * All three of these values are immutable: they can only be set once during\n   * construction.\n   */\n  constructor(string memory name, string memory symbol) {\n    _name = name;\n    _symbol = symbol;\n    _decimals = 18;\n  }\n\n  /**\n   * @dev Returns the name of the token.\n   */\n  function name() public view returns (string memory) {\n    return _name;\n  }\n\n  /**\n   * @dev Returns the symbol of the token, usually a shorter version of the\n   * name.\n   */\n  function symbol() public view returns (string memory) {\n    return _symbol;\n  }\n\n  /**\n   * @dev Returns the number of decimals used to get its user representation.\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\n   * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n   *\n   * Tokens usually opt for a value of 18, imitating the relationship between\n   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n   * called.\n   *\n   * NOTE: This information is only used for _display_ purposes: it in\n   * no way affects any of the arithmetic of the contract, including\n   * {IERC20-balanceOf} and {IERC20-transfer}.\n   */\n  function decimals() public view returns (uint8) {\n    return _decimals;\n  }\n\n  /**\n   * @dev See {IERC20-totalSupply}.\n   */\n  function totalSupply() public view override returns (uint256) {\n    return _totalSupply;\n  }\n\n  /**\n   * @dev See {IERC20-balanceOf}.\n   */\n  function balanceOf(address account) public view override returns (uint256) {\n    return _balances[account];\n  }\n\n  /**\n   * @dev See {IERC20-transfer}.\n   *\n   * Requirements:\n   *\n   * - `recipient` cannot be the zero address.\n   * - the caller must have a balance of at least `amount`.\n   */\n  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n    _transfer(_msgSender(), recipient, amount);\n    return true;\n  }\n\n  /**\n   * @dev See {IERC20-allowance}.\n   */\n  function allowance(\n    address owner,\n    address spender\n  ) public view virtual override returns (uint256) {\n    return _allowances[owner][spender];\n  }\n\n  /**\n   * @dev See {IERC20-approve}.\n   *\n   * Requirements:\n   *\n   * - `spender` cannot be the zero address.\n   */\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\n    _approve(_msgSender(), spender, amount);\n    return true;\n  }\n\n  /**\n   * @dev See {IERC20-transferFrom}.\n   *\n   * Emits an {Approval} event indicating the updated allowance. This is not\n   * required by the EIP. See the note at the beginning of {ERC20};\n   *\n   * Requirements:\n   * - `sender` and `recipient` cannot be the zero address.\n   * - `sender` must have a balance of at least `amount`.\n   * - the caller must have allowance for ``sender``'s tokens of at least\n   * `amount`.\n   */\n  function transferFrom(\n    address sender,\n    address recipient,\n    uint256 amount\n  ) public virtual override returns (bool) {\n    _transfer(sender, recipient, amount);\n    _approve(\n      sender,\n      _msgSender(),\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')\n    );\n    return true;\n  }\n\n  /**\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\n   *\n   * This is an alternative to {approve} that can be used as a mitigation for\n   * problems described in {IERC20-approve}.\n   *\n   * Emits an {Approval} event indicating the updated allowance.\n   *\n   * Requirements:\n   *\n   * - `spender` cannot be the zero address.\n   */\n  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n    return true;\n  }\n\n  /**\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\n   *\n   * This is an alternative to {approve} that can be used as a mitigation for\n   * problems described in {IERC20-approve}.\n   *\n   * Emits an {Approval} event indicating the updated allowance.\n   *\n   * Requirements:\n   *\n   * - `spender` cannot be the zero address.\n   * - `spender` must have allowance for the caller of at least\n   * `subtractedValue`.\n   */\n  function decreaseAllowance(\n    address spender,\n    uint256 subtractedValue\n  ) public virtual returns (bool) {\n    _approve(\n      _msgSender(),\n      spender,\n      _allowances[_msgSender()][spender].sub(\n        subtractedValue,\n        'ERC20: decreased allowance below zero'\n      )\n    );\n    return true;\n  }\n\n  /**\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\n   *\n   * This is internal function is equivalent to {transfer}, and can be used to\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\n   *\n   * Emits a {Transfer} event.\n   *\n   * Requirements:\n   *\n   * - `sender` cannot be the zero address.\n   * - `recipient` cannot be the zero address.\n   * - `sender` must have a balance of at least `amount`.\n   */\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n    require(sender != address(0), 'ERC20: transfer from the zero address');\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\n\n    _beforeTokenTransfer(sender, recipient, amount);\n\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');\n    _balances[recipient] = _balances[recipient].add(amount);\n    emit Transfer(sender, recipient, amount);\n  }\n\n  /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n   * the total supply.\n   *\n   * Emits a {Transfer} event with `from` set to the zero address.\n   *\n   * Requirements\n   *\n   * - `to` cannot be the zero address.\n   */\n  function _mint(address account, uint256 amount) internal virtual {\n    require(account != address(0), 'ERC20: mint to the zero address');\n\n    _beforeTokenTransfer(address(0), account, amount);\n\n    _totalSupply = _totalSupply.add(amount);\n    _balances[account] = _balances[account].add(amount);\n    emit Transfer(address(0), account, amount);\n  }\n\n  /**\n   * @dev Destroys `amount` tokens from `account`, reducing the\n   * total supply.\n   *\n   * Emits a {Transfer} event with `to` set to the zero address.\n   *\n   * Requirements\n   *\n   * - `account` cannot be the zero address.\n   * - `account` must have at least `amount` tokens.\n   */\n  function _burn(address account, uint256 amount) internal virtual {\n    require(account != address(0), 'ERC20: burn from the zero address');\n\n    _beforeTokenTransfer(account, address(0), amount);\n\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');\n    _totalSupply = _totalSupply.sub(amount);\n    emit Transfer(account, address(0), amount);\n  }\n\n  /**\n   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\n   *\n   * This is internal function is equivalent to `approve`, and can be used to\n   * e.g. set automatic allowances for certain subsystems, etc.\n   *\n   * Emits an {Approval} event.\n   *\n   * Requirements:\n   *\n   * - `owner` cannot be the zero address.\n   * - `spender` cannot be the zero address.\n   */\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\n    require(owner != address(0), 'ERC20: approve from the zero address');\n    require(spender != address(0), 'ERC20: approve to the zero address');\n\n    _allowances[owner][spender] = amount;\n    emit Approval(owner, spender, amount);\n  }\n\n  /**\n   * @dev Sets {decimals} to a value other than the default one of 18.\n   *\n   * WARNING: This function should only be called from the constructor. Most\n   * applications that interact with token contracts will not expect\n   * {decimals} to ever change, and may work incorrectly if it does.\n   */\n  function _setupDecimals(uint8 decimals_) internal {\n    _decimals = decimals_;\n  }\n\n  /**\n   * @dev Hook that is called before any transfer of tokens. This includes\n   * minting and burning.\n   *\n   * Calling conditions:\n   *\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n   * will be to transferred to `to`.\n   * - when `from` is zero, `amount` tokens will be minted for `to`.\n   * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n   * - `from` and `to` are never both zero.\n   *\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n   */\n  function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\n}\n"},"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n  /**\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n   *\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n   * {RoleAdminChanged} not being emitted signaling this.\n   *\n   * _Available since v3.1._\n   */\n  event RoleAdminChanged(\n    bytes32 indexed role,\n    bytes32 indexed previousAdminRole,\n    bytes32 indexed newAdminRole\n  );\n\n  /**\n   * @dev Emitted when `account` is granted `role`.\n   *\n   * `sender` is the account that originated the contract call, an admin role\n   * bearer except when using {AccessControl-_setupRole}.\n   */\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n  /**\n   * @dev Emitted when `account` is revoked `role`.\n   *\n   * `sender` is the account that originated the contract call:\n   *   - if using `revokeRole`, it is the admin role bearer\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\n   */\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n  /**\n   * @dev Returns `true` if `account` has been granted `role`.\n   */\n  function hasRole(bytes32 role, address account) external view returns (bool);\n\n  /**\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\n   * {revokeRole}.\n   *\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n   */\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n  /**\n   * @dev Grants `role` to `account`.\n   *\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\n   * event.\n   *\n   * Requirements:\n   *\n   * - the caller must have ``role``'s admin role.\n   */\n  function grantRole(bytes32 role, address account) external;\n\n  /**\n   * @dev Revokes `role` from `account`.\n   *\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\n   *\n   * Requirements:\n   *\n   * - the caller must have ``role``'s admin role.\n   */\n  function revokeRole(bytes32 role, address account) external;\n\n  /**\n   * @dev Revokes `role` from the calling account.\n   *\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\n   * purpose is to provide a mechanism for accounts to lose their privileges\n   * if they are compromised (such as when a trusted device is misplaced).\n   *\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\n   * event.\n   *\n   * Requirements:\n   *\n   * - the caller must be `account`.\n   */\n  function renounceRole(bytes32 role, address account) external;\n}\n"},"contracts/dependencies/openzeppelin/contracts/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\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"},"contracts/dependencies/openzeppelin/contracts/IERC20.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n  /**\n   * @dev Returns the amount of tokens in existence.\n   */\n  function totalSupply() external view returns (uint256);\n\n  /**\n   * @dev Returns the amount of tokens owned by `account`.\n   */\n  function balanceOf(address account) external view returns (uint256);\n\n  /**\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\n   *\n   * Returns a boolean value indicating whether the operation succeeded.\n   *\n   * Emits a {Transfer} event.\n   */\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\n\n  /**\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\n\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"},"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IERC20} from './IERC20.sol';\n\ninterface IERC20Detailed is IERC20 {\n  function name() external view returns (string memory);\n\n  function symbol() external view returns (string memory);\n\n  function decimals() external view returns (uint8);\n}\n"},"contracts/dependencies/openzeppelin/contracts/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport './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 * By default, the owner account will be the one that deploys the contract. This\n * can 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 */\ncontract Ownable is Context {\n  address private _owner;\n\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n  /**\n   * @dev Initializes the contract setting the deployer as the initial owner.\n   */\n  constructor() {\n    address msgSender = _msgSender();\n    _owner = msgSender;\n    emit OwnershipTransferred(address(0), msgSender);\n  }\n\n  /**\n   * @dev Returns the address of the current owner.\n   */\n  function owner() public view returns (address) {\n    return _owner;\n  }\n\n  /**\n   * @dev Throws if called by any account other than the owner.\n   */\n  modifier onlyOwner() {\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\n    _;\n  }\n\n  /**\n   * @dev Leaves the contract without owner. It will not be possible to call\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\n   *\n   * NOTE: Renouncing ownership will leave the contract without an owner,\n   * thereby removing any functionality that is only available to the owner.\n   */\n  function renounceOwnership() public virtual onlyOwner {\n    emit OwnershipTransferred(_owner, address(0));\n    _owner = 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    require(newOwner != address(0), 'Ownable: new owner is the zero address');\n    emit OwnershipTransferred(_owner, newOwner);\n    _owner = newOwner;\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\npragma solidity ^0.8.0;\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 *\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n * all math on `uint256` and `int256` and then downcasting.\n */\nlibrary SafeCast {\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    require(value <= type(uint224).max, \"SafeCast: value doesn't fit in 224 bits\");\n    return uint224(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    require(value <= type(uint128).max, \"SafeCast: value doesn't fit in 128 bits\");\n    return uint128(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    require(value <= type(uint96).max, \"SafeCast: value doesn't fit in 96 bits\");\n    return uint96(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    require(value <= type(uint64).max, \"SafeCast: value doesn't fit in 64 bits\");\n    return uint64(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    require(value <= type(uint32).max, \"SafeCast: value doesn't fit in 32 bits\");\n    return uint32(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    require(value <= type(uint16).max, \"SafeCast: value doesn't fit in 16 bits\");\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    require(value <= type(uint8).max, \"SafeCast: value doesn't fit in 8 bits\");\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    require(value >= 0, 'SafeCast: value must be positive');\n    return uint256(value);\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   * _Available since v3.1._\n   */\n  function toInt128(int256 value) internal pure returns (int128) {\n    require(\n      value >= type(int128).min && value <= type(int128).max,\n      \"SafeCast: value doesn't fit in 128 bits\"\n    );\n    return int128(value);\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   * _Available since v3.1._\n   */\n  function toInt64(int256 value) internal pure returns (int64) {\n    require(\n      value >= type(int64).min && value <= type(int64).max,\n      \"SafeCast: value doesn't fit in 64 bits\"\n    );\n    return int64(value);\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   * _Available since v3.1._\n   */\n  function toInt32(int256 value) internal pure returns (int32) {\n    require(\n      value >= type(int32).min && value <= type(int32).max,\n      \"SafeCast: value doesn't fit in 32 bits\"\n    );\n    return int32(value);\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   * _Available since v3.1._\n   */\n  function toInt16(int256 value) internal pure returns (int16) {\n    require(\n      value >= type(int16).min && value <= type(int16).max,\n      \"SafeCast: value doesn't fit in 16 bits\"\n    );\n    return int16(value);\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   * _Available since v3.1._\n   */\n  function toInt8(int256 value) internal pure returns (int8) {\n    require(\n      value >= type(int8).min && value <= type(int8).max,\n      \"SafeCast: value doesn't fit in 8 bits\"\n    );\n    return int8(value);\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    require(value <= uint256(type(int256).max), \"SafeCast: value doesn't fit in an int256\");\n    return int256(value);\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport './IERC20.sol';\nimport './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  function safeTransfer(IERC20 token, address to, uint256 value) internal {\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n  }\n\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n    _callOptionalReturn(\n      token,\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\n    );\n  }\n\n  /**\n   * @dev Deprecated. This function has issues similar to the ones found in\n   * {IERC20-approve}, and its usage is discouraged.\n   *\n   * Whenever possible, use {safeIncreaseAllowance} and\n   * {safeDecreaseAllowance} instead.\n   */\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\n    // safeApprove should only be called when setting an initial allowance,\n    // or when resetting it to zero. To increase and decrease it, use\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n    require(\n      (value == 0) || (token.allowance(address(this), spender) == 0),\n      'SafeERC20: approve from non-zero to non-zero allowance'\n    );\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n  }\n\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\n    _callOptionalReturn(\n      token,\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\n    );\n  }\n\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n    unchecked {\n      uint256 oldAllowance = token.allowance(address(this), spender);\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\n      uint256 newAllowance = oldAllowance - value;\n      _callOptionalReturn(\n        token,\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\n      );\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, 'SafeERC20: low-level call failed');\n    if (returndata.length > 0) {\n      // Return data is optional\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\n    }\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/SafeMath.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/// @title Optimized overflow and underflow safe math operations\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\nlibrary SafeMath {\n  /// @notice Returns x + y, reverts if sum overflows uint256\n  /// @param x The augend\n  /// @param y The addend\n  /// @return z The sum of x and y\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\n    unchecked {\n      require((z = x + y) >= x);\n    }\n  }\n\n  /// @notice Returns x - y, reverts if underflows\n  /// @param x The minuend\n  /// @param y The subtrahend\n  /// @return z The difference of x and y\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\n    unchecked {\n      require((z = x - y) <= x);\n    }\n  }\n\n  /// @notice Returns x - y, reverts if underflows\n  /// @param x The minuend\n  /// @param y The subtrahend\n  /// @param message The error msg\n  /// @return z The difference of x and y\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\n    unchecked {\n      require((z = x - y) <= x, message);\n    }\n  }\n\n  /// @notice Returns x * y, reverts if overflows\n  /// @param x The multiplicand\n  /// @param y The multiplier\n  /// @return z The product of x and y\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\n    unchecked {\n      require(x == 0 || (z = x * y) / x == y);\n    }\n  }\n\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\n  /// @param x The numerator\n  /// @param y The denominator\n  /// @return z The product of x and y\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\n    return x / y;\n  }\n}\n"},"contracts/dependencies/openzeppelin/contracts/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n  bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';\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    // Inspired by OraclizeAPI's implementation - MIT licence\n    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n    if (value == 0) {\n      return '0';\n    }\n    uint256 temp = value;\n    uint256 digits;\n    while (temp != 0) {\n      digits++;\n      temp /= 10;\n    }\n    bytes memory buffer = new bytes(digits);\n    while (value != 0) {\n      digits -= 1;\n      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n      value /= 10;\n    }\n    return string(buffer);\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    if (value == 0) {\n      return '0x00';\n    }\n    uint256 temp = value;\n    uint256 length = 0;\n    while (temp != 0) {\n      length++;\n      temp >>= 8;\n    }\n    return toHexString(value, length);\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    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_SYMBOLS[value & 0xf];\n      value >>= 4;\n    }\n    require(value == 0, 'Strings: hex length insufficient');\n    return string(buffer);\n  }\n}\n"},"contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './BaseAdminUpgradeabilityProxy.sol';\n\n/**\n * @title AdminUpgradeabilityProxy\n * @dev Extends from BaseAdminUpgradeabilityProxy with a constructor for\n * initializing the implementation, admin, and init data.\n */\ncontract AdminUpgradeabilityProxy is BaseAdminUpgradeabilityProxy, UpgradeabilityProxy {\n  /**\n   * Contract constructor.\n   * @param _logic address of the initial implementation.\n   * @param _admin Address of the proxy administrator.\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   */\n  constructor(\n    address _logic,\n    address _admin,\n    bytes memory _data\n  ) payable UpgradeabilityProxy(_logic, _data) {\n    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));\n    _setAdmin(_admin);\n  }\n\n  /**\n   * @dev Only fall back when the sender is not the admin.\n   */\n  function _willFallback() internal override(BaseAdminUpgradeabilityProxy, Proxy) {\n    BaseAdminUpgradeabilityProxy._willFallback();\n  }\n}\n"},"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './UpgradeabilityProxy.sol';\n\n/**\n * @title BaseAdminUpgradeabilityProxy\n * @dev This contract combines an upgradeability proxy with an authorization\n * mechanism for administrative tasks.\n * All external functions in this contract must be guarded by the\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\n * feature proposal that would enable this to be done automatically.\n */\ncontract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\n  /**\n   * @dev Emitted when the administration has been transferred.\n   * @param previousAdmin Address of the previous admin.\n   * @param newAdmin Address of the new admin.\n   */\n  event AdminChanged(address previousAdmin, address newAdmin);\n\n  /**\n   * @dev Storage slot with the admin of the contract.\n   * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n   * validated in the constructor.\n   */\n  bytes32 internal constant ADMIN_SLOT =\n    0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n  /**\n   * @dev Modifier to check whether the `msg.sender` is the admin.\n   * If it is, it will run the function. Otherwise, it will delegate the call\n   * to the implementation.\n   */\n  modifier ifAdmin() {\n    if (msg.sender == _admin()) {\n      _;\n    } else {\n      _fallback();\n    }\n  }\n\n  /**\n   * @return The address of the proxy admin.\n   */\n  function admin() external ifAdmin returns (address) {\n    return _admin();\n  }\n\n  /**\n   * @return The address of the implementation.\n   */\n  function implementation() external ifAdmin returns (address) {\n    return _implementation();\n  }\n\n  /**\n   * @dev Changes the admin of the proxy.\n   * Only the current admin can call this function.\n   * @param newAdmin Address to transfer proxy administration to.\n   */\n  function changeAdmin(address newAdmin) external ifAdmin {\n    require(newAdmin != address(0), 'Cannot change the admin of a proxy to the zero address');\n    emit AdminChanged(_admin(), newAdmin);\n    _setAdmin(newAdmin);\n  }\n\n  /**\n   * @dev Upgrade the backing implementation of the proxy.\n   * Only the admin can call this function.\n   * @param newImplementation Address of the new implementation.\n   */\n  function upgradeTo(address newImplementation) external ifAdmin {\n    _upgradeTo(newImplementation);\n  }\n\n  /**\n   * @dev Upgrade the backing implementation of the proxy and call a function\n   * on the new implementation.\n   * This is useful to initialize the proxied contract.\n   * @param newImplementation Address of the new implementation.\n   * @param data Data to send as msg.data in the low level call.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   */\n  function upgradeToAndCall(\n    address newImplementation,\n    bytes calldata data\n  ) external payable ifAdmin {\n    _upgradeTo(newImplementation);\n    (bool success, ) = newImplementation.delegatecall(data);\n    require(success);\n  }\n\n  /**\n   * @return adm The admin slot.\n   */\n  function _admin() internal view returns (address adm) {\n    bytes32 slot = ADMIN_SLOT;\n    //solium-disable-next-line\n    assembly {\n      adm := sload(slot)\n    }\n  }\n\n  /**\n   * @dev Sets the address of the proxy admin.\n   * @param newAdmin Address of the new proxy admin.\n   */\n  function _setAdmin(address newAdmin) internal {\n    bytes32 slot = ADMIN_SLOT;\n    //solium-disable-next-line\n    assembly {\n      sstore(slot, newAdmin)\n    }\n  }\n\n  /**\n   * @dev Only fall back when the sender is not the admin.\n   */\n  function _willFallback() internal virtual override {\n    require(msg.sender != _admin(), 'Cannot call fallback function from the proxy admin');\n    super._willFallback();\n  }\n}\n"},"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './Proxy.sol';\nimport '../contracts/Address.sol';\n\n/**\n * @title BaseUpgradeabilityProxy\n * @dev This contract implements a proxy that allows to change the\n * implementation address to which it will delegate.\n * Such a change is called an implementation upgrade.\n */\ncontract BaseUpgradeabilityProxy is Proxy {\n  /**\n   * @dev Emitted when the implementation is upgraded.\n   * @param implementation Address of the new implementation.\n   */\n  event Upgraded(address indexed implementation);\n\n  /**\n   * @dev Storage slot with the address of the current implementation.\n   * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n   * validated in the constructor.\n   */\n  bytes32 internal constant IMPLEMENTATION_SLOT =\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n  /**\n   * @dev Returns the current implementation.\n   * @return impl Address of the current implementation\n   */\n  function _implementation() internal view override returns (address impl) {\n    bytes32 slot = IMPLEMENTATION_SLOT;\n    //solium-disable-next-line\n    assembly {\n      impl := sload(slot)\n    }\n  }\n\n  /**\n   * @dev Upgrades the proxy to a new implementation.\n   * @param newImplementation Address of the new implementation.\n   */\n  function _upgradeTo(address newImplementation) internal {\n    _setImplementation(newImplementation);\n    emit Upgraded(newImplementation);\n  }\n\n  /**\n   * @dev Sets the implementation address of the proxy.\n   * @param newImplementation Address of the new implementation.\n   */\n  function _setImplementation(address newImplementation) internal {\n    require(\n      Address.isContract(newImplementation),\n      'Cannot set a proxy implementation to a non-contract address'\n    );\n\n    bytes32 slot = IMPLEMENTATION_SLOT;\n\n    //solium-disable-next-line\n    assembly {\n      sstore(slot, newImplementation)\n    }\n  }\n}\n"},"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title Initializable\n *\n * @dev Helper contract to support initializer functions. To use it, replace\n * the constructor with a function that has the `initializer` modifier.\n * WARNING: Unlike constructors, initializer functions must be manually\n * invoked. This applies both to deploying an Initializable contract, as well\n * as extending an Initializable contract via inheritance.\n * WARNING: When used with inheritance, manual care must be taken to not invoke\n * a parent initializer twice, or ensure that all initializers are idempotent,\n * because this is not dealt with automatically as with constructors.\n */\ncontract Initializable {\n  /**\n   * @dev Indicates that the contract has been initialized.\n   */\n  bool private initialized;\n\n  /**\n   * @dev Indicates that the contract is in the process of being initialized.\n   */\n  bool private initializing;\n\n  /**\n   * @dev Modifier to use in the initializer function of a contract.\n   */\n  modifier initializer() {\n    require(\n      initializing || isConstructor() || !initialized,\n      'Contract instance has already been initialized'\n    );\n\n    bool isTopLevelCall = !initializing;\n    if (isTopLevelCall) {\n      initializing = true;\n      initialized = true;\n    }\n\n    _;\n\n    if (isTopLevelCall) {\n      initializing = false;\n    }\n  }\n\n  /// @dev Returns true if and only if the function is running in the constructor\n  function isConstructor() private view returns (bool) {\n    // extcodesize checks the size of the code stored in an address, and\n    // address returns the current address. Since the code is still not\n    // deployed when running a constructor, any checks on its code size will\n    // yield zero, making it an effective way to detect if a contract is\n    // under construction or not.\n    uint256 cs;\n    //solium-disable-next-line\n    assembly {\n      cs := extcodesize(address())\n    }\n    return cs == 0;\n  }\n\n  // Reserved storage space to allow for layout changes in the future.\n  uint256[50] private ______gap;\n}\n"},"contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './BaseAdminUpgradeabilityProxy.sol';\nimport './InitializableUpgradeabilityProxy.sol';\n\n/**\n * @title InitializableAdminUpgradeabilityProxy\n * @dev Extends from BaseAdminUpgradeabilityProxy with an initializer for\n * initializing the implementation, admin, and init data.\n */\ncontract InitializableAdminUpgradeabilityProxy is\n  BaseAdminUpgradeabilityProxy,\n  InitializableUpgradeabilityProxy\n{\n  /**\n   * Contract initializer.\n   * @param logic address of the initial implementation.\n   * @param admin Address of the proxy administrator.\n   * @param data Data to send as msg.data to the implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   */\n  function initialize(address logic, address admin, bytes memory data) public payable {\n    require(_implementation() == address(0));\n    InitializableUpgradeabilityProxy.initialize(logic, data);\n    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));\n    _setAdmin(admin);\n  }\n\n  /**\n   * @dev Only fall back when the sender is not the admin.\n   */\n  function _willFallback() internal override(BaseAdminUpgradeabilityProxy, Proxy) {\n    BaseAdminUpgradeabilityProxy._willFallback();\n  }\n}\n"},"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './BaseUpgradeabilityProxy.sol';\n\n/**\n * @title InitializableUpgradeabilityProxy\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\n * implementation and init data.\n */\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\n  /**\n   * @dev Contract initializer.\n   * @param _logic Address of the initial implementation.\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   */\n  function initialize(address _logic, bytes memory _data) public payable {\n    require(_implementation() == address(0));\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\n    _setImplementation(_logic);\n    if (_data.length > 0) {\n      (bool success, ) = _logic.delegatecall(_data);\n      require(success);\n    }\n  }\n}\n"},"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title Proxy\n * @dev Implements delegation of calls to other contracts, with proper\n * forwarding of return values and bubbling of failures.\n * It defines a fallback function that delegates all calls to the address\n * returned by the abstract _implementation() internal function.\n */\nabstract contract Proxy {\n  /**\n   * @dev Fallback function.\n   * Will run if no other function in the contract matches the call data.\n   * Implemented entirely in `_fallback`.\n   */\n  fallback() external payable {\n    _fallback();\n  }\n\n  /**\n   * @return The Address of the implementation.\n   */\n  function _implementation() internal view virtual returns (address);\n\n  /**\n   * @dev Delegates execution to an implementation contract.\n   * This is a low level function that doesn't return to its internal call site.\n   * It will return to the external caller whatever the implementation returns.\n   * @param implementation Address to delegate.\n   */\n  function _delegate(address implementation) internal {\n    //solium-disable-next-line\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 Function that is run as the first thing in the fallback function.\n   * Can be redefined in derived contracts to add functionality.\n   * Redefinitions must call super._willFallback().\n   */\n  function _willFallback() internal virtual {}\n\n  /**\n   * @dev fallback implementation.\n   * Extracted to enable manual triggering.\n   */\n  function _fallback() internal {\n    _willFallback();\n    _delegate(_implementation());\n  }\n}\n"},"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './BaseUpgradeabilityProxy.sol';\n\n/**\n * @title UpgradeabilityProxy\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\n * implementation and init data.\n */\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\n  /**\n   * @dev Contract constructor.\n   * @param _logic Address of the initial implementation.\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   */\n  constructor(address _logic, bytes memory _data) payable {\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\n    _setImplementation(_logic);\n    if (_data.length > 0) {\n      (bool success, ) = _logic.delegatecall(_data);\n      require(success);\n    }\n  }\n}\n"},"contracts/dependencies/weth/WETH9.sol":{"content":"// Copyright (C) 2015, 2016, 2017 Dapphub\n\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\npragma solidity ^0.8.10;\n\ncontract WETH9 {\n  string public name = 'Wrapped Ether';\n  string public symbol = 'WETH';\n  uint8 public decimals = 18;\n\n  event Approval(address indexed src, address indexed guy, uint256 wad);\n  event Transfer(address indexed src, address indexed dst, uint256 wad);\n  event Deposit(address indexed dst, uint256 wad);\n  event Withdrawal(address indexed src, uint256 wad);\n\n  mapping(address => uint256) public balanceOf;\n  mapping(address => mapping(address => uint256)) public allowance;\n\n  receive() external payable {\n    deposit();\n  }\n\n  function deposit() public payable {\n    balanceOf[msg.sender] += msg.value;\n    emit Deposit(msg.sender, msg.value);\n  }\n\n  function withdraw(uint256 wad) public {\n    require(balanceOf[msg.sender] >= wad);\n    balanceOf[msg.sender] -= wad;\n    payable(msg.sender).transfer(wad);\n    emit Withdrawal(msg.sender, wad);\n  }\n\n  function totalSupply() public view returns (uint256) {\n    return address(this).balance;\n  }\n\n  function approve(address guy, uint256 wad) public returns (bool) {\n    allowance[msg.sender][guy] = wad;\n    emit Approval(msg.sender, guy, wad);\n    return true;\n  }\n\n  function transfer(address dst, uint256 wad) public returns (bool) {\n    return transferFrom(msg.sender, dst, wad);\n  }\n\n  function transferFrom(address src, address dst, uint256 wad) public returns (bool) {\n    require(balanceOf[src] >= wad);\n\n    if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) {\n      require(allowance[src][msg.sender] >= wad);\n      allowance[src][msg.sender] -= wad;\n    }\n\n    balanceOf[src] -= wad;\n    balanceOf[dst] += wad;\n\n    emit Transfer(src, dst, wad);\n\n    return true;\n  }\n}\n\n/*\n                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n\n*/\n"},"contracts/deployments/ReservesSetupHelper.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {PoolConfigurator} from '../protocol/pool/PoolConfigurator.sol';\nimport {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';\n\n/**\n * @title ReservesSetupHelper\n * @author Aave\n * @notice Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.\n * @dev The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract.\n */\ncontract ReservesSetupHelper is Ownable {\n  struct ConfigureReserveInput {\n    address asset;\n    uint256 baseLTV;\n    uint256 liquidationThreshold;\n    uint256 liquidationBonus;\n    uint256 reserveFactor;\n    uint256 borrowCap;\n    uint256 supplyCap;\n    bool stableBorrowingEnabled;\n    bool borrowingEnabled;\n    bool flashLoanEnabled;\n  }\n\n  /**\n   * @notice External function called by the owner account to setup the assets risk parameters in batch.\n   * @dev The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function\n   * @param configurator The address of PoolConfigurator contract\n   * @param inputParams An array of ConfigureReserveInput struct that contains the assets and their risk parameters\n   */\n  function configureReserves(\n    PoolConfigurator configurator,\n    ConfigureReserveInput[] calldata inputParams\n  ) external onlyOwner {\n    for (uint256 i = 0; i < inputParams.length; i++) {\n      configurator.configureReserveAsCollateral(\n        inputParams[i].asset,\n        inputParams[i].baseLTV,\n        inputParams[i].liquidationThreshold,\n        inputParams[i].liquidationBonus\n      );\n\n      if (inputParams[i].borrowingEnabled) {\n        configurator.setReserveBorrowing(inputParams[i].asset, true);\n\n        configurator.setBorrowCap(inputParams[i].asset, inputParams[i].borrowCap);\n        configurator.setReserveStableRateBorrowing(\n          inputParams[i].asset,\n          inputParams[i].stableBorrowingEnabled\n        );\n      }\n      configurator.setReserveFlashLoaning(inputParams[i].asset, inputParams[i].flashLoanEnabled);\n      configurator.setSupplyCap(inputParams[i].asset, inputParams[i].supplyCap);\n      configurator.setReserveFactor(inputParams[i].asset, inputParams[i].reserveFactor);\n    }\n  }\n}\n"},"contracts/flashloan/base/FlashLoanReceiverBase.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IFlashLoanReceiver} from '../interfaces/IFlashLoanReceiver.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\n/**\n * @title FlashLoanReceiverBase\n * @author Aave\n * @notice Base contract to develop a flashloan-receiver contract.\n */\nabstract contract FlashLoanReceiverBase is IFlashLoanReceiver {\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\n  IPool public immutable override POOL;\n\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n    POOL = IPool(provider.getPool());\n  }\n}\n"},"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\n/**\n * @title FlashLoanSimpleReceiverBase\n * @author Aave\n * @notice Base contract to develop a flashloan-receiver contract.\n */\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\n  IPool public immutable override POOL;\n\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n    POOL = IPool(provider.getPool());\n  }\n}\n"},"contracts/flashloan/interfaces/IFlashLoanReceiver.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\n/**\n * @title IFlashLoanReceiver\n * @author Aave\n * @notice Defines the basic interface of a flashloan-receiver contract.\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\n */\ninterface IFlashLoanReceiver {\n  /**\n   * @notice Executes an operation after receiving the flash-borrowed assets\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\n   *      enough funds to repay and has approved the Pool to pull the total amount\n   * @param assets The addresses of the flash-borrowed assets\n   * @param amounts The amounts of the flash-borrowed assets\n   * @param premiums The fee of each flash-borrowed asset\n   * @param initiator The address of the flashloan initiator\n   * @param params The byte-encoded params passed when initiating the flashloan\n   * @return True if the execution of the operation succeeds, false otherwise\n   */\n  function executeOperation(\n    address[] calldata assets,\n    uint256[] calldata amounts,\n    uint256[] calldata premiums,\n    address initiator,\n    bytes calldata params\n  ) external returns (bool);\n\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  function POOL() external view returns (IPool);\n}\n"},"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\n/**\n * @title IFlashLoanSimpleReceiver\n * @author Aave\n * @notice Defines the basic interface of a flashloan-receiver contract.\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\n */\ninterface IFlashLoanSimpleReceiver {\n  /**\n   * @notice Executes an operation after receiving the flash-borrowed asset\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\n   *      enough funds to repay and has approved the Pool to pull the total amount\n   * @param asset The address of the flash-borrowed asset\n   * @param amount The amount of the flash-borrowed asset\n   * @param premium The fee of the flash-borrowed asset\n   * @param initiator The address of the flashloan initiator\n   * @param params The byte-encoded params passed when initiating the flashloan\n   * @return True if the execution of the operation succeeds, false otherwise\n   */\n  function executeOperation(\n    address asset,\n    uint256 amount,\n    uint256 premium,\n    address initiator,\n    bytes calldata params\n  ) external returns (bool);\n\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  function POOL() external view returns (IPool);\n}\n"},"contracts/interfaces/IAaveIncentivesController.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IAaveIncentivesController\n * @author Aave\n * @notice Defines the basic interface for an Aave Incentives Controller.\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\n */\ninterface IAaveIncentivesController {\n  /**\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\n   * @param user The address of the user whose asset balance has changed\n   * @param totalSupply The total supply of the asset prior to user balance change\n   * @param userBalance The previous user balance prior to balance change\n   */\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\n}\n"},"contracts/interfaces/IAaveOracle.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPriceOracleGetter} from './IPriceOracleGetter.sol';\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IAaveOracle\n * @author Aave\n * @notice Defines the basic interface for the Aave Oracle\n */\ninterface IAaveOracle is IPriceOracleGetter {\n  /**\n   * @dev Emitted after the base currency is set\n   * @param baseCurrency The base currency of used for price quotes\n   * @param baseCurrencyUnit The unit of the base currency\n   */\n  event BaseCurrencySet(address indexed baseCurrency, uint256 baseCurrencyUnit);\n\n  /**\n   * @dev Emitted after the price source of an asset is updated\n   * @param asset The address of the asset\n   * @param source The price source of the asset\n   */\n  event AssetSourceUpdated(address indexed asset, address indexed source);\n\n  /**\n   * @dev Emitted after the address of fallback oracle is updated\n   * @param fallbackOracle The address of the fallback oracle\n   */\n  event FallbackOracleUpdated(address indexed fallbackOracle);\n\n  /**\n   * @notice Returns the PoolAddressesProvider\n   * @return The address of the PoolAddressesProvider contract\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Sets or replaces price sources of assets\n   * @param assets The addresses of the assets\n   * @param sources The addresses of the price sources\n   */\n  function setAssetSources(address[] calldata assets, address[] calldata sources) external;\n\n  /**\n   * @notice Sets the fallback oracle\n   * @param fallbackOracle The address of the fallback oracle\n   */\n  function setFallbackOracle(address fallbackOracle) external;\n\n  /**\n   * @notice Returns a list of prices from a list of assets addresses\n   * @param assets The list of assets addresses\n   * @return The prices of the given assets\n   */\n  function getAssetsPrices(address[] calldata assets) external view returns (uint256[] memory);\n\n  /**\n   * @notice Returns the address of the source for an asset address\n   * @param asset The address of the asset\n   * @return The address of the source\n   */\n  function getSourceOfAsset(address asset) external view returns (address);\n\n  /**\n   * @notice Returns the address of the fallback oracle\n   * @return The address of the fallback oracle\n   */\n  function getFallbackOracle() external view returns (address);\n}\n"},"contracts/interfaces/IACLManager.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IACLManager\n * @author Aave\n * @notice Defines the basic interface for the ACL Manager\n */\ninterface IACLManager {\n  /**\n   * @notice Returns the contract address of the PoolAddressesProvider\n   * @return The address of the PoolAddressesProvider\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Returns the identifier of the PoolAdmin role\n   * @return The id of the PoolAdmin role\n   */\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the EmergencyAdmin role\n   * @return The id of the EmergencyAdmin role\n   */\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the RiskAdmin role\n   * @return The id of the RiskAdmin role\n   */\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the FlashBorrower role\n   * @return The id of the FlashBorrower role\n   */\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the Bridge role\n   * @return The id of the Bridge role\n   */\n  function BRIDGE_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the AssetListingAdmin role\n   * @return The id of the AssetListingAdmin role\n   */\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Set the role as admin of a specific role.\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\n   * @param role The role to be managed by the admin role\n   * @param adminRole The admin role\n   */\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\n\n  /**\n   * @notice Adds a new admin as PoolAdmin\n   * @param admin The address of the new admin\n   */\n  function addPoolAdmin(address admin) external;\n\n  /**\n   * @notice Removes an admin as PoolAdmin\n   * @param admin The address of the admin to remove\n   */\n  function removePoolAdmin(address admin) external;\n\n  /**\n   * @notice Returns true if the address is PoolAdmin, false otherwise\n   * @param admin The address to check\n   * @return True if the given address is PoolAdmin, false otherwise\n   */\n  function isPoolAdmin(address admin) external view returns (bool);\n\n  /**\n   * @notice Adds a new admin as EmergencyAdmin\n   * @param admin The address of the new admin\n   */\n  function addEmergencyAdmin(address admin) external;\n\n  /**\n   * @notice Removes an admin as EmergencyAdmin\n   * @param admin The address of the admin to remove\n   */\n  function removeEmergencyAdmin(address admin) external;\n\n  /**\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\n   * @param admin The address to check\n   * @return True if the given address is EmergencyAdmin, false otherwise\n   */\n  function isEmergencyAdmin(address admin) external view returns (bool);\n\n  /**\n   * @notice Adds a new admin as RiskAdmin\n   * @param admin The address of the new admin\n   */\n  function addRiskAdmin(address admin) external;\n\n  /**\n   * @notice Removes an admin as RiskAdmin\n   * @param admin The address of the admin to remove\n   */\n  function removeRiskAdmin(address admin) external;\n\n  /**\n   * @notice Returns true if the address is RiskAdmin, false otherwise\n   * @param admin The address to check\n   * @return True if the given address is RiskAdmin, false otherwise\n   */\n  function isRiskAdmin(address admin) external view returns (bool);\n\n  /**\n   * @notice Adds a new address as FlashBorrower\n   * @param borrower The address of the new FlashBorrower\n   */\n  function addFlashBorrower(address borrower) external;\n\n  /**\n   * @notice Removes an address as FlashBorrower\n   * @param borrower The address of the FlashBorrower to remove\n   */\n  function removeFlashBorrower(address borrower) external;\n\n  /**\n   * @notice Returns true if the address is FlashBorrower, false otherwise\n   * @param borrower The address to check\n   * @return True if the given address is FlashBorrower, false otherwise\n   */\n  function isFlashBorrower(address borrower) external view returns (bool);\n\n  /**\n   * @notice Adds a new address as Bridge\n   * @param bridge The address of the new Bridge\n   */\n  function addBridge(address bridge) external;\n\n  /**\n   * @notice Removes an address as Bridge\n   * @param bridge The address of the bridge to remove\n   */\n  function removeBridge(address bridge) external;\n\n  /**\n   * @notice Returns true if the address is Bridge, false otherwise\n   * @param bridge The address to check\n   * @return True if the given address is Bridge, false otherwise\n   */\n  function isBridge(address bridge) external view returns (bool);\n\n  /**\n   * @notice Adds a new admin as AssetListingAdmin\n   * @param admin The address of the new admin\n   */\n  function addAssetListingAdmin(address admin) external;\n\n  /**\n   * @notice Removes an admin as AssetListingAdmin\n   * @param admin The address of the admin to remove\n   */\n  function removeAssetListingAdmin(address admin) external;\n\n  /**\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\n   * @param admin The address to check\n   * @return True if the given address is AssetListingAdmin, false otherwise\n   */\n  function isAssetListingAdmin(address admin) external view returns (bool);\n}\n"},"contracts/interfaces/IAToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\nimport {IInitializableAToken} from './IInitializableAToken.sol';\n\n/**\n * @title IAToken\n * @author Aave\n * @notice Defines the basic interface for an AToken.\n */\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\n  /**\n   * @dev Emitted during the transfer action\n   * @param from The user whose tokens are being transferred\n   * @param to The recipient\n   * @param value The scaled amount being transferred\n   * @param index The next liquidity index of the reserve\n   */\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\n\n  /**\n   * @notice Mints `amount` aTokens to `user`\n   * @param caller The address performing the mint\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\n   * @param amount The amount of tokens getting minted\n   * @param index The next liquidity index of the reserve\n   * @return `true` if the the previous balance of the user was 0\n   */\n  function mint(\n    address caller,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) external returns (bool);\n\n  /**\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\n   * @dev In some instances, the mint event could be emitted from a burn transaction\n   * if the amount to burn is less than the interest that the user accrued\n   * @param from The address from which the aTokens will be burned\n   * @param receiverOfUnderlying The address that will receive the underlying\n   * @param amount The amount being burned\n   * @param index The next liquidity index of the reserve\n   */\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\n\n  /**\n   * @notice Mints aTokens to the reserve treasury\n   * @param amount The amount of tokens getting minted\n   * @param index The next liquidity index of the reserve\n   */\n  function mintToTreasury(uint256 amount, uint256 index) external;\n\n  /**\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\n   * @param from The address getting liquidated, current owner of the aTokens\n   * @param to The recipient\n   * @param value The amount of tokens getting transferred\n   */\n  function transferOnLiquidation(address from, address to, uint256 value) external;\n\n  /**\n   * @notice Transfers the underlying asset to `target`.\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\n   * @param target The recipient of the underlying\n   * @param amount The amount getting transferred\n   */\n  function transferUnderlyingTo(address target, uint256 amount) external;\n\n  /**\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\n   * @param user The user executing the repayment\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\n   * @param amount The amount getting repaid\n   */\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\n\n  /**\n   * @notice Allow passing a signed message to approve spending\n   * @dev implements the permit function as for\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\n   * @param owner The owner of the funds\n   * @param spender The spender\n   * @param value The amount\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\n   * @param v Signature param\n   * @param s Signature param\n   * @param r Signature param\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\n   * @return The address of the underlying asset\n   */\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\n\n  /**\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\n   * @return Address of the Aave treasury\n   */\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\n\n  /**\n   * @notice Get the domain separator for the token\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\n   * @return The domain separator of the token at current chain\n   */\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\n\n  /**\n   * @notice Returns the nonce for owner.\n   * @param owner The address of the owner\n   * @return The nonce of the owner\n   */\n  function nonces(address owner) external view returns (uint256);\n\n  /**\n   * @notice Rescue and transfer tokens locked in this contract\n   * @param token The address of the token\n   * @param to The address of the recipient\n   * @param amount The amount of token to transfer\n   */\n  function rescueTokens(address token, address to, uint256 amount) external;\n}\n"},"contracts/interfaces/ICreditDelegationToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title ICreditDelegationToken\n * @author Aave\n * @notice Defines the basic interface for a token supporting credit delegation.\n */\ninterface ICreditDelegationToken {\n  /**\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\n   * @param fromUser The address of the delegator\n   * @param toUser The address of the delegatee\n   * @param asset The address of the delegated asset\n   * @param amount The amount being delegated\n   */\n  event BorrowAllowanceDelegated(\n    address indexed fromUser,\n    address indexed toUser,\n    address indexed asset,\n    uint256 amount\n  );\n\n  /**\n   * @notice Delegates borrowing power to a user on the specific debt token.\n   * Delegation will still respect the liquidation constraints (even if delegated, a\n   * delegatee cannot force a delegator HF to go below 1)\n   * @param delegatee The address receiving the delegated borrowing power\n   * @param amount The maximum amount being delegated.\n   */\n  function approveDelegation(address delegatee, uint256 amount) external;\n\n  /**\n   * @notice Returns the borrow allowance of the user\n   * @param fromUser The user to giving allowance\n   * @param toUser The user to give allowance to\n   * @return The current allowance of `toUser`\n   */\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\n\n  /**\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\n   * @param delegator The delegator of the credit\n   * @param delegatee The delegatee that can use the credit\n   * @param value The amount to be delegated\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\n   * @param v The V signature param\n   * @param s The S signature param\n   * @param r The R signature param\n   */\n  function delegationWithSig(\n    address delegator,\n    address delegatee,\n    uint256 value,\n    uint256 deadline,\n    uint8 v,\n    bytes32 r,\n    bytes32 s\n  ) external;\n}\n"},"contracts/interfaces/IDefaultInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IDefaultInterestRateStrategy\n * @author Aave\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\n */\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\n  /**\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\n   * @return The optimal usage ratio, expressed in ray.\n   */\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\n\n  /**\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\n   * @return The optimal stable to total debt ratio, expressed in ray.\n   */\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\n\n  /**\n   * @notice Returns the excess usage ratio above the optimal.\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\n   * @return The max excess usage ratio, expressed in ray.\n   */\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\n\n  /**\n   * @notice Returns the excess stable debt ratio above the optimal.\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\n   * @return The max excess stable to total debt ratio, expressed in ray.\n   */\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\n\n  /**\n   * @notice Returns the address of the PoolAddressesProvider\n   * @return The address of the PoolAddressesProvider contract\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Returns the variable rate slope below optimal usage ratio\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\n   * @return The variable rate slope, expressed in ray\n   */\n  function getVariableRateSlope1() external view returns (uint256);\n\n  /**\n   * @notice Returns the variable rate slope above optimal usage ratio\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\n   * @return The variable rate slope, expressed in ray\n   */\n  function getVariableRateSlope2() external view returns (uint256);\n\n  /**\n   * @notice Returns the stable rate slope below optimal usage ratio\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\n   * @return The stable rate slope, expressed in ray\n   */\n  function getStableRateSlope1() external view returns (uint256);\n\n  /**\n   * @notice Returns the stable rate slope above optimal usage ratio\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\n   * @return The stable rate slope, expressed in ray\n   */\n  function getStableRateSlope2() external view returns (uint256);\n\n  /**\n   * @notice Returns the stable rate excess offset\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\n   * @return The stable rate excess offset, expressed in ray\n   */\n  function getStableRateExcessOffset() external view returns (uint256);\n\n  /**\n   * @notice Returns the base stable borrow rate\n   * @return The base stable borrow rate, expressed in ray\n   */\n  function getBaseStableBorrowRate() external view returns (uint256);\n\n  /**\n   * @notice Returns the base variable borrow rate\n   * @return The base variable borrow rate, expressed in ray\n   */\n  function getBaseVariableBorrowRate() external view returns (uint256);\n\n  /**\n   * @notice Returns the maximum variable borrow rate\n   * @return The maximum variable borrow rate, expressed in ray\n   */\n  function getMaxVariableBorrowRate() external view returns (uint256);\n}\n"},"contracts/interfaces/IDelegationToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IDelegationToken\n * @author Aave\n * @notice Implements an interface for tokens with delegation COMP/UNI compatible\n */\ninterface IDelegationToken {\n  /**\n   * @notice Delegate voting power to a delegatee\n   * @param delegatee The address of the delegatee\n   */\n  function delegate(address delegatee) external;\n}\n"},"contracts/interfaces/IERC20WithPermit.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\n\n/**\n * @title IERC20WithPermit\n * @author Aave\n * @notice Interface for the permit function (EIP-2612)\n */\ninterface IERC20WithPermit is IERC20 {\n  /**\n   * @notice Allow passing a signed message to approve spending\n   * @dev implements the permit function as for\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\n   * @param owner The owner of the funds\n   * @param spender The spender\n   * @param value The amount\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\n   * @param v Signature param\n   * @param s Signature param\n   * @param r Signature param\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"},"contracts/interfaces/IInitializableAToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\nimport {IPool} from './IPool.sol';\n\n/**\n * @title IInitializableAToken\n * @author Aave\n * @notice Interface for the initialize function on AToken\n */\ninterface IInitializableAToken {\n  /**\n   * @dev Emitted when an aToken is initialized\n   * @param underlyingAsset The address of the underlying asset\n   * @param pool The address of the associated pool\n   * @param treasury The address of the treasury\n   * @param incentivesController The address of the incentives controller for this aToken\n   * @param aTokenDecimals The decimals of the underlying\n   * @param aTokenName The name of the aToken\n   * @param aTokenSymbol The symbol of the aToken\n   * @param params A set of encoded parameters for additional initialization\n   */\n  event Initialized(\n    address indexed underlyingAsset,\n    address indexed pool,\n    address treasury,\n    address incentivesController,\n    uint8 aTokenDecimals,\n    string aTokenName,\n    string aTokenSymbol,\n    bytes params\n  );\n\n  /**\n   * @notice Initializes the aToken\n   * @param pool The pool contract that is initializing this contract\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\n   * @param incentivesController The smart contract managing potential incentives distribution\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\n   * @param aTokenName The name of the aToken\n   * @param aTokenSymbol The symbol of the aToken\n   * @param params A set of encoded parameters for additional initialization\n   */\n  function initialize(\n    IPool pool,\n    address treasury,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 aTokenDecimals,\n    string calldata aTokenName,\n    string calldata aTokenSymbol,\n    bytes calldata params\n  ) external;\n}\n"},"contracts/interfaces/IInitializableDebtToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\nimport {IPool} from './IPool.sol';\n\n/**\n * @title IInitializableDebtToken\n * @author Aave\n * @notice Interface for the initialize function common between debt tokens\n */\ninterface IInitializableDebtToken {\n  /**\n   * @dev Emitted when a debt token is initialized\n   * @param underlyingAsset The address of the underlying asset\n   * @param pool The address of the associated pool\n   * @param incentivesController The address of the incentives controller for this aToken\n   * @param debtTokenDecimals The decimals of the debt token\n   * @param debtTokenName The name of the debt token\n   * @param debtTokenSymbol The symbol of the debt token\n   * @param params A set of encoded parameters for additional initialization\n   */\n  event Initialized(\n    address indexed underlyingAsset,\n    address indexed pool,\n    address incentivesController,\n    uint8 debtTokenDecimals,\n    string debtTokenName,\n    string debtTokenSymbol,\n    bytes params\n  );\n\n  /**\n   * @notice Initializes the debt token.\n   * @param pool The pool contract that is initializing this contract\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\n   * @param incentivesController The smart contract managing potential incentives distribution\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\n   * @param debtTokenName The name of the token\n   * @param debtTokenSymbol The symbol of the token\n   * @param params A set of encoded parameters for additional initialization\n   */\n  function initialize(\n    IPool pool,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 debtTokenDecimals,\n    string memory debtTokenName,\n    string memory debtTokenSymbol,\n    bytes calldata params\n  ) external;\n}\n"},"contracts/interfaces/IL2Pool.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IL2Pool\n * @author Aave\n * @notice Defines the basic extension interface for an L2 Aave Pool.\n */\ninterface IL2Pool {\n  /**\n   * @notice Calldata efficient wrapper of the supply function on behalf of the caller\n   * @param args Arguments for the supply function packed in one bytes32\n   *    96 bits       16 bits         128 bits      16 bits\n   * | 0-padding | referralCode | shortenedAmount | assetId |\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n   * type(uint256).max\n   * @dev assetId is the index of the asset in the reservesList.\n   */\n  function supply(bytes32 args) external;\n\n  /**\n   * @notice Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller\n   * @param args Arguments for the supply function packed in one bytes32\n   *    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits\n   * | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n   * type(uint256).max\n   * @dev assetId is the index of the asset in the reservesList.\n   * @param r The R parameter of ERC712 permit sig\n   * @param s The S parameter of ERC712 permit sig\n   */\n  function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external;\n\n  /**\n   * @notice Calldata efficient wrapper of the withdraw function, withdrawing to the caller\n   * @param args Arguments for the withdraw function packed in one bytes32\n   *    112 bits       128 bits      16 bits\n   * | 0-padding | shortenedAmount | assetId |\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n   * type(uint256).max\n   * @dev assetId is the index of the asset in the reservesList.\n   * @return The final amount withdrawn\n   */\n  function withdraw(bytes32 args) external returns (uint256);\n\n  /**\n   * @notice Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller\n   * @param args Arguments for the borrow function packed in one bytes32\n   *    88 bits       16 bits             8 bits                 128 bits       16 bits\n   * | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n   * type(uint256).max\n   * @dev assetId is the index of the asset in the reservesList.\n   */\n  function borrow(bytes32 args) external;\n\n  /**\n   * @notice Calldata efficient wrapper of the repay function, repaying on behalf of the caller\n   * @param args Arguments for the repay function packed in one bytes32\n   *    104 bits             8 bits               128 bits       16 bits\n   * | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n   * type(uint256).max\n   * @dev assetId is the index of the asset in the reservesList.\n   * @return The final amount repaid\n   */\n  function repay(bytes32 args) external returns (uint256);\n\n  /**\n   * @notice Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller\n   * @param args Arguments for the repayWithPermit function packed in one bytes32\n   *    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits\n   * | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n   * type(uint256).max\n   * @dev assetId is the index of the asset in the reservesList.\n   * @param r The R parameter of ERC712 permit sig\n   * @param s The S parameter of ERC712 permit sig\n   * @return The final amount repaid\n   */\n  function repayWithPermit(bytes32 args, bytes32 r, bytes32 s) external returns (uint256);\n\n  /**\n   * @notice Calldata efficient wrapper of the repayWithATokens function\n   * @param args Arguments for the repayWithATokens function packed in one bytes32\n   *    104 bits             8 bits               128 bits       16 bits\n   * | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n   * type(uint256).max\n   * @dev assetId is the index of the asset in the reservesList.\n   * @return The final amount repaid\n   */\n  function repayWithATokens(bytes32 args) external returns (uint256);\n\n  /**\n   * @notice Calldata efficient wrapper of the swapBorrowRateMode function\n   * @param args Arguments for the swapBorrowRateMode function packed in one bytes32\n   *    232 bits            8 bits             16 bits\n   * | 0-padding | shortenedInterestRateMode | assetId |\n   * @dev assetId is the index of the asset in the reservesList.\n   */\n  function swapBorrowRateMode(bytes32 args) external;\n\n  /**\n   * @notice Calldata efficient wrapper of the rebalanceStableBorrowRate function\n   * @param args Arguments for the rebalanceStableBorrowRate function packed in one bytes32\n   *    80 bits      160 bits     16 bits\n   * | 0-padding | user address | assetId |\n   * @dev assetId is the index of the asset in the reservesList.\n   */\n  function rebalanceStableBorrowRate(bytes32 args) external;\n\n  /**\n   * @notice Calldata efficient wrapper of the setUserUseReserveAsCollateral function\n   * @param args Arguments for the setUserUseReserveAsCollateral function packed in one bytes32\n   *    239 bits         1 bit       16 bits\n   * | 0-padding | useAsCollateral | assetId |\n   * @dev assetId is the index of the asset in the reservesList.\n   */\n  function setUserUseReserveAsCollateral(bytes32 args) external;\n\n  /**\n   * @notice Calldata efficient wrapper of the liquidationCall function\n   * @param args1 part of the arguments for the liquidationCall function packed in one bytes32\n   *    64 bits      160 bits       16 bits         16 bits\n   * | 0-padding | user address | debtAssetId | collateralAssetId |\n   * @param args2 part of the arguments for the liquidationCall function packed in one bytes32\n   *    127 bits       1 bit             128 bits\n   * | 0-padding | receiveAToken | shortenedDebtToCover |\n   * @dev the shortenedDebtToCover is cast to 256 bits at decode time,\n   * if type(uint128).max the value will be expanded to type(uint256).max\n   */\n  function liquidationCall(bytes32 args1, bytes32 args2) external;\n}\n"},"contracts/interfaces/IPool.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\n\n/**\n * @title IPool\n * @author Aave\n * @notice Defines the basic interface for an Aave Pool.\n */\ninterface IPool {\n  /**\n   * @dev Emitted on mintUnbacked()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address initiating the supply\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\n   * @param amount The amount of supplied assets\n   * @param referralCode The referral code used\n   */\n  event MintUnbacked(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @dev Emitted on backUnbacked()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param backer The address paying for the backing\n   * @param amount The amount added as backing\n   * @param fee The amount paid in fees\n   */\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\n\n  /**\n   * @dev Emitted on supply()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address initiating the supply\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\n   * @param amount The amount supplied\n   * @param referralCode The referral code used\n   */\n  event Supply(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @dev Emitted on withdraw()\n   * @param reserve The address of the underlying asset being withdrawn\n   * @param user The address initiating the withdrawal, owner of aTokens\n   * @param to The address that will receive the underlying\n   * @param amount The amount to be withdrawn\n   */\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\n\n  /**\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\n   * @param reserve The address of the underlying asset being borrowed\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\n   * initiator of the transaction on flashLoan()\n   * @param onBehalfOf The address that will be getting the debt\n   * @param amount The amount borrowed out\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\n   * @param referralCode The referral code used\n   */\n  event Borrow(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    DataTypes.InterestRateMode interestRateMode,\n    uint256 borrowRate,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @dev Emitted on repay()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The beneficiary of the repayment, getting his debt reduced\n   * @param repayer The address of the user initiating the repay(), providing the funds\n   * @param amount The amount repaid\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\n   */\n  event Repay(\n    address indexed reserve,\n    address indexed user,\n    address indexed repayer,\n    uint256 amount,\n    bool useATokens\n  );\n\n  /**\n   * @dev Emitted on swapBorrowRateMode()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address of the user swapping his rate mode\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\n   */\n  event SwapBorrowRateMode(\n    address indexed reserve,\n    address indexed user,\n    DataTypes.InterestRateMode interestRateMode\n  );\n\n  /**\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\n   * @param asset The address of the underlying asset of the reserve\n   * @param totalDebt The total isolation mode debt for the reserve\n   */\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\n\n  /**\n   * @dev Emitted when the user selects a certain asset category for eMode\n   * @param user The address of the user\n   * @param categoryId The category id\n   */\n  event UserEModeSet(address indexed user, uint8 categoryId);\n\n  /**\n   * @dev Emitted on setUserUseReserveAsCollateral()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address of the user enabling the usage as collateral\n   */\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\n\n  /**\n   * @dev Emitted on setUserUseReserveAsCollateral()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address of the user enabling the usage as collateral\n   */\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\n\n  /**\n   * @dev Emitted on rebalanceStableBorrowRate()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address of the user for which the rebalance has been executed\n   */\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\n\n  /**\n   * @dev Emitted on flashLoan()\n   * @param target The address of the flash loan receiver contract\n   * @param initiator The address initiating the flash loan\n   * @param asset The address of the asset being flash borrowed\n   * @param amount The amount flash borrowed\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\n   * @param premium The fee flash borrowed\n   * @param referralCode The referral code used\n   */\n  event FlashLoan(\n    address indexed target,\n    address initiator,\n    address indexed asset,\n    uint256 amount,\n    DataTypes.InterestRateMode interestRateMode,\n    uint256 premium,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @dev Emitted when a borrower is liquidated.\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n   * @param user The address of the borrower getting liquidated\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\n   * @param liquidator The address of the liquidator\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n   * to receive the underlying collateral asset directly\n   */\n  event LiquidationCall(\n    address indexed collateralAsset,\n    address indexed debtAsset,\n    address indexed user,\n    uint256 debtToCover,\n    uint256 liquidatedCollateralAmount,\n    address liquidator,\n    bool receiveAToken\n  );\n\n  /**\n   * @dev Emitted when the state of a reserve is updated.\n   * @param reserve The address of the underlying asset of the reserve\n   * @param liquidityRate The next liquidity rate\n   * @param stableBorrowRate The next stable borrow rate\n   * @param variableBorrowRate The next variable borrow rate\n   * @param liquidityIndex The next liquidity index\n   * @param variableBorrowIndex The next variable borrow index\n   */\n  event ReserveDataUpdated(\n    address indexed reserve,\n    uint256 liquidityRate,\n    uint256 stableBorrowRate,\n    uint256 variableBorrowRate,\n    uint256 liquidityIndex,\n    uint256 variableBorrowIndex\n  );\n\n  /**\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\n   * @param reserve The address of the reserve\n   * @param amountMinted The amount minted to the treasury\n   */\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\n\n  /**\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\n   * @param asset The address of the underlying asset to mint\n   * @param amount The amount to mint\n   * @param onBehalfOf The address that will receive the aTokens\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function mintUnbacked(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external;\n\n  /**\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\n   * @param asset The address of the underlying asset to back\n   * @param amount The amount to back\n   * @param fee The amount paid in fees\n   * @return The backed amount\n   */\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\n\n  /**\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\n   * @param asset The address of the underlying asset to supply\n   * @param amount The amount to be supplied\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   *   is a different wallet\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\n\n  /**\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\n   * @param asset The address of the underlying asset to supply\n   * @param amount The amount to be supplied\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   *   is a different wallet\n   * @param deadline The deadline timestamp that the permit is valid\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   * @param permitV The V parameter of ERC712 permit sig\n   * @param permitR The R parameter of ERC712 permit sig\n   * @param permitS The S parameter of ERC712 permit sig\n   */\n  function supplyWithPermit(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) external;\n\n  /**\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\n   * @param asset The address of the underlying asset to withdraw\n   * @param amount The underlying amount to be withdrawn\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\n   * @param to The address that will receive the underlying, same as msg.sender if the user\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\n   *   different wallet\n   * @return The final amount withdrawn\n   */\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\n\n  /**\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\n   * @param asset The address of the underlying asset to borrow\n   * @param amount The amount to be borrowed\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\n   * if he has been given credit delegation allowance\n   */\n  function borrow(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    uint16 referralCode,\n    address onBehalfOf\n  ) external;\n\n  /**\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\n   * other borrower whose debt should be removed\n   * @return The final amount repaid\n   */\n  function repay(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    address onBehalfOf\n  ) external returns (uint256);\n\n  /**\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\n   * other borrower whose debt should be removed\n   * @param deadline The deadline timestamp that the permit is valid\n   * @param permitV The V parameter of ERC712 permit sig\n   * @param permitR The R parameter of ERC712 permit sig\n   * @param permitS The S parameter of ERC712 permit sig\n   * @return The final amount repaid\n   */\n  function repayWithPermit(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    address onBehalfOf,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) external returns (uint256);\n\n  /**\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\n   * equivalent debt tokens\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\n   * balance is not enough to cover the whole debt\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @return The final amount repaid\n   */\n  function repayWithATokens(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode\n  ) external returns (uint256);\n\n  /**\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\n   * @param asset The address of the underlying asset borrowed\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\n   */\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\n\n  /**\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\n   * - Users can be rebalanced if the following conditions are satisfied:\n   *     1. Usage ratio is above 95%\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\n   * @param asset The address of the underlying asset borrowed\n   * @param user The address of the user to be rebalanced\n   */\n  function rebalanceStableBorrowRate(address asset, address user) external;\n\n  /**\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\n   * @param asset The address of the underlying asset supplied\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\n   */\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\n\n  /**\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n   * @param user The address of the borrower getting liquidated\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n   * to receive the underlying collateral asset directly\n   */\n  function liquidationCall(\n    address collateralAsset,\n    address debtAsset,\n    address user,\n    uint256 debtToCover,\n    bool receiveAToken\n  ) external;\n\n  /**\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\n   * as long as the amount taken plus a fee is returned.\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\n   * into consideration. For further details please visit https://docs.aave.com/developers/\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\n   * @param assets The addresses of the assets being flash-borrowed\n   * @param amounts The amounts of the assets being flash-borrowed\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\n   * @param params Variadic packed params to pass to the receiver as extra information\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function flashLoan(\n    address receiverAddress,\n    address[] calldata assets,\n    uint256[] calldata amounts,\n    uint256[] calldata interestRateModes,\n    address onBehalfOf,\n    bytes calldata params,\n    uint16 referralCode\n  ) external;\n\n  /**\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\n   * as long as the amount taken plus a fee is returned.\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\n   * into consideration. For further details please visit https://docs.aave.com/developers/\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\n   * @param asset The address of the asset being flash-borrowed\n   * @param amount The amount of the asset being flash-borrowed\n   * @param params Variadic packed params to pass to the receiver as extra information\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function flashLoanSimple(\n    address receiverAddress,\n    address asset,\n    uint256 amount,\n    bytes calldata params,\n    uint16 referralCode\n  ) external;\n\n  /**\n   * @notice Returns the user account data across all the reserves\n   * @param user The address of the user\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\n   * @return currentLiquidationThreshold The liquidation threshold of the user\n   * @return ltv The loan to value of The user\n   * @return healthFactor The current health factor of the user\n   */\n  function getUserAccountData(\n    address user\n  )\n    external\n    view\n    returns (\n      uint256 totalCollateralBase,\n      uint256 totalDebtBase,\n      uint256 availableBorrowsBase,\n      uint256 currentLiquidationThreshold,\n      uint256 ltv,\n      uint256 healthFactor\n    );\n\n  /**\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\n   * interest rate strategy\n   * @dev Only callable by the PoolConfigurator contract\n   * @param asset The address of the underlying asset of the reserve\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\n   */\n  function initReserve(\n    address asset,\n    address aTokenAddress,\n    address stableDebtAddress,\n    address variableDebtAddress,\n    address interestRateStrategyAddress\n  ) external;\n\n  /**\n   * @notice Drop a reserve\n   * @dev Only callable by the PoolConfigurator contract\n   * @param asset The address of the underlying asset of the reserve\n   */\n  function dropReserve(address asset) external;\n\n  /**\n   * @notice Updates the address of the interest rate strategy contract\n   * @dev Only callable by the PoolConfigurator contract\n   * @param asset The address of the underlying asset of the reserve\n   * @param rateStrategyAddress The address of the interest rate strategy contract\n   */\n  function setReserveInterestRateStrategyAddress(\n    address asset,\n    address rateStrategyAddress\n  ) external;\n\n  /**\n   * @notice Sets the configuration bitmap of the reserve as a whole\n   * @dev Only callable by the PoolConfigurator contract\n   * @param asset The address of the underlying asset of the reserve\n   * @param configuration The new configuration bitmap\n   */\n  function setConfiguration(\n    address asset,\n    DataTypes.ReserveConfigurationMap calldata configuration\n  ) external;\n\n  /**\n   * @notice Returns the configuration of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The configuration of the reserve\n   */\n  function getConfiguration(\n    address asset\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\n\n  /**\n   * @notice Returns the configuration of the user across all the reserves\n   * @param user The user address\n   * @return The configuration of the user\n   */\n  function getUserConfiguration(\n    address user\n  ) external view returns (DataTypes.UserConfigurationMap memory);\n\n  /**\n   * @notice Returns the normalized income of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The reserve's normalized income\n   */\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the normalized variable debt per unit of asset\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\n   * \"dynamic\" variable index based on time, current stored index and virtual rate at the current\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\n   * combination with variable debt supply/balances.\n   * If using this function externally, consider that is possible to have an increasing normalized\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\n   * (e.g. only updates with non-zero variable debt supply)\n   * @param asset The address of the underlying asset of the reserve\n   * @return The reserve normalized variable debt\n   */\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the state and configuration of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The state and configuration data of the reserve\n   */\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\n\n  /**\n   * @notice Validates and finalizes an aToken transfer\n   * @dev Only callable by the overlying aToken of the `asset`\n   * @param asset The address of the underlying asset of the aToken\n   * @param from The user from which the aTokens are transferred\n   * @param to The user receiving the aTokens\n   * @param amount The amount being transferred/withdrawn\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\n   */\n  function finalizeTransfer(\n    address asset,\n    address from,\n    address to,\n    uint256 amount,\n    uint256 balanceFromBefore,\n    uint256 balanceToBefore\n  ) external;\n\n  /**\n   * @notice Returns the list of the underlying assets of all the initialized reserves\n   * @dev It does not include dropped reserves\n   * @return The addresses of the underlying assets of the initialized reserves\n   */\n  function getReservesList() external view returns (address[] memory);\n\n  /**\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\n   * @return The address of the reserve associated with id\n   */\n  function getReserveAddressById(uint16 id) external view returns (address);\n\n  /**\n   * @notice Returns the PoolAddressesProvider connected to this contract\n   * @return The address of the PoolAddressesProvider\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Updates the protocol fee on the bridging\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\n   */\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\n\n  /**\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\n   * - A part is sent to aToken holders as extra, one time accumulated interest\n   * - A part is collected by the protocol treasury\n   * @dev The total premium is calculated on the total borrowed amount\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\n   * @dev Only callable by the PoolConfigurator contract\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\n   */\n  function updateFlashloanPremiums(\n    uint128 flashLoanPremiumTotal,\n    uint128 flashLoanPremiumToProtocol\n  ) external;\n\n  /**\n   * @notice Configures a new category for the eMode.\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\n   * The category 0 is reserved as it's the default for volatile assets\n   * @param id The id of the category\n   * @param config The configuration of the category\n   */\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\n\n  /**\n   * @notice Returns the data of an eMode category\n   * @param id The id of the category\n   * @return The configuration data of the category\n   */\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\n\n  /**\n   * @notice Allows a user to use the protocol in eMode\n   * @param categoryId The id of the category\n   */\n  function setUserEMode(uint8 categoryId) external;\n\n  /**\n   * @notice Returns the eMode the user is using\n   * @param user The address of the user\n   * @return The eMode id\n   */\n  function getUserEMode(address user) external view returns (uint256);\n\n  /**\n   * @notice Resets the isolation mode total debt of the given asset to zero\n   * @dev It requires the given asset has zero debt ceiling\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\n   */\n  function resetIsolationModeTotalDebt(address asset) external;\n\n  /**\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\n   * @return The percentage of available liquidity to borrow, expressed in bps\n   */\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\n\n  /**\n   * @notice Returns the total fee on flash loans\n   * @return The total fee on flashloans\n   */\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\n\n  /**\n   * @notice Returns the part of the bridge fees sent to protocol\n   * @return The bridge fee sent to the protocol treasury\n   */\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\n\n  /**\n   * @notice Returns the part of the flashloan fees sent to protocol\n   * @return The flashloan fee sent to the protocol treasury\n   */\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\n\n  /**\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\n   * @return The maximum number of reserves supported\n   */\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\n\n  /**\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\n   * @param assets The list of reserves for which the minting needs to be executed\n   */\n  function mintToTreasury(address[] calldata assets) external;\n\n  /**\n   * @notice Rescue and transfer tokens locked in this contract\n   * @param token The address of the token\n   * @param to The address of the recipient\n   * @param amount The amount of token to transfer\n   */\n  function rescueTokens(address token, address to, uint256 amount) external;\n\n  /**\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\n   * @dev Deprecated: Use the `supply` function instead\n   * @param asset The address of the underlying asset to supply\n   * @param amount The amount to be supplied\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   *   is a different wallet\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\n}\n"},"contracts/interfaces/IPoolAddressesProvider.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IPoolAddressesProvider\n * @author Aave\n * @notice Defines the basic interface for a Pool Addresses Provider.\n */\ninterface IPoolAddressesProvider {\n  /**\n   * @dev Emitted when the market identifier is updated.\n   * @param oldMarketId The old id of the market\n   * @param newMarketId The new id of the market\n   */\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\n\n  /**\n   * @dev Emitted when the pool is updated.\n   * @param oldAddress The old address of the Pool\n   * @param newAddress The new address of the Pool\n   */\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the pool configurator is updated.\n   * @param oldAddress The old address of the PoolConfigurator\n   * @param newAddress The new address of the PoolConfigurator\n   */\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the price oracle is updated.\n   * @param oldAddress The old address of the PriceOracle\n   * @param newAddress The new address of the PriceOracle\n   */\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the ACL manager is updated.\n   * @param oldAddress The old address of the ACLManager\n   * @param newAddress The new address of the ACLManager\n   */\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the ACL admin is updated.\n   * @param oldAddress The old address of the ACLAdmin\n   * @param newAddress The new address of the ACLAdmin\n   */\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the price oracle sentinel is updated.\n   * @param oldAddress The old address of the PriceOracleSentinel\n   * @param newAddress The new address of the PriceOracleSentinel\n   */\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the pool data provider is updated.\n   * @param oldAddress The old address of the PoolDataProvider\n   * @param newAddress The new address of the PoolDataProvider\n   */\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when a new proxy is created.\n   * @param id The identifier of the proxy\n   * @param proxyAddress The address of the created proxy contract\n   * @param implementationAddress The address of the implementation contract\n   */\n  event ProxyCreated(\n    bytes32 indexed id,\n    address indexed proxyAddress,\n    address indexed implementationAddress\n  );\n\n  /**\n   * @dev Emitted when a new non-proxied contract address is registered.\n   * @param id The identifier of the contract\n   * @param oldAddress The address of the old contract\n   * @param newAddress The address of the new contract\n   */\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the implementation of the proxy registered with id is updated\n   * @param id The identifier of the contract\n   * @param proxyAddress The address of the proxy contract\n   * @param oldImplementationAddress The address of the old implementation contract\n   * @param newImplementationAddress The address of the new implementation contract\n   */\n  event AddressSetAsProxy(\n    bytes32 indexed id,\n    address indexed proxyAddress,\n    address oldImplementationAddress,\n    address indexed newImplementationAddress\n  );\n\n  /**\n   * @notice Returns the id of the Aave market to which this contract points to.\n   * @return The market id\n   */\n  function getMarketId() external view returns (string memory);\n\n  /**\n   * @notice Associates an id with a specific PoolAddressesProvider.\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\n   * identify and validate multiple Aave markets.\n   * @param newMarketId The market id\n   */\n  function setMarketId(string calldata newMarketId) external;\n\n  /**\n   * @notice Returns an address by its identifier.\n   * @dev The returned address might be an EOA or a contract, potentially proxied\n   * @dev It returns ZERO if there is no registered address with the given id\n   * @param id The id\n   * @return The address of the registered for the specified id\n   */\n  function getAddress(bytes32 id) external view returns (address);\n\n  /**\n   * @notice General function to update the implementation of a proxy registered with\n   * certain `id`. If there is no proxy registered, it will instantiate one and\n   * set as implementation the `newImplementationAddress`.\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\n   * setter function, in order to avoid unexpected consequences\n   * @param id The id\n   * @param newImplementationAddress The address of the new implementation\n   */\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\n\n  /**\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\n   * @param id The id\n   * @param newAddress The address to set\n   */\n  function setAddress(bytes32 id, address newAddress) external;\n\n  /**\n   * @notice Returns the address of the Pool proxy.\n   * @return The Pool proxy address\n   */\n  function getPool() external view returns (address);\n\n  /**\n   * @notice Updates the implementation of the Pool, or creates a proxy\n   * setting the new `pool` implementation when the function is called for the first time.\n   * @param newPoolImpl The new Pool implementation\n   */\n  function setPoolImpl(address newPoolImpl) external;\n\n  /**\n   * @notice Returns the address of the PoolConfigurator proxy.\n   * @return The PoolConfigurator proxy address\n   */\n  function getPoolConfigurator() external view returns (address);\n\n  /**\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\n   */\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\n\n  /**\n   * @notice Returns the address of the price oracle.\n   * @return The address of the PriceOracle\n   */\n  function getPriceOracle() external view returns (address);\n\n  /**\n   * @notice Updates the address of the price oracle.\n   * @param newPriceOracle The address of the new PriceOracle\n   */\n  function setPriceOracle(address newPriceOracle) external;\n\n  /**\n   * @notice Returns the address of the ACL manager.\n   * @return The address of the ACLManager\n   */\n  function getACLManager() external view returns (address);\n\n  /**\n   * @notice Updates the address of the ACL manager.\n   * @param newAclManager The address of the new ACLManager\n   */\n  function setACLManager(address newAclManager) external;\n\n  /**\n   * @notice Returns the address of the ACL admin.\n   * @return The address of the ACL admin\n   */\n  function getACLAdmin() external view returns (address);\n\n  /**\n   * @notice Updates the address of the ACL admin.\n   * @param newAclAdmin The address of the new ACL admin\n   */\n  function setACLAdmin(address newAclAdmin) external;\n\n  /**\n   * @notice Returns the address of the price oracle sentinel.\n   * @return The address of the PriceOracleSentinel\n   */\n  function getPriceOracleSentinel() external view returns (address);\n\n  /**\n   * @notice Updates the address of the price oracle sentinel.\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\n   */\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\n\n  /**\n   * @notice Returns the address of the data provider.\n   * @return The address of the DataProvider\n   */\n  function getPoolDataProvider() external view returns (address);\n\n  /**\n   * @notice Updates the address of the data provider.\n   * @param newDataProvider The address of the new DataProvider\n   */\n  function setPoolDataProvider(address newDataProvider) external;\n}\n"},"contracts/interfaces/IPoolAddressesProviderRegistry.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IPoolAddressesProviderRegistry\n * @author Aave\n * @notice Defines the basic interface for an Aave Pool Addresses Provider Registry.\n */\ninterface IPoolAddressesProviderRegistry {\n  /**\n   * @dev Emitted when a new AddressesProvider is registered.\n   * @param addressesProvider The address of the registered PoolAddressesProvider\n   * @param id The id of the registered PoolAddressesProvider\n   */\n  event AddressesProviderRegistered(address indexed addressesProvider, uint256 indexed id);\n\n  /**\n   * @dev Emitted when an AddressesProvider is unregistered.\n   * @param addressesProvider The address of the unregistered PoolAddressesProvider\n   * @param id The id of the unregistered PoolAddressesProvider\n   */\n  event AddressesProviderUnregistered(address indexed addressesProvider, uint256 indexed id);\n\n  /**\n   * @notice Returns the list of registered addresses providers\n   * @return The list of addresses providers\n   */\n  function getAddressesProvidersList() external view returns (address[] memory);\n\n  /**\n   * @notice Returns the id of a registered PoolAddressesProvider\n   * @param addressesProvider The address of the PoolAddressesProvider\n   * @return The id of the PoolAddressesProvider or 0 if is not registered\n   */\n  function getAddressesProviderIdByAddress(\n    address addressesProvider\n  ) external view returns (uint256);\n\n  /**\n   * @notice Returns the address of a registered PoolAddressesProvider\n   * @param id The id of the market\n   * @return The address of the PoolAddressesProvider with the given id or zero address if it is not registered\n   */\n  function getAddressesProviderAddressById(uint256 id) external view returns (address);\n\n  /**\n   * @notice Registers an addresses provider\n   * @dev The PoolAddressesProvider must not already be registered in the registry\n   * @dev The id must not be used by an already registered PoolAddressesProvider\n   * @param provider The address of the new PoolAddressesProvider\n   * @param id The id for the new PoolAddressesProvider, referring to the market it belongs to\n   */\n  function registerAddressesProvider(address provider, uint256 id) external;\n\n  /**\n   * @notice Removes an addresses provider from the list of registered addresses providers\n   * @param provider The PoolAddressesProvider address\n   */\n  function unregisterAddressesProvider(address provider) external;\n}\n"},"contracts/interfaces/IPoolConfigurator.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';\n\n/**\n * @title IPoolConfigurator\n * @author Aave\n * @notice Defines the basic interface for a Pool configurator.\n */\ninterface IPoolConfigurator {\n  /**\n   * @dev Emitted when a reserve is initialized.\n   * @param asset The address of the underlying asset of the reserve\n   * @param aToken The address of the associated aToken contract\n   * @param stableDebtToken The address of the associated stable rate debt token\n   * @param variableDebtToken The address of the associated variable rate debt token\n   * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve\n   */\n  event ReserveInitialized(\n    address indexed asset,\n    address indexed aToken,\n    address stableDebtToken,\n    address variableDebtToken,\n    address interestRateStrategyAddress\n  );\n\n  /**\n   * @dev Emitted when borrowing is enabled or disabled on a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if borrowing is enabled, false otherwise\n   */\n  event ReserveBorrowing(address indexed asset, bool enabled);\n\n  /**\n   * @dev Emitted when flashloans are enabled or disabled on a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if flashloans are enabled, false otherwise\n   */\n  event ReserveFlashLoaning(address indexed asset, bool enabled);\n\n  /**\n   * @dev Emitted when the collateralization risk parameters for the specified asset are updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param ltv The loan to value of the asset when used as collateral\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\n   */\n  event CollateralConfigurationChanged(\n    address indexed asset,\n    uint256 ltv,\n    uint256 liquidationThreshold,\n    uint256 liquidationBonus\n  );\n\n  /**\n   * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if stable rate borrowing is enabled, false otherwise\n   */\n  event ReserveStableRateBorrowing(address indexed asset, bool enabled);\n\n  /**\n   * @dev Emitted when a reserve is activated or deactivated\n   * @param asset The address of the underlying asset of the reserve\n   * @param active True if reserve is active, false otherwise\n   */\n  event ReserveActive(address indexed asset, bool active);\n\n  /**\n   * @dev Emitted when a reserve is frozen or unfrozen\n   * @param asset The address of the underlying asset of the reserve\n   * @param frozen True if reserve is frozen, false otherwise\n   */\n  event ReserveFrozen(address indexed asset, bool frozen);\n\n  /**\n   * @dev Emitted when a reserve is paused or unpaused\n   * @param asset The address of the underlying asset of the reserve\n   * @param paused True if reserve is paused, false otherwise\n   */\n  event ReservePaused(address indexed asset, bool paused);\n\n  /**\n   * @dev Emitted when a reserve is dropped.\n   * @param asset The address of the underlying asset of the reserve\n   */\n  event ReserveDropped(address indexed asset);\n\n  /**\n   * @dev Emitted when a reserve factor is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldReserveFactor The old reserve factor, expressed in bps\n   * @param newReserveFactor The new reserve factor, expressed in bps\n   */\n  event ReserveFactorChanged(\n    address indexed asset,\n    uint256 oldReserveFactor,\n    uint256 newReserveFactor\n  );\n\n  /**\n   * @dev Emitted when the borrow cap of a reserve is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldBorrowCap The old borrow cap\n   * @param newBorrowCap The new borrow cap\n   */\n  event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);\n\n  /**\n   * @dev Emitted when the supply cap of a reserve is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldSupplyCap The old supply cap\n   * @param newSupplyCap The new supply cap\n   */\n  event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);\n\n  /**\n   * @dev Emitted when the liquidation protocol fee of a reserve is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldFee The old liquidation protocol fee, expressed in bps\n   * @param newFee The new liquidation protocol fee, expressed in bps\n   */\n  event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);\n\n  /**\n   * @dev Emitted when the unbacked mint cap of a reserve is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldUnbackedMintCap The old unbacked mint cap\n   * @param newUnbackedMintCap The new unbacked mint cap\n   */\n  event UnbackedMintCapChanged(\n    address indexed asset,\n    uint256 oldUnbackedMintCap,\n    uint256 newUnbackedMintCap\n  );\n\n  /**\n   * @dev Emitted when the category of an asset in eMode is changed.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldCategoryId The old eMode asset category\n   * @param newCategoryId The new eMode asset category\n   */\n  event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);\n\n  /**\n   * @dev Emitted when a new eMode category is added.\n   * @param categoryId The new eMode category id\n   * @param ltv The ltv for the asset category in eMode\n   * @param liquidationThreshold The liquidationThreshold for the asset category in eMode\n   * @param liquidationBonus The liquidationBonus for the asset category in eMode\n   * @param oracle The optional address of the price oracle specific for this category\n   * @param label A human readable identifier for the category\n   */\n  event EModeCategoryAdded(\n    uint8 indexed categoryId,\n    uint256 ltv,\n    uint256 liquidationThreshold,\n    uint256 liquidationBonus,\n    address oracle,\n    string label\n  );\n\n  /**\n   * @dev Emitted when a reserve interest strategy contract is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldStrategy The address of the old interest strategy contract\n   * @param newStrategy The address of the new interest strategy contract\n   */\n  event ReserveInterestRateStrategyChanged(\n    address indexed asset,\n    address oldStrategy,\n    address newStrategy\n  );\n\n  /**\n   * @dev Emitted when an aToken implementation is upgraded.\n   * @param asset The address of the underlying asset of the reserve\n   * @param proxy The aToken proxy address\n   * @param implementation The new aToken implementation\n   */\n  event ATokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n\n  /**\n   * @dev Emitted when the implementation of a stable debt token is upgraded.\n   * @param asset The address of the underlying asset of the reserve\n   * @param proxy The stable debt token proxy address\n   * @param implementation The new aToken implementation\n   */\n  event StableDebtTokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n\n  /**\n   * @dev Emitted when the implementation of a variable debt token is upgraded.\n   * @param asset The address of the underlying asset of the reserve\n   * @param proxy The variable debt token proxy address\n   * @param implementation The new aToken implementation\n   */\n  event VariableDebtTokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n\n  /**\n   * @dev Emitted when the debt ceiling of an asset is set.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldDebtCeiling The old debt ceiling\n   * @param newDebtCeiling The new debt ceiling\n   */\n  event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);\n\n  /**\n   * @dev Emitted when the the siloed borrowing state for an asset is changed.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldState The old siloed borrowing state\n   * @param newState The new siloed borrowing state\n   */\n  event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);\n\n  /**\n   * @dev Emitted when the bridge protocol fee is updated.\n   * @param oldBridgeProtocolFee The old protocol fee, expressed in bps\n   * @param newBridgeProtocolFee The new protocol fee, expressed in bps\n   */\n  event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);\n\n  /**\n   * @dev Emitted when the total premium on flashloans is updated.\n   * @param oldFlashloanPremiumTotal The old premium, expressed in bps\n   * @param newFlashloanPremiumTotal The new premium, expressed in bps\n   */\n  event FlashloanPremiumTotalUpdated(\n    uint128 oldFlashloanPremiumTotal,\n    uint128 newFlashloanPremiumTotal\n  );\n\n  /**\n   * @dev Emitted when the part of the premium that goes to protocol is updated.\n   * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\n   * @param newFlashloanPremiumToProtocol The new premium, expressed in bps\n   */\n  event FlashloanPremiumToProtocolUpdated(\n    uint128 oldFlashloanPremiumToProtocol,\n    uint128 newFlashloanPremiumToProtocol\n  );\n\n  /**\n   * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\n   * @param asset The address of the underlying asset of the reserve\n   * @param borrowable True if the reserve is borrowable in isolation, false otherwise\n   */\n  event BorrowableInIsolationChanged(address asset, bool borrowable);\n\n  /**\n   * @notice Initializes multiple reserves.\n   * @param input The array of initialization parameters\n   */\n  function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;\n\n  /**\n   * @dev Updates the aToken implementation for the reserve.\n   * @param input The aToken update parameters\n   */\n  function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;\n\n  /**\n   * @notice Updates the stable debt token implementation for the reserve.\n   * @param input The stableDebtToken update parameters\n   */\n  function updateStableDebtToken(\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) external;\n\n  /**\n   * @notice Updates the variable debt token implementation for the asset.\n   * @param input The variableDebtToken update parameters\n   */\n  function updateVariableDebtToken(\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) external;\n\n  /**\n   * @notice Configures borrowing on a reserve.\n   * @dev Can only be disabled (set to false) if stable borrowing is disabled\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if borrowing needs to be enabled, false otherwise\n   */\n  function setReserveBorrowing(address asset, bool enabled) external;\n\n  /**\n   * @notice Configures the reserve collateralization parameters.\n   * @dev All the values are expressed in bps. A value of 10000, results in 100.00%\n   * @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\n   * @param asset The address of the underlying asset of the reserve\n   * @param ltv The loan to value of the asset when used as collateral\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\n   */\n  function configureReserveAsCollateral(\n    address asset,\n    uint256 ltv,\n    uint256 liquidationThreshold,\n    uint256 liquidationBonus\n  ) external;\n\n  /**\n   * @notice Enable or disable stable rate borrowing on a reserve.\n   * @dev Can only be enabled (set to true) if borrowing is enabled\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if stable rate borrowing needs to be enabled, false otherwise\n   */\n  function setReserveStableRateBorrowing(address asset, bool enabled) external;\n\n  /**\n   * @notice Enable or disable flashloans on a reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if flashloans need to be enabled, false otherwise\n   */\n  function setReserveFlashLoaning(address asset, bool enabled) external;\n\n  /**\n   * @notice Activate or deactivate a reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @param active True if the reserve needs to be active, false otherwise\n   */\n  function setReserveActive(address asset, bool active) external;\n\n  /**\n   * @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\n   * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\n   * @param asset The address of the underlying asset of the reserve\n   * @param freeze True if the reserve needs to be frozen, false otherwise\n   */\n  function setReserveFreeze(address asset, bool freeze) external;\n\n  /**\n   * @notice Sets the borrowable in isolation flag for the reserve.\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\n   * borrowed amount will be accumulated in the isolated collateral's total debt exposure\n   * @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\n   * consistency in the debt ceiling calculations\n   * @param asset The address of the underlying asset of the reserve\n   * @param borrowable True if the asset should be borrowable in isolation, false otherwise\n   */\n  function setBorrowableInIsolation(address asset, bool borrowable) external;\n\n  /**\n   * @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\n   * swap interest rate, liquidate, atoken transfers).\n   * @param asset The address of the underlying asset of the reserve\n   * @param paused True if pausing the reserve, false if unpausing\n   */\n  function setReservePause(address asset, bool paused) external;\n\n  /**\n   * @notice Updates the reserve factor of a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newReserveFactor The new reserve factor of the reserve\n   */\n  function setReserveFactor(address asset, uint256 newReserveFactor) external;\n\n  /**\n   * @notice Sets the interest rate strategy of a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newRateStrategyAddress The address of the new interest strategy contract\n   */\n  function setReserveInterestRateStrategyAddress(\n    address asset,\n    address newRateStrategyAddress\n  ) external;\n\n  /**\n   * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\n   * are suspended.\n   * @param paused True if protocol needs to be paused, false otherwise\n   */\n  function setPoolPause(bool paused) external;\n\n  /**\n   * @notice Updates the borrow cap of a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newBorrowCap The new borrow cap of the reserve\n   */\n  function setBorrowCap(address asset, uint256 newBorrowCap) external;\n\n  /**\n   * @notice Updates the supply cap of a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newSupplyCap The new supply cap of the reserve\n   */\n  function setSupplyCap(address asset, uint256 newSupplyCap) external;\n\n  /**\n   * @notice Updates the liquidation protocol fee of reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newFee The new liquidation protocol fee of the reserve, expressed in bps\n   */\n  function setLiquidationProtocolFee(address asset, uint256 newFee) external;\n\n  /**\n   * @notice Updates the unbacked mint cap of reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newUnbackedMintCap The new unbacked mint cap of the reserve\n   */\n  function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;\n\n  /**\n   * @notice Assign an efficiency mode (eMode) category to asset.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newCategoryId The new category id of the asset\n   */\n  function setAssetEModeCategory(address asset, uint8 newCategoryId) external;\n\n  /**\n   * @notice Adds a new efficiency mode (eMode) category.\n   * @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\n   * overcollateralization of the users using this category.\n   * @dev The new ltv and liquidation threshold must be greater than the base\n   * ltvs and liquidation thresholds of all assets within the eMode category\n   * @param categoryId The id of the category to be configured\n   * @param ltv The ltv associated with the category\n   * @param liquidationThreshold The liquidation threshold associated with the category\n   * @param liquidationBonus The liquidation bonus associated with the category\n   * @param oracle The oracle associated with the category\n   * @param label A label identifying the category\n   */\n  function setEModeCategory(\n    uint8 categoryId,\n    uint16 ltv,\n    uint16 liquidationThreshold,\n    uint16 liquidationBonus,\n    address oracle,\n    string calldata label\n  ) external;\n\n  /**\n   * @notice Drops a reserve entirely.\n   * @param asset The address of the reserve to drop\n   */\n  function dropReserve(address asset) external;\n\n  /**\n   * @notice Updates the bridge fee collected by the protocol reserves.\n   * @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps\n   */\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;\n\n  /**\n   * @notice Updates the total flash loan premium.\n   * Total flash loan premium consists of two parts:\n   * - A part is sent to aToken holders as extra balance\n   * - A part is collected by the protocol reserves\n   * @dev Expressed in bps\n   * @dev The premium is calculated on the total amount borrowed\n   * @param newFlashloanPremiumTotal The total flashloan premium\n   */\n  function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;\n\n  /**\n   * @notice Updates the flash loan premium collected by protocol reserves\n   * @dev Expressed in bps\n   * @dev The premium to protocol is calculated on the total flashloan premium\n   * @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury\n   */\n  function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;\n\n  /**\n   * @notice Sets the debt ceiling for an asset.\n   * @param newDebtCeiling The new debt ceiling\n   */\n  function setDebtCeiling(address asset, uint256 newDebtCeiling) external;\n\n  /**\n   * @notice Sets siloed borrowing for an asset\n   * @param siloed The new siloed borrowing state\n   */\n  function setSiloedBorrowing(address asset, bool siloed) external;\n}\n"},"contracts/interfaces/IPoolDataProvider.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IPoolDataProvider\n * @author Aave\n * @notice Defines the basic interface of a PoolDataProvider\n */\ninterface IPoolDataProvider {\n  struct TokenData {\n    string symbol;\n    address tokenAddress;\n  }\n\n  /**\n   * @notice Returns the address for the PoolAddressesProvider contract.\n   * @return The address for the PoolAddressesProvider contract\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Returns the list of the existing reserves in the pool.\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\n   * @return The list of reserves, pairs of symbols and addresses\n   */\n  function getAllReservesTokens() external view returns (TokenData[] memory);\n\n  /**\n   * @notice Returns the list of the existing ATokens in the pool.\n   * @return The list of ATokens, pairs of symbols and addresses\n   */\n  function getAllATokens() external view returns (TokenData[] memory);\n\n  /**\n   * @notice Returns the configuration data of the reserve\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\n   * @param asset The address of the underlying asset of the reserve\n   * @return decimals The number of decimals of the reserve\n   * @return ltv The ltv of the reserve\n   * @return liquidationThreshold The liquidationThreshold of the reserve\n   * @return liquidationBonus The liquidationBonus of the reserve\n   * @return reserveFactor The reserveFactor of the reserve\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\n   * @return isActive True if it is active, false otherwise\n   * @return isFrozen True if it is frozen, false otherwise\n   */\n  function getReserveConfigurationData(\n    address asset\n  )\n    external\n    view\n    returns (\n      uint256 decimals,\n      uint256 ltv,\n      uint256 liquidationThreshold,\n      uint256 liquidationBonus,\n      uint256 reserveFactor,\n      bool usageAsCollateralEnabled,\n      bool borrowingEnabled,\n      bool stableBorrowRateEnabled,\n      bool isActive,\n      bool isFrozen\n    );\n\n  /**\n   * @notice Returns the efficiency mode category of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The eMode id of the reserve\n   */\n  function getReserveEModeCategory(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the caps parameters of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return borrowCap The borrow cap of the reserve\n   * @return supplyCap The supply cap of the reserve\n   */\n  function getReserveCaps(\n    address asset\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\n\n  /**\n   * @notice Returns if the pool is paused\n   * @param asset The address of the underlying asset of the reserve\n   * @return isPaused True if the pool is paused, false otherwise\n   */\n  function getPaused(address asset) external view returns (bool isPaused);\n\n  /**\n   * @notice Returns the siloed borrowing flag\n   * @param asset The address of the underlying asset of the reserve\n   * @return True if the asset is siloed for borrowing\n   */\n  function getSiloedBorrowing(address asset) external view returns (bool);\n\n  /**\n   * @notice Returns the protocol fee on the liquidation bonus\n   * @param asset The address of the underlying asset of the reserve\n   * @return The protocol fee on liquidation\n   */\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the unbacked mint cap of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The unbacked mint cap of the reserve\n   */\n  function getUnbackedMintCap(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the debt ceiling of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The debt ceiling of the reserve\n   */\n  function getDebtCeiling(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the debt ceiling decimals\n   * @return The debt ceiling decimals\n   */\n  function getDebtCeilingDecimals() external pure returns (uint256);\n\n  /**\n   * @notice Returns the reserve data\n   * @param asset The address of the underlying asset of the reserve\n   * @return unbacked The amount of unbacked tokens\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\n   * @return totalAToken The total supply of the aToken\n   * @return totalStableDebt The total stable debt of the reserve\n   * @return totalVariableDebt The total variable debt of the reserve\n   * @return liquidityRate The liquidity rate of the reserve\n   * @return variableBorrowRate The variable borrow rate of the reserve\n   * @return stableBorrowRate The stable borrow rate of the reserve\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\n   * @return liquidityIndex The liquidity index of the reserve\n   * @return variableBorrowIndex The variable borrow index of the reserve\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\n   */\n  function getReserveData(\n    address asset\n  )\n    external\n    view\n    returns (\n      uint256 unbacked,\n      uint256 accruedToTreasuryScaled,\n      uint256 totalAToken,\n      uint256 totalStableDebt,\n      uint256 totalVariableDebt,\n      uint256 liquidityRate,\n      uint256 variableBorrowRate,\n      uint256 stableBorrowRate,\n      uint256 averageStableBorrowRate,\n      uint256 liquidityIndex,\n      uint256 variableBorrowIndex,\n      uint40 lastUpdateTimestamp\n    );\n\n  /**\n   * @notice Returns the total supply of aTokens for a given asset\n   * @param asset The address of the underlying asset of the reserve\n   * @return The total supply of the aToken\n   */\n  function getATokenTotalSupply(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the total debt for a given asset\n   * @param asset The address of the underlying asset of the reserve\n   * @return The total debt for asset\n   */\n  function getTotalDebt(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the user data in a reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @param user The address of the user\n   * @return currentATokenBalance The current AToken balance of the user\n   * @return currentStableDebt The current stable debt of the user\n   * @return currentVariableDebt The current variable debt of the user\n   * @return principalStableDebt The principal stable debt of the user\n   * @return scaledVariableDebt The scaled variable debt of the user\n   * @return stableBorrowRate The stable borrow rate of the user\n   * @return liquidityRate The liquidity rate of the reserve\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\n   *         otherwise\n   */\n  function getUserReserveData(\n    address asset,\n    address user\n  )\n    external\n    view\n    returns (\n      uint256 currentATokenBalance,\n      uint256 currentStableDebt,\n      uint256 currentVariableDebt,\n      uint256 principalStableDebt,\n      uint256 scaledVariableDebt,\n      uint256 stableBorrowRate,\n      uint256 liquidityRate,\n      uint40 stableRateLastUpdated,\n      bool usageAsCollateralEnabled\n    );\n\n  /**\n   * @notice Returns the token addresses of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return aTokenAddress The AToken address of the reserve\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\n   */\n  function getReserveTokensAddresses(\n    address asset\n  )\n    external\n    view\n    returns (\n      address aTokenAddress,\n      address stableDebtTokenAddress,\n      address variableDebtTokenAddress\n    );\n\n  /**\n   * @notice Returns the address of the Interest Rate strategy\n   * @param asset The address of the underlying asset of the reserve\n   * @return irStrategyAddress The address of the Interest Rate strategy\n   */\n  function getInterestRateStrategyAddress(\n    address asset\n  ) external view returns (address irStrategyAddress);\n\n  /**\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\n   * @param asset The address of the underlying asset of the reserve\n   * @return True if FlashLoans are enabled, false otherwise\n   */\n  function getFlashLoanEnabled(address asset) external view returns (bool);\n}\n"},"contracts/interfaces/IPriceOracle.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IPriceOracle\n * @author Aave\n * @notice Defines the basic interface for a Price oracle.\n */\ninterface IPriceOracle {\n  /**\n   * @notice Returns the asset price in the base currency\n   * @param asset The address of the asset\n   * @return The price of the asset\n   */\n  function getAssetPrice(address asset) external view returns (uint256);\n\n  /**\n   * @notice Set the price of the asset\n   * @param asset The address of the asset\n   * @param price The price of the asset\n   */\n  function setAssetPrice(address asset, uint256 price) external;\n}\n"},"contracts/interfaces/IPriceOracleGetter.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IPriceOracleGetter\n * @author Aave\n * @notice Interface for the Aave price oracle.\n */\ninterface IPriceOracleGetter {\n  /**\n   * @notice Returns the base currency address\n   * @dev Address 0x0 is reserved for USD as base currency.\n   * @return Returns the base currency address.\n   */\n  function BASE_CURRENCY() external view returns (address);\n\n  /**\n   * @notice Returns the base currency unit\n   * @dev 1 ether for ETH, 1e8 for USD.\n   * @return Returns the base currency unit.\n   */\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\n\n  /**\n   * @notice Returns the asset price in the base currency\n   * @param asset The address of the asset\n   * @return The price of the asset\n   */\n  function getAssetPrice(address asset) external view returns (uint256);\n}\n"},"contracts/interfaces/IPriceOracleSentinel.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IPriceOracleSentinel\n * @author Aave\n * @notice Defines the basic interface for the PriceOracleSentinel\n */\ninterface IPriceOracleSentinel {\n  /**\n   * @dev Emitted after the sequencer oracle is updated\n   * @param newSequencerOracle The new sequencer oracle\n   */\n  event SequencerOracleUpdated(address newSequencerOracle);\n\n  /**\n   * @dev Emitted after the grace period is updated\n   * @param newGracePeriod The new grace period value\n   */\n  event GracePeriodUpdated(uint256 newGracePeriod);\n\n  /**\n   * @notice Returns the PoolAddressesProvider\n   * @return The address of the PoolAddressesProvider contract\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Returns true if the `borrow` operation is allowed.\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\n   * @return True if the `borrow` operation is allowed, false otherwise.\n   */\n  function isBorrowAllowed() external view returns (bool);\n\n  /**\n   * @notice Returns true if the `liquidation` operation is allowed.\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\n   * @return True if the `liquidation` operation is allowed, false otherwise.\n   */\n  function isLiquidationAllowed() external view returns (bool);\n\n  /**\n   * @notice Updates the address of the sequencer oracle\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\n   */\n  function setSequencerOracle(address newSequencerOracle) external;\n\n  /**\n   * @notice Updates the duration of the grace period\n   * @param newGracePeriod The value of the new grace period duration\n   */\n  function setGracePeriod(uint256 newGracePeriod) external;\n\n  /**\n   * @notice Returns the SequencerOracle\n   * @return The address of the sequencer oracle contract\n   */\n  function getSequencerOracle() external view returns (address);\n\n  /**\n   * @notice Returns the grace period\n   * @return The duration of the grace period\n   */\n  function getGracePeriod() external view returns (uint256);\n}\n"},"contracts/interfaces/IReserveInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\n\n/**\n * @title IReserveInterestRateStrategy\n * @author Aave\n * @notice Interface for the calculation of the interest rates\n */\ninterface IReserveInterestRateStrategy {\n  /**\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\n   * @param params The parameters needed to calculate interest rates\n   * @return liquidityRate The liquidity rate expressed in rays\n   * @return stableBorrowRate The stable borrow rate expressed in rays\n   * @return variableBorrowRate The variable borrow rate expressed in rays\n   */\n  function calculateInterestRates(\n    DataTypes.CalculateInterestRatesParams memory params\n  ) external view returns (uint256, uint256, uint256);\n}\n"},"contracts/interfaces/IScaledBalanceToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IScaledBalanceToken\n * @author Aave\n * @notice Defines the basic interface for a scaled-balance token.\n */\ninterface IScaledBalanceToken {\n  /**\n   * @dev Emitted after the mint action\n   * @param caller The address performing the mint\n   * @param onBehalfOf The address of the user that will receive the minted tokens\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\n   * @param index The next liquidity index of the reserve\n   */\n  event Mint(\n    address indexed caller,\n    address indexed onBehalfOf,\n    uint256 value,\n    uint256 balanceIncrease,\n    uint256 index\n  );\n\n  /**\n   * @dev Emitted after the burn action\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\n   * @param from The address from which the tokens will be burned\n   * @param target The address that will receive the underlying, if any\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\n   * @param index The next liquidity index of the reserve\n   */\n  event Burn(\n    address indexed from,\n    address indexed target,\n    uint256 value,\n    uint256 balanceIncrease,\n    uint256 index\n  );\n\n  /**\n   * @notice Returns the scaled balance of the user.\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\n   * at the moment of the update\n   * @param user The user whose balance is calculated\n   * @return The scaled balance of the user\n   */\n  function scaledBalanceOf(address user) external view returns (uint256);\n\n  /**\n   * @notice Returns the scaled balance of the user and the scaled total supply.\n   * @param user The address of the user\n   * @return The scaled balance of the user\n   * @return The scaled total supply\n   */\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\n\n  /**\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\n   * @return The scaled total supply\n   */\n  function scaledTotalSupply() external view returns (uint256);\n\n  /**\n   * @notice Returns last index interest was accrued to the user's balance\n   * @param user The address of the user\n   * @return The last index interest was accrued to the user's balance, expressed in ray\n   */\n  function getPreviousIndex(address user) external view returns (uint256);\n}\n"},"contracts/interfaces/ISequencerOracle.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title ISequencerOracle\n * @author Aave\n * @notice Defines the basic interface for a Sequencer oracle.\n */\ninterface ISequencerOracle {\n  /**\n   * @notice Returns the health status of the sequencer.\n   * @return roundId The round ID from the aggregator for which the data was retrieved combined with a phase to ensure\n   * that round IDs get larger as time moves forward.\n   * @return answer The answer for the latest round: 0 if the sequencer is up, 1 if it is down.\n   * @return startedAt The timestamp when the round was started.\n   * @return updatedAt The timestamp of the block in which the answer was updated on L1.\n   * @return answeredInRound The round ID of the round in which the answer was computed.\n   */\n  function latestRoundData()\n    external\n    view\n    returns (\n      uint80 roundId,\n      int256 answer,\n      uint256 startedAt,\n      uint256 updatedAt,\n      uint80 answeredInRound\n    );\n}\n"},"contracts/interfaces/IStableDebtToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\n\n/**\n * @title IStableDebtToken\n * @author Aave\n * @notice Defines the interface for the stable debt token\n * @dev It does not inherit from IERC20 to save in code size\n */\ninterface IStableDebtToken is IInitializableDebtToken {\n  /**\n   * @dev Emitted when new stable debt is minted\n   * @param user The address of the user who triggered the minting\n   * @param onBehalfOf The recipient of stable debt tokens\n   * @param amount The amount minted (user entered amount + balance increase from interest)\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\n   * @param newRate The rate of the debt after the minting\n   * @param avgStableRate The next average stable rate after the minting\n   * @param newTotalSupply The next total supply of the stable debt token after the action\n   */\n  event Mint(\n    address indexed user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint256 currentBalance,\n    uint256 balanceIncrease,\n    uint256 newRate,\n    uint256 avgStableRate,\n    uint256 newTotalSupply\n  );\n\n  /**\n   * @dev Emitted when new stable debt is burned\n   * @param from The address from which the debt will be burned\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\n   * @param balanceIncrease The increase in balance since the last action of 'from'\n   * @param avgStableRate The next average stable rate after the burning\n   * @param newTotalSupply The next total supply of the stable debt token after the action\n   */\n  event Burn(\n    address indexed from,\n    uint256 amount,\n    uint256 currentBalance,\n    uint256 balanceIncrease,\n    uint256 avgStableRate,\n    uint256 newTotalSupply\n  );\n\n  /**\n   * @notice Mints debt token to the `onBehalfOf` address.\n   * @dev The resulting rate is the weighted average between the rate of the new debt\n   * and the rate of the previous debt\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\n   * of credit delegate, or same as `onBehalfOf` otherwise\n   * @param onBehalfOf The address receiving the debt tokens\n   * @param amount The amount of debt tokens to mint\n   * @param rate The rate of the debt being minted\n   * @return True if it is the first borrow, false otherwise\n   * @return The total stable debt\n   * @return The average stable borrow rate\n   */\n  function mint(\n    address user,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 rate\n  ) external returns (bool, uint256, uint256);\n\n  /**\n   * @notice Burns debt of `user`\n   * @dev The resulting rate is the weighted average between the rate of the new debt\n   * and the rate of the previous debt\n   * @dev In some instances, a burn transaction will emit a mint event\n   * if the amount to burn is less than the interest the user earned\n   * @param from The address from which the debt will be burned\n   * @param amount The amount of debt tokens getting burned\n   * @return The total stable debt\n   * @return The average stable borrow rate\n   */\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\n\n  /**\n   * @notice Returns the average rate of all the stable rate loans.\n   * @return The average stable rate\n   */\n  function getAverageStableRate() external view returns (uint256);\n\n  /**\n   * @notice Returns the stable rate of the user debt\n   * @param user The address of the user\n   * @return The stable rate of the user\n   */\n  function getUserStableRate(address user) external view returns (uint256);\n\n  /**\n   * @notice Returns the timestamp of the last update of the user\n   * @param user The address of the user\n   * @return The timestamp\n   */\n  function getUserLastUpdated(address user) external view returns (uint40);\n\n  /**\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\n   * @return The principal\n   * @return The total supply\n   * @return The average stable rate\n   * @return The timestamp of the last update\n   */\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\n\n  /**\n   * @notice Returns the timestamp of the last update of the total supply\n   * @return The timestamp\n   */\n  function getTotalSupplyLastUpdated() external view returns (uint40);\n\n  /**\n   * @notice Returns the total supply and the average stable rate\n   * @return The total supply\n   * @return The average rate\n   */\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\n\n  /**\n   * @notice Returns the principal debt balance of the user\n   * @return The debt balance of the user since the last burn/mint action\n   */\n  function principalBalanceOf(address user) external view returns (uint256);\n\n  /**\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\n   * @return The address of the underlying asset\n   */\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\n}\n"},"contracts/interfaces/IVariableDebtToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\n\n/**\n * @title IVariableDebtToken\n * @author Aave\n * @notice Defines the basic interface for a variable debt token.\n */\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\n  /**\n   * @notice Mints debt token to the `onBehalfOf` address\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\n   * of credit delegate, or same as `onBehalfOf` otherwise\n   * @param onBehalfOf The address receiving the debt tokens\n   * @param amount The amount of debt being minted\n   * @param index The variable debt index of the reserve\n   * @return True if the previous balance of the user is 0, false otherwise\n   * @return The scaled total debt of the reserve\n   */\n  function mint(\n    address user,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) external returns (bool, uint256);\n\n  /**\n   * @notice Burns user variable debt\n   * @dev In some instances, a burn transaction will emit a mint event\n   * if the amount to burn is less than the interest that the user accrued\n   * @param from The address from which the debt will be burned\n   * @param amount The amount getting burned\n   * @param index The variable debt index of the reserve\n   * @return The scaled total debt of the reserve\n   */\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\n\n  /**\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\n   * @return The address of the underlying asset\n   */\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\n}\n"},"contracts/misc/AaveOracle.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {AggregatorInterface} from '../dependencies/chainlink/AggregatorInterface.sol';\nimport {Errors} from '../protocol/libraries/helpers/Errors.sol';\nimport {IACLManager} from '../interfaces/IACLManager.sol';\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\nimport {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';\nimport {IAaveOracle} from '../interfaces/IAaveOracle.sol';\n\n/**\n * @title AaveOracle\n * @author Aave\n * @notice Contract to get asset prices, manage price sources and update the fallback oracle\n * - Use of Chainlink Aggregators as first source of price\n * - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle\n * - Owned by the Aave governance\n */\ncontract AaveOracle is IAaveOracle {\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  // Map of asset price sources (asset => priceSource)\n  mapping(address => AggregatorInterface) private assetsSources;\n\n  IPriceOracleGetter private _fallbackOracle;\n  address public immutable override BASE_CURRENCY;\n  uint256 public immutable override BASE_CURRENCY_UNIT;\n\n  /**\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyAssetListingOrPoolAdmins() {\n    _onlyAssetListingOrPoolAdmins();\n    _;\n  }\n\n  /**\n   * @notice Constructor\n   * @param provider The address of the new PoolAddressesProvider\n   * @param assets The addresses of the assets\n   * @param sources The address of the source of each asset\n   * @param fallbackOracle The address of the fallback oracle to use if the data of an\n   *        aggregator is not consistent\n   * @param baseCurrency The base currency used for the price quotes. If USD is used, base currency is 0x0\n   * @param baseCurrencyUnit The unit of the base currency\n   */\n  constructor(\n    IPoolAddressesProvider provider,\n    address[] memory assets,\n    address[] memory sources,\n    address fallbackOracle,\n    address baseCurrency,\n    uint256 baseCurrencyUnit\n  ) {\n    ADDRESSES_PROVIDER = provider;\n    _setFallbackOracle(fallbackOracle);\n    _setAssetsSources(assets, sources);\n    BASE_CURRENCY = baseCurrency;\n    BASE_CURRENCY_UNIT = baseCurrencyUnit;\n    emit BaseCurrencySet(baseCurrency, baseCurrencyUnit);\n  }\n\n  /// @inheritdoc IAaveOracle\n  function setAssetSources(\n    address[] calldata assets,\n    address[] calldata sources\n  ) external override onlyAssetListingOrPoolAdmins {\n    _setAssetsSources(assets, sources);\n  }\n\n  /// @inheritdoc IAaveOracle\n  function setFallbackOracle(\n    address fallbackOracle\n  ) external override onlyAssetListingOrPoolAdmins {\n    _setFallbackOracle(fallbackOracle);\n  }\n\n  /**\n   * @notice Internal function to set the sources for each asset\n   * @param assets The addresses of the assets\n   * @param sources The address of the source of each asset\n   */\n  function _setAssetsSources(address[] memory assets, address[] memory sources) internal {\n    require(assets.length == sources.length, Errors.INCONSISTENT_PARAMS_LENGTH);\n    for (uint256 i = 0; i < assets.length; i++) {\n      assetsSources[assets[i]] = AggregatorInterface(sources[i]);\n      emit AssetSourceUpdated(assets[i], sources[i]);\n    }\n  }\n\n  /**\n   * @notice Internal function to set the fallback oracle\n   * @param fallbackOracle The address of the fallback oracle\n   */\n  function _setFallbackOracle(address fallbackOracle) internal {\n    _fallbackOracle = IPriceOracleGetter(fallbackOracle);\n    emit FallbackOracleUpdated(fallbackOracle);\n  }\n\n  /// @inheritdoc IPriceOracleGetter\n  function getAssetPrice(address asset) public view override returns (uint256) {\n    AggregatorInterface source = assetsSources[asset];\n\n    if (asset == BASE_CURRENCY) {\n      return BASE_CURRENCY_UNIT;\n    } else if (address(source) == address(0)) {\n      return _fallbackOracle.getAssetPrice(asset);\n    } else {\n      int256 price = source.latestAnswer();\n      if (price > 0) {\n        return uint256(price);\n      } else {\n        return _fallbackOracle.getAssetPrice(asset);\n      }\n    }\n  }\n\n  /// @inheritdoc IAaveOracle\n  function getAssetsPrices(\n    address[] calldata assets\n  ) external view override returns (uint256[] memory) {\n    uint256[] memory prices = new uint256[](assets.length);\n    for (uint256 i = 0; i < assets.length; i++) {\n      prices[i] = getAssetPrice(assets[i]);\n    }\n    return prices;\n  }\n\n  /// @inheritdoc IAaveOracle\n  function getSourceOfAsset(address asset) external view override returns (address) {\n    return address(assetsSources[asset]);\n  }\n\n  /// @inheritdoc IAaveOracle\n  function getFallbackOracle() external view returns (address) {\n    return address(_fallbackOracle);\n  }\n\n  function _onlyAssetListingOrPoolAdmins() internal view {\n    IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager());\n    require(\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\n    );\n  }\n}\n"},"contracts/misc/AaveProtocolDataProvider.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\nimport {WadRayMath} from '../protocol/libraries/math/WadRayMath.sol';\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\nimport {IStableDebtToken} from '../interfaces/IStableDebtToken.sol';\nimport {IVariableDebtToken} from '../interfaces/IVariableDebtToken.sol';\nimport {IPool} from '../interfaces/IPool.sol';\nimport {IPoolDataProvider} from '../interfaces/IPoolDataProvider.sol';\n\n/**\n * @title AaveProtocolDataProvider\n * @author Aave\n * @notice Peripheral contract to collect and pre-process information from the Pool.\n */\ncontract AaveProtocolDataProvider is IPoolDataProvider {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using WadRayMath for uint256;\n\n  address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;\n  address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n  /// @inheritdoc IPoolDataProvider\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  /**\n   * @notice Constructor\n   * @param addressesProvider The address of the PoolAddressesProvider contract\n   */\n  constructor(IPoolAddressesProvider addressesProvider) {\n    ADDRESSES_PROVIDER = addressesProvider;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getAllReservesTokens() external view override returns (TokenData[] memory) {\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\n    address[] memory reserves = pool.getReservesList();\n    TokenData[] memory reservesTokens = new TokenData[](reserves.length);\n    for (uint256 i = 0; i < reserves.length; i++) {\n      if (reserves[i] == MKR) {\n        reservesTokens[i] = TokenData({symbol: 'MKR', tokenAddress: reserves[i]});\n        continue;\n      }\n      if (reserves[i] == ETH) {\n        reservesTokens[i] = TokenData({symbol: 'ETH', tokenAddress: reserves[i]});\n        continue;\n      }\n      reservesTokens[i] = TokenData({\n        symbol: IERC20Detailed(reserves[i]).symbol(),\n        tokenAddress: reserves[i]\n      });\n    }\n    return reservesTokens;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getAllATokens() external view override returns (TokenData[] memory) {\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\n    address[] memory reserves = pool.getReservesList();\n    TokenData[] memory aTokens = new TokenData[](reserves.length);\n    for (uint256 i = 0; i < reserves.length; i++) {\n      DataTypes.ReserveData memory reserveData = pool.getReserveData(reserves[i]);\n      aTokens[i] = TokenData({\n        symbol: IERC20Detailed(reserveData.aTokenAddress).symbol(),\n        tokenAddress: reserveData.aTokenAddress\n      });\n    }\n    return aTokens;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveConfigurationData(\n    address asset\n  )\n    external\n    view\n    override\n    returns (\n      uint256 decimals,\n      uint256 ltv,\n      uint256 liquidationThreshold,\n      uint256 liquidationBonus,\n      uint256 reserveFactor,\n      bool usageAsCollateralEnabled,\n      bool borrowingEnabled,\n      bool stableBorrowRateEnabled,\n      bool isActive,\n      bool isFrozen\n    )\n  {\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\n      .getConfiguration(asset);\n\n    (ltv, liquidationThreshold, liquidationBonus, decimals, reserveFactor, ) = configuration\n      .getParams();\n\n    (isActive, isFrozen, borrowingEnabled, stableBorrowRateEnabled, ) = configuration.getFlags();\n\n    usageAsCollateralEnabled = liquidationThreshold != 0;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveEModeCategory(address asset) external view override returns (uint256) {\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\n      .getConfiguration(asset);\n    return configuration.getEModeCategory();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveCaps(\n    address asset\n  ) external view override returns (uint256 borrowCap, uint256 supplyCap) {\n    (borrowCap, supplyCap) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getCaps();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getPaused(address asset) external view override returns (bool isPaused) {\n    (, , , , isPaused) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getFlags();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getSiloedBorrowing(address asset) external view override returns (bool) {\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getSiloedBorrowing();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getLiquidationProtocolFee(address asset) external view override returns (uint256) {\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getLiquidationProtocolFee();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getUnbackedMintCap(address asset) external view override returns (uint256) {\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getUnbackedMintCap();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getDebtCeiling(address asset) external view override returns (uint256) {\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getDebtCeiling();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getDebtCeilingDecimals() external pure override returns (uint256) {\n    return ReserveConfiguration.DEBT_CEILING_DECIMALS;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveData(\n    address asset\n  )\n    external\n    view\n    override\n    returns (\n      uint256 unbacked,\n      uint256 accruedToTreasuryScaled,\n      uint256 totalAToken,\n      uint256 totalStableDebt,\n      uint256 totalVariableDebt,\n      uint256 liquidityRate,\n      uint256 variableBorrowRate,\n      uint256 stableBorrowRate,\n      uint256 averageStableBorrowRate,\n      uint256 liquidityIndex,\n      uint256 variableBorrowIndex,\n      uint40 lastUpdateTimestamp\n    )\n  {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n\n    return (\n      reserve.unbacked,\n      reserve.accruedToTreasury,\n      IERC20Detailed(reserve.aTokenAddress).totalSupply(),\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply(),\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply(),\n      reserve.currentLiquidityRate,\n      reserve.currentVariableBorrowRate,\n      reserve.currentStableBorrowRate,\n      IStableDebtToken(reserve.stableDebtTokenAddress).getAverageStableRate(),\n      reserve.liquidityIndex,\n      reserve.variableBorrowIndex,\n      reserve.lastUpdateTimestamp\n    );\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getATokenTotalSupply(address asset) external view override returns (uint256) {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n    return IERC20Detailed(reserve.aTokenAddress).totalSupply();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getTotalDebt(address asset) external view override returns (uint256) {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n    return\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply() +\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getUserReserveData(\n    address asset,\n    address user\n  )\n    external\n    view\n    override\n    returns (\n      uint256 currentATokenBalance,\n      uint256 currentStableDebt,\n      uint256 currentVariableDebt,\n      uint256 principalStableDebt,\n      uint256 scaledVariableDebt,\n      uint256 stableBorrowRate,\n      uint256 liquidityRate,\n      uint40 stableRateLastUpdated,\n      bool usageAsCollateralEnabled\n    )\n  {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n\n    DataTypes.UserConfigurationMap memory userConfig = IPool(ADDRESSES_PROVIDER.getPool())\n      .getUserConfiguration(user);\n\n    currentATokenBalance = IERC20Detailed(reserve.aTokenAddress).balanceOf(user);\n    currentVariableDebt = IERC20Detailed(reserve.variableDebtTokenAddress).balanceOf(user);\n    currentStableDebt = IERC20Detailed(reserve.stableDebtTokenAddress).balanceOf(user);\n    principalStableDebt = IStableDebtToken(reserve.stableDebtTokenAddress).principalBalanceOf(user);\n    scaledVariableDebt = IVariableDebtToken(reserve.variableDebtTokenAddress).scaledBalanceOf(user);\n    liquidityRate = reserve.currentLiquidityRate;\n    stableBorrowRate = IStableDebtToken(reserve.stableDebtTokenAddress).getUserStableRate(user);\n    stableRateLastUpdated = IStableDebtToken(reserve.stableDebtTokenAddress).getUserLastUpdated(\n      user\n    );\n    usageAsCollateralEnabled = userConfig.isUsingAsCollateral(reserve.id);\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveTokensAddresses(\n    address asset\n  )\n    external\n    view\n    override\n    returns (\n      address aTokenAddress,\n      address stableDebtTokenAddress,\n      address variableDebtTokenAddress\n    )\n  {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n\n    return (\n      reserve.aTokenAddress,\n      reserve.stableDebtTokenAddress,\n      reserve.variableDebtTokenAddress\n    );\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getInterestRateStrategyAddress(\n    address asset\n  ) external view override returns (address irStrategyAddress) {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n\n    return (reserve.interestRateStrategyAddress);\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getFlashLoanEnabled(address asset) external view override returns (bool) {\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\n      .getConfiguration(asset);\n\n    return configuration.getFlashLoanEnabled();\n  }\n}\n"},"contracts/misc/interfaces/IWETH.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\ninterface IWETH {\n  function deposit() external payable;\n\n  function withdraw(uint256) external;\n\n  function approve(address guy, uint256 wad) external returns (bool);\n\n  function transferFrom(address src, address dst, uint256 wad) external returns (bool);\n}\n"},"contracts/misc/L2Encoder.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {SafeCast} from '../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IPool} from '../interfaces/IPool.sol';\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\n\n/**\n * @title L2Encoder\n * @author Aave\n * @notice Helper contract to encode calldata, used to optimize calldata size in L2Pool for transaction cost reduction\n * only indented to help generate calldata for uses/frontends.\n */\ncontract L2Encoder {\n  using SafeCast for uint256;\n  IPool public immutable POOL;\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(IPool pool) {\n    POOL = pool;\n  }\n\n  /**\n   * @notice Encodes supply parameters from standard input to compact representation of 1 bytes32\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n   * @param asset The address of the underlying asset to supply\n   * @param amount The amount to be supplied\n   * @param referralCode referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   * @return compact representation of supply parameters\n   */\n  function encodeSupplyParams(\n    address asset,\n    uint256 amount,\n    uint16 referralCode\n  ) external view returns (bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n\n    uint16 assetId = data.id;\n    uint128 shortenedAmount = amount.toUint128();\n    bytes32 res;\n\n    assembly {\n      res := add(assetId, add(shl(16, shortenedAmount), shl(144, referralCode)))\n    }\n    return res;\n  }\n\n  /**\n   * @notice Encodes supplyWithPermit parameters from standard input to compact representation of 3 bytes32\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n   * @param asset The address of the underlying asset to supply\n   * @param amount The amount to be supplied\n   * @param referralCode referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   * @param deadline The deadline timestamp that the permit is valid\n   * @param permitV The V parameter of ERC712 permit sig\n   * @param permitR The R parameter of ERC712 permit sig\n   * @param permitS The S parameter of ERC712 permit sig\n   * @return compact representation of supplyWithPermit parameters\n   * @return The R parameter of ERC712 permit sig\n   * @return The S parameter of ERC712 permit sig\n   */\n  function encodeSupplyWithPermitParams(\n    address asset,\n    uint256 amount,\n    uint16 referralCode,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) external view returns (bytes32, bytes32, bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n\n    uint16 assetId = data.id;\n    uint128 shortenedAmount = amount.toUint128();\n    uint32 shortenedDeadline = deadline.toUint32();\n\n    bytes32 res;\n    assembly {\n      res := add(\n        assetId,\n        add(\n          shl(16, shortenedAmount),\n          add(shl(144, referralCode), add(shl(160, shortenedDeadline), shl(192, permitV)))\n        )\n      )\n    }\n\n    return (res, permitR, permitS);\n  }\n\n  /**\n   * @notice Encodes withdraw parameters from standard input to compact representation of 1 bytes32\n   * @dev Without a to parameter as the compact calls to L2Pool will use msg.sender as to\n   * @param asset The address of the underlying asset to withdraw\n   * @param amount The underlying amount to be withdrawn\n   * @return compact representation of withdraw parameters\n   */\n  function encodeWithdrawParams(address asset, uint256 amount) external view returns (bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n\n    uint16 assetId = data.id;\n    uint128 shortenedAmount = amount == type(uint256).max ? type(uint128).max : amount.toUint128();\n\n    bytes32 res;\n    assembly {\n      res := add(assetId, shl(16, shortenedAmount))\n    }\n    return res;\n  }\n\n  /**\n   * @notice Encodes borrow parameters from standard input to compact representation of 1 bytes32\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n   * @param asset The address of the underlying asset to borrow\n   * @param amount The amount to be borrowed\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   * @return compact representation of withdraw parameters\n   */\n  function encodeBorrowParams(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    uint16 referralCode\n  ) external view returns (bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n\n    uint16 assetId = data.id;\n    uint128 shortenedAmount = amount.toUint128();\n    uint8 shortenedInterestRateMode = interestRateMode.toUint8();\n    bytes32 res;\n    assembly {\n      res := add(\n        assetId,\n        add(\n          shl(16, shortenedAmount),\n          add(shl(144, shortenedInterestRateMode), shl(152, referralCode))\n        )\n      )\n    }\n    return res;\n  }\n\n  /**\n   * @notice Encodes repay parameters from standard input to compact representation of 1 bytes32\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `interestRateMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @return compact representation of repay parameters\n   */\n  function encodeRepayParams(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode\n  ) public view returns (bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n\n    uint16 assetId = data.id;\n    uint128 shortenedAmount = amount == type(uint256).max ? type(uint128).max : amount.toUint128();\n    uint8 shortenedInterestRateMode = interestRateMode.toUint8();\n\n    bytes32 res;\n    assembly {\n      res := add(assetId, add(shl(16, shortenedAmount), shl(144, shortenedInterestRateMode)))\n    }\n    return res;\n  }\n\n  /**\n   * @notice Encodes repayWithPermit parameters from standard input to compact representation of 3 bytes32\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @param deadline The deadline timestamp that the permit is valid\n   * @param permitV The V parameter of ERC712 permit sig\n   * @param permitR The R parameter of ERC712 permit sig\n   * @param permitS The S parameter of ERC712 permit sig\n   * @return compact representation of repayWithPermit parameters\n   * @return The R parameter of ERC712 permit sig\n   * @return The S parameter of ERC712 permit sig\n   */\n  function encodeRepayWithPermitParams(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) external view returns (bytes32, bytes32, bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n\n    uint16 assetId = data.id;\n    uint128 shortenedAmount = amount == type(uint256).max ? type(uint128).max : amount.toUint128();\n    uint8 shortenedInterestRateMode = interestRateMode.toUint8();\n    uint32 shortenedDeadline = deadline.toUint32();\n\n    bytes32 res;\n    assembly {\n      res := add(\n        assetId,\n        add(\n          shl(16, shortenedAmount),\n          add(\n            shl(144, shortenedInterestRateMode),\n            add(shl(152, shortenedDeadline), shl(184, permitV))\n          )\n        )\n      )\n    }\n    return (res, permitR, permitS);\n  }\n\n  /**\n   * @notice Encodes repay with aToken parameters from standard input to compact representation of 1 bytes32\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @return compact representation of repay with aToken parameters\n   */\n  function encodeRepayWithATokensParams(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode\n  ) external view returns (bytes32) {\n    return encodeRepayParams(asset, amount, interestRateMode);\n  }\n\n  /**\n   * @notice Encodes swap borrow rate mode parameters from standard input to compact representation of 1 bytes32\n   * @param asset The address of the underlying asset borrowed\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\n   * @return compact representation of swap borrow rate mode parameters\n   */\n  function encodeSwapBorrowRateMode(\n    address asset,\n    uint256 interestRateMode\n  ) external view returns (bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n    uint16 assetId = data.id;\n    uint8 shortenedInterestRateMode = interestRateMode.toUint8();\n    bytes32 res;\n    assembly {\n      res := add(assetId, shl(16, shortenedInterestRateMode))\n    }\n    return res;\n  }\n\n  /**\n   * @notice Encodes rebalance stable borrow rate parameters from standard input to compact representation of 1 bytes32\n   * @param asset The address of the underlying asset borrowed\n   * @param user The address of the user to be rebalanced\n   * @return compact representation of rebalance stable borrow rate parameters\n   */\n  function encodeRebalanceStableBorrowRate(\n    address asset,\n    address user\n  ) external view returns (bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n    uint16 assetId = data.id;\n\n    bytes32 res;\n    assembly {\n      res := add(assetId, shl(16, user))\n    }\n    return res;\n  }\n\n  /**\n   * @notice Encodes set user use reserve as collateral parameters from standard input to compact representation of 1 bytes32\n   * @param asset The address of the underlying asset borrowed\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\n   * @return compact representation of set user use reserve as collateral parameters\n   */\n  function encodeSetUserUseReserveAsCollateral(\n    address asset,\n    bool useAsCollateral\n  ) external view returns (bytes32) {\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\n    uint16 assetId = data.id;\n    bytes32 res;\n    assembly {\n      res := add(assetId, shl(16, useAsCollateral))\n    }\n    return res;\n  }\n\n  /**\n   * @notice Encodes liquidation call parameters from standard input to compact representation of 2 bytes32\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n   * @param user The address of the borrower getting liquidated\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n   * to receive the underlying collateral asset directly\n   * @return First half ot compact representation of liquidation call parameters\n   * @return Second half ot compact representation of liquidation call parameters\n   */\n  function encodeLiquidationCall(\n    address collateralAsset,\n    address debtAsset,\n    address user,\n    uint256 debtToCover,\n    bool receiveAToken\n  ) external view returns (bytes32, bytes32) {\n    DataTypes.ReserveData memory collateralData = POOL.getReserveData(collateralAsset);\n    uint16 collateralAssetId = collateralData.id;\n\n    DataTypes.ReserveData memory debtData = POOL.getReserveData(debtAsset);\n    uint16 debtAssetId = debtData.id;\n\n    uint128 shortenedDebtToCover = debtToCover == type(uint256).max\n      ? type(uint128).max\n      : debtToCover.toUint128();\n\n    bytes32 res1;\n    bytes32 res2;\n\n    assembly {\n      res1 := add(add(collateralAssetId, shl(16, debtAssetId)), shl(32, user))\n      res2 := add(shortenedDebtToCover, shl(128, receiveAToken))\n    }\n    return (res1, res2);\n  }\n}\n"},"contracts/misc/ZeroReserveInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\nimport {IDefaultInterestRateStrategy} from '../interfaces/IDefaultInterestRateStrategy.sol';\nimport {IReserveInterestRateStrategy} from '../interfaces/IReserveInterestRateStrategy.sol';\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\n\n/**\n * @title ZeroReserveInterestRateStrategy contract\n * @author Aave\n * @notice Interest Rate Strategy contract, with all parameters zeroed.\n * @dev It returns zero liquidity and borrow rate.\n */\ncontract ZeroReserveInterestRateStrategy is IDefaultInterestRateStrategy {\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public constant OPTIMAL_USAGE_RATIO = 0;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public constant OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = 0;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public constant MAX_EXCESS_USAGE_RATIO = 0;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public constant MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = 0;\n\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  // Base variable borrow rate when usage rate = 0. Expressed in ray\n  uint256 internal constant _baseVariableBorrowRate = 0;\n\n  // Slope of the variable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal constant _variableRateSlope1 = 0;\n\n  // Slope of the variable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal constant _variableRateSlope2 = 0;\n\n  // Slope of the stable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal constant _stableRateSlope1 = 0;\n\n  // Slope of the stable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal constant _stableRateSlope2 = 0;\n\n  // Premium on top of `_variableRateSlope1` for base stable borrowing rate\n  uint256 internal constant _baseStableRateOffset = 0;\n\n  // Additional premium applied to stable rate when stable debt surpass `OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO`\n  uint256 internal constant _stableRateExcessOffset = 0;\n\n  /**\n   * @dev Constructor.\n   * @param provider The address of the PoolAddressesProvider contract\n   */\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getVariableRateSlope1() external pure returns (uint256) {\n    return _variableRateSlope1;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getVariableRateSlope2() external pure returns (uint256) {\n    return _variableRateSlope2;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateSlope1() external pure returns (uint256) {\n    return _stableRateSlope1;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateSlope2() external pure returns (uint256) {\n    return _stableRateSlope2;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateExcessOffset() external pure returns (uint256) {\n    return _stableRateExcessOffset;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getBaseStableBorrowRate() public pure returns (uint256) {\n    return _variableRateSlope1 + _baseStableRateOffset;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getBaseVariableBorrowRate() external pure override returns (uint256) {\n    return _baseVariableBorrowRate;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getMaxVariableBorrowRate() external pure override returns (uint256) {\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\n  }\n\n  /// @inheritdoc IReserveInterestRateStrategy\n  function calculateInterestRates(\n    DataTypes.CalculateInterestRatesParams memory\n  ) public pure override returns (uint256, uint256, uint256) {\n    return (0, 0, 0);\n  }\n}\n"},"contracts/mocks/flashloan/MockFlashLoanReceiver.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {FlashLoanReceiverBase} from '../../flashloan/base/FlashLoanReceiverBase.sol';\nimport {MintableERC20} from '../tokens/MintableERC20.sol';\n\ncontract MockFlashLoanReceiver is FlashLoanReceiverBase {\n  using GPv2SafeERC20 for IERC20;\n\n  event ExecutedWithFail(address[] _assets, uint256[] _amounts, uint256[] _premiums);\n  event ExecutedWithSuccess(address[] _assets, uint256[] _amounts, uint256[] _premiums);\n\n  bool internal _failExecution;\n  uint256 internal _amountToApprove;\n  bool internal _simulateEOA;\n\n  constructor(IPoolAddressesProvider provider) FlashLoanReceiverBase(provider) {}\n\n  function setFailExecutionTransfer(bool fail) public {\n    _failExecution = fail;\n  }\n\n  function setAmountToApprove(uint256 amountToApprove) public {\n    _amountToApprove = amountToApprove;\n  }\n\n  function setSimulateEOA(bool flag) public {\n    _simulateEOA = flag;\n  }\n\n  function getAmountToApprove() public view returns (uint256) {\n    return _amountToApprove;\n  }\n\n  function simulateEOA() public view returns (bool) {\n    return _simulateEOA;\n  }\n\n  function executeOperation(\n    address[] memory assets,\n    uint256[] memory amounts,\n    uint256[] memory premiums,\n    address, // initiator\n    bytes memory // params\n  ) public override returns (bool) {\n    if (_failExecution) {\n      emit ExecutedWithFail(assets, amounts, premiums);\n      return !_simulateEOA;\n    }\n\n    for (uint256 i = 0; i < assets.length; i++) {\n      //mint to this contract the specific amount\n      MintableERC20 token = MintableERC20(assets[i]);\n\n      //check the contract has the specified balance\n      require(\n        amounts[i] <= IERC20(assets[i]).balanceOf(address(this)),\n        'Invalid balance for the contract'\n      );\n\n      uint256 amountToReturn = (_amountToApprove != 0)\n        ? _amountToApprove\n        : amounts[i] + premiums[i];\n      //execution does not fail - mint tokens and return them to the _destination\n\n      token.mint(address(this), premiums[i]);\n\n      IERC20(assets[i]).approve(address(POOL), amountToReturn);\n    }\n\n    emit ExecutedWithSuccess(assets, amounts, premiums);\n\n    return true;\n  }\n}\n"},"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {FlashLoanSimpleReceiverBase} from '../../flashloan/base/FlashLoanSimpleReceiverBase.sol';\nimport {MintableERC20} from '../tokens/MintableERC20.sol';\n\ncontract MockFlashLoanSimpleReceiver is FlashLoanSimpleReceiverBase {\n  using GPv2SafeERC20 for IERC20;\n  using SafeMath for uint256;\n\n  event ExecutedWithFail(address asset, uint256 amount, uint256 premium);\n  event ExecutedWithSuccess(address asset, uint256 amount, uint256 premium);\n\n  bool internal _failExecution;\n  uint256 internal _amountToApprove;\n  bool internal _simulateEOA;\n\n  constructor(IPoolAddressesProvider provider) FlashLoanSimpleReceiverBase(provider) {}\n\n  function setFailExecutionTransfer(bool fail) public {\n    _failExecution = fail;\n  }\n\n  function setAmountToApprove(uint256 amountToApprove) public {\n    _amountToApprove = amountToApprove;\n  }\n\n  function setSimulateEOA(bool flag) public {\n    _simulateEOA = flag;\n  }\n\n  function getAmountToApprove() public view returns (uint256) {\n    return _amountToApprove;\n  }\n\n  function simulateEOA() public view returns (bool) {\n    return _simulateEOA;\n  }\n\n  function executeOperation(\n    address asset,\n    uint256 amount,\n    uint256 premium,\n    address, // initiator\n    bytes memory // params\n  ) public override returns (bool) {\n    if (_failExecution) {\n      emit ExecutedWithFail(asset, amount, premium);\n      return !_simulateEOA;\n    }\n\n    //mint to this contract the specific amount\n    MintableERC20 token = MintableERC20(asset);\n\n    //check the contract has the specified balance\n    require(amount <= IERC20(asset).balanceOf(address(this)), 'Invalid balance for the contract');\n\n    uint256 amountToReturn = (_amountToApprove != 0) ? _amountToApprove : amount.add(premium);\n    //execution does not fail - mint tokens and return them to the _destination\n\n    token.mint(address(this), premium);\n\n    IERC20(asset).approve(address(POOL), amountToReturn);\n\n    emit ExecutedWithSuccess(asset, amount, premium);\n\n    return true;\n  }\n}\n"},"contracts/mocks/helpers/MockIncentivesController.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\n\ncontract MockIncentivesController is IAaveIncentivesController {\n  function handleAction(address, uint256, uint256) external override {}\n}\n"},"contracts/mocks/helpers/MockL2Pool.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {L2Pool} from '../../protocol/pool/L2Pool.sol';\n\ncontract MockL2Pool is L2Pool {\n  function getRevision() internal pure override returns (uint256) {\n    return 0x3;\n  }\n\n  constructor(IPoolAddressesProvider provider) L2Pool(provider) {}\n}\n"},"contracts/mocks/helpers/MockPeripheryContract.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\ncontract MockPeripheryContractV1 {\n  address private _manager;\n  uint256 private _value;\n\n  function initialize(address manager, uint256 value) external {\n    _manager = manager;\n    _value = value;\n  }\n\n  function getManager() external view returns (address) {\n    return _manager;\n  }\n\n  function setManager(address newManager) external {\n    _manager = newManager;\n  }\n}\n\ncontract MockPeripheryContractV2 {\n  address private _manager;\n  uint256 private _value;\n  address private _addressesProvider;\n\n  function initialize(address addressesProvider) external {\n    _addressesProvider = addressesProvider;\n  }\n\n  function getManager() external view returns (address) {\n    return _manager;\n  }\n\n  function setManager(address newManager) external {\n    _manager = newManager;\n  }\n\n  function getAddressesProvider() external view returns (address) {\n    return _addressesProvider;\n  }\n}\n"},"contracts/mocks/helpers/MockPool.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\n\ncontract MockPool {\n  // Reserved storage space to avoid layout collisions.\n  uint256[100] private ______gap;\n\n  address internal _addressesProvider;\n  address[] internal _reserveList;\n\n  function initialize(address provider) external {\n    _addressesProvider = provider;\n  }\n\n  function addReserveToReservesList(address reserve) external {\n    _reserveList.push(reserve);\n  }\n\n  function getReservesList() external view returns (address[] memory) {\n    address[] memory reservesList = new address[](_reserveList.length);\n    for (uint256 i; i < _reserveList.length; i++) {\n      reservesList[i] = _reserveList[i];\n    }\n    return reservesList;\n  }\n}\n\nimport {Pool} from '../../protocol/pool/Pool.sol';\n\ncontract MockPoolInherited is Pool {\n  uint16 internal _maxNumberOfReserves = 128;\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x3;\n  }\n\n  constructor(IPoolAddressesProvider provider) Pool(provider) {}\n\n  function setMaxNumberOfReserves(uint16 newMaxNumberOfReserves) public {\n    _maxNumberOfReserves = newMaxNumberOfReserves;\n  }\n\n  function MAX_NUMBER_RESERVES() public view override returns (uint16) {\n    return _maxNumberOfReserves;\n  }\n\n  function dropReserve(address asset) external override {\n    _reservesList[_reserves[asset].id] = address(0);\n    delete _reserves[asset];\n  }\n}\n"},"contracts/mocks/helpers/MockReserveConfiguration.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {ReserveConfiguration} from '../../protocol/libraries/configuration/ReserveConfiguration.sol';\nimport {DataTypes} from '../../protocol/libraries/types/DataTypes.sol';\n\ncontract MockReserveConfiguration {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  DataTypes.ReserveConfigurationMap public configuration;\n\n  function setLtv(uint256 ltv) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setLtv(ltv);\n    configuration = config;\n  }\n\n  function getLtv() external view returns (uint256) {\n    return configuration.getLtv();\n  }\n\n  function setLiquidationBonus(uint256 bonus) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setLiquidationBonus(bonus);\n    configuration = config;\n  }\n\n  function getLiquidationBonus() external view returns (uint256) {\n    return configuration.getLiquidationBonus();\n  }\n\n  function setLiquidationThreshold(uint256 threshold) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setLiquidationThreshold(threshold);\n    configuration = config;\n  }\n\n  function getLiquidationThreshold() external view returns (uint256) {\n    return configuration.getLiquidationThreshold();\n  }\n\n  function setDecimals(uint256 decimals) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setDecimals(decimals);\n    configuration = config;\n  }\n\n  function getDecimals() external view returns (uint256) {\n    return configuration.getDecimals();\n  }\n\n  function setFrozen(bool frozen) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setFrozen(frozen);\n    configuration = config;\n  }\n\n  function getFrozen() external view returns (bool) {\n    return configuration.getFrozen();\n  }\n\n  function setBorrowingEnabled(bool enabled) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setBorrowingEnabled(enabled);\n    configuration = config;\n  }\n\n  function getBorrowingEnabled() external view returns (bool) {\n    return configuration.getBorrowingEnabled();\n  }\n\n  function setStableRateBorrowingEnabled(bool enabled) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setStableRateBorrowingEnabled(enabled);\n    configuration = config;\n  }\n\n  function getStableRateBorrowingEnabled() external view returns (bool) {\n    return configuration.getStableRateBorrowingEnabled();\n  }\n\n  function setReserveFactor(uint256 reserveFactor) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setReserveFactor(reserveFactor);\n    configuration = config;\n  }\n\n  function getReserveFactor() external view returns (uint256) {\n    return configuration.getReserveFactor();\n  }\n\n  function setBorrowCap(uint256 borrowCap) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setBorrowCap(borrowCap);\n    configuration = config;\n  }\n\n  function getBorrowCap() external view returns (uint256) {\n    return configuration.getBorrowCap();\n  }\n\n  function getEModeCategory() external view returns (uint256) {\n    return configuration.getEModeCategory();\n  }\n\n  function setEModeCategory(uint256 categoryId) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setEModeCategory(categoryId);\n    configuration = config;\n  }\n\n  function setFlashLoanEnabled(bool enabled) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setFlashLoanEnabled(enabled);\n    configuration = config;\n  }\n\n  function getFlashLoanEnabled() external view returns (bool) {\n    return configuration.getFlashLoanEnabled();\n  }\n\n  function setSupplyCap(uint256 supplyCap) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setSupplyCap(supplyCap);\n    configuration = config;\n  }\n\n  function getSupplyCap() external view returns (uint256) {\n    return configuration.getSupplyCap();\n  }\n\n  function setLiquidationProtocolFee(uint256 liquidationProtocolFee) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setLiquidationProtocolFee(liquidationProtocolFee);\n    configuration = config;\n  }\n\n  function getLiquidationProtocolFee() external view returns (uint256) {\n    return configuration.getLiquidationProtocolFee();\n  }\n\n  function setUnbackedMintCap(uint256 unbackedMintCap) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setUnbackedMintCap(unbackedMintCap);\n    configuration = config;\n  }\n\n  function getUnbackedMintCap() external view returns (uint256) {\n    return configuration.getUnbackedMintCap();\n  }\n\n  function getFlags() external view returns (bool, bool, bool, bool, bool) {\n    return configuration.getFlags();\n  }\n\n  function getParams()\n    external\n    view\n    returns (uint256, uint256, uint256, uint256, uint256, uint256)\n  {\n    return configuration.getParams();\n  }\n\n  function getCaps() external view returns (uint256, uint256) {\n    return configuration.getCaps();\n  }\n}\n"},"contracts/mocks/helpers/SelfDestructTransfer.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\ncontract SelfdestructTransfer {\n  function destroyAndTransfer(address payable to) external payable {\n    selfdestruct(to);\n  }\n}\n"},"contracts/mocks/oracle/CLAggregators/MockAggregator.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\ncontract MockAggregator {\n  int256 private _latestAnswer;\n\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\n\n  constructor(int256 initialAnswer) {\n    _latestAnswer = initialAnswer;\n    emit AnswerUpdated(initialAnswer, 0, block.timestamp);\n  }\n\n  function latestAnswer() external view returns (int256) {\n    return _latestAnswer;\n  }\n\n  function getTokenType() external pure returns (uint256) {\n    return 1;\n  }\n\n  function decimals() external pure returns (uint8) {\n    return 8;\n  }\n}\n"},"contracts/mocks/oracle/PriceOracle.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IPriceOracle} from '../../interfaces/IPriceOracle.sol';\n\ncontract PriceOracle is IPriceOracle {\n  // Map of asset prices (asset => price)\n  mapping(address => uint256) internal prices;\n\n  uint256 internal ethPriceUsd;\n\n  event AssetPriceUpdated(address asset, uint256 price, uint256 timestamp);\n  event EthPriceUpdated(uint256 price, uint256 timestamp);\n\n  function getAssetPrice(address asset) external view override returns (uint256) {\n    return prices[asset];\n  }\n\n  function setAssetPrice(address asset, uint256 price) external override {\n    prices[asset] = price;\n    emit AssetPriceUpdated(asset, price, block.timestamp);\n  }\n\n  function getEthUsdPrice() external view returns (uint256) {\n    return ethPriceUsd;\n  }\n\n  function setEthUsdPrice(uint256 price) external {\n    ethPriceUsd = price;\n    emit EthPriceUpdated(price, block.timestamp);\n  }\n}\n"},"contracts/mocks/oracle/SequencerOracle.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\nimport {ISequencerOracle} from '../../interfaces/ISequencerOracle.sol';\n\ncontract SequencerOracle is ISequencerOracle, Ownable {\n  bool internal _isDown;\n  uint256 internal _timestampGotUp;\n\n  /**\n   * @dev Constructor.\n   * @param owner The owner address of this contract\n   */\n  constructor(address owner) {\n    transferOwnership(owner);\n  }\n\n  /**\n   * @notice Updates the health status of the sequencer.\n   * @param isDown True if the sequencer is down, false otherwise\n   * @param timestamp The timestamp of last time the sequencer got up\n   */\n  function setAnswer(bool isDown, uint256 timestamp) external onlyOwner {\n    _isDown = isDown;\n    _timestampGotUp = timestamp;\n  }\n\n  /// @inheritdoc ISequencerOracle\n  function latestRoundData()\n    external\n    view\n    override\n    returns (\n      uint80 roundId,\n      int256 answer,\n      uint256 startedAt,\n      uint256 updatedAt,\n      uint80 answeredInRound\n    )\n  {\n    int256 isDown;\n    if (_isDown) {\n      isDown = 1;\n    }\n    return (0, isDown, 0, _timestampGotUp, 0);\n  }\n}\n"},"contracts/mocks/tests/FlashloanAttacker.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {FlashLoanSimpleReceiverBase} from '../../flashloan/base/FlashLoanSimpleReceiverBase.sol';\nimport {MintableERC20} from '../tokens/MintableERC20.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {DataTypes} from '../../protocol/libraries/types/DataTypes.sol';\n\ncontract FlashloanAttacker is FlashLoanSimpleReceiverBase {\n  using GPv2SafeERC20 for IERC20;\n  using SafeMath for uint256;\n\n  IPoolAddressesProvider internal _provider;\n  IPool internal _pool;\n\n  constructor(IPoolAddressesProvider provider) FlashLoanSimpleReceiverBase(provider) {\n    _pool = IPool(provider.getPool());\n  }\n\n  function supplyAsset(address asset, uint256 amount) public {\n    MintableERC20 token = MintableERC20(asset);\n    token.mint(address(this), amount);\n    token.approve(address(_pool), type(uint256).max);\n    _pool.supply(asset, amount, address(this), 0);\n  }\n\n  function _innerBorrow(address asset) internal {\n    DataTypes.ReserveData memory config = _pool.getReserveData(asset);\n    IERC20 token = IERC20(asset);\n    uint256 avail = token.balanceOf(config.aTokenAddress);\n    _pool.borrow(asset, avail, 2, 0, address(this));\n  }\n\n  function executeOperation(\n    address asset,\n    uint256 amount,\n    uint256 premium,\n    address, // initiator\n    bytes memory // params\n  ) public override returns (bool) {\n    MintableERC20 token = MintableERC20(asset);\n    uint256 amountToReturn = amount.add(premium);\n\n    // Also do a normal borrow here in the middle\n    _innerBorrow(asset);\n\n    token.mint(address(this), premium);\n    IERC20(asset).approve(address(POOL), amountToReturn);\n\n    return true;\n  }\n}\n"},"contracts/mocks/tests/MockReserveInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {WadRayMath} from '../../protocol/libraries/math/WadRayMath.sol';\nimport {DataTypes} from '../../protocol/libraries/types/DataTypes.sol';\n\ncontract MockReserveInterestRateStrategy is IDefaultInterestRateStrategy {\n  uint256 public immutable OPTIMAL_USAGE_RATIO;\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n  uint256 internal immutable _baseVariableBorrowRate;\n  uint256 internal immutable _variableRateSlope1;\n  uint256 internal immutable _variableRateSlope2;\n  uint256 internal immutable _stableRateSlope1;\n  uint256 internal immutable _stableRateSlope2;\n\n  // Not used, only defined for interface compatibility\n  uint256 public constant MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = 0;\n  uint256 public constant MAX_EXCESS_USAGE_RATIO = 0;\n  uint256 public constant OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = 0;\n\n  uint256 internal _liquidityRate;\n  uint256 internal _stableBorrowRate;\n  uint256 internal _variableBorrowRate;\n\n  constructor(\n    IPoolAddressesProvider provider,\n    uint256 optimalUsageRatio,\n    uint256 baseVariableBorrowRate,\n    uint256 variableRateSlope1,\n    uint256 variableRateSlope2,\n    uint256 stableRateSlope1,\n    uint256 stableRateSlope2\n  ) {\n    OPTIMAL_USAGE_RATIO = optimalUsageRatio;\n    ADDRESSES_PROVIDER = provider;\n    _baseVariableBorrowRate = baseVariableBorrowRate;\n    _variableRateSlope1 = variableRateSlope1;\n    _variableRateSlope2 = variableRateSlope2;\n    _stableRateSlope1 = stableRateSlope1;\n    _stableRateSlope2 = stableRateSlope2;\n  }\n\n  function setLiquidityRate(uint256 liquidityRate) public {\n    _liquidityRate = liquidityRate;\n  }\n\n  function setStableBorrowRate(uint256 stableBorrowRate) public {\n    _stableBorrowRate = stableBorrowRate;\n  }\n\n  function setVariableBorrowRate(uint256 variableBorrowRate) public {\n    _variableBorrowRate = variableBorrowRate;\n  }\n\n  function calculateInterestRates(\n    DataTypes.CalculateInterestRatesParams memory\n  )\n    external\n    view\n    override\n    returns (uint256 liquidityRate, uint256 stableBorrowRate, uint256 variableBorrowRate)\n  {\n    return (_liquidityRate, _stableBorrowRate, _variableBorrowRate);\n  }\n\n  function getVariableRateSlope1() external view returns (uint256) {\n    return _variableRateSlope1;\n  }\n\n  function getVariableRateSlope2() external view returns (uint256) {\n    return _variableRateSlope2;\n  }\n\n  function getStableRateSlope1() external view returns (uint256) {\n    return _stableRateSlope1;\n  }\n\n  function getStableRateSlope2() external view returns (uint256) {\n    return _stableRateSlope2;\n  }\n\n  function getBaseVariableBorrowRate() external view override returns (uint256) {\n    return _baseVariableBorrowRate;\n  }\n\n  function getMaxVariableBorrowRate() external view override returns (uint256) {\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\n  }\n\n  // Not used, only defined for interface compatibility\n  function getBaseStableBorrowRate() external pure override returns (uint256) {\n    return 0;\n  }\n\n  // Not used, only defined for interface compatibility\n  function getStableRateExcessOffset() external pure override returns (uint256) {\n    return 0;\n  }\n}\n"},"contracts/mocks/tests/WadRayMathWrapper.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {WadRayMath} from '../../protocol/libraries/math/WadRayMath.sol';\n\ncontract WadRayMathWrapper {\n  function wad() public pure returns (uint256) {\n    return WadRayMath.WAD;\n  }\n\n  function ray() public pure returns (uint256) {\n    return WadRayMath.RAY;\n  }\n\n  function halfRay() public pure returns (uint256) {\n    return WadRayMath.HALF_RAY;\n  }\n\n  function halfWad() public pure returns (uint256) {\n    return WadRayMath.HALF_WAD;\n  }\n\n  function wadMul(uint256 a, uint256 b) public pure returns (uint256) {\n    return WadRayMath.wadMul(a, b);\n  }\n\n  function wadDiv(uint256 a, uint256 b) public pure returns (uint256) {\n    return WadRayMath.wadDiv(a, b);\n  }\n\n  function rayMul(uint256 a, uint256 b) public pure returns (uint256) {\n    return WadRayMath.rayMul(a, b);\n  }\n\n  function rayDiv(uint256 a, uint256 b) public pure returns (uint256) {\n    return WadRayMath.rayDiv(a, b);\n  }\n\n  function rayToWad(uint256 a) public pure returns (uint256) {\n    return WadRayMath.rayToWad(a);\n  }\n\n  function wadToRay(uint256 a) public pure returns (uint256) {\n    return WadRayMath.wadToRay(a);\n  }\n}\n"},"contracts/mocks/tokens/MintableDelegationERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\nimport {IDelegationToken} from '../../interfaces/IDelegationToken.sol';\n\n/**\n * @title MintableDelegationERC20\n * @dev ERC20 minting logic with delegation\n */\ncontract MintableDelegationERC20 is IDelegationToken, ERC20 {\n  address public delegatee;\n\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\n    _setupDecimals(decimals);\n  }\n\n  /**\n   * @dev Function to mint tokens\n   * @param value The amount of tokens to mint.\n   * @return A boolean that indicates if the operation was successful.\n   */\n  function mint(uint256 value) public returns (bool) {\n    _mint(msg.sender, value);\n    return true;\n  }\n\n  function delegate(address delegateeAddress) external override {\n    delegatee = delegateeAddress;\n  }\n}\n"},"contracts/mocks/tokens/MintableERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\n\n/**\n * @title ERC20Mintable\n * @dev ERC20 minting logic\n */\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\n  bytes public constant EIP712_REVISION = bytes('1');\n  bytes32 internal constant EIP712_DOMAIN =\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\n  bytes32 public constant PERMIT_TYPEHASH =\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\n\n  // Map of address nonces (address => nonce)\n  mapping(address => uint256) internal _nonces;\n\n  bytes32 public DOMAIN_SEPARATOR;\n\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\n    uint256 chainId = block.chainid;\n\n    DOMAIN_SEPARATOR = keccak256(\n      abi.encode(\n        EIP712_DOMAIN,\n        keccak256(bytes(name)),\n        keccak256(EIP712_REVISION),\n        chainId,\n        address(this)\n      )\n    );\n    _setupDecimals(decimals);\n  }\n\n  /// @inheritdoc IERC20WithPermit\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 override {\n    require(owner != address(0), 'INVALID_OWNER');\n    //solium-disable-next-line\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\n    uint256 currentValidNonce = _nonces[owner];\n    bytes32 digest = keccak256(\n      abi.encodePacked(\n        '\\x19\\x01',\n        DOMAIN_SEPARATOR,\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\n      )\n    );\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\n    _nonces[owner] = currentValidNonce + 1;\n    _approve(owner, spender, value);\n  }\n\n  /**\n   * @dev Function to mint tokens\n   * @param value The amount of tokens to mint.\n   * @return A boolean that indicates if the operation was successful.\n   */\n  function mint(uint256 value) public returns (bool) {\n    _mint(_msgSender(), value);\n    return true;\n  }\n\n  /**\n   * @dev Function to mint tokens to address\n   * @param account The account to mint tokens.\n   * @param value The amount of tokens to mint.\n   * @return A boolean that indicates if the operation was successful.\n   */\n  function mint(address account, uint256 value) public returns (bool) {\n    _mint(account, value);\n    return true;\n  }\n\n  function nonces(address owner) public view virtual returns (uint256) {\n    return _nonces[owner];\n  }\n}\n"},"contracts/mocks/tokens/MockATokenRepayment.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {AToken} from '../../protocol/tokenization/AToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\ncontract MockATokenRepayment is AToken {\n  event MockRepayment(address user, address onBehalfOf, uint256 amount);\n\n  constructor(IPool pool) AToken(pool) {}\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x2;\n  }\n\n  function handleRepayment(\n    address user,\n    address onBehalfOf,\n    uint256 amount\n  ) external override onlyPool {\n    emit MockRepayment(user, onBehalfOf, amount);\n  }\n}\n"},"contracts/mocks/tokens/WETH9Mocked.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {WETH9} from '../../dependencies/weth/WETH9.sol';\n\ncontract WETH9Mocked is WETH9 {\n  // Mint not backed by Ether: only for testing purposes\n  function mint(uint256 value) public returns (bool) {\n    balanceOf[msg.sender] += value;\n    emit Transfer(address(0), msg.sender, value);\n    return true;\n  }\n\n  function mint(address account, uint256 value) public returns (bool) {\n    balanceOf[account] += value;\n    emit Transfer(address(0), account, value);\n    return true;\n  }\n}\n"},"contracts/mocks/upgradeability/MockAToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {AToken} from '../../protocol/tokenization/AToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\ncontract MockAToken is AToken {\n  constructor(IPool pool) AToken(pool) {}\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x2;\n  }\n}\n"},"contracts/mocks/upgradeability/MockInitializableImplementation.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\n\ncontract MockInitializableImple is VersionedInitializable {\n  uint256 public value;\n  string public text;\n  uint256[] public values;\n\n  uint256 public constant REVISION = 1;\n\n  /**\n   * @dev returns the revision number of the contract\n   * Needs to be defined in the inherited class as a constant.\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\n    value = val;\n    text = txt;\n    values = vals;\n  }\n\n  function setValue(uint256 newValue) public {\n    value = newValue;\n  }\n\n  function setValueViaProxy(uint256 newValue) public {\n    value = newValue;\n  }\n}\n\ncontract MockInitializableImpleV2 is VersionedInitializable {\n  uint256 public value;\n  string public text;\n  uint256[] public values;\n\n  uint256 public constant REVISION = 2;\n\n  /**\n   * @dev returns the revision number of the contract\n   * Needs to be defined in the inherited class as a constant.\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\n    value = val;\n    text = txt;\n    values = vals;\n  }\n\n  function setValue(uint256 newValue) public {\n    value = newValue;\n  }\n\n  function setValueViaProxy(uint256 newValue) public {\n    value = newValue;\n  }\n}\n\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\n  uint256 public value;\n\n  uint256 public constant REVISION = 2;\n\n  /**\n   * @dev returns the revision number of the contract\n   * Needs to be defined in the inherited class as a constant.\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  constructor(uint256 val) {\n    initialize(val);\n  }\n\n  function initialize(uint256 val) public initializer {\n    value = val;\n  }\n}\n\ncontract MockReentrantInitializableImple is VersionedInitializable {\n  uint256 public value;\n\n  uint256 public constant REVISION = 2;\n\n  /**\n   * @dev returns the revision number of the contract\n   * Needs to be defined in the inherited class as a constant.\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  function initialize(uint256 val) public initializer {\n    value = val;\n    if (value < 2) {\n      initialize(value + 1);\n    }\n  }\n}\n"},"contracts/mocks/upgradeability/MockStableDebtToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {StableDebtToken} from '../../protocol/tokenization/StableDebtToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\ncontract MockStableDebtToken is StableDebtToken {\n  constructor(IPool pool) StableDebtToken(pool) {}\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x3;\n  }\n}\n"},"contracts/mocks/upgradeability/MockVariableDebtToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {VariableDebtToken} from '../../protocol/tokenization/VariableDebtToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\ncontract MockVariableDebtToken is VariableDebtToken {\n  constructor(IPool pool) VariableDebtToken(pool) {}\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x3;\n  }\n}\n"},"contracts/protocol/configuration/ACLManager.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {AccessControl} from '../../dependencies/openzeppelin/contracts/AccessControl.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\n\n/**\n * @title ACLManager\n * @author Aave\n * @notice Access Control List Manager. Main registry of system roles and permissions.\n */\ncontract ACLManager is AccessControl, IACLManager {\n  bytes32 public constant override POOL_ADMIN_ROLE = keccak256('POOL_ADMIN');\n  bytes32 public constant override EMERGENCY_ADMIN_ROLE = keccak256('EMERGENCY_ADMIN');\n  bytes32 public constant override RISK_ADMIN_ROLE = keccak256('RISK_ADMIN');\n  bytes32 public constant override FLASH_BORROWER_ROLE = keccak256('FLASH_BORROWER');\n  bytes32 public constant override BRIDGE_ROLE = keccak256('BRIDGE');\n  bytes32 public constant override ASSET_LISTING_ADMIN_ROLE = keccak256('ASSET_LISTING_ADMIN');\n\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  /**\n   * @dev Constructor\n   * @dev The ACL admin should be initialized at the addressesProvider beforehand\n   * @param provider The address of the PoolAddressesProvider\n   */\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n    address aclAdmin = provider.getACLAdmin();\n    require(aclAdmin != address(0), Errors.ACL_ADMIN_CANNOT_BE_ZERO);\n    _setupRole(DEFAULT_ADMIN_ROLE, aclAdmin);\n  }\n\n  /// @inheritdoc IACLManager\n  function setRoleAdmin(\n    bytes32 role,\n    bytes32 adminRole\n  ) external override onlyRole(DEFAULT_ADMIN_ROLE) {\n    _setRoleAdmin(role, adminRole);\n  }\n\n  /// @inheritdoc IACLManager\n  function addPoolAdmin(address admin) external override {\n    grantRole(POOL_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function removePoolAdmin(address admin) external override {\n    revokeRole(POOL_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function isPoolAdmin(address admin) external view override returns (bool) {\n    return hasRole(POOL_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function addEmergencyAdmin(address admin) external override {\n    grantRole(EMERGENCY_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeEmergencyAdmin(address admin) external override {\n    revokeRole(EMERGENCY_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function isEmergencyAdmin(address admin) external view override returns (bool) {\n    return hasRole(EMERGENCY_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function addRiskAdmin(address admin) external override {\n    grantRole(RISK_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeRiskAdmin(address admin) external override {\n    revokeRole(RISK_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function isRiskAdmin(address admin) external view override returns (bool) {\n    return hasRole(RISK_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function addFlashBorrower(address borrower) external override {\n    grantRole(FLASH_BORROWER_ROLE, borrower);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeFlashBorrower(address borrower) external override {\n    revokeRole(FLASH_BORROWER_ROLE, borrower);\n  }\n\n  /// @inheritdoc IACLManager\n  function isFlashBorrower(address borrower) external view override returns (bool) {\n    return hasRole(FLASH_BORROWER_ROLE, borrower);\n  }\n\n  /// @inheritdoc IACLManager\n  function addBridge(address bridge) external override {\n    grantRole(BRIDGE_ROLE, bridge);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeBridge(address bridge) external override {\n    revokeRole(BRIDGE_ROLE, bridge);\n  }\n\n  /// @inheritdoc IACLManager\n  function isBridge(address bridge) external view override returns (bool) {\n    return hasRole(BRIDGE_ROLE, bridge);\n  }\n\n  /// @inheritdoc IACLManager\n  function addAssetListingAdmin(address admin) external override {\n    grantRole(ASSET_LISTING_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeAssetListingAdmin(address admin) external override {\n    revokeRole(ASSET_LISTING_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function isAssetListingAdmin(address admin) external view override returns (bool) {\n    return hasRole(ASSET_LISTING_ADMIN_ROLE, admin);\n  }\n}\n"},"contracts/protocol/configuration/PoolAddressesProvider.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\n\n/**\n * @title PoolAddressesProvider\n * @author Aave\n * @notice Main registry of addresses part of or connected to the protocol, including permissioned roles\n * @dev Acts as factory of proxies and admin of those, so with right to change its implementations\n * @dev Owned by the Aave Governance\n */\ncontract PoolAddressesProvider is Ownable, IPoolAddressesProvider {\n  // Identifier of the Aave Market\n  string private _marketId;\n\n  // Map of registered addresses (identifier => registeredAddress)\n  mapping(bytes32 => address) private _addresses;\n\n  // Main identifiers\n  bytes32 private constant POOL = 'POOL';\n  bytes32 private constant POOL_CONFIGURATOR = 'POOL_CONFIGURATOR';\n  bytes32 private constant PRICE_ORACLE = 'PRICE_ORACLE';\n  bytes32 private constant ACL_MANAGER = 'ACL_MANAGER';\n  bytes32 private constant ACL_ADMIN = 'ACL_ADMIN';\n  bytes32 private constant PRICE_ORACLE_SENTINEL = 'PRICE_ORACLE_SENTINEL';\n  bytes32 private constant DATA_PROVIDER = 'DATA_PROVIDER';\n\n  /**\n   * @dev Constructor.\n   * @param marketId The identifier of the market.\n   * @param owner The owner address of this contract.\n   */\n  constructor(string memory marketId, address owner) {\n    _setMarketId(marketId);\n    transferOwnership(owner);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getMarketId() external view override returns (string memory) {\n    return _marketId;\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setMarketId(string memory newMarketId) external override onlyOwner {\n    _setMarketId(newMarketId);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getAddress(bytes32 id) public view override returns (address) {\n    return _addresses[id];\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setAddress(bytes32 id, address newAddress) external override onlyOwner {\n    address oldAddress = _addresses[id];\n    _addresses[id] = newAddress;\n    emit AddressSet(id, oldAddress, newAddress);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setAddressAsProxy(\n    bytes32 id,\n    address newImplementationAddress\n  ) external override onlyOwner {\n    address proxyAddress = _addresses[id];\n    address oldImplementationAddress = _getProxyImplementation(id);\n    _updateImpl(id, newImplementationAddress);\n    emit AddressSetAsProxy(id, proxyAddress, oldImplementationAddress, newImplementationAddress);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPool() external view override returns (address) {\n    return getAddress(POOL);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPoolImpl(address newPoolImpl) external override onlyOwner {\n    address oldPoolImpl = _getProxyImplementation(POOL);\n    _updateImpl(POOL, newPoolImpl);\n    emit PoolUpdated(oldPoolImpl, newPoolImpl);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPoolConfigurator() external view override returns (address) {\n    return getAddress(POOL_CONFIGURATOR);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external override onlyOwner {\n    address oldPoolConfiguratorImpl = _getProxyImplementation(POOL_CONFIGURATOR);\n    _updateImpl(POOL_CONFIGURATOR, newPoolConfiguratorImpl);\n    emit PoolConfiguratorUpdated(oldPoolConfiguratorImpl, newPoolConfiguratorImpl);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPriceOracle() external view override returns (address) {\n    return getAddress(PRICE_ORACLE);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPriceOracle(address newPriceOracle) external override onlyOwner {\n    address oldPriceOracle = _addresses[PRICE_ORACLE];\n    _addresses[PRICE_ORACLE] = newPriceOracle;\n    emit PriceOracleUpdated(oldPriceOracle, newPriceOracle);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getACLManager() external view override returns (address) {\n    return getAddress(ACL_MANAGER);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setACLManager(address newAclManager) external override onlyOwner {\n    address oldAclManager = _addresses[ACL_MANAGER];\n    _addresses[ACL_MANAGER] = newAclManager;\n    emit ACLManagerUpdated(oldAclManager, newAclManager);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getACLAdmin() external view override returns (address) {\n    return getAddress(ACL_ADMIN);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setACLAdmin(address newAclAdmin) external override onlyOwner {\n    address oldAclAdmin = _addresses[ACL_ADMIN];\n    _addresses[ACL_ADMIN] = newAclAdmin;\n    emit ACLAdminUpdated(oldAclAdmin, newAclAdmin);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPriceOracleSentinel() external view override returns (address) {\n    return getAddress(PRICE_ORACLE_SENTINEL);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external override onlyOwner {\n    address oldPriceOracleSentinel = _addresses[PRICE_ORACLE_SENTINEL];\n    _addresses[PRICE_ORACLE_SENTINEL] = newPriceOracleSentinel;\n    emit PriceOracleSentinelUpdated(oldPriceOracleSentinel, newPriceOracleSentinel);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPoolDataProvider() external view override returns (address) {\n    return getAddress(DATA_PROVIDER);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPoolDataProvider(address newDataProvider) external override onlyOwner {\n    address oldDataProvider = _addresses[DATA_PROVIDER];\n    _addresses[DATA_PROVIDER] = newDataProvider;\n    emit PoolDataProviderUpdated(oldDataProvider, newDataProvider);\n  }\n\n  /**\n   * @notice Internal function to update the implementation of a specific proxied component of the protocol.\n   * @dev If there is no proxy registered with the given identifier, it creates the proxy setting `newAddress`\n   *   as implementation and calls the initialize() function on the proxy\n   * @dev If there is already a proxy registered, it just updates the implementation to `newAddress` and\n   *   calls the initialize() function via upgradeToAndCall() in the proxy\n   * @param id The id of the proxy to be updated\n   * @param newAddress The address of the new implementation\n   */\n  function _updateImpl(bytes32 id, address newAddress) internal {\n    address proxyAddress = _addresses[id];\n    InitializableImmutableAdminUpgradeabilityProxy proxy;\n    bytes memory params = abi.encodeWithSignature('initialize(address)', address(this));\n\n    if (proxyAddress == address(0)) {\n      proxy = new InitializableImmutableAdminUpgradeabilityProxy(address(this));\n      _addresses[id] = proxyAddress = address(proxy);\n      proxy.initialize(newAddress, params);\n      emit ProxyCreated(id, proxyAddress, newAddress);\n    } else {\n      proxy = InitializableImmutableAdminUpgradeabilityProxy(payable(proxyAddress));\n      proxy.upgradeToAndCall(newAddress, params);\n    }\n  }\n\n  /**\n   * @notice Updates the identifier of the Aave market.\n   * @param newMarketId The new id of the market\n   */\n  function _setMarketId(string memory newMarketId) internal {\n    string memory oldMarketId = _marketId;\n    _marketId = newMarketId;\n    emit MarketIdSet(oldMarketId, newMarketId);\n  }\n\n  /**\n   * @notice Returns the the implementation contract of the proxy contract by its identifier.\n   * @dev It returns ZERO if there is no registered address with the given id\n   * @dev It reverts if the registered address with the given id is not `InitializableImmutableAdminUpgradeabilityProxy`\n   * @param id The id\n   * @return The address of the implementation contract\n   */\n  function _getProxyImplementation(bytes32 id) internal returns (address) {\n    address proxyAddress = _addresses[id];\n    if (proxyAddress == address(0)) {\n      return address(0);\n    } else {\n      address payable payableProxyAddress = payable(proxyAddress);\n      return InitializableImmutableAdminUpgradeabilityProxy(payableProxyAddress).implementation();\n    }\n  }\n}\n"},"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IPoolAddressesProviderRegistry} from '../../interfaces/IPoolAddressesProviderRegistry.sol';\n\n/**\n * @title PoolAddressesProviderRegistry\n * @author Aave\n * @notice Main registry of PoolAddressesProvider of Aave markets.\n * @dev Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the\n * market it is connected with, for example with `1` for the Aave main market and `2` for the next created.\n */\ncontract PoolAddressesProviderRegistry is Ownable, IPoolAddressesProviderRegistry {\n  // Map of address provider ids (addressesProvider => id)\n  mapping(address => uint256) private _addressesProviderToId;\n  // Map of id to address provider (id => addressesProvider)\n  mapping(uint256 => address) private _idToAddressesProvider;\n  // List of addresses providers\n  address[] private _addressesProvidersList;\n  // Map of address provider list indexes (addressesProvider => indexInList)\n  mapping(address => uint256) private _addressesProvidersIndexes;\n\n  /**\n   * @dev Constructor.\n   * @param owner The owner address of this contract.\n   */\n  constructor(address owner) {\n    transferOwnership(owner);\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function getAddressesProvidersList() external view override returns (address[] memory) {\n    return _addressesProvidersList;\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function registerAddressesProvider(address provider, uint256 id) external override onlyOwner {\n    require(id != 0, Errors.INVALID_ADDRESSES_PROVIDER_ID);\n    require(_idToAddressesProvider[id] == address(0), Errors.INVALID_ADDRESSES_PROVIDER_ID);\n    require(_addressesProviderToId[provider] == 0, Errors.ADDRESSES_PROVIDER_ALREADY_ADDED);\n\n    _addressesProviderToId[provider] = id;\n    _idToAddressesProvider[id] = provider;\n\n    _addToAddressesProvidersList(provider);\n    emit AddressesProviderRegistered(provider, id);\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function unregisterAddressesProvider(address provider) external override onlyOwner {\n    require(_addressesProviderToId[provider] != 0, Errors.ADDRESSES_PROVIDER_NOT_REGISTERED);\n    uint256 oldId = _addressesProviderToId[provider];\n    _idToAddressesProvider[oldId] = address(0);\n    _addressesProviderToId[provider] = 0;\n\n    _removeFromAddressesProvidersList(provider);\n\n    emit AddressesProviderUnregistered(provider, oldId);\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function getAddressesProviderIdByAddress(\n    address addressesProvider\n  ) external view override returns (uint256) {\n    return _addressesProviderToId[addressesProvider];\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function getAddressesProviderAddressById(uint256 id) external view override returns (address) {\n    return _idToAddressesProvider[id];\n  }\n\n  /**\n   * @notice Adds the addresses provider address to the list.\n   * @param provider The address of the PoolAddressesProvider\n   */\n  function _addToAddressesProvidersList(address provider) internal {\n    _addressesProvidersIndexes[provider] = _addressesProvidersList.length;\n    _addressesProvidersList.push(provider);\n  }\n\n  /**\n   * @notice Removes the addresses provider address from the list.\n   * @param provider The address of the PoolAddressesProvider\n   */\n  function _removeFromAddressesProvidersList(address provider) internal {\n    uint256 index = _addressesProvidersIndexes[provider];\n\n    _addressesProvidersIndexes[provider] = 0;\n\n    // Swap the index of the last addresses provider in the list with the index of the provider to remove\n    uint256 lastIndex = _addressesProvidersList.length - 1;\n    if (index < lastIndex) {\n      address lastProvider = _addressesProvidersList[lastIndex];\n      _addressesProvidersList[index] = lastProvider;\n      _addressesProvidersIndexes[lastProvider] = index;\n    }\n    _addressesProvidersList.pop();\n  }\n}\n"},"contracts/protocol/configuration/PriceOracleSentinel.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPriceOracleSentinel} from '../../interfaces/IPriceOracleSentinel.sol';\nimport {ISequencerOracle} from '../../interfaces/ISequencerOracle.sol';\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\n\n/**\n * @title PriceOracleSentinel\n * @author Aave\n * @notice It validates if operations are allowed depending on the PriceOracle health.\n * @dev Once the PriceOracle gets up after an outage/downtime, users can make their positions healthy during a grace\n *  period. So the PriceOracle is considered completely up once its up and the grace period passed.\n */\ncontract PriceOracleSentinel is IPriceOracleSentinel {\n  /**\n   * @dev Only pool admin can call functions marked by this modifier.\n   */\n  modifier onlyPoolAdmin() {\n    IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager());\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\n    _;\n  }\n\n  /**\n   * @dev Only risk or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyRiskOrPoolAdmins() {\n    IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager());\n    require(\n      aclManager.isRiskAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_RISK_OR_POOL_ADMIN\n    );\n    _;\n  }\n\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\n\n  ISequencerOracle internal _sequencerOracle;\n\n  uint256 internal _gracePeriod;\n\n  /**\n   * @dev Constructor\n   * @param provider The address of the PoolAddressesProvider\n   * @param oracle The address of the SequencerOracle\n   * @param gracePeriod The duration of the grace period in seconds\n   */\n  constructor(IPoolAddressesProvider provider, ISequencerOracle oracle, uint256 gracePeriod) {\n    ADDRESSES_PROVIDER = provider;\n    _sequencerOracle = oracle;\n    _gracePeriod = gracePeriod;\n  }\n\n  /// @inheritdoc IPriceOracleSentinel\n  function isBorrowAllowed() public view override returns (bool) {\n    return _isUpAndGracePeriodPassed();\n  }\n\n  /// @inheritdoc IPriceOracleSentinel\n  function isLiquidationAllowed() public view override returns (bool) {\n    return _isUpAndGracePeriodPassed();\n  }\n\n  /**\n   * @notice Checks the sequencer oracle is healthy: is up and grace period passed.\n   * @return True if the SequencerOracle is up and the grace period passed, false otherwise\n   */\n  function _isUpAndGracePeriodPassed() internal view returns (bool) {\n    (, int256 answer, , uint256 lastUpdateTimestamp, ) = _sequencerOracle.latestRoundData();\n    return answer == 0 && block.timestamp - lastUpdateTimestamp > _gracePeriod;\n  }\n\n  /// @inheritdoc IPriceOracleSentinel\n  function setSequencerOracle(address newSequencerOracle) public onlyPoolAdmin {\n    _sequencerOracle = ISequencerOracle(newSequencerOracle);\n    emit SequencerOracleUpdated(newSequencerOracle);\n  }\n\n  /// @inheritdoc IPriceOracleSentinel\n  function setGracePeriod(uint256 newGracePeriod) public onlyRiskOrPoolAdmins {\n    _gracePeriod = newGracePeriod;\n    emit GracePeriodUpdated(newGracePeriod);\n  }\n\n  /// @inheritdoc IPriceOracleSentinel\n  function getSequencerOracle() public view returns (address) {\n    return address(_sequencerOracle);\n  }\n\n  /// @inheritdoc IPriceOracleSentinel\n  function getGracePeriod() public view returns (uint256) {\n    return _gracePeriod;\n  }\n}\n"},"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\n\n/**\n * @title BaseImmutableAdminUpgradeabilityProxy\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\n * @notice This contract combines an upgradeability proxy with an authorization\n * mechanism for administrative tasks.\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\n * All external functions in this contract must be guarded by the\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\n * feature proposal that would enable this to be done automatically.\n */\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\n  address internal immutable _admin;\n\n  /**\n   * @dev Constructor.\n   * @param admin The address of the admin\n   */\n  constructor(address admin) {\n    _admin = admin;\n  }\n\n  modifier ifAdmin() {\n    if (msg.sender == _admin) {\n      _;\n    } else {\n      _fallback();\n    }\n  }\n\n  /**\n   * @notice Return the admin address\n   * @return The address of the proxy admin.\n   */\n  function admin() external ifAdmin returns (address) {\n    return _admin;\n  }\n\n  /**\n   * @notice Return the implementation address\n   * @return The address of the implementation.\n   */\n  function implementation() external ifAdmin returns (address) {\n    return _implementation();\n  }\n\n  /**\n   * @notice Upgrade the backing implementation of the proxy.\n   * @dev Only the admin can call this function.\n   * @param newImplementation The address of the new implementation.\n   */\n  function upgradeTo(address newImplementation) external ifAdmin {\n    _upgradeTo(newImplementation);\n  }\n\n  /**\n   * @notice Upgrade the backing implementation of the proxy and call a function\n   * on the new implementation.\n   * @dev This is useful to initialize the proxied contract.\n   * @param newImplementation The address of the new implementation.\n   * @param data Data to send as msg.data in the low level call.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   */\n  function upgradeToAndCall(\n    address newImplementation,\n    bytes calldata data\n  ) external payable ifAdmin {\n    _upgradeTo(newImplementation);\n    (bool success, ) = newImplementation.delegatecall(data);\n    require(success);\n  }\n\n  /**\n   * @notice Only fall back when the sender is not the admin.\n   */\n  function _willFallback() internal virtual override {\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\n    super._willFallback();\n  }\n}\n"},"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\n\n/**\n * @title InitializableAdminUpgradeabilityProxy\n * @author Aave\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\n */\ncontract InitializableImmutableAdminUpgradeabilityProxy is\n  BaseImmutableAdminUpgradeabilityProxy,\n  InitializableUpgradeabilityProxy\n{\n  /**\n   * @dev Constructor.\n   * @param admin The address of the admin\n   */\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\n  }\n}\n"},"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title VersionedInitializable\n * @author Aave, inspired by the OpenZeppelin Initializable contract\n * @notice Helper contract to implement initializer functions. To use it, replace\n * the constructor with a function that has the `initializer` modifier.\n * @dev WARNING: Unlike constructors, initializer functions must be manually\n * invoked. This applies both to deploying an Initializable contract, as well\n * as extending an Initializable contract via inheritance.\n * WARNING: When used with inheritance, manual care must be taken to not invoke\n * a parent initializer twice, or ensure that all initializers are idempotent,\n * because this is not dealt with automatically as with constructors.\n */\nabstract contract VersionedInitializable {\n  /**\n   * @dev Indicates that the contract has been initialized.\n   */\n  uint256 private lastInitializedRevision = 0;\n\n  /**\n   * @dev Indicates that the contract is in the process of being initialized.\n   */\n  bool private initializing;\n\n  /**\n   * @dev Modifier to use in the initializer function of a contract.\n   */\n  modifier initializer() {\n    uint256 revision = getRevision();\n    require(\n      initializing || isConstructor() || revision > lastInitializedRevision,\n      'Contract instance has already been initialized'\n    );\n\n    bool isTopLevelCall = !initializing;\n    if (isTopLevelCall) {\n      initializing = true;\n      lastInitializedRevision = revision;\n    }\n\n    _;\n\n    if (isTopLevelCall) {\n      initializing = false;\n    }\n  }\n\n  /**\n   * @notice Returns the revision number of the contract\n   * @dev Needs to be defined in the inherited class as a constant.\n   * @return The revision number\n   */\n  function getRevision() internal pure virtual returns (uint256);\n\n  /**\n   * @notice Returns true if and only if the function is running in the constructor\n   * @return True if the function is running in the constructor\n   */\n  function isConstructor() private view returns (bool) {\n    // extcodesize checks the size of the code stored in an address, and\n    // address returns the current address. Since the code is still not\n    // deployed when running a constructor, any checks on its code size will\n    // yield zero, making it an effective way to detect if a contract is\n    // under construction or not.\n    uint256 cs;\n    //solium-disable-next-line\n    assembly {\n      cs := extcodesize(address())\n    }\n    return cs == 0;\n  }\n\n  // Reserved storage space to allow for layout changes in the future.\n  uint256[50] private ______gap;\n}\n"},"contracts/protocol/libraries/configuration/ReserveConfiguration.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {Errors} from '../helpers/Errors.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\n\n/**\n * @title ReserveConfiguration library\n * @author Aave\n * @notice Implements the bitmap logic to handle the reserve configuration\n */\nlibrary ReserveConfiguration {\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\n\n  uint256 internal constant MAX_VALID_LTV = 65535;\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\n\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\n  uint16 public constant MAX_RESERVES_COUNT = 128;\n\n  /**\n   * @notice Sets the Loan to Value of the reserve\n   * @param self The reserve configuration\n   * @param ltv The new ltv\n   */\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\n\n    self.data = (self.data & LTV_MASK) | ltv;\n  }\n\n  /**\n   * @notice Gets the Loan to Value of the reserve\n   * @param self The reserve configuration\n   * @return The loan to value\n   */\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\n    return self.data & ~LTV_MASK;\n  }\n\n  /**\n   * @notice Sets the liquidation threshold of the reserve\n   * @param self The reserve configuration\n   * @param threshold The new liquidation threshold\n   */\n  function setLiquidationThreshold(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 threshold\n  ) internal pure {\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\n\n    self.data =\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the liquidation threshold of the reserve\n   * @param self The reserve configuration\n   * @return The liquidation threshold\n   */\n  function getLiquidationThreshold(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the liquidation bonus of the reserve\n   * @param self The reserve configuration\n   * @param bonus The new liquidation bonus\n   */\n  function setLiquidationBonus(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 bonus\n  ) internal pure {\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\n\n    self.data =\n      (self.data & LIQUIDATION_BONUS_MASK) |\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the liquidation bonus of the reserve\n   * @param self The reserve configuration\n   * @return The liquidation bonus\n   */\n  function getLiquidationBonus(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the decimals of the underlying asset of the reserve\n   * @param self The reserve configuration\n   * @param decimals The decimals\n   */\n  function setDecimals(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 decimals\n  ) internal pure {\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\n\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the decimals of the underlying asset of the reserve\n   * @param self The reserve configuration\n   * @return The decimals of the asset\n   */\n  function getDecimals(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the active state of the reserve\n   * @param self The reserve configuration\n   * @param active The active state\n   */\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\n    self.data =\n      (self.data & ACTIVE_MASK) |\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the active state of the reserve\n   * @param self The reserve configuration\n   * @return The active state\n   */\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\n    return (self.data & ~ACTIVE_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the frozen state of the reserve\n   * @param self The reserve configuration\n   * @param frozen The frozen state\n   */\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\n    self.data =\n      (self.data & FROZEN_MASK) |\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the frozen state of the reserve\n   * @param self The reserve configuration\n   * @return The frozen state\n   */\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\n    return (self.data & ~FROZEN_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the paused state of the reserve\n   * @param self The reserve configuration\n   * @param paused The paused state\n   */\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\n    self.data =\n      (self.data & PAUSED_MASK) |\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the paused state of the reserve\n   * @param self The reserve configuration\n   * @return The paused state\n   */\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\n    return (self.data & ~PAUSED_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the borrowable in isolation flag for the reserve.\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\n   * amount will be accumulated in the isolated collateral's total debt exposure.\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\n   * consistency in the debt ceiling calculations.\n   * @param self The reserve configuration\n   * @param borrowable True if the asset is borrowable\n   */\n  function setBorrowableInIsolation(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool borrowable\n  ) internal pure {\n    self.data =\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the borrowable in isolation flag for the reserve.\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\n   * consistency in the debt ceiling calculations.\n   * @param self The reserve configuration\n   * @return The borrowable in isolation flag\n   */\n  function getBorrowableInIsolation(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the siloed borrowing flag for the reserve.\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\n   * @param self The reserve configuration\n   * @param siloed True if the asset is siloed\n   */\n  function setSiloedBorrowing(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool siloed\n  ) internal pure {\n    self.data =\n      (self.data & SILOED_BORROWING_MASK) |\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the siloed borrowing flag for the reserve.\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\n   * @param self The reserve configuration\n   * @return The siloed borrowing flag\n   */\n  function getSiloedBorrowing(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\n  }\n\n  /**\n   * @notice Enables or disables borrowing on the reserve\n   * @param self The reserve configuration\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\n   */\n  function setBorrowingEnabled(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool enabled\n  ) internal pure {\n    self.data =\n      (self.data & BORROWING_MASK) |\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the borrowing state of the reserve\n   * @param self The reserve configuration\n   * @return The borrowing state\n   */\n  function getBorrowingEnabled(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~BORROWING_MASK) != 0;\n  }\n\n  /**\n   * @notice Enables or disables stable rate borrowing on the reserve\n   * @param self The reserve configuration\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\n   */\n  function setStableRateBorrowingEnabled(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool enabled\n  ) internal pure {\n    self.data =\n      (self.data & STABLE_BORROWING_MASK) |\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the stable rate borrowing state of the reserve\n   * @param self The reserve configuration\n   * @return The stable rate borrowing state\n   */\n  function getStableRateBorrowingEnabled(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the reserve factor of the reserve\n   * @param self The reserve configuration\n   * @param reserveFactor The reserve factor\n   */\n  function setReserveFactor(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 reserveFactor\n  ) internal pure {\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\n\n    self.data =\n      (self.data & RESERVE_FACTOR_MASK) |\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the reserve factor of the reserve\n   * @param self The reserve configuration\n   * @return The reserve factor\n   */\n  function getReserveFactor(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the borrow cap of the reserve\n   * @param self The reserve configuration\n   * @param borrowCap The borrow cap\n   */\n  function setBorrowCap(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 borrowCap\n  ) internal pure {\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\n\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the borrow cap of the reserve\n   * @param self The reserve configuration\n   * @return The borrow cap\n   */\n  function getBorrowCap(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the supply cap of the reserve\n   * @param self The reserve configuration\n   * @param supplyCap The supply cap\n   */\n  function setSupplyCap(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 supplyCap\n  ) internal pure {\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\n\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the supply cap of the reserve\n   * @param self The reserve configuration\n   * @return The supply cap\n   */\n  function getSupplyCap(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the debt ceiling in isolation mode for the asset\n   * @param self The reserve configuration\n   * @param ceiling The maximum debt ceiling for the asset\n   */\n  function setDebtCeiling(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 ceiling\n  ) internal pure {\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\n\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\n   * @param self The reserve configuration\n   * @return The debt ceiling (0 = isolation mode disabled)\n   */\n  function getDebtCeiling(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the liquidation protocol fee of the reserve\n   * @param self The reserve configuration\n   * @param liquidationProtocolFee The liquidation protocol fee\n   */\n  function setLiquidationProtocolFee(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 liquidationProtocolFee\n  ) internal pure {\n    require(\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\n    );\n\n    self.data =\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\n  }\n\n  /**\n   * @dev Gets the liquidation protocol fee\n   * @param self The reserve configuration\n   * @return The liquidation protocol fee\n   */\n  function getLiquidationProtocolFee(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the unbacked mint cap of the reserve\n   * @param self The reserve configuration\n   * @param unbackedMintCap The unbacked mint cap\n   */\n  function setUnbackedMintCap(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 unbackedMintCap\n  ) internal pure {\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\n\n    self.data =\n      (self.data & UNBACKED_MINT_CAP_MASK) |\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\n  }\n\n  /**\n   * @dev Gets the unbacked mint cap of the reserve\n   * @param self The reserve configuration\n   * @return The unbacked mint cap\n   */\n  function getUnbackedMintCap(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the eMode asset category\n   * @param self The reserve configuration\n   * @param category The asset category when the user selects the eMode\n   */\n  function setEModeCategory(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 category\n  ) internal pure {\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\n\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\n  }\n\n  /**\n   * @dev Gets the eMode asset category\n   * @param self The reserve configuration\n   * @return The eMode category for the asset\n   */\n  function getEModeCategory(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the flashloanable flag for the reserve\n   * @param self The reserve configuration\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\n   */\n  function setFlashLoanEnabled(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool flashLoanEnabled\n  ) internal pure {\n    self.data =\n      (self.data & FLASHLOAN_ENABLED_MASK) |\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the flashloanable flag for the reserve\n   * @param self The reserve configuration\n   * @return The flashloanable flag\n   */\n  function getFlashLoanEnabled(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\n  }\n\n  /**\n   * @notice Gets the configuration flags of the reserve\n   * @param self The reserve configuration\n   * @return The state flag representing active\n   * @return The state flag representing frozen\n   * @return The state flag representing borrowing enabled\n   * @return The state flag representing stableRateBorrowing enabled\n   * @return The state flag representing paused\n   */\n  function getFlags(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool, bool, bool, bool, bool) {\n    uint256 dataLocal = self.data;\n\n    return (\n      (dataLocal & ~ACTIVE_MASK) != 0,\n      (dataLocal & ~FROZEN_MASK) != 0,\n      (dataLocal & ~BORROWING_MASK) != 0,\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\n      (dataLocal & ~PAUSED_MASK) != 0\n    );\n  }\n\n  /**\n   * @notice Gets the configuration parameters of the reserve from storage\n   * @param self The reserve configuration\n   * @return The state param representing ltv\n   * @return The state param representing liquidation threshold\n   * @return The state param representing liquidation bonus\n   * @return The state param representing reserve decimals\n   * @return The state param representing reserve factor\n   * @return The state param representing eMode category\n   */\n  function getParams(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\n    uint256 dataLocal = self.data;\n\n    return (\n      dataLocal & ~LTV_MASK,\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\n    );\n  }\n\n  /**\n   * @notice Gets the caps parameters of the reserve from storage\n   * @param self The reserve configuration\n   * @return The state param representing borrow cap\n   * @return The state param representing supply cap.\n   */\n  function getCaps(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256, uint256) {\n    uint256 dataLocal = self.data;\n\n    return (\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\n    );\n  }\n}\n"},"contracts/protocol/libraries/configuration/UserConfiguration.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {Errors} from '../helpers/Errors.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\n\n/**\n * @title UserConfiguration library\n * @author Aave\n * @notice Implements the bitmap logic to handle the user configuration\n */\nlibrary UserConfiguration {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  uint256 internal constant BORROWING_MASK =\n    0x5555555555555555555555555555555555555555555555555555555555555555;\n  uint256 internal constant COLLATERAL_MASK =\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\n\n  /**\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\n   */\n  function setBorrowing(\n    DataTypes.UserConfigurationMap storage self,\n    uint256 reserveIndex,\n    bool borrowing\n  ) internal {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      uint256 bit = 1 << (reserveIndex << 1);\n      if (borrowing) {\n        self.data |= bit;\n      } else {\n        self.data &= ~bit;\n      }\n    }\n  }\n\n  /**\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\n   */\n  function setUsingAsCollateral(\n    DataTypes.UserConfigurationMap storage self,\n    uint256 reserveIndex,\n    bool usingAsCollateral\n  ) internal {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\n      if (usingAsCollateral) {\n        self.data |= bit;\n      } else {\n        self.data &= ~bit;\n      }\n    }\n  }\n\n  /**\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\n   */\n  function isUsingAsCollateralOrBorrowing(\n    DataTypes.UserConfigurationMap memory self,\n    uint256 reserveIndex\n  ) internal pure returns (bool) {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\n    }\n  }\n\n  /**\n   * @notice Validate a user has been using the reserve for borrowing\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @return True if the user has been using a reserve for borrowing, false otherwise\n   */\n  function isBorrowing(\n    DataTypes.UserConfigurationMap memory self,\n    uint256 reserveIndex\n  ) internal pure returns (bool) {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\n    }\n  }\n\n  /**\n   * @notice Validate a user has been using the reserve as collateral\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @return True if the user has been using a reserve as collateral, false otherwise\n   */\n  function isUsingAsCollateral(\n    DataTypes.UserConfigurationMap memory self,\n    uint256 reserveIndex\n  ) internal pure returns (bool) {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\n    }\n  }\n\n  /**\n   * @notice Checks if a user has been supplying only one reserve as collateral\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\n   * @param self The configuration object\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\n   */\n  function isUsingAsCollateralOne(\n    DataTypes.UserConfigurationMap memory self\n  ) internal pure returns (bool) {\n    uint256 collateralData = self.data & COLLATERAL_MASK;\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\n  }\n\n  /**\n   * @notice Checks if a user has been supplying any reserve as collateral\n   * @param self The configuration object\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\n   */\n  function isUsingAsCollateralAny(\n    DataTypes.UserConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return self.data & COLLATERAL_MASK != 0;\n  }\n\n  /**\n   * @notice Checks if a user has been borrowing only one asset\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\n   * @param self The configuration object\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\n   */\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\n    uint256 borrowingData = self.data & BORROWING_MASK;\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\n  }\n\n  /**\n   * @notice Checks if a user has been borrowing from any reserve\n   * @param self The configuration object\n   * @return True if the user has been borrowing any reserve, false otherwise\n   */\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\n    return self.data & BORROWING_MASK != 0;\n  }\n\n  /**\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\n   * @param self The configuration object\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\n   */\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\n    return self.data == 0;\n  }\n\n  /**\n   * @notice Returns the Isolation Mode state of the user\n   * @param self The configuration object\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @return True if the user is in isolation mode, false otherwise\n   * @return The address of the only asset used as collateral\n   * @return The debt ceiling of the reserve\n   */\n  function getIsolationModeState(\n    DataTypes.UserConfigurationMap memory self,\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList\n  ) internal view returns (bool, address, uint256) {\n    if (isUsingAsCollateralOne(self)) {\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\n\n      address assetAddress = reservesList[assetId];\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\n      if (ceiling != 0) {\n        return (true, assetAddress, ceiling);\n      }\n    }\n    return (false, address(0), 0);\n  }\n\n  /**\n   * @notice Returns the siloed borrowing state for the user\n   * @param self The configuration object\n   * @param reservesData The data of all the reserves\n   * @param reservesList The reserve list\n   * @return True if the user has borrowed a siloed asset, false otherwise\n   * @return The address of the only borrowed asset\n   */\n  function getSiloedBorrowingState(\n    DataTypes.UserConfigurationMap memory self,\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList\n  ) internal view returns (bool, address) {\n    if (isBorrowingOne(self)) {\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\n      address assetAddress = reservesList[assetId];\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\n        return (true, assetAddress);\n      }\n    }\n\n    return (false, address(0));\n  }\n\n  /**\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\n   * @param self The configuration object\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\n   */\n  function _getFirstAssetIdByMask(\n    DataTypes.UserConfigurationMap memory self,\n    uint256 mask\n  ) internal pure returns (uint256) {\n    unchecked {\n      uint256 bitmapData = self.data & mask;\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\n      uint256 id;\n\n      while ((firstAssetPosition >>= 2) != 0) {\n        id += 1;\n      }\n      return id;\n    }\n  }\n}\n"},"contracts/protocol/libraries/helpers/Errors.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\n/**\n * @title Errors library\n * @author Aave\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\n */\nlibrary Errors {\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\n}\n"},"contracts/protocol/libraries/helpers/Helpers.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\n\n/**\n * @title Helpers library\n * @author Aave\n */\nlibrary Helpers {\n  /**\n   * @notice Fetches the user current stable and variable debt balances\n   * @param user The user address\n   * @param reserveCache The reserve cache data object\n   * @return The stable debt balance\n   * @return The variable debt balance\n   */\n  function getUserCurrentDebt(\n    address user,\n    DataTypes.ReserveCache memory reserveCache\n  ) internal view returns (uint256, uint256) {\n    return (\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\n    );\n  }\n}\n"},"contracts/protocol/libraries/logic/BorrowLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {Helpers} from '../helpers/Helpers.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\n\n/**\n * @title BorrowLogic library\n * @author Aave\n * @notice Implements the base logic for all the actions related to borrowing\n */\nlibrary BorrowLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using GPv2SafeERC20 for IERC20;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using SafeCast for uint256;\n\n  // See `IPool` for descriptions\n  event Borrow(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    DataTypes.InterestRateMode interestRateMode,\n    uint256 borrowRate,\n    uint16 indexed referralCode\n  );\n  event Repay(\n    address indexed reserve,\n    address indexed user,\n    address indexed repayer,\n    uint256 amount,\n    bool useATokens\n  );\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\n  event SwapBorrowRateMode(\n    address indexed reserve,\n    address indexed user,\n    DataTypes.InterestRateMode interestRateMode\n  );\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\n\n  /**\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\n   * isolated debt.\n   * @dev  Emits the `Borrow()` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the borrow function\n   */\n  function executeBorrow(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteBorrowParams memory params\n  ) public {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    (\n      bool isolationModeActive,\n      address isolationModeCollateralAddress,\n      uint256 isolationModeDebtCeiling\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\n\n    ValidationLogic.validateBorrow(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      DataTypes.ValidateBorrowParams({\n        reserveCache: reserveCache,\n        userConfig: userConfig,\n        asset: params.asset,\n        userAddress: params.onBehalfOf,\n        amount: params.amount,\n        interestRateMode: params.interestRateMode,\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\n        reservesCount: params.reservesCount,\n        oracle: params.oracle,\n        userEModeCategory: params.userEModeCategory,\n        priceOracleSentinel: params.priceOracleSentinel,\n        isolationModeActive: isolationModeActive,\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\n        isolationModeDebtCeiling: isolationModeDebtCeiling\n      })\n    );\n\n    uint256 currentStableRate = 0;\n    bool isFirstBorrowing = false;\n\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\n      currentStableRate = reserve.currentStableBorrowRate;\n\n      (\n        isFirstBorrowing,\n        reserveCache.nextTotalStableDebt,\n        reserveCache.nextAvgStableBorrowRate\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\n        params.user,\n        params.onBehalfOf,\n        params.amount,\n        currentStableRate\n      );\n    } else {\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\n        reserveCache.variableDebtTokenAddress\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\n    }\n\n    if (isFirstBorrowing) {\n      userConfig.setBorrowing(reserve.id, true);\n    }\n\n    if (isolationModeActive) {\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\n        .isolationModeTotalDebt += (params.amount /\n        10 **\n          (reserveCache.reserveConfiguration.getDecimals() -\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\n      emit IsolationModeTotalDebtUpdated(\n        isolationModeCollateralAddress,\n        nextIsolationModeTotalDebt\n      );\n    }\n\n    reserve.updateInterestRates(\n      reserveCache,\n      params.asset,\n      0,\n      params.releaseUnderlying ? params.amount : 0\n    );\n\n    if (params.releaseUnderlying) {\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\n    }\n\n    emit Borrow(\n      params.asset,\n      params.user,\n      params.onBehalfOf,\n      params.amount,\n      params.interestRateMode,\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\n        ? currentStableRate\n        : reserve.currentVariableBorrowRate,\n      params.referralCode\n    );\n  }\n\n  /**\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\n   * reduces the isolated debt.\n   * @dev  Emits the `Repay()` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the repay function\n   * @return The actual amount being repaid\n   */\n  function executeRepay(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteRepayParams memory params\n  ) external returns (uint256) {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n    reserve.updateState(reserveCache);\n\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\n      params.onBehalfOf,\n      reserveCache\n    );\n\n    ValidationLogic.validateRepay(\n      reserveCache,\n      params.amount,\n      params.interestRateMode,\n      params.onBehalfOf,\n      stableDebt,\n      variableDebt\n    );\n\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\n      ? stableDebt\n      : variableDebt;\n\n    // Allows a user to repay with aTokens without leaving dust from interest.\n    if (params.useATokens && params.amount == type(uint256).max) {\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\n    }\n\n    if (params.amount < paybackAmount) {\n      paybackAmount = params.amount;\n    }\n\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\n        reserveCache.stableDebtTokenAddress\n      ).burn(params.onBehalfOf, paybackAmount);\n    } else {\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\n        reserveCache.variableDebtTokenAddress\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\n    }\n\n    reserve.updateInterestRates(\n      reserveCache,\n      params.asset,\n      params.useATokens ? 0 : paybackAmount,\n      0\n    );\n\n    if (stableDebt + variableDebt - paybackAmount == 0) {\n      userConfig.setBorrowing(reserve.id, false);\n    }\n\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\n      reservesData,\n      reservesList,\n      userConfig,\n      reserveCache,\n      paybackAmount\n    );\n\n    if (params.useATokens) {\n      IAToken(reserveCache.aTokenAddress).burn(\n        msg.sender,\n        reserveCache.aTokenAddress,\n        paybackAmount,\n        reserveCache.nextLiquidityIndex\n      );\n    } else {\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\n        msg.sender,\n        params.onBehalfOf,\n        paybackAmount\n      );\n    }\n\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\n\n    return paybackAmount;\n  }\n\n  /**\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\n   * @dev Emits the `RebalanceStableBorrowRate()` event\n   * @param reserve The state of the reserve of the asset being repaid\n   * @param asset The asset of the position being rebalanced\n   * @param user The user being rebalanced\n   */\n  function executeRebalanceStableBorrowRate(\n    DataTypes.ReserveData storage reserve,\n    address asset,\n    address user\n  ) external {\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n    reserve.updateState(reserveCache);\n\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\n\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\n\n    stableDebtToken.burn(user, stableDebt);\n\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\n\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\n\n    emit RebalanceStableBorrowRate(asset, user);\n  }\n\n  /**\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\n   * @dev Emits the `Swap()` event\n   * @param reserve The of the reserve of the asset being repaid\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param asset The asset of the position being swapped\n   * @param interestRateMode The current interest rate mode of the position being swapped\n   */\n  function executeSwapBorrowRateMode(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.UserConfigurationMap storage userConfig,\n    address asset,\n    DataTypes.InterestRateMode interestRateMode\n  ) external {\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\n      msg.sender,\n      reserveCache\n    );\n\n    ValidationLogic.validateSwapRateMode(\n      reserve,\n      reserveCache,\n      userConfig,\n      stableDebt,\n      variableDebt,\n      interestRateMode\n    );\n\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\n        reserveCache.stableDebtTokenAddress\n      ).burn(msg.sender, stableDebt);\n\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\n        reserveCache.variableDebtTokenAddress\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\n    } else {\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\n        reserveCache.variableDebtTokenAddress\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\n\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\n        reserveCache.stableDebtTokenAddress\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\n    }\n\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\n\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\n  }\n}\n"},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\n\nlibrary BridgeLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using SafeCast for uint256;\n  using GPv2SafeERC20 for IERC20;\n\n  // See `IPool` for descriptions\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\n  event MintUnbacked(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint16 indexed referralCode\n  );\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\n\n  /**\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\n   * @dev Essentially a supply without transferring the underlying.\n   * @dev Emits the `MintUnbacked` event\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param asset The address of the underlying asset to mint aTokens of\n   * @param amount The amount to mint\n   * @param onBehalfOf The address that will receive the aTokens\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function executeMintUnbacked(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\n\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\n\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\n\n    require(\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\n    );\n\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\n\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\n      msg.sender,\n      onBehalfOf,\n      amount,\n      reserveCache.nextLiquidityIndex\n    );\n\n    if (isFirstSupply) {\n      if (\n        ValidationLogic.validateAutomaticUseAsCollateral(\n          reservesData,\n          reservesList,\n          userConfig,\n          reserveCache.reserveConfiguration,\n          reserveCache.aTokenAddress\n        )\n      ) {\n        userConfig.setUsingAsCollateral(reserve.id, true);\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\n      }\n    }\n\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\n  }\n\n  /**\n   * @notice Back the current unbacked with `amount` and pay `fee`.\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\n   * @dev Emits the `BackUnbacked` event\n   * @param reserve The reserve to back unbacked for\n   * @param asset The address of the underlying asset to repay\n   * @param amount The amount to back\n   * @param fee The amount paid in fees\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\n   * @return The backed amount\n   */\n  function executeBackUnbacked(\n    DataTypes.ReserveData storage reserve,\n    address asset,\n    uint256 amount,\n    uint256 fee,\n    uint256 protocolFeeBps\n  ) external returns (uint256) {\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\n\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\n    uint256 feeToLP = fee - feeToProtocol;\n    uint256 added = backingAmount + fee;\n\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\n      feeToLP\n    );\n\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\n\n    reserve.unbacked -= backingAmount.toUint128();\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\n\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\n\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\n\n    return backingAmount;\n  }\n}\n"},"contracts/protocol/libraries/logic/CalldataLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\n/**\n * @title CalldataLogic library\n * @author Aave\n * @notice Library to decode calldata, used to optimize calldata size in L2Pool for transaction cost reduction\n */\nlibrary CalldataLogic {\n  /**\n   * @notice Decodes compressed supply params to standard params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed supply params\n   * @return The address of the underlying reserve\n   * @return The amount to supply\n   * @return The referralCode\n   */\n  function decodeSupplyParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, uint256, uint16) {\n    uint16 assetId;\n    uint256 amount;\n    uint16 referralCode;\n\n    assembly {\n      assetId := and(args, 0xFFFF)\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\n      referralCode := and(shr(144, args), 0xFFFF)\n    }\n    return (reservesList[assetId], amount, referralCode);\n  }\n\n  /**\n   * @notice Decodes compressed supply params to standard params along with permit params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed supply with permit params\n   * @return The address of the underlying reserve\n   * @return The amount to supply\n   * @return The referralCode\n   * @return The deadline of the permit\n   * @return The V value of the permit signature\n   */\n  function decodeSupplyWithPermitParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, uint256, uint16, uint256, uint8) {\n    uint256 deadline;\n    uint8 permitV;\n\n    assembly {\n      deadline := and(shr(160, args), 0xFFFFFFFF)\n      permitV := and(shr(192, args), 0xFF)\n    }\n    (address asset, uint256 amount, uint16 referralCode) = decodeSupplyParams(reservesList, args);\n\n    return (asset, amount, referralCode, deadline, permitV);\n  }\n\n  /**\n   * @notice Decodes compressed withdraw params to standard params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed withdraw params\n   * @return The address of the underlying reserve\n   * @return The amount to withdraw\n   */\n  function decodeWithdrawParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, uint256) {\n    uint16 assetId;\n    uint256 amount;\n    assembly {\n      assetId := and(args, 0xFFFF)\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\n    }\n    if (amount == type(uint128).max) {\n      amount = type(uint256).max;\n    }\n    return (reservesList[assetId], amount);\n  }\n\n  /**\n   * @notice Decodes compressed borrow params to standard params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed borrow params\n   * @return The address of the underlying reserve\n   * @return The amount to borrow\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\n   * @return The referralCode\n   */\n  function decodeBorrowParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, uint256, uint256, uint16) {\n    uint16 assetId;\n    uint256 amount;\n    uint256 interestRateMode;\n    uint16 referralCode;\n\n    assembly {\n      assetId := and(args, 0xFFFF)\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\n      interestRateMode := and(shr(144, args), 0xFF)\n      referralCode := and(shr(152, args), 0xFFFF)\n    }\n\n    return (reservesList[assetId], amount, interestRateMode, referralCode);\n  }\n\n  /**\n   * @notice Decodes compressed repay params to standard params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed repay params\n   * @return The address of the underlying reserve\n   * @return The amount to repay\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\n   */\n  function decodeRepayParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, uint256, uint256) {\n    uint16 assetId;\n    uint256 amount;\n    uint256 interestRateMode;\n\n    assembly {\n      assetId := and(args, 0xFFFF)\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\n      interestRateMode := and(shr(144, args), 0xFF)\n    }\n\n    if (amount == type(uint128).max) {\n      amount = type(uint256).max;\n    }\n\n    return (reservesList[assetId], amount, interestRateMode);\n  }\n\n  /**\n   * @notice Decodes compressed repay params to standard params along with permit params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed repay with permit params\n   * @return The address of the underlying reserve\n   * @return The amount to repay\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\n   * @return The deadline of the permit\n   * @return The V value of the permit signature\n   */\n  function decodeRepayWithPermitParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, uint256, uint256, uint256, uint8) {\n    uint256 deadline;\n    uint8 permitV;\n\n    (address asset, uint256 amount, uint256 interestRateMode) = decodeRepayParams(\n      reservesList,\n      args\n    );\n\n    assembly {\n      deadline := and(shr(152, args), 0xFFFFFFFF)\n      permitV := and(shr(184, args), 0xFF)\n    }\n\n    return (asset, amount, interestRateMode, deadline, permitV);\n  }\n\n  /**\n   * @notice Decodes compressed swap borrow rate mode params to standard params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed swap borrow rate mode params\n   * @return The address of the underlying reserve\n   * @return The interest rate mode, 1 for stable 2 for variable debt\n   */\n  function decodeSwapBorrowRateModeParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, uint256) {\n    uint16 assetId;\n    uint256 interestRateMode;\n\n    assembly {\n      assetId := and(args, 0xFFFF)\n      interestRateMode := and(shr(16, args), 0xFF)\n    }\n\n    return (reservesList[assetId], interestRateMode);\n  }\n\n  /**\n   * @notice Decodes compressed rebalance stable borrow rate params to standard params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed rabalance stable borrow rate params\n   * @return The address of the underlying reserve\n   * @return The address of the user to rebalance\n   */\n  function decodeRebalanceStableBorrowRateParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, address) {\n    uint16 assetId;\n    address user;\n    assembly {\n      assetId := and(args, 0xFFFF)\n      user := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\n    }\n    return (reservesList[assetId], user);\n  }\n\n  /**\n   * @notice Decodes compressed set user use reserve as collateral params to standard params\n   * @param reservesList The addresses of all the active reserves\n   * @param args The packed set user use reserve as collateral params\n   * @return The address of the underlying reserve\n   * @return True if to set using as collateral, false otherwise\n   */\n  function decodeSetUserUseReserveAsCollateralParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args\n  ) internal view returns (address, bool) {\n    uint16 assetId;\n    bool useAsCollateral;\n    assembly {\n      assetId := and(args, 0xFFFF)\n      useAsCollateral := and(shr(16, args), 0x1)\n    }\n    return (reservesList[assetId], useAsCollateral);\n  }\n\n  /**\n   * @notice Decodes compressed liquidation call params to standard params\n   * @param reservesList The addresses of all the active reserves\n   * @param args1 The first half of packed liquidation call params\n   * @param args2 The second half of the packed liquidation call params\n   * @return The address of the underlying collateral asset\n   * @return The address of the underlying debt asset\n   * @return The address of the user to liquidate\n   * @return The amount of debt to cover\n   * @return True if receiving aTokens, false otherwise\n   */\n  function decodeLiquidationCallParams(\n    mapping(uint256 => address) storage reservesList,\n    bytes32 args1,\n    bytes32 args2\n  ) internal view returns (address, address, address, uint256, bool) {\n    uint16 collateralAssetId;\n    uint16 debtAssetId;\n    address user;\n    uint256 debtToCover;\n    bool receiveAToken;\n\n    assembly {\n      collateralAssetId := and(args1, 0xFFFF)\n      debtAssetId := and(shr(16, args1), 0xFFFF)\n      user := and(shr(32, args1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\n\n      debtToCover := and(args2, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\n      receiveAToken := and(shr(128, args2), 0x1)\n    }\n\n    if (debtToCover == type(uint128).max) {\n      debtToCover = type(uint256).max;\n    }\n\n    return (\n      reservesList[collateralAssetId],\n      reservesList[debtAssetId],\n      user,\n      debtToCover,\n      receiveAToken\n    );\n  }\n}\n"},"contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IPool} from '../../../interfaces/IPool.sol';\nimport {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';\nimport {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';\n\n/**\n * @title ConfiguratorLogic library\n * @author Aave\n * @notice Implements the functions to initialize reserves and update aTokens and debtTokens\n */\nlibrary ConfiguratorLogic {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  // See `IPoolConfigurator` for descriptions\n  event ReserveInitialized(\n    address indexed asset,\n    address indexed aToken,\n    address stableDebtToken,\n    address variableDebtToken,\n    address interestRateStrategyAddress\n  );\n  event ATokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n  event StableDebtTokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n  event VariableDebtTokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n\n  /**\n   * @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\n   * @dev Emits the `ReserveInitialized` event\n   * @param pool The Pool in which the reserve will be initialized\n   * @param input The needed parameters for the initialization\n   */\n  function executeInitReserve(\n    IPool pool,\n    ConfiguratorInputTypes.InitReserveInput calldata input\n  ) public {\n    address aTokenProxyAddress = _initTokenWithProxy(\n      input.aTokenImpl,\n      abi.encodeWithSelector(\n        IInitializableAToken.initialize.selector,\n        pool,\n        input.treasury,\n        input.underlyingAsset,\n        input.incentivesController,\n        input.underlyingAssetDecimals,\n        input.aTokenName,\n        input.aTokenSymbol,\n        input.params\n      )\n    );\n\n    address stableDebtTokenProxyAddress = _initTokenWithProxy(\n      input.stableDebtTokenImpl,\n      abi.encodeWithSelector(\n        IInitializableDebtToken.initialize.selector,\n        pool,\n        input.underlyingAsset,\n        input.incentivesController,\n        input.underlyingAssetDecimals,\n        input.stableDebtTokenName,\n        input.stableDebtTokenSymbol,\n        input.params\n      )\n    );\n\n    address variableDebtTokenProxyAddress = _initTokenWithProxy(\n      input.variableDebtTokenImpl,\n      abi.encodeWithSelector(\n        IInitializableDebtToken.initialize.selector,\n        pool,\n        input.underlyingAsset,\n        input.incentivesController,\n        input.underlyingAssetDecimals,\n        input.variableDebtTokenName,\n        input.variableDebtTokenSymbol,\n        input.params\n      )\n    );\n\n    pool.initReserve(\n      input.underlyingAsset,\n      aTokenProxyAddress,\n      stableDebtTokenProxyAddress,\n      variableDebtTokenProxyAddress,\n      input.interestRateStrategyAddress\n    );\n\n    DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);\n\n    currentConfig.setDecimals(input.underlyingAssetDecimals);\n\n    currentConfig.setActive(true);\n    currentConfig.setPaused(false);\n    currentConfig.setFrozen(false);\n\n    pool.setConfiguration(input.underlyingAsset, currentConfig);\n\n    emit ReserveInitialized(\n      input.underlyingAsset,\n      aTokenProxyAddress,\n      stableDebtTokenProxyAddress,\n      variableDebtTokenProxyAddress,\n      input.interestRateStrategyAddress\n    );\n  }\n\n  /**\n   * @notice Updates the aToken implementation and initializes it\n   * @dev Emits the `ATokenUpgraded` event\n   * @param cachedPool The Pool containing the reserve with the aToken\n   * @param input The parameters needed for the initialize call\n   */\n  function executeUpdateAToken(\n    IPool cachedPool,\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\n  ) public {\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\n\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\n\n    bytes memory encodedCall = abi.encodeWithSelector(\n      IInitializableAToken.initialize.selector,\n      cachedPool,\n      input.treasury,\n      input.asset,\n      input.incentivesController,\n      decimals,\n      input.name,\n      input.symbol,\n      input.params\n    );\n\n    _upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);\n\n    emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);\n  }\n\n  /**\n   * @notice Updates the stable debt token implementation and initializes it\n   * @dev Emits the `StableDebtTokenUpgraded` event\n   * @param cachedPool The Pool containing the reserve with the stable debt token\n   * @param input The parameters needed for the initialize call\n   */\n  function executeUpdateStableDebtToken(\n    IPool cachedPool,\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) public {\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\n\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\n\n    bytes memory encodedCall = abi.encodeWithSelector(\n      IInitializableDebtToken.initialize.selector,\n      cachedPool,\n      input.asset,\n      input.incentivesController,\n      decimals,\n      input.name,\n      input.symbol,\n      input.params\n    );\n\n    _upgradeTokenImplementation(\n      reserveData.stableDebtTokenAddress,\n      input.implementation,\n      encodedCall\n    );\n\n    emit StableDebtTokenUpgraded(\n      input.asset,\n      reserveData.stableDebtTokenAddress,\n      input.implementation\n    );\n  }\n\n  /**\n   * @notice Updates the variable debt token implementation and initializes it\n   * @dev Emits the `VariableDebtTokenUpgraded` event\n   * @param cachedPool The Pool containing the reserve with the variable debt token\n   * @param input The parameters needed for the initialize call\n   */\n  function executeUpdateVariableDebtToken(\n    IPool cachedPool,\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) public {\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\n\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\n\n    bytes memory encodedCall = abi.encodeWithSelector(\n      IInitializableDebtToken.initialize.selector,\n      cachedPool,\n      input.asset,\n      input.incentivesController,\n      decimals,\n      input.name,\n      input.symbol,\n      input.params\n    );\n\n    _upgradeTokenImplementation(\n      reserveData.variableDebtTokenAddress,\n      input.implementation,\n      encodedCall\n    );\n\n    emit VariableDebtTokenUpgraded(\n      input.asset,\n      reserveData.variableDebtTokenAddress,\n      input.implementation\n    );\n  }\n\n  /**\n   * @notice Creates a new proxy and initializes the implementation\n   * @param implementation The address of the implementation\n   * @param initParams The parameters that is passed to the implementation to initialize\n   * @return The address of initialized proxy\n   */\n  function _initTokenWithProxy(\n    address implementation,\n    bytes memory initParams\n  ) internal returns (address) {\n    InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(\n        address(this)\n      );\n\n    proxy.initialize(implementation, initParams);\n\n    return address(proxy);\n  }\n\n  /**\n   * @notice Upgrades the implementation and makes call to the proxy\n   * @dev The call is used to initialize the new implementation.\n   * @param proxyAddress The address of the proxy\n   * @param implementation The address of the new implementation\n   * @param  initParams The parameters to the call after the upgrade\n   */\n  function _upgradeTokenImplementation(\n    address proxyAddress,\n    address implementation,\n    bytes memory initParams\n  ) internal {\n    InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(\n        payable(proxyAddress)\n      );\n\n    proxy.upgradeToAndCall(implementation, initParams);\n  }\n}\n"},"contracts/protocol/libraries/logic/EModeLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\n\n/**\n * @title EModeLogic library\n * @author Aave\n * @notice Implements the base logic for all the actions related to the eMode\n */\nlibrary EModeLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using GPv2SafeERC20 for IERC20;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n\n  // See `IPool` for descriptions\n  event UserEModeSet(address indexed user, uint8 categoryId);\n\n  /**\n   * @notice Updates the user efficiency mode category\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\n   * @dev Emits the `UserEModeSet` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param usersEModeCategory The state of all users efficiency mode category\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the setUserEMode function\n   */\n  function executeSetUserEMode(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    mapping(address => uint8) storage usersEModeCategory,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteSetUserEModeParams memory params\n  ) external {\n    ValidationLogic.validateSetUserEMode(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      userConfig,\n      params.reservesCount,\n      params.categoryId\n    );\n\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\n    usersEModeCategory[msg.sender] = params.categoryId;\n\n    if (prevCategoryId != 0) {\n      ValidationLogic.validateHealthFactor(\n        reservesData,\n        reservesList,\n        eModeCategories,\n        userConfig,\n        msg.sender,\n        params.categoryId,\n        params.reservesCount,\n        params.oracle\n      );\n    }\n    emit UserEModeSet(msg.sender, params.categoryId);\n  }\n\n  /**\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\n   * @dev The eMode asset price returned is 0 if no oracle is specified\n   * @param category The user eMode category\n   * @param oracle The price oracle\n   * @return The eMode ltv\n   * @return The eMode liquidation threshold\n   * @return The eMode asset price\n   */\n  function getEModeConfiguration(\n    DataTypes.EModeCategory storage category,\n    IPriceOracleGetter oracle\n  ) internal view returns (uint256, uint256, uint256) {\n    uint256 eModeAssetPrice = 0;\n    address eModePriceSource = category.priceSource;\n\n    if (eModePriceSource != address(0)) {\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\n    }\n\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\n  }\n\n  /**\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\n   * @param eModeUserCategory The user eMode category\n   * @param eModeAssetCategory The asset eMode category\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\n   */\n  function isInEModeCategory(\n    uint256 eModeUserCategory,\n    uint256 eModeAssetCategory\n  ) internal pure returns (bool) {\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\n  }\n}\n"},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {BorrowLogic} from './BorrowLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\n\n/**\n * @title FlashLoanLogic library\n * @author Aave\n * @notice Implements the logic for the flash loans\n */\nlibrary FlashLoanLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using GPv2SafeERC20 for IERC20;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using SafeCast for uint256;\n\n  // See `IPool` for descriptions\n  event FlashLoan(\n    address indexed target,\n    address initiator,\n    address indexed asset,\n    uint256 amount,\n    DataTypes.InterestRateMode interestRateMode,\n    uint256 premium,\n    uint16 indexed referralCode\n  );\n\n  // Helper struct for internal variables used in the `executeFlashLoan` function\n  struct FlashLoanLocalVars {\n    IFlashLoanReceiver receiver;\n    uint256 i;\n    address currentAsset;\n    uint256 currentAmount;\n    uint256[] totalPremiums;\n    uint256 flashloanPremiumTotal;\n    uint256 flashloanPremiumToProtocol;\n  }\n\n  /**\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\n   * as long as the amount taken plus fee is returned or debt is opened.\n   * @dev For authorized flashborrowers the fee is waived\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\n   * if the receiver have not approved the pool the transaction will revert.\n   * @dev Emits the `FlashLoan()` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the flashloan function\n   */\n  function executeFlashLoan(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.FlashloanParams memory params\n  ) external {\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\n\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\n\n    FlashLoanLocalVars memory vars;\n\n    vars.totalPremiums = new uint256[](params.assets.length);\n\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\n      ? (0, 0)\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\n\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\n      vars.currentAmount = params.amounts[vars.i];\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\n        DataTypes.InterestRateMode.NONE\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\n        : 0;\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\n        params.receiverAddress,\n        vars.currentAmount\n      );\n    }\n\n    require(\n      vars.receiver.executeOperation(\n        params.assets,\n        params.amounts,\n        vars.totalPremiums,\n        msg.sender,\n        params.params\n      ),\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\n    );\n\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\n      vars.currentAsset = params.assets[vars.i];\n      vars.currentAmount = params.amounts[vars.i];\n\n      if (\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\n        DataTypes.InterestRateMode.NONE\n      ) {\n        _handleFlashLoanRepayment(\n          reservesData[vars.currentAsset],\n          DataTypes.FlashLoanRepaymentParams({\n            asset: vars.currentAsset,\n            receiverAddress: params.receiverAddress,\n            amount: vars.currentAmount,\n            totalPremium: vars.totalPremiums[vars.i],\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\n            referralCode: params.referralCode\n          })\n        );\n      } else {\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\n        // eventually opens a debt position\n        BorrowLogic.executeBorrow(\n          reservesData,\n          reservesList,\n          eModeCategories,\n          userConfig,\n          DataTypes.ExecuteBorrowParams({\n            asset: vars.currentAsset,\n            user: msg.sender,\n            onBehalfOf: params.onBehalfOf,\n            amount: vars.currentAmount,\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\n            referralCode: params.referralCode,\n            releaseUnderlying: false,\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\n            reservesCount: params.reservesCount,\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\n            userEModeCategory: params.userEModeCategory,\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\n              .getPriceOracleSentinel()\n          })\n        );\n        // no premium is paid when taking on the flashloan as debt\n        emit FlashLoan(\n          params.receiverAddress,\n          msg.sender,\n          vars.currentAsset,\n          vars.currentAmount,\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\n          0,\n          params.referralCode\n        );\n      }\n    }\n  }\n\n  /**\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\n   * transaction as long as the amount taken plus fee is returned.\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\n   * if the receiver have not approved the pool the transaction will revert.\n   * @dev Emits the `FlashLoan()` event\n   * @param reserve The state of the flashloaned reserve\n   * @param params The additional parameters needed to execute the simple flashloan function\n   */\n  function executeFlashLoanSimple(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.FlashloanSimpleParams memory params\n  ) external {\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\n\n    ValidationLogic.validateFlashloanSimple(reserve);\n\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\n\n    require(\n      receiver.executeOperation(\n        params.asset,\n        params.amount,\n        totalPremium,\n        msg.sender,\n        params.params\n      ),\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\n    );\n\n    _handleFlashLoanRepayment(\n      reserve,\n      DataTypes.FlashLoanRepaymentParams({\n        asset: params.asset,\n        receiverAddress: params.receiverAddress,\n        amount: params.amount,\n        totalPremium: totalPremium,\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\n        referralCode: params.referralCode\n      })\n    );\n  }\n\n  /**\n   * @notice Handles repayment of flashloaned assets + premium\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\n   * @param reserve The state of the flashloaned reserve\n   * @param params The additional parameters needed to execute the repayment function\n   */\n  function _handleFlashLoanRepayment(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.FlashLoanRepaymentParams memory params\n  ) internal {\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\n\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n    reserve.updateState(reserveCache);\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\n      premiumToLP\n    );\n\n    reserve.accruedToTreasury += premiumToProtocol\n      .rayDiv(reserveCache.nextLiquidityIndex)\n      .toUint128();\n\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\n\n    IERC20(params.asset).safeTransferFrom(\n      params.receiverAddress,\n      reserveCache.aTokenAddress,\n      amountPlusPremium\n    );\n\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\n      params.receiverAddress,\n      params.receiverAddress,\n      amountPlusPremium\n    );\n\n    emit FlashLoan(\n      params.receiverAddress,\n      msg.sender,\n      params.asset,\n      params.amount,\n      DataTypes.InterestRateMode(0),\n      params.totalPremium,\n      params.referralCode\n    );\n  }\n}\n"},"contracts/protocol/libraries/logic/GenericLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {EModeLogic} from './EModeLogic.sol';\n\n/**\n * @title GenericLogic library\n * @author Aave\n * @notice Implements protocol-level logic to calculate and validate the state of a user\n */\nlibrary GenericLogic {\n  using ReserveLogic for DataTypes.ReserveData;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n\n  struct CalculateUserAccountDataVars {\n    uint256 assetPrice;\n    uint256 assetUnit;\n    uint256 userBalanceInBaseCurrency;\n    uint256 decimals;\n    uint256 ltv;\n    uint256 liquidationThreshold;\n    uint256 i;\n    uint256 healthFactor;\n    uint256 totalCollateralInBaseCurrency;\n    uint256 totalDebtInBaseCurrency;\n    uint256 avgLtv;\n    uint256 avgLiquidationThreshold;\n    uint256 eModeAssetPrice;\n    uint256 eModeLtv;\n    uint256 eModeLiqThreshold;\n    uint256 eModeAssetCategory;\n    address currentReserveAddress;\n    bool hasZeroLtvCollateral;\n    bool isInEModeCategory;\n  }\n\n  /**\n   * @notice Calculates the user data across the reserves.\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param params Additional parameters needed for the calculation\n   * @return The total collateral of the user in the base currency used by the price feed\n   * @return The total debt of the user in the base currency used by the price feed\n   * @return The average ltv of the user\n   * @return The average liquidation threshold of the user\n   * @return The health factor of the user\n   * @return True if the ltv is zero, false otherwise\n   */\n  function calculateUserAccountData(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.CalculateUserAccountDataParams memory params\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\n    if (params.userConfig.isEmpty()) {\n      return (0, 0, 0, 0, type(uint256).max, false);\n    }\n\n    CalculateUserAccountDataVars memory vars;\n\n    if (params.userEModeCategory != 0) {\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\n        .getEModeConfiguration(\n          eModeCategories[params.userEModeCategory],\n          IPriceOracleGetter(params.oracle)\n        );\n    }\n\n    while (vars.i < params.reservesCount) {\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\n        unchecked {\n          ++vars.i;\n        }\n        continue;\n      }\n\n      vars.currentReserveAddress = reservesList[vars.i];\n\n      if (vars.currentReserveAddress == address(0)) {\n        unchecked {\n          ++vars.i;\n        }\n        continue;\n      }\n\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\n\n      (\n        vars.ltv,\n        vars.liquidationThreshold,\n        ,\n        vars.decimals,\n        ,\n        vars.eModeAssetCategory\n      ) = currentReserve.configuration.getParams();\n\n      unchecked {\n        vars.assetUnit = 10 ** vars.decimals;\n      }\n\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\n        params.userEModeCategory == vars.eModeAssetCategory\n        ? vars.eModeAssetPrice\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\n\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\n          params.user,\n          currentReserve,\n          vars.assetPrice,\n          vars.assetUnit\n        );\n\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\n\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\n          params.userEModeCategory,\n          vars.eModeAssetCategory\n        );\n\n        if (vars.ltv != 0) {\n          vars.avgLtv +=\n            vars.userBalanceInBaseCurrency *\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\n        } else {\n          vars.hasZeroLtvCollateral = true;\n        }\n\n        vars.avgLiquidationThreshold +=\n          vars.userBalanceInBaseCurrency *\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\n      }\n\n      if (params.userConfig.isBorrowing(vars.i)) {\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\n          params.user,\n          currentReserve,\n          vars.assetPrice,\n          vars.assetUnit\n        );\n      }\n\n      unchecked {\n        ++vars.i;\n      }\n    }\n\n    unchecked {\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\n        : 0;\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\n        : 0;\n    }\n\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\n      ? type(uint256).max\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\n        vars.totalDebtInBaseCurrency\n      );\n    return (\n      vars.totalCollateralInBaseCurrency,\n      vars.totalDebtInBaseCurrency,\n      vars.avgLtv,\n      vars.avgLiquidationThreshold,\n      vars.healthFactor,\n      vars.hasZeroLtvCollateral\n    );\n  }\n\n  /**\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\n   * and the average Loan To Value\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\n   * @param ltv The average loan to value\n   * @return The amount available to borrow in the base currency of the used by the price feed\n   */\n  function calculateAvailableBorrows(\n    uint256 totalCollateralInBaseCurrency,\n    uint256 totalDebtInBaseCurrency,\n    uint256 ltv\n  ) internal pure returns (uint256) {\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\n\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\n      return 0;\n    }\n\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\n    return availableBorrowsInBaseCurrency;\n  }\n\n  /**\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\n   * fetching `balanceOf`\n   * @param user The address of the user\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\n   * @return The total debt of the user normalized to the base currency\n   */\n  function _getUserDebtInBaseCurrency(\n    address user,\n    DataTypes.ReserveData storage reserve,\n    uint256 assetPrice,\n    uint256 assetUnit\n  ) private view returns (uint256) {\n    // fetching variable debt\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\n      user\n    );\n    if (userTotalDebt != 0) {\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\n    }\n\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\n\n    userTotalDebt = assetPrice * userTotalDebt;\n\n    unchecked {\n      return userTotalDebt / assetUnit;\n    }\n  }\n\n  /**\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\n   * is cheaper than fetching `balanceOf`\n   * @param user The address of the user\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\n   */\n  function _getUserBalanceInBaseCurrency(\n    address user,\n    DataTypes.ReserveData storage reserve,\n    uint256 assetPrice,\n    uint256 assetUnit\n  ) private view returns (uint256) {\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\n    uint256 balance = (\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\n    ) * assetPrice;\n\n    unchecked {\n      return balance / assetUnit;\n    }\n  }\n}\n"},"contracts/protocol/libraries/logic/IsolationModeLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\n\n/**\n * @title IsolationModeLogic library\n * @author Aave\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\n */\nlibrary IsolationModeLogic {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using SafeCast for uint256;\n\n  // See `IPool` for descriptions\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\n\n  /**\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig The user configuration mapping\n   * @param reserveCache The cached data of the reserve\n   * @param repayAmount The amount being repaid\n   */\n  function updateIsolatedDebtIfIsolated(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ReserveCache memory reserveCache,\n    uint256 repayAmount\n  ) internal {\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\n      .getIsolationModeState(reservesData, reservesList);\n\n    if (isolationModeActive) {\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\n        .isolationModeTotalDebt;\n\n      uint128 isolatedDebtRepaid = (repayAmount /\n        10 **\n          (reserveCache.reserveConfiguration.getDecimals() -\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\n\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\n      // repaid > debt in isolation mode\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\n      } else {\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\n        emit IsolationModeTotalDebtUpdated(\n          isolationModeCollateralAddress,\n          nextIsolationModeTotalDebt\n        );\n      }\n    }\n  }\n}\n"},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {GenericLogic} from './GenericLogic.sol';\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\nimport {EModeLogic} from './EModeLogic.sol';\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\n\n/**\n * @title LiquidationLogic library\n * @author Aave\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\n */\nlibrary LiquidationLogic {\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using GPv2SafeERC20 for IERC20;\n\n  // See `IPool` for descriptions\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\n  event LiquidationCall(\n    address indexed collateralAsset,\n    address indexed debtAsset,\n    address indexed user,\n    uint256 debtToCover,\n    uint256 liquidatedCollateralAmount,\n    address liquidator,\n    bool receiveAToken\n  );\n\n  /**\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\n   */\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\n\n  /**\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\n   * Expressed in bps, a value of 1e4 results in 100.00%\n   */\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\n\n  /**\n   * @dev This constant represents below which health factor value it is possible to liquidate\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\n   * A value of 0.95e18 results in 0.95\n   */\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\n\n  struct LiquidationCallLocalVars {\n    uint256 userCollateralBalance;\n    uint256 userVariableDebt;\n    uint256 userTotalDebt;\n    uint256 actualDebtToLiquidate;\n    uint256 actualCollateralToLiquidate;\n    uint256 liquidationBonus;\n    uint256 healthFactor;\n    uint256 liquidationProtocolFeeAmount;\n    address collateralPriceSource;\n    address debtPriceSource;\n    IAToken collateralAToken;\n    DataTypes.ReserveCache debtReserveCache;\n  }\n\n  /**\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\n   * @dev Emits the `LiquidationCall()` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param params The additional parameters needed to execute the liquidation function\n   */\n  function executeLiquidationCall(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.ExecuteLiquidationCallParams memory params\n  ) external {\n    LiquidationCallLocalVars memory vars;\n\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\n    vars.debtReserveCache = debtReserve.cache();\n    debtReserve.updateState(vars.debtReserveCache);\n\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      DataTypes.CalculateUserAccountDataParams({\n        userConfig: userConfig,\n        reservesCount: params.reservesCount,\n        user: params.user,\n        oracle: params.priceOracle,\n        userEModeCategory: params.userEModeCategory\n      })\n    );\n\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\n      vars.debtReserveCache,\n      params,\n      vars.healthFactor\n    );\n\n    ValidationLogic.validateLiquidationCall(\n      userConfig,\n      collateralReserve,\n      DataTypes.ValidateLiquidationCallParams({\n        debtReserveCache: vars.debtReserveCache,\n        totalDebt: vars.userTotalDebt,\n        healthFactor: vars.healthFactor,\n        priceOracleSentinel: params.priceOracleSentinel\n      })\n    );\n\n    (\n      vars.collateralAToken,\n      vars.collateralPriceSource,\n      vars.debtPriceSource,\n      vars.liquidationBonus\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\n\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\n\n    (\n      vars.actualCollateralToLiquidate,\n      vars.actualDebtToLiquidate,\n      vars.liquidationProtocolFeeAmount\n    ) = _calculateAvailableCollateralToLiquidate(\n      collateralReserve,\n      vars.debtReserveCache,\n      vars.collateralPriceSource,\n      vars.debtPriceSource,\n      vars.actualDebtToLiquidate,\n      vars.userCollateralBalance,\n      vars.liquidationBonus,\n      IPriceOracleGetter(params.priceOracle)\n    );\n\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\n      userConfig.setBorrowing(debtReserve.id, false);\n    }\n\n    // If the collateral being liquidated is equal to the user balance,\n    // we set the currency as not being used as collateral anymore\n    if (\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\n      vars.userCollateralBalance\n    ) {\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\n    }\n\n    _burnDebtTokens(params, vars);\n\n    debtReserve.updateInterestRates(\n      vars.debtReserveCache,\n      params.debtAsset,\n      vars.actualDebtToLiquidate,\n      0\n    );\n\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\n      reservesData,\n      reservesList,\n      userConfig,\n      vars.debtReserveCache,\n      vars.actualDebtToLiquidate\n    );\n\n    if (params.receiveAToken) {\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\n    } else {\n      _burnCollateralATokens(collateralReserve, params, vars);\n    }\n\n    // Transfer fee to treasury if it is non-zero\n    if (vars.liquidationProtocolFeeAmount != 0) {\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\n        liquidityIndex\n      );\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\n      }\n      vars.collateralAToken.transferOnLiquidation(\n        params.user,\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\n        vars.liquidationProtocolFeeAmount\n      );\n    }\n\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\n    IERC20(params.debtAsset).safeTransferFrom(\n      msg.sender,\n      vars.debtReserveCache.aTokenAddress,\n      vars.actualDebtToLiquidate\n    );\n\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\n      msg.sender,\n      params.user,\n      vars.actualDebtToLiquidate\n    );\n\n    emit LiquidationCall(\n      params.collateralAsset,\n      params.debtAsset,\n      params.user,\n      vars.actualDebtToLiquidate,\n      vars.actualCollateralToLiquidate,\n      msg.sender,\n      params.receiveAToken\n    );\n  }\n\n  /**\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\n   * @param collateralReserve The data of the collateral reserve\n   * @param params The additional parameters needed to execute the liquidation function\n   * @param vars The executeLiquidationCall() function local vars\n   */\n  function _burnCollateralATokens(\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ExecuteLiquidationCallParams memory params,\n    LiquidationCallLocalVars memory vars\n  ) internal {\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\n    collateralReserve.updateState(collateralReserveCache);\n    collateralReserve.updateInterestRates(\n      collateralReserveCache,\n      params.collateralAsset,\n      0,\n      vars.actualCollateralToLiquidate\n    );\n\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\n    vars.collateralAToken.burn(\n      params.user,\n      msg.sender,\n      vars.actualCollateralToLiquidate,\n      collateralReserveCache.nextLiquidityIndex\n    );\n  }\n\n  /**\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\n   *        as in standard transfers if the isolation mode constraints are respected.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n   * @param collateralReserve The data of the collateral reserve\n   * @param params The additional parameters needed to execute the liquidation function\n   * @param vars The executeLiquidationCall() function local vars\n   */\n  function _liquidateATokens(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ExecuteLiquidationCallParams memory params,\n    LiquidationCallLocalVars memory vars\n  ) internal {\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\n    vars.collateralAToken.transferOnLiquidation(\n      params.user,\n      msg.sender,\n      vars.actualCollateralToLiquidate\n    );\n\n    if (liquidatorPreviousATokenBalance == 0) {\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\n      if (\n        ValidationLogic.validateAutomaticUseAsCollateral(\n          reservesData,\n          reservesList,\n          liquidatorConfig,\n          collateralReserve.configuration,\n          collateralReserve.aTokenAddress\n        )\n      ) {\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\n      }\n    }\n  }\n\n  /**\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\n   * @param params The additional parameters needed to execute the liquidation function\n   * @param vars the executeLiquidationCall() function local vars\n   */\n  function _burnDebtTokens(\n    DataTypes.ExecuteLiquidationCallParams memory params,\n    LiquidationCallLocalVars memory vars\n  ) internal {\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\n        vars.debtReserveCache.variableDebtTokenAddress\n      ).burn(\n          params.user,\n          vars.actualDebtToLiquidate,\n          vars.debtReserveCache.nextVariableBorrowIndex\n        );\n    } else {\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\n      if (vars.userVariableDebt != 0) {\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\n          vars.debtReserveCache.variableDebtTokenAddress\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\n      }\n      (\n        vars.debtReserveCache.nextTotalStableDebt,\n        vars.debtReserveCache.nextAvgStableBorrowRate\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\n        params.user,\n        vars.actualDebtToLiquidate - vars.userVariableDebt\n      );\n    }\n  }\n\n  /**\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\n   * and corresponding close factor.\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\n   * @param debtReserveCache The reserve cache data object of the debt reserve\n   * @param params The additional parameters needed to execute the liquidation function\n   * @param healthFactor The health factor of the position\n   * @return The variable debt of the user\n   * @return The total debt of the user\n   * @return The actual debt to liquidate as a function of the closeFactor\n   */\n  function _calculateDebt(\n    DataTypes.ReserveCache memory debtReserveCache,\n    DataTypes.ExecuteLiquidationCallParams memory params,\n    uint256 healthFactor\n  ) internal view returns (uint256, uint256, uint256) {\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\n      params.user,\n      debtReserveCache\n    );\n\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\n\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\n\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\n\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\n      ? maxLiquidatableDebt\n      : params.debtToCover;\n\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\n  }\n\n  /**\n   * @notice Returns the configuration data for the debt and the collateral reserves.\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param collateralReserve The data of the collateral reserve\n   * @param params The additional parameters needed to execute the liquidation function\n   * @return The collateral aToken\n   * @return The address to use as price source for the collateral\n   * @return The address to use as price source for the debt\n   * @return The liquidation bonus to apply to the collateral\n   */\n  function _getConfigurationData(\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ExecuteLiquidationCallParams memory params\n  ) internal view returns (IAToken, address, address, uint256) {\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\n\n    address collateralPriceSource = params.collateralAsset;\n    address debtPriceSource = params.debtAsset;\n\n    if (params.userEModeCategory != 0) {\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\n\n      if (\n        EModeLogic.isInEModeCategory(\n          params.userEModeCategory,\n          collateralReserve.configuration.getEModeCategory()\n        )\n      ) {\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\n\n        if (eModePriceSource != address(0)) {\n          collateralPriceSource = eModePriceSource;\n        }\n      }\n\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\n      if (eModePriceSource != address(0)) {\n        debtPriceSource = eModePriceSource;\n      }\n    }\n\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\n  }\n\n  struct AvailableCollateralToLiquidateLocalVars {\n    uint256 collateralPrice;\n    uint256 debtAssetPrice;\n    uint256 maxCollateralToLiquidate;\n    uint256 baseCollateral;\n    uint256 bonusCollateral;\n    uint256 debtAssetDecimals;\n    uint256 collateralDecimals;\n    uint256 collateralAssetUnit;\n    uint256 debtAssetUnit;\n    uint256 collateralAmount;\n    uint256 debtAmountNeeded;\n    uint256 liquidationProtocolFeePercentage;\n    uint256 liquidationProtocolFee;\n  }\n\n  /**\n   * @notice Calculates how much of a specific collateral can be liquidated, given\n   * a certain amount of debt asset.\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\n   *   otherwise it might fail.\n   * @param collateralReserve The data of the collateral reserve\n   * @param debtReserveCache The cached data of the debt reserve\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\n   * @return The amount to repay with the liquidation\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\n   */\n  function _calculateAvailableCollateralToLiquidate(\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ReserveCache memory debtReserveCache,\n    address collateralAsset,\n    address debtAsset,\n    uint256 debtToCover,\n    uint256 userCollateralBalance,\n    uint256 liquidationBonus,\n    IPriceOracleGetter oracle\n  ) internal view returns (uint256, uint256, uint256) {\n    AvailableCollateralToLiquidateLocalVars memory vars;\n\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\n\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\n\n    unchecked {\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\n    }\n\n    vars.liquidationProtocolFeePercentage = collateralReserve\n      .configuration\n      .getLiquidationProtocolFee();\n\n    // This is the base collateral to liquidate based on the given debt to cover\n    vars.baseCollateral =\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\n      (vars.collateralPrice * vars.debtAssetUnit);\n\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\n\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\n      vars.collateralAmount = userCollateralBalance;\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\n    } else {\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\n      vars.debtAmountNeeded = debtToCover;\n    }\n\n    if (vars.liquidationProtocolFeePercentage != 0) {\n      vars.bonusCollateral =\n        vars.collateralAmount -\n        vars.collateralAmount.percentDiv(liquidationBonus);\n\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\n        vars.liquidationProtocolFeePercentage\n      );\n\n      return (\n        vars.collateralAmount - vars.liquidationProtocolFee,\n        vars.debtAmountNeeded,\n        vars.liquidationProtocolFee\n      );\n    } else {\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\n    }\n  }\n}\n"},"contracts/protocol/libraries/logic/PoolLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {GenericLogic} from './GenericLogic.sol';\n\n/**\n * @title PoolLogic library\n * @author Aave\n * @notice Implements the logic for Pool specific functions\n */\nlibrary PoolLogic {\n  using GPv2SafeERC20 for IERC20;\n  using WadRayMath for uint256;\n  using ReserveLogic for DataTypes.ReserveData;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  // See `IPool` for descriptions\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\n\n  /**\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param params Additional parameters needed for initiation\n   * @return true if appended, false if inserted at existing empty spot\n   */\n  function executeInitReserve(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.InitReserveParams memory params\n  ) external returns (bool) {\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\n    reservesData[params.asset].init(\n      params.aTokenAddress,\n      params.stableDebtAddress,\n      params.variableDebtAddress,\n      params.interestRateStrategyAddress\n    );\n\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\n      reservesList[0] == params.asset;\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\n\n    for (uint16 i = 0; i < params.reservesCount; i++) {\n      if (reservesList[i] == address(0)) {\n        reservesData[params.asset].id = i;\n        reservesList[i] = params.asset;\n        return false;\n      }\n    }\n\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\n    reservesData[params.asset].id = params.reservesCount;\n    reservesList[params.reservesCount] = params.asset;\n    return true;\n  }\n\n  /**\n   * @notice Rescue and transfer tokens locked in this contract\n   * @param token The address of the token\n   * @param to The address of the recipient\n   * @param amount The amount of token to transfer\n   */\n  function executeRescueTokens(address token, address to, uint256 amount) external {\n    IERC20(token).safeTransfer(to, amount);\n  }\n\n  /**\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\n   * @param reservesData The state of all the reserves\n   * @param assets The list of reserves for which the minting needs to be executed\n   */\n  function executeMintToTreasury(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    address[] calldata assets\n  ) external {\n    for (uint256 i = 0; i < assets.length; i++) {\n      address assetAddress = assets[i];\n\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\n\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\n      if (!reserve.configuration.getActive()) {\n        continue;\n      }\n\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\n\n      if (accruedToTreasury != 0) {\n        reserve.accruedToTreasury = 0;\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\n\n        emit MintedToTreasury(assetAddress, amountToMint);\n      }\n    }\n  }\n\n  /**\n   * @notice Resets the isolation mode total debt of the given asset to zero\n   * @dev It requires the given asset has zero debt ceiling\n   * @param reservesData The state of all the reserves\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\n   */\n  function executeResetIsolationModeTotalDebt(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    address asset\n  ) external {\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\n    reservesData[asset].isolationModeTotalDebt = 0;\n    emit IsolationModeTotalDebtUpdated(asset, 0);\n  }\n\n  /**\n   * @notice Drop a reserve\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param asset The address of the underlying asset of the reserve\n   */\n  function executeDropReserve(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    address asset\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[asset];\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\n    reservesList[reservesData[asset].id] = address(0);\n    delete reservesData[asset];\n  }\n\n  /**\n   * @notice Returns the user account data across all the reserves\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param params Additional params needed for the calculation\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\n   * @return currentLiquidationThreshold The liquidation threshold of the user\n   * @return ltv The loan to value of The user\n   * @return healthFactor The current health factor of the user\n   */\n  function executeGetUserAccountData(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.CalculateUserAccountDataParams memory params\n  )\n    external\n    view\n    returns (\n      uint256 totalCollateralBase,\n      uint256 totalDebtBase,\n      uint256 availableBorrowsBase,\n      uint256 currentLiquidationThreshold,\n      uint256 ltv,\n      uint256 healthFactor\n    )\n  {\n    (\n      totalCollateralBase,\n      totalDebtBase,\n      ltv,\n      currentLiquidationThreshold,\n      healthFactor,\n\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\n\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\n      totalCollateralBase,\n      totalDebtBase,\n      ltv\n    );\n  }\n}\n"},"contracts/protocol/libraries/logic/ReserveLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {MathUtils} from '../math/MathUtils.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\n\n/**\n * @title ReserveLogic library\n * @author Aave\n * @notice Implements the logic to update the reserves state\n */\nlibrary ReserveLogic {\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using SafeCast for uint256;\n  using GPv2SafeERC20 for IERC20;\n  using ReserveLogic for DataTypes.ReserveData;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  // See `IPool` for descriptions\n  event ReserveDataUpdated(\n    address indexed reserve,\n    uint256 liquidityRate,\n    uint256 stableBorrowRate,\n    uint256 variableBorrowRate,\n    uint256 liquidityIndex,\n    uint256 variableBorrowIndex\n  );\n\n  /**\n   * @notice Returns the ongoing normalized income for the reserve.\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\n   * @param reserve The reserve object\n   * @return The normalized income, expressed in ray\n   */\n  function getNormalizedIncome(\n    DataTypes.ReserveData storage reserve\n  ) internal view returns (uint256) {\n    uint40 timestamp = reserve.lastUpdateTimestamp;\n\n    //solium-disable-next-line\n    if (timestamp == block.timestamp) {\n      //if the index was updated in the same block, no need to perform any calculation\n      return reserve.liquidityIndex;\n    } else {\n      return\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\n          reserve.liquidityIndex\n        );\n    }\n  }\n\n  /**\n   * @notice Returns the ongoing normalized variable debt for the reserve.\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\n   * @param reserve The reserve object\n   * @return The normalized variable debt, expressed in ray\n   */\n  function getNormalizedDebt(\n    DataTypes.ReserveData storage reserve\n  ) internal view returns (uint256) {\n    uint40 timestamp = reserve.lastUpdateTimestamp;\n\n    //solium-disable-next-line\n    if (timestamp == block.timestamp) {\n      //if the index was updated in the same block, no need to perform any calculation\n      return reserve.variableBorrowIndex;\n    } else {\n      return\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\n          reserve.variableBorrowIndex\n        );\n    }\n  }\n\n  /**\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\n   * @param reserve The reserve object\n   * @param reserveCache The caching layer for the reserve data\n   */\n  function updateState(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache\n  ) internal {\n    // If time didn't pass since last stored timestamp, skip state update\n    //solium-disable-next-line\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\n      return;\n    }\n\n    _updateIndexes(reserve, reserveCache);\n    _accrueToTreasury(reserve, reserveCache);\n\n    //solium-disable-next-line\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\n  }\n\n  /**\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\n   * @param reserve The reserve object\n   * @param totalLiquidity The total liquidity available in the reserve\n   * @param amount The amount to accumulate\n   * @return The next liquidity index of the reserve\n   */\n  function cumulateToLiquidityIndex(\n    DataTypes.ReserveData storage reserve,\n    uint256 totalLiquidity,\n    uint256 amount\n  ) internal returns (uint256) {\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\n    //division `amount / totalLiquidity` done in ray for precision\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\n      reserve.liquidityIndex\n    );\n    reserve.liquidityIndex = result.toUint128();\n    return result;\n  }\n\n  /**\n   * @notice Initializes a reserve.\n   * @param reserve The reserve object\n   * @param aTokenAddress The address of the overlying atoken contract\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\n   */\n  function init(\n    DataTypes.ReserveData storage reserve,\n    address aTokenAddress,\n    address stableDebtTokenAddress,\n    address variableDebtTokenAddress,\n    address interestRateStrategyAddress\n  ) internal {\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\n\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\n    reserve.aTokenAddress = aTokenAddress;\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\n  }\n\n  struct UpdateInterestRatesLocalVars {\n    uint256 nextLiquidityRate;\n    uint256 nextStableRate;\n    uint256 nextVariableRate;\n    uint256 totalVariableDebt;\n  }\n\n  /**\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\n   * @param reserve The reserve reserve to be updated\n   * @param reserveCache The caching layer for the reserve data\n   * @param reserveAddress The address of the reserve to be updated\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\n   */\n  function updateInterestRates(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache,\n    address reserveAddress,\n    uint256 liquidityAdded,\n    uint256 liquidityTaken\n  ) internal {\n    UpdateInterestRatesLocalVars memory vars;\n\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\n      reserveCache.nextVariableBorrowIndex\n    );\n\n    (\n      vars.nextLiquidityRate,\n      vars.nextStableRate,\n      vars.nextVariableRate\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\n      DataTypes.CalculateInterestRatesParams({\n        unbacked: reserve.unbacked,\n        liquidityAdded: liquidityAdded,\n        liquidityTaken: liquidityTaken,\n        totalStableDebt: reserveCache.nextTotalStableDebt,\n        totalVariableDebt: vars.totalVariableDebt,\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\n        reserveFactor: reserveCache.reserveFactor,\n        reserve: reserveAddress,\n        aToken: reserveCache.aTokenAddress\n      })\n    );\n\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\n\n    emit ReserveDataUpdated(\n      reserveAddress,\n      vars.nextLiquidityRate,\n      vars.nextStableRate,\n      vars.nextVariableRate,\n      reserveCache.nextLiquidityIndex,\n      reserveCache.nextVariableBorrowIndex\n    );\n  }\n\n  struct AccrueToTreasuryLocalVars {\n    uint256 prevTotalStableDebt;\n    uint256 prevTotalVariableDebt;\n    uint256 currTotalVariableDebt;\n    uint256 cumulatedStableInterest;\n    uint256 totalDebtAccrued;\n    uint256 amountToMint;\n  }\n\n  /**\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\n   * specific asset.\n   * @param reserve The reserve to be updated\n   * @param reserveCache The caching layer for the reserve data\n   */\n  function _accrueToTreasury(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache\n  ) internal {\n    AccrueToTreasuryLocalVars memory vars;\n\n    if (reserveCache.reserveFactor == 0) {\n      return;\n    }\n\n    //calculate the total variable debt at moment of the last interaction\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\n      reserveCache.currVariableBorrowIndex\n    );\n\n    //calculate the new total variable debt after accumulation of the interest on the index\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\n      reserveCache.nextVariableBorrowIndex\n    );\n\n    //calculate the stable debt until the last timestamp update\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\n      reserveCache.currAvgStableBorrowRate,\n      reserveCache.stableDebtLastUpdateTimestamp,\n      reserveCache.reserveLastUpdateTimestamp\n    );\n\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\n      vars.cumulatedStableInterest\n    );\n\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\n    vars.totalDebtAccrued =\n      vars.currTotalVariableDebt +\n      reserveCache.currTotalStableDebt -\n      vars.prevTotalVariableDebt -\n      vars.prevTotalStableDebt;\n\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\n\n    if (vars.amountToMint != 0) {\n      reserve.accruedToTreasury += vars\n        .amountToMint\n        .rayDiv(reserveCache.nextLiquidityIndex)\n        .toUint128();\n    }\n  }\n\n  /**\n   * @notice Updates the reserve indexes and the timestamp of the update.\n   * @param reserve The reserve reserve to be updated\n   * @param reserveCache The cache layer holding the cached protocol data\n   */\n  function _updateIndexes(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache\n  ) internal {\n    // Only cumulating on the supply side if there is any income being produced\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\n    // as liquidity index should not be updated\n    if (reserveCache.currLiquidityRate != 0) {\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\n        reserveCache.currLiquidityRate,\n        reserveCache.reserveLastUpdateTimestamp\n      );\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\n        reserveCache.currLiquidityIndex\n      );\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\n    }\n\n    // Variable borrow index only gets updated if there is any variable debt.\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\n    // because a positive base variable rate can be stored on\n    // reserveCache.currVariableBorrowRate, but the index should not increase\n    if (reserveCache.currScaledVariableDebt != 0) {\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\n        reserveCache.currVariableBorrowRate,\n        reserveCache.reserveLastUpdateTimestamp\n      );\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\n        reserveCache.currVariableBorrowIndex\n      );\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\n    }\n  }\n\n  /**\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\n   * interest rates.\n   * @param reserve The reserve object for which the cache will be filled\n   * @return The cache object\n   */\n  function cache(\n    DataTypes.ReserveData storage reserve\n  ) internal view returns (DataTypes.ReserveCache memory) {\n    DataTypes.ReserveCache memory reserveCache;\n\n    reserveCache.reserveConfiguration = reserve.configuration;\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\n      .variableBorrowIndex;\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\n\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\n\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\n\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\n      reserveCache.variableDebtTokenAddress\n    ).scaledTotalSupply();\n\n    (\n      reserveCache.currPrincipalStableDebt,\n      reserveCache.currTotalStableDebt,\n      reserveCache.currAvgStableBorrowRate,\n      reserveCache.stableDebtLastUpdateTimestamp\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\n\n    // by default the actions are considered as not affecting the debt balances.\n    // if the action involves mint/burn of debt, the cache needs to be updated\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\n\n    return reserveCache;\n  }\n}\n"},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\n\n/**\n * @title SupplyLogic library\n * @author Aave\n * @notice Implements the base logic for supply/withdraw\n */\nlibrary SupplyLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using GPv2SafeERC20 for IERC20;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n\n  // See `IPool` for descriptions\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\n  event Supply(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\n   * @dev Emits the `Supply()` event.\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\n   * collateral.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the supply function\n   */\n  function executeSupply(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteSupplyParams memory params\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\n\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\n\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\n\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\n      msg.sender,\n      params.onBehalfOf,\n      params.amount,\n      reserveCache.nextLiquidityIndex\n    );\n\n    if (isFirstSupply) {\n      if (\n        ValidationLogic.validateAutomaticUseAsCollateral(\n          reservesData,\n          reservesList,\n          userConfig,\n          reserveCache.reserveConfiguration,\n          reserveCache.aTokenAddress\n        )\n      ) {\n        userConfig.setUsingAsCollateral(reserve.id, true);\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\n      }\n    }\n\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\n  }\n\n  /**\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\n   * previously supplied in the Aave protocol.\n   * @dev Emits the `Withdraw()` event.\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the withdraw function\n   * @return The actual amount withdrawn\n   */\n  function executeWithdraw(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteWithdrawParams memory params\n  ) external returns (uint256) {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\n      reserveCache.nextLiquidityIndex\n    );\n\n    uint256 amountToWithdraw = params.amount;\n\n    if (params.amount == type(uint256).max) {\n      amountToWithdraw = userBalance;\n    }\n\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\n\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\n\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\n\n    if (isCollateral && amountToWithdraw == userBalance) {\n      userConfig.setUsingAsCollateral(reserve.id, false);\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\n    }\n\n    IAToken(reserveCache.aTokenAddress).burn(\n      msg.sender,\n      params.to,\n      amountToWithdraw,\n      reserveCache.nextLiquidityIndex\n    );\n\n    if (isCollateral && userConfig.isBorrowingAny()) {\n      ValidationLogic.validateHFAndLtv(\n        reservesData,\n        reservesList,\n        eModeCategories,\n        userConfig,\n        params.asset,\n        msg.sender,\n        params.reservesCount,\n        params.oracle,\n        params.userEModeCategory\n      );\n    }\n\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\n\n    return amountToWithdraw;\n  }\n\n  /**\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\n   * collateralization constraints violation.\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\n   * collateral.\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the finalizeTransfer function\n   */\n  function executeFinalizeTransfer(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\n    DataTypes.FinalizeTransferParams memory params\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n\n    ValidationLogic.validateTransfer(reserve);\n\n    uint256 reserveId = reserve.id;\n\n    if (params.from != params.to && params.amount != 0) {\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\n\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\n        if (fromConfig.isBorrowingAny()) {\n          ValidationLogic.validateHFAndLtv(\n            reservesData,\n            reservesList,\n            eModeCategories,\n            usersConfig[params.from],\n            params.asset,\n            params.from,\n            params.reservesCount,\n            params.oracle,\n            params.fromEModeCategory\n          );\n        }\n        if (params.balanceFromBefore == params.amount) {\n          fromConfig.setUsingAsCollateral(reserveId, false);\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\n        }\n      }\n\n      if (params.balanceToBefore == 0) {\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\n        if (\n          ValidationLogic.validateAutomaticUseAsCollateral(\n            reservesData,\n            reservesList,\n            toConfig,\n            reserve.configuration,\n            reserve.aTokenAddress\n          )\n        ) {\n          toConfig.setUsingAsCollateral(reserveId, true);\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\n        }\n      }\n    }\n  }\n\n  /**\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\n   * checks to ensure collateralization.\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\n   * @param asset The address of the asset being configured as collateral\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\n   * @param reservesCount The number of initialized reserves\n   * @param priceOracle The address of the price oracle\n   * @param userEModeCategory The eMode category chosen by the user\n   */\n  function executeUseReserveAsCollateral(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap storage userConfig,\n    address asset,\n    bool useAsCollateral,\n    uint256 reservesCount,\n    address priceOracle,\n    uint8 userEModeCategory\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\n\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\n\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\n\n    if (useAsCollateral) {\n      require(\n        ValidationLogic.validateUseAsCollateral(\n          reservesData,\n          reservesList,\n          userConfig,\n          reserveCache.reserveConfiguration\n        ),\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\n      );\n\n      userConfig.setUsingAsCollateral(reserve.id, true);\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\n    } else {\n      userConfig.setUsingAsCollateral(reserve.id, false);\n      ValidationLogic.validateHFAndLtv(\n        reservesData,\n        reservesList,\n        eModeCategories,\n        userConfig,\n        asset,\n        msg.sender,\n        reservesCount,\n        priceOracle,\n        userEModeCategory\n      );\n\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\n    }\n  }\n}\n"},"contracts/protocol/libraries/logic/ValidationLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {GenericLogic} from './GenericLogic.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\n\n/**\n * @title ReserveLogic library\n * @author Aave\n * @notice Implements functions to validate the different actions of the protocol\n */\nlibrary ValidationLogic {\n  using ReserveLogic for DataTypes.ReserveData;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using SafeCast for uint256;\n  using GPv2SafeERC20 for IERC20;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using Address for address;\n\n  // Factor to apply to \"only-variable-debt\" liquidity rate to get threshold for rebalancing, expressed in bps\n  // A value of 0.9e4 results in 90%\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\n\n  // Minimum health factor allowed under any circumstance\n  // A value of 0.95e18 results in 0.95\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\n\n  /**\n   * @dev Minimum health factor to consider a user position healthy\n   * A value of 1e18 results in 1\n   */\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\n\n  /**\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\n   */\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\n\n  /**\n   * @notice Validates a supply action.\n   * @param reserveCache The cached data of the reserve\n   * @param amount The amount to be supplied\n   */\n  function validateSupply(\n    DataTypes.ReserveCache memory reserveCache,\n    DataTypes.ReserveData storage reserve,\n    uint256 amount\n  ) internal view {\n    require(amount != 0, Errors.INVALID_AMOUNT);\n\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\n      .reserveConfiguration\n      .getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n    require(!isFrozen, Errors.RESERVE_FROZEN);\n\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\n    require(\n      supplyCap == 0 ||\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\n      Errors.SUPPLY_CAP_EXCEEDED\n    );\n  }\n\n  /**\n   * @notice Validates a withdraw action.\n   * @param reserveCache The cached data of the reserve\n   * @param amount The amount to be withdrawn\n   * @param userBalance The balance of the user\n   */\n  function validateWithdraw(\n    DataTypes.ReserveCache memory reserveCache,\n    uint256 amount,\n    uint256 userBalance\n  ) internal pure {\n    require(amount != 0, Errors.INVALID_AMOUNT);\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\n\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n  }\n\n  struct ValidateBorrowLocalVars {\n    uint256 currentLtv;\n    uint256 collateralNeededInBaseCurrency;\n    uint256 userCollateralInBaseCurrency;\n    uint256 userDebtInBaseCurrency;\n    uint256 availableLiquidity;\n    uint256 healthFactor;\n    uint256 totalDebt;\n    uint256 totalSupplyVariableDebt;\n    uint256 reserveDecimals;\n    uint256 borrowCap;\n    uint256 amountInBaseCurrency;\n    uint256 assetUnit;\n    address eModePriceSource;\n    address siloedBorrowingAddress;\n    bool isActive;\n    bool isFrozen;\n    bool isPaused;\n    bool borrowingEnabled;\n    bool stableRateBorrowingEnabled;\n    bool siloedBorrowingEnabled;\n  }\n\n  /**\n   * @notice Validates a borrow action.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param params Additional params needed for the validation\n   */\n  function validateBorrow(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.ValidateBorrowParams memory params\n  ) internal view {\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\n\n    ValidateBorrowLocalVars memory vars;\n\n    (\n      vars.isActive,\n      vars.isFrozen,\n      vars.borrowingEnabled,\n      vars.stableRateBorrowingEnabled,\n      vars.isPaused\n    ) = params.reserveCache.reserveConfiguration.getFlags();\n\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\n\n    require(\n      params.priceOracleSentinel == address(0) ||\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\n    );\n\n    //validate interest rate mode\n    require(\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\n    );\n\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\n    unchecked {\n      vars.assetUnit = 10 ** vars.reserveDecimals;\n    }\n\n    if (vars.borrowCap != 0) {\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\n        params.reserveCache.nextVariableBorrowIndex\n      );\n\n      vars.totalDebt =\n        params.reserveCache.currTotalStableDebt +\n        vars.totalSupplyVariableDebt +\n        params.amount;\n\n      unchecked {\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\n      }\n    }\n\n    if (params.isolationModeActive) {\n      // check that the asset being borrowed is borrowable in isolation mode AND\n      // the total exposure is no bigger than the collateral debt ceiling\n      require(\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\n      );\n\n      require(\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\n          (params.amount /\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\n            .toUint128() <=\n          params.isolationModeDebtCeiling,\n        Errors.DEBT_CEILING_EXCEEDED\n      );\n    }\n\n    if (params.userEModeCategory != 0) {\n      require(\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\n        Errors.INCONSISTENT_EMODE_CATEGORY\n      );\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\n    }\n\n    (\n      vars.userCollateralInBaseCurrency,\n      vars.userDebtInBaseCurrency,\n      vars.currentLtv,\n      ,\n      vars.healthFactor,\n\n    ) = GenericLogic.calculateUserAccountData(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      DataTypes.CalculateUserAccountDataParams({\n        userConfig: params.userConfig,\n        reservesCount: params.reservesCount,\n        user: params.userAddress,\n        oracle: params.oracle,\n        userEModeCategory: params.userEModeCategory\n      })\n    );\n\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\n\n    require(\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\n    );\n\n    vars.amountInBaseCurrency =\n      IPriceOracleGetter(params.oracle).getAssetPrice(\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\n      ) *\n      params.amount;\n    unchecked {\n      vars.amountInBaseCurrency /= vars.assetUnit;\n    }\n\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\n\n    require(\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\n    );\n\n    /**\n     * Following conditions need to be met if the user is borrowing at a stable rate:\n     * 1. Reserve must be enabled for stable rate borrowing\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\n     *    they are borrowing, to prevent abuses.\n     * 3. Users will be able to borrow only a portion of the total available liquidity\n     */\n\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\n\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\n\n      require(\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\n      );\n\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\n\n      //calculate the max available loan size in stable rate mode as a percentage of the\n      //available liquidity\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\n\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\n    }\n\n    if (params.userConfig.isBorrowingAny()) {\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\n        .userConfig\n        .getSiloedBorrowingState(reservesData, reservesList);\n\n      if (vars.siloedBorrowingEnabled) {\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\n      } else {\n        require(\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\n          Errors.SILOED_BORROWING_VIOLATION\n        );\n      }\n    }\n  }\n\n  /**\n   * @notice Validates a repay action.\n   * @param reserveCache The cached data of the reserve\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\n   * @param interestRateMode The interest rate mode of the debt being repaid\n   * @param onBehalfOf The address of the user msg.sender is repaying for\n   * @param stableDebt The borrow balance of the user\n   * @param variableDebt The borrow balance of the user\n   */\n  function validateRepay(\n    DataTypes.ReserveCache memory reserveCache,\n    uint256 amountSent,\n    DataTypes.InterestRateMode interestRateMode,\n    address onBehalfOf,\n    uint256 stableDebt,\n    uint256 variableDebt\n  ) internal view {\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\n    require(\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\n    );\n\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n\n    require(\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\n      Errors.NO_DEBT_OF_SELECTED_TYPE\n    );\n  }\n\n  /**\n   * @notice Validates a swap of borrow rate mode.\n   * @param reserve The reserve state on which the user is swapping the rate\n   * @param reserveCache The cached data of the reserve\n   * @param userConfig The user reserves configuration\n   * @param stableDebt The stable debt of the user\n   * @param variableDebt The variable debt of the user\n   * @param currentRateMode The rate mode of the debt being swapped\n   */\n  function validateSwapRateMode(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache,\n    DataTypes.UserConfigurationMap storage userConfig,\n    uint256 stableDebt,\n    uint256 variableDebt,\n    DataTypes.InterestRateMode currentRateMode\n  ) internal view {\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\n      .reserveConfiguration\n      .getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n    require(!isFrozen, Errors.RESERVE_FROZEN);\n\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\n      /**\n       * user wants to swap to stable, before swapping we need to ensure that\n       * 1. stable borrow rate is enabled on the reserve\n       * 2. user is not trying to abuse the reserve by supplying\n       * more collateral than he is borrowing, artificially lowering\n       * the interest rate, borrowing at variable, and switching to stable\n       */\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\n\n      require(\n        !userConfig.isUsingAsCollateral(reserve.id) ||\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\n      );\n    } else {\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\n    }\n  }\n\n  /**\n   * @notice Validates a stable borrow rate rebalance action.\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\n   * @param reserve The reserve state on which the user is getting rebalanced\n   * @param reserveCache The cached state of the reserve\n   * @param reserveAddress The address of the reserve\n   */\n  function validateRebalanceStableBorrowRate(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache,\n    address reserveAddress\n  ) internal view {\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\n\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\n      reserve.interestRateStrategyAddress\n    ).calculateInterestRates(\n        DataTypes.CalculateInterestRatesParams({\n          unbacked: reserve.unbacked,\n          liquidityAdded: 0,\n          liquidityTaken: 0,\n          totalStableDebt: 0,\n          totalVariableDebt: totalDebt,\n          averageStableBorrowRate: 0,\n          reserveFactor: reserveCache.reserveFactor,\n          reserve: reserveAddress,\n          aToken: reserveCache.aTokenAddress\n        })\n      );\n\n    require(\n      reserveCache.currLiquidityRate <=\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\n    );\n  }\n\n  /**\n   * @notice Validates the action of setting an asset as collateral.\n   * @param reserveCache The cached data of the reserve\n   * @param userBalance The balance of the user\n   */\n  function validateSetUseReserveAsCollateral(\n    DataTypes.ReserveCache memory reserveCache,\n    uint256 userBalance\n  ) internal pure {\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\n\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n  }\n\n  /**\n   * @notice Validates a flashloan action.\n   * @param reservesData The state of all the reserves\n   * @param assets The assets being flash-borrowed\n   * @param amounts The amounts for each asset being borrowed\n   */\n  function validateFlashloan(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    address[] memory assets,\n    uint256[] memory amounts\n  ) internal view {\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\n    for (uint256 i = 0; i < assets.length; i++) {\n      validateFlashloanSimple(reservesData[assets[i]]);\n    }\n  }\n\n  /**\n   * @notice Validates a flashloan action.\n   * @param reserve The state of the reserve\n   */\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\n  }\n\n  struct ValidateLiquidationCallLocalVars {\n    bool collateralReserveActive;\n    bool collateralReservePaused;\n    bool principalReserveActive;\n    bool principalReservePaused;\n    bool isCollateralEnabled;\n  }\n\n  /**\n   * @notice Validates the liquidation action.\n   * @param userConfig The user configuration mapping\n   * @param collateralReserve The reserve data of the collateral\n   * @param params Additional parameters needed for the validation\n   */\n  function validateLiquidationCall(\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ValidateLiquidationCallParams memory params\n  ) internal view {\n    ValidateLiquidationCallLocalVars memory vars;\n\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\n      .configuration\n      .getFlags();\n\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\n      .debtReserveCache\n      .reserveConfiguration\n      .getFlags();\n\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\n\n    require(\n      params.priceOracleSentinel == address(0) ||\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\n    );\n\n    require(\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\n    );\n\n    vars.isCollateralEnabled =\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\n      userConfig.isUsingAsCollateral(collateralReserve.id);\n\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\n  }\n\n  /**\n   * @notice Validates the health factor of a user.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The state of the user for the specific reserve\n   * @param user The user to validate health factor of\n   * @param userEModeCategory The users active efficiency mode category\n   * @param reservesCount The number of available reserves\n   * @param oracle The price oracle\n   */\n  function validateHealthFactor(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap memory userConfig,\n    address user,\n    uint8 userEModeCategory,\n    uint256 reservesCount,\n    address oracle\n  ) internal view returns (uint256, bool) {\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\n      .calculateUserAccountData(\n        reservesData,\n        reservesList,\n        eModeCategories,\n        DataTypes.CalculateUserAccountDataParams({\n          userConfig: userConfig,\n          reservesCount: reservesCount,\n          user: user,\n          oracle: oracle,\n          userEModeCategory: userEModeCategory\n        })\n      );\n\n    require(\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\n    );\n\n    return (healthFactor, hasZeroLtvCollateral);\n  }\n\n  /**\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The state of the user for the specific reserve\n   * @param asset The asset for which the ltv will be validated\n   * @param from The user from which the aTokens are being transferred\n   * @param reservesCount The number of available reserves\n   * @param oracle The price oracle\n   * @param userEModeCategory The users active efficiency mode category\n   */\n  function validateHFAndLtv(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap memory userConfig,\n    address asset,\n    address from,\n    uint256 reservesCount,\n    address oracle,\n    uint8 userEModeCategory\n  ) internal view {\n    DataTypes.ReserveData memory reserve = reservesData[asset];\n\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      userConfig,\n      from,\n      userEModeCategory,\n      reservesCount,\n      oracle\n    );\n\n    require(\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\n      Errors.LTV_VALIDATION_FAILED\n    );\n  }\n\n  /**\n   * @notice Validates a transfer action.\n   * @param reserve The reserve object\n   */\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\n  }\n\n  /**\n   * @notice Validates a drop reserve action.\n   * @param reservesList The addresses of all the active reserves\n   * @param reserve The reserve object\n   * @param asset The address of the reserve's underlying asset\n   */\n  function validateDropReserve(\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.ReserveData storage reserve,\n    address asset\n  ) internal view {\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\n    require(\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\n    );\n    require(\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\n    );\n  }\n\n  /**\n   * @notice Validates the action of setting efficiency mode.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\n   * @param userConfig the user configuration\n   * @param reservesCount The total number of valid reserves\n   * @param categoryId The id of the category\n   */\n  function validateSetUserEMode(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap memory userConfig,\n    uint256 reservesCount,\n    uint8 categoryId\n  ) internal view {\n    // category is invalid if the liq threshold is not set\n    require(\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\n      Errors.INCONSISTENT_EMODE_CATEGORY\n    );\n\n    // eMode can always be enabled if the user hasn't supplied anything\n    if (userConfig.isEmpty()) {\n      return;\n    }\n\n    // if user is trying to set another category than default we require that\n    // either the user is not borrowing, or it's borrowing assets of categoryId\n    if (categoryId != 0) {\n      unchecked {\n        for (uint256 i = 0; i < reservesCount; i++) {\n          if (userConfig.isBorrowing(i)) {\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\n              .configuration;\n            require(\n              configuration.getEModeCategory() == categoryId,\n              Errors.INCONSISTENT_EMODE_CATEGORY\n            );\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @notice Validates the action of activating the asset as collateral.\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig the user configuration\n   * @param reserveConfig The reserve configuration\n   * @return True if the asset can be activated as collateral, false otherwise\n   */\n  function validateUseAsCollateral(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ReserveConfigurationMap memory reserveConfig\n  ) internal view returns (bool) {\n    if (reserveConfig.getLtv() == 0) {\n      return false;\n    }\n    if (!userConfig.isUsingAsCollateralAny()) {\n      return true;\n    }\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\n\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\n  }\n\n  /**\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\n   * transfer, mint unbacked, and liquidate\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig the user configuration\n   * @param reserveConfig The reserve configuration\n   * @return True if the asset can be activated as collateral, false otherwise\n   */\n  function validateAutomaticUseAsCollateral(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\n    address aTokenAddress\n  ) internal view returns (bool) {\n    if (reserveConfig.getDebtCeiling() != 0) {\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\n        .POOL()\n        .ADDRESSES_PROVIDER();\n      if (\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\n          msg.sender\n        )\n      ) return false;\n    }\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\n  }\n}\n"},"contracts/protocol/libraries/math/MathUtils.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {WadRayMath} from './WadRayMath.sol';\n\n/**\n * @title MathUtils library\n * @author Aave\n * @notice Provides functions to perform linear and compounded interest calculations\n */\nlibrary MathUtils {\n  using WadRayMath for uint256;\n\n  /// @dev Ignoring leap years\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\n\n  /**\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\n   * @param rate The interest rate, in ray\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\n   */\n  function calculateLinearInterest(\n    uint256 rate,\n    uint40 lastUpdateTimestamp\n  ) internal view returns (uint256) {\n    //solium-disable-next-line\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\n    unchecked {\n      result = result / SECONDS_PER_YEAR;\n    }\n\n    return WadRayMath.RAY + result;\n  }\n\n  /**\n   * @dev Function to calculate the interest using a compounded interest rate formula\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\n   *\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\n   *\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\n   * error per different time periods\n   *\n   * @param rate The interest rate, in ray\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\n   * @return The interest rate compounded during the timeDelta, in ray\n   */\n  function calculateCompoundedInterest(\n    uint256 rate,\n    uint40 lastUpdateTimestamp,\n    uint256 currentTimestamp\n  ) internal pure returns (uint256) {\n    //solium-disable-next-line\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\n\n    if (exp == 0) {\n      return WadRayMath.RAY;\n    }\n\n    uint256 expMinusOne;\n    uint256 expMinusTwo;\n    uint256 basePowerTwo;\n    uint256 basePowerThree;\n    unchecked {\n      expMinusOne = exp - 1;\n\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\n\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\n    }\n\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\n    unchecked {\n      secondTerm /= 2;\n    }\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\n    unchecked {\n      thirdTerm /= 6;\n    }\n\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\n  }\n\n  /**\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\n   * @param rate The interest rate (in ray)\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\n   */\n  function calculateCompoundedInterest(\n    uint256 rate,\n    uint40 lastUpdateTimestamp\n  ) internal view returns (uint256) {\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\n  }\n}\n"},"contracts/protocol/libraries/math/PercentageMath.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\n/**\n * @title PercentageMath library\n * @author Aave\n * @notice Provides functions to perform percentage calculations\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\n */\nlibrary PercentageMath {\n  // Maximum percentage factor (100.00%)\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\n\n  // Half percentage factor (50.00%)\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\n\n  /**\n   * @notice Executes a percentage multiplication\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param value The value of which the percentage needs to be calculated\n   * @param percentage The percentage of the value to be calculated\n   * @return result value percentmul percentage\n   */\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\n    assembly {\n      if iszero(\n        or(\n          iszero(percentage),\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\n        )\n      ) {\n        revert(0, 0)\n      }\n\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\n    }\n  }\n\n  /**\n   * @notice Executes a percentage division\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param value The value of which the percentage needs to be calculated\n   * @param percentage The percentage of the value to be calculated\n   * @return result value percentdiv percentage\n   */\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\n    assembly {\n      if or(\n        iszero(percentage),\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\n      ) {\n        revert(0, 0)\n      }\n\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\n    }\n  }\n}\n"},"contracts/protocol/libraries/math/WadRayMath.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\n/**\n * @title WadRayMath library\n * @author Aave\n * @notice Provides functions to perform calculations with Wad and Ray units\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\n * with 27 digits of precision)\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\n */\nlibrary WadRayMath {\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\n  uint256 internal constant WAD = 1e18;\n  uint256 internal constant HALF_WAD = 0.5e18;\n\n  uint256 internal constant RAY = 1e27;\n  uint256 internal constant HALF_RAY = 0.5e27;\n\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\n\n  /**\n   * @dev Multiplies two wad, rounding half up to the nearest wad\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Wad\n   * @param b Wad\n   * @return c = a*b, in wad\n   */\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\n    assembly {\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\n        revert(0, 0)\n      }\n\n      c := div(add(mul(a, b), HALF_WAD), WAD)\n    }\n  }\n\n  /**\n   * @dev Divides two wad, rounding half up to the nearest wad\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Wad\n   * @param b Wad\n   * @return c = a/b, in wad\n   */\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\n    assembly {\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\n        revert(0, 0)\n      }\n\n      c := div(add(mul(a, WAD), div(b, 2)), b)\n    }\n  }\n\n  /**\n   * @notice Multiplies two ray, rounding half up to the nearest ray\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Ray\n   * @param b Ray\n   * @return c = a raymul b\n   */\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\n    assembly {\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\n        revert(0, 0)\n      }\n\n      c := div(add(mul(a, b), HALF_RAY), RAY)\n    }\n  }\n\n  /**\n   * @notice Divides two ray, rounding half up to the nearest ray\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Ray\n   * @param b Ray\n   * @return c = a raydiv b\n   */\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\n    assembly {\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\n        revert(0, 0)\n      }\n\n      c := div(add(mul(a, RAY), div(b, 2)), b)\n    }\n  }\n\n  /**\n   * @dev Casts ray down to wad\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Ray\n   * @return b = a converted to wad, rounded half up to the nearest wad\n   */\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\n    assembly {\n      b := div(a, WAD_RAY_RATIO)\n      let remainder := mod(a, WAD_RAY_RATIO)\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\n        b := add(b, 1)\n      }\n    }\n  }\n\n  /**\n   * @dev Converts wad up to ray\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Wad\n   * @return b = a converted in ray\n   */\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\n    // to avoid overflow, b/WAD_RAY_RATIO == a\n    assembly {\n      b := mul(a, WAD_RAY_RATIO)\n\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\n        revert(0, 0)\n      }\n    }\n  }\n}\n"},"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nlibrary ConfiguratorInputTypes {\n  struct InitReserveInput {\n    address aTokenImpl;\n    address stableDebtTokenImpl;\n    address variableDebtTokenImpl;\n    uint8 underlyingAssetDecimals;\n    address interestRateStrategyAddress;\n    address underlyingAsset;\n    address treasury;\n    address incentivesController;\n    string aTokenName;\n    string aTokenSymbol;\n    string variableDebtTokenName;\n    string variableDebtTokenSymbol;\n    string stableDebtTokenName;\n    string stableDebtTokenSymbol;\n    bytes params;\n  }\n\n  struct UpdateATokenInput {\n    address asset;\n    address treasury;\n    address incentivesController;\n    string name;\n    string symbol;\n    address implementation;\n    bytes params;\n  }\n\n  struct UpdateDebtTokenInput {\n    address asset;\n    address incentivesController;\n    string name;\n    string symbol;\n    address implementation;\n    bytes params;\n  }\n}\n"},"contracts/protocol/libraries/types/DataTypes.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nlibrary DataTypes {\n  struct ReserveData {\n    //stores the reserve configuration\n    ReserveConfigurationMap configuration;\n    //the liquidity index. Expressed in ray\n    uint128 liquidityIndex;\n    //the current supply rate. Expressed in ray\n    uint128 currentLiquidityRate;\n    //variable borrow index. Expressed in ray\n    uint128 variableBorrowIndex;\n    //the current variable borrow rate. Expressed in ray\n    uint128 currentVariableBorrowRate;\n    //the current stable borrow rate. Expressed in ray\n    uint128 currentStableBorrowRate;\n    //timestamp of last update\n    uint40 lastUpdateTimestamp;\n    //the id of the reserve. Represents the position in the list of the active reserves\n    uint16 id;\n    //aToken address\n    address aTokenAddress;\n    //stableDebtToken address\n    address stableDebtTokenAddress;\n    //variableDebtToken address\n    address variableDebtTokenAddress;\n    //address of the interest rate strategy\n    address interestRateStrategyAddress;\n    //the current treasury balance, scaled\n    uint128 accruedToTreasury;\n    //the outstanding unbacked aTokens minted through the bridging feature\n    uint128 unbacked;\n    //the outstanding debt borrowed against this asset in isolation mode\n    uint128 isolationModeTotalDebt;\n  }\n\n  struct ReserveConfigurationMap {\n    //bit 0-15: LTV\n    //bit 16-31: Liq. threshold\n    //bit 32-47: Liq. bonus\n    //bit 48-55: Decimals\n    //bit 56: reserve is active\n    //bit 57: reserve is frozen\n    //bit 58: borrowing is enabled\n    //bit 59: stable rate borrowing enabled\n    //bit 60: asset is paused\n    //bit 61: borrowing in isolation mode is enabled\n    //bit 62: siloed borrowing enabled\n    //bit 63: flashloaning enabled\n    //bit 64-79: reserve factor\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\n    //bit 152-167 liquidation protocol fee\n    //bit 168-175 eMode category\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\n    //bit 252-255 unused\n\n    uint256 data;\n  }\n\n  struct UserConfigurationMap {\n    /**\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\n     * asset is borrowed by the user.\n     */\n    uint256 data;\n  }\n\n  struct EModeCategory {\n    // each eMode category has a custom ltv and liquidation threshold\n    uint16 ltv;\n    uint16 liquidationThreshold;\n    uint16 liquidationBonus;\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\n    address priceSource;\n    string label;\n  }\n\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\n\n  struct ReserveCache {\n    uint256 currScaledVariableDebt;\n    uint256 nextScaledVariableDebt;\n    uint256 currPrincipalStableDebt;\n    uint256 currAvgStableBorrowRate;\n    uint256 currTotalStableDebt;\n    uint256 nextAvgStableBorrowRate;\n    uint256 nextTotalStableDebt;\n    uint256 currLiquidityIndex;\n    uint256 nextLiquidityIndex;\n    uint256 currVariableBorrowIndex;\n    uint256 nextVariableBorrowIndex;\n    uint256 currLiquidityRate;\n    uint256 currVariableBorrowRate;\n    uint256 reserveFactor;\n    ReserveConfigurationMap reserveConfiguration;\n    address aTokenAddress;\n    address stableDebtTokenAddress;\n    address variableDebtTokenAddress;\n    uint40 reserveLastUpdateTimestamp;\n    uint40 stableDebtLastUpdateTimestamp;\n  }\n\n  struct ExecuteLiquidationCallParams {\n    uint256 reservesCount;\n    uint256 debtToCover;\n    address collateralAsset;\n    address debtAsset;\n    address user;\n    bool receiveAToken;\n    address priceOracle;\n    uint8 userEModeCategory;\n    address priceOracleSentinel;\n  }\n\n  struct ExecuteSupplyParams {\n    address asset;\n    uint256 amount;\n    address onBehalfOf;\n    uint16 referralCode;\n  }\n\n  struct ExecuteBorrowParams {\n    address asset;\n    address user;\n    address onBehalfOf;\n    uint256 amount;\n    InterestRateMode interestRateMode;\n    uint16 referralCode;\n    bool releaseUnderlying;\n    uint256 maxStableRateBorrowSizePercent;\n    uint256 reservesCount;\n    address oracle;\n    uint8 userEModeCategory;\n    address priceOracleSentinel;\n  }\n\n  struct ExecuteRepayParams {\n    address asset;\n    uint256 amount;\n    InterestRateMode interestRateMode;\n    address onBehalfOf;\n    bool useATokens;\n  }\n\n  struct ExecuteWithdrawParams {\n    address asset;\n    uint256 amount;\n    address to;\n    uint256 reservesCount;\n    address oracle;\n    uint8 userEModeCategory;\n  }\n\n  struct ExecuteSetUserEModeParams {\n    uint256 reservesCount;\n    address oracle;\n    uint8 categoryId;\n  }\n\n  struct FinalizeTransferParams {\n    address asset;\n    address from;\n    address to;\n    uint256 amount;\n    uint256 balanceFromBefore;\n    uint256 balanceToBefore;\n    uint256 reservesCount;\n    address oracle;\n    uint8 fromEModeCategory;\n  }\n\n  struct FlashloanParams {\n    address receiverAddress;\n    address[] assets;\n    uint256[] amounts;\n    uint256[] interestRateModes;\n    address onBehalfOf;\n    bytes params;\n    uint16 referralCode;\n    uint256 flashLoanPremiumToProtocol;\n    uint256 flashLoanPremiumTotal;\n    uint256 maxStableRateBorrowSizePercent;\n    uint256 reservesCount;\n    address addressesProvider;\n    uint8 userEModeCategory;\n    bool isAuthorizedFlashBorrower;\n  }\n\n  struct FlashloanSimpleParams {\n    address receiverAddress;\n    address asset;\n    uint256 amount;\n    bytes params;\n    uint16 referralCode;\n    uint256 flashLoanPremiumToProtocol;\n    uint256 flashLoanPremiumTotal;\n  }\n\n  struct FlashLoanRepaymentParams {\n    uint256 amount;\n    uint256 totalPremium;\n    uint256 flashLoanPremiumToProtocol;\n    address asset;\n    address receiverAddress;\n    uint16 referralCode;\n  }\n\n  struct CalculateUserAccountDataParams {\n    UserConfigurationMap userConfig;\n    uint256 reservesCount;\n    address user;\n    address oracle;\n    uint8 userEModeCategory;\n  }\n\n  struct ValidateBorrowParams {\n    ReserveCache reserveCache;\n    UserConfigurationMap userConfig;\n    address asset;\n    address userAddress;\n    uint256 amount;\n    InterestRateMode interestRateMode;\n    uint256 maxStableLoanPercent;\n    uint256 reservesCount;\n    address oracle;\n    uint8 userEModeCategory;\n    address priceOracleSentinel;\n    bool isolationModeActive;\n    address isolationModeCollateralAddress;\n    uint256 isolationModeDebtCeiling;\n  }\n\n  struct ValidateLiquidationCallParams {\n    ReserveCache debtReserveCache;\n    uint256 totalDebt;\n    uint256 healthFactor;\n    address priceOracleSentinel;\n  }\n\n  struct CalculateInterestRatesParams {\n    uint256 unbacked;\n    uint256 liquidityAdded;\n    uint256 liquidityTaken;\n    uint256 totalStableDebt;\n    uint256 totalVariableDebt;\n    uint256 averageStableBorrowRate;\n    uint256 reserveFactor;\n    address reserve;\n    address aToken;\n  }\n\n  struct InitReserveParams {\n    address asset;\n    address aTokenAddress;\n    address stableDebtAddress;\n    address variableDebtAddress;\n    address interestRateStrategyAddress;\n    uint16 reservesCount;\n    uint16 maxNumberReserves;\n  }\n}\n"},"contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol';\nimport {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\n\n/**\n * @title DefaultReserveInterestRateStrategy contract\n * @author Aave\n * @notice Implements the calculation of the interest rates depending on the reserve state\n * @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO`\n * point of usage and another from that one to 100%.\n * - An instance of this same contract, can't be used across different Aave markets, due to the caching\n *   of the PoolAddressesProvider\n */\ncontract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy {\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public immutable OPTIMAL_USAGE_RATIO;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public immutable OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public immutable MAX_EXCESS_USAGE_RATIO;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public immutable MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO;\n\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  // Base variable borrow rate when usage rate = 0. Expressed in ray\n  uint256 internal immutable _baseVariableBorrowRate;\n\n  // Slope of the variable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal immutable _variableRateSlope1;\n\n  // Slope of the variable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal immutable _variableRateSlope2;\n\n  // Slope of the stable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal immutable _stableRateSlope1;\n\n  // Slope of the stable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal immutable _stableRateSlope2;\n\n  // Premium on top of `_variableRateSlope1` for base stable borrowing rate\n  uint256 internal immutable _baseStableRateOffset;\n\n  // Additional premium applied to stable rate when stable debt surpass `OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO`\n  uint256 internal immutable _stableRateExcessOffset;\n\n  /**\n   * @dev Constructor.\n   * @param provider The address of the PoolAddressesProvider contract\n   * @param optimalUsageRatio The optimal usage ratio\n   * @param baseVariableBorrowRate The base variable borrow rate\n   * @param variableRateSlope1 The variable rate slope below optimal usage ratio\n   * @param variableRateSlope2 The variable rate slope above optimal usage ratio\n   * @param stableRateSlope1 The stable rate slope below optimal usage ratio\n   * @param stableRateSlope2 The stable rate slope above optimal usage ratio\n   * @param baseStableRateOffset The premium on top of variable rate for base stable borrowing rate\n   * @param stableRateExcessOffset The premium on top of stable rate when there stable debt surpass the threshold\n   * @param optimalStableToTotalDebtRatio The optimal stable debt to total debt ratio of the reserve\n   */\n  constructor(\n    IPoolAddressesProvider provider,\n    uint256 optimalUsageRatio,\n    uint256 baseVariableBorrowRate,\n    uint256 variableRateSlope1,\n    uint256 variableRateSlope2,\n    uint256 stableRateSlope1,\n    uint256 stableRateSlope2,\n    uint256 baseStableRateOffset,\n    uint256 stableRateExcessOffset,\n    uint256 optimalStableToTotalDebtRatio\n  ) {\n    require(WadRayMath.RAY >= optimalUsageRatio, Errors.INVALID_OPTIMAL_USAGE_RATIO);\n    require(\n      WadRayMath.RAY >= optimalStableToTotalDebtRatio,\n      Errors.INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\n    );\n    OPTIMAL_USAGE_RATIO = optimalUsageRatio;\n    MAX_EXCESS_USAGE_RATIO = WadRayMath.RAY - optimalUsageRatio;\n    OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = optimalStableToTotalDebtRatio;\n    MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = WadRayMath.RAY - optimalStableToTotalDebtRatio;\n    ADDRESSES_PROVIDER = provider;\n    _baseVariableBorrowRate = baseVariableBorrowRate;\n    _variableRateSlope1 = variableRateSlope1;\n    _variableRateSlope2 = variableRateSlope2;\n    _stableRateSlope1 = stableRateSlope1;\n    _stableRateSlope2 = stableRateSlope2;\n    _baseStableRateOffset = baseStableRateOffset;\n    _stableRateExcessOffset = stableRateExcessOffset;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getVariableRateSlope1() external view returns (uint256) {\n    return _variableRateSlope1;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getVariableRateSlope2() external view returns (uint256) {\n    return _variableRateSlope2;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateSlope1() external view returns (uint256) {\n    return _stableRateSlope1;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateSlope2() external view returns (uint256) {\n    return _stableRateSlope2;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateExcessOffset() external view returns (uint256) {\n    return _stableRateExcessOffset;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getBaseStableBorrowRate() public view returns (uint256) {\n    return _variableRateSlope1 + _baseStableRateOffset;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getBaseVariableBorrowRate() external view override returns (uint256) {\n    return _baseVariableBorrowRate;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getMaxVariableBorrowRate() external view override returns (uint256) {\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\n  }\n\n  struct CalcInterestRatesLocalVars {\n    uint256 availableLiquidity;\n    uint256 totalDebt;\n    uint256 currentVariableBorrowRate;\n    uint256 currentStableBorrowRate;\n    uint256 currentLiquidityRate;\n    uint256 borrowUsageRatio;\n    uint256 supplyUsageRatio;\n    uint256 stableToTotalDebtRatio;\n    uint256 availableLiquidityPlusDebt;\n  }\n\n  /// @inheritdoc IReserveInterestRateStrategy\n  function calculateInterestRates(\n    DataTypes.CalculateInterestRatesParams memory params\n  ) public view override returns (uint256, uint256, uint256) {\n    CalcInterestRatesLocalVars memory vars;\n\n    vars.totalDebt = params.totalStableDebt + params.totalVariableDebt;\n\n    vars.currentLiquidityRate = 0;\n    vars.currentVariableBorrowRate = _baseVariableBorrowRate;\n    vars.currentStableBorrowRate = getBaseStableBorrowRate();\n\n    if (vars.totalDebt != 0) {\n      vars.stableToTotalDebtRatio = params.totalStableDebt.rayDiv(vars.totalDebt);\n      vars.availableLiquidity =\n        IERC20(params.reserve).balanceOf(params.aToken) +\n        params.liquidityAdded -\n        params.liquidityTaken;\n\n      vars.availableLiquidityPlusDebt = vars.availableLiquidity + vars.totalDebt;\n      vars.borrowUsageRatio = vars.totalDebt.rayDiv(vars.availableLiquidityPlusDebt);\n      vars.supplyUsageRatio = vars.totalDebt.rayDiv(\n        vars.availableLiquidityPlusDebt + params.unbacked\n      );\n    }\n\n    if (vars.borrowUsageRatio > OPTIMAL_USAGE_RATIO) {\n      uint256 excessBorrowUsageRatio = (vars.borrowUsageRatio - OPTIMAL_USAGE_RATIO).rayDiv(\n        MAX_EXCESS_USAGE_RATIO\n      );\n\n      vars.currentStableBorrowRate +=\n        _stableRateSlope1 +\n        _stableRateSlope2.rayMul(excessBorrowUsageRatio);\n\n      vars.currentVariableBorrowRate +=\n        _variableRateSlope1 +\n        _variableRateSlope2.rayMul(excessBorrowUsageRatio);\n    } else {\n      vars.currentStableBorrowRate += _stableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\n        OPTIMAL_USAGE_RATIO\n      );\n\n      vars.currentVariableBorrowRate += _variableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\n        OPTIMAL_USAGE_RATIO\n      );\n    }\n\n    if (vars.stableToTotalDebtRatio > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO) {\n      uint256 excessStableDebtRatio = (vars.stableToTotalDebtRatio -\n        OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO).rayDiv(MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO);\n      vars.currentStableBorrowRate += _stableRateExcessOffset.rayMul(excessStableDebtRatio);\n    }\n\n    vars.currentLiquidityRate = _getOverallBorrowRate(\n      params.totalStableDebt,\n      params.totalVariableDebt,\n      vars.currentVariableBorrowRate,\n      params.averageStableBorrowRate\n    ).rayMul(vars.supplyUsageRatio).percentMul(\n        PercentageMath.PERCENTAGE_FACTOR - params.reserveFactor\n      );\n\n    return (\n      vars.currentLiquidityRate,\n      vars.currentStableBorrowRate,\n      vars.currentVariableBorrowRate\n    );\n  }\n\n  /**\n   * @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable\n   * debt\n   * @param totalStableDebt The total borrowed from the reserve at a stable rate\n   * @param totalVariableDebt The total borrowed from the reserve at a variable rate\n   * @param currentVariableBorrowRate The current variable borrow rate of the reserve\n   * @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\n   * @return The weighted averaged borrow rate\n   */\n  function _getOverallBorrowRate(\n    uint256 totalStableDebt,\n    uint256 totalVariableDebt,\n    uint256 currentVariableBorrowRate,\n    uint256 currentAverageStableBorrowRate\n  ) internal pure returns (uint256) {\n    uint256 totalDebt = totalStableDebt + totalVariableDebt;\n\n    if (totalDebt == 0) return 0;\n\n    uint256 weightedVariableRate = totalVariableDebt.wadToRay().rayMul(currentVariableBorrowRate);\n\n    uint256 weightedStableRate = totalStableDebt.wadToRay().rayMul(currentAverageStableBorrowRate);\n\n    uint256 overallBorrowRate = (weightedVariableRate + weightedStableRate).rayDiv(\n      totalDebt.wadToRay()\n    );\n\n    return overallBorrowRate;\n  }\n}\n"},"contracts/protocol/pool/L2Pool.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Pool} from './Pool.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IL2Pool} from '../../interfaces/IL2Pool.sol';\nimport {CalldataLogic} from '../libraries/logic/CalldataLogic.sol';\n\n/**\n * @title L2Pool\n * @author Aave\n * @notice Calldata optimized extension of the Pool contract allowing users to pass compact calldata representation\n * to reduce transaction costs on rollups.\n */\ncontract L2Pool is Pool, IL2Pool {\n  /**\n   * @dev Constructor.\n   * @param provider The address of the PoolAddressesProvider contract\n   */\n  constructor(IPoolAddressesProvider provider) Pool(provider) {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IL2Pool\n  function supply(bytes32 args) external override {\n    (address asset, uint256 amount, uint16 referralCode) = CalldataLogic.decodeSupplyParams(\n      _reservesList,\n      args\n    );\n\n    supply(asset, amount, msg.sender, referralCode);\n  }\n\n  /// @inheritdoc IL2Pool\n  function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external override {\n    (address asset, uint256 amount, uint16 referralCode, uint256 deadline, uint8 v) = CalldataLogic\n      .decodeSupplyWithPermitParams(_reservesList, args);\n\n    supplyWithPermit(asset, amount, msg.sender, referralCode, deadline, v, r, s);\n  }\n\n  /// @inheritdoc IL2Pool\n  function withdraw(bytes32 args) external override returns (uint256) {\n    (address asset, uint256 amount) = CalldataLogic.decodeWithdrawParams(_reservesList, args);\n\n    return withdraw(asset, amount, msg.sender);\n  }\n\n  /// @inheritdoc IL2Pool\n  function borrow(bytes32 args) external override {\n    (address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode) = CalldataLogic\n      .decodeBorrowParams(_reservesList, args);\n\n    borrow(asset, amount, interestRateMode, referralCode, msg.sender);\n  }\n\n  /// @inheritdoc IL2Pool\n  function repay(bytes32 args) external override returns (uint256) {\n    (address asset, uint256 amount, uint256 interestRateMode) = CalldataLogic.decodeRepayParams(\n      _reservesList,\n      args\n    );\n\n    return repay(asset, amount, interestRateMode, msg.sender);\n  }\n\n  /// @inheritdoc IL2Pool\n  function repayWithPermit(bytes32 args, bytes32 r, bytes32 s) external override returns (uint256) {\n    (\n      address asset,\n      uint256 amount,\n      uint256 interestRateMode,\n      uint256 deadline,\n      uint8 v\n    ) = CalldataLogic.decodeRepayWithPermitParams(_reservesList, args);\n\n    return repayWithPermit(asset, amount, interestRateMode, msg.sender, deadline, v, r, s);\n  }\n\n  /// @inheritdoc IL2Pool\n  function repayWithATokens(bytes32 args) external override returns (uint256) {\n    (address asset, uint256 amount, uint256 interestRateMode) = CalldataLogic.decodeRepayParams(\n      _reservesList,\n      args\n    );\n\n    return repayWithATokens(asset, amount, interestRateMode);\n  }\n\n  /// @inheritdoc IL2Pool\n  function swapBorrowRateMode(bytes32 args) external override {\n    (address asset, uint256 interestRateMode) = CalldataLogic.decodeSwapBorrowRateModeParams(\n      _reservesList,\n      args\n    );\n    swapBorrowRateMode(asset, interestRateMode);\n  }\n\n  /// @inheritdoc IL2Pool\n  function rebalanceStableBorrowRate(bytes32 args) external override {\n    (address asset, address user) = CalldataLogic.decodeRebalanceStableBorrowRateParams(\n      _reservesList,\n      args\n    );\n    rebalanceStableBorrowRate(asset, user);\n  }\n\n  /// @inheritdoc IL2Pool\n  function setUserUseReserveAsCollateral(bytes32 args) external override {\n    (address asset, bool useAsCollateral) = CalldataLogic.decodeSetUserUseReserveAsCollateralParams(\n      _reservesList,\n      args\n    );\n    setUserUseReserveAsCollateral(asset, useAsCollateral);\n  }\n\n  /// @inheritdoc IL2Pool\n  function liquidationCall(bytes32 args1, bytes32 args2) external override {\n    (\n      address collateralAsset,\n      address debtAsset,\n      address user,\n      uint256 debtToCover,\n      bool receiveAToken\n    ) = CalldataLogic.decodeLiquidationCallParams(_reservesList, args1, args2);\n    liquidationCall(collateralAsset, debtAsset, user, debtToCover, receiveAToken);\n  }\n}\n"},"contracts/protocol/pool/Pool.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\nimport {PoolStorage} from './PoolStorage.sol';\n\n/**\n * @title Pool contract\n * @author Aave\n * @notice Main point of interaction with an Aave protocol's market\n * - Users can:\n *   # Supply\n *   # Withdraw\n *   # Borrow\n *   # Repay\n *   # Swap their loans between variable and stable rate\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\n *   # Liquidate positions\n *   # Execute Flash Loans\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\n *   PoolAddressesProvider\n */\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\n  using ReserveLogic for DataTypes.ReserveData;\n\n  uint256 public constant POOL_REVISION = 0x1;\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  /**\n   * @dev Only pool configurator can call functions marked by this modifier.\n   */\n  modifier onlyPoolConfigurator() {\n    _onlyPoolConfigurator();\n    _;\n  }\n\n  /**\n   * @dev Only pool admin can call functions marked by this modifier.\n   */\n  modifier onlyPoolAdmin() {\n    _onlyPoolAdmin();\n    _;\n  }\n\n  /**\n   * @dev Only bridge can call functions marked by this modifier.\n   */\n  modifier onlyBridge() {\n    _onlyBridge();\n    _;\n  }\n\n  function _onlyPoolConfigurator() internal view virtual {\n    require(\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\n    );\n  }\n\n  function _onlyPoolAdmin() internal view virtual {\n    require(\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_POOL_ADMIN\n    );\n  }\n\n  function _onlyBridge() internal view virtual {\n    require(\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\n      Errors.CALLER_NOT_BRIDGE\n    );\n  }\n\n  function getRevision() internal pure virtual override returns (uint256) {\n    return POOL_REVISION;\n  }\n\n  /**\n   * @dev Constructor.\n   * @param provider The address of the PoolAddressesProvider contract\n   */\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n  }\n\n  /**\n   * @notice Initializes the Pool.\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\n   * PoolAddressesProvider of the market.\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\n   * @param provider The address of the PoolAddressesProvider\n   */\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\n    _maxStableRateBorrowSizePercent = 0.25e4;\n  }\n\n  /// @inheritdoc IPool\n  function mintUnbacked(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external virtual override onlyBridge {\n    BridgeLogic.executeMintUnbacked(\n      _reserves,\n      _reservesList,\n      _usersConfig[onBehalfOf],\n      asset,\n      amount,\n      onBehalfOf,\n      referralCode\n    );\n  }\n\n  /// @inheritdoc IPool\n  function backUnbacked(\n    address asset,\n    uint256 amount,\n    uint256 fee\n  ) external virtual override onlyBridge returns (uint256) {\n    return\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\n  }\n\n  /// @inheritdoc IPool\n  function supply(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) public virtual override {\n    SupplyLogic.executeSupply(\n      _reserves,\n      _reservesList,\n      _usersConfig[onBehalfOf],\n      DataTypes.ExecuteSupplyParams({\n        asset: asset,\n        amount: amount,\n        onBehalfOf: onBehalfOf,\n        referralCode: referralCode\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function supplyWithPermit(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) public virtual override {\n    IERC20WithPermit(asset).permit(\n      msg.sender,\n      address(this),\n      amount,\n      deadline,\n      permitV,\n      permitR,\n      permitS\n    );\n    SupplyLogic.executeSupply(\n      _reserves,\n      _reservesList,\n      _usersConfig[onBehalfOf],\n      DataTypes.ExecuteSupplyParams({\n        asset: asset,\n        amount: amount,\n        onBehalfOf: onBehalfOf,\n        referralCode: referralCode\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function withdraw(\n    address asset,\n    uint256 amount,\n    address to\n  ) public virtual override returns (uint256) {\n    return\n      SupplyLogic.executeWithdraw(\n        _reserves,\n        _reservesList,\n        _eModeCategories,\n        _usersConfig[msg.sender],\n        DataTypes.ExecuteWithdrawParams({\n          asset: asset,\n          amount: amount,\n          to: to,\n          reservesCount: _reservesCount,\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n          userEModeCategory: _usersEModeCategory[msg.sender]\n        })\n      );\n  }\n\n  /// @inheritdoc IPool\n  function borrow(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    uint16 referralCode,\n    address onBehalfOf\n  ) public virtual override {\n    BorrowLogic.executeBorrow(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersConfig[onBehalfOf],\n      DataTypes.ExecuteBorrowParams({\n        asset: asset,\n        user: msg.sender,\n        onBehalfOf: onBehalfOf,\n        amount: amount,\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\n        referralCode: referralCode,\n        releaseUnderlying: true,\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\n        reservesCount: _reservesCount,\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function repay(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    address onBehalfOf\n  ) public virtual override returns (uint256) {\n    return\n      BorrowLogic.executeRepay(\n        _reserves,\n        _reservesList,\n        _usersConfig[onBehalfOf],\n        DataTypes.ExecuteRepayParams({\n          asset: asset,\n          amount: amount,\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\n          onBehalfOf: onBehalfOf,\n          useATokens: false\n        })\n      );\n  }\n\n  /// @inheritdoc IPool\n  function repayWithPermit(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    address onBehalfOf,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) public virtual override returns (uint256) {\n    {\n      IERC20WithPermit(asset).permit(\n        msg.sender,\n        address(this),\n        amount,\n        deadline,\n        permitV,\n        permitR,\n        permitS\n      );\n    }\n    {\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\n        asset: asset,\n        amount: amount,\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\n        onBehalfOf: onBehalfOf,\n        useATokens: false\n      });\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\n    }\n  }\n\n  /// @inheritdoc IPool\n  function repayWithATokens(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode\n  ) public virtual override returns (uint256) {\n    return\n      BorrowLogic.executeRepay(\n        _reserves,\n        _reservesList,\n        _usersConfig[msg.sender],\n        DataTypes.ExecuteRepayParams({\n          asset: asset,\n          amount: amount,\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\n          onBehalfOf: msg.sender,\n          useATokens: true\n        })\n      );\n  }\n\n  /// @inheritdoc IPool\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\n    BorrowLogic.executeSwapBorrowRateMode(\n      _reserves[asset],\n      _usersConfig[msg.sender],\n      asset,\n      DataTypes.InterestRateMode(interestRateMode)\n    );\n  }\n\n  /// @inheritdoc IPool\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\n  }\n\n  /// @inheritdoc IPool\n  function setUserUseReserveAsCollateral(\n    address asset,\n    bool useAsCollateral\n  ) public virtual override {\n    SupplyLogic.executeUseReserveAsCollateral(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersConfig[msg.sender],\n      asset,\n      useAsCollateral,\n      _reservesCount,\n      ADDRESSES_PROVIDER.getPriceOracle(),\n      _usersEModeCategory[msg.sender]\n    );\n  }\n\n  /// @inheritdoc IPool\n  function liquidationCall(\n    address collateralAsset,\n    address debtAsset,\n    address user,\n    uint256 debtToCover,\n    bool receiveAToken\n  ) public virtual override {\n    LiquidationLogic.executeLiquidationCall(\n      _reserves,\n      _reservesList,\n      _usersConfig,\n      _eModeCategories,\n      DataTypes.ExecuteLiquidationCallParams({\n        reservesCount: _reservesCount,\n        debtToCover: debtToCover,\n        collateralAsset: collateralAsset,\n        debtAsset: debtAsset,\n        user: user,\n        receiveAToken: receiveAToken,\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\n        userEModeCategory: _usersEModeCategory[user],\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function flashLoan(\n    address receiverAddress,\n    address[] calldata assets,\n    uint256[] calldata amounts,\n    uint256[] calldata interestRateModes,\n    address onBehalfOf,\n    bytes calldata params,\n    uint16 referralCode\n  ) public virtual override {\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\n      receiverAddress: receiverAddress,\n      assets: assets,\n      amounts: amounts,\n      interestRateModes: interestRateModes,\n      onBehalfOf: onBehalfOf,\n      params: params,\n      referralCode: referralCode,\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\n      reservesCount: _reservesCount,\n      addressesProvider: address(ADDRESSES_PROVIDER),\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\n        msg.sender\n      )\n    });\n\n    FlashLoanLogic.executeFlashLoan(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersConfig[onBehalfOf],\n      flashParams\n    );\n  }\n\n  /// @inheritdoc IPool\n  function flashLoanSimple(\n    address receiverAddress,\n    address asset,\n    uint256 amount,\n    bytes calldata params,\n    uint16 referralCode\n  ) public virtual override {\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\n      receiverAddress: receiverAddress,\n      asset: asset,\n      amount: amount,\n      params: params,\n      referralCode: referralCode,\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\n    });\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\n  }\n\n  /// @inheritdoc IPool\n  function mintToTreasury(address[] calldata assets) external virtual override {\n    PoolLogic.executeMintToTreasury(_reserves, assets);\n  }\n\n  /// @inheritdoc IPool\n  function getReserveData(\n    address asset\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\n    return _reserves[asset];\n  }\n\n  /// @inheritdoc IPool\n  function getUserAccountData(\n    address user\n  )\n    external\n    view\n    virtual\n    override\n    returns (\n      uint256 totalCollateralBase,\n      uint256 totalDebtBase,\n      uint256 availableBorrowsBase,\n      uint256 currentLiquidationThreshold,\n      uint256 ltv,\n      uint256 healthFactor\n    )\n  {\n    return\n      PoolLogic.executeGetUserAccountData(\n        _reserves,\n        _reservesList,\n        _eModeCategories,\n        DataTypes.CalculateUserAccountDataParams({\n          userConfig: _usersConfig[user],\n          reservesCount: _reservesCount,\n          user: user,\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n          userEModeCategory: _usersEModeCategory[user]\n        })\n      );\n  }\n\n  /// @inheritdoc IPool\n  function getConfiguration(\n    address asset\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\n    return _reserves[asset].configuration;\n  }\n\n  /// @inheritdoc IPool\n  function getUserConfiguration(\n    address user\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\n    return _usersConfig[user];\n  }\n\n  /// @inheritdoc IPool\n  function getReserveNormalizedIncome(\n    address asset\n  ) external view virtual override returns (uint256) {\n    return _reserves[asset].getNormalizedIncome();\n  }\n\n  /// @inheritdoc IPool\n  function getReserveNormalizedVariableDebt(\n    address asset\n  ) external view virtual override returns (uint256) {\n    return _reserves[asset].getNormalizedDebt();\n  }\n\n  /// @inheritdoc IPool\n  function getReservesList() external view virtual override returns (address[] memory) {\n    uint256 reservesListCount = _reservesCount;\n    uint256 droppedReservesCount = 0;\n    address[] memory reservesList = new address[](reservesListCount);\n\n    for (uint256 i = 0; i < reservesListCount; i++) {\n      if (_reservesList[i] != address(0)) {\n        reservesList[i - droppedReservesCount] = _reservesList[i];\n      } else {\n        droppedReservesCount++;\n      }\n    }\n\n    // Reduces the length of the reserves array by `droppedReservesCount`\n    assembly {\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\n    }\n    return reservesList;\n  }\n\n  /// @inheritdoc IPool\n  function getReserveAddressById(uint16 id) external view returns (address) {\n    return _reservesList[id];\n  }\n\n  /// @inheritdoc IPool\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\n    return _maxStableRateBorrowSizePercent;\n  }\n\n  /// @inheritdoc IPool\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\n    return _bridgeProtocolFee;\n  }\n\n  /// @inheritdoc IPool\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\n    return _flashLoanPremiumTotal;\n  }\n\n  /// @inheritdoc IPool\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\n    return _flashLoanPremiumToProtocol;\n  }\n\n  /// @inheritdoc IPool\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\n  }\n\n  /// @inheritdoc IPool\n  function finalizeTransfer(\n    address asset,\n    address from,\n    address to,\n    uint256 amount,\n    uint256 balanceFromBefore,\n    uint256 balanceToBefore\n  ) external virtual override {\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\n    SupplyLogic.executeFinalizeTransfer(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersConfig,\n      DataTypes.FinalizeTransferParams({\n        asset: asset,\n        from: from,\n        to: to,\n        amount: amount,\n        balanceFromBefore: balanceFromBefore,\n        balanceToBefore: balanceToBefore,\n        reservesCount: _reservesCount,\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n        fromEModeCategory: _usersEModeCategory[from]\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function initReserve(\n    address asset,\n    address aTokenAddress,\n    address stableDebtAddress,\n    address variableDebtAddress,\n    address interestRateStrategyAddress\n  ) external virtual override onlyPoolConfigurator {\n    if (\n      PoolLogic.executeInitReserve(\n        _reserves,\n        _reservesList,\n        DataTypes.InitReserveParams({\n          asset: asset,\n          aTokenAddress: aTokenAddress,\n          stableDebtAddress: stableDebtAddress,\n          variableDebtAddress: variableDebtAddress,\n          interestRateStrategyAddress: interestRateStrategyAddress,\n          reservesCount: _reservesCount,\n          maxNumberReserves: MAX_NUMBER_RESERVES()\n        })\n      )\n    ) {\n      _reservesCount++;\n    }\n  }\n\n  /// @inheritdoc IPool\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\n  }\n\n  /// @inheritdoc IPool\n  function setReserveInterestRateStrategyAddress(\n    address asset,\n    address rateStrategyAddress\n  ) external virtual override onlyPoolConfigurator {\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\n  }\n\n  /// @inheritdoc IPool\n  function setConfiguration(\n    address asset,\n    DataTypes.ReserveConfigurationMap calldata configuration\n  ) external virtual override onlyPoolConfigurator {\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\n    _reserves[asset].configuration = configuration;\n  }\n\n  /// @inheritdoc IPool\n  function updateBridgeProtocolFee(\n    uint256 protocolFee\n  ) external virtual override onlyPoolConfigurator {\n    _bridgeProtocolFee = protocolFee;\n  }\n\n  /// @inheritdoc IPool\n  function updateFlashloanPremiums(\n    uint128 flashLoanPremiumTotal,\n    uint128 flashLoanPremiumToProtocol\n  ) external virtual override onlyPoolConfigurator {\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\n  }\n\n  /// @inheritdoc IPool\n  function configureEModeCategory(\n    uint8 id,\n    DataTypes.EModeCategory memory category\n  ) external virtual override onlyPoolConfigurator {\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\n    _eModeCategories[id] = category;\n  }\n\n  /// @inheritdoc IPool\n  function getEModeCategoryData(\n    uint8 id\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\n    return _eModeCategories[id];\n  }\n\n  /// @inheritdoc IPool\n  function setUserEMode(uint8 categoryId) external virtual override {\n    EModeLogic.executeSetUserEMode(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersEModeCategory,\n      _usersConfig[msg.sender],\n      DataTypes.ExecuteSetUserEModeParams({\n        reservesCount: _reservesCount,\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n        categoryId: categoryId\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function getUserEMode(address user) external view virtual override returns (uint256) {\n    return _usersEModeCategory[user];\n  }\n\n  /// @inheritdoc IPool\n  function resetIsolationModeTotalDebt(\n    address asset\n  ) external virtual override onlyPoolConfigurator {\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\n  }\n\n  /// @inheritdoc IPool\n  function rescueTokens(\n    address token,\n    address to,\n    uint256 amount\n  ) external virtual override onlyPoolAdmin {\n    PoolLogic.executeRescueTokens(token, to, amount);\n  }\n\n  /// @inheritdoc IPool\n  /// @dev Deprecated: maintained for compatibility purposes\n  function deposit(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external virtual override {\n    SupplyLogic.executeSupply(\n      _reserves,\n      _reservesList,\n      _usersConfig[onBehalfOf],\n      DataTypes.ExecuteSupplyParams({\n        asset: asset,\n        amount: amount,\n        onBehalfOf: onBehalfOf,\n        referralCode: referralCode\n      })\n    );\n  }\n}\n"},"contracts/protocol/pool/PoolConfigurator.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\nimport {ConfiguratorLogic} from '../libraries/logic/ConfiguratorLogic.sol';\nimport {ConfiguratorInputTypes} from '../libraries/types/ConfiguratorInputTypes.sol';\nimport {IPoolConfigurator} from '../../interfaces/IPoolConfigurator.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\nimport {IPoolDataProvider} from '../../interfaces/IPoolDataProvider.sol';\n\n/**\n * @title PoolConfigurator\n * @author Aave\n * @dev Implements the configuration methods for the Aave protocol\n */\ncontract PoolConfigurator is VersionedInitializable, IPoolConfigurator {\n  using PercentageMath for uint256;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  IPoolAddressesProvider internal _addressesProvider;\n  IPool internal _pool;\n\n  /**\n   * @dev Only pool admin can call functions marked by this modifier.\n   */\n  modifier onlyPoolAdmin() {\n    _onlyPoolAdmin();\n    _;\n  }\n\n  /**\n   * @dev Only emergency admin can call functions marked by this modifier.\n   */\n  modifier onlyEmergencyAdmin() {\n    _onlyEmergencyAdmin();\n    _;\n  }\n\n  /**\n   * @dev Only emergency or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyEmergencyOrPoolAdmin() {\n    _onlyPoolOrEmergencyAdmin();\n    _;\n  }\n\n  /**\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyAssetListingOrPoolAdmins() {\n    _onlyAssetListingOrPoolAdmins();\n    _;\n  }\n\n  /**\n   * @dev Only risk or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyRiskOrPoolAdmins() {\n    _onlyRiskOrPoolAdmins();\n    _;\n  }\n\n  uint256 public constant CONFIGURATOR_REVISION = 0x1;\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure virtual override returns (uint256) {\n    return CONFIGURATOR_REVISION;\n  }\n\n  function initialize(IPoolAddressesProvider provider) public initializer {\n    _addressesProvider = provider;\n    _pool = IPool(_addressesProvider.getPool());\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function initReserves(\n    ConfiguratorInputTypes.InitReserveInput[] calldata input\n  ) external override onlyAssetListingOrPoolAdmins {\n    IPool cachedPool = _pool;\n    for (uint256 i = 0; i < input.length; i++) {\n      ConfiguratorLogic.executeInitReserve(cachedPool, input[i]);\n    }\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function dropReserve(address asset) external override onlyPoolAdmin {\n    _pool.dropReserve(asset);\n    emit ReserveDropped(asset);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateAToken(\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\n  ) external override onlyPoolAdmin {\n    ConfiguratorLogic.executeUpdateAToken(_pool, input);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateStableDebtToken(\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) external override onlyPoolAdmin {\n    ConfiguratorLogic.executeUpdateStableDebtToken(_pool, input);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateVariableDebtToken(\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) external override onlyPoolAdmin {\n    ConfiguratorLogic.executeUpdateVariableDebtToken(_pool, input);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveBorrowing(address asset, bool enabled) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    if (!enabled) {\n      require(!currentConfig.getStableRateBorrowingEnabled(), Errors.STABLE_BORROWING_ENABLED);\n    }\n    currentConfig.setBorrowingEnabled(enabled);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveBorrowing(asset, enabled);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function configureReserveAsCollateral(\n    address asset,\n    uint256 ltv,\n    uint256 liquidationThreshold,\n    uint256 liquidationBonus\n  ) external override onlyRiskOrPoolAdmins {\n    //validation of the parameters: the LTV can\n    //only be lower or equal than the liquidation threshold\n    //(otherwise a loan against the asset would cause instantaneous liquidation)\n    require(ltv <= liquidationThreshold, Errors.INVALID_RESERVE_PARAMS);\n\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    if (liquidationThreshold != 0) {\n      //liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less\n      //collateral than needed to cover the debt\n      require(liquidationBonus > PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_PARAMS);\n\n      //if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\n      //a loan is taken there is enough collateral available to cover the liquidation bonus\n      require(\n        liquidationThreshold.percentMul(liquidationBonus) <= PercentageMath.PERCENTAGE_FACTOR,\n        Errors.INVALID_RESERVE_PARAMS\n      );\n    } else {\n      require(liquidationBonus == 0, Errors.INVALID_RESERVE_PARAMS);\n      //if the liquidation threshold is being set to 0,\n      // the reserve is being disabled as collateral. To do so,\n      //we need to ensure no liquidity is supplied\n      _checkNoSuppliers(asset);\n    }\n\n    currentConfig.setLtv(ltv);\n    currentConfig.setLiquidationThreshold(liquidationThreshold);\n    currentConfig.setLiquidationBonus(liquidationBonus);\n\n    _pool.setConfiguration(asset, currentConfig);\n\n    emit CollateralConfigurationChanged(asset, ltv, liquidationThreshold, liquidationBonus);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveStableRateBorrowing(\n    address asset,\n    bool enabled\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    if (enabled) {\n      require(currentConfig.getBorrowingEnabled(), Errors.BORROWING_NOT_ENABLED);\n    }\n    currentConfig.setStableRateBorrowingEnabled(enabled);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveStableRateBorrowing(asset, enabled);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveFlashLoaning(\n    address asset,\n    bool enabled\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    currentConfig.setFlashLoanEnabled(enabled);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveFlashLoaning(asset, enabled);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveActive(address asset, bool active) external override onlyPoolAdmin {\n    if (!active) _checkNoSuppliers(asset);\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    currentConfig.setActive(active);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveActive(asset, active);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveFreeze(address asset, bool freeze) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    currentConfig.setFrozen(freeze);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveFrozen(asset, freeze);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setBorrowableInIsolation(\n    address asset,\n    bool borrowable\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    currentConfig.setBorrowableInIsolation(borrowable);\n    _pool.setConfiguration(asset, currentConfig);\n    emit BorrowableInIsolationChanged(asset, borrowable);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReservePause(address asset, bool paused) public override onlyEmergencyOrPoolAdmin {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    currentConfig.setPaused(paused);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReservePaused(asset, paused);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveFactor(\n    address asset,\n    uint256 newReserveFactor\n  ) external override onlyRiskOrPoolAdmins {\n    require(newReserveFactor <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldReserveFactor = currentConfig.getReserveFactor();\n    currentConfig.setReserveFactor(newReserveFactor);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveFactorChanged(asset, oldReserveFactor, newReserveFactor);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setDebtCeiling(\n    address asset,\n    uint256 newDebtCeiling\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    uint256 oldDebtCeiling = currentConfig.getDebtCeiling();\n    if (oldDebtCeiling == 0) {\n      _checkNoSuppliers(asset);\n    }\n    currentConfig.setDebtCeiling(newDebtCeiling);\n    _pool.setConfiguration(asset, currentConfig);\n\n    if (newDebtCeiling == 0) {\n      _pool.resetIsolationModeTotalDebt(asset);\n    }\n\n    emit DebtCeilingChanged(asset, oldDebtCeiling, newDebtCeiling);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setSiloedBorrowing(\n    address asset,\n    bool newSiloed\n  ) external override onlyRiskOrPoolAdmins {\n    if (newSiloed) {\n      _checkNoBorrowers(asset);\n    }\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    bool oldSiloed = currentConfig.getSiloedBorrowing();\n\n    currentConfig.setSiloedBorrowing(newSiloed);\n\n    _pool.setConfiguration(asset, currentConfig);\n\n    emit SiloedBorrowingChanged(asset, oldSiloed, newSiloed);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setBorrowCap(\n    address asset,\n    uint256 newBorrowCap\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldBorrowCap = currentConfig.getBorrowCap();\n    currentConfig.setBorrowCap(newBorrowCap);\n    _pool.setConfiguration(asset, currentConfig);\n    emit BorrowCapChanged(asset, oldBorrowCap, newBorrowCap);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setSupplyCap(\n    address asset,\n    uint256 newSupplyCap\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldSupplyCap = currentConfig.getSupplyCap();\n    currentConfig.setSupplyCap(newSupplyCap);\n    _pool.setConfiguration(asset, currentConfig);\n    emit SupplyCapChanged(asset, oldSupplyCap, newSupplyCap);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setLiquidationProtocolFee(\n    address asset,\n    uint256 newFee\n  ) external override onlyRiskOrPoolAdmins {\n    require(newFee <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_LIQUIDATION_PROTOCOL_FEE);\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldFee = currentConfig.getLiquidationProtocolFee();\n    currentConfig.setLiquidationProtocolFee(newFee);\n    _pool.setConfiguration(asset, currentConfig);\n    emit LiquidationProtocolFeeChanged(asset, oldFee, newFee);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setEModeCategory(\n    uint8 categoryId,\n    uint16 ltv,\n    uint16 liquidationThreshold,\n    uint16 liquidationBonus,\n    address oracle,\n    string calldata label\n  ) external override onlyRiskOrPoolAdmins {\n    require(ltv != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\n    require(liquidationThreshold != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\n\n    // validation of the parameters: the LTV can\n    // only be lower or equal than the liquidation threshold\n    // (otherwise a loan against the asset would cause instantaneous liquidation)\n    require(ltv <= liquidationThreshold, Errors.INVALID_EMODE_CATEGORY_PARAMS);\n    require(\n      liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\n    );\n\n    // if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\n    // a loan is taken there is enough collateral available to cover the liquidation bonus\n    require(\n      uint256(liquidationThreshold).percentMul(liquidationBonus) <=\n        PercentageMath.PERCENTAGE_FACTOR,\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\n    );\n\n    address[] memory reserves = _pool.getReservesList();\n    for (uint256 i = 0; i < reserves.length; i++) {\n      DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(reserves[i]);\n      if (categoryId == currentConfig.getEModeCategory()) {\n        require(ltv > currentConfig.getLtv(), Errors.INVALID_EMODE_CATEGORY_PARAMS);\n        require(\n          liquidationThreshold > currentConfig.getLiquidationThreshold(),\n          Errors.INVALID_EMODE_CATEGORY_PARAMS\n        );\n      }\n    }\n\n    _pool.configureEModeCategory(\n      categoryId,\n      DataTypes.EModeCategory({\n        ltv: ltv,\n        liquidationThreshold: liquidationThreshold,\n        liquidationBonus: liquidationBonus,\n        priceSource: oracle,\n        label: label\n      })\n    );\n    emit EModeCategoryAdded(categoryId, ltv, liquidationThreshold, liquidationBonus, oracle, label);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setAssetEModeCategory(\n    address asset,\n    uint8 newCategoryId\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    if (newCategoryId != 0) {\n      DataTypes.EModeCategory memory categoryData = _pool.getEModeCategoryData(newCategoryId);\n      require(\n        categoryData.liquidationThreshold > currentConfig.getLiquidationThreshold(),\n        Errors.INVALID_EMODE_CATEGORY_ASSIGNMENT\n      );\n    }\n    uint256 oldCategoryId = currentConfig.getEModeCategory();\n    currentConfig.setEModeCategory(newCategoryId);\n    _pool.setConfiguration(asset, currentConfig);\n    emit EModeAssetCategoryChanged(asset, uint8(oldCategoryId), newCategoryId);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setUnbackedMintCap(\n    address asset,\n    uint256 newUnbackedMintCap\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldUnbackedMintCap = currentConfig.getUnbackedMintCap();\n    currentConfig.setUnbackedMintCap(newUnbackedMintCap);\n    _pool.setConfiguration(asset, currentConfig);\n    emit UnbackedMintCapChanged(asset, oldUnbackedMintCap, newUnbackedMintCap);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveInterestRateStrategyAddress(\n    address asset,\n    address newRateStrategyAddress\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveData memory reserve = _pool.getReserveData(asset);\n    address oldRateStrategyAddress = reserve.interestRateStrategyAddress;\n    _pool.setReserveInterestRateStrategyAddress(asset, newRateStrategyAddress);\n    emit ReserveInterestRateStrategyChanged(asset, oldRateStrategyAddress, newRateStrategyAddress);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setPoolPause(bool paused) external override onlyEmergencyAdmin {\n    address[] memory reserves = _pool.getReservesList();\n\n    for (uint256 i = 0; i < reserves.length; i++) {\n      if (reserves[i] != address(0)) {\n        setReservePause(reserves[i], paused);\n      }\n    }\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external override onlyPoolAdmin {\n    require(\n      newBridgeProtocolFee <= PercentageMath.PERCENTAGE_FACTOR,\n      Errors.BRIDGE_PROTOCOL_FEE_INVALID\n    );\n    uint256 oldBridgeProtocolFee = _pool.BRIDGE_PROTOCOL_FEE();\n    _pool.updateBridgeProtocolFee(newBridgeProtocolFee);\n    emit BridgeProtocolFeeUpdated(oldBridgeProtocolFee, newBridgeProtocolFee);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateFlashloanPremiumTotal(\n    uint128 newFlashloanPremiumTotal\n  ) external override onlyPoolAdmin {\n    require(\n      newFlashloanPremiumTotal <= PercentageMath.PERCENTAGE_FACTOR,\n      Errors.FLASHLOAN_PREMIUM_INVALID\n    );\n    uint128 oldFlashloanPremiumTotal = _pool.FLASHLOAN_PREMIUM_TOTAL();\n    _pool.updateFlashloanPremiums(newFlashloanPremiumTotal, _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL());\n    emit FlashloanPremiumTotalUpdated(oldFlashloanPremiumTotal, newFlashloanPremiumTotal);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateFlashloanPremiumToProtocol(\n    uint128 newFlashloanPremiumToProtocol\n  ) external override onlyPoolAdmin {\n    require(\n      newFlashloanPremiumToProtocol <= PercentageMath.PERCENTAGE_FACTOR,\n      Errors.FLASHLOAN_PREMIUM_INVALID\n    );\n    uint128 oldFlashloanPremiumToProtocol = _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL();\n    _pool.updateFlashloanPremiums(_pool.FLASHLOAN_PREMIUM_TOTAL(), newFlashloanPremiumToProtocol);\n    emit FlashloanPremiumToProtocolUpdated(\n      oldFlashloanPremiumToProtocol,\n      newFlashloanPremiumToProtocol\n    );\n  }\n\n  function _checkNoSuppliers(address asset) internal view {\n    (, uint256 accruedToTreasury, uint256 totalATokens, , , , , , , , , ) = IPoolDataProvider(\n      _addressesProvider.getPoolDataProvider()\n    ).getReserveData(asset);\n\n    require(totalATokens == 0 && accruedToTreasury == 0, Errors.RESERVE_LIQUIDITY_NOT_ZERO);\n  }\n\n  function _checkNoBorrowers(address asset) internal view {\n    uint256 totalDebt = IPoolDataProvider(_addressesProvider.getPoolDataProvider()).getTotalDebt(\n      asset\n    );\n    require(totalDebt == 0, Errors.RESERVE_DEBT_NOT_ZERO);\n  }\n\n  function _onlyPoolAdmin() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\n  }\n\n  function _onlyEmergencyAdmin() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(aclManager.isEmergencyAdmin(msg.sender), Errors.CALLER_NOT_EMERGENCY_ADMIN);\n  }\n\n  function _onlyPoolOrEmergencyAdmin() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(\n      aclManager.isPoolAdmin(msg.sender) || aclManager.isEmergencyAdmin(msg.sender),\n      Errors.CALLER_NOT_POOL_OR_EMERGENCY_ADMIN\n    );\n  }\n\n  function _onlyAssetListingOrPoolAdmins() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\n    );\n  }\n\n  function _onlyRiskOrPoolAdmins() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(\n      aclManager.isRiskAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_RISK_OR_POOL_ADMIN\n    );\n  }\n}\n"},"contracts/protocol/pool/PoolStorage.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\n\n/**\n * @title PoolStorage\n * @author Aave\n * @notice Contract used as storage of the Pool contract.\n * @dev It defines the storage layout of the Pool contract.\n */\ncontract PoolStorage {\n  using ReserveLogic for DataTypes.ReserveData;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\n  mapping(address => DataTypes.ReserveData) internal _reserves;\n\n  // Map of users address and their configuration data (userAddress => userConfiguration)\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\n\n  // List of reserves as a map (reserveId => reserve).\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\n  mapping(uint256 => address) internal _reservesList;\n\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\n\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\n  mapping(address => uint8) internal _usersEModeCategory;\n\n  // Fee of the protocol bridge, expressed in bps\n  uint256 internal _bridgeProtocolFee;\n\n  // Total FlashLoan Premium, expressed in bps\n  uint128 internal _flashLoanPremiumTotal;\n\n  // FlashLoan premium paid to protocol treasury, expressed in bps\n  uint128 internal _flashLoanPremiumToProtocol;\n\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\n  uint64 internal _maxStableRateBorrowSizePercent;\n\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\n  uint16 internal _reservesCount;\n}\n"},"contracts/protocol/tokenization/AToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IAToken} from '../../interfaces/IAToken.sol';\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\nimport {EIP712Base} from './base/EIP712Base.sol';\n\n/**\n * @title Aave ERC20 AToken\n * @author Aave\n * @notice Implementation of the interest bearing token for the Aave protocol\n */\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n  using GPv2SafeERC20 for IERC20;\n\n  bytes32 public constant PERMIT_TYPEHASH =\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\n\n  uint256 public constant ATOKEN_REVISION = 0x1;\n\n  address internal _treasury;\n  address internal _underlyingAsset;\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure virtual override returns (uint256) {\n    return ATOKEN_REVISION;\n  }\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(\n    IPool pool\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IInitializableAToken\n  function initialize(\n    IPool initializingPool,\n    address treasury,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 aTokenDecimals,\n    string calldata aTokenName,\n    string calldata aTokenSymbol,\n    bytes calldata params\n  ) public virtual override initializer {\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\n    _setName(aTokenName);\n    _setSymbol(aTokenSymbol);\n    _setDecimals(aTokenDecimals);\n\n    _treasury = treasury;\n    _underlyingAsset = underlyingAsset;\n    _incentivesController = incentivesController;\n\n    _domainSeparator = _calculateDomainSeparator();\n\n    emit Initialized(\n      underlyingAsset,\n      address(POOL),\n      treasury,\n      address(incentivesController),\n      aTokenDecimals,\n      aTokenName,\n      aTokenSymbol,\n      params\n    );\n  }\n\n  /// @inheritdoc IAToken\n  function mint(\n    address caller,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) external virtual override onlyPool returns (bool) {\n    return _mintScaled(caller, onBehalfOf, amount, index);\n  }\n\n  /// @inheritdoc IAToken\n  function burn(\n    address from,\n    address receiverOfUnderlying,\n    uint256 amount,\n    uint256 index\n  ) external virtual override onlyPool {\n    _burnScaled(from, receiverOfUnderlying, amount, index);\n    if (receiverOfUnderlying != address(this)) {\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\n    }\n  }\n\n  /// @inheritdoc IAToken\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\n    if (amount == 0) {\n      return;\n    }\n    _mintScaled(address(POOL), _treasury, amount, index);\n  }\n\n  /// @inheritdoc IAToken\n  function transferOnLiquidation(\n    address from,\n    address to,\n    uint256 value\n  ) external virtual override onlyPool {\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\n    // so no need to emit a specific event here\n    _transfer(from, to, value, false);\n  }\n\n  /// @inheritdoc IERC20\n  function balanceOf(\n    address user\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\n  }\n\n  /// @inheritdoc IERC20\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\n    uint256 currentSupplyScaled = super.totalSupply();\n\n    if (currentSupplyScaled == 0) {\n      return 0;\n    }\n\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\n  }\n\n  /// @inheritdoc IAToken\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\n    return _treasury;\n  }\n\n  /// @inheritdoc IAToken\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\n    return _underlyingAsset;\n  }\n\n  /// @inheritdoc IAToken\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\n  }\n\n  /// @inheritdoc IAToken\n  function handleRepayment(\n    address user,\n    address onBehalfOf,\n    uint256 amount\n  ) external virtual override onlyPool {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IAToken\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 override {\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    //solium-disable-next-line\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\n    uint256 currentValidNonce = _nonces[owner];\n    bytes32 digest = keccak256(\n      abi.encodePacked(\n        '\\x19\\x01',\n        DOMAIN_SEPARATOR(),\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\n      )\n    );\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\n    _nonces[owner] = currentValidNonce + 1;\n    _approve(owner, spender, value);\n  }\n\n  /**\n   * @notice Transfers the aTokens between two users. Validates the transfer\n   * (ie checks for valid HF after the transfer) if required\n   * @param from The source address\n   * @param to The destination address\n   * @param amount The amount getting transferred\n   * @param validate True if the transfer needs to be validated, false otherwise\n   */\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\n    address underlyingAsset = _underlyingAsset;\n\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\n\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\n\n    super._transfer(from, to, amount, index);\n\n    if (validate) {\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\n    }\n\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\n  }\n\n  /**\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\n   * @param from The source address\n   * @param to The destination address\n   * @param amount The amount getting transferred\n   */\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\n    _transfer(from, to, amount, true);\n  }\n\n  /**\n   * @dev Overrides the base function to fully implement IAToken\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\n   */\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\n    return super.DOMAIN_SEPARATOR();\n  }\n\n  /**\n   * @dev Overrides the base function to fully implement IAToken\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\n   */\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\n    return super.nonces(owner);\n  }\n\n  /// @inheritdoc EIP712Base\n  function _EIP712BaseId() internal view override returns (string memory) {\n    return name();\n  }\n\n  /// @inheritdoc IAToken\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\n    IERC20(token).safeTransfer(to, amount);\n  }\n}\n"},"contracts/protocol/tokenization/base/DebtTokenBase.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\nimport {Errors} from '../../libraries/helpers/Errors.sol';\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\nimport {EIP712Base} from './EIP712Base.sol';\n\n/**\n * @title DebtTokenBase\n * @author Aave\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\n */\nabstract contract DebtTokenBase is\n  VersionedInitializable,\n  EIP712Base,\n  Context,\n  ICreditDelegationToken\n{\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\n\n  // Credit Delegation Typehash\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\n\n  address internal _underlyingAsset;\n\n  /**\n   * @dev Constructor.\n   */\n  constructor() EIP712Base() {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc ICreditDelegationToken\n  function approveDelegation(address delegatee, uint256 amount) external override {\n    _approveDelegation(_msgSender(), delegatee, amount);\n  }\n\n  /// @inheritdoc ICreditDelegationToken\n  function delegationWithSig(\n    address delegator,\n    address delegatee,\n    uint256 value,\n    uint256 deadline,\n    uint8 v,\n    bytes32 r,\n    bytes32 s\n  ) external {\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    //solium-disable-next-line\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\n    uint256 currentValidNonce = _nonces[delegator];\n    bytes32 digest = keccak256(\n      abi.encodePacked(\n        '\\x19\\x01',\n        DOMAIN_SEPARATOR(),\n        keccak256(\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\n        )\n      )\n    );\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\n    _nonces[delegator] = currentValidNonce + 1;\n    _approveDelegation(delegator, delegatee, value);\n  }\n\n  /// @inheritdoc ICreditDelegationToken\n  function borrowAllowance(\n    address fromUser,\n    address toUser\n  ) external view override returns (uint256) {\n    return _borrowAllowances[fromUser][toUser];\n  }\n\n  /**\n   * @notice Updates the borrow allowance of a user on the specific debt token.\n   * @param delegator The address delegating the borrowing power\n   * @param delegatee The address receiving the delegated borrowing power\n   * @param amount The allowance amount being delegated.\n   */\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\n    _borrowAllowances[delegator][delegatee] = amount;\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\n  }\n\n  /**\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\n   * @param delegator The address delegating the borrowing power\n   * @param delegatee The address receiving the delegated borrowing power\n   * @param amount The amount to subtract from the current allowance\n   */\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\n\n    _borrowAllowances[delegator][delegatee] = newAllowance;\n\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\n  }\n}\n"},"contracts/protocol/tokenization/base/EIP712Base.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\n/**\n * @title EIP712Base\n * @author Aave\n * @notice Base contract implementation of EIP712.\n */\nabstract contract EIP712Base {\n  bytes public constant EIP712_REVISION = bytes('1');\n  bytes32 internal constant EIP712_DOMAIN =\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\n\n  // Map of address nonces (address => nonce)\n  mapping(address => uint256) internal _nonces;\n\n  bytes32 internal _domainSeparator;\n  uint256 internal immutable _chainId;\n\n  /**\n   * @dev Constructor.\n   */\n  constructor() {\n    _chainId = block.chainid;\n  }\n\n  /**\n   * @notice Get the domain separator for the token\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\n   * @return The domain separator of the token at current chain\n   */\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\n    if (block.chainid == _chainId) {\n      return _domainSeparator;\n    }\n    return _calculateDomainSeparator();\n  }\n\n  /**\n   * @notice Returns the nonce value for address specified as parameter\n   * @param owner The address for which the nonce is being returned\n   * @return The nonce value for the input address`\n   */\n  function nonces(address owner) public view virtual returns (uint256) {\n    return _nonces[owner];\n  }\n\n  /**\n   * @notice Compute the current domain separator\n   * @return The domain separator for the token\n   */\n  function _calculateDomainSeparator() internal view returns (bytes32) {\n    return\n      keccak256(\n        abi.encode(\n          EIP712_DOMAIN,\n          keccak256(bytes(_EIP712BaseId())),\n          keccak256(EIP712_REVISION),\n          block.chainid,\n          address(this)\n        )\n      );\n  }\n\n  /**\n   * @notice Returns the user readable name of signing domain (e.g. token name)\n   * @return The name of the signing domain\n   */\n  function _EIP712BaseId() internal view virtual returns (string memory);\n}\n"},"contracts/protocol/tokenization/base/IncentivizedERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\nimport {Errors} from '../../libraries/helpers/Errors.sol';\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../../interfaces/IPool.sol';\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\n\n/**\n * @title IncentivizedERC20\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\n * @notice Basic ERC20 implementation\n */\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n\n  /**\n   * @dev Only pool admin can call functions marked by this modifier.\n   */\n  modifier onlyPoolAdmin() {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\n    _;\n  }\n\n  /**\n   * @dev Only pool can call functions marked by this modifier.\n   */\n  modifier onlyPool() {\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\n    _;\n  }\n\n  /**\n   * @dev UserState - additionalData is a flexible field.\n   * ATokens and VariableDebtTokens use this field store the index of the\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\n   * this field to store the user's stable rate.\n   */\n  struct UserState {\n    uint128 balance;\n    uint128 additionalData;\n  }\n  // Map of users address and their state data (userAddress => userStateData)\n  mapping(address => UserState) internal _userState;\n\n  // Map of allowances (delegator => delegatee => allowanceAmount)\n  mapping(address => mapping(address => uint256)) private _allowances;\n\n  uint256 internal _totalSupply;\n  string private _name;\n  string private _symbol;\n  uint8 private _decimals;\n  IAaveIncentivesController internal _incentivesController;\n  IPoolAddressesProvider internal immutable _addressesProvider;\n  IPool public immutable POOL;\n\n  /**\n   * @dev Constructor.\n   * @param pool The reference to the main Pool contract\n   * @param name The name of the token\n   * @param symbol The symbol of the token\n   * @param decimals The number of decimals of the token\n   */\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\n    _name = name;\n    _symbol = symbol;\n    _decimals = decimals;\n    POOL = pool;\n  }\n\n  /// @inheritdoc IERC20Detailed\n  function name() public view override returns (string memory) {\n    return _name;\n  }\n\n  /// @inheritdoc IERC20Detailed\n  function symbol() external view override returns (string memory) {\n    return _symbol;\n  }\n\n  /// @inheritdoc IERC20Detailed\n  function decimals() external view override returns (uint8) {\n    return _decimals;\n  }\n\n  /// @inheritdoc IERC20\n  function totalSupply() public view virtual override returns (uint256) {\n    return _totalSupply;\n  }\n\n  /// @inheritdoc IERC20\n  function balanceOf(address account) public view virtual override returns (uint256) {\n    return _userState[account].balance;\n  }\n\n  /**\n   * @notice Returns the address of the Incentives Controller contract\n   * @return The address of the Incentives Controller\n   */\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\n    return _incentivesController;\n  }\n\n  /**\n   * @notice Sets a new Incentives Controller\n   * @param controller the new Incentives controller\n   */\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\n    _incentivesController = controller;\n  }\n\n  /// @inheritdoc IERC20\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\n    uint128 castAmount = amount.toUint128();\n    _transfer(_msgSender(), recipient, castAmount);\n    return true;\n  }\n\n  /// @inheritdoc IERC20\n  function allowance(\n    address owner,\n    address spender\n  ) external view virtual override returns (uint256) {\n    return _allowances[owner][spender];\n  }\n\n  /// @inheritdoc IERC20\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\n    _approve(_msgSender(), spender, amount);\n    return true;\n  }\n\n  /// @inheritdoc IERC20\n  function transferFrom(\n    address sender,\n    address recipient,\n    uint256 amount\n  ) external virtual override returns (bool) {\n    uint128 castAmount = amount.toUint128();\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\n    _transfer(sender, recipient, castAmount);\n    return true;\n  }\n\n  /**\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\n   * @param spender The user allowed to spend on behalf of _msgSender()\n   * @param addedValue The amount being added to the allowance\n   * @return `true`\n   */\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\n    return true;\n  }\n\n  /**\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\n   * @param spender The user allowed to spend on behalf of _msgSender()\n   * @param subtractedValue The amount being subtracted to the allowance\n   * @return `true`\n   */\n  function decreaseAllowance(\n    address spender,\n    uint256 subtractedValue\n  ) external virtual returns (bool) {\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\n    return true;\n  }\n\n  /**\n   * @notice Transfers tokens between two users and apply incentives if defined.\n   * @param sender The source address\n   * @param recipient The destination address\n   * @param amount The amount getting transferred\n   */\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\n    uint128 oldSenderBalance = _userState[sender].balance;\n    _userState[sender].balance = oldSenderBalance - amount;\n    uint128 oldRecipientBalance = _userState[recipient].balance;\n    _userState[recipient].balance = oldRecipientBalance + amount;\n\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\n    if (address(incentivesControllerLocal) != address(0)) {\n      uint256 currentTotalSupply = _totalSupply;\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\n      if (sender != recipient) {\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\n      }\n    }\n  }\n\n  /**\n   * @notice Approve `spender` to use `amount` of `owner`s balance\n   * @param owner The address owning the tokens\n   * @param spender The address approved for spending\n   * @param amount The amount of tokens to approve spending of\n   */\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\n    _allowances[owner][spender] = amount;\n    emit Approval(owner, spender, amount);\n  }\n\n  /**\n   * @notice Update the name of the token\n   * @param newName The new name for the token\n   */\n  function _setName(string memory newName) internal {\n    _name = newName;\n  }\n\n  /**\n   * @notice Update the symbol for the token\n   * @param newSymbol The new symbol for the token\n   */\n  function _setSymbol(string memory newSymbol) internal {\n    _symbol = newSymbol;\n  }\n\n  /**\n   * @notice Update the number of decimals for the token\n   * @param newDecimals The new number of decimals for the token\n   */\n  function _setDecimals(uint8 newDecimals) internal {\n    _decimals = newDecimals;\n  }\n}\n"},"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\nimport {IPool} from '../../../interfaces/IPool.sol';\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\n\n/**\n * @title MintableIncentivizedERC20\n * @author Aave\n * @notice Implements mint and burn functions for IncentivizedERC20\n */\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\n  /**\n   * @dev Constructor.\n   * @param pool The reference to the main Pool contract\n   * @param name The name of the token\n   * @param symbol The symbol of the token\n   * @param decimals The number of decimals of the token\n   */\n  constructor(\n    IPool pool,\n    string memory name,\n    string memory symbol,\n    uint8 decimals\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\n    // Intentionally left blank\n  }\n\n  /**\n   * @notice Mints tokens to an account and apply incentives if defined\n   * @param account The address receiving tokens\n   * @param amount The amount of tokens to mint\n   */\n  function _mint(address account, uint128 amount) internal virtual {\n    uint256 oldTotalSupply = _totalSupply;\n    _totalSupply = oldTotalSupply + amount;\n\n    uint128 oldAccountBalance = _userState[account].balance;\n    _userState[account].balance = oldAccountBalance + amount;\n\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\n    if (address(incentivesControllerLocal) != address(0)) {\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\n    }\n  }\n\n  /**\n   * @notice Burns tokens from an account and apply incentives if defined\n   * @param account The account whose tokens are burnt\n   * @param amount The amount of tokens to burn\n   */\n  function _burn(address account, uint128 amount) internal virtual {\n    uint256 oldTotalSupply = _totalSupply;\n    _totalSupply = oldTotalSupply - amount;\n\n    uint128 oldAccountBalance = _userState[account].balance;\n    _userState[account].balance = oldAccountBalance - amount;\n\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\n\n    if (address(incentivesControllerLocal) != address(0)) {\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\n    }\n  }\n}\n"},"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {Errors} from '../../libraries/helpers/Errors.sol';\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\nimport {IPool} from '../../../interfaces/IPool.sol';\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\n\n/**\n * @title ScaledBalanceTokenBase\n * @author Aave\n * @notice Basic ERC20 implementation of scaled balance token\n */\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n\n  /**\n   * @dev Constructor.\n   * @param pool The reference to the main Pool contract\n   * @param name The name of the token\n   * @param symbol The symbol of the token\n   * @param decimals The number of decimals of the token\n   */\n  constructor(\n    IPool pool,\n    string memory name,\n    string memory symbol,\n    uint8 decimals\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IScaledBalanceToken\n  function scaledBalanceOf(address user) external view override returns (uint256) {\n    return super.balanceOf(user);\n  }\n\n  /// @inheritdoc IScaledBalanceToken\n  function getScaledUserBalanceAndSupply(\n    address user\n  ) external view override returns (uint256, uint256) {\n    return (super.balanceOf(user), super.totalSupply());\n  }\n\n  /// @inheritdoc IScaledBalanceToken\n  function scaledTotalSupply() public view virtual override returns (uint256) {\n    return super.totalSupply();\n  }\n\n  /// @inheritdoc IScaledBalanceToken\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\n    return _userState[user].additionalData;\n  }\n\n  /**\n   * @notice Implements the basic logic to mint a scaled balance token.\n   * @param caller The address performing the mint\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\n   * @param amount The amount of tokens getting minted\n   * @param index The next liquidity index of the reserve\n   * @return `true` if the the previous balance of the user was 0\n   */\n  function _mintScaled(\n    address caller,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) internal returns (bool) {\n    uint256 amountScaled = amount.rayDiv(index);\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\n\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\n\n    _userState[onBehalfOf].additionalData = index.toUint128();\n\n    _mint(onBehalfOf, amountScaled.toUint128());\n\n    uint256 amountToMint = amount + balanceIncrease;\n    emit Transfer(address(0), onBehalfOf, amountToMint);\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\n\n    return (scaledBalance == 0);\n  }\n\n  /**\n   * @notice Implements the basic logic to burn a scaled balance token.\n   * @dev In some instances, a burn transaction will emit a mint event\n   * if the amount to burn is less than the interest that the user accrued\n   * @param user The user which debt is burnt\n   * @param target The address that will receive the underlying, if any\n   * @param amount The amount getting burned\n   * @param index The variable debt index of the reserve\n   */\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\n    uint256 amountScaled = amount.rayDiv(index);\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\n\n    uint256 scaledBalance = super.balanceOf(user);\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\n      scaledBalance.rayMul(_userState[user].additionalData);\n\n    _userState[user].additionalData = index.toUint128();\n\n    _burn(user, amountScaled.toUint128());\n\n    if (balanceIncrease > amount) {\n      uint256 amountToMint = balanceIncrease - amount;\n      emit Transfer(address(0), user, amountToMint);\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\n    } else {\n      uint256 amountToBurn = amount - balanceIncrease;\n      emit Transfer(user, address(0), amountToBurn);\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\n    }\n  }\n\n  /**\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\n   * @dev It emits a mint event with the interest accrued per user\n   * @param sender The source address\n   * @param recipient The destination address\n   * @param amount The amount getting transferred\n   * @param index The next liquidity index of the reserve\n   */\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\n    uint256 senderScaledBalance = super.balanceOf(sender);\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\n\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\n\n    _userState[sender].additionalData = index.toUint128();\n    _userState[recipient].additionalData = index.toUint128();\n\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\n\n    if (senderBalanceIncrease > 0) {\n      emit Transfer(address(0), sender, senderBalanceIncrease);\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\n    }\n\n    if (sender != recipient && recipientBalanceIncrease > 0) {\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\n    }\n\n    emit Transfer(sender, recipient, amount);\n  }\n}\n"},"contracts/protocol/tokenization/DelegationAwareAToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IDelegationToken} from '../../interfaces/IDelegationToken.sol';\nimport {AToken} from './AToken.sol';\n\n/**\n * @title DelegationAwareAToken\n * @author Aave\n * @notice AToken enabled to delegate voting power of the underlying asset to a different address\n * @dev The underlying asset needs to be compatible with the COMP delegation interface\n */\ncontract DelegationAwareAToken is AToken {\n  /**\n   * @dev Emitted when underlying voting power is delegated\n   * @param delegatee The address of the delegatee\n   */\n  event DelegateUnderlyingTo(address indexed delegatee);\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(IPool pool) AToken(pool) {\n    // Intentionally left blank\n  }\n\n  /**\n   * @notice Delegates voting power of the underlying asset to a `delegatee` address\n   * @param delegatee The address that will receive the delegation\n   */\n  function delegateUnderlyingTo(address delegatee) external onlyPoolAdmin {\n    IDelegationToken(_underlyingAsset).delegate(delegatee);\n    emit DelegateUnderlyingTo(delegatee);\n  }\n}\n"},"contracts/protocol/tokenization/StableDebtToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {MathUtils} from '../libraries/math/MathUtils.sol';\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\nimport {IStableDebtToken} from '../../interfaces/IStableDebtToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {EIP712Base} from './base/EIP712Base.sol';\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\n\n/**\n * @title StableDebtToken\n * @author Aave\n * @notice Implements a stable debt token to track the borrowing positions of users\n * at stable rate mode\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\n */\ncontract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\n\n  // Map of users address and the timestamp of their last update (userAddress => lastUpdateTimestamp)\n  mapping(address => uint40) internal _timestamps;\n\n  uint128 internal _avgStableRate;\n\n  // Timestamp of the last update of the total supply\n  uint40 internal _totalSupplyTimestamp;\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(\n    IPool pool\n  ) DebtTokenBase() IncentivizedERC20(pool, 'STABLE_DEBT_TOKEN_IMPL', 'STABLE_DEBT_TOKEN_IMPL', 0) {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IInitializableDebtToken\n  function initialize(\n    IPool initializingPool,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 debtTokenDecimals,\n    string memory debtTokenName,\n    string memory debtTokenSymbol,\n    bytes calldata params\n  ) external override initializer {\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\n    _setName(debtTokenName);\n    _setSymbol(debtTokenSymbol);\n    _setDecimals(debtTokenDecimals);\n\n    _underlyingAsset = underlyingAsset;\n    _incentivesController = incentivesController;\n\n    _domainSeparator = _calculateDomainSeparator();\n\n    emit Initialized(\n      underlyingAsset,\n      address(POOL),\n      address(incentivesController),\n      debtTokenDecimals,\n      debtTokenName,\n      debtTokenSymbol,\n      params\n    );\n  }\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure virtual override returns (uint256) {\n    return DEBT_TOKEN_REVISION;\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getAverageStableRate() external view virtual override returns (uint256) {\n    return _avgStableRate;\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getUserLastUpdated(address user) external view virtual override returns (uint40) {\n    return _timestamps[user];\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getUserStableRate(address user) external view virtual override returns (uint256) {\n    return _userState[user].additionalData;\n  }\n\n  /// @inheritdoc IERC20\n  function balanceOf(address account) public view virtual override returns (uint256) {\n    uint256 accountBalance = super.balanceOf(account);\n    uint256 stableRate = _userState[account].additionalData;\n    if (accountBalance == 0) {\n      return 0;\n    }\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\n      stableRate,\n      _timestamps[account]\n    );\n    return accountBalance.rayMul(cumulatedInterest);\n  }\n\n  struct MintLocalVars {\n    uint256 previousSupply;\n    uint256 nextSupply;\n    uint256 amountInRay;\n    uint256 currentStableRate;\n    uint256 nextStableRate;\n    uint256 currentAvgStableRate;\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function mint(\n    address user,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 rate\n  ) external virtual override onlyPool returns (bool, uint256, uint256) {\n    MintLocalVars memory vars;\n\n    if (user != onBehalfOf) {\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\n    }\n\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(onBehalfOf);\n\n    vars.previousSupply = totalSupply();\n    vars.currentAvgStableRate = _avgStableRate;\n    vars.nextSupply = _totalSupply = vars.previousSupply + amount;\n\n    vars.amountInRay = amount.wadToRay();\n\n    vars.currentStableRate = _userState[onBehalfOf].additionalData;\n    vars.nextStableRate = (vars.currentStableRate.rayMul(currentBalance.wadToRay()) +\n      vars.amountInRay.rayMul(rate)).rayDiv((currentBalance + amount).wadToRay());\n\n    _userState[onBehalfOf].additionalData = vars.nextStableRate.toUint128();\n\n    //solium-disable-next-line\n    _totalSupplyTimestamp = _timestamps[onBehalfOf] = uint40(block.timestamp);\n\n    // Calculates the updated average stable rate\n    vars.currentAvgStableRate = _avgStableRate = (\n      (vars.currentAvgStableRate.rayMul(vars.previousSupply.wadToRay()) +\n        rate.rayMul(vars.amountInRay)).rayDiv(vars.nextSupply.wadToRay())\n    ).toUint128();\n\n    uint256 amountToMint = amount + balanceIncrease;\n    _mint(onBehalfOf, amountToMint, vars.previousSupply);\n\n    emit Transfer(address(0), onBehalfOf, amountToMint);\n    emit Mint(\n      user,\n      onBehalfOf,\n      amountToMint,\n      currentBalance,\n      balanceIncrease,\n      vars.nextStableRate,\n      vars.currentAvgStableRate,\n      vars.nextSupply\n    );\n\n    return (currentBalance == 0, vars.nextSupply, vars.currentAvgStableRate);\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function burn(\n    address from,\n    uint256 amount\n  ) external virtual override onlyPool returns (uint256, uint256) {\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(from);\n\n    uint256 previousSupply = totalSupply();\n    uint256 nextAvgStableRate = 0;\n    uint256 nextSupply = 0;\n    uint256 userStableRate = _userState[from].additionalData;\n\n    // Since the total supply and each single user debt accrue separately,\n    // there might be accumulation errors so that the last borrower repaying\n    // might actually try to repay more than the available debt supply.\n    // In this case we simply set the total supply and the avg stable rate to 0\n    if (previousSupply <= amount) {\n      _avgStableRate = 0;\n      _totalSupply = 0;\n    } else {\n      nextSupply = _totalSupply = previousSupply - amount;\n      uint256 firstTerm = uint256(_avgStableRate).rayMul(previousSupply.wadToRay());\n      uint256 secondTerm = userStableRate.rayMul(amount.wadToRay());\n\n      // For the same reason described above, when the last user is repaying it might\n      // happen that user rate * user balance > avg rate * total supply. In that case,\n      // we simply set the avg rate to 0\n      if (secondTerm >= firstTerm) {\n        nextAvgStableRate = _totalSupply = _avgStableRate = 0;\n      } else {\n        nextAvgStableRate = _avgStableRate = (\n          (firstTerm - secondTerm).rayDiv(nextSupply.wadToRay())\n        ).toUint128();\n      }\n    }\n\n    if (amount == currentBalance) {\n      _userState[from].additionalData = 0;\n      _timestamps[from] = 0;\n    } else {\n      //solium-disable-next-line\n      _timestamps[from] = uint40(block.timestamp);\n    }\n    //solium-disable-next-line\n    _totalSupplyTimestamp = uint40(block.timestamp);\n\n    if (balanceIncrease > amount) {\n      uint256 amountToMint = balanceIncrease - amount;\n      _mint(from, amountToMint, previousSupply);\n      emit Transfer(address(0), from, amountToMint);\n      emit Mint(\n        from,\n        from,\n        amountToMint,\n        currentBalance,\n        balanceIncrease,\n        userStableRate,\n        nextAvgStableRate,\n        nextSupply\n      );\n    } else {\n      uint256 amountToBurn = amount - balanceIncrease;\n      _burn(from, amountToBurn, previousSupply);\n      emit Transfer(from, address(0), amountToBurn);\n      emit Burn(from, amountToBurn, currentBalance, balanceIncrease, nextAvgStableRate, nextSupply);\n    }\n\n    return (nextSupply, nextAvgStableRate);\n  }\n\n  /**\n   * @notice Calculates the increase in balance since the last user interaction\n   * @param user The address of the user for which the interest is being accumulated\n   * @return The previous principal balance\n   * @return The new principal balance\n   * @return The balance increase\n   */\n  function _calculateBalanceIncrease(\n    address user\n  ) internal view returns (uint256, uint256, uint256) {\n    uint256 previousPrincipalBalance = super.balanceOf(user);\n\n    if (previousPrincipalBalance == 0) {\n      return (0, 0, 0);\n    }\n\n    uint256 newPrincipalBalance = balanceOf(user);\n\n    return (\n      previousPrincipalBalance,\n      newPrincipalBalance,\n      newPrincipalBalance - previousPrincipalBalance\n    );\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getSupplyData() external view override returns (uint256, uint256, uint256, uint40) {\n    uint256 avgRate = _avgStableRate;\n    return (super.totalSupply(), _calcTotalSupply(avgRate), avgRate, _totalSupplyTimestamp);\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getTotalSupplyAndAvgRate() external view override returns (uint256, uint256) {\n    uint256 avgRate = _avgStableRate;\n    return (_calcTotalSupply(avgRate), avgRate);\n  }\n\n  /// @inheritdoc IERC20\n  function totalSupply() public view virtual override returns (uint256) {\n    return _calcTotalSupply(_avgStableRate);\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getTotalSupplyLastUpdated() external view override returns (uint40) {\n    return _totalSupplyTimestamp;\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function principalBalanceOf(address user) external view virtual override returns (uint256) {\n    return super.balanceOf(user);\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\n    return _underlyingAsset;\n  }\n\n  /**\n   * @notice Calculates the total supply\n   * @param avgRate The average rate at which the total supply increases\n   * @return The debt balance of the user since the last burn/mint action\n   */\n  function _calcTotalSupply(uint256 avgRate) internal view returns (uint256) {\n    uint256 principalSupply = super.totalSupply();\n\n    if (principalSupply == 0) {\n      return 0;\n    }\n\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\n      avgRate,\n      _totalSupplyTimestamp\n    );\n\n    return principalSupply.rayMul(cumulatedInterest);\n  }\n\n  /**\n   * @notice Mints stable debt tokens to a user\n   * @param account The account receiving the debt tokens\n   * @param amount The amount being minted\n   * @param oldTotalSupply The total supply before the minting event\n   */\n  function _mint(address account, uint256 amount, uint256 oldTotalSupply) internal {\n    uint128 castAmount = amount.toUint128();\n    uint128 oldAccountBalance = _userState[account].balance;\n    _userState[account].balance = oldAccountBalance + castAmount;\n\n    if (address(_incentivesController) != address(0)) {\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\n    }\n  }\n\n  /**\n   * @notice Burns stable debt tokens of a user\n   * @param account The user getting his debt burned\n   * @param amount The amount being burned\n   * @param oldTotalSupply The total supply before the burning event\n   */\n  function _burn(address account, uint256 amount, uint256 oldTotalSupply) internal {\n    uint128 castAmount = amount.toUint128();\n    uint128 oldAccountBalance = _userState[account].balance;\n    _userState[account].balance = oldAccountBalance - castAmount;\n\n    if (address(_incentivesController) != address(0)) {\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\n    }\n  }\n\n  /// @inheritdoc EIP712Base\n  function _EIP712BaseId() internal view override returns (string memory) {\n    return name();\n  }\n\n  /**\n   * @dev Being non transferrable, the debt token does not implement any of the\n   * standard ERC20 functions for transfer and allowance.\n   */\n  function transfer(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function allowance(address, address) external view virtual override returns (uint256) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function approve(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n}\n"},"contracts/protocol/tokenization/VariableDebtToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\nimport {IVariableDebtToken} from '../../interfaces/IVariableDebtToken.sol';\nimport {EIP712Base} from './base/EIP712Base.sol';\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\n\n/**\n * @title VariableDebtToken\n * @author Aave\n * @notice Implements a variable debt token to track the borrowing positions of users\n * at variable rate mode\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\n */\ncontract VariableDebtToken is DebtTokenBase, ScaledBalanceTokenBase, IVariableDebtToken {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(\n    IPool pool\n  )\n    DebtTokenBase()\n    ScaledBalanceTokenBase(pool, 'VARIABLE_DEBT_TOKEN_IMPL', 'VARIABLE_DEBT_TOKEN_IMPL', 0)\n  {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IInitializableDebtToken\n  function initialize(\n    IPool initializingPool,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 debtTokenDecimals,\n    string memory debtTokenName,\n    string memory debtTokenSymbol,\n    bytes calldata params\n  ) external override initializer {\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\n    _setName(debtTokenName);\n    _setSymbol(debtTokenSymbol);\n    _setDecimals(debtTokenDecimals);\n\n    _underlyingAsset = underlyingAsset;\n    _incentivesController = incentivesController;\n\n    _domainSeparator = _calculateDomainSeparator();\n\n    emit Initialized(\n      underlyingAsset,\n      address(POOL),\n      address(incentivesController),\n      debtTokenDecimals,\n      debtTokenName,\n      debtTokenSymbol,\n      params\n    );\n  }\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure virtual override returns (uint256) {\n    return DEBT_TOKEN_REVISION;\n  }\n\n  /// @inheritdoc IERC20\n  function balanceOf(address user) public view virtual override returns (uint256) {\n    uint256 scaledBalance = super.balanceOf(user);\n\n    if (scaledBalance == 0) {\n      return 0;\n    }\n\n    return scaledBalance.rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\n  }\n\n  /// @inheritdoc IVariableDebtToken\n  function mint(\n    address user,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) external virtual override onlyPool returns (bool, uint256) {\n    if (user != onBehalfOf) {\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\n    }\n    return (_mintScaled(user, onBehalfOf, amount, index), scaledTotalSupply());\n  }\n\n  /// @inheritdoc IVariableDebtToken\n  function burn(\n    address from,\n    uint256 amount,\n    uint256 index\n  ) external virtual override onlyPool returns (uint256) {\n    _burnScaled(from, address(0), amount, index);\n    return scaledTotalSupply();\n  }\n\n  /// @inheritdoc IERC20\n  function totalSupply() public view virtual override returns (uint256) {\n    return super.totalSupply().rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\n  }\n\n  /// @inheritdoc EIP712Base\n  function _EIP712BaseId() internal view override returns (string memory) {\n    return name();\n  }\n\n  /**\n   * @dev Being non transferrable, the debt token does not implement any of the\n   * standard ERC20 functions for transfer and allowance.\n   */\n  function transfer(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function allowance(address, address) external view virtual override returns (uint256) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function approve(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  /// @inheritdoc IVariableDebtToken\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\n    return _underlyingAsset;\n  }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":100000},"evmVersion":"london","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"errors":[{"component":"general","errorCode":"1878","formattedMessage":"Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/dependencies/weth/WETH9.sol\n\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/dependencies/weth/WETH9.sol","start":-1},"type":"Warning"},{"component":"general","errorCode":"2519","formattedMessage":"Warning: This declaration shadows an existing declaration.\n  --> contracts/dependencies/openzeppelin/contracts/ERC20.sol:57:15:\n   |\n57 |   constructor(string memory name, string memory symbol) {\n   |               ^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> contracts/dependencies/openzeppelin/contracts/ERC20.sol:66:3:\n   |\n66 |   function name() public view returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration shadows an existing declaration.","secondarySourceLocations":[{"end":2198,"file":"contracts/dependencies/openzeppelin/contracts/ERC20.sol","message":"The shadowed declaration is here:","start":2123}],"severity":"warning","sourceLocation":{"end":1977,"file":"contracts/dependencies/openzeppelin/contracts/ERC20.sol","start":1959},"type":"Warning"},{"component":"general","errorCode":"2519","formattedMessage":"Warning: This declaration shadows an existing declaration.\n  --> contracts/dependencies/openzeppelin/contracts/ERC20.sol:57:35:\n   |\n57 |   constructor(string memory name, string memory symbol) {\n   |                                   ^^^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> contracts/dependencies/openzeppelin/contracts/ERC20.sol:74:3:\n   |\n74 |   function symbol() public view returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration shadows an existing declaration.","secondarySourceLocations":[{"end":2380,"file":"contracts/dependencies/openzeppelin/contracts/ERC20.sol","message":"The shadowed declaration is here:","start":2301}],"severity":"warning","sourceLocation":{"end":1999,"file":"contracts/dependencies/openzeppelin/contracts/ERC20.sol","start":1979},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol:23:15:\n   |\n23 |   constructor(address admin) {\n   |               ^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol:39:3:\n   |\n39 |   function admin() external ifAdmin returns (address) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":1248,"file":"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","message":"The other declaration is here:","start":1172}],"severity":"warning","sourceLocation":{"end":939,"file":"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","start":926},"type":"Warning"},{"component":"general","errorCode":"2519","formattedMessage":"Warning: This declaration shadows an existing declaration.\n  --> contracts/protocol/tokenization/base/IncentivizedERC20.sol:72:27:\n   |\n72 |   constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\n   |                           ^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> contracts/protocol/tokenization/base/IncentivizedERC20.sol:81:3:\n   |\n81 |   function name() public view override returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration shadows an existing declaration.","secondarySourceLocations":[{"end":3014,"file":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","message":"The shadowed declaration is here:","start":2930}],"severity":"warning","sourceLocation":{"end":2713,"file":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","start":2695},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> contracts/protocol/tokenization/base/IncentivizedERC20.sol:72:47:\n   |\n72 |   constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\n   |                                               ^^^^^^^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> contracts/protocol/tokenization/base/IncentivizedERC20.sol:86:3:\n   |\n86 |   function symbol() external view override returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":3141,"file":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","message":"The other declaration is here:","start":3051}],"severity":"warning","sourceLocation":{"end":2735,"file":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","start":2715},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> contracts/protocol/tokenization/base/IncentivizedERC20.sol:72:69:\n   |\n72 |   constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\n   |                                                                     ^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> contracts/protocol/tokenization/base/IncentivizedERC20.sol:91:3:\n   |\n91 |   function decimals() external view override returns (uint8) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":3264,"file":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","message":"The other declaration is here:","start":3178}],"severity":"warning","sourceLocation":{"end":2751,"file":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","start":2737},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol:14:1:\n   |\n14 | contract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":3846,"file":"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol","start":462},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol:11:1:\n   |\n11 | contract AdminUpgradeabilityProxy is BaseAdminUpgradeabilityProxy, UpgradeabilityProxy {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":1390,"file":"contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol","start":282},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol:11:1:\n   |\n11 | contract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":1226,"file":"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","start":264},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol:12:1:\n   |\n12 | contract InitializableAdminUpgradeabilityProxy is\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":1548,"file":"contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol","start":345},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol:16:1:\n   |\n16 | contract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":2769,"file":"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","start":720},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol:13:1:\n   |\n13 | contract InitializableImmutableAdminUpgradeabilityProxy is\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":1069,"file":"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","start":528},"type":"Warning"}],"sources":{"contracts/dependencies/chainlink/AggregatorInterface.sol":{"ast":{"absolutePath":"contracts/dependencies/chainlink/AggregatorInterface.sol","exportedSymbols":{"AggregatorInterface":[47]},"id":48,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"60:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"AggregatorInterface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":47,"linearizedBaseContracts":[47],"name":"AggregatorInterface","nameLocation":"95:19:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"50d25bcd","id":6,"implemented":false,"kind":"function","modifiers":[],"name":"latestAnswer","nameLocation":"128:12:0","nodeType":"FunctionDefinition","parameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"140:2:0"},"returnParameters":{"id":5,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6,"src":"166:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3,"name":"int256","nodeType":"ElementaryTypeName","src":"166:6:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"165:8:0"},"scope":47,"src":"119:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8205bf6a","id":11,"implemented":false,"kind":"function","modifiers":[],"name":"latestTimestamp","nameLocation":"187:15:0","nodeType":"FunctionDefinition","parameters":{"id":7,"nodeType":"ParameterList","parameters":[],"src":"202:2:0"},"returnParameters":{"id":10,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11,"src":"228:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8,"name":"uint256","nodeType":"ElementaryTypeName","src":"228:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"227:9:0"},"scope":47,"src":"178:59:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"668a0f02","id":16,"implemented":false,"kind":"function","modifiers":[],"name":"latestRound","nameLocation":"250:11:0","nodeType":"FunctionDefinition","parameters":{"id":12,"nodeType":"ParameterList","parameters":[],"src":"261:2:0"},"returnParameters":{"id":15,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16,"src":"287:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13,"name":"uint256","nodeType":"ElementaryTypeName","src":"287:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"286:9:0"},"scope":47,"src":"241:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b5ab58dc","id":23,"implemented":false,"kind":"function","modifiers":[],"name":"getAnswer","nameLocation":"309:9:0","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18,"mutability":"mutable","name":"roundId","nameLocation":"327:7:0","nodeType":"VariableDeclaration","scope":23,"src":"319:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17,"name":"uint256","nodeType":"ElementaryTypeName","src":"319:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"318:17:0"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23,"src":"359:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":20,"name":"int256","nodeType":"ElementaryTypeName","src":"359:6:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"358:8:0"},"scope":47,"src":"300:67:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b633620c","id":30,"implemented":false,"kind":"function","modifiers":[],"name":"getTimestamp","nameLocation":"380:12:0","nodeType":"FunctionDefinition","parameters":{"id":26,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25,"mutability":"mutable","name":"roundId","nameLocation":"401:7:0","nodeType":"VariableDeclaration","scope":30,"src":"393:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24,"name":"uint256","nodeType":"ElementaryTypeName","src":"393:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"392:17:0"},"returnParameters":{"id":29,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30,"src":"433:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"432:9:0"},"scope":47,"src":"371:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"anonymous":false,"id":38,"name":"AnswerUpdated","nameLocation":"452:13:0","nodeType":"EventDefinition","parameters":{"id":37,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32,"indexed":true,"mutability":"mutable","name":"current","nameLocation":"481:7:0","nodeType":"VariableDeclaration","scope":38,"src":"466:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":31,"name":"int256","nodeType":"ElementaryTypeName","src":"466:6:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":34,"indexed":true,"mutability":"mutable","name":"roundId","nameLocation":"506:7:0","nodeType":"VariableDeclaration","scope":38,"src":"490:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33,"name":"uint256","nodeType":"ElementaryTypeName","src":"490:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36,"indexed":false,"mutability":"mutable","name":"updatedAt","nameLocation":"523:9:0","nodeType":"VariableDeclaration","scope":38,"src":"515:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35,"name":"uint256","nodeType":"ElementaryTypeName","src":"515:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"465:68:0"},"src":"446:88:0"},{"anonymous":false,"id":46,"name":"NewRound","nameLocation":"544:8:0","nodeType":"EventDefinition","parameters":{"id":45,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40,"indexed":true,"mutability":"mutable","name":"roundId","nameLocation":"569:7:0","nodeType":"VariableDeclaration","scope":46,"src":"553:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39,"name":"uint256","nodeType":"ElementaryTypeName","src":"553:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42,"indexed":true,"mutability":"mutable","name":"startedBy","nameLocation":"594:9:0","nodeType":"VariableDeclaration","scope":46,"src":"578:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44,"indexed":false,"mutability":"mutable","name":"startedAt","nameLocation":"613:9:0","nodeType":"VariableDeclaration","scope":46,"src":"605:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43,"name":"uint256","nodeType":"ElementaryTypeName","src":"605:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"552:71:0"},"src":"538:86:0"}],"scope":48,"src":"85:541:0","usedErrors":[]}],"src":"60:567:0"},"id":0},"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol":{"ast":{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","exportedSymbols":{"GPv2SafeERC20":[118],"IERC20":[1442]},"id":119,"license":"LGPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":49,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:23:1"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../openzeppelin/contracts/IERC20.sol","id":51,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":119,"sourceUnit":1443,"src":"71:63:1","symbolAliases":[{"foreign":{"id":50,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"79:6:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"GPv2SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":52,"nodeType":"StructuredDocumentation","src":"136:157:1","text":"@title Gnosis Protocol v2 Safe ERC20 Transfer Library\n @author Gnosis Developers\n @dev Gas-efficient version of Openzeppelin's SafeERC20 contract."},"fullyImplemented":true,"id":118,"linearizedBaseContracts":[118],"name":"GPv2SafeERC20","nameLocation":"301:13:1","nodeType":"ContractDefinition","nodes":[{"body":{"id":77,"nodeType":"Block","src":"513:585:1","statements":[{"assignments":[64],"declarations":[{"constant":false,"id":64,"mutability":"mutable","name":"selector_","nameLocation":"526:9:1","nodeType":"VariableDeclaration","scope":77,"src":"519:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":63,"name":"bytes4","nodeType":"ElementaryTypeName","src":"519:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":68,"initialValue":{"expression":{"expression":{"id":65,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56,"src":"538:5:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":66,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1391,"src":"538:14:1","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":67,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"538:23:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"519:42:1"},{"AST":{"nodeType":"YulBlock","src":"629:396:1","statements":[{"nodeType":"YulVariableDeclaration","src":"637:36:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"668:4:1","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"662:5:1"},"nodeType":"YulFunctionCall","src":"662:11:1"},"variables":[{"name":"freeMemoryPointer","nodeType":"YulTypedName","src":"641:17:1","type":""}]},{"expression":{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"687:17:1"},{"name":"selector_","nodeType":"YulIdentifier","src":"706:9:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"680:6:1"},"nodeType":"YulFunctionCall","src":"680:36:1"},"nodeType":"YulExpressionStatement","src":"680:36:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"734:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:1","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"730:3:1"},"nodeType":"YulFunctionCall","src":"730:25:1"},{"arguments":[{"name":"to","nodeType":"YulIdentifier","src":"761:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"765:42:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"757:3:1"},"nodeType":"YulFunctionCall","src":"757:51:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"723:6:1"},"nodeType":"YulFunctionCall","src":"723:86:1"},"nodeType":"YulExpressionStatement","src":"723:86:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"827:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"846:2:1","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"823:3:1"},"nodeType":"YulFunctionCall","src":"823:26:1"},{"name":"value","nodeType":"YulIdentifier","src":"851:5:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"816:6:1"},"nodeType":"YulFunctionCall","src":"816:41:1"},"nodeType":"YulExpressionStatement","src":"816:41:1"},{"body":{"nodeType":"YulBlock","src":"927:92:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"952:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"955:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"958:14:1"},"nodeType":"YulFunctionCall","src":"958:16:1"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"937:14:1"},"nodeType":"YulFunctionCall","src":"937:38:1"},"nodeType":"YulExpressionStatement","src":"937:38:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"991:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"994:14:1"},"nodeType":"YulFunctionCall","src":"994:16:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"984:6:1"},"nodeType":"YulFunctionCall","src":"984:27:1"},"nodeType":"YulExpressionStatement","src":"984:27:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"880:3:1"},"nodeType":"YulFunctionCall","src":"880:5:1"},{"name":"token","nodeType":"YulIdentifier","src":"887:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"894:1:1","type":"","value":"0"},{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"897:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"916:2:1","type":"","value":"68"},{"kind":"number","nodeType":"YulLiteral","src":"920:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"923:1:1","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"875:4:1"},"nodeType":"YulFunctionCall","src":"875:50:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"868:6:1"},"nodeType":"YulFunctionCall","src":"868:58:1"},"nodeType":"YulIf","src":"865:154:1"}]},"evmVersion":"london","externalReferences":[{"declaration":64,"isOffset":false,"isSlot":false,"src":"706:9:1","valueSize":1},{"declaration":58,"isOffset":false,"isSlot":false,"src":"761:2:1","valueSize":1},{"declaration":56,"isOffset":false,"isSlot":false,"src":"887:5:1","valueSize":1},{"declaration":60,"isOffset":false,"isSlot":false,"src":"851:5:1","valueSize":1}],"id":69,"nodeType":"InlineAssembly","src":"620:405:1"},{"expression":{"arguments":[{"arguments":[{"id":72,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56,"src":"1061:5:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":71,"name":"getLastTransferResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117,"src":"1039:21:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$1442_$returns$_t_bool_$","typeString":"function (contract IERC20) view returns (bool)"}},"id":73,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1039:28:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"475076323a206661696c6564207472616e73666572","id":74,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1069:23:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96","typeString":"literal_string \"GPv2: failed transfer\""},"value":"GPv2: failed transfer"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96","typeString":"literal_string \"GPv2: failed transfer\""}],"id":70,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1031:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1031:62:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76,"nodeType":"ExpressionStatement","src":"1031:62:1"}]},"documentation":{"id":53,"nodeType":"StructuredDocumentation","src":"319:119:1","text":"@dev Wrapper around a call to the ERC20 function `transfer` that reverts\n also when the token returns `false`."},"id":78,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"450:12:1","nodeType":"FunctionDefinition","parameters":{"id":61,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56,"mutability":"mutable","name":"token","nameLocation":"470:5:1","nodeType":"VariableDeclaration","scope":78,"src":"463:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":55,"nodeType":"UserDefinedTypeName","pathNode":{"id":54,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"463:6:1"},"referencedDeclaration":1442,"src":"463:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":58,"mutability":"mutable","name":"to","nameLocation":"485:2:1","nodeType":"VariableDeclaration","scope":78,"src":"477:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":57,"name":"address","nodeType":"ElementaryTypeName","src":"477:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":60,"mutability":"mutable","name":"value","nameLocation":"497:5:1","nodeType":"VariableDeclaration","scope":78,"src":"489:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59,"name":"uint256","nodeType":"ElementaryTypeName","src":"489:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:41:1"},"returnParameters":{"id":62,"nodeType":"ParameterList","parameters":[],"src":"513:0:1"},"scope":118,"src":"441:657:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":105,"nodeType":"Block","src":"1318:690:1","statements":[{"assignments":[92],"declarations":[{"constant":false,"id":92,"mutability":"mutable","name":"selector_","nameLocation":"1331:9:1","nodeType":"VariableDeclaration","scope":105,"src":"1324:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":91,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1324:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":96,"initialValue":{"expression":{"expression":{"id":93,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":82,"src":"1343:5:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":94,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1423,"src":"1343:18:1","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":95,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1343:27:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"1324:46:1"},{"AST":{"nodeType":"YulBlock","src":"1438:493:1","statements":[{"nodeType":"YulVariableDeclaration","src":"1446:36:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1477:4:1","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1471:5:1"},"nodeType":"YulFunctionCall","src":"1471:11:1"},"variables":[{"name":"freeMemoryPointer","nodeType":"YulTypedName","src":"1450:17:1","type":""}]},{"expression":{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1496:17:1"},{"name":"selector_","nodeType":"YulIdentifier","src":"1515:9:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1489:6:1"},"nodeType":"YulFunctionCall","src":"1489:36:1"},"nodeType":"YulExpressionStatement","src":"1489:36:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1543:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"1562:1:1","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1539:3:1"},"nodeType":"YulFunctionCall","src":"1539:25:1"},{"arguments":[{"name":"from","nodeType":"YulIdentifier","src":"1570:4:1"},{"kind":"number","nodeType":"YulLiteral","src":"1576:42:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1566:3:1"},"nodeType":"YulFunctionCall","src":"1566:53:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1532:6:1"},"nodeType":"YulFunctionCall","src":"1532:88:1"},"nodeType":"YulExpressionStatement","src":"1532:88:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1638:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"1657:2:1","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1634:3:1"},"nodeType":"YulFunctionCall","src":"1634:26:1"},{"arguments":[{"name":"to","nodeType":"YulIdentifier","src":"1666:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"1670:42:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1662:3:1"},"nodeType":"YulFunctionCall","src":"1662:51:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1627:6:1"},"nodeType":"YulFunctionCall","src":"1627:87:1"},"nodeType":"YulExpressionStatement","src":"1627:87:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1732:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"1751:2:1","type":"","value":"68"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1728:3:1"},"nodeType":"YulFunctionCall","src":"1728:26:1"},{"name":"value","nodeType":"YulIdentifier","src":"1756:5:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1721:6:1"},"nodeType":"YulFunctionCall","src":"1721:41:1"},"nodeType":"YulExpressionStatement","src":"1721:41:1"},{"body":{"nodeType":"YulBlock","src":"1833:92:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1858:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1861:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1864:14:1"},"nodeType":"YulFunctionCall","src":"1864:16:1"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"1843:14:1"},"nodeType":"YulFunctionCall","src":"1843:38:1"},"nodeType":"YulExpressionStatement","src":"1843:38:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1897:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1900:14:1"},"nodeType":"YulFunctionCall","src":"1900:16:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1890:6:1"},"nodeType":"YulFunctionCall","src":"1890:27:1"},"nodeType":"YulExpressionStatement","src":"1890:27:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1785:3:1"},"nodeType":"YulFunctionCall","src":"1785:5:1"},{"name":"token","nodeType":"YulIdentifier","src":"1792:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"1799:1:1","type":"","value":"0"},{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1802:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"1821:3:1","type":"","value":"100"},{"kind":"number","nodeType":"YulLiteral","src":"1826:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1829:1:1","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"1780:4:1"},"nodeType":"YulFunctionCall","src":"1780:51:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1773:6:1"},"nodeType":"YulFunctionCall","src":"1773:59:1"},"nodeType":"YulIf","src":"1770:155:1"}]},"evmVersion":"london","externalReferences":[{"declaration":84,"isOffset":false,"isSlot":false,"src":"1570:4:1","valueSize":1},{"declaration":92,"isOffset":false,"isSlot":false,"src":"1515:9:1","valueSize":1},{"declaration":86,"isOffset":false,"isSlot":false,"src":"1666:2:1","valueSize":1},{"declaration":82,"isOffset":false,"isSlot":false,"src":"1792:5:1","valueSize":1},{"declaration":88,"isOffset":false,"isSlot":false,"src":"1756:5:1","valueSize":1}],"id":97,"nodeType":"InlineAssembly","src":"1429:502:1"},{"expression":{"arguments":[{"arguments":[{"id":100,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":82,"src":"1967:5:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":99,"name":"getLastTransferResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117,"src":"1945:21:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$1442_$returns$_t_bool_$","typeString":"function (contract IERC20) view returns (bool)"}},"id":101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1945:28:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","id":102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1975:27:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e","typeString":"literal_string \"GPv2: failed transferFrom\""},"value":"GPv2: failed transferFrom"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e","typeString":"literal_string \"GPv2: failed transferFrom\""}],"id":98,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1937:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1937:66:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":104,"nodeType":"ExpressionStatement","src":"1937:66:1"}]},"documentation":{"id":79,"nodeType":"StructuredDocumentation","src":"1102:123:1","text":"@dev Wrapper around a call to the ERC20 function `transferFrom` that\n reverts also when the token returns `false`."},"id":106,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1237:16:1","nodeType":"FunctionDefinition","parameters":{"id":89,"nodeType":"ParameterList","parameters":[{"constant":false,"id":82,"mutability":"mutable","name":"token","nameLocation":"1261:5:1","nodeType":"VariableDeclaration","scope":106,"src":"1254:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":81,"nodeType":"UserDefinedTypeName","pathNode":{"id":80,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1254:6:1"},"referencedDeclaration":1442,"src":"1254:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":84,"mutability":"mutable","name":"from","nameLocation":"1276:4:1","nodeType":"VariableDeclaration","scope":106,"src":"1268:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":83,"name":"address","nodeType":"ElementaryTypeName","src":"1268:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":86,"mutability":"mutable","name":"to","nameLocation":"1290:2:1","nodeType":"VariableDeclaration","scope":106,"src":"1282:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85,"name":"address","nodeType":"ElementaryTypeName","src":"1282:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":88,"mutability":"mutable","name":"value","nameLocation":"1302:5:1","nodeType":"VariableDeclaration","scope":106,"src":"1294:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87,"name":"uint256","nodeType":"ElementaryTypeName","src":"1294:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1253:55:1"},"returnParameters":{"id":90,"nodeType":"ParameterList","parameters":[],"src":"1318:0:1"},"scope":118,"src":"1228:780:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":116,"nodeType":"Block","src":"2279:2443:1","statements":[{"AST":{"nodeType":"YulBlock","src":"2741:1977:1","statements":[{"body":{"nodeType":"YulBlock","src":"3367:163:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3384:4:1","type":"","value":"0x00"},{"hexValue":"08c379a0","kind":"string","nodeType":"YulLiteral","src":"3390:18:1","type":""}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3377:6:1"},"nodeType":"YulFunctionCall","src":"3377:32:1"},"nodeType":"YulExpressionStatement","src":"3377:32:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3425:4:1","type":"","value":"0x04"},{"kind":"number","nodeType":"YulLiteral","src":"3431:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3418:6:1"},"nodeType":"YulFunctionCall","src":"3418:18:1"},"nodeType":"YulExpressionStatement","src":"3418:18:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3452:4:1","type":"","value":"0x24"},{"name":"length","nodeType":"YulIdentifier","src":"3458:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3445:6:1"},"nodeType":"YulFunctionCall","src":"3445:20:1"},"nodeType":"YulExpressionStatement","src":"3445:20:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3481:4:1","type":"","value":"0x44"},{"name":"message","nodeType":"YulIdentifier","src":"3487:7:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3474:6:1"},"nodeType":"YulFunctionCall","src":"3474:21:1"},"nodeType":"YulExpressionStatement","src":"3474:21:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3511:4:1","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"3517:4:1","type":"","value":"0x64"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3504:6:1"},"nodeType":"YulFunctionCall","src":"3504:18:1"},"nodeType":"YulExpressionStatement","src":"3504:18:1"}]},"name":"revertWithMessage","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"3350:6:1","type":""},{"name":"message","nodeType":"YulTypedName","src":"3358:7:1","type":""}],"src":"3323:207:1"},{"cases":[{"body":{"nodeType":"YulBlock","src":"3628:434:1","statements":[{"body":{"nodeType":"YulBlock","src":"3965:67:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3995:2:1","type":"","value":"20"},{"hexValue":"475076323a206e6f74206120636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"3999:22:1","type":"","value":"GPv2: not a contract"}],"functionName":{"name":"revertWithMessage","nodeType":"YulIdentifier","src":"3977:17:1"},"nodeType":"YulFunctionCall","src":"3977:45:1"},"nodeType":"YulExpressionStatement","src":"3977:45:1"}]},"condition":{"arguments":[{"arguments":[{"name":"token","nodeType":"YulIdentifier","src":"3957:5:1"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"3945:11:1"},"nodeType":"YulFunctionCall","src":"3945:18:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3938:6:1"},"nodeType":"YulFunctionCall","src":"3938:26:1"},"nodeType":"YulIf","src":"3935:97:1"},{"nodeType":"YulAssignment","src":"4042:12:1","value":{"kind":"number","nodeType":"YulLiteral","src":"4053:1:1","type":"","value":"1"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"4042:7:1"}]}]},"nodeType":"YulCase","src":"3621:441:1","value":{"kind":"number","nodeType":"YulLiteral","src":"3626:1:1","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"4143:480:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4168:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4171:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"4174:14:1"},"nodeType":"YulFunctionCall","src":"4174:16:1"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"4153:14:1"},"nodeType":"YulFunctionCall","src":"4153:38:1"},"nodeType":"YulExpressionStatement","src":"4153:38:1"},{"nodeType":"YulAssignment","src":"4580:35:1","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4611:1:1","type":"","value":"0"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4605:5:1"},"nodeType":"YulFunctionCall","src":"4605:8:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4598:6:1"},"nodeType":"YulFunctionCall","src":"4598:16:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4591:6:1"},"nodeType":"YulFunctionCall","src":"4591:24:1"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"4580:7:1"}]}]},"nodeType":"YulCase","src":"4135:488:1","value":{"kind":"number","nodeType":"YulLiteral","src":"4140:2:1","type":"","value":"32"}},{"body":{"nodeType":"YulBlock","src":"4638:74:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4666:2:1","type":"","value":"31"},{"hexValue":"475076323a206d616c666f726d6564207472616e7366657220726573756c74","kind":"string","nodeType":"YulLiteral","src":"4670:33:1","type":"","value":"GPv2: malformed transfer result"}],"functionName":{"name":"revertWithMessage","nodeType":"YulIdentifier","src":"4648:17:1"},"nodeType":"YulFunctionCall","src":"4648:56:1"},"nodeType":"YulExpressionStatement","src":"4648:56:1"}]},"nodeType":"YulCase","src":"4630:82:1","value":"default"}],"expression":{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"3545:14:1"},"nodeType":"YulFunctionCall","src":"3545:16:1"},"nodeType":"YulSwitch","src":"3538:1174:1"}]},"evmVersion":"london","externalReferences":[{"declaration":113,"isOffset":false,"isSlot":false,"src":"4042:7:1","valueSize":1},{"declaration":113,"isOffset":false,"isSlot":false,"src":"4580:7:1","valueSize":1},{"declaration":110,"isOffset":false,"isSlot":false,"src":"3957:5:1","valueSize":1}],"id":115,"nodeType":"InlineAssembly","src":"2732:1986:1"}]},"documentation":{"id":107,"nodeType":"StructuredDocumentation","src":"2012:183:1","text":"@dev Verifies that the last return was a successful `transfer*` call.\n This is done by checking that the return data is either empty, or\n is a valid ABI encoded boolean."},"id":117,"implemented":true,"kind":"function","modifiers":[],"name":"getLastTransferResult","nameLocation":"2207:21:1","nodeType":"FunctionDefinition","parameters":{"id":111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110,"mutability":"mutable","name":"token","nameLocation":"2236:5:1","nodeType":"VariableDeclaration","scope":117,"src":"2229:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":109,"nodeType":"UserDefinedTypeName","pathNode":{"id":108,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"2229:6:1"},"referencedDeclaration":1442,"src":"2229:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2228:14:1"},"returnParameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"mutability":"mutable","name":"success","nameLocation":"2270:7:1","nodeType":"VariableDeclaration","scope":117,"src":"2265:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":112,"name":"bool","nodeType":"ElementaryTypeName","src":"2265:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2264:14:1"},"scope":118,"src":"2198:2524:1","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":119,"src":"293:4431:1","usedErrors":[]}],"src":"46:4679:1"},"id":1},"contracts/dependencies/openzeppelin/contracts/AccessControl.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/AccessControl.sol","exportedSymbols":{"AccessControl":[425],"Context":[748],"ERC165":[772],"IAccessControl":[1352],"IERC165":[1364],"Strings":[2513]},"id":426,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":120,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:2"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol","file":"./IAccessControl.sol","id":121,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":426,"sourceUnit":1353,"src":"58:30:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Context.sol","file":"./Context.sol","id":122,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":426,"sourceUnit":749,"src":"89:23:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Strings.sol","file":"./Strings.sol","id":123,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":426,"sourceUnit":2514,"src":"113:23:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/ERC165.sol","file":"./ERC165.sol","id":124,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":426,"sourceUnit":773,"src":"137:22:2","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":126,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"1731:7:2"},"id":127,"nodeType":"InheritanceSpecifier","src":"1731:7:2"},{"baseName":{"id":128,"name":"IAccessControl","nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"1740:14:2"},"id":129,"nodeType":"InheritanceSpecifier","src":"1740:14:2"},{"baseName":{"id":130,"name":"ERC165","nodeType":"IdentifierPath","referencedDeclaration":772,"src":"1756:6:2"},"id":131,"nodeType":"InheritanceSpecifier","src":"1756:6:2"}],"canonicalName":"AccessControl","contractDependencies":[],"contractKind":"contract","documentation":{"id":125,"nodeType":"StructuredDocumentation","src":"161:1534:2","text":" @dev Contract module that allows children to implement role-based access\n control mechanisms. This is a lightweight version that doesn't allow enumerating role\n members except through off-chain means by accessing the contract event logs. Some\n applications may benefit from on-chain enumerability, for those cases see\n {AccessControlEnumerable}.\n Roles are referred to by their `bytes32` identifier. These should be exposed\n in the external API and be unique. The best way to achieve this is by\n using `public constant` hash digests:\n ```\n bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n ```\n Roles can be used to represent a set of permissions. To restrict access to a\n function call, use {hasRole}:\n ```\n function foo() public {\n     require(hasRole(MY_ROLE, msg.sender));\n     ...\n }\n ```\n Roles can be granted and revoked dynamically via the {grantRole} and\n {revokeRole} functions. Each role has an associated admin role, and only\n accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n that only accounts with this role will be able to grant or revoke other\n roles. More complex role relationships can be created by using\n {_setRoleAdmin}.\n WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n grant and revoke this role. Extra precautions should be taken to secure\n accounts that have been granted it."},"fullyImplemented":true,"id":425,"linearizedBaseContracts":[425,772,1364,1352,748],"name":"AccessControl","nameLocation":"1714:13:2","nodeType":"ContractDefinition","nodes":[{"canonicalName":"AccessControl.RoleData","id":138,"members":[{"constant":false,"id":135,"mutability":"mutable","name":"members","nameLocation":"1814:7:2","nodeType":"VariableDeclaration","scope":138,"src":"1789:32:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":134,"keyType":{"id":132,"name":"address","nodeType":"ElementaryTypeName","src":"1797:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1789:24:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":133,"name":"bool","nodeType":"ElementaryTypeName","src":"1808:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":137,"mutability":"mutable","name":"adminRole","nameLocation":"1835:9:2","nodeType":"VariableDeclaration","scope":138,"src":"1827:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":136,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1827:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"RoleData","nameLocation":"1774:8:2","nodeType":"StructDefinition","scope":425,"src":"1767:82:2","visibility":"public"},{"constant":false,"id":143,"mutability":"mutable","name":"_roles","nameLocation":"1890:6:2","nodeType":"VariableDeclaration","scope":425,"src":"1853:43:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"typeName":{"id":142,"keyType":{"id":139,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1861:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1853:28:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"valueType":{"id":141,"nodeType":"UserDefinedTypeName","pathNode":{"id":140,"name":"RoleData","nodeType":"IdentifierPath","referencedDeclaration":138,"src":"1872:8:2"},"referencedDeclaration":138,"src":"1872:8:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage_ptr","typeString":"struct AccessControl.RoleData"}}},"visibility":"private"},{"constant":true,"functionSelector":"a217fddf","id":146,"mutability":"constant","name":"DEFAULT_ADMIN_ROLE","nameLocation":"1925:18:2","nodeType":"VariableDeclaration","scope":425,"src":"1901:49:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":144,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1901:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"30783030","id":145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1946:4:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"public"},{"body":{"id":158,"nodeType":"Block","src":"2347:48:2","statements":[{"expression":{"arguments":[{"id":152,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":149,"src":"2364:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":153,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"2370:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2370:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":151,"name":"_checkRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":243,"src":"2353:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) view"}},"id":155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2353:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":156,"nodeType":"ExpressionStatement","src":"2353:30:2"},{"id":157,"nodeType":"PlaceholderStatement","src":"2389:1:2"}]},"documentation":{"id":147,"nodeType":"StructuredDocumentation","src":"1955:357:2","text":" @dev Modifier that checks that an account has a specific role. Reverts\n with a standardized message including the required role.\n The format of the revert reason is given by the following regular expression:\n  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n _Available since v4.1._"},"id":159,"name":"onlyRole","nameLocation":"2324:8:2","nodeType":"ModifierDefinition","parameters":{"id":150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":149,"mutability":"mutable","name":"role","nameLocation":"2341:4:2","nodeType":"VariableDeclaration","scope":159,"src":"2333:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":148,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2333:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2332:14:2"},"src":"2315:80:2","virtual":false,"visibility":"internal"},{"baseFunctions":[771],"body":{"id":180,"nodeType":"Block","src":"2545:105:2","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":168,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"2558:11:2","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":170,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"2578:14:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$1352_$","typeString":"type(contract IAccessControl)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$1352_$","typeString":"type(contract IAccessControl)"}],"id":169,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2573:4:2","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2573:20:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IAccessControl_$1352","typeString":"type(contract IAccessControl)"}},"id":172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"2573:32:2","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2558:47:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":176,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"2633:11:2","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":174,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2609:5:2","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControl_$425_$","typeString":"type(contract super AccessControl)"}},"id":175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":771,"src":"2609:23:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2609:36:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2558:87:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":167,"id":179,"nodeType":"Return","src":"2551:94:2"}]},"documentation":{"id":160,"nodeType":"StructuredDocumentation","src":"2399:52:2","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":181,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2463:17:2","nodeType":"FunctionDefinition","overrides":{"id":164,"nodeType":"OverrideSpecifier","overrides":[],"src":"2521:8:2"},"parameters":{"id":163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":162,"mutability":"mutable","name":"interfaceId","nameLocation":"2488:11:2","nodeType":"VariableDeclaration","scope":181,"src":"2481:18:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":161,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2481:6:2","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2480:20:2"},"returnParameters":{"id":167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":181,"src":"2539:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":165,"name":"bool","nodeType":"ElementaryTypeName","src":"2539:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2538:6:2"},"scope":425,"src":"2454:196:2","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1319],"body":{"id":199,"nodeType":"Block","src":"2813:47:2","statements":[{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":192,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"2826:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":194,"indexExpression":{"id":193,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"2833:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2826:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":135,"src":"2826:20:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":197,"indexExpression":{"id":196,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"2847:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2826:29:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":191,"id":198,"nodeType":"Return","src":"2819:36:2"}]},"documentation":{"id":182,"nodeType":"StructuredDocumentation","src":"2654:72:2","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":200,"implemented":true,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"2738:7:2","nodeType":"FunctionDefinition","overrides":{"id":188,"nodeType":"OverrideSpecifier","overrides":[],"src":"2789:8:2"},"parameters":{"id":187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":184,"mutability":"mutable","name":"role","nameLocation":"2754:4:2","nodeType":"VariableDeclaration","scope":200,"src":"2746:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":183,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2746:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":186,"mutability":"mutable","name":"account","nameLocation":"2768:7:2","nodeType":"VariableDeclaration","scope":200,"src":"2760:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":185,"name":"address","nodeType":"ElementaryTypeName","src":"2760:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2745:31:2"},"returnParameters":{"id":191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":200,"src":"2807:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":189,"name":"bool","nodeType":"ElementaryTypeName","src":"2807:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2806:6:2"},"scope":425,"src":"2729:131:2","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":242,"nodeType":"Block","src":"3190:313:2","statements":[{"condition":{"id":212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3200:23:2","subExpression":{"arguments":[{"id":209,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":203,"src":"3209:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":210,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":205,"src":"3215:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":208,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"3201:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3201:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":241,"nodeType":"IfStatement","src":"3196:303:2","trueBody":{"id":240,"nodeType":"Block","src":"3225:274:2","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"416363657373436f6e74726f6c3a206163636f756e7420","id":218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3297:25:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874","typeString":"literal_string \"AccessControl: account \""},"value":"AccessControl: account "},{"arguments":[{"arguments":[{"id":223,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":205,"src":"3364:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3356:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":221,"name":"uint160","nodeType":"ElementaryTypeName","src":"3356:7:2","typeDescriptions":{}}},"id":224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3356:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},{"hexValue":"3230","id":225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3374:2:2","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"},{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"}],"expression":{"id":219,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2513,"src":"3336:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$2513_$","typeString":"type(library Strings)"}},"id":220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toHexString","nodeType":"MemberAccess","referencedDeclaration":2512,"src":"3336:19:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3336:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"206973206d697373696e6720726f6c6520","id":227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3391:19:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69","typeString":"literal_string \" is missing role \""},"value":" is missing role "},{"arguments":[{"arguments":[{"id":232,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":203,"src":"3452:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3444:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":230,"name":"uint256","nodeType":"ElementaryTypeName","src":"3444:7:2","typeDescriptions":{}}},"id":233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3444:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"3332","id":234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3459:2:2","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"id":228,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2513,"src":"3424:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$2513_$","typeString":"type(library Strings)"}},"id":229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toHexString","nodeType":"MemberAccess","referencedDeclaration":2512,"src":"3424:19:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3424:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874","typeString":"literal_string \"AccessControl: account \""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69","typeString":"literal_string \" is missing role \""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":216,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3267:3:2","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"3267:16:2","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3267:207:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3249:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":214,"name":"string","nodeType":"ElementaryTypeName","src":"3249:6:2","typeDescriptions":{}}},"id":237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3249:235:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":213,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3233:6:2","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3233:259:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":239,"nodeType":"ExpressionStatement","src":"3233:259:2"}]}}]},"documentation":{"id":201,"nodeType":"StructuredDocumentation","src":"2864:258:2","text":" @dev Revert with a standard message if `account` is missing `role`.\n The format of the revert reason is given by the following regular expression:\n  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/"},"id":243,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRole","nameLocation":"3134:10:2","nodeType":"FunctionDefinition","parameters":{"id":206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":203,"mutability":"mutable","name":"role","nameLocation":"3153:4:2","nodeType":"VariableDeclaration","scope":243,"src":"3145:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":202,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3145:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":205,"mutability":"mutable","name":"account","nameLocation":"3167:7:2","nodeType":"VariableDeclaration","scope":243,"src":"3159:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":204,"name":"address","nodeType":"ElementaryTypeName","src":"3159:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3144:31:2"},"returnParameters":{"id":207,"nodeType":"ParameterList","parameters":[],"src":"3190:0:2"},"scope":425,"src":"3125:378:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[1327],"body":{"id":257,"nodeType":"Block","src":"3745:40:2","statements":[{"expression":{"expression":{"baseExpression":{"id":252,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"3758:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":254,"indexExpression":{"id":253,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":246,"src":"3765:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3758:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":137,"src":"3758:22:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":251,"id":256,"nodeType":"Return","src":"3751:29:2"}]},"documentation":{"id":244,"nodeType":"StructuredDocumentation","src":"3507:160:2","text":" @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {_setRoleAdmin}."},"functionSelector":"248a9ca3","id":258,"implemented":true,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"3679:12:2","nodeType":"FunctionDefinition","overrides":{"id":248,"nodeType":"OverrideSpecifier","overrides":[],"src":"3718:8:2"},"parameters":{"id":247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":246,"mutability":"mutable","name":"role","nameLocation":"3700:4:2","nodeType":"VariableDeclaration","scope":258,"src":"3692:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3692:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3691:14:2"},"returnParameters":{"id":251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":250,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":258,"src":"3736:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":249,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3736:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3735:9:2"},"scope":425,"src":"3670:115:2","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1335],"body":{"id":277,"nodeType":"Block","src":"4128:36:2","statements":[{"expression":{"arguments":[{"id":273,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"4145:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":274,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"4151:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":272,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"4134:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4134:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":276,"nodeType":"ExpressionStatement","src":"4134:25:2"}]},"documentation":{"id":259,"nodeType":"StructuredDocumentation","src":"3789:221:2","text":" @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"2f2ff15d","id":278,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":268,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"4121:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":267,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"4108:12:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4108:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":270,"kind":"modifierInvocation","modifierName":{"id":266,"name":"onlyRole","nodeType":"IdentifierPath","referencedDeclaration":159,"src":"4099:8:2"},"nodeType":"ModifierInvocation","src":"4099:28:2"}],"name":"grantRole","nameLocation":"4022:9:2","nodeType":"FunctionDefinition","overrides":{"id":265,"nodeType":"OverrideSpecifier","overrides":[],"src":"4090:8:2"},"parameters":{"id":264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":261,"mutability":"mutable","name":"role","nameLocation":"4045:4:2","nodeType":"VariableDeclaration","scope":278,"src":"4037:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":260,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4037:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":263,"mutability":"mutable","name":"account","nameLocation":"4063:7:2","nodeType":"VariableDeclaration","scope":278,"src":"4055:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":262,"name":"address","nodeType":"ElementaryTypeName","src":"4055:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4031:43:2"},"returnParameters":{"id":271,"nodeType":"ParameterList","parameters":[],"src":"4128:0:2"},"scope":425,"src":"4013:151:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1343],"body":{"id":297,"nodeType":"Block","src":"4494:37:2","statements":[{"expression":{"arguments":[{"id":293,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":281,"src":"4512:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":294,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":283,"src":"4518:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":292,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":424,"src":"4500:11:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4500:26:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":296,"nodeType":"ExpressionStatement","src":"4500:26:2"}]},"documentation":{"id":279,"nodeType":"StructuredDocumentation","src":"4168:207:2","text":" @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"d547741f","id":298,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":288,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":281,"src":"4487:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":287,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"4474:12:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4474:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":290,"kind":"modifierInvocation","modifierName":{"id":286,"name":"onlyRole","nodeType":"IdentifierPath","referencedDeclaration":159,"src":"4465:8:2"},"nodeType":"ModifierInvocation","src":"4465:28:2"}],"name":"revokeRole","nameLocation":"4387:10:2","nodeType":"FunctionDefinition","overrides":{"id":285,"nodeType":"OverrideSpecifier","overrides":[],"src":"4456:8:2"},"parameters":{"id":284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":281,"mutability":"mutable","name":"role","nameLocation":"4411:4:2","nodeType":"VariableDeclaration","scope":298,"src":"4403:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":280,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4403:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":283,"mutability":"mutable","name":"account","nameLocation":"4429:7:2","nodeType":"VariableDeclaration","scope":298,"src":"4421:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":282,"name":"address","nodeType":"ElementaryTypeName","src":"4421:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4397:43:2"},"returnParameters":{"id":291,"nodeType":"ParameterList","parameters":[],"src":"4494:0:2"},"scope":425,"src":"4378:153:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1351],"body":{"id":320,"nodeType":"Block","src":"5069:127:2","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":308,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":303,"src":"5083:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":309,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5094:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5094:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"5083:23:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66","id":312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5108:49:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b","typeString":"literal_string \"AccessControl: can only renounce roles for self\""},"value":"AccessControl: can only renounce roles for self"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b","typeString":"literal_string \"AccessControl: can only renounce roles for self\""}],"id":307,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5075:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5075:83:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":314,"nodeType":"ExpressionStatement","src":"5075:83:2"},{"expression":{"arguments":[{"id":316,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":301,"src":"5177:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":317,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":303,"src":"5183:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":315,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":424,"src":"5165:11:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5165:26:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":319,"nodeType":"ExpressionStatement","src":"5165:26:2"}]},"documentation":{"id":299,"nodeType":"StructuredDocumentation","src":"4535:454:2","text":" @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been granted `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `account`."},"functionSelector":"36568abe","id":321,"implemented":true,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"5001:12:2","nodeType":"FunctionDefinition","overrides":{"id":305,"nodeType":"OverrideSpecifier","overrides":[],"src":"5060:8:2"},"parameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":301,"mutability":"mutable","name":"role","nameLocation":"5022:4:2","nodeType":"VariableDeclaration","scope":321,"src":"5014:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":300,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5014:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":303,"mutability":"mutable","name":"account","nameLocation":"5036:7:2","nodeType":"VariableDeclaration","scope":321,"src":"5028:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":302,"name":"address","nodeType":"ElementaryTypeName","src":"5028:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5013:31:2"},"returnParameters":{"id":306,"nodeType":"ParameterList","parameters":[],"src":"5069:0:2"},"scope":425,"src":"4992:204:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":334,"nodeType":"Block","src":"5795:36:2","statements":[{"expression":{"arguments":[{"id":330,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":324,"src":"5812:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":331,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"5818:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":329,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"5801:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5801:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":333,"nodeType":"ExpressionStatement","src":"5801:25:2"}]},"documentation":{"id":322,"nodeType":"StructuredDocumentation","src":"5200:524:2","text":" @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event. Note that unlike {grantRole}, this function doesn't perform any\n checks on the calling account.\n [WARNING]\n ====\n This function should only be called from the constructor when setting\n up the initial roles for the system.\n Using this function in any other way is effectively circumventing the admin\n system imposed by {AccessControl}.\n ===="},"id":335,"implemented":true,"kind":"function","modifiers":[],"name":"_setupRole","nameLocation":"5736:10:2","nodeType":"FunctionDefinition","parameters":{"id":327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":324,"mutability":"mutable","name":"role","nameLocation":"5755:4:2","nodeType":"VariableDeclaration","scope":335,"src":"5747:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":323,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5747:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":326,"mutability":"mutable","name":"account","nameLocation":"5769:7:2","nodeType":"VariableDeclaration","scope":335,"src":"5761:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":325,"name":"address","nodeType":"ElementaryTypeName","src":"5761:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5746:31:2"},"returnParameters":{"id":328,"nodeType":"ParameterList","parameters":[],"src":"5795:0:2"},"scope":425,"src":"5727:104:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":362,"nodeType":"Block","src":"6017:160:2","statements":[{"assignments":[344],"declarations":[{"constant":false,"id":344,"mutability":"mutable","name":"previousAdminRole","nameLocation":"6031:17:2","nodeType":"VariableDeclaration","scope":362,"src":"6023:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":343,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6023:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":348,"initialValue":{"arguments":[{"id":346,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"6064:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":345,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"6051:12:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6051:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6023:46:2"},{"expression":{"id":354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":349,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"6075:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":351,"indexExpression":{"id":350,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"6082:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6075:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":137,"src":"6075:22:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":353,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":340,"src":"6100:9:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6075:34:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":355,"nodeType":"ExpressionStatement","src":"6075:34:2"},{"eventCall":{"arguments":[{"id":357,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"6137:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":358,"name":"previousAdminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":344,"src":"6143:17:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":359,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":340,"src":"6162:9:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":356,"name":"RoleAdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1291,"src":"6120:16:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32,bytes32)"}},"id":360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6120:52:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":361,"nodeType":"EmitStatement","src":"6115:57:2"}]},"documentation":{"id":336,"nodeType":"StructuredDocumentation","src":"5835:106:2","text":" @dev Sets `adminRole` as ``role``'s admin role.\n Emits a {RoleAdminChanged} event."},"id":363,"implemented":true,"kind":"function","modifiers":[],"name":"_setRoleAdmin","nameLocation":"5953:13:2","nodeType":"FunctionDefinition","parameters":{"id":341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":338,"mutability":"mutable","name":"role","nameLocation":"5975:4:2","nodeType":"VariableDeclaration","scope":363,"src":"5967:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5967:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"adminRole","nameLocation":"5989:9:2","nodeType":"VariableDeclaration","scope":363,"src":"5981:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":339,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5981:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5966:33:2"},"returnParameters":{"id":342,"nodeType":"ParameterList","parameters":[],"src":"6017:0:2"},"scope":425,"src":"5944:233:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":393,"nodeType":"Block","src":"6240:143:2","statements":[{"condition":{"id":374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6250:23:2","subExpression":{"arguments":[{"id":371,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":365,"src":"6259:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":372,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":367,"src":"6265:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":370,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"6251:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6251:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":392,"nodeType":"IfStatement","src":"6246:133:2","trueBody":{"id":391,"nodeType":"Block","src":"6275:104:2","statements":[{"expression":{"id":382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":375,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"6283:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":377,"indexExpression":{"id":376,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":365,"src":"6290:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6283:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":135,"src":"6283:20:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":380,"indexExpression":{"id":379,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":367,"src":"6304:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6283:29:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6315:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6283:36:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":383,"nodeType":"ExpressionStatement","src":"6283:36:2"},{"eventCall":{"arguments":[{"id":385,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":365,"src":"6344:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":386,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":367,"src":"6350:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":387,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"6359:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6359:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":384,"name":"RoleGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1300,"src":"6332:11:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6332:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":390,"nodeType":"EmitStatement","src":"6327:45:2"}]}}]},"id":394,"implemented":true,"kind":"function","modifiers":[],"name":"_grantRole","nameLocation":"6190:10:2","nodeType":"FunctionDefinition","parameters":{"id":368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":365,"mutability":"mutable","name":"role","nameLocation":"6209:4:2","nodeType":"VariableDeclaration","scope":394,"src":"6201:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":364,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6201:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":367,"mutability":"mutable","name":"account","nameLocation":"6223:7:2","nodeType":"VariableDeclaration","scope":394,"src":"6215:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":366,"name":"address","nodeType":"ElementaryTypeName","src":"6215:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6200:31:2"},"returnParameters":{"id":369,"nodeType":"ParameterList","parameters":[],"src":"6240:0:2"},"scope":425,"src":"6181:202:2","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":423,"nodeType":"Block","src":"6447:143:2","statements":[{"condition":{"arguments":[{"id":402,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":396,"src":"6465:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":403,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6471:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":401,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"6457:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6457:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":422,"nodeType":"IfStatement","src":"6453:133:2","trueBody":{"id":421,"nodeType":"Block","src":"6481:105:2","statements":[{"expression":{"id":412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":405,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"6489:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":407,"indexExpression":{"id":406,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":396,"src":"6496:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6489:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":135,"src":"6489:20:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":410,"indexExpression":{"id":409,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6510:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6489:29:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6521:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6489:37:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":413,"nodeType":"ExpressionStatement","src":"6489:37:2"},{"eventCall":{"arguments":[{"id":415,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":396,"src":"6551:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":416,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6557:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":417,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"6566:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6566:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":414,"name":"RoleRevoked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1309,"src":"6539:11:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6539:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":420,"nodeType":"EmitStatement","src":"6534:45:2"}]}}]},"id":424,"implemented":true,"kind":"function","modifiers":[],"name":"_revokeRole","nameLocation":"6396:11:2","nodeType":"FunctionDefinition","parameters":{"id":399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":396,"mutability":"mutable","name":"role","nameLocation":"6416:4:2","nodeType":"VariableDeclaration","scope":424,"src":"6408:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":395,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6408:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":398,"mutability":"mutable","name":"account","nameLocation":"6430:7:2","nodeType":"VariableDeclaration","scope":424,"src":"6422:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":397,"name":"address","nodeType":"ElementaryTypeName","src":"6422:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6407:31:2"},"returnParameters":{"id":400,"nodeType":"ParameterList","parameters":[],"src":"6447:0:2"},"scope":425,"src":"6387:203:2","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":426,"src":"1696:4896:2","usedErrors":[]}],"src":"33:6560:2"},"id":2},"contracts/dependencies/openzeppelin/contracts/Address.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Address.sol","exportedSymbols":{"Address":[722]},"id":723,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":427,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"86:23:3"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":428,"nodeType":"StructuredDocumentation","src":"111:67:3","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":722,"linearizedBaseContracts":[722],"name":"Address","nameLocation":"187:7:3","nodeType":"ContractDefinition","nodes":[{"body":{"id":444,"nodeType":"Block","src":"801:275:3","statements":[{"assignments":[437],"declarations":[{"constant":false,"id":437,"mutability":"mutable","name":"size","nameLocation":"990:4:3","nodeType":"VariableDeclaration","scope":444,"src":"982:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":436,"name":"uint256","nodeType":"ElementaryTypeName","src":"982:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":438,"nodeType":"VariableDeclarationStatement","src":"982:12:3"},{"AST":{"nodeType":"YulBlock","src":"1009:42:3","statements":[{"nodeType":"YulAssignment","src":"1017:28:3","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"1037:7:3"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"1025:11:3"},"nodeType":"YulFunctionCall","src":"1025:20:3"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1017:4:3"}]}]},"evmVersion":"london","externalReferences":[{"declaration":431,"isOffset":false,"isSlot":false,"src":"1037:7:3","valueSize":1},{"declaration":437,"isOffset":false,"isSlot":false,"src":"1017:4:3","valueSize":1}],"id":439,"nodeType":"InlineAssembly","src":"1000:51:3"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":440,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":437,"src":"1063:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1070:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1063:8:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":435,"id":443,"nodeType":"Return","src":"1056:15:3"}]},"documentation":{"id":429,"nodeType":"StructuredDocumentation","src":"199:533:3","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ===="},"id":445,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"744:10:3","nodeType":"FunctionDefinition","parameters":{"id":432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":431,"mutability":"mutable","name":"account","nameLocation":"763:7:3","nodeType":"VariableDeclaration","scope":445,"src":"755:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":430,"name":"address","nodeType":"ElementaryTypeName","src":"755:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"754:17:3"},"returnParameters":{"id":435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":434,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":445,"src":"795:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":433,"name":"bool","nodeType":"ElementaryTypeName","src":"795:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"794:6:3"},"scope":722,"src":"735:341:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":478,"nodeType":"Block","src":"2030:227:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":456,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2052:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$722","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$722","typeString":"library Address"}],"id":455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2044:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":454,"name":"address","nodeType":"ElementaryTypeName","src":"2044:7:3","typeDescriptions":{}}},"id":457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2044:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"2044:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":459,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":450,"src":"2069:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:31:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2077:31:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":453,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2036:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2036:73:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":463,"nodeType":"ExpressionStatement","src":"2036:73:3"},{"assignments":[465,null],"declarations":[{"constant":false,"id":465,"mutability":"mutable","name":"success","nameLocation":"2122:7:3","nodeType":"VariableDeclaration","scope":478,"src":"2117:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":464,"name":"bool","nodeType":"ElementaryTypeName","src":"2117:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":472,"initialValue":{"arguments":[{"hexValue":"","id":470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2165:2:3","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":466,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":448,"src":"2135:9:3","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"2135:14:3","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":469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":468,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":450,"src":"2157:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2135:29:3","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":471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2135:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2116:52:3"},{"expression":{"arguments":[{"id":474,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":465,"src":"2182:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2191:60:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":473,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2174:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2174:78:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":477,"nodeType":"ExpressionStatement","src":"2174:78:3"}]},"documentation":{"id":446,"nodeType":"StructuredDocumentation","src":"1080:876:3","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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":479,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1968:9:3","nodeType":"FunctionDefinition","parameters":{"id":451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":448,"mutability":"mutable","name":"recipient","nameLocation":"1994:9:3","nodeType":"VariableDeclaration","scope":479,"src":"1978:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":447,"name":"address","nodeType":"ElementaryTypeName","src":"1978:15:3","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":450,"mutability":"mutable","name":"amount","nameLocation":"2013:6:3","nodeType":"VariableDeclaration","scope":479,"src":"2005:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":449,"name":"uint256","nodeType":"ElementaryTypeName","src":"2005:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1977:43:3"},"returnParameters":{"id":452,"nodeType":"ParameterList","parameters":[],"src":"2030:0:3"},"scope":722,"src":"1959:298:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":495,"nodeType":"Block","src":"3050:78:3","statements":[{"expression":{"arguments":[{"id":490,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":482,"src":"3076:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":491,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":484,"src":"3084:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3090:32:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":489,"name":"functionCall","nodeType":"Identifier","overloadedDeclarations":[496,516],"referencedDeclaration":516,"src":"3063:12:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3063:60:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":488,"id":494,"nodeType":"Return","src":"3056:67:3"}]},"documentation":{"id":480,"nodeType":"StructuredDocumentation","src":"2261:697:3","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, it is bubbled up by this\n function (like regular Solidity function calls).\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.\n _Available since v3.1._"},"id":496,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2970:12:3","nodeType":"FunctionDefinition","parameters":{"id":485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":482,"mutability":"mutable","name":"target","nameLocation":"2991:6:3","nodeType":"VariableDeclaration","scope":496,"src":"2983:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":481,"name":"address","nodeType":"ElementaryTypeName","src":"2983:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":484,"mutability":"mutable","name":"data","nameLocation":"3012:4:3","nodeType":"VariableDeclaration","scope":496,"src":"2999:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":483,"name":"bytes","nodeType":"ElementaryTypeName","src":"2999:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2982:35:3"},"returnParameters":{"id":488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":496,"src":"3036:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":486,"name":"bytes","nodeType":"ElementaryTypeName","src":"3036:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3035:14:3"},"scope":722,"src":"2961:167:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":515,"nodeType":"Block","src":"3469:70:3","statements":[{"expression":{"arguments":[{"id":509,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":499,"src":"3504:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":510,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":501,"src":"3512:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3518:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":512,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":503,"src":"3521:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"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"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":508,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[536,586],"referencedDeclaration":586,"src":"3482:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3482:52:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":507,"id":514,"nodeType":"Return","src":"3475:59:3"}]},"documentation":{"id":497,"nodeType":"StructuredDocumentation","src":"3132:201:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":516,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3345:12:3","nodeType":"FunctionDefinition","parameters":{"id":504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":499,"mutability":"mutable","name":"target","nameLocation":"3371:6:3","nodeType":"VariableDeclaration","scope":516,"src":"3363:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":498,"name":"address","nodeType":"ElementaryTypeName","src":"3363:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":501,"mutability":"mutable","name":"data","nameLocation":"3396:4:3","nodeType":"VariableDeclaration","scope":516,"src":"3383:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":500,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":503,"mutability":"mutable","name":"errorMessage","nameLocation":"3420:12:3","nodeType":"VariableDeclaration","scope":516,"src":"3406:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":502,"name":"string","nodeType":"ElementaryTypeName","src":"3406:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3357:79:3"},"returnParameters":{"id":507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":516,"src":"3455:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":505,"name":"bytes","nodeType":"ElementaryTypeName","src":"3455:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3454:14:3"},"scope":722,"src":"3336:203:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":535,"nodeType":"Block","src":"4006:105:3","statements":[{"expression":{"arguments":[{"id":529,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":519,"src":"4041:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":530,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"4049:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":531,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"4055:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4062:43:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":528,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[536,586],"referencedDeclaration":586,"src":"4019:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4019:87:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":527,"id":534,"nodeType":"Return","src":"4012:94:3"}]},"documentation":{"id":517,"nodeType":"StructuredDocumentation","src":"3543:331:3","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`.\n _Available since v3.1._"},"id":536,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3886:21:3","nodeType":"FunctionDefinition","parameters":{"id":524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":519,"mutability":"mutable","name":"target","nameLocation":"3921:6:3","nodeType":"VariableDeclaration","scope":536,"src":"3913:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":518,"name":"address","nodeType":"ElementaryTypeName","src":"3913:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":521,"mutability":"mutable","name":"data","nameLocation":"3946:4:3","nodeType":"VariableDeclaration","scope":536,"src":"3933:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":520,"name":"bytes","nodeType":"ElementaryTypeName","src":"3933:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":523,"mutability":"mutable","name":"value","nameLocation":"3964:5:3","nodeType":"VariableDeclaration","scope":536,"src":"3956:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":522,"name":"uint256","nodeType":"ElementaryTypeName","src":"3956:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3907:66:3"},"returnParameters":{"id":527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":536,"src":"3992:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":525,"name":"bytes","nodeType":"ElementaryTypeName","src":"3992:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3991:14:3"},"scope":722,"src":"3877:234:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":585,"nodeType":"Block","src":"4506:302:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":553,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4528:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$722","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$722","typeString":"library Address"}],"id":552,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4520:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":551,"name":"address","nodeType":"ElementaryTypeName","src":"4520:7:3","typeDescriptions":{}}},"id":554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4520:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"4520:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":556,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":543,"src":"4545:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4520:30:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4552:40:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":550,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4512:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4512:81:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":560,"nodeType":"ExpressionStatement","src":"4512:81:3"},{"expression":{"arguments":[{"arguments":[{"id":563,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":539,"src":"4618:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":562,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":445,"src":"4607:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4607:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4627:31:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":561,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4599:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4599:60:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":567,"nodeType":"ExpressionStatement","src":"4599:60:3"},{"assignments":[569,571],"declarations":[{"constant":false,"id":569,"mutability":"mutable","name":"success","nameLocation":"4672:7:3","nodeType":"VariableDeclaration","scope":585,"src":"4667:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":568,"name":"bool","nodeType":"ElementaryTypeName","src":"4667:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":571,"mutability":"mutable","name":"returndata","nameLocation":"4694:10:3","nodeType":"VariableDeclaration","scope":585,"src":"4681:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":570,"name":"bytes","nodeType":"ElementaryTypeName","src":"4681:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":578,"initialValue":{"arguments":[{"id":576,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":541,"src":"4734:4:3","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":572,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":539,"src":"4708:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"4708:11:3","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":575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":574,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":543,"src":"4727:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4708:25:3","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":577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4708:31:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4666:73:3"},{"expression":{"arguments":[{"id":580,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"4769:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":581,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":571,"src":"4778:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":582,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":545,"src":"4790:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":579,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":721,"src":"4752:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4752:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":549,"id":584,"nodeType":"Return","src":"4745:58:3"}]},"documentation":{"id":537,"nodeType":"StructuredDocumentation","src":"4115:227:3","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":586,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4354:21:3","nodeType":"FunctionDefinition","parameters":{"id":546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":539,"mutability":"mutable","name":"target","nameLocation":"4389:6:3","nodeType":"VariableDeclaration","scope":586,"src":"4381:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":538,"name":"address","nodeType":"ElementaryTypeName","src":"4381:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":541,"mutability":"mutable","name":"data","nameLocation":"4414:4:3","nodeType":"VariableDeclaration","scope":586,"src":"4401:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":540,"name":"bytes","nodeType":"ElementaryTypeName","src":"4401:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":543,"mutability":"mutable","name":"value","nameLocation":"4432:5:3","nodeType":"VariableDeclaration","scope":586,"src":"4424:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":542,"name":"uint256","nodeType":"ElementaryTypeName","src":"4424:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":545,"mutability":"mutable","name":"errorMessage","nameLocation":"4457:12:3","nodeType":"VariableDeclaration","scope":586,"src":"4443:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":544,"name":"string","nodeType":"ElementaryTypeName","src":"4443:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4375:98:3"},"returnParameters":{"id":549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":548,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":586,"src":"4492:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":547,"name":"bytes","nodeType":"ElementaryTypeName","src":"4492:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4491:14:3"},"scope":722,"src":"4345:463:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":602,"nodeType":"Block","src":"5083:91:3","statements":[{"expression":{"arguments":[{"id":597,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"5115:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":598,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":591,"src":"5123:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5129:39:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":596,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[603,638],"referencedDeclaration":638,"src":"5096:18:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5096:73:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":595,"id":601,"nodeType":"Return","src":"5089:80:3"}]},"documentation":{"id":587,"nodeType":"StructuredDocumentation","src":"4812:156:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":603,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"4980:18:3","nodeType":"FunctionDefinition","parameters":{"id":592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":589,"mutability":"mutable","name":"target","nameLocation":"5012:6:3","nodeType":"VariableDeclaration","scope":603,"src":"5004:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":588,"name":"address","nodeType":"ElementaryTypeName","src":"5004:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":591,"mutability":"mutable","name":"data","nameLocation":"5037:4:3","nodeType":"VariableDeclaration","scope":603,"src":"5024:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":590,"name":"bytes","nodeType":"ElementaryTypeName","src":"5024:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4998:47:3"},"returnParameters":{"id":595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":603,"src":"5069:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":593,"name":"bytes","nodeType":"ElementaryTypeName","src":"5069:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5068:14:3"},"scope":722,"src":"4971:203:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":637,"nodeType":"Block","src":"5488:214:3","statements":[{"expression":{"arguments":[{"arguments":[{"id":617,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":606,"src":"5513:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":616,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":445,"src":"5502:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5502:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374","id":619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5522:38:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""},"value":"Address: static call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""}],"id":615,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5494:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5494:67:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":621,"nodeType":"ExpressionStatement","src":"5494:67:3"},{"assignments":[623,625],"declarations":[{"constant":false,"id":623,"mutability":"mutable","name":"success","nameLocation":"5574:7:3","nodeType":"VariableDeclaration","scope":637,"src":"5569:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":622,"name":"bool","nodeType":"ElementaryTypeName","src":"5569:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":625,"mutability":"mutable","name":"returndata","nameLocation":"5596:10:3","nodeType":"VariableDeclaration","scope":637,"src":"5583:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":624,"name":"bytes","nodeType":"ElementaryTypeName","src":"5583:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":630,"initialValue":{"arguments":[{"id":628,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":608,"src":"5628:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":626,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":606,"src":"5610:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"staticcall","nodeType":"MemberAccess","src":"5610:17:3","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":629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5610:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5568:65:3"},{"expression":{"arguments":[{"id":632,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":623,"src":"5663:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":633,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":625,"src":"5672:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":634,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":610,"src":"5684:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":631,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":721,"src":"5646:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5646:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":614,"id":636,"nodeType":"Return","src":"5639:58:3"}]},"documentation":{"id":604,"nodeType":"StructuredDocumentation","src":"5178:163:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":638,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5353:18:3","nodeType":"FunctionDefinition","parameters":{"id":611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"target","nameLocation":"5385:6:3","nodeType":"VariableDeclaration","scope":638,"src":"5377:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":605,"name":"address","nodeType":"ElementaryTypeName","src":"5377:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":608,"mutability":"mutable","name":"data","nameLocation":"5410:4:3","nodeType":"VariableDeclaration","scope":638,"src":"5397:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":607,"name":"bytes","nodeType":"ElementaryTypeName","src":"5397:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":610,"mutability":"mutable","name":"errorMessage","nameLocation":"5434:12:3","nodeType":"VariableDeclaration","scope":638,"src":"5420:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":609,"name":"string","nodeType":"ElementaryTypeName","src":"5420:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5371:79:3"},"returnParameters":{"id":614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":638,"src":"5474:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":612,"name":"bytes","nodeType":"ElementaryTypeName","src":"5474:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5473:14:3"},"scope":722,"src":"5344:358:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":654,"nodeType":"Block","src":"5964:95:3","statements":[{"expression":{"arguments":[{"id":649,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":641,"src":"5998:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":650,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":643,"src":"6006:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6012:41:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":648,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[655,690],"referencedDeclaration":690,"src":"5977:20:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5977:77:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":647,"id":653,"nodeType":"Return","src":"5970:84:3"}]},"documentation":{"id":639,"nodeType":"StructuredDocumentation","src":"5706:158:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":655,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"5876:20:3","nodeType":"FunctionDefinition","parameters":{"id":644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":641,"mutability":"mutable","name":"target","nameLocation":"5905:6:3","nodeType":"VariableDeclaration","scope":655,"src":"5897:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":640,"name":"address","nodeType":"ElementaryTypeName","src":"5897:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":643,"mutability":"mutable","name":"data","nameLocation":"5926:4:3","nodeType":"VariableDeclaration","scope":655,"src":"5913:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":642,"name":"bytes","nodeType":"ElementaryTypeName","src":"5913:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5896:35:3"},"returnParameters":{"id":647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":655,"src":"5950:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":645,"name":"bytes","nodeType":"ElementaryTypeName","src":"5950:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5949:14:3"},"scope":722,"src":"5867:192:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":689,"nodeType":"Block","src":"6372:218:3","statements":[{"expression":{"arguments":[{"arguments":[{"id":669,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"6397:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":668,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":445,"src":"6386:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6386:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374","id":671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6406:40:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""},"value":"Address: delegate call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""}],"id":667,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6378:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6378:69:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":673,"nodeType":"ExpressionStatement","src":"6378:69:3"},{"assignments":[675,677],"declarations":[{"constant":false,"id":675,"mutability":"mutable","name":"success","nameLocation":"6460:7:3","nodeType":"VariableDeclaration","scope":689,"src":"6455:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":674,"name":"bool","nodeType":"ElementaryTypeName","src":"6455:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":677,"mutability":"mutable","name":"returndata","nameLocation":"6482:10:3","nodeType":"VariableDeclaration","scope":689,"src":"6469:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":676,"name":"bytes","nodeType":"ElementaryTypeName","src":"6469:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":682,"initialValue":{"arguments":[{"id":680,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":660,"src":"6516:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":678,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"6496:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"6496:19:3","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":681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6496:25:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6454:67:3"},{"expression":{"arguments":[{"id":684,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":675,"src":"6551:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":685,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":677,"src":"6560:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":686,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":662,"src":"6572:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":683,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":721,"src":"6534:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6534:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":666,"id":688,"nodeType":"Return","src":"6527:58:3"}]},"documentation":{"id":656,"nodeType":"StructuredDocumentation","src":"6063:165:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":690,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6240:20:3","nodeType":"FunctionDefinition","parameters":{"id":663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":658,"mutability":"mutable","name":"target","nameLocation":"6274:6:3","nodeType":"VariableDeclaration","scope":690,"src":"6266:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":657,"name":"address","nodeType":"ElementaryTypeName","src":"6266:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":660,"mutability":"mutable","name":"data","nameLocation":"6299:4:3","nodeType":"VariableDeclaration","scope":690,"src":"6286:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":659,"name":"bytes","nodeType":"ElementaryTypeName","src":"6286:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":662,"mutability":"mutable","name":"errorMessage","nameLocation":"6323:12:3","nodeType":"VariableDeclaration","scope":690,"src":"6309:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":661,"name":"string","nodeType":"ElementaryTypeName","src":"6309:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6260:79:3"},"returnParameters":{"id":666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":690,"src":"6358:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":664,"name":"bytes","nodeType":"ElementaryTypeName","src":"6358:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6357:14:3"},"scope":722,"src":"6231:359:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":720,"nodeType":"Block","src":"6942:436:3","statements":[{"condition":{"id":702,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"6952:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":718,"nodeType":"Block","src":"6999:375:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":706,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"7071:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7071:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7091:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7071:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":716,"nodeType":"Block","src":"7329:39:3","statements":[{"expression":{"arguments":[{"id":713,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":697,"src":"7346:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":712,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"7339:6:3","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7339:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":715,"nodeType":"ExpressionStatement","src":"7339:20:3"}]},"id":717,"nodeType":"IfStatement","src":"7067:301:3","trueBody":{"id":711,"nodeType":"Block","src":"7094:229:3","statements":[{"AST":{"nodeType":"YulBlock","src":"7198:117:3","statements":[{"nodeType":"YulVariableDeclaration","src":"7210:40:3","value":{"arguments":[{"name":"returndata","nodeType":"YulIdentifier","src":"7239:10:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7233:5:3"},"nodeType":"YulFunctionCall","src":"7233:17:3"},"variables":[{"name":"returndata_size","nodeType":"YulTypedName","src":"7214:15:3","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7272:2:3","type":"","value":"32"},{"name":"returndata","nodeType":"YulIdentifier","src":"7276:10:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7268:3:3"},"nodeType":"YulFunctionCall","src":"7268:19:3"},{"name":"returndata_size","nodeType":"YulIdentifier","src":"7289:15:3"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7261:6:3"},"nodeType":"YulFunctionCall","src":"7261:44:3"},"nodeType":"YulExpressionStatement","src":"7261:44:3"}]},"evmVersion":"london","externalReferences":[{"declaration":695,"isOffset":false,"isSlot":false,"src":"7239:10:3","valueSize":1},{"declaration":695,"isOffset":false,"isSlot":false,"src":"7276:10:3","valueSize":1}],"id":710,"nodeType":"InlineAssembly","src":"7189:126:3"}]}}]},"id":719,"nodeType":"IfStatement","src":"6948:426:3","trueBody":{"id":705,"nodeType":"Block","src":"6961:32:3","statements":[{"expression":{"id":703,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"6976:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":701,"id":704,"nodeType":"Return","src":"6969:17:3"}]}}]},"documentation":{"id":691,"nodeType":"StructuredDocumentation","src":"6594:199:3","text":" @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"},"id":721,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"6805:16:3","nodeType":"FunctionDefinition","parameters":{"id":698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":693,"mutability":"mutable","name":"success","nameLocation":"6832:7:3","nodeType":"VariableDeclaration","scope":721,"src":"6827:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":692,"name":"bool","nodeType":"ElementaryTypeName","src":"6827:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":695,"mutability":"mutable","name":"returndata","nameLocation":"6858:10:3","nodeType":"VariableDeclaration","scope":721,"src":"6845:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":694,"name":"bytes","nodeType":"ElementaryTypeName","src":"6845:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":697,"mutability":"mutable","name":"errorMessage","nameLocation":"6888:12:3","nodeType":"VariableDeclaration","scope":721,"src":"6874:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":696,"name":"string","nodeType":"ElementaryTypeName","src":"6874:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6821:83:3"},"returnParameters":{"id":701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":700,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":721,"src":"6928:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":699,"name":"bytes","nodeType":"ElementaryTypeName","src":"6928:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6927:14:3"},"scope":722,"src":"6796:582:3","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":723,"src":"179:7201:3","usedErrors":[]}],"src":"86:7295:3"},"id":3},"contracts/dependencies/openzeppelin/contracts/Context.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Context.sol","exportedSymbols":{"Context":[748]},"id":749,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":724,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:4"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":748,"linearizedBaseContracts":[748],"name":"Context","nameLocation":"575:7:4","nodeType":"ContractDefinition","nodes":[{"body":{"id":735,"nodeType":"Block","src":"657:37:4","statements":[{"expression":{"arguments":[{"expression":{"id":731,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"678:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"678:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"670:8:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":729,"name":"address","nodeType":"ElementaryTypeName","src":"670:8:4","stateMutability":"payable","typeDescriptions":{}}},"id":733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"670:19:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":728,"id":734,"nodeType":"Return","src":"663:26:4"}]},"id":736,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"596:10:4","nodeType":"FunctionDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[],"src":"606:2:4"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":736,"src":"640:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":726,"name":"address","nodeType":"ElementaryTypeName","src":"640:15:4","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"639:17:4"},"scope":748,"src":"587:107:4","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":746,"nodeType":"Block","src":"763:155:4","statements":[{"expression":{"id":741,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"769:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_Context_$748","typeString":"contract Context"}},"id":742,"nodeType":"ExpressionStatement","src":"769:4:4"},{"expression":{"expression":{"id":743,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"905:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","src":"905:8:4","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":740,"id":745,"nodeType":"Return","src":"898:15:4"}]},"id":747,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"707:8:4","nodeType":"FunctionDefinition","parameters":{"id":737,"nodeType":"ParameterList","parameters":[],"src":"715:2:4"},"returnParameters":{"id":740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":739,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":747,"src":"749:12:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":738,"name":"bytes","nodeType":"ElementaryTypeName","src":"749:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"748:14:4"},"scope":748,"src":"698:220:4","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":749,"src":"557:363:4","usedErrors":[]}],"src":"32:889:4"},"id":4},"contracts/dependencies/openzeppelin/contracts/ERC165.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/ERC165.sol","exportedSymbols":{"ERC165":[772],"IERC165":[1364]},"id":773,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":750,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:5"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC165.sol","file":"./IERC165.sol","id":751,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":773,"sourceUnit":1365,"src":"58:23:5","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":753,"name":"IERC165","nodeType":"IdentifierPath","referencedDeclaration":1364,"src":"688:7:5"},"id":754,"nodeType":"InheritanceSpecifier","src":"688:7:5"}],"canonicalName":"ERC165","contractDependencies":[],"contractKind":"contract","documentation":{"id":752,"nodeType":"StructuredDocumentation","src":"83:576:5","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 ```\n Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation."},"fullyImplemented":true,"id":772,"linearizedBaseContracts":[772,1364],"name":"ERC165","nameLocation":"678:6:5","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[1363],"body":{"id":770,"nodeType":"Block","src":"846:58:5","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":763,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"859:11:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":765,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1364,"src":"879:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$1364_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$1364_$","typeString":"type(contract IERC165)"}],"id":764,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"874:4:5","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"874:13:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$1364","typeString":"type(contract IERC165)"}},"id":767,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"874:25:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"859:40:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":762,"id":769,"nodeType":"Return","src":"852:47:5"}]},"documentation":{"id":755,"nodeType":"StructuredDocumentation","src":"700:52:5","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":771,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"764:17:5","nodeType":"FunctionDefinition","overrides":{"id":759,"nodeType":"OverrideSpecifier","overrides":[],"src":"822:8:5"},"parameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":757,"mutability":"mutable","name":"interfaceId","nameLocation":"789:11:5","nodeType":"VariableDeclaration","scope":771,"src":"782:18:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":756,"name":"bytes4","nodeType":"ElementaryTypeName","src":"782:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"781:20:5"},"returnParameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":771,"src":"840:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":760,"name":"bool","nodeType":"ElementaryTypeName","src":"840:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"839:6:5"},"scope":772,"src":"755:149:5","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":773,"src":"660:246:5","usedErrors":[]}],"src":"33:874:5"},"id":5},"contracts/dependencies/openzeppelin/contracts/ERC20.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/ERC20.sol","exportedSymbols":{"Address":[722],"Context":[748],"ERC20":[1279],"IERC20":[1442],"SafeMath":[2310]},"id":1280,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":774,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:6"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Context.sol","file":"./Context.sol","id":775,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1280,"sourceUnit":749,"src":"58:23:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"./IERC20.sol","id":776,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1280,"sourceUnit":1443,"src":"82:22:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"./SafeMath.sol","id":777,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1280,"sourceUnit":2311,"src":"105:24:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Address.sol","file":"./Address.sol","id":778,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1280,"sourceUnit":723,"src":"130:23:6","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":780,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"1336:7:6"},"id":781,"nodeType":"InheritanceSpecifier","src":"1336:7:6"},{"baseName":{"id":782,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1345:6:6"},"id":783,"nodeType":"InheritanceSpecifier","src":"1345:6:6"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":779,"nodeType":"StructuredDocumentation","src":"155:1162:6","text":" @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."},"fullyImplemented":true,"id":1279,"linearizedBaseContracts":[1279,1442,748],"name":"ERC20","nameLocation":"1327:5:6","nodeType":"ContractDefinition","nodes":[{"id":786,"libraryName":{"id":784,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"1362:8:6"},"nodeType":"UsingForDirective","src":"1356:27:6","typeName":{"id":785,"name":"uint256","nodeType":"ElementaryTypeName","src":"1375:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":789,"libraryName":{"id":787,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":722,"src":"1392:7:6"},"nodeType":"UsingForDirective","src":"1386:26:6","typeName":{"id":788,"name":"address","nodeType":"ElementaryTypeName","src":"1404:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"constant":false,"id":793,"mutability":"mutable","name":"_balances","nameLocation":"1452:9:6","nodeType":"VariableDeclaration","scope":1279,"src":"1416:45:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":792,"keyType":{"id":790,"name":"address","nodeType":"ElementaryTypeName","src":"1424:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1416:27:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"1435:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":799,"mutability":"mutable","name":"_allowances","nameLocation":"1522:11:6","nodeType":"VariableDeclaration","scope":1279,"src":"1466:67:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":798,"keyType":{"id":794,"name":"address","nodeType":"ElementaryTypeName","src":"1474:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1466:47:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":797,"keyType":{"id":795,"name":"address","nodeType":"ElementaryTypeName","src":"1493:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1485:27:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":796,"name":"uint256","nodeType":"ElementaryTypeName","src":"1504:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":801,"mutability":"mutable","name":"_totalSupply","nameLocation":"1554:12:6","nodeType":"VariableDeclaration","scope":1279,"src":"1538:28:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":800,"name":"uint256","nodeType":"ElementaryTypeName","src":"1538:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":803,"mutability":"mutable","name":"_name","nameLocation":"1586:5:6","nodeType":"VariableDeclaration","scope":1279,"src":"1571:20:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":802,"name":"string","nodeType":"ElementaryTypeName","src":"1571:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":805,"mutability":"mutable","name":"_symbol","nameLocation":"1610:7:6","nodeType":"VariableDeclaration","scope":1279,"src":"1595:22:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":804,"name":"string","nodeType":"ElementaryTypeName","src":"1595:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":807,"mutability":"mutable","name":"_decimals","nameLocation":"1635:9:6","nodeType":"VariableDeclaration","scope":1279,"src":"1621:23:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":806,"name":"uint8","nodeType":"ElementaryTypeName","src":"1621:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"body":{"id":827,"nodeType":"Block","src":"2001:65:6","statements":[{"expression":{"id":817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":815,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"2007:5:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":816,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":810,"src":"2015:4:6","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2007:12:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":818,"nodeType":"ExpressionStatement","src":"2007:12:6"},{"expression":{"id":821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":819,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"2025:7:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":820,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"2035:6:6","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2025:16:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":822,"nodeType":"ExpressionStatement","src":"2025:16:6"},{"expression":{"id":825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":823,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":807,"src":"2047:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"3138","id":824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2059:2:6","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"2047:14:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":826,"nodeType":"ExpressionStatement","src":"2047:14:6"}]},"documentation":{"id":808,"nodeType":"StructuredDocumentation","src":"1649:295:6","text":" @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction."},"id":828,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":810,"mutability":"mutable","name":"name","nameLocation":"1973:4:6","nodeType":"VariableDeclaration","scope":828,"src":"1959:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":809,"name":"string","nodeType":"ElementaryTypeName","src":"1959:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":812,"mutability":"mutable","name":"symbol","nameLocation":"1993:6:6","nodeType":"VariableDeclaration","scope":828,"src":"1979:20:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":811,"name":"string","nodeType":"ElementaryTypeName","src":"1979:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1958:42:6"},"returnParameters":{"id":814,"nodeType":"ParameterList","parameters":[],"src":"2001:0:6"},"scope":1279,"src":"1947:119:6","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":836,"nodeType":"Block","src":"2175:23:6","statements":[{"expression":{"id":834,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"2188:5:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":833,"id":835,"nodeType":"Return","src":"2181:12:6"}]},"documentation":{"id":829,"nodeType":"StructuredDocumentation","src":"2070:50:6","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":837,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2132:4:6","nodeType":"FunctionDefinition","parameters":{"id":830,"nodeType":"ParameterList","parameters":[],"src":"2136:2:6"},"returnParameters":{"id":833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":837,"src":"2160:13:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":831,"name":"string","nodeType":"ElementaryTypeName","src":"2160:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2159:15:6"},"scope":1279,"src":"2123:75:6","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":845,"nodeType":"Block","src":"2355:25:6","statements":[{"expression":{"id":843,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"2368:7:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":842,"id":844,"nodeType":"Return","src":"2361:14:6"}]},"documentation":{"id":838,"nodeType":"StructuredDocumentation","src":"2202:96:6","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":846,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2310:6:6","nodeType":"FunctionDefinition","parameters":{"id":839,"nodeType":"ParameterList","parameters":[],"src":"2316:2:6"},"returnParameters":{"id":842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":841,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":846,"src":"2340:13:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":840,"name":"string","nodeType":"ElementaryTypeName","src":"2340:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2339:15:6"},"scope":1279,"src":"2301:79:6","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":854,"nodeType":"Block","src":"3023:27:6","statements":[{"expression":{"id":852,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":807,"src":"3036:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":851,"id":853,"nodeType":"Return","src":"3029:16:6"}]},"documentation":{"id":847,"nodeType":"StructuredDocumentation","src":"2384:588:6","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":855,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2984:8:6","nodeType":"FunctionDefinition","parameters":{"id":848,"nodeType":"ParameterList","parameters":[],"src":"2992:2:6"},"returnParameters":{"id":851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":850,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":855,"src":"3016:5:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":849,"name":"uint8","nodeType":"ElementaryTypeName","src":"3016:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3015:7:6"},"scope":1279,"src":"2975:75:6","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1373],"body":{"id":864,"nodeType":"Block","src":"3164:30:6","statements":[{"expression":{"id":862,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"3177:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":861,"id":863,"nodeType":"Return","src":"3170:19:6"}]},"documentation":{"id":856,"nodeType":"StructuredDocumentation","src":"3054:45:6","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":865,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3111:11:6","nodeType":"FunctionDefinition","overrides":{"id":858,"nodeType":"OverrideSpecifier","overrides":[],"src":"3137:8:6"},"parameters":{"id":857,"nodeType":"ParameterList","parameters":[],"src":"3122:2:6"},"returnParameters":{"id":861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":860,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":865,"src":"3155:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":859,"name":"uint256","nodeType":"ElementaryTypeName","src":"3155:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3154:9:6"},"scope":1279,"src":"3102:92:6","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1381],"body":{"id":878,"nodeType":"Block","src":"3319:36:6","statements":[{"expression":{"baseExpression":{"id":874,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"3332:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":876,"indexExpression":{"id":875,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"3342:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3332:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":873,"id":877,"nodeType":"Return","src":"3325:25:6"}]},"documentation":{"id":866,"nodeType":"StructuredDocumentation","src":"3198:43:6","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":879,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3253:9:6","nodeType":"FunctionDefinition","overrides":{"id":870,"nodeType":"OverrideSpecifier","overrides":[],"src":"3292:8:6"},"parameters":{"id":869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":868,"mutability":"mutable","name":"account","nameLocation":"3271:7:6","nodeType":"VariableDeclaration","scope":879,"src":"3263:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":867,"name":"address","nodeType":"ElementaryTypeName","src":"3263:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3262:17:6"},"returnParameters":{"id":873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":872,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":879,"src":"3310:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":871,"name":"uint256","nodeType":"ElementaryTypeName","src":"3310:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3309:9:6"},"scope":1279,"src":"3244:111:6","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1391],"body":{"id":899,"nodeType":"Block","src":"3632:70:6","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":891,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"3648:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3648:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":893,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":882,"src":"3662:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":894,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":884,"src":"3673:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":890,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1100,"src":"3638:9:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3638:42:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":896,"nodeType":"ExpressionStatement","src":"3638:42:6"},{"expression":{"hexValue":"74727565","id":897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3693:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":889,"id":898,"nodeType":"Return","src":"3686:11:6"}]},"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"3359:178:6","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."},"functionSelector":"a9059cbb","id":900,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3549:8:6","nodeType":"FunctionDefinition","overrides":{"id":886,"nodeType":"OverrideSpecifier","overrides":[],"src":"3608:8:6"},"parameters":{"id":885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"recipient","nameLocation":"3566:9:6","nodeType":"VariableDeclaration","scope":900,"src":"3558:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":881,"name":"address","nodeType":"ElementaryTypeName","src":"3558:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":884,"mutability":"mutable","name":"amount","nameLocation":"3585:6:6","nodeType":"VariableDeclaration","scope":900,"src":"3577:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":883,"name":"uint256","nodeType":"ElementaryTypeName","src":"3577:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3557:35:6"},"returnParameters":{"id":889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":888,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":900,"src":"3626:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":887,"name":"bool","nodeType":"ElementaryTypeName","src":"3626:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3625:6:6"},"scope":1279,"src":"3540:162:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1401],"body":{"id":917,"nodeType":"Block","src":"3862:45:6","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":911,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"3875:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":913,"indexExpression":{"id":912,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"3887:5:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3875:18:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":915,"indexExpression":{"id":914,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":905,"src":"3894:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3875:27:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":910,"id":916,"nodeType":"Return","src":"3868:34:6"}]},"documentation":{"id":901,"nodeType":"StructuredDocumentation","src":"3706:43:6","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":918,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3761:9:6","nodeType":"FunctionDefinition","overrides":{"id":907,"nodeType":"OverrideSpecifier","overrides":[],"src":"3835:8:6"},"parameters":{"id":906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":903,"mutability":"mutable","name":"owner","nameLocation":"3784:5:6","nodeType":"VariableDeclaration","scope":918,"src":"3776:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":902,"name":"address","nodeType":"ElementaryTypeName","src":"3776:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":905,"mutability":"mutable","name":"spender","nameLocation":"3803:7:6","nodeType":"VariableDeclaration","scope":918,"src":"3795:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":904,"name":"address","nodeType":"ElementaryTypeName","src":"3795:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3770:44:6"},"returnParameters":{"id":910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":909,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":918,"src":"3853:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":908,"name":"uint256","nodeType":"ElementaryTypeName","src":"3853:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3852:9:6"},"scope":1279,"src":"3752:155:6","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1411],"body":{"id":938,"nodeType":"Block","src":"4118:67:6","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":930,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4133:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4133:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":932,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":921,"src":"4147:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":933,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":923,"src":"4156:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":929,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"4124:8:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4124:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":935,"nodeType":"ExpressionStatement","src":"4124:39:6"},{"expression":{"hexValue":"74727565","id":936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4176:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":928,"id":937,"nodeType":"Return","src":"4169:11:6"}]},"documentation":{"id":919,"nodeType":"StructuredDocumentation","src":"3911:115:6","text":" @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":939,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4038:7:6","nodeType":"FunctionDefinition","overrides":{"id":925,"nodeType":"OverrideSpecifier","overrides":[],"src":"4094:8:6"},"parameters":{"id":924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":921,"mutability":"mutable","name":"spender","nameLocation":"4054:7:6","nodeType":"VariableDeclaration","scope":939,"src":"4046:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":920,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":923,"mutability":"mutable","name":"amount","nameLocation":"4071:6:6","nodeType":"VariableDeclaration","scope":939,"src":"4063:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":922,"name":"uint256","nodeType":"ElementaryTypeName","src":"4063:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4045:33:6"},"returnParameters":{"id":928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":939,"src":"4112:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":926,"name":"bool","nodeType":"ElementaryTypeName","src":"4112:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4111:6:6"},"scope":1279,"src":"4029:156:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1423],"body":{"id":976,"nodeType":"Block","src":"4747:215:6","statements":[{"expression":{"arguments":[{"id":953,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":942,"src":"4763:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":954,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":944,"src":"4771:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":955,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":946,"src":"4782:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":952,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1100,"src":"4753:9:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4753:36:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":957,"nodeType":"ExpressionStatement","src":"4753:36:6"},{"expression":{"arguments":[{"id":959,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":942,"src":"4811:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":960,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4825:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4825:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"arguments":[{"id":969,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":946,"src":"4883:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365","id":970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4891:42:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330","typeString":"literal_string \"ERC20: transfer amount exceeds allowance\""},"value":"ERC20: transfer amount exceeds allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330","typeString":"literal_string \"ERC20: transfer amount exceeds allowance\""}],"expression":{"baseExpression":{"baseExpression":{"id":962,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"4845:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":964,"indexExpression":{"id":963,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":942,"src":"4857:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4845:19:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":967,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":965,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4865:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4865:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4845:33:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2265,"src":"4845:37:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4845:89:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":958,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"4795:8:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4795:145:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":973,"nodeType":"ExpressionStatement","src":"4795:145:6"},{"expression":{"hexValue":"74727565","id":974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4953:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":951,"id":975,"nodeType":"Return","src":"4946:11:6"}]},"documentation":{"id":940,"nodeType":"StructuredDocumentation","src":"4189:427:6","text":" @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20};\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."},"functionSelector":"23b872dd","id":977,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4628:12:6","nodeType":"FunctionDefinition","overrides":{"id":948,"nodeType":"OverrideSpecifier","overrides":[],"src":"4723:8:6"},"parameters":{"id":947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":942,"mutability":"mutable","name":"sender","nameLocation":"4654:6:6","nodeType":"VariableDeclaration","scope":977,"src":"4646:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":941,"name":"address","nodeType":"ElementaryTypeName","src":"4646:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":944,"mutability":"mutable","name":"recipient","nameLocation":"4674:9:6","nodeType":"VariableDeclaration","scope":977,"src":"4666:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":943,"name":"address","nodeType":"ElementaryTypeName","src":"4666:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":946,"mutability":"mutable","name":"amount","nameLocation":"4697:6:6","nodeType":"VariableDeclaration","scope":977,"src":"4689:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":945,"name":"uint256","nodeType":"ElementaryTypeName","src":"4689:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4640:67:6"},"returnParameters":{"id":951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":950,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":977,"src":"4741:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":949,"name":"bool","nodeType":"ElementaryTypeName","src":"4741:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4740:6:6"},"scope":1279,"src":"4619:343:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1004,"nodeType":"Block","src":"5425:111:6","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":988,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5440:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5440:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":990,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":980,"src":"5454:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":998,"name":"addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":982,"src":"5502:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"baseExpression":{"id":991,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"5463:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":994,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":992,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5475:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5475:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5463:25:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":996,"indexExpression":{"id":995,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":980,"src":"5489:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5463:34:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"5463:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5463:50:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":987,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"5431:8:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5431:83:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1001,"nodeType":"ExpressionStatement","src":"5431:83:6"},{"expression":{"hexValue":"74727565","id":1002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5527:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":986,"id":1003,"nodeType":"Return","src":"5520:11:6"}]},"documentation":{"id":978,"nodeType":"StructuredDocumentation","src":"4966:362:6","text":" @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"39509351","id":1005,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"5340:17:6","nodeType":"FunctionDefinition","parameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":980,"mutability":"mutable","name":"spender","nameLocation":"5366:7:6","nodeType":"VariableDeclaration","scope":1005,"src":"5358:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":979,"name":"address","nodeType":"ElementaryTypeName","src":"5358:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":982,"mutability":"mutable","name":"addedValue","nameLocation":"5383:10:6","nodeType":"VariableDeclaration","scope":1005,"src":"5375:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":981,"name":"uint256","nodeType":"ElementaryTypeName","src":"5375:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5357:37:6"},"returnParameters":{"id":986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":985,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1005,"src":"5419:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":984,"name":"bool","nodeType":"ElementaryTypeName","src":"5419:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5418:6:6"},"scope":1279,"src":"5331:205:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1033,"nodeType":"Block","src":"6104:205:6","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1016,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"6126:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6126:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1018,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"6146:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":1026,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1010,"src":"6209:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":1027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6234:39:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""},"value":"ERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""}],"expression":{"baseExpression":{"baseExpression":{"id":1019,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6161:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":1022,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1020,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"6173:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6173:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6161:25:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1024,"indexExpression":{"id":1023,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"6187:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6161:34:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2265,"src":"6161:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":1028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6161:120:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1015,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"6110:8:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6110:177:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1030,"nodeType":"ExpressionStatement","src":"6110:177:6"},{"expression":{"hexValue":"74727565","id":1031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6300:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":1014,"id":1032,"nodeType":"Return","src":"6293:11:6"}]},"documentation":{"id":1006,"nodeType":"StructuredDocumentation","src":"5540:450:6","text":" @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."},"functionSelector":"a457c2d7","id":1034,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"6002:17:6","nodeType":"FunctionDefinition","parameters":{"id":1011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1008,"mutability":"mutable","name":"spender","nameLocation":"6033:7:6","nodeType":"VariableDeclaration","scope":1034,"src":"6025:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1007,"name":"address","nodeType":"ElementaryTypeName","src":"6025:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1010,"mutability":"mutable","name":"subtractedValue","nameLocation":"6054:15:6","nodeType":"VariableDeclaration","scope":1034,"src":"6046:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1009,"name":"uint256","nodeType":"ElementaryTypeName","src":"6046:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6019:54:6"},"returnParameters":{"id":1014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1034,"src":"6098:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1012,"name":"bool","nodeType":"ElementaryTypeName","src":"6098:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6097:6:6"},"scope":1279,"src":"5993:316:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1099,"nodeType":"Block","src":"6840:417:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1045,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"6854:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6872:1:6","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":1047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6864:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1046,"name":"address","nodeType":"ElementaryTypeName","src":"6864:7:6","typeDescriptions":{}}},"id":1049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6864:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6854:20:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373","id":1051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6876:39:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""},"value":"ERC20: transfer from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""}],"id":1044,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6846:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6846:70:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1053,"nodeType":"ExpressionStatement","src":"6846:70:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1055,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"6930:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6951:1:6","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":1057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6943:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1056,"name":"address","nodeType":"ElementaryTypeName","src":"6943:7:6","typeDescriptions":{}}},"id":1059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6943:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6930:23:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472657373","id":1061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6955:37:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""},"value":"ERC20: transfer to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""}],"id":1054,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6922:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6922:71:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1063,"nodeType":"ExpressionStatement","src":"6922:71:6"},{"expression":{"arguments":[{"id":1065,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"7021:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1066,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"7029:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1067,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"7040:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1064,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1278,"src":"7000:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7000:47:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1069,"nodeType":"ExpressionStatement","src":"7000:47:6"},{"expression":{"id":1080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1070,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7054:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1072,"indexExpression":{"id":1071,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"7064:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7054:17:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1077,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"7096:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365","id":1078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7104:40:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""},"value":"ERC20: transfer amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""}],"expression":{"baseExpression":{"id":1073,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7074:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1075,"indexExpression":{"id":1074,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"7084:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7074:17:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2265,"src":"7074:21:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":1079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7074:71:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7054:91:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1081,"nodeType":"ExpressionStatement","src":"7054:91:6"},{"expression":{"id":1091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1082,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7151:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1084,"indexExpression":{"id":1083,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"7161:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7151:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1089,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"7199:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":1085,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7174:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1087,"indexExpression":{"id":1086,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"7184:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7174:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"7174:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7174:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7151:55:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1092,"nodeType":"ExpressionStatement","src":"7151:55:6"},{"eventCall":{"arguments":[{"id":1094,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"7226:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1095,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"7234:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1096,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"7245:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1093,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"7217:8:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7217:35:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1098,"nodeType":"EmitStatement","src":"7212:40:6"}]},"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"6313:437:6","text":" @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."},"id":1100,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6762:9:6","nodeType":"FunctionDefinition","parameters":{"id":1042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1037,"mutability":"mutable","name":"sender","nameLocation":"6780:6:6","nodeType":"VariableDeclaration","scope":1100,"src":"6772:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1036,"name":"address","nodeType":"ElementaryTypeName","src":"6772:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1039,"mutability":"mutable","name":"recipient","nameLocation":"6796:9:6","nodeType":"VariableDeclaration","scope":1100,"src":"6788:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1038,"name":"address","nodeType":"ElementaryTypeName","src":"6788:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1041,"mutability":"mutable","name":"amount","nameLocation":"6815:6:6","nodeType":"VariableDeclaration","scope":1100,"src":"6807:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1040,"name":"uint256","nodeType":"ElementaryTypeName","src":"6807:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6771:51:6"},"returnParameters":{"id":1043,"nodeType":"ParameterList","parameters":[],"src":"6840:0:6"},"scope":1279,"src":"6753:504:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1154,"nodeType":"Block","src":"7572:283:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1109,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7586:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7605:1:6","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":1111,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7597:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1110,"name":"address","nodeType":"ElementaryTypeName","src":"7597:7:6","typeDescriptions":{}}},"id":1113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7597:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7586:21:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","id":1115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7609:33:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""},"value":"ERC20: mint to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""}],"id":1108,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7578:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7578:65:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1117,"nodeType":"ExpressionStatement","src":"7578:65:6"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":1121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7679:1:6","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":1120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7671:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1119,"name":"address","nodeType":"ElementaryTypeName","src":"7671:7:6","typeDescriptions":{}}},"id":1122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7671:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1123,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7683:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1124,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1105,"src":"7692:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1118,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1278,"src":"7650:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7650:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1126,"nodeType":"ExpressionStatement","src":"7650:49:6"},{"expression":{"id":1132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1127,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"7706:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1130,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1105,"src":"7738:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1128,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"7721:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"7721:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7721:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7706:39:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1133,"nodeType":"ExpressionStatement","src":"7706:39:6"},{"expression":{"id":1143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1134,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7751:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1136,"indexExpression":{"id":1135,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7761:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7751:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1141,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1105,"src":"7795:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":1137,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7772:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1139,"indexExpression":{"id":1138,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7782:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7772:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"7772:22:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7772:30:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7751:51:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1144,"nodeType":"ExpressionStatement","src":"7751:51:6"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7830:1:6","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":1147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7822:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1146,"name":"address","nodeType":"ElementaryTypeName","src":"7822:7:6","typeDescriptions":{}}},"id":1149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7822:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1150,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7834:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1151,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1105,"src":"7843:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1145,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"7813:8:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7813:37:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1153,"nodeType":"EmitStatement","src":"7808:42:6"}]},"documentation":{"id":1101,"nodeType":"StructuredDocumentation","src":"7261:243:6","text":"@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements\n - `to` cannot be the zero address."},"id":1155,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"7516:5:6","nodeType":"FunctionDefinition","parameters":{"id":1106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1103,"mutability":"mutable","name":"account","nameLocation":"7530:7:6","nodeType":"VariableDeclaration","scope":1155,"src":"7522:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1102,"name":"address","nodeType":"ElementaryTypeName","src":"7522:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1105,"mutability":"mutable","name":"amount","nameLocation":"7547:6:6","nodeType":"VariableDeclaration","scope":1155,"src":"7539:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1104,"name":"uint256","nodeType":"ElementaryTypeName","src":"7539:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7521:33:6"},"returnParameters":{"id":1107,"nodeType":"ParameterList","parameters":[],"src":"7572:0:6"},"scope":1279,"src":"7507:348:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1210,"nodeType":"Block","src":"8215:323:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1164,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8229:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8248:1:6","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":1166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8240:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1165,"name":"address","nodeType":"ElementaryTypeName","src":"8240:7:6","typeDescriptions":{}}},"id":1168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8240:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8229:21:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f2061646472657373","id":1170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8252:35:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""},"value":"ERC20: burn from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""}],"id":1163,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8221:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8221:67:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1172,"nodeType":"ExpressionStatement","src":"8221:67:6"},{"expression":{"arguments":[{"id":1174,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8316:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8333:1:6","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":1176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8325:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1175,"name":"address","nodeType":"ElementaryTypeName","src":"8325:7:6","typeDescriptions":{}}},"id":1178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8325:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1179,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"8337:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1173,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1278,"src":"8295:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8295:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1181,"nodeType":"ExpressionStatement","src":"8295:49:6"},{"expression":{"id":1192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1182,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"8351:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1184,"indexExpression":{"id":1183,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8361:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8351:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1189,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"8395:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365","id":1190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8403:36:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""},"value":"ERC20: burn amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""}],"expression":{"baseExpression":{"id":1185,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"8372:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1187,"indexExpression":{"id":1186,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8382:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8372:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2265,"src":"8372:22:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":1191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8372:68:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8351:89:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1193,"nodeType":"ExpressionStatement","src":"8351:89:6"},{"expression":{"id":1199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1194,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"8446:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1197,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"8478:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1195,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"8461:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2239,"src":"8461:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8461:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8446:39:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1200,"nodeType":"ExpressionStatement","src":"8446:39:6"},{"eventCall":{"arguments":[{"id":1202,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8505:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8522:1:6","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":1204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8514:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1203,"name":"address","nodeType":"ElementaryTypeName","src":"8514:7:6","typeDescriptions":{}}},"id":1206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8514:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1207,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"8526:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1201,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"8496:8:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8496:37:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1209,"nodeType":"EmitStatement","src":"8491:42:6"}]},"documentation":{"id":1156,"nodeType":"StructuredDocumentation","src":"7859:288:6","text":" @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."},"id":1211,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"8159:5:6","nodeType":"FunctionDefinition","parameters":{"id":1161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1158,"mutability":"mutable","name":"account","nameLocation":"8173:7:6","nodeType":"VariableDeclaration","scope":1211,"src":"8165:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1157,"name":"address","nodeType":"ElementaryTypeName","src":"8165:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1160,"mutability":"mutable","name":"amount","nameLocation":"8190:6:6","nodeType":"VariableDeclaration","scope":1211,"src":"8182:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1159,"name":"uint256","nodeType":"ElementaryTypeName","src":"8182:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8164:33:6"},"returnParameters":{"id":1162,"nodeType":"ParameterList","parameters":[],"src":"8215:0:6"},"scope":1279,"src":"8150:388:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1255,"nodeType":"Block","src":"9018:239:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1222,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"9032:5:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9049:1:6","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":1224,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9041:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1223,"name":"address","nodeType":"ElementaryTypeName","src":"9041:7:6","typeDescriptions":{}}},"id":1226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9041:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9032:19:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373","id":1228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9053:38:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""},"value":"ERC20: approve from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""}],"id":1221,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9024:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9024:68:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1230,"nodeType":"ExpressionStatement","src":"9024:68:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1232,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1216,"src":"9106:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9125:1:6","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":1234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9117:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1233,"name":"address","nodeType":"ElementaryTypeName","src":"9117:7:6","typeDescriptions":{}}},"id":1236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9117:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9106:21:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f2061646472657373","id":1238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9129:36:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""},"value":"ERC20: approve to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""}],"id":1231,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9098:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9098:68:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1240,"nodeType":"ExpressionStatement","src":"9098:68:6"},{"expression":{"id":1247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1241,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"9173:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":1244,"indexExpression":{"id":1242,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"9185:5:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9173:18:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1245,"indexExpression":{"id":1243,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1216,"src":"9192:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9173:27:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1246,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1218,"src":"9203:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9173:36:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1248,"nodeType":"ExpressionStatement","src":"9173:36:6"},{"eventCall":{"arguments":[{"id":1250,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"9229:5:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1251,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1216,"src":"9236:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1252,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1218,"src":"9245:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1249,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1441,"src":"9220:8:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9220:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1254,"nodeType":"EmitStatement","src":"9215:37:6"}]},"documentation":{"id":1212,"nodeType":"StructuredDocumentation","src":"8542:390:6","text":" @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\n This is internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."},"id":1256,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"8944:8:6","nodeType":"FunctionDefinition","parameters":{"id":1219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1214,"mutability":"mutable","name":"owner","nameLocation":"8961:5:6","nodeType":"VariableDeclaration","scope":1256,"src":"8953:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1213,"name":"address","nodeType":"ElementaryTypeName","src":"8953:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1216,"mutability":"mutable","name":"spender","nameLocation":"8976:7:6","nodeType":"VariableDeclaration","scope":1256,"src":"8968:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1215,"name":"address","nodeType":"ElementaryTypeName","src":"8968:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1218,"mutability":"mutable","name":"amount","nameLocation":"8993:6:6","nodeType":"VariableDeclaration","scope":1256,"src":"8985:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1217,"name":"uint256","nodeType":"ElementaryTypeName","src":"8985:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8952:48:6"},"returnParameters":{"id":1220,"nodeType":"ParameterList","parameters":[],"src":"9018:0:6"},"scope":1279,"src":"8935:322:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1266,"nodeType":"Block","src":"9614:32:6","statements":[{"expression":{"id":1264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1262,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":807,"src":"9620:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1263,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1259,"src":"9632:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9620:21:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":1265,"nodeType":"ExpressionStatement","src":"9620:21:6"}]},"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"9261:300:6","text":" @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does."},"id":1267,"implemented":true,"kind":"function","modifiers":[],"name":"_setupDecimals","nameLocation":"9573:14:6","nodeType":"FunctionDefinition","parameters":{"id":1260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1259,"mutability":"mutable","name":"decimals_","nameLocation":"9594:9:6","nodeType":"VariableDeclaration","scope":1267,"src":"9588:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1258,"name":"uint8","nodeType":"ElementaryTypeName","src":"9588:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"9587:17:6"},"returnParameters":{"id":1261,"nodeType":"ParameterList","parameters":[],"src":"9614:0:6"},"scope":1279,"src":"9564:82:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1277,"nodeType":"Block","src":"10292:2:6","statements":[]},"documentation":{"id":1268,"nodeType":"StructuredDocumentation","src":"9650:550:6","text":" @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."},"id":1278,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeTokenTransfer","nameLocation":"10212:20:6","nodeType":"FunctionDefinition","parameters":{"id":1275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1270,"mutability":"mutable","name":"from","nameLocation":"10241:4:6","nodeType":"VariableDeclaration","scope":1278,"src":"10233:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1269,"name":"address","nodeType":"ElementaryTypeName","src":"10233:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"to","nameLocation":"10255:2:6","nodeType":"VariableDeclaration","scope":1278,"src":"10247:10:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1271,"name":"address","nodeType":"ElementaryTypeName","src":"10247:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1274,"mutability":"mutable","name":"amount","nameLocation":"10267:6:6","nodeType":"VariableDeclaration","scope":1278,"src":"10259:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1273,"name":"uint256","nodeType":"ElementaryTypeName","src":"10259:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10232:42:6"},"returnParameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"10292:0:6"},"scope":1279,"src":"10203:91:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":1280,"src":"1318:8978:6","usedErrors":[]}],"src":"33:10264:6"},"id":6},"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol","exportedSymbols":{"IAccessControl":[1352]},"id":1353,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1281,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:7"},{"abstract":false,"baseContracts":[],"canonicalName":"IAccessControl","contractDependencies":[],"contractKind":"interface","documentation":{"id":1282,"nodeType":"StructuredDocumentation","src":"58:89:7","text":" @dev External interface of AccessControl declared to support ERC165 detection."},"fullyImplemented":false,"id":1352,"linearizedBaseContracts":[1352],"name":"IAccessControl","nameLocation":"158:14:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1283,"nodeType":"StructuredDocumentation","src":"177:278:7","text":" @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n {RoleAdminChanged} not being emitted signaling this.\n _Available since v3.1._"},"id":1291,"name":"RoleAdminChanged","nameLocation":"464:16:7","nodeType":"EventDefinition","parameters":{"id":1290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1285,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"502:4:7","nodeType":"VariableDeclaration","scope":1291,"src":"486:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1284,"name":"bytes32","nodeType":"ElementaryTypeName","src":"486:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1287,"indexed":true,"mutability":"mutable","name":"previousAdminRole","nameLocation":"528:17:7","nodeType":"VariableDeclaration","scope":1291,"src":"512:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1286,"name":"bytes32","nodeType":"ElementaryTypeName","src":"512:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1289,"indexed":true,"mutability":"mutable","name":"newAdminRole","nameLocation":"567:12:7","nodeType":"VariableDeclaration","scope":1291,"src":"551:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1288,"name":"bytes32","nodeType":"ElementaryTypeName","src":"551:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"480:103:7"},"src":"458:126:7"},{"anonymous":false,"documentation":{"id":1292,"nodeType":"StructuredDocumentation","src":"588:202:7","text":" @dev Emitted when `account` is granted `role`.\n `sender` is the account that originated the contract call, an admin role\n bearer except when using {AccessControl-_setupRole}."},"id":1300,"name":"RoleGranted","nameLocation":"799:11:7","nodeType":"EventDefinition","parameters":{"id":1299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1294,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"827:4:7","nodeType":"VariableDeclaration","scope":1300,"src":"811:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1293,"name":"bytes32","nodeType":"ElementaryTypeName","src":"811:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1296,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"849:7:7","nodeType":"VariableDeclaration","scope":1300,"src":"833:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1295,"name":"address","nodeType":"ElementaryTypeName","src":"833:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1298,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"874:6:7","nodeType":"VariableDeclaration","scope":1300,"src":"858:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1297,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"810:71:7"},"src":"793:89:7"},{"anonymous":false,"documentation":{"id":1301,"nodeType":"StructuredDocumentation","src":"886:263:7","text":" @dev Emitted when `account` is revoked `role`.\n `sender` is the account that originated the contract call:\n   - if using `revokeRole`, it is the admin role bearer\n   - if using `renounceRole`, it is the role bearer (i.e. `account`)"},"id":1309,"name":"RoleRevoked","nameLocation":"1158:11:7","nodeType":"EventDefinition","parameters":{"id":1308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1303,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1186:4:7","nodeType":"VariableDeclaration","scope":1309,"src":"1170:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1170:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1305,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1208:7:7","nodeType":"VariableDeclaration","scope":1309,"src":"1192:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1304,"name":"address","nodeType":"ElementaryTypeName","src":"1192:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1307,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1233:6:7","nodeType":"VariableDeclaration","scope":1309,"src":"1217:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1306,"name":"address","nodeType":"ElementaryTypeName","src":"1217:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1169:71:7"},"src":"1152:89:7"},{"documentation":{"id":1310,"nodeType":"StructuredDocumentation","src":"1245:72:7","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":1319,"implemented":false,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"1329:7:7","nodeType":"FunctionDefinition","parameters":{"id":1315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1312,"mutability":"mutable","name":"role","nameLocation":"1345:4:7","nodeType":"VariableDeclaration","scope":1319,"src":"1337:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1311,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1337:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1314,"mutability":"mutable","name":"account","nameLocation":"1359:7:7","nodeType":"VariableDeclaration","scope":1319,"src":"1351:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1313,"name":"address","nodeType":"ElementaryTypeName","src":"1351:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1336:31:7"},"returnParameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1319,"src":"1391:4:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1316,"name":"bool","nodeType":"ElementaryTypeName","src":"1391:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1390:6:7"},"scope":1352,"src":"1320:77:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1320,"nodeType":"StructuredDocumentation","src":"1401:174:7","text":" @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {AccessControl-_setRoleAdmin}."},"functionSelector":"248a9ca3","id":1327,"implemented":false,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"1587:12:7","nodeType":"FunctionDefinition","parameters":{"id":1323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1322,"mutability":"mutable","name":"role","nameLocation":"1608:4:7","nodeType":"VariableDeclaration","scope":1327,"src":"1600:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1321,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1600:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1599:14:7"},"returnParameters":{"id":1326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1325,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1327,"src":"1637:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1637:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1636:9:7"},"scope":1352,"src":"1578:68:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1328,"nodeType":"StructuredDocumentation","src":"1650:221:7","text":" @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"2f2ff15d","id":1335,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"1883:9:7","nodeType":"FunctionDefinition","parameters":{"id":1333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1330,"mutability":"mutable","name":"role","nameLocation":"1901:4:7","nodeType":"VariableDeclaration","scope":1335,"src":"1893:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1329,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1893:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1332,"mutability":"mutable","name":"account","nameLocation":"1915:7:7","nodeType":"VariableDeclaration","scope":1335,"src":"1907:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1331,"name":"address","nodeType":"ElementaryTypeName","src":"1907:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1892:31:7"},"returnParameters":{"id":1334,"nodeType":"ParameterList","parameters":[],"src":"1932:0:7"},"scope":1352,"src":"1874:59:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1336,"nodeType":"StructuredDocumentation","src":"1937:207:7","text":" @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"d547741f","id":1343,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"2156:10:7","nodeType":"FunctionDefinition","parameters":{"id":1341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1338,"mutability":"mutable","name":"role","nameLocation":"2175:4:7","nodeType":"VariableDeclaration","scope":1343,"src":"2167:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2167:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1340,"mutability":"mutable","name":"account","nameLocation":"2189:7:7","nodeType":"VariableDeclaration","scope":1343,"src":"2181:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1339,"name":"address","nodeType":"ElementaryTypeName","src":"2181:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2166:31:7"},"returnParameters":{"id":1342,"nodeType":"ParameterList","parameters":[],"src":"2206:0:7"},"scope":1352,"src":"2147:60:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1344,"nodeType":"StructuredDocumentation","src":"2211:454:7","text":" @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been granted `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `account`."},"functionSelector":"36568abe","id":1351,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"2677:12:7","nodeType":"FunctionDefinition","parameters":{"id":1349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1346,"mutability":"mutable","name":"role","nameLocation":"2698:4:7","nodeType":"VariableDeclaration","scope":1351,"src":"2690:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1345,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2690:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1348,"mutability":"mutable","name":"account","nameLocation":"2712:7:7","nodeType":"VariableDeclaration","scope":1351,"src":"2704:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1347,"name":"address","nodeType":"ElementaryTypeName","src":"2704:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2689:31:7"},"returnParameters":{"id":1350,"nodeType":"ParameterList","parameters":[],"src":"2729:0:7"},"scope":1352,"src":"2668:62:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1353,"src":"148:2584:7","usedErrors":[]}],"src":"33:2700:7"},"id":7},"contracts/dependencies/openzeppelin/contracts/IERC165.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC165.sol","exportedSymbols":{"IERC165":[1364]},"id":1365,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1354,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:8"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":1355,"nodeType":"StructuredDocumentation","src":"58:279:8","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":1364,"linearizedBaseContracts":[1364],"name":"IERC165","nameLocation":"348:7:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1356,"nodeType":"StructuredDocumentation","src":"360:326:8","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":1363,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"698:17:8","nodeType":"FunctionDefinition","parameters":{"id":1359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1358,"mutability":"mutable","name":"interfaceId","nameLocation":"723:11:8","nodeType":"VariableDeclaration","scope":1363,"src":"716:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1357,"name":"bytes4","nodeType":"ElementaryTypeName","src":"716:6:8","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"715:20:8"},"returnParameters":{"id":1362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1363,"src":"759:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1360,"name":"bool","nodeType":"ElementaryTypeName","src":"759:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"758:6:8"},"scope":1364,"src":"689:76:8","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1365,"src":"338:429:8","usedErrors":[]}],"src":"33:735:8"},"id":8},"contracts/dependencies/openzeppelin/contracts/IERC20.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","exportedSymbols":{"IERC20":[1442]},"id":1443,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1366,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":1367,"nodeType":"StructuredDocumentation","src":"62:70:9","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":1442,"linearizedBaseContracts":[1442],"name":"IERC20","nameLocation":"143:6:9","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1368,"nodeType":"StructuredDocumentation","src":"154:62:9","text":" @dev Returns the amount of tokens in existence."},"functionSelector":"18160ddd","id":1373,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"228:11:9","nodeType":"FunctionDefinition","parameters":{"id":1369,"nodeType":"ParameterList","parameters":[],"src":"239:2:9"},"returnParameters":{"id":1372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1373,"src":"265:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1370,"name":"uint256","nodeType":"ElementaryTypeName","src":"265:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"264:9:9"},"scope":1442,"src":"219:55:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1374,"nodeType":"StructuredDocumentation","src":"278:68:9","text":" @dev Returns the amount of tokens owned by `account`."},"functionSelector":"70a08231","id":1381,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"358:9:9","nodeType":"FunctionDefinition","parameters":{"id":1377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1376,"mutability":"mutable","name":"account","nameLocation":"376:7:9","nodeType":"VariableDeclaration","scope":1381,"src":"368:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1375,"name":"address","nodeType":"ElementaryTypeName","src":"368:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"367:17:9"},"returnParameters":{"id":1380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1381,"src":"408:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1378,"name":"uint256","nodeType":"ElementaryTypeName","src":"408:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"407:9:9"},"scope":1442,"src":"349:68:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1382,"nodeType":"StructuredDocumentation","src":"421:197:9","text":" @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":1391,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"630:8:9","nodeType":"FunctionDefinition","parameters":{"id":1387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1384,"mutability":"mutable","name":"recipient","nameLocation":"647:9:9","nodeType":"VariableDeclaration","scope":1391,"src":"639:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1383,"name":"address","nodeType":"ElementaryTypeName","src":"639:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1386,"mutability":"mutable","name":"amount","nameLocation":"666:6:9","nodeType":"VariableDeclaration","scope":1391,"src":"658:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1385,"name":"uint256","nodeType":"ElementaryTypeName","src":"658:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"638:35:9"},"returnParameters":{"id":1390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1389,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1391,"src":"692:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1388,"name":"bool","nodeType":"ElementaryTypeName","src":"692:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"691:6:9"},"scope":1442,"src":"621:77:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1392,"nodeType":"StructuredDocumentation","src":"702:252:9","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":1401,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"966:9:9","nodeType":"FunctionDefinition","parameters":{"id":1397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1394,"mutability":"mutable","name":"owner","nameLocation":"984:5:9","nodeType":"VariableDeclaration","scope":1401,"src":"976:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1393,"name":"address","nodeType":"ElementaryTypeName","src":"976:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1396,"mutability":"mutable","name":"spender","nameLocation":"999:7:9","nodeType":"VariableDeclaration","scope":1401,"src":"991:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1395,"name":"address","nodeType":"ElementaryTypeName","src":"991:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"975:32:9"},"returnParameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1401,"src":"1031:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1398,"name":"uint256","nodeType":"ElementaryTypeName","src":"1031:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1030:9:9"},"scope":1442,"src":"957:83:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1402,"nodeType":"StructuredDocumentation","src":"1044:616:9","text":" @dev Sets `amount` as the allowance of `spender` over the 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":1411,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"1672:7:9","nodeType":"FunctionDefinition","parameters":{"id":1407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1404,"mutability":"mutable","name":"spender","nameLocation":"1688:7:9","nodeType":"VariableDeclaration","scope":1411,"src":"1680:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1403,"name":"address","nodeType":"ElementaryTypeName","src":"1680:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1406,"mutability":"mutable","name":"amount","nameLocation":"1705:6:9","nodeType":"VariableDeclaration","scope":1411,"src":"1697:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1405,"name":"uint256","nodeType":"ElementaryTypeName","src":"1697:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1679:33:9"},"returnParameters":{"id":1410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1409,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1411,"src":"1731:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1408,"name":"bool","nodeType":"ElementaryTypeName","src":"1731:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1730:6:9"},"scope":1442,"src":"1663:74:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1412,"nodeType":"StructuredDocumentation","src":"1741:280:9","text":" @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` 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":1423,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2033:12:9","nodeType":"FunctionDefinition","parameters":{"id":1419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1414,"mutability":"mutable","name":"sender","nameLocation":"2054:6:9","nodeType":"VariableDeclaration","scope":1423,"src":"2046:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1413,"name":"address","nodeType":"ElementaryTypeName","src":"2046:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1416,"mutability":"mutable","name":"recipient","nameLocation":"2070:9:9","nodeType":"VariableDeclaration","scope":1423,"src":"2062:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1415,"name":"address","nodeType":"ElementaryTypeName","src":"2062:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1418,"mutability":"mutable","name":"amount","nameLocation":"2089:6:9","nodeType":"VariableDeclaration","scope":1423,"src":"2081:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1417,"name":"uint256","nodeType":"ElementaryTypeName","src":"2081:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2045:51:9"},"returnParameters":{"id":1422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1421,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1423,"src":"2115:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1420,"name":"bool","nodeType":"ElementaryTypeName","src":"2115:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2114:6:9"},"scope":1442,"src":"2024:97:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":1424,"nodeType":"StructuredDocumentation","src":"2125:148:9","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"id":1432,"name":"Transfer","nameLocation":"2282:8:9","nodeType":"EventDefinition","parameters":{"id":1431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1426,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"2307:4:9","nodeType":"VariableDeclaration","scope":1432,"src":"2291:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1425,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1428,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"2329:2:9","nodeType":"VariableDeclaration","scope":1432,"src":"2313:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1427,"name":"address","nodeType":"ElementaryTypeName","src":"2313:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1430,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"2341:5:9","nodeType":"VariableDeclaration","scope":1432,"src":"2333:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1429,"name":"uint256","nodeType":"ElementaryTypeName","src":"2333:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2290:57:9"},"src":"2276:72:9"},{"anonymous":false,"documentation":{"id":1433,"nodeType":"StructuredDocumentation","src":"2352:142:9","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."},"id":1441,"name":"Approval","nameLocation":"2503:8:9","nodeType":"EventDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1435,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"2528:5:9","nodeType":"VariableDeclaration","scope":1441,"src":"2512:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1434,"name":"address","nodeType":"ElementaryTypeName","src":"2512:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1437,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"2551:7:9","nodeType":"VariableDeclaration","scope":1441,"src":"2535:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1436,"name":"address","nodeType":"ElementaryTypeName","src":"2535:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1439,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"2568:5:9","nodeType":"VariableDeclaration","scope":1441,"src":"2560:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1438,"name":"uint256","nodeType":"ElementaryTypeName","src":"2560:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2511:63:9"},"src":"2497:78:9"}],"scope":1443,"src":"133:2444:9","usedErrors":[]}],"src":"37:2541:9"},"id":9},"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","exportedSymbols":{"IERC20":[1442],"IERC20Detailed":[1464]},"id":1465,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1444,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:10"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"./IERC20.sol","id":1446,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1465,"sourceUnit":1443,"src":"62:36:10","symbolAliases":[{"foreign":{"id":1445,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1447,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"128:6:10"},"id":1448,"nodeType":"InheritanceSpecifier","src":"128:6:10"}],"canonicalName":"IERC20Detailed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1464,"linearizedBaseContracts":[1464,1442],"name":"IERC20Detailed","nameLocation":"110:14:10","nodeType":"ContractDefinition","nodes":[{"functionSelector":"06fdde03","id":1453,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"148:4:10","nodeType":"FunctionDefinition","parameters":{"id":1449,"nodeType":"ParameterList","parameters":[],"src":"152:2:10"},"returnParameters":{"id":1452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1453,"src":"178:13:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1450,"name":"string","nodeType":"ElementaryTypeName","src":"178:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"177:15:10"},"scope":1464,"src":"139:54:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"95d89b41","id":1458,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"206:6:10","nodeType":"FunctionDefinition","parameters":{"id":1454,"nodeType":"ParameterList","parameters":[],"src":"212:2:10"},"returnParameters":{"id":1457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1458,"src":"238:13:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1455,"name":"string","nodeType":"ElementaryTypeName","src":"238:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"237:15:10"},"scope":1464,"src":"197:56:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"313ce567","id":1463,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"266:8:10","nodeType":"FunctionDefinition","parameters":{"id":1459,"nodeType":"ParameterList","parameters":[],"src":"274:2:10"},"returnParameters":{"id":1462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1463,"src":"300:5:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1460,"name":"uint8","nodeType":"ElementaryTypeName","src":"300:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"299:7:10"},"scope":1464,"src":"257:50:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1465,"src":"100:209:10","usedErrors":[]}],"src":"37:273:10"},"id":10},"contracts/dependencies/openzeppelin/contracts/Ownable.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Ownable.sol","exportedSymbols":{"Context":[748],"Ownable":[1573]},"id":1574,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1466,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:11"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Context.sol","file":"./Context.sol","id":1467,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1574,"sourceUnit":749,"src":"58:23:11","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1469,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"598:7:11"},"id":1470,"nodeType":"InheritanceSpecifier","src":"598:7:11"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":1468,"nodeType":"StructuredDocumentation","src":"83:494:11","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 By default, the owner account will be the one that deploys the contract. This\n can 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":1573,"linearizedBaseContracts":[1573,748],"name":"Ownable","nameLocation":"587:7:11","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":1472,"mutability":"mutable","name":"_owner","nameLocation":"626:6:11","nodeType":"VariableDeclaration","scope":1573,"src":"610:22:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1471,"name":"address","nodeType":"ElementaryTypeName","src":"610:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"id":1478,"name":"OwnershipTransferred","nameLocation":"643:20:11","nodeType":"EventDefinition","parameters":{"id":1477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1474,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"680:13:11","nodeType":"VariableDeclaration","scope":1478,"src":"664:29:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1473,"name":"address","nodeType":"ElementaryTypeName","src":"664:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1476,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"711:8:11","nodeType":"VariableDeclaration","scope":1478,"src":"695:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1475,"name":"address","nodeType":"ElementaryTypeName","src":"695:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"663:57:11"},"src":"637:84:11"},{"body":{"id":1499,"nodeType":"Block","src":"829:121:11","statements":[{"assignments":[1483],"declarations":[{"constant":false,"id":1483,"mutability":"mutable","name":"msgSender","nameLocation":"843:9:11","nodeType":"VariableDeclaration","scope":1499,"src":"835:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1482,"name":"address","nodeType":"ElementaryTypeName","src":"835:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1486,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1484,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"855:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"855:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"835:32:11"},{"expression":{"id":1489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1487,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"873:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1488,"name":"msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1483,"src":"882:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"873:18:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1490,"nodeType":"ExpressionStatement","src":"873:18:11"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"931:1:11","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":1493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"923:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1492,"name":"address","nodeType":"ElementaryTypeName","src":"923:7:11","typeDescriptions":{}}},"id":1495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"923:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1496,"name":"msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1483,"src":"935:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1491,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1478,"src":"902:20:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"902:43:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1498,"nodeType":"EmitStatement","src":"897:48:11"}]},"documentation":{"id":1479,"nodeType":"StructuredDocumentation","src":"725:87:11","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":1500,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":1480,"nodeType":"ParameterList","parameters":[],"src":"826:2:11"},"returnParameters":{"id":1481,"nodeType":"ParameterList","parameters":[],"src":"829:0:11"},"scope":1573,"src":"815:135:11","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1508,"nodeType":"Block","src":"1065:24:11","statements":[{"expression":{"id":1506,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"1078:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1505,"id":1507,"nodeType":"Return","src":"1071:13:11"}]},"documentation":{"id":1501,"nodeType":"StructuredDocumentation","src":"954:61:11","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":1509,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1027:5:11","nodeType":"FunctionDefinition","parameters":{"id":1502,"nodeType":"ParameterList","parameters":[],"src":"1032:2:11"},"returnParameters":{"id":1505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1509,"src":"1056:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1503,"name":"address","nodeType":"ElementaryTypeName","src":"1056:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1055:9:11"},"scope":1573,"src":"1018:71:11","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1521,"nodeType":"Block","src":"1190:85:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1513,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"1204:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1514,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"1214:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1214:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1204:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":1517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1228:34:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":1512,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1196:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1196:67:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1519,"nodeType":"ExpressionStatement","src":"1196:67:11"},{"id":1520,"nodeType":"PlaceholderStatement","src":"1269:1:11"}]},"documentation":{"id":1510,"nodeType":"StructuredDocumentation","src":"1093:73:11","text":" @dev Throws if called by any account other than the owner."},"id":1522,"name":"onlyOwner","nameLocation":"1178:9:11","nodeType":"ModifierDefinition","parameters":{"id":1511,"nodeType":"ParameterList","parameters":[],"src":"1187:2:11"},"src":"1169:106:11","virtual":false,"visibility":"internal"},{"body":{"id":1543,"nodeType":"Block","src":"1655:81:11","statements":[{"eventCall":{"arguments":[{"id":1529,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"1687:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1703:1:11","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":1531,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1695:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1530,"name":"address","nodeType":"ElementaryTypeName","src":"1695:7:11","typeDescriptions":{}}},"id":1533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1695:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1528,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1478,"src":"1666:20:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1666:40:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1535,"nodeType":"EmitStatement","src":"1661:45:11"},{"expression":{"id":1541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1536,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"1712:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":1539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1729:1:11","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":1538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1721:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1537,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:11","typeDescriptions":{}}},"id":1540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1721:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1712:19:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1542,"nodeType":"ExpressionStatement","src":"1712:19:11"}]},"documentation":{"id":1523,"nodeType":"StructuredDocumentation","src":"1279:319:11","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":1544,"implemented":true,"kind":"function","modifiers":[{"id":1526,"kind":"modifierInvocation","modifierName":{"id":1525,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1645:9:11"},"nodeType":"ModifierInvocation","src":"1645:9:11"}],"name":"renounceOwnership","nameLocation":"1610:17:11","nodeType":"FunctionDefinition","parameters":{"id":1524,"nodeType":"ParameterList","parameters":[],"src":"1627:2:11"},"returnParameters":{"id":1527,"nodeType":"ParameterList","parameters":[],"src":"1655:0:11"},"scope":1573,"src":"1601:135:11","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1571,"nodeType":"Block","src":"1945:156:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1553,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"1959:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1979:1:11","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":1555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1971:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1554,"name":"address","nodeType":"ElementaryTypeName","src":"1971:7:11","typeDescriptions":{}}},"id":1557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1971:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1959:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":1559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1983:40:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":1552,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1951:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1951:73:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1561,"nodeType":"ExpressionStatement","src":"1951:73:11"},{"eventCall":{"arguments":[{"id":1563,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"2056:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1564,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"2064:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1562,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1478,"src":"2035:20:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2035:38:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1566,"nodeType":"EmitStatement","src":"2030:43:11"},{"expression":{"id":1569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1567,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"2079:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1568,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"2088:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2079:17:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1570,"nodeType":"ExpressionStatement","src":"2079:17:11"}]},"documentation":{"id":1545,"nodeType":"StructuredDocumentation","src":"1740:132:11","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":1572,"implemented":true,"kind":"function","modifiers":[{"id":1550,"kind":"modifierInvocation","modifierName":{"id":1549,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1935:9:11"},"nodeType":"ModifierInvocation","src":"1935:9:11"}],"name":"transferOwnership","nameLocation":"1884:17:11","nodeType":"FunctionDefinition","parameters":{"id":1548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1547,"mutability":"mutable","name":"newOwner","nameLocation":"1910:8:11","nodeType":"VariableDeclaration","scope":1572,"src":"1902:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1546,"name":"address","nodeType":"ElementaryTypeName","src":"1902:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1901:18:11"},"returnParameters":{"id":1551,"nodeType":"ParameterList","parameters":[],"src":"1945:0:11"},"scope":1573,"src":"1875:226:11","stateMutability":"nonpayable","virtual":true,"visibility":"public"}],"scope":1574,"src":"578:1525:11","usedErrors":[]}],"src":"33:2071:11"},"id":11},"contracts/dependencies/openzeppelin/contracts/SafeCast.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","exportedSymbols":{"SafeCast":[1966]},"id":1967,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1575,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"91:23:12"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":1576,"nodeType":"StructuredDocumentation","src":"116:709:12","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.\n Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n all math on `uint256` and `int256` and then downcasting."},"fullyImplemented":true,"id":1966,"linearizedBaseContracts":[1966],"name":"SafeCast","nameLocation":"834:8:12","nodeType":"ContractDefinition","nodes":[{"body":{"id":1600,"nodeType":"Block","src":"1178:116:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1585,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1579,"src":"1192:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1206:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":1587,"name":"uint224","nodeType":"ElementaryTypeName","src":"1206:7:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":1586,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1201:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1201:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":1590,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1201:17:12","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"1192:26:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e203232342062697473","id":1592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1220:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79","typeString":"literal_string \"SafeCast: value doesn't fit in 224 bits\""},"value":"SafeCast: value doesn't fit in 224 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79","typeString":"literal_string \"SafeCast: value doesn't fit in 224 bits\""}],"id":1584,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1184:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1184:78:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1594,"nodeType":"ExpressionStatement","src":"1184:78:12"},{"expression":{"arguments":[{"id":1597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1579,"src":"1283:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1275:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":1595,"name":"uint224","nodeType":"ElementaryTypeName","src":"1275:7:12","typeDescriptions":{}}},"id":1598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1275:14:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":1583,"id":1599,"nodeType":"Return","src":"1268:21:12"}]},"documentation":{"id":1577,"nodeType":"StructuredDocumentation","src":"847:262:12","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":1601,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"1121:9:12","nodeType":"FunctionDefinition","parameters":{"id":1580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1579,"mutability":"mutable","name":"value","nameLocation":"1139:5:12","nodeType":"VariableDeclaration","scope":1601,"src":"1131:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1578,"name":"uint256","nodeType":"ElementaryTypeName","src":"1131:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1130:15:12"},"returnParameters":{"id":1583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1582,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1601,"src":"1169:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":1581,"name":"uint224","nodeType":"ElementaryTypeName","src":"1169:7:12","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"1168:9:12"},"scope":1966,"src":"1112:182:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1625,"nodeType":"Block","src":"1629:116:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1610,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1604,"src":"1643:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1657:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":1612,"name":"uint128","nodeType":"ElementaryTypeName","src":"1657:7:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":1611,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1652:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1652:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":1615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1652:17:12","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1643:26:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473","id":1617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1671:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""},"value":"SafeCast: value doesn't fit in 128 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""}],"id":1609,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1635:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1635:78:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1619,"nodeType":"ExpressionStatement","src":"1635:78:12"},{"expression":{"arguments":[{"id":1622,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1604,"src":"1734:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1621,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1726:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":1620,"name":"uint128","nodeType":"ElementaryTypeName","src":"1726:7:12","typeDescriptions":{}}},"id":1623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1726:14:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":1608,"id":1624,"nodeType":"Return","src":"1719:21:12"}]},"documentation":{"id":1602,"nodeType":"StructuredDocumentation","src":"1298:262:12","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":1626,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"1572:9:12","nodeType":"FunctionDefinition","parameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"value","nameLocation":"1590:5:12","nodeType":"VariableDeclaration","scope":1626,"src":"1582:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"1582:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1581:15:12"},"returnParameters":{"id":1608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1626,"src":"1620:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":1606,"name":"uint128","nodeType":"ElementaryTypeName","src":"1620:7:12","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1619:9:12"},"scope":1966,"src":"1563:182:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1650,"nodeType":"Block","src":"2074:113:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1635,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1629,"src":"2088:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2102:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":1637,"name":"uint96","nodeType":"ElementaryTypeName","src":"2102:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":1636,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2097:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2097:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":1640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2097:16:12","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"2088:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2039362062697473","id":1642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2115:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19","typeString":"literal_string \"SafeCast: value doesn't fit in 96 bits\""},"value":"SafeCast: value doesn't fit in 96 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19","typeString":"literal_string \"SafeCast: value doesn't fit in 96 bits\""}],"id":1634,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2080:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2080:76:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1644,"nodeType":"ExpressionStatement","src":"2080:76:12"},{"expression":{"arguments":[{"id":1647,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1629,"src":"2176:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2169:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":1645,"name":"uint96","nodeType":"ElementaryTypeName","src":"2169:6:12","typeDescriptions":{}}},"id":1648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2169:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":1633,"id":1649,"nodeType":"Return","src":"2162:20:12"}]},"documentation":{"id":1627,"nodeType":"StructuredDocumentation","src":"1749:258:12","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":1651,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"2019:8:12","nodeType":"FunctionDefinition","parameters":{"id":1630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1629,"mutability":"mutable","name":"value","nameLocation":"2036:5:12","nodeType":"VariableDeclaration","scope":1651,"src":"2028:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1628,"name":"uint256","nodeType":"ElementaryTypeName","src":"2028:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2027:15:12"},"returnParameters":{"id":1633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1651,"src":"2066:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":1631,"name":"uint96","nodeType":"ElementaryTypeName","src":"2066:6:12","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"2065:8:12"},"scope":1966,"src":"2010:177:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1675,"nodeType":"Block","src":"2516:113:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1660,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1654,"src":"2530:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2544:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":1662,"name":"uint64","nodeType":"ElementaryTypeName","src":"2544:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":1661,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2539:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2539:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":1665,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2539:16:12","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"2530:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473","id":1667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2557:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""},"value":"SafeCast: value doesn't fit in 64 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""}],"id":1659,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2522:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2522:76:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1669,"nodeType":"ExpressionStatement","src":"2522:76:12"},{"expression":{"arguments":[{"id":1672,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1654,"src":"2618:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2611:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":1670,"name":"uint64","nodeType":"ElementaryTypeName","src":"2611:6:12","typeDescriptions":{}}},"id":1673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2611:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":1658,"id":1674,"nodeType":"Return","src":"2604:20:12"}]},"documentation":{"id":1652,"nodeType":"StructuredDocumentation","src":"2191:258:12","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":1676,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"2461:8:12","nodeType":"FunctionDefinition","parameters":{"id":1655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1654,"mutability":"mutable","name":"value","nameLocation":"2478:5:12","nodeType":"VariableDeclaration","scope":1676,"src":"2470:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1653,"name":"uint256","nodeType":"ElementaryTypeName","src":"2470:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2469:15:12"},"returnParameters":{"id":1658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1676,"src":"2508:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":1656,"name":"uint64","nodeType":"ElementaryTypeName","src":"2508:6:12","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"2507:8:12"},"scope":1966,"src":"2452:177:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1700,"nodeType":"Block","src":"2958:113:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1685,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1679,"src":"2972:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2986:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":1687,"name":"uint32","nodeType":"ElementaryTypeName","src":"2986:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":1686,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2981:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2981:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":1690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2981:16:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"2972:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473","id":1692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2999:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""},"value":"SafeCast: value doesn't fit in 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""}],"id":1684,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2964:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2964:76:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1694,"nodeType":"ExpressionStatement","src":"2964:76:12"},{"expression":{"arguments":[{"id":1697,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1679,"src":"3060:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1696,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3053:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":1695,"name":"uint32","nodeType":"ElementaryTypeName","src":"3053:6:12","typeDescriptions":{}}},"id":1698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3053:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":1683,"id":1699,"nodeType":"Return","src":"3046:20:12"}]},"documentation":{"id":1677,"nodeType":"StructuredDocumentation","src":"2633:258:12","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":1701,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"2903:8:12","nodeType":"FunctionDefinition","parameters":{"id":1680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1679,"mutability":"mutable","name":"value","nameLocation":"2920:5:12","nodeType":"VariableDeclaration","scope":1701,"src":"2912:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1678,"name":"uint256","nodeType":"ElementaryTypeName","src":"2912:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2911:15:12"},"returnParameters":{"id":1683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1701,"src":"2950:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1681,"name":"uint32","nodeType":"ElementaryTypeName","src":"2950:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2949:8:12"},"scope":1966,"src":"2894:177:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1725,"nodeType":"Block","src":"3400:113:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1710,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1704,"src":"3414:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3428:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":1712,"name":"uint16","nodeType":"ElementaryTypeName","src":"3428:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":1711,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3423:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3423:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":1715,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3423:16:12","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"3414:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473","id":1717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3441:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""},"value":"SafeCast: value doesn't fit in 16 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""}],"id":1709,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3406:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3406:76:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1719,"nodeType":"ExpressionStatement","src":"3406:76:12"},{"expression":{"arguments":[{"id":1722,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1704,"src":"3502:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3495:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":1720,"name":"uint16","nodeType":"ElementaryTypeName","src":"3495:6:12","typeDescriptions":{}}},"id":1723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3495:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":1708,"id":1724,"nodeType":"Return","src":"3488:20:12"}]},"documentation":{"id":1702,"nodeType":"StructuredDocumentation","src":"3075:258:12","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":1726,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"3345:8:12","nodeType":"FunctionDefinition","parameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"value","nameLocation":"3362:5:12","nodeType":"VariableDeclaration","scope":1726,"src":"3354:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"3354:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3353:15:12"},"returnParameters":{"id":1708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1726,"src":"3392:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":1706,"name":"uint16","nodeType":"ElementaryTypeName","src":"3392:6:12","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"3391:8:12"},"scope":1966,"src":"3336:177:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1750,"nodeType":"Block","src":"3837:110:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1735,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1729,"src":"3851:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1738,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3865:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":1737,"name":"uint8","nodeType":"ElementaryTypeName","src":"3865:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":1736,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3860:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3860:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":1740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3860:15:12","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"3851:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473","id":1742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3877:39:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""},"value":"SafeCast: value doesn't fit in 8 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""}],"id":1734,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3843:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3843:74:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1744,"nodeType":"ExpressionStatement","src":"3843:74:12"},{"expression":{"arguments":[{"id":1747,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1729,"src":"3936:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1746,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3930:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":1745,"name":"uint8","nodeType":"ElementaryTypeName","src":"3930:5:12","typeDescriptions":{}}},"id":1748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3930:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":1733,"id":1749,"nodeType":"Return","src":"3923:19:12"}]},"documentation":{"id":1727,"nodeType":"StructuredDocumentation","src":"3517:255:12","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":1751,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"3784:7:12","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1729,"mutability":"mutable","name":"value","nameLocation":"3800:5:12","nodeType":"VariableDeclaration","scope":1751,"src":"3792:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1728,"name":"uint256","nodeType":"ElementaryTypeName","src":"3792:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3791:15:12"},"returnParameters":{"id":1733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1751,"src":"3830:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1731,"name":"uint8","nodeType":"ElementaryTypeName","src":"3830:5:12","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3829:7:12"},"scope":1966,"src":"3775:172:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1771,"nodeType":"Block","src":"4167:93:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1760,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1754,"src":"4181:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":1761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4190:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4181:10:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c7565206d75737420626520706f736974697665","id":1763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4193:34:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807","typeString":"literal_string \"SafeCast: value must be positive\""},"value":"SafeCast: value must be positive"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807","typeString":"literal_string \"SafeCast: value must be positive\""}],"id":1759,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4173:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4173:55:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1765,"nodeType":"ExpressionStatement","src":"4173:55:12"},{"expression":{"arguments":[{"id":1768,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1754,"src":"4249:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1767,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4241:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1766,"name":"uint256","nodeType":"ElementaryTypeName","src":"4241:7:12","typeDescriptions":{}}},"id":1769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4241:14:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1758,"id":1770,"nodeType":"Return","src":"4234:21:12"}]},"documentation":{"id":1752,"nodeType":"StructuredDocumentation","src":"3951:148:12","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":1772,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"4111:9:12","nodeType":"FunctionDefinition","parameters":{"id":1755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1754,"mutability":"mutable","name":"value","nameLocation":"4128:5:12","nodeType":"VariableDeclaration","scope":1772,"src":"4121:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1753,"name":"int256","nodeType":"ElementaryTypeName","src":"4121:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4120:14:12"},"returnParameters":{"id":1758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1772,"src":"4158:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1756,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4157:9:12"},"scope":1966,"src":"4102:158:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1804,"nodeType":"Block","src":"4656:161:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1775,"src":"4677:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4691:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":1783,"name":"int128","nodeType":"ElementaryTypeName","src":"4691:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"}],"id":1782,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4686:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4686:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int128","typeString":"type(int128)"}},"id":1786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"4686:16:12","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"4677:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1788,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1775,"src":"4706:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1791,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4720:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":1790,"name":"int128","nodeType":"ElementaryTypeName","src":"4720:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"}],"id":1789,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4715:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4715:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int128","typeString":"type(int128)"}},"id":1793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"4715:16:12","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"4706:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4677:54:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473","id":1796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4739:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""},"value":"SafeCast: value doesn't fit in 128 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""}],"id":1780,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4662:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4662:124:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1798,"nodeType":"ExpressionStatement","src":"4662:124:12"},{"expression":{"arguments":[{"id":1801,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1775,"src":"4806:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4799:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":1799,"name":"int128","nodeType":"ElementaryTypeName","src":"4799:6:12","typeDescriptions":{}}},"id":1802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4799:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"functionReturnParameters":1779,"id":1803,"nodeType":"Return","src":"4792:20:12"}]},"documentation":{"id":1773,"nodeType":"StructuredDocumentation","src":"4264:326:12","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\n _Available since v3.1._"},"id":1805,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"4602:8:12","nodeType":"FunctionDefinition","parameters":{"id":1776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1775,"mutability":"mutable","name":"value","nameLocation":"4618:5:12","nodeType":"VariableDeclaration","scope":1805,"src":"4611:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1774,"name":"int256","nodeType":"ElementaryTypeName","src":"4611:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4610:14:12"},"returnParameters":{"id":1779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1805,"src":"4648:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":1777,"name":"int128","nodeType":"ElementaryTypeName","src":"4648:6:12","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"4647:8:12"},"scope":1966,"src":"4593:224:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1837,"nodeType":"Block","src":"5206:157:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1814,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1808,"src":"5227:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5241:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":1816,"name":"int64","nodeType":"ElementaryTypeName","src":"5241:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"}],"id":1815,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5236:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5236:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int64","typeString":"type(int64)"}},"id":1819,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"5236:15:12","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"5227:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1821,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1808,"src":"5255:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5269:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":1823,"name":"int64","nodeType":"ElementaryTypeName","src":"5269:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"}],"id":1822,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5264:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5264:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int64","typeString":"type(int64)"}},"id":1826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"5264:15:12","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"5255:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5227:52:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473","id":1829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5287:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""},"value":"SafeCast: value doesn't fit in 64 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""}],"id":1813,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5212:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5212:121:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1831,"nodeType":"ExpressionStatement","src":"5212:121:12"},{"expression":{"arguments":[{"id":1834,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1808,"src":"5352:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5346:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":1832,"name":"int64","nodeType":"ElementaryTypeName","src":"5346:5:12","typeDescriptions":{}}},"id":1835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5346:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"functionReturnParameters":1812,"id":1836,"nodeType":"Return","src":"5339:19:12"}]},"documentation":{"id":1806,"nodeType":"StructuredDocumentation","src":"4821:321:12","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\n _Available since v3.1._"},"id":1838,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"5154:7:12","nodeType":"FunctionDefinition","parameters":{"id":1809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1808,"mutability":"mutable","name":"value","nameLocation":"5169:5:12","nodeType":"VariableDeclaration","scope":1838,"src":"5162:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1807,"name":"int256","nodeType":"ElementaryTypeName","src":"5162:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5161:14:12"},"returnParameters":{"id":1812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1838,"src":"5199:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":1810,"name":"int64","nodeType":"ElementaryTypeName","src":"5199:5:12","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"5198:7:12"},"scope":1966,"src":"5145:218:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1870,"nodeType":"Block","src":"5752:157:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1847,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1841,"src":"5773:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5787:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":1849,"name":"int32","nodeType":"ElementaryTypeName","src":"5787:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"}],"id":1848,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5782:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5782:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int32","typeString":"type(int32)"}},"id":1852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"5782:15:12","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"5773:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1841,"src":"5801:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5815:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":1856,"name":"int32","nodeType":"ElementaryTypeName","src":"5815:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"}],"id":1855,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5810:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5810:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int32","typeString":"type(int32)"}},"id":1859,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"5810:15:12","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"5801:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5773:52:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473","id":1862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5833:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""},"value":"SafeCast: value doesn't fit in 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""}],"id":1846,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5758:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5758:121:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1864,"nodeType":"ExpressionStatement","src":"5758:121:12"},{"expression":{"arguments":[{"id":1867,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1841,"src":"5898:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5892:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":1865,"name":"int32","nodeType":"ElementaryTypeName","src":"5892:5:12","typeDescriptions":{}}},"id":1868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5892:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"functionReturnParameters":1845,"id":1869,"nodeType":"Return","src":"5885:19:12"}]},"documentation":{"id":1839,"nodeType":"StructuredDocumentation","src":"5367:321:12","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\n _Available since v3.1._"},"id":1871,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"5700:7:12","nodeType":"FunctionDefinition","parameters":{"id":1842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1841,"mutability":"mutable","name":"value","nameLocation":"5715:5:12","nodeType":"VariableDeclaration","scope":1871,"src":"5708:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1840,"name":"int256","nodeType":"ElementaryTypeName","src":"5708:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5707:14:12"},"returnParameters":{"id":1845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1844,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1871,"src":"5745:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":1843,"name":"int32","nodeType":"ElementaryTypeName","src":"5745:5:12","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"5744:7:12"},"scope":1966,"src":"5691:218:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1903,"nodeType":"Block","src":"6298:157:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1880,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1874,"src":"6319:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6333:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":1882,"name":"int16","nodeType":"ElementaryTypeName","src":"6333:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"}],"id":1881,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6328:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6328:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int16","typeString":"type(int16)"}},"id":1885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"6328:15:12","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"6319:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1887,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1874,"src":"6347:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1890,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6361:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":1889,"name":"int16","nodeType":"ElementaryTypeName","src":"6361:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"}],"id":1888,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6356:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6356:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int16","typeString":"type(int16)"}},"id":1892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6356:15:12","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"6347:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6319:52:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473","id":1895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6379:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""},"value":"SafeCast: value doesn't fit in 16 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""}],"id":1879,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6304:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6304:121:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1897,"nodeType":"ExpressionStatement","src":"6304:121:12"},{"expression":{"arguments":[{"id":1900,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1874,"src":"6444:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6438:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":1898,"name":"int16","nodeType":"ElementaryTypeName","src":"6438:5:12","typeDescriptions":{}}},"id":1901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6438:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"functionReturnParameters":1878,"id":1902,"nodeType":"Return","src":"6431:19:12"}]},"documentation":{"id":1872,"nodeType":"StructuredDocumentation","src":"5913:321:12","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\n _Available since v3.1._"},"id":1904,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"6246:7:12","nodeType":"FunctionDefinition","parameters":{"id":1875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1874,"mutability":"mutable","name":"value","nameLocation":"6261:5:12","nodeType":"VariableDeclaration","scope":1904,"src":"6254:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1873,"name":"int256","nodeType":"ElementaryTypeName","src":"6254:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"6253:14:12"},"returnParameters":{"id":1878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1877,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1904,"src":"6291:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":1876,"name":"int16","nodeType":"ElementaryTypeName","src":"6291:5:12","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"6290:7:12"},"scope":1966,"src":"6237:218:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1936,"nodeType":"Block","src":"6838:153:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1913,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"6859:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1916,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6873:4:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":1915,"name":"int8","nodeType":"ElementaryTypeName","src":"6873:4:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"}],"id":1914,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6868:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6868:10:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int8","typeString":"type(int8)"}},"id":1918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"6868:14:12","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"6859:23:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1920,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"6886:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6900:4:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":1922,"name":"int8","nodeType":"ElementaryTypeName","src":"6900:4:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"}],"id":1921,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6895:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6895:10:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int8","typeString":"type(int8)"}},"id":1925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6895:14:12","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"6886:23:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6859:50:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473","id":1928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6917:39:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""},"value":"SafeCast: value doesn't fit in 8 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""}],"id":1912,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6844:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6844:118:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1930,"nodeType":"ExpressionStatement","src":"6844:118:12"},{"expression":{"arguments":[{"id":1933,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"6980:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6975:4:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":1931,"name":"int8","nodeType":"ElementaryTypeName","src":"6975:4:12","typeDescriptions":{}}},"id":1934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6975:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"functionReturnParameters":1911,"id":1935,"nodeType":"Return","src":"6968:18:12"}]},"documentation":{"id":1905,"nodeType":"StructuredDocumentation","src":"6459:317:12","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.\n _Available since v3.1._"},"id":1937,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"6788:6:12","nodeType":"FunctionDefinition","parameters":{"id":1908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1907,"mutability":"mutable","name":"value","nameLocation":"6802:5:12","nodeType":"VariableDeclaration","scope":1937,"src":"6795:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1906,"name":"int256","nodeType":"ElementaryTypeName","src":"6795:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"6794:14:12"},"returnParameters":{"id":1911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1937,"src":"6832:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":1909,"name":"int8","nodeType":"ElementaryTypeName","src":"6832:4:12","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"6831:6:12"},"scope":1966,"src":"6779:212:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1964,"nodeType":"Block","src":"7215:219:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1946,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1940,"src":"7324:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":1951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7346:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":1950,"name":"int256","nodeType":"ElementaryTypeName","src":"7346:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":1949,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7341:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7341:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":1953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"7341:16:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1948,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7333:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1947,"name":"uint256","nodeType":"ElementaryTypeName","src":"7333:7:12","typeDescriptions":{}}},"id":1954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7333:25:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7324:34:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e74323536","id":1956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7360:42:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227","typeString":"literal_string \"SafeCast: value doesn't fit in an int256\""},"value":"SafeCast: value doesn't fit in an int256"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227","typeString":"literal_string \"SafeCast: value doesn't fit in an int256\""}],"id":1945,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7316:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7316:87:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1958,"nodeType":"ExpressionStatement","src":"7316:87:12"},{"expression":{"arguments":[{"id":1961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1940,"src":"7423:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7416:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":1959,"name":"int256","nodeType":"ElementaryTypeName","src":"7416:6:12","typeDescriptions":{}}},"id":1962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7416:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":1944,"id":1963,"nodeType":"Return","src":"7409:20:12"}]},"documentation":{"id":1938,"nodeType":"StructuredDocumentation","src":"6995:153:12","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":1965,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"7160:8:12","nodeType":"FunctionDefinition","parameters":{"id":1941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1940,"mutability":"mutable","name":"value","nameLocation":"7177:5:12","nodeType":"VariableDeclaration","scope":1965,"src":"7169:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1939,"name":"uint256","nodeType":"ElementaryTypeName","src":"7169:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7168:15:12"},"returnParameters":{"id":1944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1965,"src":"7207:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1942,"name":"int256","nodeType":"ElementaryTypeName","src":"7207:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7206:8:12"},"scope":1966,"src":"7151:283:12","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":1967,"src":"826:6610:12","usedErrors":[]}],"src":"91:7346:12"},"id":12},"contracts/dependencies/openzeppelin/contracts/SafeERC20.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","exportedSymbols":{"Address":[722],"IERC20":[1442],"SafeERC20":[2190]},"id":2191,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1968,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"100:23:13"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"./IERC20.sol","id":1969,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2191,"sourceUnit":1443,"src":"125:22:13","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Address.sol","file":"./Address.sol","id":1970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2191,"sourceUnit":723,"src":"148:23:13","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":1971,"nodeType":"StructuredDocumentation","src":"173:457:13","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":2190,"linearizedBaseContracts":[2190],"name":"SafeERC20","nameLocation":"639:9:13","nodeType":"ContractDefinition","nodes":[{"id":1974,"libraryName":{"id":1972,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":722,"src":"659:7:13"},"nodeType":"UsingForDirective","src":"653:26:13","typeName":{"id":1973,"name":"address","nodeType":"ElementaryTypeName","src":"671:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"body":{"id":1996,"nodeType":"Block","src":"755:97:13","statements":[{"expression":{"arguments":[{"id":1985,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1977,"src":"781:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":1988,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1977,"src":"811:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":1989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1391,"src":"811:14:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"811:23:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":1991,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1979,"src":"836:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1992,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1981,"src":"840:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1986,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"788:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"788:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":1993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"788:58:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1984,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"761:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":1994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"761:86:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1995,"nodeType":"ExpressionStatement","src":"761:86:13"}]},"id":1997,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"692:12:13","nodeType":"FunctionDefinition","parameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1977,"mutability":"mutable","name":"token","nameLocation":"712:5:13","nodeType":"VariableDeclaration","scope":1997,"src":"705:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":1976,"nodeType":"UserDefinedTypeName","pathNode":{"id":1975,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"705:6:13"},"referencedDeclaration":1442,"src":"705:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1979,"mutability":"mutable","name":"to","nameLocation":"727:2:13","nodeType":"VariableDeclaration","scope":1997,"src":"719:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1978,"name":"address","nodeType":"ElementaryTypeName","src":"719:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1981,"mutability":"mutable","name":"value","nameLocation":"739:5:13","nodeType":"VariableDeclaration","scope":1997,"src":"731:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1980,"name":"uint256","nodeType":"ElementaryTypeName","src":"731:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"704:41:13"},"returnParameters":{"id":1983,"nodeType":"ParameterList","parameters":[],"src":"755:0:13"},"scope":2190,"src":"683:169:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2022,"nodeType":"Block","src":"946:125:13","statements":[{"expression":{"arguments":[{"id":2010,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2000,"src":"979:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":2013,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2000,"src":"1015:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1423,"src":"1015:18:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1015:27:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2016,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2002,"src":"1044:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2017,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2004,"src":"1050:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2018,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2006,"src":"1054:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2011,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"992:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"992:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"992:68:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2009,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"952:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":2020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"952:114:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2021,"nodeType":"ExpressionStatement","src":"952:114:13"}]},"id":2023,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"865:16:13","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2000,"mutability":"mutable","name":"token","nameLocation":"889:5:13","nodeType":"VariableDeclaration","scope":2023,"src":"882:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":1999,"nodeType":"UserDefinedTypeName","pathNode":{"id":1998,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"882:6:13"},"referencedDeclaration":1442,"src":"882:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2002,"mutability":"mutable","name":"from","nameLocation":"904:4:13","nodeType":"VariableDeclaration","scope":2023,"src":"896:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2001,"name":"address","nodeType":"ElementaryTypeName","src":"896:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2004,"mutability":"mutable","name":"to","nameLocation":"918:2:13","nodeType":"VariableDeclaration","scope":2023,"src":"910:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2003,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2006,"mutability":"mutable","name":"value","nameLocation":"930:5:13","nodeType":"VariableDeclaration","scope":2023,"src":"922:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2005,"name":"uint256","nodeType":"ElementaryTypeName","src":"922:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"881:55:13"},"returnParameters":{"id":2008,"nodeType":"ParameterList","parameters":[],"src":"946:0:13"},"scope":2190,"src":"856:215:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2066,"nodeType":"Block","src":"1391:459:13","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2035,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2031,"src":"1618:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1627:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1618:10:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2038,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1617:12:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":2043,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1658:4:13","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}],"id":2042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1650:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2041,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:13","typeDescriptions":{}}},"id":2044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1650:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2045,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2029,"src":"1665:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2039,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"1634:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"1634:15:13","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1634:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1677:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1634:44:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2049,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1633:46:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1617:62:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365","id":2051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1687:56:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""},"value":"SafeERC20: approve from non-zero to non-zero allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""}],"id":2034,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1602:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1602:147:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2053,"nodeType":"ExpressionStatement","src":"1602:147:13"},{"expression":{"arguments":[{"id":2055,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"1775:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":2058,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"1805:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"1805:13:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1805:22:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2061,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2029,"src":"1829:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2062,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2031,"src":"1838:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2056,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1782:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1782:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1782:62:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2054,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"1755:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":2064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1755:90:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2065,"nodeType":"ExpressionStatement","src":"1755:90:13"}]},"documentation":{"id":2024,"nodeType":"StructuredDocumentation","src":"1075:237:13","text":" @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."},"id":2067,"implemented":true,"kind":"function","modifiers":[],"name":"safeApprove","nameLocation":"1324:11:13","nodeType":"FunctionDefinition","parameters":{"id":2032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2027,"mutability":"mutable","name":"token","nameLocation":"1343:5:13","nodeType":"VariableDeclaration","scope":2067,"src":"1336:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":2026,"nodeType":"UserDefinedTypeName","pathNode":{"id":2025,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1336:6:13"},"referencedDeclaration":1442,"src":"1336:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2029,"mutability":"mutable","name":"spender","nameLocation":"1358:7:13","nodeType":"VariableDeclaration","scope":2067,"src":"1350:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2028,"name":"address","nodeType":"ElementaryTypeName","src":"1350:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2031,"mutability":"mutable","name":"value","nameLocation":"1375:5:13","nodeType":"VariableDeclaration","scope":2067,"src":"1367:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2030,"name":"uint256","nodeType":"ElementaryTypeName","src":"1367:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1335:46:13"},"returnParameters":{"id":2033,"nodeType":"ParameterList","parameters":[],"src":"1391:0:13"},"scope":2190,"src":"1315:535:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2102,"nodeType":"Block","src":"1940:202:13","statements":[{"assignments":[2078],"declarations":[{"constant":false,"id":2078,"mutability":"mutable","name":"newAllowance","nameLocation":"1954:12:13","nodeType":"VariableDeclaration","scope":2102,"src":"1946:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2077,"name":"uint256","nodeType":"ElementaryTypeName","src":"1946:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2089,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":2083,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1993:4:13","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}],"id":2082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1985:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2081,"name":"address","nodeType":"ElementaryTypeName","src":"1985:7:13","typeDescriptions":{}}},"id":2084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1985:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2085,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2072,"src":"2000:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2079,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2070,"src":"1969:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"1969:15:13","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1969:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2087,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2074,"src":"2011:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1969:47:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1946:70:13"},{"expression":{"arguments":[{"id":2091,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2070,"src":"2049:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":2094,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2070,"src":"2085:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2085:13:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2085:22:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2097,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2072,"src":"2109:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2098,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2078,"src":"2118:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2092,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2062:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2062:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2062:69:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2090,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"2022:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":2100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2022:115:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2101,"nodeType":"ExpressionStatement","src":"2022:115:13"}]},"id":2103,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"1863:21:13","nodeType":"FunctionDefinition","parameters":{"id":2075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2070,"mutability":"mutable","name":"token","nameLocation":"1892:5:13","nodeType":"VariableDeclaration","scope":2103,"src":"1885:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":2069,"nodeType":"UserDefinedTypeName","pathNode":{"id":2068,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1885:6:13"},"referencedDeclaration":1442,"src":"1885:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2072,"mutability":"mutable","name":"spender","nameLocation":"1907:7:13","nodeType":"VariableDeclaration","scope":2103,"src":"1899:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2071,"name":"address","nodeType":"ElementaryTypeName","src":"1899:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2074,"mutability":"mutable","name":"value","nameLocation":"1924:5:13","nodeType":"VariableDeclaration","scope":2103,"src":"1916:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2073,"name":"uint256","nodeType":"ElementaryTypeName","src":"1916:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1884:46:13"},"returnParameters":{"id":2076,"nodeType":"ParameterList","parameters":[],"src":"1940:0:13"},"scope":2190,"src":"1854:288:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2150,"nodeType":"Block","src":"2232:360:13","statements":[{"id":2149,"nodeType":"UncheckedBlock","src":"2238:350:13","statements":[{"assignments":[2114],"declarations":[{"constant":false,"id":2114,"mutability":"mutable","name":"oldAllowance","nameLocation":"2264:12:13","nodeType":"VariableDeclaration","scope":2149,"src":"2256:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2113,"name":"uint256","nodeType":"ElementaryTypeName","src":"2256:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2123,"initialValue":{"arguments":[{"arguments":[{"id":2119,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2303:4:13","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}],"id":2118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2295:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2117,"name":"address","nodeType":"ElementaryTypeName","src":"2295:7:13","typeDescriptions":{}}},"id":2120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2295:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2121,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2108,"src":"2310:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2115,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2106,"src":"2279:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"2279:15:13","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2279:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2256:62:13"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2125,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2114,"src":"2334:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2126,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2110,"src":"2350:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2334:21:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":2128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2357:43:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""},"value":"SafeERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""}],"id":2124,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2326:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2326:75:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2130,"nodeType":"ExpressionStatement","src":"2326:75:13"},{"assignments":[2132],"declarations":[{"constant":false,"id":2132,"mutability":"mutable","name":"newAllowance","nameLocation":"2417:12:13","nodeType":"VariableDeclaration","scope":2149,"src":"2409:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2131,"name":"uint256","nodeType":"ElementaryTypeName","src":"2409:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2136,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2133,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2114,"src":"2432:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2134,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2110,"src":"2447:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2432:20:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2409:43:13"},{"expression":{"arguments":[{"id":2138,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2106,"src":"2489:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":2141,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2106,"src":"2527:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2527:13:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2527:22:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2144,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2108,"src":"2551:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2145,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2132,"src":"2560:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2139,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2504:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2504:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2504:69:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2137,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"2460:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":2147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2460:121:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2148,"nodeType":"ExpressionStatement","src":"2460:121:13"}]}]},"id":2151,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2155:21:13","nodeType":"FunctionDefinition","parameters":{"id":2111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2106,"mutability":"mutable","name":"token","nameLocation":"2184:5:13","nodeType":"VariableDeclaration","scope":2151,"src":"2177:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":2105,"nodeType":"UserDefinedTypeName","pathNode":{"id":2104,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"2177:6:13"},"referencedDeclaration":1442,"src":"2177:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2108,"mutability":"mutable","name":"spender","nameLocation":"2199:7:13","nodeType":"VariableDeclaration","scope":2151,"src":"2191:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2107,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2110,"mutability":"mutable","name":"value","nameLocation":"2216:5:13","nodeType":"VariableDeclaration","scope":2151,"src":"2208:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2208:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2176:46:13"},"returnParameters":{"id":2112,"nodeType":"ParameterList","parameters":[],"src":"2232:0:13"},"scope":2190,"src":"2146:446:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2188,"nodeType":"Block","src":"3031:598:13","statements":[{"assignments":[2161],"declarations":[{"constant":false,"id":2161,"mutability":"mutable","name":"returndata","nameLocation":"3377:10:13","nodeType":"VariableDeclaration","scope":2188,"src":"3364:23:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2160,"name":"bytes","nodeType":"ElementaryTypeName","src":"3364:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2170,"initialValue":{"arguments":[{"id":2167,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2157,"src":"3418:4:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564","id":2168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3424:34:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""},"value":"SafeERC20: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""}],"expression":{"arguments":[{"id":2164,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2155,"src":"3398:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":2163,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3390:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2162,"name":"address","nodeType":"ElementaryTypeName","src":"3390:7:13","typeDescriptions":{}}},"id":2165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3390:14:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":516,"src":"3390:27:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":2169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3390:69:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3364:95:13"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2171,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2161,"src":"3469:10:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3469:17:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3489:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3469:21:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2187,"nodeType":"IfStatement","src":"3465:160:13","trueBody":{"id":2186,"nodeType":"Block","src":"3492:133:13","statements":[{"expression":{"arguments":[{"arguments":[{"id":2178,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2161,"src":"3552:10:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3565:4:13","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":2179,"name":"bool","nodeType":"ElementaryTypeName","src":"3565:4:13","typeDescriptions":{}}}],"id":2181,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3564:6:13","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":2176,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3541:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"3541:10:13","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3541:30:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564","id":2183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3573:44:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""},"value":"SafeERC20: ERC20 operation did not succeed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""}],"id":2175,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3533:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3533:85:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2185,"nodeType":"ExpressionStatement","src":"3533:85:13"}]}}]},"documentation":{"id":2152,"nodeType":"StructuredDocumentation","src":"2596:362:13","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":2189,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"2970:19:13","nodeType":"FunctionDefinition","parameters":{"id":2158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2155,"mutability":"mutable","name":"token","nameLocation":"2997:5:13","nodeType":"VariableDeclaration","scope":2189,"src":"2990:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":2154,"nodeType":"UserDefinedTypeName","pathNode":{"id":2153,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"2990:6:13"},"referencedDeclaration":1442,"src":"2990:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2157,"mutability":"mutable","name":"data","nameLocation":"3017:4:13","nodeType":"VariableDeclaration","scope":2189,"src":"3004:17:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2156,"name":"bytes","nodeType":"ElementaryTypeName","src":"3004:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2989:33:13"},"returnParameters":{"id":2159,"nodeType":"ParameterList","parameters":[],"src":"3031:0:13"},"scope":2190,"src":"2961:668:13","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":2191,"src":"631:3000:13","usedErrors":[]}],"src":"100:3532:13"},"id":13},"contracts/dependencies/openzeppelin/contracts/SafeMath.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeMath.sol","exportedSymbols":{"SafeMath":[2310]},"id":2311,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2192,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:14"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeMath","contractDependencies":[],"contractKind":"library","documentation":{"id":2193,"nodeType":"StructuredDocumentation","src":"62:178:14","text":"@title Optimized overflow and underflow safe math operations\n @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost"},"fullyImplemented":true,"id":2310,"linearizedBaseContracts":[2310],"name":"SafeMath","nameLocation":"248:8:14","nodeType":"ContractDefinition","nodes":[{"body":{"id":2215,"nodeType":"Block","src":"479:60:14","statements":[{"id":2214,"nodeType":"UncheckedBlock","src":"485:50:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":2208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2204,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2201,"src":"512:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2205,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"516:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2206,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2198,"src":"520:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"516:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"512:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2209,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"511:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2210,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"526:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"511:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2203,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"503:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"503:25:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2213,"nodeType":"ExpressionStatement","src":"503:25:14"}]}]},"documentation":{"id":2194,"nodeType":"StructuredDocumentation","src":"261:146:14","text":"@notice Returns x + y, reverts if sum overflows uint256\n @param x The augend\n @param y The addend\n @return z The sum of x and y"},"id":2216,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"419:3:14","nodeType":"FunctionDefinition","parameters":{"id":2199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2196,"mutability":"mutable","name":"x","nameLocation":"431:1:14","nodeType":"VariableDeclaration","scope":2216,"src":"423:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2195,"name":"uint256","nodeType":"ElementaryTypeName","src":"423:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2198,"mutability":"mutable","name":"y","nameLocation":"442:1:14","nodeType":"VariableDeclaration","scope":2216,"src":"434:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2197,"name":"uint256","nodeType":"ElementaryTypeName","src":"434:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"422:22:14"},"returnParameters":{"id":2202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"z","nameLocation":"476:1:14","nodeType":"VariableDeclaration","scope":2216,"src":"468:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2200,"name":"uint256","nodeType":"ElementaryTypeName","src":"468:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"467:11:14"},"scope":2310,"src":"410:129:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2238,"nodeType":"Block","src":"762:60:14","statements":[{"id":2237,"nodeType":"UncheckedBlock","src":"768:50:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":2231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2227,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2224,"src":"795:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2228,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"799:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2229,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"803:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"799:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"795:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"794:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":2233,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"809:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"794:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2226,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"786:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"786:25:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2236,"nodeType":"ExpressionStatement","src":"786:25:14"}]}]},"documentation":{"id":2217,"nodeType":"StructuredDocumentation","src":"543:147:14","text":"@notice Returns x - y, reverts if underflows\n @param x The minuend\n @param y The subtrahend\n @return z The difference of x and y"},"id":2239,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nameLocation":"702:3:14","nodeType":"FunctionDefinition","parameters":{"id":2222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2219,"mutability":"mutable","name":"x","nameLocation":"714:1:14","nodeType":"VariableDeclaration","scope":2239,"src":"706:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2218,"name":"uint256","nodeType":"ElementaryTypeName","src":"706:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2221,"mutability":"mutable","name":"y","nameLocation":"725:1:14","nodeType":"VariableDeclaration","scope":2239,"src":"717:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2220,"name":"uint256","nodeType":"ElementaryTypeName","src":"717:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"705:22:14"},"returnParameters":{"id":2225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2224,"mutability":"mutable","name":"z","nameLocation":"759:1:14","nodeType":"VariableDeclaration","scope":2239,"src":"751:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2223,"name":"uint256","nodeType":"ElementaryTypeName","src":"751:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"750:11:14"},"scope":2310,"src":"693:129:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2264,"nodeType":"Block","src":"1103:69:14","statements":[{"id":2263,"nodeType":"UncheckedBlock","src":"1109:59:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":2256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2252,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2249,"src":"1136:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2253,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2242,"src":"1140:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2254,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2244,"src":"1144:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1140:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1136:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2257,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1135:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":2258,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2242,"src":"1150:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1135:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2260,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2246,"src":"1153:7:14","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2251,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1127:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1127:34:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2262,"nodeType":"ExpressionStatement","src":"1127:34:14"}]}]},"documentation":{"id":2240,"nodeType":"StructuredDocumentation","src":"826:182:14","text":"@notice Returns x - y, reverts if underflows\n @param x The minuend\n @param y The subtrahend\n @param message The error msg\n @return z The difference of x and y"},"id":2265,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nameLocation":"1020:3:14","nodeType":"FunctionDefinition","parameters":{"id":2247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2242,"mutability":"mutable","name":"x","nameLocation":"1032:1:14","nodeType":"VariableDeclaration","scope":2265,"src":"1024:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2241,"name":"uint256","nodeType":"ElementaryTypeName","src":"1024:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2244,"mutability":"mutable","name":"y","nameLocation":"1043:1:14","nodeType":"VariableDeclaration","scope":2265,"src":"1035:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2243,"name":"uint256","nodeType":"ElementaryTypeName","src":"1035:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2246,"mutability":"mutable","name":"message","nameLocation":"1060:7:14","nodeType":"VariableDeclaration","scope":2265,"src":"1046:21:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2245,"name":"string","nodeType":"ElementaryTypeName","src":"1046:6:14","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1023:45:14"},"returnParameters":{"id":2250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2249,"mutability":"mutable","name":"z","nameLocation":"1100:1:14","nodeType":"VariableDeclaration","scope":2265,"src":"1092:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2248,"name":"uint256","nodeType":"ElementaryTypeName","src":"1092:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1091:11:14"},"scope":2310,"src":"1011:161:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2293,"nodeType":"Block","src":"1396:74:14","statements":[{"id":2292,"nodeType":"UncheckedBlock","src":"1402:64:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2276,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2268,"src":"1428:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1433:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1428:6:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":2283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2279,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2273,"src":"1439:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2280,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2268,"src":"1443:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2281,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2270,"src":"1447:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1443:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1439:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2284,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1438:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2285,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2268,"src":"1452:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1438:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2287,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2270,"src":"1457:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1438:20:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1428:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2275,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1420:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1420:39:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2291,"nodeType":"ExpressionStatement","src":"1420:39:14"}]}]},"documentation":{"id":2266,"nodeType":"StructuredDocumentation","src":"1176:148:14","text":"@notice Returns x * y, reverts if overflows\n @param x The multiplicand\n @param y The multiplier\n @return z The product of x and y"},"id":2294,"implemented":true,"kind":"function","modifiers":[],"name":"mul","nameLocation":"1336:3:14","nodeType":"FunctionDefinition","parameters":{"id":2271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2268,"mutability":"mutable","name":"x","nameLocation":"1348:1:14","nodeType":"VariableDeclaration","scope":2294,"src":"1340:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2267,"name":"uint256","nodeType":"ElementaryTypeName","src":"1340:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2270,"mutability":"mutable","name":"y","nameLocation":"1359:1:14","nodeType":"VariableDeclaration","scope":2294,"src":"1351:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2269,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1339:22:14"},"returnParameters":{"id":2274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2273,"mutability":"mutable","name":"z","nameLocation":"1393:1:14","nodeType":"VariableDeclaration","scope":2294,"src":"1385:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2272,"name":"uint256","nodeType":"ElementaryTypeName","src":"1385:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1384:11:14"},"scope":2310,"src":"1327:143:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2308,"nodeType":"Block","src":"1747:23:14","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2304,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2297,"src":"1760:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2305,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2299,"src":"1764:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1760:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2303,"id":2307,"nodeType":"Return","src":"1753:12:14"}]},"documentation":{"id":2295,"nodeType":"StructuredDocumentation","src":"1474:201:14","text":"@notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\n @param x The numerator\n @param y The denominator\n @return z The product of x and y"},"id":2309,"implemented":true,"kind":"function","modifiers":[],"name":"div","nameLocation":"1687:3:14","nodeType":"FunctionDefinition","parameters":{"id":2300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2297,"mutability":"mutable","name":"x","nameLocation":"1699:1:14","nodeType":"VariableDeclaration","scope":2309,"src":"1691:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1691:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2299,"mutability":"mutable","name":"y","nameLocation":"1710:1:14","nodeType":"VariableDeclaration","scope":2309,"src":"1702:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2298,"name":"uint256","nodeType":"ElementaryTypeName","src":"1702:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1690:22:14"},"returnParameters":{"id":2303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2302,"mutability":"mutable","name":"z","nameLocation":"1744:1:14","nodeType":"VariableDeclaration","scope":2309,"src":"1736:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2301,"name":"uint256","nodeType":"ElementaryTypeName","src":"1736:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1735:11:14"},"scope":2310,"src":"1678:92:14","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2311,"src":"240:1532:14","usedErrors":[]}],"src":"37:1736:14"},"id":14},"contracts/dependencies/openzeppelin/contracts/Strings.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Strings.sol","exportedSymbols":{"Strings":[2513]},"id":2514,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2312,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:15"},{"abstract":false,"baseContracts":[],"canonicalName":"Strings","contractDependencies":[],"contractKind":"library","documentation":{"id":2313,"nodeType":"StructuredDocumentation","src":"58:34:15","text":" @dev String operations."},"fullyImplemented":true,"id":2513,"linearizedBaseContracts":[2513],"name":"Strings","nameLocation":"101:7:15","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":2316,"mutability":"constant","name":"_HEX_SYMBOLS","nameLocation":"138:12:15","nodeType":"VariableDeclaration","scope":2513,"src":"113:58:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":2314,"name":"bytes16","nodeType":"ElementaryTypeName","src":"113:7:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"value":{"hexValue":"30313233343536373839616263646566","id":2315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"153:18:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f","typeString":"literal_string \"0123456789abcdef\""},"value":"0123456789abcdef"},"visibility":"private"},{"body":{"id":2394,"nodeType":"Block","src":"336:546:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2324,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"526:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"535:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"526:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2330,"nodeType":"IfStatement","src":"522:41:15","trueBody":{"id":2329,"nodeType":"Block","src":"538:25:15","statements":[{"expression":{"hexValue":"30","id":2327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"553:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"functionReturnParameters":2323,"id":2328,"nodeType":"Return","src":"546:10:15"}]}},{"assignments":[2332],"declarations":[{"constant":false,"id":2332,"mutability":"mutable","name":"temp","nameLocation":"576:4:15","nodeType":"VariableDeclaration","scope":2394,"src":"568:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2331,"name":"uint256","nodeType":"ElementaryTypeName","src":"568:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2334,"initialValue":{"id":2333,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"583:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"568:20:15"},{"assignments":[2336],"declarations":[{"constant":false,"id":2336,"mutability":"mutable","name":"digits","nameLocation":"602:6:15","nodeType":"VariableDeclaration","scope":2394,"src":"594:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2335,"name":"uint256","nodeType":"ElementaryTypeName","src":"594:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2337,"nodeType":"VariableDeclarationStatement","src":"594:14:15"},{"body":{"id":2348,"nodeType":"Block","src":"632:41:15","statements":[{"expression":{"id":2342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"640:8:15","subExpression":{"id":2341,"name":"digits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"640:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2343,"nodeType":"ExpressionStatement","src":"640:8:15"},{"expression":{"id":2346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2344,"name":"temp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"656:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":2345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"664:2:15","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"656:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2347,"nodeType":"ExpressionStatement","src":"656:10:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2338,"name":"temp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"621:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"629:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"621:9:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2349,"nodeType":"WhileStatement","src":"614:59:15"},{"assignments":[2351],"declarations":[{"constant":false,"id":2351,"mutability":"mutable","name":"buffer","nameLocation":"691:6:15","nodeType":"VariableDeclaration","scope":2394,"src":"678:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2350,"name":"bytes","nodeType":"ElementaryTypeName","src":"678:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2356,"initialValue":{"arguments":[{"id":2354,"name":"digits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"710:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"700:9:15","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":2352,"name":"bytes","nodeType":"ElementaryTypeName","src":"704:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":2355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"700:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"678:39:15"},{"body":{"id":2387,"nodeType":"Block","src":"742:109:15","statements":[{"expression":{"id":2362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2360,"name":"digits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"750:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"31","id":2361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"760:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"750:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2363,"nodeType":"ExpressionStatement","src":"750:11:15"},{"expression":{"id":2381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2364,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"769:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2366,"indexExpression":{"id":2365,"name":"digits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"776:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"769:14:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3438","id":2371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"799:2:15","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2374,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"812:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"3130","id":2375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"820:2:15","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"812:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2373,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"804:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2372,"name":"uint256","nodeType":"ElementaryTypeName","src":"804:7:15","typeDescriptions":{}}},"id":2377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"804:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"799:24:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"793:5:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":2369,"name":"uint8","nodeType":"ElementaryTypeName","src":"793:5:15","typeDescriptions":{}}},"id":2379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"793:31:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":2368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"786:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":2367,"name":"bytes1","nodeType":"ElementaryTypeName","src":"786:6:15","typeDescriptions":{}}},"id":2380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"786:39:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"769:56:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":2382,"nodeType":"ExpressionStatement","src":"769:56:15"},{"expression":{"id":2385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2383,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"833:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":2384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"842:2:15","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"833:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2386,"nodeType":"ExpressionStatement","src":"833:11:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2357,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"730:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"739:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"730:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2388,"nodeType":"WhileStatement","src":"723:128:15"},{"expression":{"arguments":[{"id":2391,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"870:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"863:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":2389,"name":"string","nodeType":"ElementaryTypeName","src":"863:6:15","typeDescriptions":{}}},"id":2392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"863:14:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":2323,"id":2393,"nodeType":"Return","src":"856:21:15"}]},"documentation":{"id":2317,"nodeType":"StructuredDocumentation","src":"176:86:15","text":" @dev Converts a `uint256` to its ASCII `string` decimal representation."},"id":2395,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"274:8:15","nodeType":"FunctionDefinition","parameters":{"id":2320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2319,"mutability":"mutable","name":"value","nameLocation":"291:5:15","nodeType":"VariableDeclaration","scope":2395,"src":"283:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2318,"name":"uint256","nodeType":"ElementaryTypeName","src":"283:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"282:15:15"},"returnParameters":{"id":2323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2322,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2395,"src":"321:13:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2321,"name":"string","nodeType":"ElementaryTypeName","src":"321:6:15","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"320:15:15"},"scope":2513,"src":"265:617:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2435,"nodeType":"Block","src":"1053:207:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2403,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"1063:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1072:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1063:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2409,"nodeType":"IfStatement","src":"1059:44:15","trueBody":{"id":2408,"nodeType":"Block","src":"1075:28:15","statements":[{"expression":{"hexValue":"30783030","id":2406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1090:6:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_27489e20a0060b723a1748bdff5e44570ee9fae64141728105692eac6031e8a4","typeString":"literal_string \"0x00\""},"value":"0x00"},"functionReturnParameters":2402,"id":2407,"nodeType":"Return","src":"1083:13:15"}]}},{"assignments":[2411],"declarations":[{"constant":false,"id":2411,"mutability":"mutable","name":"temp","nameLocation":"1116:4:15","nodeType":"VariableDeclaration","scope":2435,"src":"1108:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2410,"name":"uint256","nodeType":"ElementaryTypeName","src":"1108:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2413,"initialValue":{"id":2412,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"1123:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1108:20:15"},{"assignments":[2415],"declarations":[{"constant":false,"id":2415,"mutability":"mutable","name":"length","nameLocation":"1142:6:15","nodeType":"VariableDeclaration","scope":2435,"src":"1134:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2414,"name":"uint256","nodeType":"ElementaryTypeName","src":"1134:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2417,"initialValue":{"hexValue":"30","id":2416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1151:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1134:18:15"},{"body":{"id":2428,"nodeType":"Block","src":"1176:41:15","statements":[{"expression":{"id":2422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1184:8:15","subExpression":{"id":2421,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"1184:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2423,"nodeType":"ExpressionStatement","src":"1184:8:15"},{"expression":{"id":2426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2424,"name":"temp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"1200:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":2425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1209:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"1200:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2427,"nodeType":"ExpressionStatement","src":"1200:10:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2418,"name":"temp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"1165:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1173:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1165:9:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2429,"nodeType":"WhileStatement","src":"1158:59:15"},{"expression":{"arguments":[{"id":2431,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"1241:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2432,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"1248:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2430,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[2436,2512],"referencedDeclaration":2512,"src":"1229:11:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":2433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1229:26:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":2402,"id":2434,"nodeType":"Return","src":"1222:33:15"}]},"documentation":{"id":2396,"nodeType":"StructuredDocumentation","src":"886:90:15","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."},"id":2436,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"988:11:15","nodeType":"FunctionDefinition","parameters":{"id":2399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2398,"mutability":"mutable","name":"value","nameLocation":"1008:5:15","nodeType":"VariableDeclaration","scope":2436,"src":"1000:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2397,"name":"uint256","nodeType":"ElementaryTypeName","src":"1000:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"999:15:15"},"returnParameters":{"id":2402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2436,"src":"1038:13:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2400,"name":"string","nodeType":"ElementaryTypeName","src":"1038:6:15","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1037:15:15"},"scope":2513,"src":"979:281:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2511,"nodeType":"Block","src":"1465:309:15","statements":[{"assignments":[2447],"declarations":[{"constant":false,"id":2447,"mutability":"mutable","name":"buffer","nameLocation":"1484:6:15","nodeType":"VariableDeclaration","scope":2511,"src":"1471:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2446,"name":"bytes","nodeType":"ElementaryTypeName","src":"1471:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2456,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1503:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2451,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"1507:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1503:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":2453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1516:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"1503:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1493:9:15","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":2448,"name":"bytes","nodeType":"ElementaryTypeName","src":"1497:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1493:25:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1471:47:15"},{"expression":{"id":2461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2457,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"1524:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2459,"indexExpression":{"hexValue":"30","id":2458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1531:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1524:9:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":2460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1536:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"1524:15:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":2462,"nodeType":"ExpressionStatement","src":"1524:15:15"},{"expression":{"id":2467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2463,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"1545:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2465,"indexExpression":{"hexValue":"31","id":2464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1552:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1545:9:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":2466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1557:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"1545:15:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":2468,"nodeType":"ExpressionStatement","src":"1545:15:15"},{"body":{"id":2497,"nodeType":"Block","src":"1611:71:15","statements":[{"expression":{"id":2491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2483,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"1619:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2485,"indexExpression":{"id":2484,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"1626:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1619:9:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2486,"name":"_HEX_SYMBOLS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2316,"src":"1631:12:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":2490,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2487,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2439,"src":"1644:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":2488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1652:3:15","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"1644:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1631:25:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"1619:37:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":2492,"nodeType":"ExpressionStatement","src":"1619:37:15"},{"expression":{"id":2495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2493,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2439,"src":"1664:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":2494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1674:1:15","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1664:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2496,"nodeType":"ExpressionStatement","src":"1664:11:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2477,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"1599:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":2478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1603:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1599:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2498,"initializationExpression":{"assignments":[2470],"declarations":[{"constant":false,"id":2470,"mutability":"mutable","name":"i","nameLocation":"1579:1:15","nodeType":"VariableDeclaration","scope":2498,"src":"1571:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2469,"name":"uint256","nodeType":"ElementaryTypeName","src":"1571:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2476,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1583:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2472,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"1587:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1583:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1596:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1583:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1571:26:15"},"loopExpression":{"expression":{"id":2481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"1606:3:15","subExpression":{"id":2480,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"1608:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2482,"nodeType":"ExpressionStatement","src":"1606:3:15"},"nodeType":"ForStatement","src":"1566:116:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2500,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2439,"src":"1695:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1704:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1695:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"537472696e67733a20686578206c656e67746820696e73756666696369656e74","id":2503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1707:34:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2","typeString":"literal_string \"Strings: hex length insufficient\""},"value":"Strings: hex length insufficient"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2","typeString":"literal_string \"Strings: hex length insufficient\""}],"id":2499,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1687:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1687:55:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2505,"nodeType":"ExpressionStatement","src":"1687:55:15"},{"expression":{"arguments":[{"id":2508,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"1762:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1755:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":2506,"name":"string","nodeType":"ElementaryTypeName","src":"1755:6:15","typeDescriptions":{}}},"id":2509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1755:14:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":2445,"id":2510,"nodeType":"Return","src":"1748:21:15"}]},"documentation":{"id":2437,"nodeType":"StructuredDocumentation","src":"1264:108:15","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."},"id":2512,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"1384:11:15","nodeType":"FunctionDefinition","parameters":{"id":2442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2439,"mutability":"mutable","name":"value","nameLocation":"1404:5:15","nodeType":"VariableDeclaration","scope":2512,"src":"1396:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2438,"name":"uint256","nodeType":"ElementaryTypeName","src":"1396:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2441,"mutability":"mutable","name":"length","nameLocation":"1419:6:15","nodeType":"VariableDeclaration","scope":2512,"src":"1411:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2440,"name":"uint256","nodeType":"ElementaryTypeName","src":"1411:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1395:31:15"},"returnParameters":{"id":2445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2512,"src":"1450:13:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2443,"name":"string","nodeType":"ElementaryTypeName","src":"1450:6:15","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1449:15:15"},"scope":2513,"src":"1375:399:15","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2514,"src":"93:1683:15","usedErrors":[]}],"src":"33:1744:15"},"id":15},"contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"AdminUpgradeabilityProxy":[2570],"BaseAdminUpgradeabilityProxy":[2740],"BaseUpgradeabilityProxy":[2805],"Proxy":[3051],"UpgradeabilityProxy":[3104]},"id":2571,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2515,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:16"},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol","file":"./BaseAdminUpgradeabilityProxy.sol","id":2516,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2571,"sourceUnit":2741,"src":"62:44:16","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2518,"name":"BaseAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2740,"src":"319:28:16"},"id":2519,"nodeType":"InheritanceSpecifier","src":"319:28:16"},{"baseName":{"id":2520,"name":"UpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":3104,"src":"349:19:16"},"id":2521,"nodeType":"InheritanceSpecifier","src":"349:19:16"}],"canonicalName":"AdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2517,"nodeType":"StructuredDocumentation","src":"108:173:16","text":" @title AdminUpgradeabilityProxy\n @dev Extends from BaseAdminUpgradeabilityProxy with a constructor for\n initializing the implementation, admin, and init data."},"fullyImplemented":true,"id":2570,"linearizedBaseContracts":[2570,3104,2740,2805,3051],"name":"AdminUpgradeabilityProxy","nameLocation":"291:24:16","nodeType":"ContractDefinition","nodes":[{"body":{"id":2555,"nodeType":"Block","src":"1068:110:16","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2548,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2536,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2587,"src":"1081:10:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e61646d696e","id":2542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1121:21:16","typeDescriptions":{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""},"value":"eip1967.proxy.admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""}],"id":2541,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1111:9:16","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1111:32:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2540,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1103:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2539,"name":"uint256","nodeType":"ElementaryTypeName","src":"1103:7:16","typeDescriptions":{}}},"id":2544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1103:41:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1147:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1103:45:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1095:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1095:7:16","typeDescriptions":{}}},"id":2547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1095:54:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1081:68:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2535,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"1074:6:16","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1074:76:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2550,"nodeType":"ExpressionStatement","src":"1074:76:16"},{"expression":{"arguments":[{"id":2552,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2526,"src":"1166:6:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2551,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2719,"src":"1156:9:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1156:17:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2554,"nodeType":"ExpressionStatement","src":"1156:17:16"}]},"documentation":{"id":2522,"nodeType":"StructuredDocumentation","src":"373:569:16","text":" Contract constructor.\n @param _logic address of the initial implementation.\n @param _admin Address of the proxy administrator.\n @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n This parameter is optional, if no data is given the initialization call to proxied contract will be skipped."},"id":2556,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2531,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2524,"src":"1053:6:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2532,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2528,"src":"1061:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":2533,"kind":"baseConstructorSpecifier","modifierName":{"id":2530,"name":"UpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":3104,"src":"1033:19:16"},"nodeType":"ModifierInvocation","src":"1033:34:16"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2524,"mutability":"mutable","name":"_logic","nameLocation":"970:6:16","nodeType":"VariableDeclaration","scope":2556,"src":"962:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2523,"name":"address","nodeType":"ElementaryTypeName","src":"962:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2526,"mutability":"mutable","name":"_admin","nameLocation":"990:6:16","nodeType":"VariableDeclaration","scope":2556,"src":"982:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2525,"name":"address","nodeType":"ElementaryTypeName","src":"982:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2528,"mutability":"mutable","name":"_data","nameLocation":"1015:5:16","nodeType":"VariableDeclaration","scope":2556,"src":"1002:18:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2527,"name":"bytes","nodeType":"ElementaryTypeName","src":"1002:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"956:68:16"},"returnParameters":{"id":2534,"nodeType":"ParameterList","parameters":[],"src":"1068:0:16"},"scope":2570,"src":"945:233:16","stateMutability":"payable","virtual":false,"visibility":"public"},{"baseFunctions":[2739,3037],"body":{"id":2568,"nodeType":"Block","src":"1333:55:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2563,"name":"BaseAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2740,"src":"1339:28:16","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BaseAdminUpgradeabilityProxy_$2740_$","typeString":"type(contract BaseAdminUpgradeabilityProxy)"}},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":2739,"src":"1339:42:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1339:44:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2567,"nodeType":"ExpressionStatement","src":"1339:44:16"}]},"documentation":{"id":2557,"nodeType":"StructuredDocumentation","src":"1182:68:16","text":" @dev Only fall back when the sender is not the admin."},"id":2569,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"1262:13:16","nodeType":"FunctionDefinition","overrides":{"id":2561,"nodeType":"OverrideSpecifier","overrides":[{"id":2559,"name":"BaseAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2740,"src":"1296:28:16"},{"id":2560,"name":"Proxy","nodeType":"IdentifierPath","referencedDeclaration":3051,"src":"1326:5:16"}],"src":"1287:45:16"},"parameters":{"id":2558,"nodeType":"ParameterList","parameters":[],"src":"1275:2:16"},"returnParameters":{"id":2562,"nodeType":"ParameterList","parameters":[],"src":"1333:0:16"},"scope":2570,"src":"1253:135:16","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2571,"src":"282:1108:16","usedErrors":[]}],"src":"37:1354:16"},"id":16},"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseAdminUpgradeabilityProxy":[2740],"BaseUpgradeabilityProxy":[2805],"Proxy":[3051],"UpgradeabilityProxy":[3104]},"id":2741,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2572,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:17"},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol","file":"./UpgradeabilityProxy.sol","id":2573,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2741,"sourceUnit":3105,"src":"62:35:17","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2575,"name":"BaseUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2805,"src":"503:23:17"},"id":2576,"nodeType":"InheritanceSpecifier","src":"503:23:17"}],"canonicalName":"BaseAdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2574,"nodeType":"StructuredDocumentation","src":"99:362:17","text":" @title BaseAdminUpgradeabilityProxy\n @dev This contract combines an upgradeability proxy with an authorization\n mechanism for administrative tasks.\n All external functions in this contract must be guarded by the\n `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\n feature proposal that would enable this to be done automatically."},"fullyImplemented":true,"id":2740,"linearizedBaseContracts":[2740,2805,3051],"name":"BaseAdminUpgradeabilityProxy","nameLocation":"471:28:17","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2577,"nodeType":"StructuredDocumentation","src":"531:177:17","text":" @dev Emitted when the administration has been transferred.\n @param previousAdmin Address of the previous admin.\n @param newAdmin Address of the new admin."},"id":2583,"name":"AdminChanged","nameLocation":"717:12:17","nodeType":"EventDefinition","parameters":{"id":2582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2579,"indexed":false,"mutability":"mutable","name":"previousAdmin","nameLocation":"738:13:17","nodeType":"VariableDeclaration","scope":2583,"src":"730:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2578,"name":"address","nodeType":"ElementaryTypeName","src":"730:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2581,"indexed":false,"mutability":"mutable","name":"newAdmin","nameLocation":"761:8:17","nodeType":"VariableDeclaration","scope":2583,"src":"753:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2580,"name":"address","nodeType":"ElementaryTypeName","src":"753:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"729:41:17"},"src":"711:60:17"},{"constant":true,"documentation":{"id":2584,"nodeType":"StructuredDocumentation","src":"775:181:17","text":" @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."},"id":2587,"mutability":"constant","name":"ADMIN_SLOT","nameLocation":"985:10:17","nodeType":"VariableDeclaration","scope":2740,"src":"959:109:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2585,"name":"bytes32","nodeType":"ElementaryTypeName","src":"959:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":2586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1002:66:17","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"visibility":"internal"},{"body":{"id":2602,"nodeType":"Block","src":"1277:86:17","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2590,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1287:3:17","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1287:10:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2592,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2707,"src":"1301:6:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1301:8:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1287:22:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2600,"nodeType":"Block","src":"1333:26:17","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2597,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3050,"src":"1341:9:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1341:11:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2599,"nodeType":"ExpressionStatement","src":"1341:11:17"}]},"id":2601,"nodeType":"IfStatement","src":"1283:76:17","trueBody":{"id":2596,"nodeType":"Block","src":"1311:16:17","statements":[{"id":2595,"nodeType":"PlaceholderStatement","src":"1319:1:17"}]}}]},"documentation":{"id":2588,"nodeType":"StructuredDocumentation","src":"1073:182:17","text":" @dev Modifier to check whether the `msg.sender` is the admin.\n If it is, it will run the function. Otherwise, it will delegate the call\n to the implementation."},"id":2603,"name":"ifAdmin","nameLocation":"1267:7:17","nodeType":"ModifierDefinition","parameters":{"id":2589,"nodeType":"ParameterList","parameters":[],"src":"1274:2:17"},"src":"1258:105:17","virtual":false,"visibility":"internal"},{"body":{"id":2614,"nodeType":"Block","src":"1476:26:17","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2611,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2707,"src":"1489:6:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1489:8:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2610,"id":2613,"nodeType":"Return","src":"1482:15:17"}]},"documentation":{"id":2604,"nodeType":"StructuredDocumentation","src":"1367:54:17","text":" @return The address of the proxy admin."},"functionSelector":"f851a440","id":2615,"implemented":true,"kind":"function","modifiers":[{"id":2607,"kind":"modifierInvocation","modifierName":{"id":2606,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"1450:7:17"},"nodeType":"ModifierInvocation","src":"1450:7:17"}],"name":"admin","nameLocation":"1433:5:17","nodeType":"FunctionDefinition","parameters":{"id":2605,"nodeType":"ParameterList","parameters":[],"src":"1438:2:17"},"returnParameters":{"id":2610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2615,"src":"1467:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2608,"name":"address","nodeType":"ElementaryTypeName","src":"1467:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1466:9:17"},"scope":2740,"src":"1424:78:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2626,"nodeType":"Block","src":"1627:35:17","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2623,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[2769],"referencedDeclaration":2769,"src":"1640:15:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1640:17:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2622,"id":2625,"nodeType":"Return","src":"1633:24:17"}]},"documentation":{"id":2616,"nodeType":"StructuredDocumentation","src":"1506:57:17","text":" @return The address of the implementation."},"functionSelector":"5c60da1b","id":2627,"implemented":true,"kind":"function","modifiers":[{"id":2619,"kind":"modifierInvocation","modifierName":{"id":2618,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"1601:7:17"},"nodeType":"ModifierInvocation","src":"1601:7:17"}],"name":"implementation","nameLocation":"1575:14:17","nodeType":"FunctionDefinition","parameters":{"id":2617,"nodeType":"ParameterList","parameters":[],"src":"1589:2:17"},"returnParameters":{"id":2622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2627,"src":"1618:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2620,"name":"address","nodeType":"ElementaryTypeName","src":"1618:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1617:9:17"},"scope":2740,"src":"1566:96:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2655,"nodeType":"Block","src":"1894:168:17","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2636,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2630,"src":"1908:8:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1928:1:17","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":2638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1920:7:17","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2637,"name":"address","nodeType":"ElementaryTypeName","src":"1920:7:17","typeDescriptions":{}}},"id":2640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1920:10:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1908:22:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f2061646472657373","id":2642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1932:56:17","typeDescriptions":{"typeIdentifier":"t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00","typeString":"literal_string \"Cannot change the admin of a proxy to the zero address\""},"value":"Cannot change the admin of a proxy to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00","typeString":"literal_string \"Cannot change the admin of a proxy to the zero address\""}],"id":2635,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1900:7:17","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1900:89:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2644,"nodeType":"ExpressionStatement","src":"1900:89:17"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2646,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2707,"src":"2013:6:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2013:8:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2648,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2630,"src":"2023:8:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2645,"name":"AdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2583,"src":"2000:12:17","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2000:32:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2650,"nodeType":"EmitStatement","src":"1995:37:17"},{"expression":{"arguments":[{"id":2652,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2630,"src":"2048:8:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2651,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2719,"src":"2038:9:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2038:19:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2654,"nodeType":"ExpressionStatement","src":"2038:19:17"}]},"documentation":{"id":2628,"nodeType":"StructuredDocumentation","src":"1666:169:17","text":" @dev Changes the admin of the proxy.\n Only the current admin can call this function.\n @param newAdmin Address to transfer proxy administration to."},"functionSelector":"8f283970","id":2656,"implemented":true,"kind":"function","modifiers":[{"id":2633,"kind":"modifierInvocation","modifierName":{"id":2632,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"1886:7:17"},"nodeType":"ModifierInvocation","src":"1886:7:17"}],"name":"changeAdmin","nameLocation":"1847:11:17","nodeType":"FunctionDefinition","parameters":{"id":2631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2630,"mutability":"mutable","name":"newAdmin","nameLocation":"1867:8:17","nodeType":"VariableDeclaration","scope":2656,"src":"1859:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2629,"name":"address","nodeType":"ElementaryTypeName","src":"1859:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1858:18:17"},"returnParameters":{"id":2634,"nodeType":"ParameterList","parameters":[],"src":"1894:0:17"},"scope":2740,"src":"1838:224:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2668,"nodeType":"Block","src":"2309:40:17","statements":[{"expression":{"arguments":[{"id":2665,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2659,"src":"2326:17:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2664,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2784,"src":"2315:10:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2315:29:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2667,"nodeType":"ExpressionStatement","src":"2315:29:17"}]},"documentation":{"id":2657,"nodeType":"StructuredDocumentation","src":"2066:177:17","text":" @dev Upgrade the backing implementation of the proxy.\n Only the admin can call this function.\n @param newImplementation Address of the new implementation."},"functionSelector":"3659cfe6","id":2669,"implemented":true,"kind":"function","modifiers":[{"id":2662,"kind":"modifierInvocation","modifierName":{"id":2661,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"2301:7:17"},"nodeType":"ModifierInvocation","src":"2301:7:17"}],"name":"upgradeTo","nameLocation":"2255:9:17","nodeType":"FunctionDefinition","parameters":{"id":2660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2659,"mutability":"mutable","name":"newImplementation","nameLocation":"2273:17:17","nodeType":"VariableDeclaration","scope":2669,"src":"2265:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2658,"name":"address","nodeType":"ElementaryTypeName","src":"2265:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2264:27:17"},"returnParameters":{"id":2663,"nodeType":"ParameterList","parameters":[],"src":"2309:0:17"},"scope":2740,"src":"2246:103:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2694,"nodeType":"Block","src":"2977:123:17","statements":[{"expression":{"arguments":[{"id":2680,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"2994:17:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2679,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2784,"src":"2983:10:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2983:29:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2682,"nodeType":"ExpressionStatement","src":"2983:29:17"},{"assignments":[2684,null],"declarations":[{"constant":false,"id":2684,"mutability":"mutable","name":"success","nameLocation":"3024:7:17","nodeType":"VariableDeclaration","scope":2694,"src":"3019:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2683,"name":"bool","nodeType":"ElementaryTypeName","src":"3019:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2689,"initialValue":{"arguments":[{"id":2687,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2674,"src":"3068:4:17","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":2685,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"3037:17:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"3037:30:17","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":2688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3037:36:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3018:55:17"},{"expression":{"arguments":[{"id":2691,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2684,"src":"3087:7:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2690,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3079:7:17","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3079:16:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2693,"nodeType":"ExpressionStatement","src":"3079:16:17"}]},"documentation":{"id":2670,"nodeType":"StructuredDocumentation","src":"2353:510:17","text":" @dev Upgrade the backing implementation of the proxy and call a function\n on the new implementation.\n This is useful to initialize the proxied contract.\n @param newImplementation Address of the new implementation.\n @param data Data to send as msg.data in the low level call.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding."},"functionSelector":"4f1ef286","id":2695,"implemented":true,"kind":"function","modifiers":[{"id":2677,"kind":"modifierInvocation","modifierName":{"id":2676,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"2969:7:17"},"nodeType":"ModifierInvocation","src":"2969:7:17"}],"name":"upgradeToAndCall","nameLocation":"2875:16:17","nodeType":"FunctionDefinition","parameters":{"id":2675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2672,"mutability":"mutable","name":"newImplementation","nameLocation":"2905:17:17","nodeType":"VariableDeclaration","scope":2695,"src":"2897:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2671,"name":"address","nodeType":"ElementaryTypeName","src":"2897:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2674,"mutability":"mutable","name":"data","nameLocation":"2943:4:17","nodeType":"VariableDeclaration","scope":2695,"src":"2928:19:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2673,"name":"bytes","nodeType":"ElementaryTypeName","src":"2928:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2891:60:17"},"returnParameters":{"id":2678,"nodeType":"ParameterList","parameters":[],"src":"2977:0:17"},"scope":2740,"src":"2866:234:17","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":2706,"nodeType":"Block","src":"3203:113:17","statements":[{"assignments":[2702],"declarations":[{"constant":false,"id":2702,"mutability":"mutable","name":"slot","nameLocation":"3217:4:17","nodeType":"VariableDeclaration","scope":2706,"src":"3209:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2701,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3209:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2704,"initialValue":{"id":2703,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2587,"src":"3224:10:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3209:25:17"},{"AST":{"nodeType":"YulBlock","src":"3280:32:17","statements":[{"nodeType":"YulAssignment","src":"3288:18:17","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3301:4:17"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"3295:5:17"},"nodeType":"YulFunctionCall","src":"3295:11:17"},"variableNames":[{"name":"adm","nodeType":"YulIdentifier","src":"3288:3:17"}]}]},"evmVersion":"london","externalReferences":[{"declaration":2699,"isOffset":false,"isSlot":false,"src":"3288:3:17","valueSize":1},{"declaration":2702,"isOffset":false,"isSlot":false,"src":"3301:4:17","valueSize":1}],"id":2705,"nodeType":"InlineAssembly","src":"3271:41:17"}]},"documentation":{"id":2696,"nodeType":"StructuredDocumentation","src":"3104:42:17","text":" @return adm The admin slot."},"id":2707,"implemented":true,"kind":"function","modifiers":[],"name":"_admin","nameLocation":"3158:6:17","nodeType":"FunctionDefinition","parameters":{"id":2697,"nodeType":"ParameterList","parameters":[],"src":"3164:2:17"},"returnParameters":{"id":2700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2699,"mutability":"mutable","name":"adm","nameLocation":"3198:3:17","nodeType":"VariableDeclaration","scope":2707,"src":"3190:11:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2698,"name":"address","nodeType":"ElementaryTypeName","src":"3190:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3189:13:17"},"scope":2740,"src":"3149:167:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2718,"nodeType":"Block","src":"3478:117:17","statements":[{"assignments":[2714],"declarations":[{"constant":false,"id":2714,"mutability":"mutable","name":"slot","nameLocation":"3492:4:17","nodeType":"VariableDeclaration","scope":2718,"src":"3484:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2713,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3484:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2716,"initialValue":{"id":2715,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2587,"src":"3499:10:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3484:25:17"},{"AST":{"nodeType":"YulBlock","src":"3555:36:17","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3570:4:17"},{"name":"newAdmin","nodeType":"YulIdentifier","src":"3576:8:17"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3563:6:17"},"nodeType":"YulFunctionCall","src":"3563:22:17"},"nodeType":"YulExpressionStatement","src":"3563:22:17"}]},"evmVersion":"london","externalReferences":[{"declaration":2710,"isOffset":false,"isSlot":false,"src":"3576:8:17","valueSize":1},{"declaration":2714,"isOffset":false,"isSlot":false,"src":"3570:4:17","valueSize":1}],"id":2717,"nodeType":"InlineAssembly","src":"3546:45:17"}]},"documentation":{"id":2708,"nodeType":"StructuredDocumentation","src":"3320:109:17","text":" @dev Sets the address of the proxy admin.\n @param newAdmin Address of the new proxy admin."},"id":2719,"implemented":true,"kind":"function","modifiers":[],"name":"_setAdmin","nameLocation":"3441:9:17","nodeType":"FunctionDefinition","parameters":{"id":2711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2710,"mutability":"mutable","name":"newAdmin","nameLocation":"3459:8:17","nodeType":"VariableDeclaration","scope":2719,"src":"3451:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2709,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3450:18:17"},"returnParameters":{"id":2712,"nodeType":"ParameterList","parameters":[],"src":"3478:0:17"},"scope":2740,"src":"3432:163:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3037],"body":{"id":2738,"nodeType":"Block","src":"3721:123:17","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2725,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3735:3:17","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3735:10:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2727,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2707,"src":"3749:6:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3749:8:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3735:22:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e","id":2730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3759:52:17","typeDescriptions":{"typeIdentifier":"t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9","typeString":"literal_string \"Cannot call fallback function from the proxy admin\""},"value":"Cannot call fallback function from the proxy admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9","typeString":"literal_string \"Cannot call fallback function from the proxy admin\""}],"id":2724,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3727:7:17","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3727:85:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2732,"nodeType":"ExpressionStatement","src":"3727:85:17"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2733,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3818:5:17","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_BaseAdminUpgradeabilityProxy_$2740_$","typeString":"type(contract super BaseAdminUpgradeabilityProxy)"}},"id":2735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":3037,"src":"3818:19:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3818:21:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2737,"nodeType":"ExpressionStatement","src":"3818:21:17"}]},"documentation":{"id":2720,"nodeType":"StructuredDocumentation","src":"3599:68:17","text":" @dev Only fall back when the sender is not the admin."},"id":2739,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"3679:13:17","nodeType":"FunctionDefinition","overrides":{"id":2722,"nodeType":"OverrideSpecifier","overrides":[],"src":"3712:8:17"},"parameters":{"id":2721,"nodeType":"ParameterList","parameters":[],"src":"3692:2:17"},"returnParameters":{"id":2723,"nodeType":"ParameterList","parameters":[],"src":"3721:0:17"},"scope":2740,"src":"3670:174:17","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":2741,"src":"462:3384:17","usedErrors":[]}],"src":"37:3810:17"},"id":17},"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseUpgradeabilityProxy":[2805],"Proxy":[3051]},"id":2806,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2742,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:18"},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","file":"./Proxy.sol","id":2743,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2806,"sourceUnit":3052,"src":"62:21:18","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Address.sol","file":"../contracts/Address.sol","id":2744,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2806,"sourceUnit":723,"src":"84:34:18","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2746,"name":"Proxy","nodeType":"IdentifierPath","referencedDeclaration":3051,"src":"372:5:18"},"id":2747,"nodeType":"InheritanceSpecifier","src":"372:5:18"}],"canonicalName":"BaseUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2745,"nodeType":"StructuredDocumentation","src":"120:215:18","text":" @title BaseUpgradeabilityProxy\n @dev This contract implements a proxy that allows to change the\n implementation address to which it will delegate.\n Such a change is called an implementation upgrade."},"fullyImplemented":true,"id":2805,"linearizedBaseContracts":[2805,3051],"name":"BaseUpgradeabilityProxy","nameLocation":"345:23:18","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2748,"nodeType":"StructuredDocumentation","src":"382:126:18","text":" @dev Emitted when the implementation is upgraded.\n @param implementation Address of the new implementation."},"id":2752,"name":"Upgraded","nameLocation":"517:8:18","nodeType":"EventDefinition","parameters":{"id":2751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2750,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"542:14:18","nodeType":"VariableDeclaration","scope":2752,"src":"526:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2749,"name":"address","nodeType":"ElementaryTypeName","src":"526:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"525:32:18"},"src":"511:47:18"},{"constant":true,"documentation":{"id":2753,"nodeType":"StructuredDocumentation","src":"562:206:18","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."},"id":2756,"mutability":"constant","name":"IMPLEMENTATION_SLOT","nameLocation":"797:19:18","nodeType":"VariableDeclaration","scope":2805,"src":"771:118:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2754,"name":"bytes32","nodeType":"ElementaryTypeName","src":"771:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":2755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"823:66:18","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"internal"},{"baseFunctions":[3024],"body":{"id":2768,"nodeType":"Block","src":"1081:123:18","statements":[{"assignments":[2764],"declarations":[{"constant":false,"id":2764,"mutability":"mutable","name":"slot","nameLocation":"1095:4:18","nodeType":"VariableDeclaration","scope":2768,"src":"1087:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2763,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1087:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2766,"initialValue":{"id":2765,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2756,"src":"1102:19:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1087:34:18"},{"AST":{"nodeType":"YulBlock","src":"1167:33:18","statements":[{"nodeType":"YulAssignment","src":"1175:19:18","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"1189:4:18"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"1183:5:18"},"nodeType":"YulFunctionCall","src":"1183:11:18"},"variableNames":[{"name":"impl","nodeType":"YulIdentifier","src":"1175:4:18"}]}]},"evmVersion":"london","externalReferences":[{"declaration":2761,"isOffset":false,"isSlot":false,"src":"1175:4:18","valueSize":1},{"declaration":2764,"isOffset":false,"isSlot":false,"src":"1189:4:18","valueSize":1}],"id":2767,"nodeType":"InlineAssembly","src":"1158:42:18"}]},"documentation":{"id":2757,"nodeType":"StructuredDocumentation","src":"894:111:18","text":" @dev Returns the current implementation.\n @return impl Address of the current implementation"},"id":2769,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"1017:15:18","nodeType":"FunctionDefinition","overrides":{"id":2759,"nodeType":"OverrideSpecifier","overrides":[],"src":"1049:8:18"},"parameters":{"id":2758,"nodeType":"ParameterList","parameters":[],"src":"1032:2:18"},"returnParameters":{"id":2762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2761,"mutability":"mutable","name":"impl","nameLocation":"1075:4:18","nodeType":"VariableDeclaration","scope":2769,"src":"1067:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2760,"name":"address","nodeType":"ElementaryTypeName","src":"1067:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1066:14:18"},"scope":2805,"src":"1008:196:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2783,"nodeType":"Block","src":"1395:86:18","statements":[{"expression":{"arguments":[{"id":2776,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2772,"src":"1420:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2775,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2804,"src":"1401:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1401:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2778,"nodeType":"ExpressionStatement","src":"1401:37:18"},{"eventCall":{"arguments":[{"id":2780,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2772,"src":"1458:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2779,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2752,"src":"1449:8:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1449:27:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2782,"nodeType":"EmitStatement","src":"1444:32:18"}]},"documentation":{"id":2770,"nodeType":"StructuredDocumentation","src":"1208:128:18","text":" @dev Upgrades the proxy to a new implementation.\n @param newImplementation Address of the new implementation."},"id":2784,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTo","nameLocation":"1348:10:18","nodeType":"FunctionDefinition","parameters":{"id":2773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2772,"mutability":"mutable","name":"newImplementation","nameLocation":"1367:17:18","nodeType":"VariableDeclaration","scope":2784,"src":"1359:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2771,"name":"address","nodeType":"ElementaryTypeName","src":"1359:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1358:27:18"},"returnParameters":{"id":2774,"nodeType":"ParameterList","parameters":[],"src":"1395:0:18"},"scope":2805,"src":"1339:142:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2803,"nodeType":"Block","src":"1682:270:18","statements":[{"expression":{"arguments":[{"arguments":[{"id":2793,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2787,"src":"1722:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2791,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":722,"src":"1703:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$722_$","typeString":"type(library Address)"}},"id":2792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":445,"src":"1703:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1703:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373","id":2795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1748:61:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c","typeString":"literal_string \"Cannot set a proxy implementation to a non-contract address\""},"value":"Cannot set a proxy implementation to a non-contract address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c","typeString":"literal_string \"Cannot set a proxy implementation to a non-contract address\""}],"id":2790,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1688:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1688:127:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2797,"nodeType":"ExpressionStatement","src":"1688:127:18"},{"assignments":[2799],"declarations":[{"constant":false,"id":2799,"mutability":"mutable","name":"slot","nameLocation":"1830:4:18","nodeType":"VariableDeclaration","scope":2803,"src":"1822:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2798,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1822:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2801,"initialValue":{"id":2800,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2756,"src":"1837:19:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1822:34:18"},{"AST":{"nodeType":"YulBlock","src":"1903:45:18","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"1918:4:18"},{"name":"newImplementation","nodeType":"YulIdentifier","src":"1924:17:18"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"1911:6:18"},"nodeType":"YulFunctionCall","src":"1911:31:18"},"nodeType":"YulExpressionStatement","src":"1911:31:18"}]},"evmVersion":"london","externalReferences":[{"declaration":2787,"isOffset":false,"isSlot":false,"src":"1924:17:18","valueSize":1},{"declaration":2799,"isOffset":false,"isSlot":false,"src":"1918:4:18","valueSize":1}],"id":2802,"nodeType":"InlineAssembly","src":"1894:54:18"}]},"documentation":{"id":2785,"nodeType":"StructuredDocumentation","src":"1485:130:18","text":" @dev Sets the implementation address of the proxy.\n @param newImplementation Address of the new implementation."},"id":2804,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"1627:18:18","nodeType":"FunctionDefinition","parameters":{"id":2788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2787,"mutability":"mutable","name":"newImplementation","nameLocation":"1654:17:18","nodeType":"VariableDeclaration","scope":2804,"src":"1646:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2786,"name":"address","nodeType":"ElementaryTypeName","src":"1646:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1645:27:18"},"returnParameters":{"id":2789,"nodeType":"ParameterList","parameters":[],"src":"1682:0:18"},"scope":2805,"src":"1618:334:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2806,"src":"336:1618:18","usedErrors":[]}],"src":"37:1918:18"},"id":18},"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol","exportedSymbols":{"Initializable":[2873]},"id":2874,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2807,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:19"},{"abstract":false,"baseContracts":[],"canonicalName":"Initializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2808,"nodeType":"StructuredDocumentation","src":"62:621:19","text":" @title Initializable\n @dev Helper contract to support initializer functions. To use it, replace\n the constructor with a function that has the `initializer` modifier.\n WARNING: Unlike constructors, initializer functions must be manually\n invoked. This applies both to deploying an Initializable contract, as well\n as extending an Initializable contract via inheritance.\n WARNING: When used with inheritance, manual care must be taken to not invoke\n a parent initializer twice, or ensure that all initializers are idempotent,\n because this is not dealt with automatically as with constructors."},"fullyImplemented":true,"id":2873,"linearizedBaseContracts":[2873],"name":"Initializable","nameLocation":"693:13:19","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":2809,"nodeType":"StructuredDocumentation","src":"711:69:19","text":" @dev Indicates that the contract has been initialized."},"id":2811,"mutability":"mutable","name":"initialized","nameLocation":"796:11:19","nodeType":"VariableDeclaration","scope":2873,"src":"783:24:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2810,"name":"bool","nodeType":"ElementaryTypeName","src":"783:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"documentation":{"id":2812,"nodeType":"StructuredDocumentation","src":"812:87:19","text":" @dev Indicates that the contract is in the process of being initialized."},"id":2814,"mutability":"mutable","name":"initializing","nameLocation":"915:12:19","nodeType":"VariableDeclaration","scope":2873,"src":"902:25:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2813,"name":"bool","nodeType":"ElementaryTypeName","src":"902:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"body":{"id":2852,"nodeType":"Block","src":"1036:331:19","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2818,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"1057:12:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2819,"name":"isConstructor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"1073:13:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":2820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1073:15:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1057:31:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":2823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1092:12:19","subExpression":{"id":2822,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"1093:11:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1057:47:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564","id":2825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1112:48:19","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4","typeString":"literal_string \"Contract instance has already been initialized\""},"value":"Contract instance has already been initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4","typeString":"literal_string \"Contract instance has already been initialized\""}],"id":2817,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1042:7:19","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1042:124:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2827,"nodeType":"ExpressionStatement","src":"1042:124:19"},{"assignments":[2829],"declarations":[{"constant":false,"id":2829,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"1178:14:19","nodeType":"VariableDeclaration","scope":2852,"src":"1173:19:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2828,"name":"bool","nodeType":"ElementaryTypeName","src":"1173:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":2832,"initialValue":{"id":2831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1195:13:19","subExpression":{"id":2830,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"1196:12:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"1173:35:19"},{"condition":{"id":2833,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"1218:14:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2843,"nodeType":"IfStatement","src":"1214:80:19","trueBody":{"id":2842,"nodeType":"Block","src":"1234:60:19","statements":[{"expression":{"id":2836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2834,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"1242:12:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1257:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1242:19:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2837,"nodeType":"ExpressionStatement","src":"1242:19:19"},{"expression":{"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2838,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"1269:11:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1283:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1269:18:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2841,"nodeType":"ExpressionStatement","src":"1269:18:19"}]}},{"id":2844,"nodeType":"PlaceholderStatement","src":"1300:1:19"},{"condition":{"id":2845,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"1312:14:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2851,"nodeType":"IfStatement","src":"1308:55:19","trueBody":{"id":2850,"nodeType":"Block","src":"1328:35:19","statements":[{"expression":{"id":2848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2846,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"1336:12:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":2847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1351:5:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1336:20:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2849,"nodeType":"ExpressionStatement","src":"1336:20:19"}]}}]},"documentation":{"id":2815,"nodeType":"StructuredDocumentation","src":"932:78:19","text":" @dev Modifier to use in the initializer function of a contract."},"id":2853,"name":"initializer","nameLocation":"1022:11:19","nodeType":"ModifierDefinition","parameters":{"id":2816,"nodeType":"ParameterList","parameters":[],"src":"1033:2:19"},"src":"1013:354:19","virtual":false,"visibility":"internal"},{"body":{"id":2867,"nodeType":"Block","src":"1506:457:19","statements":[{"assignments":[2860],"declarations":[{"constant":false,"id":2860,"mutability":"mutable","name":"cs","nameLocation":"1849:2:19","nodeType":"VariableDeclaration","scope":2867,"src":"1841:10:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2859,"name":"uint256","nodeType":"ElementaryTypeName","src":"1841:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2861,"nodeType":"VariableDeclarationStatement","src":"1841:10:19"},{"AST":{"nodeType":"YulBlock","src":"1897:42:19","statements":[{"nodeType":"YulAssignment","src":"1905:28:19","value":{"arguments":[{"arguments":[],"functionName":{"name":"address","nodeType":"YulIdentifier","src":"1923:7:19"},"nodeType":"YulFunctionCall","src":"1923:9:19"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"1911:11:19"},"nodeType":"YulFunctionCall","src":"1911:22:19"},"variableNames":[{"name":"cs","nodeType":"YulIdentifier","src":"1905:2:19"}]}]},"evmVersion":"london","externalReferences":[{"declaration":2860,"isOffset":false,"isSlot":false,"src":"1905:2:19","valueSize":1}],"id":2862,"nodeType":"InlineAssembly","src":"1888:51:19"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2863,"name":"cs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"1951:2:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1957:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1951:7:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2858,"id":2866,"nodeType":"Return","src":"1944:14:19"}]},"documentation":{"id":2854,"nodeType":"StructuredDocumentation","src":"1371:79:19","text":"@dev Returns true if and only if the function is running in the constructor"},"id":2868,"implemented":true,"kind":"function","modifiers":[],"name":"isConstructor","nameLocation":"1462:13:19","nodeType":"FunctionDefinition","parameters":{"id":2855,"nodeType":"ParameterList","parameters":[],"src":"1475:2:19"},"returnParameters":{"id":2858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2857,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2868,"src":"1500:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2856,"name":"bool","nodeType":"ElementaryTypeName","src":"1500:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1499:6:19"},"scope":2873,"src":"1453:510:19","stateMutability":"view","virtual":false,"visibility":"private"},{"constant":false,"id":2872,"mutability":"mutable","name":"______gap","nameLocation":"2058:9:19","nodeType":"VariableDeclaration","scope":2873,"src":"2038:29:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":2869,"name":"uint256","nodeType":"ElementaryTypeName","src":"2038:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2871,"length":{"hexValue":"3530","id":2870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2046:2:19","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"2038:11:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":2874,"src":"684:1386:19","usedErrors":[]}],"src":"37:2034:19"},"id":19},"contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseAdminUpgradeabilityProxy":[2740],"BaseUpgradeabilityProxy":[2805],"InitializableAdminUpgradeabilityProxy":[2944],"InitializableUpgradeabilityProxy":[3007],"Proxy":[3051],"UpgradeabilityProxy":[3104]},"id":2945,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2875,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:20"},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol","file":"./BaseAdminUpgradeabilityProxy.sol","id":2876,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2945,"sourceUnit":2741,"src":"62:44:20","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","file":"./InitializableUpgradeabilityProxy.sol","id":2877,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2945,"sourceUnit":3008,"src":"107:48:20","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2879,"name":"BaseAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2740,"src":"397:28:20"},"id":2880,"nodeType":"InheritanceSpecifier","src":"397:28:20"},{"baseName":{"id":2881,"name":"InitializableUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":3007,"src":"429:32:20"},"id":2882,"nodeType":"InheritanceSpecifier","src":"429:32:20"}],"canonicalName":"InitializableAdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2878,"nodeType":"StructuredDocumentation","src":"157:187:20","text":" @title InitializableAdminUpgradeabilityProxy\n @dev Extends from BaseAdminUpgradeabilityProxy with an initializer for\n initializing the implementation, admin, and init data."},"fullyImplemented":true,"id":2944,"linearizedBaseContracts":[2944,3007,2740,2805,3051],"name":"InitializableAdminUpgradeabilityProxy","nameLocation":"354:37:20","nodeType":"ContractDefinition","nodes":[{"body":{"id":2929,"nodeType":"Block","src":"1119:217:20","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2893,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[2769],"referencedDeclaration":2769,"src":"1133:15:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1133:17:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1162:1:20","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":2896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1154:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2895,"name":"address","nodeType":"ElementaryTypeName","src":"1154:7:20","typeDescriptions":{}}},"id":2898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1154:10:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1133:31:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2892,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1125:7:20","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1125:40:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2901,"nodeType":"ExpressionStatement","src":"1125:40:20"},{"expression":{"arguments":[{"id":2905,"name":"logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2885,"src":"1215:5:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2906,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"1222:4:20","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2902,"name":"InitializableUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3007,"src":"1171:32:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InitializableUpgradeabilityProxy_$3007_$","typeString":"type(contract InitializableUpgradeabilityProxy)"}},"id":2904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":3006,"src":"1171:43:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":2907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1171:56:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2908,"nodeType":"ExpressionStatement","src":"1171:56:20"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2922,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2910,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2587,"src":"1240:10:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2920,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e61646d696e","id":2916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1280:21:20","typeDescriptions":{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""},"value":"eip1967.proxy.admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""}],"id":2915,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1270:9:20","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1270:32:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1262:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2913,"name":"uint256","nodeType":"ElementaryTypeName","src":"1262:7:20","typeDescriptions":{}}},"id":2918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1262:41:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1306:1:20","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1262:45:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1254:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2911,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1254:7:20","typeDescriptions":{}}},"id":2921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1254:54:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1240:68:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2909,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"1233:6:20","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1233:76:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2924,"nodeType":"ExpressionStatement","src":"1233:76:20"},{"expression":{"arguments":[{"id":2926,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"1325:5:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2925,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2719,"src":"1315:9:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1315:16:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2928,"nodeType":"ExpressionStatement","src":"1315:16:20"}]},"documentation":{"id":2883,"nodeType":"StructuredDocumentation","src":"466:566:20","text":" Contract initializer.\n @param logic address of the initial implementation.\n @param admin Address of the proxy administrator.\n @param data Data to send as msg.data to the implementation to initialize the proxied contract.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n This parameter is optional, if no data is given the initialization call to proxied contract will be skipped."},"functionSelector":"cf7a1d77","id":2930,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1044:10:20","nodeType":"FunctionDefinition","parameters":{"id":2890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2885,"mutability":"mutable","name":"logic","nameLocation":"1063:5:20","nodeType":"VariableDeclaration","scope":2930,"src":"1055:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2884,"name":"address","nodeType":"ElementaryTypeName","src":"1055:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2887,"mutability":"mutable","name":"admin","nameLocation":"1078:5:20","nodeType":"VariableDeclaration","scope":2930,"src":"1070:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2886,"name":"address","nodeType":"ElementaryTypeName","src":"1070:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2889,"mutability":"mutable","name":"data","nameLocation":"1098:4:20","nodeType":"VariableDeclaration","scope":2930,"src":"1085:17:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2888,"name":"bytes","nodeType":"ElementaryTypeName","src":"1085:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1054:49:20"},"returnParameters":{"id":2891,"nodeType":"ParameterList","parameters":[],"src":"1119:0:20"},"scope":2944,"src":"1035:301:20","stateMutability":"payable","virtual":false,"visibility":"public"},{"baseFunctions":[2739,3037],"body":{"id":2942,"nodeType":"Block","src":"1491:55:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2937,"name":"BaseAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2740,"src":"1497:28:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BaseAdminUpgradeabilityProxy_$2740_$","typeString":"type(contract BaseAdminUpgradeabilityProxy)"}},"id":2939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":2739,"src":"1497:42:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1497:44:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2941,"nodeType":"ExpressionStatement","src":"1497:44:20"}]},"documentation":{"id":2931,"nodeType":"StructuredDocumentation","src":"1340:68:20","text":" @dev Only fall back when the sender is not the admin."},"id":2943,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"1420:13:20","nodeType":"FunctionDefinition","overrides":{"id":2935,"nodeType":"OverrideSpecifier","overrides":[{"id":2933,"name":"BaseAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2740,"src":"1454:28:20"},{"id":2934,"name":"Proxy","nodeType":"IdentifierPath","referencedDeclaration":3051,"src":"1484:5:20"}],"src":"1445:45:20"},"parameters":{"id":2932,"nodeType":"ParameterList","parameters":[],"src":"1433:2:20"},"returnParameters":{"id":2936,"nodeType":"ParameterList","parameters":[],"src":"1491:0:20"},"scope":2944,"src":"1411:135:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2945,"src":"345:1203:20","usedErrors":[]}],"src":"37:1512:20"},"id":20},"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseUpgradeabilityProxy":[2805],"InitializableUpgradeabilityProxy":[3007],"Proxy":[3051]},"id":3008,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2946,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:21"},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","file":"./BaseUpgradeabilityProxy.sol","id":2947,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3008,"sourceUnit":2806,"src":"62:39:21","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2949,"name":"BaseUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2805,"src":"309:23:21"},"id":2950,"nodeType":"InheritanceSpecifier","src":"309:23:21"}],"canonicalName":"InitializableUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2948,"nodeType":"StructuredDocumentation","src":"103:160:21","text":" @title InitializableUpgradeabilityProxy\n @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\n implementation and init data."},"fullyImplemented":true,"id":3007,"linearizedBaseContracts":[3007,2805,3051],"name":"InitializableUpgradeabilityProxy","nameLocation":"273:32:21","nodeType":"ContractDefinition","nodes":[{"body":{"id":3005,"nodeType":"Block","src":"930:294:21","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2959,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[2769],"referencedDeclaration":2769,"src":"944:15:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"944:17:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"973:1:21","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":2962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"965:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2961,"name":"address","nodeType":"ElementaryTypeName","src":"965:7:21","typeDescriptions":{}}},"id":2964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"965:10:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"944:31:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2958,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"936:7:21","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"936:40:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2967,"nodeType":"ExpressionStatement","src":"936:40:21"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2969,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2756,"src":"989:19:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2979,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e696d706c656d656e746174696f6e","id":2975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1038:30:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""},"value":"eip1967.proxy.implementation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""}],"id":2974,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1028:9:21","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1028:41:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1020:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2972,"name":"uint256","nodeType":"ElementaryTypeName","src":"1020:7:21","typeDescriptions":{}}},"id":2977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1020:50:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1073:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1020:54:21","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":"1012:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2970,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1012:7:21","typeDescriptions":{}}},"id":2980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1012:63:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"989:86:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2968,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"982:6:21","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"982:94:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2983,"nodeType":"ExpressionStatement","src":"982:94:21"},{"expression":{"arguments":[{"id":2985,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"1101:6:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2984,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2804,"src":"1082:18:21","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1082:26:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2987,"nodeType":"ExpressionStatement","src":"1082:26:21"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2988,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"1118:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1118:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1133:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1118:16:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3004,"nodeType":"IfStatement","src":"1114:106:21","trueBody":{"id":3003,"nodeType":"Block","src":"1136:84:21","statements":[{"assignments":[2993,null],"declarations":[{"constant":false,"id":2993,"mutability":"mutable","name":"success","nameLocation":"1150:7:21","nodeType":"VariableDeclaration","scope":3003,"src":"1145:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2992,"name":"bool","nodeType":"ElementaryTypeName","src":"1145:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2998,"initialValue":{"arguments":[{"id":2996,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"1183:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2994,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"1163:6:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"1163:19:21","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":2997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1163:26:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1144:45:21"},{"expression":{"arguments":[{"id":3000,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2993,"src":"1205:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2999,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1197:7:21","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1197:16:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3002,"nodeType":"ExpressionStatement","src":"1197:16:21"}]}}]},"documentation":{"id":2951,"nodeType":"StructuredDocumentation","src":"337:519:21","text":" @dev Contract initializer.\n @param _logic Address of the initial implementation.\n @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n This parameter is optional, if no data is given the initialization call to proxied contract will be skipped."},"functionSelector":"d1f57894","id":3006,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"868:10:21","nodeType":"FunctionDefinition","parameters":{"id":2956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2953,"mutability":"mutable","name":"_logic","nameLocation":"887:6:21","nodeType":"VariableDeclaration","scope":3006,"src":"879:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2952,"name":"address","nodeType":"ElementaryTypeName","src":"879:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2955,"mutability":"mutable","name":"_data","nameLocation":"908:5:21","nodeType":"VariableDeclaration","scope":3006,"src":"895:18:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2954,"name":"bytes","nodeType":"ElementaryTypeName","src":"895:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"878:36:21"},"returnParameters":{"id":2957,"nodeType":"ParameterList","parameters":[],"src":"930:0:21"},"scope":3007,"src":"859:365:21","stateMutability":"payable","virtual":false,"visibility":"public"}],"scope":3008,"src":"264:962:21","usedErrors":[]}],"src":"37:1190:21"},"id":21},"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","exportedSymbols":{"Proxy":[3051]},"id":3052,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3009,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:22"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":3010,"nodeType":"StructuredDocumentation","src":"62:290:22","text":" @title Proxy\n @dev Implements delegation of calls to other contracts, with proper\n forwarding of return values and bubbling of failures.\n It defines a fallback function that delegates all calls to the address\n returned by the abstract _implementation() internal function."},"fullyImplemented":false,"id":3051,"linearizedBaseContracts":[3051],"name":"Proxy","nameLocation":"371:5:22","nodeType":"ContractDefinition","nodes":[{"body":{"id":3017,"nodeType":"Block","src":"566:22:22","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3014,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3050,"src":"572:9:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"572:11:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3016,"nodeType":"ExpressionStatement","src":"572:11:22"}]},"documentation":{"id":3011,"nodeType":"StructuredDocumentation","src":"381:154:22","text":" @dev Fallback function.\n Will run if no other function in the contract matches the call data.\n Implemented entirely in `_fallback`."},"id":3018,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3012,"nodeType":"ParameterList","parameters":[],"src":"546:2:22"},"returnParameters":{"id":3013,"nodeType":"ParameterList","parameters":[],"src":"566:0:22"},"scope":3051,"src":"538:50:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":3019,"nodeType":"StructuredDocumentation","src":"592:57:22","text":" @return The Address of the implementation."},"id":3024,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"661:15:22","nodeType":"FunctionDefinition","parameters":{"id":3020,"nodeType":"ParameterList","parameters":[],"src":"676:2:22"},"returnParameters":{"id":3023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3024,"src":"710:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3021,"name":"address","nodeType":"ElementaryTypeName","src":"710:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"709:9:22"},"scope":3051,"src":"652:67:22","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":3031,"nodeType":"Block","src":"1057:750:22","statements":[{"AST":{"nodeType":"YulBlock","src":"1103:700:22","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1332:1:22","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1335:1:22","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1338:12:22"},"nodeType":"YulFunctionCall","src":"1338:14:22"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1319:12:22"},"nodeType":"YulFunctionCall","src":"1319:34:22"},"nodeType":"YulExpressionStatement","src":"1319:34:22"},{"nodeType":"YulVariableDeclaration","src":"1462:74:22","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1489:3:22"},"nodeType":"YulFunctionCall","src":"1489:5:22"},{"name":"implementation","nodeType":"YulIdentifier","src":"1496:14:22"},{"kind":"number","nodeType":"YulLiteral","src":"1512:1:22","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1515:12:22"},"nodeType":"YulFunctionCall","src":"1515:14:22"},{"kind":"number","nodeType":"YulLiteral","src":"1531:1:22","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1534:1:22","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"1476:12:22"},"nodeType":"YulFunctionCall","src":"1476:60:22"},"variables":[{"name":"result","nodeType":"YulTypedName","src":"1466:6:22","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1592:1:22","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1595:1:22","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1598:14:22"},"nodeType":"YulFunctionCall","src":"1598:16:22"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"1577:14:22"},"nodeType":"YulFunctionCall","src":"1577:38:22"},"nodeType":"YulExpressionStatement","src":"1577:38:22"},{"cases":[{"body":{"nodeType":"YulBlock","src":"1692:45:22","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1709:1:22","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1712:14:22"},"nodeType":"YulFunctionCall","src":"1712:16:22"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1702:6:22"},"nodeType":"YulFunctionCall","src":"1702:27:22"},"nodeType":"YulExpressionStatement","src":"1702:27:22"}]},"nodeType":"YulCase","src":"1685:52:22","value":{"kind":"number","nodeType":"YulLiteral","src":"1690:1:22","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"1752:45:22","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1769:1:22","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1772:14:22"},"nodeType":"YulFunctionCall","src":"1772:16:22"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"1762:6:22"},"nodeType":"YulFunctionCall","src":"1762:27:22"},"nodeType":"YulExpressionStatement","src":"1762:27:22"}]},"nodeType":"YulCase","src":"1744:53:22","value":"default"}],"expression":{"name":"result","nodeType":"YulIdentifier","src":"1630:6:22"},"nodeType":"YulSwitch","src":"1623:174:22"}]},"evmVersion":"london","externalReferences":[{"declaration":3027,"isOffset":false,"isSlot":false,"src":"1496:14:22","valueSize":1}],"id":3030,"nodeType":"InlineAssembly","src":"1094:709:22"}]},"documentation":{"id":3025,"nodeType":"StructuredDocumentation","src":"723:279:22","text":" @dev Delegates execution to an implementation contract.\n This is a low level function that doesn't return to its internal call site.\n It will return to the external caller whatever the implementation returns.\n @param implementation Address to delegate."},"id":3032,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"1014:9:22","nodeType":"FunctionDefinition","parameters":{"id":3028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3027,"mutability":"mutable","name":"implementation","nameLocation":"1032:14:22","nodeType":"VariableDeclaration","scope":3032,"src":"1024:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3026,"name":"address","nodeType":"ElementaryTypeName","src":"1024:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1023:24:22"},"returnParameters":{"id":3029,"nodeType":"ParameterList","parameters":[],"src":"1057:0:22"},"scope":3051,"src":"1005:802:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3036,"nodeType":"Block","src":"2058:2:22","statements":[]},"documentation":{"id":3033,"nodeType":"StructuredDocumentation","src":"1811:202:22","text":" @dev Function that is run as the first thing in the fallback function.\n Can be redefined in derived contracts to add functionality.\n Redefinitions must call super._willFallback()."},"id":3037,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"2025:13:22","nodeType":"FunctionDefinition","parameters":{"id":3034,"nodeType":"ParameterList","parameters":[],"src":"2038:2:22"},"returnParameters":{"id":3035,"nodeType":"ParameterList","parameters":[],"src":"2058:0:22"},"scope":3051,"src":"2016:44:22","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":3049,"nodeType":"Block","src":"2185:60:22","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3041,"name":"_willFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3037,"src":"2191:13:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2191:15:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3043,"nodeType":"ExpressionStatement","src":"2191:15:22"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3045,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3024,"src":"2222:15:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2222:17:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3044,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"2212:9:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2212:28:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3048,"nodeType":"ExpressionStatement","src":"2212:28:22"}]},"documentation":{"id":3038,"nodeType":"StructuredDocumentation","src":"2064:88:22","text":" @dev fallback implementation.\n Extracted to enable manual triggering."},"id":3050,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"2164:9:22","nodeType":"FunctionDefinition","parameters":{"id":3039,"nodeType":"ParameterList","parameters":[],"src":"2173:2:22"},"returnParameters":{"id":3040,"nodeType":"ParameterList","parameters":[],"src":"2185:0:22"},"scope":3051,"src":"2155:90:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3052,"src":"353:1894:22","usedErrors":[]}],"src":"37:2211:22"},"id":22},"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseUpgradeabilityProxy":[2805],"Proxy":[3051],"UpgradeabilityProxy":[3104]},"id":3105,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3053,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:23"},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","file":"./BaseUpgradeabilityProxy.sol","id":3054,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3105,"sourceUnit":2806,"src":"62:39:23","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3056,"name":"BaseUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2805,"src":"282:23:23"},"id":3057,"nodeType":"InheritanceSpecifier","src":"282:23:23"}],"canonicalName":"UpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":3055,"nodeType":"StructuredDocumentation","src":"103:146:23","text":" @title UpgradeabilityProxy\n @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\n implementation and init data."},"fullyImplemented":true,"id":3104,"linearizedBaseContracts":[3104,2805,3051],"name":"UpgradeabilityProxy","nameLocation":"259:19:23","nodeType":"ContractDefinition","nodes":[{"body":{"id":3102,"nodeType":"Block","src":"888:248:23","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3066,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2756,"src":"901:19:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e696d706c656d656e746174696f6e","id":3072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"950:30:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""},"value":"eip1967.proxy.implementation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""}],"id":3071,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"940:9:23","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"940:41:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3070,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"932:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3069,"name":"uint256","nodeType":"ElementaryTypeName","src":"932:7:23","typeDescriptions":{}}},"id":3074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"932:50:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"985:1:23","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"932:54:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3068,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"924:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":3067,"name":"bytes32","nodeType":"ElementaryTypeName","src":"924:7:23","typeDescriptions":{}}},"id":3077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"924:63:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"901:86:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3065,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"894:6:23","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"894:94:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3080,"nodeType":"ExpressionStatement","src":"894:94:23"},{"expression":{"arguments":[{"id":3082,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3060,"src":"1013:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3081,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2804,"src":"994:18:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"994:26:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3084,"nodeType":"ExpressionStatement","src":"994:26:23"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3085,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3062,"src":"1030:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1030:12:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1045:1:23","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1030:16:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3101,"nodeType":"IfStatement","src":"1026:106:23","trueBody":{"id":3100,"nodeType":"Block","src":"1048:84:23","statements":[{"assignments":[3090,null],"declarations":[{"constant":false,"id":3090,"mutability":"mutable","name":"success","nameLocation":"1062:7:23","nodeType":"VariableDeclaration","scope":3100,"src":"1057:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3089,"name":"bool","nodeType":"ElementaryTypeName","src":"1057:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":3095,"initialValue":{"arguments":[{"id":3093,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3062,"src":"1095:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":3091,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3060,"src":"1075:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"1075:19:23","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":3094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1075:26:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1056:45:23"},{"expression":{"arguments":[{"id":3097,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3090,"src":"1117:7:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3096,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1109:7:23","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1109:16:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3099,"nodeType":"ExpressionStatement","src":"1109:16:23"}]}}]},"documentation":{"id":3058,"nodeType":"StructuredDocumentation","src":"310:519:23","text":" @dev Contract constructor.\n @param _logic Address of the initial implementation.\n @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n This parameter is optional, if no data is given the initialization call to proxied contract will be skipped."},"id":3103,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3060,"mutability":"mutable","name":"_logic","nameLocation":"852:6:23","nodeType":"VariableDeclaration","scope":3103,"src":"844:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3059,"name":"address","nodeType":"ElementaryTypeName","src":"844:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3062,"mutability":"mutable","name":"_data","nameLocation":"873:5:23","nodeType":"VariableDeclaration","scope":3103,"src":"860:18:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3061,"name":"bytes","nodeType":"ElementaryTypeName","src":"860:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"843:36:23"},"returnParameters":{"id":3064,"nodeType":"ParameterList","parameters":[],"src":"888:0:23"},"scope":3104,"src":"832:304:23","stateMutability":"payable","virtual":false,"visibility":"public"}],"scope":3105,"src":"250:888:23","usedErrors":[]}],"src":"37:1102:23"},"id":23},"contracts/dependencies/weth/WETH9.sol":{"ast":{"absolutePath":"contracts/dependencies/weth/WETH9.sol","exportedSymbols":{"WETH9":[3353]},"id":3354,"nodeType":"SourceUnit","nodes":[{"id":3106,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"686:24:24"},{"abstract":false,"baseContracts":[],"canonicalName":"WETH9","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":3353,"linearizedBaseContracts":[3353],"name":"WETH9","nameLocation":"721:5:24","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"06fdde03","id":3109,"mutability":"mutable","name":"name","nameLocation":"745:4:24","nodeType":"VariableDeclaration","scope":3353,"src":"731:36:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3107,"name":"string","nodeType":"ElementaryTypeName","src":"731:6:24","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"57726170706564204574686572","id":3108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"752:15:24","typeDescriptions":{"typeIdentifier":"t_stringliteral_00cd3d46df44f2cbb950cf84eb2e92aa2ddd23195b1a009173ea59a063357ed3","typeString":"literal_string \"Wrapped Ether\""},"value":"Wrapped Ether"},"visibility":"public"},{"constant":false,"functionSelector":"95d89b41","id":3112,"mutability":"mutable","name":"symbol","nameLocation":"785:6:24","nodeType":"VariableDeclaration","scope":3353,"src":"771:29:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3110,"name":"string","nodeType":"ElementaryTypeName","src":"771:6:24","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"57455448","id":3111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"794:6:24","typeDescriptions":{"typeIdentifier":"t_stringliteral_0f8a193ff464434486c0daf7db2a895884365d2bc84ba47a68fcf89c1b14b5b8","typeString":"literal_string \"WETH\""},"value":"WETH"},"visibility":"public"},{"constant":false,"functionSelector":"313ce567","id":3115,"mutability":"mutable","name":"decimals","nameLocation":"817:8:24","nodeType":"VariableDeclaration","scope":3353,"src":"804:26:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3113,"name":"uint8","nodeType":"ElementaryTypeName","src":"804:5:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3138","id":3114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"828:2:24","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"public"},{"anonymous":false,"id":3123,"name":"Approval","nameLocation":"841:8:24","nodeType":"EventDefinition","parameters":{"id":3122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3117,"indexed":true,"mutability":"mutable","name":"src","nameLocation":"866:3:24","nodeType":"VariableDeclaration","scope":3123,"src":"850:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3116,"name":"address","nodeType":"ElementaryTypeName","src":"850:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3119,"indexed":true,"mutability":"mutable","name":"guy","nameLocation":"887:3:24","nodeType":"VariableDeclaration","scope":3123,"src":"871:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3118,"name":"address","nodeType":"ElementaryTypeName","src":"871:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3121,"indexed":false,"mutability":"mutable","name":"wad","nameLocation":"900:3:24","nodeType":"VariableDeclaration","scope":3123,"src":"892:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3120,"name":"uint256","nodeType":"ElementaryTypeName","src":"892:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"849:55:24"},"src":"835:70:24"},{"anonymous":false,"id":3131,"name":"Transfer","nameLocation":"914:8:24","nodeType":"EventDefinition","parameters":{"id":3130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3125,"indexed":true,"mutability":"mutable","name":"src","nameLocation":"939:3:24","nodeType":"VariableDeclaration","scope":3131,"src":"923:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3124,"name":"address","nodeType":"ElementaryTypeName","src":"923:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3127,"indexed":true,"mutability":"mutable","name":"dst","nameLocation":"960:3:24","nodeType":"VariableDeclaration","scope":3131,"src":"944:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3126,"name":"address","nodeType":"ElementaryTypeName","src":"944:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3129,"indexed":false,"mutability":"mutable","name":"wad","nameLocation":"973:3:24","nodeType":"VariableDeclaration","scope":3131,"src":"965:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3128,"name":"uint256","nodeType":"ElementaryTypeName","src":"965:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"922:55:24"},"src":"908:70:24"},{"anonymous":false,"id":3137,"name":"Deposit","nameLocation":"987:7:24","nodeType":"EventDefinition","parameters":{"id":3136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3133,"indexed":true,"mutability":"mutable","name":"dst","nameLocation":"1011:3:24","nodeType":"VariableDeclaration","scope":3137,"src":"995:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3132,"name":"address","nodeType":"ElementaryTypeName","src":"995:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3135,"indexed":false,"mutability":"mutable","name":"wad","nameLocation":"1024:3:24","nodeType":"VariableDeclaration","scope":3137,"src":"1016:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3134,"name":"uint256","nodeType":"ElementaryTypeName","src":"1016:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"994:34:24"},"src":"981:48:24"},{"anonymous":false,"id":3143,"name":"Withdrawal","nameLocation":"1038:10:24","nodeType":"EventDefinition","parameters":{"id":3142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3139,"indexed":true,"mutability":"mutable","name":"src","nameLocation":"1065:3:24","nodeType":"VariableDeclaration","scope":3143,"src":"1049:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3138,"name":"address","nodeType":"ElementaryTypeName","src":"1049:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3141,"indexed":false,"mutability":"mutable","name":"wad","nameLocation":"1078:3:24","nodeType":"VariableDeclaration","scope":3143,"src":"1070:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3140,"name":"uint256","nodeType":"ElementaryTypeName","src":"1070:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1048:34:24"},"src":"1032:51:24"},{"constant":false,"functionSelector":"70a08231","id":3147,"mutability":"mutable","name":"balanceOf","nameLocation":"1122:9:24","nodeType":"VariableDeclaration","scope":3353,"src":"1087:44:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3146,"keyType":{"id":3144,"name":"address","nodeType":"ElementaryTypeName","src":"1095:7:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1087:27:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3145,"name":"uint256","nodeType":"ElementaryTypeName","src":"1106:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"functionSelector":"dd62ed3e","id":3153,"mutability":"mutable","name":"allowance","nameLocation":"1190:9:24","nodeType":"VariableDeclaration","scope":3353,"src":"1135:64:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3152,"keyType":{"id":3148,"name":"address","nodeType":"ElementaryTypeName","src":"1143:7:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1135:47:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":3151,"keyType":{"id":3149,"name":"address","nodeType":"ElementaryTypeName","src":"1162:7:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1154:27:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3150,"name":"uint256","nodeType":"ElementaryTypeName","src":"1173:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"public"},{"body":{"id":3159,"nodeType":"Block","src":"1231:20:24","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3156,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3179,"src":"1237:7:24","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1237:9:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3158,"nodeType":"ExpressionStatement","src":"1237:9:24"}]},"id":3160,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3154,"nodeType":"ParameterList","parameters":[],"src":"1211:2:24"},"returnParameters":{"id":3155,"nodeType":"ParameterList","parameters":[],"src":"1231:0:24"},"scope":3353,"src":"1204:47:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":3178,"nodeType":"Block","src":"1289:86:24","statements":[{"expression":{"id":3169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3163,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"1295:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3166,"indexExpression":{"expression":{"id":3164,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1305:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1305:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1295:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"id":3167,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1320:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"1320:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1295:34:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3170,"nodeType":"ExpressionStatement","src":"1295:34:24"},{"eventCall":{"arguments":[{"expression":{"id":3172,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1348:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1348:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":3174,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1360:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"1360:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3171,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3137,"src":"1340:7:24","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1340:30:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3177,"nodeType":"EmitStatement","src":"1335:35:24"}]},"functionSelector":"d0e30db0","id":3179,"implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"1264:7:24","nodeType":"FunctionDefinition","parameters":{"id":3161,"nodeType":"ParameterList","parameters":[],"src":"1271:2:24"},"returnParameters":{"id":3162,"nodeType":"ParameterList","parameters":[],"src":"1289:0:24"},"scope":3353,"src":"1255:120:24","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":3215,"nodeType":"Block","src":"1417:159:24","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3185,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"1431:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3188,"indexExpression":{"expression":{"id":3186,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1441:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1441:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1431:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3189,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"1456:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1431:28:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3184,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1423:7:24","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1423:37:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3192,"nodeType":"ExpressionStatement","src":"1423:37:24"},{"expression":{"id":3198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3193,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"1466:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3196,"indexExpression":{"expression":{"id":3194,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1476:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1476:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1466:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3197,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"1491:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1466:28:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3199,"nodeType":"ExpressionStatement","src":"1466:28:24"},{"expression":{"arguments":[{"id":3206,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"1529:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":3202,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1508:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1508:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1500:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":3200,"name":"address","nodeType":"ElementaryTypeName","src":"1500:8:24","stateMutability":"payable","typeDescriptions":{}}},"id":3204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1500:19:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","src":"1500:28:24","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1500:33:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3208,"nodeType":"ExpressionStatement","src":"1500:33:24"},{"eventCall":{"arguments":[{"expression":{"id":3210,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1555:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1555:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3212,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"1567:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3209,"name":"Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3143,"src":"1544:10:24","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1544:27:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3214,"nodeType":"EmitStatement","src":"1539:32:24"}]},"functionSelector":"2e1a7d4d","id":3216,"implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"1388:8:24","nodeType":"FunctionDefinition","parameters":{"id":3182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3181,"mutability":"mutable","name":"wad","nameLocation":"1405:3:24","nodeType":"VariableDeclaration","scope":3216,"src":"1397:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3180,"name":"uint256","nodeType":"ElementaryTypeName","src":"1397:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1396:13:24"},"returnParameters":{"id":3183,"nodeType":"ParameterList","parameters":[],"src":"1417:0:24"},"scope":3353,"src":"1379:197:24","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3227,"nodeType":"Block","src":"1633:39:24","statements":[{"expression":{"expression":{"arguments":[{"id":3223,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1654:4:24","typeDescriptions":{"typeIdentifier":"t_contract$_WETH9_$3353","typeString":"contract WETH9"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WETH9_$3353","typeString":"contract WETH9"}],"id":3222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1646:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3221,"name":"address","nodeType":"ElementaryTypeName","src":"1646:7:24","typeDescriptions":{}}},"id":3224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1646:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"1646:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3220,"id":3226,"nodeType":"Return","src":"1639:28:24"}]},"functionSelector":"18160ddd","id":3228,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"1589:11:24","nodeType":"FunctionDefinition","parameters":{"id":3217,"nodeType":"ParameterList","parameters":[],"src":"1600:2:24"},"returnParameters":{"id":3220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3219,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3228,"src":"1624:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3218,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1623:9:24"},"scope":3353,"src":"1580:92:24","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3255,"nodeType":"Block","src":"1741:101:24","statements":[{"expression":{"id":3244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":3237,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3153,"src":"1747:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3241,"indexExpression":{"expression":{"id":3238,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1757:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1757:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1747:21:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3242,"indexExpression":{"id":3240,"name":"guy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"1769:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1747:26:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3243,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3232,"src":"1776:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1747:32:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3245,"nodeType":"ExpressionStatement","src":"1747:32:24"},{"eventCall":{"arguments":[{"expression":{"id":3247,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1799:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1799:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3249,"name":"guy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"1811:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3250,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3232,"src":"1816:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3246,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3123,"src":"1790:8:24","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1790:30:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3252,"nodeType":"EmitStatement","src":"1785:35:24"},{"expression":{"hexValue":"74727565","id":3253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1833:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3236,"id":3254,"nodeType":"Return","src":"1826:11:24"}]},"functionSelector":"095ea7b3","id":3256,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"1685:7:24","nodeType":"FunctionDefinition","parameters":{"id":3233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3230,"mutability":"mutable","name":"guy","nameLocation":"1701:3:24","nodeType":"VariableDeclaration","scope":3256,"src":"1693:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3229,"name":"address","nodeType":"ElementaryTypeName","src":"1693:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3232,"mutability":"mutable","name":"wad","nameLocation":"1714:3:24","nodeType":"VariableDeclaration","scope":3256,"src":"1706:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3231,"name":"uint256","nodeType":"ElementaryTypeName","src":"1706:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1692:26:24"},"returnParameters":{"id":3236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3256,"src":"1735:4:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3234,"name":"bool","nodeType":"ElementaryTypeName","src":"1735:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1734:6:24"},"scope":3353,"src":"1676:166:24","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3272,"nodeType":"Block","src":"1912:52:24","statements":[{"expression":{"arguments":[{"expression":{"id":3266,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1938:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1938:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3268,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3258,"src":"1950:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3269,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3260,"src":"1955:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3265,"name":"transferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3352,"src":"1925:12:24","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) returns (bool)"}},"id":3270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1925:34:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3264,"id":3271,"nodeType":"Return","src":"1918:41:24"}]},"functionSelector":"a9059cbb","id":3273,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1855:8:24","nodeType":"FunctionDefinition","parameters":{"id":3261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3258,"mutability":"mutable","name":"dst","nameLocation":"1872:3:24","nodeType":"VariableDeclaration","scope":3273,"src":"1864:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3257,"name":"address","nodeType":"ElementaryTypeName","src":"1864:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3260,"mutability":"mutable","name":"wad","nameLocation":"1885:3:24","nodeType":"VariableDeclaration","scope":3273,"src":"1877:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3259,"name":"uint256","nodeType":"ElementaryTypeName","src":"1877:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1863:26:24"},"returnParameters":{"id":3264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3263,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3273,"src":"1906:4:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3262,"name":"bool","nodeType":"ElementaryTypeName","src":"1906:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1905:6:24"},"scope":3353,"src":"1846:118:24","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3351,"nodeType":"Block","src":"2051:327:24","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3285,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"2065:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3287,"indexExpression":{"id":3286,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3275,"src":"2075:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2065:14:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3288,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"2083:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2065:21:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3284,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2057:7:24","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2057:30:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3291,"nodeType":"ExpressionStatement","src":"2057:30:24"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3292,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3275,"src":"2098:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3293,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2105:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2105:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2098:17:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":3296,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3153,"src":"2119:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3298,"indexExpression":{"id":3297,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3275,"src":"2129:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2119:14:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3301,"indexExpression":{"expression":{"id":3299,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2134:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2134:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2119:26:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":3304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2154:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3303,"name":"uint256","nodeType":"ElementaryTypeName","src":"2154:7:24","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":3302,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2149:4:24","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2149:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":3306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2149:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2119:47:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2098:68:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3330,"nodeType":"IfStatement","src":"2094:172:24","trueBody":{"id":3329,"nodeType":"Block","src":"2168:98:24","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":3310,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3153,"src":"2184:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3312,"indexExpression":{"id":3311,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3275,"src":"2194:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2184:14:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3315,"indexExpression":{"expression":{"id":3313,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2199:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2199:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2184:26:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3316,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"2214:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2184:33:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3309,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2176:7:24","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2176:42:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3319,"nodeType":"ExpressionStatement","src":"2176:42:24"},{"expression":{"id":3327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":3320,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3153,"src":"2226:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3324,"indexExpression":{"id":3321,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3275,"src":"2236:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2226:14:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3325,"indexExpression":{"expression":{"id":3322,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2241:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2241:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2226:26:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3326,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"2256:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2226:33:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3328,"nodeType":"ExpressionStatement","src":"2226:33:24"}]}},{"expression":{"id":3335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3331,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"2272:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3333,"indexExpression":{"id":3332,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3275,"src":"2282:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2272:14:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3334,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"2290:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2272:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3336,"nodeType":"ExpressionStatement","src":"2272:21:24"},{"expression":{"id":3341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3337,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"2299:9:24","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3339,"indexExpression":{"id":3338,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3277,"src":"2309:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2299:14:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3340,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"2317:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2299:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3342,"nodeType":"ExpressionStatement","src":"2299:21:24"},{"eventCall":{"arguments":[{"id":3344,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3275,"src":"2341:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3345,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3277,"src":"2346:3:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3346,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"2351:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3343,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3131,"src":"2332:8:24","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2332:23:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3348,"nodeType":"EmitStatement","src":"2327:28:24"},{"expression":{"hexValue":"74727565","id":3349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2369:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3283,"id":3350,"nodeType":"Return","src":"2362:11:24"}]},"functionSelector":"23b872dd","id":3352,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"1977:12:24","nodeType":"FunctionDefinition","parameters":{"id":3280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3275,"mutability":"mutable","name":"src","nameLocation":"1998:3:24","nodeType":"VariableDeclaration","scope":3352,"src":"1990:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3274,"name":"address","nodeType":"ElementaryTypeName","src":"1990:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3277,"mutability":"mutable","name":"dst","nameLocation":"2011:3:24","nodeType":"VariableDeclaration","scope":3352,"src":"2003:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3276,"name":"address","nodeType":"ElementaryTypeName","src":"2003:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3279,"mutability":"mutable","name":"wad","nameLocation":"2024:3:24","nodeType":"VariableDeclaration","scope":3352,"src":"2016:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3278,"name":"uint256","nodeType":"ElementaryTypeName","src":"2016:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1989:39:24"},"returnParameters":{"id":3283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3282,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3352,"src":"2045:4:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3281,"name":"bool","nodeType":"ElementaryTypeName","src":"2045:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2044:6:24"},"scope":3353,"src":"1968:410:24","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":3354,"src":"712:1668:24","usedErrors":[]}],"src":"686:36850:24"},"id":24},"contracts/deployments/ReservesSetupHelper.sol":{"ast":{"absolutePath":"contracts/deployments/ReservesSetupHelper.sol","exportedSymbols":{"Ownable":[1573],"PoolConfigurator":[28229],"ReservesSetupHelper":[3513]},"id":3514,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":3355,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:25"},{"absolutePath":"contracts/protocol/pool/PoolConfigurator.sol","file":"../protocol/pool/PoolConfigurator.sol","id":3357,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3514,"sourceUnit":28230,"src":"62:71:25","symbolAliases":[{"foreign":{"id":3356,"name":"PoolConfigurator","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:16:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"../dependencies/openzeppelin/contracts/Ownable.sol","id":3359,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3514,"sourceUnit":1574,"src":"134:75:25","symbolAliases":[{"foreign":{"id":3358,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"142:7:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3361,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"510:7:25"},"id":3362,"nodeType":"InheritanceSpecifier","src":"510:7:25"}],"canonicalName":"ReservesSetupHelper","contractDependencies":[],"contractKind":"contract","documentation":{"id":3360,"nodeType":"StructuredDocumentation","src":"211:266:25","text":" @title ReservesSetupHelper\n @author Aave\n @notice Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.\n @dev The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract."},"fullyImplemented":true,"id":3513,"linearizedBaseContracts":[3513,1573,748],"name":"ReservesSetupHelper","nameLocation":"487:19:25","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ReservesSetupHelper.ConfigureReserveInput","id":3383,"members":[{"constant":false,"id":3364,"mutability":"mutable","name":"asset","nameLocation":"565:5:25","nodeType":"VariableDeclaration","scope":3383,"src":"557:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3363,"name":"address","nodeType":"ElementaryTypeName","src":"557:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3366,"mutability":"mutable","name":"baseLTV","nameLocation":"584:7:25","nodeType":"VariableDeclaration","scope":3383,"src":"576:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3365,"name":"uint256","nodeType":"ElementaryTypeName","src":"576:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3368,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"605:20:25","nodeType":"VariableDeclaration","scope":3383,"src":"597:28:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3367,"name":"uint256","nodeType":"ElementaryTypeName","src":"597:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3370,"mutability":"mutable","name":"liquidationBonus","nameLocation":"639:16:25","nodeType":"VariableDeclaration","scope":3383,"src":"631:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3369,"name":"uint256","nodeType":"ElementaryTypeName","src":"631:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3372,"mutability":"mutable","name":"reserveFactor","nameLocation":"669:13:25","nodeType":"VariableDeclaration","scope":3383,"src":"661:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3371,"name":"uint256","nodeType":"ElementaryTypeName","src":"661:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3374,"mutability":"mutable","name":"borrowCap","nameLocation":"696:9:25","nodeType":"VariableDeclaration","scope":3383,"src":"688:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3373,"name":"uint256","nodeType":"ElementaryTypeName","src":"688:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3376,"mutability":"mutable","name":"supplyCap","nameLocation":"719:9:25","nodeType":"VariableDeclaration","scope":3383,"src":"711:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3375,"name":"uint256","nodeType":"ElementaryTypeName","src":"711:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3378,"mutability":"mutable","name":"stableBorrowingEnabled","nameLocation":"739:22:25","nodeType":"VariableDeclaration","scope":3383,"src":"734:27:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3377,"name":"bool","nodeType":"ElementaryTypeName","src":"734:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3380,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"772:16:25","nodeType":"VariableDeclaration","scope":3383,"src":"767:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3379,"name":"bool","nodeType":"ElementaryTypeName","src":"767:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3382,"mutability":"mutable","name":"flashLoanEnabled","nameLocation":"799:16:25","nodeType":"VariableDeclaration","scope":3383,"src":"794:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3381,"name":"bool","nodeType":"ElementaryTypeName","src":"794:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ConfigureReserveInput","nameLocation":"529:21:25","nodeType":"StructDefinition","scope":3513,"src":"522:298:25","visibility":"public"},{"body":{"id":3511,"nodeType":"Block","src":"1371:890:25","statements":[{"body":{"id":3509,"nodeType":"Block","src":"1426:831:25","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3410,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1485:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3412,"indexExpression":{"id":3411,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1497:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1485:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3364,"src":"1485:20:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3414,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1515:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3416,"indexExpression":{"id":3415,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1527:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1515:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"baseLTV","nodeType":"MemberAccess","referencedDeclaration":3366,"src":"1515:22:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"id":3418,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1547:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3420,"indexExpression":{"id":3419,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1559:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1547:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":3368,"src":"1547:35:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"id":3422,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1592:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3424,"indexExpression":{"id":3423,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1604:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1592:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":3370,"src":"1592:31:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3407,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"1434:12:25","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"}},"id":3409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"configureReserveAsCollateral","nodeType":"MemberAccess","referencedDeclaration":26976,"src":"1434:41:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256) external"}},"id":3426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1434:197:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3427,"nodeType":"ExpressionStatement","src":"1434:197:25"},{"condition":{"expression":{"baseExpression":{"id":3428,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1644:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3430,"indexExpression":{"id":3429,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1656:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1644:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"borrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":3380,"src":"1644:31:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3469,"nodeType":"IfStatement","src":"1640:343:25","trueBody":{"id":3468,"nodeType":"Block","src":"1677:306:25","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3435,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1720:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3437,"indexExpression":{"id":3436,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1732:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1720:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3364,"src":"1720:20:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":3439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1742:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3432,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"1687:12:25","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"}},"id":3434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveBorrowing","nodeType":"MemberAccess","referencedDeclaration":26871,"src":"1687:32:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool) external"}},"id":3440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1687:60:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3441,"nodeType":"ExpressionStatement","src":"1687:60:25"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3445,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1784:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3447,"indexExpression":{"id":3446,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1796:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1784:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3364,"src":"1784:20:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3449,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1806:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3451,"indexExpression":{"id":3450,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1818:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1806:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":3374,"src":"1806:24:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3442,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"1758:12:25","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"}},"id":3444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setBorrowCap","nodeType":"MemberAccess","referencedDeclaration":27458,"src":"1758:25:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":3453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1758:73:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3454,"nodeType":"ExpressionStatement","src":"1758:73:25"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3458,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1895:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3460,"indexExpression":{"id":3459,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1907:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1895:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3364,"src":"1895:20:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3462,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1927:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3464,"indexExpression":{"id":3463,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1939:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1927:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stableBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":3378,"src":"1927:37:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3455,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"1841:12:25","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"}},"id":3457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveStableRateBorrowing","nodeType":"MemberAccess","referencedDeclaration":27027,"src":"1841:42:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool) external"}},"id":3466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1841:133:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3467,"nodeType":"ExpressionStatement","src":"1841:133:25"}]}},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3473,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"2026:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3475,"indexExpression":{"id":3474,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"2038:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2026:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3364,"src":"2026:20:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3477,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"2048:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3479,"indexExpression":{"id":3478,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"2060:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2048:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"flashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":3382,"src":"2048:31:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3470,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"1990:12:25","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"}},"id":3472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveFlashLoaning","nodeType":"MemberAccess","referencedDeclaration":27067,"src":"1990:35:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool) external"}},"id":3481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1990:90:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3482,"nodeType":"ExpressionStatement","src":"1990:90:25"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3486,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"2114:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3488,"indexExpression":{"id":3487,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"2126:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2114:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3364,"src":"2114:20:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3490,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"2136:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3492,"indexExpression":{"id":3491,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"2148:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2136:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"supplyCap","nodeType":"MemberAccess","referencedDeclaration":3376,"src":"2136:24:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3483,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"2088:12:25","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"}},"id":3485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setSupplyCap","nodeType":"MemberAccess","referencedDeclaration":27505,"src":"2088:25:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":3494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2088:73:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3495,"nodeType":"ExpressionStatement","src":"2088:73:25"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3499,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"2199:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3501,"indexExpression":{"id":3500,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"2211:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2199:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3364,"src":"2199:20:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3503,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"2221:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3505,"indexExpression":{"id":3504,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"2233:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2221:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":3372,"src":"2221:28:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3496,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"2169:12:25","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"}},"id":3498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveFactor","nodeType":"MemberAccess","referencedDeclaration":27290,"src":"2169:29:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":3507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2169:81:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3508,"nodeType":"ExpressionStatement","src":"2169:81:25"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3400,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1397:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3401,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"1401:11:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1401:18:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1397:22:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3510,"initializationExpression":{"assignments":[3397],"declarations":[{"constant":false,"id":3397,"mutability":"mutable","name":"i","nameLocation":"1390:1:25","nodeType":"VariableDeclaration","scope":3510,"src":"1382:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3396,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3399,"initialValue":{"hexValue":"30","id":3398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1394:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1382:13:25"},"loopExpression":{"expression":{"id":3405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1421:3:25","subExpression":{"id":3404,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"1421:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3406,"nodeType":"ExpressionStatement","src":"1421:3:25"},"nodeType":"ForStatement","src":"1377:880:25"}]},"documentation":{"id":3384,"nodeType":"StructuredDocumentation","src":"824:409:25","text":" @notice External function called by the owner account to setup the assets risk parameters in batch.\n @dev The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function\n @param configurator The address of PoolConfigurator contract\n @param inputParams An array of ConfigureReserveInput struct that contains the assets and their risk parameters"},"functionSelector":"23bb1093","id":3512,"implemented":true,"kind":"function","modifiers":[{"id":3394,"kind":"modifierInvocation","modifierName":{"id":3393,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1361:9:25"},"nodeType":"ModifierInvocation","src":"1361:9:25"}],"name":"configureReserves","nameLocation":"1245:17:25","nodeType":"FunctionDefinition","parameters":{"id":3392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3387,"mutability":"mutable","name":"configurator","nameLocation":"1285:12:25","nodeType":"VariableDeclaration","scope":3512,"src":"1268:29:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"},"typeName":{"id":3386,"nodeType":"UserDefinedTypeName","pathNode":{"id":3385,"name":"PoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":28229,"src":"1268:16:25"},"referencedDeclaration":28229,"src":"1268:16:25","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$28229","typeString":"contract PoolConfigurator"}},"visibility":"internal"},{"constant":false,"id":3391,"mutability":"mutable","name":"inputParams","nameLocation":"1336:11:25","nodeType":"VariableDeclaration","scope":3512,"src":"1303:44:25","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput[]"},"typeName":{"baseType":{"id":3389,"nodeType":"UserDefinedTypeName","pathNode":{"id":3388,"name":"ConfigureReserveInput","nodeType":"IdentifierPath","referencedDeclaration":3383,"src":"1303:21:25"},"referencedDeclaration":3383,"src":"1303:21:25","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3383_storage_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput"}},"id":3390,"nodeType":"ArrayTypeName","src":"1303:23:25","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3383_storage_$dyn_storage_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput[]"}},"visibility":"internal"}],"src":"1262:89:25"},"returnParameters":{"id":3395,"nodeType":"ParameterList","parameters":[],"src":"1371:0:25"},"scope":3513,"src":"1236:1025:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3514,"src":"478:1785:25","usedErrors":[]}],"src":"37:2227:25"},"id":25},"contracts/flashloan/base/FlashLoanReceiverBase.sol":{"ast":{"absolutePath":"contracts/flashloan/base/FlashLoanReceiverBase.sol","exportedSymbols":{"FlashLoanReceiverBase":[3552],"IFlashLoanReceiver":[3630],"IPool":[5073],"IPoolAddressesProvider":[5282]},"id":3553,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3515,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:26"},{"absolutePath":"contracts/flashloan/interfaces/IFlashLoanReceiver.sol","file":"../interfaces/IFlashLoanReceiver.sol","id":3517,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3553,"sourceUnit":3631,"src":"62:72:26","symbolAliases":[{"foreign":{"id":3516,"name":"IFlashLoanReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:18:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":3519,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3553,"sourceUnit":5283,"src":"135:83:26","symbolAliases":[{"foreign":{"id":3518,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"143:22:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":3521,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3553,"sourceUnit":5074,"src":"219:49:26","symbolAliases":[{"foreign":{"id":3520,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"227:5:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3523,"name":"IFlashLoanReceiver","nodeType":"IdentifierPath","referencedDeclaration":3630,"src":"436:18:26"},"id":3524,"nodeType":"InheritanceSpecifier","src":"436:18:26"}],"canonicalName":"FlashLoanReceiverBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":3522,"nodeType":"StructuredDocumentation","src":"270:122:26","text":" @title FlashLoanReceiverBase\n @author Aave\n @notice Base contract to develop a flashloan-receiver contract."},"fullyImplemented":false,"id":3552,"linearizedBaseContracts":[3552,3630],"name":"FlashLoanReceiverBase","nameLocation":"411:21:26","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3623],"constant":false,"functionSelector":"0542975c","id":3528,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"508:18:26","nodeType":"VariableDeclaration","overrides":{"id":3527,"nodeType":"OverrideSpecifier","overrides":[],"src":"499:8:26"},"scope":3552,"src":"459:67:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3526,"nodeType":"UserDefinedTypeName","pathNode":{"id":3525,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"459:22:26"},"referencedDeclaration":5282,"src":"459:22:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"baseFunctions":[3629],"constant":false,"functionSelector":"7535d246","id":3532,"mutability":"immutable","name":"POOL","nameLocation":"562:4:26","nodeType":"VariableDeclaration","overrides":{"id":3531,"nodeType":"OverrideSpecifier","overrides":[],"src":"553:8:26"},"scope":3552,"src":"530:36:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":3530,"nodeType":"UserDefinedTypeName","pathNode":{"id":3529,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"530:5:26"},"referencedDeclaration":5073,"src":"530:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"public"},{"body":{"id":3550,"nodeType":"Block","src":"616:78:26","statements":[{"expression":{"id":3540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3538,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3528,"src":"622:18:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3539,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"643:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"622:29:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":3541,"nodeType":"ExpressionStatement","src":"622:29:26"},{"expression":{"id":3548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3542,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"657:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3544,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"670:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"670:16:26","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":3546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"670:18:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3543,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"664:5:26","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"664:25:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"657:32:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":3549,"nodeType":"ExpressionStatement","src":"657:32:26"}]},"id":3551,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3535,"mutability":"mutable","name":"provider","nameLocation":"606:8:26","nodeType":"VariableDeclaration","scope":3551,"src":"583:31:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3534,"nodeType":"UserDefinedTypeName","pathNode":{"id":3533,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"583:22:26"},"referencedDeclaration":5282,"src":"583:22:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"582:33:26"},"returnParameters":{"id":3537,"nodeType":"ParameterList","parameters":[],"src":"616:0:26"},"scope":3552,"src":"571:123:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3553,"src":"393:303:26","usedErrors":[]}],"src":"37:660:26"},"id":26},"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol":{"ast":{"absolutePath":"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol","exportedSymbols":{"FlashLoanSimpleReceiverBase":[3591],"IFlashLoanSimpleReceiver":[3666],"IPool":[5073],"IPoolAddressesProvider":[5282]},"id":3592,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3554,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:27"},{"absolutePath":"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol","file":"../interfaces/IFlashLoanSimpleReceiver.sol","id":3556,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3592,"sourceUnit":3667,"src":"62:84:27","symbolAliases":[{"foreign":{"id":3555,"name":"IFlashLoanSimpleReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:24:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":3558,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3592,"sourceUnit":5283,"src":"147:83:27","symbolAliases":[{"foreign":{"id":3557,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"155:22:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":3560,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3592,"sourceUnit":5074,"src":"231:49:27","symbolAliases":[{"foreign":{"id":3559,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:5:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3562,"name":"IFlashLoanSimpleReceiver","nodeType":"IdentifierPath","referencedDeclaration":3666,"src":"460:24:27"},"id":3563,"nodeType":"InheritanceSpecifier","src":"460:24:27"}],"canonicalName":"FlashLoanSimpleReceiverBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":3561,"nodeType":"StructuredDocumentation","src":"282:128:27","text":" @title FlashLoanSimpleReceiverBase\n @author Aave\n @notice Base contract to develop a flashloan-receiver contract."},"fullyImplemented":false,"id":3591,"linearizedBaseContracts":[3591,3666],"name":"FlashLoanSimpleReceiverBase","nameLocation":"429:27:27","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3659],"constant":false,"functionSelector":"0542975c","id":3567,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"538:18:27","nodeType":"VariableDeclaration","overrides":{"id":3566,"nodeType":"OverrideSpecifier","overrides":[],"src":"529:8:27"},"scope":3591,"src":"489:67:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3565,"nodeType":"UserDefinedTypeName","pathNode":{"id":3564,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"489:22:27"},"referencedDeclaration":5282,"src":"489:22:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"baseFunctions":[3665],"constant":false,"functionSelector":"7535d246","id":3571,"mutability":"immutable","name":"POOL","nameLocation":"592:4:27","nodeType":"VariableDeclaration","overrides":{"id":3570,"nodeType":"OverrideSpecifier","overrides":[],"src":"583:8:27"},"scope":3591,"src":"560:36:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":3569,"nodeType":"UserDefinedTypeName","pathNode":{"id":3568,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"560:5:27"},"referencedDeclaration":5073,"src":"560:5:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"public"},{"body":{"id":3589,"nodeType":"Block","src":"646:78:27","statements":[{"expression":{"id":3579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3577,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3567,"src":"652:18:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3578,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"673:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"652:29:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":3580,"nodeType":"ExpressionStatement","src":"652:29:27"},{"expression":{"id":3587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3581,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3571,"src":"687:4:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3583,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"700:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":3584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"700:16:27","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":3585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"700:18:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3582,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"694:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":3586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"694:25:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"687:32:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":3588,"nodeType":"ExpressionStatement","src":"687:32:27"}]},"id":3590,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3574,"mutability":"mutable","name":"provider","nameLocation":"636:8:27","nodeType":"VariableDeclaration","scope":3590,"src":"613:31:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3573,"nodeType":"UserDefinedTypeName","pathNode":{"id":3572,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"613:22:27"},"referencedDeclaration":5282,"src":"613:22:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"612:33:27"},"returnParameters":{"id":3576,"nodeType":"ParameterList","parameters":[],"src":"646:0:27"},"scope":3591,"src":"601:123:27","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3592,"src":"411:315:27","usedErrors":[]}],"src":"37:690:27"},"id":27},"contracts/flashloan/interfaces/IFlashLoanReceiver.sol":{"ast":{"absolutePath":"contracts/flashloan/interfaces/IFlashLoanReceiver.sol","exportedSymbols":{"IFlashLoanReceiver":[3630],"IPool":[5073],"IPoolAddressesProvider":[5282]},"id":3631,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3593,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:28"},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":3595,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3631,"sourceUnit":5283,"src":"62:83:28","symbolAliases":[{"foreign":{"id":3594,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":3597,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3631,"sourceUnit":5074,"src":"146:49:28","symbolAliases":[{"foreign":{"id":3596,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"154:5:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IFlashLoanReceiver","contractDependencies":[],"contractKind":"interface","documentation":{"id":3598,"nodeType":"StructuredDocumentation","src":"197:219:28","text":" @title IFlashLoanReceiver\n @author Aave\n @notice Defines the basic interface of a flashloan-receiver contract.\n @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract"},"fullyImplemented":false,"id":3630,"linearizedBaseContracts":[3630],"name":"IFlashLoanReceiver","nameLocation":"427:18:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3599,"nodeType":"StructuredDocumentation","src":"450:645:28","text":" @notice Executes an operation after receiving the flash-borrowed assets\n @dev Ensure that the contract can return the debt + premium, e.g., has\n      enough funds to repay and has approved the Pool to pull the total amount\n @param assets The addresses of the flash-borrowed assets\n @param amounts The amounts of the flash-borrowed assets\n @param premiums The fee of each flash-borrowed asset\n @param initiator The address of the flashloan initiator\n @param params The byte-encoded params passed when initiating the flashloan\n @return True if the execution of the operation succeeds, false otherwise"},"functionSelector":"920f5c84","id":3617,"implemented":false,"kind":"function","modifiers":[],"name":"executeOperation","nameLocation":"1107:16:28","nodeType":"FunctionDefinition","parameters":{"id":3613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3602,"mutability":"mutable","name":"assets","nameLocation":"1148:6:28","nodeType":"VariableDeclaration","scope":3617,"src":"1129:25:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3600,"name":"address","nodeType":"ElementaryTypeName","src":"1129:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3601,"nodeType":"ArrayTypeName","src":"1129:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3605,"mutability":"mutable","name":"amounts","nameLocation":"1179:7:28","nodeType":"VariableDeclaration","scope":3617,"src":"1160:26:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3603,"name":"uint256","nodeType":"ElementaryTypeName","src":"1160:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3604,"nodeType":"ArrayTypeName","src":"1160:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3608,"mutability":"mutable","name":"premiums","nameLocation":"1211:8:28","nodeType":"VariableDeclaration","scope":3617,"src":"1192:27:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3606,"name":"uint256","nodeType":"ElementaryTypeName","src":"1192:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3607,"nodeType":"ArrayTypeName","src":"1192:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3610,"mutability":"mutable","name":"initiator","nameLocation":"1233:9:28","nodeType":"VariableDeclaration","scope":3617,"src":"1225:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3609,"name":"address","nodeType":"ElementaryTypeName","src":"1225:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3612,"mutability":"mutable","name":"params","nameLocation":"1263:6:28","nodeType":"VariableDeclaration","scope":3617,"src":"1248:21:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3611,"name":"bytes","nodeType":"ElementaryTypeName","src":"1248:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1123:150:28"},"returnParameters":{"id":3616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3615,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3617,"src":"1292:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3614,"name":"bool","nodeType":"ElementaryTypeName","src":"1292:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1291:6:28"},"scope":3630,"src":"1098:200:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0542975c","id":3623,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"1311:18:28","nodeType":"FunctionDefinition","parameters":{"id":3618,"nodeType":"ParameterList","parameters":[],"src":"1329:2:28"},"returnParameters":{"id":3622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3623,"src":"1355:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3620,"nodeType":"UserDefinedTypeName","pathNode":{"id":3619,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1355:22:28"},"referencedDeclaration":5282,"src":"1355:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1354:24:28"},"scope":3630,"src":"1302:77:28","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7535d246","id":3629,"implemented":false,"kind":"function","modifiers":[],"name":"POOL","nameLocation":"1392:4:28","nodeType":"FunctionDefinition","parameters":{"id":3624,"nodeType":"ParameterList","parameters":[],"src":"1396:2:28"},"returnParameters":{"id":3628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3627,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3629,"src":"1422:5:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":3626,"nodeType":"UserDefinedTypeName","pathNode":{"id":3625,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1422:5:28"},"referencedDeclaration":5073,"src":"1422:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1421:7:28"},"scope":3630,"src":"1383:46:28","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3631,"src":"417:1014:28","usedErrors":[]}],"src":"37:1395:28"},"id":28},"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol":{"ast":{"absolutePath":"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol","exportedSymbols":{"IFlashLoanSimpleReceiver":[3666],"IPool":[5073],"IPoolAddressesProvider":[5282]},"id":3667,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3632,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:29"},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":3634,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3667,"sourceUnit":5283,"src":"62:83:29","symbolAliases":[{"foreign":{"id":3633,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":3636,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3667,"sourceUnit":5074,"src":"146:49:29","symbolAliases":[{"foreign":{"id":3635,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"154:5:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IFlashLoanSimpleReceiver","contractDependencies":[],"contractKind":"interface","documentation":{"id":3637,"nodeType":"StructuredDocumentation","src":"197:225:29","text":" @title IFlashLoanSimpleReceiver\n @author Aave\n @notice Defines the basic interface of a flashloan-receiver contract.\n @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract"},"fullyImplemented":false,"id":3666,"linearizedBaseContracts":[3666],"name":"IFlashLoanSimpleReceiver","nameLocation":"433:24:29","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3638,"nodeType":"StructuredDocumentation","src":"462:635:29","text":" @notice Executes an operation after receiving the flash-borrowed asset\n @dev Ensure that the contract can return the debt + premium, e.g., has\n      enough funds to repay and has approved the Pool to pull the total amount\n @param asset The address of the flash-borrowed asset\n @param amount The amount of the flash-borrowed asset\n @param premium The fee of the flash-borrowed asset\n @param initiator The address of the flashloan initiator\n @param params The byte-encoded params passed when initiating the flashloan\n @return True if the execution of the operation succeeds, false otherwise"},"functionSelector":"1b11d0ff","id":3653,"implemented":false,"kind":"function","modifiers":[],"name":"executeOperation","nameLocation":"1109:16:29","nodeType":"FunctionDefinition","parameters":{"id":3649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3640,"mutability":"mutable","name":"asset","nameLocation":"1139:5:29","nodeType":"VariableDeclaration","scope":3653,"src":"1131:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3639,"name":"address","nodeType":"ElementaryTypeName","src":"1131:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3642,"mutability":"mutable","name":"amount","nameLocation":"1158:6:29","nodeType":"VariableDeclaration","scope":3653,"src":"1150:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3641,"name":"uint256","nodeType":"ElementaryTypeName","src":"1150:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3644,"mutability":"mutable","name":"premium","nameLocation":"1178:7:29","nodeType":"VariableDeclaration","scope":3653,"src":"1170:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3643,"name":"uint256","nodeType":"ElementaryTypeName","src":"1170:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3646,"mutability":"mutable","name":"initiator","nameLocation":"1199:9:29","nodeType":"VariableDeclaration","scope":3653,"src":"1191:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3645,"name":"address","nodeType":"ElementaryTypeName","src":"1191:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3648,"mutability":"mutable","name":"params","nameLocation":"1229:6:29","nodeType":"VariableDeclaration","scope":3653,"src":"1214:21:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3647,"name":"bytes","nodeType":"ElementaryTypeName","src":"1214:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1125:114:29"},"returnParameters":{"id":3652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3651,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3653,"src":"1258:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3650,"name":"bool","nodeType":"ElementaryTypeName","src":"1258:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1257:6:29"},"scope":3666,"src":"1100:164:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0542975c","id":3659,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"1277:18:29","nodeType":"FunctionDefinition","parameters":{"id":3654,"nodeType":"ParameterList","parameters":[],"src":"1295:2:29"},"returnParameters":{"id":3658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3659,"src":"1321:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3656,"nodeType":"UserDefinedTypeName","pathNode":{"id":3655,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1321:22:29"},"referencedDeclaration":5282,"src":"1321:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1320:24:29"},"scope":3666,"src":"1268:77:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7535d246","id":3665,"implemented":false,"kind":"function","modifiers":[],"name":"POOL","nameLocation":"1358:4:29","nodeType":"FunctionDefinition","parameters":{"id":3660,"nodeType":"ParameterList","parameters":[],"src":"1362:2:29"},"returnParameters":{"id":3664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3663,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3665,"src":"1388:5:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":3662,"nodeType":"UserDefinedTypeName","pathNode":{"id":3661,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1388:5:29"},"referencedDeclaration":5073,"src":"1388:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1387:7:29"},"scope":3666,"src":"1349:46:29","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3667,"src":"423:974:29","usedErrors":[]}],"src":"37:1361:29"},"id":29},"contracts/interfaces/IACLManager.sol":{"ast":{"absolutePath":"contracts/interfaces/IACLManager.sol","exportedSymbols":{"IACLManager":[3843],"IPoolAddressesProvider":[5282]},"id":3844,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3668,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:30"},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":3670,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3844,"sourceUnit":5283,"src":"62:68:30","symbolAliases":[{"foreign":{"id":3669,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IACLManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":3671,"nodeType":"StructuredDocumentation","src":"132:104:30","text":" @title IACLManager\n @author Aave\n @notice Defines the basic interface for the ACL Manager"},"fullyImplemented":false,"id":3843,"linearizedBaseContracts":[3843],"name":"IACLManager","nameLocation":"247:11:30","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3672,"nodeType":"StructuredDocumentation","src":"263:134:30","text":" @notice Returns the contract address of the PoolAddressesProvider\n @return The address of the PoolAddressesProvider"},"functionSelector":"0542975c","id":3678,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"409:18:30","nodeType":"FunctionDefinition","parameters":{"id":3673,"nodeType":"ParameterList","parameters":[],"src":"427:2:30"},"returnParameters":{"id":3677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3678,"src":"453:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3675,"nodeType":"UserDefinedTypeName","pathNode":{"id":3674,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"453:22:30"},"referencedDeclaration":5282,"src":"453:22:30","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"452:24:30"},"scope":3843,"src":"400:77:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3679,"nodeType":"StructuredDocumentation","src":"481:109:30","text":" @notice Returns the identifier of the PoolAdmin role\n @return The id of the PoolAdmin role"},"functionSelector":"b8f6dba7","id":3684,"implemented":false,"kind":"function","modifiers":[],"name":"POOL_ADMIN_ROLE","nameLocation":"602:15:30","nodeType":"FunctionDefinition","parameters":{"id":3680,"nodeType":"ParameterList","parameters":[],"src":"617:2:30"},"returnParameters":{"id":3683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3684,"src":"643:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3681,"name":"bytes32","nodeType":"ElementaryTypeName","src":"643:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"642:9:30"},"scope":3843,"src":"593:59:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3685,"nodeType":"StructuredDocumentation","src":"656:119:30","text":" @notice Returns the identifier of the EmergencyAdmin role\n @return The id of the EmergencyAdmin role"},"functionSelector":"6e76fc8f","id":3690,"implemented":false,"kind":"function","modifiers":[],"name":"EMERGENCY_ADMIN_ROLE","nameLocation":"787:20:30","nodeType":"FunctionDefinition","parameters":{"id":3686,"nodeType":"ParameterList","parameters":[],"src":"807:2:30"},"returnParameters":{"id":3689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3690,"src":"833:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3687,"name":"bytes32","nodeType":"ElementaryTypeName","src":"833:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"832:9:30"},"scope":3843,"src":"778:64:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3691,"nodeType":"StructuredDocumentation","src":"846:109:30","text":" @notice Returns the identifier of the RiskAdmin role\n @return The id of the RiskAdmin role"},"functionSelector":"4f16b425","id":3696,"implemented":false,"kind":"function","modifiers":[],"name":"RISK_ADMIN_ROLE","nameLocation":"967:15:30","nodeType":"FunctionDefinition","parameters":{"id":3692,"nodeType":"ParameterList","parameters":[],"src":"982:2:30"},"returnParameters":{"id":3695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3696,"src":"1008:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3693,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1008:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1007:9:30"},"scope":3843,"src":"958:59:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3697,"nodeType":"StructuredDocumentation","src":"1021:117:30","text":" @notice Returns the identifier of the FlashBorrower role\n @return The id of the FlashBorrower role"},"functionSelector":"5577b7a9","id":3702,"implemented":false,"kind":"function","modifiers":[],"name":"FLASH_BORROWER_ROLE","nameLocation":"1150:19:30","nodeType":"FunctionDefinition","parameters":{"id":3698,"nodeType":"ParameterList","parameters":[],"src":"1169:2:30"},"returnParameters":{"id":3701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3700,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3702,"src":"1195:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3699,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1195:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1194:9:30"},"scope":3843,"src":"1141:63:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3703,"nodeType":"StructuredDocumentation","src":"1208:103:30","text":" @notice Returns the identifier of the Bridge role\n @return The id of the Bridge role"},"functionSelector":"b5bfddea","id":3708,"implemented":false,"kind":"function","modifiers":[],"name":"BRIDGE_ROLE","nameLocation":"1323:11:30","nodeType":"FunctionDefinition","parameters":{"id":3704,"nodeType":"ParameterList","parameters":[],"src":"1334:2:30"},"returnParameters":{"id":3707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3708,"src":"1360:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3705,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1360:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1359:9:30"},"scope":3843,"src":"1314:55:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3709,"nodeType":"StructuredDocumentation","src":"1373:125:30","text":" @notice Returns the identifier of the AssetListingAdmin role\n @return The id of the AssetListingAdmin role"},"functionSelector":"78bb0a43","id":3714,"implemented":false,"kind":"function","modifiers":[],"name":"ASSET_LISTING_ADMIN_ROLE","nameLocation":"1510:24:30","nodeType":"FunctionDefinition","parameters":{"id":3710,"nodeType":"ParameterList","parameters":[],"src":"1534:2:30"},"returnParameters":{"id":3713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3714,"src":"1560:7:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3711,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1560:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1559:9:30"},"scope":3843,"src":"1501:68:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3715,"nodeType":"StructuredDocumentation","src":"1573:234:30","text":" @notice Set the role as admin of a specific role.\n @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\n @param role The role to be managed by the admin role\n @param adminRole The admin role"},"functionSelector":"1e4e0091","id":3722,"implemented":false,"kind":"function","modifiers":[],"name":"setRoleAdmin","nameLocation":"1819:12:30","nodeType":"FunctionDefinition","parameters":{"id":3720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3717,"mutability":"mutable","name":"role","nameLocation":"1840:4:30","nodeType":"VariableDeclaration","scope":3722,"src":"1832:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3716,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1832:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3719,"mutability":"mutable","name":"adminRole","nameLocation":"1854:9:30","nodeType":"VariableDeclaration","scope":3722,"src":"1846:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3718,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1846:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1831:33:30"},"returnParameters":{"id":3721,"nodeType":"ParameterList","parameters":[],"src":"1873:0:30"},"scope":3843,"src":"1810:64:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3723,"nodeType":"StructuredDocumentation","src":"1878:99:30","text":" @notice Adds a new admin as PoolAdmin\n @param admin The address of the new admin"},"functionSelector":"22650caf","id":3728,"implemented":false,"kind":"function","modifiers":[],"name":"addPoolAdmin","nameLocation":"1989:12:30","nodeType":"FunctionDefinition","parameters":{"id":3726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3725,"mutability":"mutable","name":"admin","nameLocation":"2010:5:30","nodeType":"VariableDeclaration","scope":3728,"src":"2002:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3724,"name":"address","nodeType":"ElementaryTypeName","src":"2002:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2001:15:30"},"returnParameters":{"id":3727,"nodeType":"ParameterList","parameters":[],"src":"2025:0:30"},"scope":3843,"src":"1980:46:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3729,"nodeType":"StructuredDocumentation","src":"2030:105:30","text":" @notice Removes an admin as PoolAdmin\n @param admin The address of the admin to remove"},"functionSelector":"f83695cb","id":3734,"implemented":false,"kind":"function","modifiers":[],"name":"removePoolAdmin","nameLocation":"2147:15:30","nodeType":"FunctionDefinition","parameters":{"id":3732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3731,"mutability":"mutable","name":"admin","nameLocation":"2171:5:30","nodeType":"VariableDeclaration","scope":3734,"src":"2163:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3730,"name":"address","nodeType":"ElementaryTypeName","src":"2163:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2162:15:30"},"returnParameters":{"id":3733,"nodeType":"ParameterList","parameters":[],"src":"2186:0:30"},"scope":3843,"src":"2138:49:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3735,"nodeType":"StructuredDocumentation","src":"2191:188:30","text":" @notice Returns true if the address is PoolAdmin, false otherwise\n @param admin The address to check\n @return True if the given address is PoolAdmin, false otherwise"},"functionSelector":"7be53ca1","id":3742,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolAdmin","nameLocation":"2391:11:30","nodeType":"FunctionDefinition","parameters":{"id":3738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3737,"mutability":"mutable","name":"admin","nameLocation":"2411:5:30","nodeType":"VariableDeclaration","scope":3742,"src":"2403:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3736,"name":"address","nodeType":"ElementaryTypeName","src":"2403:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2402:15:30"},"returnParameters":{"id":3741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3742,"src":"2441:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3739,"name":"bool","nodeType":"ElementaryTypeName","src":"2441:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2440:6:30"},"scope":3843,"src":"2382:65:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3743,"nodeType":"StructuredDocumentation","src":"2451:104:30","text":" @notice Adds a new admin as EmergencyAdmin\n @param admin The address of the new admin"},"functionSelector":"179efb09","id":3748,"implemented":false,"kind":"function","modifiers":[],"name":"addEmergencyAdmin","nameLocation":"2567:17:30","nodeType":"FunctionDefinition","parameters":{"id":3746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3745,"mutability":"mutable","name":"admin","nameLocation":"2593:5:30","nodeType":"VariableDeclaration","scope":3748,"src":"2585:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3744,"name":"address","nodeType":"ElementaryTypeName","src":"2585:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2584:15:30"},"returnParameters":{"id":3747,"nodeType":"ParameterList","parameters":[],"src":"2608:0:30"},"scope":3843,"src":"2558:51:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3749,"nodeType":"StructuredDocumentation","src":"2613:110:30","text":" @notice Removes an admin as EmergencyAdmin\n @param admin The address of the admin to remove"},"functionSelector":"7a9a93f4","id":3754,"implemented":false,"kind":"function","modifiers":[],"name":"removeEmergencyAdmin","nameLocation":"2735:20:30","nodeType":"FunctionDefinition","parameters":{"id":3752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3751,"mutability":"mutable","name":"admin","nameLocation":"2764:5:30","nodeType":"VariableDeclaration","scope":3754,"src":"2756:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3750,"name":"address","nodeType":"ElementaryTypeName","src":"2756:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2755:15:30"},"returnParameters":{"id":3753,"nodeType":"ParameterList","parameters":[],"src":"2779:0:30"},"scope":3843,"src":"2726:54:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3755,"nodeType":"StructuredDocumentation","src":"2784:198:30","text":" @notice Returns true if the address is EmergencyAdmin, false otherwise\n @param admin The address to check\n @return True if the given address is EmergencyAdmin, false otherwise"},"functionSelector":"2500f2b6","id":3762,"implemented":false,"kind":"function","modifiers":[],"name":"isEmergencyAdmin","nameLocation":"2994:16:30","nodeType":"FunctionDefinition","parameters":{"id":3758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"admin","nameLocation":"3019:5:30","nodeType":"VariableDeclaration","scope":3762,"src":"3011:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3756,"name":"address","nodeType":"ElementaryTypeName","src":"3011:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3010:15:30"},"returnParameters":{"id":3761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3762,"src":"3049:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3759,"name":"bool","nodeType":"ElementaryTypeName","src":"3049:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3048:6:30"},"scope":3843,"src":"2985:70:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3763,"nodeType":"StructuredDocumentation","src":"3059:99:30","text":" @notice Adds a new admin as RiskAdmin\n @param admin The address of the new admin"},"functionSelector":"5b9a94e4","id":3768,"implemented":false,"kind":"function","modifiers":[],"name":"addRiskAdmin","nameLocation":"3170:12:30","nodeType":"FunctionDefinition","parameters":{"id":3766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3765,"mutability":"mutable","name":"admin","nameLocation":"3191:5:30","nodeType":"VariableDeclaration","scope":3768,"src":"3183:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3764,"name":"address","nodeType":"ElementaryTypeName","src":"3183:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3182:15:30"},"returnParameters":{"id":3767,"nodeType":"ParameterList","parameters":[],"src":"3206:0:30"},"scope":3843,"src":"3161:46:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3769,"nodeType":"StructuredDocumentation","src":"3211:105:30","text":" @notice Removes an admin as RiskAdmin\n @param admin The address of the admin to remove"},"functionSelector":"3c5a08e5","id":3774,"implemented":false,"kind":"function","modifiers":[],"name":"removeRiskAdmin","nameLocation":"3328:15:30","nodeType":"FunctionDefinition","parameters":{"id":3772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3771,"mutability":"mutable","name":"admin","nameLocation":"3352:5:30","nodeType":"VariableDeclaration","scope":3774,"src":"3344:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3770,"name":"address","nodeType":"ElementaryTypeName","src":"3344:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3343:15:30"},"returnParameters":{"id":3773,"nodeType":"ParameterList","parameters":[],"src":"3367:0:30"},"scope":3843,"src":"3319:49:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3775,"nodeType":"StructuredDocumentation","src":"3372:188:30","text":" @notice Returns true if the address is RiskAdmin, false otherwise\n @param admin The address to check\n @return True if the given address is RiskAdmin, false otherwise"},"functionSelector":"674b5e4d","id":3782,"implemented":false,"kind":"function","modifiers":[],"name":"isRiskAdmin","nameLocation":"3572:11:30","nodeType":"FunctionDefinition","parameters":{"id":3778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3777,"mutability":"mutable","name":"admin","nameLocation":"3592:5:30","nodeType":"VariableDeclaration","scope":3782,"src":"3584:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3776,"name":"address","nodeType":"ElementaryTypeName","src":"3584:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3583:15:30"},"returnParameters":{"id":3781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3782,"src":"3622:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3779,"name":"bool","nodeType":"ElementaryTypeName","src":"3622:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3621:6:30"},"scope":3843,"src":"3563:65:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3783,"nodeType":"StructuredDocumentation","src":"3632:116:30","text":" @notice Adds a new address as FlashBorrower\n @param borrower The address of the new FlashBorrower"},"functionSelector":"9ac9d80b","id":3788,"implemented":false,"kind":"function","modifiers":[],"name":"addFlashBorrower","nameLocation":"3760:16:30","nodeType":"FunctionDefinition","parameters":{"id":3786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3785,"mutability":"mutable","name":"borrower","nameLocation":"3785:8:30","nodeType":"VariableDeclaration","scope":3788,"src":"3777:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3784,"name":"address","nodeType":"ElementaryTypeName","src":"3777:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3776:18:30"},"returnParameters":{"id":3787,"nodeType":"ParameterList","parameters":[],"src":"3803:0:30"},"scope":3843,"src":"3751:53:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3789,"nodeType":"StructuredDocumentation","src":"3808:122:30","text":" @notice Removes an address as FlashBorrower\n @param borrower The address of the FlashBorrower to remove"},"functionSelector":"253cf980","id":3794,"implemented":false,"kind":"function","modifiers":[],"name":"removeFlashBorrower","nameLocation":"3942:19:30","nodeType":"FunctionDefinition","parameters":{"id":3792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3791,"mutability":"mutable","name":"borrower","nameLocation":"3970:8:30","nodeType":"VariableDeclaration","scope":3794,"src":"3962:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3790,"name":"address","nodeType":"ElementaryTypeName","src":"3962:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3961:18:30"},"returnParameters":{"id":3793,"nodeType":"ParameterList","parameters":[],"src":"3988:0:30"},"scope":3843,"src":"3933:56:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3795,"nodeType":"StructuredDocumentation","src":"3993:199:30","text":" @notice Returns true if the address is FlashBorrower, false otherwise\n @param borrower The address to check\n @return True if the given address is FlashBorrower, false otherwise"},"functionSelector":"fa50f297","id":3802,"implemented":false,"kind":"function","modifiers":[],"name":"isFlashBorrower","nameLocation":"4204:15:30","nodeType":"FunctionDefinition","parameters":{"id":3798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3797,"mutability":"mutable","name":"borrower","nameLocation":"4228:8:30","nodeType":"VariableDeclaration","scope":3802,"src":"4220:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3796,"name":"address","nodeType":"ElementaryTypeName","src":"4220:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4219:18:30"},"returnParameters":{"id":3801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3800,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3802,"src":"4261:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3799,"name":"bool","nodeType":"ElementaryTypeName","src":"4261:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4260:6:30"},"scope":3843,"src":"4195:72:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3803,"nodeType":"StructuredDocumentation","src":"4271:100:30","text":" @notice Adds a new address as Bridge\n @param bridge The address of the new Bridge"},"functionSelector":"9712fdf8","id":3808,"implemented":false,"kind":"function","modifiers":[],"name":"addBridge","nameLocation":"4383:9:30","nodeType":"FunctionDefinition","parameters":{"id":3806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3805,"mutability":"mutable","name":"bridge","nameLocation":"4401:6:30","nodeType":"VariableDeclaration","scope":3808,"src":"4393:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3804,"name":"address","nodeType":"ElementaryTypeName","src":"4393:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4392:16:30"},"returnParameters":{"id":3807,"nodeType":"ParameterList","parameters":[],"src":"4417:0:30"},"scope":3843,"src":"4374:44:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3809,"nodeType":"StructuredDocumentation","src":"4422:106:30","text":" @notice Removes an address as Bridge\n @param bridge The address of the bridge to remove"},"functionSelector":"04df017d","id":3814,"implemented":false,"kind":"function","modifiers":[],"name":"removeBridge","nameLocation":"4540:12:30","nodeType":"FunctionDefinition","parameters":{"id":3812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3811,"mutability":"mutable","name":"bridge","nameLocation":"4561:6:30","nodeType":"VariableDeclaration","scope":3814,"src":"4553:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3810,"name":"address","nodeType":"ElementaryTypeName","src":"4553:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4552:16:30"},"returnParameters":{"id":3813,"nodeType":"ParameterList","parameters":[],"src":"4577:0:30"},"scope":3843,"src":"4531:47:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3815,"nodeType":"StructuredDocumentation","src":"4582:183:30","text":" @notice Returns true if the address is Bridge, false otherwise\n @param bridge The address to check\n @return True if the given address is Bridge, false otherwise"},"functionSelector":"726600ce","id":3822,"implemented":false,"kind":"function","modifiers":[],"name":"isBridge","nameLocation":"4777:8:30","nodeType":"FunctionDefinition","parameters":{"id":3818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3817,"mutability":"mutable","name":"bridge","nameLocation":"4794:6:30","nodeType":"VariableDeclaration","scope":3822,"src":"4786:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3816,"name":"address","nodeType":"ElementaryTypeName","src":"4786:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4785:16:30"},"returnParameters":{"id":3821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3820,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3822,"src":"4825:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3819,"name":"bool","nodeType":"ElementaryTypeName","src":"4825:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4824:6:30"},"scope":3843,"src":"4768:63:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3823,"nodeType":"StructuredDocumentation","src":"4835:107:30","text":" @notice Adds a new admin as AssetListingAdmin\n @param admin The address of the new admin"},"functionSelector":"9a2b96f7","id":3828,"implemented":false,"kind":"function","modifiers":[],"name":"addAssetListingAdmin","nameLocation":"4954:20:30","nodeType":"FunctionDefinition","parameters":{"id":3826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3825,"mutability":"mutable","name":"admin","nameLocation":"4983:5:30","nodeType":"VariableDeclaration","scope":3828,"src":"4975:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3824,"name":"address","nodeType":"ElementaryTypeName","src":"4975:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4974:15:30"},"returnParameters":{"id":3827,"nodeType":"ParameterList","parameters":[],"src":"4998:0:30"},"scope":3843,"src":"4945:54:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3829,"nodeType":"StructuredDocumentation","src":"5003:113:30","text":" @notice Removes an admin as AssetListingAdmin\n @param admin The address of the admin to remove"},"functionSelector":"a21bce15","id":3834,"implemented":false,"kind":"function","modifiers":[],"name":"removeAssetListingAdmin","nameLocation":"5128:23:30","nodeType":"FunctionDefinition","parameters":{"id":3832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3831,"mutability":"mutable","name":"admin","nameLocation":"5160:5:30","nodeType":"VariableDeclaration","scope":3834,"src":"5152:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3830,"name":"address","nodeType":"ElementaryTypeName","src":"5152:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5151:15:30"},"returnParameters":{"id":3833,"nodeType":"ParameterList","parameters":[],"src":"5175:0:30"},"scope":3843,"src":"5119:57:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3835,"nodeType":"StructuredDocumentation","src":"5180:204:30","text":" @notice Returns true if the address is AssetListingAdmin, false otherwise\n @param admin The address to check\n @return True if the given address is AssetListingAdmin, false otherwise"},"functionSelector":"13ee32e0","id":3842,"implemented":false,"kind":"function","modifiers":[],"name":"isAssetListingAdmin","nameLocation":"5396:19:30","nodeType":"FunctionDefinition","parameters":{"id":3838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3837,"mutability":"mutable","name":"admin","nameLocation":"5424:5:30","nodeType":"VariableDeclaration","scope":3842,"src":"5416:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3836,"name":"address","nodeType":"ElementaryTypeName","src":"5416:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5415:15:30"},"returnParameters":{"id":3841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3842,"src":"5454:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3839,"name":"bool","nodeType":"ElementaryTypeName","src":"5454:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5453:6:30"},"scope":3843,"src":"5387:73:30","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3844,"src":"237:5225:30","usedErrors":[]}],"src":"37:5426:30"},"id":30},"contracts/interfaces/IAToken.sol":{"ast":{"absolutePath":"contracts/interfaces/IAToken.sol","exportedSymbols":{"IAToken":[3986],"IERC20":[1442],"IInitializableAToken":[4301],"IScaledBalanceToken":[6188]},"id":3987,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3845,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:31"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../dependencies/openzeppelin/contracts/IERC20.sol","id":3847,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3987,"sourceUnit":1443,"src":"62:73:31","symbolAliases":[{"foreign":{"id":3846,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IScaledBalanceToken.sol","file":"./IScaledBalanceToken.sol","id":3849,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3987,"sourceUnit":6189,"src":"136:62:31","symbolAliases":[{"foreign":{"id":3848,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"144:19:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IInitializableAToken.sol","file":"./IInitializableAToken.sol","id":3851,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3987,"sourceUnit":4302,"src":"199:64:31","symbolAliases":[{"foreign":{"id":3850,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"207:20:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3853,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"382:6:31"},"id":3854,"nodeType":"InheritanceSpecifier","src":"382:6:31"},{"baseName":{"id":3855,"name":"IScaledBalanceToken","nodeType":"IdentifierPath","referencedDeclaration":6188,"src":"390:19:31"},"id":3856,"nodeType":"InheritanceSpecifier","src":"390:19:31"},{"baseName":{"id":3857,"name":"IInitializableAToken","nodeType":"IdentifierPath","referencedDeclaration":4301,"src":"411:20:31"},"id":3858,"nodeType":"InheritanceSpecifier","src":"411:20:31"}],"canonicalName":"IAToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":3852,"nodeType":"StructuredDocumentation","src":"265:95:31","text":" @title IAToken\n @author Aave\n @notice Defines the basic interface for an AToken."},"fullyImplemented":false,"id":3986,"linearizedBaseContracts":[3986,4301,6188,1442],"name":"IAToken","nameLocation":"371:7:31","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3859,"nodeType":"StructuredDocumentation","src":"436:256:31","text":" @dev Emitted during the transfer action\n @param from The user whose tokens are being transferred\n @param to The recipient\n @param value The scaled amount being transferred\n @param index The next liquidity index of the reserve"},"id":3869,"name":"BalanceTransfer","nameLocation":"701:15:31","nodeType":"EventDefinition","parameters":{"id":3868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3861,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"733:4:31","nodeType":"VariableDeclaration","scope":3869,"src":"717:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3860,"name":"address","nodeType":"ElementaryTypeName","src":"717:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3863,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"755:2:31","nodeType":"VariableDeclaration","scope":3869,"src":"739:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3862,"name":"address","nodeType":"ElementaryTypeName","src":"739:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3865,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"767:5:31","nodeType":"VariableDeclaration","scope":3869,"src":"759:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3864,"name":"uint256","nodeType":"ElementaryTypeName","src":"759:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3867,"indexed":false,"mutability":"mutable","name":"index","nameLocation":"782:5:31","nodeType":"VariableDeclaration","scope":3869,"src":"774:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3866,"name":"uint256","nodeType":"ElementaryTypeName","src":"774:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"716:72:31"},"src":"695:94:31"},{"documentation":{"id":3870,"nodeType":"StructuredDocumentation","src":"793:369:31","text":" @notice Mints `amount` aTokens to `user`\n @param caller The address performing the mint\n @param onBehalfOf The address of the user that will receive the minted aTokens\n @param amount The amount of tokens getting minted\n @param index The next liquidity index of the reserve\n @return `true` if the the previous balance of the user was 0"},"functionSelector":"b3f1c93d","id":3883,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"1174:4:31","nodeType":"FunctionDefinition","parameters":{"id":3879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3872,"mutability":"mutable","name":"caller","nameLocation":"1192:6:31","nodeType":"VariableDeclaration","scope":3883,"src":"1184:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3871,"name":"address","nodeType":"ElementaryTypeName","src":"1184:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3874,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1212:10:31","nodeType":"VariableDeclaration","scope":3883,"src":"1204:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3873,"name":"address","nodeType":"ElementaryTypeName","src":"1204:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3876,"mutability":"mutable","name":"amount","nameLocation":"1236:6:31","nodeType":"VariableDeclaration","scope":3883,"src":"1228:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3875,"name":"uint256","nodeType":"ElementaryTypeName","src":"1228:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3878,"mutability":"mutable","name":"index","nameLocation":"1256:5:31","nodeType":"VariableDeclaration","scope":3883,"src":"1248:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3877,"name":"uint256","nodeType":"ElementaryTypeName","src":"1248:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1178:87:31"},"returnParameters":{"id":3882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3881,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3883,"src":"1284:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3880,"name":"bool","nodeType":"ElementaryTypeName","src":"1284:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1283:6:31"},"scope":3986,"src":"1165:125:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3884,"nodeType":"StructuredDocumentation","src":"1294:526:31","text":" @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\n @dev In some instances, the mint event could be emitted from a burn transaction\n if the amount to burn is less than the interest that the user accrued\n @param from The address from which the aTokens will be burned\n @param receiverOfUnderlying The address that will receive the underlying\n @param amount The amount being burned\n @param index The next liquidity index of the reserve"},"functionSelector":"d7020d0a","id":3895,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"1832:4:31","nodeType":"FunctionDefinition","parameters":{"id":3893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3886,"mutability":"mutable","name":"from","nameLocation":"1845:4:31","nodeType":"VariableDeclaration","scope":3895,"src":"1837:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3885,"name":"address","nodeType":"ElementaryTypeName","src":"1837:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3888,"mutability":"mutable","name":"receiverOfUnderlying","nameLocation":"1859:20:31","nodeType":"VariableDeclaration","scope":3895,"src":"1851:28:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3887,"name":"address","nodeType":"ElementaryTypeName","src":"1851:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3890,"mutability":"mutable","name":"amount","nameLocation":"1889:6:31","nodeType":"VariableDeclaration","scope":3895,"src":"1881:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3889,"name":"uint256","nodeType":"ElementaryTypeName","src":"1881:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3892,"mutability":"mutable","name":"index","nameLocation":"1905:5:31","nodeType":"VariableDeclaration","scope":3895,"src":"1897:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3891,"name":"uint256","nodeType":"ElementaryTypeName","src":"1897:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1836:75:31"},"returnParameters":{"id":3894,"nodeType":"ParameterList","parameters":[],"src":"1920:0:31"},"scope":3986,"src":"1823:98:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3896,"nodeType":"StructuredDocumentation","src":"1925:173:31","text":" @notice Mints aTokens to the reserve treasury\n @param amount The amount of tokens getting minted\n @param index The next liquidity index of the reserve"},"functionSelector":"7df5bd3b","id":3903,"implemented":false,"kind":"function","modifiers":[],"name":"mintToTreasury","nameLocation":"2110:14:31","nodeType":"FunctionDefinition","parameters":{"id":3901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3898,"mutability":"mutable","name":"amount","nameLocation":"2133:6:31","nodeType":"VariableDeclaration","scope":3903,"src":"2125:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3897,"name":"uint256","nodeType":"ElementaryTypeName","src":"2125:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3900,"mutability":"mutable","name":"index","nameLocation":"2149:5:31","nodeType":"VariableDeclaration","scope":3903,"src":"2141:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3899,"name":"uint256","nodeType":"ElementaryTypeName","src":"2141:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2124:31:31"},"returnParameters":{"id":3902,"nodeType":"ParameterList","parameters":[],"src":"2164:0:31"},"scope":3986,"src":"2101:64:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3904,"nodeType":"StructuredDocumentation","src":"2169:293:31","text":" @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\n @param from The address getting liquidated, current owner of the aTokens\n @param to The recipient\n @param value The amount of tokens getting transferred"},"functionSelector":"f866c319","id":3913,"implemented":false,"kind":"function","modifiers":[],"name":"transferOnLiquidation","nameLocation":"2474:21:31","nodeType":"FunctionDefinition","parameters":{"id":3911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3906,"mutability":"mutable","name":"from","nameLocation":"2504:4:31","nodeType":"VariableDeclaration","scope":3913,"src":"2496:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3905,"name":"address","nodeType":"ElementaryTypeName","src":"2496:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3908,"mutability":"mutable","name":"to","nameLocation":"2518:2:31","nodeType":"VariableDeclaration","scope":3913,"src":"2510:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3907,"name":"address","nodeType":"ElementaryTypeName","src":"2510:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3910,"mutability":"mutable","name":"value","nameLocation":"2530:5:31","nodeType":"VariableDeclaration","scope":3913,"src":"2522:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3909,"name":"uint256","nodeType":"ElementaryTypeName","src":"2522:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2495:41:31"},"returnParameters":{"id":3912,"nodeType":"ParameterList","parameters":[],"src":"2545:0:31"},"scope":3986,"src":"2465:81:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3914,"nodeType":"StructuredDocumentation","src":"2550:253:31","text":" @notice Transfers the underlying asset to `target`.\n @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\n @param target The recipient of the underlying\n @param amount The amount getting transferred"},"functionSelector":"4efecaa5","id":3921,"implemented":false,"kind":"function","modifiers":[],"name":"transferUnderlyingTo","nameLocation":"2815:20:31","nodeType":"FunctionDefinition","parameters":{"id":3919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3916,"mutability":"mutable","name":"target","nameLocation":"2844:6:31","nodeType":"VariableDeclaration","scope":3921,"src":"2836:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3915,"name":"address","nodeType":"ElementaryTypeName","src":"2836:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3918,"mutability":"mutable","name":"amount","nameLocation":"2860:6:31","nodeType":"VariableDeclaration","scope":3921,"src":"2852:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3917,"name":"uint256","nodeType":"ElementaryTypeName","src":"2852:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2835:32:31"},"returnParameters":{"id":3920,"nodeType":"ParameterList","parameters":[],"src":"2876:0:31"},"scope":3986,"src":"2806:71:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3922,"nodeType":"StructuredDocumentation","src":"2881:630:31","text":" @notice Handles the underlying received by the aToken after the transfer has been completed.\n @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\n transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\n to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\n @param user The user executing the repayment\n @param onBehalfOf The address of the user who will get his debt reduced/removed\n @param amount The amount getting repaid"},"functionSelector":"6fd97676","id":3931,"implemented":false,"kind":"function","modifiers":[],"name":"handleRepayment","nameLocation":"3523:15:31","nodeType":"FunctionDefinition","parameters":{"id":3929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3924,"mutability":"mutable","name":"user","nameLocation":"3547:4:31","nodeType":"VariableDeclaration","scope":3931,"src":"3539:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3923,"name":"address","nodeType":"ElementaryTypeName","src":"3539:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3926,"mutability":"mutable","name":"onBehalfOf","nameLocation":"3561:10:31","nodeType":"VariableDeclaration","scope":3931,"src":"3553:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3925,"name":"address","nodeType":"ElementaryTypeName","src":"3553:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3928,"mutability":"mutable","name":"amount","nameLocation":"3581:6:31","nodeType":"VariableDeclaration","scope":3931,"src":"3573:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3927,"name":"uint256","nodeType":"ElementaryTypeName","src":"3573:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:50:31"},"returnParameters":{"id":3930,"nodeType":"ParameterList","parameters":[],"src":"3597:0:31"},"scope":3986,"src":"3514:84:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3932,"nodeType":"StructuredDocumentation","src":"3602:494:31","text":" @notice Allow passing a signed message to approve spending\n @dev implements the permit function as for\n https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\n @param owner The owner of the funds\n @param spender The spender\n @param value The amount\n @param deadline The deadline timestamp, type(uint256).max for max deadline\n @param v Signature param\n @param s Signature param\n @param r Signature param"},"functionSelector":"d505accf","id":3949,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"4108:6:31","nodeType":"FunctionDefinition","parameters":{"id":3947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3934,"mutability":"mutable","name":"owner","nameLocation":"4128:5:31","nodeType":"VariableDeclaration","scope":3949,"src":"4120:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3933,"name":"address","nodeType":"ElementaryTypeName","src":"4120:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3936,"mutability":"mutable","name":"spender","nameLocation":"4147:7:31","nodeType":"VariableDeclaration","scope":3949,"src":"4139:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3935,"name":"address","nodeType":"ElementaryTypeName","src":"4139:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3938,"mutability":"mutable","name":"value","nameLocation":"4168:5:31","nodeType":"VariableDeclaration","scope":3949,"src":"4160:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3937,"name":"uint256","nodeType":"ElementaryTypeName","src":"4160:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3940,"mutability":"mutable","name":"deadline","nameLocation":"4187:8:31","nodeType":"VariableDeclaration","scope":3949,"src":"4179:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3939,"name":"uint256","nodeType":"ElementaryTypeName","src":"4179:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3942,"mutability":"mutable","name":"v","nameLocation":"4207:1:31","nodeType":"VariableDeclaration","scope":3949,"src":"4201:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3941,"name":"uint8","nodeType":"ElementaryTypeName","src":"4201:5:31","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3944,"mutability":"mutable","name":"r","nameLocation":"4222:1:31","nodeType":"VariableDeclaration","scope":3949,"src":"4214:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3943,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4214:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3946,"mutability":"mutable","name":"s","nameLocation":"4237:1:31","nodeType":"VariableDeclaration","scope":3949,"src":"4229:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3945,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4229:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4114:128:31"},"returnParameters":{"id":3948,"nodeType":"ParameterList","parameters":[],"src":"4251:0:31"},"scope":3986,"src":"4099:153:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3950,"nodeType":"StructuredDocumentation","src":"4256:152:31","text":" @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\n @return The address of the underlying asset"},"functionSelector":"b16a19de","id":3955,"implemented":false,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"4420:24:31","nodeType":"FunctionDefinition","parameters":{"id":3951,"nodeType":"ParameterList","parameters":[],"src":"4444:2:31"},"returnParameters":{"id":3954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3955,"src":"4470:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3952,"name":"address","nodeType":"ElementaryTypeName","src":"4470:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4469:9:31"},"scope":3986,"src":"4411:68:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3956,"nodeType":"StructuredDocumentation","src":"4483:141:31","text":" @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\n @return Address of the Aave treasury"},"functionSelector":"ae167335","id":3961,"implemented":false,"kind":"function","modifiers":[],"name":"RESERVE_TREASURY_ADDRESS","nameLocation":"4636:24:31","nodeType":"FunctionDefinition","parameters":{"id":3957,"nodeType":"ParameterList","parameters":[],"src":"4660:2:31"},"returnParameters":{"id":3960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3959,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3961,"src":"4686:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3958,"name":"address","nodeType":"ElementaryTypeName","src":"4686:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4685:9:31"},"scope":3986,"src":"4627:68:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3962,"nodeType":"StructuredDocumentation","src":"4699:212:31","text":" @notice Get the domain separator for the token\n @dev Return cached value if chainId matches cache, otherwise recomputes separator\n @return The domain separator of the token at current chain"},"functionSelector":"3644e515","id":3967,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"4923:16:31","nodeType":"FunctionDefinition","parameters":{"id":3963,"nodeType":"ParameterList","parameters":[],"src":"4939:2:31"},"returnParameters":{"id":3966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3965,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3967,"src":"4965:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3964,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4965:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4964:9:31"},"scope":3986,"src":"4914:60:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3968,"nodeType":"StructuredDocumentation","src":"4978:130:31","text":" @notice Returns the nonce for owner.\n @param owner The address of the owner\n @return The nonce of the owner"},"functionSelector":"7ecebe00","id":3975,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"5120:6:31","nodeType":"FunctionDefinition","parameters":{"id":3971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3970,"mutability":"mutable","name":"owner","nameLocation":"5135:5:31","nodeType":"VariableDeclaration","scope":3975,"src":"5127:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3969,"name":"address","nodeType":"ElementaryTypeName","src":"5127:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5126:15:31"},"returnParameters":{"id":3974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3973,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3975,"src":"5165:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3972,"name":"uint256","nodeType":"ElementaryTypeName","src":"5165:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5164:9:31"},"scope":3986,"src":"5111:63:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3976,"nodeType":"StructuredDocumentation","src":"5178:211:31","text":" @notice Rescue and transfer tokens locked in this contract\n @param token The address of the token\n @param to The address of the recipient\n @param amount The amount of token to transfer"},"functionSelector":"cea9d26f","id":3985,"implemented":false,"kind":"function","modifiers":[],"name":"rescueTokens","nameLocation":"5401:12:31","nodeType":"FunctionDefinition","parameters":{"id":3983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3978,"mutability":"mutable","name":"token","nameLocation":"5422:5:31","nodeType":"VariableDeclaration","scope":3985,"src":"5414:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3977,"name":"address","nodeType":"ElementaryTypeName","src":"5414:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3980,"mutability":"mutable","name":"to","nameLocation":"5437:2:31","nodeType":"VariableDeclaration","scope":3985,"src":"5429:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3979,"name":"address","nodeType":"ElementaryTypeName","src":"5429:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3982,"mutability":"mutable","name":"amount","nameLocation":"5449:6:31","nodeType":"VariableDeclaration","scope":3985,"src":"5441:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3981,"name":"uint256","nodeType":"ElementaryTypeName","src":"5441:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5413:43:31"},"returnParameters":{"id":3984,"nodeType":"ParameterList","parameters":[],"src":"5465:0:31"},"scope":3986,"src":"5392:74:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3987,"src":"361:5107:31","usedErrors":[]}],"src":"37:5432:31"},"id":31},"contracts/interfaces/IAaveIncentivesController.sol":{"ast":{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","exportedSymbols":{"IAaveIncentivesController":[4000]},"id":4001,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3988,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:32"},{"abstract":false,"baseContracts":[],"canonicalName":"IAaveIncentivesController","contractDependencies":[],"contractKind":"interface","documentation":{"id":3989,"nodeType":"StructuredDocumentation","src":"62:231:32","text":" @title IAaveIncentivesController\n @author Aave\n @notice Defines the basic interface for an Aave Incentives Controller.\n @dev It only contains one single function, needed as a hook on aToken and debtToken transfers."},"fullyImplemented":false,"id":4000,"linearizedBaseContracts":[4000],"name":"IAaveIncentivesController","nameLocation":"304:25:32","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3990,"nodeType":"StructuredDocumentation","src":"334:420:32","text":" @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\n @dev The units of `totalSupply` and `userBalance` should be the same.\n @param user The address of the user whose asset balance has changed\n @param totalSupply The total supply of the asset prior to user balance change\n @param userBalance The previous user balance prior to balance change"},"functionSelector":"31873e2e","id":3999,"implemented":false,"kind":"function","modifiers":[],"name":"handleAction","nameLocation":"766:12:32","nodeType":"FunctionDefinition","parameters":{"id":3997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3992,"mutability":"mutable","name":"user","nameLocation":"787:4:32","nodeType":"VariableDeclaration","scope":3999,"src":"779:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3991,"name":"address","nodeType":"ElementaryTypeName","src":"779:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3994,"mutability":"mutable","name":"totalSupply","nameLocation":"801:11:32","nodeType":"VariableDeclaration","scope":3999,"src":"793:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3993,"name":"uint256","nodeType":"ElementaryTypeName","src":"793:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3996,"mutability":"mutable","name":"userBalance","nameLocation":"822:11:32","nodeType":"VariableDeclaration","scope":3999,"src":"814:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3995,"name":"uint256","nodeType":"ElementaryTypeName","src":"814:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"778:56:32"},"returnParameters":{"id":3998,"nodeType":"ParameterList","parameters":[],"src":"843:0:32"},"scope":4000,"src":"757:87:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4001,"src":"294:552:32","usedErrors":[]}],"src":"37:810:32"},"id":32},"contracts/interfaces/IAaveOracle.sol":{"ast":{"absolutePath":"contracts/interfaces/IAaveOracle.sol","exportedSymbols":{"IAaveOracle":[4076],"IPoolAddressesProvider":[5282],"IPriceOracleGetter":[6048]},"id":4077,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4002,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:33"},{"absolutePath":"contracts/interfaces/IPriceOracleGetter.sol","file":"./IPriceOracleGetter.sol","id":4004,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4077,"sourceUnit":6049,"src":"62:60:33","symbolAliases":[{"foreign":{"id":4003,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:18:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":4006,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4077,"sourceUnit":5283,"src":"123:68:33","symbolAliases":[{"foreign":{"id":4005,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"131:22:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4008,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":6048,"src":"323:18:33"},"id":4009,"nodeType":"InheritanceSpecifier","src":"323:18:33"}],"canonicalName":"IAaveOracle","contractDependencies":[],"contractKind":"interface","documentation":{"id":4007,"nodeType":"StructuredDocumentation","src":"193:104:33","text":" @title IAaveOracle\n @author Aave\n @notice Defines the basic interface for the Aave Oracle"},"fullyImplemented":false,"id":4076,"linearizedBaseContracts":[4076,6048],"name":"IAaveOracle","nameLocation":"308:11:33","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4010,"nodeType":"StructuredDocumentation","src":"346:185:33","text":" @dev Emitted after the base currency is set\n @param baseCurrency The base currency of used for price quotes\n @param baseCurrencyUnit The unit of the base currency"},"id":4016,"name":"BaseCurrencySet","nameLocation":"540:15:33","nodeType":"EventDefinition","parameters":{"id":4015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4012,"indexed":true,"mutability":"mutable","name":"baseCurrency","nameLocation":"572:12:33","nodeType":"VariableDeclaration","scope":4016,"src":"556:28:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4011,"name":"address","nodeType":"ElementaryTypeName","src":"556:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4014,"indexed":false,"mutability":"mutable","name":"baseCurrencyUnit","nameLocation":"594:16:33","nodeType":"VariableDeclaration","scope":4016,"src":"586:24:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4013,"name":"uint256","nodeType":"ElementaryTypeName","src":"586:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"555:56:33"},"src":"534:78:33"},{"anonymous":false,"documentation":{"id":4017,"nodeType":"StructuredDocumentation","src":"616:165:33","text":" @dev Emitted after the price source of an asset is updated\n @param asset The address of the asset\n @param source The price source of the asset"},"id":4023,"name":"AssetSourceUpdated","nameLocation":"790:18:33","nodeType":"EventDefinition","parameters":{"id":4022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4019,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"825:5:33","nodeType":"VariableDeclaration","scope":4023,"src":"809:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4018,"name":"address","nodeType":"ElementaryTypeName","src":"809:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4021,"indexed":true,"mutability":"mutable","name":"source","nameLocation":"848:6:33","nodeType":"VariableDeclaration","scope":4023,"src":"832:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4020,"name":"address","nodeType":"ElementaryTypeName","src":"832:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"808:47:33"},"src":"784:72:33"},{"anonymous":false,"documentation":{"id":4024,"nodeType":"StructuredDocumentation","src":"860:137:33","text":" @dev Emitted after the address of fallback oracle is updated\n @param fallbackOracle The address of the fallback oracle"},"id":4028,"name":"FallbackOracleUpdated","nameLocation":"1006:21:33","nodeType":"EventDefinition","parameters":{"id":4027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4026,"indexed":true,"mutability":"mutable","name":"fallbackOracle","nameLocation":"1044:14:33","nodeType":"VariableDeclaration","scope":4028,"src":"1028:30:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4025,"name":"address","nodeType":"ElementaryTypeName","src":"1028:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1027:32:33"},"src":"1000:60:33"},{"documentation":{"id":4029,"nodeType":"StructuredDocumentation","src":"1064:119:33","text":" @notice Returns the PoolAddressesProvider\n @return The address of the PoolAddressesProvider contract"},"functionSelector":"0542975c","id":4035,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"1195:18:33","nodeType":"FunctionDefinition","parameters":{"id":4030,"nodeType":"ParameterList","parameters":[],"src":"1213:2:33"},"returnParameters":{"id":4034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4035,"src":"1239:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":4032,"nodeType":"UserDefinedTypeName","pathNode":{"id":4031,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1239:22:33"},"referencedDeclaration":5282,"src":"1239:22:33","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1238:24:33"},"scope":4076,"src":"1186:77:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4036,"nodeType":"StructuredDocumentation","src":"1267:165:33","text":" @notice Sets or replaces price sources of assets\n @param assets The addresses of the assets\n @param sources The addresses of the price sources"},"functionSelector":"abfd5310","id":4045,"implemented":false,"kind":"function","modifiers":[],"name":"setAssetSources","nameLocation":"1444:15:33","nodeType":"FunctionDefinition","parameters":{"id":4043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4039,"mutability":"mutable","name":"assets","nameLocation":"1479:6:33","nodeType":"VariableDeclaration","scope":4045,"src":"1460:25:33","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4037,"name":"address","nodeType":"ElementaryTypeName","src":"1460:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4038,"nodeType":"ArrayTypeName","src":"1460:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":4042,"mutability":"mutable","name":"sources","nameLocation":"1506:7:33","nodeType":"VariableDeclaration","scope":4045,"src":"1487:26:33","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4040,"name":"address","nodeType":"ElementaryTypeName","src":"1487:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4041,"nodeType":"ArrayTypeName","src":"1487:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1459:55:33"},"returnParameters":{"id":4044,"nodeType":"ParameterList","parameters":[],"src":"1523:0:33"},"scope":4076,"src":"1435:89:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4046,"nodeType":"StructuredDocumentation","src":"1528:109:33","text":" @notice Sets the fallback oracle\n @param fallbackOracle The address of the fallback oracle"},"functionSelector":"170aee73","id":4051,"implemented":false,"kind":"function","modifiers":[],"name":"setFallbackOracle","nameLocation":"1649:17:33","nodeType":"FunctionDefinition","parameters":{"id":4049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4048,"mutability":"mutable","name":"fallbackOracle","nameLocation":"1675:14:33","nodeType":"VariableDeclaration","scope":4051,"src":"1667:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4047,"name":"address","nodeType":"ElementaryTypeName","src":"1667:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1666:24:33"},"returnParameters":{"id":4050,"nodeType":"ParameterList","parameters":[],"src":"1699:0:33"},"scope":4076,"src":"1640:60:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4052,"nodeType":"StructuredDocumentation","src":"1704:171:33","text":" @notice Returns a list of prices from a list of assets addresses\n @param assets The list of assets addresses\n @return The prices of the given assets"},"functionSelector":"9d23d9f2","id":4061,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetsPrices","nameLocation":"1887:15:33","nodeType":"FunctionDefinition","parameters":{"id":4056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4055,"mutability":"mutable","name":"assets","nameLocation":"1922:6:33","nodeType":"VariableDeclaration","scope":4061,"src":"1903:25:33","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4053,"name":"address","nodeType":"ElementaryTypeName","src":"1903:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4054,"nodeType":"ArrayTypeName","src":"1903:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1902:27:33"},"returnParameters":{"id":4060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4059,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4061,"src":"1953:16:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4057,"name":"uint256","nodeType":"ElementaryTypeName","src":"1953:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4058,"nodeType":"ArrayTypeName","src":"1953:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1952:18:33"},"scope":4076,"src":"1878:93:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4062,"nodeType":"StructuredDocumentation","src":"1975:159:33","text":" @notice Returns the address of the source for an asset address\n @param asset The address of the asset\n @return The address of the source"},"functionSelector":"92bf2be0","id":4069,"implemented":false,"kind":"function","modifiers":[],"name":"getSourceOfAsset","nameLocation":"2146:16:33","nodeType":"FunctionDefinition","parameters":{"id":4065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4064,"mutability":"mutable","name":"asset","nameLocation":"2171:5:33","nodeType":"VariableDeclaration","scope":4069,"src":"2163:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4063,"name":"address","nodeType":"ElementaryTypeName","src":"2163:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2162:15:33"},"returnParameters":{"id":4068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4069,"src":"2201:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4066,"name":"address","nodeType":"ElementaryTypeName","src":"2201:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2200:9:33"},"scope":4076,"src":"2137:73:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4070,"nodeType":"StructuredDocumentation","src":"2214:113:33","text":" @notice Returns the address of the fallback oracle\n @return The address of the fallback oracle"},"functionSelector":"6210308c","id":4075,"implemented":false,"kind":"function","modifiers":[],"name":"getFallbackOracle","nameLocation":"2339:17:33","nodeType":"FunctionDefinition","parameters":{"id":4071,"nodeType":"ParameterList","parameters":[],"src":"2356:2:33"},"returnParameters":{"id":4074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4073,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4075,"src":"2382:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4072,"name":"address","nodeType":"ElementaryTypeName","src":"2382:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2381:9:33"},"scope":4076,"src":"2330:61:33","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4077,"src":"298:2095:33","usedErrors":[]}],"src":"37:2357:33"},"id":33},"contracts/interfaces/ICreditDelegationToken.sol":{"ast":{"absolutePath":"contracts/interfaces/ICreditDelegationToken.sol","exportedSymbols":{"ICreditDelegationToken":[4127]},"id":4128,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4078,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:34"},{"abstract":false,"baseContracts":[],"canonicalName":"ICreditDelegationToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":4079,"nodeType":"StructuredDocumentation","src":"62:137:34","text":" @title ICreditDelegationToken\n @author Aave\n @notice Defines the basic interface for a token supporting credit delegation."},"fullyImplemented":false,"id":4127,"linearizedBaseContracts":[4127],"name":"ICreditDelegationToken","nameLocation":"210:22:34","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4080,"nodeType":"StructuredDocumentation","src":"237:268:34","text":" @dev Emitted on `approveDelegation` and `borrowAllowance\n @param fromUser The address of the delegator\n @param toUser The address of the delegatee\n @param asset The address of the delegated asset\n @param amount The amount being delegated"},"id":4090,"name":"BorrowAllowanceDelegated","nameLocation":"514:24:34","nodeType":"EventDefinition","parameters":{"id":4089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4082,"indexed":true,"mutability":"mutable","name":"fromUser","nameLocation":"560:8:34","nodeType":"VariableDeclaration","scope":4090,"src":"544:24:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4081,"name":"address","nodeType":"ElementaryTypeName","src":"544:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4084,"indexed":true,"mutability":"mutable","name":"toUser","nameLocation":"590:6:34","nodeType":"VariableDeclaration","scope":4090,"src":"574:22:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4083,"name":"address","nodeType":"ElementaryTypeName","src":"574:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4086,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"618:5:34","nodeType":"VariableDeclaration","scope":4090,"src":"602:21:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4085,"name":"address","nodeType":"ElementaryTypeName","src":"602:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4088,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"637:6:34","nodeType":"VariableDeclaration","scope":4090,"src":"629:14:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4087,"name":"uint256","nodeType":"ElementaryTypeName","src":"629:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"538:109:34"},"src":"508:140:34"},{"documentation":{"id":4091,"nodeType":"StructuredDocumentation","src":"652:358:34","text":" @notice Delegates borrowing power to a user on the specific debt token.\n Delegation will still respect the liquidation constraints (even if delegated, a\n delegatee cannot force a delegator HF to go below 1)\n @param delegatee The address receiving the delegated borrowing power\n @param amount The maximum amount being delegated."},"functionSelector":"c04a8a10","id":4098,"implemented":false,"kind":"function","modifiers":[],"name":"approveDelegation","nameLocation":"1022:17:34","nodeType":"FunctionDefinition","parameters":{"id":4096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4093,"mutability":"mutable","name":"delegatee","nameLocation":"1048:9:34","nodeType":"VariableDeclaration","scope":4098,"src":"1040:17:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4092,"name":"address","nodeType":"ElementaryTypeName","src":"1040:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4095,"mutability":"mutable","name":"amount","nameLocation":"1067:6:34","nodeType":"VariableDeclaration","scope":4098,"src":"1059:14:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4094,"name":"uint256","nodeType":"ElementaryTypeName","src":"1059:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1039:35:34"},"returnParameters":{"id":4097,"nodeType":"ParameterList","parameters":[],"src":"1083:0:34"},"scope":4127,"src":"1013:71:34","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4099,"nodeType":"StructuredDocumentation","src":"1088:209:34","text":" @notice Returns the borrow allowance of the user\n @param fromUser The user to giving allowance\n @param toUser The user to give allowance to\n @return The current allowance of `toUser`"},"functionSelector":"6bd76d24","id":4108,"implemented":false,"kind":"function","modifiers":[],"name":"borrowAllowance","nameLocation":"1309:15:34","nodeType":"FunctionDefinition","parameters":{"id":4104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4101,"mutability":"mutable","name":"fromUser","nameLocation":"1333:8:34","nodeType":"VariableDeclaration","scope":4108,"src":"1325:16:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4100,"name":"address","nodeType":"ElementaryTypeName","src":"1325:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4103,"mutability":"mutable","name":"toUser","nameLocation":"1351:6:34","nodeType":"VariableDeclaration","scope":4108,"src":"1343:14:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4102,"name":"address","nodeType":"ElementaryTypeName","src":"1343:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1324:34:34"},"returnParameters":{"id":4107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4108,"src":"1382:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4105,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:34"},"scope":4127,"src":"1300:91:34","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4109,"nodeType":"StructuredDocumentation","src":"1395:449:34","text":" @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\n @param delegator The delegator of the credit\n @param delegatee The delegatee that can use the credit\n @param value The amount to be delegated\n @param deadline The deadline timestamp, type(uint256).max for max deadline\n @param v The V signature param\n @param s The S signature param\n @param r The R signature param"},"functionSelector":"0b52d558","id":4126,"implemented":false,"kind":"function","modifiers":[],"name":"delegationWithSig","nameLocation":"1856:17:34","nodeType":"FunctionDefinition","parameters":{"id":4124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4111,"mutability":"mutable","name":"delegator","nameLocation":"1887:9:34","nodeType":"VariableDeclaration","scope":4126,"src":"1879:17:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4110,"name":"address","nodeType":"ElementaryTypeName","src":"1879:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4113,"mutability":"mutable","name":"delegatee","nameLocation":"1910:9:34","nodeType":"VariableDeclaration","scope":4126,"src":"1902:17:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4112,"name":"address","nodeType":"ElementaryTypeName","src":"1902:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4115,"mutability":"mutable","name":"value","nameLocation":"1933:5:34","nodeType":"VariableDeclaration","scope":4126,"src":"1925:13:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4114,"name":"uint256","nodeType":"ElementaryTypeName","src":"1925:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4117,"mutability":"mutable","name":"deadline","nameLocation":"1952:8:34","nodeType":"VariableDeclaration","scope":4126,"src":"1944:16:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4116,"name":"uint256","nodeType":"ElementaryTypeName","src":"1944:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4119,"mutability":"mutable","name":"v","nameLocation":"1972:1:34","nodeType":"VariableDeclaration","scope":4126,"src":"1966:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4118,"name":"uint8","nodeType":"ElementaryTypeName","src":"1966:5:34","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4121,"mutability":"mutable","name":"r","nameLocation":"1987:1:34","nodeType":"VariableDeclaration","scope":4126,"src":"1979:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4120,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1979:7:34","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4123,"mutability":"mutable","name":"s","nameLocation":"2002:1:34","nodeType":"VariableDeclaration","scope":4126,"src":"1994:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4122,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1994:7:34","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1873:134:34"},"returnParameters":{"id":4125,"nodeType":"ParameterList","parameters":[],"src":"2016:0:34"},"scope":4127,"src":"1847:170:34","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4128,"src":"200:1819:34","usedErrors":[]}],"src":"37:1983:34"},"id":34},"contracts/interfaces/IDefaultInterestRateStrategy.sol":{"ast":{"absolutePath":"contracts/interfaces/IDefaultInterestRateStrategy.sol","exportedSymbols":{"IDefaultInterestRateStrategy":[4216],"IPoolAddressesProvider":[5282],"IReserveInterestRateStrategy":[6126]},"id":4217,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4129,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:35"},{"absolutePath":"contracts/interfaces/IReserveInterestRateStrategy.sol","file":"./IReserveInterestRateStrategy.sol","id":4131,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4217,"sourceUnit":6127,"src":"62:80:35","symbolAliases":[{"foreign":{"id":4130,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:28:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":4133,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4217,"sourceUnit":5283,"src":"143:68:35","symbolAliases":[{"foreign":{"id":4132,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:22:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4135,"name":"IReserveInterestRateStrategy","nodeType":"IdentifierPath","referencedDeclaration":6126,"src":"399:28:35"},"id":4136,"nodeType":"InheritanceSpecifier","src":"399:28:35"}],"canonicalName":"IDefaultInterestRateStrategy","contractDependencies":[],"contractKind":"interface","documentation":{"id":4134,"nodeType":"StructuredDocumentation","src":"213:143:35","text":" @title IDefaultInterestRateStrategy\n @author Aave\n @notice Defines the basic interface of the DefaultReserveInterestRateStrategy"},"fullyImplemented":false,"id":4216,"linearizedBaseContracts":[4216,6126],"name":"IDefaultInterestRateStrategy","nameLocation":"367:28:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4137,"nodeType":"StructuredDocumentation","src":"432:166:35","text":" @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\n @return The optimal usage ratio, expressed in ray."},"functionSelector":"54c365c6","id":4142,"implemented":false,"kind":"function","modifiers":[],"name":"OPTIMAL_USAGE_RATIO","nameLocation":"610:19:35","nodeType":"FunctionDefinition","parameters":{"id":4138,"nodeType":"ParameterList","parameters":[],"src":"629:2:35"},"returnParameters":{"id":4141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4142,"src":"655:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4139,"name":"uint256","nodeType":"ElementaryTypeName","src":"655:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"654:9:35"},"scope":4216,"src":"601:63:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4143,"nodeType":"StructuredDocumentation","src":"668:156:35","text":" @notice Returns the optimal stable to total debt ratio of the reserve.\n @return The optimal stable to total debt ratio, expressed in ray."},"functionSelector":"6fb92589","id":4148,"implemented":false,"kind":"function","modifiers":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"836:34:35","nodeType":"FunctionDefinition","parameters":{"id":4144,"nodeType":"ParameterList","parameters":[],"src":"870:2:35"},"returnParameters":{"id":4147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4146,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4148,"src":"896:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4145,"name":"uint256","nodeType":"ElementaryTypeName","src":"896:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"895:9:35"},"scope":4216,"src":"827:78:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4149,"nodeType":"StructuredDocumentation","src":"909:226:35","text":" @notice Returns the excess usage ratio above the optimal.\n @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\n @return The max excess usage ratio, expressed in ray."},"functionSelector":"a9c622f8","id":4154,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_EXCESS_USAGE_RATIO","nameLocation":"1147:22:35","nodeType":"FunctionDefinition","parameters":{"id":4150,"nodeType":"ParameterList","parameters":[],"src":"1169:2:35"},"returnParameters":{"id":4153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4154,"src":"1195:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4151,"name":"uint256","nodeType":"ElementaryTypeName","src":"1195:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1194:9:35"},"scope":4216,"src":"1138:66:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4155,"nodeType":"StructuredDocumentation","src":"1208:262:35","text":" @notice Returns the excess stable debt ratio above the optimal.\n @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\n @return The max excess stable to total debt ratio, expressed in ray."},"functionSelector":"fe5fd698","id":4160,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"1482:37:35","nodeType":"FunctionDefinition","parameters":{"id":4156,"nodeType":"ParameterList","parameters":[],"src":"1519:2:35"},"returnParameters":{"id":4159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4160,"src":"1545:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4157,"name":"uint256","nodeType":"ElementaryTypeName","src":"1545:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1544:9:35"},"scope":4216,"src":"1473:81:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4161,"nodeType":"StructuredDocumentation","src":"1558:134:35","text":" @notice Returns the address of the PoolAddressesProvider\n @return The address of the PoolAddressesProvider contract"},"functionSelector":"0542975c","id":4167,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"1704:18:35","nodeType":"FunctionDefinition","parameters":{"id":4162,"nodeType":"ParameterList","parameters":[],"src":"1722:2:35"},"returnParameters":{"id":4166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4165,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4167,"src":"1748:22:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":4164,"nodeType":"UserDefinedTypeName","pathNode":{"id":4163,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1748:22:35"},"referencedDeclaration":5282,"src":"1748:22:35","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1747:24:35"},"scope":4216,"src":"1695:77:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4168,"nodeType":"StructuredDocumentation","src":"1776:216:35","text":" @notice Returns the variable rate slope below optimal usage ratio\n @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\n @return The variable rate slope, expressed in ray"},"functionSelector":"0b3429a2","id":4173,"implemented":false,"kind":"function","modifiers":[],"name":"getVariableRateSlope1","nameLocation":"2004:21:35","nodeType":"FunctionDefinition","parameters":{"id":4169,"nodeType":"ParameterList","parameters":[],"src":"2025:2:35"},"returnParameters":{"id":4172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4171,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4173,"src":"2051:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4170,"name":"uint256","nodeType":"ElementaryTypeName","src":"2051:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2050:9:35"},"scope":4216,"src":"1995:65:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4174,"nodeType":"StructuredDocumentation","src":"2064:207:35","text":" @notice Returns the variable rate slope above optimal usage ratio\n @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\n @return The variable rate slope, expressed in ray"},"functionSelector":"f4202409","id":4179,"implemented":false,"kind":"function","modifiers":[],"name":"getVariableRateSlope2","nameLocation":"2283:21:35","nodeType":"FunctionDefinition","parameters":{"id":4175,"nodeType":"ParameterList","parameters":[],"src":"2304:2:35"},"returnParameters":{"id":4178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4177,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4179,"src":"2330:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4176,"name":"uint256","nodeType":"ElementaryTypeName","src":"2330:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2329:9:35"},"scope":4216,"src":"2274:65:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4180,"nodeType":"StructuredDocumentation","src":"2343:210:35","text":" @notice Returns the stable rate slope below optimal usage ratio\n @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\n @return The stable rate slope, expressed in ray"},"functionSelector":"d5cd7391","id":4185,"implemented":false,"kind":"function","modifiers":[],"name":"getStableRateSlope1","nameLocation":"2565:19:35","nodeType":"FunctionDefinition","parameters":{"id":4181,"nodeType":"ParameterList","parameters":[],"src":"2584:2:35"},"returnParameters":{"id":4184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4185,"src":"2610:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4182,"name":"uint256","nodeType":"ElementaryTypeName","src":"2610:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2609:9:35"},"scope":4216,"src":"2556:63:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4186,"nodeType":"StructuredDocumentation","src":"2623:203:35","text":" @notice Returns the stable rate slope above optimal usage ratio\n @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\n @return The stable rate slope, expressed in ray"},"functionSelector":"14e32da4","id":4191,"implemented":false,"kind":"function","modifiers":[],"name":"getStableRateSlope2","nameLocation":"2838:19:35","nodeType":"FunctionDefinition","parameters":{"id":4187,"nodeType":"ParameterList","parameters":[],"src":"2857:2:35"},"returnParameters":{"id":4190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4189,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4191,"src":"2883:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4188,"name":"uint256","nodeType":"ElementaryTypeName","src":"2883:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2882:9:35"},"scope":4216,"src":"2829:63:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4192,"nodeType":"StructuredDocumentation","src":"2896:234:35","text":" @notice Returns the stable rate excess offset\n @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\n @return The stable rate excess offset, expressed in ray"},"functionSelector":"bc626908","id":4197,"implemented":false,"kind":"function","modifiers":[],"name":"getStableRateExcessOffset","nameLocation":"3142:25:35","nodeType":"FunctionDefinition","parameters":{"id":4193,"nodeType":"ParameterList","parameters":[],"src":"3167:2:35"},"returnParameters":{"id":4196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4197,"src":"3193:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4194,"name":"uint256","nodeType":"ElementaryTypeName","src":"3193:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3192:9:35"},"scope":4216,"src":"3133:69:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4198,"nodeType":"StructuredDocumentation","src":"3206:117:35","text":" @notice Returns the base stable borrow rate\n @return The base stable borrow rate, expressed in ray"},"functionSelector":"acd78686","id":4203,"implemented":false,"kind":"function","modifiers":[],"name":"getBaseStableBorrowRate","nameLocation":"3335:23:35","nodeType":"FunctionDefinition","parameters":{"id":4199,"nodeType":"ParameterList","parameters":[],"src":"3358:2:35"},"returnParameters":{"id":4202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4201,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4203,"src":"3384:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4200,"name":"uint256","nodeType":"ElementaryTypeName","src":"3384:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3383:9:35"},"scope":4216,"src":"3326:67:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4204,"nodeType":"StructuredDocumentation","src":"3397:121:35","text":" @notice Returns the base variable borrow rate\n @return The base variable borrow rate, expressed in ray"},"functionSelector":"34762ca5","id":4209,"implemented":false,"kind":"function","modifiers":[],"name":"getBaseVariableBorrowRate","nameLocation":"3530:25:35","nodeType":"FunctionDefinition","parameters":{"id":4205,"nodeType":"ParameterList","parameters":[],"src":"3555:2:35"},"returnParameters":{"id":4208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4209,"src":"3581:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4206,"name":"uint256","nodeType":"ElementaryTypeName","src":"3581:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3580:9:35"},"scope":4216,"src":"3521:69:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4210,"nodeType":"StructuredDocumentation","src":"3594:127:35","text":" @notice Returns the maximum variable borrow rate\n @return The maximum variable borrow rate, expressed in ray"},"functionSelector":"80031e37","id":4215,"implemented":false,"kind":"function","modifiers":[],"name":"getMaxVariableBorrowRate","nameLocation":"3733:24:35","nodeType":"FunctionDefinition","parameters":{"id":4211,"nodeType":"ParameterList","parameters":[],"src":"3757:2:35"},"returnParameters":{"id":4214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4215,"src":"3783:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4212,"name":"uint256","nodeType":"ElementaryTypeName","src":"3783:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3782:9:35"},"scope":4216,"src":"3724:68:35","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4217,"src":"357:3437:35","usedErrors":[]}],"src":"37:3758:35"},"id":35},"contracts/interfaces/IDelegationToken.sol":{"ast":{"absolutePath":"contracts/interfaces/IDelegationToken.sol","exportedSymbols":{"IDelegationToken":[4226]},"id":4227,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4218,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:36"},{"abstract":false,"baseContracts":[],"canonicalName":"IDelegationToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":4219,"nodeType":"StructuredDocumentation","src":"62:132:36","text":" @title IDelegationToken\n @author Aave\n @notice Implements an interface for tokens with delegation COMP/UNI compatible"},"fullyImplemented":false,"id":4226,"linearizedBaseContracts":[4226],"name":"IDelegationToken","nameLocation":"205:16:36","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4220,"nodeType":"StructuredDocumentation","src":"226:110:36","text":" @notice Delegate voting power to a delegatee\n @param delegatee The address of the delegatee"},"functionSelector":"5c19a95c","id":4225,"implemented":false,"kind":"function","modifiers":[],"name":"delegate","nameLocation":"348:8:36","nodeType":"FunctionDefinition","parameters":{"id":4223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4222,"mutability":"mutable","name":"delegatee","nameLocation":"365:9:36","nodeType":"VariableDeclaration","scope":4225,"src":"357:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4221,"name":"address","nodeType":"ElementaryTypeName","src":"357:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"356:19:36"},"returnParameters":{"id":4224,"nodeType":"ParameterList","parameters":[],"src":"384:0:36"},"scope":4226,"src":"339:46:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4227,"src":"195:192:36","usedErrors":[]}],"src":"37:351:36"},"id":36},"contracts/interfaces/IERC20WithPermit.sol":{"ast":{"absolutePath":"contracts/interfaces/IERC20WithPermit.sol","exportedSymbols":{"IERC20":[1442],"IERC20WithPermit":[4252]},"id":4253,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4228,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:37"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../dependencies/openzeppelin/contracts/IERC20.sol","id":4230,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4253,"sourceUnit":1443,"src":"62:73:37","symbolAliases":[{"foreign":{"id":4229,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4232,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"274:6:37"},"id":4233,"nodeType":"InheritanceSpecifier","src":"274:6:37"}],"canonicalName":"IERC20WithPermit","contractDependencies":[],"contractKind":"interface","documentation":{"id":4231,"nodeType":"StructuredDocumentation","src":"137:106:37","text":" @title IERC20WithPermit\n @author Aave\n @notice Interface for the permit function (EIP-2612)"},"fullyImplemented":false,"id":4252,"linearizedBaseContracts":[4252,1442],"name":"IERC20WithPermit","nameLocation":"254:16:37","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4234,"nodeType":"StructuredDocumentation","src":"285:494:37","text":" @notice Allow passing a signed message to approve spending\n @dev implements the permit function as for\n https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\n @param owner The owner of the funds\n @param spender The spender\n @param value The amount\n @param deadline The deadline timestamp, type(uint256).max for max deadline\n @param v Signature param\n @param s Signature param\n @param r Signature param"},"functionSelector":"d505accf","id":4251,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"791:6:37","nodeType":"FunctionDefinition","parameters":{"id":4249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4236,"mutability":"mutable","name":"owner","nameLocation":"811:5:37","nodeType":"VariableDeclaration","scope":4251,"src":"803:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4235,"name":"address","nodeType":"ElementaryTypeName","src":"803:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4238,"mutability":"mutable","name":"spender","nameLocation":"830:7:37","nodeType":"VariableDeclaration","scope":4251,"src":"822:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4237,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4240,"mutability":"mutable","name":"value","nameLocation":"851:5:37","nodeType":"VariableDeclaration","scope":4251,"src":"843:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4239,"name":"uint256","nodeType":"ElementaryTypeName","src":"843:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4242,"mutability":"mutable","name":"deadline","nameLocation":"870:8:37","nodeType":"VariableDeclaration","scope":4251,"src":"862:16:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4241,"name":"uint256","nodeType":"ElementaryTypeName","src":"862:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4244,"mutability":"mutable","name":"v","nameLocation":"890:1:37","nodeType":"VariableDeclaration","scope":4251,"src":"884:7:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4243,"name":"uint8","nodeType":"ElementaryTypeName","src":"884:5:37","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4246,"mutability":"mutable","name":"r","nameLocation":"905:1:37","nodeType":"VariableDeclaration","scope":4251,"src":"897:9:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"897:7:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4248,"mutability":"mutable","name":"s","nameLocation":"920:1:37","nodeType":"VariableDeclaration","scope":4251,"src":"912:9:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4247,"name":"bytes32","nodeType":"ElementaryTypeName","src":"912:7:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"797:128:37"},"returnParameters":{"id":4250,"nodeType":"ParameterList","parameters":[],"src":"934:0:37"},"scope":4252,"src":"782:153:37","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4253,"src":"244:693:37","usedErrors":[]}],"src":"37:901:37"},"id":37},"contracts/interfaces/IInitializableAToken.sol":{"ast":{"absolutePath":"contracts/interfaces/IInitializableAToken.sol","exportedSymbols":{"IAaveIncentivesController":[4000],"IInitializableAToken":[4301],"IPool":[5073]},"id":4302,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4254,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:38"},{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","file":"./IAaveIncentivesController.sol","id":4256,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4302,"sourceUnit":4001,"src":"62:74:38","symbolAliases":[{"foreign":{"id":4255,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:25:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"./IPool.sol","id":4258,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4302,"sourceUnit":5074,"src":"137:34:38","symbolAliases":[{"foreign":{"id":4257,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:5:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IInitializableAToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":4259,"nodeType":"StructuredDocumentation","src":"173:113:38","text":" @title IInitializableAToken\n @author Aave\n @notice Interface for the initialize function on AToken"},"fullyImplemented":false,"id":4301,"linearizedBaseContracts":[4301],"name":"IInitializableAToken","nameLocation":"297:20:38","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4260,"nodeType":"StructuredDocumentation","src":"322:543:38","text":" @dev Emitted when an aToken is initialized\n @param underlyingAsset The address of the underlying asset\n @param pool The address of the associated pool\n @param treasury The address of the treasury\n @param incentivesController The address of the incentives controller for this aToken\n @param aTokenDecimals The decimals of the underlying\n @param aTokenName The name of the aToken\n @param aTokenSymbol The symbol of the aToken\n @param params A set of encoded parameters for additional initialization"},"id":4278,"name":"Initialized","nameLocation":"874:11:38","nodeType":"EventDefinition","parameters":{"id":4277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4262,"indexed":true,"mutability":"mutable","name":"underlyingAsset","nameLocation":"907:15:38","nodeType":"VariableDeclaration","scope":4278,"src":"891:31:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4261,"name":"address","nodeType":"ElementaryTypeName","src":"891:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4264,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"944:4:38","nodeType":"VariableDeclaration","scope":4278,"src":"928:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4263,"name":"address","nodeType":"ElementaryTypeName","src":"928:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4266,"indexed":false,"mutability":"mutable","name":"treasury","nameLocation":"962:8:38","nodeType":"VariableDeclaration","scope":4278,"src":"954:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4265,"name":"address","nodeType":"ElementaryTypeName","src":"954:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4268,"indexed":false,"mutability":"mutable","name":"incentivesController","nameLocation":"984:20:38","nodeType":"VariableDeclaration","scope":4278,"src":"976:28:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4267,"name":"address","nodeType":"ElementaryTypeName","src":"976:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4270,"indexed":false,"mutability":"mutable","name":"aTokenDecimals","nameLocation":"1016:14:38","nodeType":"VariableDeclaration","scope":4278,"src":"1010:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4269,"name":"uint8","nodeType":"ElementaryTypeName","src":"1010:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4272,"indexed":false,"mutability":"mutable","name":"aTokenName","nameLocation":"1043:10:38","nodeType":"VariableDeclaration","scope":4278,"src":"1036:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4271,"name":"string","nodeType":"ElementaryTypeName","src":"1036:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4274,"indexed":false,"mutability":"mutable","name":"aTokenSymbol","nameLocation":"1066:12:38","nodeType":"VariableDeclaration","scope":4278,"src":"1059:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4273,"name":"string","nodeType":"ElementaryTypeName","src":"1059:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4276,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"1090:6:38","nodeType":"VariableDeclaration","scope":4278,"src":"1084:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4275,"name":"bytes","nodeType":"ElementaryTypeName","src":"1084:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"885:215:38"},"src":"868:233:38"},{"documentation":{"id":4279,"nodeType":"StructuredDocumentation","src":"1105:659:38","text":" @notice Initializes the aToken\n @param pool The pool contract that is initializing this contract\n @param treasury The address of the Aave treasury, receiving the fees on this aToken\n @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\n @param incentivesController The smart contract managing potential incentives distribution\n @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\n @param aTokenName The name of the aToken\n @param aTokenSymbol The symbol of the aToken\n @param params A set of encoded parameters for additional initialization"},"functionSelector":"183fb413","id":4300,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1776:10:38","nodeType":"FunctionDefinition","parameters":{"id":4298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4282,"mutability":"mutable","name":"pool","nameLocation":"1798:4:38","nodeType":"VariableDeclaration","scope":4300,"src":"1792:10:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":4281,"nodeType":"UserDefinedTypeName","pathNode":{"id":4280,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1792:5:38"},"referencedDeclaration":5073,"src":"1792:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":4284,"mutability":"mutable","name":"treasury","nameLocation":"1816:8:38","nodeType":"VariableDeclaration","scope":4300,"src":"1808:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4283,"name":"address","nodeType":"ElementaryTypeName","src":"1808:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4286,"mutability":"mutable","name":"underlyingAsset","nameLocation":"1838:15:38","nodeType":"VariableDeclaration","scope":4300,"src":"1830:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4285,"name":"address","nodeType":"ElementaryTypeName","src":"1830:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4289,"mutability":"mutable","name":"incentivesController","nameLocation":"1885:20:38","nodeType":"VariableDeclaration","scope":4300,"src":"1859:46:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":4288,"nodeType":"UserDefinedTypeName","pathNode":{"id":4287,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"1859:25:38"},"referencedDeclaration":4000,"src":"1859:25:38","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":4291,"mutability":"mutable","name":"aTokenDecimals","nameLocation":"1917:14:38","nodeType":"VariableDeclaration","scope":4300,"src":"1911:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4290,"name":"uint8","nodeType":"ElementaryTypeName","src":"1911:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4293,"mutability":"mutable","name":"aTokenName","nameLocation":"1953:10:38","nodeType":"VariableDeclaration","scope":4300,"src":"1937:26:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":4292,"name":"string","nodeType":"ElementaryTypeName","src":"1937:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4295,"mutability":"mutable","name":"aTokenSymbol","nameLocation":"1985:12:38","nodeType":"VariableDeclaration","scope":4300,"src":"1969:28:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":4294,"name":"string","nodeType":"ElementaryTypeName","src":"1969:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4297,"mutability":"mutable","name":"params","nameLocation":"2018:6:38","nodeType":"VariableDeclaration","scope":4300,"src":"2003:21:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4296,"name":"bytes","nodeType":"ElementaryTypeName","src":"2003:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1786:242:38"},"returnParameters":{"id":4299,"nodeType":"ParameterList","parameters":[],"src":"2037:0:38"},"scope":4301,"src":"1767:271:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4302,"src":"287:1753:38","usedErrors":[]}],"src":"37:2004:38"},"id":38},"contracts/interfaces/IInitializableDebtToken.sol":{"ast":{"absolutePath":"contracts/interfaces/IInitializableDebtToken.sol","exportedSymbols":{"IAaveIncentivesController":[4000],"IInitializableDebtToken":[4346],"IPool":[5073]},"id":4347,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4303,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:39"},{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","file":"./IAaveIncentivesController.sol","id":4305,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4347,"sourceUnit":4001,"src":"62:74:39","symbolAliases":[{"foreign":{"id":4304,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:25:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"./IPool.sol","id":4307,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4347,"sourceUnit":5074,"src":"137:34:39","symbolAliases":[{"foreign":{"id":4306,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:5:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IInitializableDebtToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":4308,"nodeType":"StructuredDocumentation","src":"173:133:39","text":" @title IInitializableDebtToken\n @author Aave\n @notice Interface for the initialize function common between debt tokens"},"fullyImplemented":false,"id":4346,"linearizedBaseContracts":[4346],"name":"IInitializableDebtToken","nameLocation":"317:23:39","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4309,"nodeType":"StructuredDocumentation","src":"345:514:39","text":" @dev Emitted when a debt token is initialized\n @param underlyingAsset The address of the underlying asset\n @param pool The address of the associated pool\n @param incentivesController The address of the incentives controller for this aToken\n @param debtTokenDecimals The decimals of the debt token\n @param debtTokenName The name of the debt token\n @param debtTokenSymbol The symbol of the debt token\n @param params A set of encoded parameters for additional initialization"},"id":4325,"name":"Initialized","nameLocation":"868:11:39","nodeType":"EventDefinition","parameters":{"id":4324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4311,"indexed":true,"mutability":"mutable","name":"underlyingAsset","nameLocation":"901:15:39","nodeType":"VariableDeclaration","scope":4325,"src":"885:31:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4310,"name":"address","nodeType":"ElementaryTypeName","src":"885:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4313,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"938:4:39","nodeType":"VariableDeclaration","scope":4325,"src":"922:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4312,"name":"address","nodeType":"ElementaryTypeName","src":"922:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4315,"indexed":false,"mutability":"mutable","name":"incentivesController","nameLocation":"956:20:39","nodeType":"VariableDeclaration","scope":4325,"src":"948:28:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4314,"name":"address","nodeType":"ElementaryTypeName","src":"948:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4317,"indexed":false,"mutability":"mutable","name":"debtTokenDecimals","nameLocation":"988:17:39","nodeType":"VariableDeclaration","scope":4325,"src":"982:23:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4316,"name":"uint8","nodeType":"ElementaryTypeName","src":"982:5:39","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4319,"indexed":false,"mutability":"mutable","name":"debtTokenName","nameLocation":"1018:13:39","nodeType":"VariableDeclaration","scope":4325,"src":"1011:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4318,"name":"string","nodeType":"ElementaryTypeName","src":"1011:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4321,"indexed":false,"mutability":"mutable","name":"debtTokenSymbol","nameLocation":"1044:15:39","nodeType":"VariableDeclaration","scope":4325,"src":"1037:22:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4320,"name":"string","nodeType":"ElementaryTypeName","src":"1037:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4323,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"1071:6:39","nodeType":"VariableDeclaration","scope":4325,"src":"1065:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4322,"name":"bytes","nodeType":"ElementaryTypeName","src":"1065:5:39","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"879:202:39"},"src":"862:220:39"},{"documentation":{"id":4326,"nodeType":"StructuredDocumentation","src":"1086:585:39","text":" @notice Initializes the debt token.\n @param pool The pool contract that is initializing this contract\n @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\n @param incentivesController The smart contract managing potential incentives distribution\n @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\n @param debtTokenName The name of the token\n @param debtTokenSymbol The symbol of the token\n @param params A set of encoded parameters for additional initialization"},"functionSelector":"c222ec8a","id":4345,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1683:10:39","nodeType":"FunctionDefinition","parameters":{"id":4343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4329,"mutability":"mutable","name":"pool","nameLocation":"1705:4:39","nodeType":"VariableDeclaration","scope":4345,"src":"1699:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":4328,"nodeType":"UserDefinedTypeName","pathNode":{"id":4327,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1699:5:39"},"referencedDeclaration":5073,"src":"1699:5:39","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":4331,"mutability":"mutable","name":"underlyingAsset","nameLocation":"1723:15:39","nodeType":"VariableDeclaration","scope":4345,"src":"1715:23:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4330,"name":"address","nodeType":"ElementaryTypeName","src":"1715:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4334,"mutability":"mutable","name":"incentivesController","nameLocation":"1770:20:39","nodeType":"VariableDeclaration","scope":4345,"src":"1744:46:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":4333,"nodeType":"UserDefinedTypeName","pathNode":{"id":4332,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"1744:25:39"},"referencedDeclaration":4000,"src":"1744:25:39","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":4336,"mutability":"mutable","name":"debtTokenDecimals","nameLocation":"1802:17:39","nodeType":"VariableDeclaration","scope":4345,"src":"1796:23:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4335,"name":"uint8","nodeType":"ElementaryTypeName","src":"1796:5:39","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4338,"mutability":"mutable","name":"debtTokenName","nameLocation":"1839:13:39","nodeType":"VariableDeclaration","scope":4345,"src":"1825:27:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4337,"name":"string","nodeType":"ElementaryTypeName","src":"1825:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4340,"mutability":"mutable","name":"debtTokenSymbol","nameLocation":"1872:15:39","nodeType":"VariableDeclaration","scope":4345,"src":"1858:29:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4339,"name":"string","nodeType":"ElementaryTypeName","src":"1858:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4342,"mutability":"mutable","name":"params","nameLocation":"1908:6:39","nodeType":"VariableDeclaration","scope":4345,"src":"1893:21:39","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4341,"name":"bytes","nodeType":"ElementaryTypeName","src":"1893:5:39","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1693:225:39"},"returnParameters":{"id":4344,"nodeType":"ParameterList","parameters":[],"src":"1927:0:39"},"scope":4346,"src":"1674:254:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4347,"src":"307:1623:39","usedErrors":[]}],"src":"37:1894:39"},"id":39},"contracts/interfaces/IL2Pool.sol":{"ast":{"absolutePath":"contracts/interfaces/IL2Pool.sol","exportedSymbols":{"IL2Pool":[4434]},"id":4435,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4348,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:40"},{"abstract":false,"baseContracts":[],"canonicalName":"IL2Pool","contractDependencies":[],"contractKind":"interface","documentation":{"id":4349,"nodeType":"StructuredDocumentation","src":"62:111:40","text":" @title IL2Pool\n @author Aave\n @notice Defines the basic extension interface for an L2 Aave Pool."},"fullyImplemented":false,"id":4434,"linearizedBaseContracts":[4434],"name":"IL2Pool","nameLocation":"184:7:40","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4350,"nodeType":"StructuredDocumentation","src":"196:496:40","text":" @notice Calldata efficient wrapper of the supply function on behalf of the caller\n @param args Arguments for the supply function packed in one bytes32\n    96 bits       16 bits         128 bits      16 bits\n | 0-padding | referralCode | shortenedAmount | assetId |\n @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n type(uint256).max\n @dev assetId is the index of the asset in the reservesList."},"functionSelector":"f7a73840","id":4355,"implemented":false,"kind":"function","modifiers":[],"name":"supply","nameLocation":"704:6:40","nodeType":"FunctionDefinition","parameters":{"id":4353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4352,"mutability":"mutable","name":"args","nameLocation":"719:4:40","nodeType":"VariableDeclaration","scope":4355,"src":"711:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4351,"name":"bytes32","nodeType":"ElementaryTypeName","src":"711:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"710:14:40"},"returnParameters":{"id":4354,"nodeType":"ParameterList","parameters":[],"src":"733:0:40"},"scope":4434,"src":"695:39:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4356,"nodeType":"StructuredDocumentation","src":"738:668:40","text":" @notice Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller\n @param args Arguments for the supply function packed in one bytes32\n    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits\n | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |\n @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n type(uint256).max\n @dev assetId is the index of the asset in the reservesList.\n @param r The R parameter of ERC712 permit sig\n @param s The S parameter of ERC712 permit sig"},"functionSelector":"680dd47c","id":4365,"implemented":false,"kind":"function","modifiers":[],"name":"supplyWithPermit","nameLocation":"1418:16:40","nodeType":"FunctionDefinition","parameters":{"id":4363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4358,"mutability":"mutable","name":"args","nameLocation":"1443:4:40","nodeType":"VariableDeclaration","scope":4365,"src":"1435:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4357,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1435:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4360,"mutability":"mutable","name":"r","nameLocation":"1457:1:40","nodeType":"VariableDeclaration","scope":4365,"src":"1449:9:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4359,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1449:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4362,"mutability":"mutable","name":"s","nameLocation":"1468:1:40","nodeType":"VariableDeclaration","scope":4365,"src":"1460:9:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4361,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1460:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1434:36:40"},"returnParameters":{"id":4364,"nodeType":"ParameterList","parameters":[],"src":"1479:0:40"},"scope":4434,"src":"1409:71:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4366,"nodeType":"StructuredDocumentation","src":"1484:513:40","text":" @notice Calldata efficient wrapper of the withdraw function, withdrawing to the caller\n @param args Arguments for the withdraw function packed in one bytes32\n    112 bits       128 bits      16 bits\n | 0-padding | shortenedAmount | assetId |\n @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n type(uint256).max\n @dev assetId is the index of the asset in the reservesList.\n @return The final amount withdrawn"},"functionSelector":"8e19899e","id":4373,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"2009:8:40","nodeType":"FunctionDefinition","parameters":{"id":4369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4368,"mutability":"mutable","name":"args","nameLocation":"2026:4:40","nodeType":"VariableDeclaration","scope":4373,"src":"2018:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4367,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2018:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2017:14:40"},"returnParameters":{"id":4372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4373,"src":"2050:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4370,"name":"uint256","nodeType":"ElementaryTypeName","src":"2050:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2049:9:40"},"scope":4434,"src":"2000:59:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4374,"nodeType":"StructuredDocumentation","src":"2063:563:40","text":" @notice Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller\n @param args Arguments for the borrow function packed in one bytes32\n    88 bits       16 bits             8 bits                 128 bits       16 bits\n | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |\n @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n type(uint256).max\n @dev assetId is the index of the asset in the reservesList."},"functionSelector":"d5eed868","id":4379,"implemented":false,"kind":"function","modifiers":[],"name":"borrow","nameLocation":"2638:6:40","nodeType":"FunctionDefinition","parameters":{"id":4377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4376,"mutability":"mutable","name":"args","nameLocation":"2653:4:40","nodeType":"VariableDeclaration","scope":4379,"src":"2645:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4375,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2645:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2644:14:40"},"returnParameters":{"id":4378,"nodeType":"ParameterList","parameters":[],"src":"2667:0:40"},"scope":4434,"src":"2629:39:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4380,"nodeType":"StructuredDocumentation","src":"2672:567:40","text":" @notice Calldata efficient wrapper of the repay function, repaying on behalf of the caller\n @param args Arguments for the repay function packed in one bytes32\n    104 bits             8 bits               128 bits       16 bits\n | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\n @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n type(uint256).max\n @dev assetId is the index of the asset in the reservesList.\n @return The final amount repaid"},"functionSelector":"563dd613","id":4387,"implemented":false,"kind":"function","modifiers":[],"name":"repay","nameLocation":"3251:5:40","nodeType":"FunctionDefinition","parameters":{"id":4383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4382,"mutability":"mutable","name":"args","nameLocation":"3265:4:40","nodeType":"VariableDeclaration","scope":4387,"src":"3257:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4381,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3257:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3256:14:40"},"returnParameters":{"id":4386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4387,"src":"3289:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4384,"name":"uint256","nodeType":"ElementaryTypeName","src":"3289:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3288:9:40"},"scope":4434,"src":"3242:56:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4388,"nodeType":"StructuredDocumentation","src":"3302:749:40","text":" @notice Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller\n @param args Arguments for the repayWithPermit function packed in one bytes32\n    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits\n | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |\n @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n type(uint256).max\n @dev assetId is the index of the asset in the reservesList.\n @param r The R parameter of ERC712 permit sig\n @param s The S parameter of ERC712 permit sig\n @return The final amount repaid"},"functionSelector":"94b576de","id":4399,"implemented":false,"kind":"function","modifiers":[],"name":"repayWithPermit","nameLocation":"4063:15:40","nodeType":"FunctionDefinition","parameters":{"id":4395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4390,"mutability":"mutable","name":"args","nameLocation":"4087:4:40","nodeType":"VariableDeclaration","scope":4399,"src":"4079:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4389,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4079:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4392,"mutability":"mutable","name":"r","nameLocation":"4101:1:40","nodeType":"VariableDeclaration","scope":4399,"src":"4093:9:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4391,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4093:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4394,"mutability":"mutable","name":"s","nameLocation":"4112:1:40","nodeType":"VariableDeclaration","scope":4399,"src":"4104:9:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4393,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4104:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4078:36:40"},"returnParameters":{"id":4398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4397,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4399,"src":"4133:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4396,"name":"uint256","nodeType":"ElementaryTypeName","src":"4133:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4132:9:40"},"scope":4434,"src":"4054:88:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4400,"nodeType":"StructuredDocumentation","src":"4146:555:40","text":" @notice Calldata efficient wrapper of the repayWithATokens function\n @param args Arguments for the repayWithATokens function packed in one bytes32\n    104 bits             8 bits               128 bits       16 bits\n | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\n @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\n type(uint256).max\n @dev assetId is the index of the asset in the reservesList.\n @return The final amount repaid"},"functionSelector":"dc7c0bff","id":4407,"implemented":false,"kind":"function","modifiers":[],"name":"repayWithATokens","nameLocation":"4713:16:40","nodeType":"FunctionDefinition","parameters":{"id":4403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4402,"mutability":"mutable","name":"args","nameLocation":"4738:4:40","nodeType":"VariableDeclaration","scope":4407,"src":"4730:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4401,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4730:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4729:14:40"},"returnParameters":{"id":4406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4407,"src":"4762:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4404,"name":"uint256","nodeType":"ElementaryTypeName","src":"4762:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4761:9:40"},"scope":4434,"src":"4704:67:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4408,"nodeType":"StructuredDocumentation","src":"4775:346:40","text":" @notice Calldata efficient wrapper of the swapBorrowRateMode function\n @param args Arguments for the swapBorrowRateMode function packed in one bytes32\n    232 bits            8 bits             16 bits\n | 0-padding | shortenedInterestRateMode | assetId |\n @dev assetId is the index of the asset in the reservesList."},"functionSelector":"1fe3c6f3","id":4413,"implemented":false,"kind":"function","modifiers":[],"name":"swapBorrowRateMode","nameLocation":"5133:18:40","nodeType":"FunctionDefinition","parameters":{"id":4411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4410,"mutability":"mutable","name":"args","nameLocation":"5160:4:40","nodeType":"VariableDeclaration","scope":4413,"src":"5152:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4409,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5152:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5151:14:40"},"returnParameters":{"id":4412,"nodeType":"ParameterList","parameters":[],"src":"5174:0:40"},"scope":4434,"src":"5124:51:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4414,"nodeType":"StructuredDocumentation","src":"5179:334:40","text":" @notice Calldata efficient wrapper of the rebalanceStableBorrowRate function\n @param args Arguments for the rebalanceStableBorrowRate function packed in one bytes32\n    80 bits      160 bits     16 bits\n | 0-padding | user address | assetId |\n @dev assetId is the index of the asset in the reservesList."},"functionSelector":"427da177","id":4419,"implemented":false,"kind":"function","modifiers":[],"name":"rebalanceStableBorrowRate","nameLocation":"5525:25:40","nodeType":"FunctionDefinition","parameters":{"id":4417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4416,"mutability":"mutable","name":"args","nameLocation":"5559:4:40","nodeType":"VariableDeclaration","scope":4419,"src":"5551:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4415,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5551:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5550:14:40"},"returnParameters":{"id":4418,"nodeType":"ParameterList","parameters":[],"src":"5573:0:40"},"scope":4434,"src":"5516:58:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4420,"nodeType":"StructuredDocumentation","src":"5578:348:40","text":" @notice Calldata efficient wrapper of the setUserUseReserveAsCollateral function\n @param args Arguments for the setUserUseReserveAsCollateral function packed in one bytes32\n    239 bits         1 bit       16 bits\n | 0-padding | useAsCollateral | assetId |\n @dev assetId is the index of the asset in the reservesList."},"functionSelector":"4d013f03","id":4425,"implemented":false,"kind":"function","modifiers":[],"name":"setUserUseReserveAsCollateral","nameLocation":"5938:29:40","nodeType":"FunctionDefinition","parameters":{"id":4423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4422,"mutability":"mutable","name":"args","nameLocation":"5976:4:40","nodeType":"VariableDeclaration","scope":4425,"src":"5968:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4421,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5968:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5967:14:40"},"returnParameters":{"id":4424,"nodeType":"ParameterList","parameters":[],"src":"5990:0:40"},"scope":4434,"src":"5929:62:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4426,"nodeType":"StructuredDocumentation","src":"5995:652:40","text":" @notice Calldata efficient wrapper of the liquidationCall function\n @param args1 part of the arguments for the liquidationCall function packed in one bytes32\n    64 bits      160 bits       16 bits         16 bits\n | 0-padding | user address | debtAssetId | collateralAssetId |\n @param args2 part of the arguments for the liquidationCall function packed in one bytes32\n    127 bits       1 bit             128 bits\n | 0-padding | receiveAToken | shortenedDebtToCover |\n @dev the shortenedDebtToCover is cast to 256 bits at decode time,\n if type(uint128).max the value will be expanded to type(uint256).max"},"functionSelector":"fd21ecff","id":4433,"implemented":false,"kind":"function","modifiers":[],"name":"liquidationCall","nameLocation":"6659:15:40","nodeType":"FunctionDefinition","parameters":{"id":4431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4428,"mutability":"mutable","name":"args1","nameLocation":"6683:5:40","nodeType":"VariableDeclaration","scope":4433,"src":"6675:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4427,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6675:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4430,"mutability":"mutable","name":"args2","nameLocation":"6698:5:40","nodeType":"VariableDeclaration","scope":4433,"src":"6690:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4429,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6690:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6674:30:40"},"returnParameters":{"id":4432,"nodeType":"ParameterList","parameters":[],"src":"6713:0:40"},"scope":4434,"src":"6650:64:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4435,"src":"174:6542:40","usedErrors":[]}],"src":"37:6680:40"},"id":40},"contracts/interfaces/IPool.sol":{"ast":{"absolutePath":"contracts/interfaces/IPool.sol","exportedSymbols":{"DataTypes":[24227],"IPool":[5073],"IPoolAddressesProvider":[5282]},"id":5074,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4436,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:41"},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":4438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5074,"sourceUnit":5283,"src":"62:68:41","symbolAliases":[{"foreign":{"id":4437,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../protocol/libraries/types/DataTypes.sol","id":4440,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5074,"sourceUnit":24228,"src":"131:68:41","symbolAliases":[{"foreign":{"id":4439,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"139:9:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPool","contractDependencies":[],"contractKind":"interface","documentation":{"id":4441,"nodeType":"StructuredDocumentation","src":"201:96:41","text":" @title IPool\n @author Aave\n @notice Defines the basic interface for an Aave Pool."},"fullyImplemented":false,"id":5073,"linearizedBaseContracts":[5073],"name":"IPool","nameLocation":"308:5:41","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4442,"nodeType":"StructuredDocumentation","src":"318:349:41","text":" @dev Emitted on mintUnbacked()\n @param reserve The address of the underlying asset of the reserve\n @param user The address initiating the supply\n @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\n @param amount The amount of supplied assets\n @param referralCode The referral code used"},"id":4454,"name":"MintUnbacked","nameLocation":"676:12:41","nodeType":"EventDefinition","parameters":{"id":4453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4444,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"710:7:41","nodeType":"VariableDeclaration","scope":4454,"src":"694:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4443,"name":"address","nodeType":"ElementaryTypeName","src":"694:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4446,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"731:4:41","nodeType":"VariableDeclaration","scope":4454,"src":"723:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4445,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4448,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"757:10:41","nodeType":"VariableDeclaration","scope":4454,"src":"741:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4447,"name":"address","nodeType":"ElementaryTypeName","src":"741:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4450,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"781:6:41","nodeType":"VariableDeclaration","scope":4454,"src":"773:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4449,"name":"uint256","nodeType":"ElementaryTypeName","src":"773:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4452,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"808:12:41","nodeType":"VariableDeclaration","scope":4454,"src":"793:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4451,"name":"uint16","nodeType":"ElementaryTypeName","src":"793:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"688:136:41"},"src":"670:155:41"},{"anonymous":false,"documentation":{"id":4455,"nodeType":"StructuredDocumentation","src":"829:257:41","text":" @dev Emitted on backUnbacked()\n @param reserve The address of the underlying asset of the reserve\n @param backer The address paying for the backing\n @param amount The amount added as backing\n @param fee The amount paid in fees"},"id":4465,"name":"BackUnbacked","nameLocation":"1095:12:41","nodeType":"EventDefinition","parameters":{"id":4464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4457,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1124:7:41","nodeType":"VariableDeclaration","scope":4465,"src":"1108:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4456,"name":"address","nodeType":"ElementaryTypeName","src":"1108:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4459,"indexed":true,"mutability":"mutable","name":"backer","nameLocation":"1149:6:41","nodeType":"VariableDeclaration","scope":4465,"src":"1133:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4458,"name":"address","nodeType":"ElementaryTypeName","src":"1133:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4461,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1165:6:41","nodeType":"VariableDeclaration","scope":4465,"src":"1157:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4460,"name":"uint256","nodeType":"ElementaryTypeName","src":"1157:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4463,"indexed":false,"mutability":"mutable","name":"fee","nameLocation":"1181:3:41","nodeType":"VariableDeclaration","scope":4465,"src":"1173:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4462,"name":"uint256","nodeType":"ElementaryTypeName","src":"1173:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1107:78:41"},"src":"1089:97:41"},{"anonymous":false,"documentation":{"id":4466,"nodeType":"StructuredDocumentation","src":"1190:324:41","text":" @dev Emitted on supply()\n @param reserve The address of the underlying asset of the reserve\n @param user The address initiating the supply\n @param onBehalfOf The beneficiary of the supply, receiving the aTokens\n @param amount The amount supplied\n @param referralCode The referral code used"},"id":4478,"name":"Supply","nameLocation":"1523:6:41","nodeType":"EventDefinition","parameters":{"id":4477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4468,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1551:7:41","nodeType":"VariableDeclaration","scope":4478,"src":"1535:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4467,"name":"address","nodeType":"ElementaryTypeName","src":"1535:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4470,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"1572:4:41","nodeType":"VariableDeclaration","scope":4478,"src":"1564:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4469,"name":"address","nodeType":"ElementaryTypeName","src":"1564:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4472,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1598:10:41","nodeType":"VariableDeclaration","scope":4478,"src":"1582:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4471,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4474,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1622:6:41","nodeType":"VariableDeclaration","scope":4478,"src":"1614:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4473,"name":"uint256","nodeType":"ElementaryTypeName","src":"1614:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4476,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1649:12:41","nodeType":"VariableDeclaration","scope":4478,"src":"1634:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4475,"name":"uint16","nodeType":"ElementaryTypeName","src":"1634:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1529:136:41"},"src":"1517:149:41"},{"anonymous":false,"documentation":{"id":4479,"nodeType":"StructuredDocumentation","src":"1670:292:41","text":" @dev Emitted on withdraw()\n @param reserve The address of the underlying asset being withdrawn\n @param user The address initiating the withdrawal, owner of aTokens\n @param to The address that will receive the underlying\n @param amount The amount to be withdrawn"},"id":4489,"name":"Withdraw","nameLocation":"1971:8:41","nodeType":"EventDefinition","parameters":{"id":4488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4481,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1996:7:41","nodeType":"VariableDeclaration","scope":4489,"src":"1980:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4480,"name":"address","nodeType":"ElementaryTypeName","src":"1980:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4483,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"2021:4:41","nodeType":"VariableDeclaration","scope":4489,"src":"2005:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4482,"name":"address","nodeType":"ElementaryTypeName","src":"2005:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4485,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"2043:2:41","nodeType":"VariableDeclaration","scope":4489,"src":"2027:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4484,"name":"address","nodeType":"ElementaryTypeName","src":"2027:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4487,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2055:6:41","nodeType":"VariableDeclaration","scope":4489,"src":"2047:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4486,"name":"uint256","nodeType":"ElementaryTypeName","src":"2047:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1979:83:41"},"src":"1965:98:41"},{"anonymous":false,"documentation":{"id":4490,"nodeType":"StructuredDocumentation","src":"2067:628:41","text":" @dev Emitted on borrow() and flashLoan() when debt needs to be opened\n @param reserve The address of the underlying asset being borrowed\n @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\n initiator of the transaction on flashLoan()\n @param onBehalfOf The address that will be getting the debt\n @param amount The amount borrowed out\n @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\n @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\n @param referralCode The referral code used"},"id":4507,"name":"Borrow","nameLocation":"2704:6:41","nodeType":"EventDefinition","parameters":{"id":4506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4492,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"2732:7:41","nodeType":"VariableDeclaration","scope":4507,"src":"2716:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4491,"name":"address","nodeType":"ElementaryTypeName","src":"2716:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4494,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"2753:4:41","nodeType":"VariableDeclaration","scope":4507,"src":"2745:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4493,"name":"address","nodeType":"ElementaryTypeName","src":"2745:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4496,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2779:10:41","nodeType":"VariableDeclaration","scope":4507,"src":"2763:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4495,"name":"address","nodeType":"ElementaryTypeName","src":"2763:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4498,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2803:6:41","nodeType":"VariableDeclaration","scope":4507,"src":"2795:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4497,"name":"uint256","nodeType":"ElementaryTypeName","src":"2795:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4501,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"2842:16:41","nodeType":"VariableDeclaration","scope":4507,"src":"2815:43:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":4500,"nodeType":"UserDefinedTypeName","pathNode":{"id":4499,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"2815:26:41"},"referencedDeclaration":23931,"src":"2815:26:41","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":4503,"indexed":false,"mutability":"mutable","name":"borrowRate","nameLocation":"2872:10:41","nodeType":"VariableDeclaration","scope":4507,"src":"2864:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4502,"name":"uint256","nodeType":"ElementaryTypeName","src":"2864:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4505,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"2903:12:41","nodeType":"VariableDeclaration","scope":4507,"src":"2888:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4504,"name":"uint16","nodeType":"ElementaryTypeName","src":"2888:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"2710:209:41"},"src":"2698:222:41"},{"anonymous":false,"documentation":{"id":4508,"nodeType":"StructuredDocumentation","src":"2924:425:41","text":" @dev Emitted on repay()\n @param reserve The address of the underlying asset of the reserve\n @param user The beneficiary of the repayment, getting his debt reduced\n @param repayer The address of the user initiating the repay(), providing the funds\n @param amount The amount repaid\n @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly"},"id":4520,"name":"Repay","nameLocation":"3358:5:41","nodeType":"EventDefinition","parameters":{"id":4519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4510,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"3385:7:41","nodeType":"VariableDeclaration","scope":4520,"src":"3369:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4509,"name":"address","nodeType":"ElementaryTypeName","src":"3369:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4512,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"3414:4:41","nodeType":"VariableDeclaration","scope":4520,"src":"3398:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4511,"name":"address","nodeType":"ElementaryTypeName","src":"3398:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4514,"indexed":true,"mutability":"mutable","name":"repayer","nameLocation":"3440:7:41","nodeType":"VariableDeclaration","scope":4520,"src":"3424:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4513,"name":"address","nodeType":"ElementaryTypeName","src":"3424:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4516,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3461:6:41","nodeType":"VariableDeclaration","scope":4520,"src":"3453:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4515,"name":"uint256","nodeType":"ElementaryTypeName","src":"3453:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4518,"indexed":false,"mutability":"mutable","name":"useATokens","nameLocation":"3478:10:41","nodeType":"VariableDeclaration","scope":4520,"src":"3473:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4517,"name":"bool","nodeType":"ElementaryTypeName","src":"3473:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3363:129:41"},"src":"3352:141:41"},{"anonymous":false,"documentation":{"id":4521,"nodeType":"StructuredDocumentation","src":"3497:306:41","text":" @dev Emitted on swapBorrowRateMode()\n @param reserve The address of the underlying asset of the reserve\n @param user The address of the user swapping his rate mode\n @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"},"id":4530,"name":"SwapBorrowRateMode","nameLocation":"3812:18:41","nodeType":"EventDefinition","parameters":{"id":4529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4523,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"3852:7:41","nodeType":"VariableDeclaration","scope":4530,"src":"3836:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4522,"name":"address","nodeType":"ElementaryTypeName","src":"3836:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4525,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"3881:4:41","nodeType":"VariableDeclaration","scope":4530,"src":"3865:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4524,"name":"address","nodeType":"ElementaryTypeName","src":"3865:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4528,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"3918:16:41","nodeType":"VariableDeclaration","scope":4530,"src":"3891:43:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":4527,"nodeType":"UserDefinedTypeName","pathNode":{"id":4526,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"3891:26:41"},"referencedDeclaration":23931,"src":"3891:26:41","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"}],"src":"3830:108:41"},"src":"3806:133:41"},{"anonymous":false,"documentation":{"id":4531,"nodeType":"StructuredDocumentation","src":"3943:234:41","text":" @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\n @param asset The address of the underlying asset of the reserve\n @param totalDebt The total isolation mode debt for the reserve"},"id":4537,"name":"IsolationModeTotalDebtUpdated","nameLocation":"4186:29:41","nodeType":"EventDefinition","parameters":{"id":4536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4533,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"4232:5:41","nodeType":"VariableDeclaration","scope":4537,"src":"4216:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4532,"name":"address","nodeType":"ElementaryTypeName","src":"4216:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4535,"indexed":false,"mutability":"mutable","name":"totalDebt","nameLocation":"4247:9:41","nodeType":"VariableDeclaration","scope":4537,"src":"4239:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4534,"name":"uint256","nodeType":"ElementaryTypeName","src":"4239:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4215:42:41"},"src":"4180:78:41"},{"anonymous":false,"documentation":{"id":4538,"nodeType":"StructuredDocumentation","src":"4262:164:41","text":" @dev Emitted when the user selects a certain asset category for eMode\n @param user The address of the user\n @param categoryId The category id"},"id":4544,"name":"UserEModeSet","nameLocation":"4435:12:41","nodeType":"EventDefinition","parameters":{"id":4543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4540,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"4464:4:41","nodeType":"VariableDeclaration","scope":4544,"src":"4448:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4539,"name":"address","nodeType":"ElementaryTypeName","src":"4448:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4542,"indexed":false,"mutability":"mutable","name":"categoryId","nameLocation":"4476:10:41","nodeType":"VariableDeclaration","scope":4544,"src":"4470:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4541,"name":"uint8","nodeType":"ElementaryTypeName","src":"4470:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4447:40:41"},"src":"4429:59:41"},{"anonymous":false,"documentation":{"id":4545,"nodeType":"StructuredDocumentation","src":"4492:207:41","text":" @dev Emitted on setUserUseReserveAsCollateral()\n @param reserve The address of the underlying asset of the reserve\n @param user The address of the user enabling the usage as collateral"},"id":4551,"name":"ReserveUsedAsCollateralEnabled","nameLocation":"4708:30:41","nodeType":"EventDefinition","parameters":{"id":4550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4547,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"4755:7:41","nodeType":"VariableDeclaration","scope":4551,"src":"4739:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4546,"name":"address","nodeType":"ElementaryTypeName","src":"4739:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4549,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"4780:4:41","nodeType":"VariableDeclaration","scope":4551,"src":"4764:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4548,"name":"address","nodeType":"ElementaryTypeName","src":"4764:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4738:47:41"},"src":"4702:84:41"},{"anonymous":false,"documentation":{"id":4552,"nodeType":"StructuredDocumentation","src":"4790:207:41","text":" @dev Emitted on setUserUseReserveAsCollateral()\n @param reserve The address of the underlying asset of the reserve\n @param user The address of the user enabling the usage as collateral"},"id":4558,"name":"ReserveUsedAsCollateralDisabled","nameLocation":"5006:31:41","nodeType":"EventDefinition","parameters":{"id":4557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4554,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"5054:7:41","nodeType":"VariableDeclaration","scope":4558,"src":"5038:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4553,"name":"address","nodeType":"ElementaryTypeName","src":"5038:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4556,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"5079:4:41","nodeType":"VariableDeclaration","scope":4558,"src":"5063:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4555,"name":"address","nodeType":"ElementaryTypeName","src":"5063:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5037:47:41"},"src":"5000:85:41"},{"anonymous":false,"documentation":{"id":4559,"nodeType":"StructuredDocumentation","src":"5089:212:41","text":" @dev Emitted on rebalanceStableBorrowRate()\n @param reserve The address of the underlying asset of the reserve\n @param user The address of the user for which the rebalance has been executed"},"id":4565,"name":"RebalanceStableBorrowRate","nameLocation":"5310:25:41","nodeType":"EventDefinition","parameters":{"id":4564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4561,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"5352:7:41","nodeType":"VariableDeclaration","scope":4565,"src":"5336:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4560,"name":"address","nodeType":"ElementaryTypeName","src":"5336:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4563,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"5377:4:41","nodeType":"VariableDeclaration","scope":4565,"src":"5361:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4562,"name":"address","nodeType":"ElementaryTypeName","src":"5361:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5335:47:41"},"src":"5304:79:41"},{"anonymous":false,"documentation":{"id":4566,"nodeType":"StructuredDocumentation","src":"5387:482:41","text":" @dev Emitted on flashLoan()\n @param target The address of the flash loan receiver contract\n @param initiator The address initiating the flash loan\n @param asset The address of the asset being flash borrowed\n @param amount The amount flash borrowed\n @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\n @param premium The fee flash borrowed\n @param referralCode The referral code used"},"id":4583,"name":"FlashLoan","nameLocation":"5878:9:41","nodeType":"EventDefinition","parameters":{"id":4582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4568,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"5909:6:41","nodeType":"VariableDeclaration","scope":4583,"src":"5893:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4567,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4570,"indexed":false,"mutability":"mutable","name":"initiator","nameLocation":"5929:9:41","nodeType":"VariableDeclaration","scope":4583,"src":"5921:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4569,"name":"address","nodeType":"ElementaryTypeName","src":"5921:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4572,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"5960:5:41","nodeType":"VariableDeclaration","scope":4583,"src":"5944:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4571,"name":"address","nodeType":"ElementaryTypeName","src":"5944:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4574,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"5979:6:41","nodeType":"VariableDeclaration","scope":4583,"src":"5971:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4573,"name":"uint256","nodeType":"ElementaryTypeName","src":"5971:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4577,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"6018:16:41","nodeType":"VariableDeclaration","scope":4583,"src":"5991:43:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":4576,"nodeType":"UserDefinedTypeName","pathNode":{"id":4575,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"5991:26:41"},"referencedDeclaration":23931,"src":"5991:26:41","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":4579,"indexed":false,"mutability":"mutable","name":"premium","nameLocation":"6048:7:41","nodeType":"VariableDeclaration","scope":4583,"src":"6040:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4578,"name":"uint256","nodeType":"ElementaryTypeName","src":"6040:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4581,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"6076:12:41","nodeType":"VariableDeclaration","scope":4583,"src":"6061:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4580,"name":"uint16","nodeType":"ElementaryTypeName","src":"6061:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"5887:205:41"},"src":"5872:221:41"},{"anonymous":false,"documentation":{"id":4584,"nodeType":"StructuredDocumentation","src":"6097:749:41","text":" @dev Emitted when a borrower is liquidated.\n @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n @param user The address of the borrower getting liquidated\n @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n @param liquidatedCollateralAmount The amount of collateral received by the liquidator\n @param liquidator The address of the liquidator\n @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n to receive the underlying collateral asset directly"},"id":4600,"name":"LiquidationCall","nameLocation":"6855:15:41","nodeType":"EventDefinition","parameters":{"id":4599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4586,"indexed":true,"mutability":"mutable","name":"collateralAsset","nameLocation":"6892:15:41","nodeType":"VariableDeclaration","scope":4600,"src":"6876:31:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4585,"name":"address","nodeType":"ElementaryTypeName","src":"6876:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4588,"indexed":true,"mutability":"mutable","name":"debtAsset","nameLocation":"6929:9:41","nodeType":"VariableDeclaration","scope":4600,"src":"6913:25:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4587,"name":"address","nodeType":"ElementaryTypeName","src":"6913:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4590,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"6960:4:41","nodeType":"VariableDeclaration","scope":4600,"src":"6944:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4589,"name":"address","nodeType":"ElementaryTypeName","src":"6944:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4592,"indexed":false,"mutability":"mutable","name":"debtToCover","nameLocation":"6978:11:41","nodeType":"VariableDeclaration","scope":4600,"src":"6970:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4591,"name":"uint256","nodeType":"ElementaryTypeName","src":"6970:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4594,"indexed":false,"mutability":"mutable","name":"liquidatedCollateralAmount","nameLocation":"7003:26:41","nodeType":"VariableDeclaration","scope":4600,"src":"6995:34:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4593,"name":"uint256","nodeType":"ElementaryTypeName","src":"6995:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4596,"indexed":false,"mutability":"mutable","name":"liquidator","nameLocation":"7043:10:41","nodeType":"VariableDeclaration","scope":4600,"src":"7035:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4595,"name":"address","nodeType":"ElementaryTypeName","src":"7035:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4598,"indexed":false,"mutability":"mutable","name":"receiveAToken","nameLocation":"7064:13:41","nodeType":"VariableDeclaration","scope":4600,"src":"7059:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4597,"name":"bool","nodeType":"ElementaryTypeName","src":"7059:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6870:211:41"},"src":"6849:233:41"},{"anonymous":false,"documentation":{"id":4601,"nodeType":"StructuredDocumentation","src":"7086:421:41","text":" @dev Emitted when the state of a reserve is updated.\n @param reserve The address of the underlying asset of the reserve\n @param liquidityRate The next liquidity rate\n @param stableBorrowRate The next stable borrow rate\n @param variableBorrowRate The next variable borrow rate\n @param liquidityIndex The next liquidity index\n @param variableBorrowIndex The next variable borrow index"},"id":4615,"name":"ReserveDataUpdated","nameLocation":"7516:18:41","nodeType":"EventDefinition","parameters":{"id":4614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4603,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"7556:7:41","nodeType":"VariableDeclaration","scope":4615,"src":"7540:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4602,"name":"address","nodeType":"ElementaryTypeName","src":"7540:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4605,"indexed":false,"mutability":"mutable","name":"liquidityRate","nameLocation":"7577:13:41","nodeType":"VariableDeclaration","scope":4615,"src":"7569:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4604,"name":"uint256","nodeType":"ElementaryTypeName","src":"7569:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4607,"indexed":false,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"7604:16:41","nodeType":"VariableDeclaration","scope":4615,"src":"7596:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4606,"name":"uint256","nodeType":"ElementaryTypeName","src":"7596:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4609,"indexed":false,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"7634:18:41","nodeType":"VariableDeclaration","scope":4615,"src":"7626:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4608,"name":"uint256","nodeType":"ElementaryTypeName","src":"7626:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4611,"indexed":false,"mutability":"mutable","name":"liquidityIndex","nameLocation":"7666:14:41","nodeType":"VariableDeclaration","scope":4615,"src":"7658:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4610,"name":"uint256","nodeType":"ElementaryTypeName","src":"7658:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4613,"indexed":false,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"7694:19:41","nodeType":"VariableDeclaration","scope":4615,"src":"7686:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4612,"name":"uint256","nodeType":"ElementaryTypeName","src":"7686:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7534:183:41"},"src":"7510:208:41"},{"anonymous":false,"documentation":{"id":4616,"nodeType":"StructuredDocumentation","src":"7722:211:41","text":" @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\n @param reserve The address of the reserve\n @param amountMinted The amount minted to the treasury"},"id":4622,"name":"MintedToTreasury","nameLocation":"7942:16:41","nodeType":"EventDefinition","parameters":{"id":4621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4618,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"7975:7:41","nodeType":"VariableDeclaration","scope":4622,"src":"7959:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4617,"name":"address","nodeType":"ElementaryTypeName","src":"7959:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4620,"indexed":false,"mutability":"mutable","name":"amountMinted","nameLocation":"7992:12:41","nodeType":"VariableDeclaration","scope":4622,"src":"7984:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4619,"name":"uint256","nodeType":"ElementaryTypeName","src":"7984:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7958:47:41"},"src":"7936:70:41"},{"documentation":{"id":4623,"nodeType":"StructuredDocumentation","src":"8010:428:41","text":" @notice Mints an `amount` of aTokens to the `onBehalfOf`\n @param asset The address of the underlying asset to mint\n @param amount The amount to mint\n @param onBehalfOf The address that will receive the aTokens\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"69a933a5","id":4634,"implemented":false,"kind":"function","modifiers":[],"name":"mintUnbacked","nameLocation":"8450:12:41","nodeType":"FunctionDefinition","parameters":{"id":4632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4625,"mutability":"mutable","name":"asset","nameLocation":"8476:5:41","nodeType":"VariableDeclaration","scope":4634,"src":"8468:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4624,"name":"address","nodeType":"ElementaryTypeName","src":"8468:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4627,"mutability":"mutable","name":"amount","nameLocation":"8495:6:41","nodeType":"VariableDeclaration","scope":4634,"src":"8487:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4626,"name":"uint256","nodeType":"ElementaryTypeName","src":"8487:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4629,"mutability":"mutable","name":"onBehalfOf","nameLocation":"8515:10:41","nodeType":"VariableDeclaration","scope":4634,"src":"8507:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4628,"name":"address","nodeType":"ElementaryTypeName","src":"8507:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4631,"mutability":"mutable","name":"referralCode","nameLocation":"8538:12:41","nodeType":"VariableDeclaration","scope":4634,"src":"8531:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4630,"name":"uint16","nodeType":"ElementaryTypeName","src":"8531:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"8462:92:41"},"returnParameters":{"id":4633,"nodeType":"ParameterList","parameters":[],"src":"8563:0:41"},"scope":5073,"src":"8441:123:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4635,"nodeType":"StructuredDocumentation","src":"8568:259:41","text":" @notice Back the current unbacked underlying with `amount` and pay `fee`.\n @param asset The address of the underlying asset to back\n @param amount The amount to back\n @param fee The amount paid in fees\n @return The backed amount"},"functionSelector":"d65dc7a1","id":4646,"implemented":false,"kind":"function","modifiers":[],"name":"backUnbacked","nameLocation":"8839:12:41","nodeType":"FunctionDefinition","parameters":{"id":4642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4637,"mutability":"mutable","name":"asset","nameLocation":"8860:5:41","nodeType":"VariableDeclaration","scope":4646,"src":"8852:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4636,"name":"address","nodeType":"ElementaryTypeName","src":"8852:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4639,"mutability":"mutable","name":"amount","nameLocation":"8875:6:41","nodeType":"VariableDeclaration","scope":4646,"src":"8867:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4638,"name":"uint256","nodeType":"ElementaryTypeName","src":"8867:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4641,"mutability":"mutable","name":"fee","nameLocation":"8891:3:41","nodeType":"VariableDeclaration","scope":4646,"src":"8883:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4640,"name":"uint256","nodeType":"ElementaryTypeName","src":"8883:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8851:44:41"},"returnParameters":{"id":4645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4646,"src":"8914:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4643,"name":"uint256","nodeType":"ElementaryTypeName","src":"8914:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8913:9:41"},"scope":5073,"src":"8830:93:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4647,"nodeType":"StructuredDocumentation","src":"8927:712:41","text":" @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n - E.g. User supplies 100 USDC and gets in return 100 aUSDC\n @param asset The address of the underlying asset to supply\n @param amount The amount to be supplied\n @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   is a different wallet\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"617ba037","id":4658,"implemented":false,"kind":"function","modifiers":[],"name":"supply","nameLocation":"9651:6:41","nodeType":"FunctionDefinition","parameters":{"id":4656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4649,"mutability":"mutable","name":"asset","nameLocation":"9666:5:41","nodeType":"VariableDeclaration","scope":4658,"src":"9658:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4648,"name":"address","nodeType":"ElementaryTypeName","src":"9658:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4651,"mutability":"mutable","name":"amount","nameLocation":"9681:6:41","nodeType":"VariableDeclaration","scope":4658,"src":"9673:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4650,"name":"uint256","nodeType":"ElementaryTypeName","src":"9673:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4653,"mutability":"mutable","name":"onBehalfOf","nameLocation":"9697:10:41","nodeType":"VariableDeclaration","scope":4658,"src":"9689:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4652,"name":"address","nodeType":"ElementaryTypeName","src":"9689:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4655,"mutability":"mutable","name":"referralCode","nameLocation":"9716:12:41","nodeType":"VariableDeclaration","scope":4658,"src":"9709:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4654,"name":"uint16","nodeType":"ElementaryTypeName","src":"9709:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"9657:72:41"},"returnParameters":{"id":4657,"nodeType":"ParameterList","parameters":[],"src":"9738:0:41"},"scope":5073,"src":"9642:97:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4659,"nodeType":"StructuredDocumentation","src":"9743:962:41","text":" @notice Supply with transfer approval of asset to be supplied done via permit function\n see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\n @param asset The address of the underlying asset to supply\n @param amount The amount to be supplied\n @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   is a different wallet\n @param deadline The deadline timestamp that the permit is valid\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man\n @param permitV The V parameter of ERC712 permit sig\n @param permitR The R parameter of ERC712 permit sig\n @param permitS The S parameter of ERC712 permit sig"},"functionSelector":"02c205f0","id":4678,"implemented":false,"kind":"function","modifiers":[],"name":"supplyWithPermit","nameLocation":"10717:16:41","nodeType":"FunctionDefinition","parameters":{"id":4676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4661,"mutability":"mutable","name":"asset","nameLocation":"10747:5:41","nodeType":"VariableDeclaration","scope":4678,"src":"10739:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4660,"name":"address","nodeType":"ElementaryTypeName","src":"10739:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4663,"mutability":"mutable","name":"amount","nameLocation":"10766:6:41","nodeType":"VariableDeclaration","scope":4678,"src":"10758:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4662,"name":"uint256","nodeType":"ElementaryTypeName","src":"10758:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4665,"mutability":"mutable","name":"onBehalfOf","nameLocation":"10786:10:41","nodeType":"VariableDeclaration","scope":4678,"src":"10778:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4664,"name":"address","nodeType":"ElementaryTypeName","src":"10778:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4667,"mutability":"mutable","name":"referralCode","nameLocation":"10809:12:41","nodeType":"VariableDeclaration","scope":4678,"src":"10802:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4666,"name":"uint16","nodeType":"ElementaryTypeName","src":"10802:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":4669,"mutability":"mutable","name":"deadline","nameLocation":"10835:8:41","nodeType":"VariableDeclaration","scope":4678,"src":"10827:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4668,"name":"uint256","nodeType":"ElementaryTypeName","src":"10827:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4671,"mutability":"mutable","name":"permitV","nameLocation":"10855:7:41","nodeType":"VariableDeclaration","scope":4678,"src":"10849:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4670,"name":"uint8","nodeType":"ElementaryTypeName","src":"10849:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4673,"mutability":"mutable","name":"permitR","nameLocation":"10876:7:41","nodeType":"VariableDeclaration","scope":4678,"src":"10868:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4672,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10868:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4675,"mutability":"mutable","name":"permitS","nameLocation":"10897:7:41","nodeType":"VariableDeclaration","scope":4678,"src":"10889:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4674,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10889:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10733:175:41"},"returnParameters":{"id":4677,"nodeType":"ParameterList","parameters":[],"src":"10917:0:41"},"scope":5073,"src":"10708:210:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4679,"nodeType":"StructuredDocumentation","src":"10922:671:41","text":" @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\n E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\n @param asset The address of the underlying asset to withdraw\n @param amount The underlying amount to be withdrawn\n   - Send the value type(uint256).max in order to withdraw the whole aToken balance\n @param to The address that will receive the underlying, same as msg.sender if the user\n   wants to receive it on his own wallet, or a different address if the beneficiary is a\n   different wallet\n @return The final amount withdrawn"},"functionSelector":"69328dec","id":4690,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"11605:8:41","nodeType":"FunctionDefinition","parameters":{"id":4686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4681,"mutability":"mutable","name":"asset","nameLocation":"11622:5:41","nodeType":"VariableDeclaration","scope":4690,"src":"11614:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4680,"name":"address","nodeType":"ElementaryTypeName","src":"11614:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4683,"mutability":"mutable","name":"amount","nameLocation":"11637:6:41","nodeType":"VariableDeclaration","scope":4690,"src":"11629:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4682,"name":"uint256","nodeType":"ElementaryTypeName","src":"11629:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4685,"mutability":"mutable","name":"to","nameLocation":"11653:2:41","nodeType":"VariableDeclaration","scope":4690,"src":"11645:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4684,"name":"address","nodeType":"ElementaryTypeName","src":"11645:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11613:43:41"},"returnParameters":{"id":4689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4690,"src":"11675:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4687,"name":"uint256","nodeType":"ElementaryTypeName","src":"11675:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11674:9:41"},"scope":5073,"src":"11596:88:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4691,"nodeType":"StructuredDocumentation","src":"11688:1198:41","text":" @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\n already supplied enough collateral, or he was given enough allowance by a credit delegator on the\n corresponding debt token (StableDebtToken or VariableDebtToken)\n - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\n   and 100 stable/variable debt tokens, depending on the `interestRateMode`\n @param asset The address of the underlying asset to borrow\n @param amount The amount to be borrowed\n @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\n @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man\n @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\n calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\n if he has been given credit delegation allowance"},"functionSelector":"a415bcad","id":4704,"implemented":false,"kind":"function","modifiers":[],"name":"borrow","nameLocation":"12898:6:41","nodeType":"FunctionDefinition","parameters":{"id":4702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4693,"mutability":"mutable","name":"asset","nameLocation":"12918:5:41","nodeType":"VariableDeclaration","scope":4704,"src":"12910:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4692,"name":"address","nodeType":"ElementaryTypeName","src":"12910:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4695,"mutability":"mutable","name":"amount","nameLocation":"12937:6:41","nodeType":"VariableDeclaration","scope":4704,"src":"12929:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4694,"name":"uint256","nodeType":"ElementaryTypeName","src":"12929:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4697,"mutability":"mutable","name":"interestRateMode","nameLocation":"12957:16:41","nodeType":"VariableDeclaration","scope":4704,"src":"12949:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4696,"name":"uint256","nodeType":"ElementaryTypeName","src":"12949:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4699,"mutability":"mutable","name":"referralCode","nameLocation":"12986:12:41","nodeType":"VariableDeclaration","scope":4704,"src":"12979:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4698,"name":"uint16","nodeType":"ElementaryTypeName","src":"12979:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":4701,"mutability":"mutable","name":"onBehalfOf","nameLocation":"13012:10:41","nodeType":"VariableDeclaration","scope":4704,"src":"13004:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4700,"name":"address","nodeType":"ElementaryTypeName","src":"13004:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12904:122:41"},"returnParameters":{"id":4703,"nodeType":"ParameterList","parameters":[],"src":"13035:0:41"},"scope":5073,"src":"12889:147:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4705,"nodeType":"StructuredDocumentation","src":"13040:873:41","text":" @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\n - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\n user calling the function if he wants to reduce/remove his own debt, or the address of any other\n other borrower whose debt should be removed\n @return The final amount repaid"},"functionSelector":"573ade81","id":4718,"implemented":false,"kind":"function","modifiers":[],"name":"repay","nameLocation":"13925:5:41","nodeType":"FunctionDefinition","parameters":{"id":4714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4707,"mutability":"mutable","name":"asset","nameLocation":"13944:5:41","nodeType":"VariableDeclaration","scope":4718,"src":"13936:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4706,"name":"address","nodeType":"ElementaryTypeName","src":"13936:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4709,"mutability":"mutable","name":"amount","nameLocation":"13963:6:41","nodeType":"VariableDeclaration","scope":4718,"src":"13955:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4708,"name":"uint256","nodeType":"ElementaryTypeName","src":"13955:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4711,"mutability":"mutable","name":"interestRateMode","nameLocation":"13983:16:41","nodeType":"VariableDeclaration","scope":4718,"src":"13975:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4710,"name":"uint256","nodeType":"ElementaryTypeName","src":"13975:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4713,"mutability":"mutable","name":"onBehalfOf","nameLocation":"14013:10:41","nodeType":"VariableDeclaration","scope":4718,"src":"14005:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4712,"name":"address","nodeType":"ElementaryTypeName","src":"14005:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13930:97:41"},"returnParameters":{"id":4717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4716,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4718,"src":"14046:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4715,"name":"uint256","nodeType":"ElementaryTypeName","src":"14046:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14045:9:41"},"scope":5073,"src":"13916:139:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4719,"nodeType":"StructuredDocumentation","src":"14059:1085:41","text":" @notice Repay with transfer approval of asset to be repaid done via permit function\n see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\n user calling the function if he wants to reduce/remove his own debt, or the address of any other\n other borrower whose debt should be removed\n @param deadline The deadline timestamp that the permit is valid\n @param permitV The V parameter of ERC712 permit sig\n @param permitR The R parameter of ERC712 permit sig\n @param permitS The S parameter of ERC712 permit sig\n @return The final amount repaid"},"functionSelector":"ee3e210b","id":4740,"implemented":false,"kind":"function","modifiers":[],"name":"repayWithPermit","nameLocation":"15156:15:41","nodeType":"FunctionDefinition","parameters":{"id":4736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4721,"mutability":"mutable","name":"asset","nameLocation":"15185:5:41","nodeType":"VariableDeclaration","scope":4740,"src":"15177:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4720,"name":"address","nodeType":"ElementaryTypeName","src":"15177:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4723,"mutability":"mutable","name":"amount","nameLocation":"15204:6:41","nodeType":"VariableDeclaration","scope":4740,"src":"15196:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4722,"name":"uint256","nodeType":"ElementaryTypeName","src":"15196:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4725,"mutability":"mutable","name":"interestRateMode","nameLocation":"15224:16:41","nodeType":"VariableDeclaration","scope":4740,"src":"15216:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4724,"name":"uint256","nodeType":"ElementaryTypeName","src":"15216:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4727,"mutability":"mutable","name":"onBehalfOf","nameLocation":"15254:10:41","nodeType":"VariableDeclaration","scope":4740,"src":"15246:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4726,"name":"address","nodeType":"ElementaryTypeName","src":"15246:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4729,"mutability":"mutable","name":"deadline","nameLocation":"15278:8:41","nodeType":"VariableDeclaration","scope":4740,"src":"15270:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4728,"name":"uint256","nodeType":"ElementaryTypeName","src":"15270:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4731,"mutability":"mutable","name":"permitV","nameLocation":"15298:7:41","nodeType":"VariableDeclaration","scope":4740,"src":"15292:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4730,"name":"uint8","nodeType":"ElementaryTypeName","src":"15292:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4733,"mutability":"mutable","name":"permitR","nameLocation":"15319:7:41","nodeType":"VariableDeclaration","scope":4740,"src":"15311:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4732,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15311:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4735,"mutability":"mutable","name":"permitS","nameLocation":"15340:7:41","nodeType":"VariableDeclaration","scope":4740,"src":"15332:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4734,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15332:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15171:180:41"},"returnParameters":{"id":4739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4738,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4740,"src":"15370:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4737,"name":"uint256","nodeType":"ElementaryTypeName","src":"15370:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15369:9:41"},"scope":5073,"src":"15147:232:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4741,"nodeType":"StructuredDocumentation","src":"15383:779:41","text":" @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\n equivalent debt tokens\n - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\n @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\n balance is not enough to cover the whole debt\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @return The final amount repaid"},"functionSelector":"2dad97d4","id":4752,"implemented":false,"kind":"function","modifiers":[],"name":"repayWithATokens","nameLocation":"16174:16:41","nodeType":"FunctionDefinition","parameters":{"id":4748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4743,"mutability":"mutable","name":"asset","nameLocation":"16204:5:41","nodeType":"VariableDeclaration","scope":4752,"src":"16196:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4742,"name":"address","nodeType":"ElementaryTypeName","src":"16196:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4745,"mutability":"mutable","name":"amount","nameLocation":"16223:6:41","nodeType":"VariableDeclaration","scope":4752,"src":"16215:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4744,"name":"uint256","nodeType":"ElementaryTypeName","src":"16215:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4747,"mutability":"mutable","name":"interestRateMode","nameLocation":"16243:16:41","nodeType":"VariableDeclaration","scope":4752,"src":"16235:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4746,"name":"uint256","nodeType":"ElementaryTypeName","src":"16235:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16190:73:41"},"returnParameters":{"id":4751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4750,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4752,"src":"16282:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4749,"name":"uint256","nodeType":"ElementaryTypeName","src":"16282:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16281:9:41"},"scope":5073,"src":"16165:126:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4753,"nodeType":"StructuredDocumentation","src":"16295:288:41","text":" @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\n @param asset The address of the underlying asset borrowed\n @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"},"functionSelector":"94ba89a2","id":4760,"implemented":false,"kind":"function","modifiers":[],"name":"swapBorrowRateMode","nameLocation":"16595:18:41","nodeType":"FunctionDefinition","parameters":{"id":4758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4755,"mutability":"mutable","name":"asset","nameLocation":"16622:5:41","nodeType":"VariableDeclaration","scope":4760,"src":"16614:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4754,"name":"address","nodeType":"ElementaryTypeName","src":"16614:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4757,"mutability":"mutable","name":"interestRateMode","nameLocation":"16637:16:41","nodeType":"VariableDeclaration","scope":4760,"src":"16629:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4756,"name":"uint256","nodeType":"ElementaryTypeName","src":"16629:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16613:41:41"},"returnParameters":{"id":4759,"nodeType":"ParameterList","parameters":[],"src":"16663:0:41"},"scope":5073,"src":"16586:78:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4761,"nodeType":"StructuredDocumentation","src":"16668:553:41","text":" @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\n - Users can be rebalanced if the following conditions are satisfied:\n     1. Usage ratio is above 95%\n     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\n        much has been borrowed at a stable rate and suppliers are not earning enough\n @param asset The address of the underlying asset borrowed\n @param user The address of the user to be rebalanced"},"functionSelector":"cd112382","id":4768,"implemented":false,"kind":"function","modifiers":[],"name":"rebalanceStableBorrowRate","nameLocation":"17233:25:41","nodeType":"FunctionDefinition","parameters":{"id":4766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4763,"mutability":"mutable","name":"asset","nameLocation":"17267:5:41","nodeType":"VariableDeclaration","scope":4768,"src":"17259:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4762,"name":"address","nodeType":"ElementaryTypeName","src":"17259:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4765,"mutability":"mutable","name":"user","nameLocation":"17282:4:41","nodeType":"VariableDeclaration","scope":4768,"src":"17274:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4764,"name":"address","nodeType":"ElementaryTypeName","src":"17274:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17258:29:41"},"returnParameters":{"id":4767,"nodeType":"ParameterList","parameters":[],"src":"17296:0:41"},"scope":5073,"src":"17224:73:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4769,"nodeType":"StructuredDocumentation","src":"17301:260:41","text":" @notice Allows suppliers to enable/disable a specific supplied asset as collateral\n @param asset The address of the underlying asset supplied\n @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise"},"functionSelector":"5a3b74b9","id":4776,"implemented":false,"kind":"function","modifiers":[],"name":"setUserUseReserveAsCollateral","nameLocation":"17573:29:41","nodeType":"FunctionDefinition","parameters":{"id":4774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4771,"mutability":"mutable","name":"asset","nameLocation":"17611:5:41","nodeType":"VariableDeclaration","scope":4776,"src":"17603:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4770,"name":"address","nodeType":"ElementaryTypeName","src":"17603:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4773,"mutability":"mutable","name":"useAsCollateral","nameLocation":"17623:15:41","nodeType":"VariableDeclaration","scope":4776,"src":"17618:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4772,"name":"bool","nodeType":"ElementaryTypeName","src":"17618:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17602:37:41"},"returnParameters":{"id":4775,"nodeType":"ParameterList","parameters":[],"src":"17648:0:41"},"scope":5073,"src":"17564:85:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4777,"nodeType":"StructuredDocumentation","src":"17653:860:41","text":" @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\n - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\n   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\n @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n @param user The address of the borrower getting liquidated\n @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n to receive the underlying collateral asset directly"},"functionSelector":"00a718a9","id":4790,"implemented":false,"kind":"function","modifiers":[],"name":"liquidationCall","nameLocation":"18525:15:41","nodeType":"FunctionDefinition","parameters":{"id":4788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4779,"mutability":"mutable","name":"collateralAsset","nameLocation":"18554:15:41","nodeType":"VariableDeclaration","scope":4790,"src":"18546:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4778,"name":"address","nodeType":"ElementaryTypeName","src":"18546:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4781,"mutability":"mutable","name":"debtAsset","nameLocation":"18583:9:41","nodeType":"VariableDeclaration","scope":4790,"src":"18575:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4780,"name":"address","nodeType":"ElementaryTypeName","src":"18575:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4783,"mutability":"mutable","name":"user","nameLocation":"18606:4:41","nodeType":"VariableDeclaration","scope":4790,"src":"18598:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4782,"name":"address","nodeType":"ElementaryTypeName","src":"18598:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4785,"mutability":"mutable","name":"debtToCover","nameLocation":"18624:11:41","nodeType":"VariableDeclaration","scope":4790,"src":"18616:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4784,"name":"uint256","nodeType":"ElementaryTypeName","src":"18616:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4787,"mutability":"mutable","name":"receiveAToken","nameLocation":"18646:13:41","nodeType":"VariableDeclaration","scope":4790,"src":"18641:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4786,"name":"bool","nodeType":"ElementaryTypeName","src":"18641:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18540:123:41"},"returnParameters":{"id":4789,"nodeType":"ParameterList","parameters":[],"src":"18672:0:41"},"scope":5073,"src":"18516:157:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4791,"nodeType":"StructuredDocumentation","src":"18677:1407:41","text":" @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\n as long as the amount taken plus a fee is returned.\n @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\n into consideration. For further details please visit https://docs.aave.com/developers/\n @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\n @param assets The addresses of the assets being flash-borrowed\n @param amounts The amounts of the assets being flash-borrowed\n @param interestRateModes Types of the debt to open if the flash loan is not returned:\n   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\n   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\n   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\n @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\n @param params Variadic packed params to pass to the receiver as extra information\n @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"ab9c4b5d","id":4811,"implemented":false,"kind":"function","modifiers":[],"name":"flashLoan","nameLocation":"20096:9:41","nodeType":"FunctionDefinition","parameters":{"id":4809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4793,"mutability":"mutable","name":"receiverAddress","nameLocation":"20119:15:41","nodeType":"VariableDeclaration","scope":4811,"src":"20111:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4792,"name":"address","nodeType":"ElementaryTypeName","src":"20111:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4796,"mutability":"mutable","name":"assets","nameLocation":"20159:6:41","nodeType":"VariableDeclaration","scope":4811,"src":"20140:25:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4794,"name":"address","nodeType":"ElementaryTypeName","src":"20140:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4795,"nodeType":"ArrayTypeName","src":"20140:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":4799,"mutability":"mutable","name":"amounts","nameLocation":"20190:7:41","nodeType":"VariableDeclaration","scope":4811,"src":"20171:26:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4797,"name":"uint256","nodeType":"ElementaryTypeName","src":"20171:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4798,"nodeType":"ArrayTypeName","src":"20171:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4802,"mutability":"mutable","name":"interestRateModes","nameLocation":"20222:17:41","nodeType":"VariableDeclaration","scope":4811,"src":"20203:36:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4800,"name":"uint256","nodeType":"ElementaryTypeName","src":"20203:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4801,"nodeType":"ArrayTypeName","src":"20203:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4804,"mutability":"mutable","name":"onBehalfOf","nameLocation":"20253:10:41","nodeType":"VariableDeclaration","scope":4811,"src":"20245:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4803,"name":"address","nodeType":"ElementaryTypeName","src":"20245:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4806,"mutability":"mutable","name":"params","nameLocation":"20284:6:41","nodeType":"VariableDeclaration","scope":4811,"src":"20269:21:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4805,"name":"bytes","nodeType":"ElementaryTypeName","src":"20269:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4808,"mutability":"mutable","name":"referralCode","nameLocation":"20303:12:41","nodeType":"VariableDeclaration","scope":4811,"src":"20296:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4807,"name":"uint16","nodeType":"ElementaryTypeName","src":"20296:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"20105:214:41"},"returnParameters":{"id":4810,"nodeType":"ParameterList","parameters":[],"src":"20328:0:41"},"scope":5073,"src":"20087:242:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4812,"nodeType":"StructuredDocumentation","src":"20333:902:41","text":" @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\n as long as the amount taken plus a fee is returned.\n @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\n into consideration. For further details please visit https://docs.aave.com/developers/\n @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\n @param asset The address of the asset being flash-borrowed\n @param amount The amount of the asset being flash-borrowed\n @param params Variadic packed params to pass to the receiver as extra information\n @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"42b0b77c","id":4825,"implemented":false,"kind":"function","modifiers":[],"name":"flashLoanSimple","nameLocation":"21247:15:41","nodeType":"FunctionDefinition","parameters":{"id":4823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4814,"mutability":"mutable","name":"receiverAddress","nameLocation":"21276:15:41","nodeType":"VariableDeclaration","scope":4825,"src":"21268:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4813,"name":"address","nodeType":"ElementaryTypeName","src":"21268:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4816,"mutability":"mutable","name":"asset","nameLocation":"21305:5:41","nodeType":"VariableDeclaration","scope":4825,"src":"21297:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4815,"name":"address","nodeType":"ElementaryTypeName","src":"21297:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4818,"mutability":"mutable","name":"amount","nameLocation":"21324:6:41","nodeType":"VariableDeclaration","scope":4825,"src":"21316:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4817,"name":"uint256","nodeType":"ElementaryTypeName","src":"21316:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4820,"mutability":"mutable","name":"params","nameLocation":"21351:6:41","nodeType":"VariableDeclaration","scope":4825,"src":"21336:21:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4819,"name":"bytes","nodeType":"ElementaryTypeName","src":"21336:5:41","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4822,"mutability":"mutable","name":"referralCode","nameLocation":"21370:12:41","nodeType":"VariableDeclaration","scope":4825,"src":"21363:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4821,"name":"uint16","nodeType":"ElementaryTypeName","src":"21363:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"21262:124:41"},"returnParameters":{"id":4824,"nodeType":"ParameterList","parameters":[],"src":"21395:0:41"},"scope":5073,"src":"21238:158:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4826,"nodeType":"StructuredDocumentation","src":"21400:630:41","text":" @notice Returns the user account data across all the reserves\n @param user The address of the user\n @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\n @return totalDebtBase The total debt of the user in the base currency used by the price feed\n @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\n @return currentLiquidationThreshold The liquidation threshold of the user\n @return ltv The loan to value of The user\n @return healthFactor The current health factor of the user"},"functionSelector":"bf92857c","id":4843,"implemented":false,"kind":"function","modifiers":[],"name":"getUserAccountData","nameLocation":"22042:18:41","nodeType":"FunctionDefinition","parameters":{"id":4829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4828,"mutability":"mutable","name":"user","nameLocation":"22074:4:41","nodeType":"VariableDeclaration","scope":4843,"src":"22066:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4827,"name":"address","nodeType":"ElementaryTypeName","src":"22066:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22060:22:41"},"returnParameters":{"id":4842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4831,"mutability":"mutable","name":"totalCollateralBase","nameLocation":"22133:19:41","nodeType":"VariableDeclaration","scope":4843,"src":"22125:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4830,"name":"uint256","nodeType":"ElementaryTypeName","src":"22125:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4833,"mutability":"mutable","name":"totalDebtBase","nameLocation":"22168:13:41","nodeType":"VariableDeclaration","scope":4843,"src":"22160:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4832,"name":"uint256","nodeType":"ElementaryTypeName","src":"22160:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4835,"mutability":"mutable","name":"availableBorrowsBase","nameLocation":"22197:20:41","nodeType":"VariableDeclaration","scope":4843,"src":"22189:28:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4834,"name":"uint256","nodeType":"ElementaryTypeName","src":"22189:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4837,"mutability":"mutable","name":"currentLiquidationThreshold","nameLocation":"22233:27:41","nodeType":"VariableDeclaration","scope":4843,"src":"22225:35:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4836,"name":"uint256","nodeType":"ElementaryTypeName","src":"22225:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4839,"mutability":"mutable","name":"ltv","nameLocation":"22276:3:41","nodeType":"VariableDeclaration","scope":4843,"src":"22268:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4838,"name":"uint256","nodeType":"ElementaryTypeName","src":"22268:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4841,"mutability":"mutable","name":"healthFactor","nameLocation":"22295:12:41","nodeType":"VariableDeclaration","scope":4843,"src":"22287:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4840,"name":"uint256","nodeType":"ElementaryTypeName","src":"22287:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22117:196:41"},"scope":5073,"src":"22033:281:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4844,"nodeType":"StructuredDocumentation","src":"22318:645:41","text":" @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\n interest rate strategy\n @dev Only callable by the PoolConfigurator contract\n @param asset The address of the underlying asset of the reserve\n @param aTokenAddress The address of the aToken that will be assigned to the reserve\n @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\n @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\n @param interestRateStrategyAddress The address of the interest rate strategy contract"},"functionSelector":"7a708e92","id":4857,"implemented":false,"kind":"function","modifiers":[],"name":"initReserve","nameLocation":"22975:11:41","nodeType":"FunctionDefinition","parameters":{"id":4855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4846,"mutability":"mutable","name":"asset","nameLocation":"23000:5:41","nodeType":"VariableDeclaration","scope":4857,"src":"22992:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4845,"name":"address","nodeType":"ElementaryTypeName","src":"22992:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4848,"mutability":"mutable","name":"aTokenAddress","nameLocation":"23019:13:41","nodeType":"VariableDeclaration","scope":4857,"src":"23011:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4847,"name":"address","nodeType":"ElementaryTypeName","src":"23011:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4850,"mutability":"mutable","name":"stableDebtAddress","nameLocation":"23046:17:41","nodeType":"VariableDeclaration","scope":4857,"src":"23038:25:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4849,"name":"address","nodeType":"ElementaryTypeName","src":"23038:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4852,"mutability":"mutable","name":"variableDebtAddress","nameLocation":"23077:19:41","nodeType":"VariableDeclaration","scope":4857,"src":"23069:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4851,"name":"address","nodeType":"ElementaryTypeName","src":"23069:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4854,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"23110:27:41","nodeType":"VariableDeclaration","scope":4857,"src":"23102:35:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4853,"name":"address","nodeType":"ElementaryTypeName","src":"23102:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22986:155:41"},"returnParameters":{"id":4856,"nodeType":"ParameterList","parameters":[],"src":"23150:0:41"},"scope":5073,"src":"22966:185:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4858,"nodeType":"StructuredDocumentation","src":"23155:163:41","text":" @notice Drop a reserve\n @dev Only callable by the PoolConfigurator contract\n @param asset The address of the underlying asset of the reserve"},"functionSelector":"63c9b860","id":4863,"implemented":false,"kind":"function","modifiers":[],"name":"dropReserve","nameLocation":"23330:11:41","nodeType":"FunctionDefinition","parameters":{"id":4861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4860,"mutability":"mutable","name":"asset","nameLocation":"23350:5:41","nodeType":"VariableDeclaration","scope":4863,"src":"23342:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4859,"name":"address","nodeType":"ElementaryTypeName","src":"23342:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23341:15:41"},"returnParameters":{"id":4862,"nodeType":"ParameterList","parameters":[],"src":"23365:0:41"},"scope":5073,"src":"23321:45:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4864,"nodeType":"StructuredDocumentation","src":"23370:290:41","text":" @notice Updates the address of the interest rate strategy contract\n @dev Only callable by the PoolConfigurator contract\n @param asset The address of the underlying asset of the reserve\n @param rateStrategyAddress The address of the interest rate strategy contract"},"functionSelector":"1d2118f9","id":4871,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveInterestRateStrategyAddress","nameLocation":"23672:37:41","nodeType":"FunctionDefinition","parameters":{"id":4869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4866,"mutability":"mutable","name":"asset","nameLocation":"23723:5:41","nodeType":"VariableDeclaration","scope":4871,"src":"23715:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4865,"name":"address","nodeType":"ElementaryTypeName","src":"23715:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4868,"mutability":"mutable","name":"rateStrategyAddress","nameLocation":"23742:19:41","nodeType":"VariableDeclaration","scope":4871,"src":"23734:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4867,"name":"address","nodeType":"ElementaryTypeName","src":"23734:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23709:56:41"},"returnParameters":{"id":4870,"nodeType":"ParameterList","parameters":[],"src":"23774:0:41"},"scope":5073,"src":"23663:112:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4872,"nodeType":"StructuredDocumentation","src":"23779:259:41","text":" @notice Sets the configuration bitmap of the reserve as a whole\n @dev Only callable by the PoolConfigurator contract\n @param asset The address of the underlying asset of the reserve\n @param configuration The new configuration bitmap"},"functionSelector":"f51e435b","id":4880,"implemented":false,"kind":"function","modifiers":[],"name":"setConfiguration","nameLocation":"24050:16:41","nodeType":"FunctionDefinition","parameters":{"id":4878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4874,"mutability":"mutable","name":"asset","nameLocation":"24080:5:41","nodeType":"VariableDeclaration","scope":4880,"src":"24072:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4873,"name":"address","nodeType":"ElementaryTypeName","src":"24072:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4877,"mutability":"mutable","name":"configuration","nameLocation":"24134:13:41","nodeType":"VariableDeclaration","scope":4880,"src":"24091:56:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_calldata_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":4876,"nodeType":"UserDefinedTypeName","pathNode":{"id":4875,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"24091:33:41"},"referencedDeclaration":23912,"src":"24091:33:41","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"24066:85:41"},"returnParameters":{"id":4879,"nodeType":"ParameterList","parameters":[],"src":"24160:0:41"},"scope":5073,"src":"24041:120:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4881,"nodeType":"StructuredDocumentation","src":"24165:178:41","text":" @notice Returns the configuration of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The configuration of the reserve"},"functionSelector":"c44b11f7","id":4889,"implemented":false,"kind":"function","modifiers":[],"name":"getConfiguration","nameLocation":"24355:16:41","nodeType":"FunctionDefinition","parameters":{"id":4884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4883,"mutability":"mutable","name":"asset","nameLocation":"24385:5:41","nodeType":"VariableDeclaration","scope":4889,"src":"24377:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4882,"name":"address","nodeType":"ElementaryTypeName","src":"24377:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24371:23:41"},"returnParameters":{"id":4888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4887,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4889,"src":"24418:40:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":4886,"nodeType":"UserDefinedTypeName","pathNode":{"id":4885,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"24418:33:41"},"referencedDeclaration":23912,"src":"24418:33:41","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"24417:42:41"},"scope":5073,"src":"24346:114:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4890,"nodeType":"StructuredDocumentation","src":"24464:161:41","text":" @notice Returns the configuration of the user across all the reserves\n @param user The user address\n @return The configuration of the user"},"functionSelector":"4417a583","id":4898,"implemented":false,"kind":"function","modifiers":[],"name":"getUserConfiguration","nameLocation":"24637:20:41","nodeType":"FunctionDefinition","parameters":{"id":4893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4892,"mutability":"mutable","name":"user","nameLocation":"24671:4:41","nodeType":"VariableDeclaration","scope":4898,"src":"24663:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4891,"name":"address","nodeType":"ElementaryTypeName","src":"24663:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24657:22:41"},"returnParameters":{"id":4897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4896,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4898,"src":"24703:37:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":4895,"nodeType":"UserDefinedTypeName","pathNode":{"id":4894,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"24703:30:41"},"referencedDeclaration":23916,"src":"24703:30:41","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"24702:39:41"},"scope":5073,"src":"24628:114:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4899,"nodeType":"StructuredDocumentation","src":"24746:181:41","text":" @notice Returns the normalized income of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The reserve's normalized income"},"functionSelector":"d15e0053","id":4906,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveNormalizedIncome","nameLocation":"24939:26:41","nodeType":"FunctionDefinition","parameters":{"id":4902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4901,"mutability":"mutable","name":"asset","nameLocation":"24974:5:41","nodeType":"VariableDeclaration","scope":4906,"src":"24966:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4900,"name":"address","nodeType":"ElementaryTypeName","src":"24966:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24965:15:41"},"returnParameters":{"id":4905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4904,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4906,"src":"25004:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4903,"name":"uint256","nodeType":"ElementaryTypeName","src":"25004:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25003:9:41"},"scope":5073,"src":"24930:83:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4907,"nodeType":"StructuredDocumentation","src":"25017:805:41","text":" @notice Returns the normalized variable debt per unit of asset\n @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\n \"dynamic\" variable index based on time, current stored index and virtual rate at the current\n moment (approx. a borrower would get if opening a position). This means that is always used in\n combination with variable debt supply/balances.\n If using this function externally, consider that is possible to have an increasing normalized\n variable debt that is not equivalent to how the variable debt index would be updated in storage\n (e.g. only updates with non-zero variable debt supply)\n @param asset The address of the underlying asset of the reserve\n @return The reserve normalized variable debt"},"functionSelector":"386497fd","id":4914,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveNormalizedVariableDebt","nameLocation":"25834:32:41","nodeType":"FunctionDefinition","parameters":{"id":4910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4909,"mutability":"mutable","name":"asset","nameLocation":"25875:5:41","nodeType":"VariableDeclaration","scope":4914,"src":"25867:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4908,"name":"address","nodeType":"ElementaryTypeName","src":"25867:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"25866:15:41"},"returnParameters":{"id":4913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4912,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4914,"src":"25905:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4911,"name":"uint256","nodeType":"ElementaryTypeName","src":"25905:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25904:9:41"},"scope":5073,"src":"25825:89:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4915,"nodeType":"StructuredDocumentation","src":"25918:203:41","text":" @notice Returns the state and configuration of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The state and configuration data of the reserve"},"functionSelector":"35ea6a75","id":4923,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveData","nameLocation":"26133:14:41","nodeType":"FunctionDefinition","parameters":{"id":4918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4917,"mutability":"mutable","name":"asset","nameLocation":"26156:5:41","nodeType":"VariableDeclaration","scope":4923,"src":"26148:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4916,"name":"address","nodeType":"ElementaryTypeName","src":"26148:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26147:15:41"},"returnParameters":{"id":4922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4923,"src":"26186:28:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":4920,"nodeType":"UserDefinedTypeName","pathNode":{"id":4919,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"26186:21:41"},"referencedDeclaration":23909,"src":"26186:21:41","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"26185:30:41"},"scope":5073,"src":"26124:92:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4924,"nodeType":"StructuredDocumentation","src":"26220:537:41","text":" @notice Validates and finalizes an aToken transfer\n @dev Only callable by the overlying aToken of the `asset`\n @param asset The address of the underlying asset of the aToken\n @param from The user from which the aTokens are transferred\n @param to The user receiving the aTokens\n @param amount The amount being transferred/withdrawn\n @param balanceFromBefore The aToken balance of the `from` user before the transfer\n @param balanceToBefore The aToken balance of the `to` user before the transfer"},"functionSelector":"d5ed3933","id":4939,"implemented":false,"kind":"function","modifiers":[],"name":"finalizeTransfer","nameLocation":"26769:16:41","nodeType":"FunctionDefinition","parameters":{"id":4937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4926,"mutability":"mutable","name":"asset","nameLocation":"26799:5:41","nodeType":"VariableDeclaration","scope":4939,"src":"26791:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4925,"name":"address","nodeType":"ElementaryTypeName","src":"26791:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4928,"mutability":"mutable","name":"from","nameLocation":"26818:4:41","nodeType":"VariableDeclaration","scope":4939,"src":"26810:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4927,"name":"address","nodeType":"ElementaryTypeName","src":"26810:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4930,"mutability":"mutable","name":"to","nameLocation":"26836:2:41","nodeType":"VariableDeclaration","scope":4939,"src":"26828:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4929,"name":"address","nodeType":"ElementaryTypeName","src":"26828:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4932,"mutability":"mutable","name":"amount","nameLocation":"26852:6:41","nodeType":"VariableDeclaration","scope":4939,"src":"26844:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4931,"name":"uint256","nodeType":"ElementaryTypeName","src":"26844:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4934,"mutability":"mutable","name":"balanceFromBefore","nameLocation":"26872:17:41","nodeType":"VariableDeclaration","scope":4939,"src":"26864:25:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4933,"name":"uint256","nodeType":"ElementaryTypeName","src":"26864:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4936,"mutability":"mutable","name":"balanceToBefore","nameLocation":"26903:15:41","nodeType":"VariableDeclaration","scope":4939,"src":"26895:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4935,"name":"uint256","nodeType":"ElementaryTypeName","src":"26895:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26785:137:41"},"returnParameters":{"id":4938,"nodeType":"ParameterList","parameters":[],"src":"26931:0:41"},"scope":5073,"src":"26760:172:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4940,"nodeType":"StructuredDocumentation","src":"26936:223:41","text":" @notice Returns the list of the underlying assets of all the initialized reserves\n @dev It does not include dropped reserves\n @return The addresses of the underlying assets of the initialized reserves"},"functionSelector":"d1946dbc","id":4946,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesList","nameLocation":"27171:15:41","nodeType":"FunctionDefinition","parameters":{"id":4941,"nodeType":"ParameterList","parameters":[],"src":"27186:2:41"},"returnParameters":{"id":4945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4944,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4946,"src":"27212:16:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4942,"name":"address","nodeType":"ElementaryTypeName","src":"27212:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4943,"nodeType":"ArrayTypeName","src":"27212:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"27211:18:41"},"scope":5073,"src":"27162:68:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4947,"nodeType":"StructuredDocumentation","src":"27234:285:41","text":" @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\n @param id The id of the reserve as stored in the DataTypes.ReserveData struct\n @return The address of the reserve associated with id"},"functionSelector":"52751797","id":4954,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveAddressById","nameLocation":"27531:21:41","nodeType":"FunctionDefinition","parameters":{"id":4950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4949,"mutability":"mutable","name":"id","nameLocation":"27560:2:41","nodeType":"VariableDeclaration","scope":4954,"src":"27553:9:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4948,"name":"uint16","nodeType":"ElementaryTypeName","src":"27553:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"27552:11:41"},"returnParameters":{"id":4953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4952,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4954,"src":"27587:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4951,"name":"address","nodeType":"ElementaryTypeName","src":"27587:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27586:9:41"},"scope":5073,"src":"27522:74:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4955,"nodeType":"StructuredDocumentation","src":"27600:137:41","text":" @notice Returns the PoolAddressesProvider connected to this contract\n @return The address of the PoolAddressesProvider"},"functionSelector":"0542975c","id":4961,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"27749:18:41","nodeType":"FunctionDefinition","parameters":{"id":4956,"nodeType":"ParameterList","parameters":[],"src":"27767:2:41"},"returnParameters":{"id":4960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4959,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4961,"src":"27793:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":4958,"nodeType":"UserDefinedTypeName","pathNode":{"id":4957,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"27793:22:41"},"referencedDeclaration":5282,"src":"27793:22:41","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"27792:24:41"},"scope":5073,"src":"27740:77:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4962,"nodeType":"StructuredDocumentation","src":"27821:147:41","text":" @notice Updates the protocol fee on the bridging\n @param bridgeProtocolFee The part of the premium sent to the protocol treasury"},"functionSelector":"3036b439","id":4967,"implemented":false,"kind":"function","modifiers":[],"name":"updateBridgeProtocolFee","nameLocation":"27980:23:41","nodeType":"FunctionDefinition","parameters":{"id":4965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4964,"mutability":"mutable","name":"bridgeProtocolFee","nameLocation":"28012:17:41","nodeType":"VariableDeclaration","scope":4967,"src":"28004:25:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4963,"name":"uint256","nodeType":"ElementaryTypeName","src":"28004:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28003:27:41"},"returnParameters":{"id":4966,"nodeType":"ParameterList","parameters":[],"src":"28039:0:41"},"scope":5073,"src":"27971:69:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4968,"nodeType":"StructuredDocumentation","src":"28044:650:41","text":" @notice Updates flash loan premiums. Flash loan premium consists of two parts:\n - A part is sent to aToken holders as extra, one time accumulated interest\n - A part is collected by the protocol treasury\n @dev The total premium is calculated on the total borrowed amount\n @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\n @dev Only callable by the PoolConfigurator contract\n @param flashLoanPremiumTotal The total premium, expressed in bps\n @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps"},"functionSelector":"bcb6e522","id":4975,"implemented":false,"kind":"function","modifiers":[],"name":"updateFlashloanPremiums","nameLocation":"28706:23:41","nodeType":"FunctionDefinition","parameters":{"id":4973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4970,"mutability":"mutable","name":"flashLoanPremiumTotal","nameLocation":"28743:21:41","nodeType":"VariableDeclaration","scope":4975,"src":"28735:29:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":4969,"name":"uint128","nodeType":"ElementaryTypeName","src":"28735:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":4972,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"28778:26:41","nodeType":"VariableDeclaration","scope":4975,"src":"28770:34:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":4971,"name":"uint128","nodeType":"ElementaryTypeName","src":"28770:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"28729:79:41"},"returnParameters":{"id":4974,"nodeType":"ParameterList","parameters":[],"src":"28817:0:41"},"scope":5073,"src":"28697:121:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4976,"nodeType":"StructuredDocumentation","src":"28822:331:41","text":" @notice Configures a new category for the eMode.\n @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\n The category 0 is reserved as it's the default for volatile assets\n @param id The id of the category\n @param config The configuration of the category"},"functionSelector":"d579ea7d","id":4984,"implemented":false,"kind":"function","modifiers":[],"name":"configureEModeCategory","nameLocation":"29165:22:41","nodeType":"FunctionDefinition","parameters":{"id":4982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4978,"mutability":"mutable","name":"id","nameLocation":"29194:2:41","nodeType":"VariableDeclaration","scope":4984,"src":"29188:8:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4977,"name":"uint8","nodeType":"ElementaryTypeName","src":"29188:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4981,"mutability":"mutable","name":"config","nameLocation":"29229:6:41","nodeType":"VariableDeclaration","scope":4984,"src":"29198:37:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":4980,"nodeType":"UserDefinedTypeName","pathNode":{"id":4979,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"29198:23:41"},"referencedDeclaration":23927,"src":"29198:23:41","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"src":"29187:49:41"},"returnParameters":{"id":4983,"nodeType":"ParameterList","parameters":[],"src":"29245:0:41"},"scope":5073,"src":"29156:90:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4985,"nodeType":"StructuredDocumentation","src":"29250:150:41","text":" @notice Returns the data of an eMode category\n @param id The id of the category\n @return The configuration data of the category"},"functionSelector":"6c6f6ae1","id":4993,"implemented":false,"kind":"function","modifiers":[],"name":"getEModeCategoryData","nameLocation":"29412:20:41","nodeType":"FunctionDefinition","parameters":{"id":4988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4987,"mutability":"mutable","name":"id","nameLocation":"29439:2:41","nodeType":"VariableDeclaration","scope":4993,"src":"29433:8:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4986,"name":"uint8","nodeType":"ElementaryTypeName","src":"29433:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"29432:10:41"},"returnParameters":{"id":4992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4993,"src":"29466:30:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":4990,"nodeType":"UserDefinedTypeName","pathNode":{"id":4989,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"29466:23:41"},"referencedDeclaration":23927,"src":"29466:23:41","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"src":"29465:32:41"},"scope":5073,"src":"29403:95:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4994,"nodeType":"StructuredDocumentation","src":"29502:111:41","text":" @notice Allows a user to use the protocol in eMode\n @param categoryId The id of the category"},"functionSelector":"28530a47","id":4999,"implemented":false,"kind":"function","modifiers":[],"name":"setUserEMode","nameLocation":"29625:12:41","nodeType":"FunctionDefinition","parameters":{"id":4997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4996,"mutability":"mutable","name":"categoryId","nameLocation":"29644:10:41","nodeType":"VariableDeclaration","scope":4999,"src":"29638:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4995,"name":"uint8","nodeType":"ElementaryTypeName","src":"29638:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"29637:18:41"},"returnParameters":{"id":4998,"nodeType":"ParameterList","parameters":[],"src":"29664:0:41"},"scope":5073,"src":"29616:49:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5000,"nodeType":"StructuredDocumentation","src":"29669:125:41","text":" @notice Returns the eMode the user is using\n @param user The address of the user\n @return The eMode id"},"functionSelector":"eddf1b79","id":5007,"implemented":false,"kind":"function","modifiers":[],"name":"getUserEMode","nameLocation":"29806:12:41","nodeType":"FunctionDefinition","parameters":{"id":5003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5002,"mutability":"mutable","name":"user","nameLocation":"29827:4:41","nodeType":"VariableDeclaration","scope":5007,"src":"29819:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5001,"name":"address","nodeType":"ElementaryTypeName","src":"29819:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29818:14:41"},"returnParameters":{"id":5006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5005,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5007,"src":"29856:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5004,"name":"uint256","nodeType":"ElementaryTypeName","src":"29856:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29855:9:41"},"scope":5073,"src":"29797:68:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5008,"nodeType":"StructuredDocumentation","src":"29869:236:41","text":" @notice Resets the isolation mode total debt of the given asset to zero\n @dev It requires the given asset has zero debt ceiling\n @param asset The address of the underlying asset to reset the isolationModeTotalDebt"},"functionSelector":"e43e88a1","id":5013,"implemented":false,"kind":"function","modifiers":[],"name":"resetIsolationModeTotalDebt","nameLocation":"30117:27:41","nodeType":"FunctionDefinition","parameters":{"id":5011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5010,"mutability":"mutable","name":"asset","nameLocation":"30153:5:41","nodeType":"VariableDeclaration","scope":5013,"src":"30145:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5009,"name":"address","nodeType":"ElementaryTypeName","src":"30145:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30144:15:41"},"returnParameters":{"id":5012,"nodeType":"ParameterList","parameters":[],"src":"30168:0:41"},"scope":5073,"src":"30108:61:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5014,"nodeType":"StructuredDocumentation","src":"30173:191:41","text":" @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\n @return The percentage of available liquidity to borrow, expressed in bps"},"functionSelector":"e82fec2f","id":5019,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","nameLocation":"30376:35:41","nodeType":"FunctionDefinition","parameters":{"id":5015,"nodeType":"ParameterList","parameters":[],"src":"30411:2:41"},"returnParameters":{"id":5018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5017,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5019,"src":"30437:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5016,"name":"uint256","nodeType":"ElementaryTypeName","src":"30437:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30436:9:41"},"scope":5073,"src":"30367:79:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5020,"nodeType":"StructuredDocumentation","src":"30450:100:41","text":" @notice Returns the total fee on flash loans\n @return The total fee on flashloans"},"functionSelector":"074b2e43","id":5025,"implemented":false,"kind":"function","modifiers":[],"name":"FLASHLOAN_PREMIUM_TOTAL","nameLocation":"30562:23:41","nodeType":"FunctionDefinition","parameters":{"id":5021,"nodeType":"ParameterList","parameters":[],"src":"30585:2:41"},"returnParameters":{"id":5024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5023,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5025,"src":"30611:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5022,"name":"uint128","nodeType":"ElementaryTypeName","src":"30611:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"30610:9:41"},"scope":5073,"src":"30553:67:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5026,"nodeType":"StructuredDocumentation","src":"30624:133:41","text":" @notice Returns the part of the bridge fees sent to protocol\n @return The bridge fee sent to the protocol treasury"},"functionSelector":"272d9072","id":5031,"implemented":false,"kind":"function","modifiers":[],"name":"BRIDGE_PROTOCOL_FEE","nameLocation":"30769:19:41","nodeType":"FunctionDefinition","parameters":{"id":5027,"nodeType":"ParameterList","parameters":[],"src":"30788:2:41"},"returnParameters":{"id":5030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5029,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5031,"src":"30814:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5028,"name":"uint256","nodeType":"ElementaryTypeName","src":"30814:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30813:9:41"},"scope":5073,"src":"30760:63:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5032,"nodeType":"StructuredDocumentation","src":"30827:139:41","text":" @notice Returns the part of the flashloan fees sent to protocol\n @return The flashloan fee sent to the protocol treasury"},"functionSelector":"6a99c036","id":5037,"implemented":false,"kind":"function","modifiers":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","nameLocation":"30978:29:41","nodeType":"FunctionDefinition","parameters":{"id":5033,"nodeType":"ParameterList","parameters":[],"src":"31007:2:41"},"returnParameters":{"id":5036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5035,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5037,"src":"31033:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5034,"name":"uint128","nodeType":"ElementaryTypeName","src":"31033:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"31032:9:41"},"scope":5073,"src":"30969:73:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5038,"nodeType":"StructuredDocumentation","src":"31046:151:41","text":" @notice Returns the maximum number of reserves supported to be listed in this Pool\n @return The maximum number of reserves supported"},"functionSelector":"f8119d51","id":5043,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_NUMBER_RESERVES","nameLocation":"31209:19:41","nodeType":"FunctionDefinition","parameters":{"id":5039,"nodeType":"ParameterList","parameters":[],"src":"31228:2:41"},"returnParameters":{"id":5042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5043,"src":"31254:6:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5040,"name":"uint16","nodeType":"ElementaryTypeName","src":"31254:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"31253:8:41"},"scope":5073,"src":"31200:62:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5044,"nodeType":"StructuredDocumentation","src":"31266:196:41","text":" @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\n @param assets The list of reserves for which the minting needs to be executed"},"functionSelector":"9cd19996","id":5050,"implemented":false,"kind":"function","modifiers":[],"name":"mintToTreasury","nameLocation":"31474:14:41","nodeType":"FunctionDefinition","parameters":{"id":5048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5047,"mutability":"mutable","name":"assets","nameLocation":"31508:6:41","nodeType":"VariableDeclaration","scope":5050,"src":"31489:25:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5045,"name":"address","nodeType":"ElementaryTypeName","src":"31489:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5046,"nodeType":"ArrayTypeName","src":"31489:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"31488:27:41"},"returnParameters":{"id":5049,"nodeType":"ParameterList","parameters":[],"src":"31524:0:41"},"scope":5073,"src":"31465:60:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5051,"nodeType":"StructuredDocumentation","src":"31529:211:41","text":" @notice Rescue and transfer tokens locked in this contract\n @param token The address of the token\n @param to The address of the recipient\n @param amount The amount of token to transfer"},"functionSelector":"cea9d26f","id":5060,"implemented":false,"kind":"function","modifiers":[],"name":"rescueTokens","nameLocation":"31752:12:41","nodeType":"FunctionDefinition","parameters":{"id":5058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5053,"mutability":"mutable","name":"token","nameLocation":"31773:5:41","nodeType":"VariableDeclaration","scope":5060,"src":"31765:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5052,"name":"address","nodeType":"ElementaryTypeName","src":"31765:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5055,"mutability":"mutable","name":"to","nameLocation":"31788:2:41","nodeType":"VariableDeclaration","scope":5060,"src":"31780:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5054,"name":"address","nodeType":"ElementaryTypeName","src":"31780:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5057,"mutability":"mutable","name":"amount","nameLocation":"31800:6:41","nodeType":"VariableDeclaration","scope":5060,"src":"31792:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5056,"name":"uint256","nodeType":"ElementaryTypeName","src":"31792:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31764:43:41"},"returnParameters":{"id":5059,"nodeType":"ParameterList","parameters":[],"src":"31816:0:41"},"scope":5073,"src":"31743:74:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5061,"nodeType":"StructuredDocumentation","src":"31821:768:41","text":" @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n - E.g. User supplies 100 USDC and gets in return 100 aUSDC\n @dev Deprecated: Use the `supply` function instead\n @param asset The address of the underlying asset to supply\n @param amount The amount to be supplied\n @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   is a different wallet\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"e8eda9df","id":5072,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"32601:7:41","nodeType":"FunctionDefinition","parameters":{"id":5070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5063,"mutability":"mutable","name":"asset","nameLocation":"32617:5:41","nodeType":"VariableDeclaration","scope":5072,"src":"32609:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5062,"name":"address","nodeType":"ElementaryTypeName","src":"32609:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5065,"mutability":"mutable","name":"amount","nameLocation":"32632:6:41","nodeType":"VariableDeclaration","scope":5072,"src":"32624:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5064,"name":"uint256","nodeType":"ElementaryTypeName","src":"32624:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5067,"mutability":"mutable","name":"onBehalfOf","nameLocation":"32648:10:41","nodeType":"VariableDeclaration","scope":5072,"src":"32640:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5066,"name":"address","nodeType":"ElementaryTypeName","src":"32640:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5069,"mutability":"mutable","name":"referralCode","nameLocation":"32667:12:41","nodeType":"VariableDeclaration","scope":5072,"src":"32660:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5068,"name":"uint16","nodeType":"ElementaryTypeName","src":"32660:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"32608:72:41"},"returnParameters":{"id":5071,"nodeType":"ParameterList","parameters":[],"src":"32689:0:41"},"scope":5073,"src":"32592:98:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5074,"src":"298:32394:41","usedErrors":[]}],"src":"37:32656:41"},"id":41},"contracts/interfaces/IPoolAddressesProvider.sol":{"ast":{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","exportedSymbols":{"IPoolAddressesProvider":[5282]},"id":5283,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5075,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:42"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolAddressesProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":5076,"nodeType":"StructuredDocumentation","src":"62:126:42","text":" @title IPoolAddressesProvider\n @author Aave\n @notice Defines the basic interface for a Pool Addresses Provider."},"fullyImplemented":false,"id":5282,"linearizedBaseContracts":[5282],"name":"IPoolAddressesProvider","nameLocation":"199:22:42","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5077,"nodeType":"StructuredDocumentation","src":"226:164:42","text":" @dev Emitted when the market identifier is updated.\n @param oldMarketId The old id of the market\n @param newMarketId The new id of the market"},"id":5083,"name":"MarketIdSet","nameLocation":"399:11:42","nodeType":"EventDefinition","parameters":{"id":5082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5079,"indexed":true,"mutability":"mutable","name":"oldMarketId","nameLocation":"426:11:42","nodeType":"VariableDeclaration","scope":5083,"src":"411:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5078,"name":"string","nodeType":"ElementaryTypeName","src":"411:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5081,"indexed":true,"mutability":"mutable","name":"newMarketId","nameLocation":"454:11:42","nodeType":"VariableDeclaration","scope":5083,"src":"439:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5080,"name":"string","nodeType":"ElementaryTypeName","src":"439:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"410:56:42"},"src":"393:74:42"},{"anonymous":false,"documentation":{"id":5084,"nodeType":"StructuredDocumentation","src":"471:155:42","text":" @dev Emitted when the pool is updated.\n @param oldAddress The old address of the Pool\n @param newAddress The new address of the Pool"},"id":5090,"name":"PoolUpdated","nameLocation":"635:11:42","nodeType":"EventDefinition","parameters":{"id":5089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5086,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"663:10:42","nodeType":"VariableDeclaration","scope":5090,"src":"647:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5085,"name":"address","nodeType":"ElementaryTypeName","src":"647:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5088,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"691:10:42","nodeType":"VariableDeclaration","scope":5090,"src":"675:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5087,"name":"address","nodeType":"ElementaryTypeName","src":"675:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"646:56:42"},"src":"629:74:42"},{"anonymous":false,"documentation":{"id":5091,"nodeType":"StructuredDocumentation","src":"707:192:42","text":" @dev Emitted when the pool configurator is updated.\n @param oldAddress The old address of the PoolConfigurator\n @param newAddress The new address of the PoolConfigurator"},"id":5097,"name":"PoolConfiguratorUpdated","nameLocation":"908:23:42","nodeType":"EventDefinition","parameters":{"id":5096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5093,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"948:10:42","nodeType":"VariableDeclaration","scope":5097,"src":"932:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5092,"name":"address","nodeType":"ElementaryTypeName","src":"932:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5095,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"976:10:42","nodeType":"VariableDeclaration","scope":5097,"src":"960:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5094,"name":"address","nodeType":"ElementaryTypeName","src":"960:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"931:56:42"},"src":"902:86:42"},{"anonymous":false,"documentation":{"id":5098,"nodeType":"StructuredDocumentation","src":"992:177:42","text":" @dev Emitted when the price oracle is updated.\n @param oldAddress The old address of the PriceOracle\n @param newAddress The new address of the PriceOracle"},"id":5104,"name":"PriceOracleUpdated","nameLocation":"1178:18:42","nodeType":"EventDefinition","parameters":{"id":5103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5100,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"1213:10:42","nodeType":"VariableDeclaration","scope":5104,"src":"1197:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5099,"name":"address","nodeType":"ElementaryTypeName","src":"1197:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5102,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"1241:10:42","nodeType":"VariableDeclaration","scope":5104,"src":"1225:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5101,"name":"address","nodeType":"ElementaryTypeName","src":"1225:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1196:56:42"},"src":"1172:81:42"},{"anonymous":false,"documentation":{"id":5105,"nodeType":"StructuredDocumentation","src":"1257:174:42","text":" @dev Emitted when the ACL manager is updated.\n @param oldAddress The old address of the ACLManager\n @param newAddress The new address of the ACLManager"},"id":5111,"name":"ACLManagerUpdated","nameLocation":"1440:17:42","nodeType":"EventDefinition","parameters":{"id":5110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5107,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"1474:10:42","nodeType":"VariableDeclaration","scope":5111,"src":"1458:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5106,"name":"address","nodeType":"ElementaryTypeName","src":"1458:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5109,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"1502:10:42","nodeType":"VariableDeclaration","scope":5111,"src":"1486:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5108,"name":"address","nodeType":"ElementaryTypeName","src":"1486:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1457:56:42"},"src":"1434:80:42"},{"anonymous":false,"documentation":{"id":5112,"nodeType":"StructuredDocumentation","src":"1518:168:42","text":" @dev Emitted when the ACL admin is updated.\n @param oldAddress The old address of the ACLAdmin\n @param newAddress The new address of the ACLAdmin"},"id":5118,"name":"ACLAdminUpdated","nameLocation":"1695:15:42","nodeType":"EventDefinition","parameters":{"id":5117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5114,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"1727:10:42","nodeType":"VariableDeclaration","scope":5118,"src":"1711:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5113,"name":"address","nodeType":"ElementaryTypeName","src":"1711:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5116,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"1755:10:42","nodeType":"VariableDeclaration","scope":5118,"src":"1739:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5115,"name":"address","nodeType":"ElementaryTypeName","src":"1739:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1710:56:42"},"src":"1689:78:42"},{"anonymous":false,"documentation":{"id":5119,"nodeType":"StructuredDocumentation","src":"1771:202:42","text":" @dev Emitted when the price oracle sentinel is updated.\n @param oldAddress The old address of the PriceOracleSentinel\n @param newAddress The new address of the PriceOracleSentinel"},"id":5125,"name":"PriceOracleSentinelUpdated","nameLocation":"1982:26:42","nodeType":"EventDefinition","parameters":{"id":5124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5121,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"2025:10:42","nodeType":"VariableDeclaration","scope":5125,"src":"2009:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5120,"name":"address","nodeType":"ElementaryTypeName","src":"2009:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5123,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"2053:10:42","nodeType":"VariableDeclaration","scope":5125,"src":"2037:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5122,"name":"address","nodeType":"ElementaryTypeName","src":"2037:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2008:56:42"},"src":"1976:89:42"},{"anonymous":false,"documentation":{"id":5126,"nodeType":"StructuredDocumentation","src":"2069:193:42","text":" @dev Emitted when the pool data provider is updated.\n @param oldAddress The old address of the PoolDataProvider\n @param newAddress The new address of the PoolDataProvider"},"id":5132,"name":"PoolDataProviderUpdated","nameLocation":"2271:23:42","nodeType":"EventDefinition","parameters":{"id":5131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5128,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"2311:10:42","nodeType":"VariableDeclaration","scope":5132,"src":"2295:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5127,"name":"address","nodeType":"ElementaryTypeName","src":"2295:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5130,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"2339:10:42","nodeType":"VariableDeclaration","scope":5132,"src":"2323:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5129,"name":"address","nodeType":"ElementaryTypeName","src":"2323:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2294:56:42"},"src":"2265:86:42"},{"anonymous":false,"documentation":{"id":5133,"nodeType":"StructuredDocumentation","src":"2355:243:42","text":" @dev Emitted when a new proxy is created.\n @param id The identifier of the proxy\n @param proxyAddress The address of the created proxy contract\n @param implementationAddress The address of the implementation contract"},"id":5141,"name":"ProxyCreated","nameLocation":"2607:12:42","nodeType":"EventDefinition","parameters":{"id":5140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5135,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"2641:2:42","nodeType":"VariableDeclaration","scope":5141,"src":"2625:18:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5134,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2625:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5137,"indexed":true,"mutability":"mutable","name":"proxyAddress","nameLocation":"2665:12:42","nodeType":"VariableDeclaration","scope":5141,"src":"2649:28:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5136,"name":"address","nodeType":"ElementaryTypeName","src":"2649:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5139,"indexed":true,"mutability":"mutable","name":"implementationAddress","nameLocation":"2699:21:42","nodeType":"VariableDeclaration","scope":5141,"src":"2683:37:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5138,"name":"address","nodeType":"ElementaryTypeName","src":"2683:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2619:105:42"},"src":"2601:124:42"},{"anonymous":false,"documentation":{"id":5142,"nodeType":"StructuredDocumentation","src":"2729:238:42","text":" @dev Emitted when a new non-proxied contract address is registered.\n @param id The identifier of the contract\n @param oldAddress The address of the old contract\n @param newAddress The address of the new contract"},"id":5150,"name":"AddressSet","nameLocation":"2976:10:42","nodeType":"EventDefinition","parameters":{"id":5149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5144,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"3003:2:42","nodeType":"VariableDeclaration","scope":5150,"src":"2987:18:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5143,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2987:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5146,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"3023:10:42","nodeType":"VariableDeclaration","scope":5150,"src":"3007:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5145,"name":"address","nodeType":"ElementaryTypeName","src":"3007:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5148,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"3051:10:42","nodeType":"VariableDeclaration","scope":5150,"src":"3035:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5147,"name":"address","nodeType":"ElementaryTypeName","src":"3035:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2986:76:42"},"src":"2970:93:42"},{"anonymous":false,"documentation":{"id":5151,"nodeType":"StructuredDocumentation","src":"3067:367:42","text":" @dev Emitted when the implementation of the proxy registered with id is updated\n @param id The identifier of the contract\n @param proxyAddress The address of the proxy contract\n @param oldImplementationAddress The address of the old implementation contract\n @param newImplementationAddress The address of the new implementation contract"},"id":5161,"name":"AddressSetAsProxy","nameLocation":"3443:17:42","nodeType":"EventDefinition","parameters":{"id":5160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5153,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"3482:2:42","nodeType":"VariableDeclaration","scope":5161,"src":"3466:18:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5152,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3466:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5155,"indexed":true,"mutability":"mutable","name":"proxyAddress","nameLocation":"3506:12:42","nodeType":"VariableDeclaration","scope":5161,"src":"3490:28:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5154,"name":"address","nodeType":"ElementaryTypeName","src":"3490:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5157,"indexed":false,"mutability":"mutable","name":"oldImplementationAddress","nameLocation":"3532:24:42","nodeType":"VariableDeclaration","scope":5161,"src":"3524:32:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5156,"name":"address","nodeType":"ElementaryTypeName","src":"3524:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5159,"indexed":true,"mutability":"mutable","name":"newImplementationAddress","nameLocation":"3578:24:42","nodeType":"VariableDeclaration","scope":5161,"src":"3562:40:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5158,"name":"address","nodeType":"ElementaryTypeName","src":"3562:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3460:146:42"},"src":"3437:170:42"},{"documentation":{"id":5162,"nodeType":"StructuredDocumentation","src":"3611:117:42","text":" @notice Returns the id of the Aave market to which this contract points to.\n @return The market id"},"functionSelector":"568ef470","id":5167,"implemented":false,"kind":"function","modifiers":[],"name":"getMarketId","nameLocation":"3740:11:42","nodeType":"FunctionDefinition","parameters":{"id":5163,"nodeType":"ParameterList","parameters":[],"src":"3751:2:42"},"returnParameters":{"id":5166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5165,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5167,"src":"3777:13:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5164,"name":"string","nodeType":"ElementaryTypeName","src":"3777:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3776:15:42"},"scope":5282,"src":"3731:61:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5168,"nodeType":"StructuredDocumentation","src":"3796:252:42","text":" @notice Associates an id with a specific PoolAddressesProvider.\n @dev This can be used to create an onchain registry of PoolAddressesProviders to\n identify and validate multiple Aave markets.\n @param newMarketId The market id"},"functionSelector":"f67b1847","id":5173,"implemented":false,"kind":"function","modifiers":[],"name":"setMarketId","nameLocation":"4060:11:42","nodeType":"FunctionDefinition","parameters":{"id":5171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5170,"mutability":"mutable","name":"newMarketId","nameLocation":"4088:11:42","nodeType":"VariableDeclaration","scope":5173,"src":"4072:27:42","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":5169,"name":"string","nodeType":"ElementaryTypeName","src":"4072:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4071:29:42"},"returnParameters":{"id":5172,"nodeType":"ParameterList","parameters":[],"src":"4109:0:42"},"scope":5282,"src":"4051:59:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5174,"nodeType":"StructuredDocumentation","src":"4114:306:42","text":" @notice Returns an address by its identifier.\n @dev The returned address might be an EOA or a contract, potentially proxied\n @dev It returns ZERO if there is no registered address with the given id\n @param id The id\n @return The address of the registered for the specified id"},"functionSelector":"21f8a721","id":5181,"implemented":false,"kind":"function","modifiers":[],"name":"getAddress","nameLocation":"4432:10:42","nodeType":"FunctionDefinition","parameters":{"id":5177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5176,"mutability":"mutable","name":"id","nameLocation":"4451:2:42","nodeType":"VariableDeclaration","scope":5181,"src":"4443:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5175,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4443:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4442:12:42"},"returnParameters":{"id":5180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5179,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5181,"src":"4478:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5178,"name":"address","nodeType":"ElementaryTypeName","src":"4478:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4477:9:42"},"scope":5282,"src":"4423:64:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5182,"nodeType":"StructuredDocumentation","src":"4491:485:42","text":" @notice General function to update the implementation of a proxy registered with\n certain `id`. If there is no proxy registered, it will instantiate one and\n set as implementation the `newImplementationAddress`.\n @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\n setter function, in order to avoid unexpected consequences\n @param id The id\n @param newImplementationAddress The address of the new implementation"},"functionSelector":"5dcc528c","id":5189,"implemented":false,"kind":"function","modifiers":[],"name":"setAddressAsProxy","nameLocation":"4988:17:42","nodeType":"FunctionDefinition","parameters":{"id":5187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5184,"mutability":"mutable","name":"id","nameLocation":"5014:2:42","nodeType":"VariableDeclaration","scope":5189,"src":"5006:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5183,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5006:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5186,"mutability":"mutable","name":"newImplementationAddress","nameLocation":"5026:24:42","nodeType":"VariableDeclaration","scope":5189,"src":"5018:32:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5185,"name":"address","nodeType":"ElementaryTypeName","src":"5018:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5005:46:42"},"returnParameters":{"id":5188,"nodeType":"ParameterList","parameters":[],"src":"5060:0:42"},"scope":5282,"src":"4979:82:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5190,"nodeType":"StructuredDocumentation","src":"5065:244:42","text":" @notice Sets an address for an id replacing the address saved in the addresses map.\n @dev IMPORTANT Use this function carefully, as it will do a hard replacement\n @param id The id\n @param newAddress The address to set"},"functionSelector":"ca446dd9","id":5197,"implemented":false,"kind":"function","modifiers":[],"name":"setAddress","nameLocation":"5321:10:42","nodeType":"FunctionDefinition","parameters":{"id":5195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5192,"mutability":"mutable","name":"id","nameLocation":"5340:2:42","nodeType":"VariableDeclaration","scope":5197,"src":"5332:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5332:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5194,"mutability":"mutable","name":"newAddress","nameLocation":"5352:10:42","nodeType":"VariableDeclaration","scope":5197,"src":"5344:18:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5193,"name":"address","nodeType":"ElementaryTypeName","src":"5344:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5331:32:42"},"returnParameters":{"id":5196,"nodeType":"ParameterList","parameters":[],"src":"5372:0:42"},"scope":5282,"src":"5312:61:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5198,"nodeType":"StructuredDocumentation","src":"5377:97:42","text":" @notice Returns the address of the Pool proxy.\n @return The Pool proxy address"},"functionSelector":"026b1d5f","id":5203,"implemented":false,"kind":"function","modifiers":[],"name":"getPool","nameLocation":"5486:7:42","nodeType":"FunctionDefinition","parameters":{"id":5199,"nodeType":"ParameterList","parameters":[],"src":"5493:2:42"},"returnParameters":{"id":5202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5201,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5203,"src":"5519:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5200,"name":"address","nodeType":"ElementaryTypeName","src":"5519:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5518:9:42"},"scope":5282,"src":"5477:51:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5204,"nodeType":"StructuredDocumentation","src":"5532:224:42","text":" @notice Updates the implementation of the Pool, or creates a proxy\n setting the new `pool` implementation when the function is called for the first time.\n @param newPoolImpl The new Pool implementation"},"functionSelector":"a1564406","id":5209,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolImpl","nameLocation":"5768:11:42","nodeType":"FunctionDefinition","parameters":{"id":5207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5206,"mutability":"mutable","name":"newPoolImpl","nameLocation":"5788:11:42","nodeType":"VariableDeclaration","scope":5209,"src":"5780:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5205,"name":"address","nodeType":"ElementaryTypeName","src":"5780:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5779:21:42"},"returnParameters":{"id":5208,"nodeType":"ParameterList","parameters":[],"src":"5809:0:42"},"scope":5282,"src":"5759:51:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5210,"nodeType":"StructuredDocumentation","src":"5814:121:42","text":" @notice Returns the address of the PoolConfigurator proxy.\n @return The PoolConfigurator proxy address"},"functionSelector":"631adfca","id":5215,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfigurator","nameLocation":"5947:19:42","nodeType":"FunctionDefinition","parameters":{"id":5211,"nodeType":"ParameterList","parameters":[],"src":"5966:2:42"},"returnParameters":{"id":5214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5215,"src":"5992:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5212,"name":"address","nodeType":"ElementaryTypeName","src":"5992:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5991:9:42"},"scope":5282,"src":"5938:63:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5216,"nodeType":"StructuredDocumentation","src":"6005:272:42","text":" @notice Updates the implementation of the PoolConfigurator, or creates a proxy\n setting the new `PoolConfigurator` implementation when the function is called for the first time.\n @param newPoolConfiguratorImpl The new PoolConfigurator implementation"},"functionSelector":"e4ca28b7","id":5221,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolConfiguratorImpl","nameLocation":"6289:23:42","nodeType":"FunctionDefinition","parameters":{"id":5219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5218,"mutability":"mutable","name":"newPoolConfiguratorImpl","nameLocation":"6321:23:42","nodeType":"VariableDeclaration","scope":5221,"src":"6313:31:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5217,"name":"address","nodeType":"ElementaryTypeName","src":"6313:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6312:33:42"},"returnParameters":{"id":5220,"nodeType":"ParameterList","parameters":[],"src":"6354:0:42"},"scope":5282,"src":"6280:75:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5222,"nodeType":"StructuredDocumentation","src":"6359:107:42","text":" @notice Returns the address of the price oracle.\n @return The address of the PriceOracle"},"functionSelector":"fca513a8","id":5227,"implemented":false,"kind":"function","modifiers":[],"name":"getPriceOracle","nameLocation":"6478:14:42","nodeType":"FunctionDefinition","parameters":{"id":5223,"nodeType":"ParameterList","parameters":[],"src":"6492:2:42"},"returnParameters":{"id":5226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5227,"src":"6518:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5224,"name":"address","nodeType":"ElementaryTypeName","src":"6518:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6517:9:42"},"scope":5282,"src":"6469:58:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5228,"nodeType":"StructuredDocumentation","src":"6531:125:42","text":" @notice Updates the address of the price oracle.\n @param newPriceOracle The address of the new PriceOracle"},"functionSelector":"530e784f","id":5233,"implemented":false,"kind":"function","modifiers":[],"name":"setPriceOracle","nameLocation":"6668:14:42","nodeType":"FunctionDefinition","parameters":{"id":5231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5230,"mutability":"mutable","name":"newPriceOracle","nameLocation":"6691:14:42","nodeType":"VariableDeclaration","scope":5233,"src":"6683:22:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5229,"name":"address","nodeType":"ElementaryTypeName","src":"6683:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6682:24:42"},"returnParameters":{"id":5232,"nodeType":"ParameterList","parameters":[],"src":"6715:0:42"},"scope":5282,"src":"6659:57:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5234,"nodeType":"StructuredDocumentation","src":"6720:105:42","text":" @notice Returns the address of the ACL manager.\n @return The address of the ACLManager"},"functionSelector":"707cd716","id":5239,"implemented":false,"kind":"function","modifiers":[],"name":"getACLManager","nameLocation":"6837:13:42","nodeType":"FunctionDefinition","parameters":{"id":5235,"nodeType":"ParameterList","parameters":[],"src":"6850:2:42"},"returnParameters":{"id":5238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5239,"src":"6876:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5236,"name":"address","nodeType":"ElementaryTypeName","src":"6876:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6875:9:42"},"scope":5282,"src":"6828:57:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5240,"nodeType":"StructuredDocumentation","src":"6889:122:42","text":" @notice Updates the address of the ACL manager.\n @param newAclManager The address of the new ACLManager"},"functionSelector":"ed301ca9","id":5245,"implemented":false,"kind":"function","modifiers":[],"name":"setACLManager","nameLocation":"7023:13:42","nodeType":"FunctionDefinition","parameters":{"id":5243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5242,"mutability":"mutable","name":"newAclManager","nameLocation":"7045:13:42","nodeType":"VariableDeclaration","scope":5245,"src":"7037:21:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5241,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:23:42"},"returnParameters":{"id":5244,"nodeType":"ParameterList","parameters":[],"src":"7068:0:42"},"scope":5282,"src":"7014:55:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5246,"nodeType":"StructuredDocumentation","src":"7073:102:42","text":" @notice Returns the address of the ACL admin.\n @return The address of the ACL admin"},"functionSelector":"0e67178c","id":5251,"implemented":false,"kind":"function","modifiers":[],"name":"getACLAdmin","nameLocation":"7187:11:42","nodeType":"FunctionDefinition","parameters":{"id":5247,"nodeType":"ParameterList","parameters":[],"src":"7198:2:42"},"returnParameters":{"id":5250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5251,"src":"7224:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5248,"name":"address","nodeType":"ElementaryTypeName","src":"7224:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7223:9:42"},"scope":5282,"src":"7178:55:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5252,"nodeType":"StructuredDocumentation","src":"7237:117:42","text":" @notice Updates the address of the ACL admin.\n @param newAclAdmin The address of the new ACL admin"},"functionSelector":"76d84ffc","id":5257,"implemented":false,"kind":"function","modifiers":[],"name":"setACLAdmin","nameLocation":"7366:11:42","nodeType":"FunctionDefinition","parameters":{"id":5255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5254,"mutability":"mutable","name":"newAclAdmin","nameLocation":"7386:11:42","nodeType":"VariableDeclaration","scope":5257,"src":"7378:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5253,"name":"address","nodeType":"ElementaryTypeName","src":"7378:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7377:21:42"},"returnParameters":{"id":5256,"nodeType":"ParameterList","parameters":[],"src":"7407:0:42"},"scope":5282,"src":"7357:51:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5258,"nodeType":"StructuredDocumentation","src":"7412:124:42","text":" @notice Returns the address of the price oracle sentinel.\n @return The address of the PriceOracleSentinel"},"functionSelector":"5eb88d3d","id":5263,"implemented":false,"kind":"function","modifiers":[],"name":"getPriceOracleSentinel","nameLocation":"7548:22:42","nodeType":"FunctionDefinition","parameters":{"id":5259,"nodeType":"ParameterList","parameters":[],"src":"7570:2:42"},"returnParameters":{"id":5262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5263,"src":"7596:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5260,"name":"address","nodeType":"ElementaryTypeName","src":"7596:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7595:9:42"},"scope":5282,"src":"7539:66:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5264,"nodeType":"StructuredDocumentation","src":"7609:150:42","text":" @notice Updates the address of the price oracle sentinel.\n @param newPriceOracleSentinel The address of the new PriceOracleSentinel"},"functionSelector":"74944cec","id":5269,"implemented":false,"kind":"function","modifiers":[],"name":"setPriceOracleSentinel","nameLocation":"7771:22:42","nodeType":"FunctionDefinition","parameters":{"id":5267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5266,"mutability":"mutable","name":"newPriceOracleSentinel","nameLocation":"7802:22:42","nodeType":"VariableDeclaration","scope":5269,"src":"7794:30:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5265,"name":"address","nodeType":"ElementaryTypeName","src":"7794:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7793:32:42"},"returnParameters":{"id":5268,"nodeType":"ParameterList","parameters":[],"src":"7834:0:42"},"scope":5282,"src":"7762:73:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5270,"nodeType":"StructuredDocumentation","src":"7839:109:42","text":" @notice Returns the address of the data provider.\n @return The address of the DataProvider"},"functionSelector":"e860accb","id":5275,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolDataProvider","nameLocation":"7960:19:42","nodeType":"FunctionDefinition","parameters":{"id":5271,"nodeType":"ParameterList","parameters":[],"src":"7979:2:42"},"returnParameters":{"id":5274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5273,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5275,"src":"8005:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5272,"name":"address","nodeType":"ElementaryTypeName","src":"8005:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8004:9:42"},"scope":5282,"src":"7951:63:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5276,"nodeType":"StructuredDocumentation","src":"8018:128:42","text":" @notice Updates the address of the data provider.\n @param newDataProvider The address of the new DataProvider"},"functionSelector":"e44e9ed1","id":5281,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolDataProvider","nameLocation":"8158:19:42","nodeType":"FunctionDefinition","parameters":{"id":5279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5278,"mutability":"mutable","name":"newDataProvider","nameLocation":"8186:15:42","nodeType":"VariableDeclaration","scope":5281,"src":"8178:23:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5277,"name":"address","nodeType":"ElementaryTypeName","src":"8178:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8177:25:42"},"returnParameters":{"id":5280,"nodeType":"ParameterList","parameters":[],"src":"8211:0:42"},"scope":5282,"src":"8149:63:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5283,"src":"189:8025:42","usedErrors":[]}],"src":"37:8178:42"},"id":42},"contracts/interfaces/IPoolAddressesProviderRegistry.sol":{"ast":{"absolutePath":"contracts/interfaces/IPoolAddressesProviderRegistry.sol","exportedSymbols":{"IPoolAddressesProviderRegistry":[5337]},"id":5338,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5284,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:43"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolAddressesProviderRegistry","contractDependencies":[],"contractKind":"interface","documentation":{"id":5285,"nodeType":"StructuredDocumentation","src":"62:149:43","text":" @title IPoolAddressesProviderRegistry\n @author Aave\n @notice Defines the basic interface for an Aave Pool Addresses Provider Registry."},"fullyImplemented":false,"id":5337,"linearizedBaseContracts":[5337],"name":"IPoolAddressesProviderRegistry","nameLocation":"222:30:43","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5286,"nodeType":"StructuredDocumentation","src":"257:215:43","text":" @dev Emitted when a new AddressesProvider is registered.\n @param addressesProvider The address of the registered PoolAddressesProvider\n @param id The id of the registered PoolAddressesProvider"},"id":5292,"name":"AddressesProviderRegistered","nameLocation":"481:27:43","nodeType":"EventDefinition","parameters":{"id":5291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5288,"indexed":true,"mutability":"mutable","name":"addressesProvider","nameLocation":"525:17:43","nodeType":"VariableDeclaration","scope":5292,"src":"509:33:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5287,"name":"address","nodeType":"ElementaryTypeName","src":"509:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5290,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"560:2:43","nodeType":"VariableDeclaration","scope":5292,"src":"544:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5289,"name":"uint256","nodeType":"ElementaryTypeName","src":"544:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"508:55:43"},"src":"475:89:43"},{"anonymous":false,"documentation":{"id":5293,"nodeType":"StructuredDocumentation","src":"568:218:43","text":" @dev Emitted when an AddressesProvider is unregistered.\n @param addressesProvider The address of the unregistered PoolAddressesProvider\n @param id The id of the unregistered PoolAddressesProvider"},"id":5299,"name":"AddressesProviderUnregistered","nameLocation":"795:29:43","nodeType":"EventDefinition","parameters":{"id":5298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5295,"indexed":true,"mutability":"mutable","name":"addressesProvider","nameLocation":"841:17:43","nodeType":"VariableDeclaration","scope":5299,"src":"825:33:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5294,"name":"address","nodeType":"ElementaryTypeName","src":"825:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5297,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"876:2:43","nodeType":"VariableDeclaration","scope":5299,"src":"860:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5296,"name":"uint256","nodeType":"ElementaryTypeName","src":"860:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"824:55:43"},"src":"789:91:43"},{"documentation":{"id":5300,"nodeType":"StructuredDocumentation","src":"884:118:43","text":" @notice Returns the list of registered addresses providers\n @return The list of addresses providers"},"functionSelector":"365ccbbf","id":5306,"implemented":false,"kind":"function","modifiers":[],"name":"getAddressesProvidersList","nameLocation":"1014:25:43","nodeType":"FunctionDefinition","parameters":{"id":5301,"nodeType":"ParameterList","parameters":[],"src":"1039:2:43"},"returnParameters":{"id":5305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5304,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5306,"src":"1065:16:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5302,"name":"address","nodeType":"ElementaryTypeName","src":"1065:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5303,"nodeType":"ArrayTypeName","src":"1065:9:43","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1064:18:43"},"scope":5337,"src":"1005:78:43","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5307,"nodeType":"StructuredDocumentation","src":"1087:221:43","text":" @notice Returns the id of a registered PoolAddressesProvider\n @param addressesProvider The address of the PoolAddressesProvider\n @return The id of the PoolAddressesProvider or 0 if is not registered"},"functionSelector":"d0267be7","id":5314,"implemented":false,"kind":"function","modifiers":[],"name":"getAddressesProviderIdByAddress","nameLocation":"1320:31:43","nodeType":"FunctionDefinition","parameters":{"id":5310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5309,"mutability":"mutable","name":"addressesProvider","nameLocation":"1365:17:43","nodeType":"VariableDeclaration","scope":5314,"src":"1357:25:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5308,"name":"address","nodeType":"ElementaryTypeName","src":"1357:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1351:35:43"},"returnParameters":{"id":5313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5312,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5314,"src":"1410:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5311,"name":"uint256","nodeType":"ElementaryTypeName","src":"1410:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1409:9:43"},"scope":5337,"src":"1311:108:43","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5315,"nodeType":"StructuredDocumentation","src":"1423:228:43","text":" @notice Returns the address of a registered PoolAddressesProvider\n @param id The id of the market\n @return The address of the PoolAddressesProvider with the given id or zero address if it is not registered"},"functionSelector":"57dc0566","id":5322,"implemented":false,"kind":"function","modifiers":[],"name":"getAddressesProviderAddressById","nameLocation":"1663:31:43","nodeType":"FunctionDefinition","parameters":{"id":5318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5317,"mutability":"mutable","name":"id","nameLocation":"1703:2:43","nodeType":"VariableDeclaration","scope":5322,"src":"1695:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5316,"name":"uint256","nodeType":"ElementaryTypeName","src":"1695:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1694:12:43"},"returnParameters":{"id":5321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5322,"src":"1730:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5319,"name":"address","nodeType":"ElementaryTypeName","src":"1730:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1729:9:43"},"scope":5337,"src":"1654:85:43","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5323,"nodeType":"StructuredDocumentation","src":"1743:379:43","text":" @notice Registers an addresses provider\n @dev The PoolAddressesProvider must not already be registered in the registry\n @dev The id must not be used by an already registered PoolAddressesProvider\n @param provider The address of the new PoolAddressesProvider\n @param id The id for the new PoolAddressesProvider, referring to the market it belongs to"},"functionSelector":"d258191e","id":5330,"implemented":false,"kind":"function","modifiers":[],"name":"registerAddressesProvider","nameLocation":"2134:25:43","nodeType":"FunctionDefinition","parameters":{"id":5328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5325,"mutability":"mutable","name":"provider","nameLocation":"2168:8:43","nodeType":"VariableDeclaration","scope":5330,"src":"2160:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5324,"name":"address","nodeType":"ElementaryTypeName","src":"2160:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5327,"mutability":"mutable","name":"id","nameLocation":"2186:2:43","nodeType":"VariableDeclaration","scope":5330,"src":"2178:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5326,"name":"uint256","nodeType":"ElementaryTypeName","src":"2178:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2159:30:43"},"returnParameters":{"id":5329,"nodeType":"ParameterList","parameters":[],"src":"2198:0:43"},"scope":5337,"src":"2125:74:43","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5331,"nodeType":"StructuredDocumentation","src":"2203:155:43","text":" @notice Removes an addresses provider from the list of registered addresses providers\n @param provider The PoolAddressesProvider address"},"functionSelector":"0de26707","id":5336,"implemented":false,"kind":"function","modifiers":[],"name":"unregisterAddressesProvider","nameLocation":"2370:27:43","nodeType":"FunctionDefinition","parameters":{"id":5334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5333,"mutability":"mutable","name":"provider","nameLocation":"2406:8:43","nodeType":"VariableDeclaration","scope":5336,"src":"2398:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5332,"name":"address","nodeType":"ElementaryTypeName","src":"2398:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2397:18:43"},"returnParameters":{"id":5335,"nodeType":"ParameterList","parameters":[],"src":"2424:0:43"},"scope":5337,"src":"2361:64:43","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5338,"src":"212:2215:43","usedErrors":[]}],"src":"37:2391:43"},"id":43},"contracts/interfaces/IPoolConfigurator.sol":{"ast":{"absolutePath":"contracts/interfaces/IPoolConfigurator.sol","exportedSymbols":{"ConfiguratorInputTypes":[23875],"IPoolConfigurator":[5780]},"id":5781,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5339,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:44"},{"absolutePath":"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol","file":"../protocol/libraries/types/ConfiguratorInputTypes.sol","id":5341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5781,"sourceUnit":23876,"src":"62:94:44","symbolAliases":[{"foreign":{"id":5340,"name":"ConfiguratorInputTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolConfigurator","contractDependencies":[],"contractKind":"interface","documentation":{"id":5342,"nodeType":"StructuredDocumentation","src":"158:115:44","text":" @title IPoolConfigurator\n @author Aave\n @notice Defines the basic interface for a Pool configurator."},"fullyImplemented":false,"id":5780,"linearizedBaseContracts":[5780],"name":"IPoolConfigurator","nameLocation":"284:17:44","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5343,"nodeType":"StructuredDocumentation","src":"306:456:44","text":" @dev Emitted when a reserve is initialized.\n @param asset The address of the underlying asset of the reserve\n @param aToken The address of the associated aToken contract\n @param stableDebtToken The address of the associated stable rate debt token\n @param variableDebtToken The address of the associated variable rate debt token\n @param interestRateStrategyAddress The address of the interest rate strategy for the reserve"},"id":5355,"name":"ReserveInitialized","nameLocation":"771:18:44","nodeType":"EventDefinition","parameters":{"id":5354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5345,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"811:5:44","nodeType":"VariableDeclaration","scope":5355,"src":"795:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5344,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5347,"indexed":true,"mutability":"mutable","name":"aToken","nameLocation":"838:6:44","nodeType":"VariableDeclaration","scope":5355,"src":"822:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5346,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5349,"indexed":false,"mutability":"mutable","name":"stableDebtToken","nameLocation":"858:15:44","nodeType":"VariableDeclaration","scope":5355,"src":"850:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5348,"name":"address","nodeType":"ElementaryTypeName","src":"850:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5351,"indexed":false,"mutability":"mutable","name":"variableDebtToken","nameLocation":"887:17:44","nodeType":"VariableDeclaration","scope":5355,"src":"879:25:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5350,"name":"address","nodeType":"ElementaryTypeName","src":"879:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5353,"indexed":false,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"918:27:44","nodeType":"VariableDeclaration","scope":5355,"src":"910:35:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5352,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"789:160:44"},"src":"765:185:44"},{"anonymous":false,"documentation":{"id":5356,"nodeType":"StructuredDocumentation","src":"954:214:44","text":" @dev Emitted when borrowing is enabled or disabled on a reserve.\n @param asset The address of the underlying asset of the reserve\n @param enabled True if borrowing is enabled, false otherwise"},"id":5362,"name":"ReserveBorrowing","nameLocation":"1177:16:44","nodeType":"EventDefinition","parameters":{"id":5361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5358,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1210:5:44","nodeType":"VariableDeclaration","scope":5362,"src":"1194:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5357,"name":"address","nodeType":"ElementaryTypeName","src":"1194:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5360,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"1222:7:44","nodeType":"VariableDeclaration","scope":5362,"src":"1217:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5359,"name":"bool","nodeType":"ElementaryTypeName","src":"1217:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1193:37:44"},"src":"1171:60:44"},{"anonymous":false,"documentation":{"id":5363,"nodeType":"StructuredDocumentation","src":"1235:218:44","text":" @dev Emitted when flashloans are enabled or disabled on a reserve.\n @param asset The address of the underlying asset of the reserve\n @param enabled True if flashloans are enabled, false otherwise"},"id":5369,"name":"ReserveFlashLoaning","nameLocation":"1462:19:44","nodeType":"EventDefinition","parameters":{"id":5368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5365,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1498:5:44","nodeType":"VariableDeclaration","scope":5369,"src":"1482:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5364,"name":"address","nodeType":"ElementaryTypeName","src":"1482:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5367,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"1510:7:44","nodeType":"VariableDeclaration","scope":5369,"src":"1505:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5366,"name":"bool","nodeType":"ElementaryTypeName","src":"1505:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1481:37:44"},"src":"1456:63:44"},{"anonymous":false,"documentation":{"id":5370,"nodeType":"StructuredDocumentation","src":"1523:462:44","text":" @dev Emitted when the collateralization risk parameters for the specified asset are updated.\n @param asset The address of the underlying asset of the reserve\n @param ltv The loan to value of the asset when used as collateral\n @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\n @param liquidationBonus The bonus liquidators receive to liquidate this asset"},"id":5380,"name":"CollateralConfigurationChanged","nameLocation":"1994:30:44","nodeType":"EventDefinition","parameters":{"id":5379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5372,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2046:5:44","nodeType":"VariableDeclaration","scope":5380,"src":"2030:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5371,"name":"address","nodeType":"ElementaryTypeName","src":"2030:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5374,"indexed":false,"mutability":"mutable","name":"ltv","nameLocation":"2065:3:44","nodeType":"VariableDeclaration","scope":5380,"src":"2057:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5373,"name":"uint256","nodeType":"ElementaryTypeName","src":"2057:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5376,"indexed":false,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"2082:20:44","nodeType":"VariableDeclaration","scope":5380,"src":"2074:28:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5375,"name":"uint256","nodeType":"ElementaryTypeName","src":"2074:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5378,"indexed":false,"mutability":"mutable","name":"liquidationBonus","nameLocation":"2116:16:44","nodeType":"VariableDeclaration","scope":5380,"src":"2108:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5377,"name":"uint256","nodeType":"ElementaryTypeName","src":"2108:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2024:112:44"},"src":"1988:149:44"},{"anonymous":false,"documentation":{"id":5381,"nodeType":"StructuredDocumentation","src":"2141:237:44","text":" @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\n @param asset The address of the underlying asset of the reserve\n @param enabled True if stable rate borrowing is enabled, false otherwise"},"id":5387,"name":"ReserveStableRateBorrowing","nameLocation":"2387:26:44","nodeType":"EventDefinition","parameters":{"id":5386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5383,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2430:5:44","nodeType":"VariableDeclaration","scope":5387,"src":"2414:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5382,"name":"address","nodeType":"ElementaryTypeName","src":"2414:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5385,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"2442:7:44","nodeType":"VariableDeclaration","scope":5387,"src":"2437:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5384,"name":"bool","nodeType":"ElementaryTypeName","src":"2437:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2413:37:44"},"src":"2381:70:44"},{"anonymous":false,"documentation":{"id":5388,"nodeType":"StructuredDocumentation","src":"2455:201:44","text":" @dev Emitted when a reserve is activated or deactivated\n @param asset The address of the underlying asset of the reserve\n @param active True if reserve is active, false otherwise"},"id":5394,"name":"ReserveActive","nameLocation":"2665:13:44","nodeType":"EventDefinition","parameters":{"id":5393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5390,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2695:5:44","nodeType":"VariableDeclaration","scope":5394,"src":"2679:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5389,"name":"address","nodeType":"ElementaryTypeName","src":"2679:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5392,"indexed":false,"mutability":"mutable","name":"active","nameLocation":"2707:6:44","nodeType":"VariableDeclaration","scope":5394,"src":"2702:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5391,"name":"bool","nodeType":"ElementaryTypeName","src":"2702:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2678:36:44"},"src":"2659:56:44"},{"anonymous":false,"documentation":{"id":5395,"nodeType":"StructuredDocumentation","src":"2719:195:44","text":" @dev Emitted when a reserve is frozen or unfrozen\n @param asset The address of the underlying asset of the reserve\n @param frozen True if reserve is frozen, false otherwise"},"id":5401,"name":"ReserveFrozen","nameLocation":"2923:13:44","nodeType":"EventDefinition","parameters":{"id":5400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5397,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2953:5:44","nodeType":"VariableDeclaration","scope":5401,"src":"2937:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5396,"name":"address","nodeType":"ElementaryTypeName","src":"2937:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5399,"indexed":false,"mutability":"mutable","name":"frozen","nameLocation":"2965:6:44","nodeType":"VariableDeclaration","scope":5401,"src":"2960:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5398,"name":"bool","nodeType":"ElementaryTypeName","src":"2960:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2936:36:44"},"src":"2917:56:44"},{"anonymous":false,"documentation":{"id":5402,"nodeType":"StructuredDocumentation","src":"2977:195:44","text":" @dev Emitted when a reserve is paused or unpaused\n @param asset The address of the underlying asset of the reserve\n @param paused True if reserve is paused, false otherwise"},"id":5408,"name":"ReservePaused","nameLocation":"3181:13:44","nodeType":"EventDefinition","parameters":{"id":5407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5404,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"3211:5:44","nodeType":"VariableDeclaration","scope":5408,"src":"3195:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5403,"name":"address","nodeType":"ElementaryTypeName","src":"3195:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5406,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"3223:6:44","nodeType":"VariableDeclaration","scope":5408,"src":"3218:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5405,"name":"bool","nodeType":"ElementaryTypeName","src":"3218:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3194:36:44"},"src":"3175:56:44"},{"anonymous":false,"documentation":{"id":5409,"nodeType":"StructuredDocumentation","src":"3235:123:44","text":" @dev Emitted when a reserve is dropped.\n @param asset The address of the underlying asset of the reserve"},"id":5413,"name":"ReserveDropped","nameLocation":"3367:14:44","nodeType":"EventDefinition","parameters":{"id":5412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5411,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"3398:5:44","nodeType":"VariableDeclaration","scope":5413,"src":"3382:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5410,"name":"address","nodeType":"ElementaryTypeName","src":"3382:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3381:23:44"},"src":"3361:44:44"},{"anonymous":false,"documentation":{"id":5414,"nodeType":"StructuredDocumentation","src":"3409:270:44","text":" @dev Emitted when a reserve factor is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldReserveFactor The old reserve factor, expressed in bps\n @param newReserveFactor The new reserve factor, expressed in bps"},"id":5422,"name":"ReserveFactorChanged","nameLocation":"3688:20:44","nodeType":"EventDefinition","parameters":{"id":5421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5416,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"3730:5:44","nodeType":"VariableDeclaration","scope":5422,"src":"3714:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5415,"name":"address","nodeType":"ElementaryTypeName","src":"3714:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5418,"indexed":false,"mutability":"mutable","name":"oldReserveFactor","nameLocation":"3749:16:44","nodeType":"VariableDeclaration","scope":5422,"src":"3741:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5417,"name":"uint256","nodeType":"ElementaryTypeName","src":"3741:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5420,"indexed":false,"mutability":"mutable","name":"newReserveFactor","nameLocation":"3779:16:44","nodeType":"VariableDeclaration","scope":5422,"src":"3771:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5419,"name":"uint256","nodeType":"ElementaryTypeName","src":"3771:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3708:91:44"},"src":"3682:118:44"},{"anonymous":false,"documentation":{"id":5423,"nodeType":"StructuredDocumentation","src":"3804:229:44","text":" @dev Emitted when the borrow cap of a reserve is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldBorrowCap The old borrow cap\n @param newBorrowCap The new borrow cap"},"id":5431,"name":"BorrowCapChanged","nameLocation":"4042:16:44","nodeType":"EventDefinition","parameters":{"id":5430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5425,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"4075:5:44","nodeType":"VariableDeclaration","scope":5431,"src":"4059:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5424,"name":"address","nodeType":"ElementaryTypeName","src":"4059:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5427,"indexed":false,"mutability":"mutable","name":"oldBorrowCap","nameLocation":"4090:12:44","nodeType":"VariableDeclaration","scope":5431,"src":"4082:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5426,"name":"uint256","nodeType":"ElementaryTypeName","src":"4082:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5429,"indexed":false,"mutability":"mutable","name":"newBorrowCap","nameLocation":"4112:12:44","nodeType":"VariableDeclaration","scope":5431,"src":"4104:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5428,"name":"uint256","nodeType":"ElementaryTypeName","src":"4104:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4058:67:44"},"src":"4036:90:44"},{"anonymous":false,"documentation":{"id":5432,"nodeType":"StructuredDocumentation","src":"4130:229:44","text":" @dev Emitted when the supply cap of a reserve is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldSupplyCap The old supply cap\n @param newSupplyCap The new supply cap"},"id":5440,"name":"SupplyCapChanged","nameLocation":"4368:16:44","nodeType":"EventDefinition","parameters":{"id":5439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5434,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"4401:5:44","nodeType":"VariableDeclaration","scope":5440,"src":"4385:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5433,"name":"address","nodeType":"ElementaryTypeName","src":"4385:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5436,"indexed":false,"mutability":"mutable","name":"oldSupplyCap","nameLocation":"4416:12:44","nodeType":"VariableDeclaration","scope":5440,"src":"4408:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5435,"name":"uint256","nodeType":"ElementaryTypeName","src":"4408:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5438,"indexed":false,"mutability":"mutable","name":"newSupplyCap","nameLocation":"4438:12:44","nodeType":"VariableDeclaration","scope":5440,"src":"4430:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5437,"name":"uint256","nodeType":"ElementaryTypeName","src":"4430:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4384:67:44"},"src":"4362:90:44"},{"anonymous":false,"documentation":{"id":5441,"nodeType":"StructuredDocumentation","src":"4456:295:44","text":" @dev Emitted when the liquidation protocol fee of a reserve is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldFee The old liquidation protocol fee, expressed in bps\n @param newFee The new liquidation protocol fee, expressed in bps"},"id":5449,"name":"LiquidationProtocolFeeChanged","nameLocation":"4760:29:44","nodeType":"EventDefinition","parameters":{"id":5448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5443,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"4806:5:44","nodeType":"VariableDeclaration","scope":5449,"src":"4790:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5442,"name":"address","nodeType":"ElementaryTypeName","src":"4790:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5445,"indexed":false,"mutability":"mutable","name":"oldFee","nameLocation":"4821:6:44","nodeType":"VariableDeclaration","scope":5449,"src":"4813:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5444,"name":"uint256","nodeType":"ElementaryTypeName","src":"4813:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5447,"indexed":false,"mutability":"mutable","name":"newFee","nameLocation":"4837:6:44","nodeType":"VariableDeclaration","scope":5449,"src":"4829:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5446,"name":"uint256","nodeType":"ElementaryTypeName","src":"4829:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4789:55:44"},"src":"4754:91:44"},{"anonymous":false,"documentation":{"id":5450,"nodeType":"StructuredDocumentation","src":"4849:262:44","text":" @dev Emitted when the unbacked mint cap of a reserve is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldUnbackedMintCap The old unbacked mint cap\n @param newUnbackedMintCap The new unbacked mint cap"},"id":5458,"name":"UnbackedMintCapChanged","nameLocation":"5120:22:44","nodeType":"EventDefinition","parameters":{"id":5457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5452,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"5164:5:44","nodeType":"VariableDeclaration","scope":5458,"src":"5148:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5451,"name":"address","nodeType":"ElementaryTypeName","src":"5148:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5454,"indexed":false,"mutability":"mutable","name":"oldUnbackedMintCap","nameLocation":"5183:18:44","nodeType":"VariableDeclaration","scope":5458,"src":"5175:26:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5453,"name":"uint256","nodeType":"ElementaryTypeName","src":"5175:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5456,"indexed":false,"mutability":"mutable","name":"newUnbackedMintCap","nameLocation":"5215:18:44","nodeType":"VariableDeclaration","scope":5458,"src":"5207:26:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5455,"name":"uint256","nodeType":"ElementaryTypeName","src":"5207:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5142:95:44"},"src":"5114:124:44"},{"anonymous":false,"documentation":{"id":5459,"nodeType":"StructuredDocumentation","src":"5242:257:44","text":" @dev Emitted when the category of an asset in eMode is changed.\n @param asset The address of the underlying asset of the reserve\n @param oldCategoryId The old eMode asset category\n @param newCategoryId The new eMode asset category"},"id":5467,"name":"EModeAssetCategoryChanged","nameLocation":"5508:25:44","nodeType":"EventDefinition","parameters":{"id":5466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5461,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"5550:5:44","nodeType":"VariableDeclaration","scope":5467,"src":"5534:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5460,"name":"address","nodeType":"ElementaryTypeName","src":"5534:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5463,"indexed":false,"mutability":"mutable","name":"oldCategoryId","nameLocation":"5563:13:44","nodeType":"VariableDeclaration","scope":5467,"src":"5557:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5462,"name":"uint8","nodeType":"ElementaryTypeName","src":"5557:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":5465,"indexed":false,"mutability":"mutable","name":"newCategoryId","nameLocation":"5584:13:44","nodeType":"VariableDeclaration","scope":5467,"src":"5578:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5464,"name":"uint8","nodeType":"ElementaryTypeName","src":"5578:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5533:65:44"},"src":"5502:97:44"},{"anonymous":false,"documentation":{"id":5468,"nodeType":"StructuredDocumentation","src":"5603:490:44","text":" @dev Emitted when a new eMode category is added.\n @param categoryId The new eMode category id\n @param ltv The ltv for the asset category in eMode\n @param liquidationThreshold The liquidationThreshold for the asset category in eMode\n @param liquidationBonus The liquidationBonus for the asset category in eMode\n @param oracle The optional address of the price oracle specific for this category\n @param label A human readable identifier for the category"},"id":5482,"name":"EModeCategoryAdded","nameLocation":"6102:18:44","nodeType":"EventDefinition","parameters":{"id":5481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5470,"indexed":true,"mutability":"mutable","name":"categoryId","nameLocation":"6140:10:44","nodeType":"VariableDeclaration","scope":5482,"src":"6126:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5469,"name":"uint8","nodeType":"ElementaryTypeName","src":"6126:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":5472,"indexed":false,"mutability":"mutable","name":"ltv","nameLocation":"6164:3:44","nodeType":"VariableDeclaration","scope":5482,"src":"6156:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5471,"name":"uint256","nodeType":"ElementaryTypeName","src":"6156:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5474,"indexed":false,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"6181:20:44","nodeType":"VariableDeclaration","scope":5482,"src":"6173:28:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5473,"name":"uint256","nodeType":"ElementaryTypeName","src":"6173:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5476,"indexed":false,"mutability":"mutable","name":"liquidationBonus","nameLocation":"6215:16:44","nodeType":"VariableDeclaration","scope":5482,"src":"6207:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5475,"name":"uint256","nodeType":"ElementaryTypeName","src":"6207:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5478,"indexed":false,"mutability":"mutable","name":"oracle","nameLocation":"6245:6:44","nodeType":"VariableDeclaration","scope":5482,"src":"6237:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5477,"name":"address","nodeType":"ElementaryTypeName","src":"6237:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5480,"indexed":false,"mutability":"mutable","name":"label","nameLocation":"6264:5:44","nodeType":"VariableDeclaration","scope":5482,"src":"6257:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5479,"name":"string","nodeType":"ElementaryTypeName","src":"6257:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6120:153:44"},"src":"6096:178:44"},{"anonymous":false,"documentation":{"id":5483,"nodeType":"StructuredDocumentation","src":"6278:298:44","text":" @dev Emitted when a reserve interest strategy contract is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldStrategy The address of the old interest strategy contract\n @param newStrategy The address of the new interest strategy contract"},"id":5491,"name":"ReserveInterestRateStrategyChanged","nameLocation":"6585:34:44","nodeType":"EventDefinition","parameters":{"id":5490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5485,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"6641:5:44","nodeType":"VariableDeclaration","scope":5491,"src":"6625:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5484,"name":"address","nodeType":"ElementaryTypeName","src":"6625:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5487,"indexed":false,"mutability":"mutable","name":"oldStrategy","nameLocation":"6660:11:44","nodeType":"VariableDeclaration","scope":5491,"src":"6652:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5486,"name":"address","nodeType":"ElementaryTypeName","src":"6652:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5489,"indexed":false,"mutability":"mutable","name":"newStrategy","nameLocation":"6685:11:44","nodeType":"VariableDeclaration","scope":5491,"src":"6677:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5488,"name":"address","nodeType":"ElementaryTypeName","src":"6677:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6619:81:44"},"src":"6579:122:44"},{"anonymous":false,"documentation":{"id":5492,"nodeType":"StructuredDocumentation","src":"6705:239:44","text":" @dev Emitted when an aToken implementation is upgraded.\n @param asset The address of the underlying asset of the reserve\n @param proxy The aToken proxy address\n @param implementation The new aToken implementation"},"id":5500,"name":"ATokenUpgraded","nameLocation":"6953:14:44","nodeType":"EventDefinition","parameters":{"id":5499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5494,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"6989:5:44","nodeType":"VariableDeclaration","scope":5500,"src":"6973:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5493,"name":"address","nodeType":"ElementaryTypeName","src":"6973:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5496,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"7016:5:44","nodeType":"VariableDeclaration","scope":5500,"src":"7000:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5495,"name":"address","nodeType":"ElementaryTypeName","src":"7000:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5498,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"7043:14:44","nodeType":"VariableDeclaration","scope":5500,"src":"7027:30:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5497,"name":"address","nodeType":"ElementaryTypeName","src":"7027:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6967:94:44"},"src":"6947:115:44"},{"anonymous":false,"documentation":{"id":5501,"nodeType":"StructuredDocumentation","src":"7066:267:44","text":" @dev Emitted when the implementation of a stable debt token is upgraded.\n @param asset The address of the underlying asset of the reserve\n @param proxy The stable debt token proxy address\n @param implementation The new aToken implementation"},"id":5509,"name":"StableDebtTokenUpgraded","nameLocation":"7342:23:44","nodeType":"EventDefinition","parameters":{"id":5508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5503,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"7387:5:44","nodeType":"VariableDeclaration","scope":5509,"src":"7371:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5502,"name":"address","nodeType":"ElementaryTypeName","src":"7371:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5505,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"7414:5:44","nodeType":"VariableDeclaration","scope":5509,"src":"7398:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5504,"name":"address","nodeType":"ElementaryTypeName","src":"7398:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5507,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"7441:14:44","nodeType":"VariableDeclaration","scope":5509,"src":"7425:30:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5506,"name":"address","nodeType":"ElementaryTypeName","src":"7425:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7365:94:44"},"src":"7336:124:44"},{"anonymous":false,"documentation":{"id":5510,"nodeType":"StructuredDocumentation","src":"7464:271:44","text":" @dev Emitted when the implementation of a variable debt token is upgraded.\n @param asset The address of the underlying asset of the reserve\n @param proxy The variable debt token proxy address\n @param implementation The new aToken implementation"},"id":5518,"name":"VariableDebtTokenUpgraded","nameLocation":"7744:25:44","nodeType":"EventDefinition","parameters":{"id":5517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5512,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"7791:5:44","nodeType":"VariableDeclaration","scope":5518,"src":"7775:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5511,"name":"address","nodeType":"ElementaryTypeName","src":"7775:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5514,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"7818:5:44","nodeType":"VariableDeclaration","scope":5518,"src":"7802:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5513,"name":"address","nodeType":"ElementaryTypeName","src":"7802:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5516,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"7845:14:44","nodeType":"VariableDeclaration","scope":5518,"src":"7829:30:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5515,"name":"address","nodeType":"ElementaryTypeName","src":"7829:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7769:94:44"},"src":"7738:126:44"},{"anonymous":false,"documentation":{"id":5519,"nodeType":"StructuredDocumentation","src":"7868:234:44","text":" @dev Emitted when the debt ceiling of an asset is set.\n @param asset The address of the underlying asset of the reserve\n @param oldDebtCeiling The old debt ceiling\n @param newDebtCeiling The new debt ceiling"},"id":5527,"name":"DebtCeilingChanged","nameLocation":"8111:18:44","nodeType":"EventDefinition","parameters":{"id":5526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5521,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"8146:5:44","nodeType":"VariableDeclaration","scope":5527,"src":"8130:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5520,"name":"address","nodeType":"ElementaryTypeName","src":"8130:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5523,"indexed":false,"mutability":"mutable","name":"oldDebtCeiling","nameLocation":"8161:14:44","nodeType":"VariableDeclaration","scope":5527,"src":"8153:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5522,"name":"uint256","nodeType":"ElementaryTypeName","src":"8153:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5525,"indexed":false,"mutability":"mutable","name":"newDebtCeiling","nameLocation":"8185:14:44","nodeType":"VariableDeclaration","scope":5527,"src":"8177:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5524,"name":"uint256","nodeType":"ElementaryTypeName","src":"8177:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8129:71:44"},"src":"8105:96:44"},{"anonymous":false,"documentation":{"id":5528,"nodeType":"StructuredDocumentation","src":"8205:261:44","text":" @dev Emitted when the the siloed borrowing state for an asset is changed.\n @param asset The address of the underlying asset of the reserve\n @param oldState The old siloed borrowing state\n @param newState The new siloed borrowing state"},"id":5536,"name":"SiloedBorrowingChanged","nameLocation":"8475:22:44","nodeType":"EventDefinition","parameters":{"id":5535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5530,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"8514:5:44","nodeType":"VariableDeclaration","scope":5536,"src":"8498:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5529,"name":"address","nodeType":"ElementaryTypeName","src":"8498:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5532,"indexed":false,"mutability":"mutable","name":"oldState","nameLocation":"8526:8:44","nodeType":"VariableDeclaration","scope":5536,"src":"8521:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5531,"name":"bool","nodeType":"ElementaryTypeName","src":"8521:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5534,"indexed":false,"mutability":"mutable","name":"newState","nameLocation":"8541:8:44","nodeType":"VariableDeclaration","scope":5536,"src":"8536:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5533,"name":"bool","nodeType":"ElementaryTypeName","src":"8536:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8497:53:44"},"src":"8469:82:44"},{"anonymous":false,"documentation":{"id":5537,"nodeType":"StructuredDocumentation","src":"8555:212:44","text":" @dev Emitted when the bridge protocol fee is updated.\n @param oldBridgeProtocolFee The old protocol fee, expressed in bps\n @param newBridgeProtocolFee The new protocol fee, expressed in bps"},"id":5543,"name":"BridgeProtocolFeeUpdated","nameLocation":"8776:24:44","nodeType":"EventDefinition","parameters":{"id":5542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5539,"indexed":false,"mutability":"mutable","name":"oldBridgeProtocolFee","nameLocation":"8809:20:44","nodeType":"VariableDeclaration","scope":5543,"src":"8801:28:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5538,"name":"uint256","nodeType":"ElementaryTypeName","src":"8801:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5541,"indexed":false,"mutability":"mutable","name":"newBridgeProtocolFee","nameLocation":"8839:20:44","nodeType":"VariableDeclaration","scope":5543,"src":"8831:28:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5540,"name":"uint256","nodeType":"ElementaryTypeName","src":"8831:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8800:60:44"},"src":"8770:91:44"},{"anonymous":false,"documentation":{"id":5544,"nodeType":"StructuredDocumentation","src":"8865:218:44","text":" @dev Emitted when the total premium on flashloans is updated.\n @param oldFlashloanPremiumTotal The old premium, expressed in bps\n @param newFlashloanPremiumTotal The new premium, expressed in bps"},"id":5550,"name":"FlashloanPremiumTotalUpdated","nameLocation":"9092:28:44","nodeType":"EventDefinition","parameters":{"id":5549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5546,"indexed":false,"mutability":"mutable","name":"oldFlashloanPremiumTotal","nameLocation":"9134:24:44","nodeType":"VariableDeclaration","scope":5550,"src":"9126:32:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5545,"name":"uint128","nodeType":"ElementaryTypeName","src":"9126:7:44","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":5548,"indexed":false,"mutability":"mutable","name":"newFlashloanPremiumTotal","nameLocation":"9172:24:44","nodeType":"VariableDeclaration","scope":5550,"src":"9164:32:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5547,"name":"uint128","nodeType":"ElementaryTypeName","src":"9164:7:44","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9120:80:44"},"src":"9086:115:44"},{"anonymous":false,"documentation":{"id":5551,"nodeType":"StructuredDocumentation","src":"9205:242:44","text":" @dev Emitted when the part of the premium that goes to protocol is updated.\n @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\n @param newFlashloanPremiumToProtocol The new premium, expressed in bps"},"id":5557,"name":"FlashloanPremiumToProtocolUpdated","nameLocation":"9456:33:44","nodeType":"EventDefinition","parameters":{"id":5556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5553,"indexed":false,"mutability":"mutable","name":"oldFlashloanPremiumToProtocol","nameLocation":"9503:29:44","nodeType":"VariableDeclaration","scope":5557,"src":"9495:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5552,"name":"uint128","nodeType":"ElementaryTypeName","src":"9495:7:44","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":5555,"indexed":false,"mutability":"mutable","name":"newFlashloanPremiumToProtocol","nameLocation":"9546:29:44","nodeType":"VariableDeclaration","scope":5557,"src":"9538:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5554,"name":"uint128","nodeType":"ElementaryTypeName","src":"9538:7:44","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9489:90:44"},"src":"9450:130:44"},{"anonymous":false,"documentation":{"id":5558,"nodeType":"StructuredDocumentation","src":"9584:255:44","text":" @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\n @param asset The address of the underlying asset of the reserve\n @param borrowable True if the reserve is borrowable in isolation, false otherwise"},"id":5564,"name":"BorrowableInIsolationChanged","nameLocation":"9848:28:44","nodeType":"EventDefinition","parameters":{"id":5563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5560,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"9885:5:44","nodeType":"VariableDeclaration","scope":5564,"src":"9877:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5559,"name":"address","nodeType":"ElementaryTypeName","src":"9877:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5562,"indexed":false,"mutability":"mutable","name":"borrowable","nameLocation":"9897:10:44","nodeType":"VariableDeclaration","scope":5564,"src":"9892:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5561,"name":"bool","nodeType":"ElementaryTypeName","src":"9892:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9876:32:44"},"src":"9842:67:44"},{"documentation":{"id":5565,"nodeType":"StructuredDocumentation","src":"9913:110:44","text":" @notice Initializes multiple reserves.\n @param input The array of initialization parameters"},"functionSelector":"02fb45e6","id":5572,"implemented":false,"kind":"function","modifiers":[],"name":"initReserves","nameLocation":"10035:12:44","nodeType":"FunctionDefinition","parameters":{"id":5570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5569,"mutability":"mutable","name":"input","nameLocation":"10099:5:44","nodeType":"VariableDeclaration","scope":5572,"src":"10048:56:44","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$23846_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput[]"},"typeName":{"baseType":{"id":5567,"nodeType":"UserDefinedTypeName","pathNode":{"id":5566,"name":"ConfiguratorInputTypes.InitReserveInput","nodeType":"IdentifierPath","referencedDeclaration":23846,"src":"10048:39:44"},"referencedDeclaration":23846,"src":"10048:39:44","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput"}},"id":5568,"nodeType":"ArrayTypeName","src":"10048:41:44","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$23846_storage_$dyn_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput[]"}},"visibility":"internal"}],"src":"10047:58:44"},"returnParameters":{"id":5571,"nodeType":"ParameterList","parameters":[],"src":"10114:0:44"},"scope":5780,"src":"10026:89:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5573,"nodeType":"StructuredDocumentation","src":"10119:117:44","text":" @dev Updates the aToken implementation for the reserve.\n @param input The aToken update parameters"},"functionSelector":"bb01c37c","id":5579,"implemented":false,"kind":"function","modifiers":[],"name":"updateAToken","nameLocation":"10248:12:44","nodeType":"FunctionDefinition","parameters":{"id":5577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5576,"mutability":"mutable","name":"input","nameLocation":"10311:5:44","nodeType":"VariableDeclaration","scope":5579,"src":"10261:55:44","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"},"typeName":{"id":5575,"nodeType":"UserDefinedTypeName","pathNode":{"id":5574,"name":"ConfiguratorInputTypes.UpdateATokenInput","nodeType":"IdentifierPath","referencedDeclaration":23861,"src":"10261:40:44"},"referencedDeclaration":23861,"src":"10261:40:44","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"}},"visibility":"internal"}],"src":"10260:57:44"},"returnParameters":{"id":5578,"nodeType":"ParameterList","parameters":[],"src":"10326:0:44"},"scope":5780,"src":"10239:88:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5580,"nodeType":"StructuredDocumentation","src":"10331:140:44","text":" @notice Updates the stable debt token implementation for the reserve.\n @param input The stableDebtToken update parameters"},"functionSelector":"7626cde3","id":5586,"implemented":false,"kind":"function","modifiers":[],"name":"updateStableDebtToken","nameLocation":"10483:21:44","nodeType":"FunctionDefinition","parameters":{"id":5584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5583,"mutability":"mutable","name":"input","nameLocation":"10563:5:44","nodeType":"VariableDeclaration","scope":5586,"src":"10510:58:44","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":5582,"nodeType":"UserDefinedTypeName","pathNode":{"id":5581,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":23874,"src":"10510:43:44"},"referencedDeclaration":23874,"src":"10510:43:44","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"10504:68:44"},"returnParameters":{"id":5585,"nodeType":"ParameterList","parameters":[],"src":"10581:0:44"},"scope":5780,"src":"10474:108:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5587,"nodeType":"StructuredDocumentation","src":"10586:142:44","text":" @notice Updates the variable debt token implementation for the asset.\n @param input The variableDebtToken update parameters"},"functionSelector":"ad4e6432","id":5593,"implemented":false,"kind":"function","modifiers":[],"name":"updateVariableDebtToken","nameLocation":"10740:23:44","nodeType":"FunctionDefinition","parameters":{"id":5591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5590,"mutability":"mutable","name":"input","nameLocation":"10822:5:44","nodeType":"VariableDeclaration","scope":5593,"src":"10769:58:44","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":5589,"nodeType":"UserDefinedTypeName","pathNode":{"id":5588,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":23874,"src":"10769:43:44"},"referencedDeclaration":23874,"src":"10769:43:44","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"10763:68:44"},"returnParameters":{"id":5592,"nodeType":"ParameterList","parameters":[],"src":"10840:0:44"},"scope":5780,"src":"10731:110:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5594,"nodeType":"StructuredDocumentation","src":"10845:279:44","text":" @notice Configures borrowing on a reserve.\n @dev Can only be disabled (set to false) if stable borrowing is disabled\n @param asset The address of the underlying asset of the reserve\n @param enabled True if borrowing needs to be enabled, false otherwise"},"functionSelector":"682cf264","id":5601,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveBorrowing","nameLocation":"11136:19:44","nodeType":"FunctionDefinition","parameters":{"id":5599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5596,"mutability":"mutable","name":"asset","nameLocation":"11164:5:44","nodeType":"VariableDeclaration","scope":5601,"src":"11156:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5595,"name":"address","nodeType":"ElementaryTypeName","src":"11156:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5598,"mutability":"mutable","name":"enabled","nameLocation":"11176:7:44","nodeType":"VariableDeclaration","scope":5601,"src":"11171:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5597,"name":"bool","nodeType":"ElementaryTypeName","src":"11171:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11155:29:44"},"returnParameters":{"id":5600,"nodeType":"ParameterList","parameters":[],"src":"11193:0:44"},"scope":5780,"src":"11127:67:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5602,"nodeType":"StructuredDocumentation","src":"11198:630:44","text":" @notice Configures the reserve collateralization parameters.\n @dev All the values are expressed in bps. A value of 10000, results in 100.00%\n @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\n @param asset The address of the underlying asset of the reserve\n @param ltv The loan to value of the asset when used as collateral\n @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\n @param liquidationBonus The bonus liquidators receive to liquidate this asset"},"functionSelector":"7c4e560b","id":5613,"implemented":false,"kind":"function","modifiers":[],"name":"configureReserveAsCollateral","nameLocation":"11840:28:44","nodeType":"FunctionDefinition","parameters":{"id":5611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5604,"mutability":"mutable","name":"asset","nameLocation":"11882:5:44","nodeType":"VariableDeclaration","scope":5613,"src":"11874:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5603,"name":"address","nodeType":"ElementaryTypeName","src":"11874:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5606,"mutability":"mutable","name":"ltv","nameLocation":"11901:3:44","nodeType":"VariableDeclaration","scope":5613,"src":"11893:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5605,"name":"uint256","nodeType":"ElementaryTypeName","src":"11893:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5608,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"11918:20:44","nodeType":"VariableDeclaration","scope":5613,"src":"11910:28:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5607,"name":"uint256","nodeType":"ElementaryTypeName","src":"11910:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5610,"mutability":"mutable","name":"liquidationBonus","nameLocation":"11952:16:44","nodeType":"VariableDeclaration","scope":5613,"src":"11944:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5609,"name":"uint256","nodeType":"ElementaryTypeName","src":"11944:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11868:104:44"},"returnParameters":{"id":5612,"nodeType":"ParameterList","parameters":[],"src":"11981:0:44"},"scope":5780,"src":"11831:151:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5614,"nodeType":"StructuredDocumentation","src":"11986:300:44","text":" @notice Enable or disable stable rate borrowing on a reserve.\n @dev Can only be enabled (set to true) if borrowing is enabled\n @param asset The address of the underlying asset of the reserve\n @param enabled True if stable rate borrowing needs to be enabled, false otherwise"},"functionSelector":"8a751a60","id":5621,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveStableRateBorrowing","nameLocation":"12298:29:44","nodeType":"FunctionDefinition","parameters":{"id":5619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5616,"mutability":"mutable","name":"asset","nameLocation":"12336:5:44","nodeType":"VariableDeclaration","scope":5621,"src":"12328:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5615,"name":"address","nodeType":"ElementaryTypeName","src":"12328:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5618,"mutability":"mutable","name":"enabled","nameLocation":"12348:7:44","nodeType":"VariableDeclaration","scope":5621,"src":"12343:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5617,"name":"bool","nodeType":"ElementaryTypeName","src":"12343:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12327:29:44"},"returnParameters":{"id":5620,"nodeType":"ParameterList","parameters":[],"src":"12365:0:44"},"scope":5780,"src":"12289:77:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5622,"nodeType":"StructuredDocumentation","src":"12370:208:44","text":" @notice Enable or disable flashloans on a reserve\n @param asset The address of the underlying asset of the reserve\n @param enabled True if flashloans need to be enabled, false otherwise"},"functionSelector":"f213ef0e","id":5629,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveFlashLoaning","nameLocation":"12590:22:44","nodeType":"FunctionDefinition","parameters":{"id":5627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5624,"mutability":"mutable","name":"asset","nameLocation":"12621:5:44","nodeType":"VariableDeclaration","scope":5629,"src":"12613:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5623,"name":"address","nodeType":"ElementaryTypeName","src":"12613:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5626,"mutability":"mutable","name":"enabled","nameLocation":"12633:7:44","nodeType":"VariableDeclaration","scope":5629,"src":"12628:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5625,"name":"bool","nodeType":"ElementaryTypeName","src":"12628:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12612:29:44"},"returnParameters":{"id":5628,"nodeType":"ParameterList","parameters":[],"src":"12650:0:44"},"scope":5780,"src":"12581:70:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5630,"nodeType":"StructuredDocumentation","src":"12655:199:44","text":" @notice Activate or deactivate a reserve\n @param asset The address of the underlying asset of the reserve\n @param active True if the reserve needs to be active, false otherwise"},"functionSelector":"b736aaeb","id":5637,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveActive","nameLocation":"12866:16:44","nodeType":"FunctionDefinition","parameters":{"id":5635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5632,"mutability":"mutable","name":"asset","nameLocation":"12891:5:44","nodeType":"VariableDeclaration","scope":5637,"src":"12883:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5631,"name":"address","nodeType":"ElementaryTypeName","src":"12883:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5634,"mutability":"mutable","name":"active","nameLocation":"12903:6:44","nodeType":"VariableDeclaration","scope":5637,"src":"12898:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5633,"name":"bool","nodeType":"ElementaryTypeName","src":"12898:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12882:28:44"},"returnParameters":{"id":5636,"nodeType":"ParameterList","parameters":[],"src":"12919:0:44"},"scope":5780,"src":"12857:63:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5638,"nodeType":"StructuredDocumentation","src":"12924:338:44","text":" @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\n or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\n @param asset The address of the underlying asset of the reserve\n @param freeze True if the reserve needs to be frozen, false otherwise"},"functionSelector":"96e957c4","id":5645,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveFreeze","nameLocation":"13274:16:44","nodeType":"FunctionDefinition","parameters":{"id":5643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5640,"mutability":"mutable","name":"asset","nameLocation":"13299:5:44","nodeType":"VariableDeclaration","scope":5645,"src":"13291:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5639,"name":"address","nodeType":"ElementaryTypeName","src":"13291:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5642,"mutability":"mutable","name":"freeze","nameLocation":"13311:6:44","nodeType":"VariableDeclaration","scope":5645,"src":"13306:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5641,"name":"bool","nodeType":"ElementaryTypeName","src":"13306:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13290:28:44"},"returnParameters":{"id":5644,"nodeType":"ParameterList","parameters":[],"src":"13327:0:44"},"scope":5780,"src":"13265:63:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5646,"nodeType":"StructuredDocumentation","src":"13332:596:44","text":" @notice Sets the borrowable in isolation flag for the reserve.\n @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\n borrowed amount will be accumulated in the isolated collateral's total debt exposure\n @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\n consistency in the debt ceiling calculations\n @param asset The address of the underlying asset of the reserve\n @param borrowable True if the asset should be borrowable in isolation, false otherwise"},"functionSelector":"38ae0cc3","id":5653,"implemented":false,"kind":"function","modifiers":[],"name":"setBorrowableInIsolation","nameLocation":"13940:24:44","nodeType":"FunctionDefinition","parameters":{"id":5651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5648,"mutability":"mutable","name":"asset","nameLocation":"13973:5:44","nodeType":"VariableDeclaration","scope":5653,"src":"13965:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5647,"name":"address","nodeType":"ElementaryTypeName","src":"13965:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5650,"mutability":"mutable","name":"borrowable","nameLocation":"13985:10:44","nodeType":"VariableDeclaration","scope":5653,"src":"13980:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5649,"name":"bool","nodeType":"ElementaryTypeName","src":"13980:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13964:32:44"},"returnParameters":{"id":5652,"nodeType":"ParameterList","parameters":[],"src":"14005:0:44"},"scope":5780,"src":"13931:75:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5654,"nodeType":"StructuredDocumentation","src":"14010:303:44","text":" @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\n swap interest rate, liquidate, atoken transfers).\n @param asset The address of the underlying asset of the reserve\n @param paused True if pausing the reserve, false if unpausing"},"functionSelector":"48d9fba9","id":5661,"implemented":false,"kind":"function","modifiers":[],"name":"setReservePause","nameLocation":"14325:15:44","nodeType":"FunctionDefinition","parameters":{"id":5659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5656,"mutability":"mutable","name":"asset","nameLocation":"14349:5:44","nodeType":"VariableDeclaration","scope":5661,"src":"14341:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5655,"name":"address","nodeType":"ElementaryTypeName","src":"14341:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5658,"mutability":"mutable","name":"paused","nameLocation":"14361:6:44","nodeType":"VariableDeclaration","scope":5661,"src":"14356:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5657,"name":"bool","nodeType":"ElementaryTypeName","src":"14356:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14340:28:44"},"returnParameters":{"id":5660,"nodeType":"ParameterList","parameters":[],"src":"14377:0:44"},"scope":5780,"src":"14316:62:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5662,"nodeType":"StructuredDocumentation","src":"14382:199:44","text":" @notice Updates the reserve factor of a reserve.\n @param asset The address of the underlying asset of the reserve\n @param newReserveFactor The new reserve factor of the reserve"},"functionSelector":"4b4e6753","id":5669,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveFactor","nameLocation":"14593:16:44","nodeType":"FunctionDefinition","parameters":{"id":5667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5664,"mutability":"mutable","name":"asset","nameLocation":"14618:5:44","nodeType":"VariableDeclaration","scope":5669,"src":"14610:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5663,"name":"address","nodeType":"ElementaryTypeName","src":"14610:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5666,"mutability":"mutable","name":"newReserveFactor","nameLocation":"14633:16:44","nodeType":"VariableDeclaration","scope":5669,"src":"14625:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5665,"name":"uint256","nodeType":"ElementaryTypeName","src":"14625:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14609:41:44"},"returnParameters":{"id":5668,"nodeType":"ParameterList","parameters":[],"src":"14659:0:44"},"scope":5780,"src":"14584:76:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5670,"nodeType":"StructuredDocumentation","src":"14664:222:44","text":" @notice Sets the interest rate strategy of a reserve.\n @param asset The address of the underlying asset of the reserve\n @param newRateStrategyAddress The address of the new interest strategy contract"},"functionSelector":"1d2118f9","id":5677,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveInterestRateStrategyAddress","nameLocation":"14898:37:44","nodeType":"FunctionDefinition","parameters":{"id":5675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5672,"mutability":"mutable","name":"asset","nameLocation":"14949:5:44","nodeType":"VariableDeclaration","scope":5677,"src":"14941:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5671,"name":"address","nodeType":"ElementaryTypeName","src":"14941:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5674,"mutability":"mutable","name":"newRateStrategyAddress","nameLocation":"14968:22:44","nodeType":"VariableDeclaration","scope":5677,"src":"14960:30:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5673,"name":"address","nodeType":"ElementaryTypeName","src":"14960:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14935:59:44"},"returnParameters":{"id":5676,"nodeType":"ParameterList","parameters":[],"src":"15003:0:44"},"scope":5780,"src":"14889:115:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5678,"nodeType":"StructuredDocumentation","src":"15008:210:44","text":" @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\n are suspended.\n @param paused True if protocol needs to be paused, false otherwise"},"functionSelector":"7641f3d9","id":5683,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolPause","nameLocation":"15230:12:44","nodeType":"FunctionDefinition","parameters":{"id":5681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5680,"mutability":"mutable","name":"paused","nameLocation":"15248:6:44","nodeType":"VariableDeclaration","scope":5683,"src":"15243:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5679,"name":"bool","nodeType":"ElementaryTypeName","src":"15243:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15242:13:44"},"returnParameters":{"id":5682,"nodeType":"ParameterList","parameters":[],"src":"15264:0:44"},"scope":5780,"src":"15221:44:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5684,"nodeType":"StructuredDocumentation","src":"15269:187:44","text":" @notice Updates the borrow cap of a reserve.\n @param asset The address of the underlying asset of the reserve\n @param newBorrowCap The new borrow cap of the reserve"},"functionSelector":"d14a0983","id":5691,"implemented":false,"kind":"function","modifiers":[],"name":"setBorrowCap","nameLocation":"15468:12:44","nodeType":"FunctionDefinition","parameters":{"id":5689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5686,"mutability":"mutable","name":"asset","nameLocation":"15489:5:44","nodeType":"VariableDeclaration","scope":5691,"src":"15481:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5685,"name":"address","nodeType":"ElementaryTypeName","src":"15481:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5688,"mutability":"mutable","name":"newBorrowCap","nameLocation":"15504:12:44","nodeType":"VariableDeclaration","scope":5691,"src":"15496:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5687,"name":"uint256","nodeType":"ElementaryTypeName","src":"15496:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15480:37:44"},"returnParameters":{"id":5690,"nodeType":"ParameterList","parameters":[],"src":"15526:0:44"},"scope":5780,"src":"15459:68:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5692,"nodeType":"StructuredDocumentation","src":"15531:187:44","text":" @notice Updates the supply cap of a reserve.\n @param asset The address of the underlying asset of the reserve\n @param newSupplyCap The new supply cap of the reserve"},"functionSelector":"571f03e5","id":5699,"implemented":false,"kind":"function","modifiers":[],"name":"setSupplyCap","nameLocation":"15730:12:44","nodeType":"FunctionDefinition","parameters":{"id":5697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5694,"mutability":"mutable","name":"asset","nameLocation":"15751:5:44","nodeType":"VariableDeclaration","scope":5699,"src":"15743:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5693,"name":"address","nodeType":"ElementaryTypeName","src":"15743:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5696,"mutability":"mutable","name":"newSupplyCap","nameLocation":"15766:12:44","nodeType":"VariableDeclaration","scope":5699,"src":"15758:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5695,"name":"uint256","nodeType":"ElementaryTypeName","src":"15758:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15742:37:44"},"returnParameters":{"id":5698,"nodeType":"ParameterList","parameters":[],"src":"15788:0:44"},"scope":5780,"src":"15721:68:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5700,"nodeType":"StructuredDocumentation","src":"15793:225:44","text":" @notice Updates the liquidation protocol fee of reserve.\n @param asset The address of the underlying asset of the reserve\n @param newFee The new liquidation protocol fee of the reserve, expressed in bps"},"functionSelector":"26d2cec2","id":5707,"implemented":false,"kind":"function","modifiers":[],"name":"setLiquidationProtocolFee","nameLocation":"16030:25:44","nodeType":"FunctionDefinition","parameters":{"id":5705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5702,"mutability":"mutable","name":"asset","nameLocation":"16064:5:44","nodeType":"VariableDeclaration","scope":5707,"src":"16056:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5701,"name":"address","nodeType":"ElementaryTypeName","src":"16056:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5704,"mutability":"mutable","name":"newFee","nameLocation":"16079:6:44","nodeType":"VariableDeclaration","scope":5707,"src":"16071:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5703,"name":"uint256","nodeType":"ElementaryTypeName","src":"16071:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16055:31:44"},"returnParameters":{"id":5706,"nodeType":"ParameterList","parameters":[],"src":"16095:0:44"},"scope":5780,"src":"16021:75:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5708,"nodeType":"StructuredDocumentation","src":"16100:205:44","text":" @notice Updates the unbacked mint cap of reserve.\n @param asset The address of the underlying asset of the reserve\n @param newUnbackedMintCap The new unbacked mint cap of the reserve"},"functionSelector":"145f5892","id":5715,"implemented":false,"kind":"function","modifiers":[],"name":"setUnbackedMintCap","nameLocation":"16317:18:44","nodeType":"FunctionDefinition","parameters":{"id":5713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5710,"mutability":"mutable","name":"asset","nameLocation":"16344:5:44","nodeType":"VariableDeclaration","scope":5715,"src":"16336:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5709,"name":"address","nodeType":"ElementaryTypeName","src":"16336:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5712,"mutability":"mutable","name":"newUnbackedMintCap","nameLocation":"16359:18:44","nodeType":"VariableDeclaration","scope":5715,"src":"16351:26:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5711,"name":"uint256","nodeType":"ElementaryTypeName","src":"16351:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16335:43:44"},"returnParameters":{"id":5714,"nodeType":"ParameterList","parameters":[],"src":"16387:0:44"},"scope":5780,"src":"16308:80:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5716,"nodeType":"StructuredDocumentation","src":"16392:203:44","text":" @notice Assign an efficiency mode (eMode) category to asset.\n @param asset The address of the underlying asset of the reserve\n @param newCategoryId The new category id of the asset"},"functionSelector":"d4fe3f99","id":5723,"implemented":false,"kind":"function","modifiers":[],"name":"setAssetEModeCategory","nameLocation":"16607:21:44","nodeType":"FunctionDefinition","parameters":{"id":5721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5718,"mutability":"mutable","name":"asset","nameLocation":"16637:5:44","nodeType":"VariableDeclaration","scope":5723,"src":"16629:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5717,"name":"address","nodeType":"ElementaryTypeName","src":"16629:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5720,"mutability":"mutable","name":"newCategoryId","nameLocation":"16650:13:44","nodeType":"VariableDeclaration","scope":5723,"src":"16644:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5719,"name":"uint8","nodeType":"ElementaryTypeName","src":"16644:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16628:36:44"},"returnParameters":{"id":5722,"nodeType":"ParameterList","parameters":[],"src":"16673:0:44"},"scope":5780,"src":"16598:76:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5724,"nodeType":"StructuredDocumentation","src":"16678:797:44","text":" @notice Adds a new efficiency mode (eMode) category.\n @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\n overcollateralization of the users using this category.\n @dev The new ltv and liquidation threshold must be greater than the base\n ltvs and liquidation thresholds of all assets within the eMode category\n @param categoryId The id of the category to be configured\n @param ltv The ltv associated with the category\n @param liquidationThreshold The liquidation threshold associated with the category\n @param liquidationBonus The liquidation bonus associated with the category\n @param oracle The oracle associated with the category\n @param label A label identifying the category"},"functionSelector":"c19d61e4","id":5739,"implemented":false,"kind":"function","modifiers":[],"name":"setEModeCategory","nameLocation":"17487:16:44","nodeType":"FunctionDefinition","parameters":{"id":5737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5726,"mutability":"mutable","name":"categoryId","nameLocation":"17515:10:44","nodeType":"VariableDeclaration","scope":5739,"src":"17509:16:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5725,"name":"uint8","nodeType":"ElementaryTypeName","src":"17509:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":5728,"mutability":"mutable","name":"ltv","nameLocation":"17538:3:44","nodeType":"VariableDeclaration","scope":5739,"src":"17531:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5727,"name":"uint16","nodeType":"ElementaryTypeName","src":"17531:6:44","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":5730,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"17554:20:44","nodeType":"VariableDeclaration","scope":5739,"src":"17547:27:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5729,"name":"uint16","nodeType":"ElementaryTypeName","src":"17547:6:44","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":5732,"mutability":"mutable","name":"liquidationBonus","nameLocation":"17587:16:44","nodeType":"VariableDeclaration","scope":5739,"src":"17580:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5731,"name":"uint16","nodeType":"ElementaryTypeName","src":"17580:6:44","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":5734,"mutability":"mutable","name":"oracle","nameLocation":"17617:6:44","nodeType":"VariableDeclaration","scope":5739,"src":"17609:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5733,"name":"address","nodeType":"ElementaryTypeName","src":"17609:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5736,"mutability":"mutable","name":"label","nameLocation":"17645:5:44","nodeType":"VariableDeclaration","scope":5739,"src":"17629:21:44","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":5735,"name":"string","nodeType":"ElementaryTypeName","src":"17629:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"17503:151:44"},"returnParameters":{"id":5738,"nodeType":"ParameterList","parameters":[],"src":"17663:0:44"},"scope":5780,"src":"17478:186:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5740,"nodeType":"StructuredDocumentation","src":"17668:101:44","text":" @notice Drops a reserve entirely.\n @param asset The address of the reserve to drop"},"functionSelector":"63c9b860","id":5745,"implemented":false,"kind":"function","modifiers":[],"name":"dropReserve","nameLocation":"17781:11:44","nodeType":"FunctionDefinition","parameters":{"id":5743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5742,"mutability":"mutable","name":"asset","nameLocation":"17801:5:44","nodeType":"VariableDeclaration","scope":5745,"src":"17793:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5741,"name":"address","nodeType":"ElementaryTypeName","src":"17793:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17792:15:44"},"returnParameters":{"id":5744,"nodeType":"ParameterList","parameters":[],"src":"17816:0:44"},"scope":5780,"src":"17772:45:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5746,"nodeType":"StructuredDocumentation","src":"17821:182:44","text":" @notice Updates the bridge fee collected by the protocol reserves.\n @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps"},"functionSelector":"3036b439","id":5751,"implemented":false,"kind":"function","modifiers":[],"name":"updateBridgeProtocolFee","nameLocation":"18015:23:44","nodeType":"FunctionDefinition","parameters":{"id":5749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5748,"mutability":"mutable","name":"newBridgeProtocolFee","nameLocation":"18047:20:44","nodeType":"VariableDeclaration","scope":5751,"src":"18039:28:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5747,"name":"uint256","nodeType":"ElementaryTypeName","src":"18039:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18038:30:44"},"returnParameters":{"id":5750,"nodeType":"ParameterList","parameters":[],"src":"18077:0:44"},"scope":5780,"src":"18006:72:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5752,"nodeType":"StructuredDocumentation","src":"18082:379:44","text":" @notice Updates the total flash loan premium.\n Total flash loan premium consists of two parts:\n - A part is sent to aToken holders as extra balance\n - A part is collected by the protocol reserves\n @dev Expressed in bps\n @dev The premium is calculated on the total amount borrowed\n @param newFlashloanPremiumTotal The total flashloan premium"},"functionSelector":"8a493676","id":5757,"implemented":false,"kind":"function","modifiers":[],"name":"updateFlashloanPremiumTotal","nameLocation":"18473:27:44","nodeType":"FunctionDefinition","parameters":{"id":5755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5754,"mutability":"mutable","name":"newFlashloanPremiumTotal","nameLocation":"18509:24:44","nodeType":"VariableDeclaration","scope":5757,"src":"18501:32:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5753,"name":"uint128","nodeType":"ElementaryTypeName","src":"18501:7:44","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"18500:34:44"},"returnParameters":{"id":5756,"nodeType":"ParameterList","parameters":[],"src":"18543:0:44"},"scope":5780,"src":"18464:80:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5758,"nodeType":"StructuredDocumentation","src":"18548:296:44","text":" @notice Updates the flash loan premium collected by protocol reserves\n @dev Expressed in bps\n @dev The premium to protocol is calculated on the total flashloan premium\n @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury"},"functionSelector":"1df970bd","id":5763,"implemented":false,"kind":"function","modifiers":[],"name":"updateFlashloanPremiumToProtocol","nameLocation":"18856:32:44","nodeType":"FunctionDefinition","parameters":{"id":5761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5760,"mutability":"mutable","name":"newFlashloanPremiumToProtocol","nameLocation":"18897:29:44","nodeType":"VariableDeclaration","scope":5763,"src":"18889:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5759,"name":"uint128","nodeType":"ElementaryTypeName","src":"18889:7:44","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"18888:39:44"},"returnParameters":{"id":5762,"nodeType":"ParameterList","parameters":[],"src":"18936:0:44"},"scope":5780,"src":"18847:90:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5764,"nodeType":"StructuredDocumentation","src":"18941:106:44","text":" @notice Sets the debt ceiling for an asset.\n @param newDebtCeiling The new debt ceiling"},"functionSelector":"aeb4fcc1","id":5771,"implemented":false,"kind":"function","modifiers":[],"name":"setDebtCeiling","nameLocation":"19059:14:44","nodeType":"FunctionDefinition","parameters":{"id":5769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5766,"mutability":"mutable","name":"asset","nameLocation":"19082:5:44","nodeType":"VariableDeclaration","scope":5771,"src":"19074:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5765,"name":"address","nodeType":"ElementaryTypeName","src":"19074:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5768,"mutability":"mutable","name":"newDebtCeiling","nameLocation":"19097:14:44","nodeType":"VariableDeclaration","scope":5771,"src":"19089:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5767,"name":"uint256","nodeType":"ElementaryTypeName","src":"19089:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19073:39:44"},"returnParameters":{"id":5770,"nodeType":"ParameterList","parameters":[],"src":"19121:0:44"},"scope":5780,"src":"19050:72:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5772,"nodeType":"StructuredDocumentation","src":"19126:107:44","text":" @notice Sets siloed borrowing for an asset\n @param siloed The new siloed borrowing state"},"functionSelector":"a7fa83b7","id":5779,"implemented":false,"kind":"function","modifiers":[],"name":"setSiloedBorrowing","nameLocation":"19245:18:44","nodeType":"FunctionDefinition","parameters":{"id":5777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5774,"mutability":"mutable","name":"asset","nameLocation":"19272:5:44","nodeType":"VariableDeclaration","scope":5779,"src":"19264:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5773,"name":"address","nodeType":"ElementaryTypeName","src":"19264:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5776,"mutability":"mutable","name":"siloed","nameLocation":"19284:6:44","nodeType":"VariableDeclaration","scope":5779,"src":"19279:11:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5775,"name":"bool","nodeType":"ElementaryTypeName","src":"19279:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19263:28:44"},"returnParameters":{"id":5778,"nodeType":"ParameterList","parameters":[],"src":"19300:0:44"},"scope":5780,"src":"19236:65:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5781,"src":"274:19029:44","usedErrors":[]}],"src":"37:19267:44"},"id":44},"contracts/interfaces/IPoolDataProvider.sol":{"ast":{"absolutePath":"contracts/interfaces/IPoolDataProvider.sol","exportedSymbols":{"IPoolAddressesProvider":[5282],"IPoolDataProvider":[6004]},"id":6005,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5782,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:45"},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":5784,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6005,"sourceUnit":5283,"src":"62:68:45","symbolAliases":[{"foreign":{"id":5783,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolDataProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":5785,"nodeType":"StructuredDocumentation","src":"132:112:45","text":" @title IPoolDataProvider\n @author Aave\n @notice Defines the basic interface of a PoolDataProvider"},"fullyImplemented":false,"id":6004,"linearizedBaseContracts":[6004],"name":"IPoolDataProvider","nameLocation":"255:17:45","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IPoolDataProvider.TokenData","id":5790,"members":[{"constant":false,"id":5787,"mutability":"mutable","name":"symbol","nameLocation":"307:6:45","nodeType":"VariableDeclaration","scope":5790,"src":"300:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":5786,"name":"string","nodeType":"ElementaryTypeName","src":"300:6:45","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5789,"mutability":"mutable","name":"tokenAddress","nameLocation":"327:12:45","nodeType":"VariableDeclaration","scope":5790,"src":"319:20:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5788,"name":"address","nodeType":"ElementaryTypeName","src":"319:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"TokenData","nameLocation":"284:9:45","nodeType":"StructDefinition","scope":6004,"src":"277:67:45","visibility":"public"},{"documentation":{"id":5791,"nodeType":"StructuredDocumentation","src":"348:146:45","text":" @notice Returns the address for the PoolAddressesProvider contract.\n @return The address for the PoolAddressesProvider contract"},"functionSelector":"0542975c","id":5797,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"506:18:45","nodeType":"FunctionDefinition","parameters":{"id":5792,"nodeType":"ParameterList","parameters":[],"src":"524:2:45"},"returnParameters":{"id":5796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5797,"src":"550:22:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":5794,"nodeType":"UserDefinedTypeName","pathNode":{"id":5793,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"550:22:45"},"referencedDeclaration":5282,"src":"550:22:45","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"549:24:45"},"scope":6004,"src":"497:77:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5798,"nodeType":"StructuredDocumentation","src":"578:245:45","text":" @notice Returns the list of the existing reserves in the pool.\n @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\n @return The list of reserves, pairs of symbols and addresses"},"functionSelector":"b316ff89","id":5805,"implemented":false,"kind":"function","modifiers":[],"name":"getAllReservesTokens","nameLocation":"835:20:45","nodeType":"FunctionDefinition","parameters":{"id":5799,"nodeType":"ParameterList","parameters":[],"src":"855:2:45"},"returnParameters":{"id":5804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5803,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5805,"src":"881:18:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":5801,"nodeType":"UserDefinedTypeName","pathNode":{"id":5800,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5790,"src":"881:9:45"},"referencedDeclaration":5790,"src":"881:9:45","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":5802,"nodeType":"ArrayTypeName","src":"881:11:45","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"src":"880:20:45"},"scope":6004,"src":"826:75:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5806,"nodeType":"StructuredDocumentation","src":"905:141:45","text":" @notice Returns the list of the existing ATokens in the pool.\n @return The list of ATokens, pairs of symbols and addresses"},"functionSelector":"f561ae41","id":5813,"implemented":false,"kind":"function","modifiers":[],"name":"getAllATokens","nameLocation":"1058:13:45","nodeType":"FunctionDefinition","parameters":{"id":5807,"nodeType":"ParameterList","parameters":[],"src":"1071:2:45"},"returnParameters":{"id":5812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5813,"src":"1097:18:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":5809,"nodeType":"UserDefinedTypeName","pathNode":{"id":5808,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5790,"src":"1097:9:45"},"referencedDeclaration":5790,"src":"1097:9:45","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":5810,"nodeType":"ArrayTypeName","src":"1097:11:45","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"src":"1096:20:45"},"scope":6004,"src":"1049:68:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5814,"nodeType":"StructuredDocumentation","src":"1121:907:45","text":" @notice Returns the configuration data of the reserve\n @dev Not returning borrow and supply caps for compatibility, nor pause flag\n @param asset The address of the underlying asset of the reserve\n @return decimals The number of decimals of the reserve\n @return ltv The ltv of the reserve\n @return liquidationThreshold The liquidationThreshold of the reserve\n @return liquidationBonus The liquidationBonus of the reserve\n @return reserveFactor The reserveFactor of the reserve\n @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\n @return borrowingEnabled True if borrowing is enabled, false otherwise\n @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\n @return isActive True if it is active, false otherwise\n @return isFrozen True if it is frozen, false otherwise"},"functionSelector":"3e150141","id":5839,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveConfigurationData","nameLocation":"2040:27:45","nodeType":"FunctionDefinition","parameters":{"id":5817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5816,"mutability":"mutable","name":"asset","nameLocation":"2081:5:45","nodeType":"VariableDeclaration","scope":5839,"src":"2073:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5815,"name":"address","nodeType":"ElementaryTypeName","src":"2073:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2067:23:45"},"returnParameters":{"id":5838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5819,"mutability":"mutable","name":"decimals","nameLocation":"2141:8:45","nodeType":"VariableDeclaration","scope":5839,"src":"2133:16:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5818,"name":"uint256","nodeType":"ElementaryTypeName","src":"2133:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5821,"mutability":"mutable","name":"ltv","nameLocation":"2165:3:45","nodeType":"VariableDeclaration","scope":5839,"src":"2157:11:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5820,"name":"uint256","nodeType":"ElementaryTypeName","src":"2157:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5823,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"2184:20:45","nodeType":"VariableDeclaration","scope":5839,"src":"2176:28:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5822,"name":"uint256","nodeType":"ElementaryTypeName","src":"2176:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5825,"mutability":"mutable","name":"liquidationBonus","nameLocation":"2220:16:45","nodeType":"VariableDeclaration","scope":5839,"src":"2212:24:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5824,"name":"uint256","nodeType":"ElementaryTypeName","src":"2212:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5827,"mutability":"mutable","name":"reserveFactor","nameLocation":"2252:13:45","nodeType":"VariableDeclaration","scope":5839,"src":"2244:21:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5826,"name":"uint256","nodeType":"ElementaryTypeName","src":"2244:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5829,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"2278:24:45","nodeType":"VariableDeclaration","scope":5839,"src":"2273:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5828,"name":"bool","nodeType":"ElementaryTypeName","src":"2273:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5831,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"2315:16:45","nodeType":"VariableDeclaration","scope":5839,"src":"2310:21:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5830,"name":"bool","nodeType":"ElementaryTypeName","src":"2310:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5833,"mutability":"mutable","name":"stableBorrowRateEnabled","nameLocation":"2344:23:45","nodeType":"VariableDeclaration","scope":5839,"src":"2339:28:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5832,"name":"bool","nodeType":"ElementaryTypeName","src":"2339:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5835,"mutability":"mutable","name":"isActive","nameLocation":"2380:8:45","nodeType":"VariableDeclaration","scope":5839,"src":"2375:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5834,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5837,"mutability":"mutable","name":"isFrozen","nameLocation":"2401:8:45","nodeType":"VariableDeclaration","scope":5839,"src":"2396:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5836,"name":"bool","nodeType":"ElementaryTypeName","src":"2396:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2125:290:45"},"scope":6004,"src":"2031:385:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5840,"nodeType":"StructuredDocumentation","src":"2420:184:45","text":" @notice Returns the efficiency mode category of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The eMode id of the reserve"},"functionSelector":"163a0f20","id":5847,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveEModeCategory","nameLocation":"2616:23:45","nodeType":"FunctionDefinition","parameters":{"id":5843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5842,"mutability":"mutable","name":"asset","nameLocation":"2648:5:45","nodeType":"VariableDeclaration","scope":5847,"src":"2640:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5841,"name":"address","nodeType":"ElementaryTypeName","src":"2640:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2639:15:45"},"returnParameters":{"id":5846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5845,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5847,"src":"2678:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5844,"name":"uint256","nodeType":"ElementaryTypeName","src":"2678:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2677:9:45"},"scope":6004,"src":"2607:80:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5848,"nodeType":"StructuredDocumentation","src":"2691:240:45","text":" @notice Returns the caps parameters of the reserve\n @param asset The address of the underlying asset of the reserve\n @return borrowCap The borrow cap of the reserve\n @return supplyCap The supply cap of the reserve"},"functionSelector":"46fbe558","id":5857,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveCaps","nameLocation":"2943:14:45","nodeType":"FunctionDefinition","parameters":{"id":5851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5850,"mutability":"mutable","name":"asset","nameLocation":"2971:5:45","nodeType":"VariableDeclaration","scope":5857,"src":"2963:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5849,"name":"address","nodeType":"ElementaryTypeName","src":"2963:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2957:23:45"},"returnParameters":{"id":5856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5853,"mutability":"mutable","name":"borrowCap","nameLocation":"3012:9:45","nodeType":"VariableDeclaration","scope":5857,"src":"3004:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5852,"name":"uint256","nodeType":"ElementaryTypeName","src":"3004:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5855,"mutability":"mutable","name":"supplyCap","nameLocation":"3031:9:45","nodeType":"VariableDeclaration","scope":5857,"src":"3023:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5854,"name":"uint256","nodeType":"ElementaryTypeName","src":"3023:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3003:38:45"},"scope":6004,"src":"2934:108:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5858,"nodeType":"StructuredDocumentation","src":"3046:187:45","text":" @notice Returns if the pool is paused\n @param asset The address of the underlying asset of the reserve\n @return isPaused True if the pool is paused, false otherwise"},"functionSelector":"b55d9904","id":5865,"implemented":false,"kind":"function","modifiers":[],"name":"getPaused","nameLocation":"3245:9:45","nodeType":"FunctionDefinition","parameters":{"id":5861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5860,"mutability":"mutable","name":"asset","nameLocation":"3263:5:45","nodeType":"VariableDeclaration","scope":5865,"src":"3255:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5859,"name":"address","nodeType":"ElementaryTypeName","src":"3255:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3254:15:45"},"returnParameters":{"id":5864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5863,"mutability":"mutable","name":"isPaused","nameLocation":"3298:8:45","nodeType":"VariableDeclaration","scope":5865,"src":"3293:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5862,"name":"bool","nodeType":"ElementaryTypeName","src":"3293:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3292:15:45"},"scope":6004,"src":"3236:72:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5866,"nodeType":"StructuredDocumentation","src":"3312:180:45","text":" @notice Returns the siloed borrowing flag\n @param asset The address of the underlying asset of the reserve\n @return True if the asset is siloed for borrowing"},"functionSelector":"fcf40a62","id":5873,"implemented":false,"kind":"function","modifiers":[],"name":"getSiloedBorrowing","nameLocation":"3504:18:45","nodeType":"FunctionDefinition","parameters":{"id":5869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5868,"mutability":"mutable","name":"asset","nameLocation":"3531:5:45","nodeType":"VariableDeclaration","scope":5873,"src":"3523:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5867,"name":"address","nodeType":"ElementaryTypeName","src":"3523:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3522:15:45"},"returnParameters":{"id":5872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5873,"src":"3561:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5870,"name":"bool","nodeType":"ElementaryTypeName","src":"3561:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3560:6:45"},"scope":6004,"src":"3495:72:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5874,"nodeType":"StructuredDocumentation","src":"3571:186:45","text":" @notice Returns the protocol fee on the liquidation bonus\n @param asset The address of the underlying asset of the reserve\n @return The protocol fee on liquidation"},"functionSelector":"3cb8a622","id":5881,"implemented":false,"kind":"function","modifiers":[],"name":"getLiquidationProtocolFee","nameLocation":"3769:25:45","nodeType":"FunctionDefinition","parameters":{"id":5877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5876,"mutability":"mutable","name":"asset","nameLocation":"3803:5:45","nodeType":"VariableDeclaration","scope":5881,"src":"3795:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5875,"name":"address","nodeType":"ElementaryTypeName","src":"3795:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3794:15:45"},"returnParameters":{"id":5880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5879,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5881,"src":"3833:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5878,"name":"uint256","nodeType":"ElementaryTypeName","src":"3833:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3832:9:45"},"scope":6004,"src":"3760:82:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5882,"nodeType":"StructuredDocumentation","src":"3846:186:45","text":" @notice Returns the unbacked mint cap of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The unbacked mint cap of the reserve"},"functionSelector":"7ba1ae36","id":5889,"implemented":false,"kind":"function","modifiers":[],"name":"getUnbackedMintCap","nameLocation":"4044:18:45","nodeType":"FunctionDefinition","parameters":{"id":5885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5884,"mutability":"mutable","name":"asset","nameLocation":"4071:5:45","nodeType":"VariableDeclaration","scope":5889,"src":"4063:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5883,"name":"address","nodeType":"ElementaryTypeName","src":"4063:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4062:15:45"},"returnParameters":{"id":5888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5887,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5889,"src":"4101:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5886,"name":"uint256","nodeType":"ElementaryTypeName","src":"4101:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4100:9:45"},"scope":6004,"src":"4035:75:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5890,"nodeType":"StructuredDocumentation","src":"4114:176:45","text":" @notice Returns the debt ceiling of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The debt ceiling of the reserve"},"functionSelector":"3c798109","id":5897,"implemented":false,"kind":"function","modifiers":[],"name":"getDebtCeiling","nameLocation":"4302:14:45","nodeType":"FunctionDefinition","parameters":{"id":5893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5892,"mutability":"mutable","name":"asset","nameLocation":"4325:5:45","nodeType":"VariableDeclaration","scope":5897,"src":"4317:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5891,"name":"address","nodeType":"ElementaryTypeName","src":"4317:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4316:15:45"},"returnParameters":{"id":5896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5895,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5897,"src":"4355:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5894,"name":"uint256","nodeType":"ElementaryTypeName","src":"4355:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4354:9:45"},"scope":6004,"src":"4293:71:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5898,"nodeType":"StructuredDocumentation","src":"4368:95:45","text":" @notice Returns the debt ceiling decimals\n @return The debt ceiling decimals"},"functionSelector":"69b169e1","id":5903,"implemented":false,"kind":"function","modifiers":[],"name":"getDebtCeilingDecimals","nameLocation":"4475:22:45","nodeType":"FunctionDefinition","parameters":{"id":5899,"nodeType":"ParameterList","parameters":[],"src":"4497:2:45"},"returnParameters":{"id":5902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5901,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5903,"src":"4523:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5900,"name":"uint256","nodeType":"ElementaryTypeName","src":"4523:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4522:9:45"},"scope":6004,"src":"4466:66:45","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":5904,"nodeType":"StructuredDocumentation","src":"4536:968:45","text":" @notice Returns the reserve data\n @param asset The address of the underlying asset of the reserve\n @return unbacked The amount of unbacked tokens\n @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\n @return totalAToken The total supply of the aToken\n @return totalStableDebt The total stable debt of the reserve\n @return totalVariableDebt The total variable debt of the reserve\n @return liquidityRate The liquidity rate of the reserve\n @return variableBorrowRate The variable borrow rate of the reserve\n @return stableBorrowRate The stable borrow rate of the reserve\n @return averageStableBorrowRate The average stable borrow rate of the reserve\n @return liquidityIndex The liquidity index of the reserve\n @return variableBorrowIndex The variable borrow index of the reserve\n @return lastUpdateTimestamp The timestamp of the last update of the reserve"},"functionSelector":"35ea6a75","id":5933,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveData","nameLocation":"5516:14:45","nodeType":"FunctionDefinition","parameters":{"id":5907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5906,"mutability":"mutable","name":"asset","nameLocation":"5544:5:45","nodeType":"VariableDeclaration","scope":5933,"src":"5536:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5905,"name":"address","nodeType":"ElementaryTypeName","src":"5536:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5530:23:45"},"returnParameters":{"id":5932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5909,"mutability":"mutable","name":"unbacked","nameLocation":"5604:8:45","nodeType":"VariableDeclaration","scope":5933,"src":"5596:16:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5908,"name":"uint256","nodeType":"ElementaryTypeName","src":"5596:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5911,"mutability":"mutable","name":"accruedToTreasuryScaled","nameLocation":"5628:23:45","nodeType":"VariableDeclaration","scope":5933,"src":"5620:31:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5910,"name":"uint256","nodeType":"ElementaryTypeName","src":"5620:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5913,"mutability":"mutable","name":"totalAToken","nameLocation":"5667:11:45","nodeType":"VariableDeclaration","scope":5933,"src":"5659:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5912,"name":"uint256","nodeType":"ElementaryTypeName","src":"5659:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5915,"mutability":"mutable","name":"totalStableDebt","nameLocation":"5694:15:45","nodeType":"VariableDeclaration","scope":5933,"src":"5686:23:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5914,"name":"uint256","nodeType":"ElementaryTypeName","src":"5686:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5917,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"5725:17:45","nodeType":"VariableDeclaration","scope":5933,"src":"5717:25:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5916,"name":"uint256","nodeType":"ElementaryTypeName","src":"5717:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5919,"mutability":"mutable","name":"liquidityRate","nameLocation":"5758:13:45","nodeType":"VariableDeclaration","scope":5933,"src":"5750:21:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5918,"name":"uint256","nodeType":"ElementaryTypeName","src":"5750:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5921,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"5787:18:45","nodeType":"VariableDeclaration","scope":5933,"src":"5779:26:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5920,"name":"uint256","nodeType":"ElementaryTypeName","src":"5779:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5923,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"5821:16:45","nodeType":"VariableDeclaration","scope":5933,"src":"5813:24:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5922,"name":"uint256","nodeType":"ElementaryTypeName","src":"5813:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5925,"mutability":"mutable","name":"averageStableBorrowRate","nameLocation":"5853:23:45","nodeType":"VariableDeclaration","scope":5933,"src":"5845:31:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5924,"name":"uint256","nodeType":"ElementaryTypeName","src":"5845:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5927,"mutability":"mutable","name":"liquidityIndex","nameLocation":"5892:14:45","nodeType":"VariableDeclaration","scope":5933,"src":"5884:22:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5926,"name":"uint256","nodeType":"ElementaryTypeName","src":"5884:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5929,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"5922:19:45","nodeType":"VariableDeclaration","scope":5933,"src":"5914:27:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5928,"name":"uint256","nodeType":"ElementaryTypeName","src":"5914:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5931,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"5956:19:45","nodeType":"VariableDeclaration","scope":5933,"src":"5949:26:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":5930,"name":"uint40","nodeType":"ElementaryTypeName","src":"5949:6:45","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"5588:393:45"},"scope":6004,"src":"5507:475:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5934,"nodeType":"StructuredDocumentation","src":"5986:189:45","text":" @notice Returns the total supply of aTokens for a given asset\n @param asset The address of the underlying asset of the reserve\n @return The total supply of the aToken"},"functionSelector":"51460e25","id":5941,"implemented":false,"kind":"function","modifiers":[],"name":"getATokenTotalSupply","nameLocation":"6187:20:45","nodeType":"FunctionDefinition","parameters":{"id":5937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5936,"mutability":"mutable","name":"asset","nameLocation":"6216:5:45","nodeType":"VariableDeclaration","scope":5941,"src":"6208:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5935,"name":"address","nodeType":"ElementaryTypeName","src":"6208:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6207:15:45"},"returnParameters":{"id":5940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5939,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5941,"src":"6246:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5938,"name":"uint256","nodeType":"ElementaryTypeName","src":"6246:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6245:9:45"},"scope":6004,"src":"6178:77:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5942,"nodeType":"StructuredDocumentation","src":"6259:170:45","text":" @notice Returns the total debt for a given asset\n @param asset The address of the underlying asset of the reserve\n @return The total debt for asset"},"functionSelector":"4d44ac4f","id":5949,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalDebt","nameLocation":"6441:12:45","nodeType":"FunctionDefinition","parameters":{"id":5945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5944,"mutability":"mutable","name":"asset","nameLocation":"6462:5:45","nodeType":"VariableDeclaration","scope":5949,"src":"6454:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5943,"name":"address","nodeType":"ElementaryTypeName","src":"6454:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6453:15:45"},"returnParameters":{"id":5948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5949,"src":"6492:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5946,"name":"uint256","nodeType":"ElementaryTypeName","src":"6492:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6491:9:45"},"scope":6004,"src":"6432:69:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5950,"nodeType":"StructuredDocumentation","src":"6505:854:45","text":" @notice Returns the user data in a reserve\n @param asset The address of the underlying asset of the reserve\n @param user The address of the user\n @return currentATokenBalance The current AToken balance of the user\n @return currentStableDebt The current stable debt of the user\n @return currentVariableDebt The current variable debt of the user\n @return principalStableDebt The principal stable debt of the user\n @return scaledVariableDebt The scaled variable debt of the user\n @return stableBorrowRate The stable borrow rate of the user\n @return liquidityRate The liquidity rate of the reserve\n @return stableRateLastUpdated The timestamp of the last update of the user stable rate\n @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\n         otherwise"},"functionSelector":"28dd2d01","id":5975,"implemented":false,"kind":"function","modifiers":[],"name":"getUserReserveData","nameLocation":"7371:18:45","nodeType":"FunctionDefinition","parameters":{"id":5955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5952,"mutability":"mutable","name":"asset","nameLocation":"7403:5:45","nodeType":"VariableDeclaration","scope":5975,"src":"7395:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5951,"name":"address","nodeType":"ElementaryTypeName","src":"7395:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5954,"mutability":"mutable","name":"user","nameLocation":"7422:4:45","nodeType":"VariableDeclaration","scope":5975,"src":"7414:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5953,"name":"address","nodeType":"ElementaryTypeName","src":"7414:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7389:41:45"},"returnParameters":{"id":5974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5957,"mutability":"mutable","name":"currentATokenBalance","nameLocation":"7481:20:45","nodeType":"VariableDeclaration","scope":5975,"src":"7473:28:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5956,"name":"uint256","nodeType":"ElementaryTypeName","src":"7473:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5959,"mutability":"mutable","name":"currentStableDebt","nameLocation":"7517:17:45","nodeType":"VariableDeclaration","scope":5975,"src":"7509:25:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5958,"name":"uint256","nodeType":"ElementaryTypeName","src":"7509:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5961,"mutability":"mutable","name":"currentVariableDebt","nameLocation":"7550:19:45","nodeType":"VariableDeclaration","scope":5975,"src":"7542:27:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5960,"name":"uint256","nodeType":"ElementaryTypeName","src":"7542:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5963,"mutability":"mutable","name":"principalStableDebt","nameLocation":"7585:19:45","nodeType":"VariableDeclaration","scope":5975,"src":"7577:27:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5962,"name":"uint256","nodeType":"ElementaryTypeName","src":"7577:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5965,"mutability":"mutable","name":"scaledVariableDebt","nameLocation":"7620:18:45","nodeType":"VariableDeclaration","scope":5975,"src":"7612:26:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5964,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5967,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"7654:16:45","nodeType":"VariableDeclaration","scope":5975,"src":"7646:24:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5966,"name":"uint256","nodeType":"ElementaryTypeName","src":"7646:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5969,"mutability":"mutable","name":"liquidityRate","nameLocation":"7686:13:45","nodeType":"VariableDeclaration","scope":5975,"src":"7678:21:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5968,"name":"uint256","nodeType":"ElementaryTypeName","src":"7678:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5971,"mutability":"mutable","name":"stableRateLastUpdated","nameLocation":"7714:21:45","nodeType":"VariableDeclaration","scope":5975,"src":"7707:28:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":5970,"name":"uint40","nodeType":"ElementaryTypeName","src":"7707:6:45","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":5973,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"7748:24:45","nodeType":"VariableDeclaration","scope":5975,"src":"7743:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5972,"name":"bool","nodeType":"ElementaryTypeName","src":"7743:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7465:313:45"},"scope":6004,"src":"7362:417:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5976,"nodeType":"StructuredDocumentation","src":"7783:357:45","text":" @notice Returns the token addresses of the reserve\n @param asset The address of the underlying asset of the reserve\n @return aTokenAddress The AToken address of the reserve\n @return stableDebtTokenAddress The StableDebtToken address of the reserve\n @return variableDebtTokenAddress The VariableDebtToken address of the reserve"},"functionSelector":"d2493b6c","id":5987,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveTokensAddresses","nameLocation":"8152:25:45","nodeType":"FunctionDefinition","parameters":{"id":5979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5978,"mutability":"mutable","name":"asset","nameLocation":"8191:5:45","nodeType":"VariableDeclaration","scope":5987,"src":"8183:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5977,"name":"address","nodeType":"ElementaryTypeName","src":"8183:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8177:23:45"},"returnParameters":{"id":5986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5981,"mutability":"mutable","name":"aTokenAddress","nameLocation":"8251:13:45","nodeType":"VariableDeclaration","scope":5987,"src":"8243:21:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5980,"name":"address","nodeType":"ElementaryTypeName","src":"8243:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5983,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"8280:22:45","nodeType":"VariableDeclaration","scope":5987,"src":"8272:30:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5982,"name":"address","nodeType":"ElementaryTypeName","src":"8272:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5985,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"8318:24:45","nodeType":"VariableDeclaration","scope":5987,"src":"8310:32:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5984,"name":"address","nodeType":"ElementaryTypeName","src":"8310:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8235:113:45"},"scope":6004,"src":"8143:206:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5988,"nodeType":"StructuredDocumentation","src":"8353:214:45","text":" @notice Returns the address of the Interest Rate strategy\n @param asset The address of the underlying asset of the reserve\n @return irStrategyAddress The address of the Interest Rate strategy"},"functionSelector":"6744362a","id":5995,"implemented":false,"kind":"function","modifiers":[],"name":"getInterestRateStrategyAddress","nameLocation":"8579:30:45","nodeType":"FunctionDefinition","parameters":{"id":5991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5990,"mutability":"mutable","name":"asset","nameLocation":"8623:5:45","nodeType":"VariableDeclaration","scope":5995,"src":"8615:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5989,"name":"address","nodeType":"ElementaryTypeName","src":"8615:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8609:23:45"},"returnParameters":{"id":5994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5993,"mutability":"mutable","name":"irStrategyAddress","nameLocation":"8664:17:45","nodeType":"VariableDeclaration","scope":5995,"src":"8656:25:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5992,"name":"address","nodeType":"ElementaryTypeName","src":"8656:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8655:27:45"},"scope":6004,"src":"8570:113:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5996,"nodeType":"StructuredDocumentation","src":"8687:215:45","text":" @notice Returns whether the reserve has FlashLoans enabled or disabled\n @param asset The address of the underlying asset of the reserve\n @return True if FlashLoans are enabled, false otherwise"},"functionSelector":"d7ed3ef4","id":6003,"implemented":false,"kind":"function","modifiers":[],"name":"getFlashLoanEnabled","nameLocation":"8914:19:45","nodeType":"FunctionDefinition","parameters":{"id":5999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5998,"mutability":"mutable","name":"asset","nameLocation":"8942:5:45","nodeType":"VariableDeclaration","scope":6003,"src":"8934:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5997,"name":"address","nodeType":"ElementaryTypeName","src":"8934:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8933:15:45"},"returnParameters":{"id":6002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6001,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6003,"src":"8972:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6000,"name":"bool","nodeType":"ElementaryTypeName","src":"8972:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8971:6:45"},"scope":6004,"src":"8905:73:45","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6005,"src":"245:8735:45","usedErrors":[]}],"src":"37:8944:45"},"id":45},"contracts/interfaces/IPriceOracle.sol":{"ast":{"absolutePath":"contracts/interfaces/IPriceOracle.sol","exportedSymbols":{"IPriceOracle":[6024]},"id":6025,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6006,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:46"},{"abstract":false,"baseContracts":[],"canonicalName":"IPriceOracle","contractDependencies":[],"contractKind":"interface","documentation":{"id":6007,"nodeType":"StructuredDocumentation","src":"62:105:46","text":" @title IPriceOracle\n @author Aave\n @notice Defines the basic interface for a Price oracle."},"fullyImplemented":false,"id":6024,"linearizedBaseContracts":[6024],"name":"IPriceOracle","nameLocation":"178:12:46","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6008,"nodeType":"StructuredDocumentation","src":"195:146:46","text":" @notice Returns the asset price in the base currency\n @param asset The address of the asset\n @return The price of the asset"},"functionSelector":"b3596f07","id":6015,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetPrice","nameLocation":"353:13:46","nodeType":"FunctionDefinition","parameters":{"id":6011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6010,"mutability":"mutable","name":"asset","nameLocation":"375:5:46","nodeType":"VariableDeclaration","scope":6015,"src":"367:13:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6009,"name":"address","nodeType":"ElementaryTypeName","src":"367:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"366:15:46"},"returnParameters":{"id":6014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6015,"src":"405:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6012,"name":"uint256","nodeType":"ElementaryTypeName","src":"405:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:9:46"},"scope":6024,"src":"344:70:46","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6016,"nodeType":"StructuredDocumentation","src":"418:133:46","text":" @notice Set the price of the asset\n @param asset The address of the asset\n @param price The price of the asset"},"functionSelector":"51323f72","id":6023,"implemented":false,"kind":"function","modifiers":[],"name":"setAssetPrice","nameLocation":"563:13:46","nodeType":"FunctionDefinition","parameters":{"id":6021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6018,"mutability":"mutable","name":"asset","nameLocation":"585:5:46","nodeType":"VariableDeclaration","scope":6023,"src":"577:13:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6017,"name":"address","nodeType":"ElementaryTypeName","src":"577:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6020,"mutability":"mutable","name":"price","nameLocation":"600:5:46","nodeType":"VariableDeclaration","scope":6023,"src":"592:13:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6019,"name":"uint256","nodeType":"ElementaryTypeName","src":"592:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"576:30:46"},"returnParameters":{"id":6022,"nodeType":"ParameterList","parameters":[],"src":"615:0:46"},"scope":6024,"src":"554:62:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6025,"src":"168:450:46","usedErrors":[]}],"src":"37:582:46"},"id":46},"contracts/interfaces/IPriceOracleGetter.sol":{"ast":{"absolutePath":"contracts/interfaces/IPriceOracleGetter.sol","exportedSymbols":{"IPriceOracleGetter":[6048]},"id":6049,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6026,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:47"},{"abstract":false,"baseContracts":[],"canonicalName":"IPriceOracleGetter","contractDependencies":[],"contractKind":"interface","documentation":{"id":6027,"nodeType":"StructuredDocumentation","src":"62:100:47","text":" @title IPriceOracleGetter\n @author Aave\n @notice Interface for the Aave price oracle."},"fullyImplemented":false,"id":6048,"linearizedBaseContracts":[6048],"name":"IPriceOracleGetter","nameLocation":"173:18:47","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6028,"nodeType":"StructuredDocumentation","src":"196:164:47","text":" @notice Returns the base currency address\n @dev Address 0x0 is reserved for USD as base currency.\n @return Returns the base currency address."},"functionSelector":"e19f4700","id":6033,"implemented":false,"kind":"function","modifiers":[],"name":"BASE_CURRENCY","nameLocation":"372:13:47","nodeType":"FunctionDefinition","parameters":{"id":6029,"nodeType":"ParameterList","parameters":[],"src":"385:2:47"},"returnParameters":{"id":6032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6033,"src":"411:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6030,"name":"address","nodeType":"ElementaryTypeName","src":"411:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"410:9:47"},"scope":6048,"src":"363:57:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6034,"nodeType":"StructuredDocumentation","src":"424:138:47","text":" @notice Returns the base currency unit\n @dev 1 ether for ETH, 1e8 for USD.\n @return Returns the base currency unit."},"functionSelector":"8c89b64f","id":6039,"implemented":false,"kind":"function","modifiers":[],"name":"BASE_CURRENCY_UNIT","nameLocation":"574:18:47","nodeType":"FunctionDefinition","parameters":{"id":6035,"nodeType":"ParameterList","parameters":[],"src":"592:2:47"},"returnParameters":{"id":6038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6037,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6039,"src":"618:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6036,"name":"uint256","nodeType":"ElementaryTypeName","src":"618:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"617:9:47"},"scope":6048,"src":"565:62:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6040,"nodeType":"StructuredDocumentation","src":"631:146:47","text":" @notice Returns the asset price in the base currency\n @param asset The address of the asset\n @return The price of the asset"},"functionSelector":"b3596f07","id":6047,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetPrice","nameLocation":"789:13:47","nodeType":"FunctionDefinition","parameters":{"id":6043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6042,"mutability":"mutable","name":"asset","nameLocation":"811:5:47","nodeType":"VariableDeclaration","scope":6047,"src":"803:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6041,"name":"address","nodeType":"ElementaryTypeName","src":"803:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"802:15:47"},"returnParameters":{"id":6046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6047,"src":"841:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6044,"name":"uint256","nodeType":"ElementaryTypeName","src":"841:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"840:9:47"},"scope":6048,"src":"780:70:47","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6049,"src":"163:689:47","usedErrors":[]}],"src":"37:816:47"},"id":47},"contracts/interfaces/IPriceOracleSentinel.sol":{"ast":{"absolutePath":"contracts/interfaces/IPriceOracleSentinel.sol","exportedSymbols":{"IPoolAddressesProvider":[5282],"IPriceOracleSentinel":[6107]},"id":6108,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6050,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:48"},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":6052,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6108,"sourceUnit":5283,"src":"62:68:48","symbolAliases":[{"foreign":{"id":6051,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPriceOracleSentinel","contractDependencies":[],"contractKind":"interface","documentation":{"id":6053,"nodeType":"StructuredDocumentation","src":"132:121:48","text":" @title IPriceOracleSentinel\n @author Aave\n @notice Defines the basic interface for the PriceOracleSentinel"},"fullyImplemented":false,"id":6107,"linearizedBaseContracts":[6107],"name":"IPriceOracleSentinel","nameLocation":"264:20:48","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6054,"nodeType":"StructuredDocumentation","src":"289:121:48","text":" @dev Emitted after the sequencer oracle is updated\n @param newSequencerOracle The new sequencer oracle"},"id":6058,"name":"SequencerOracleUpdated","nameLocation":"419:22:48","nodeType":"EventDefinition","parameters":{"id":6057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6056,"indexed":false,"mutability":"mutable","name":"newSequencerOracle","nameLocation":"450:18:48","nodeType":"VariableDeclaration","scope":6058,"src":"442:26:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6055,"name":"address","nodeType":"ElementaryTypeName","src":"442:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"441:28:48"},"src":"413:57:48"},{"anonymous":false,"documentation":{"id":6059,"nodeType":"StructuredDocumentation","src":"474:115:48","text":" @dev Emitted after the grace period is updated\n @param newGracePeriod The new grace period value"},"id":6063,"name":"GracePeriodUpdated","nameLocation":"598:18:48","nodeType":"EventDefinition","parameters":{"id":6062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6061,"indexed":false,"mutability":"mutable","name":"newGracePeriod","nameLocation":"625:14:48","nodeType":"VariableDeclaration","scope":6063,"src":"617:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6060,"name":"uint256","nodeType":"ElementaryTypeName","src":"617:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"616:24:48"},"src":"592:49:48"},{"documentation":{"id":6064,"nodeType":"StructuredDocumentation","src":"645:119:48","text":" @notice Returns the PoolAddressesProvider\n @return The address of the PoolAddressesProvider contract"},"functionSelector":"0542975c","id":6070,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"776:18:48","nodeType":"FunctionDefinition","parameters":{"id":6065,"nodeType":"ParameterList","parameters":[],"src":"794:2:48"},"returnParameters":{"id":6069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6068,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6070,"src":"820:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6067,"nodeType":"UserDefinedTypeName","pathNode":{"id":6066,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"820:22:48"},"referencedDeclaration":5282,"src":"820:22:48","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"819:24:48"},"scope":6107,"src":"767:77:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6071,"nodeType":"StructuredDocumentation","src":"848:231:48","text":" @notice Returns true if the `borrow` operation is allowed.\n @dev Operation not allowed when PriceOracle is down or grace period not passed.\n @return True if the `borrow` operation is allowed, false otherwise."},"functionSelector":"49aa2e81","id":6076,"implemented":false,"kind":"function","modifiers":[],"name":"isBorrowAllowed","nameLocation":"1091:15:48","nodeType":"FunctionDefinition","parameters":{"id":6072,"nodeType":"ParameterList","parameters":[],"src":"1106:2:48"},"returnParameters":{"id":6075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6076,"src":"1132:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6073,"name":"bool","nodeType":"ElementaryTypeName","src":"1132:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1131:6:48"},"scope":6107,"src":"1082:56:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6077,"nodeType":"StructuredDocumentation","src":"1142:241:48","text":" @notice Returns true if the `liquidation` operation is allowed.\n @dev Operation not allowed when PriceOracle is down or grace period not passed.\n @return True if the `liquidation` operation is allowed, false otherwise."},"functionSelector":"7a5d20ea","id":6082,"implemented":false,"kind":"function","modifiers":[],"name":"isLiquidationAllowed","nameLocation":"1395:20:48","nodeType":"FunctionDefinition","parameters":{"id":6078,"nodeType":"ParameterList","parameters":[],"src":"1415:2:48"},"returnParameters":{"id":6081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6080,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6082,"src":"1441:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6079,"name":"bool","nodeType":"ElementaryTypeName","src":"1441:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1440:6:48"},"scope":6107,"src":"1386:61:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6083,"nodeType":"StructuredDocumentation","src":"1451:144:48","text":" @notice Updates the address of the sequencer oracle\n @param newSequencerOracle The address of the new Sequencer Oracle to use"},"functionSelector":"f0aef31c","id":6088,"implemented":false,"kind":"function","modifiers":[],"name":"setSequencerOracle","nameLocation":"1607:18:48","nodeType":"FunctionDefinition","parameters":{"id":6086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6085,"mutability":"mutable","name":"newSequencerOracle","nameLocation":"1634:18:48","nodeType":"VariableDeclaration","scope":6088,"src":"1626:26:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6084,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1625:28:48"},"returnParameters":{"id":6087,"nodeType":"ParameterList","parameters":[],"src":"1662:0:48"},"scope":6107,"src":"1598:65:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6089,"nodeType":"StructuredDocumentation","src":"1667:133:48","text":" @notice Updates the duration of the grace period\n @param newGracePeriod The value of the new grace period duration"},"functionSelector":"f2f65960","id":6094,"implemented":false,"kind":"function","modifiers":[],"name":"setGracePeriod","nameLocation":"1812:14:48","nodeType":"FunctionDefinition","parameters":{"id":6092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6091,"mutability":"mutable","name":"newGracePeriod","nameLocation":"1835:14:48","nodeType":"VariableDeclaration","scope":6094,"src":"1827:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6090,"name":"uint256","nodeType":"ElementaryTypeName","src":"1827:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1826:24:48"},"returnParameters":{"id":6093,"nodeType":"ParameterList","parameters":[],"src":"1859:0:48"},"scope":6107,"src":"1803:57:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6095,"nodeType":"StructuredDocumentation","src":"1864:108:48","text":" @notice Returns the SequencerOracle\n @return The address of the sequencer oracle contract"},"functionSelector":"12168dc2","id":6100,"implemented":false,"kind":"function","modifiers":[],"name":"getSequencerOracle","nameLocation":"1984:18:48","nodeType":"FunctionDefinition","parameters":{"id":6096,"nodeType":"ParameterList","parameters":[],"src":"2002:2:48"},"returnParameters":{"id":6099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6100,"src":"2028:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6097,"name":"address","nodeType":"ElementaryTypeName","src":"2028:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2027:9:48"},"scope":6107,"src":"1975:62:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6101,"nodeType":"StructuredDocumentation","src":"2041:93:48","text":" @notice Returns the grace period\n @return The duration of the grace period"},"functionSelector":"dbd18388","id":6106,"implemented":false,"kind":"function","modifiers":[],"name":"getGracePeriod","nameLocation":"2146:14:48","nodeType":"FunctionDefinition","parameters":{"id":6102,"nodeType":"ParameterList","parameters":[],"src":"2160:2:48"},"returnParameters":{"id":6105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6104,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6106,"src":"2186:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6103,"name":"uint256","nodeType":"ElementaryTypeName","src":"2186:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2185:9:48"},"scope":6107,"src":"2137:58:48","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6108,"src":"254:1943:48","usedErrors":[]}],"src":"37:2161:48"},"id":48},"contracts/interfaces/IReserveInterestRateStrategy.sol":{"ast":{"absolutePath":"contracts/interfaces/IReserveInterestRateStrategy.sol","exportedSymbols":{"DataTypes":[24227],"IReserveInterestRateStrategy":[6126]},"id":6127,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6109,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:49"},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../protocol/libraries/types/DataTypes.sol","id":6111,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6127,"sourceUnit":24228,"src":"62:68:49","symbolAliases":[{"foreign":{"id":6110,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:9:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IReserveInterestRateStrategy","contractDependencies":[],"contractKind":"interface","documentation":{"id":6112,"nodeType":"StructuredDocumentation","src":"132:125:49","text":" @title IReserveInterestRateStrategy\n @author Aave\n @notice Interface for the calculation of the interest rates"},"fullyImplemented":false,"id":6126,"linearizedBaseContracts":[6126],"name":"IReserveInterestRateStrategy","nameLocation":"268:28:49","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6113,"nodeType":"StructuredDocumentation","src":"301:383:49","text":" @notice Calculates the interest rates depending on the reserve's state and configurations\n @param params The parameters needed to calculate interest rates\n @return liquidityRate The liquidity rate expressed in rays\n @return stableBorrowRate The stable borrow rate expressed in rays\n @return variableBorrowRate The variable borrow rate expressed in rays"},"functionSelector":"a5898709","id":6125,"implemented":false,"kind":"function","modifiers":[],"name":"calculateInterestRates","nameLocation":"696:22:49","nodeType":"FunctionDefinition","parameters":{"id":6117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6116,"mutability":"mutable","name":"params","nameLocation":"770:6:49","nodeType":"VariableDeclaration","scope":6125,"src":"724:52:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"},"typeName":{"id":6115,"nodeType":"UserDefinedTypeName","pathNode":{"id":6114,"name":"DataTypes.CalculateInterestRatesParams","nodeType":"IdentifierPath","referencedDeclaration":24211,"src":"724:38:49"},"referencedDeclaration":24211,"src":"724:38:49","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_storage_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"}},"visibility":"internal"}],"src":"718:62:49"},"returnParameters":{"id":6124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6119,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6125,"src":"804:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6118,"name":"uint256","nodeType":"ElementaryTypeName","src":"804:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6121,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6125,"src":"813:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6120,"name":"uint256","nodeType":"ElementaryTypeName","src":"813:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6123,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6125,"src":"822:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6122,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"803:27:49"},"scope":6126,"src":"687:144:49","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6127,"src":"258:575:49","usedErrors":[]}],"src":"37:797:49"},"id":49},"contracts/interfaces/IScaledBalanceToken.sol":{"ast":{"absolutePath":"contracts/interfaces/IScaledBalanceToken.sol","exportedSymbols":{"IScaledBalanceToken":[6188]},"id":6189,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6128,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:50"},{"abstract":false,"baseContracts":[],"canonicalName":"IScaledBalanceToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":6129,"nodeType":"StructuredDocumentation","src":"62:120:50","text":" @title IScaledBalanceToken\n @author Aave\n @notice Defines the basic interface for a scaled-balance token."},"fullyImplemented":false,"id":6188,"linearizedBaseContracts":[6188],"name":"IScaledBalanceToken","nameLocation":"193:19:50","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6130,"nodeType":"StructuredDocumentation","src":"217:459:50","text":" @dev Emitted after the mint action\n @param caller The address performing the mint\n @param onBehalfOf The address of the user that will receive the minted tokens\n @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\n @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\n @param index The next liquidity index of the reserve"},"id":6142,"name":"Mint","nameLocation":"685:4:50","nodeType":"EventDefinition","parameters":{"id":6141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6132,"indexed":true,"mutability":"mutable","name":"caller","nameLocation":"711:6:50","nodeType":"VariableDeclaration","scope":6142,"src":"695:22:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6131,"name":"address","nodeType":"ElementaryTypeName","src":"695:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6134,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"739:10:50","nodeType":"VariableDeclaration","scope":6142,"src":"723:26:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6133,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6136,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"763:5:50","nodeType":"VariableDeclaration","scope":6142,"src":"755:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6135,"name":"uint256","nodeType":"ElementaryTypeName","src":"755:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6138,"indexed":false,"mutability":"mutable","name":"balanceIncrease","nameLocation":"782:15:50","nodeType":"VariableDeclaration","scope":6142,"src":"774:23:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6137,"name":"uint256","nodeType":"ElementaryTypeName","src":"774:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6140,"indexed":false,"mutability":"mutable","name":"index","nameLocation":"811:5:50","nodeType":"VariableDeclaration","scope":6142,"src":"803:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6139,"name":"uint256","nodeType":"ElementaryTypeName","src":"803:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"689:131:50"},"src":"679:142:50"},{"anonymous":false,"documentation":{"id":6143,"nodeType":"StructuredDocumentation","src":"825:566:50","text":" @dev Emitted after the burn action\n @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\n @param from The address from which the tokens will be burned\n @param target The address that will receive the underlying, if any\n @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\n @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\n @param index The next liquidity index of the reserve"},"id":6155,"name":"Burn","nameLocation":"1400:4:50","nodeType":"EventDefinition","parameters":{"id":6154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6145,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1426:4:50","nodeType":"VariableDeclaration","scope":6155,"src":"1410:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6144,"name":"address","nodeType":"ElementaryTypeName","src":"1410:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6147,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"1452:6:50","nodeType":"VariableDeclaration","scope":6155,"src":"1436:22:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6146,"name":"address","nodeType":"ElementaryTypeName","src":"1436:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6149,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"1472:5:50","nodeType":"VariableDeclaration","scope":6155,"src":"1464:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6148,"name":"uint256","nodeType":"ElementaryTypeName","src":"1464:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6151,"indexed":false,"mutability":"mutable","name":"balanceIncrease","nameLocation":"1491:15:50","nodeType":"VariableDeclaration","scope":6155,"src":"1483:23:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6150,"name":"uint256","nodeType":"ElementaryTypeName","src":"1483:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6153,"indexed":false,"mutability":"mutable","name":"index","nameLocation":"1520:5:50","nodeType":"VariableDeclaration","scope":6155,"src":"1512:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6152,"name":"uint256","nodeType":"ElementaryTypeName","src":"1512:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1404:125:50"},"src":"1394:136:50"},{"documentation":{"id":6156,"nodeType":"StructuredDocumentation","src":"1534:308:50","text":" @notice Returns the scaled balance of the user.\n @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\n at the moment of the update\n @param user The user whose balance is calculated\n @return The scaled balance of the user"},"functionSelector":"1da24f3e","id":6163,"implemented":false,"kind":"function","modifiers":[],"name":"scaledBalanceOf","nameLocation":"1854:15:50","nodeType":"FunctionDefinition","parameters":{"id":6159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6158,"mutability":"mutable","name":"user","nameLocation":"1878:4:50","nodeType":"VariableDeclaration","scope":6163,"src":"1870:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6157,"name":"address","nodeType":"ElementaryTypeName","src":"1870:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1869:14:50"},"returnParameters":{"id":6162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6161,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6163,"src":"1907:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6160,"name":"uint256","nodeType":"ElementaryTypeName","src":"1907:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1906:9:50"},"scope":6188,"src":"1845:71:50","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6164,"nodeType":"StructuredDocumentation","src":"1920:212:50","text":" @notice Returns the scaled balance of the user and the scaled total supply.\n @param user The address of the user\n @return The scaled balance of the user\n @return The scaled total supply"},"functionSelector":"0afbcdc9","id":6173,"implemented":false,"kind":"function","modifiers":[],"name":"getScaledUserBalanceAndSupply","nameLocation":"2144:29:50","nodeType":"FunctionDefinition","parameters":{"id":6167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6166,"mutability":"mutable","name":"user","nameLocation":"2182:4:50","nodeType":"VariableDeclaration","scope":6173,"src":"2174:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6165,"name":"address","nodeType":"ElementaryTypeName","src":"2174:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2173:14:50"},"returnParameters":{"id":6172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6169,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6173,"src":"2211:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6168,"name":"uint256","nodeType":"ElementaryTypeName","src":"2211:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6171,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6173,"src":"2220:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6170,"name":"uint256","nodeType":"ElementaryTypeName","src":"2220:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2210:18:50"},"scope":6188,"src":"2135:94:50","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6174,"nodeType":"StructuredDocumentation","src":"2233:147:50","text":" @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\n @return The scaled total supply"},"functionSelector":"b1bf962d","id":6179,"implemented":false,"kind":"function","modifiers":[],"name":"scaledTotalSupply","nameLocation":"2392:17:50","nodeType":"FunctionDefinition","parameters":{"id":6175,"nodeType":"ParameterList","parameters":[],"src":"2409:2:50"},"returnParameters":{"id":6178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6177,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6179,"src":"2435:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6176,"name":"uint256","nodeType":"ElementaryTypeName","src":"2435:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2434:9:50"},"scope":6188,"src":"2383:61:50","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6180,"nodeType":"StructuredDocumentation","src":"2448:214:50","text":" @notice Returns last index interest was accrued to the user's balance\n @param user The address of the user\n @return The last index interest was accrued to the user's balance, expressed in ray"},"functionSelector":"e0753986","id":6187,"implemented":false,"kind":"function","modifiers":[],"name":"getPreviousIndex","nameLocation":"2674:16:50","nodeType":"FunctionDefinition","parameters":{"id":6183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6182,"mutability":"mutable","name":"user","nameLocation":"2699:4:50","nodeType":"VariableDeclaration","scope":6187,"src":"2691:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6181,"name":"address","nodeType":"ElementaryTypeName","src":"2691:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2690:14:50"},"returnParameters":{"id":6186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6185,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6187,"src":"2728:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6184,"name":"uint256","nodeType":"ElementaryTypeName","src":"2728:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2727:9:50"},"scope":6188,"src":"2665:72:50","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6189,"src":"183:2556:50","usedErrors":[]}],"src":"37:2703:50"},"id":50},"contracts/interfaces/ISequencerOracle.sol":{"ast":{"absolutePath":"contracts/interfaces/ISequencerOracle.sol","exportedSymbols":{"ISequencerOracle":[6206]},"id":6207,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6190,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:51"},{"abstract":false,"baseContracts":[],"canonicalName":"ISequencerOracle","contractDependencies":[],"contractKind":"interface","documentation":{"id":6191,"nodeType":"StructuredDocumentation","src":"62:113:51","text":" @title ISequencerOracle\n @author Aave\n @notice Defines the basic interface for a Sequencer oracle."},"fullyImplemented":false,"id":6206,"linearizedBaseContracts":[6206],"name":"ISequencerOracle","nameLocation":"186:16:51","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6192,"nodeType":"StructuredDocumentation","src":"207:578:51","text":" @notice Returns the health status of the sequencer.\n @return roundId The round ID from the aggregator for which the data was retrieved combined with a phase to ensure\n that round IDs get larger as time moves forward.\n @return answer The answer for the latest round: 0 if the sequencer is up, 1 if it is down.\n @return startedAt The timestamp when the round was started.\n @return updatedAt The timestamp of the block in which the answer was updated on L1.\n @return answeredInRound The round ID of the round in which the answer was computed."},"functionSelector":"feaf968c","id":6205,"implemented":false,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"797:15:51","nodeType":"FunctionDefinition","parameters":{"id":6193,"nodeType":"ParameterList","parameters":[],"src":"812:2:51"},"returnParameters":{"id":6204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6195,"mutability":"mutable","name":"roundId","nameLocation":"864:7:51","nodeType":"VariableDeclaration","scope":6205,"src":"857:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":6194,"name":"uint80","nodeType":"ElementaryTypeName","src":"857:6:51","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":6197,"mutability":"mutable","name":"answer","nameLocation":"886:6:51","nodeType":"VariableDeclaration","scope":6205,"src":"879:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6196,"name":"int256","nodeType":"ElementaryTypeName","src":"879:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":6199,"mutability":"mutable","name":"startedAt","nameLocation":"908:9:51","nodeType":"VariableDeclaration","scope":6205,"src":"900:17:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6198,"name":"uint256","nodeType":"ElementaryTypeName","src":"900:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6201,"mutability":"mutable","name":"updatedAt","nameLocation":"933:9:51","nodeType":"VariableDeclaration","scope":6205,"src":"925:17:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6200,"name":"uint256","nodeType":"ElementaryTypeName","src":"925:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6203,"mutability":"mutable","name":"answeredInRound","nameLocation":"957:15:51","nodeType":"VariableDeclaration","scope":6205,"src":"950:22:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":6202,"name":"uint80","nodeType":"ElementaryTypeName","src":"950:6:51","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"849:129:51"},"scope":6206,"src":"788:191:51","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6207,"src":"176:805:51","usedErrors":[]}],"src":"37:945:51"},"id":51},"contracts/interfaces/IStableDebtToken.sol":{"ast":{"absolutePath":"contracts/interfaces/IStableDebtToken.sol","exportedSymbols":{"IInitializableDebtToken":[4346],"IStableDebtToken":[6340]},"id":6341,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6208,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:52"},{"absolutePath":"contracts/interfaces/IInitializableDebtToken.sol","file":"./IInitializableDebtToken.sol","id":6210,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6341,"sourceUnit":4347,"src":"62:70:52","symbolAliases":[{"foreign":{"id":6209,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:23:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6212,"name":"IInitializableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":4346,"src":"335:23:52"},"id":6213,"nodeType":"InheritanceSpecifier","src":"335:23:52"}],"canonicalName":"IStableDebtToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":6211,"nodeType":"StructuredDocumentation","src":"134:170:52","text":" @title IStableDebtToken\n @author Aave\n @notice Defines the interface for the stable debt token\n @dev It does not inherit from IERC20 to save in code size"},"fullyImplemented":false,"id":6340,"linearizedBaseContracts":[6340,4346],"name":"IStableDebtToken","nameLocation":"315:16:52","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6214,"nodeType":"StructuredDocumentation","src":"363:714:52","text":" @dev Emitted when new stable debt is minted\n @param user The address of the user who triggered the minting\n @param onBehalfOf The recipient of stable debt tokens\n @param amount The amount minted (user entered amount + balance increase from interest)\n @param currentBalance The balance of the user based on the previous balance and balance increase from interest\n @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\n @param newRate The rate of the debt after the minting\n @param avgStableRate The next average stable rate after the minting\n @param newTotalSupply The next total supply of the stable debt token after the action"},"id":6232,"name":"Mint","nameLocation":"1086:4:52","nodeType":"EventDefinition","parameters":{"id":6231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6216,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1112:4:52","nodeType":"VariableDeclaration","scope":6232,"src":"1096:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6215,"name":"address","nodeType":"ElementaryTypeName","src":"1096:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6218,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1138:10:52","nodeType":"VariableDeclaration","scope":6232,"src":"1122:26:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6217,"name":"address","nodeType":"ElementaryTypeName","src":"1122:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6220,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1162:6:52","nodeType":"VariableDeclaration","scope":6232,"src":"1154:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6219,"name":"uint256","nodeType":"ElementaryTypeName","src":"1154:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6222,"indexed":false,"mutability":"mutable","name":"currentBalance","nameLocation":"1182:14:52","nodeType":"VariableDeclaration","scope":6232,"src":"1174:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6221,"name":"uint256","nodeType":"ElementaryTypeName","src":"1174:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6224,"indexed":false,"mutability":"mutable","name":"balanceIncrease","nameLocation":"1210:15:52","nodeType":"VariableDeclaration","scope":6232,"src":"1202:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6223,"name":"uint256","nodeType":"ElementaryTypeName","src":"1202:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6226,"indexed":false,"mutability":"mutable","name":"newRate","nameLocation":"1239:7:52","nodeType":"VariableDeclaration","scope":6232,"src":"1231:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6225,"name":"uint256","nodeType":"ElementaryTypeName","src":"1231:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6228,"indexed":false,"mutability":"mutable","name":"avgStableRate","nameLocation":"1260:13:52","nodeType":"VariableDeclaration","scope":6232,"src":"1252:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6227,"name":"uint256","nodeType":"ElementaryTypeName","src":"1252:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6230,"indexed":false,"mutability":"mutable","name":"newTotalSupply","nameLocation":"1287:14:52","nodeType":"VariableDeclaration","scope":6232,"src":"1279:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6229,"name":"uint256","nodeType":"ElementaryTypeName","src":"1279:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1090:215:52"},"src":"1080:226:52"},{"anonymous":false,"documentation":{"id":6233,"nodeType":"StructuredDocumentation","src":"1310:584:52","text":" @dev Emitted when new stable debt is burned\n @param from The address from which the debt will be burned\n @param amount The amount being burned (user entered amount - balance increase from interest)\n @param currentBalance The balance of the user based on the previous balance and balance increase from interest\n @param balanceIncrease The increase in balance since the last action of 'from'\n @param avgStableRate The next average stable rate after the burning\n @param newTotalSupply The next total supply of the stable debt token after the action"},"id":6247,"name":"Burn","nameLocation":"1903:4:52","nodeType":"EventDefinition","parameters":{"id":6246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6235,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1929:4:52","nodeType":"VariableDeclaration","scope":6247,"src":"1913:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6234,"name":"address","nodeType":"ElementaryTypeName","src":"1913:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6237,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1947:6:52","nodeType":"VariableDeclaration","scope":6247,"src":"1939:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6236,"name":"uint256","nodeType":"ElementaryTypeName","src":"1939:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6239,"indexed":false,"mutability":"mutable","name":"currentBalance","nameLocation":"1967:14:52","nodeType":"VariableDeclaration","scope":6247,"src":"1959:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6238,"name":"uint256","nodeType":"ElementaryTypeName","src":"1959:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6241,"indexed":false,"mutability":"mutable","name":"balanceIncrease","nameLocation":"1995:15:52","nodeType":"VariableDeclaration","scope":6247,"src":"1987:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6240,"name":"uint256","nodeType":"ElementaryTypeName","src":"1987:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6243,"indexed":false,"mutability":"mutable","name":"avgStableRate","nameLocation":"2024:13:52","nodeType":"VariableDeclaration","scope":6247,"src":"2016:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6242,"name":"uint256","nodeType":"ElementaryTypeName","src":"2016:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6245,"indexed":false,"mutability":"mutable","name":"newTotalSupply","nameLocation":"2051:14:52","nodeType":"VariableDeclaration","scope":6247,"src":"2043:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6244,"name":"uint256","nodeType":"ElementaryTypeName","src":"2043:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1907:162:52"},"src":"1897:173:52"},{"documentation":{"id":6248,"nodeType":"StructuredDocumentation","src":"2074:649:52","text":" @notice Mints debt token to the `onBehalfOf` address.\n @dev The resulting rate is the weighted average between the rate of the new debt\n and the rate of the previous debt\n @param user The address receiving the borrowed underlying, being the delegatee in case\n of credit delegate, or same as `onBehalfOf` otherwise\n @param onBehalfOf The address receiving the debt tokens\n @param amount The amount of debt tokens to mint\n @param rate The rate of the debt being minted\n @return True if it is the first borrow, false otherwise\n @return The total stable debt\n @return The average stable borrow rate"},"functionSelector":"b3f1c93d","id":6265,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"2735:4:52","nodeType":"FunctionDefinition","parameters":{"id":6257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6250,"mutability":"mutable","name":"user","nameLocation":"2753:4:52","nodeType":"VariableDeclaration","scope":6265,"src":"2745:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6249,"name":"address","nodeType":"ElementaryTypeName","src":"2745:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6252,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2771:10:52","nodeType":"VariableDeclaration","scope":6265,"src":"2763:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6251,"name":"address","nodeType":"ElementaryTypeName","src":"2763:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6254,"mutability":"mutable","name":"amount","nameLocation":"2795:6:52","nodeType":"VariableDeclaration","scope":6265,"src":"2787:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6253,"name":"uint256","nodeType":"ElementaryTypeName","src":"2787:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6256,"mutability":"mutable","name":"rate","nameLocation":"2815:4:52","nodeType":"VariableDeclaration","scope":6265,"src":"2807:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6255,"name":"uint256","nodeType":"ElementaryTypeName","src":"2807:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2739:84:52"},"returnParameters":{"id":6264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6259,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6265,"src":"2842:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6258,"name":"bool","nodeType":"ElementaryTypeName","src":"2842:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6265,"src":"2848:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6260,"name":"uint256","nodeType":"ElementaryTypeName","src":"2848:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6263,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6265,"src":"2857:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6262,"name":"uint256","nodeType":"ElementaryTypeName","src":"2857:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2841:24:52"},"scope":6340,"src":"2726:140:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6266,"nodeType":"StructuredDocumentation","src":"2870:511:52","text":" @notice Burns debt of `user`\n @dev The resulting rate is the weighted average between the rate of the new debt\n and the rate of the previous debt\n @dev In some instances, a burn transaction will emit a mint event\n if the amount to burn is less than the interest the user earned\n @param from The address from which the debt will be burned\n @param amount The amount of debt tokens getting burned\n @return The total stable debt\n @return The average stable borrow rate"},"functionSelector":"9dc29fac","id":6277,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"3393:4:52","nodeType":"FunctionDefinition","parameters":{"id":6271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6268,"mutability":"mutable","name":"from","nameLocation":"3406:4:52","nodeType":"VariableDeclaration","scope":6277,"src":"3398:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6267,"name":"address","nodeType":"ElementaryTypeName","src":"3398:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6270,"mutability":"mutable","name":"amount","nameLocation":"3420:6:52","nodeType":"VariableDeclaration","scope":6277,"src":"3412:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6269,"name":"uint256","nodeType":"ElementaryTypeName","src":"3412:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3397:30:52"},"returnParameters":{"id":6276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6273,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6277,"src":"3446:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6272,"name":"uint256","nodeType":"ElementaryTypeName","src":"3446:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6277,"src":"3455:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6274,"name":"uint256","nodeType":"ElementaryTypeName","src":"3455:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3445:18:52"},"scope":6340,"src":"3384:80:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6278,"nodeType":"StructuredDocumentation","src":"3468:114:52","text":" @notice Returns the average rate of all the stable rate loans.\n @return The average stable rate"},"functionSelector":"90f6fcf2","id":6283,"implemented":false,"kind":"function","modifiers":[],"name":"getAverageStableRate","nameLocation":"3594:20:52","nodeType":"FunctionDefinition","parameters":{"id":6279,"nodeType":"ParameterList","parameters":[],"src":"3614:2:52"},"returnParameters":{"id":6282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6281,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6283,"src":"3640:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6280,"name":"uint256","nodeType":"ElementaryTypeName","src":"3640:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3639:9:52"},"scope":6340,"src":"3585:64:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6284,"nodeType":"StructuredDocumentation","src":"3653:145:52","text":" @notice Returns the stable rate of the user debt\n @param user The address of the user\n @return The stable rate of the user"},"functionSelector":"e78c9b3b","id":6291,"implemented":false,"kind":"function","modifiers":[],"name":"getUserStableRate","nameLocation":"3810:17:52","nodeType":"FunctionDefinition","parameters":{"id":6287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6286,"mutability":"mutable","name":"user","nameLocation":"3836:4:52","nodeType":"VariableDeclaration","scope":6291,"src":"3828:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6285,"name":"address","nodeType":"ElementaryTypeName","src":"3828:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3827:14:52"},"returnParameters":{"id":6290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6289,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6291,"src":"3865:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6288,"name":"uint256","nodeType":"ElementaryTypeName","src":"3865:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3864:9:52"},"scope":6340,"src":"3801:73:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6292,"nodeType":"StructuredDocumentation","src":"3878:143:52","text":" @notice Returns the timestamp of the last update of the user\n @param user The address of the user\n @return The timestamp"},"functionSelector":"79ce6b8c","id":6299,"implemented":false,"kind":"function","modifiers":[],"name":"getUserLastUpdated","nameLocation":"4033:18:52","nodeType":"FunctionDefinition","parameters":{"id":6295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6294,"mutability":"mutable","name":"user","nameLocation":"4060:4:52","nodeType":"VariableDeclaration","scope":6299,"src":"4052:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6293,"name":"address","nodeType":"ElementaryTypeName","src":"4052:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4051:14:52"},"returnParameters":{"id":6298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6299,"src":"4089:6:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":6296,"name":"uint40","nodeType":"ElementaryTypeName","src":"4089:6:52","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"4088:8:52"},"scope":6340,"src":"4024:73:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6300,"nodeType":"StructuredDocumentation","src":"4101:265:52","text":" @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\n @return The principal\n @return The total supply\n @return The average stable rate\n @return The timestamp of the last update"},"functionSelector":"79774338","id":6311,"implemented":false,"kind":"function","modifiers":[],"name":"getSupplyData","nameLocation":"4378:13:52","nodeType":"FunctionDefinition","parameters":{"id":6301,"nodeType":"ParameterList","parameters":[],"src":"4391:2:52"},"returnParameters":{"id":6310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6303,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6311,"src":"4417:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6302,"name":"uint256","nodeType":"ElementaryTypeName","src":"4417:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6305,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6311,"src":"4426:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6304,"name":"uint256","nodeType":"ElementaryTypeName","src":"4426:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6311,"src":"4435:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6306,"name":"uint256","nodeType":"ElementaryTypeName","src":"4435:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6309,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6311,"src":"4444:6:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":6308,"name":"uint40","nodeType":"ElementaryTypeName","src":"4444:6:52","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"4416:35:52"},"scope":6340,"src":"4369:83:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6312,"nodeType":"StructuredDocumentation","src":"4456:110:52","text":" @notice Returns the timestamp of the last update of the total supply\n @return The timestamp"},"functionSelector":"e7484890","id":6317,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalSupplyLastUpdated","nameLocation":"4578:25:52","nodeType":"FunctionDefinition","parameters":{"id":6313,"nodeType":"ParameterList","parameters":[],"src":"4603:2:52"},"returnParameters":{"id":6316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6317,"src":"4629:6:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":6314,"name":"uint40","nodeType":"ElementaryTypeName","src":"4629:6:52","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"4628:8:52"},"scope":6340,"src":"4569:68:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6318,"nodeType":"StructuredDocumentation","src":"4641:135:52","text":" @notice Returns the total supply and the average stable rate\n @return The total supply\n @return The average rate"},"functionSelector":"f731e9be","id":6325,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalSupplyAndAvgRate","nameLocation":"4788:24:52","nodeType":"FunctionDefinition","parameters":{"id":6319,"nodeType":"ParameterList","parameters":[],"src":"4812:2:52"},"returnParameters":{"id":6324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6321,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6325,"src":"4838:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6320,"name":"uint256","nodeType":"ElementaryTypeName","src":"4838:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6325,"src":"4847:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6322,"name":"uint256","nodeType":"ElementaryTypeName","src":"4847:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4837:18:52"},"scope":6340,"src":"4779:77:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6326,"nodeType":"StructuredDocumentation","src":"4860:143:52","text":" @notice Returns the principal debt balance of the user\n @return The debt balance of the user since the last burn/mint action"},"functionSelector":"c634dfaa","id":6333,"implemented":false,"kind":"function","modifiers":[],"name":"principalBalanceOf","nameLocation":"5015:18:52","nodeType":"FunctionDefinition","parameters":{"id":6329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6328,"mutability":"mutable","name":"user","nameLocation":"5042:4:52","nodeType":"VariableDeclaration","scope":6333,"src":"5034:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6327,"name":"address","nodeType":"ElementaryTypeName","src":"5034:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5033:14:52"},"returnParameters":{"id":6332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6331,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6333,"src":"5071:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6330,"name":"uint256","nodeType":"ElementaryTypeName","src":"5071:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5070:9:52"},"scope":6340,"src":"5006:74:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6334,"nodeType":"StructuredDocumentation","src":"5084:170:52","text":" @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\n @return The address of the underlying asset"},"functionSelector":"b16a19de","id":6339,"implemented":false,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"5266:24:52","nodeType":"FunctionDefinition","parameters":{"id":6335,"nodeType":"ParameterList","parameters":[],"src":"5290:2:52"},"returnParameters":{"id":6338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6339,"src":"5316:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6336,"name":"address","nodeType":"ElementaryTypeName","src":"5316:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5315:9:52"},"scope":6340,"src":"5257:68:52","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6341,"src":"305:5022:52","usedErrors":[]}],"src":"37:5291:52"},"id":52},"contracts/interfaces/IVariableDebtToken.sol":{"ast":{"absolutePath":"contracts/interfaces/IVariableDebtToken.sol","exportedSymbols":{"IInitializableDebtToken":[4346],"IScaledBalanceToken":[6188],"IVariableDebtToken":[6386]},"id":6387,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6342,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:53"},{"absolutePath":"contracts/interfaces/IScaledBalanceToken.sol","file":"./IScaledBalanceToken.sol","id":6344,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6387,"sourceUnit":6189,"src":"62:62:53","symbolAliases":[{"foreign":{"id":6343,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:19:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IInitializableDebtToken.sol","file":"./IInitializableDebtToken.sol","id":6346,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6387,"sourceUnit":4347,"src":"125:70:53","symbolAliases":[{"foreign":{"id":6345,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"133:23:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6348,"name":"IScaledBalanceToken","nodeType":"IdentifierPath","referencedDeclaration":6188,"src":"348:19:53"},"id":6349,"nodeType":"InheritanceSpecifier","src":"348:19:53"},{"baseName":{"id":6350,"name":"IInitializableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":4346,"src":"369:23:53"},"id":6351,"nodeType":"InheritanceSpecifier","src":"369:23:53"}],"canonicalName":"IVariableDebtToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":6347,"nodeType":"StructuredDocumentation","src":"197:118:53","text":" @title IVariableDebtToken\n @author Aave\n @notice Defines the basic interface for a variable debt token."},"fullyImplemented":false,"id":6386,"linearizedBaseContracts":[6386,4346,6188],"name":"IVariableDebtToken","nameLocation":"326:18:53","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6352,"nodeType":"StructuredDocumentation","src":"397:513:53","text":" @notice Mints debt token to the `onBehalfOf` address\n @param user The address receiving the borrowed underlying, being the delegatee in case\n of credit delegate, or same as `onBehalfOf` otherwise\n @param onBehalfOf The address receiving the debt tokens\n @param amount The amount of debt being minted\n @param index The variable debt index of the reserve\n @return True if the previous balance of the user is 0, false otherwise\n @return The scaled total debt of the reserve"},"functionSelector":"b3f1c93d","id":6367,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"922:4:53","nodeType":"FunctionDefinition","parameters":{"id":6361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6354,"mutability":"mutable","name":"user","nameLocation":"940:4:53","nodeType":"VariableDeclaration","scope":6367,"src":"932:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6353,"name":"address","nodeType":"ElementaryTypeName","src":"932:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6356,"mutability":"mutable","name":"onBehalfOf","nameLocation":"958:10:53","nodeType":"VariableDeclaration","scope":6367,"src":"950:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6355,"name":"address","nodeType":"ElementaryTypeName","src":"950:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6358,"mutability":"mutable","name":"amount","nameLocation":"982:6:53","nodeType":"VariableDeclaration","scope":6367,"src":"974:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6357,"name":"uint256","nodeType":"ElementaryTypeName","src":"974:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6360,"mutability":"mutable","name":"index","nameLocation":"1002:5:53","nodeType":"VariableDeclaration","scope":6367,"src":"994:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6359,"name":"uint256","nodeType":"ElementaryTypeName","src":"994:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"926:85:53"},"returnParameters":{"id":6366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6363,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6367,"src":"1030:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6362,"name":"bool","nodeType":"ElementaryTypeName","src":"1030:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6365,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6367,"src":"1036:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6364,"name":"uint256","nodeType":"ElementaryTypeName","src":"1036:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1029:15:53"},"scope":6386,"src":"913:132:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6368,"nodeType":"StructuredDocumentation","src":"1049:409:53","text":" @notice Burns user variable debt\n @dev In some instances, a burn transaction will emit a mint event\n if the amount to burn is less than the interest that the user accrued\n @param from The address from which the debt will be burned\n @param amount The amount getting burned\n @param index The variable debt index of the reserve\n @return The scaled total debt of the reserve"},"functionSelector":"f5298aca","id":6379,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"1470:4:53","nodeType":"FunctionDefinition","parameters":{"id":6375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6370,"mutability":"mutable","name":"from","nameLocation":"1483:4:53","nodeType":"VariableDeclaration","scope":6379,"src":"1475:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6369,"name":"address","nodeType":"ElementaryTypeName","src":"1475:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6372,"mutability":"mutable","name":"amount","nameLocation":"1497:6:53","nodeType":"VariableDeclaration","scope":6379,"src":"1489:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6371,"name":"uint256","nodeType":"ElementaryTypeName","src":"1489:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6374,"mutability":"mutable","name":"index","nameLocation":"1513:5:53","nodeType":"VariableDeclaration","scope":6379,"src":"1505:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6373,"name":"uint256","nodeType":"ElementaryTypeName","src":"1505:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1474:45:53"},"returnParameters":{"id":6378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6377,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6379,"src":"1538:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6376,"name":"uint256","nodeType":"ElementaryTypeName","src":"1538:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1537:9:53"},"scope":6386,"src":"1461:86:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6380,"nodeType":"StructuredDocumentation","src":"1551:166:53","text":" @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\n @return The address of the underlying asset"},"functionSelector":"b16a19de","id":6385,"implemented":false,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"1729:24:53","nodeType":"FunctionDefinition","parameters":{"id":6381,"nodeType":"ParameterList","parameters":[],"src":"1753:2:53"},"returnParameters":{"id":6384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6383,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6385,"src":"1779:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6382,"name":"address","nodeType":"ElementaryTypeName","src":"1779:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1778:9:53"},"scope":6386,"src":"1720:68:53","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6387,"src":"316:1474:53","usedErrors":[]}],"src":"37:1754:53"},"id":53},"contracts/misc/AaveOracle.sol":{"ast":{"absolutePath":"contracts/misc/AaveOracle.sol","exportedSymbols":{"AaveOracle":[6750],"AggregatorInterface":[47],"Errors":[14819],"IACLManager":[3843],"IAaveOracle":[4076],"IPoolAddressesProvider":[5282],"IPriceOracleGetter":[6048]},"id":6751,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":6388,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:54"},{"absolutePath":"contracts/dependencies/chainlink/AggregatorInterface.sol","file":"../dependencies/chainlink/AggregatorInterface.sol","id":6390,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6751,"sourceUnit":48,"src":"63:86:54","symbolAliases":[{"foreign":{"id":6389,"name":"AggregatorInterface","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:19:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../protocol/libraries/helpers/Errors.sol","id":6392,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6751,"sourceUnit":14820,"src":"150:64:54","symbolAliases":[{"foreign":{"id":6391,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"158:6:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IACLManager.sol","file":"../interfaces/IACLManager.sol","id":6394,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6751,"sourceUnit":3844,"src":"215:58:54","symbolAliases":[{"foreign":{"id":6393,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"223:11:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../interfaces/IPoolAddressesProvider.sol","id":6396,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6751,"sourceUnit":5283,"src":"274:80:54","symbolAliases":[{"foreign":{"id":6395,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"282:22:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPriceOracleGetter.sol","file":"../interfaces/IPriceOracleGetter.sol","id":6398,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6751,"sourceUnit":6049,"src":"355:72:54","symbolAliases":[{"foreign":{"id":6397,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"363:18:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAaveOracle.sol","file":"../interfaces/IAaveOracle.sol","id":6400,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6751,"sourceUnit":4077,"src":"428:58:54","symbolAliases":[{"foreign":{"id":6399,"name":"IAaveOracle","nodeType":"Identifier","overloadedDeclarations":[],"src":"436:11:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6402,"name":"IAaveOracle","nodeType":"IdentifierPath","referencedDeclaration":4076,"src":"847:11:54"},"id":6403,"nodeType":"InheritanceSpecifier","src":"847:11:54"}],"canonicalName":"AaveOracle","contractDependencies":[],"contractKind":"contract","documentation":{"id":6401,"nodeType":"StructuredDocumentation","src":"488:335:54","text":" @title AaveOracle\n @author Aave\n @notice Contract to get asset prices, manage price sources and update the fallback oracle\n - Use of Chainlink Aggregators as first source of price\n - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle\n - Owned by the Aave governance"},"fullyImplemented":true,"id":6750,"linearizedBaseContracts":[6750,4076,6048],"name":"AaveOracle","nameLocation":"833:10:54","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[4035],"constant":false,"functionSelector":"0542975c","id":6406,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"903:18:54","nodeType":"VariableDeclaration","scope":6750,"src":"863:58:54","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6405,"nodeType":"UserDefinedTypeName","pathNode":{"id":6404,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"863:22:54"},"referencedDeclaration":5282,"src":"863:22:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"constant":false,"id":6411,"mutability":"mutable","name":"assetsSources","nameLocation":"1029:13:54","nodeType":"VariableDeclaration","scope":6750,"src":"981:61:54","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"},"typeName":{"id":6410,"keyType":{"id":6407,"name":"address","nodeType":"ElementaryTypeName","src":"989:7:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"981:39:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"},"valueType":{"id":6409,"nodeType":"UserDefinedTypeName","pathNode":{"id":6408,"name":"AggregatorInterface","nodeType":"IdentifierPath","referencedDeclaration":47,"src":"1000:19:54"},"referencedDeclaration":47,"src":"1000:19:54","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}}},"visibility":"private"},{"constant":false,"id":6414,"mutability":"mutable","name":"_fallbackOracle","nameLocation":"1074:15:54","nodeType":"VariableDeclaration","scope":6750,"src":"1047:42:54","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"},"typeName":{"id":6413,"nodeType":"UserDefinedTypeName","pathNode":{"id":6412,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":6048,"src":"1047:18:54"},"referencedDeclaration":6048,"src":"1047:18:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"visibility":"private"},{"baseFunctions":[6033],"constant":false,"functionSelector":"e19f4700","id":6417,"mutability":"immutable","name":"BASE_CURRENCY","nameLocation":"1127:13:54","nodeType":"VariableDeclaration","overrides":{"id":6416,"nodeType":"OverrideSpecifier","overrides":[],"src":"1118:8:54"},"scope":6750,"src":"1093:47:54","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6415,"name":"address","nodeType":"ElementaryTypeName","src":"1093:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"baseFunctions":[6039],"constant":false,"functionSelector":"8c89b64f","id":6420,"mutability":"immutable","name":"BASE_CURRENCY_UNIT","nameLocation":"1178:18:54","nodeType":"VariableDeclaration","overrides":{"id":6419,"nodeType":"OverrideSpecifier","overrides":[],"src":"1169:8:54"},"scope":6750,"src":"1144:52:54","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6418,"name":"uint256","nodeType":"ElementaryTypeName","src":"1144:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"body":{"id":6427,"nodeType":"Block","src":"1340:49:54","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6423,"name":"_onlyAssetListingOrPoolAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6749,"src":"1346:29:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":6424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1346:31:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6425,"nodeType":"ExpressionStatement","src":"1346:31:54"},{"id":6426,"nodeType":"PlaceholderStatement","src":"1383:1:54"}]},"documentation":{"id":6421,"nodeType":"StructuredDocumentation","src":"1201:96:54","text":" @dev Only asset listing or pool admin can call functions marked by this modifier."},"id":6428,"name":"onlyAssetListingOrPoolAdmins","nameLocation":"1309:28:54","nodeType":"ModifierDefinition","parameters":{"id":6422,"nodeType":"ParameterList","parameters":[],"src":"1337:2:54"},"src":"1300:89:54","virtual":false,"visibility":"internal"},{"body":{"id":6473,"nodeType":"Block","src":"2093:255:54","statements":[{"expression":{"id":6449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6447,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6406,"src":"2099:18:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6448,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6432,"src":"2120:8:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"2099:29:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":6450,"nodeType":"ExpressionStatement","src":"2099:29:54"},{"expression":{"arguments":[{"id":6452,"name":"fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6440,"src":"2153:14:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6451,"name":"_setFallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6579,"src":"2134:18:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2134:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6454,"nodeType":"ExpressionStatement","src":"2134:34:54"},{"expression":{"arguments":[{"id":6456,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6435,"src":"2192:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":6457,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6438,"src":"2200:7:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":6455,"name":"_setAssetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6562,"src":"2174:17:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,address[] memory)"}},"id":6458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2174:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6459,"nodeType":"ExpressionStatement","src":"2174:34:54"},{"expression":{"id":6462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6460,"name":"BASE_CURRENCY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6417,"src":"2214:13:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6461,"name":"baseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6442,"src":"2230:12:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2214:28:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6463,"nodeType":"ExpressionStatement","src":"2214:28:54"},{"expression":{"id":6466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6464,"name":"BASE_CURRENCY_UNIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6420,"src":"2248:18:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6465,"name":"baseCurrencyUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6444,"src":"2269:16:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2248:37:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6467,"nodeType":"ExpressionStatement","src":"2248:37:54"},{"eventCall":{"arguments":[{"id":6469,"name":"baseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6442,"src":"2312:12:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6470,"name":"baseCurrencyUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6444,"src":"2326:16:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6468,"name":"BaseCurrencySet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4016,"src":"2296:15:54","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2296:47:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6472,"nodeType":"EmitStatement","src":"2291:52:54"}]},"documentation":{"id":6429,"nodeType":"StructuredDocumentation","src":"1393:501:54","text":" @notice Constructor\n @param provider The address of the new PoolAddressesProvider\n @param assets The addresses of the assets\n @param sources The address of the source of each asset\n @param fallbackOracle The address of the fallback oracle to use if the data of an\n        aggregator is not consistent\n @param baseCurrency The base currency used for the price quotes. If USD is used, base currency is 0x0\n @param baseCurrencyUnit The unit of the base currency"},"id":6474,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6432,"mutability":"mutable","name":"provider","nameLocation":"1937:8:54","nodeType":"VariableDeclaration","scope":6474,"src":"1914:31:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6431,"nodeType":"UserDefinedTypeName","pathNode":{"id":6430,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1914:22:54"},"referencedDeclaration":5282,"src":"1914:22:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":6435,"mutability":"mutable","name":"assets","nameLocation":"1968:6:54","nodeType":"VariableDeclaration","scope":6474,"src":"1951:23:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6433,"name":"address","nodeType":"ElementaryTypeName","src":"1951:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6434,"nodeType":"ArrayTypeName","src":"1951:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6438,"mutability":"mutable","name":"sources","nameLocation":"1997:7:54","nodeType":"VariableDeclaration","scope":6474,"src":"1980:24:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6436,"name":"address","nodeType":"ElementaryTypeName","src":"1980:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6437,"nodeType":"ArrayTypeName","src":"1980:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6440,"mutability":"mutable","name":"fallbackOracle","nameLocation":"2018:14:54","nodeType":"VariableDeclaration","scope":6474,"src":"2010:22:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6439,"name":"address","nodeType":"ElementaryTypeName","src":"2010:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6442,"mutability":"mutable","name":"baseCurrency","nameLocation":"2046:12:54","nodeType":"VariableDeclaration","scope":6474,"src":"2038:20:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6441,"name":"address","nodeType":"ElementaryTypeName","src":"2038:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6444,"mutability":"mutable","name":"baseCurrencyUnit","nameLocation":"2072:16:54","nodeType":"VariableDeclaration","scope":6474,"src":"2064:24:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6443,"name":"uint256","nodeType":"ElementaryTypeName","src":"2064:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1908:184:54"},"returnParameters":{"id":6446,"nodeType":"ParameterList","parameters":[],"src":"2093:0:54"},"scope":6750,"src":"1897:451:54","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4045],"body":{"id":6492,"nodeType":"Block","src":"2521:45:54","statements":[{"expression":{"arguments":[{"id":6488,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6478,"src":"2545:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":6489,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6481,"src":"2553:7:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":6487,"name":"_setAssetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6562,"src":"2527:17:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,address[] memory)"}},"id":6490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2527:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6491,"nodeType":"ExpressionStatement","src":"2527:34:54"}]},"documentation":{"id":6475,"nodeType":"StructuredDocumentation","src":"2352:27:54","text":"@inheritdoc IAaveOracle"},"functionSelector":"abfd5310","id":6493,"implemented":true,"kind":"function","modifiers":[{"id":6485,"kind":"modifierInvocation","modifierName":{"id":6484,"name":"onlyAssetListingOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":6428,"src":"2492:28:54"},"nodeType":"ModifierInvocation","src":"2492:28:54"}],"name":"setAssetSources","nameLocation":"2391:15:54","nodeType":"FunctionDefinition","overrides":{"id":6483,"nodeType":"OverrideSpecifier","overrides":[],"src":"2483:8:54"},"parameters":{"id":6482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6478,"mutability":"mutable","name":"assets","nameLocation":"2431:6:54","nodeType":"VariableDeclaration","scope":6493,"src":"2412:25:54","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6476,"name":"address","nodeType":"ElementaryTypeName","src":"2412:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6477,"nodeType":"ArrayTypeName","src":"2412:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6481,"mutability":"mutable","name":"sources","nameLocation":"2462:7:54","nodeType":"VariableDeclaration","scope":6493,"src":"2443:26:54","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6479,"name":"address","nodeType":"ElementaryTypeName","src":"2443:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6480,"nodeType":"ArrayTypeName","src":"2443:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2406:67:54"},"returnParameters":{"id":6486,"nodeType":"ParameterList","parameters":[],"src":"2521:0:54"},"scope":6750,"src":"2382:184:54","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4051],"body":{"id":6506,"nodeType":"Block","src":"2706:45:54","statements":[{"expression":{"arguments":[{"id":6503,"name":"fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6496,"src":"2731:14:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6502,"name":"_setFallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6579,"src":"2712:18:54","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2712:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6505,"nodeType":"ExpressionStatement","src":"2712:34:54"}]},"documentation":{"id":6494,"nodeType":"StructuredDocumentation","src":"2570:27:54","text":"@inheritdoc IAaveOracle"},"functionSelector":"170aee73","id":6507,"implemented":true,"kind":"function","modifiers":[{"id":6500,"kind":"modifierInvocation","modifierName":{"id":6499,"name":"onlyAssetListingOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":6428,"src":"2677:28:54"},"nodeType":"ModifierInvocation","src":"2677:28:54"}],"name":"setFallbackOracle","nameLocation":"2609:17:54","nodeType":"FunctionDefinition","overrides":{"id":6498,"nodeType":"OverrideSpecifier","overrides":[],"src":"2668:8:54"},"parameters":{"id":6497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6496,"mutability":"mutable","name":"fallbackOracle","nameLocation":"2640:14:54","nodeType":"VariableDeclaration","scope":6507,"src":"2632:22:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6495,"name":"address","nodeType":"ElementaryTypeName","src":"2632:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2626:32:54"},"returnParameters":{"id":6501,"nodeType":"ParameterList","parameters":[],"src":"2706:0:54"},"scope":6750,"src":"2600:151:54","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6561,"nodeType":"Block","src":"3026:262:54","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6518,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"3040:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3040:13:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":6520,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6514,"src":"3057:7:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3057:14:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3040:31:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":6523,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3073:6:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":6524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_PARAMS_LENGTH","nodeType":"MemberAccess","referencedDeclaration":14773,"src":"3073:33:54","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":6517,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3032:7:54","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3032:75:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6526,"nodeType":"ExpressionStatement","src":"3032:75:54"},{"body":{"id":6559,"nodeType":"Block","src":"3157:127:54","statements":[{"expression":{"id":6548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6538,"name":"assetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6411,"src":"3165:13:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"}},"id":6542,"indexExpression":{"baseExpression":{"id":6539,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"3179:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6541,"indexExpression":{"id":6540,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6528,"src":"3186:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3179:9:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3165:24:54","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":6544,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6514,"src":"3212:7:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6546,"indexExpression":{"id":6545,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6528,"src":"3220:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3212:10:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6543,"name":"AggregatorInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"3192:19:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AggregatorInterface_$47_$","typeString":"type(contract AggregatorInterface)"}},"id":6547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3192:31:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"src":"3165:58:54","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"id":6549,"nodeType":"ExpressionStatement","src":"3165:58:54"},{"eventCall":{"arguments":[{"baseExpression":{"id":6551,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"3255:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6553,"indexExpression":{"id":6552,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6528,"src":"3262:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3255:9:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":6554,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6514,"src":"3266:7:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6556,"indexExpression":{"id":6555,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6528,"src":"3274:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3266:10:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6550,"name":"AssetSourceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4023,"src":"3236:18:54","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":6557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3236:41:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6558,"nodeType":"EmitStatement","src":"3231:46:54"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6531,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6528,"src":"3133:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6532,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"3137:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3137:13:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3133:17:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6560,"initializationExpression":{"assignments":[6528],"declarations":[{"constant":false,"id":6528,"mutability":"mutable","name":"i","nameLocation":"3126:1:54","nodeType":"VariableDeclaration","scope":6560,"src":"3118:9:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6527,"name":"uint256","nodeType":"ElementaryTypeName","src":"3118:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6530,"initialValue":{"hexValue":"30","id":6529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3130:1:54","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3118:13:54"},"loopExpression":{"expression":{"id":6536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3152:3:54","subExpression":{"id":6535,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6528,"src":"3152:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6537,"nodeType":"ExpressionStatement","src":"3152:3:54"},"nodeType":"ForStatement","src":"3113:171:54"}]},"documentation":{"id":6508,"nodeType":"StructuredDocumentation","src":"2755:181:54","text":" @notice Internal function to set the sources for each asset\n @param assets The addresses of the assets\n @param sources The address of the source of each asset"},"id":6562,"implemented":true,"kind":"function","modifiers":[],"name":"_setAssetsSources","nameLocation":"2948:17:54","nodeType":"FunctionDefinition","parameters":{"id":6515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6511,"mutability":"mutable","name":"assets","nameLocation":"2983:6:54","nodeType":"VariableDeclaration","scope":6562,"src":"2966:23:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6509,"name":"address","nodeType":"ElementaryTypeName","src":"2966:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6510,"nodeType":"ArrayTypeName","src":"2966:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6514,"mutability":"mutable","name":"sources","nameLocation":"3008:7:54","nodeType":"VariableDeclaration","scope":6562,"src":"2991:24:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6512,"name":"address","nodeType":"ElementaryTypeName","src":"2991:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6513,"nodeType":"ArrayTypeName","src":"2991:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2965:51:54"},"returnParameters":{"id":6516,"nodeType":"ParameterList","parameters":[],"src":"3026:0:54"},"scope":6750,"src":"2939:349:54","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6578,"nodeType":"Block","src":"3485:111:54","statements":[{"expression":{"id":6572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6568,"name":"_fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6414,"src":"3491:15:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6570,"name":"fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"3528:14:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6569,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6048,"src":"3509:18:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$6048_$","typeString":"type(contract IPriceOracleGetter)"}},"id":6571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3509:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"src":"3491:52:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"id":6573,"nodeType":"ExpressionStatement","src":"3491:52:54"},{"eventCall":{"arguments":[{"id":6575,"name":"fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"3576:14:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6574,"name":"FallbackOracleUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4028,"src":"3554:21:54","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3554:37:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6577,"nodeType":"EmitStatement","src":"3549:42:54"}]},"documentation":{"id":6563,"nodeType":"StructuredDocumentation","src":"3292:129:54","text":" @notice Internal function to set the fallback oracle\n @param fallbackOracle The address of the fallback oracle"},"id":6579,"implemented":true,"kind":"function","modifiers":[],"name":"_setFallbackOracle","nameLocation":"3433:18:54","nodeType":"FunctionDefinition","parameters":{"id":6566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6565,"mutability":"mutable","name":"fallbackOracle","nameLocation":"3460:14:54","nodeType":"VariableDeclaration","scope":6579,"src":"3452:22:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6564,"name":"address","nodeType":"ElementaryTypeName","src":"3452:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3451:24:54"},"returnParameters":{"id":6567,"nodeType":"ParameterList","parameters":[],"src":"3485:0:54"},"scope":6750,"src":"3424:172:54","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[6047],"body":{"id":6641,"nodeType":"Block","src":"3714:420:54","statements":[{"assignments":[6590],"declarations":[{"constant":false,"id":6590,"mutability":"mutable","name":"source","nameLocation":"3740:6:54","nodeType":"VariableDeclaration","scope":6641,"src":"3720:26:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"},"typeName":{"id":6589,"nodeType":"UserDefinedTypeName","pathNode":{"id":6588,"name":"AggregatorInterface","nodeType":"IdentifierPath","referencedDeclaration":47,"src":"3720:19:54"},"referencedDeclaration":47,"src":"3720:19:54","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"visibility":"internal"}],"id":6594,"initialValue":{"baseExpression":{"id":6591,"name":"assetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6411,"src":"3749:13:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"}},"id":6593,"indexExpression":{"id":6592,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6582,"src":"3763:5:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3749:20:54","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"nodeType":"VariableDeclarationStatement","src":"3720:49:54"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6595,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6582,"src":"3780:5:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6596,"name":"BASE_CURRENCY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6417,"src":"3789:13:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3780:22:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6603,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6590,"src":"3862:6:54","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}],"id":6602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3854:7:54","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6601,"name":"address","nodeType":"ElementaryTypeName","src":"3854:7:54","typeDescriptions":{}}},"id":6604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3854:15:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":6607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3881:1:54","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":6606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3873:7:54","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6605,"name":"address","nodeType":"ElementaryTypeName","src":"3873:7:54","typeDescriptions":{}}},"id":6608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3873:10:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3854:29:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6638,"nodeType":"Block","src":"3949:181:54","statements":[{"assignments":[6617],"declarations":[{"constant":false,"id":6617,"mutability":"mutable","name":"price","nameLocation":"3964:5:54","nodeType":"VariableDeclaration","scope":6638,"src":"3957:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6616,"name":"int256","nodeType":"ElementaryTypeName","src":"3957:6:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6621,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6618,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6590,"src":"3972:6:54","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"id":6619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":6,"src":"3972:19:54","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":6620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3972:21:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"3957:36:54"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6622,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6617,"src":"4005:5:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4013:1:54","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4005:9:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6636,"nodeType":"Block","src":"4062:62:54","statements":[{"expression":{"arguments":[{"id":6633,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6582,"src":"4109:5:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6631,"name":"_fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6414,"src":"4079:15:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"id":6632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":6047,"src":"4079:29:54","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4079:36:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6587,"id":6635,"nodeType":"Return","src":"4072:43:54"}]},"id":6637,"nodeType":"IfStatement","src":"4001:123:54","trueBody":{"id":6630,"nodeType":"Block","src":"4016:40:54","statements":[{"expression":{"arguments":[{"id":6627,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6617,"src":"4041:5:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4033:7:54","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6625,"name":"uint256","nodeType":"ElementaryTypeName","src":"4033:7:54","typeDescriptions":{}}},"id":6628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4033:14:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6587,"id":6629,"nodeType":"Return","src":"4026:21:54"}]}}]},"id":6639,"nodeType":"IfStatement","src":"3850:280:54","trueBody":{"id":6615,"nodeType":"Block","src":"3885:58:54","statements":[{"expression":{"arguments":[{"id":6612,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6582,"src":"3930:5:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6610,"name":"_fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6414,"src":"3900:15:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"id":6611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":6047,"src":"3900:29:54","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3900:36:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6587,"id":6614,"nodeType":"Return","src":"3893:43:54"}]}},"id":6640,"nodeType":"IfStatement","src":"3776:354:54","trueBody":{"id":6600,"nodeType":"Block","src":"3804:40:54","statements":[{"expression":{"id":6598,"name":"BASE_CURRENCY_UNIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6420,"src":"3819:18:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6587,"id":6599,"nodeType":"Return","src":"3812:25:54"}]}}]},"documentation":{"id":6580,"nodeType":"StructuredDocumentation","src":"3600:34:54","text":"@inheritdoc IPriceOracleGetter"},"functionSelector":"b3596f07","id":6642,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetPrice","nameLocation":"3646:13:54","nodeType":"FunctionDefinition","overrides":{"id":6584,"nodeType":"OverrideSpecifier","overrides":[],"src":"3687:8:54"},"parameters":{"id":6583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6582,"mutability":"mutable","name":"asset","nameLocation":"3668:5:54","nodeType":"VariableDeclaration","scope":6642,"src":"3660:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6581,"name":"address","nodeType":"ElementaryTypeName","src":"3660:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3659:15:54"},"returnParameters":{"id":6587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6586,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6642,"src":"3705:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6585,"name":"uint256","nodeType":"ElementaryTypeName","src":"3705:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3704:9:54"},"scope":6750,"src":"3637:497:54","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[4061],"body":{"id":6690,"nodeType":"Block","src":"4278:184:54","statements":[{"assignments":[6657],"declarations":[{"constant":false,"id":6657,"mutability":"mutable","name":"prices","nameLocation":"4301:6:54","nodeType":"VariableDeclaration","scope":6690,"src":"4284:23:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6655,"name":"uint256","nodeType":"ElementaryTypeName","src":"4284:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6656,"nodeType":"ArrayTypeName","src":"4284:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":6664,"initialValue":{"arguments":[{"expression":{"id":6661,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6646,"src":"4324:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":6662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4324:13:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4310:13:54","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":6658,"name":"uint256","nodeType":"ElementaryTypeName","src":"4314:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6659,"nodeType":"ArrayTypeName","src":"4314:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":6663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4310:28:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4284:54:54"},{"body":{"id":6686,"nodeType":"Block","src":"4388:51:54","statements":[{"expression":{"id":6684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6676,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"4396:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6678,"indexExpression":{"id":6677,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6666,"src":"4403:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4396:9:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":6680,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6646,"src":"4422:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":6682,"indexExpression":{"id":6681,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6666,"src":"4429:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4422:9:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6679,"name":"getAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6642,"src":"4408:13:54","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":6683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4408:24:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4396:36:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6685,"nodeType":"ExpressionStatement","src":"4396:36:54"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6666,"src":"4364:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6670,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6646,"src":"4368:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":6671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4368:13:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4364:17:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6687,"initializationExpression":{"assignments":[6666],"declarations":[{"constant":false,"id":6666,"mutability":"mutable","name":"i","nameLocation":"4357:1:54","nodeType":"VariableDeclaration","scope":6687,"src":"4349:9:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6665,"name":"uint256","nodeType":"ElementaryTypeName","src":"4349:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6668,"initialValue":{"hexValue":"30","id":6667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4361:1:54","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4349:13:54"},"loopExpression":{"expression":{"id":6674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4383:3:54","subExpression":{"id":6673,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6666,"src":"4383:1:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6675,"nodeType":"ExpressionStatement","src":"4383:3:54"},"nodeType":"ForStatement","src":"4344:95:54"},{"expression":{"id":6688,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"4451:6:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":6652,"id":6689,"nodeType":"Return","src":"4444:13:54"}]},"documentation":{"id":6643,"nodeType":"StructuredDocumentation","src":"4138:27:54","text":"@inheritdoc IAaveOracle"},"functionSelector":"9d23d9f2","id":6691,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetsPrices","nameLocation":"4177:15:54","nodeType":"FunctionDefinition","overrides":{"id":6648,"nodeType":"OverrideSpecifier","overrides":[],"src":"4242:8:54"},"parameters":{"id":6647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6646,"mutability":"mutable","name":"assets","nameLocation":"4217:6:54","nodeType":"VariableDeclaration","scope":6691,"src":"4198:25:54","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6644,"name":"address","nodeType":"ElementaryTypeName","src":"4198:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6645,"nodeType":"ArrayTypeName","src":"4198:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4192:35:54"},"returnParameters":{"id":6652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6651,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6691,"src":"4260:16:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6649,"name":"uint256","nodeType":"ElementaryTypeName","src":"4260:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6650,"nodeType":"ArrayTypeName","src":"4260:9:54","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4259:18:54"},"scope":6750,"src":"4168:294:54","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4069],"body":{"id":6707,"nodeType":"Block","src":"4578:47:54","statements":[{"expression":{"arguments":[{"baseExpression":{"id":6702,"name":"assetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6411,"src":"4599:13:54","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"}},"id":6704,"indexExpression":{"id":6703,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6694,"src":"4613:5:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4599:20:54","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}],"id":6701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4591:7:54","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6700,"name":"address","nodeType":"ElementaryTypeName","src":"4591:7:54","typeDescriptions":{}}},"id":6705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4591:29:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6699,"id":6706,"nodeType":"Return","src":"4584:36:54"}]},"documentation":{"id":6692,"nodeType":"StructuredDocumentation","src":"4466:27:54","text":"@inheritdoc IAaveOracle"},"functionSelector":"92bf2be0","id":6708,"implemented":true,"kind":"function","modifiers":[],"name":"getSourceOfAsset","nameLocation":"4505:16:54","nodeType":"FunctionDefinition","overrides":{"id":6696,"nodeType":"OverrideSpecifier","overrides":[],"src":"4551:8:54"},"parameters":{"id":6695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6694,"mutability":"mutable","name":"asset","nameLocation":"4530:5:54","nodeType":"VariableDeclaration","scope":6708,"src":"4522:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6693,"name":"address","nodeType":"ElementaryTypeName","src":"4522:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4521:15:54"},"returnParameters":{"id":6699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6698,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6708,"src":"4569:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6697,"name":"address","nodeType":"ElementaryTypeName","src":"4569:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4568:9:54"},"scope":6750,"src":"4496:129:54","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4075],"body":{"id":6719,"nodeType":"Block","src":"4720:42:54","statements":[{"expression":{"arguments":[{"id":6716,"name":"_fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6414,"src":"4741:15:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}],"id":6715,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4733:7:54","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6714,"name":"address","nodeType":"ElementaryTypeName","src":"4733:7:54","typeDescriptions":{}}},"id":6717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4733:24:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6713,"id":6718,"nodeType":"Return","src":"4726:31:54"}]},"documentation":{"id":6709,"nodeType":"StructuredDocumentation","src":"4629:27:54","text":"@inheritdoc IAaveOracle"},"functionSelector":"6210308c","id":6720,"implemented":true,"kind":"function","modifiers":[],"name":"getFallbackOracle","nameLocation":"4668:17:54","nodeType":"FunctionDefinition","parameters":{"id":6710,"nodeType":"ParameterList","parameters":[],"src":"4685:2:54"},"returnParameters":{"id":6713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6720,"src":"4711:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6711,"name":"address","nodeType":"ElementaryTypeName","src":"4711:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4710:9:54"},"scope":6750,"src":"4659:103:54","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":6748,"nodeType":"Block","src":"4821:243:54","statements":[{"assignments":[6725],"declarations":[{"constant":false,"id":6725,"mutability":"mutable","name":"aclManager","nameLocation":"4839:10:54","nodeType":"VariableDeclaration","scope":6748,"src":"4827:22:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":6724,"nodeType":"UserDefinedTypeName","pathNode":{"id":6723,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"4827:11:54"},"referencedDeclaration":3843,"src":"4827:11:54","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":6731,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6727,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6406,"src":"4864:18:54","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":6728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"4864:32:54","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4864:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6726,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"4852:11:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":6730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4852:47:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"4827:72:54"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":6735,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4951:3:54","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4951:10:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6733,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"4920:10:54","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":6734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isAssetListingAdmin","nodeType":"MemberAccess","referencedDeclaration":3842,"src":"4920:30:54","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":6737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4920:42:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":6740,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4989:3:54","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4989:10:54","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6738,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"4966:10:54","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":6739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"4966:22:54","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":6742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4966:34:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4920:80:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":6744,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5008:6:54","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":6745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14563,"src":"5008:45:54","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":6732,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4905:7:54","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4905:154:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6747,"nodeType":"ExpressionStatement","src":"4905:154:54"}]},"id":6749,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyAssetListingOrPoolAdmins","nameLocation":"4775:29:54","nodeType":"FunctionDefinition","parameters":{"id":6721,"nodeType":"ParameterList","parameters":[],"src":"4804:2:54"},"returnParameters":{"id":6722,"nodeType":"ParameterList","parameters":[],"src":"4821:0:54"},"scope":6750,"src":"4766:298:54","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6751,"src":"824:4242:54","usedErrors":[]}],"src":"37:5030:54"},"id":54},"contracts/misc/AaveProtocolDataProvider.sol":{"ast":{"absolutePath":"contracts/misc/AaveProtocolDataProvider.sol","exportedSymbols":{"AaveProtocolDataProvider":[7634],"DataTypes":[24227],"IERC20Detailed":[1464],"IPool":[5073],"IPoolAddressesProvider":[5282],"IPoolDataProvider":[6004],"IStableDebtToken":[6340],"IVariableDebtToken":[6386],"ReserveConfiguration":[14034],"UserConfiguration":[14545],"WadRayMath":[23813]},"id":7635,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":6752,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:55"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"../dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":6754,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":1465,"src":"63:89:55","symbolAliases":[{"foreign":{"id":6753,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:14:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../protocol/libraries/configuration/ReserveConfiguration.sol","id":6756,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":14035,"src":"153:98:55","symbolAliases":[{"foreign":{"id":6755,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"161:20:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../protocol/libraries/configuration/UserConfiguration.sol","id":6758,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":14546,"src":"252:92:55","symbolAliases":[{"foreign":{"id":6757,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"260:17:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../protocol/libraries/types/DataTypes.sol","id":6760,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":24228,"src":"345:68:55","symbolAliases":[{"foreign":{"id":6759,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"353:9:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../protocol/libraries/math/WadRayMath.sol","id":6762,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":23814,"src":"414:69:55","symbolAliases":[{"foreign":{"id":6761,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"422:10:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../interfaces/IPoolAddressesProvider.sol","id":6764,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":5283,"src":"484:80:55","symbolAliases":[{"foreign":{"id":6763,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"492:22:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IStableDebtToken.sol","file":"../interfaces/IStableDebtToken.sol","id":6766,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":6341,"src":"565:68:55","symbolAliases":[{"foreign":{"id":6765,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"573:16:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IVariableDebtToken.sol","file":"../interfaces/IVariableDebtToken.sol","id":6768,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":6387,"src":"634:72:55","symbolAliases":[{"foreign":{"id":6767,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"642:18:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../interfaces/IPool.sol","id":6770,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":5074,"src":"707:46:55","symbolAliases":[{"foreign":{"id":6769,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"715:5:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolDataProvider.sol","file":"../interfaces/IPoolDataProvider.sol","id":6772,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7635,"sourceUnit":6005,"src":"754:70:55","symbolAliases":[{"foreign":{"id":6771,"name":"IPoolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"762:17:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6774,"name":"IPoolDataProvider","nodeType":"IdentifierPath","referencedDeclaration":6004,"src":"1007:17:55"},"id":6775,"nodeType":"InheritanceSpecifier","src":"1007:17:55"}],"canonicalName":"AaveProtocolDataProvider","contractDependencies":[],"contractKind":"contract","documentation":{"id":6773,"nodeType":"StructuredDocumentation","src":"826:143:55","text":" @title AaveProtocolDataProvider\n @author Aave\n @notice Peripheral contract to collect and pre-process information from the Pool."},"fullyImplemented":true,"id":7634,"linearizedBaseContracts":[7634,6004],"name":"AaveProtocolDataProvider","nameLocation":"979:24:55","nodeType":"ContractDefinition","nodes":[{"id":6779,"libraryName":{"id":6776,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1035:20:55"},"nodeType":"UsingForDirective","src":"1029:65:55","typeName":{"id":6778,"nodeType":"UserDefinedTypeName","pathNode":{"id":6777,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1060:33:55"},"referencedDeclaration":23912,"src":"1060:33:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":6783,"libraryName":{"id":6780,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"1103:17:55"},"nodeType":"UsingForDirective","src":"1097:59:55","typeName":{"id":6782,"nodeType":"UserDefinedTypeName","pathNode":{"id":6781,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"1125:30:55"},"referencedDeclaration":23916,"src":"1125:30:55","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":6786,"libraryName":{"id":6784,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1165:10:55"},"nodeType":"UsingForDirective","src":"1159:29:55","typeName":{"id":6785,"name":"uint256","nodeType":"ElementaryTypeName","src":"1180:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"id":6789,"mutability":"constant","name":"MKR","nameLocation":"1209:3:55","nodeType":"VariableDeclaration","scope":7634,"src":"1192:65:55","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6787,"name":"address","nodeType":"ElementaryTypeName","src":"1192:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307839663846373261413933303463384235393364353535463132654636353839634333413537394132","id":6788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1215:42:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2"},"visibility":"internal"},{"constant":true,"id":6792,"mutability":"constant","name":"ETH","nameLocation":"1278:3:55","nodeType":"VariableDeclaration","scope":7634,"src":"1261:65:55","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6790,"name":"address","nodeType":"ElementaryTypeName","src":"1261:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307845656565654565656545654565654565456545656545454565656565456565656565656545456545","id":6791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1284:42:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"},"visibility":"internal"},{"baseFunctions":[5797],"constant":false,"documentation":{"id":6793,"nodeType":"StructuredDocumentation","src":"1331:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"0542975c","id":6796,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"1407:18:55","nodeType":"VariableDeclaration","scope":7634,"src":"1367:58:55","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6795,"nodeType":"UserDefinedTypeName","pathNode":{"id":6794,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1367:22:55"},"referencedDeclaration":5282,"src":"1367:22:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"body":{"id":6807,"nodeType":"Block","src":"1601:49:55","statements":[{"expression":{"id":6805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6803,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"1607:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6804,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6800,"src":"1628:17:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"1607:38:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":6806,"nodeType":"ExpressionStatement","src":"1607:38:55"}]},"documentation":{"id":6797,"nodeType":"StructuredDocumentation","src":"1430:114:55","text":" @notice Constructor\n @param addressesProvider The address of the PoolAddressesProvider contract"},"id":6808,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6800,"mutability":"mutable","name":"addressesProvider","nameLocation":"1582:17:55","nodeType":"VariableDeclaration","scope":6808,"src":"1559:40:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6799,"nodeType":"UserDefinedTypeName","pathNode":{"id":6798,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1559:22:55"},"referencedDeclaration":5282,"src":"1559:22:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1558:42:55"},"returnParameters":{"id":6802,"nodeType":"ParameterList","parameters":[],"src":"1601:0:55"},"scope":7634,"src":"1547:103:55","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5805],"body":{"id":6918,"nodeType":"Block","src":"1774:692:55","statements":[{"assignments":[6819],"declarations":[{"constant":false,"id":6819,"mutability":"mutable","name":"pool","nameLocation":"1786:4:55","nodeType":"VariableDeclaration","scope":6918,"src":"1780:10:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":6818,"nodeType":"UserDefinedTypeName","pathNode":{"id":6817,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1780:5:55"},"referencedDeclaration":5073,"src":"1780:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"id":6825,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6821,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"1799:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":6822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"1799:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1799:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6820,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"1793:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":6824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1793:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"1780:48:55"},{"assignments":[6830],"declarations":[{"constant":false,"id":6830,"mutability":"mutable","name":"reserves","nameLocation":"1851:8:55","nodeType":"VariableDeclaration","scope":6918,"src":"1834:25:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6828,"name":"address","nodeType":"ElementaryTypeName","src":"1834:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6829,"nodeType":"ArrayTypeName","src":"1834:9:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":6834,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6831,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6819,"src":"1862:4:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":6832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"1862:20:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":6833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1862:22:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1834:50:55"},{"assignments":[6839],"declarations":[{"constant":false,"id":6839,"mutability":"mutable","name":"reservesTokens","nameLocation":"1909:14:55","nodeType":"VariableDeclaration","scope":6918,"src":"1890:33:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":6837,"nodeType":"UserDefinedTypeName","pathNode":{"id":6836,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5790,"src":"1890:9:55"},"referencedDeclaration":5790,"src":"1890:9:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6838,"nodeType":"ArrayTypeName","src":"1890:11:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"id":6847,"initialValue":{"arguments":[{"expression":{"id":6844,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"1942:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1942:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1926:15:55","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IPoolDataProvider.TokenData memory[] memory)"},"typeName":{"baseType":{"id":6841,"nodeType":"UserDefinedTypeName","pathNode":{"id":6840,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5790,"src":"1930:9:55"},"referencedDeclaration":5790,"src":"1930:9:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6842,"nodeType":"ArrayTypeName","src":"1930:11:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}}},"id":6846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1926:32:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1890:68:55"},{"body":{"id":6914,"nodeType":"Block","src":"2010:425:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":6859,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"2022:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6861,"indexExpression":{"id":6860,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2031:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2022:11:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6862,"name":"MKR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6789,"src":"2037:3:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2022:18:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6877,"nodeType":"IfStatement","src":"2018:134:55","trueBody":{"id":6876,"nodeType":"Block","src":"2042:110:55","statements":[{"expression":{"id":6873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6864,"name":"reservesTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6839,"src":"2052:14:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"id":6866,"indexExpression":{"id":6865,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2067:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2052:17:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"4d4b52","id":6868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2091:5:55","typeDescriptions":{"typeIdentifier":"t_stringliteral_ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd6381222192020","typeString":"literal_string \"MKR\""},"value":"MKR"},{"baseExpression":{"id":6869,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"2112:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6871,"indexExpression":{"id":6870,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2121:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2112:11:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd6381222192020","typeString":"literal_string \"MKR\""},{"typeIdentifier":"t_address","typeString":"address"}],"id":6867,"name":"TokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5790,"src":"2072:9:55","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenData_$5790_storage_ptr_$","typeString":"type(struct IPoolDataProvider.TokenData storage pointer)"}},"id":6872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["symbol","tokenAddress"],"nodeType":"FunctionCall","src":"2072:53:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"src":"2052:73:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"id":6874,"nodeType":"ExpressionStatement","src":"2052:73:55"},{"id":6875,"nodeType":"Continue","src":"2135:8:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":6878,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"2163:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6880,"indexExpression":{"id":6879,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2172:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2163:11:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6881,"name":"ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6792,"src":"2178:3:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2163:18:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6896,"nodeType":"IfStatement","src":"2159:134:55","trueBody":{"id":6895,"nodeType":"Block","src":"2183:110:55","statements":[{"expression":{"id":6892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6883,"name":"reservesTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6839,"src":"2193:14:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"id":6885,"indexExpression":{"id":6884,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2208:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2193:17:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"455448","id":6887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2232:5:55","typeDescriptions":{"typeIdentifier":"t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4","typeString":"literal_string \"ETH\""},"value":"ETH"},{"baseExpression":{"id":6888,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"2253:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6890,"indexExpression":{"id":6889,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2262:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2253:11:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4","typeString":"literal_string \"ETH\""},{"typeIdentifier":"t_address","typeString":"address"}],"id":6886,"name":"TokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5790,"src":"2213:9:55","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenData_$5790_storage_ptr_$","typeString":"type(struct IPoolDataProvider.TokenData storage pointer)"}},"id":6891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["symbol","tokenAddress"],"nodeType":"FunctionCall","src":"2213:53:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"src":"2193:73:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"id":6893,"nodeType":"ExpressionStatement","src":"2193:73:55"},{"id":6894,"nodeType":"Continue","src":"2276:8:55"}]}},{"expression":{"id":6912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6897,"name":"reservesTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6839,"src":"2300:14:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"id":6899,"indexExpression":{"id":6898,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2315:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2300:17:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"baseExpression":{"id":6902,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"2363:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6904,"indexExpression":{"id":6903,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2372:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2363:11:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6901,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"2348:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":6905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2348:27:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":6906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"2348:34:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":6907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2348:36:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"baseExpression":{"id":6908,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"2408:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6910,"indexExpression":{"id":6909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2417:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2408:11:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6900,"name":"TokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5790,"src":"2320:9:55","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenData_$5790_storage_ptr_$","typeString":"type(struct IPoolDataProvider.TokenData storage pointer)"}},"id":6911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["symbol","tokenAddress"],"nodeType":"FunctionCall","src":"2320:108:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"src":"2300:128:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"id":6913,"nodeType":"ExpressionStatement","src":"2300:128:55"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6852,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"1984:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6853,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"1988:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1988:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1984:19:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6915,"initializationExpression":{"assignments":[6849],"declarations":[{"constant":false,"id":6849,"mutability":"mutable","name":"i","nameLocation":"1977:1:55","nodeType":"VariableDeclaration","scope":6915,"src":"1969:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6848,"name":"uint256","nodeType":"ElementaryTypeName","src":"1969:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6851,"initialValue":{"hexValue":"30","id":6850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1981:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1969:13:55"},"loopExpression":{"expression":{"id":6857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2005:3:55","subExpression":{"id":6856,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6849,"src":"2005:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6858,"nodeType":"ExpressionStatement","src":"2005:3:55"},"nodeType":"ForStatement","src":"1964:471:55"},{"expression":{"id":6916,"name":"reservesTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6839,"src":"2447:14:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"functionReturnParameters":6816,"id":6917,"nodeType":"Return","src":"2440:21:55"}]},"documentation":{"id":6809,"nodeType":"StructuredDocumentation","src":"1654:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"b316ff89","id":6919,"implemented":true,"kind":"function","modifiers":[],"name":"getAllReservesTokens","nameLocation":"1699:20:55","nodeType":"FunctionDefinition","overrides":{"id":6811,"nodeType":"OverrideSpecifier","overrides":[],"src":"1736:8:55"},"parameters":{"id":6810,"nodeType":"ParameterList","parameters":[],"src":"1719:2:55"},"returnParameters":{"id":6816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6815,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6919,"src":"1754:18:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":6813,"nodeType":"UserDefinedTypeName","pathNode":{"id":6812,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5790,"src":"1754:9:55"},"referencedDeclaration":5790,"src":"1754:9:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6814,"nodeType":"ArrayTypeName","src":"1754:11:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"src":"1753:20:55"},"scope":7634,"src":"1690:776:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5813],"body":{"id":7001,"nodeType":"Block","src":"2583:500:55","statements":[{"assignments":[6930],"declarations":[{"constant":false,"id":6930,"mutability":"mutable","name":"pool","nameLocation":"2595:4:55","nodeType":"VariableDeclaration","scope":7001,"src":"2589:10:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":6929,"nodeType":"UserDefinedTypeName","pathNode":{"id":6928,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"2589:5:55"},"referencedDeclaration":5073,"src":"2589:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"id":6936,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6932,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"2608:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":6933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"2608:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2608:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6931,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"2602:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":6935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2602:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"2589:48:55"},{"assignments":[6941],"declarations":[{"constant":false,"id":6941,"mutability":"mutable","name":"reserves","nameLocation":"2660:8:55","nodeType":"VariableDeclaration","scope":7001,"src":"2643:25:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6939,"name":"address","nodeType":"ElementaryTypeName","src":"2643:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6940,"nodeType":"ArrayTypeName","src":"2643:9:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":6945,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6942,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6930,"src":"2671:4:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":6943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"2671:20:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":6944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2671:22:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2643:50:55"},{"assignments":[6950],"declarations":[{"constant":false,"id":6950,"mutability":"mutable","name":"aTokens","nameLocation":"2718:7:55","nodeType":"VariableDeclaration","scope":7001,"src":"2699:26:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":6948,"nodeType":"UserDefinedTypeName","pathNode":{"id":6947,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5790,"src":"2699:9:55"},"referencedDeclaration":5790,"src":"2699:9:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6949,"nodeType":"ArrayTypeName","src":"2699:11:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"id":6958,"initialValue":{"arguments":[{"expression":{"id":6955,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"2744:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2744:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6954,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2728:15:55","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IPoolDataProvider.TokenData memory[] memory)"},"typeName":{"baseType":{"id":6952,"nodeType":"UserDefinedTypeName","pathNode":{"id":6951,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5790,"src":"2732:9:55"},"referencedDeclaration":5790,"src":"2732:9:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6953,"nodeType":"ArrayTypeName","src":"2732:11:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}}},"id":6957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2728:32:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2699:61:55"},{"body":{"id":6997,"nodeType":"Block","src":"2812:247:55","statements":[{"assignments":[6974],"declarations":[{"constant":false,"id":6974,"mutability":"mutable","name":"reserveData","nameLocation":"2849:11:55","nodeType":"VariableDeclaration","scope":6997,"src":"2820:40:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":6973,"nodeType":"UserDefinedTypeName","pathNode":{"id":6972,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2820:21:55"},"referencedDeclaration":23909,"src":"2820:21:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":6981,"initialValue":{"arguments":[{"baseExpression":{"id":6977,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"2883:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6979,"indexExpression":{"id":6978,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6960,"src":"2892:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2883:11:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6975,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6930,"src":"2863:4:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":6976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"2863:19:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":6980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2863:32:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"2820:75:55"},{"expression":{"id":6995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6982,"name":"aTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6950,"src":"2903:7:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"id":6984,"indexExpression":{"id":6983,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6960,"src":"2911:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2903:10:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":6987,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6974,"src":"2959:11:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":6988,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"2959:25:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6986,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"2944:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":6989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2944:41:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":6990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"2944:48:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":6991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2944:50:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"expression":{"id":6992,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6974,"src":"3018:11:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":6993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"3018:25:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6985,"name":"TokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5790,"src":"2916:9:55","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenData_$5790_storage_ptr_$","typeString":"type(struct IPoolDataProvider.TokenData storage pointer)"}},"id":6994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["symbol","tokenAddress"],"nodeType":"FunctionCall","src":"2916:136:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"src":"2903:149:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"id":6996,"nodeType":"ExpressionStatement","src":"2903:149:55"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6963,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6960,"src":"2786:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6964,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"2790:8:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2790:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2786:19:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6998,"initializationExpression":{"assignments":[6960],"declarations":[{"constant":false,"id":6960,"mutability":"mutable","name":"i","nameLocation":"2779:1:55","nodeType":"VariableDeclaration","scope":6998,"src":"2771:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6959,"name":"uint256","nodeType":"ElementaryTypeName","src":"2771:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6962,"initialValue":{"hexValue":"30","id":6961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2783:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2771:13:55"},"loopExpression":{"expression":{"id":6968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2807:3:55","subExpression":{"id":6967,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6960,"src":"2807:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6969,"nodeType":"ExpressionStatement","src":"2807:3:55"},"nodeType":"ForStatement","src":"2766:293:55"},{"expression":{"id":6999,"name":"aTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6950,"src":"3071:7:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"functionReturnParameters":6927,"id":7000,"nodeType":"Return","src":"3064:14:55"}]},"documentation":{"id":6920,"nodeType":"StructuredDocumentation","src":"2470:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"f561ae41","id":7002,"implemented":true,"kind":"function","modifiers":[],"name":"getAllATokens","nameLocation":"2515:13:55","nodeType":"FunctionDefinition","overrides":{"id":6922,"nodeType":"OverrideSpecifier","overrides":[],"src":"2545:8:55"},"parameters":{"id":6921,"nodeType":"ParameterList","parameters":[],"src":"2528:2:55"},"returnParameters":{"id":6927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6926,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7002,"src":"2563:18:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":6924,"nodeType":"UserDefinedTypeName","pathNode":{"id":6923,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5790,"src":"2563:9:55"},"referencedDeclaration":5790,"src":"2563:9:55","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5790_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6925,"nodeType":"ArrayTypeName","src":"2563:11:55","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5790_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"src":"2562:20:55"},"scope":7634,"src":"2506:577:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5839],"body":{"id":7070,"nodeType":"Block","src":"3523:406:55","statements":[{"assignments":[7033],"declarations":[{"constant":false,"id":7033,"mutability":"mutable","name":"configuration","nameLocation":"3570:13:55","nodeType":"VariableDeclaration","scope":7070,"src":"3529:54:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7032,"nodeType":"UserDefinedTypeName","pathNode":{"id":7031,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"3529:33:55"},"referencedDeclaration":23912,"src":"3529:33:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7042,"initialValue":{"arguments":[{"id":7040,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7005,"src":"3646:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7035,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"3592:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"3592:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3592:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7034,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"3586:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3586:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"3586:59:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3586:66:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"3529:123:55"},{"expression":{"id":7052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":7043,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7011,"src":"3660:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7044,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7013,"src":"3665:20:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7045,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7015,"src":"3687:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7046,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7009,"src":"3705:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7047,"name":"reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7017,"src":"3715:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":7048,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3659:72:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$__$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7049,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7033,"src":"3734:13:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7050,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":14000,"src":"3734:30:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":7051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3734:32:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"src":"3659:107:55","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7053,"nodeType":"ExpressionStatement","src":"3659:107:55"},{"expression":{"id":7062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":7054,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7025,"src":"3774:8:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7055,"name":"isFrozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7027,"src":"3784:8:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7056,"name":"borrowingEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7021,"src":"3794:16:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7057,"name":"stableBorrowRateEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7023,"src":"3812:23:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},null],"id":7058,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3773:65:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$__$","typeString":"tuple(bool,bool,bool,bool,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7059,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7033,"src":"3841:13:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"3841:22:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":7061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3841:24:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"3773:92:55","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7063,"nodeType":"ExpressionStatement","src":"3773:92:55"},{"expression":{"id":7068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7064,"name":"usageAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7019,"src":"3872:24:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7065,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7013,"src":"3899:20:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3923:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3899:25:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3872:52:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7069,"nodeType":"ExpressionStatement","src":"3872:52:55"}]},"documentation":{"id":7003,"nodeType":"StructuredDocumentation","src":"3087:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"3e150141","id":7071,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveConfigurationData","nameLocation":"3132:27:55","nodeType":"FunctionDefinition","overrides":{"id":7007,"nodeType":"OverrideSpecifier","overrides":[],"src":"3209:8:55"},"parameters":{"id":7006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7005,"mutability":"mutable","name":"asset","nameLocation":"3173:5:55","nodeType":"VariableDeclaration","scope":7071,"src":"3165:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7004,"name":"address","nodeType":"ElementaryTypeName","src":"3165:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3159:23:55"},"returnParameters":{"id":7028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7009,"mutability":"mutable","name":"decimals","nameLocation":"3246:8:55","nodeType":"VariableDeclaration","scope":7071,"src":"3238:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7008,"name":"uint256","nodeType":"ElementaryTypeName","src":"3238:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7011,"mutability":"mutable","name":"ltv","nameLocation":"3270:3:55","nodeType":"VariableDeclaration","scope":7071,"src":"3262:11:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7010,"name":"uint256","nodeType":"ElementaryTypeName","src":"3262:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7013,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"3289:20:55","nodeType":"VariableDeclaration","scope":7071,"src":"3281:28:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7012,"name":"uint256","nodeType":"ElementaryTypeName","src":"3281:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7015,"mutability":"mutable","name":"liquidationBonus","nameLocation":"3325:16:55","nodeType":"VariableDeclaration","scope":7071,"src":"3317:24:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7014,"name":"uint256","nodeType":"ElementaryTypeName","src":"3317:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7017,"mutability":"mutable","name":"reserveFactor","nameLocation":"3357:13:55","nodeType":"VariableDeclaration","scope":7071,"src":"3349:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7016,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7019,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"3383:24:55","nodeType":"VariableDeclaration","scope":7071,"src":"3378:29:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7018,"name":"bool","nodeType":"ElementaryTypeName","src":"3378:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7021,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"3420:16:55","nodeType":"VariableDeclaration","scope":7071,"src":"3415:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7020,"name":"bool","nodeType":"ElementaryTypeName","src":"3415:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7023,"mutability":"mutable","name":"stableBorrowRateEnabled","nameLocation":"3449:23:55","nodeType":"VariableDeclaration","scope":7071,"src":"3444:28:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7022,"name":"bool","nodeType":"ElementaryTypeName","src":"3444:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7025,"mutability":"mutable","name":"isActive","nameLocation":"3485:8:55","nodeType":"VariableDeclaration","scope":7071,"src":"3480:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7024,"name":"bool","nodeType":"ElementaryTypeName","src":"3480:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7027,"mutability":"mutable","name":"isFrozen","nameLocation":"3506:8:55","nodeType":"VariableDeclaration","scope":7071,"src":"3501:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7026,"name":"bool","nodeType":"ElementaryTypeName","src":"3501:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3230:290:55"},"scope":7634,"src":"3123:806:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5847],"body":{"id":7098,"nodeType":"Block","src":"4058:179:55","statements":[{"assignments":[7084],"declarations":[{"constant":false,"id":7084,"mutability":"mutable","name":"configuration","nameLocation":"4105:13:55","nodeType":"VariableDeclaration","scope":7098,"src":"4064:54:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7083,"nodeType":"UserDefinedTypeName","pathNode":{"id":7082,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"4064:33:55"},"referencedDeclaration":23912,"src":"4064:33:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7093,"initialValue":{"arguments":[{"id":7091,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7074,"src":"4181:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7086,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"4127:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"4127:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4127:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7085,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"4121:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4121:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"4121:59:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4121:66:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"4064:123:55"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7094,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7084,"src":"4200:13:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7095,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13824,"src":"4200:30:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4200:32:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7079,"id":7097,"nodeType":"Return","src":"4193:39:55"}]},"documentation":{"id":7072,"nodeType":"StructuredDocumentation","src":"3933:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"163a0f20","id":7099,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveEModeCategory","nameLocation":"3978:23:55","nodeType":"FunctionDefinition","overrides":{"id":7076,"nodeType":"OverrideSpecifier","overrides":[],"src":"4031:8:55"},"parameters":{"id":7075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7074,"mutability":"mutable","name":"asset","nameLocation":"4010:5:55","nodeType":"VariableDeclaration","scope":7099,"src":"4002:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7073,"name":"address","nodeType":"ElementaryTypeName","src":"4002:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4001:15:55"},"returnParameters":{"id":7079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7078,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7099,"src":"4049:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7077,"name":"uint256","nodeType":"ElementaryTypeName","src":"4049:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4048:9:55"},"scope":7634,"src":"3969:268:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5857],"body":{"id":7125,"nodeType":"Block","src":"4394:105:55","statements":[{"expression":{"id":7123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":7110,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7106,"src":"4401:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7111,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7108,"src":"4412:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7112,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4400:22:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7119,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7102,"src":"4478:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7114,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"4431:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"4431:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4431:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7113,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"4425:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4425:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"4425:52:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4425:59:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getCaps","nodeType":"MemberAccess","referencedDeclaration":14033,"src":"4425:67:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256)"}},"id":7122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4425:69:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"4400:94:55","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7124,"nodeType":"ExpressionStatement","src":"4400:94:55"}]},"documentation":{"id":7100,"nodeType":"StructuredDocumentation","src":"4241:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"46fbe558","id":7126,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveCaps","nameLocation":"4286:14:55","nodeType":"FunctionDefinition","overrides":{"id":7104,"nodeType":"OverrideSpecifier","overrides":[],"src":"4338:8:55"},"parameters":{"id":7103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7102,"mutability":"mutable","name":"asset","nameLocation":"4314:5:55","nodeType":"VariableDeclaration","scope":7126,"src":"4306:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7101,"name":"address","nodeType":"ElementaryTypeName","src":"4306:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4300:23:55"},"returnParameters":{"id":7109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7106,"mutability":"mutable","name":"borrowCap","nameLocation":"4364:9:55","nodeType":"VariableDeclaration","scope":7126,"src":"4356:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7105,"name":"uint256","nodeType":"ElementaryTypeName","src":"4356:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7108,"mutability":"mutable","name":"supplyCap","nameLocation":"4383:9:55","nodeType":"VariableDeclaration","scope":7126,"src":"4375:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7107,"name":"uint256","nodeType":"ElementaryTypeName","src":"4375:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4355:38:55"},"scope":7634,"src":"4277:222:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5865],"body":{"id":7149,"nodeType":"Block","src":"4620:102:55","statements":[{"expression":{"id":7147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,null,null,null,{"id":7135,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7133,"src":"4635:8:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":7136,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4626:18:55","typeDescriptions":{"typeIdentifier":"t_tuple$__$__$__$__$_t_bool_$","typeString":"tuple(,,,,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7143,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7129,"src":"4700:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7138,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"4653:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"4653:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4653:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7137,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"4647:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4647:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"4647:52:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4647:59:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"4647:68:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":7146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4647:70:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"4626:91:55","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7148,"nodeType":"ExpressionStatement","src":"4626:91:55"}]},"documentation":{"id":7127,"nodeType":"StructuredDocumentation","src":"4503:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"b55d9904","id":7150,"implemented":true,"kind":"function","modifiers":[],"name":"getPaused","nameLocation":"4548:9:55","nodeType":"FunctionDefinition","overrides":{"id":7131,"nodeType":"OverrideSpecifier","overrides":[],"src":"4587:8:55"},"parameters":{"id":7130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7129,"mutability":"mutable","name":"asset","nameLocation":"4566:5:55","nodeType":"VariableDeclaration","scope":7150,"src":"4558:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7128,"name":"address","nodeType":"ElementaryTypeName","src":"4558:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4557:15:55"},"returnParameters":{"id":7134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7133,"mutability":"mutable","name":"isPaused","nameLocation":"4610:8:55","nodeType":"VariableDeclaration","scope":7150,"src":"4605:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7132,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4604:15:55"},"scope":7634,"src":"4539:183:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5873],"body":{"id":7170,"nodeType":"Block","src":"4843:98:55","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7165,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7153,"src":"4909:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7160,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"4862:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"4862:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4862:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7159,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"4856:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4856:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"4856:52:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4856:59:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":13360,"src":"4856:78:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":7168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4856:80:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7158,"id":7169,"nodeType":"Return","src":"4849:87:55"}]},"documentation":{"id":7151,"nodeType":"StructuredDocumentation","src":"4726:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"fcf40a62","id":7171,"implemented":true,"kind":"function","modifiers":[],"name":"getSiloedBorrowing","nameLocation":"4771:18:55","nodeType":"FunctionDefinition","overrides":{"id":7155,"nodeType":"OverrideSpecifier","overrides":[],"src":"4819:8:55"},"parameters":{"id":7154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7153,"mutability":"mutable","name":"asset","nameLocation":"4798:5:55","nodeType":"VariableDeclaration","scope":7171,"src":"4790:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7152,"name":"address","nodeType":"ElementaryTypeName","src":"4790:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4789:15:55"},"returnParameters":{"id":7158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7157,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7171,"src":"4837:4:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7156,"name":"bool","nodeType":"ElementaryTypeName","src":"4837:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4836:6:55"},"scope":7634,"src":"4762:179:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5881],"body":{"id":7191,"nodeType":"Block","src":"5072:105:55","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7186,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7174,"src":"5138:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7181,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"5091:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"5091:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5091:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7180,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"5085:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5085:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"5085:52:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5085:59:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":13720,"src":"5085:85:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5085:87:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7179,"id":7190,"nodeType":"Return","src":"5078:94:55"}]},"documentation":{"id":7172,"nodeType":"StructuredDocumentation","src":"4945:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"3cb8a622","id":7192,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationProtocolFee","nameLocation":"4990:25:55","nodeType":"FunctionDefinition","overrides":{"id":7176,"nodeType":"OverrideSpecifier","overrides":[],"src":"5045:8:55"},"parameters":{"id":7175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7174,"mutability":"mutable","name":"asset","nameLocation":"5024:5:55","nodeType":"VariableDeclaration","scope":7192,"src":"5016:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7173,"name":"address","nodeType":"ElementaryTypeName","src":"5016:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5015:15:55"},"returnParameters":{"id":7179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7178,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7192,"src":"5063:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7177,"name":"uint256","nodeType":"ElementaryTypeName","src":"5063:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5062:9:55"},"scope":7634,"src":"4981:196:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5889],"body":{"id":7212,"nodeType":"Block","src":"5301:98:55","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7207,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7195,"src":"5367:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7202,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"5320:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"5320:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5320:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7201,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"5314:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5314:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"5314:52:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5314:59:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":13772,"src":"5314:78:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5314:80:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7200,"id":7211,"nodeType":"Return","src":"5307:87:55"}]},"documentation":{"id":7193,"nodeType":"StructuredDocumentation","src":"5181:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"7ba1ae36","id":7213,"implemented":true,"kind":"function","modifiers":[],"name":"getUnbackedMintCap","nameLocation":"5226:18:55","nodeType":"FunctionDefinition","overrides":{"id":7197,"nodeType":"OverrideSpecifier","overrides":[],"src":"5274:8:55"},"parameters":{"id":7196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7195,"mutability":"mutable","name":"asset","nameLocation":"5253:5:55","nodeType":"VariableDeclaration","scope":7213,"src":"5245:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7194,"name":"address","nodeType":"ElementaryTypeName","src":"5245:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5244:15:55"},"returnParameters":{"id":7200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7213,"src":"5292:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7198,"name":"uint256","nodeType":"ElementaryTypeName","src":"5292:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5291:9:55"},"scope":7634,"src":"5217:182:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5897],"body":{"id":7233,"nodeType":"Block","src":"5519:94:55","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7228,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7216,"src":"5585:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7223,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"5538:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"5538:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5538:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7222,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"5532:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5532:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"5532:52:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5532:59:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7230,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":13668,"src":"5532:74:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5532:76:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7221,"id":7232,"nodeType":"Return","src":"5525:83:55"}]},"documentation":{"id":7214,"nodeType":"StructuredDocumentation","src":"5403:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"3c798109","id":7234,"implemented":true,"kind":"function","modifiers":[],"name":"getDebtCeiling","nameLocation":"5448:14:55","nodeType":"FunctionDefinition","overrides":{"id":7218,"nodeType":"OverrideSpecifier","overrides":[],"src":"5492:8:55"},"parameters":{"id":7217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7216,"mutability":"mutable","name":"asset","nameLocation":"5471:5:55","nodeType":"VariableDeclaration","scope":7234,"src":"5463:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7215,"name":"address","nodeType":"ElementaryTypeName","src":"5463:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5462:15:55"},"returnParameters":{"id":7221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7220,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7234,"src":"5510:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7219,"name":"uint256","nodeType":"ElementaryTypeName","src":"5510:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5509:9:55"},"scope":7634,"src":"5439:174:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5903],"body":{"id":7244,"nodeType":"Block","src":"5728:60:55","statements":[{"expression":{"expression":{"id":7241,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"5741:20:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":7242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":12905,"src":"5741:42:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7240,"id":7243,"nodeType":"Return","src":"5734:49:55"}]},"documentation":{"id":7235,"nodeType":"StructuredDocumentation","src":"5617:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"69b169e1","id":7245,"implemented":true,"kind":"function","modifiers":[],"name":"getDebtCeilingDecimals","nameLocation":"5662:22:55","nodeType":"FunctionDefinition","overrides":{"id":7237,"nodeType":"OverrideSpecifier","overrides":[],"src":"5701:8:55"},"parameters":{"id":7236,"nodeType":"ParameterList","parameters":[],"src":"5684:2:55"},"returnParameters":{"id":7240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7239,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7245,"src":"5719:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7238,"name":"uint256","nodeType":"ElementaryTypeName","src":"5719:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5718:9:55"},"scope":7634,"src":"5653:135:55","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[5933],"body":{"id":7332,"nodeType":"Block","src":"6318:688:55","statements":[{"assignments":[7280],"declarations":[{"constant":false,"id":7280,"mutability":"mutable","name":"reserve","nameLocation":"6353:7:55","nodeType":"VariableDeclaration","scope":7332,"src":"6324:36:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7279,"nodeType":"UserDefinedTypeName","pathNode":{"id":7278,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"6324:21:55"},"referencedDeclaration":23909,"src":"6324:21:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7289,"initialValue":{"arguments":[{"id":7287,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7248,"src":"6421:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7282,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"6369:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"6369:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6369:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7281,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"6363:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6363:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"6363:50:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6363:69:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"6324:108:55"},{"expression":{"components":[{"expression":{"id":7290,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6454:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7291,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":23906,"src":"6454:16:55","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7292,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6478:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"6478:25:55","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7295,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6526:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"6526:21:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7294,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"6511:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6511:37:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"6511:49:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6511:51:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7301,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6585:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"6585:30:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7300,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"6570:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6570:46:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"6570:58:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6570:60:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7307,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6653:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7308,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"6653:32:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7306,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"6638:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6638:48:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"6638:60:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6638:62:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7312,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6708:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7313,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23884,"src":"6708:28:55","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7314,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6744:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23888,"src":"6744:33:55","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7316,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6785:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23890,"src":"6785:31:55","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7319,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6841:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"6841:30:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7318,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"6824:16:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":7321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6824:48:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":7322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAverageStableRate","nodeType":"MemberAccess","referencedDeclaration":6283,"src":"6824:69:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6824:71:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7324,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6903:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7325,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23882,"src":"6903:22:55","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7326,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6933:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7327,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23886,"src":"6933:27:55","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7328,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"6968:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23892,"src":"6968:27:55","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"id":7330,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6446:555:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint128_$_t_uint128_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$_t_uint128_$_t_uint256_$_t_uint128_$_t_uint128_$_t_uint40_$","typeString":"tuple(uint128,uint128,uint256,uint256,uint256,uint128,uint128,uint128,uint256,uint128,uint128,uint40)"}},"functionReturnParameters":7275,"id":7331,"nodeType":"Return","src":"6439:562:55"}]},"documentation":{"id":7246,"nodeType":"StructuredDocumentation","src":"5792:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"35ea6a75","id":7333,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveData","nameLocation":"5837:14:55","nodeType":"FunctionDefinition","overrides":{"id":7250,"nodeType":"OverrideSpecifier","overrides":[],"src":"5901:8:55"},"parameters":{"id":7249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7248,"mutability":"mutable","name":"asset","nameLocation":"5865:5:55","nodeType":"VariableDeclaration","scope":7333,"src":"5857:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7247,"name":"address","nodeType":"ElementaryTypeName","src":"5857:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5851:23:55"},"returnParameters":{"id":7275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7252,"mutability":"mutable","name":"unbacked","nameLocation":"5938:8:55","nodeType":"VariableDeclaration","scope":7333,"src":"5930:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7251,"name":"uint256","nodeType":"ElementaryTypeName","src":"5930:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7254,"mutability":"mutable","name":"accruedToTreasuryScaled","nameLocation":"5962:23:55","nodeType":"VariableDeclaration","scope":7333,"src":"5954:31:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7253,"name":"uint256","nodeType":"ElementaryTypeName","src":"5954:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7256,"mutability":"mutable","name":"totalAToken","nameLocation":"6001:11:55","nodeType":"VariableDeclaration","scope":7333,"src":"5993:19:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7255,"name":"uint256","nodeType":"ElementaryTypeName","src":"5993:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7258,"mutability":"mutable","name":"totalStableDebt","nameLocation":"6028:15:55","nodeType":"VariableDeclaration","scope":7333,"src":"6020:23:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7257,"name":"uint256","nodeType":"ElementaryTypeName","src":"6020:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7260,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"6059:17:55","nodeType":"VariableDeclaration","scope":7333,"src":"6051:25:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7259,"name":"uint256","nodeType":"ElementaryTypeName","src":"6051:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7262,"mutability":"mutable","name":"liquidityRate","nameLocation":"6092:13:55","nodeType":"VariableDeclaration","scope":7333,"src":"6084:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7261,"name":"uint256","nodeType":"ElementaryTypeName","src":"6084:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7264,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"6121:18:55","nodeType":"VariableDeclaration","scope":7333,"src":"6113:26:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7263,"name":"uint256","nodeType":"ElementaryTypeName","src":"6113:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7266,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"6155:16:55","nodeType":"VariableDeclaration","scope":7333,"src":"6147:24:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7265,"name":"uint256","nodeType":"ElementaryTypeName","src":"6147:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7268,"mutability":"mutable","name":"averageStableBorrowRate","nameLocation":"6187:23:55","nodeType":"VariableDeclaration","scope":7333,"src":"6179:31:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7267,"name":"uint256","nodeType":"ElementaryTypeName","src":"6179:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7270,"mutability":"mutable","name":"liquidityIndex","nameLocation":"6226:14:55","nodeType":"VariableDeclaration","scope":7333,"src":"6218:22:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7269,"name":"uint256","nodeType":"ElementaryTypeName","src":"6218:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7272,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"6256:19:55","nodeType":"VariableDeclaration","scope":7333,"src":"6248:27:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7271,"name":"uint256","nodeType":"ElementaryTypeName","src":"6248:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7274,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"6290:19:55","nodeType":"VariableDeclaration","scope":7333,"src":"6283:26:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":7273,"name":"uint40","nodeType":"ElementaryTypeName","src":"6283:6:55","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"5922:393:55"},"scope":7634,"src":"5828:1178:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5941],"body":{"id":7363,"nodeType":"Block","src":"7132:183:55","statements":[{"assignments":[7346],"declarations":[{"constant":false,"id":7346,"mutability":"mutable","name":"reserve","nameLocation":"7167:7:55","nodeType":"VariableDeclaration","scope":7363,"src":"7138:36:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7345,"nodeType":"UserDefinedTypeName","pathNode":{"id":7344,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"7138:21:55"},"referencedDeclaration":23909,"src":"7138:21:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7355,"initialValue":{"arguments":[{"id":7353,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7336,"src":"7235:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7348,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"7183:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"7183:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7183:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7347,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"7177:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7177:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"7177:50:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7177:69:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"7138:108:55"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7357,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7346,"src":"7274:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7358,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"7274:21:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7356,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"7259:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7259:37:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"7259:49:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7259:51:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7341,"id":7362,"nodeType":"Return","src":"7252:58:55"}]},"documentation":{"id":7334,"nodeType":"StructuredDocumentation","src":"7010:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"51460e25","id":7364,"implemented":true,"kind":"function","modifiers":[],"name":"getATokenTotalSupply","nameLocation":"7055:20:55","nodeType":"FunctionDefinition","overrides":{"id":7338,"nodeType":"OverrideSpecifier","overrides":[],"src":"7105:8:55"},"parameters":{"id":7337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7336,"mutability":"mutable","name":"asset","nameLocation":"7084:5:55","nodeType":"VariableDeclaration","scope":7364,"src":"7076:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7335,"name":"address","nodeType":"ElementaryTypeName","src":"7076:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7075:15:55"},"returnParameters":{"id":7341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7340,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7364,"src":"7123:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7339,"name":"uint256","nodeType":"ElementaryTypeName","src":"7123:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7122:9:55"},"scope":7634,"src":"7046:269:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5949],"body":{"id":7401,"nodeType":"Block","src":"7433:269:55","statements":[{"assignments":[7377],"declarations":[{"constant":false,"id":7377,"mutability":"mutable","name":"reserve","nameLocation":"7468:7:55","nodeType":"VariableDeclaration","scope":7401,"src":"7439:36:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7376,"nodeType":"UserDefinedTypeName","pathNode":{"id":7375,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"7439:21:55"},"referencedDeclaration":23909,"src":"7439:21:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7386,"initialValue":{"arguments":[{"id":7384,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7367,"src":"7536:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7379,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"7484:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"7484:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7484:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7378,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"7478:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7478:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"7478:50:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7478:69:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"7439:108:55"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7388,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7377,"src":"7581:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"7581:30:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7387,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"7566:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7566:46:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"7566:58:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7566:60:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7394,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7377,"src":"7650:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"7650:32:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7393,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"7635:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7635:48:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"7635:60:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7635:62:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7566:131:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7372,"id":7400,"nodeType":"Return","src":"7553:144:55"}]},"documentation":{"id":7365,"nodeType":"StructuredDocumentation","src":"7319:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"4d44ac4f","id":7402,"implemented":true,"kind":"function","modifiers":[],"name":"getTotalDebt","nameLocation":"7364:12:55","nodeType":"FunctionDefinition","overrides":{"id":7369,"nodeType":"OverrideSpecifier","overrides":[],"src":"7406:8:55"},"parameters":{"id":7368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7367,"mutability":"mutable","name":"asset","nameLocation":"7385:5:55","nodeType":"VariableDeclaration","scope":7402,"src":"7377:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7366,"name":"address","nodeType":"ElementaryTypeName","src":"7377:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7376:15:55"},"returnParameters":{"id":7372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7402,"src":"7424:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7370,"name":"uint256","nodeType":"ElementaryTypeName","src":"7424:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7423:9:55"},"scope":7634,"src":"7355:347:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5975],"body":{"id":7540,"nodeType":"Block","src":"8174:1048:55","statements":[{"assignments":[7433],"declarations":[{"constant":false,"id":7433,"mutability":"mutable","name":"reserve","nameLocation":"8209:7:55","nodeType":"VariableDeclaration","scope":7540,"src":"8180:36:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7432,"nodeType":"UserDefinedTypeName","pathNode":{"id":7431,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"8180:21:55"},"referencedDeclaration":23909,"src":"8180:21:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7442,"initialValue":{"arguments":[{"id":7440,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7405,"src":"8277:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7435,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"8225:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"8225:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8225:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7434,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"8219:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8219:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"8219:50:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8219:69:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"8180:108:55"},{"assignments":[7447],"declarations":[{"constant":false,"id":7447,"mutability":"mutable","name":"userConfig","nameLocation":"8333:10:55","nodeType":"VariableDeclaration","scope":7540,"src":"8295:48:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":7446,"nodeType":"UserDefinedTypeName","pathNode":{"id":7445,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"8295:30:55"},"referencedDeclaration":23916,"src":"8295:30:55","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":7456,"initialValue":{"arguments":[{"id":7454,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7407,"src":"8410:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7449,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"8352:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"8352:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8352:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7448,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"8346:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8346:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserConfiguration","nodeType":"MemberAccess","referencedDeclaration":4898,"src":"8346:63:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.UserConfigurationMap memory)"}},"id":7455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8346:69:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"8295:120:55"},{"expression":{"id":7465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7457,"name":"currentATokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7411,"src":"8422:20:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7463,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7407,"src":"8493:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7459,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"8460:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7460,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"8460:21:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7458,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"8445:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8445:37:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8445:47:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8445:53:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8422:76:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7466,"nodeType":"ExpressionStatement","src":"8422:76:55"},{"expression":{"id":7475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7467,"name":"currentVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7415,"src":"8504:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7473,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7407,"src":"8585:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7469,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"8541:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"8541:32:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7468,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"8526:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8526:48:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8526:58:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8526:64:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8504:86:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7476,"nodeType":"ExpressionStatement","src":"8504:86:55"},{"expression":{"id":7485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7477,"name":"currentStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7413,"src":"8596:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7483,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7407,"src":"8673:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7479,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"8631:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7480,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"8631:30:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7478,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"8616:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8616:46:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8616:56:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8616:62:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8596:82:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7486,"nodeType":"ExpressionStatement","src":"8596:82:55"},{"expression":{"id":7495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7487,"name":"principalStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7417,"src":"8684:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7493,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7407,"src":"8774:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7489,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"8723:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"8723:30:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7488,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"8706:16:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":7491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8706:48:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":7492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"principalBalanceOf","nodeType":"MemberAccess","referencedDeclaration":6333,"src":"8706:67:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8706:73:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8684:95:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7496,"nodeType":"ExpressionStatement","src":"8684:95:55"},{"expression":{"id":7505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7497,"name":"scaledVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7419,"src":"8785:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7503,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7407,"src":"8875:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7499,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"8825:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"8825:32:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7498,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"8806:18:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6386_$","typeString":"type(contract IVariableDebtToken)"}},"id":7501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8806:52:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6386","typeString":"contract IVariableDebtToken"}},"id":7502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":6163,"src":"8806:68:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8806:74:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8785:95:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7506,"nodeType":"ExpressionStatement","src":"8785:95:55"},{"expression":{"id":7510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7507,"name":"liquidityRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7423,"src":"8886:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":7508,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"8902:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23884,"src":"8902:28:55","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8886:44:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7511,"nodeType":"ExpressionStatement","src":"8886:44:55"},{"expression":{"id":7520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7512,"name":"stableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7421,"src":"8936:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7518,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7407,"src":"9022:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7514,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"8972:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"8972:30:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7513,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"8955:16:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":7516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8955:48:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":7517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserStableRate","nodeType":"MemberAccess","referencedDeclaration":6291,"src":"8955:66:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8955:72:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8936:91:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7521,"nodeType":"ExpressionStatement","src":"8936:91:55"},{"expression":{"id":7530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7522,"name":"stableRateLastUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7425,"src":"9033:21:55","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7528,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7407,"src":"9132:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7524,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"9074:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"9074:30:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7523,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"9057:16:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":7526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9057:48:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":7527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserLastUpdated","nodeType":"MemberAccess","referencedDeclaration":6299,"src":"9057:67:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint40_$","typeString":"function (address) view external returns (uint40)"}},"id":7529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9057:85:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"9033:109:55","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":7531,"nodeType":"ExpressionStatement","src":"9033:109:55"},{"expression":{"id":7538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7532,"name":"usageAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7427,"src":"9148:24:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":7535,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7433,"src":"9206:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"9206:10:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":7533,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7447,"src":"9175:10:55","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":7534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14260,"src":"9175:30:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":7537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9175:42:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9148:69:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7539,"nodeType":"ExpressionStatement","src":"9148:69:55"}]},"documentation":{"id":7403,"nodeType":"StructuredDocumentation","src":"7706:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"28dd2d01","id":7541,"implemented":true,"kind":"function","modifiers":[],"name":"getUserReserveData","nameLocation":"7751:18:55","nodeType":"FunctionDefinition","overrides":{"id":7409,"nodeType":"OverrideSpecifier","overrides":[],"src":"7837:8:55"},"parameters":{"id":7408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7405,"mutability":"mutable","name":"asset","nameLocation":"7783:5:55","nodeType":"VariableDeclaration","scope":7541,"src":"7775:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7404,"name":"address","nodeType":"ElementaryTypeName","src":"7775:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7407,"mutability":"mutable","name":"user","nameLocation":"7802:4:55","nodeType":"VariableDeclaration","scope":7541,"src":"7794:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7406,"name":"address","nodeType":"ElementaryTypeName","src":"7794:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7769:41:55"},"returnParameters":{"id":7428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7411,"mutability":"mutable","name":"currentATokenBalance","nameLocation":"7874:20:55","nodeType":"VariableDeclaration","scope":7541,"src":"7866:28:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7410,"name":"uint256","nodeType":"ElementaryTypeName","src":"7866:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7413,"mutability":"mutable","name":"currentStableDebt","nameLocation":"7910:17:55","nodeType":"VariableDeclaration","scope":7541,"src":"7902:25:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7412,"name":"uint256","nodeType":"ElementaryTypeName","src":"7902:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7415,"mutability":"mutable","name":"currentVariableDebt","nameLocation":"7943:19:55","nodeType":"VariableDeclaration","scope":7541,"src":"7935:27:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7414,"name":"uint256","nodeType":"ElementaryTypeName","src":"7935:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7417,"mutability":"mutable","name":"principalStableDebt","nameLocation":"7978:19:55","nodeType":"VariableDeclaration","scope":7541,"src":"7970:27:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7416,"name":"uint256","nodeType":"ElementaryTypeName","src":"7970:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7419,"mutability":"mutable","name":"scaledVariableDebt","nameLocation":"8013:18:55","nodeType":"VariableDeclaration","scope":7541,"src":"8005:26:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7418,"name":"uint256","nodeType":"ElementaryTypeName","src":"8005:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7421,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"8047:16:55","nodeType":"VariableDeclaration","scope":7541,"src":"8039:24:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7420,"name":"uint256","nodeType":"ElementaryTypeName","src":"8039:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7423,"mutability":"mutable","name":"liquidityRate","nameLocation":"8079:13:55","nodeType":"VariableDeclaration","scope":7541,"src":"8071:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7422,"name":"uint256","nodeType":"ElementaryTypeName","src":"8071:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7425,"mutability":"mutable","name":"stableRateLastUpdated","nameLocation":"8107:21:55","nodeType":"VariableDeclaration","scope":7541,"src":"8100:28:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":7424,"name":"uint40","nodeType":"ElementaryTypeName","src":"8100:6:55","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":7427,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"8141:24:55","nodeType":"VariableDeclaration","scope":7541,"src":"8136:29:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7426,"name":"bool","nodeType":"ElementaryTypeName","src":"8136:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7858:313:55"},"scope":7634,"src":"7742:1480:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5987],"body":{"id":7576,"nodeType":"Block","src":"9483:246:55","statements":[{"assignments":[7558],"declarations":[{"constant":false,"id":7558,"mutability":"mutable","name":"reserve","nameLocation":"9518:7:55","nodeType":"VariableDeclaration","scope":7576,"src":"9489:36:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7557,"nodeType":"UserDefinedTypeName","pathNode":{"id":7556,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"9489:21:55"},"referencedDeclaration":23909,"src":"9489:21:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7567,"initialValue":{"arguments":[{"id":7565,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7544,"src":"9586:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7560,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"9534:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"9534:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9534:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7559,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"9528:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9528:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"9528:50:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9528:69:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"9489:108:55"},{"expression":{"components":[{"expression":{"id":7568,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7558,"src":"9619:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"9619:21:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7570,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7558,"src":"9648:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7571,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"9648:30:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7572,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7558,"src":"9686:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"9686:32:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":7574,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9611:113:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_address_$","typeString":"tuple(address,address,address)"}},"functionReturnParameters":7553,"id":7575,"nodeType":"Return","src":"9604:120:55"}]},"documentation":{"id":7542,"nodeType":"StructuredDocumentation","src":"9226:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"d2493b6c","id":7577,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveTokensAddresses","nameLocation":"9271:25:55","nodeType":"FunctionDefinition","overrides":{"id":7546,"nodeType":"OverrideSpecifier","overrides":[],"src":"9346:8:55"},"parameters":{"id":7545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7544,"mutability":"mutable","name":"asset","nameLocation":"9310:5:55","nodeType":"VariableDeclaration","scope":7577,"src":"9302:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7543,"name":"address","nodeType":"ElementaryTypeName","src":"9302:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9296:23:55"},"returnParameters":{"id":7553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7548,"mutability":"mutable","name":"aTokenAddress","nameLocation":"9383:13:55","nodeType":"VariableDeclaration","scope":7577,"src":"9375:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7547,"name":"address","nodeType":"ElementaryTypeName","src":"9375:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7550,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"9412:22:55","nodeType":"VariableDeclaration","scope":7577,"src":"9404:30:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7549,"name":"address","nodeType":"ElementaryTypeName","src":"9404:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7552,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"9450:24:55","nodeType":"VariableDeclaration","scope":7577,"src":"9442:32:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7551,"name":"address","nodeType":"ElementaryTypeName","src":"9442:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9367:113:55"},"scope":7634,"src":"9262:467:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5995],"body":{"id":7604,"nodeType":"Block","src":"9891:170:55","statements":[{"assignments":[7590],"declarations":[{"constant":false,"id":7590,"mutability":"mutable","name":"reserve","nameLocation":"9926:7:55","nodeType":"VariableDeclaration","scope":7604,"src":"9897:36:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7589,"nodeType":"UserDefinedTypeName","pathNode":{"id":7588,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"9897:21:55"},"referencedDeclaration":23909,"src":"9897:21:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7599,"initialValue":{"arguments":[{"id":7597,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7580,"src":"9994:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7592,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"9942:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"9942:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9942:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7591,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"9936:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9936:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"9936:50:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9936:69:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"9897:108:55"},{"expression":{"components":[{"expression":{"id":7600,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7590,"src":"10020:7:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7601,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":23902,"src":"10020:35:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":7602,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10019:37:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":7585,"id":7603,"nodeType":"Return","src":"10012:44:55"}]},"documentation":{"id":7578,"nodeType":"StructuredDocumentation","src":"9733:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"6744362a","id":7605,"implemented":true,"kind":"function","modifiers":[],"name":"getInterestRateStrategyAddress","nameLocation":"9778:30:55","nodeType":"FunctionDefinition","overrides":{"id":7582,"nodeType":"OverrideSpecifier","overrides":[],"src":"9846:8:55"},"parameters":{"id":7581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7580,"mutability":"mutable","name":"asset","nameLocation":"9822:5:55","nodeType":"VariableDeclaration","scope":7605,"src":"9814:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7579,"name":"address","nodeType":"ElementaryTypeName","src":"9814:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9808:23:55"},"returnParameters":{"id":7585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7584,"mutability":"mutable","name":"irStrategyAddress","nameLocation":"9872:17:55","nodeType":"VariableDeclaration","scope":7605,"src":"9864:25:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7583,"name":"address","nodeType":"ElementaryTypeName","src":"9864:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9863:27:55"},"scope":7634,"src":"9769:292:55","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6003],"body":{"id":7632,"nodeType":"Block","src":"10183:183:55","statements":[{"assignments":[7618],"declarations":[{"constant":false,"id":7618,"mutability":"mutable","name":"configuration","nameLocation":"10230:13:55","nodeType":"VariableDeclaration","scope":7632,"src":"10189:54:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7617,"nodeType":"UserDefinedTypeName","pathNode":{"id":7616,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"10189:33:55"},"referencedDeclaration":23912,"src":"10189:33:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7627,"initialValue":{"arguments":[{"id":7625,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7608,"src":"10306:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7620,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"10252:18:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":7621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"10252:26:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10252:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7619,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"10246:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":7623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10246:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"10246:59:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10246:66:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"10189:123:55"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7628,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7618,"src":"10326:13:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7629,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":13874,"src":"10326:33:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":7630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10326:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7613,"id":7631,"nodeType":"Return","src":"10319:42:55"}]},"documentation":{"id":7606,"nodeType":"StructuredDocumentation","src":"10065:33:55","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"d7ed3ef4","id":7633,"implemented":true,"kind":"function","modifiers":[],"name":"getFlashLoanEnabled","nameLocation":"10110:19:55","nodeType":"FunctionDefinition","overrides":{"id":7610,"nodeType":"OverrideSpecifier","overrides":[],"src":"10159:8:55"},"parameters":{"id":7609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7608,"mutability":"mutable","name":"asset","nameLocation":"10138:5:55","nodeType":"VariableDeclaration","scope":7633,"src":"10130:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7607,"name":"address","nodeType":"ElementaryTypeName","src":"10130:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10129:15:55"},"returnParameters":{"id":7613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7612,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7633,"src":"10177:4:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7611,"name":"bool","nodeType":"ElementaryTypeName","src":"10177:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10176:6:55"},"scope":7634,"src":"10101:265:55","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7635,"src":"970:9398:55","usedErrors":[]}],"src":"37:10332:55"},"id":55},"contracts/misc/L2Encoder.sol":{"ast":{"absolutePath":"contracts/misc/L2Encoder.sol","exportedSymbols":{"DataTypes":[24227],"IPool":[5073],"L2Encoder":[8201],"SafeCast":[1966]},"id":8202,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":7636,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:56"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../dependencies/openzeppelin/contracts/SafeCast.sol","id":7638,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8202,"sourceUnit":1967,"src":"63:77:56","symbolAliases":[{"foreign":{"id":7637,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:8:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../interfaces/IPool.sol","id":7640,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8202,"sourceUnit":5074,"src":"141:46:56","symbolAliases":[{"foreign":{"id":7639,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"149:5:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../protocol/libraries/types/DataTypes.sol","id":7642,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8202,"sourceUnit":24228,"src":"188:68:56","symbolAliases":[{"foreign":{"id":7641,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"196:9:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"L2Encoder","contractDependencies":[],"contractKind":"contract","documentation":{"id":7643,"nodeType":"StructuredDocumentation","src":"258:225:56","text":" @title L2Encoder\n @author Aave\n @notice Helper contract to encode calldata, used to optimize calldata size in L2Pool for transaction cost reduction\n only indented to help generate calldata for uses/frontends."},"fullyImplemented":true,"id":8201,"linearizedBaseContracts":[8201],"name":"L2Encoder","nameLocation":"493:9:56","nodeType":"ContractDefinition","nodes":[{"id":7646,"libraryName":{"id":7644,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"513:8:56"},"nodeType":"UsingForDirective","src":"507:27:56","typeName":{"id":7645,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"functionSelector":"7535d246","id":7649,"mutability":"immutable","name":"POOL","nameLocation":"560:4:56","nodeType":"VariableDeclaration","scope":8201,"src":"537:27:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":7648,"nodeType":"UserDefinedTypeName","pathNode":{"id":7647,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"537:5:56"},"referencedDeclaration":5073,"src":"537:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"public"},{"body":{"id":7660,"nodeType":"Block","src":"678:22:56","statements":[{"expression":{"id":7658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7656,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"684:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7657,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7653,"src":"691:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"684:11:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7659,"nodeType":"ExpressionStatement","src":"684:11:56"}]},"documentation":{"id":7650,"nodeType":"StructuredDocumentation","src":"569:82:56","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":7661,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7653,"mutability":"mutable","name":"pool","nameLocation":"672:4:56","nodeType":"VariableDeclaration","scope":7661,"src":"666:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":7652,"nodeType":"UserDefinedTypeName","pathNode":{"id":7651,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"666:5:56"},"referencedDeclaration":5073,"src":"666:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"665:12:56"},"returnParameters":{"id":7655,"nodeType":"ParameterList","parameters":[],"src":"678:0:56"},"scope":8201,"src":"654:46:56","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7700,"nodeType":"Block","src":"1420:290:56","statements":[{"assignments":[7677],"declarations":[{"constant":false,"id":7677,"mutability":"mutable","name":"data","nameLocation":"1455:4:56","nodeType":"VariableDeclaration","scope":7700,"src":"1426:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7676,"nodeType":"UserDefinedTypeName","pathNode":{"id":7675,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1426:21:56"},"referencedDeclaration":23909,"src":"1426:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7682,"initialValue":{"arguments":[{"id":7680,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7664,"src":"1482:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7678,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"1462:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"1462:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1462:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"1426:62:56"},{"assignments":[7684],"declarations":[{"constant":false,"id":7684,"mutability":"mutable","name":"assetId","nameLocation":"1502:7:56","nodeType":"VariableDeclaration","scope":7700,"src":"1495:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7683,"name":"uint16","nodeType":"ElementaryTypeName","src":"1495:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":7687,"initialValue":{"expression":{"id":7685,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7677,"src":"1512:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"1512:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"1495:24:56"},{"assignments":[7689],"declarations":[{"constant":false,"id":7689,"mutability":"mutable","name":"shortenedAmount","nameLocation":"1533:15:56","nodeType":"VariableDeclaration","scope":7700,"src":"1525:23:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7688,"name":"uint128","nodeType":"ElementaryTypeName","src":"1525:7:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":7693,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7690,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"1551:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"1551:16:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":7692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1551:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1525:44:56"},{"assignments":[7695],"declarations":[{"constant":false,"id":7695,"mutability":"mutable","name":"res","nameLocation":"1583:3:56","nodeType":"VariableDeclaration","scope":7700,"src":"1575:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7694,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1575:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7696,"nodeType":"VariableDeclarationStatement","src":"1575:11:56"},{"AST":{"nodeType":"YulBlock","src":"1602:88:56","statements":[{"nodeType":"YulAssignment","src":"1610:74:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"1621:7:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1638:2:56","type":"","value":"16"},{"name":"shortenedAmount","nodeType":"YulIdentifier","src":"1642:15:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1634:3:56"},"nodeType":"YulFunctionCall","src":"1634:24:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1664:3:56","type":"","value":"144"},{"name":"referralCode","nodeType":"YulIdentifier","src":"1669:12:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1660:3:56"},"nodeType":"YulFunctionCall","src":"1660:22:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1630:3:56"},"nodeType":"YulFunctionCall","src":"1630:53:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1617:3:56"},"nodeType":"YulFunctionCall","src":"1617:67:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"1610:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":7684,"isOffset":false,"isSlot":false,"src":"1621:7:56","valueSize":1},{"declaration":7668,"isOffset":false,"isSlot":false,"src":"1669:12:56","valueSize":1},{"declaration":7695,"isOffset":false,"isSlot":false,"src":"1610:3:56","valueSize":1},{"declaration":7689,"isOffset":false,"isSlot":false,"src":"1642:15:56","valueSize":1}],"id":7697,"nodeType":"InlineAssembly","src":"1593:97:56"},{"expression":{"id":7698,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7695,"src":"1702:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":7672,"id":7699,"nodeType":"Return","src":"1695:10:56"}]},"documentation":{"id":7662,"nodeType":"StructuredDocumentation","src":"704:585:56","text":" @notice Encodes supply parameters from standard input to compact representation of 1 bytes32\n @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n @param asset The address of the underlying asset to supply\n @param amount The amount to be supplied\n @param referralCode referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man\n @return compact representation of supply parameters"},"functionSelector":"b76398e4","id":7701,"implemented":true,"kind":"function","modifiers":[],"name":"encodeSupplyParams","nameLocation":"1301:18:56","nodeType":"FunctionDefinition","parameters":{"id":7669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7664,"mutability":"mutable","name":"asset","nameLocation":"1333:5:56","nodeType":"VariableDeclaration","scope":7701,"src":"1325:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7663,"name":"address","nodeType":"ElementaryTypeName","src":"1325:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7666,"mutability":"mutable","name":"amount","nameLocation":"1352:6:56","nodeType":"VariableDeclaration","scope":7701,"src":"1344:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7665,"name":"uint256","nodeType":"ElementaryTypeName","src":"1344:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7668,"mutability":"mutable","name":"referralCode","nameLocation":"1371:12:56","nodeType":"VariableDeclaration","scope":7701,"src":"1364:19:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7667,"name":"uint16","nodeType":"ElementaryTypeName","src":"1364:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1319:68:56"},"returnParameters":{"id":7672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7671,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7701,"src":"1411:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7670,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1411:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1410:9:56"},"scope":8201,"src":"1292:418:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7761,"nodeType":"Block","src":"2901:475:56","statements":[{"assignments":[7729],"declarations":[{"constant":false,"id":7729,"mutability":"mutable","name":"data","nameLocation":"2936:4:56","nodeType":"VariableDeclaration","scope":7761,"src":"2907:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7728,"nodeType":"UserDefinedTypeName","pathNode":{"id":7727,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2907:21:56"},"referencedDeclaration":23909,"src":"2907:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7734,"initialValue":{"arguments":[{"id":7732,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7704,"src":"2963:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7730,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"2943:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"2943:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2943:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"2907:62:56"},{"assignments":[7736],"declarations":[{"constant":false,"id":7736,"mutability":"mutable","name":"assetId","nameLocation":"2983:7:56","nodeType":"VariableDeclaration","scope":7761,"src":"2976:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7735,"name":"uint16","nodeType":"ElementaryTypeName","src":"2976:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":7739,"initialValue":{"expression":{"id":7737,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7729,"src":"2993:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"2993:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"2976:24:56"},{"assignments":[7741],"declarations":[{"constant":false,"id":7741,"mutability":"mutable","name":"shortenedAmount","nameLocation":"3014:15:56","nodeType":"VariableDeclaration","scope":7761,"src":"3006:23:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7740,"name":"uint128","nodeType":"ElementaryTypeName","src":"3006:7:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":7745,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7742,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"3032:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"3032:16:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":7744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3032:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3006:44:56"},{"assignments":[7747],"declarations":[{"constant":false,"id":7747,"mutability":"mutable","name":"shortenedDeadline","nameLocation":"3063:17:56","nodeType":"VariableDeclaration","scope":7761,"src":"3056:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7746,"name":"uint32","nodeType":"ElementaryTypeName","src":"3056:6:56","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":7751,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7748,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7710,"src":"3083:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":1701,"src":"3083:17:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":7750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3083:19:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"3056:46:56"},{"assignments":[7753],"declarations":[{"constant":false,"id":7753,"mutability":"mutable","name":"res","nameLocation":"3117:3:56","nodeType":"VariableDeclaration","scope":7761,"src":"3109:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7752,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3109:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7754,"nodeType":"VariableDeclarationStatement","src":"3109:11:56"},{"AST":{"nodeType":"YulBlock","src":"3135:200:56","statements":[{"nodeType":"YulAssignment","src":"3143:186:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"3163:7:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3199:2:56","type":"","value":"16"},{"name":"shortenedAmount","nodeType":"YulIdentifier","src":"3203:15:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3195:3:56"},"nodeType":"YulFunctionCall","src":"3195:24:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3239:3:56","type":"","value":"144"},{"name":"referralCode","nodeType":"YulIdentifier","src":"3244:12:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3235:3:56"},"nodeType":"YulFunctionCall","src":"3235:22:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3267:3:56","type":"","value":"160"},{"name":"shortenedDeadline","nodeType":"YulIdentifier","src":"3272:17:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3263:3:56"},"nodeType":"YulFunctionCall","src":"3263:27:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3296:3:56","type":"","value":"192"},{"name":"permitV","nodeType":"YulIdentifier","src":"3301:7:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3292:3:56"},"nodeType":"YulFunctionCall","src":"3292:17:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3259:3:56"},"nodeType":"YulFunctionCall","src":"3259:51:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3231:3:56"},"nodeType":"YulFunctionCall","src":"3231:80:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3180:3:56"},"nodeType":"YulFunctionCall","src":"3180:141:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3150:3:56"},"nodeType":"YulFunctionCall","src":"3150:179:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"3143:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":7736,"isOffset":false,"isSlot":false,"src":"3163:7:56","valueSize":1},{"declaration":7712,"isOffset":false,"isSlot":false,"src":"3301:7:56","valueSize":1},{"declaration":7708,"isOffset":false,"isSlot":false,"src":"3244:12:56","valueSize":1},{"declaration":7753,"isOffset":false,"isSlot":false,"src":"3143:3:56","valueSize":1},{"declaration":7741,"isOffset":false,"isSlot":false,"src":"3203:15:56","valueSize":1},{"declaration":7747,"isOffset":false,"isSlot":false,"src":"3272:17:56","valueSize":1}],"id":7755,"nodeType":"InlineAssembly","src":"3126:209:56"},{"expression":{"components":[{"id":7756,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7753,"src":"3349:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7757,"name":"permitR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7714,"src":"3354:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7758,"name":"permitS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7716,"src":"3363:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":7759,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3348:23:56","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32,bytes32)"}},"functionReturnParameters":7724,"id":7760,"nodeType":"Return","src":"3341:30:56"}]},"documentation":{"id":7702,"nodeType":"StructuredDocumentation","src":"1714:945:56","text":" @notice Encodes supplyWithPermit parameters from standard input to compact representation of 3 bytes32\n @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n @param asset The address of the underlying asset to supply\n @param amount The amount to be supplied\n @param referralCode referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man\n @param deadline The deadline timestamp that the permit is valid\n @param permitV The V parameter of ERC712 permit sig\n @param permitR The R parameter of ERC712 permit sig\n @param permitS The S parameter of ERC712 permit sig\n @return compact representation of supplyWithPermit parameters\n @return The R parameter of ERC712 permit sig\n @return The S parameter of ERC712 permit sig"},"functionSelector":"671a7fae","id":7762,"implemented":true,"kind":"function","modifiers":[],"name":"encodeSupplyWithPermitParams","nameLocation":"2671:28:56","nodeType":"FunctionDefinition","parameters":{"id":7717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7704,"mutability":"mutable","name":"asset","nameLocation":"2713:5:56","nodeType":"VariableDeclaration","scope":7762,"src":"2705:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7703,"name":"address","nodeType":"ElementaryTypeName","src":"2705:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7706,"mutability":"mutable","name":"amount","nameLocation":"2732:6:56","nodeType":"VariableDeclaration","scope":7762,"src":"2724:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7705,"name":"uint256","nodeType":"ElementaryTypeName","src":"2724:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7708,"mutability":"mutable","name":"referralCode","nameLocation":"2751:12:56","nodeType":"VariableDeclaration","scope":7762,"src":"2744:19:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7707,"name":"uint16","nodeType":"ElementaryTypeName","src":"2744:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":7710,"mutability":"mutable","name":"deadline","nameLocation":"2777:8:56","nodeType":"VariableDeclaration","scope":7762,"src":"2769:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7709,"name":"uint256","nodeType":"ElementaryTypeName","src":"2769:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7712,"mutability":"mutable","name":"permitV","nameLocation":"2797:7:56","nodeType":"VariableDeclaration","scope":7762,"src":"2791:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7711,"name":"uint8","nodeType":"ElementaryTypeName","src":"2791:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7714,"mutability":"mutable","name":"permitR","nameLocation":"2818:7:56","nodeType":"VariableDeclaration","scope":7762,"src":"2810:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7713,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2810:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7716,"mutability":"mutable","name":"permitS","nameLocation":"2839:7:56","nodeType":"VariableDeclaration","scope":7762,"src":"2831:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7715,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2831:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2699:151:56"},"returnParameters":{"id":7724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7719,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7762,"src":"2874:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7718,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2874:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7721,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7762,"src":"2883:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7720,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2883:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7723,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7762,"src":"2892:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7722,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2892:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2873:27:56"},"scope":8201,"src":"2662:714:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7812,"nodeType":"Block","src":"3857:311:56","statements":[{"assignments":[7776],"declarations":[{"constant":false,"id":7776,"mutability":"mutable","name":"data","nameLocation":"3892:4:56","nodeType":"VariableDeclaration","scope":7812,"src":"3863:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7775,"nodeType":"UserDefinedTypeName","pathNode":{"id":7774,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"3863:21:56"},"referencedDeclaration":23909,"src":"3863:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7781,"initialValue":{"arguments":[{"id":7779,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7765,"src":"3919:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7777,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"3899:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"3899:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3899:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"3863:62:56"},{"assignments":[7783],"declarations":[{"constant":false,"id":7783,"mutability":"mutable","name":"assetId","nameLocation":"3939:7:56","nodeType":"VariableDeclaration","scope":7812,"src":"3932:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7782,"name":"uint16","nodeType":"ElementaryTypeName","src":"3932:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":7786,"initialValue":{"expression":{"id":7784,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7776,"src":"3949:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7785,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"3949:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"3932:24:56"},{"assignments":[7788],"declarations":[{"constant":false,"id":7788,"mutability":"mutable","name":"shortenedAmount","nameLocation":"3970:15:56","nodeType":"VariableDeclaration","scope":7812,"src":"3962:23:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7787,"name":"uint128","nodeType":"ElementaryTypeName","src":"3962:7:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":7805,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7789,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7767,"src":"3988:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":7792,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4003:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7791,"name":"uint256","nodeType":"ElementaryTypeName","src":"4003:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":7790,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3998:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3998:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":7794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3998:17:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3988:27:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7801,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7767,"src":"4038:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"4038:16:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":7803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4038:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":7804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3988:68:56","trueExpression":{"expression":{"arguments":[{"id":7798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4023:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7797,"name":"uint128","nodeType":"ElementaryTypeName","src":"4023:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":7796,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4018:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4018:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":7800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"4018:17:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3962:94:56"},{"assignments":[7807],"declarations":[{"constant":false,"id":7807,"mutability":"mutable","name":"res","nameLocation":"4071:3:56","nodeType":"VariableDeclaration","scope":7812,"src":"4063:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7806,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4063:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7808,"nodeType":"VariableDeclarationStatement","src":"4063:11:56"},{"AST":{"nodeType":"YulBlock","src":"4089:59:56","statements":[{"nodeType":"YulAssignment","src":"4097:45:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"4108:7:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4121:2:56","type":"","value":"16"},{"name":"shortenedAmount","nodeType":"YulIdentifier","src":"4125:15:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4117:3:56"},"nodeType":"YulFunctionCall","src":"4117:24:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4104:3:56"},"nodeType":"YulFunctionCall","src":"4104:38:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"4097:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":7783,"isOffset":false,"isSlot":false,"src":"4108:7:56","valueSize":1},{"declaration":7807,"isOffset":false,"isSlot":false,"src":"4097:3:56","valueSize":1},{"declaration":7788,"isOffset":false,"isSlot":false,"src":"4125:15:56","valueSize":1}],"id":7809,"nodeType":"InlineAssembly","src":"4080:68:56"},{"expression":{"id":7810,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"4160:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":7771,"id":7811,"nodeType":"Return","src":"4153:10:56"}]},"documentation":{"id":7763,"nodeType":"StructuredDocumentation","src":"3380:381:56","text":" @notice Encodes withdraw parameters from standard input to compact representation of 1 bytes32\n @dev Without a to parameter as the compact calls to L2Pool will use msg.sender as to\n @param asset The address of the underlying asset to withdraw\n @param amount The underlying amount to be withdrawn\n @return compact representation of withdraw parameters"},"functionSelector":"5cc7bc10","id":7813,"implemented":true,"kind":"function","modifiers":[],"name":"encodeWithdrawParams","nameLocation":"3773:20:56","nodeType":"FunctionDefinition","parameters":{"id":7768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7765,"mutability":"mutable","name":"asset","nameLocation":"3802:5:56","nodeType":"VariableDeclaration","scope":7813,"src":"3794:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7764,"name":"address","nodeType":"ElementaryTypeName","src":"3794:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7767,"mutability":"mutable","name":"amount","nameLocation":"3817:6:56","nodeType":"VariableDeclaration","scope":7813,"src":"3809:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7766,"name":"uint256","nodeType":"ElementaryTypeName","src":"3809:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3793:31:56"},"returnParameters":{"id":7771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7770,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7813,"src":"3848:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7769,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3848:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3847:9:56"},"scope":8201,"src":"3764:404:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7860,"nodeType":"Block","src":"5027:451:56","statements":[{"assignments":[7831],"declarations":[{"constant":false,"id":7831,"mutability":"mutable","name":"data","nameLocation":"5062:4:56","nodeType":"VariableDeclaration","scope":7860,"src":"5033:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7830,"nodeType":"UserDefinedTypeName","pathNode":{"id":7829,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"5033:21:56"},"referencedDeclaration":23909,"src":"5033:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7836,"initialValue":{"arguments":[{"id":7834,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7816,"src":"5089:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7832,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"5069:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"5069:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5069:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"5033:62:56"},{"assignments":[7838],"declarations":[{"constant":false,"id":7838,"mutability":"mutable","name":"assetId","nameLocation":"5109:7:56","nodeType":"VariableDeclaration","scope":7860,"src":"5102:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7837,"name":"uint16","nodeType":"ElementaryTypeName","src":"5102:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":7841,"initialValue":{"expression":{"id":7839,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"5119:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7840,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"5119:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"5102:24:56"},{"assignments":[7843],"declarations":[{"constant":false,"id":7843,"mutability":"mutable","name":"shortenedAmount","nameLocation":"5140:15:56","nodeType":"VariableDeclaration","scope":7860,"src":"5132:23:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7842,"name":"uint128","nodeType":"ElementaryTypeName","src":"5132:7:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":7847,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7844,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7818,"src":"5158:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5158:16:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":7846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5158:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"5132:44:56"},{"assignments":[7849],"declarations":[{"constant":false,"id":7849,"mutability":"mutable","name":"shortenedInterestRateMode","nameLocation":"5188:25:56","nodeType":"VariableDeclaration","scope":7860,"src":"5182:31:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7848,"name":"uint8","nodeType":"ElementaryTypeName","src":"5182:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":7853,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7850,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7820,"src":"5216:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint8","nodeType":"MemberAccess","referencedDeclaration":1751,"src":"5216:24:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint8_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint8)"}},"id":7852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5216:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5182:60:56"},{"assignments":[7855],"declarations":[{"constant":false,"id":7855,"mutability":"mutable","name":"res","nameLocation":"5256:3:56","nodeType":"VariableDeclaration","scope":7860,"src":"5248:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7854,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5248:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7856,"nodeType":"VariableDeclarationStatement","src":"5248:11:56"},{"AST":{"nodeType":"YulBlock","src":"5274:184:56","statements":[{"nodeType":"YulAssignment","src":"5282:170:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"5302:7:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5338:2:56","type":"","value":"16"},{"name":"shortenedAmount","nodeType":"YulIdentifier","src":"5342:15:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5334:3:56"},"nodeType":"YulFunctionCall","src":"5334:24:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5378:3:56","type":"","value":"144"},{"name":"shortenedInterestRateMode","nodeType":"YulIdentifier","src":"5383:25:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5374:3:56"},"nodeType":"YulFunctionCall","src":"5374:35:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5415:3:56","type":"","value":"152"},{"name":"referralCode","nodeType":"YulIdentifier","src":"5420:12:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5411:3:56"},"nodeType":"YulFunctionCall","src":"5411:22:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5370:3:56"},"nodeType":"YulFunctionCall","src":"5370:64:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5319:3:56"},"nodeType":"YulFunctionCall","src":"5319:125:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5289:3:56"},"nodeType":"YulFunctionCall","src":"5289:163:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"5282:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":7838,"isOffset":false,"isSlot":false,"src":"5302:7:56","valueSize":1},{"declaration":7822,"isOffset":false,"isSlot":false,"src":"5420:12:56","valueSize":1},{"declaration":7855,"isOffset":false,"isSlot":false,"src":"5282:3:56","valueSize":1},{"declaration":7843,"isOffset":false,"isSlot":false,"src":"5342:15:56","valueSize":1},{"declaration":7849,"isOffset":false,"isSlot":false,"src":"5383:25:56","valueSize":1}],"id":7857,"nodeType":"InlineAssembly","src":"5265:193:56"},{"expression":{"id":7858,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7855,"src":"5470:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":7826,"id":7859,"nodeType":"Return","src":"5463:10:56"}]},"documentation":{"id":7814,"nodeType":"StructuredDocumentation","src":"4172:694:56","text":" @notice Encodes borrow parameters from standard input to compact representation of 1 bytes32\n @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n @param asset The address of the underlying asset to borrow\n @param amount The amount to be borrowed\n @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\n @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man\n @return compact representation of withdraw parameters"},"functionSelector":"1a64acf2","id":7861,"implemented":true,"kind":"function","modifiers":[],"name":"encodeBorrowParams","nameLocation":"4878:18:56","nodeType":"FunctionDefinition","parameters":{"id":7823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7816,"mutability":"mutable","name":"asset","nameLocation":"4910:5:56","nodeType":"VariableDeclaration","scope":7861,"src":"4902:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7815,"name":"address","nodeType":"ElementaryTypeName","src":"4902:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7818,"mutability":"mutable","name":"amount","nameLocation":"4929:6:56","nodeType":"VariableDeclaration","scope":7861,"src":"4921:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7817,"name":"uint256","nodeType":"ElementaryTypeName","src":"4921:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7820,"mutability":"mutable","name":"interestRateMode","nameLocation":"4949:16:56","nodeType":"VariableDeclaration","scope":7861,"src":"4941:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7819,"name":"uint256","nodeType":"ElementaryTypeName","src":"4941:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7822,"mutability":"mutable","name":"referralCode","nameLocation":"4978:12:56","nodeType":"VariableDeclaration","scope":7861,"src":"4971:19:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7821,"name":"uint16","nodeType":"ElementaryTypeName","src":"4971:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"4896:98:56"},"returnParameters":{"id":7826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7825,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7861,"src":"5018:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7824,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5018:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5017:9:56"},"scope":8201,"src":"4869:609:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7919,"nodeType":"Block","src":"6247:419:56","statements":[{"assignments":[7877],"declarations":[{"constant":false,"id":7877,"mutability":"mutable","name":"data","nameLocation":"6282:4:56","nodeType":"VariableDeclaration","scope":7919,"src":"6253:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7876,"nodeType":"UserDefinedTypeName","pathNode":{"id":7875,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"6253:21:56"},"referencedDeclaration":23909,"src":"6253:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7882,"initialValue":{"arguments":[{"id":7880,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7864,"src":"6309:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7878,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"6289:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"6289:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6289:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"6253:62:56"},{"assignments":[7884],"declarations":[{"constant":false,"id":7884,"mutability":"mutable","name":"assetId","nameLocation":"6329:7:56","nodeType":"VariableDeclaration","scope":7919,"src":"6322:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7883,"name":"uint16","nodeType":"ElementaryTypeName","src":"6322:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":7887,"initialValue":{"expression":{"id":7885,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7877,"src":"6339:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"6339:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"6322:24:56"},{"assignments":[7889],"declarations":[{"constant":false,"id":7889,"mutability":"mutable","name":"shortenedAmount","nameLocation":"6360:15:56","nodeType":"VariableDeclaration","scope":7919,"src":"6352:23:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7888,"name":"uint128","nodeType":"ElementaryTypeName","src":"6352:7:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":7906,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7890,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7866,"src":"6378:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":7893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6393:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7892,"name":"uint256","nodeType":"ElementaryTypeName","src":"6393:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":7891,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6388:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6388:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":7895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6388:17:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6378:27:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7902,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7866,"src":"6428:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"6428:16:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":7904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6428:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":7905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6378:68:56","trueExpression":{"expression":{"arguments":[{"id":7899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6413:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7898,"name":"uint128","nodeType":"ElementaryTypeName","src":"6413:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":7897,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6408:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6408:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":7901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6408:17:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6352:94:56"},{"assignments":[7908],"declarations":[{"constant":false,"id":7908,"mutability":"mutable","name":"shortenedInterestRateMode","nameLocation":"6458:25:56","nodeType":"VariableDeclaration","scope":7919,"src":"6452:31:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7907,"name":"uint8","nodeType":"ElementaryTypeName","src":"6452:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":7912,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7909,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7868,"src":"6486:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint8","nodeType":"MemberAccess","referencedDeclaration":1751,"src":"6486:24:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint8_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint8)"}},"id":7911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6486:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"6452:60:56"},{"assignments":[7914],"declarations":[{"constant":false,"id":7914,"mutability":"mutable","name":"res","nameLocation":"6527:3:56","nodeType":"VariableDeclaration","scope":7919,"src":"6519:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7913,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6519:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7915,"nodeType":"VariableDeclarationStatement","src":"6519:11:56"},{"AST":{"nodeType":"YulBlock","src":"6545:101:56","statements":[{"nodeType":"YulAssignment","src":"6553:87:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"6564:7:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6581:2:56","type":"","value":"16"},{"name":"shortenedAmount","nodeType":"YulIdentifier","src":"6585:15:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6577:3:56"},"nodeType":"YulFunctionCall","src":"6577:24:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6607:3:56","type":"","value":"144"},{"name":"shortenedInterestRateMode","nodeType":"YulIdentifier","src":"6612:25:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6603:3:56"},"nodeType":"YulFunctionCall","src":"6603:35:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6573:3:56"},"nodeType":"YulFunctionCall","src":"6573:66:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6560:3:56"},"nodeType":"YulFunctionCall","src":"6560:80:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"6553:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":7884,"isOffset":false,"isSlot":false,"src":"6564:7:56","valueSize":1},{"declaration":7914,"isOffset":false,"isSlot":false,"src":"6553:3:56","valueSize":1},{"declaration":7889,"isOffset":false,"isSlot":false,"src":"6585:15:56","valueSize":1},{"declaration":7908,"isOffset":false,"isSlot":false,"src":"6612:25:56","valueSize":1}],"id":7916,"nodeType":"InlineAssembly","src":"6536:110:56"},{"expression":{"id":7917,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7914,"src":"6658:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":7872,"id":7918,"nodeType":"Return","src":"6651:10:56"}]},"documentation":{"id":7862,"nodeType":"StructuredDocumentation","src":"5482:632:56","text":" @notice Encodes repay parameters from standard input to compact representation of 1 bytes32\n @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `interestRateMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @return compact representation of repay parameters"},"functionSelector":"9d2ffc1b","id":7920,"implemented":true,"kind":"function","modifiers":[],"name":"encodeRepayParams","nameLocation":"6126:17:56","nodeType":"FunctionDefinition","parameters":{"id":7869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7864,"mutability":"mutable","name":"asset","nameLocation":"6157:5:56","nodeType":"VariableDeclaration","scope":7920,"src":"6149:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7863,"name":"address","nodeType":"ElementaryTypeName","src":"6149:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7866,"mutability":"mutable","name":"amount","nameLocation":"6176:6:56","nodeType":"VariableDeclaration","scope":7920,"src":"6168:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7865,"name":"uint256","nodeType":"ElementaryTypeName","src":"6168:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7868,"mutability":"mutable","name":"interestRateMode","nameLocation":"6196:16:56","nodeType":"VariableDeclaration","scope":7920,"src":"6188:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7867,"name":"uint256","nodeType":"ElementaryTypeName","src":"6188:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6143:73:56"},"returnParameters":{"id":7872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7920,"src":"6238:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7870,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6238:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6237:9:56"},"scope":8201,"src":"6117:549:56","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":7999,"nodeType":"Block","src":"7900:639:56","statements":[{"assignments":[7948],"declarations":[{"constant":false,"id":7948,"mutability":"mutable","name":"data","nameLocation":"7935:4:56","nodeType":"VariableDeclaration","scope":7999,"src":"7906:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7947,"nodeType":"UserDefinedTypeName","pathNode":{"id":7946,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"7906:21:56"},"referencedDeclaration":23909,"src":"7906:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7953,"initialValue":{"arguments":[{"id":7951,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7923,"src":"7962:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7949,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"7942:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":7950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"7942:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7942:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"7906:62:56"},{"assignments":[7955],"declarations":[{"constant":false,"id":7955,"mutability":"mutable","name":"assetId","nameLocation":"7982:7:56","nodeType":"VariableDeclaration","scope":7999,"src":"7975:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7954,"name":"uint16","nodeType":"ElementaryTypeName","src":"7975:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":7958,"initialValue":{"expression":{"id":7956,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7948,"src":"7992:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"7992:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"7975:24:56"},{"assignments":[7960],"declarations":[{"constant":false,"id":7960,"mutability":"mutable","name":"shortenedAmount","nameLocation":"8013:15:56","nodeType":"VariableDeclaration","scope":7999,"src":"8005:23:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7959,"name":"uint128","nodeType":"ElementaryTypeName","src":"8005:7:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":7977,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7961,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7925,"src":"8031:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":7964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8046:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7963,"name":"uint256","nodeType":"ElementaryTypeName","src":"8046:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":7962,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8041:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8041:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":7966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"8041:17:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8031:27:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7973,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7925,"src":"8081:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"8081:16:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":7975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8081:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":7976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8031:68:56","trueExpression":{"expression":{"arguments":[{"id":7970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8066:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7969,"name":"uint128","nodeType":"ElementaryTypeName","src":"8066:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":7968,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8061:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8061:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":7972,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"8061:17:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"8005:94:56"},{"assignments":[7979],"declarations":[{"constant":false,"id":7979,"mutability":"mutable","name":"shortenedInterestRateMode","nameLocation":"8111:25:56","nodeType":"VariableDeclaration","scope":7999,"src":"8105:31:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7978,"name":"uint8","nodeType":"ElementaryTypeName","src":"8105:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":7983,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7980,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7927,"src":"8139:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint8","nodeType":"MemberAccess","referencedDeclaration":1751,"src":"8139:24:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint8_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint8)"}},"id":7982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8139:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"8105:60:56"},{"assignments":[7985],"declarations":[{"constant":false,"id":7985,"mutability":"mutable","name":"shortenedDeadline","nameLocation":"8178:17:56","nodeType":"VariableDeclaration","scope":7999,"src":"8171:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7984,"name":"uint32","nodeType":"ElementaryTypeName","src":"8171:6:56","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":7989,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7986,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7929,"src":"8198:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":1701,"src":"8198:17:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":7988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8198:19:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"8171:46:56"},{"assignments":[7991],"declarations":[{"constant":false,"id":7991,"mutability":"mutable","name":"res","nameLocation":"8232:3:56","nodeType":"VariableDeclaration","scope":7999,"src":"8224:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7990,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8224:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7992,"nodeType":"VariableDeclarationStatement","src":"8224:11:56"},{"AST":{"nodeType":"YulBlock","src":"8250:249:56","statements":[{"nodeType":"YulAssignment","src":"8258:235:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"8278:7:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8314:2:56","type":"","value":"16"},{"name":"shortenedAmount","nodeType":"YulIdentifier","src":"8318:15:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8310:3:56"},"nodeType":"YulFunctionCall","src":"8310:24:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8367:3:56","type":"","value":"144"},{"name":"shortenedInterestRateMode","nodeType":"YulIdentifier","src":"8372:25:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8363:3:56"},"nodeType":"YulFunctionCall","src":"8363:35:56"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8420:3:56","type":"","value":"152"},{"name":"shortenedDeadline","nodeType":"YulIdentifier","src":"8425:17:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8416:3:56"},"nodeType":"YulFunctionCall","src":"8416:27:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8449:3:56","type":"","value":"184"},{"name":"permitV","nodeType":"YulIdentifier","src":"8454:7:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8445:3:56"},"nodeType":"YulFunctionCall","src":"8445:17:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8412:3:56"},"nodeType":"YulFunctionCall","src":"8412:51:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8346:3:56"},"nodeType":"YulFunctionCall","src":"8346:129:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8295:3:56"},"nodeType":"YulFunctionCall","src":"8295:190:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8265:3:56"},"nodeType":"YulFunctionCall","src":"8265:228:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"8258:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":7955,"isOffset":false,"isSlot":false,"src":"8278:7:56","valueSize":1},{"declaration":7931,"isOffset":false,"isSlot":false,"src":"8454:7:56","valueSize":1},{"declaration":7991,"isOffset":false,"isSlot":false,"src":"8258:3:56","valueSize":1},{"declaration":7960,"isOffset":false,"isSlot":false,"src":"8318:15:56","valueSize":1},{"declaration":7985,"isOffset":false,"isSlot":false,"src":"8425:17:56","valueSize":1},{"declaration":7979,"isOffset":false,"isSlot":false,"src":"8372:25:56","valueSize":1}],"id":7993,"nodeType":"InlineAssembly","src":"8241:258:56"},{"expression":{"components":[{"id":7994,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7991,"src":"8512:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7995,"name":"permitR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"8517:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7996,"name":"permitS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7935,"src":"8526:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":7997,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8511:23:56","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32,bytes32)"}},"functionReturnParameters":7943,"id":7998,"nodeType":"Return","src":"8504:30:56"}]},"documentation":{"id":7921,"nodeType":"StructuredDocumentation","src":"6670:984:56","text":" @notice Encodes repayWithPermit parameters from standard input to compact representation of 3 bytes32\n @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @param deadline The deadline timestamp that the permit is valid\n @param permitV The V parameter of ERC712 permit sig\n @param permitR The R parameter of ERC712 permit sig\n @param permitS The S parameter of ERC712 permit sig\n @return compact representation of repayWithPermit parameters\n @return The R parameter of ERC712 permit sig\n @return The S parameter of ERC712 permit sig"},"functionSelector":"fed63a93","id":8000,"implemented":true,"kind":"function","modifiers":[],"name":"encodeRepayWithPermitParams","nameLocation":"7666:27:56","nodeType":"FunctionDefinition","parameters":{"id":7936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7923,"mutability":"mutable","name":"asset","nameLocation":"7707:5:56","nodeType":"VariableDeclaration","scope":8000,"src":"7699:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7922,"name":"address","nodeType":"ElementaryTypeName","src":"7699:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7925,"mutability":"mutable","name":"amount","nameLocation":"7726:6:56","nodeType":"VariableDeclaration","scope":8000,"src":"7718:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7924,"name":"uint256","nodeType":"ElementaryTypeName","src":"7718:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7927,"mutability":"mutable","name":"interestRateMode","nameLocation":"7746:16:56","nodeType":"VariableDeclaration","scope":8000,"src":"7738:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7926,"name":"uint256","nodeType":"ElementaryTypeName","src":"7738:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7929,"mutability":"mutable","name":"deadline","nameLocation":"7776:8:56","nodeType":"VariableDeclaration","scope":8000,"src":"7768:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7928,"name":"uint256","nodeType":"ElementaryTypeName","src":"7768:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7931,"mutability":"mutable","name":"permitV","nameLocation":"7796:7:56","nodeType":"VariableDeclaration","scope":8000,"src":"7790:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7930,"name":"uint8","nodeType":"ElementaryTypeName","src":"7790:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7933,"mutability":"mutable","name":"permitR","nameLocation":"7817:7:56","nodeType":"VariableDeclaration","scope":8000,"src":"7809:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7932,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7809:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7935,"mutability":"mutable","name":"permitS","nameLocation":"7838:7:56","nodeType":"VariableDeclaration","scope":8000,"src":"7830:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7934,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7830:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7693:156:56"},"returnParameters":{"id":7943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7938,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8000,"src":"7873:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7937,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7873:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7940,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8000,"src":"7882:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7939,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7882:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7942,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8000,"src":"7891:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7941,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7891:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7872:27:56"},"scope":8201,"src":"7657:882:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8018,"nodeType":"Block","src":"9230:68:56","statements":[{"expression":{"arguments":[{"id":8013,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8003,"src":"9261:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8014,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8005,"src":"9268:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8015,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8007,"src":"9276:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8012,"name":"encodeRepayParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7920,"src":"9243:17:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (address,uint256,uint256) view returns (bytes32)"}},"id":8016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9243:50:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8011,"id":8017,"nodeType":"Return","src":"9236:57:56"}]},"documentation":{"id":8001,"nodeType":"StructuredDocumentation","src":"8543:541:56","text":" @notice Encodes repay with aToken parameters from standard input to compact representation of 1 bytes32\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @return compact representation of repay with aToken parameters"},"functionSelector":"8da7fb18","id":8019,"implemented":true,"kind":"function","modifiers":[],"name":"encodeRepayWithATokensParams","nameLocation":"9096:28:56","nodeType":"FunctionDefinition","parameters":{"id":8008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8003,"mutability":"mutable","name":"asset","nameLocation":"9138:5:56","nodeType":"VariableDeclaration","scope":8019,"src":"9130:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8002,"name":"address","nodeType":"ElementaryTypeName","src":"9130:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8005,"mutability":"mutable","name":"amount","nameLocation":"9157:6:56","nodeType":"VariableDeclaration","scope":8019,"src":"9149:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8004,"name":"uint256","nodeType":"ElementaryTypeName","src":"9149:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8007,"mutability":"mutable","name":"interestRateMode","nameLocation":"9177:16:56","nodeType":"VariableDeclaration","scope":8019,"src":"9169:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8006,"name":"uint256","nodeType":"ElementaryTypeName","src":"9169:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9124:73:56"},"returnParameters":{"id":8011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8010,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8019,"src":"9221:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8009,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9221:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9220:9:56"},"scope":8201,"src":"9087:211:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8056,"nodeType":"Block","src":"9801:285:56","statements":[{"assignments":[8033],"declarations":[{"constant":false,"id":8033,"mutability":"mutable","name":"data","nameLocation":"9836:4:56","nodeType":"VariableDeclaration","scope":8056,"src":"9807:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":8032,"nodeType":"UserDefinedTypeName","pathNode":{"id":8031,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"9807:21:56"},"referencedDeclaration":23909,"src":"9807:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":8038,"initialValue":{"arguments":[{"id":8036,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8022,"src":"9863:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8034,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"9843:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":8035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"9843:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":8037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9843:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"9807:62:56"},{"assignments":[8040],"declarations":[{"constant":false,"id":8040,"mutability":"mutable","name":"assetId","nameLocation":"9882:7:56","nodeType":"VariableDeclaration","scope":8056,"src":"9875:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":8039,"name":"uint16","nodeType":"ElementaryTypeName","src":"9875:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":8043,"initialValue":{"expression":{"id":8041,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8033,"src":"9892:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":8042,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"9892:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"9875:24:56"},{"assignments":[8045],"declarations":[{"constant":false,"id":8045,"mutability":"mutable","name":"shortenedInterestRateMode","nameLocation":"9911:25:56","nodeType":"VariableDeclaration","scope":8056,"src":"9905:31:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8044,"name":"uint8","nodeType":"ElementaryTypeName","src":"9905:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":8049,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8046,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8024,"src":"9939:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint8","nodeType":"MemberAccess","referencedDeclaration":1751,"src":"9939:24:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint8_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint8)"}},"id":8048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9939:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"9905:60:56"},{"assignments":[8051],"declarations":[{"constant":false,"id":8051,"mutability":"mutable","name":"res","nameLocation":"9979:3:56","nodeType":"VariableDeclaration","scope":8056,"src":"9971:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8050,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9971:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8052,"nodeType":"VariableDeclarationStatement","src":"9971:11:56"},{"AST":{"nodeType":"YulBlock","src":"9997:69:56","statements":[{"nodeType":"YulAssignment","src":"10005:55:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"10016:7:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10029:2:56","type":"","value":"16"},{"name":"shortenedInterestRateMode","nodeType":"YulIdentifier","src":"10033:25:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10025:3:56"},"nodeType":"YulFunctionCall","src":"10025:34:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10012:3:56"},"nodeType":"YulFunctionCall","src":"10012:48:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"10005:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":8040,"isOffset":false,"isSlot":false,"src":"10016:7:56","valueSize":1},{"declaration":8051,"isOffset":false,"isSlot":false,"src":"10005:3:56","valueSize":1},{"declaration":8045,"isOffset":false,"isSlot":false,"src":"10033:25:56","valueSize":1}],"id":8053,"nodeType":"InlineAssembly","src":"9988:78:56"},{"expression":{"id":8054,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8051,"src":"10078:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8028,"id":8055,"nodeType":"Return","src":"10071:10:56"}]},"documentation":{"id":8020,"nodeType":"StructuredDocumentation","src":"9302:377:56","text":" @notice Encodes swap borrow rate mode parameters from standard input to compact representation of 1 bytes32\n @param asset The address of the underlying asset borrowed\n @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\n @return compact representation of swap borrow rate mode parameters"},"functionSelector":"1fd34797","id":8057,"implemented":true,"kind":"function","modifiers":[],"name":"encodeSwapBorrowRateMode","nameLocation":"9691:24:56","nodeType":"FunctionDefinition","parameters":{"id":8025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8022,"mutability":"mutable","name":"asset","nameLocation":"9729:5:56","nodeType":"VariableDeclaration","scope":8057,"src":"9721:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8021,"name":"address","nodeType":"ElementaryTypeName","src":"9721:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8024,"mutability":"mutable","name":"interestRateMode","nameLocation":"9748:16:56","nodeType":"VariableDeclaration","scope":8057,"src":"9740:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8023,"name":"uint256","nodeType":"ElementaryTypeName","src":"9740:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9715:53:56"},"returnParameters":{"id":8028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8027,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8057,"src":"9792:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8026,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9792:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9791:9:56"},"scope":8201,"src":"9682:404:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8088,"nodeType":"Block","src":"10536:199:56","statements":[{"assignments":[8071],"declarations":[{"constant":false,"id":8071,"mutability":"mutable","name":"data","nameLocation":"10571:4:56","nodeType":"VariableDeclaration","scope":8088,"src":"10542:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":8070,"nodeType":"UserDefinedTypeName","pathNode":{"id":8069,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"10542:21:56"},"referencedDeclaration":23909,"src":"10542:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":8076,"initialValue":{"arguments":[{"id":8074,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8060,"src":"10598:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8072,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"10578:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":8073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"10578:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":8075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10578:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"10542:62:56"},{"assignments":[8078],"declarations":[{"constant":false,"id":8078,"mutability":"mutable","name":"assetId","nameLocation":"10617:7:56","nodeType":"VariableDeclaration","scope":8088,"src":"10610:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":8077,"name":"uint16","nodeType":"ElementaryTypeName","src":"10610:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":8081,"initialValue":{"expression":{"id":8079,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8071,"src":"10627:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":8080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"10627:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"10610:24:56"},{"assignments":[8083],"declarations":[{"constant":false,"id":8083,"mutability":"mutable","name":"res","nameLocation":"10649:3:56","nodeType":"VariableDeclaration","scope":8088,"src":"10641:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8082,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10641:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8084,"nodeType":"VariableDeclarationStatement","src":"10641:11:56"},{"AST":{"nodeType":"YulBlock","src":"10667:48:56","statements":[{"nodeType":"YulAssignment","src":"10675:34:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"10686:7:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10699:2:56","type":"","value":"16"},{"name":"user","nodeType":"YulIdentifier","src":"10703:4:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10695:3:56"},"nodeType":"YulFunctionCall","src":"10695:13:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10682:3:56"},"nodeType":"YulFunctionCall","src":"10682:27:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"10675:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":8078,"isOffset":false,"isSlot":false,"src":"10686:7:56","valueSize":1},{"declaration":8083,"isOffset":false,"isSlot":false,"src":"10675:3:56","valueSize":1},{"declaration":8062,"isOffset":false,"isSlot":false,"src":"10703:4:56","valueSize":1}],"id":8085,"nodeType":"InlineAssembly","src":"10658:57:56"},{"expression":{"id":8086,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8083,"src":"10727:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8066,"id":8087,"nodeType":"Return","src":"10720:10:56"}]},"documentation":{"id":8058,"nodeType":"StructuredDocumentation","src":"10090:329:56","text":" @notice Encodes rebalance stable borrow rate parameters from standard input to compact representation of 1 bytes32\n @param asset The address of the underlying asset borrowed\n @param user The address of the user to be rebalanced\n @return compact representation of rebalance stable borrow rate parameters"},"functionSelector":"1a8f6dee","id":8089,"implemented":true,"kind":"function","modifiers":[],"name":"encodeRebalanceStableBorrowRate","nameLocation":"10431:31:56","nodeType":"FunctionDefinition","parameters":{"id":8063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8060,"mutability":"mutable","name":"asset","nameLocation":"10476:5:56","nodeType":"VariableDeclaration","scope":8089,"src":"10468:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8059,"name":"address","nodeType":"ElementaryTypeName","src":"10468:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8062,"mutability":"mutable","name":"user","nameLocation":"10495:4:56","nodeType":"VariableDeclaration","scope":8089,"src":"10487:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8061,"name":"address","nodeType":"ElementaryTypeName","src":"10487:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10462:41:56"},"returnParameters":{"id":8066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8089,"src":"10527:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8064,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10527:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10526:9:56"},"scope":8201,"src":"10422:313:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8120,"nodeType":"Block","src":"11251:209:56","statements":[{"assignments":[8103],"declarations":[{"constant":false,"id":8103,"mutability":"mutable","name":"data","nameLocation":"11286:4:56","nodeType":"VariableDeclaration","scope":8120,"src":"11257:33:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":8102,"nodeType":"UserDefinedTypeName","pathNode":{"id":8101,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"11257:21:56"},"referencedDeclaration":23909,"src":"11257:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":8108,"initialValue":{"arguments":[{"id":8106,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8092,"src":"11313:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8104,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"11293:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":8105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"11293:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":8107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11293:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"11257:62:56"},{"assignments":[8110],"declarations":[{"constant":false,"id":8110,"mutability":"mutable","name":"assetId","nameLocation":"11332:7:56","nodeType":"VariableDeclaration","scope":8120,"src":"11325:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":8109,"name":"uint16","nodeType":"ElementaryTypeName","src":"11325:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":8113,"initialValue":{"expression":{"id":8111,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8103,"src":"11342:4:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":8112,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"11342:7:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"11325:24:56"},{"assignments":[8115],"declarations":[{"constant":false,"id":8115,"mutability":"mutable","name":"res","nameLocation":"11363:3:56","nodeType":"VariableDeclaration","scope":8120,"src":"11355:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8114,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11355:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8116,"nodeType":"VariableDeclarationStatement","src":"11355:11:56"},{"AST":{"nodeType":"YulBlock","src":"11381:59:56","statements":[{"nodeType":"YulAssignment","src":"11389:45:56","value":{"arguments":[{"name":"assetId","nodeType":"YulIdentifier","src":"11400:7:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11413:2:56","type":"","value":"16"},{"name":"useAsCollateral","nodeType":"YulIdentifier","src":"11417:15:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11409:3:56"},"nodeType":"YulFunctionCall","src":"11409:24:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11396:3:56"},"nodeType":"YulFunctionCall","src":"11396:38:56"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"11389:3:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":8110,"isOffset":false,"isSlot":false,"src":"11400:7:56","valueSize":1},{"declaration":8115,"isOffset":false,"isSlot":false,"src":"11389:3:56","valueSize":1},{"declaration":8094,"isOffset":false,"isSlot":false,"src":"11417:15:56","valueSize":1}],"id":8117,"nodeType":"InlineAssembly","src":"11372:68:56"},{"expression":{"id":8118,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8115,"src":"11452:3:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":8098,"id":8119,"nodeType":"Return","src":"11445:10:56"}]},"documentation":{"id":8090,"nodeType":"StructuredDocumentation","src":"10739:383:56","text":" @notice Encodes set user use reserve as collateral parameters from standard input to compact representation of 1 bytes32\n @param asset The address of the underlying asset borrowed\n @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\n @return compact representation of set user use reserve as collateral parameters"},"functionSelector":"fc0eed85","id":8121,"implemented":true,"kind":"function","modifiers":[],"name":"encodeSetUserUseReserveAsCollateral","nameLocation":"11134:35:56","nodeType":"FunctionDefinition","parameters":{"id":8095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8092,"mutability":"mutable","name":"asset","nameLocation":"11183:5:56","nodeType":"VariableDeclaration","scope":8121,"src":"11175:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8091,"name":"address","nodeType":"ElementaryTypeName","src":"11175:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8094,"mutability":"mutable","name":"useAsCollateral","nameLocation":"11199:15:56","nodeType":"VariableDeclaration","scope":8121,"src":"11194:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8093,"name":"bool","nodeType":"ElementaryTypeName","src":"11194:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11169:49:56"},"returnParameters":{"id":8098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8097,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8121,"src":"11242:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8096,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11242:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11241:9:56"},"scope":8201,"src":"11125:335:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8199,"nodeType":"Block","src":"12489:614:56","statements":[{"assignments":[8143],"declarations":[{"constant":false,"id":8143,"mutability":"mutable","name":"collateralData","nameLocation":"12524:14:56","nodeType":"VariableDeclaration","scope":8199,"src":"12495:43:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":8142,"nodeType":"UserDefinedTypeName","pathNode":{"id":8141,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"12495:21:56"},"referencedDeclaration":23909,"src":"12495:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":8148,"initialValue":{"arguments":[{"id":8146,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8124,"src":"12561:15:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8144,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"12541:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":8145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"12541:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":8147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12541:36:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"12495:82:56"},{"assignments":[8150],"declarations":[{"constant":false,"id":8150,"mutability":"mutable","name":"collateralAssetId","nameLocation":"12590:17:56","nodeType":"VariableDeclaration","scope":8199,"src":"12583:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":8149,"name":"uint16","nodeType":"ElementaryTypeName","src":"12583:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":8153,"initialValue":{"expression":{"id":8151,"name":"collateralData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"12610:14:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":8152,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"12610:17:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"12583:44:56"},{"assignments":[8158],"declarations":[{"constant":false,"id":8158,"mutability":"mutable","name":"debtData","nameLocation":"12663:8:56","nodeType":"VariableDeclaration","scope":8199,"src":"12634:37:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":8157,"nodeType":"UserDefinedTypeName","pathNode":{"id":8156,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"12634:21:56"},"referencedDeclaration":23909,"src":"12634:21:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":8163,"initialValue":{"arguments":[{"id":8161,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8126,"src":"12694:9:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8159,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"12674:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":8160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"12674:19:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":8162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12674:30:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"12634:70:56"},{"assignments":[8165],"declarations":[{"constant":false,"id":8165,"mutability":"mutable","name":"debtAssetId","nameLocation":"12717:11:56","nodeType":"VariableDeclaration","scope":8199,"src":"12710:18:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":8164,"name":"uint16","nodeType":"ElementaryTypeName","src":"12710:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":8168,"initialValue":{"expression":{"id":8166,"name":"debtData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8158,"src":"12731:8:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":8167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"12731:11:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"12710:32:56"},{"assignments":[8170],"declarations":[{"constant":false,"id":8170,"mutability":"mutable","name":"shortenedDebtToCover","nameLocation":"12757:20:56","nodeType":"VariableDeclaration","scope":8199,"src":"12749:28:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":8169,"name":"uint128","nodeType":"ElementaryTypeName","src":"12749:7:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":8187,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8171,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8130,"src":"12780:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":8174,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12800:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8173,"name":"uint256","nodeType":"ElementaryTypeName","src":"12800:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":8172,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12795:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12795:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":8176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"12795:17:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12780:32:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8183,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8130,"src":"12847:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"12847:21:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":8185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12847:23:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":8186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12780:90:56","trueExpression":{"expression":{"arguments":[{"id":8180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12826:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":8179,"name":"uint128","nodeType":"ElementaryTypeName","src":"12826:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":8178,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12821:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12821:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":8182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"12821:17:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"12749:121:56"},{"assignments":[8189],"declarations":[{"constant":false,"id":8189,"mutability":"mutable","name":"res1","nameLocation":"12885:4:56","nodeType":"VariableDeclaration","scope":8199,"src":"12877:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8188,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12877:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8190,"nodeType":"VariableDeclarationStatement","src":"12877:12:56"},{"assignments":[8192],"declarations":[{"constant":false,"id":8192,"mutability":"mutable","name":"res2","nameLocation":"12903:4:56","nodeType":"VariableDeclaration","scope":8199,"src":"12895:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12895:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8193,"nodeType":"VariableDeclarationStatement","src":"12895:12:56"},{"AST":{"nodeType":"YulBlock","src":"12923:151:56","statements":[{"nodeType":"YulAssignment","src":"12931:72:56","value":{"arguments":[{"arguments":[{"name":"collateralAssetId","nodeType":"YulIdentifier","src":"12947:17:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12970:2:56","type":"","value":"16"},{"name":"debtAssetId","nodeType":"YulIdentifier","src":"12974:11:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12966:3:56"},"nodeType":"YulFunctionCall","src":"12966:20:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12943:3:56"},"nodeType":"YulFunctionCall","src":"12943:44:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12993:2:56","type":"","value":"32"},{"name":"user","nodeType":"YulIdentifier","src":"12997:4:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12989:3:56"},"nodeType":"YulFunctionCall","src":"12989:13:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12939:3:56"},"nodeType":"YulFunctionCall","src":"12939:64:56"},"variableNames":[{"name":"res1","nodeType":"YulIdentifier","src":"12931:4:56"}]},{"nodeType":"YulAssignment","src":"13010:58:56","value":{"arguments":[{"name":"shortenedDebtToCover","nodeType":"YulIdentifier","src":"13022:20:56"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13048:3:56","type":"","value":"128"},{"name":"receiveAToken","nodeType":"YulIdentifier","src":"13053:13:56"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13044:3:56"},"nodeType":"YulFunctionCall","src":"13044:23:56"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13018:3:56"},"nodeType":"YulFunctionCall","src":"13018:50:56"},"variableNames":[{"name":"res2","nodeType":"YulIdentifier","src":"13010:4:56"}]}]},"evmVersion":"london","externalReferences":[{"declaration":8150,"isOffset":false,"isSlot":false,"src":"12947:17:56","valueSize":1},{"declaration":8165,"isOffset":false,"isSlot":false,"src":"12974:11:56","valueSize":1},{"declaration":8132,"isOffset":false,"isSlot":false,"src":"13053:13:56","valueSize":1},{"declaration":8189,"isOffset":false,"isSlot":false,"src":"12931:4:56","valueSize":1},{"declaration":8192,"isOffset":false,"isSlot":false,"src":"13010:4:56","valueSize":1},{"declaration":8170,"isOffset":false,"isSlot":false,"src":"13022:20:56","valueSize":1},{"declaration":8128,"isOffset":false,"isSlot":false,"src":"12997:4:56","valueSize":1}],"id":8194,"nodeType":"InlineAssembly","src":"12914:160:56"},{"expression":{"components":[{"id":8195,"name":"res1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8189,"src":"13087:4:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8196,"name":"res2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8192,"src":"13093:4:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":8197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13086:12:56","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32)"}},"functionReturnParameters":8138,"id":8198,"nodeType":"Return","src":"13079:19:56"}]},"documentation":{"id":8122,"nodeType":"StructuredDocumentation","src":"11464:827:56","text":" @notice Encodes liquidation call parameters from standard input to compact representation of 2 bytes32\n @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n @param user The address of the borrower getting liquidated\n @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n to receive the underlying collateral asset directly\n @return First half ot compact representation of liquidation call parameters\n @return Second half ot compact representation of liquidation call parameters"},"functionSelector":"88d51852","id":8200,"implemented":true,"kind":"function","modifiers":[],"name":"encodeLiquidationCall","nameLocation":"12303:21:56","nodeType":"FunctionDefinition","parameters":{"id":8133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8124,"mutability":"mutable","name":"collateralAsset","nameLocation":"12338:15:56","nodeType":"VariableDeclaration","scope":8200,"src":"12330:23:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8123,"name":"address","nodeType":"ElementaryTypeName","src":"12330:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8126,"mutability":"mutable","name":"debtAsset","nameLocation":"12367:9:56","nodeType":"VariableDeclaration","scope":8200,"src":"12359:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8125,"name":"address","nodeType":"ElementaryTypeName","src":"12359:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8128,"mutability":"mutable","name":"user","nameLocation":"12390:4:56","nodeType":"VariableDeclaration","scope":8200,"src":"12382:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8127,"name":"address","nodeType":"ElementaryTypeName","src":"12382:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8130,"mutability":"mutable","name":"debtToCover","nameLocation":"12408:11:56","nodeType":"VariableDeclaration","scope":8200,"src":"12400:19:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8129,"name":"uint256","nodeType":"ElementaryTypeName","src":"12400:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8132,"mutability":"mutable","name":"receiveAToken","nameLocation":"12430:13:56","nodeType":"VariableDeclaration","scope":8200,"src":"12425:18:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8131,"name":"bool","nodeType":"ElementaryTypeName","src":"12425:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12324:123:56"},"returnParameters":{"id":8138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8135,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8200,"src":"12471:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8134,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12471:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8200,"src":"12480:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8136,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12480:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12470:18:56"},"scope":8201,"src":"12294:809:56","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":8202,"src":"484:12621:56","usedErrors":[]}],"src":"37:13069:56"},"id":56},"contracts/misc/ZeroReserveInterestRateStrategy.sol":{"ast":{"absolutePath":"contracts/misc/ZeroReserveInterestRateStrategy.sol","exportedSymbols":{"DataTypes":[24227],"IDefaultInterestRateStrategy":[4216],"IPoolAddressesProvider":[5282],"IReserveInterestRateStrategy":[6126],"ZeroReserveInterestRateStrategy":[8367]},"id":8368,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8203,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:57"},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../protocol/libraries/types/DataTypes.sol","id":8205,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8368,"sourceUnit":24228,"src":"63:68:57","symbolAliases":[{"foreign":{"id":8204,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:9:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IDefaultInterestRateStrategy.sol","file":"../interfaces/IDefaultInterestRateStrategy.sol","id":8207,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8368,"sourceUnit":4217,"src":"132:92:57","symbolAliases":[{"foreign":{"id":8206,"name":"IDefaultInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"140:28:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IReserveInterestRateStrategy.sol","file":"../interfaces/IReserveInterestRateStrategy.sol","id":8209,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8368,"sourceUnit":6127,"src":"225:92:57","symbolAliases":[{"foreign":{"id":8208,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"233:28:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../interfaces/IPoolAddressesProvider.sol","id":8211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8368,"sourceUnit":5283,"src":"318:80:57","symbolAliases":[{"foreign":{"id":8210,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"326:22:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8213,"name":"IDefaultInterestRateStrategy","nodeType":"IdentifierPath","referencedDeclaration":4216,"src":"642:28:57"},"id":8214,"nodeType":"InheritanceSpecifier","src":"642:28:57"}],"canonicalName":"ZeroReserveInterestRateStrategy","contractDependencies":[],"contractKind":"contract","documentation":{"id":8212,"nodeType":"StructuredDocumentation","src":"400:197:57","text":" @title ZeroReserveInterestRateStrategy contract\n @author Aave\n @notice Interest Rate Strategy contract, with all parameters zeroed.\n @dev It returns zero liquidity and borrow rate."},"fullyImplemented":true,"id":8367,"linearizedBaseContracts":[8367,4216,6126],"name":"ZeroReserveInterestRateStrategy","nameLocation":"607:31:57","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[4142],"constant":true,"documentation":{"id":8215,"nodeType":"StructuredDocumentation","src":"675:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"54c365c6","id":8218,"mutability":"constant","name":"OPTIMAL_USAGE_RATIO","nameLocation":"746:19:57","nodeType":"VariableDeclaration","scope":8367,"src":"722:47:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8216,"name":"uint256","nodeType":"ElementaryTypeName","src":"722:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"768:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"baseFunctions":[4148],"constant":true,"documentation":{"id":8219,"nodeType":"StructuredDocumentation","src":"774:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"6fb92589","id":8222,"mutability":"constant","name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"845:34:57","nodeType":"VariableDeclaration","scope":8367,"src":"821:62:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8220,"name":"uint256","nodeType":"ElementaryTypeName","src":"821:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"882:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"baseFunctions":[4154],"constant":true,"documentation":{"id":8223,"nodeType":"StructuredDocumentation","src":"888:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"a9c622f8","id":8226,"mutability":"constant","name":"MAX_EXCESS_USAGE_RATIO","nameLocation":"959:22:57","nodeType":"VariableDeclaration","scope":8367,"src":"935:50:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8224,"name":"uint256","nodeType":"ElementaryTypeName","src":"935:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"984:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"baseFunctions":[4160],"constant":true,"documentation":{"id":8227,"nodeType":"StructuredDocumentation","src":"990:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"fe5fd698","id":8230,"mutability":"constant","name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"1061:37:57","nodeType":"VariableDeclaration","scope":8367,"src":"1037:65:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8228,"name":"uint256","nodeType":"ElementaryTypeName","src":"1037:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1101:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"baseFunctions":[4167],"constant":false,"functionSelector":"0542975c","id":8233,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"1147:18:57","nodeType":"VariableDeclaration","scope":8367,"src":"1107:58:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":8232,"nodeType":"UserDefinedTypeName","pathNode":{"id":8231,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1107:22:57"},"referencedDeclaration":5282,"src":"1107:22:57","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"constant":true,"id":8236,"mutability":"constant","name":"_baseVariableBorrowRate","nameLocation":"1265:23:57","nodeType":"VariableDeclaration","scope":8367,"src":"1239:53:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8234,"name":"uint256","nodeType":"ElementaryTypeName","src":"1239:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1291:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":8239,"mutability":"constant","name":"_variableRateSlope1","nameLocation":"1431:19:57","nodeType":"VariableDeclaration","scope":8367,"src":"1405:49:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8237,"name":"uint256","nodeType":"ElementaryTypeName","src":"1405:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1453:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":8242,"mutability":"constant","name":"_variableRateSlope2","nameLocation":"1584:19:57","nodeType":"VariableDeclaration","scope":8367,"src":"1558:49:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8240,"name":"uint256","nodeType":"ElementaryTypeName","src":"1558:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1606:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":8245,"mutability":"constant","name":"_stableRateSlope1","nameLocation":"1744:17:57","nodeType":"VariableDeclaration","scope":8367,"src":"1718:47:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8243,"name":"uint256","nodeType":"ElementaryTypeName","src":"1718:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8244,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1764:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":8248,"mutability":"constant","name":"_stableRateSlope2","nameLocation":"1893:17:57","nodeType":"VariableDeclaration","scope":8367,"src":"1867:47:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8246,"name":"uint256","nodeType":"ElementaryTypeName","src":"1867:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1913:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":8251,"mutability":"constant","name":"_baseStableRateOffset","nameLocation":"2021:21:57","nodeType":"VariableDeclaration","scope":8367,"src":"1995:51:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8249,"name":"uint256","nodeType":"ElementaryTypeName","src":"1995:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2045:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":8254,"mutability":"constant","name":"_stableRateExcessOffset","nameLocation":"2186:23:57","nodeType":"VariableDeclaration","scope":8367,"src":"2160:53:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8252,"name":"uint256","nodeType":"ElementaryTypeName","src":"2160:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":8253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2212:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"body":{"id":8265,"nodeType":"Block","src":"2369:40:57","statements":[{"expression":{"id":8263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8261,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8233,"src":"2375:18:57","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8262,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8258,"src":"2396:8:57","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"2375:29:57","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":8264,"nodeType":"ExpressionStatement","src":"2375:29:57"}]},"documentation":{"id":8255,"nodeType":"StructuredDocumentation","src":"2218:103:57","text":" @dev Constructor.\n @param provider The address of the PoolAddressesProvider contract"},"id":8266,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8258,"mutability":"mutable","name":"provider","nameLocation":"2359:8:57","nodeType":"VariableDeclaration","scope":8266,"src":"2336:31:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":8257,"nodeType":"UserDefinedTypeName","pathNode":{"id":8256,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"2336:22:57"},"referencedDeclaration":5282,"src":"2336:22:57","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"2335:33:57"},"returnParameters":{"id":8260,"nodeType":"ParameterList","parameters":[],"src":"2369:0:57"},"scope":8367,"src":"2324:85:57","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4173],"body":{"id":8274,"nodeType":"Block","src":"2525:37:57","statements":[{"expression":{"id":8272,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8239,"src":"2538:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8271,"id":8273,"nodeType":"Return","src":"2531:26:57"}]},"documentation":{"id":8267,"nodeType":"StructuredDocumentation","src":"2413:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"0b3429a2","id":8275,"implemented":true,"kind":"function","modifiers":[],"name":"getVariableRateSlope1","nameLocation":"2469:21:57","nodeType":"FunctionDefinition","parameters":{"id":8268,"nodeType":"ParameterList","parameters":[],"src":"2490:2:57"},"returnParameters":{"id":8271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8270,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8275,"src":"2516:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8269,"name":"uint256","nodeType":"ElementaryTypeName","src":"2516:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2515:9:57"},"scope":8367,"src":"2460:102:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4179],"body":{"id":8283,"nodeType":"Block","src":"2678:37:57","statements":[{"expression":{"id":8281,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8242,"src":"2691:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8280,"id":8282,"nodeType":"Return","src":"2684:26:57"}]},"documentation":{"id":8276,"nodeType":"StructuredDocumentation","src":"2566:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"f4202409","id":8284,"implemented":true,"kind":"function","modifiers":[],"name":"getVariableRateSlope2","nameLocation":"2622:21:57","nodeType":"FunctionDefinition","parameters":{"id":8277,"nodeType":"ParameterList","parameters":[],"src":"2643:2:57"},"returnParameters":{"id":8280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8279,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8284,"src":"2669:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8278,"name":"uint256","nodeType":"ElementaryTypeName","src":"2669:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2668:9:57"},"scope":8367,"src":"2613:102:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4185],"body":{"id":8292,"nodeType":"Block","src":"2829:35:57","statements":[{"expression":{"id":8290,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8245,"src":"2842:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8289,"id":8291,"nodeType":"Return","src":"2835:24:57"}]},"documentation":{"id":8285,"nodeType":"StructuredDocumentation","src":"2719:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"d5cd7391","id":8293,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateSlope1","nameLocation":"2775:19:57","nodeType":"FunctionDefinition","parameters":{"id":8286,"nodeType":"ParameterList","parameters":[],"src":"2794:2:57"},"returnParameters":{"id":8289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8288,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8293,"src":"2820:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8287,"name":"uint256","nodeType":"ElementaryTypeName","src":"2820:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2819:9:57"},"scope":8367,"src":"2766:98:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4191],"body":{"id":8301,"nodeType":"Block","src":"2978:35:57","statements":[{"expression":{"id":8299,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8248,"src":"2991:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8298,"id":8300,"nodeType":"Return","src":"2984:24:57"}]},"documentation":{"id":8294,"nodeType":"StructuredDocumentation","src":"2868:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"14e32da4","id":8302,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateSlope2","nameLocation":"2924:19:57","nodeType":"FunctionDefinition","parameters":{"id":8295,"nodeType":"ParameterList","parameters":[],"src":"2943:2:57"},"returnParameters":{"id":8298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8302,"src":"2969:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8296,"name":"uint256","nodeType":"ElementaryTypeName","src":"2969:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2968:9:57"},"scope":8367,"src":"2915:98:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4197],"body":{"id":8310,"nodeType":"Block","src":"3133:41:57","statements":[{"expression":{"id":8308,"name":"_stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8254,"src":"3146:23:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8307,"id":8309,"nodeType":"Return","src":"3139:30:57"}]},"documentation":{"id":8303,"nodeType":"StructuredDocumentation","src":"3017:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"bc626908","id":8311,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateExcessOffset","nameLocation":"3073:25:57","nodeType":"FunctionDefinition","parameters":{"id":8304,"nodeType":"ParameterList","parameters":[],"src":"3098:2:57"},"returnParameters":{"id":8307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8311,"src":"3124:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8305,"name":"uint256","nodeType":"ElementaryTypeName","src":"3124:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3123:9:57"},"scope":8367,"src":"3064:110:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4203],"body":{"id":8321,"nodeType":"Block","src":"3290:61:57","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8319,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":8317,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8239,"src":"3303:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":8318,"name":"_baseStableRateOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8251,"src":"3325:21:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3303:43:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8316,"id":8320,"nodeType":"Return","src":"3296:50:57"}]},"documentation":{"id":8312,"nodeType":"StructuredDocumentation","src":"3178:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"acd78686","id":8322,"implemented":true,"kind":"function","modifiers":[],"name":"getBaseStableBorrowRate","nameLocation":"3234:23:57","nodeType":"FunctionDefinition","parameters":{"id":8313,"nodeType":"ParameterList","parameters":[],"src":"3257:2:57"},"returnParameters":{"id":8316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8322,"src":"3281:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8314,"name":"uint256","nodeType":"ElementaryTypeName","src":"3281:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3280:9:57"},"scope":8367,"src":"3225:126:57","stateMutability":"pure","virtual":false,"visibility":"public"},{"baseFunctions":[4209],"body":{"id":8331,"nodeType":"Block","src":"3480:41:57","statements":[{"expression":{"id":8329,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8236,"src":"3493:23:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8328,"id":8330,"nodeType":"Return","src":"3486:30:57"}]},"documentation":{"id":8323,"nodeType":"StructuredDocumentation","src":"3355:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"34762ca5","id":8332,"implemented":true,"kind":"function","modifiers":[],"name":"getBaseVariableBorrowRate","nameLocation":"3411:25:57","nodeType":"FunctionDefinition","overrides":{"id":8325,"nodeType":"OverrideSpecifier","overrides":[],"src":"3453:8:57"},"parameters":{"id":8324,"nodeType":"ParameterList","parameters":[],"src":"3436:2:57"},"returnParameters":{"id":8328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8327,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8332,"src":"3471:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8326,"name":"uint256","nodeType":"ElementaryTypeName","src":"3471:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3470:9:57"},"scope":8367,"src":"3402:119:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4215],"body":{"id":8345,"nodeType":"Block","src":"3649:85:57","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8343,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":8339,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8236,"src":"3662:23:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":8340,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8239,"src":"3688:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3662:45:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":8342,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8242,"src":"3710:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3662:67:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8338,"id":8344,"nodeType":"Return","src":"3655:74:57"}]},"documentation":{"id":8333,"nodeType":"StructuredDocumentation","src":"3525:44:57","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"80031e37","id":8346,"implemented":true,"kind":"function","modifiers":[],"name":"getMaxVariableBorrowRate","nameLocation":"3581:24:57","nodeType":"FunctionDefinition","overrides":{"id":8335,"nodeType":"OverrideSpecifier","overrides":[],"src":"3622:8:57"},"parameters":{"id":8334,"nodeType":"ParameterList","parameters":[],"src":"3605:2:57"},"returnParameters":{"id":8338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8346,"src":"3640:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8336,"name":"uint256","nodeType":"ElementaryTypeName","src":"3640:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3639:9:57"},"scope":8367,"src":"3572:162:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[6125],"body":{"id":8365,"nodeType":"Block","src":"3929:27:57","statements":[{"expression":{"components":[{"hexValue":"30","id":8360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3943:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":8361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3946:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":8362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3949:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8363,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3942:9:57","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0,int_const 0)"}},"functionReturnParameters":8359,"id":8364,"nodeType":"Return","src":"3935:16:57"}]},"documentation":{"id":8347,"nodeType":"StructuredDocumentation","src":"3738:44:57","text":"@inheritdoc IReserveInterestRateStrategy"},"functionSelector":"a5898709","id":8366,"implemented":true,"kind":"function","modifiers":[],"name":"calculateInterestRates","nameLocation":"3794:22:57","nodeType":"FunctionDefinition","overrides":{"id":8352,"nodeType":"OverrideSpecifier","overrides":[],"src":"3884:8:57"},"parameters":{"id":8351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8350,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8366,"src":"3822:45:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"},"typeName":{"id":8349,"nodeType":"UserDefinedTypeName","pathNode":{"id":8348,"name":"DataTypes.CalculateInterestRatesParams","nodeType":"IdentifierPath","referencedDeclaration":24211,"src":"3822:38:57"},"referencedDeclaration":24211,"src":"3822:38:57","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_storage_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"}},"visibility":"internal"}],"src":"3816:55:57"},"returnParameters":{"id":8359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8354,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8366,"src":"3902:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8353,"name":"uint256","nodeType":"ElementaryTypeName","src":"3902:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8366,"src":"3911:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8355,"name":"uint256","nodeType":"ElementaryTypeName","src":"3911:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8358,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8366,"src":"3920:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8357,"name":"uint256","nodeType":"ElementaryTypeName","src":"3920:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3901:27:57"},"scope":8367,"src":"3785:171:57","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":8368,"src":"598:3360:57","usedErrors":[]}],"src":"37:3922:57"},"id":57},"contracts/misc/interfaces/IWETH.sol":{"ast":{"absolutePath":"contracts/misc/interfaces/IWETH.sol","exportedSymbols":{"IWETH":[8398]},"id":8399,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":8369,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:58"},{"abstract":false,"baseContracts":[],"canonicalName":"IWETH","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":8398,"linearizedBaseContracts":[8398],"name":"IWETH","nameLocation":"72:5:58","nodeType":"ContractDefinition","nodes":[{"functionSelector":"d0e30db0","id":8372,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"91:7:58","nodeType":"FunctionDefinition","parameters":{"id":8370,"nodeType":"ParameterList","parameters":[],"src":"98:2:58"},"returnParameters":{"id":8371,"nodeType":"ParameterList","parameters":[],"src":"117:0:58"},"scope":8398,"src":"82:36:58","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"2e1a7d4d","id":8377,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"131:8:58","nodeType":"FunctionDefinition","parameters":{"id":8375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8374,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8377,"src":"140:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8373,"name":"uint256","nodeType":"ElementaryTypeName","src":"140:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"139:9:58"},"returnParameters":{"id":8376,"nodeType":"ParameterList","parameters":[],"src":"157:0:58"},"scope":8398,"src":"122:36:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"095ea7b3","id":8386,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"171:7:58","nodeType":"FunctionDefinition","parameters":{"id":8382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8379,"mutability":"mutable","name":"guy","nameLocation":"187:3:58","nodeType":"VariableDeclaration","scope":8386,"src":"179:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8378,"name":"address","nodeType":"ElementaryTypeName","src":"179:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8381,"mutability":"mutable","name":"wad","nameLocation":"200:3:58","nodeType":"VariableDeclaration","scope":8386,"src":"192:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8380,"name":"uint256","nodeType":"ElementaryTypeName","src":"192:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"178:26:58"},"returnParameters":{"id":8385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8386,"src":"223:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8383,"name":"bool","nodeType":"ElementaryTypeName","src":"223:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"222:6:58"},"scope":8398,"src":"162:67:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"23b872dd","id":8397,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"242:12:58","nodeType":"FunctionDefinition","parameters":{"id":8393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8388,"mutability":"mutable","name":"src","nameLocation":"263:3:58","nodeType":"VariableDeclaration","scope":8397,"src":"255:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8387,"name":"address","nodeType":"ElementaryTypeName","src":"255:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8390,"mutability":"mutable","name":"dst","nameLocation":"276:3:58","nodeType":"VariableDeclaration","scope":8397,"src":"268:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8389,"name":"address","nodeType":"ElementaryTypeName","src":"268:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8392,"mutability":"mutable","name":"wad","nameLocation":"289:3:58","nodeType":"VariableDeclaration","scope":8397,"src":"281:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8391,"name":"uint256","nodeType":"ElementaryTypeName","src":"281:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"254:39:58"},"returnParameters":{"id":8396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8395,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8397,"src":"312:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8394,"name":"bool","nodeType":"ElementaryTypeName","src":"312:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"311:6:58"},"scope":8398,"src":"233:85:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":8399,"src":"62:258:58","usedErrors":[]}],"src":"37:284:58"},"id":58},"contracts/mocks/flashloan/MockFlashLoanReceiver.sol":{"ast":{"absolutePath":"contracts/mocks/flashloan/MockFlashLoanReceiver.sol","exportedSymbols":{"FlashLoanReceiverBase":[3552],"GPv2SafeERC20":[118],"IERC20":[1442],"IPoolAddressesProvider":[5282],"MintableERC20":[10681],"MockFlashLoanReceiver":[8623]},"id":8624,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8400,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:59"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":8402,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8624,"sourceUnit":1443,"src":"62:76:59","symbolAliases":[{"foreign":{"id":8401,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":8404,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8624,"sourceUnit":119,"src":"139:84:59","symbolAliases":[{"foreign":{"id":8403,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"147:13:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":8406,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8624,"sourceUnit":5283,"src":"224:83:59","symbolAliases":[{"foreign":{"id":8405,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"232:22:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/flashloan/base/FlashLoanReceiverBase.sol","file":"../../flashloan/base/FlashLoanReceiverBase.sol","id":8408,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8624,"sourceUnit":3553,"src":"308:85:59","symbolAliases":[{"foreign":{"id":8407,"name":"FlashLoanReceiverBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"316:21:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/mocks/tokens/MintableERC20.sol","file":"../tokens/MintableERC20.sol","id":8410,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8624,"sourceUnit":10682,"src":"394:58:59","symbolAliases":[{"foreign":{"id":8409,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"402:13:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8411,"name":"FlashLoanReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3552,"src":"488:21:59"},"id":8412,"nodeType":"InheritanceSpecifier","src":"488:21:59"}],"canonicalName":"MockFlashLoanReceiver","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8623,"linearizedBaseContracts":[8623,3552,3630],"name":"MockFlashLoanReceiver","nameLocation":"463:21:59","nodeType":"ContractDefinition","nodes":[{"id":8416,"libraryName":{"id":8413,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"520:13:59"},"nodeType":"UsingForDirective","src":"514:31:59","typeName":{"id":8415,"nodeType":"UserDefinedTypeName","pathNode":{"id":8414,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"538:6:59"},"referencedDeclaration":1442,"src":"538:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"anonymous":false,"id":8427,"name":"ExecutedWithFail","nameLocation":"555:16:59","nodeType":"EventDefinition","parameters":{"id":8426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8419,"indexed":false,"mutability":"mutable","name":"_assets","nameLocation":"582:7:59","nodeType":"VariableDeclaration","scope":8427,"src":"572:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":8417,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8418,"nodeType":"ArrayTypeName","src":"572:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":8422,"indexed":false,"mutability":"mutable","name":"_amounts","nameLocation":"601:8:59","nodeType":"VariableDeclaration","scope":8427,"src":"591:18:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8420,"name":"uint256","nodeType":"ElementaryTypeName","src":"591:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8421,"nodeType":"ArrayTypeName","src":"591:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":8425,"indexed":false,"mutability":"mutable","name":"_premiums","nameLocation":"621:9:59","nodeType":"VariableDeclaration","scope":8427,"src":"611:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8423,"name":"uint256","nodeType":"ElementaryTypeName","src":"611:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8424,"nodeType":"ArrayTypeName","src":"611:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"571:60:59"},"src":"549:83:59"},{"anonymous":false,"id":8438,"name":"ExecutedWithSuccess","nameLocation":"641:19:59","nodeType":"EventDefinition","parameters":{"id":8437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8430,"indexed":false,"mutability":"mutable","name":"_assets","nameLocation":"671:7:59","nodeType":"VariableDeclaration","scope":8438,"src":"661:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":8428,"name":"address","nodeType":"ElementaryTypeName","src":"661:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8429,"nodeType":"ArrayTypeName","src":"661:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":8433,"indexed":false,"mutability":"mutable","name":"_amounts","nameLocation":"690:8:59","nodeType":"VariableDeclaration","scope":8438,"src":"680:18:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8431,"name":"uint256","nodeType":"ElementaryTypeName","src":"680:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8432,"nodeType":"ArrayTypeName","src":"680:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":8436,"indexed":false,"mutability":"mutable","name":"_premiums","nameLocation":"710:9:59","nodeType":"VariableDeclaration","scope":8438,"src":"700:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8434,"name":"uint256","nodeType":"ElementaryTypeName","src":"700:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8435,"nodeType":"ArrayTypeName","src":"700:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"660:60:59"},"src":"635:86:59"},{"constant":false,"id":8440,"mutability":"mutable","name":"_failExecution","nameLocation":"739:14:59","nodeType":"VariableDeclaration","scope":8623,"src":"725:28:59","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8439,"name":"bool","nodeType":"ElementaryTypeName","src":"725:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8442,"mutability":"mutable","name":"_amountToApprove","nameLocation":"774:16:59","nodeType":"VariableDeclaration","scope":8623,"src":"757:33:59","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8441,"name":"uint256","nodeType":"ElementaryTypeName","src":"757:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8444,"mutability":"mutable","name":"_simulateEOA","nameLocation":"808:12:59","nodeType":"VariableDeclaration","scope":8623,"src":"794:26:59","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8443,"name":"bool","nodeType":"ElementaryTypeName","src":"794:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"body":{"id":8453,"nodeType":"Block","src":"902:2:59","statements":[]},"id":8454,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":8450,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8447,"src":"892:8:59","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}}],"id":8451,"kind":"baseConstructorSpecifier","modifierName":{"id":8449,"name":"FlashLoanReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3552,"src":"870:21:59"},"nodeType":"ModifierInvocation","src":"870:31:59"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8447,"mutability":"mutable","name":"provider","nameLocation":"860:8:59","nodeType":"VariableDeclaration","scope":8454,"src":"837:31:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":8446,"nodeType":"UserDefinedTypeName","pathNode":{"id":8445,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"837:22:59"},"referencedDeclaration":5282,"src":"837:22:59","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"836:33:59"},"returnParameters":{"id":8452,"nodeType":"ParameterList","parameters":[],"src":"902:0:59"},"scope":8623,"src":"825:79:59","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8463,"nodeType":"Block","src":"960:32:59","statements":[{"expression":{"id":8461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8459,"name":"_failExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8440,"src":"966:14:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8460,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8456,"src":"983:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"966:21:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8462,"nodeType":"ExpressionStatement","src":"966:21:59"}]},"functionSelector":"388f70f1","id":8464,"implemented":true,"kind":"function","modifiers":[],"name":"setFailExecutionTransfer","nameLocation":"917:24:59","nodeType":"FunctionDefinition","parameters":{"id":8457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8456,"mutability":"mutable","name":"fail","nameLocation":"947:4:59","nodeType":"VariableDeclaration","scope":8464,"src":"942:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8455,"name":"bool","nodeType":"ElementaryTypeName","src":"942:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"941:11:59"},"returnParameters":{"id":8458,"nodeType":"ParameterList","parameters":[],"src":"960:0:59"},"scope":8623,"src":"908:84:59","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8473,"nodeType":"Block","src":"1056:45:59","statements":[{"expression":{"id":8471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8469,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8442,"src":"1062:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8470,"name":"amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8466,"src":"1081:15:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1062:34:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8472,"nodeType":"ExpressionStatement","src":"1062:34:59"}]},"functionSelector":"bf443f85","id":8474,"implemented":true,"kind":"function","modifiers":[],"name":"setAmountToApprove","nameLocation":"1005:18:59","nodeType":"FunctionDefinition","parameters":{"id":8467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8466,"mutability":"mutable","name":"amountToApprove","nameLocation":"1032:15:59","nodeType":"VariableDeclaration","scope":8474,"src":"1024:23:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8465,"name":"uint256","nodeType":"ElementaryTypeName","src":"1024:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1023:25:59"},"returnParameters":{"id":8468,"nodeType":"ParameterList","parameters":[],"src":"1056:0:59"},"scope":8623,"src":"996:105:59","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8483,"nodeType":"Block","src":"1147:30:59","statements":[{"expression":{"id":8481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8479,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8444,"src":"1153:12:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8480,"name":"flag","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8476,"src":"1168:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1153:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8482,"nodeType":"ExpressionStatement","src":"1153:19:59"}]},"functionSelector":"e9a6a25b","id":8484,"implemented":true,"kind":"function","modifiers":[],"name":"setSimulateEOA","nameLocation":"1114:14:59","nodeType":"FunctionDefinition","parameters":{"id":8477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8476,"mutability":"mutable","name":"flag","nameLocation":"1134:4:59","nodeType":"VariableDeclaration","scope":8484,"src":"1129:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8475,"name":"bool","nodeType":"ElementaryTypeName","src":"1129:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1128:11:59"},"returnParameters":{"id":8478,"nodeType":"ParameterList","parameters":[],"src":"1147:0:59"},"scope":8623,"src":"1105:72:59","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8491,"nodeType":"Block","src":"1241:34:59","statements":[{"expression":{"id":8489,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8442,"src":"1254:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8488,"id":8490,"nodeType":"Return","src":"1247:23:59"}]},"functionSelector":"5e76bba3","id":8492,"implemented":true,"kind":"function","modifiers":[],"name":"getAmountToApprove","nameLocation":"1190:18:59","nodeType":"FunctionDefinition","parameters":{"id":8485,"nodeType":"ParameterList","parameters":[],"src":"1208:2:59"},"returnParameters":{"id":8488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8492,"src":"1232:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8486,"name":"uint256","nodeType":"ElementaryTypeName","src":"1232:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1231:9:59"},"scope":8623,"src":"1181:94:59","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":8499,"nodeType":"Block","src":"1329:30:59","statements":[{"expression":{"id":8497,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8444,"src":"1342:12:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8496,"id":8498,"nodeType":"Return","src":"1335:19:59"}]},"functionSelector":"4444f331","id":8500,"implemented":true,"kind":"function","modifiers":[],"name":"simulateEOA","nameLocation":"1288:11:59","nodeType":"FunctionDefinition","parameters":{"id":8493,"nodeType":"ParameterList","parameters":[],"src":"1299:2:59"},"returnParameters":{"id":8496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8500,"src":"1323:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8494,"name":"bool","nodeType":"ElementaryTypeName","src":"1323:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1322:6:59"},"scope":8623,"src":"1279:80:59","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3617],"body":{"id":8621,"nodeType":"Block","src":"1568:858:59","statements":[{"condition":{"id":8519,"name":"_failExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8440,"src":"1578:14:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8530,"nodeType":"IfStatement","src":"1574:111:59","trueBody":{"id":8529,"nodeType":"Block","src":"1594:91:59","statements":[{"eventCall":{"arguments":[{"id":8521,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"1624:6:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":8522,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"1632:7:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":8523,"name":"premiums","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"1641:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":8520,"name":"ExecutedWithFail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8427,"src":"1607:16:59","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,uint256[] memory,uint256[] memory)"}},"id":8524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1607:43:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8525,"nodeType":"EmitStatement","src":"1602:48:59"},{"expression":{"id":8527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1665:13:59","subExpression":{"id":8526,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8444,"src":"1666:12:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8518,"id":8528,"nodeType":"Return","src":"1658:20:59"}]}},{"body":{"id":8611,"nodeType":"Block","src":"1735:611:59","statements":[{"assignments":[8544],"declarations":[{"constant":false,"id":8544,"mutability":"mutable","name":"token","nameLocation":"1807:5:59","nodeType":"VariableDeclaration","scope":8611,"src":"1793:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"},"typeName":{"id":8543,"nodeType":"UserDefinedTypeName","pathNode":{"id":8542,"name":"MintableERC20","nodeType":"IdentifierPath","referencedDeclaration":10681,"src":"1793:13:59"},"referencedDeclaration":10681,"src":"1793:13:59","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"visibility":"internal"}],"id":8550,"initialValue":{"arguments":[{"baseExpression":{"id":8546,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"1829:6:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":8548,"indexExpression":{"id":8547,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"1836:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1829:9:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8545,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10681,"src":"1815:13:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MintableERC20_$10681_$","typeString":"type(contract MintableERC20)"}},"id":8549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1815:24:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"nodeType":"VariableDeclarationStatement","src":"1793:46:59"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":8552,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"1918:7:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8554,"indexExpression":{"id":8553,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"1926:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1918:10:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"arguments":[{"id":8563,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1968:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_MockFlashLoanReceiver_$8623","typeString":"contract MockFlashLoanReceiver"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockFlashLoanReceiver_$8623","typeString":"contract MockFlashLoanReceiver"}],"id":8562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1960:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8561,"name":"address","nodeType":"ElementaryTypeName","src":"1960:7:59","typeDescriptions":{}}},"id":8564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1960:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"baseExpression":{"id":8556,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"1939:6:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":8558,"indexExpression":{"id":8557,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"1946:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1939:9:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8555,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"1932:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":8559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1932:17:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":8560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"1932:27:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1932:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1918:56:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c69642062616c616e636520666f722074686520636f6e7472616374","id":8567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1984:34:59","typeDescriptions":{"typeIdentifier":"t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869","typeString":"literal_string \"Invalid balance for the contract\""},"value":"Invalid balance for the contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869","typeString":"literal_string \"Invalid balance for the contract\""}],"id":8551,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1901:7:59","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1901:125:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8569,"nodeType":"ExpressionStatement","src":"1901:125:59"},{"assignments":[8571],"declarations":[{"constant":false,"id":8571,"mutability":"mutable","name":"amountToReturn","nameLocation":"2043:14:59","nodeType":"VariableDeclaration","scope":8611,"src":"2035:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8570,"name":"uint256","nodeType":"ElementaryTypeName","src":"2035:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8585,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8572,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8442,"src":"2061:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":8573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2081:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2061:21:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8575,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2060:23:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":8577,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"2121:7:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8579,"indexExpression":{"id":8578,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"2129:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2121:10:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":8580,"name":"premiums","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"2134:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8582,"indexExpression":{"id":8581,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"2143:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2134:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2121:24:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2060:85:59","trueExpression":{"id":8576,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8442,"src":"2094:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2035:110:59"},{"expression":{"arguments":[{"arguments":[{"id":8591,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2255:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_MockFlashLoanReceiver_$8623","typeString":"contract MockFlashLoanReceiver"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockFlashLoanReceiver_$8623","typeString":"contract MockFlashLoanReceiver"}],"id":8590,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2247:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8589,"name":"address","nodeType":"ElementaryTypeName","src":"2247:7:59","typeDescriptions":{}}},"id":8592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2247:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":8593,"name":"premiums","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"2262:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8595,"indexExpression":{"id":8594,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"2271:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2262:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8586,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8544,"src":"2236:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"id":8588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":10668,"src":"2236:10:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":8596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2236:38:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8597,"nodeType":"ExpressionStatement","src":"2236:38:59"},{"expression":{"arguments":[{"arguments":[{"id":8606,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"2317:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":8605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2309:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8604,"name":"address","nodeType":"ElementaryTypeName","src":"2309:7:59","typeDescriptions":{}}},"id":8607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2309:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8608,"name":"amountToReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8571,"src":"2324:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"baseExpression":{"id":8599,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"2290:6:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":8601,"indexExpression":{"id":8600,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"2297:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2290:9:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8598,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2283:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":8602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2283:17:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":8603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2283:25:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":8609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2283:56:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8610,"nodeType":"ExpressionStatement","src":"2283:56:59"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8535,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"1711:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":8536,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"1715:6:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":8537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1715:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1711:17:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8612,"initializationExpression":{"assignments":[8532],"declarations":[{"constant":false,"id":8532,"mutability":"mutable","name":"i","nameLocation":"1704:1:59","nodeType":"VariableDeclaration","scope":8612,"src":"1696:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8531,"name":"uint256","nodeType":"ElementaryTypeName","src":"1696:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8534,"initialValue":{"hexValue":"30","id":8533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1708:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1696:13:59"},"loopExpression":{"expression":{"id":8540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1730:3:59","subExpression":{"id":8539,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"1730:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8541,"nodeType":"ExpressionStatement","src":"1730:3:59"},"nodeType":"ForStatement","src":"1691:655:59"},{"eventCall":{"arguments":[{"id":8614,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"2377:6:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":8615,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"2385:7:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":8616,"name":"premiums","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"2394:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":8613,"name":"ExecutedWithSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8438,"src":"2357:19:59","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,uint256[] memory,uint256[] memory)"}},"id":8617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2357:46:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8618,"nodeType":"EmitStatement","src":"2352:51:59"},{"expression":{"hexValue":"74727565","id":8619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2417:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8518,"id":8620,"nodeType":"Return","src":"2410:11:59"}]},"functionSelector":"920f5c84","id":8622,"implemented":true,"kind":"function","modifiers":[],"name":"executeOperation","nameLocation":"1372:16:59","nodeType":"FunctionDefinition","overrides":{"id":8515,"nodeType":"OverrideSpecifier","overrides":[],"src":"1544:8:59"},"parameters":{"id":8514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8503,"mutability":"mutable","name":"assets","nameLocation":"1411:6:59","nodeType":"VariableDeclaration","scope":8622,"src":"1394:23:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":8501,"name":"address","nodeType":"ElementaryTypeName","src":"1394:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8502,"nodeType":"ArrayTypeName","src":"1394:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":8506,"mutability":"mutable","name":"amounts","nameLocation":"1440:7:59","nodeType":"VariableDeclaration","scope":8622,"src":"1423:24:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8504,"name":"uint256","nodeType":"ElementaryTypeName","src":"1423:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8505,"nodeType":"ArrayTypeName","src":"1423:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":8509,"mutability":"mutable","name":"premiums","nameLocation":"1470:8:59","nodeType":"VariableDeclaration","scope":8622,"src":"1453:25:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8507,"name":"uint256","nodeType":"ElementaryTypeName","src":"1453:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8508,"nodeType":"ArrayTypeName","src":"1453:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":8511,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8622,"src":"1484:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8510,"name":"address","nodeType":"ElementaryTypeName","src":"1484:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8513,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8622,"src":"1510:12:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8512,"name":"bytes","nodeType":"ElementaryTypeName","src":"1510:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1388:148:59"},"returnParameters":{"id":8518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8517,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8622,"src":"1562:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8516,"name":"bool","nodeType":"ElementaryTypeName","src":"1562:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1561:6:59"},"scope":8623,"src":"1363:1063:59","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":8624,"src":"454:1974:59","usedErrors":[]}],"src":"37:2392:59"},"id":59},"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol":{"ast":{"absolutePath":"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol","exportedSymbols":{"FlashLoanSimpleReceiverBase":[3591],"GPv2SafeERC20":[118],"IERC20":[1442],"IPoolAddressesProvider":[5282],"MintableERC20":[10681],"MockFlashLoanSimpleReceiver":[8820],"SafeMath":[2310]},"id":8821,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8625,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:60"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"../../dependencies/openzeppelin/contracts/SafeMath.sol","id":8627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8821,"sourceUnit":2311,"src":"62:80:60","symbolAliases":[{"foreign":{"id":8626,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:8:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":8629,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8821,"sourceUnit":1443,"src":"143:76:60","symbolAliases":[{"foreign":{"id":8628,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:6:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":8631,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8821,"sourceUnit":119,"src":"220:84:60","symbolAliases":[{"foreign":{"id":8630,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"228:13:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"../../dependencies/openzeppelin/contracts/SafeMath.sol","id":8633,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8821,"sourceUnit":2311,"src":"305:80:60","symbolAliases":[{"foreign":{"id":8632,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"313:8:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":8635,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8821,"sourceUnit":5283,"src":"386:83:60","symbolAliases":[{"foreign":{"id":8634,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"394:22:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol","file":"../../flashloan/base/FlashLoanSimpleReceiverBase.sol","id":8637,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8821,"sourceUnit":3592,"src":"470:97:60","symbolAliases":[{"foreign":{"id":8636,"name":"FlashLoanSimpleReceiverBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"478:27:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/mocks/tokens/MintableERC20.sol","file":"../tokens/MintableERC20.sol","id":8639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8821,"sourceUnit":10682,"src":"568:58:60","symbolAliases":[{"foreign":{"id":8638,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"576:13:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8640,"name":"FlashLoanSimpleReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3591,"src":"668:27:60"},"id":8641,"nodeType":"InheritanceSpecifier","src":"668:27:60"}],"canonicalName":"MockFlashLoanSimpleReceiver","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8820,"linearizedBaseContracts":[8820,3591,3666],"name":"MockFlashLoanSimpleReceiver","nameLocation":"637:27:60","nodeType":"ContractDefinition","nodes":[{"id":8645,"libraryName":{"id":8642,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"706:13:60"},"nodeType":"UsingForDirective","src":"700:31:60","typeName":{"id":8644,"nodeType":"UserDefinedTypeName","pathNode":{"id":8643,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"724:6:60"},"referencedDeclaration":1442,"src":"724:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":8648,"libraryName":{"id":8646,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"740:8:60"},"nodeType":"UsingForDirective","src":"734:27:60","typeName":{"id":8647,"name":"uint256","nodeType":"ElementaryTypeName","src":"753:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":8656,"name":"ExecutedWithFail","nameLocation":"771:16:60","nodeType":"EventDefinition","parameters":{"id":8655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8650,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"796:5:60","nodeType":"VariableDeclaration","scope":8656,"src":"788:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8649,"name":"address","nodeType":"ElementaryTypeName","src":"788:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8652,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"811:6:60","nodeType":"VariableDeclaration","scope":8656,"src":"803:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8651,"name":"uint256","nodeType":"ElementaryTypeName","src":"803:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8654,"indexed":false,"mutability":"mutable","name":"premium","nameLocation":"827:7:60","nodeType":"VariableDeclaration","scope":8656,"src":"819:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8653,"name":"uint256","nodeType":"ElementaryTypeName","src":"819:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"787:48:60"},"src":"765:71:60"},{"anonymous":false,"id":8664,"name":"ExecutedWithSuccess","nameLocation":"845:19:60","nodeType":"EventDefinition","parameters":{"id":8663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8658,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"873:5:60","nodeType":"VariableDeclaration","scope":8664,"src":"865:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8657,"name":"address","nodeType":"ElementaryTypeName","src":"865:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8660,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"888:6:60","nodeType":"VariableDeclaration","scope":8664,"src":"880:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8659,"name":"uint256","nodeType":"ElementaryTypeName","src":"880:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8662,"indexed":false,"mutability":"mutable","name":"premium","nameLocation":"904:7:60","nodeType":"VariableDeclaration","scope":8664,"src":"896:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8661,"name":"uint256","nodeType":"ElementaryTypeName","src":"896:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"864:48:60"},"src":"839:74:60"},{"constant":false,"id":8666,"mutability":"mutable","name":"_failExecution","nameLocation":"931:14:60","nodeType":"VariableDeclaration","scope":8820,"src":"917:28:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8665,"name":"bool","nodeType":"ElementaryTypeName","src":"917:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8668,"mutability":"mutable","name":"_amountToApprove","nameLocation":"966:16:60","nodeType":"VariableDeclaration","scope":8820,"src":"949:33:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8667,"name":"uint256","nodeType":"ElementaryTypeName","src":"949:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8670,"mutability":"mutable","name":"_simulateEOA","nameLocation":"1000:12:60","nodeType":"VariableDeclaration","scope":8820,"src":"986:26:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8669,"name":"bool","nodeType":"ElementaryTypeName","src":"986:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"body":{"id":8679,"nodeType":"Block","src":"1100:2:60","statements":[]},"id":8680,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":8676,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8673,"src":"1090:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}}],"id":8677,"kind":"baseConstructorSpecifier","modifierName":{"id":8675,"name":"FlashLoanSimpleReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3591,"src":"1062:27:60"},"nodeType":"ModifierInvocation","src":"1062:37:60"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8673,"mutability":"mutable","name":"provider","nameLocation":"1052:8:60","nodeType":"VariableDeclaration","scope":8680,"src":"1029:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":8672,"nodeType":"UserDefinedTypeName","pathNode":{"id":8671,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1029:22:60"},"referencedDeclaration":5282,"src":"1029:22:60","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1028:33:60"},"returnParameters":{"id":8678,"nodeType":"ParameterList","parameters":[],"src":"1100:0:60"},"scope":8820,"src":"1017:85:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8689,"nodeType":"Block","src":"1158:32:60","statements":[{"expression":{"id":8687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8685,"name":"_failExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8666,"src":"1164:14:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8686,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8682,"src":"1181:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1164:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8688,"nodeType":"ExpressionStatement","src":"1164:21:60"}]},"functionSelector":"388f70f1","id":8690,"implemented":true,"kind":"function","modifiers":[],"name":"setFailExecutionTransfer","nameLocation":"1115:24:60","nodeType":"FunctionDefinition","parameters":{"id":8683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8682,"mutability":"mutable","name":"fail","nameLocation":"1145:4:60","nodeType":"VariableDeclaration","scope":8690,"src":"1140:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8681,"name":"bool","nodeType":"ElementaryTypeName","src":"1140:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1139:11:60"},"returnParameters":{"id":8684,"nodeType":"ParameterList","parameters":[],"src":"1158:0:60"},"scope":8820,"src":"1106:84:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8699,"nodeType":"Block","src":"1254:45:60","statements":[{"expression":{"id":8697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8695,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8668,"src":"1260:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8696,"name":"amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8692,"src":"1279:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1260:34:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8698,"nodeType":"ExpressionStatement","src":"1260:34:60"}]},"functionSelector":"bf443f85","id":8700,"implemented":true,"kind":"function","modifiers":[],"name":"setAmountToApprove","nameLocation":"1203:18:60","nodeType":"FunctionDefinition","parameters":{"id":8693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8692,"mutability":"mutable","name":"amountToApprove","nameLocation":"1230:15:60","nodeType":"VariableDeclaration","scope":8700,"src":"1222:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8691,"name":"uint256","nodeType":"ElementaryTypeName","src":"1222:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:25:60"},"returnParameters":{"id":8694,"nodeType":"ParameterList","parameters":[],"src":"1254:0:60"},"scope":8820,"src":"1194:105:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8709,"nodeType":"Block","src":"1345:30:60","statements":[{"expression":{"id":8707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8705,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8670,"src":"1351:12:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8706,"name":"flag","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8702,"src":"1366:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1351:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8708,"nodeType":"ExpressionStatement","src":"1351:19:60"}]},"functionSelector":"e9a6a25b","id":8710,"implemented":true,"kind":"function","modifiers":[],"name":"setSimulateEOA","nameLocation":"1312:14:60","nodeType":"FunctionDefinition","parameters":{"id":8703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8702,"mutability":"mutable","name":"flag","nameLocation":"1332:4:60","nodeType":"VariableDeclaration","scope":8710,"src":"1327:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8701,"name":"bool","nodeType":"ElementaryTypeName","src":"1327:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1326:11:60"},"returnParameters":{"id":8704,"nodeType":"ParameterList","parameters":[],"src":"1345:0:60"},"scope":8820,"src":"1303:72:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8717,"nodeType":"Block","src":"1439:34:60","statements":[{"expression":{"id":8715,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8668,"src":"1452:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8714,"id":8716,"nodeType":"Return","src":"1445:23:60"}]},"functionSelector":"5e76bba3","id":8718,"implemented":true,"kind":"function","modifiers":[],"name":"getAmountToApprove","nameLocation":"1388:18:60","nodeType":"FunctionDefinition","parameters":{"id":8711,"nodeType":"ParameterList","parameters":[],"src":"1406:2:60"},"returnParameters":{"id":8714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8713,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8718,"src":"1430:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8712,"name":"uint256","nodeType":"ElementaryTypeName","src":"1430:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1429:9:60"},"scope":8820,"src":"1379:94:60","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":8725,"nodeType":"Block","src":"1527:30:60","statements":[{"expression":{"id":8723,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8670,"src":"1540:12:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8722,"id":8724,"nodeType":"Return","src":"1533:19:60"}]},"functionSelector":"4444f331","id":8726,"implemented":true,"kind":"function","modifiers":[],"name":"simulateEOA","nameLocation":"1486:11:60","nodeType":"FunctionDefinition","parameters":{"id":8719,"nodeType":"ParameterList","parameters":[],"src":"1497:2:60"},"returnParameters":{"id":8722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8721,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8726,"src":"1521:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8720,"name":"bool","nodeType":"ElementaryTypeName","src":"1521:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1520:6:60"},"scope":8820,"src":"1477:80:60","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3653],"body":{"id":8818,"nodeType":"Block","src":"1736:715:60","statements":[{"condition":{"id":8742,"name":"_failExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8666,"src":"1746:14:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8753,"nodeType":"IfStatement","src":"1742:108:60","trueBody":{"id":8752,"nodeType":"Block","src":"1762:88:60","statements":[{"eventCall":{"arguments":[{"id":8744,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8728,"src":"1792:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8745,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8730,"src":"1799:6:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8746,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"1807:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8743,"name":"ExecutedWithFail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8656,"src":"1775:16:60","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":8747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1775:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8748,"nodeType":"EmitStatement","src":"1770:45:60"},{"expression":{"id":8750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1830:13:60","subExpression":{"id":8749,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8670,"src":"1831:12:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8741,"id":8751,"nodeType":"Return","src":"1823:20:60"}]}},{"assignments":[8756],"declarations":[{"constant":false,"id":8756,"mutability":"mutable","name":"token","nameLocation":"1918:5:60","nodeType":"VariableDeclaration","scope":8818,"src":"1904:19:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"},"typeName":{"id":8755,"nodeType":"UserDefinedTypeName","pathNode":{"id":8754,"name":"MintableERC20","nodeType":"IdentifierPath","referencedDeclaration":10681,"src":"1904:13:60"},"referencedDeclaration":10681,"src":"1904:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"visibility":"internal"}],"id":8760,"initialValue":{"arguments":[{"id":8758,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8728,"src":"1940:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8757,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10681,"src":"1926:13:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MintableERC20_$10681_$","typeString":"type(contract MintableERC20)"}},"id":8759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1926:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"nodeType":"VariableDeclarationStatement","src":"1904:42:60"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8762,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8730,"src":"2012:6:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"arguments":[{"id":8769,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2054:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_MockFlashLoanSimpleReceiver_$8820","typeString":"contract MockFlashLoanSimpleReceiver"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockFlashLoanSimpleReceiver_$8820","typeString":"contract MockFlashLoanSimpleReceiver"}],"id":8768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2046:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8767,"name":"address","nodeType":"ElementaryTypeName","src":"2046:7:60","typeDescriptions":{}}},"id":8770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2046:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":8764,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8728,"src":"2029:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8763,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2022:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":8765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2022:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":8766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"2022:23:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2022:38:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2012:48:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c69642062616c616e636520666f722074686520636f6e7472616374","id":8773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2062:34:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869","typeString":"literal_string \"Invalid balance for the contract\""},"value":"Invalid balance for the contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869","typeString":"literal_string \"Invalid balance for the contract\""}],"id":8761,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2004:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2004:93:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8775,"nodeType":"ExpressionStatement","src":"2004:93:60"},{"assignments":[8777],"declarations":[{"constant":false,"id":8777,"mutability":"mutable","name":"amountToReturn","nameLocation":"2112:14:60","nodeType":"VariableDeclaration","scope":8818,"src":"2104:22:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8776,"name":"uint256","nodeType":"ElementaryTypeName","src":"2104:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8788,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8778,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8668,"src":"2130:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":8779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2150:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2130:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8781,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2129:23:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":8785,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"2185:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8783,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8730,"src":"2174:6:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"2174:10:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2174:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2129:64:60","trueExpression":{"id":8782,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8668,"src":"2155:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2104:89:60"},{"expression":{"arguments":[{"arguments":[{"id":8794,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2299:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_MockFlashLoanSimpleReceiver_$8820","typeString":"contract MockFlashLoanSimpleReceiver"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockFlashLoanSimpleReceiver_$8820","typeString":"contract MockFlashLoanSimpleReceiver"}],"id":8793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2291:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8792,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:60","typeDescriptions":{}}},"id":8795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2291:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8796,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"2306:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8789,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8756,"src":"2280:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"id":8791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":10668,"src":"2280:10:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":8797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2280:34:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8798,"nodeType":"ExpressionStatement","src":"2280:34:60"},{"expression":{"arguments":[{"arguments":[{"id":8805,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3571,"src":"2351:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":8804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2343:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8803,"name":"address","nodeType":"ElementaryTypeName","src":"2343:7:60","typeDescriptions":{}}},"id":8806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2343:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8807,"name":"amountToReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8777,"src":"2358:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":8800,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8728,"src":"2328:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8799,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2321:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":8801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2321:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":8802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2321:21:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":8808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2321:52:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8809,"nodeType":"ExpressionStatement","src":"2321:52:60"},{"eventCall":{"arguments":[{"id":8811,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8728,"src":"2405:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8812,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8730,"src":"2412:6:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8813,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"2420:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8810,"name":"ExecutedWithSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8664,"src":"2385:19:60","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":8814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2385:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8815,"nodeType":"EmitStatement","src":"2380:48:60"},{"expression":{"hexValue":"74727565","id":8816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2442:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8741,"id":8817,"nodeType":"Return","src":"2435:11:60"}]},"functionSelector":"1b11d0ff","id":8819,"implemented":true,"kind":"function","modifiers":[],"name":"executeOperation","nameLocation":"1570:16:60","nodeType":"FunctionDefinition","overrides":{"id":8738,"nodeType":"OverrideSpecifier","overrides":[],"src":"1712:8:60"},"parameters":{"id":8737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8728,"mutability":"mutable","name":"asset","nameLocation":"1600:5:60","nodeType":"VariableDeclaration","scope":8819,"src":"1592:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8727,"name":"address","nodeType":"ElementaryTypeName","src":"1592:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8730,"mutability":"mutable","name":"amount","nameLocation":"1619:6:60","nodeType":"VariableDeclaration","scope":8819,"src":"1611:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8729,"name":"uint256","nodeType":"ElementaryTypeName","src":"1611:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8732,"mutability":"mutable","name":"premium","nameLocation":"1639:7:60","nodeType":"VariableDeclaration","scope":8819,"src":"1631:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8731,"name":"uint256","nodeType":"ElementaryTypeName","src":"1631:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8819,"src":"1652:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8733,"name":"address","nodeType":"ElementaryTypeName","src":"1652:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8736,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8819,"src":"1678:12:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8735,"name":"bytes","nodeType":"ElementaryTypeName","src":"1678:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1586:118:60"},"returnParameters":{"id":8741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8819,"src":"1730:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8739,"name":"bool","nodeType":"ElementaryTypeName","src":"1730:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1729:6:60"},"scope":8820,"src":"1561:890:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":8821,"src":"628:1825:60","usedErrors":[]}],"src":"37:2417:60"},"id":60},"contracts/mocks/helpers/MockIncentivesController.sol":{"ast":{"absolutePath":"contracts/mocks/helpers/MockIncentivesController.sol","exportedSymbols":{"IAaveIncentivesController":[4000],"MockIncentivesController":[8838]},"id":8839,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8822,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:61"},{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","file":"../../interfaces/IAaveIncentivesController.sol","id":8824,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8839,"sourceUnit":4001,"src":"62:89:61","symbolAliases":[{"foreign":{"id":8823,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:25:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8825,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"190:25:61"},"id":8826,"nodeType":"InheritanceSpecifier","src":"190:25:61"}],"canonicalName":"MockIncentivesController","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8838,"linearizedBaseContracts":[8838,4000],"name":"MockIncentivesController","nameLocation":"162:24:61","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3999],"body":{"id":8836,"nodeType":"Block","src":"287:2:61","statements":[]},"functionSelector":"31873e2e","id":8837,"implemented":true,"kind":"function","modifiers":[],"name":"handleAction","nameLocation":"229:12:61","nodeType":"FunctionDefinition","overrides":{"id":8834,"nodeType":"OverrideSpecifier","overrides":[],"src":"278:8:61"},"parameters":{"id":8833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8828,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8837,"src":"242:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8827,"name":"address","nodeType":"ElementaryTypeName","src":"242:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8830,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8837,"src":"251:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8829,"name":"uint256","nodeType":"ElementaryTypeName","src":"251:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8837,"src":"260:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8831,"name":"uint256","nodeType":"ElementaryTypeName","src":"260:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"241:27:61"},"returnParameters":{"id":8835,"nodeType":"ParameterList","parameters":[],"src":"287:0:61"},"scope":8838,"src":"220:69:61","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":8839,"src":"153:138:61","usedErrors":[]}],"src":"37:255:61"},"id":61},"contracts/mocks/helpers/MockL2Pool.sol":{"ast":{"absolutePath":"contracts/mocks/helpers/MockL2Pool.sol","exportedSymbols":{"IPoolAddressesProvider":[5282],"L2Pool":[25142],"MockL2Pool":[8866]},"id":8867,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8840,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:62"},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":8842,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8867,"sourceUnit":5283,"src":"62:83:62","symbolAliases":[{"foreign":{"id":8841,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/pool/L2Pool.sol","file":"../../protocol/pool/L2Pool.sol","id":8844,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8867,"sourceUnit":25143,"src":"146:54:62","symbolAliases":[{"foreign":{"id":8843,"name":"L2Pool","nodeType":"Identifier","overloadedDeclarations":[],"src":"154:6:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8845,"name":"L2Pool","nodeType":"IdentifierPath","referencedDeclaration":25142,"src":"225:6:62"},"id":8846,"nodeType":"InheritanceSpecifier","src":"225:6:62"}],"canonicalName":"MockL2Pool","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8866,"linearizedBaseContracts":[8866,25142,4434,26587,5073,28286,12750],"name":"MockL2Pool","nameLocation":"211:10:62","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[25279],"body":{"id":8854,"nodeType":"Block","src":"300:21:62","statements":[{"expression":{"hexValue":"307833","id":8852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"313:3:62","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"0x3"},"functionReturnParameters":8851,"id":8853,"nodeType":"Return","src":"306:10:62"}]},"id":8855,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"245:11:62","nodeType":"FunctionDefinition","overrides":{"id":8848,"nodeType":"OverrideSpecifier","overrides":[],"src":"273:8:62"},"parameters":{"id":8847,"nodeType":"ParameterList","parameters":[],"src":"256:2:62"},"returnParameters":{"id":8851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8850,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8855,"src":"291:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8849,"name":"uint256","nodeType":"ElementaryTypeName","src":"291:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"290:9:62"},"scope":8866,"src":"236:85:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8864,"nodeType":"Block","src":"387:2:62","statements":[]},"id":8865,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":8861,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8858,"src":"377:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}}],"id":8862,"kind":"baseConstructorSpecifier","modifierName":{"id":8860,"name":"L2Pool","nodeType":"IdentifierPath","referencedDeclaration":25142,"src":"370:6:62"},"nodeType":"ModifierInvocation","src":"370:16:62"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8858,"mutability":"mutable","name":"provider","nameLocation":"360:8:62","nodeType":"VariableDeclaration","scope":8865,"src":"337:31:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":8857,"nodeType":"UserDefinedTypeName","pathNode":{"id":8856,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"337:22:62"},"referencedDeclaration":5282,"src":"337:22:62","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"336:33:62"},"returnParameters":{"id":8863,"nodeType":"ParameterList","parameters":[],"src":"387:0:62"},"scope":8866,"src":"325:64:62","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":8867,"src":"202:189:62","usedErrors":[]}],"src":"37:355:62"},"id":62},"contracts/mocks/helpers/MockPeripheryContract.sol":{"ast":{"absolutePath":"contracts/mocks/helpers/MockPeripheryContract.sol","exportedSymbols":{"MockPeripheryContractV1":[8907],"MockPeripheryContractV2":[8950]},"id":8951,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8868,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:63"},{"abstract":false,"baseContracts":[],"canonicalName":"MockPeripheryContractV1","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8907,"linearizedBaseContracts":[8907],"name":"MockPeripheryContractV1","nameLocation":"71:23:63","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8870,"mutability":"mutable","name":"_manager","nameLocation":"115:8:63","nodeType":"VariableDeclaration","scope":8907,"src":"99:24:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8869,"name":"address","nodeType":"ElementaryTypeName","src":"99:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":8872,"mutability":"mutable","name":"_value","nameLocation":"143:6:63","nodeType":"VariableDeclaration","scope":8907,"src":"127:22:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8871,"name":"uint256","nodeType":"ElementaryTypeName","src":"127:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":8887,"nodeType":"Block","src":"215:49:63","statements":[{"expression":{"id":8881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8879,"name":"_manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8870,"src":"221:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8880,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"232:7:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"221:18:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8882,"nodeType":"ExpressionStatement","src":"221:18:63"},{"expression":{"id":8885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8883,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8872,"src":"245:6:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8884,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8876,"src":"254:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"245:14:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8886,"nodeType":"ExpressionStatement","src":"245:14:63"}]},"functionSelector":"cd6dc687","id":8888,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"163:10:63","nodeType":"FunctionDefinition","parameters":{"id":8877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8874,"mutability":"mutable","name":"manager","nameLocation":"182:7:63","nodeType":"VariableDeclaration","scope":8888,"src":"174:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8873,"name":"address","nodeType":"ElementaryTypeName","src":"174:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8876,"mutability":"mutable","name":"value","nameLocation":"199:5:63","nodeType":"VariableDeclaration","scope":8888,"src":"191:13:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8875,"name":"uint256","nodeType":"ElementaryTypeName","src":"191:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"173:32:63"},"returnParameters":{"id":8878,"nodeType":"ParameterList","parameters":[],"src":"215:0:63"},"scope":8907,"src":"154:110:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8895,"nodeType":"Block","src":"322:26:63","statements":[{"expression":{"id":8893,"name":"_manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8870,"src":"335:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8892,"id":8894,"nodeType":"Return","src":"328:15:63"}]},"functionSelector":"d5009584","id":8896,"implemented":true,"kind":"function","modifiers":[],"name":"getManager","nameLocation":"277:10:63","nodeType":"FunctionDefinition","parameters":{"id":8889,"nodeType":"ParameterList","parameters":[],"src":"287:2:63"},"returnParameters":{"id":8892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8891,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8896,"src":"313:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8890,"name":"address","nodeType":"ElementaryTypeName","src":"313:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"312:9:63"},"scope":8907,"src":"268:80:63","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8905,"nodeType":"Block","src":"401:32:63","statements":[{"expression":{"id":8903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8901,"name":"_manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8870,"src":"407:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8902,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8898,"src":"418:10:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"407:21:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8904,"nodeType":"ExpressionStatement","src":"407:21:63"}]},"functionSelector":"d0ebdbe7","id":8906,"implemented":true,"kind":"function","modifiers":[],"name":"setManager","nameLocation":"361:10:63","nodeType":"FunctionDefinition","parameters":{"id":8899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8898,"mutability":"mutable","name":"newManager","nameLocation":"380:10:63","nodeType":"VariableDeclaration","scope":8906,"src":"372:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8897,"name":"address","nodeType":"ElementaryTypeName","src":"372:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"371:20:63"},"returnParameters":{"id":8900,"nodeType":"ParameterList","parameters":[],"src":"401:0:63"},"scope":8907,"src":"352:81:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":8951,"src":"62:373:63","usedErrors":[]},{"abstract":false,"baseContracts":[],"canonicalName":"MockPeripheryContractV2","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8950,"linearizedBaseContracts":[8950],"name":"MockPeripheryContractV2","nameLocation":"446:23:63","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8909,"mutability":"mutable","name":"_manager","nameLocation":"490:8:63","nodeType":"VariableDeclaration","scope":8950,"src":"474:24:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8908,"name":"address","nodeType":"ElementaryTypeName","src":"474:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":8911,"mutability":"mutable","name":"_value","nameLocation":"518:6:63","nodeType":"VariableDeclaration","scope":8950,"src":"502:22:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8910,"name":"uint256","nodeType":"ElementaryTypeName","src":"502:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":8913,"mutability":"mutable","name":"_addressesProvider","nameLocation":"544:18:63","nodeType":"VariableDeclaration","scope":8950,"src":"528:34:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8912,"name":"address","nodeType":"ElementaryTypeName","src":"528:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"body":{"id":8922,"nodeType":"Block","src":"623:49:63","statements":[{"expression":{"id":8920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8918,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8913,"src":"629:18:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8919,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8915,"src":"650:17:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"629:38:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8921,"nodeType":"ExpressionStatement","src":"629:38:63"}]},"functionSelector":"c4d66de8","id":8923,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"576:10:63","nodeType":"FunctionDefinition","parameters":{"id":8916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8915,"mutability":"mutable","name":"addressesProvider","nameLocation":"595:17:63","nodeType":"VariableDeclaration","scope":8923,"src":"587:25:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8914,"name":"address","nodeType":"ElementaryTypeName","src":"587:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"586:27:63"},"returnParameters":{"id":8917,"nodeType":"ParameterList","parameters":[],"src":"623:0:63"},"scope":8950,"src":"567:105:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8930,"nodeType":"Block","src":"730:26:63","statements":[{"expression":{"id":8928,"name":"_manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8909,"src":"743:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8927,"id":8929,"nodeType":"Return","src":"736:15:63"}]},"functionSelector":"d5009584","id":8931,"implemented":true,"kind":"function","modifiers":[],"name":"getManager","nameLocation":"685:10:63","nodeType":"FunctionDefinition","parameters":{"id":8924,"nodeType":"ParameterList","parameters":[],"src":"695:2:63"},"returnParameters":{"id":8927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8926,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8931,"src":"721:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8925,"name":"address","nodeType":"ElementaryTypeName","src":"721:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"720:9:63"},"scope":8950,"src":"676:80:63","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8940,"nodeType":"Block","src":"809:32:63","statements":[{"expression":{"id":8938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8936,"name":"_manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8909,"src":"815:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8937,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8933,"src":"826:10:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"815:21:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8939,"nodeType":"ExpressionStatement","src":"815:21:63"}]},"functionSelector":"d0ebdbe7","id":8941,"implemented":true,"kind":"function","modifiers":[],"name":"setManager","nameLocation":"769:10:63","nodeType":"FunctionDefinition","parameters":{"id":8934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8933,"mutability":"mutable","name":"newManager","nameLocation":"788:10:63","nodeType":"VariableDeclaration","scope":8941,"src":"780:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8932,"name":"address","nodeType":"ElementaryTypeName","src":"780:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"779:20:63"},"returnParameters":{"id":8935,"nodeType":"ParameterList","parameters":[],"src":"809:0:63"},"scope":8950,"src":"760:81:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8948,"nodeType":"Block","src":"909:36:63","statements":[{"expression":{"id":8946,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8913,"src":"922:18:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8945,"id":8947,"nodeType":"Return","src":"915:25:63"}]},"functionSelector":"fe65acfe","id":8949,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressesProvider","nameLocation":"854:20:63","nodeType":"FunctionDefinition","parameters":{"id":8942,"nodeType":"ParameterList","parameters":[],"src":"874:2:63"},"returnParameters":{"id":8945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8944,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8949,"src":"900:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8943,"name":"address","nodeType":"ElementaryTypeName","src":"900:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"899:9:63"},"scope":8950,"src":"845:100:63","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":8951,"src":"437:510:63","usedErrors":[]}],"src":"37:911:63"},"id":63},"contracts/mocks/helpers/MockPool.sol":{"ast":{"absolutePath":"contracts/mocks/helpers/MockPool.sol","exportedSymbols":{"IPoolAddressesProvider":[5282],"MockPool":[9027],"MockPoolInherited":[9097],"Pool":[26587]},"id":9098,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8952,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:64"},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":8954,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9098,"sourceUnit":5283,"src":"62:83:64","symbolAliases":[{"foreign":{"id":8953,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MockPool","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9027,"linearizedBaseContracts":[9027],"name":"MockPool","nameLocation":"156:8:64","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8958,"mutability":"mutable","name":"______gap","nameLocation":"246:9:64","nodeType":"VariableDeclaration","scope":9027,"src":"225:30:64","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$100_storage","typeString":"uint256[100]"},"typeName":{"baseType":{"id":8955,"name":"uint256","nodeType":"ElementaryTypeName","src":"225:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8957,"length":{"hexValue":"313030","id":8956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"233:3:64","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"nodeType":"ArrayTypeName","src":"225:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$100_storage_ptr","typeString":"uint256[100]"}},"visibility":"private"},{"constant":false,"id":8960,"mutability":"mutable","name":"_addressesProvider","nameLocation":"277:18:64","nodeType":"VariableDeclaration","scope":9027,"src":"260:35:64","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8959,"name":"address","nodeType":"ElementaryTypeName","src":"260:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8963,"mutability":"mutable","name":"_reserveList","nameLocation":"318:12:64","nodeType":"VariableDeclaration","scope":9027,"src":"299:31:64","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":8961,"name":"address","nodeType":"ElementaryTypeName","src":"299:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8962,"nodeType":"ArrayTypeName","src":"299:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"body":{"id":8972,"nodeType":"Block","src":"382:40:64","statements":[{"expression":{"id":8970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8968,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"388:18:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8969,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8965,"src":"409:8:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"388:29:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8971,"nodeType":"ExpressionStatement","src":"388:29:64"}]},"functionSelector":"c4d66de8","id":8973,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"344:10:64","nodeType":"FunctionDefinition","parameters":{"id":8966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8965,"mutability":"mutable","name":"provider","nameLocation":"363:8:64","nodeType":"VariableDeclaration","scope":8973,"src":"355:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8964,"name":"address","nodeType":"ElementaryTypeName","src":"355:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"354:18:64"},"returnParameters":{"id":8967,"nodeType":"ParameterList","parameters":[],"src":"382:0:64"},"scope":9027,"src":"335:87:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8984,"nodeType":"Block","src":"486:37:64","statements":[{"expression":{"arguments":[{"id":8981,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8975,"src":"510:7:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8978,"name":"_reserveList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8963,"src":"492:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":8980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"492:17:64","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":8982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"492:26:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8983,"nodeType":"ExpressionStatement","src":"492:26:64"}]},"functionSelector":"e636a4f4","id":8985,"implemented":true,"kind":"function","modifiers":[],"name":"addReserveToReservesList","nameLocation":"435:24:64","nodeType":"FunctionDefinition","parameters":{"id":8976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8975,"mutability":"mutable","name":"reserve","nameLocation":"468:7:64","nodeType":"VariableDeclaration","scope":8985,"src":"460:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8974,"name":"address","nodeType":"ElementaryTypeName","src":"460:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"459:17:64"},"returnParameters":{"id":8977,"nodeType":"ParameterList","parameters":[],"src":"486:0:64"},"scope":9027,"src":"426:97:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9025,"nodeType":"Block","src":"595:201:64","statements":[{"assignments":[8995],"declarations":[{"constant":false,"id":8995,"mutability":"mutable","name":"reservesList","nameLocation":"618:12:64","nodeType":"VariableDeclaration","scope":9025,"src":"601:29:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":8993,"name":"address","nodeType":"ElementaryTypeName","src":"601:7:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8994,"nodeType":"ArrayTypeName","src":"601:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":9002,"initialValue":{"arguments":[{"expression":{"id":8999,"name":"_reserveList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8963,"src":"647:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"647:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"633:13:64","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":8996,"name":"address","nodeType":"ElementaryTypeName","src":"637:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8997,"nodeType":"ArrayTypeName","src":"637:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":9001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"633:34:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"601:66:64"},{"body":{"id":9021,"nodeType":"Block","src":"719:48:64","statements":[{"expression":{"id":9019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9013,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8995,"src":"727:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":9015,"indexExpression":{"id":9014,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9004,"src":"740:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"727:15:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":9016,"name":"_reserveList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8963,"src":"745:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9018,"indexExpression":{"id":9017,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9004,"src":"758:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"745:15:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"727:33:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9020,"nodeType":"ExpressionStatement","src":"727:33:64"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9006,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9004,"src":"689:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9007,"name":"_reserveList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8963,"src":"693:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"693:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"689:23:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9022,"initializationExpression":{"assignments":[9004],"declarations":[{"constant":false,"id":9004,"mutability":"mutable","name":"i","nameLocation":"686:1:64","nodeType":"VariableDeclaration","scope":9022,"src":"678:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9003,"name":"uint256","nodeType":"ElementaryTypeName","src":"678:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9005,"nodeType":"VariableDeclarationStatement","src":"678:9:64"},"loopExpression":{"expression":{"id":9011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"714:3:64","subExpression":{"id":9010,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9004,"src":"714:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9012,"nodeType":"ExpressionStatement","src":"714:3:64"},"nodeType":"ForStatement","src":"673:94:64"},{"expression":{"id":9023,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8995,"src":"779:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":8990,"id":9024,"nodeType":"Return","src":"772:19:64"}]},"functionSelector":"d1946dbc","id":9026,"implemented":true,"kind":"function","modifiers":[],"name":"getReservesList","nameLocation":"536:15:64","nodeType":"FunctionDefinition","parameters":{"id":8986,"nodeType":"ParameterList","parameters":[],"src":"551:2:64"},"returnParameters":{"id":8990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9026,"src":"577:16:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":8987,"name":"address","nodeType":"ElementaryTypeName","src":"577:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8988,"nodeType":"ArrayTypeName","src":"577:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"576:18:64"},"scope":9027,"src":"527:269:64","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9098,"src":"147:651:64","usedErrors":[]},{"absolutePath":"contracts/protocol/pool/Pool.sol","file":"../../protocol/pool/Pool.sol","id":9029,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9098,"sourceUnit":26588,"src":"800:50:64","symbolAliases":[{"foreign":{"id":9028,"name":"Pool","nodeType":"Identifier","overloadedDeclarations":[],"src":"808:4:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9030,"name":"Pool","nodeType":"IdentifierPath","referencedDeclaration":26587,"src":"882:4:64"},"id":9031,"nodeType":"InheritanceSpecifier","src":"882:4:64"}],"canonicalName":"MockPoolInherited","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9097,"linearizedBaseContracts":[9097,26587,5073,28286,12750],"name":"MockPoolInherited","nameLocation":"861:17:64","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9034,"mutability":"mutable","name":"_maxNumberOfReserves","nameLocation":"907:20:64","nodeType":"VariableDeclaration","scope":9097,"src":"891:42:64","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":9032,"name":"uint16","nodeType":"ElementaryTypeName","src":"891:6:64","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"value":{"hexValue":"313238","id":9033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"930:3:64","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"visibility":"internal"},{"baseFunctions":[25279],"body":{"id":9042,"nodeType":"Block","src":"1002:21:64","statements":[{"expression":{"hexValue":"307833","id":9040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1015:3:64","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"0x3"},"functionReturnParameters":9039,"id":9041,"nodeType":"Return","src":"1008:10:64"}]},"id":9043,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"947:11:64","nodeType":"FunctionDefinition","overrides":{"id":9036,"nodeType":"OverrideSpecifier","overrides":[],"src":"975:8:64"},"parameters":{"id":9035,"nodeType":"ParameterList","parameters":[],"src":"958:2:64"},"returnParameters":{"id":9039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9038,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9043,"src":"993:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9037,"name":"uint256","nodeType":"ElementaryTypeName","src":"993:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"992:9:64"},"scope":9097,"src":"938:85:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9052,"nodeType":"Block","src":"1087:2:64","statements":[]},"id":9053,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9049,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9046,"src":"1077:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}}],"id":9050,"kind":"baseConstructorSpecifier","modifierName":{"id":9048,"name":"Pool","nodeType":"IdentifierPath","referencedDeclaration":26587,"src":"1072:4:64"},"nodeType":"ModifierInvocation","src":"1072:14:64"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9046,"mutability":"mutable","name":"provider","nameLocation":"1062:8:64","nodeType":"VariableDeclaration","scope":9053,"src":"1039:31:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":9045,"nodeType":"UserDefinedTypeName","pathNode":{"id":9044,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1039:22:64"},"referencedDeclaration":5282,"src":"1039:22:64","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1038:33:64"},"returnParameters":{"id":9051,"nodeType":"ParameterList","parameters":[],"src":"1087:0:64"},"scope":9097,"src":"1027:62:64","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9062,"nodeType":"Block","src":"1163:56:64","statements":[{"expression":{"id":9060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9058,"name":"_maxNumberOfReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9034,"src":"1169:20:64","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9059,"name":"newMaxNumberOfReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9055,"src":"1192:22:64","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"1169:45:64","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":9061,"nodeType":"ExpressionStatement","src":"1169:45:64"}]},"functionSelector":"57c68dc4","id":9063,"implemented":true,"kind":"function","modifiers":[],"name":"setMaxNumberOfReserves","nameLocation":"1102:22:64","nodeType":"FunctionDefinition","parameters":{"id":9056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9055,"mutability":"mutable","name":"newMaxNumberOfReserves","nameLocation":"1132:22:64","nodeType":"VariableDeclaration","scope":9063,"src":"1125:29:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":9054,"name":"uint16","nodeType":"ElementaryTypeName","src":"1125:6:64","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1124:31:64"},"returnParameters":{"id":9057,"nodeType":"ParameterList","parameters":[],"src":"1163:0:64"},"scope":9097,"src":"1093:126:64","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[26190],"body":{"id":9071,"nodeType":"Block","src":"1292:38:64","statements":[{"expression":{"id":9069,"name":"_maxNumberOfReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9034,"src":"1305:20:64","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":9068,"id":9070,"nodeType":"Return","src":"1298:27:64"}]},"functionSelector":"f8119d51","id":9072,"implemented":true,"kind":"function","modifiers":[],"name":"MAX_NUMBER_RESERVES","nameLocation":"1232:19:64","nodeType":"FunctionDefinition","overrides":{"id":9065,"nodeType":"OverrideSpecifier","overrides":[],"src":"1266:8:64"},"parameters":{"id":9064,"nodeType":"ParameterList","parameters":[],"src":"1251:2:64"},"returnParameters":{"id":9068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9072,"src":"1284:6:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":9066,"name":"uint16","nodeType":"ElementaryTypeName","src":"1284:6:64","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1283:8:64"},"scope":9097,"src":"1223:107:64","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[26302],"body":{"id":9095,"nodeType":"Block","src":"1388:87:64","statements":[{"expression":{"id":9088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9078,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"1394:13:64","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":9083,"indexExpression":{"expression":{"baseExpression":{"id":9079,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"1408:9:64","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":9081,"indexExpression":{"id":9080,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9074,"src":"1418:5:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1408:16:64","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":9082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"1408:19:64","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1394:34:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":9086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1439:1:64","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":9085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1431:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9084,"name":"address","nodeType":"ElementaryTypeName","src":"1431:7:64","typeDescriptions":{}}},"id":9087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1431:10:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1394:47:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9089,"nodeType":"ExpressionStatement","src":"1394:47:64"},{"expression":{"id":9093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1447:23:64","subExpression":{"baseExpression":{"id":9090,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"1454:9:64","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":9092,"indexExpression":{"id":9091,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9074,"src":"1464:5:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1454:16:64","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9094,"nodeType":"ExpressionStatement","src":"1447:23:64"}]},"functionSelector":"63c9b860","id":9096,"implemented":true,"kind":"function","modifiers":[],"name":"dropReserve","nameLocation":"1343:11:64","nodeType":"FunctionDefinition","overrides":{"id":9076,"nodeType":"OverrideSpecifier","overrides":[],"src":"1379:8:64"},"parameters":{"id":9075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9074,"mutability":"mutable","name":"asset","nameLocation":"1363:5:64","nodeType":"VariableDeclaration","scope":9096,"src":"1355:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9073,"name":"address","nodeType":"ElementaryTypeName","src":"1355:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1354:15:64"},"returnParameters":{"id":9077,"nodeType":"ParameterList","parameters":[],"src":"1388:0:64"},"scope":9097,"src":"1334:141:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9098,"src":"852:625:64","usedErrors":[]}],"src":"37:1441:64"},"id":64},"contracts/mocks/helpers/MockReserveConfiguration.sol":{"ast":{"absolutePath":"contracts/mocks/helpers/MockReserveConfiguration.sol","exportedSymbols":{"DataTypes":[24227],"MockReserveConfiguration":[9623],"ReserveConfiguration":[14034]},"id":9624,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9099,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:65"},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../../protocol/libraries/configuration/ReserveConfiguration.sol","id":9101,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9624,"sourceUnit":14035,"src":"62:101:65","symbolAliases":[{"foreign":{"id":9100,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:20:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../../protocol/libraries/types/DataTypes.sol","id":9103,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9624,"sourceUnit":24228,"src":"164:71:65","symbolAliases":[{"foreign":{"id":9102,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"172:9:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MockReserveConfiguration","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9623,"linearizedBaseContracts":[9623],"name":"MockReserveConfiguration","nameLocation":"246:24:65","nodeType":"ContractDefinition","nodes":[{"id":9107,"libraryName":{"id":9104,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"281:20:65"},"nodeType":"UsingForDirective","src":"275:65:65","typeName":{"id":9106,"nodeType":"UserDefinedTypeName","pathNode":{"id":9105,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"306:33:65"},"referencedDeclaration":23912,"src":"306:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"constant":false,"functionSelector":"6c70bee9","id":9110,"mutability":"mutable","name":"configuration","nameLocation":"385:13:65","nodeType":"VariableDeclaration","scope":9623,"src":"344:54:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9109,"nodeType":"UserDefinedTypeName","pathNode":{"id":9108,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"344:33:65"},"referencedDeclaration":23912,"src":"344:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"public"},{"body":{"id":9132,"nodeType":"Block","src":"441:126:65","statements":[{"assignments":[9119],"declarations":[{"constant":false,"id":9119,"mutability":"mutable","name":"config","nameLocation":"488:6:65","nodeType":"VariableDeclaration","scope":9132,"src":"447:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9118,"nodeType":"UserDefinedTypeName","pathNode":{"id":9117,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"447:33:65"},"referencedDeclaration":23912,"src":"447:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9121,"initialValue":{"id":9120,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"497:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"447:63:65"},{"expression":{"arguments":[{"id":9125,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9112,"src":"530:3:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9122,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9119,"src":"516:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLtv","nodeType":"MemberAccess","referencedDeclaration":12938,"src":"516:13:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"516:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9127,"nodeType":"ExpressionStatement","src":"516:18:65"},{"expression":{"id":9130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9128,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"540:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9129,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9119,"src":"556:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"540:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9131,"nodeType":"ExpressionStatement","src":"540:22:65"}]},"functionSelector":"a37e52e3","id":9133,"implemented":true,"kind":"function","modifiers":[],"name":"setLtv","nameLocation":"412:6:65","nodeType":"FunctionDefinition","parameters":{"id":9113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9112,"mutability":"mutable","name":"ltv","nameLocation":"427:3:65","nodeType":"VariableDeclaration","scope":9133,"src":"419:11:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9111,"name":"uint256","nodeType":"ElementaryTypeName","src":"419:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"418:13:65"},"returnParameters":{"id":9114,"nodeType":"ParameterList","parameters":[],"src":"441:0:65"},"scope":9623,"src":"403:164:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9142,"nodeType":"Block","src":"621:40:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9138,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"634:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":12954,"src":"634:20:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"634:22:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9137,"id":9141,"nodeType":"Return","src":"627:29:65"}]},"functionSelector":"8145bd2e","id":9143,"implemented":true,"kind":"function","modifiers":[],"name":"getLtv","nameLocation":"580:6:65","nodeType":"FunctionDefinition","parameters":{"id":9134,"nodeType":"ParameterList","parameters":[],"src":"586:2:65"},"returnParameters":{"id":9137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9143,"src":"612:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9135,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"611:9:65"},"scope":9623,"src":"571:90:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9165,"nodeType":"Block","src":"718:141:65","statements":[{"assignments":[9152],"declarations":[{"constant":false,"id":9152,"mutability":"mutable","name":"config","nameLocation":"765:6:65","nodeType":"VariableDeclaration","scope":9165,"src":"724:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9151,"nodeType":"UserDefinedTypeName","pathNode":{"id":9150,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"724:33:65"},"referencedDeclaration":23912,"src":"724:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9154,"initialValue":{"id":9153,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"774:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"724:63:65"},{"expression":{"arguments":[{"id":9158,"name":"bonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9145,"src":"820:5:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9155,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9152,"src":"793:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":13039,"src":"793:26:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"793:33:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9160,"nodeType":"ExpressionStatement","src":"793:33:65"},{"expression":{"id":9163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9161,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"832:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9162,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9152,"src":"848:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"832:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9164,"nodeType":"ExpressionStatement","src":"832:22:65"}]},"functionSelector":"28842d4f","id":9166,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationBonus","nameLocation":"674:19:65","nodeType":"FunctionDefinition","parameters":{"id":9146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9145,"mutability":"mutable","name":"bonus","nameLocation":"702:5:65","nodeType":"VariableDeclaration","scope":9166,"src":"694:13:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9144,"name":"uint256","nodeType":"ElementaryTypeName","src":"694:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"693:15:65"},"returnParameters":{"id":9147,"nodeType":"ParameterList","parameters":[],"src":"718:0:65"},"scope":9623,"src":"665:194:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9175,"nodeType":"Block","src":"926:53:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9171,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"939:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":13058,"src":"939:33:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"939:35:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9170,"id":9174,"nodeType":"Return","src":"932:42:65"}]},"functionSelector":"59aa9e72","id":9176,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationBonus","nameLocation":"872:19:65","nodeType":"FunctionDefinition","parameters":{"id":9167,"nodeType":"ParameterList","parameters":[],"src":"891:2:65"},"returnParameters":{"id":9170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9169,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9176,"src":"917:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9168,"name":"uint256","nodeType":"ElementaryTypeName","src":"917:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"916:9:65"},"scope":9623,"src":"863:116:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9198,"nodeType":"Block","src":"1044:149:65","statements":[{"assignments":[9185],"declarations":[{"constant":false,"id":9185,"mutability":"mutable","name":"config","nameLocation":"1091:6:65","nodeType":"VariableDeclaration","scope":9198,"src":"1050:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9184,"nodeType":"UserDefinedTypeName","pathNode":{"id":9183,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1050:33:65"},"referencedDeclaration":23912,"src":"1050:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9187,"initialValue":{"id":9186,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1100:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1050:63:65"},{"expression":{"arguments":[{"id":9191,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9178,"src":"1150:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9188,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"1119:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":12987,"src":"1119:30:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1119:41:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9193,"nodeType":"ExpressionStatement","src":"1119:41:65"},{"expression":{"id":9196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9194,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1166:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9195,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"1182:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"1166:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9197,"nodeType":"ExpressionStatement","src":"1166:22:65"}]},"functionSelector":"d0b0c816","id":9199,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationThreshold","nameLocation":"992:23:65","nodeType":"FunctionDefinition","parameters":{"id":9179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9178,"mutability":"mutable","name":"threshold","nameLocation":"1024:9:65","nodeType":"VariableDeclaration","scope":9199,"src":"1016:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9177,"name":"uint256","nodeType":"ElementaryTypeName","src":"1016:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1015:19:65"},"returnParameters":{"id":9180,"nodeType":"ParameterList","parameters":[],"src":"1044:0:65"},"scope":9623,"src":"983:210:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9208,"nodeType":"Block","src":"1264:57:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9204,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1277:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":13006,"src":"1277:37:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1277:39:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9203,"id":9207,"nodeType":"Return","src":"1270:46:65"}]},"functionSelector":"4ae9b8bc","id":9209,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationThreshold","nameLocation":"1206:23:65","nodeType":"FunctionDefinition","parameters":{"id":9200,"nodeType":"ParameterList","parameters":[],"src":"1229:2:65"},"returnParameters":{"id":9203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9202,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9209,"src":"1255:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9201,"name":"uint256","nodeType":"ElementaryTypeName","src":"1255:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1254:9:65"},"scope":9623,"src":"1197:124:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9231,"nodeType":"Block","src":"1373:136:65","statements":[{"assignments":[9218],"declarations":[{"constant":false,"id":9218,"mutability":"mutable","name":"config","nameLocation":"1420:6:65","nodeType":"VariableDeclaration","scope":9231,"src":"1379:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9217,"nodeType":"UserDefinedTypeName","pathNode":{"id":9216,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1379:33:65"},"referencedDeclaration":23912,"src":"1379:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9220,"initialValue":{"id":9219,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1429:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1379:63:65"},{"expression":{"arguments":[{"id":9224,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9211,"src":"1467:8:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9221,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9218,"src":"1448:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setDecimals","nodeType":"MemberAccess","referencedDeclaration":13091,"src":"1448:18:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1448:28:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9226,"nodeType":"ExpressionStatement","src":"1448:28:65"},{"expression":{"id":9229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9227,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1482:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9228,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9218,"src":"1498:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"1482:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9230,"nodeType":"ExpressionStatement","src":"1482:22:65"}]},"functionSelector":"8c8885c8","id":9232,"implemented":true,"kind":"function","modifiers":[],"name":"setDecimals","nameLocation":"1334:11:65","nodeType":"FunctionDefinition","parameters":{"id":9212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9211,"mutability":"mutable","name":"decimals","nameLocation":"1354:8:65","nodeType":"VariableDeclaration","scope":9232,"src":"1346:16:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9210,"name":"uint256","nodeType":"ElementaryTypeName","src":"1346:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1345:18:65"},"returnParameters":{"id":9213,"nodeType":"ParameterList","parameters":[],"src":"1373:0:65"},"scope":9623,"src":"1325:184:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9241,"nodeType":"Block","src":"1568:45:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9237,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1581:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":13110,"src":"1581:25:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1581:27:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9236,"id":9240,"nodeType":"Return","src":"1574:34:65"}]},"functionSelector":"f0141d84","id":9242,"implemented":true,"kind":"function","modifiers":[],"name":"getDecimals","nameLocation":"1522:11:65","nodeType":"FunctionDefinition","parameters":{"id":9233,"nodeType":"ParameterList","parameters":[],"src":"1533:2:65"},"returnParameters":{"id":9236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9242,"src":"1559:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9234,"name":"uint256","nodeType":"ElementaryTypeName","src":"1559:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1558:9:65"},"scope":9623,"src":"1513:100:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9264,"nodeType":"Block","src":"1658:132:65","statements":[{"assignments":[9251],"declarations":[{"constant":false,"id":9251,"mutability":"mutable","name":"config","nameLocation":"1705:6:65","nodeType":"VariableDeclaration","scope":9264,"src":"1664:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9250,"nodeType":"UserDefinedTypeName","pathNode":{"id":9249,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1664:33:65"},"referencedDeclaration":23912,"src":"1664:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9253,"initialValue":{"id":9252,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1714:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1664:63:65"},{"expression":{"arguments":[{"id":9257,"name":"frozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9244,"src":"1750:6:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":9254,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9251,"src":"1733:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9256,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFrozen","nodeType":"MemberAccess","referencedDeclaration":13191,"src":"1733:16:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":9258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1733:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9259,"nodeType":"ExpressionStatement","src":"1733:24:65"},{"expression":{"id":9262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9260,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1763:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9261,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9251,"src":"1779:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"1763:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9263,"nodeType":"ExpressionStatement","src":"1763:22:65"}]},"functionSelector":"7e932d32","id":9265,"implemented":true,"kind":"function","modifiers":[],"name":"setFrozen","nameLocation":"1626:9:65","nodeType":"FunctionDefinition","parameters":{"id":9245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9244,"mutability":"mutable","name":"frozen","nameLocation":"1641:6:65","nodeType":"VariableDeclaration","scope":9265,"src":"1636:11:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9243,"name":"bool","nodeType":"ElementaryTypeName","src":"1636:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1635:13:65"},"returnParameters":{"id":9246,"nodeType":"ParameterList","parameters":[],"src":"1658:0:65"},"scope":9623,"src":"1617:173:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9274,"nodeType":"Block","src":"1844:43:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9270,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1857:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFrozen","nodeType":"MemberAccess","referencedDeclaration":13210,"src":"1857:23:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":9272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1857:25:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9269,"id":9273,"nodeType":"Return","src":"1850:32:65"}]},"functionSelector":"7495b353","id":9275,"implemented":true,"kind":"function","modifiers":[],"name":"getFrozen","nameLocation":"1803:9:65","nodeType":"FunctionDefinition","parameters":{"id":9266,"nodeType":"ParameterList","parameters":[],"src":"1812:2:65"},"returnParameters":{"id":9269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9275,"src":"1838:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9267,"name":"bool","nodeType":"ElementaryTypeName","src":"1838:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1837:6:65"},"scope":9623,"src":"1794:93:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9297,"nodeType":"Block","src":"1943:143:65","statements":[{"assignments":[9284],"declarations":[{"constant":false,"id":9284,"mutability":"mutable","name":"config","nameLocation":"1990:6:65","nodeType":"VariableDeclaration","scope":9297,"src":"1949:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9283,"nodeType":"UserDefinedTypeName","pathNode":{"id":9282,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1949:33:65"},"referencedDeclaration":23912,"src":"1949:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9286,"initialValue":{"id":9285,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"1999:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1949:63:65"},{"expression":{"arguments":[{"id":9290,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9277,"src":"2045:7:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":9287,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9284,"src":"2018:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":13391,"src":"2018:26:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":9291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2018:35:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9292,"nodeType":"ExpressionStatement","src":"2018:35:65"},{"expression":{"id":9295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9293,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2059:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9294,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9284,"src":"2075:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"2059:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9296,"nodeType":"ExpressionStatement","src":"2059:22:65"}]},"functionSelector":"f1514a1a","id":9298,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowingEnabled","nameLocation":"1900:19:65","nodeType":"FunctionDefinition","parameters":{"id":9278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9277,"mutability":"mutable","name":"enabled","nameLocation":"1925:7:65","nodeType":"VariableDeclaration","scope":9298,"src":"1920:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9276,"name":"bool","nodeType":"ElementaryTypeName","src":"1920:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1919:14:65"},"returnParameters":{"id":9279,"nodeType":"ParameterList","parameters":[],"src":"1943:0:65"},"scope":9623,"src":"1891:195:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9307,"nodeType":"Block","src":"2150:53:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9303,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2163:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":13410,"src":"2163:33:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":9305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2163:35:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9302,"id":9306,"nodeType":"Return","src":"2156:42:65"}]},"functionSelector":"79750bc4","id":9308,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowingEnabled","nameLocation":"2099:19:65","nodeType":"FunctionDefinition","parameters":{"id":9299,"nodeType":"ParameterList","parameters":[],"src":"2118:2:65"},"returnParameters":{"id":9302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9301,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9308,"src":"2144:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9300,"name":"bool","nodeType":"ElementaryTypeName","src":"2144:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2143:6:65"},"scope":9623,"src":"2090:113:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9330,"nodeType":"Block","src":"2269:153:65","statements":[{"assignments":[9317],"declarations":[{"constant":false,"id":9317,"mutability":"mutable","name":"config","nameLocation":"2316:6:65","nodeType":"VariableDeclaration","scope":9330,"src":"2275:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9316,"nodeType":"UserDefinedTypeName","pathNode":{"id":9315,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"2275:33:65"},"referencedDeclaration":23912,"src":"2275:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9319,"initialValue":{"id":9318,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2325:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2275:63:65"},{"expression":{"arguments":[{"id":9323,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9310,"src":"2381:7:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":9320,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9317,"src":"2344:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setStableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":13441,"src":"2344:36:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":9324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2344:45:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9325,"nodeType":"ExpressionStatement","src":"2344:45:65"},{"expression":{"id":9328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9326,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2395:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9327,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9317,"src":"2411:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"2395:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9329,"nodeType":"ExpressionStatement","src":"2395:22:65"}]},"functionSelector":"71cb1332","id":9331,"implemented":true,"kind":"function","modifiers":[],"name":"setStableRateBorrowingEnabled","nameLocation":"2216:29:65","nodeType":"FunctionDefinition","parameters":{"id":9311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9310,"mutability":"mutable","name":"enabled","nameLocation":"2251:7:65","nodeType":"VariableDeclaration","scope":9331,"src":"2246:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9309,"name":"bool","nodeType":"ElementaryTypeName","src":"2246:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2245:14:65"},"returnParameters":{"id":9312,"nodeType":"ParameterList","parameters":[],"src":"2269:0:65"},"scope":9623,"src":"2207:215:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9340,"nodeType":"Block","src":"2496:63:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9336,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2509:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getStableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":13460,"src":"2509:43:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":9338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2509:45:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9335,"id":9339,"nodeType":"Return","src":"2502:52:65"}]},"functionSelector":"e08a28a3","id":9341,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateBorrowingEnabled","nameLocation":"2435:29:65","nodeType":"FunctionDefinition","parameters":{"id":9332,"nodeType":"ParameterList","parameters":[],"src":"2464:2:65"},"returnParameters":{"id":9335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9341,"src":"2490:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9333,"name":"bool","nodeType":"ElementaryTypeName","src":"2490:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2489:6:65"},"scope":9623,"src":"2426:133:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9363,"nodeType":"Block","src":"2621:146:65","statements":[{"assignments":[9350],"declarations":[{"constant":false,"id":9350,"mutability":"mutable","name":"config","nameLocation":"2668:6:65","nodeType":"VariableDeclaration","scope":9363,"src":"2627:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9349,"nodeType":"UserDefinedTypeName","pathNode":{"id":9348,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"2627:33:65"},"referencedDeclaration":23912,"src":"2627:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9352,"initialValue":{"id":9351,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2677:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2627:63:65"},{"expression":{"arguments":[{"id":9356,"name":"reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9343,"src":"2720:13:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9353,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9350,"src":"2696:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9355,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setReserveFactor","nodeType":"MemberAccess","referencedDeclaration":13493,"src":"2696:23:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2696:38:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9358,"nodeType":"ExpressionStatement","src":"2696:38:65"},{"expression":{"id":9361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9359,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2740:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9360,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9350,"src":"2756:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"2740:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9362,"nodeType":"ExpressionStatement","src":"2740:22:65"}]},"functionSelector":"1c446983","id":9364,"implemented":true,"kind":"function","modifiers":[],"name":"setReserveFactor","nameLocation":"2572:16:65","nodeType":"FunctionDefinition","parameters":{"id":9344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9343,"mutability":"mutable","name":"reserveFactor","nameLocation":"2597:13:65","nodeType":"VariableDeclaration","scope":9364,"src":"2589:21:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9342,"name":"uint256","nodeType":"ElementaryTypeName","src":"2589:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2588:23:65"},"returnParameters":{"id":9345,"nodeType":"ParameterList","parameters":[],"src":"2621:0:65"},"scope":9623,"src":"2563:204:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9373,"nodeType":"Block","src":"2831:50:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9369,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2844:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getReserveFactor","nodeType":"MemberAccess","referencedDeclaration":13512,"src":"2844:30:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2844:32:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9368,"id":9372,"nodeType":"Return","src":"2837:39:65"}]},"functionSelector":"5f558e53","id":9374,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveFactor","nameLocation":"2780:16:65","nodeType":"FunctionDefinition","parameters":{"id":9365,"nodeType":"ParameterList","parameters":[],"src":"2796:2:65"},"returnParameters":{"id":9368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9374,"src":"2822:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9366,"name":"uint256","nodeType":"ElementaryTypeName","src":"2822:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2821:9:65"},"scope":9623,"src":"2771:110:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9396,"nodeType":"Block","src":"2935:138:65","statements":[{"assignments":[9383],"declarations":[{"constant":false,"id":9383,"mutability":"mutable","name":"config","nameLocation":"2982:6:65","nodeType":"VariableDeclaration","scope":9396,"src":"2941:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9382,"nodeType":"UserDefinedTypeName","pathNode":{"id":9381,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"2941:33:65"},"referencedDeclaration":23912,"src":"2941:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9385,"initialValue":{"id":9384,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"2991:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2941:63:65"},{"expression":{"arguments":[{"id":9389,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9376,"src":"3030:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9386,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9383,"src":"3010:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowCap","nodeType":"MemberAccess","referencedDeclaration":13545,"src":"3010:19:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3010:30:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9391,"nodeType":"ExpressionStatement","src":"3010:30:65"},{"expression":{"id":9394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9392,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3046:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9393,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9383,"src":"3062:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"3046:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9395,"nodeType":"ExpressionStatement","src":"3046:22:65"}]},"functionSelector":"717186d1","id":9397,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowCap","nameLocation":"2894:12:65","nodeType":"FunctionDefinition","parameters":{"id":9377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9376,"mutability":"mutable","name":"borrowCap","nameLocation":"2915:9:65","nodeType":"VariableDeclaration","scope":9397,"src":"2907:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9375,"name":"uint256","nodeType":"ElementaryTypeName","src":"2907:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2906:19:65"},"returnParameters":{"id":9378,"nodeType":"ParameterList","parameters":[],"src":"2935:0:65"},"scope":9623,"src":"2885:188:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9406,"nodeType":"Block","src":"3133:46:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9402,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3146:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowCap","nodeType":"MemberAccess","referencedDeclaration":13564,"src":"3146:26:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3146:28:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9401,"id":9405,"nodeType":"Return","src":"3139:35:65"}]},"functionSelector":"aede7b76","id":9407,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowCap","nameLocation":"3086:12:65","nodeType":"FunctionDefinition","parameters":{"id":9398,"nodeType":"ParameterList","parameters":[],"src":"3098:2:65"},"returnParameters":{"id":9401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9407,"src":"3124:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9399,"name":"uint256","nodeType":"ElementaryTypeName","src":"3124:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3123:9:65"},"scope":9623,"src":"3077:102:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9416,"nodeType":"Block","src":"3243:50:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9412,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3256:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13824,"src":"3256:30:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3256:32:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9411,"id":9415,"nodeType":"Return","src":"3249:39:65"}]},"functionSelector":"356f235c","id":9417,"implemented":true,"kind":"function","modifiers":[],"name":"getEModeCategory","nameLocation":"3192:16:65","nodeType":"FunctionDefinition","parameters":{"id":9408,"nodeType":"ParameterList","parameters":[],"src":"3208:2:65"},"returnParameters":{"id":9411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9410,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9417,"src":"3234:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9409,"name":"uint256","nodeType":"ElementaryTypeName","src":"3234:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3233:9:65"},"scope":9623,"src":"3183:110:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9439,"nodeType":"Block","src":"3352:143:65","statements":[{"assignments":[9426],"declarations":[{"constant":false,"id":9426,"mutability":"mutable","name":"config","nameLocation":"3399:6:65","nodeType":"VariableDeclaration","scope":9439,"src":"3358:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9425,"nodeType":"UserDefinedTypeName","pathNode":{"id":9424,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"3358:33:65"},"referencedDeclaration":23912,"src":"3358:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9428,"initialValue":{"id":9427,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3408:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3358:63:65"},{"expression":{"arguments":[{"id":9432,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9419,"src":"3451:10:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9429,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9426,"src":"3427:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13805,"src":"3427:23:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3427:35:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9434,"nodeType":"ExpressionStatement","src":"3427:35:65"},{"expression":{"id":9437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9435,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3468:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9436,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9426,"src":"3484:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"3468:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9438,"nodeType":"ExpressionStatement","src":"3468:22:65"}]},"functionSelector":"fa573d07","id":9440,"implemented":true,"kind":"function","modifiers":[],"name":"setEModeCategory","nameLocation":"3306:16:65","nodeType":"FunctionDefinition","parameters":{"id":9420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9419,"mutability":"mutable","name":"categoryId","nameLocation":"3331:10:65","nodeType":"VariableDeclaration","scope":9440,"src":"3323:18:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9418,"name":"uint256","nodeType":"ElementaryTypeName","src":"3323:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3322:20:65"},"returnParameters":{"id":9421,"nodeType":"ParameterList","parameters":[],"src":"3352:0:65"},"scope":9623,"src":"3297:198:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9462,"nodeType":"Block","src":"3551:143:65","statements":[{"assignments":[9449],"declarations":[{"constant":false,"id":9449,"mutability":"mutable","name":"config","nameLocation":"3598:6:65","nodeType":"VariableDeclaration","scope":9462,"src":"3557:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9448,"nodeType":"UserDefinedTypeName","pathNode":{"id":9447,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"3557:33:65"},"referencedDeclaration":23912,"src":"3557:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9451,"initialValue":{"id":9450,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3607:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3557:63:65"},{"expression":{"arguments":[{"id":9455,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9442,"src":"3653:7:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":9452,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"3626:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":13855,"src":"3626:26:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":9456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3626:35:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9457,"nodeType":"ExpressionStatement","src":"3626:35:65"},{"expression":{"id":9460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9458,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3667:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9459,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"3683:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"3667:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9461,"nodeType":"ExpressionStatement","src":"3667:22:65"}]},"functionSelector":"a55102f7","id":9463,"implemented":true,"kind":"function","modifiers":[],"name":"setFlashLoanEnabled","nameLocation":"3508:19:65","nodeType":"FunctionDefinition","parameters":{"id":9443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9442,"mutability":"mutable","name":"enabled","nameLocation":"3533:7:65","nodeType":"VariableDeclaration","scope":9463,"src":"3528:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9441,"name":"bool","nodeType":"ElementaryTypeName","src":"3528:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3527:14:65"},"returnParameters":{"id":9444,"nodeType":"ParameterList","parameters":[],"src":"3551:0:65"},"scope":9623,"src":"3499:195:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9472,"nodeType":"Block","src":"3758:53:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9468,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3771:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":13874,"src":"3771:33:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":9470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3771:35:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9467,"id":9471,"nodeType":"Return","src":"3764:42:65"}]},"functionSelector":"d1c11f18","id":9473,"implemented":true,"kind":"function","modifiers":[],"name":"getFlashLoanEnabled","nameLocation":"3707:19:65","nodeType":"FunctionDefinition","parameters":{"id":9464,"nodeType":"ParameterList","parameters":[],"src":"3726:2:65"},"returnParameters":{"id":9467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9473,"src":"3752:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9465,"name":"bool","nodeType":"ElementaryTypeName","src":"3752:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3751:6:65"},"scope":9623,"src":"3698:113:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9495,"nodeType":"Block","src":"3865:138:65","statements":[{"assignments":[9482],"declarations":[{"constant":false,"id":9482,"mutability":"mutable","name":"config","nameLocation":"3912:6:65","nodeType":"VariableDeclaration","scope":9495,"src":"3871:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9481,"nodeType":"UserDefinedTypeName","pathNode":{"id":9480,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"3871:33:65"},"referencedDeclaration":23912,"src":"3871:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9484,"initialValue":{"id":9483,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3921:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3871:63:65"},{"expression":{"arguments":[{"id":9488,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9475,"src":"3960:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9485,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9482,"src":"3940:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setSupplyCap","nodeType":"MemberAccess","referencedDeclaration":13597,"src":"3940:19:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3940:30:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9490,"nodeType":"ExpressionStatement","src":"3940:30:65"},{"expression":{"id":9493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9491,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"3976:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9492,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9482,"src":"3992:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"3976:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9494,"nodeType":"ExpressionStatement","src":"3976:22:65"}]},"functionSelector":"b6a3f59a","id":9496,"implemented":true,"kind":"function","modifiers":[],"name":"setSupplyCap","nameLocation":"3824:12:65","nodeType":"FunctionDefinition","parameters":{"id":9476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9475,"mutability":"mutable","name":"supplyCap","nameLocation":"3845:9:65","nodeType":"VariableDeclaration","scope":9496,"src":"3837:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9474,"name":"uint256","nodeType":"ElementaryTypeName","src":"3837:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3836:19:65"},"returnParameters":{"id":9477,"nodeType":"ParameterList","parameters":[],"src":"3865:0:65"},"scope":9623,"src":"3815:188:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9505,"nodeType":"Block","src":"4063:46:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9501,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"4076:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSupplyCap","nodeType":"MemberAccess","referencedDeclaration":13616,"src":"4076:26:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4076:28:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9500,"id":9504,"nodeType":"Return","src":"4069:35:65"}]},"functionSelector":"20361814","id":9506,"implemented":true,"kind":"function","modifiers":[],"name":"getSupplyCap","nameLocation":"4016:12:65","nodeType":"FunctionDefinition","parameters":{"id":9497,"nodeType":"ParameterList","parameters":[],"src":"4028:2:65"},"returnParameters":{"id":9500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9499,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9506,"src":"4054:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9498,"name":"uint256","nodeType":"ElementaryTypeName","src":"4054:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4053:9:65"},"scope":9623,"src":"4007:102:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9528,"nodeType":"Block","src":"4189:164:65","statements":[{"assignments":[9515],"declarations":[{"constant":false,"id":9515,"mutability":"mutable","name":"config","nameLocation":"4236:6:65","nodeType":"VariableDeclaration","scope":9528,"src":"4195:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9514,"nodeType":"UserDefinedTypeName","pathNode":{"id":9513,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"4195:33:65"},"referencedDeclaration":23912,"src":"4195:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9517,"initialValue":{"id":9516,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"4245:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4195:63:65"},{"expression":{"arguments":[{"id":9521,"name":"liquidationProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9508,"src":"4297:22:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9518,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9515,"src":"4264:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":13701,"src":"4264:32:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4264:56:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9523,"nodeType":"ExpressionStatement","src":"4264:56:65"},{"expression":{"id":9526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9524,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"4326:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9525,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9515,"src":"4342:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"4326:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9527,"nodeType":"ExpressionStatement","src":"4326:22:65"}]},"functionSelector":"a6200635","id":9529,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationProtocolFee","nameLocation":"4122:25:65","nodeType":"FunctionDefinition","parameters":{"id":9509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9508,"mutability":"mutable","name":"liquidationProtocolFee","nameLocation":"4156:22:65","nodeType":"VariableDeclaration","scope":9529,"src":"4148:30:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9507,"name":"uint256","nodeType":"ElementaryTypeName","src":"4148:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4147:32:65"},"returnParameters":{"id":9510,"nodeType":"ParameterList","parameters":[],"src":"4189:0:65"},"scope":9623,"src":"4113:240:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9538,"nodeType":"Block","src":"4426:59:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9534,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"4439:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":13720,"src":"4439:39:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4439:41:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9533,"id":9537,"nodeType":"Return","src":"4432:48:65"}]},"functionSelector":"c37bdcec","id":9539,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationProtocolFee","nameLocation":"4366:25:65","nodeType":"FunctionDefinition","parameters":{"id":9530,"nodeType":"ParameterList","parameters":[],"src":"4391:2:65"},"returnParameters":{"id":9533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9539,"src":"4417:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9531,"name":"uint256","nodeType":"ElementaryTypeName","src":"4417:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4416:9:65"},"scope":9623,"src":"4357:128:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9561,"nodeType":"Block","src":"4551:150:65","statements":[{"assignments":[9548],"declarations":[{"constant":false,"id":9548,"mutability":"mutable","name":"config","nameLocation":"4598:6:65","nodeType":"VariableDeclaration","scope":9561,"src":"4557:47:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":9547,"nodeType":"UserDefinedTypeName","pathNode":{"id":9546,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"4557:33:65"},"referencedDeclaration":23912,"src":"4557:33:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":9550,"initialValue":{"id":9549,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"4607:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4557:63:65"},{"expression":{"arguments":[{"id":9554,"name":"unbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9541,"src":"4652:15:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9551,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9548,"src":"4626:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":9553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":13753,"src":"4626:25:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":9555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4626:42:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9556,"nodeType":"ExpressionStatement","src":"4626:42:65"},{"expression":{"id":9559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9557,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"4674:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9558,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9548,"src":"4690:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"4674:22:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9560,"nodeType":"ExpressionStatement","src":"4674:22:65"}]},"functionSelector":"92dfb2fb","id":9562,"implemented":true,"kind":"function","modifiers":[],"name":"setUnbackedMintCap","nameLocation":"4498:18:65","nodeType":"FunctionDefinition","parameters":{"id":9542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9541,"mutability":"mutable","name":"unbackedMintCap","nameLocation":"4525:15:65","nodeType":"VariableDeclaration","scope":9562,"src":"4517:23:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9540,"name":"uint256","nodeType":"ElementaryTypeName","src":"4517:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4516:25:65"},"returnParameters":{"id":9543,"nodeType":"ParameterList","parameters":[],"src":"4551:0:65"},"scope":9623,"src":"4489:212:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9571,"nodeType":"Block","src":"4767:52:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9567,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"4780:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":13772,"src":"4780:32:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":9569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4780:34:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9566,"id":9570,"nodeType":"Return","src":"4773:41:65"}]},"functionSelector":"ead8aa02","id":9572,"implemented":true,"kind":"function","modifiers":[],"name":"getUnbackedMintCap","nameLocation":"4714:18:65","nodeType":"FunctionDefinition","parameters":{"id":9563,"nodeType":"ParameterList","parameters":[],"src":"4732:2:65"},"returnParameters":{"id":9566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9572,"src":"4758:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9564,"name":"uint256","nodeType":"ElementaryTypeName","src":"4758:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4757:9:65"},"scope":9623,"src":"4705:114:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9589,"nodeType":"Block","src":"4896:42:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9585,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"4909:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"4909:22:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":9587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4909:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"functionReturnParameters":9584,"id":9588,"nodeType":"Return","src":"4902:31:65"}]},"functionSelector":"6cc7149d","id":9590,"implemented":true,"kind":"function","modifiers":[],"name":"getFlags","nameLocation":"4832:8:65","nodeType":"FunctionDefinition","parameters":{"id":9573,"nodeType":"ParameterList","parameters":[],"src":"4840:2:65"},"returnParameters":{"id":9584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9575,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9590,"src":"4866:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9574,"name":"bool","nodeType":"ElementaryTypeName","src":"4866:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9577,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9590,"src":"4872:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9576,"name":"bool","nodeType":"ElementaryTypeName","src":"4872:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9590,"src":"4878:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9578,"name":"bool","nodeType":"ElementaryTypeName","src":"4878:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9590,"src":"4884:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9580,"name":"bool","nodeType":"ElementaryTypeName","src":"4884:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9590,"src":"4890:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9582,"name":"bool","nodeType":"ElementaryTypeName","src":"4890:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4865:30:65"},"scope":9623,"src":"4823:115:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9609,"nodeType":"Block","src":"5054:43:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9605,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"5067:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":14000,"src":"5067:23:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":9607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5067:25:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"functionReturnParameters":9604,"id":9608,"nodeType":"Return","src":"5060:32:65"}]},"functionSelector":"5e615a6b","id":9610,"implemented":true,"kind":"function","modifiers":[],"name":"getParams","nameLocation":"4951:9:65","nodeType":"FunctionDefinition","parameters":{"id":9591,"nodeType":"ParameterList","parameters":[],"src":"4960:2:65"},"returnParameters":{"id":9604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9593,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9610,"src":"4998:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9592,"name":"uint256","nodeType":"ElementaryTypeName","src":"4998:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9610,"src":"5007:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9594,"name":"uint256","nodeType":"ElementaryTypeName","src":"5007:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9597,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9610,"src":"5016:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9596,"name":"uint256","nodeType":"ElementaryTypeName","src":"5016:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9610,"src":"5025:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9598,"name":"uint256","nodeType":"ElementaryTypeName","src":"5025:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9601,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9610,"src":"5034:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9600,"name":"uint256","nodeType":"ElementaryTypeName","src":"5034:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9603,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9610,"src":"5043:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9602,"name":"uint256","nodeType":"ElementaryTypeName","src":"5043:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4997:54:65"},"scope":9623,"src":"4942:155:65","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9621,"nodeType":"Block","src":"5161:41:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9617,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"5174:13:65","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":9618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getCaps","nodeType":"MemberAccess","referencedDeclaration":14033,"src":"5174:21:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256)"}},"id":9619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5174:23:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":9616,"id":9620,"nodeType":"Return","src":"5167:30:65"}]},"functionSelector":"9d706d31","id":9622,"implemented":true,"kind":"function","modifiers":[],"name":"getCaps","nameLocation":"5110:7:65","nodeType":"FunctionDefinition","parameters":{"id":9611,"nodeType":"ParameterList","parameters":[],"src":"5117:2:65"},"returnParameters":{"id":9616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9622,"src":"5143:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9612,"name":"uint256","nodeType":"ElementaryTypeName","src":"5143:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9615,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9622,"src":"5152:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9614,"name":"uint256","nodeType":"ElementaryTypeName","src":"5152:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5142:18:65"},"scope":9623,"src":"5101:101:65","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9624,"src":"237:4967:65","usedErrors":[]}],"src":"37:5168:65"},"id":65},"contracts/mocks/helpers/SelfDestructTransfer.sol":{"ast":{"absolutePath":"contracts/mocks/helpers/SelfDestructTransfer.sol","exportedSymbols":{"SelfdestructTransfer":[9636]},"id":9637,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9625,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:66"},{"abstract":false,"baseContracts":[],"canonicalName":"SelfdestructTransfer","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9636,"linearizedBaseContracts":[9636],"name":"SelfdestructTransfer","nameLocation":"71:20:66","nodeType":"ContractDefinition","nodes":[{"body":{"id":9634,"nodeType":"Block","src":"161:27:66","statements":[{"expression":{"arguments":[{"id":9631,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9627,"src":"180:2:66","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":9630,"name":"selfdestruct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-21,"src":"167:12:66","typeDescriptions":{"typeIdentifier":"t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$","typeString":"function (address payable)"}},"id":9632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"167:16:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9633,"nodeType":"ExpressionStatement","src":"167:16:66"}]},"functionSelector":"785e07b3","id":9635,"implemented":true,"kind":"function","modifiers":[],"name":"destroyAndTransfer","nameLocation":"105:18:66","nodeType":"FunctionDefinition","parameters":{"id":9628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9627,"mutability":"mutable","name":"to","nameLocation":"140:2:66","nodeType":"VariableDeclaration","scope":9635,"src":"124:18:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":9626,"name":"address","nodeType":"ElementaryTypeName","src":"124:15:66","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"123:20:66"},"returnParameters":{"id":9629,"nodeType":"ParameterList","parameters":[],"src":"161:0:66"},"scope":9636,"src":"96:92:66","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":9637,"src":"62:128:66","usedErrors":[]}],"src":"37:154:66"},"id":66},"contracts/mocks/oracle/CLAggregators/MockAggregator.sol":{"ast":{"absolutePath":"contracts/mocks/oracle/CLAggregators/MockAggregator.sol","exportedSymbols":{"MockAggregator":[9690]},"id":9691,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9638,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:67"},{"abstract":false,"baseContracts":[],"canonicalName":"MockAggregator","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9690,"linearizedBaseContracts":[9690],"name":"MockAggregator","nameLocation":"71:14:67","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9640,"mutability":"mutable","name":"_latestAnswer","nameLocation":"105:13:67","nodeType":"VariableDeclaration","scope":9690,"src":"90:28:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9639,"name":"int256","nodeType":"ElementaryTypeName","src":"90:6:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"private"},{"anonymous":false,"id":9648,"name":"AnswerUpdated","nameLocation":"129:13:67","nodeType":"EventDefinition","parameters":{"id":9647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9642,"indexed":true,"mutability":"mutable","name":"current","nameLocation":"158:7:67","nodeType":"VariableDeclaration","scope":9648,"src":"143:22:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9641,"name":"int256","nodeType":"ElementaryTypeName","src":"143:6:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":9644,"indexed":true,"mutability":"mutable","name":"roundId","nameLocation":"183:7:67","nodeType":"VariableDeclaration","scope":9648,"src":"167:23:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9643,"name":"uint256","nodeType":"ElementaryTypeName","src":"167:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9646,"indexed":false,"mutability":"mutable","name":"updatedAt","nameLocation":"200:9:67","nodeType":"VariableDeclaration","scope":9648,"src":"192:17:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9645,"name":"uint256","nodeType":"ElementaryTypeName","src":"192:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"142:68:67"},"src":"123:88:67"},{"body":{"id":9664,"nodeType":"Block","src":"249:99:67","statements":[{"expression":{"id":9655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9653,"name":"_latestAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9640,"src":"255:13:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9654,"name":"initialAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9650,"src":"271:13:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"255:29:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9656,"nodeType":"ExpressionStatement","src":"255:29:67"},{"eventCall":{"arguments":[{"id":9658,"name":"initialAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9650,"src":"309:13:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"hexValue":"30","id":9659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"324:1:67","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":9660,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"327:5:67","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"327:15:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9657,"name":"AnswerUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"295:13:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_int256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (int256,uint256,uint256)"}},"id":9662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"295:48:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9663,"nodeType":"EmitStatement","src":"290:53:67"}]},"id":9665,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9650,"mutability":"mutable","name":"initialAnswer","nameLocation":"234:13:67","nodeType":"VariableDeclaration","scope":9665,"src":"227:20:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9649,"name":"int256","nodeType":"ElementaryTypeName","src":"227:6:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"226:22:67"},"returnParameters":{"id":9652,"nodeType":"ParameterList","parameters":[],"src":"249:0:67"},"scope":9690,"src":"215:133:67","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9672,"nodeType":"Block","src":"407:31:67","statements":[{"expression":{"id":9670,"name":"_latestAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9640,"src":"420:13:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9669,"id":9671,"nodeType":"Return","src":"413:20:67"}]},"functionSelector":"50d25bcd","id":9673,"implemented":true,"kind":"function","modifiers":[],"name":"latestAnswer","nameLocation":"361:12:67","nodeType":"FunctionDefinition","parameters":{"id":9666,"nodeType":"ParameterList","parameters":[],"src":"373:2:67"},"returnParameters":{"id":9669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9673,"src":"399:6:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9667,"name":"int256","nodeType":"ElementaryTypeName","src":"399:6:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"398:8:67"},"scope":9690,"src":"352:86:67","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9680,"nodeType":"Block","src":"498:19:67","statements":[{"expression":{"hexValue":"31","id":9678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"511:1:67","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"functionReturnParameters":9677,"id":9679,"nodeType":"Return","src":"504:8:67"}]},"functionSelector":"fcab1819","id":9681,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenType","nameLocation":"451:12:67","nodeType":"FunctionDefinition","parameters":{"id":9674,"nodeType":"ParameterList","parameters":[],"src":"463:2:67"},"returnParameters":{"id":9677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9681,"src":"489:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9675,"name":"uint256","nodeType":"ElementaryTypeName","src":"489:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"488:9:67"},"scope":9690,"src":"442:75:67","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":9688,"nodeType":"Block","src":"571:19:67","statements":[{"expression":{"hexValue":"38","id":9686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"584:1:67","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"functionReturnParameters":9685,"id":9687,"nodeType":"Return","src":"577:8:67"}]},"functionSelector":"313ce567","id":9689,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"530:8:67","nodeType":"FunctionDefinition","parameters":{"id":9682,"nodeType":"ParameterList","parameters":[],"src":"538:2:67"},"returnParameters":{"id":9685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9684,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9689,"src":"564:5:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9683,"name":"uint8","nodeType":"ElementaryTypeName","src":"564:5:67","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"563:7:67"},"scope":9690,"src":"521:69:67","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":9691,"src":"62:530:67","usedErrors":[]}],"src":"37:556:67"},"id":67},"contracts/mocks/oracle/PriceOracle.sol":{"ast":{"absolutePath":"contracts/mocks/oracle/PriceOracle.sol","exportedSymbols":{"IPriceOracle":[6024],"PriceOracle":[9776]},"id":9777,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9692,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:68"},{"absolutePath":"contracts/interfaces/IPriceOracle.sol","file":"../../interfaces/IPriceOracle.sol","id":9694,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9777,"sourceUnit":6025,"src":"62:63:68","symbolAliases":[{"foreign":{"id":9693,"name":"IPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:12:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9695,"name":"IPriceOracle","nodeType":"IdentifierPath","referencedDeclaration":6024,"src":"151:12:68"},"id":9696,"nodeType":"InheritanceSpecifier","src":"151:12:68"}],"canonicalName":"PriceOracle","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9776,"linearizedBaseContracts":[9776,6024],"name":"PriceOracle","nameLocation":"136:11:68","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9700,"mutability":"mutable","name":"prices","nameLocation":"247:6:68","nodeType":"VariableDeclaration","scope":9776,"src":"210:43:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":9699,"keyType":{"id":9697,"name":"address","nodeType":"ElementaryTypeName","src":"218:7:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"210:27:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":9698,"name":"uint256","nodeType":"ElementaryTypeName","src":"229:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":9702,"mutability":"mutable","name":"ethPriceUsd","nameLocation":"275:11:68","nodeType":"VariableDeclaration","scope":9776,"src":"258:28:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9701,"name":"uint256","nodeType":"ElementaryTypeName","src":"258:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"anonymous":false,"id":9710,"name":"AssetPriceUpdated","nameLocation":"297:17:68","nodeType":"EventDefinition","parameters":{"id":9709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9704,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"323:5:68","nodeType":"VariableDeclaration","scope":9710,"src":"315:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9703,"name":"address","nodeType":"ElementaryTypeName","src":"315:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9706,"indexed":false,"mutability":"mutable","name":"price","nameLocation":"338:5:68","nodeType":"VariableDeclaration","scope":9710,"src":"330:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9705,"name":"uint256","nodeType":"ElementaryTypeName","src":"330:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9708,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"353:9:68","nodeType":"VariableDeclaration","scope":9710,"src":"345:17:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9707,"name":"uint256","nodeType":"ElementaryTypeName","src":"345:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"314:49:68"},"src":"291:73:68"},{"anonymous":false,"id":9716,"name":"EthPriceUpdated","nameLocation":"373:15:68","nodeType":"EventDefinition","parameters":{"id":9715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9712,"indexed":false,"mutability":"mutable","name":"price","nameLocation":"397:5:68","nodeType":"VariableDeclaration","scope":9716,"src":"389:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9711,"name":"uint256","nodeType":"ElementaryTypeName","src":"389:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9714,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"412:9:68","nodeType":"VariableDeclaration","scope":9716,"src":"404:17:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9713,"name":"uint256","nodeType":"ElementaryTypeName","src":"404:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"388:34:68"},"src":"367:56:68"},{"baseFunctions":[6015],"body":{"id":9728,"nodeType":"Block","src":"506:31:68","statements":[{"expression":{"baseExpression":{"id":9724,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9700,"src":"519:6:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":9726,"indexExpression":{"id":9725,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9718,"src":"526:5:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"519:13:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9723,"id":9727,"nodeType":"Return","src":"512:20:68"}]},"functionSelector":"b3596f07","id":9729,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetPrice","nameLocation":"436:13:68","nodeType":"FunctionDefinition","overrides":{"id":9720,"nodeType":"OverrideSpecifier","overrides":[],"src":"479:8:68"},"parameters":{"id":9719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9718,"mutability":"mutable","name":"asset","nameLocation":"458:5:68","nodeType":"VariableDeclaration","scope":9729,"src":"450:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9717,"name":"address","nodeType":"ElementaryTypeName","src":"450:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"449:15:68"},"returnParameters":{"id":9723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9722,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9729,"src":"497:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9721,"name":"uint256","nodeType":"ElementaryTypeName","src":"497:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"496:9:68"},"scope":9776,"src":"427:110:68","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6023],"body":{"id":9750,"nodeType":"Block","src":"612:91:68","statements":[{"expression":{"id":9741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9737,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9700,"src":"618:6:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":9739,"indexExpression":{"id":9738,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9731,"src":"625:5:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"618:13:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9740,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9733,"src":"634:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"618:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9742,"nodeType":"ExpressionStatement","src":"618:21:68"},{"eventCall":{"arguments":[{"id":9744,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9731,"src":"668:5:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9745,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9733,"src":"675:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9746,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"682:5:68","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"682:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9743,"name":"AssetPriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9710,"src":"650:17:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":9748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"650:48:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9749,"nodeType":"EmitStatement","src":"645:53:68"}]},"functionSelector":"51323f72","id":9751,"implemented":true,"kind":"function","modifiers":[],"name":"setAssetPrice","nameLocation":"550:13:68","nodeType":"FunctionDefinition","overrides":{"id":9735,"nodeType":"OverrideSpecifier","overrides":[],"src":"603:8:68"},"parameters":{"id":9734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9731,"mutability":"mutable","name":"asset","nameLocation":"572:5:68","nodeType":"VariableDeclaration","scope":9751,"src":"564:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9730,"name":"address","nodeType":"ElementaryTypeName","src":"564:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9733,"mutability":"mutable","name":"price","nameLocation":"587:5:68","nodeType":"VariableDeclaration","scope":9751,"src":"579:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9732,"name":"uint256","nodeType":"ElementaryTypeName","src":"579:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"563:30:68"},"returnParameters":{"id":9736,"nodeType":"ParameterList","parameters":[],"src":"612:0:68"},"scope":9776,"src":"541:162:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9758,"nodeType":"Block","src":"765:29:68","statements":[{"expression":{"id":9756,"name":"ethPriceUsd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9702,"src":"778:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9755,"id":9757,"nodeType":"Return","src":"771:18:68"}]},"functionSelector":"a0a8045e","id":9759,"implemented":true,"kind":"function","modifiers":[],"name":"getEthUsdPrice","nameLocation":"716:14:68","nodeType":"FunctionDefinition","parameters":{"id":9752,"nodeType":"ParameterList","parameters":[],"src":"730:2:68"},"returnParameters":{"id":9755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9754,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9759,"src":"756:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9753,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:9:68"},"scope":9776,"src":"707:87:68","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9774,"nodeType":"Block","src":"846:80:68","statements":[{"expression":{"id":9766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9764,"name":"ethPriceUsd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9702,"src":"852:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9765,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9761,"src":"866:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"852:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9767,"nodeType":"ExpressionStatement","src":"852:19:68"},{"eventCall":{"arguments":[{"id":9769,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9761,"src":"898:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9770,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"905:5:68","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"905:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9768,"name":"EthPriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9716,"src":"882:15:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":9772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"882:39:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9773,"nodeType":"EmitStatement","src":"877:44:68"}]},"functionSelector":"b951883a","id":9775,"implemented":true,"kind":"function","modifiers":[],"name":"setEthUsdPrice","nameLocation":"807:14:68","nodeType":"FunctionDefinition","parameters":{"id":9762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9761,"mutability":"mutable","name":"price","nameLocation":"830:5:68","nodeType":"VariableDeclaration","scope":9775,"src":"822:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9760,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"821:15:68"},"returnParameters":{"id":9763,"nodeType":"ParameterList","parameters":[],"src":"846:0:68"},"scope":9776,"src":"798:128:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9777,"src":"127:801:68","usedErrors":[]}],"src":"37:892:68"},"id":68},"contracts/mocks/oracle/SequencerOracle.sol":{"ast":{"absolutePath":"contracts/mocks/oracle/SequencerOracle.sol","exportedSymbols":{"ISequencerOracle":[6206],"Ownable":[1573],"SequencerOracle":[9854]},"id":9855,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9778,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:69"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"../../dependencies/openzeppelin/contracts/Ownable.sol","id":9780,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9855,"sourceUnit":1574,"src":"62:78:69","symbolAliases":[{"foreign":{"id":9779,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:7:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/ISequencerOracle.sol","file":"../../interfaces/ISequencerOracle.sol","id":9782,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9855,"sourceUnit":6207,"src":"141:71:69","symbolAliases":[{"foreign":{"id":9781,"name":"ISequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"src":"149:16:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9783,"name":"ISequencerOracle","nodeType":"IdentifierPath","referencedDeclaration":6206,"src":"242:16:69"},"id":9784,"nodeType":"InheritanceSpecifier","src":"242:16:69"},{"baseName":{"id":9785,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"260:7:69"},"id":9786,"nodeType":"InheritanceSpecifier","src":"260:7:69"}],"canonicalName":"SequencerOracle","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9854,"linearizedBaseContracts":[9854,1573,748,6206],"name":"SequencerOracle","nameLocation":"223:15:69","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9788,"mutability":"mutable","name":"_isDown","nameLocation":"286:7:69","nodeType":"VariableDeclaration","scope":9854,"src":"272:21:69","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9787,"name":"bool","nodeType":"ElementaryTypeName","src":"272:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9790,"mutability":"mutable","name":"_timestampGotUp","nameLocation":"314:15:69","nodeType":"VariableDeclaration","scope":9854,"src":"297:32:69","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9789,"name":"uint256","nodeType":"ElementaryTypeName","src":"297:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":9800,"nodeType":"Block","src":"449:35:69","statements":[{"expression":{"arguments":[{"id":9797,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"473:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9796,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"455:17:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"455:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9799,"nodeType":"ExpressionStatement","src":"455:24:69"}]},"documentation":{"id":9791,"nodeType":"StructuredDocumentation","src":"334:85:69","text":" @dev Constructor.\n @param owner The owner address of this contract"},"id":9801,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9793,"mutability":"mutable","name":"owner","nameLocation":"442:5:69","nodeType":"VariableDeclaration","scope":9801,"src":"434:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9792,"name":"address","nodeType":"ElementaryTypeName","src":"434:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"433:15:69"},"returnParameters":{"id":9795,"nodeType":"ParameterList","parameters":[],"src":"449:0:69"},"scope":9854,"src":"422:62:69","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9819,"nodeType":"Block","src":"763:60:69","statements":[{"expression":{"id":9813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9811,"name":"_isDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"769:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9812,"name":"isDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9804,"src":"779:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"769:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9814,"nodeType":"ExpressionStatement","src":"769:16:69"},{"expression":{"id":9817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9815,"name":"_timestampGotUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9790,"src":"791:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9816,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9806,"src":"809:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"791:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9818,"nodeType":"ExpressionStatement","src":"791:27:69"}]},"documentation":{"id":9802,"nodeType":"StructuredDocumentation","src":"488:202:69","text":" @notice Updates the health status of the sequencer.\n @param isDown True if the sequencer is down, false otherwise\n @param timestamp The timestamp of last time the sequencer got up"},"functionSelector":"826a98ce","id":9820,"implemented":true,"kind":"function","modifiers":[{"id":9809,"kind":"modifierInvocation","modifierName":{"id":9808,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"753:9:69"},"nodeType":"ModifierInvocation","src":"753:9:69"}],"name":"setAnswer","nameLocation":"702:9:69","nodeType":"FunctionDefinition","parameters":{"id":9807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9804,"mutability":"mutable","name":"isDown","nameLocation":"717:6:69","nodeType":"VariableDeclaration","scope":9820,"src":"712:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9803,"name":"bool","nodeType":"ElementaryTypeName","src":"712:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9806,"mutability":"mutable","name":"timestamp","nameLocation":"733:9:69","nodeType":"VariableDeclaration","scope":9820,"src":"725:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9805,"name":"uint256","nodeType":"ElementaryTypeName","src":"725:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"711:32:69"},"returnParameters":{"id":9810,"nodeType":"ParameterList","parameters":[],"src":"763:0:69"},"scope":9854,"src":"693:130:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[6205],"body":{"id":9852,"nodeType":"Block","src":"1068:114:69","statements":[{"assignments":[9836],"declarations":[{"constant":false,"id":9836,"mutability":"mutable","name":"isDown","nameLocation":"1081:6:69","nodeType":"VariableDeclaration","scope":9852,"src":"1074:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9835,"name":"int256","nodeType":"ElementaryTypeName","src":"1074:6:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9837,"nodeType":"VariableDeclarationStatement","src":"1074:13:69"},{"condition":{"id":9838,"name":"_isDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"1097:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9844,"nodeType":"IfStatement","src":"1093:38:69","trueBody":{"id":9843,"nodeType":"Block","src":"1106:25:69","statements":[{"expression":{"id":9841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9839,"name":"isDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9836,"src":"1114:6:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":9840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1123:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1114:10:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9842,"nodeType":"ExpressionStatement","src":"1114:10:69"}]}},{"expression":{"components":[{"hexValue":"30","id":9845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1144:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":9846,"name":"isDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9836,"src":"1147:6:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"hexValue":"30","id":9847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1155:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":9848,"name":"_timestampGotUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9790,"src":"1158:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":9849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1175:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":9850,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1143:34:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_int256_$_t_rational_0_by_1_$_t_uint256_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int256,int_const 0,uint256,int_const 0)"}},"functionReturnParameters":9834,"id":9851,"nodeType":"Return","src":"1136:41:69"}]},"documentation":{"id":9821,"nodeType":"StructuredDocumentation","src":"827:32:69","text":"@inheritdoc ISequencerOracle"},"functionSelector":"feaf968c","id":9853,"implemented":true,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"871:15:69","nodeType":"FunctionDefinition","overrides":{"id":9823,"nodeType":"OverrideSpecifier","overrides":[],"src":"915:8:69"},"parameters":{"id":9822,"nodeType":"ParameterList","parameters":[],"src":"886:2:69"},"returnParameters":{"id":9834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9825,"mutability":"mutable","name":"roundId","nameLocation":"951:7:69","nodeType":"VariableDeclaration","scope":9853,"src":"944:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":9824,"name":"uint80","nodeType":"ElementaryTypeName","src":"944:6:69","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":9827,"mutability":"mutable","name":"answer","nameLocation":"973:6:69","nodeType":"VariableDeclaration","scope":9853,"src":"966:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9826,"name":"int256","nodeType":"ElementaryTypeName","src":"966:6:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":9829,"mutability":"mutable","name":"startedAt","nameLocation":"995:9:69","nodeType":"VariableDeclaration","scope":9853,"src":"987:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9828,"name":"uint256","nodeType":"ElementaryTypeName","src":"987:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9831,"mutability":"mutable","name":"updatedAt","nameLocation":"1020:9:69","nodeType":"VariableDeclaration","scope":9853,"src":"1012:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9830,"name":"uint256","nodeType":"ElementaryTypeName","src":"1012:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9833,"mutability":"mutable","name":"answeredInRound","nameLocation":"1044:15:69","nodeType":"VariableDeclaration","scope":9853,"src":"1037:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":9832,"name":"uint80","nodeType":"ElementaryTypeName","src":"1037:6:69","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"936:129:69"},"scope":9854,"src":"862:320:69","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9855,"src":"214:970:69","usedErrors":[]}],"src":"37:1148:69"},"id":69},"contracts/mocks/tests/FlashloanAttacker.sol":{"ast":{"absolutePath":"contracts/mocks/tests/FlashloanAttacker.sol","exportedSymbols":{"DataTypes":[24227],"FlashLoanSimpleReceiverBase":[3591],"FlashloanAttacker":[10061],"GPv2SafeERC20":[118],"IERC20":[1442],"IPool":[5073],"IPoolAddressesProvider":[5282],"MintableERC20":[10681],"SafeMath":[2310]},"id":10062,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9856,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:70"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"../../dependencies/openzeppelin/contracts/SafeMath.sol","id":9858,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":2311,"src":"62:80:70","symbolAliases":[{"foreign":{"id":9857,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":9860,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":1443,"src":"143:76:70","symbolAliases":[{"foreign":{"id":9859,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:6:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":9862,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":119,"src":"220:84:70","symbolAliases":[{"foreign":{"id":9861,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"228:13:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"../../dependencies/openzeppelin/contracts/SafeMath.sol","id":9864,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":2311,"src":"305:80:70","symbolAliases":[{"foreign":{"id":9863,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"313:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":9866,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":5283,"src":"386:83:70","symbolAliases":[{"foreign":{"id":9865,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"394:22:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol","file":"../../flashloan/base/FlashLoanSimpleReceiverBase.sol","id":9868,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":3592,"src":"470:97:70","symbolAliases":[{"foreign":{"id":9867,"name":"FlashLoanSimpleReceiverBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"478:27:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/mocks/tokens/MintableERC20.sol","file":"../tokens/MintableERC20.sol","id":9870,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":10682,"src":"568:58:70","symbolAliases":[{"foreign":{"id":9869,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"576:13:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":9872,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":5074,"src":"627:49:70","symbolAliases":[{"foreign":{"id":9871,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"635:5:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../../protocol/libraries/types/DataTypes.sol","id":9874,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10062,"sourceUnit":24228,"src":"677:71:70","symbolAliases":[{"foreign":{"id":9873,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"685:9:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9875,"name":"FlashLoanSimpleReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3591,"src":"780:27:70"},"id":9876,"nodeType":"InheritanceSpecifier","src":"780:27:70"}],"canonicalName":"FlashloanAttacker","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":10061,"linearizedBaseContracts":[10061,3591,3666],"name":"FlashloanAttacker","nameLocation":"759:17:70","nodeType":"ContractDefinition","nodes":[{"id":9880,"libraryName":{"id":9877,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"818:13:70"},"nodeType":"UsingForDirective","src":"812:31:70","typeName":{"id":9879,"nodeType":"UserDefinedTypeName","pathNode":{"id":9878,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"836:6:70"},"referencedDeclaration":1442,"src":"836:6:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":9883,"libraryName":{"id":9881,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"852:8:70"},"nodeType":"UsingForDirective","src":"846:27:70","typeName":{"id":9882,"name":"uint256","nodeType":"ElementaryTypeName","src":"865:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":9886,"mutability":"mutable","name":"_provider","nameLocation":"909:9:70","nodeType":"VariableDeclaration","scope":10061,"src":"877:41:70","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":9885,"nodeType":"UserDefinedTypeName","pathNode":{"id":9884,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"877:22:70"},"referencedDeclaration":5282,"src":"877:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":9889,"mutability":"mutable","name":"_pool","nameLocation":"937:5:70","nodeType":"VariableDeclaration","scope":10061,"src":"922:20:70","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":9888,"nodeType":"UserDefinedTypeName","pathNode":{"id":9887,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"922:5:70"},"referencedDeclaration":5073,"src":"922:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"body":{"id":9906,"nodeType":"Block","src":"1030:44:70","statements":[{"expression":{"id":9904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9898,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"1036:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9900,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9892,"src":"1050:8:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":9901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"1050:16:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":9902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1050:18:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9899,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"1044:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":9903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1044:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"1036:33:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":9905,"nodeType":"ExpressionStatement","src":"1036:33:70"}]},"id":9907,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9895,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9892,"src":"1020:8:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}}],"id":9896,"kind":"baseConstructorSpecifier","modifierName":{"id":9894,"name":"FlashLoanSimpleReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3591,"src":"992:27:70"},"nodeType":"ModifierInvocation","src":"992:37:70"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9892,"mutability":"mutable","name":"provider","nameLocation":"982:8:70","nodeType":"VariableDeclaration","scope":9907,"src":"959:31:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":9891,"nodeType":"UserDefinedTypeName","pathNode":{"id":9890,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"959:22:70"},"referencedDeclaration":5282,"src":"959:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"958:33:70"},"returnParameters":{"id":9897,"nodeType":"ParameterList","parameters":[],"src":"1030:0:70"},"scope":10061,"src":"947:127:70","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9957,"nodeType":"Block","src":"1137:197:70","statements":[{"assignments":[9916],"declarations":[{"constant":false,"id":9916,"mutability":"mutable","name":"token","nameLocation":"1157:5:70","nodeType":"VariableDeclaration","scope":9957,"src":"1143:19:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"},"typeName":{"id":9915,"nodeType":"UserDefinedTypeName","pathNode":{"id":9914,"name":"MintableERC20","nodeType":"IdentifierPath","referencedDeclaration":10681,"src":"1143:13:70"},"referencedDeclaration":10681,"src":"1143:13:70","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"visibility":"internal"}],"id":9920,"initialValue":{"arguments":[{"id":9918,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9909,"src":"1179:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9917,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10681,"src":"1165:13:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MintableERC20_$10681_$","typeString":"type(contract MintableERC20)"}},"id":9919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1165:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"nodeType":"VariableDeclarationStatement","src":"1143:42:70"},{"expression":{"arguments":[{"arguments":[{"id":9926,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1210:4:70","typeDescriptions":{"typeIdentifier":"t_contract$_FlashloanAttacker_$10061","typeString":"contract FlashloanAttacker"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_FlashloanAttacker_$10061","typeString":"contract FlashloanAttacker"}],"id":9925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1202:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9924,"name":"address","nodeType":"ElementaryTypeName","src":"1202:7:70","typeDescriptions":{}}},"id":9927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1202:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9928,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9911,"src":"1217:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9921,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9916,"src":"1191:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"id":9923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":10668,"src":"1191:10:70","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":9929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1191:33:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9930,"nodeType":"ExpressionStatement","src":"1191:33:70"},{"expression":{"arguments":[{"arguments":[{"id":9936,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"1252:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":9935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1244:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9934,"name":"address","nodeType":"ElementaryTypeName","src":"1244:7:70","typeDescriptions":{}}},"id":9937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1244:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"arguments":[{"id":9940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1265:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9939,"name":"uint256","nodeType":"ElementaryTypeName","src":"1265:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":9938,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1260:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1260:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":9942,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1260:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9931,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9916,"src":"1230:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"id":9933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":939,"src":"1230:13:70","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":9943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1230:48:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9944,"nodeType":"ExpressionStatement","src":"1230:48:70"},{"expression":{"arguments":[{"id":9948,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9909,"src":"1297:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9949,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9911,"src":"1304:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":9952,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1320:4:70","typeDescriptions":{"typeIdentifier":"t_contract$_FlashloanAttacker_$10061","typeString":"contract FlashloanAttacker"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_FlashloanAttacker_$10061","typeString":"contract FlashloanAttacker"}],"id":9951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1312:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9950,"name":"address","nodeType":"ElementaryTypeName","src":"1312:7:70","typeDescriptions":{}}},"id":9953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1312:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":9954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1327:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":9945,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"1284:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":9947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"supply","nodeType":"MemberAccess","referencedDeclaration":4658,"src":"1284:12:70","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint256,address,uint16) external"}},"id":9955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1284:45:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9956,"nodeType":"ExpressionStatement","src":"1284:45:70"}]},"functionSelector":"1416d762","id":9958,"implemented":true,"kind":"function","modifiers":[],"name":"supplyAsset","nameLocation":"1087:11:70","nodeType":"FunctionDefinition","parameters":{"id":9912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9909,"mutability":"mutable","name":"asset","nameLocation":"1107:5:70","nodeType":"VariableDeclaration","scope":9958,"src":"1099:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9908,"name":"address","nodeType":"ElementaryTypeName","src":"1099:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9911,"mutability":"mutable","name":"amount","nameLocation":"1122:6:70","nodeType":"VariableDeclaration","scope":9958,"src":"1114:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9910,"name":"uint256","nodeType":"ElementaryTypeName","src":"1114:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1098:31:70"},"returnParameters":{"id":9913,"nodeType":"ParameterList","parameters":[],"src":"1137:0:70"},"scope":10061,"src":"1078:256:70","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10001,"nodeType":"Block","src":"1384:222:70","statements":[{"assignments":[9967],"declarations":[{"constant":false,"id":9967,"mutability":"mutable","name":"config","nameLocation":"1419:6:70","nodeType":"VariableDeclaration","scope":10001,"src":"1390:35:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":9966,"nodeType":"UserDefinedTypeName","pathNode":{"id":9965,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1390:21:70"},"referencedDeclaration":23909,"src":"1390:21:70","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":9972,"initialValue":{"arguments":[{"id":9970,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9960,"src":"1449:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9968,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"1428:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":9969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"1428:20:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":9971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1428:27:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"1390:65:70"},{"assignments":[9975],"declarations":[{"constant":false,"id":9975,"mutability":"mutable","name":"token","nameLocation":"1468:5:70","nodeType":"VariableDeclaration","scope":10001,"src":"1461:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":9974,"nodeType":"UserDefinedTypeName","pathNode":{"id":9973,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1461:6:70"},"referencedDeclaration":1442,"src":"1461:6:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"}],"id":9979,"initialValue":{"arguments":[{"id":9977,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9960,"src":"1483:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9976,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"1476:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":9978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1476:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"1461:28:70"},{"assignments":[9981],"declarations":[{"constant":false,"id":9981,"mutability":"mutable","name":"avail","nameLocation":"1503:5:70","nodeType":"VariableDeclaration","scope":10001,"src":"1495:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9980,"name":"uint256","nodeType":"ElementaryTypeName","src":"1495:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9987,"initialValue":{"arguments":[{"expression":{"id":9984,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9967,"src":"1527:6:70","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":9985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"1527:20:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9982,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9975,"src":"1511:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":9983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"1511:15:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":9986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1511:37:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1495:53:70"},{"expression":{"arguments":[{"id":9991,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9960,"src":"1567:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9992,"name":"avail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9981,"src":"1574:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"32","id":9993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1581:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},{"hexValue":"30","id":9994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1584:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"id":9997,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1595:4:70","typeDescriptions":{"typeIdentifier":"t_contract$_FlashloanAttacker_$10061","typeString":"contract FlashloanAttacker"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_FlashloanAttacker_$10061","typeString":"contract FlashloanAttacker"}],"id":9996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1587:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9995,"name":"address","nodeType":"ElementaryTypeName","src":"1587:7:70","typeDescriptions":{}}},"id":9998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1587:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9988,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"1554:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":9990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"borrow","nodeType":"MemberAccess","referencedDeclaration":4704,"src":"1554:12:70","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_address_$returns$__$","typeString":"function (address,uint256,uint256,uint16,address) external"}},"id":9999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1554:47:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10000,"nodeType":"ExpressionStatement","src":"1554:47:70"}]},"id":10002,"implemented":true,"kind":"function","modifiers":[],"name":"_innerBorrow","nameLocation":"1347:12:70","nodeType":"FunctionDefinition","parameters":{"id":9961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9960,"mutability":"mutable","name":"asset","nameLocation":"1368:5:70","nodeType":"VariableDeclaration","scope":10002,"src":"1360:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9959,"name":"address","nodeType":"ElementaryTypeName","src":"1360:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1359:15:70"},"returnParameters":{"id":9962,"nodeType":"ParameterList","parameters":[],"src":"1384:0:70"},"scope":10061,"src":"1338:268:70","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3653],"body":{"id":10059,"nodeType":"Block","src":"1785:296:70","statements":[{"assignments":[10020],"declarations":[{"constant":false,"id":10020,"mutability":"mutable","name":"token","nameLocation":"1805:5:70","nodeType":"VariableDeclaration","scope":10059,"src":"1791:19:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"},"typeName":{"id":10019,"nodeType":"UserDefinedTypeName","pathNode":{"id":10018,"name":"MintableERC20","nodeType":"IdentifierPath","referencedDeclaration":10681,"src":"1791:13:70"},"referencedDeclaration":10681,"src":"1791:13:70","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"visibility":"internal"}],"id":10024,"initialValue":{"arguments":[{"id":10022,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10004,"src":"1827:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10021,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10681,"src":"1813:13:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MintableERC20_$10681_$","typeString":"type(contract MintableERC20)"}},"id":10023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1813:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"nodeType":"VariableDeclarationStatement","src":"1791:42:70"},{"assignments":[10026],"declarations":[{"constant":false,"id":10026,"mutability":"mutable","name":"amountToReturn","nameLocation":"1847:14:70","nodeType":"VariableDeclaration","scope":10059,"src":"1839:22:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10025,"name":"uint256","nodeType":"ElementaryTypeName","src":"1839:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10031,"initialValue":{"arguments":[{"id":10029,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10008,"src":"1875:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10027,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"1864:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"1864:10:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1864:19:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1839:44:70"},{"expression":{"arguments":[{"id":10033,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10004,"src":"1953:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10032,"name":"_innerBorrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10002,"src":"1940:12:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1940:19:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10035,"nodeType":"ExpressionStatement","src":"1940:19:70"},{"expression":{"arguments":[{"arguments":[{"id":10041,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1985:4:70","typeDescriptions":{"typeIdentifier":"t_contract$_FlashloanAttacker_$10061","typeString":"contract FlashloanAttacker"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_FlashloanAttacker_$10061","typeString":"contract FlashloanAttacker"}],"id":10040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1977:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10039,"name":"address","nodeType":"ElementaryTypeName","src":"1977:7:70","typeDescriptions":{}}},"id":10042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1977:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10043,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10008,"src":"1992:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10036,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10020,"src":"1966:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}},"id":10038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":10668,"src":"1966:10:70","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":10044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1966:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10045,"nodeType":"ExpressionStatement","src":"1966:34:70"},{"expression":{"arguments":[{"arguments":[{"id":10052,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3571,"src":"2036:4:70","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":10051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2028:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10050,"name":"address","nodeType":"ElementaryTypeName","src":"2028:7:70","typeDescriptions":{}}},"id":10053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2028:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10054,"name":"amountToReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10026,"src":"2043:14:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":10047,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10004,"src":"2013:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10046,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2006:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":10048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2006:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":10049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2006:21:70","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":10055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2006:52:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10056,"nodeType":"ExpressionStatement","src":"2006:52:70"},{"expression":{"hexValue":"74727565","id":10057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2072:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10017,"id":10058,"nodeType":"Return","src":"2065:11:70"}]},"functionSelector":"1b11d0ff","id":10060,"implemented":true,"kind":"function","modifiers":[],"name":"executeOperation","nameLocation":"1619:16:70","nodeType":"FunctionDefinition","overrides":{"id":10014,"nodeType":"OverrideSpecifier","overrides":[],"src":"1761:8:70"},"parameters":{"id":10013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10004,"mutability":"mutable","name":"asset","nameLocation":"1649:5:70","nodeType":"VariableDeclaration","scope":10060,"src":"1641:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10003,"name":"address","nodeType":"ElementaryTypeName","src":"1641:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10006,"mutability":"mutable","name":"amount","nameLocation":"1668:6:70","nodeType":"VariableDeclaration","scope":10060,"src":"1660:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10005,"name":"uint256","nodeType":"ElementaryTypeName","src":"1660:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10008,"mutability":"mutable","name":"premium","nameLocation":"1688:7:70","nodeType":"VariableDeclaration","scope":10060,"src":"1680:15:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10007,"name":"uint256","nodeType":"ElementaryTypeName","src":"1680:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10010,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10060,"src":"1701:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10009,"name":"address","nodeType":"ElementaryTypeName","src":"1701:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10060,"src":"1727:12:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10011,"name":"bytes","nodeType":"ElementaryTypeName","src":"1727:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1635:118:70"},"returnParameters":{"id":10017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10016,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10060,"src":"1779:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10015,"name":"bool","nodeType":"ElementaryTypeName","src":"1779:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1778:6:70"},"scope":10061,"src":"1610:471:70","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":10062,"src":"750:1333:70","usedErrors":[]}],"src":"37:2047:70"},"id":70},"contracts/mocks/tests/MockReserveInterestRateStrategy.sol":{"ast":{"absolutePath":"contracts/mocks/tests/MockReserveInterestRateStrategy.sol","exportedSymbols":{"DataTypes":[24227],"IDefaultInterestRateStrategy":[4216],"IPoolAddressesProvider":[5282],"MockReserveInterestRateStrategy":[10272],"WadRayMath":[23813]},"id":10273,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10063,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:71"},{"absolutePath":"contracts/interfaces/IDefaultInterestRateStrategy.sol","file":"../../interfaces/IDefaultInterestRateStrategy.sol","id":10065,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10273,"sourceUnit":4217,"src":"62:95:71","symbolAliases":[{"foreign":{"id":10064,"name":"IDefaultInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:28:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":10067,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10273,"sourceUnit":5283,"src":"158:83:71","symbolAliases":[{"foreign":{"id":10066,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"166:22:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../../protocol/libraries/math/WadRayMath.sol","id":10069,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10273,"sourceUnit":23814,"src":"242:72:71","symbolAliases":[{"foreign":{"id":10068,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"250:10:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../../protocol/libraries/types/DataTypes.sol","id":10071,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10273,"sourceUnit":24228,"src":"315:71:71","symbolAliases":[{"foreign":{"id":10070,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"323:9:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10072,"name":"IDefaultInterestRateStrategy","nodeType":"IdentifierPath","referencedDeclaration":4216,"src":"432:28:71"},"id":10073,"nodeType":"InheritanceSpecifier","src":"432:28:71"}],"canonicalName":"MockReserveInterestRateStrategy","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":10272,"linearizedBaseContracts":[10272,4216,6126],"name":"MockReserveInterestRateStrategy","nameLocation":"397:31:71","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[4142],"constant":false,"functionSelector":"54c365c6","id":10075,"mutability":"immutable","name":"OPTIMAL_USAGE_RATIO","nameLocation":"490:19:71","nodeType":"VariableDeclaration","scope":10272,"src":"465:44:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10074,"name":"uint256","nodeType":"ElementaryTypeName","src":"465:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4167],"constant":false,"functionSelector":"0542975c","id":10078,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"553:18:71","nodeType":"VariableDeclaration","scope":10272,"src":"513:58:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":10077,"nodeType":"UserDefinedTypeName","pathNode":{"id":10076,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"513:22:71"},"referencedDeclaration":5282,"src":"513:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"constant":false,"id":10080,"mutability":"immutable","name":"_baseVariableBorrowRate","nameLocation":"602:23:71","nodeType":"VariableDeclaration","scope":10272,"src":"575:50:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10079,"name":"uint256","nodeType":"ElementaryTypeName","src":"575:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10082,"mutability":"immutable","name":"_variableRateSlope1","nameLocation":"656:19:71","nodeType":"VariableDeclaration","scope":10272,"src":"629:46:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10081,"name":"uint256","nodeType":"ElementaryTypeName","src":"629:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10084,"mutability":"immutable","name":"_variableRateSlope2","nameLocation":"706:19:71","nodeType":"VariableDeclaration","scope":10272,"src":"679:46:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10083,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10086,"mutability":"immutable","name":"_stableRateSlope1","nameLocation":"756:17:71","nodeType":"VariableDeclaration","scope":10272,"src":"729:44:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10085,"name":"uint256","nodeType":"ElementaryTypeName","src":"729:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10088,"mutability":"immutable","name":"_stableRateSlope2","nameLocation":"804:17:71","nodeType":"VariableDeclaration","scope":10272,"src":"777:44:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10087,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"baseFunctions":[4160],"constant":true,"functionSelector":"fe5fd698","id":10091,"mutability":"constant","name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"906:37:71","nodeType":"VariableDeclaration","scope":10272,"src":"882:65:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10089,"name":"uint256","nodeType":"ElementaryTypeName","src":"882:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":10090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"946:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"baseFunctions":[4154],"constant":true,"functionSelector":"a9c622f8","id":10094,"mutability":"constant","name":"MAX_EXCESS_USAGE_RATIO","nameLocation":"975:22:71","nodeType":"VariableDeclaration","scope":10272,"src":"951:50:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10092,"name":"uint256","nodeType":"ElementaryTypeName","src":"951:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":10093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1000:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"baseFunctions":[4148],"constant":true,"functionSelector":"6fb92589","id":10097,"mutability":"constant","name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"1029:34:71","nodeType":"VariableDeclaration","scope":10272,"src":"1005:62:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10095,"name":"uint256","nodeType":"ElementaryTypeName","src":"1005:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":10096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1066:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"constant":false,"id":10099,"mutability":"mutable","name":"_liquidityRate","nameLocation":"1089:14:71","nodeType":"VariableDeclaration","scope":10272,"src":"1072:31:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10098,"name":"uint256","nodeType":"ElementaryTypeName","src":"1072:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10101,"mutability":"mutable","name":"_stableBorrowRate","nameLocation":"1124:17:71","nodeType":"VariableDeclaration","scope":10272,"src":"1107:34:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10100,"name":"uint256","nodeType":"ElementaryTypeName","src":"1107:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10103,"mutability":"mutable","name":"_variableBorrowRate","nameLocation":"1162:19:71","nodeType":"VariableDeclaration","scope":10272,"src":"1145:36:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10102,"name":"uint256","nodeType":"ElementaryTypeName","src":"1145:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":10149,"nodeType":"Block","src":"1430:315:71","statements":[{"expression":{"id":10123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10121,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10075,"src":"1436:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10122,"name":"optimalUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10108,"src":"1458:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1436:39:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10124,"nodeType":"ExpressionStatement","src":"1436:39:71"},{"expression":{"id":10127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10125,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10078,"src":"1481:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10126,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10106,"src":"1502:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"1481:29:71","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":10128,"nodeType":"ExpressionStatement","src":"1481:29:71"},{"expression":{"id":10131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10129,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10080,"src":"1516:23:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10130,"name":"baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10110,"src":"1542:22:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1516:48:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10132,"nodeType":"ExpressionStatement","src":"1516:48:71"},{"expression":{"id":10135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10133,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10082,"src":"1570:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10134,"name":"variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10112,"src":"1592:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1570:40:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10136,"nodeType":"ExpressionStatement","src":"1570:40:71"},{"expression":{"id":10139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10137,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10084,"src":"1616:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10138,"name":"variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10114,"src":"1638:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1616:40:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10140,"nodeType":"ExpressionStatement","src":"1616:40:71"},{"expression":{"id":10143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10141,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10086,"src":"1662:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10142,"name":"stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10116,"src":"1682:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1662:36:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10144,"nodeType":"ExpressionStatement","src":"1662:36:71"},{"expression":{"id":10147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10145,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10088,"src":"1704:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10146,"name":"stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10118,"src":"1724:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1704:36:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10148,"nodeType":"ExpressionStatement","src":"1704:36:71"}]},"id":10150,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10106,"mutability":"mutable","name":"provider","nameLocation":"1226:8:71","nodeType":"VariableDeclaration","scope":10150,"src":"1203:31:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":10105,"nodeType":"UserDefinedTypeName","pathNode":{"id":10104,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1203:22:71"},"referencedDeclaration":5282,"src":"1203:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":10108,"mutability":"mutable","name":"optimalUsageRatio","nameLocation":"1248:17:71","nodeType":"VariableDeclaration","scope":10150,"src":"1240:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10107,"name":"uint256","nodeType":"ElementaryTypeName","src":"1240:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10110,"mutability":"mutable","name":"baseVariableBorrowRate","nameLocation":"1279:22:71","nodeType":"VariableDeclaration","scope":10150,"src":"1271:30:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10109,"name":"uint256","nodeType":"ElementaryTypeName","src":"1271:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10112,"mutability":"mutable","name":"variableRateSlope1","nameLocation":"1315:18:71","nodeType":"VariableDeclaration","scope":10150,"src":"1307:26:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10111,"name":"uint256","nodeType":"ElementaryTypeName","src":"1307:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10114,"mutability":"mutable","name":"variableRateSlope2","nameLocation":"1347:18:71","nodeType":"VariableDeclaration","scope":10150,"src":"1339:26:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10113,"name":"uint256","nodeType":"ElementaryTypeName","src":"1339:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10116,"mutability":"mutable","name":"stableRateSlope1","nameLocation":"1379:16:71","nodeType":"VariableDeclaration","scope":10150,"src":"1371:24:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10115,"name":"uint256","nodeType":"ElementaryTypeName","src":"1371:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10118,"mutability":"mutable","name":"stableRateSlope2","nameLocation":"1409:16:71","nodeType":"VariableDeclaration","scope":10150,"src":"1401:24:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10117,"name":"uint256","nodeType":"ElementaryTypeName","src":"1401:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1197:232:71"},"returnParameters":{"id":10120,"nodeType":"ParameterList","parameters":[],"src":"1430:0:71"},"scope":10272,"src":"1186:559:71","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10159,"nodeType":"Block","src":"1805:41:71","statements":[{"expression":{"id":10157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10155,"name":"_liquidityRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10099,"src":"1811:14:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10156,"name":"liquidityRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10152,"src":"1828:13:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1811:30:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10158,"nodeType":"ExpressionStatement","src":"1811:30:71"}]},"functionSelector":"3a244adf","id":10160,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidityRate","nameLocation":"1758:16:71","nodeType":"FunctionDefinition","parameters":{"id":10153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10152,"mutability":"mutable","name":"liquidityRate","nameLocation":"1783:13:71","nodeType":"VariableDeclaration","scope":10160,"src":"1775:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10151,"name":"uint256","nodeType":"ElementaryTypeName","src":"1775:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1774:23:71"},"returnParameters":{"id":10154,"nodeType":"ParameterList","parameters":[],"src":"1805:0:71"},"scope":10272,"src":"1749:97:71","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10169,"nodeType":"Block","src":"1912:47:71","statements":[{"expression":{"id":10167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10165,"name":"_stableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10101,"src":"1918:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10166,"name":"stableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10162,"src":"1938:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1918:36:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10168,"nodeType":"ExpressionStatement","src":"1918:36:71"}]},"functionSelector":"cecced51","id":10170,"implemented":true,"kind":"function","modifiers":[],"name":"setStableBorrowRate","nameLocation":"1859:19:71","nodeType":"FunctionDefinition","parameters":{"id":10163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10162,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"1887:16:71","nodeType":"VariableDeclaration","scope":10170,"src":"1879:24:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10161,"name":"uint256","nodeType":"ElementaryTypeName","src":"1879:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1878:26:71"},"returnParameters":{"id":10164,"nodeType":"ParameterList","parameters":[],"src":"1912:0:71"},"scope":10272,"src":"1850:109:71","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10179,"nodeType":"Block","src":"2029:51:71","statements":[{"expression":{"id":10177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10175,"name":"_variableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10103,"src":"2035:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10176,"name":"variableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10172,"src":"2057:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2035:40:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10178,"nodeType":"ExpressionStatement","src":"2035:40:71"}]},"functionSelector":"aa16fe34","id":10180,"implemented":true,"kind":"function","modifiers":[],"name":"setVariableBorrowRate","nameLocation":"1972:21:71","nodeType":"FunctionDefinition","parameters":{"id":10173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10172,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"2002:18:71","nodeType":"VariableDeclaration","scope":10180,"src":"1994:26:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10171,"name":"uint256","nodeType":"ElementaryTypeName","src":"1994:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1993:28:71"},"returnParameters":{"id":10174,"nodeType":"ParameterList","parameters":[],"src":"2029:0:71"},"scope":10272,"src":"1963:117:71","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[6125],"body":{"id":10198,"nodeType":"Block","src":"2298:74:71","statements":[{"expression":{"components":[{"id":10193,"name":"_liquidityRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10099,"src":"2312:14:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10194,"name":"_stableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10101,"src":"2328:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10195,"name":"_variableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10103,"src":"2347:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10196,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2311:56:71","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":10192,"id":10197,"nodeType":"Return","src":"2304:63:71"}]},"functionSelector":"a5898709","id":10199,"implemented":true,"kind":"function","modifiers":[],"name":"calculateInterestRates","nameLocation":"2093:22:71","nodeType":"FunctionDefinition","overrides":{"id":10185,"nodeType":"OverrideSpecifier","overrides":[],"src":"2197:8:71"},"parameters":{"id":10184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10199,"src":"2121:45:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"},"typeName":{"id":10182,"nodeType":"UserDefinedTypeName","pathNode":{"id":10181,"name":"DataTypes.CalculateInterestRatesParams","nodeType":"IdentifierPath","referencedDeclaration":24211,"src":"2121:38:71"},"referencedDeclaration":24211,"src":"2121:38:71","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_storage_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"}},"visibility":"internal"}],"src":"2115:55:71"},"returnParameters":{"id":10192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10187,"mutability":"mutable","name":"liquidityRate","nameLocation":"2227:13:71","nodeType":"VariableDeclaration","scope":10199,"src":"2219:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10186,"name":"uint256","nodeType":"ElementaryTypeName","src":"2219:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10189,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"2250:16:71","nodeType":"VariableDeclaration","scope":10199,"src":"2242:24:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10188,"name":"uint256","nodeType":"ElementaryTypeName","src":"2242:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10191,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"2276:18:71","nodeType":"VariableDeclaration","scope":10199,"src":"2268:26:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10190,"name":"uint256","nodeType":"ElementaryTypeName","src":"2268:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2218:77:71"},"scope":10272,"src":"2084:288:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4173],"body":{"id":10206,"nodeType":"Block","src":"2441:37:71","statements":[{"expression":{"id":10204,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10082,"src":"2454:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10203,"id":10205,"nodeType":"Return","src":"2447:26:71"}]},"functionSelector":"0b3429a2","id":10207,"implemented":true,"kind":"function","modifiers":[],"name":"getVariableRateSlope1","nameLocation":"2385:21:71","nodeType":"FunctionDefinition","parameters":{"id":10200,"nodeType":"ParameterList","parameters":[],"src":"2406:2:71"},"returnParameters":{"id":10203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10202,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10207,"src":"2432:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10201,"name":"uint256","nodeType":"ElementaryTypeName","src":"2432:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2431:9:71"},"scope":10272,"src":"2376:102:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4179],"body":{"id":10214,"nodeType":"Block","src":"2547:37:71","statements":[{"expression":{"id":10212,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10084,"src":"2560:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10211,"id":10213,"nodeType":"Return","src":"2553:26:71"}]},"functionSelector":"f4202409","id":10215,"implemented":true,"kind":"function","modifiers":[],"name":"getVariableRateSlope2","nameLocation":"2491:21:71","nodeType":"FunctionDefinition","parameters":{"id":10208,"nodeType":"ParameterList","parameters":[],"src":"2512:2:71"},"returnParameters":{"id":10211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10215,"src":"2538:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10209,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:9:71"},"scope":10272,"src":"2482:102:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4185],"body":{"id":10222,"nodeType":"Block","src":"2651:35:71","statements":[{"expression":{"id":10220,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10086,"src":"2664:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10219,"id":10221,"nodeType":"Return","src":"2657:24:71"}]},"functionSelector":"d5cd7391","id":10223,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateSlope1","nameLocation":"2597:19:71","nodeType":"FunctionDefinition","parameters":{"id":10216,"nodeType":"ParameterList","parameters":[],"src":"2616:2:71"},"returnParameters":{"id":10219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10218,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10223,"src":"2642:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10217,"name":"uint256","nodeType":"ElementaryTypeName","src":"2642:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2641:9:71"},"scope":10272,"src":"2588:98:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4191],"body":{"id":10230,"nodeType":"Block","src":"2753:35:71","statements":[{"expression":{"id":10228,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10088,"src":"2766:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10227,"id":10229,"nodeType":"Return","src":"2759:24:71"}]},"functionSelector":"14e32da4","id":10231,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateSlope2","nameLocation":"2699:19:71","nodeType":"FunctionDefinition","parameters":{"id":10224,"nodeType":"ParameterList","parameters":[],"src":"2718:2:71"},"returnParameters":{"id":10227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10226,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10231,"src":"2744:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10225,"name":"uint256","nodeType":"ElementaryTypeName","src":"2744:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2743:9:71"},"scope":10272,"src":"2690:98:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4209],"body":{"id":10239,"nodeType":"Block","src":"2870:41:71","statements":[{"expression":{"id":10237,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10080,"src":"2883:23:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10236,"id":10238,"nodeType":"Return","src":"2876:30:71"}]},"functionSelector":"34762ca5","id":10240,"implemented":true,"kind":"function","modifiers":[],"name":"getBaseVariableBorrowRate","nameLocation":"2801:25:71","nodeType":"FunctionDefinition","overrides":{"id":10233,"nodeType":"OverrideSpecifier","overrides":[],"src":"2843:8:71"},"parameters":{"id":10232,"nodeType":"ParameterList","parameters":[],"src":"2826:2:71"},"returnParameters":{"id":10236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10240,"src":"2861:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10234,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2860:9:71"},"scope":10272,"src":"2792:119:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4215],"body":{"id":10252,"nodeType":"Block","src":"2992:85:71","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10246,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10080,"src":"3005:23:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":10247,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10082,"src":"3031:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3005:45:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":10249,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10084,"src":"3053:19:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3005:67:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10245,"id":10251,"nodeType":"Return","src":"2998:74:71"}]},"functionSelector":"80031e37","id":10253,"implemented":true,"kind":"function","modifiers":[],"name":"getMaxVariableBorrowRate","nameLocation":"2924:24:71","nodeType":"FunctionDefinition","overrides":{"id":10242,"nodeType":"OverrideSpecifier","overrides":[],"src":"2965:8:71"},"parameters":{"id":10241,"nodeType":"ParameterList","parameters":[],"src":"2948:2:71"},"returnParameters":{"id":10245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10253,"src":"2983:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2983:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2982:9:71"},"scope":10272,"src":"2915:162:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4203],"body":{"id":10261,"nodeType":"Block","src":"3213:19:71","statements":[{"expression":{"hexValue":"30","id":10259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3226:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":10258,"id":10260,"nodeType":"Return","src":"3219:8:71"}]},"functionSelector":"acd78686","id":10262,"implemented":true,"kind":"function","modifiers":[],"name":"getBaseStableBorrowRate","nameLocation":"3146:23:71","nodeType":"FunctionDefinition","overrides":{"id":10255,"nodeType":"OverrideSpecifier","overrides":[],"src":"3186:8:71"},"parameters":{"id":10254,"nodeType":"ParameterList","parameters":[],"src":"3169:2:71"},"returnParameters":{"id":10258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10257,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10262,"src":"3204:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10256,"name":"uint256","nodeType":"ElementaryTypeName","src":"3204:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3203:9:71"},"scope":10272,"src":"3137:95:71","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[4197],"body":{"id":10270,"nodeType":"Block","src":"3370:19:71","statements":[{"expression":{"hexValue":"30","id":10268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3383:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":10267,"id":10269,"nodeType":"Return","src":"3376:8:71"}]},"functionSelector":"bc626908","id":10271,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateExcessOffset","nameLocation":"3301:25:71","nodeType":"FunctionDefinition","overrides":{"id":10264,"nodeType":"OverrideSpecifier","overrides":[],"src":"3343:8:71"},"parameters":{"id":10263,"nodeType":"ParameterList","parameters":[],"src":"3326:2:71"},"returnParameters":{"id":10267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10266,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10271,"src":"3361:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10265,"name":"uint256","nodeType":"ElementaryTypeName","src":"3361:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3360:9:71"},"scope":10272,"src":"3292:97:71","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":10273,"src":"388:3003:71","usedErrors":[]}],"src":"37:3355:71"},"id":71},"contracts/mocks/tests/WadRayMathWrapper.sol":{"ast":{"absolutePath":"contracts/mocks/tests/WadRayMathWrapper.sol","exportedSymbols":{"WadRayMath":[23813],"WadRayMathWrapper":[10403]},"id":10404,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10274,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:72"},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../../protocol/libraries/math/WadRayMath.sol","id":10276,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10404,"sourceUnit":23814,"src":"62:72:72","symbolAliases":[{"foreign":{"id":10275,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:10:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"WadRayMathWrapper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":10403,"linearizedBaseContracts":[10403],"name":"WadRayMathWrapper","nameLocation":"145:17:72","nodeType":"ContractDefinition","nodes":[{"body":{"id":10284,"nodeType":"Block","src":"212:32:72","statements":[{"expression":{"expression":{"id":10281,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"225:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WAD","nodeType":"MemberAccess","referencedDeclaration":23732,"src":"225:14:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10280,"id":10283,"nodeType":"Return","src":"218:21:72"}]},"functionSelector":"7df38c5b","id":10285,"implemented":true,"kind":"function","modifiers":[],"name":"wad","nameLocation":"176:3:72","nodeType":"FunctionDefinition","parameters":{"id":10277,"nodeType":"ParameterList","parameters":[],"src":"179:2:72"},"returnParameters":{"id":10280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10279,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10285,"src":"203:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10278,"name":"uint256","nodeType":"ElementaryTypeName","src":"203:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"202:9:72"},"scope":10403,"src":"167:77:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10293,"nodeType":"Block","src":"293:32:72","statements":[{"expression":{"expression":{"id":10290,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"306:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"306:14:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10289,"id":10292,"nodeType":"Return","src":"299:21:72"}]},"functionSelector":"416a8b20","id":10294,"implemented":true,"kind":"function","modifiers":[],"name":"ray","nameLocation":"257:3:72","nodeType":"FunctionDefinition","parameters":{"id":10286,"nodeType":"ParameterList","parameters":[],"src":"260:2:72"},"returnParameters":{"id":10289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10288,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10294,"src":"284:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10287,"name":"uint256","nodeType":"ElementaryTypeName","src":"284:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"283:9:72"},"scope":10403,"src":"248:77:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10302,"nodeType":"Block","src":"378:37:72","statements":[{"expression":{"expression":{"id":10299,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"391:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"HALF_RAY","nodeType":"MemberAccess","referencedDeclaration":23741,"src":"391:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10298,"id":10301,"nodeType":"Return","src":"384:26:72"}]},"functionSelector":"1fa89fc6","id":10303,"implemented":true,"kind":"function","modifiers":[],"name":"halfRay","nameLocation":"338:7:72","nodeType":"FunctionDefinition","parameters":{"id":10295,"nodeType":"ParameterList","parameters":[],"src":"345:2:72"},"returnParameters":{"id":10298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10303,"src":"369:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10296,"name":"uint256","nodeType":"ElementaryTypeName","src":"369:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"368:9:72"},"scope":10403,"src":"329:86:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10311,"nodeType":"Block","src":"468:37:72","statements":[{"expression":{"expression":{"id":10308,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"481:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"HALF_WAD","nodeType":"MemberAccess","referencedDeclaration":23735,"src":"481:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10307,"id":10310,"nodeType":"Return","src":"474:26:72"}]},"functionSelector":"e304e1d3","id":10312,"implemented":true,"kind":"function","modifiers":[],"name":"halfWad","nameLocation":"428:7:72","nodeType":"FunctionDefinition","parameters":{"id":10304,"nodeType":"ParameterList","parameters":[],"src":"435:2:72"},"returnParameters":{"id":10307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10312,"src":"459:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10305,"name":"uint256","nodeType":"ElementaryTypeName","src":"459:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"458:9:72"},"scope":10403,"src":"419:86:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10327,"nodeType":"Block","src":"577:41:72","statements":[{"expression":{"arguments":[{"id":10323,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10314,"src":"608:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10324,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10316,"src":"611:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10321,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"590:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadMul","nodeType":"MemberAccess","referencedDeclaration":23756,"src":"590:17:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"590:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10320,"id":10326,"nodeType":"Return","src":"583:30:72"}]},"functionSelector":"761fdad6","id":10328,"implemented":true,"kind":"function","modifiers":[],"name":"wadMul","nameLocation":"518:6:72","nodeType":"FunctionDefinition","parameters":{"id":10317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10314,"mutability":"mutable","name":"a","nameLocation":"533:1:72","nodeType":"VariableDeclaration","scope":10328,"src":"525:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10313,"name":"uint256","nodeType":"ElementaryTypeName","src":"525:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10316,"mutability":"mutable","name":"b","nameLocation":"544:1:72","nodeType":"VariableDeclaration","scope":10328,"src":"536:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10315,"name":"uint256","nodeType":"ElementaryTypeName","src":"536:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"524:22:72"},"returnParameters":{"id":10320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10319,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10328,"src":"568:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10318,"name":"uint256","nodeType":"ElementaryTypeName","src":"568:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"567:9:72"},"scope":10403,"src":"509:109:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10343,"nodeType":"Block","src":"690:41:72","statements":[{"expression":{"arguments":[{"id":10339,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10330,"src":"721:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10340,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10332,"src":"724:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10337,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"703:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadDiv","nodeType":"MemberAccess","referencedDeclaration":23768,"src":"703:17:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"703:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10336,"id":10342,"nodeType":"Return","src":"696:30:72"}]},"functionSelector":"e57b6d3b","id":10344,"implemented":true,"kind":"function","modifiers":[],"name":"wadDiv","nameLocation":"631:6:72","nodeType":"FunctionDefinition","parameters":{"id":10333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10330,"mutability":"mutable","name":"a","nameLocation":"646:1:72","nodeType":"VariableDeclaration","scope":10344,"src":"638:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10329,"name":"uint256","nodeType":"ElementaryTypeName","src":"638:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10332,"mutability":"mutable","name":"b","nameLocation":"657:1:72","nodeType":"VariableDeclaration","scope":10344,"src":"649:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10331,"name":"uint256","nodeType":"ElementaryTypeName","src":"649:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"637:22:72"},"returnParameters":{"id":10336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10344,"src":"681:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10334,"name":"uint256","nodeType":"ElementaryTypeName","src":"681:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"680:9:72"},"scope":10403,"src":"622:109:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10359,"nodeType":"Block","src":"803:41:72","statements":[{"expression":{"arguments":[{"id":10355,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10346,"src":"834:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10356,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10348,"src":"837:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10353,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"816:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"816:17:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"816:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10352,"id":10358,"nodeType":"Return","src":"809:30:72"}]},"functionSelector":"d2e30585","id":10360,"implemented":true,"kind":"function","modifiers":[],"name":"rayMul","nameLocation":"744:6:72","nodeType":"FunctionDefinition","parameters":{"id":10349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10346,"mutability":"mutable","name":"a","nameLocation":"759:1:72","nodeType":"VariableDeclaration","scope":10360,"src":"751:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10345,"name":"uint256","nodeType":"ElementaryTypeName","src":"751:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10348,"mutability":"mutable","name":"b","nameLocation":"770:1:72","nodeType":"VariableDeclaration","scope":10360,"src":"762:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10347,"name":"uint256","nodeType":"ElementaryTypeName","src":"762:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"750:22:72"},"returnParameters":{"id":10352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10360,"src":"794:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10350,"name":"uint256","nodeType":"ElementaryTypeName","src":"794:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"793:9:72"},"scope":10403,"src":"735:109:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10375,"nodeType":"Block","src":"916:41:72","statements":[{"expression":{"arguments":[{"id":10371,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10362,"src":"947:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10372,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10364,"src":"950:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10369,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"929:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"929:17:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"929:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10368,"id":10374,"nodeType":"Return","src":"922:30:72"}]},"functionSelector":"9c34d880","id":10376,"implemented":true,"kind":"function","modifiers":[],"name":"rayDiv","nameLocation":"857:6:72","nodeType":"FunctionDefinition","parameters":{"id":10365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10362,"mutability":"mutable","name":"a","nameLocation":"872:1:72","nodeType":"VariableDeclaration","scope":10376,"src":"864:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10361,"name":"uint256","nodeType":"ElementaryTypeName","src":"864:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10364,"mutability":"mutable","name":"b","nameLocation":"883:1:72","nodeType":"VariableDeclaration","scope":10376,"src":"875:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10363,"name":"uint256","nodeType":"ElementaryTypeName","src":"875:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"863:22:72"},"returnParameters":{"id":10368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10376,"src":"907:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10366,"name":"uint256","nodeType":"ElementaryTypeName","src":"907:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"906:9:72"},"scope":10403,"src":"848:109:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10388,"nodeType":"Block","src":"1020:40:72","statements":[{"expression":{"arguments":[{"id":10385,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10378,"src":"1053:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10383,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"1033:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayToWad","nodeType":"MemberAccess","referencedDeclaration":23802,"src":"1033:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":10386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1033:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10382,"id":10387,"nodeType":"Return","src":"1026:29:72"}]},"functionSelector":"29cb5aa4","id":10389,"implemented":true,"kind":"function","modifiers":[],"name":"rayToWad","nameLocation":"970:8:72","nodeType":"FunctionDefinition","parameters":{"id":10379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10378,"mutability":"mutable","name":"a","nameLocation":"987:1:72","nodeType":"VariableDeclaration","scope":10389,"src":"979:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10377,"name":"uint256","nodeType":"ElementaryTypeName","src":"979:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"978:11:72"},"returnParameters":{"id":10382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10389,"src":"1011:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10380,"name":"uint256","nodeType":"ElementaryTypeName","src":"1011:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1010:9:72"},"scope":10403,"src":"961:99:72","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":10401,"nodeType":"Block","src":"1123:40:72","statements":[{"expression":{"arguments":[{"id":10398,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10391,"src":"1156:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10396,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"1136:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":10397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"1136:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":10399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1136:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10395,"id":10400,"nodeType":"Return","src":"1129:29:72"}]},"functionSelector":"10de27b9","id":10402,"implemented":true,"kind":"function","modifiers":[],"name":"wadToRay","nameLocation":"1073:8:72","nodeType":"FunctionDefinition","parameters":{"id":10392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10391,"mutability":"mutable","name":"a","nameLocation":"1090:1:72","nodeType":"VariableDeclaration","scope":10402,"src":"1082:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10390,"name":"uint256","nodeType":"ElementaryTypeName","src":"1082:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1081:11:72"},"returnParameters":{"id":10395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10394,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10402,"src":"1114:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10393,"name":"uint256","nodeType":"ElementaryTypeName","src":"1114:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1113:9:72"},"scope":10403,"src":"1064:99:72","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":10404,"src":"136:1029:72","usedErrors":[]}],"src":"37:1129:72"},"id":72},"contracts/mocks/tokens/MintableDelegationERC20.sol":{"ast":{"absolutePath":"contracts/mocks/tokens/MintableDelegationERC20.sol","exportedSymbols":{"ERC20":[1279],"IDelegationToken":[4226],"MintableDelegationERC20":[10463]},"id":10464,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10405,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:73"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/ERC20.sol","file":"../../dependencies/openzeppelin/contracts/ERC20.sol","id":10407,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10464,"sourceUnit":1280,"src":"62:74:73","symbolAliases":[{"foreign":{"id":10406,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:5:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IDelegationToken.sol","file":"../../interfaces/IDelegationToken.sol","id":10409,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10464,"sourceUnit":4227,"src":"137:71:73","symbolAliases":[{"foreign":{"id":10408,"name":"IDelegationToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:16:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10411,"name":"IDelegationToken","nodeType":"IdentifierPath","referencedDeclaration":4226,"src":"332:16:73"},"id":10412,"nodeType":"InheritanceSpecifier","src":"332:16:73"},{"baseName":{"id":10413,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"350:5:73"},"id":10414,"nodeType":"InheritanceSpecifier","src":"350:5:73"}],"canonicalName":"MintableDelegationERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":10410,"nodeType":"StructuredDocumentation","src":"210:85:73","text":" @title MintableDelegationERC20\n @dev ERC20 minting logic with delegation"},"fullyImplemented":true,"id":10463,"linearizedBaseContracts":[10463,1279,1442,748,4226],"name":"MintableDelegationERC20","nameLocation":"305:23:73","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"1e31d053","id":10416,"mutability":"mutable","name":"delegatee","nameLocation":"375:9:73","nodeType":"VariableDeclaration","scope":10463,"src":"360:24:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10415,"name":"address","nodeType":"ElementaryTypeName","src":"360:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":10433,"nodeType":"Block","src":"479:35:73","statements":[{"expression":{"arguments":[{"id":10430,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10422,"src":"500:8:73","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":10429,"name":"_setupDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"485:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":10431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"485:24:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10432,"nodeType":"ExpressionStatement","src":"485:24:73"}]},"id":10434,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":10425,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10418,"src":"465:4:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":10426,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10420,"src":"471:6:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":10427,"kind":"baseConstructorSpecifier","modifierName":{"id":10424,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"459:5:73"},"nodeType":"ModifierInvocation","src":"459:19:73"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10418,"mutability":"mutable","name":"name","nameLocation":"415:4:73","nodeType":"VariableDeclaration","scope":10434,"src":"401:18:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10417,"name":"string","nodeType":"ElementaryTypeName","src":"401:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10420,"mutability":"mutable","name":"symbol","nameLocation":"435:6:73","nodeType":"VariableDeclaration","scope":10434,"src":"421:20:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10419,"name":"string","nodeType":"ElementaryTypeName","src":"421:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10422,"mutability":"mutable","name":"decimals","nameLocation":"449:8:73","nodeType":"VariableDeclaration","scope":10434,"src":"443:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10421,"name":"uint8","nodeType":"ElementaryTypeName","src":"443:5:73","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"400:58:73"},"returnParameters":{"id":10428,"nodeType":"ParameterList","parameters":[],"src":"479:0:73"},"scope":10463,"src":"389:125:73","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10450,"nodeType":"Block","src":"734:52:73","statements":[{"expression":{"arguments":[{"expression":{"id":10443,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"746:3:73","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"746:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10445,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10437,"src":"758:5:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10442,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"740:5:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"740:24:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10447,"nodeType":"ExpressionStatement","src":"740:24:73"},{"expression":{"hexValue":"74727565","id":10448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"777:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10441,"id":10449,"nodeType":"Return","src":"770:11:73"}]},"documentation":{"id":10435,"nodeType":"StructuredDocumentation","src":"518:162:73","text":" @dev Function to mint tokens\n @param value The amount of tokens to mint.\n @return A boolean that indicates if the operation was successful."},"functionSelector":"a0712d68","id":10451,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"692:4:73","nodeType":"FunctionDefinition","parameters":{"id":10438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10437,"mutability":"mutable","name":"value","nameLocation":"705:5:73","nodeType":"VariableDeclaration","scope":10451,"src":"697:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10436,"name":"uint256","nodeType":"ElementaryTypeName","src":"697:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"696:15:73"},"returnParameters":{"id":10441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10440,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10451,"src":"728:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10439,"name":"bool","nodeType":"ElementaryTypeName","src":"728:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"727:6:73"},"scope":10463,"src":"683:103:73","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4225],"body":{"id":10461,"nodeType":"Block","src":"852:39:73","statements":[{"expression":{"id":10459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10457,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10416,"src":"858:9:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10458,"name":"delegateeAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10453,"src":"870:16:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"858:28:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10460,"nodeType":"ExpressionStatement","src":"858:28:73"}]},"functionSelector":"5c19a95c","id":10462,"implemented":true,"kind":"function","modifiers":[],"name":"delegate","nameLocation":"799:8:73","nodeType":"FunctionDefinition","overrides":{"id":10455,"nodeType":"OverrideSpecifier","overrides":[],"src":"843:8:73"},"parameters":{"id":10454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10453,"mutability":"mutable","name":"delegateeAddress","nameLocation":"816:16:73","nodeType":"VariableDeclaration","scope":10462,"src":"808:24:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10452,"name":"address","nodeType":"ElementaryTypeName","src":"808:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"807:26:73"},"returnParameters":{"id":10456,"nodeType":"ParameterList","parameters":[],"src":"852:0:73"},"scope":10463,"src":"790:101:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":10464,"src":"296:597:73","usedErrors":[]}],"src":"37:857:73"},"id":73},"contracts/mocks/tokens/MintableERC20.sol":{"ast":{"absolutePath":"contracts/mocks/tokens/MintableERC20.sol","exportedSymbols":{"ERC20":[1279],"IERC20WithPermit":[4252],"MintableERC20":[10681]},"id":10682,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10465,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:74"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/ERC20.sol","file":"../../dependencies/openzeppelin/contracts/ERC20.sol","id":10467,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10682,"sourceUnit":1280,"src":"62:74:74","symbolAliases":[{"foreign":{"id":10466,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:5:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IERC20WithPermit.sol","file":"../../interfaces/IERC20WithPermit.sol","id":10469,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10682,"sourceUnit":4253,"src":"137:71:74","symbolAliases":[{"foreign":{"id":10468,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:16:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10471,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4252,"src":"296:16:74"},"id":10472,"nodeType":"InheritanceSpecifier","src":"296:16:74"},{"baseName":{"id":10473,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"314:5:74"},"id":10474,"nodeType":"InheritanceSpecifier","src":"314:5:74"}],"canonicalName":"MintableERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":10470,"nodeType":"StructuredDocumentation","src":"210:59:74","text":" @title ERC20Mintable\n @dev ERC20 minting logic"},"fullyImplemented":true,"id":10681,"linearizedBaseContracts":[10681,1279,4252,1442,748],"name":"MintableERC20","nameLocation":"279:13:74","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"78160376","id":10480,"mutability":"constant","name":"EIP712_REVISION","nameLocation":"346:15:74","nodeType":"VariableDeclaration","scope":10681,"src":"324:50:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10475,"name":"bytes","nodeType":"ElementaryTypeName","src":"324:5:74","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":{"arguments":[{"hexValue":"31","id":10478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"370:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":10477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"364:5:74","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":10476,"name":"bytes","nodeType":"ElementaryTypeName","src":"364:5:74","typeDescriptions":{}}},"id":10479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"364:10:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"visibility":"public"},{"constant":true,"id":10485,"mutability":"constant","name":"EIP712_DOMAIN","nameLocation":"404:13:74","nodeType":"VariableDeclaration","scope":10681,"src":"378:141:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10481,"name":"bytes32","nodeType":"ElementaryTypeName","src":"378:7:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":10483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"434:84:74","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":10482,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"424:9:74","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":10484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"424:95:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":true,"functionSelector":"30adf81f","id":10490,"mutability":"constant","name":"PERMIT_TYPEHASH","nameLocation":"547:15:74","nodeType":"VariableDeclaration","scope":10681,"src":"523:141:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10486,"name":"bytes32","nodeType":"ElementaryTypeName","src":"523:7:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":10488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"579:84:74","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":10487,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"569:9:74","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":10489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"569:95:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":10494,"mutability":"mutable","name":"_nonces","nameLocation":"752:7:74","nodeType":"VariableDeclaration","scope":10681,"src":"715:44:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":10493,"keyType":{"id":10491,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"715:27:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":10492,"name":"uint256","nodeType":"ElementaryTypeName","src":"734:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"functionSelector":"3644e515","id":10496,"mutability":"mutable","name":"DOMAIN_SEPARATOR","nameLocation":"779:16:74","nodeType":"VariableDeclaration","scope":10681,"src":"764:31:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10495,"name":"bytes32","nodeType":"ElementaryTypeName","src":"764:7:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"body":{"id":10541,"nodeType":"Block","src":"890:270:74","statements":[{"assignments":[10510],"declarations":[{"constant":false,"id":10510,"mutability":"mutable","name":"chainId","nameLocation":"904:7:74","nodeType":"VariableDeclaration","scope":10541,"src":"896:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10509,"name":"uint256","nodeType":"ElementaryTypeName","src":"896:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10513,"initialValue":{"expression":{"id":10511,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"914:5:74","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":10512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"914:13:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"896:31:74"},{"expression":{"id":10535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10514,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10496,"src":"934:16:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":10518,"name":"EIP712_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10485,"src":"990:13:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":10522,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10498,"src":"1029:4:74","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1023:5:74","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":10520,"name":"bytes","nodeType":"ElementaryTypeName","src":"1023:5:74","typeDescriptions":{}}},"id":10523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1023:11:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10519,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1013:9:74","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":10524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1013:22:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":10526,"name":"EIP712_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10480,"src":"1055:15:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10525,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1045:9:74","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":10527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1045:26:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":10528,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10510,"src":"1081:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":10531,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1106:4:74","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MintableERC20_$10681","typeString":"contract MintableERC20"}],"id":10530,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1098:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10529,"name":"address","nodeType":"ElementaryTypeName","src":"1098:7:74","typeDescriptions":{}}},"id":10532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1098:13:74","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":10516,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"970:3:74","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"970:10:74","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"970:149:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10515,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"953:9:74","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":10534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"953:172:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"934:191:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":10536,"nodeType":"ExpressionStatement","src":"934:191:74"},{"expression":{"arguments":[{"id":10538,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10502,"src":"1146:8:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":10537,"name":"_setupDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"1131:14:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":10539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1131:24:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10540,"nodeType":"ExpressionStatement","src":"1131:24:74"}]},"id":10542,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":10505,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10498,"src":"876:4:74","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":10506,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10500,"src":"882:6:74","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":10507,"kind":"baseConstructorSpecifier","modifierName":{"id":10504,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"870:5:74"},"nodeType":"ModifierInvocation","src":"870:19:74"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10498,"mutability":"mutable","name":"name","nameLocation":"826:4:74","nodeType":"VariableDeclaration","scope":10542,"src":"812:18:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10497,"name":"string","nodeType":"ElementaryTypeName","src":"812:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10500,"mutability":"mutable","name":"symbol","nameLocation":"846:6:74","nodeType":"VariableDeclaration","scope":10542,"src":"832:20:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10499,"name":"string","nodeType":"ElementaryTypeName","src":"832:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10502,"mutability":"mutable","name":"decimals","nameLocation":"860:8:74","nodeType":"VariableDeclaration","scope":10542,"src":"854:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10501,"name":"uint8","nodeType":"ElementaryTypeName","src":"854:5:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"811:58:74"},"returnParameters":{"id":10508,"nodeType":"ParameterList","parameters":[],"src":"890:0:74"},"scope":10681,"src":"800:360:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4251],"body":{"id":10632,"nodeType":"Block","src":"1361:567:74","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10562,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10545,"src":"1375:5:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":10565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1392:1:74","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":10564,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1384:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10563,"name":"address","nodeType":"ElementaryTypeName","src":"1384:7:74","typeDescriptions":{}}},"id":10566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1384:10:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1375:19:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f4f574e4552","id":10568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1396:15:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""},"value":"INVALID_OWNER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""}],"id":10561,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1367:7:74","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1367:45:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10570,"nodeType":"ExpressionStatement","src":"1367:45:74"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10572,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1457:5:74","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":10573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"1457:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":10574,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10551,"src":"1476:8:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1457:27:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f45585049524154494f4e","id":10576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1486:20:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d","typeString":"literal_string \"INVALID_EXPIRATION\""},"value":"INVALID_EXPIRATION"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d","typeString":"literal_string \"INVALID_EXPIRATION\""}],"id":10571,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1449:7:74","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1449:58:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10578,"nodeType":"ExpressionStatement","src":"1449:58:74"},{"assignments":[10580],"declarations":[{"constant":false,"id":10580,"mutability":"mutable","name":"currentValidNonce","nameLocation":"1521:17:74","nodeType":"VariableDeclaration","scope":10632,"src":"1513:25:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10579,"name":"uint256","nodeType":"ElementaryTypeName","src":"1513:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10584,"initialValue":{"baseExpression":{"id":10581,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10494,"src":"1541:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10583,"indexExpression":{"id":10582,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10545,"src":"1549:5:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1541:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1513:42:74"},{"assignments":[10586],"declarations":[{"constant":false,"id":10586,"mutability":"mutable","name":"digest","nameLocation":"1569:6:74","nodeType":"VariableDeclaration","scope":10632,"src":"1561:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10585,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1561:7:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":10605,"initialValue":{"arguments":[{"arguments":[{"hexValue":"1901","id":10590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1621:10:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},"value":"\u0019\u0001"},{"id":10591,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10496,"src":"1641:16:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":10595,"name":"PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10490,"src":"1688:15:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":10596,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10545,"src":"1705:5:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10597,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10547,"src":"1712:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10598,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10549,"src":"1721:5:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10599,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10580,"src":"1728:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10600,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10551,"src":"1747:8:74","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":10593,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1677:3:74","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10594,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1677:10:74","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1677:79:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10592,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1667:9:74","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":10602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1667:90:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10588,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1595:3:74","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"1595:16:74","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1595:170:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10587,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1578:9:74","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":10604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1578:193:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1561:210:74"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10607,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10545,"src":"1785:5:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":10609,"name":"digest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10586,"src":"1804:6:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":10610,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10553,"src":"1812:1:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":10611,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10555,"src":"1815:1:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":10612,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10557,"src":"1818:1:74","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":10608,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"1794:9:74","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":10613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1794:26:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1785:35:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f5349474e4154555245","id":10615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1822:19:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88","typeString":"literal_string \"INVALID_SIGNATURE\""},"value":"INVALID_SIGNATURE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88","typeString":"literal_string \"INVALID_SIGNATURE\""}],"id":10606,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1777:7:74","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1777:65:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10617,"nodeType":"ExpressionStatement","src":"1777:65:74"},{"expression":{"id":10624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10618,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10494,"src":"1848:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10620,"indexExpression":{"id":10619,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10545,"src":"1856:5:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1848:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10621,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10580,"src":"1865:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":10622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1885:1:74","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1865:21:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1848:38:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10625,"nodeType":"ExpressionStatement","src":"1848:38:74"},{"expression":{"arguments":[{"id":10627,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10545,"src":"1901:5:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10628,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10547,"src":"1908:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10629,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10549,"src":"1917:5:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10626,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"1892:8:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1892:31:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10631,"nodeType":"ExpressionStatement","src":"1892:31:74"}]},"documentation":{"id":10543,"nodeType":"StructuredDocumentation","src":"1164:32:74","text":"@inheritdoc IERC20WithPermit"},"functionSelector":"d505accf","id":10633,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"1208:6:74","nodeType":"FunctionDefinition","overrides":{"id":10559,"nodeType":"OverrideSpecifier","overrides":[],"src":"1352:8:74"},"parameters":{"id":10558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10545,"mutability":"mutable","name":"owner","nameLocation":"1228:5:74","nodeType":"VariableDeclaration","scope":10633,"src":"1220:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10544,"name":"address","nodeType":"ElementaryTypeName","src":"1220:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10547,"mutability":"mutable","name":"spender","nameLocation":"1247:7:74","nodeType":"VariableDeclaration","scope":10633,"src":"1239:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10546,"name":"address","nodeType":"ElementaryTypeName","src":"1239:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10549,"mutability":"mutable","name":"value","nameLocation":"1268:5:74","nodeType":"VariableDeclaration","scope":10633,"src":"1260:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10548,"name":"uint256","nodeType":"ElementaryTypeName","src":"1260:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10551,"mutability":"mutable","name":"deadline","nameLocation":"1287:8:74","nodeType":"VariableDeclaration","scope":10633,"src":"1279:16:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10550,"name":"uint256","nodeType":"ElementaryTypeName","src":"1279:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10553,"mutability":"mutable","name":"v","nameLocation":"1307:1:74","nodeType":"VariableDeclaration","scope":10633,"src":"1301:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10552,"name":"uint8","nodeType":"ElementaryTypeName","src":"1301:5:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":10555,"mutability":"mutable","name":"r","nameLocation":"1322:1:74","nodeType":"VariableDeclaration","scope":10633,"src":"1314:9:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10554,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1314:7:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10557,"mutability":"mutable","name":"s","nameLocation":"1337:1:74","nodeType":"VariableDeclaration","scope":10633,"src":"1329:9:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10556,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1329:7:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1214:128:74"},"returnParameters":{"id":10560,"nodeType":"ParameterList","parameters":[],"src":"1361:0:74"},"scope":10681,"src":"1199:729:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10649,"nodeType":"Block","src":"2148:54:74","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":10642,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"2160:10:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":10643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2160:12:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":10644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10636,"src":"2174:5:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10641,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"2154:5:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2154:26:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10646,"nodeType":"ExpressionStatement","src":"2154:26:74"},{"expression":{"hexValue":"74727565","id":10647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2193:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10640,"id":10648,"nodeType":"Return","src":"2186:11:74"}]},"documentation":{"id":10634,"nodeType":"StructuredDocumentation","src":"1932:162:74","text":" @dev Function to mint tokens\n @param value The amount of tokens to mint.\n @return A boolean that indicates if the operation was successful."},"functionSelector":"a0712d68","id":10650,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"2106:4:74","nodeType":"FunctionDefinition","parameters":{"id":10637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10636,"mutability":"mutable","name":"value","nameLocation":"2119:5:74","nodeType":"VariableDeclaration","scope":10650,"src":"2111:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10635,"name":"uint256","nodeType":"ElementaryTypeName","src":"2111:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2110:15:74"},"returnParameters":{"id":10640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10639,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10650,"src":"2142:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10638,"name":"bool","nodeType":"ElementaryTypeName","src":"2142:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2141:6:74"},"scope":10681,"src":"2097:105:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10667,"nodeType":"Block","src":"2498:49:74","statements":[{"expression":{"arguments":[{"id":10661,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10653,"src":"2510:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10662,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10655,"src":"2519:5:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10660,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"2504:5:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2504:21:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10664,"nodeType":"ExpressionStatement","src":"2504:21:74"},{"expression":{"hexValue":"74727565","id":10665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2538:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10659,"id":10666,"nodeType":"Return","src":"2531:11:74"}]},"documentation":{"id":10651,"nodeType":"StructuredDocumentation","src":"2206:221:74","text":" @dev Function to mint tokens to address\n @param account The account to mint tokens.\n @param value The amount of tokens to mint.\n @return A boolean that indicates if the operation was successful."},"functionSelector":"40c10f19","id":10668,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"2439:4:74","nodeType":"FunctionDefinition","parameters":{"id":10656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10653,"mutability":"mutable","name":"account","nameLocation":"2452:7:74","nodeType":"VariableDeclaration","scope":10668,"src":"2444:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10652,"name":"address","nodeType":"ElementaryTypeName","src":"2444:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10655,"mutability":"mutable","name":"value","nameLocation":"2469:5:74","nodeType":"VariableDeclaration","scope":10668,"src":"2461:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10654,"name":"uint256","nodeType":"ElementaryTypeName","src":"2461:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2443:32:74"},"returnParameters":{"id":10659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10658,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10668,"src":"2492:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10657,"name":"bool","nodeType":"ElementaryTypeName","src":"2492:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2491:6:74"},"scope":10681,"src":"2430:117:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10679,"nodeType":"Block","src":"2620:32:74","statements":[{"expression":{"baseExpression":{"id":10675,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10494,"src":"2633:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10677,"indexExpression":{"id":10676,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10670,"src":"2641:5:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2633:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10674,"id":10678,"nodeType":"Return","src":"2626:21:74"}]},"functionSelector":"7ecebe00","id":10680,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"2560:6:74","nodeType":"FunctionDefinition","parameters":{"id":10671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10670,"mutability":"mutable","name":"owner","nameLocation":"2575:5:74","nodeType":"VariableDeclaration","scope":10680,"src":"2567:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10669,"name":"address","nodeType":"ElementaryTypeName","src":"2567:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2566:15:74"},"returnParameters":{"id":10674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10673,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10680,"src":"2611:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10672,"name":"uint256","nodeType":"ElementaryTypeName","src":"2611:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2610:9:74"},"scope":10681,"src":"2551:101:74","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":10682,"src":"270:2384:74","usedErrors":[]}],"src":"37:2618:74"},"id":74},"contracts/mocks/tokens/MockATokenRepayment.sol":{"ast":{"absolutePath":"contracts/mocks/tokens/MockATokenRepayment.sol","exportedSymbols":{"AToken":[28936],"IPool":[5073],"MockATokenRepayment":[10736]},"id":10737,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10683,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:75"},{"absolutePath":"contracts/protocol/tokenization/AToken.sol","file":"../../protocol/tokenization/AToken.sol","id":10685,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10737,"sourceUnit":28937,"src":"62:62:75","symbolAliases":[{"foreign":{"id":10684,"name":"AToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":10687,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10737,"sourceUnit":5074,"src":"125:49:75","symbolAliases":[{"foreign":{"id":10686,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"133:5:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10688,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":28936,"src":"208:6:75"},"id":10689,"nodeType":"InheritanceSpecifier","src":"208:6:75"}],"canonicalName":"MockATokenRepayment","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":10736,"linearizedBaseContracts":[10736,28936,3986,4301,30773,31917,6188,31450,31300,1464,1442,748,12750],"name":"MockATokenRepayment","nameLocation":"185:19:75","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":10697,"name":"MockRepayment","nameLocation":"225:13:75","nodeType":"EventDefinition","parameters":{"id":10696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10691,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"247:4:75","nodeType":"VariableDeclaration","scope":10697,"src":"239:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10690,"name":"address","nodeType":"ElementaryTypeName","src":"239:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10693,"indexed":false,"mutability":"mutable","name":"onBehalfOf","nameLocation":"261:10:75","nodeType":"VariableDeclaration","scope":10697,"src":"253:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10692,"name":"address","nodeType":"ElementaryTypeName","src":"253:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10695,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"281:6:75","nodeType":"VariableDeclaration","scope":10697,"src":"273:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10694,"name":"uint256","nodeType":"ElementaryTypeName","src":"273:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"238:50:75"},"src":"219:70:75"},{"body":{"id":10706,"nodeType":"Block","src":"330:2:75","statements":[]},"id":10707,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":10703,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10700,"src":"324:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"id":10704,"kind":"baseConstructorSpecifier","modifierName":{"id":10702,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":28936,"src":"317:6:75"},"nodeType":"ModifierInvocation","src":"317:12:75"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10700,"mutability":"mutable","name":"pool","nameLocation":"311:4:75","nodeType":"VariableDeclaration","scope":10707,"src":"305:10:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":10699,"nodeType":"UserDefinedTypeName","pathNode":{"id":10698,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"305:5:75"},"referencedDeclaration":5073,"src":"305:5:75","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"304:12:75"},"returnParameters":{"id":10705,"nodeType":"ParameterList","parameters":[],"src":"330:0:75"},"scope":10736,"src":"293:39:75","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[28355],"body":{"id":10715,"nodeType":"Block","src":"400:21:75","statements":[{"expression":{"hexValue":"307832","id":10713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"413:3:75","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"0x2"},"functionReturnParameters":10712,"id":10714,"nodeType":"Return","src":"406:10:75"}]},"id":10716,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"345:11:75","nodeType":"FunctionDefinition","overrides":{"id":10709,"nodeType":"OverrideSpecifier","overrides":[],"src":"373:8:75"},"parameters":{"id":10708,"nodeType":"ParameterList","parameters":[],"src":"356:2:75"},"returnParameters":{"id":10712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10716,"src":"391:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10710,"name":"uint256","nodeType":"ElementaryTypeName","src":"391:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"390:9:75"},"scope":10736,"src":"336:85:75","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[28672],"body":{"id":10734,"nodeType":"Block","src":"543:55:75","statements":[{"eventCall":{"arguments":[{"id":10729,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"568:4:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10730,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10720,"src":"574:10:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10731,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10722,"src":"586:6:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10728,"name":"MockRepayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10697,"src":"554:13:75","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"554:39:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10733,"nodeType":"EmitStatement","src":"549:44:75"}]},"functionSelector":"6fd97676","id":10735,"implemented":true,"kind":"function","modifiers":[{"id":10726,"kind":"modifierInvocation","modifierName":{"id":10725,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"534:8:75"},"nodeType":"ModifierInvocation","src":"534:8:75"}],"name":"handleRepayment","nameLocation":"434:15:75","nodeType":"FunctionDefinition","overrides":{"id":10724,"nodeType":"OverrideSpecifier","overrides":[],"src":"525:8:75"},"parameters":{"id":10723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10718,"mutability":"mutable","name":"user","nameLocation":"463:4:75","nodeType":"VariableDeclaration","scope":10735,"src":"455:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10717,"name":"address","nodeType":"ElementaryTypeName","src":"455:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10720,"mutability":"mutable","name":"onBehalfOf","nameLocation":"481:10:75","nodeType":"VariableDeclaration","scope":10735,"src":"473:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10719,"name":"address","nodeType":"ElementaryTypeName","src":"473:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10722,"mutability":"mutable","name":"amount","nameLocation":"505:6:75","nodeType":"VariableDeclaration","scope":10735,"src":"497:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10721,"name":"uint256","nodeType":"ElementaryTypeName","src":"497:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"449:66:75"},"returnParameters":{"id":10727,"nodeType":"ParameterList","parameters":[],"src":"543:0:75"},"scope":10736,"src":"425:173:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":10737,"src":"176:424:75","usedErrors":[]}],"src":"37:564:75"},"id":75},"contracts/mocks/tokens/WETH9Mocked.sol":{"ast":{"absolutePath":"contracts/mocks/tokens/WETH9Mocked.sol","exportedSymbols":{"WETH9":[3353],"WETH9Mocked":[10797]},"id":10798,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10738,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:76"},{"absolutePath":"contracts/dependencies/weth/WETH9.sol","file":"../../dependencies/weth/WETH9.sol","id":10740,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10798,"sourceUnit":3354,"src":"62:56:76","symbolAliases":[{"foreign":{"id":10739,"name":"WETH9","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:5:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10741,"name":"WETH9","nodeType":"IdentifierPath","referencedDeclaration":3353,"src":"144:5:76"},"id":10742,"nodeType":"InheritanceSpecifier","src":"144:5:76"}],"canonicalName":"WETH9Mocked","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":10797,"linearizedBaseContracts":[10797,3353],"name":"WETH9Mocked","nameLocation":"129:11:76","nodeType":"ContractDefinition","nodes":[{"body":{"id":10768,"nodeType":"Block","src":"262:108:76","statements":[{"expression":{"id":10754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10749,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"268:9:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10752,"indexExpression":{"expression":{"id":10750,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"278:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"278:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"268:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10753,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10744,"src":"293:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"268:30:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10755,"nodeType":"ExpressionStatement","src":"268:30:76"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"326:1:76","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":10758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"318:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10757,"name":"address","nodeType":"ElementaryTypeName","src":"318:7:76","typeDescriptions":{}}},"id":10760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"318:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":10761,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"330:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"330:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10763,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10744,"src":"342:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10756,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3131,"src":"309:8:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"309:39:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10765,"nodeType":"EmitStatement","src":"304:44:76"},{"expression":{"hexValue":"74727565","id":10766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"361:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10748,"id":10767,"nodeType":"Return","src":"354:11:76"}]},"functionSelector":"a0712d68","id":10769,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"220:4:76","nodeType":"FunctionDefinition","parameters":{"id":10745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10744,"mutability":"mutable","name":"value","nameLocation":"233:5:76","nodeType":"VariableDeclaration","scope":10769,"src":"225:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10743,"name":"uint256","nodeType":"ElementaryTypeName","src":"225:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"224:15:76"},"returnParameters":{"id":10748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10747,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10769,"src":"256:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10746,"name":"bool","nodeType":"ElementaryTypeName","src":"256:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"255:6:76"},"scope":10797,"src":"211:159:76","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10795,"nodeType":"Block","src":"442:102:76","statements":[{"expression":{"id":10782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10778,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"448:9:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10780,"indexExpression":{"id":10779,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10771,"src":"458:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"448:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10773,"src":"470:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"448:27:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10783,"nodeType":"ExpressionStatement","src":"448:27:76"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"503:1:76","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":10786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"495:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10785,"name":"address","nodeType":"ElementaryTypeName","src":"495:7:76","typeDescriptions":{}}},"id":10788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"495:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10789,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10771,"src":"507:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10790,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10773,"src":"516:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10784,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3131,"src":"486:8:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"486:36:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10792,"nodeType":"EmitStatement","src":"481:41:76"},{"expression":{"hexValue":"74727565","id":10793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"535:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10777,"id":10794,"nodeType":"Return","src":"528:11:76"}]},"functionSelector":"40c10f19","id":10796,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"383:4:76","nodeType":"FunctionDefinition","parameters":{"id":10774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10771,"mutability":"mutable","name":"account","nameLocation":"396:7:76","nodeType":"VariableDeclaration","scope":10796,"src":"388:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10770,"name":"address","nodeType":"ElementaryTypeName","src":"388:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10773,"mutability":"mutable","name":"value","nameLocation":"413:5:76","nodeType":"VariableDeclaration","scope":10796,"src":"405:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10772,"name":"uint256","nodeType":"ElementaryTypeName","src":"405:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"387:32:76"},"returnParameters":{"id":10777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10776,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10796,"src":"436:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10775,"name":"bool","nodeType":"ElementaryTypeName","src":"436:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"435:6:76"},"scope":10797,"src":"374:170:76","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":10798,"src":"120:426:76","usedErrors":[]}],"src":"37:510:76"},"id":76},"contracts/mocks/upgradeability/MockAToken.sol":{"ast":{"absolutePath":"contracts/mocks/upgradeability/MockAToken.sol","exportedSymbols":{"AToken":[28936],"IPool":[5073],"MockAToken":[10825]},"id":10826,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10799,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:77"},{"absolutePath":"contracts/protocol/tokenization/AToken.sol","file":"../../protocol/tokenization/AToken.sol","id":10801,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10826,"sourceUnit":28937,"src":"62:62:77","symbolAliases":[{"foreign":{"id":10800,"name":"AToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":10803,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10826,"sourceUnit":5074,"src":"125:49:77","symbolAliases":[{"foreign":{"id":10802,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"133:5:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10804,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":28936,"src":"199:6:77"},"id":10805,"nodeType":"InheritanceSpecifier","src":"199:6:77"}],"canonicalName":"MockAToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":10825,"linearizedBaseContracts":[10825,28936,3986,4301,30773,31917,6188,31450,31300,1464,1442,748,12750],"name":"MockAToken","nameLocation":"185:10:77","nodeType":"ContractDefinition","nodes":[{"body":{"id":10814,"nodeType":"Block","src":"247:2:77","statements":[]},"id":10815,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":10811,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10808,"src":"241:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"id":10812,"kind":"baseConstructorSpecifier","modifierName":{"id":10810,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":28936,"src":"234:6:77"},"nodeType":"ModifierInvocation","src":"234:12:77"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10808,"mutability":"mutable","name":"pool","nameLocation":"228:4:77","nodeType":"VariableDeclaration","scope":10815,"src":"222:10:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":10807,"nodeType":"UserDefinedTypeName","pathNode":{"id":10806,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"222:5:77"},"referencedDeclaration":5073,"src":"222:5:77","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"221:12:77"},"returnParameters":{"id":10813,"nodeType":"ParameterList","parameters":[],"src":"247:0:77"},"scope":10825,"src":"210:39:77","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[28355],"body":{"id":10823,"nodeType":"Block","src":"317:21:77","statements":[{"expression":{"hexValue":"307832","id":10821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"330:3:77","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"0x2"},"functionReturnParameters":10820,"id":10822,"nodeType":"Return","src":"323:10:77"}]},"id":10824,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"262:11:77","nodeType":"FunctionDefinition","overrides":{"id":10817,"nodeType":"OverrideSpecifier","overrides":[],"src":"290:8:77"},"parameters":{"id":10816,"nodeType":"ParameterList","parameters":[],"src":"273:2:77"},"returnParameters":{"id":10820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10819,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10824,"src":"308:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10818,"name":"uint256","nodeType":"ElementaryTypeName","src":"308:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"307:9:77"},"scope":10825,"src":"253:85:77","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":10826,"src":"176:164:77","usedErrors":[]}],"src":"37:304:77"},"id":77},"contracts/mocks/upgradeability/MockInitializableImplementation.sol":{"ast":{"absolutePath":"contracts/mocks/upgradeability/MockInitializableImplementation.sol","exportedSymbols":{"MockInitializableFromConstructorImple":[11005],"MockInitializableImple":[10897],"MockInitializableImpleV2":[10965],"MockReentrantInitializableImple":[11046],"VersionedInitializable":[12750]},"id":11047,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10827,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:78"},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol","id":10829,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11047,"sourceUnit":12751,"src":"62:111:78","symbolAliases":[{"foreign":{"id":10828,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10830,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":12750,"src":"210:22:78"},"id":10831,"nodeType":"InheritanceSpecifier","src":"210:22:78"}],"canonicalName":"MockInitializableImple","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":10897,"linearizedBaseContracts":[10897,12750],"name":"MockInitializableImple","nameLocation":"184:22:78","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"3fa4f245","id":10833,"mutability":"mutable","name":"value","nameLocation":"252:5:78","nodeType":"VariableDeclaration","scope":10897,"src":"237:20:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10832,"name":"uint256","nodeType":"ElementaryTypeName","src":"237:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"1f1bd692","id":10835,"mutability":"mutable","name":"text","nameLocation":"275:4:78","nodeType":"VariableDeclaration","scope":10897,"src":"261:18:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":10834,"name":"string","nodeType":"ElementaryTypeName","src":"261:6:78","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"functionSelector":"5e383d21","id":10838,"mutability":"mutable","name":"values","nameLocation":"300:6:78","nodeType":"VariableDeclaration","scope":10897,"src":"283:23:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":10836,"name":"uint256","nodeType":"ElementaryTypeName","src":"283:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10837,"nodeType":"ArrayTypeName","src":"283:9:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"public"},{"constant":true,"functionSelector":"dde43cba","id":10841,"mutability":"constant","name":"REVISION","nameLocation":"335:8:78","nodeType":"VariableDeclaration","scope":10897,"src":"311:36:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10839,"name":"uint256","nodeType":"ElementaryTypeName","src":"311:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":10840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"346:1:78","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"public"},{"baseFunctions":[12730],"body":{"id":10850,"nodeType":"Block","src":"545:26:78","statements":[{"expression":{"id":10848,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10841,"src":"558:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10847,"id":10849,"nodeType":"Return","src":"551:15:78"}]},"documentation":{"id":10842,"nodeType":"StructuredDocumentation","src":"352:126:78","text":" @dev returns the revision number of the contract\n Needs to be defined in the inherited class as a constant."},"id":10851,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"490:11:78","nodeType":"FunctionDefinition","overrides":{"id":10844,"nodeType":"OverrideSpecifier","overrides":[],"src":"518:8:78"},"parameters":{"id":10843,"nodeType":"ParameterList","parameters":[],"src":"501:2:78"},"returnParameters":{"id":10847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10851,"src":"536:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10845,"name":"uint256","nodeType":"ElementaryTypeName","src":"536:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"535:9:78"},"scope":10897,"src":"481:90:78","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10875,"nodeType":"Block","src":"671:57:78","statements":[{"expression":{"id":10865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10863,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"677:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10864,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10853,"src":"685:3:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"677:11:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10866,"nodeType":"ExpressionStatement","src":"677:11:78"},{"expression":{"id":10869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10867,"name":"text","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10835,"src":"694:4:78","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10868,"name":"txt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10855,"src":"701:3:78","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"694:10:78","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10870,"nodeType":"ExpressionStatement","src":"694:10:78"},{"expression":{"id":10873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10871,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"710:6:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10872,"name":"vals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10858,"src":"719:4:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"710:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":10874,"nodeType":"ExpressionStatement","src":"710:13:78"}]},"functionSelector":"d31f8b6b","id":10876,"implemented":true,"kind":"function","modifiers":[{"id":10861,"kind":"modifierInvocation","modifierName":{"id":10860,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"659:11:78"},"nodeType":"ModifierInvocation","src":"659:11:78"}],"name":"initialize","nameLocation":"584:10:78","nodeType":"FunctionDefinition","parameters":{"id":10859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10853,"mutability":"mutable","name":"val","nameLocation":"603:3:78","nodeType":"VariableDeclaration","scope":10876,"src":"595:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10852,"name":"uint256","nodeType":"ElementaryTypeName","src":"595:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10855,"mutability":"mutable","name":"txt","nameLocation":"622:3:78","nodeType":"VariableDeclaration","scope":10876,"src":"608:17:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10854,"name":"string","nodeType":"ElementaryTypeName","src":"608:6:78","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10858,"mutability":"mutable","name":"vals","nameLocation":"644:4:78","nodeType":"VariableDeclaration","scope":10876,"src":"627:21:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":10856,"name":"uint256","nodeType":"ElementaryTypeName","src":"627:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10857,"nodeType":"ArrayTypeName","src":"627:9:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"594:55:78"},"returnParameters":{"id":10862,"nodeType":"ParameterList","parameters":[],"src":"671:0:78"},"scope":10897,"src":"575:153:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10885,"nodeType":"Block","src":"775:27:78","statements":[{"expression":{"id":10883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10881,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"781:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10882,"name":"newValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10878,"src":"789:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"781:16:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10884,"nodeType":"ExpressionStatement","src":"781:16:78"}]},"functionSelector":"55241077","id":10886,"implemented":true,"kind":"function","modifiers":[],"name":"setValue","nameLocation":"741:8:78","nodeType":"FunctionDefinition","parameters":{"id":10879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10878,"mutability":"mutable","name":"newValue","nameLocation":"758:8:78","nodeType":"VariableDeclaration","scope":10886,"src":"750:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10877,"name":"uint256","nodeType":"ElementaryTypeName","src":"750:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"749:18:78"},"returnParameters":{"id":10880,"nodeType":"ParameterList","parameters":[],"src":"775:0:78"},"scope":10897,"src":"732:70:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10895,"nodeType":"Block","src":"857:27:78","statements":[{"expression":{"id":10893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10891,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"863:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10892,"name":"newValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10888,"src":"871:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"863:16:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10894,"nodeType":"ExpressionStatement","src":"863:16:78"}]},"functionSelector":"5dd21610","id":10896,"implemented":true,"kind":"function","modifiers":[],"name":"setValueViaProxy","nameLocation":"815:16:78","nodeType":"FunctionDefinition","parameters":{"id":10889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10888,"mutability":"mutable","name":"newValue","nameLocation":"840:8:78","nodeType":"VariableDeclaration","scope":10896,"src":"832:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10887,"name":"uint256","nodeType":"ElementaryTypeName","src":"832:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"831:18:78"},"returnParameters":{"id":10890,"nodeType":"ParameterList","parameters":[],"src":"857:0:78"},"scope":10897,"src":"806:78:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":11047,"src":"175:711:78","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":10898,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":12750,"src":"925:22:78"},"id":10899,"nodeType":"InheritanceSpecifier","src":"925:22:78"}],"canonicalName":"MockInitializableImpleV2","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":10965,"linearizedBaseContracts":[10965,12750],"name":"MockInitializableImpleV2","nameLocation":"897:24:78","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"3fa4f245","id":10901,"mutability":"mutable","name":"value","nameLocation":"967:5:78","nodeType":"VariableDeclaration","scope":10965,"src":"952:20:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10900,"name":"uint256","nodeType":"ElementaryTypeName","src":"952:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"1f1bd692","id":10903,"mutability":"mutable","name":"text","nameLocation":"990:4:78","nodeType":"VariableDeclaration","scope":10965,"src":"976:18:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":10902,"name":"string","nodeType":"ElementaryTypeName","src":"976:6:78","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"functionSelector":"5e383d21","id":10906,"mutability":"mutable","name":"values","nameLocation":"1015:6:78","nodeType":"VariableDeclaration","scope":10965,"src":"998:23:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":10904,"name":"uint256","nodeType":"ElementaryTypeName","src":"998:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10905,"nodeType":"ArrayTypeName","src":"998:9:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"public"},{"constant":true,"functionSelector":"dde43cba","id":10909,"mutability":"constant","name":"REVISION","nameLocation":"1050:8:78","nodeType":"VariableDeclaration","scope":10965,"src":"1026:36:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10907,"name":"uint256","nodeType":"ElementaryTypeName","src":"1026:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":10908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1061:1:78","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"baseFunctions":[12730],"body":{"id":10918,"nodeType":"Block","src":"1260:26:78","statements":[{"expression":{"id":10916,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10909,"src":"1273:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10915,"id":10917,"nodeType":"Return","src":"1266:15:78"}]},"documentation":{"id":10910,"nodeType":"StructuredDocumentation","src":"1067:126:78","text":" @dev returns the revision number of the contract\n Needs to be defined in the inherited class as a constant."},"id":10919,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1205:11:78","nodeType":"FunctionDefinition","overrides":{"id":10912,"nodeType":"OverrideSpecifier","overrides":[],"src":"1233:8:78"},"parameters":{"id":10911,"nodeType":"ParameterList","parameters":[],"src":"1216:2:78"},"returnParameters":{"id":10915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10919,"src":"1251:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10913,"name":"uint256","nodeType":"ElementaryTypeName","src":"1251:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1250:9:78"},"scope":10965,"src":"1196:90:78","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10943,"nodeType":"Block","src":"1384:57:78","statements":[{"expression":{"id":10933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10931,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"1390:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10932,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10921,"src":"1398:3:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1390:11:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10934,"nodeType":"ExpressionStatement","src":"1390:11:78"},{"expression":{"id":10937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10935,"name":"text","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10903,"src":"1407:4:78","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10936,"name":"txt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10923,"src":"1414:3:78","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1407:10:78","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10938,"nodeType":"ExpressionStatement","src":"1407:10:78"},{"expression":{"id":10941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10939,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10906,"src":"1423:6:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10940,"name":"vals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10926,"src":"1432:4:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"1423:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":10942,"nodeType":"ExpressionStatement","src":"1423:13:78"}]},"functionSelector":"d31f8b6b","id":10944,"implemented":true,"kind":"function","modifiers":[{"id":10929,"kind":"modifierInvocation","modifierName":{"id":10928,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"1372:11:78"},"nodeType":"ModifierInvocation","src":"1372:11:78"}],"name":"initialize","nameLocation":"1299:10:78","nodeType":"FunctionDefinition","parameters":{"id":10927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10921,"mutability":"mutable","name":"val","nameLocation":"1318:3:78","nodeType":"VariableDeclaration","scope":10944,"src":"1310:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10920,"name":"uint256","nodeType":"ElementaryTypeName","src":"1310:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10923,"mutability":"mutable","name":"txt","nameLocation":"1337:3:78","nodeType":"VariableDeclaration","scope":10944,"src":"1323:17:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10922,"name":"string","nodeType":"ElementaryTypeName","src":"1323:6:78","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10926,"mutability":"mutable","name":"vals","nameLocation":"1359:4:78","nodeType":"VariableDeclaration","scope":10944,"src":"1342:21:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":10924,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10925,"nodeType":"ArrayTypeName","src":"1342:9:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1309:55:78"},"returnParameters":{"id":10930,"nodeType":"ParameterList","parameters":[],"src":"1384:0:78"},"scope":10965,"src":"1290:151:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10953,"nodeType":"Block","src":"1488:27:78","statements":[{"expression":{"id":10951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10949,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"1494:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10950,"name":"newValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10946,"src":"1502:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1494:16:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10952,"nodeType":"ExpressionStatement","src":"1494:16:78"}]},"functionSelector":"55241077","id":10954,"implemented":true,"kind":"function","modifiers":[],"name":"setValue","nameLocation":"1454:8:78","nodeType":"FunctionDefinition","parameters":{"id":10947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10946,"mutability":"mutable","name":"newValue","nameLocation":"1471:8:78","nodeType":"VariableDeclaration","scope":10954,"src":"1463:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10945,"name":"uint256","nodeType":"ElementaryTypeName","src":"1463:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1462:18:78"},"returnParameters":{"id":10948,"nodeType":"ParameterList","parameters":[],"src":"1488:0:78"},"scope":10965,"src":"1445:70:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10963,"nodeType":"Block","src":"1570:27:78","statements":[{"expression":{"id":10961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10959,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"1576:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10960,"name":"newValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10956,"src":"1584:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1576:16:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10962,"nodeType":"ExpressionStatement","src":"1576:16:78"}]},"functionSelector":"5dd21610","id":10964,"implemented":true,"kind":"function","modifiers":[],"name":"setValueViaProxy","nameLocation":"1528:16:78","nodeType":"FunctionDefinition","parameters":{"id":10957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10956,"mutability":"mutable","name":"newValue","nameLocation":"1553:8:78","nodeType":"VariableDeclaration","scope":10964,"src":"1545:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10955,"name":"uint256","nodeType":"ElementaryTypeName","src":"1545:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1544:18:78"},"returnParameters":{"id":10958,"nodeType":"ParameterList","parameters":[],"src":"1570:0:78"},"scope":10965,"src":"1519:78:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":11047,"src":"888:711:78","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":10966,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":12750,"src":"1651:22:78"},"id":10967,"nodeType":"InheritanceSpecifier","src":"1651:22:78"}],"canonicalName":"MockInitializableFromConstructorImple","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":11005,"linearizedBaseContracts":[11005,12750],"name":"MockInitializableFromConstructorImple","nameLocation":"1610:37:78","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"3fa4f245","id":10969,"mutability":"mutable","name":"value","nameLocation":"1693:5:78","nodeType":"VariableDeclaration","scope":11005,"src":"1678:20:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10968,"name":"uint256","nodeType":"ElementaryTypeName","src":"1678:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"dde43cba","id":10972,"mutability":"constant","name":"REVISION","nameLocation":"1727:8:78","nodeType":"VariableDeclaration","scope":11005,"src":"1703:36:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10970,"name":"uint256","nodeType":"ElementaryTypeName","src":"1703:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":10971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1738:1:78","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"baseFunctions":[12730],"body":{"id":10981,"nodeType":"Block","src":"1937:26:78","statements":[{"expression":{"id":10979,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10972,"src":"1950:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10978,"id":10980,"nodeType":"Return","src":"1943:15:78"}]},"documentation":{"id":10973,"nodeType":"StructuredDocumentation","src":"1744:126:78","text":" @dev returns the revision number of the contract\n Needs to be defined in the inherited class as a constant."},"id":10982,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1882:11:78","nodeType":"FunctionDefinition","overrides":{"id":10975,"nodeType":"OverrideSpecifier","overrides":[],"src":"1910:8:78"},"parameters":{"id":10974,"nodeType":"ParameterList","parameters":[],"src":"1893:2:78"},"returnParameters":{"id":10978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10977,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10982,"src":"1928:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10976,"name":"uint256","nodeType":"ElementaryTypeName","src":"1928:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1927:9:78"},"scope":11005,"src":"1873:90:78","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10991,"nodeType":"Block","src":"1992:26:78","statements":[{"expression":{"arguments":[{"id":10988,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10984,"src":"2009:3:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10987,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11004,"src":"1998:10:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":10989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1998:15:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10990,"nodeType":"ExpressionStatement","src":"1998:15:78"}]},"id":10992,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10984,"mutability":"mutable","name":"val","nameLocation":"1987:3:78","nodeType":"VariableDeclaration","scope":10992,"src":"1979:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10983,"name":"uint256","nodeType":"ElementaryTypeName","src":"1979:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1978:13:78"},"returnParameters":{"id":10986,"nodeType":"ParameterList","parameters":[],"src":"1992:0:78"},"scope":11005,"src":"1967:51:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":11003,"nodeType":"Block","src":"2074:22:78","statements":[{"expression":{"id":11001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10999,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10969,"src":"2080:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11000,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10994,"src":"2088:3:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2080:11:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11002,"nodeType":"ExpressionStatement","src":"2080:11:78"}]},"functionSelector":"fe4b84df","id":11004,"implemented":true,"kind":"function","modifiers":[{"id":10997,"kind":"modifierInvocation","modifierName":{"id":10996,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"2062:11:78"},"nodeType":"ModifierInvocation","src":"2062:11:78"}],"name":"initialize","nameLocation":"2031:10:78","nodeType":"FunctionDefinition","parameters":{"id":10995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10994,"mutability":"mutable","name":"val","nameLocation":"2050:3:78","nodeType":"VariableDeclaration","scope":11004,"src":"2042:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10993,"name":"uint256","nodeType":"ElementaryTypeName","src":"2042:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2041:13:78"},"returnParameters":{"id":10998,"nodeType":"ParameterList","parameters":[],"src":"2074:0:78"},"scope":11005,"src":"2022:74:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":11047,"src":"1601:497:78","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":11006,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":12750,"src":"2144:22:78"},"id":11007,"nodeType":"InheritanceSpecifier","src":"2144:22:78"}],"canonicalName":"MockReentrantInitializableImple","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":11046,"linearizedBaseContracts":[11046,12750],"name":"MockReentrantInitializableImple","nameLocation":"2109:31:78","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"3fa4f245","id":11009,"mutability":"mutable","name":"value","nameLocation":"2186:5:78","nodeType":"VariableDeclaration","scope":11046,"src":"2171:20:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11008,"name":"uint256","nodeType":"ElementaryTypeName","src":"2171:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"dde43cba","id":11012,"mutability":"constant","name":"REVISION","nameLocation":"2220:8:78","nodeType":"VariableDeclaration","scope":11046,"src":"2196:36:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11010,"name":"uint256","nodeType":"ElementaryTypeName","src":"2196:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":11011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2231:1:78","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"baseFunctions":[12730],"body":{"id":11021,"nodeType":"Block","src":"2430:26:78","statements":[{"expression":{"id":11019,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11012,"src":"2443:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11018,"id":11020,"nodeType":"Return","src":"2436:15:78"}]},"documentation":{"id":11013,"nodeType":"StructuredDocumentation","src":"2237:126:78","text":" @dev returns the revision number of the contract\n Needs to be defined in the inherited class as a constant."},"id":11022,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2375:11:78","nodeType":"FunctionDefinition","overrides":{"id":11015,"nodeType":"OverrideSpecifier","overrides":[],"src":"2403:8:78"},"parameters":{"id":11014,"nodeType":"ParameterList","parameters":[],"src":"2386:2:78"},"returnParameters":{"id":11018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11017,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11022,"src":"2421:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11016,"name":"uint256","nodeType":"ElementaryTypeName","src":"2421:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2420:9:78"},"scope":11046,"src":"2366:90:78","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11044,"nodeType":"Block","src":"2512:78:78","statements":[{"expression":{"id":11031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11029,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11009,"src":"2518:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11030,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"2526:3:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2518:11:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11032,"nodeType":"ExpressionStatement","src":"2518:11:78"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11033,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11009,"src":"2539:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":11034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2547:1:78","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2539:9:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11043,"nodeType":"IfStatement","src":"2535:51:78","trueBody":{"id":11042,"nodeType":"Block","src":"2550:36:78","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11037,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11009,"src":"2569:5:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2577:1:78","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2569:9:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11036,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11045,"src":"2558:10:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":11040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2558:21:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11041,"nodeType":"ExpressionStatement","src":"2558:21:78"}]}}]},"functionSelector":"fe4b84df","id":11045,"implemented":true,"kind":"function","modifiers":[{"id":11027,"kind":"modifierInvocation","modifierName":{"id":11026,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"2500:11:78"},"nodeType":"ModifierInvocation","src":"2500:11:78"}],"name":"initialize","nameLocation":"2469:10:78","nodeType":"FunctionDefinition","parameters":{"id":11025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11024,"mutability":"mutable","name":"val","nameLocation":"2488:3:78","nodeType":"VariableDeclaration","scope":11045,"src":"2480:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11023,"name":"uint256","nodeType":"ElementaryTypeName","src":"2480:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2479:13:78"},"returnParameters":{"id":11028,"nodeType":"ParameterList","parameters":[],"src":"2512:0:78"},"scope":11046,"src":"2460:130:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":11047,"src":"2100:492:78","usedErrors":[]}],"src":"37:2556:78"},"id":78},"contracts/mocks/upgradeability/MockStableDebtToken.sol":{"ast":{"absolutePath":"contracts/mocks/upgradeability/MockStableDebtToken.sol","exportedSymbols":{"IPool":[5073],"MockStableDebtToken":[11074],"StableDebtToken":[30059]},"id":11075,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":11048,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:79"},{"absolutePath":"contracts/protocol/tokenization/StableDebtToken.sol","file":"../../protocol/tokenization/StableDebtToken.sol","id":11050,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11075,"sourceUnit":30060,"src":"62:80:79","symbolAliases":[{"foreign":{"id":11049,"name":"StableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:15:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":11052,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11075,"sourceUnit":5074,"src":"143:49:79","symbolAliases":[{"foreign":{"id":11051,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:5:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":11053,"name":"StableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":30059,"src":"226:15:79"},"id":11054,"nodeType":"InheritanceSpecifier","src":"226:15:79"}],"canonicalName":"MockStableDebtToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":11074,"linearizedBaseContracts":[11074,30059,6340,4346,31300,1464,1442,30673,4127,748,30773,12750],"name":"MockStableDebtToken","nameLocation":"203:19:79","nodeType":"ContractDefinition","nodes":[{"body":{"id":11063,"nodeType":"Block","src":"292:2:79","statements":[]},"id":11064,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":11060,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11057,"src":"286:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"id":11061,"kind":"baseConstructorSpecifier","modifierName":{"id":11059,"name":"StableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":30059,"src":"270:15:79"},"nodeType":"ModifierInvocation","src":"270:21:79"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":11058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11057,"mutability":"mutable","name":"pool","nameLocation":"264:4:79","nodeType":"VariableDeclaration","scope":11064,"src":"258:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":11056,"nodeType":"UserDefinedTypeName","pathNode":{"id":11055,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"258:5:79"},"referencedDeclaration":5073,"src":"258:5:79","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"257:12:79"},"returnParameters":{"id":11062,"nodeType":"ParameterList","parameters":[],"src":"292:0:79"},"scope":11074,"src":"246:48:79","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[29135],"body":{"id":11072,"nodeType":"Block","src":"362:21:79","statements":[{"expression":{"hexValue":"307833","id":11070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"375:3:79","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"0x3"},"functionReturnParameters":11069,"id":11071,"nodeType":"Return","src":"368:10:79"}]},"id":11073,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"307:11:79","nodeType":"FunctionDefinition","overrides":{"id":11066,"nodeType":"OverrideSpecifier","overrides":[],"src":"335:8:79"},"parameters":{"id":11065,"nodeType":"ParameterList","parameters":[],"src":"318:2:79"},"returnParameters":{"id":11069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11068,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11073,"src":"353:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11067,"name":"uint256","nodeType":"ElementaryTypeName","src":"353:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"352:9:79"},"scope":11074,"src":"298:85:79","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":11075,"src":"194:191:79","usedErrors":[]}],"src":"37:349:79"},"id":79},"contracts/mocks/upgradeability/MockVariableDebtToken.sol":{"ast":{"absolutePath":"contracts/mocks/upgradeability/MockVariableDebtToken.sol","exportedSymbols":{"IPool":[5073],"MockVariableDebtToken":[11102],"VariableDebtToken":[30441]},"id":11103,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":11076,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:80"},{"absolutePath":"contracts/protocol/tokenization/VariableDebtToken.sol","file":"../../protocol/tokenization/VariableDebtToken.sol","id":11078,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11103,"sourceUnit":30442,"src":"62:84:80","symbolAliases":[{"foreign":{"id":11077,"name":"VariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:17:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":11080,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11103,"sourceUnit":5074,"src":"147:49:80","symbolAliases":[{"foreign":{"id":11079,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"155:5:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":11081,"name":"VariableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"232:17:80"},"id":11082,"nodeType":"InheritanceSpecifier","src":"232:17:80"}],"canonicalName":"MockVariableDebtToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":11102,"linearizedBaseContracts":[11102,30441,6386,4346,31917,6188,31450,31300,1464,1442,30673,4127,748,30773,12750],"name":"MockVariableDebtToken","nameLocation":"207:21:80","nodeType":"ContractDefinition","nodes":[{"body":{"id":11091,"nodeType":"Block","src":"302:2:80","statements":[]},"id":11092,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":11088,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11085,"src":"296:4:80","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"id":11089,"kind":"baseConstructorSpecifier","modifierName":{"id":11087,"name":"VariableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"278:17:80"},"nodeType":"ModifierInvocation","src":"278:23:80"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":11086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11085,"mutability":"mutable","name":"pool","nameLocation":"272:4:80","nodeType":"VariableDeclaration","scope":11092,"src":"266:10:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":11084,"nodeType":"UserDefinedTypeName","pathNode":{"id":11083,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"266:5:80"},"referencedDeclaration":5073,"src":"266:5:80","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"265:12:80"},"returnParameters":{"id":11090,"nodeType":"ParameterList","parameters":[],"src":"302:0:80"},"scope":11102,"src":"254:50:80","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[30200],"body":{"id":11100,"nodeType":"Block","src":"372:21:80","statements":[{"expression":{"hexValue":"307833","id":11098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"385:3:80","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"0x3"},"functionReturnParameters":11097,"id":11099,"nodeType":"Return","src":"378:10:80"}]},"id":11101,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"317:11:80","nodeType":"FunctionDefinition","overrides":{"id":11094,"nodeType":"OverrideSpecifier","overrides":[],"src":"345:8:80"},"parameters":{"id":11093,"nodeType":"ParameterList","parameters":[],"src":"328:2:80"},"returnParameters":{"id":11097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11096,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11101,"src":"363:7:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11095,"name":"uint256","nodeType":"ElementaryTypeName","src":"363:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"362:9:80"},"scope":11102,"src":"308:85:80","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":11103,"src":"198:197:80","usedErrors":[]}],"src":"37:359:80"},"id":80},"contracts/protocol/configuration/ACLManager.sol":{"ast":{"absolutePath":"contracts/protocol/configuration/ACLManager.sol","exportedSymbols":{"ACLManager":[11455],"AccessControl":[425],"Errors":[14819],"IACLManager":[3843],"IPoolAddressesProvider":[5282]},"id":11456,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":11104,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:81"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/AccessControl.sol","file":"../../dependencies/openzeppelin/contracts/AccessControl.sol","id":11106,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11456,"sourceUnit":426,"src":"63:90:81","symbolAliases":[{"foreign":{"id":11105,"name":"AccessControl","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":11108,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11456,"sourceUnit":5283,"src":"154:83:81","symbolAliases":[{"foreign":{"id":11107,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"162:22:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IACLManager.sol","file":"../../interfaces/IACLManager.sol","id":11110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11456,"sourceUnit":3844,"src":"238:61:81","symbolAliases":[{"foreign":{"id":11109,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"246:11:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":11112,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11456,"sourceUnit":14820,"src":"300:55:81","symbolAliases":[{"foreign":{"id":11111,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"308:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":11114,"name":"AccessControl","nodeType":"IdentifierPath","referencedDeclaration":425,"src":"512:13:81"},"id":11115,"nodeType":"InheritanceSpecifier","src":"512:13:81"},{"baseName":{"id":11116,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"527:11:81"},"id":11117,"nodeType":"InheritanceSpecifier","src":"527:11:81"}],"canonicalName":"ACLManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":11113,"nodeType":"StructuredDocumentation","src":"357:131:81","text":" @title ACLManager\n @author Aave\n @notice Access Control List Manager. Main registry of system roles and permissions."},"fullyImplemented":true,"id":11455,"linearizedBaseContracts":[11455,3843,425,772,1364,1352,748],"name":"ACLManager","nameLocation":"498:10:81","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3684],"constant":true,"functionSelector":"b8f6dba7","id":11123,"mutability":"constant","name":"POOL_ADMIN_ROLE","nameLocation":"576:15:81","nodeType":"VariableDeclaration","overrides":{"id":11119,"nodeType":"OverrideSpecifier","overrides":[],"src":"567:8:81"},"scope":11455,"src":"543:74:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11118,"name":"bytes32","nodeType":"ElementaryTypeName","src":"543:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"504f4f4c5f41444d494e","id":11121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"604:12:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b","typeString":"literal_string \"POOL_ADMIN\""},"value":"POOL_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b","typeString":"literal_string \"POOL_ADMIN\""}],"id":11120,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"594:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":11122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"594:23:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3690],"constant":true,"functionSelector":"6e76fc8f","id":11129,"mutability":"constant","name":"EMERGENCY_ADMIN_ROLE","nameLocation":"654:20:81","nodeType":"VariableDeclaration","overrides":{"id":11125,"nodeType":"OverrideSpecifier","overrides":[],"src":"645:8:81"},"scope":11455,"src":"621:84:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11124,"name":"bytes32","nodeType":"ElementaryTypeName","src":"621:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454d455247454e43595f41444d494e","id":11127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"687:17:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb","typeString":"literal_string \"EMERGENCY_ADMIN\""},"value":"EMERGENCY_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb","typeString":"literal_string \"EMERGENCY_ADMIN\""}],"id":11126,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"677:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":11128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"677:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3696],"constant":true,"functionSelector":"4f16b425","id":11135,"mutability":"constant","name":"RISK_ADMIN_ROLE","nameLocation":"742:15:81","nodeType":"VariableDeclaration","overrides":{"id":11131,"nodeType":"OverrideSpecifier","overrides":[],"src":"733:8:81"},"scope":11455,"src":"709:74:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11130,"name":"bytes32","nodeType":"ElementaryTypeName","src":"709:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5249534b5f41444d494e","id":11133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"770:12:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e18167","typeString":"literal_string \"RISK_ADMIN\""},"value":"RISK_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e18167","typeString":"literal_string \"RISK_ADMIN\""}],"id":11132,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"760:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":11134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"760:23:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3702],"constant":true,"functionSelector":"5577b7a9","id":11141,"mutability":"constant","name":"FLASH_BORROWER_ROLE","nameLocation":"820:19:81","nodeType":"VariableDeclaration","overrides":{"id":11137,"nodeType":"OverrideSpecifier","overrides":[],"src":"811:8:81"},"scope":11455,"src":"787:82:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11136,"name":"bytes32","nodeType":"ElementaryTypeName","src":"787:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"464c4153485f424f52524f574552","id":11139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"852:16:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca4","typeString":"literal_string \"FLASH_BORROWER\""},"value":"FLASH_BORROWER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca4","typeString":"literal_string \"FLASH_BORROWER\""}],"id":11138,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"842:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":11140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"842:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3708],"constant":true,"functionSelector":"b5bfddea","id":11147,"mutability":"constant","name":"BRIDGE_ROLE","nameLocation":"906:11:81","nodeType":"VariableDeclaration","overrides":{"id":11143,"nodeType":"OverrideSpecifier","overrides":[],"src":"897:8:81"},"scope":11455,"src":"873:66:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11142,"name":"bytes32","nodeType":"ElementaryTypeName","src":"873:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"425249444745","id":11145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"930:8:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae3278","typeString":"literal_string \"BRIDGE\""},"value":"BRIDGE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae3278","typeString":"literal_string \"BRIDGE\""}],"id":11144,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"920:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":11146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"920:19:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3714],"constant":true,"functionSelector":"78bb0a43","id":11153,"mutability":"constant","name":"ASSET_LISTING_ADMIN_ROLE","nameLocation":"976:24:81","nodeType":"VariableDeclaration","overrides":{"id":11149,"nodeType":"OverrideSpecifier","overrides":[],"src":"967:8:81"},"scope":11455,"src":"943:92:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11148,"name":"bytes32","nodeType":"ElementaryTypeName","src":"943:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"41535345545f4c495354494e475f41444d494e","id":11151,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1013:21:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433","typeString":"literal_string \"ASSET_LISTING_ADMIN\""},"value":"ASSET_LISTING_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433","typeString":"literal_string \"ASSET_LISTING_ADMIN\""}],"id":11150,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1003:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":11152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1003:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3678],"constant":false,"functionSelector":"0542975c","id":11156,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"1080:18:81","nodeType":"VariableDeclaration","scope":11455,"src":"1040:58:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":11155,"nodeType":"UserDefinedTypeName","pathNode":{"id":11154,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1040:22:81"},"referencedDeclaration":5282,"src":"1040:22:81","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"body":{"id":11189,"nodeType":"Block","src":"1326:203:81","statements":[{"expression":{"id":11165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11163,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11156,"src":"1332:18:81","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11164,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11160,"src":"1353:8:81","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"1332:29:81","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":11166,"nodeType":"ExpressionStatement","src":"1332:29:81"},{"assignments":[11168],"declarations":[{"constant":false,"id":11168,"mutability":"mutable","name":"aclAdmin","nameLocation":"1375:8:81","nodeType":"VariableDeclaration","scope":11189,"src":"1367:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11167,"name":"address","nodeType":"ElementaryTypeName","src":"1367:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11172,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":11169,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11160,"src":"1386:8:81","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":11170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLAdmin","nodeType":"MemberAccess","referencedDeclaration":5251,"src":"1386:20:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":11171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1386:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1367:41:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":11179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11174,"name":"aclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11168,"src":"1422:8:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":11177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1442:1:81","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":11176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1434:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11175,"name":"address","nodeType":"ElementaryTypeName","src":"1434:7:81","typeDescriptions":{}}},"id":11178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1434:10:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1422:22:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11180,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1446:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":11181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ACL_ADMIN_CANNOT_BE_ZERO","nodeType":"MemberAccess","referencedDeclaration":14770,"src":"1446:31:81","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11173,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1414:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1414:64:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11183,"nodeType":"ExpressionStatement","src":"1414:64:81"},{"expression":{"arguments":[{"id":11185,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"1495:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11186,"name":"aclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11168,"src":"1515:8:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11184,"name":"_setupRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":335,"src":"1484:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1484:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11188,"nodeType":"ExpressionStatement","src":"1484:40:81"}]},"documentation":{"id":11157,"nodeType":"StructuredDocumentation","src":"1103:175:81","text":" @dev Constructor\n @dev The ACL admin should be initialized at the addressesProvider beforehand\n @param provider The address of the PoolAddressesProvider"},"id":11190,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":11161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11160,"mutability":"mutable","name":"provider","nameLocation":"1316:8:81","nodeType":"VariableDeclaration","scope":11190,"src":"1293:31:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":11159,"nodeType":"UserDefinedTypeName","pathNode":{"id":11158,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1293:22:81"},"referencedDeclaration":5282,"src":"1293:22:81","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1292:33:81"},"returnParameters":{"id":11162,"nodeType":"ParameterList","parameters":[],"src":"1326:0:81"},"scope":11455,"src":"1281:248:81","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3722],"body":{"id":11207,"nodeType":"Block","src":"1677:41:81","statements":[{"expression":{"arguments":[{"id":11203,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11193,"src":"1697:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11204,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11195,"src":"1703:9:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11202,"name":"_setRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":363,"src":"1683:13:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":11205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1683:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11206,"nodeType":"ExpressionStatement","src":"1683:30:81"}]},"documentation":{"id":11191,"nodeType":"StructuredDocumentation","src":"1533:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"1e4e0091","id":11208,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":11199,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"1657:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":11200,"kind":"modifierInvocation","modifierName":{"id":11198,"name":"onlyRole","nodeType":"IdentifierPath","referencedDeclaration":159,"src":"1648:8:81"},"nodeType":"ModifierInvocation","src":"1648:28:81"}],"name":"setRoleAdmin","nameLocation":"1572:12:81","nodeType":"FunctionDefinition","overrides":{"id":11197,"nodeType":"OverrideSpecifier","overrides":[],"src":"1639:8:81"},"parameters":{"id":11196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11193,"mutability":"mutable","name":"role","nameLocation":"1598:4:81","nodeType":"VariableDeclaration","scope":11208,"src":"1590:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11192,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1590:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11195,"mutability":"mutable","name":"adminRole","nameLocation":"1616:9:81","nodeType":"VariableDeclaration","scope":11208,"src":"1608:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11194,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1608:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1584:45:81"},"returnParameters":{"id":11201,"nodeType":"ParameterList","parameters":[],"src":"1677:0:81"},"scope":11455,"src":"1563:155:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3728],"body":{"id":11220,"nodeType":"Block","src":"1807:44:81","statements":[{"expression":{"arguments":[{"id":11216,"name":"POOL_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11123,"src":"1823:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11217,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11211,"src":"1840:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11215,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"1813:9:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1813:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11219,"nodeType":"ExpressionStatement","src":"1813:33:81"}]},"documentation":{"id":11209,"nodeType":"StructuredDocumentation","src":"1722:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"22650caf","id":11221,"implemented":true,"kind":"function","modifiers":[],"name":"addPoolAdmin","nameLocation":"1761:12:81","nodeType":"FunctionDefinition","overrides":{"id":11213,"nodeType":"OverrideSpecifier","overrides":[],"src":"1798:8:81"},"parameters":{"id":11212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11211,"mutability":"mutable","name":"admin","nameLocation":"1782:5:81","nodeType":"VariableDeclaration","scope":11221,"src":"1774:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11210,"name":"address","nodeType":"ElementaryTypeName","src":"1774:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1773:15:81"},"returnParameters":{"id":11214,"nodeType":"ParameterList","parameters":[],"src":"1807:0:81"},"scope":11455,"src":"1752:99:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3734],"body":{"id":11233,"nodeType":"Block","src":"1943:45:81","statements":[{"expression":{"arguments":[{"id":11229,"name":"POOL_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11123,"src":"1960:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11230,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11224,"src":"1977:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11228,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"1949:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1949:34:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11232,"nodeType":"ExpressionStatement","src":"1949:34:81"}]},"documentation":{"id":11222,"nodeType":"StructuredDocumentation","src":"1855:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"f83695cb","id":11234,"implemented":true,"kind":"function","modifiers":[],"name":"removePoolAdmin","nameLocation":"1894:15:81","nodeType":"FunctionDefinition","overrides":{"id":11226,"nodeType":"OverrideSpecifier","overrides":[],"src":"1934:8:81"},"parameters":{"id":11225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11224,"mutability":"mutable","name":"admin","nameLocation":"1918:5:81","nodeType":"VariableDeclaration","scope":11234,"src":"1910:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11223,"name":"address","nodeType":"ElementaryTypeName","src":"1910:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1909:15:81"},"returnParameters":{"id":11227,"nodeType":"ParameterList","parameters":[],"src":"1943:0:81"},"scope":11455,"src":"1885:103:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3742],"body":{"id":11248,"nodeType":"Block","src":"2096:49:81","statements":[{"expression":{"arguments":[{"id":11244,"name":"POOL_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11123,"src":"2117:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11245,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11237,"src":"2134:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11243,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"2109:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":11246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2109:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11242,"id":11247,"nodeType":"Return","src":"2102:38:81"}]},"documentation":{"id":11235,"nodeType":"StructuredDocumentation","src":"1992:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"7be53ca1","id":11249,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolAdmin","nameLocation":"2031:11:81","nodeType":"FunctionDefinition","overrides":{"id":11239,"nodeType":"OverrideSpecifier","overrides":[],"src":"2072:8:81"},"parameters":{"id":11238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11237,"mutability":"mutable","name":"admin","nameLocation":"2051:5:81","nodeType":"VariableDeclaration","scope":11249,"src":"2043:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11236,"name":"address","nodeType":"ElementaryTypeName","src":"2043:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2042:15:81"},"returnParameters":{"id":11242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11249,"src":"2090:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11240,"name":"bool","nodeType":"ElementaryTypeName","src":"2090:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2089:6:81"},"scope":11455,"src":"2022:123:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3748],"body":{"id":11261,"nodeType":"Block","src":"2239:49:81","statements":[{"expression":{"arguments":[{"id":11257,"name":"EMERGENCY_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11129,"src":"2255:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11258,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11252,"src":"2277:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11256,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"2245:9:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2245:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11260,"nodeType":"ExpressionStatement","src":"2245:38:81"}]},"documentation":{"id":11250,"nodeType":"StructuredDocumentation","src":"2149:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"179efb09","id":11262,"implemented":true,"kind":"function","modifiers":[],"name":"addEmergencyAdmin","nameLocation":"2188:17:81","nodeType":"FunctionDefinition","overrides":{"id":11254,"nodeType":"OverrideSpecifier","overrides":[],"src":"2230:8:81"},"parameters":{"id":11253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11252,"mutability":"mutable","name":"admin","nameLocation":"2214:5:81","nodeType":"VariableDeclaration","scope":11262,"src":"2206:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11251,"name":"address","nodeType":"ElementaryTypeName","src":"2206:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2205:15:81"},"returnParameters":{"id":11255,"nodeType":"ParameterList","parameters":[],"src":"2239:0:81"},"scope":11455,"src":"2179:109:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3754],"body":{"id":11274,"nodeType":"Block","src":"2385:50:81","statements":[{"expression":{"arguments":[{"id":11270,"name":"EMERGENCY_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11129,"src":"2402:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11271,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11265,"src":"2424:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11269,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"2391:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2391:39:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11273,"nodeType":"ExpressionStatement","src":"2391:39:81"}]},"documentation":{"id":11263,"nodeType":"StructuredDocumentation","src":"2292:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"7a9a93f4","id":11275,"implemented":true,"kind":"function","modifiers":[],"name":"removeEmergencyAdmin","nameLocation":"2331:20:81","nodeType":"FunctionDefinition","overrides":{"id":11267,"nodeType":"OverrideSpecifier","overrides":[],"src":"2376:8:81"},"parameters":{"id":11266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11265,"mutability":"mutable","name":"admin","nameLocation":"2360:5:81","nodeType":"VariableDeclaration","scope":11275,"src":"2352:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11264,"name":"address","nodeType":"ElementaryTypeName","src":"2352:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2351:15:81"},"returnParameters":{"id":11268,"nodeType":"ParameterList","parameters":[],"src":"2385:0:81"},"scope":11455,"src":"2322:113:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3762],"body":{"id":11289,"nodeType":"Block","src":"2548:54:81","statements":[{"expression":{"arguments":[{"id":11285,"name":"EMERGENCY_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11129,"src":"2569:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11286,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11278,"src":"2591:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11284,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"2561:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":11287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2561:36:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11283,"id":11288,"nodeType":"Return","src":"2554:43:81"}]},"documentation":{"id":11276,"nodeType":"StructuredDocumentation","src":"2439:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"2500f2b6","id":11290,"implemented":true,"kind":"function","modifiers":[],"name":"isEmergencyAdmin","nameLocation":"2478:16:81","nodeType":"FunctionDefinition","overrides":{"id":11280,"nodeType":"OverrideSpecifier","overrides":[],"src":"2524:8:81"},"parameters":{"id":11279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11278,"mutability":"mutable","name":"admin","nameLocation":"2503:5:81","nodeType":"VariableDeclaration","scope":11290,"src":"2495:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11277,"name":"address","nodeType":"ElementaryTypeName","src":"2495:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2494:15:81"},"returnParameters":{"id":11283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11282,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11290,"src":"2542:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11281,"name":"bool","nodeType":"ElementaryTypeName","src":"2542:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2541:6:81"},"scope":11455,"src":"2469:133:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3768],"body":{"id":11302,"nodeType":"Block","src":"2691:44:81","statements":[{"expression":{"arguments":[{"id":11298,"name":"RISK_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11135,"src":"2707:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11299,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11293,"src":"2724:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11297,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"2697:9:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2697:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11301,"nodeType":"ExpressionStatement","src":"2697:33:81"}]},"documentation":{"id":11291,"nodeType":"StructuredDocumentation","src":"2606:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"5b9a94e4","id":11303,"implemented":true,"kind":"function","modifiers":[],"name":"addRiskAdmin","nameLocation":"2645:12:81","nodeType":"FunctionDefinition","overrides":{"id":11295,"nodeType":"OverrideSpecifier","overrides":[],"src":"2682:8:81"},"parameters":{"id":11294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11293,"mutability":"mutable","name":"admin","nameLocation":"2666:5:81","nodeType":"VariableDeclaration","scope":11303,"src":"2658:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11292,"name":"address","nodeType":"ElementaryTypeName","src":"2658:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2657:15:81"},"returnParameters":{"id":11296,"nodeType":"ParameterList","parameters":[],"src":"2691:0:81"},"scope":11455,"src":"2636:99:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3774],"body":{"id":11315,"nodeType":"Block","src":"2827:45:81","statements":[{"expression":{"arguments":[{"id":11311,"name":"RISK_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11135,"src":"2844:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11312,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11306,"src":"2861:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11310,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"2833:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2833:34:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11314,"nodeType":"ExpressionStatement","src":"2833:34:81"}]},"documentation":{"id":11304,"nodeType":"StructuredDocumentation","src":"2739:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"3c5a08e5","id":11316,"implemented":true,"kind":"function","modifiers":[],"name":"removeRiskAdmin","nameLocation":"2778:15:81","nodeType":"FunctionDefinition","overrides":{"id":11308,"nodeType":"OverrideSpecifier","overrides":[],"src":"2818:8:81"},"parameters":{"id":11307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11306,"mutability":"mutable","name":"admin","nameLocation":"2802:5:81","nodeType":"VariableDeclaration","scope":11316,"src":"2794:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11305,"name":"address","nodeType":"ElementaryTypeName","src":"2794:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2793:15:81"},"returnParameters":{"id":11309,"nodeType":"ParameterList","parameters":[],"src":"2827:0:81"},"scope":11455,"src":"2769:103:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3782],"body":{"id":11330,"nodeType":"Block","src":"2980:49:81","statements":[{"expression":{"arguments":[{"id":11326,"name":"RISK_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11135,"src":"3001:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11327,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11319,"src":"3018:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11325,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"2993:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":11328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2993:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11324,"id":11329,"nodeType":"Return","src":"2986:38:81"}]},"documentation":{"id":11317,"nodeType":"StructuredDocumentation","src":"2876:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"674b5e4d","id":11331,"implemented":true,"kind":"function","modifiers":[],"name":"isRiskAdmin","nameLocation":"2915:11:81","nodeType":"FunctionDefinition","overrides":{"id":11321,"nodeType":"OverrideSpecifier","overrides":[],"src":"2956:8:81"},"parameters":{"id":11320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11319,"mutability":"mutable","name":"admin","nameLocation":"2935:5:81","nodeType":"VariableDeclaration","scope":11331,"src":"2927:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11318,"name":"address","nodeType":"ElementaryTypeName","src":"2927:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2926:15:81"},"returnParameters":{"id":11324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11331,"src":"2974:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11322,"name":"bool","nodeType":"ElementaryTypeName","src":"2974:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2973:6:81"},"scope":11455,"src":"2906:123:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3788],"body":{"id":11343,"nodeType":"Block","src":"3125:51:81","statements":[{"expression":{"arguments":[{"id":11339,"name":"FLASH_BORROWER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11141,"src":"3141:19:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11340,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11334,"src":"3162:8:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11338,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"3131:9:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3131:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11342,"nodeType":"ExpressionStatement","src":"3131:40:81"}]},"documentation":{"id":11332,"nodeType":"StructuredDocumentation","src":"3033:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"9ac9d80b","id":11344,"implemented":true,"kind":"function","modifiers":[],"name":"addFlashBorrower","nameLocation":"3072:16:81","nodeType":"FunctionDefinition","overrides":{"id":11336,"nodeType":"OverrideSpecifier","overrides":[],"src":"3116:8:81"},"parameters":{"id":11335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11334,"mutability":"mutable","name":"borrower","nameLocation":"3097:8:81","nodeType":"VariableDeclaration","scope":11344,"src":"3089:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11333,"name":"address","nodeType":"ElementaryTypeName","src":"3089:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3088:18:81"},"returnParameters":{"id":11337,"nodeType":"ParameterList","parameters":[],"src":"3125:0:81"},"scope":11455,"src":"3063:113:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3794],"body":{"id":11356,"nodeType":"Block","src":"3275:52:81","statements":[{"expression":{"arguments":[{"id":11352,"name":"FLASH_BORROWER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11141,"src":"3292:19:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11353,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"3313:8:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11351,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"3281:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3281:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11355,"nodeType":"ExpressionStatement","src":"3281:41:81"}]},"documentation":{"id":11345,"nodeType":"StructuredDocumentation","src":"3180:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"253cf980","id":11357,"implemented":true,"kind":"function","modifiers":[],"name":"removeFlashBorrower","nameLocation":"3219:19:81","nodeType":"FunctionDefinition","overrides":{"id":11349,"nodeType":"OverrideSpecifier","overrides":[],"src":"3266:8:81"},"parameters":{"id":11348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11347,"mutability":"mutable","name":"borrower","nameLocation":"3247:8:81","nodeType":"VariableDeclaration","scope":11357,"src":"3239:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11346,"name":"address","nodeType":"ElementaryTypeName","src":"3239:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3238:18:81"},"returnParameters":{"id":11350,"nodeType":"ParameterList","parameters":[],"src":"3275:0:81"},"scope":11455,"src":"3210:117:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3802],"body":{"id":11371,"nodeType":"Block","src":"3442:56:81","statements":[{"expression":{"arguments":[{"id":11367,"name":"FLASH_BORROWER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11141,"src":"3463:19:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11368,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11360,"src":"3484:8:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11366,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"3455:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":11369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3455:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11365,"id":11370,"nodeType":"Return","src":"3448:45:81"}]},"documentation":{"id":11358,"nodeType":"StructuredDocumentation","src":"3331:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"fa50f297","id":11372,"implemented":true,"kind":"function","modifiers":[],"name":"isFlashBorrower","nameLocation":"3370:15:81","nodeType":"FunctionDefinition","overrides":{"id":11362,"nodeType":"OverrideSpecifier","overrides":[],"src":"3418:8:81"},"parameters":{"id":11361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11360,"mutability":"mutable","name":"borrower","nameLocation":"3394:8:81","nodeType":"VariableDeclaration","scope":11372,"src":"3386:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11359,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3385:18:81"},"returnParameters":{"id":11365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11372,"src":"3436:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11363,"name":"bool","nodeType":"ElementaryTypeName","src":"3436:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3435:6:81"},"scope":11455,"src":"3361:137:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3808],"body":{"id":11384,"nodeType":"Block","src":"3585:41:81","statements":[{"expression":{"arguments":[{"id":11380,"name":"BRIDGE_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11147,"src":"3601:11:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11381,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11375,"src":"3614:6:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11379,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"3591:9:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3591:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11383,"nodeType":"ExpressionStatement","src":"3591:30:81"}]},"documentation":{"id":11373,"nodeType":"StructuredDocumentation","src":"3502:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"9712fdf8","id":11385,"implemented":true,"kind":"function","modifiers":[],"name":"addBridge","nameLocation":"3541:9:81","nodeType":"FunctionDefinition","overrides":{"id":11377,"nodeType":"OverrideSpecifier","overrides":[],"src":"3576:8:81"},"parameters":{"id":11376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11375,"mutability":"mutable","name":"bridge","nameLocation":"3559:6:81","nodeType":"VariableDeclaration","scope":11385,"src":"3551:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11374,"name":"address","nodeType":"ElementaryTypeName","src":"3551:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3550:16:81"},"returnParameters":{"id":11378,"nodeType":"ParameterList","parameters":[],"src":"3585:0:81"},"scope":11455,"src":"3532:94:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3814],"body":{"id":11397,"nodeType":"Block","src":"3716:42:81","statements":[{"expression":{"arguments":[{"id":11393,"name":"BRIDGE_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11147,"src":"3733:11:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11394,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11388,"src":"3746:6:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11392,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"3722:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3722:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11396,"nodeType":"ExpressionStatement","src":"3722:31:81"}]},"documentation":{"id":11386,"nodeType":"StructuredDocumentation","src":"3630:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"04df017d","id":11398,"implemented":true,"kind":"function","modifiers":[],"name":"removeBridge","nameLocation":"3669:12:81","nodeType":"FunctionDefinition","overrides":{"id":11390,"nodeType":"OverrideSpecifier","overrides":[],"src":"3707:8:81"},"parameters":{"id":11389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11388,"mutability":"mutable","name":"bridge","nameLocation":"3690:6:81","nodeType":"VariableDeclaration","scope":11398,"src":"3682:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11387,"name":"address","nodeType":"ElementaryTypeName","src":"3682:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3681:16:81"},"returnParameters":{"id":11391,"nodeType":"ParameterList","parameters":[],"src":"3716:0:81"},"scope":11455,"src":"3660:98:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3822],"body":{"id":11412,"nodeType":"Block","src":"3864:46:81","statements":[{"expression":{"arguments":[{"id":11408,"name":"BRIDGE_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11147,"src":"3885:11:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11409,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11401,"src":"3898:6:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11407,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"3877:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":11410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3877:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11406,"id":11411,"nodeType":"Return","src":"3870:35:81"}]},"documentation":{"id":11399,"nodeType":"StructuredDocumentation","src":"3762:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"726600ce","id":11413,"implemented":true,"kind":"function","modifiers":[],"name":"isBridge","nameLocation":"3801:8:81","nodeType":"FunctionDefinition","overrides":{"id":11403,"nodeType":"OverrideSpecifier","overrides":[],"src":"3840:8:81"},"parameters":{"id":11402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11401,"mutability":"mutable","name":"bridge","nameLocation":"3818:6:81","nodeType":"VariableDeclaration","scope":11413,"src":"3810:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11400,"name":"address","nodeType":"ElementaryTypeName","src":"3810:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3809:16:81"},"returnParameters":{"id":11406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11413,"src":"3858:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11404,"name":"bool","nodeType":"ElementaryTypeName","src":"3858:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3857:6:81"},"scope":11455,"src":"3792:118:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3828],"body":{"id":11425,"nodeType":"Block","src":"4007:53:81","statements":[{"expression":{"arguments":[{"id":11421,"name":"ASSET_LISTING_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"4023:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11422,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11416,"src":"4049:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11420,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"4013:9:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4013:42:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11424,"nodeType":"ExpressionStatement","src":"4013:42:81"}]},"documentation":{"id":11414,"nodeType":"StructuredDocumentation","src":"3914:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"9a2b96f7","id":11426,"implemented":true,"kind":"function","modifiers":[],"name":"addAssetListingAdmin","nameLocation":"3953:20:81","nodeType":"FunctionDefinition","overrides":{"id":11418,"nodeType":"OverrideSpecifier","overrides":[],"src":"3998:8:81"},"parameters":{"id":11417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11416,"mutability":"mutable","name":"admin","nameLocation":"3982:5:81","nodeType":"VariableDeclaration","scope":11426,"src":"3974:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11415,"name":"address","nodeType":"ElementaryTypeName","src":"3974:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3973:15:81"},"returnParameters":{"id":11419,"nodeType":"ParameterList","parameters":[],"src":"4007:0:81"},"scope":11455,"src":"3944:116:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3834],"body":{"id":11438,"nodeType":"Block","src":"4160:54:81","statements":[{"expression":{"arguments":[{"id":11434,"name":"ASSET_LISTING_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"4177:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11435,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11429,"src":"4203:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11433,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"4166:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4166:43:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11437,"nodeType":"ExpressionStatement","src":"4166:43:81"}]},"documentation":{"id":11427,"nodeType":"StructuredDocumentation","src":"4064:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"a21bce15","id":11439,"implemented":true,"kind":"function","modifiers":[],"name":"removeAssetListingAdmin","nameLocation":"4103:23:81","nodeType":"FunctionDefinition","overrides":{"id":11431,"nodeType":"OverrideSpecifier","overrides":[],"src":"4151:8:81"},"parameters":{"id":11430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11429,"mutability":"mutable","name":"admin","nameLocation":"4135:5:81","nodeType":"VariableDeclaration","scope":11439,"src":"4127:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11428,"name":"address","nodeType":"ElementaryTypeName","src":"4127:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4126:15:81"},"returnParameters":{"id":11432,"nodeType":"ParameterList","parameters":[],"src":"4160:0:81"},"scope":11455,"src":"4094:120:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3842],"body":{"id":11453,"nodeType":"Block","src":"4330:58:81","statements":[{"expression":{"arguments":[{"id":11449,"name":"ASSET_LISTING_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"4351:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11450,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11442,"src":"4377:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11448,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"4343:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":11451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4343:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11447,"id":11452,"nodeType":"Return","src":"4336:47:81"}]},"documentation":{"id":11440,"nodeType":"StructuredDocumentation","src":"4218:27:81","text":"@inheritdoc IACLManager"},"functionSelector":"13ee32e0","id":11454,"implemented":true,"kind":"function","modifiers":[],"name":"isAssetListingAdmin","nameLocation":"4257:19:81","nodeType":"FunctionDefinition","overrides":{"id":11444,"nodeType":"OverrideSpecifier","overrides":[],"src":"4306:8:81"},"parameters":{"id":11443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11442,"mutability":"mutable","name":"admin","nameLocation":"4285:5:81","nodeType":"VariableDeclaration","scope":11454,"src":"4277:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11441,"name":"address","nodeType":"ElementaryTypeName","src":"4277:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4276:15:81"},"returnParameters":{"id":11447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11446,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11454,"src":"4324:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11445,"name":"bool","nodeType":"ElementaryTypeName","src":"4324:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4323:6:81"},"scope":11455,"src":"4248:140:81","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":11456,"src":"489:3901:81","usedErrors":[]}],"src":"37:4354:81"},"id":81},"contracts/protocol/configuration/PoolAddressesProvider.sol":{"ast":{"absolutePath":"contracts/protocol/configuration/PoolAddressesProvider.sol","exportedSymbols":{"IPoolAddressesProvider":[5282],"InitializableImmutableAdminUpgradeabilityProxy":[12669],"Ownable":[1573],"PoolAddressesProvider":[12040]},"id":12041,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":11457,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:82"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"../../dependencies/openzeppelin/contracts/Ownable.sol","id":11459,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12041,"sourceUnit":1574,"src":"63:78:82","symbolAliases":[{"foreign":{"id":11458,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":11461,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12041,"sourceUnit":5283,"src":"142:83:82","symbolAliases":[{"foreign":{"id":11460,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:22:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","file":"../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","id":11463,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12041,"sourceUnit":12670,"src":"226:147:82","symbolAliases":[{"foreign":{"id":11462,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"234:46:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":11465,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"706:7:82"},"id":11466,"nodeType":"InheritanceSpecifier","src":"706:7:82"},{"baseName":{"id":11467,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"715:22:82"},"id":11468,"nodeType":"InheritanceSpecifier","src":"715:22:82"}],"canonicalName":"PoolAddressesProvider","contractDependencies":[12669],"contractKind":"contract","documentation":{"id":11464,"nodeType":"StructuredDocumentation","src":"375:296:82","text":" @title PoolAddressesProvider\n @author Aave\n @notice Main registry of addresses part of or connected to the protocol, including permissioned roles\n @dev Acts as factory of proxies and admin of those, so with right to change its implementations\n @dev Owned by the Aave Governance"},"fullyImplemented":true,"id":12040,"linearizedBaseContracts":[12040,5282,1573,748],"name":"PoolAddressesProvider","nameLocation":"681:21:82","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":11470,"mutability":"mutable","name":"_marketId","nameLocation":"792:9:82","nodeType":"VariableDeclaration","scope":12040,"src":"777:24:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":11469,"name":"string","nodeType":"ElementaryTypeName","src":"777:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":11474,"mutability":"mutable","name":"_addresses","nameLocation":"909:10:82","nodeType":"VariableDeclaration","scope":12040,"src":"873:46:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":11473,"keyType":{"id":11471,"name":"bytes32","nodeType":"ElementaryTypeName","src":"881:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"873:27:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueType":{"id":11472,"name":"address","nodeType":"ElementaryTypeName","src":"892:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":true,"id":11477,"mutability":"constant","name":"POOL","nameLocation":"971:4:82","nodeType":"VariableDeclaration","scope":12040,"src":"946:38:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11475,"name":"bytes32","nodeType":"ElementaryTypeName","src":"946:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"504f4f4c","id":11476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"978:6:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_5d5c2d2522b7f6ec8d1c86f44956b9ecd4376b1842cd263d54a5368aa149486d","typeString":"literal_string \"POOL\""},"value":"POOL"},"visibility":"private"},{"constant":true,"id":11480,"mutability":"constant","name":"POOL_CONFIGURATOR","nameLocation":"1013:17:82","nodeType":"VariableDeclaration","scope":12040,"src":"988:64:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11478,"name":"bytes32","nodeType":"ElementaryTypeName","src":"988:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"504f4f4c5f434f4e464947555241544f52","id":11479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1033:19:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_7ac30f54e4a5d88ecad45a0103446836c9967d1e8d22f2fbe70930162fb0624b","typeString":"literal_string \"POOL_CONFIGURATOR\""},"value":"POOL_CONFIGURATOR"},"visibility":"private"},{"constant":true,"id":11483,"mutability":"constant","name":"PRICE_ORACLE","nameLocation":"1081:12:82","nodeType":"VariableDeclaration","scope":12040,"src":"1056:54:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11481,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1056:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"50524943455f4f5241434c45","id":11482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1096:14:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_dd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d8","typeString":"literal_string \"PRICE_ORACLE\""},"value":"PRICE_ORACLE"},"visibility":"private"},{"constant":true,"id":11486,"mutability":"constant","name":"ACL_MANAGER","nameLocation":"1139:11:82","nodeType":"VariableDeclaration","scope":12040,"src":"1114:52:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11484,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1114:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"41434c5f4d414e41474552","id":11485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1153:13:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_c287a3aa39c31ece62d3fa9ff394eec87eda2b6600ae0d39b3edebe7593fce72","typeString":"literal_string \"ACL_MANAGER\""},"value":"ACL_MANAGER"},"visibility":"private"},{"constant":true,"id":11489,"mutability":"constant","name":"ACL_ADMIN","nameLocation":"1195:9:82","nodeType":"VariableDeclaration","scope":12040,"src":"1170:48:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11487,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1170:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"41434c5f41444d494e","id":11488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1207:11:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_7b712d922b13ad4caade18fe1173c3b60a52cf9139e1553859c7067333972244","typeString":"literal_string \"ACL_ADMIN\""},"value":"ACL_ADMIN"},"visibility":"private"},{"constant":true,"id":11492,"mutability":"constant","name":"PRICE_ORACLE_SENTINEL","nameLocation":"1247:21:82","nodeType":"VariableDeclaration","scope":12040,"src":"1222:72:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11490,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1222:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"50524943455f4f5241434c455f53454e54494e454c","id":11491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1271:23:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_850bfd4b118fcb6d899cca9a9fb41471772c200f1c36c2493c98d3bc7a305d65","typeString":"literal_string \"PRICE_ORACLE_SENTINEL\""},"value":"PRICE_ORACLE_SENTINEL"},"visibility":"private"},{"constant":true,"id":11495,"mutability":"constant","name":"DATA_PROVIDER","nameLocation":"1323:13:82","nodeType":"VariableDeclaration","scope":12040,"src":"1298:56:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11493,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1298:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"444154415f50524f5649444552","id":11494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1339:15:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_5164d5c7193030abda56ab2da6b1ecfb83373a1a97075675ab8548ca2be633d9","typeString":"literal_string \"DATA_PROVIDER\""},"value":"DATA_PROVIDER"},"visibility":"private"},{"body":{"id":11511,"nodeType":"Block","src":"1550:63:82","statements":[{"expression":{"arguments":[{"id":11504,"name":"marketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11498,"src":"1569:8:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11503,"name":"_setMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11997,"src":"1556:12:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":11505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1556:22:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11506,"nodeType":"ExpressionStatement","src":"1556:22:82"},{"expression":{"arguments":[{"id":11508,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11500,"src":"1602:5:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11507,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1584:17:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":11509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1584:24:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11510,"nodeType":"ExpressionStatement","src":"1584:24:82"}]},"documentation":{"id":11496,"nodeType":"StructuredDocumentation","src":"1359:137:82","text":" @dev Constructor.\n @param marketId The identifier of the market.\n @param owner The owner address of this contract."},"id":11512,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":11501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11498,"mutability":"mutable","name":"marketId","nameLocation":"1525:8:82","nodeType":"VariableDeclaration","scope":11512,"src":"1511:22:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11497,"name":"string","nodeType":"ElementaryTypeName","src":"1511:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":11500,"mutability":"mutable","name":"owner","nameLocation":"1543:5:82","nodeType":"VariableDeclaration","scope":11512,"src":"1535:13:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11499,"name":"address","nodeType":"ElementaryTypeName","src":"1535:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1510:39:82"},"returnParameters":{"id":11502,"nodeType":"ParameterList","parameters":[],"src":"1550:0:82"},"scope":12040,"src":"1499:114:82","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5167],"body":{"id":11521,"nodeType":"Block","src":"1728:27:82","statements":[{"expression":{"id":11519,"name":"_marketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11470,"src":"1741:9:82","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":11518,"id":11520,"nodeType":"Return","src":"1734:16:82"}]},"documentation":{"id":11513,"nodeType":"StructuredDocumentation","src":"1617:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"568ef470","id":11522,"implemented":true,"kind":"function","modifiers":[],"name":"getMarketId","nameLocation":"1667:11:82","nodeType":"FunctionDefinition","overrides":{"id":11515,"nodeType":"OverrideSpecifier","overrides":[],"src":"1695:8:82"},"parameters":{"id":11514,"nodeType":"ParameterList","parameters":[],"src":"1678:2:82"},"returnParameters":{"id":11518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11517,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11522,"src":"1713:13:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11516,"name":"string","nodeType":"ElementaryTypeName","src":"1713:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1712:15:82"},"scope":12040,"src":"1658:97:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5173],"body":{"id":11535,"nodeType":"Block","src":"1876:36:82","statements":[{"expression":{"arguments":[{"id":11532,"name":"newMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11525,"src":"1895:11:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11531,"name":"_setMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11997,"src":"1882:12:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":11533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1882:25:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11534,"nodeType":"ExpressionStatement","src":"1882:25:82"}]},"documentation":{"id":11523,"nodeType":"StructuredDocumentation","src":"1759:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"f67b1847","id":11536,"implemented":true,"kind":"function","modifiers":[{"id":11529,"kind":"modifierInvocation","modifierName":{"id":11528,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1866:9:82"},"nodeType":"ModifierInvocation","src":"1866:9:82"}],"name":"setMarketId","nameLocation":"1809:11:82","nodeType":"FunctionDefinition","overrides":{"id":11527,"nodeType":"OverrideSpecifier","overrides":[],"src":"1857:8:82"},"parameters":{"id":11526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11525,"mutability":"mutable","name":"newMarketId","nameLocation":"1835:11:82","nodeType":"VariableDeclaration","scope":11536,"src":"1821:25:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11524,"name":"string","nodeType":"ElementaryTypeName","src":"1821:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1820:27:82"},"returnParameters":{"id":11530,"nodeType":"ParameterList","parameters":[],"src":"1876:0:82"},"scope":12040,"src":"1800:112:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5181],"body":{"id":11549,"nodeType":"Block","src":"2028:32:82","statements":[{"expression":{"baseExpression":{"id":11545,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"2041:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11547,"indexExpression":{"id":11546,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11539,"src":"2052:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2041:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11544,"id":11548,"nodeType":"Return","src":"2034:21:82"}]},"documentation":{"id":11537,"nodeType":"StructuredDocumentation","src":"1916:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"21f8a721","id":11550,"implemented":true,"kind":"function","modifiers":[],"name":"getAddress","nameLocation":"1966:10:82","nodeType":"FunctionDefinition","overrides":{"id":11541,"nodeType":"OverrideSpecifier","overrides":[],"src":"2001:8:82"},"parameters":{"id":11540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11539,"mutability":"mutable","name":"id","nameLocation":"1985:2:82","nodeType":"VariableDeclaration","scope":11550,"src":"1977:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11538,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1977:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1976:12:82"},"returnParameters":{"id":11544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11550,"src":"2019:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11542,"name":"address","nodeType":"ElementaryTypeName","src":"2019:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2018:9:82"},"scope":12040,"src":"1957:103:82","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[5197],"body":{"id":11579,"nodeType":"Block","src":"2185:128:82","statements":[{"assignments":[11562],"declarations":[{"constant":false,"id":11562,"mutability":"mutable","name":"oldAddress","nameLocation":"2199:10:82","nodeType":"VariableDeclaration","scope":11579,"src":"2191:18:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11561,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11566,"initialValue":{"baseExpression":{"id":11563,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"2212:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11565,"indexExpression":{"id":11564,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11553,"src":"2223:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2212:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2191:35:82"},{"expression":{"id":11571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11567,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"2232:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11569,"indexExpression":{"id":11568,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11553,"src":"2243:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2232:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11570,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11555,"src":"2249:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2232:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11572,"nodeType":"ExpressionStatement","src":"2232:27:82"},{"eventCall":{"arguments":[{"id":11574,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11553,"src":"2281:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11575,"name":"oldAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11562,"src":"2285:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11576,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11555,"src":"2297:10: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":11573,"name":"AddressSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5150,"src":"2270:10:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":11577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2270:38:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11578,"nodeType":"EmitStatement","src":"2265:43:82"}]},"documentation":{"id":11551,"nodeType":"StructuredDocumentation","src":"2064:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"ca446dd9","id":11580,"implemented":true,"kind":"function","modifiers":[{"id":11559,"kind":"modifierInvocation","modifierName":{"id":11558,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2175:9:82"},"nodeType":"ModifierInvocation","src":"2175:9:82"}],"name":"setAddress","nameLocation":"2114:10:82","nodeType":"FunctionDefinition","overrides":{"id":11557,"nodeType":"OverrideSpecifier","overrides":[],"src":"2166:8:82"},"parameters":{"id":11556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11553,"mutability":"mutable","name":"id","nameLocation":"2133:2:82","nodeType":"VariableDeclaration","scope":11580,"src":"2125:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11552,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2125:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11555,"mutability":"mutable","name":"newAddress","nameLocation":"2145:10:82","nodeType":"VariableDeclaration","scope":11580,"src":"2137:18:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11554,"name":"address","nodeType":"ElementaryTypeName","src":"2137:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2124:32:82"},"returnParameters":{"id":11560,"nodeType":"ParameterList","parameters":[],"src":"2185:0:82"},"scope":12040,"src":"2105:208:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5189],"body":{"id":11615,"nodeType":"Block","src":"2471:261:82","statements":[{"assignments":[11592],"declarations":[{"constant":false,"id":11592,"mutability":"mutable","name":"proxyAddress","nameLocation":"2485:12:82","nodeType":"VariableDeclaration","scope":11615,"src":"2477:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11591,"name":"address","nodeType":"ElementaryTypeName","src":"2477:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11596,"initialValue":{"baseExpression":{"id":11593,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"2500:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11595,"indexExpression":{"id":11594,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11583,"src":"2511:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2500:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2477:37:82"},{"assignments":[11598],"declarations":[{"constant":false,"id":11598,"mutability":"mutable","name":"oldImplementationAddress","nameLocation":"2528:24:82","nodeType":"VariableDeclaration","scope":11615,"src":"2520:32:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11597,"name":"address","nodeType":"ElementaryTypeName","src":"2520:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11602,"initialValue":{"arguments":[{"id":11600,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11583,"src":"2579:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11599,"name":"_getProxyImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12039,"src":"2555:23:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) returns (address)"}},"id":11601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2555:27:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2520:62:82"},{"expression":{"arguments":[{"id":11604,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11583,"src":"2600:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11605,"name":"newImplementationAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11585,"src":"2604:24:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11603,"name":"_updateImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11977,"src":"2588:11:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2588:41:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11607,"nodeType":"ExpressionStatement","src":"2588:41:82"},{"eventCall":{"arguments":[{"id":11609,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11583,"src":"2658:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11610,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11592,"src":"2662:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11611,"name":"oldImplementationAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11598,"src":"2676:24:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11612,"name":"newImplementationAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11585,"src":"2702:24:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11608,"name":"AddressSetAsProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"2640:17:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address,address)"}},"id":11613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2640:87:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11614,"nodeType":"EmitStatement","src":"2635:92:82"}]},"documentation":{"id":11581,"nodeType":"StructuredDocumentation","src":"2317:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"5dcc528c","id":11616,"implemented":true,"kind":"function","modifiers":[{"id":11589,"kind":"modifierInvocation","modifierName":{"id":11588,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2461:9:82"},"nodeType":"ModifierInvocation","src":"2461:9:82"}],"name":"setAddressAsProxy","nameLocation":"2367:17:82","nodeType":"FunctionDefinition","overrides":{"id":11587,"nodeType":"OverrideSpecifier","overrides":[],"src":"2452:8:82"},"parameters":{"id":11586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11583,"mutability":"mutable","name":"id","nameLocation":"2398:2:82","nodeType":"VariableDeclaration","scope":11616,"src":"2390:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11582,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2390:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11585,"mutability":"mutable","name":"newImplementationAddress","nameLocation":"2414:24:82","nodeType":"VariableDeclaration","scope":11616,"src":"2406:32:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11584,"name":"address","nodeType":"ElementaryTypeName","src":"2406:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2384:58:82"},"returnParameters":{"id":11590,"nodeType":"ParameterList","parameters":[],"src":"2471:0:82"},"scope":12040,"src":"2358:374:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5203],"body":{"id":11627,"nodeType":"Block","src":"2837:34:82","statements":[{"expression":{"arguments":[{"id":11624,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11477,"src":"2861:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11623,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11550,"src":"2850:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":11625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2850:16:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11622,"id":11626,"nodeType":"Return","src":"2843:23:82"}]},"documentation":{"id":11617,"nodeType":"StructuredDocumentation","src":"2736:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"026b1d5f","id":11628,"implemented":true,"kind":"function","modifiers":[],"name":"getPool","nameLocation":"2786:7:82","nodeType":"FunctionDefinition","overrides":{"id":11619,"nodeType":"OverrideSpecifier","overrides":[],"src":"2810:8:82"},"parameters":{"id":11618,"nodeType":"ParameterList","parameters":[],"src":"2793:2:82"},"returnParameters":{"id":11622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11628,"src":"2828:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11620,"name":"address","nodeType":"ElementaryTypeName","src":"2828:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2827:9:82"},"scope":12040,"src":"2777:94:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5209],"body":{"id":11653,"nodeType":"Block","src":"2986:146:82","statements":[{"assignments":[11638],"declarations":[{"constant":false,"id":11638,"mutability":"mutable","name":"oldPoolImpl","nameLocation":"3000:11:82","nodeType":"VariableDeclaration","scope":11653,"src":"2992:19:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11637,"name":"address","nodeType":"ElementaryTypeName","src":"2992:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11642,"initialValue":{"arguments":[{"id":11640,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11477,"src":"3038:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11639,"name":"_getProxyImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12039,"src":"3014:23:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) returns (address)"}},"id":11641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3014:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2992:51:82"},{"expression":{"arguments":[{"id":11644,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11477,"src":"3061:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11645,"name":"newPoolImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11631,"src":"3067:11:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11643,"name":"_updateImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11977,"src":"3049:11:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3049:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11647,"nodeType":"ExpressionStatement","src":"3049:30:82"},{"eventCall":{"arguments":[{"id":11649,"name":"oldPoolImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11638,"src":"3102:11:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11650,"name":"newPoolImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11631,"src":"3115:11:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11648,"name":"PoolUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5090,"src":"3090:11:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":11651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3090:37:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11652,"nodeType":"EmitStatement","src":"3085:42:82"}]},"documentation":{"id":11629,"nodeType":"StructuredDocumentation","src":"2875:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"a1564406","id":11654,"implemented":true,"kind":"function","modifiers":[{"id":11635,"kind":"modifierInvocation","modifierName":{"id":11634,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2976:9:82"},"nodeType":"ModifierInvocation","src":"2976:9:82"}],"name":"setPoolImpl","nameLocation":"2925:11:82","nodeType":"FunctionDefinition","overrides":{"id":11633,"nodeType":"OverrideSpecifier","overrides":[],"src":"2967:8:82"},"parameters":{"id":11632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11631,"mutability":"mutable","name":"newPoolImpl","nameLocation":"2945:11:82","nodeType":"VariableDeclaration","scope":11654,"src":"2937:19:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11630,"name":"address","nodeType":"ElementaryTypeName","src":"2937:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2936:21:82"},"returnParameters":{"id":11636,"nodeType":"ParameterList","parameters":[],"src":"2986:0:82"},"scope":12040,"src":"2916:216:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5215],"body":{"id":11665,"nodeType":"Block","src":"3249:47:82","statements":[{"expression":{"arguments":[{"id":11662,"name":"POOL_CONFIGURATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11480,"src":"3273:17:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11661,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11550,"src":"3262:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":11663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3262:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11660,"id":11664,"nodeType":"Return","src":"3255:36:82"}]},"documentation":{"id":11655,"nodeType":"StructuredDocumentation","src":"3136:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"631adfca","id":11666,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolConfigurator","nameLocation":"3186:19:82","nodeType":"FunctionDefinition","overrides":{"id":11657,"nodeType":"OverrideSpecifier","overrides":[],"src":"3222:8:82"},"parameters":{"id":11656,"nodeType":"ParameterList","parameters":[],"src":"3205:2:82"},"returnParameters":{"id":11660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11659,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11666,"src":"3240:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11658,"name":"address","nodeType":"ElementaryTypeName","src":"3240:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3239:9:82"},"scope":12040,"src":"3177:119:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5221],"body":{"id":11691,"nodeType":"Block","src":"3435:232:82","statements":[{"assignments":[11676],"declarations":[{"constant":false,"id":11676,"mutability":"mutable","name":"oldPoolConfiguratorImpl","nameLocation":"3449:23:82","nodeType":"VariableDeclaration","scope":11691,"src":"3441:31:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11675,"name":"address","nodeType":"ElementaryTypeName","src":"3441:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11680,"initialValue":{"arguments":[{"id":11678,"name":"POOL_CONFIGURATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11480,"src":"3499:17:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11677,"name":"_getProxyImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12039,"src":"3475:23:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) returns (address)"}},"id":11679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3475:42:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3441:76:82"},{"expression":{"arguments":[{"id":11682,"name":"POOL_CONFIGURATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11480,"src":"3535:17:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11683,"name":"newPoolConfiguratorImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11669,"src":"3554:23:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11681,"name":"_updateImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11977,"src":"3523:11:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":11684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3523:55:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11685,"nodeType":"ExpressionStatement","src":"3523:55:82"},{"eventCall":{"arguments":[{"id":11687,"name":"oldPoolConfiguratorImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11676,"src":"3613:23:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11688,"name":"newPoolConfiguratorImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11669,"src":"3638:23:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11686,"name":"PoolConfiguratorUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5097,"src":"3589:23:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":11689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3589:73:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11690,"nodeType":"EmitStatement","src":"3584:78:82"}]},"documentation":{"id":11667,"nodeType":"StructuredDocumentation","src":"3300:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"e4ca28b7","id":11692,"implemented":true,"kind":"function","modifiers":[{"id":11673,"kind":"modifierInvocation","modifierName":{"id":11672,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"3425:9:82"},"nodeType":"ModifierInvocation","src":"3425:9:82"}],"name":"setPoolConfiguratorImpl","nameLocation":"3350:23:82","nodeType":"FunctionDefinition","overrides":{"id":11671,"nodeType":"OverrideSpecifier","overrides":[],"src":"3416:8:82"},"parameters":{"id":11670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11669,"mutability":"mutable","name":"newPoolConfiguratorImpl","nameLocation":"3382:23:82","nodeType":"VariableDeclaration","scope":11692,"src":"3374:31:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11668,"name":"address","nodeType":"ElementaryTypeName","src":"3374:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3373:33:82"},"returnParameters":{"id":11674,"nodeType":"ParameterList","parameters":[],"src":"3435:0:82"},"scope":12040,"src":"3341:326:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5227],"body":{"id":11703,"nodeType":"Block","src":"3779:42:82","statements":[{"expression":{"arguments":[{"id":11700,"name":"PRICE_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11483,"src":"3803:12:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11699,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11550,"src":"3792:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":11701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3792:24:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11698,"id":11702,"nodeType":"Return","src":"3785:31:82"}]},"documentation":{"id":11693,"nodeType":"StructuredDocumentation","src":"3671:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"fca513a8","id":11704,"implemented":true,"kind":"function","modifiers":[],"name":"getPriceOracle","nameLocation":"3721:14:82","nodeType":"FunctionDefinition","overrides":{"id":11695,"nodeType":"OverrideSpecifier","overrides":[],"src":"3752:8:82"},"parameters":{"id":11694,"nodeType":"ParameterList","parameters":[],"src":"3735:2:82"},"returnParameters":{"id":11698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11697,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11704,"src":"3770:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11696,"name":"address","nodeType":"ElementaryTypeName","src":"3770:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3769:9:82"},"scope":12040,"src":"3712:109:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5233],"body":{"id":11730,"nodeType":"Block","src":"3942:168:82","statements":[{"assignments":[11714],"declarations":[{"constant":false,"id":11714,"mutability":"mutable","name":"oldPriceOracle","nameLocation":"3956:14:82","nodeType":"VariableDeclaration","scope":11730,"src":"3948:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11713,"name":"address","nodeType":"ElementaryTypeName","src":"3948:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11718,"initialValue":{"baseExpression":{"id":11715,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"3973:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11717,"indexExpression":{"id":11716,"name":"PRICE_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11483,"src":"3984:12:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3973:24:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3948:49:82"},{"expression":{"id":11723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11719,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"4003:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11721,"indexExpression":{"id":11720,"name":"PRICE_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11483,"src":"4014:12:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4003:24:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11722,"name":"newPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11707,"src":"4030:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4003:41:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11724,"nodeType":"ExpressionStatement","src":"4003:41:82"},{"eventCall":{"arguments":[{"id":11726,"name":"oldPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11714,"src":"4074:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11727,"name":"newPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11707,"src":"4090:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11725,"name":"PriceOracleUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5104,"src":"4055:18:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":11728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4055:50:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11729,"nodeType":"EmitStatement","src":"4050:55:82"}]},"documentation":{"id":11705,"nodeType":"StructuredDocumentation","src":"3825:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"530e784f","id":11731,"implemented":true,"kind":"function","modifiers":[{"id":11711,"kind":"modifierInvocation","modifierName":{"id":11710,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"3932:9:82"},"nodeType":"ModifierInvocation","src":"3932:9:82"}],"name":"setPriceOracle","nameLocation":"3875:14:82","nodeType":"FunctionDefinition","overrides":{"id":11709,"nodeType":"OverrideSpecifier","overrides":[],"src":"3923:8:82"},"parameters":{"id":11708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11707,"mutability":"mutable","name":"newPriceOracle","nameLocation":"3898:14:82","nodeType":"VariableDeclaration","scope":11731,"src":"3890:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11706,"name":"address","nodeType":"ElementaryTypeName","src":"3890:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3889:24:82"},"returnParameters":{"id":11712,"nodeType":"ParameterList","parameters":[],"src":"3942:0:82"},"scope":12040,"src":"3866:244:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5239],"body":{"id":11742,"nodeType":"Block","src":"4221:41:82","statements":[{"expression":{"arguments":[{"id":11739,"name":"ACL_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"4245:11:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11738,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11550,"src":"4234:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":11740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4234:23:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11737,"id":11741,"nodeType":"Return","src":"4227:30:82"}]},"documentation":{"id":11732,"nodeType":"StructuredDocumentation","src":"4114:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"707cd716","id":11743,"implemented":true,"kind":"function","modifiers":[],"name":"getACLManager","nameLocation":"4164:13:82","nodeType":"FunctionDefinition","overrides":{"id":11734,"nodeType":"OverrideSpecifier","overrides":[],"src":"4194:8:82"},"parameters":{"id":11733,"nodeType":"ParameterList","parameters":[],"src":"4177:2:82"},"returnParameters":{"id":11737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11736,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11743,"src":"4212:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11735,"name":"address","nodeType":"ElementaryTypeName","src":"4212:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4211:9:82"},"scope":12040,"src":"4155:107:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5245],"body":{"id":11769,"nodeType":"Block","src":"4381:161:82","statements":[{"assignments":[11753],"declarations":[{"constant":false,"id":11753,"mutability":"mutable","name":"oldAclManager","nameLocation":"4395:13:82","nodeType":"VariableDeclaration","scope":11769,"src":"4387:21:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11752,"name":"address","nodeType":"ElementaryTypeName","src":"4387:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11757,"initialValue":{"baseExpression":{"id":11754,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"4411:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11756,"indexExpression":{"id":11755,"name":"ACL_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"4422:11:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4411:23:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4387:47:82"},{"expression":{"id":11762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11758,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"4440:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11760,"indexExpression":{"id":11759,"name":"ACL_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"4451:11:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4440:23:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11761,"name":"newAclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11746,"src":"4466:13:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4440:39:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11763,"nodeType":"ExpressionStatement","src":"4440:39:82"},{"eventCall":{"arguments":[{"id":11765,"name":"oldAclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11753,"src":"4508:13:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11766,"name":"newAclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11746,"src":"4523:13:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11764,"name":"ACLManagerUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5111,"src":"4490:17:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":11767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4490:47:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11768,"nodeType":"EmitStatement","src":"4485:52:82"}]},"documentation":{"id":11744,"nodeType":"StructuredDocumentation","src":"4266:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"ed301ca9","id":11770,"implemented":true,"kind":"function","modifiers":[{"id":11750,"kind":"modifierInvocation","modifierName":{"id":11749,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"4371:9:82"},"nodeType":"ModifierInvocation","src":"4371:9:82"}],"name":"setACLManager","nameLocation":"4316:13:82","nodeType":"FunctionDefinition","overrides":{"id":11748,"nodeType":"OverrideSpecifier","overrides":[],"src":"4362:8:82"},"parameters":{"id":11747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11746,"mutability":"mutable","name":"newAclManager","nameLocation":"4338:13:82","nodeType":"VariableDeclaration","scope":11770,"src":"4330:21:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11745,"name":"address","nodeType":"ElementaryTypeName","src":"4330:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4329:23:82"},"returnParameters":{"id":11751,"nodeType":"ParameterList","parameters":[],"src":"4381:0:82"},"scope":12040,"src":"4307:235:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5251],"body":{"id":11781,"nodeType":"Block","src":"4651:39:82","statements":[{"expression":{"arguments":[{"id":11778,"name":"ACL_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11489,"src":"4675:9:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11777,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11550,"src":"4664:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":11779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4664:21:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11776,"id":11780,"nodeType":"Return","src":"4657:28:82"}]},"documentation":{"id":11771,"nodeType":"StructuredDocumentation","src":"4546:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"0e67178c","id":11782,"implemented":true,"kind":"function","modifiers":[],"name":"getACLAdmin","nameLocation":"4596:11:82","nodeType":"FunctionDefinition","overrides":{"id":11773,"nodeType":"OverrideSpecifier","overrides":[],"src":"4624:8:82"},"parameters":{"id":11772,"nodeType":"ParameterList","parameters":[],"src":"4607:2:82"},"returnParameters":{"id":11776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11782,"src":"4642:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11774,"name":"address","nodeType":"ElementaryTypeName","src":"4642:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4641:9:82"},"scope":12040,"src":"4587:103:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5257],"body":{"id":11808,"nodeType":"Block","src":"4805:147:82","statements":[{"assignments":[11792],"declarations":[{"constant":false,"id":11792,"mutability":"mutable","name":"oldAclAdmin","nameLocation":"4819:11:82","nodeType":"VariableDeclaration","scope":11808,"src":"4811:19:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11791,"name":"address","nodeType":"ElementaryTypeName","src":"4811:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11796,"initialValue":{"baseExpression":{"id":11793,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"4833:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11795,"indexExpression":{"id":11794,"name":"ACL_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11489,"src":"4844:9:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4833:21:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4811:43:82"},{"expression":{"id":11801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11797,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"4860:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11799,"indexExpression":{"id":11798,"name":"ACL_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11489,"src":"4871:9:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4860:21:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11800,"name":"newAclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11785,"src":"4884:11:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4860:35:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11802,"nodeType":"ExpressionStatement","src":"4860:35:82"},{"eventCall":{"arguments":[{"id":11804,"name":"oldAclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11792,"src":"4922:11:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11805,"name":"newAclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11785,"src":"4935:11:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11803,"name":"ACLAdminUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5118,"src":"4906:15:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":11806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4906:41:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11807,"nodeType":"EmitStatement","src":"4901:46:82"}]},"documentation":{"id":11783,"nodeType":"StructuredDocumentation","src":"4694:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"76d84ffc","id":11809,"implemented":true,"kind":"function","modifiers":[{"id":11789,"kind":"modifierInvocation","modifierName":{"id":11788,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"4795:9:82"},"nodeType":"ModifierInvocation","src":"4795:9:82"}],"name":"setACLAdmin","nameLocation":"4744:11:82","nodeType":"FunctionDefinition","overrides":{"id":11787,"nodeType":"OverrideSpecifier","overrides":[],"src":"4786:8:82"},"parameters":{"id":11786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11785,"mutability":"mutable","name":"newAclAdmin","nameLocation":"4764:11:82","nodeType":"VariableDeclaration","scope":11809,"src":"4756:19:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11784,"name":"address","nodeType":"ElementaryTypeName","src":"4756:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4755:21:82"},"returnParameters":{"id":11790,"nodeType":"ParameterList","parameters":[],"src":"4805:0:82"},"scope":12040,"src":"4735:217:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5263],"body":{"id":11820,"nodeType":"Block","src":"5072:51:82","statements":[{"expression":{"arguments":[{"id":11817,"name":"PRICE_ORACLE_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11492,"src":"5096:21:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11816,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11550,"src":"5085:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":11818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5085:33:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11815,"id":11819,"nodeType":"Return","src":"5078:40:82"}]},"documentation":{"id":11810,"nodeType":"StructuredDocumentation","src":"4956:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"5eb88d3d","id":11821,"implemented":true,"kind":"function","modifiers":[],"name":"getPriceOracleSentinel","nameLocation":"5006:22:82","nodeType":"FunctionDefinition","overrides":{"id":11812,"nodeType":"OverrideSpecifier","overrides":[],"src":"5045:8:82"},"parameters":{"id":11811,"nodeType":"ParameterList","parameters":[],"src":"5028:2:82"},"returnParameters":{"id":11815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11814,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11821,"src":"5063:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11813,"name":"address","nodeType":"ElementaryTypeName","src":"5063:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5062:9:82"},"scope":12040,"src":"4997:126:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5269],"body":{"id":11847,"nodeType":"Block","src":"5260:226:82","statements":[{"assignments":[11831],"declarations":[{"constant":false,"id":11831,"mutability":"mutable","name":"oldPriceOracleSentinel","nameLocation":"5274:22:82","nodeType":"VariableDeclaration","scope":11847,"src":"5266:30:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11830,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11835,"initialValue":{"baseExpression":{"id":11832,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"5299:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11834,"indexExpression":{"id":11833,"name":"PRICE_ORACLE_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11492,"src":"5310:21:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5299:33:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5266:66:82"},{"expression":{"id":11840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11836,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"5338:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11838,"indexExpression":{"id":11837,"name":"PRICE_ORACLE_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11492,"src":"5349:21:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5338:33:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11839,"name":"newPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11824,"src":"5374:22:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5338:58:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11841,"nodeType":"ExpressionStatement","src":"5338:58:82"},{"eventCall":{"arguments":[{"id":11843,"name":"oldPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11831,"src":"5434:22:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11844,"name":"newPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11824,"src":"5458:22:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11842,"name":"PriceOracleSentinelUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5125,"src":"5407:26:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":11845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5407:74:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11846,"nodeType":"EmitStatement","src":"5402:79:82"}]},"documentation":{"id":11822,"nodeType":"StructuredDocumentation","src":"5127:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"74944cec","id":11848,"implemented":true,"kind":"function","modifiers":[{"id":11828,"kind":"modifierInvocation","modifierName":{"id":11827,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"5250:9:82"},"nodeType":"ModifierInvocation","src":"5250:9:82"}],"name":"setPriceOracleSentinel","nameLocation":"5177:22:82","nodeType":"FunctionDefinition","overrides":{"id":11826,"nodeType":"OverrideSpecifier","overrides":[],"src":"5241:8:82"},"parameters":{"id":11825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11824,"mutability":"mutable","name":"newPriceOracleSentinel","nameLocation":"5208:22:82","nodeType":"VariableDeclaration","scope":11848,"src":"5200:30:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11823,"name":"address","nodeType":"ElementaryTypeName","src":"5200:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5199:32:82"},"returnParameters":{"id":11829,"nodeType":"ParameterList","parameters":[],"src":"5260:0:82"},"scope":12040,"src":"5168:318:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5275],"body":{"id":11859,"nodeType":"Block","src":"5603:43:82","statements":[{"expression":{"arguments":[{"id":11856,"name":"DATA_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11495,"src":"5627:13:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11855,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11550,"src":"5616:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":11857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5616:25:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11854,"id":11858,"nodeType":"Return","src":"5609:32:82"}]},"documentation":{"id":11849,"nodeType":"StructuredDocumentation","src":"5490:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"e860accb","id":11860,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolDataProvider","nameLocation":"5540:19:82","nodeType":"FunctionDefinition","overrides":{"id":11851,"nodeType":"OverrideSpecifier","overrides":[],"src":"5576:8:82"},"parameters":{"id":11850,"nodeType":"ParameterList","parameters":[],"src":"5559:2:82"},"returnParameters":{"id":11854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11853,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11860,"src":"5594:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11852,"name":"address","nodeType":"ElementaryTypeName","src":"5594:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5593:9:82"},"scope":12040,"src":"5531:115:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5281],"body":{"id":11886,"nodeType":"Block","src":"5773:179:82","statements":[{"assignments":[11870],"declarations":[{"constant":false,"id":11870,"mutability":"mutable","name":"oldDataProvider","nameLocation":"5787:15:82","nodeType":"VariableDeclaration","scope":11886,"src":"5779:23:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11869,"name":"address","nodeType":"ElementaryTypeName","src":"5779:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11874,"initialValue":{"baseExpression":{"id":11871,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"5805:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11873,"indexExpression":{"id":11872,"name":"DATA_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11495,"src":"5816:13:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5805:25:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5779:51:82"},{"expression":{"id":11879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11875,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"5836:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11877,"indexExpression":{"id":11876,"name":"DATA_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11495,"src":"5847:13:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5836:25:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11878,"name":"newDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11863,"src":"5864:15:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5836:43:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11880,"nodeType":"ExpressionStatement","src":"5836:43:82"},{"eventCall":{"arguments":[{"id":11882,"name":"oldDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11870,"src":"5914:15:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11883,"name":"newDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11863,"src":"5931:15:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11881,"name":"PoolDataProviderUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5132,"src":"5890:23:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":11884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5890:57:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11885,"nodeType":"EmitStatement","src":"5885:62:82"}]},"documentation":{"id":11861,"nodeType":"StructuredDocumentation","src":"5650:38:82","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"e44e9ed1","id":11887,"implemented":true,"kind":"function","modifiers":[{"id":11867,"kind":"modifierInvocation","modifierName":{"id":11866,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"5763:9:82"},"nodeType":"ModifierInvocation","src":"5763:9:82"}],"name":"setPoolDataProvider","nameLocation":"5700:19:82","nodeType":"FunctionDefinition","overrides":{"id":11865,"nodeType":"OverrideSpecifier","overrides":[],"src":"5754:8:82"},"parameters":{"id":11864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11863,"mutability":"mutable","name":"newDataProvider","nameLocation":"5728:15:82","nodeType":"VariableDeclaration","scope":11887,"src":"5720:23:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11862,"name":"address","nodeType":"ElementaryTypeName","src":"5720:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5719:25:82"},"returnParameters":{"id":11868,"nodeType":"ParameterList","parameters":[],"src":"5773:0:82"},"scope":12040,"src":"5691:261:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":11976,"nodeType":"Block","src":"6614:622:82","statements":[{"assignments":[11896],"declarations":[{"constant":false,"id":11896,"mutability":"mutable","name":"proxyAddress","nameLocation":"6628:12:82","nodeType":"VariableDeclaration","scope":11976,"src":"6620:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11895,"name":"address","nodeType":"ElementaryTypeName","src":"6620:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11900,"initialValue":{"baseExpression":{"id":11897,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"6643:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11899,"indexExpression":{"id":11898,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11890,"src":"6654:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6643:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6620:37:82"},{"assignments":[11903],"declarations":[{"constant":false,"id":11903,"mutability":"mutable","name":"proxy","nameLocation":"6710:5:82","nodeType":"VariableDeclaration","scope":11976,"src":"6663:52:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"},"typeName":{"id":11902,"nodeType":"UserDefinedTypeName","pathNode":{"id":11901,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":12669,"src":"6663:46:82"},"referencedDeclaration":12669,"src":"6663:46:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"visibility":"internal"}],"id":11904,"nodeType":"VariableDeclarationStatement","src":"6663:52:82"},{"assignments":[11906],"declarations":[{"constant":false,"id":11906,"mutability":"mutable","name":"params","nameLocation":"6734:6:82","nodeType":"VariableDeclaration","scope":11976,"src":"6721:19:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11905,"name":"bytes","nodeType":"ElementaryTypeName","src":"6721:5:82","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11915,"initialValue":{"arguments":[{"hexValue":"696e697469616c697a65286164647265737329","id":11909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6767:21:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_c4d66de8473e8f74cb05df264ee8262da16b56717ef1f05d73bfdcea3adc85e5","typeString":"literal_string \"initialize(address)\""},"value":"initialize(address)"},{"arguments":[{"id":11912,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6798:4:82","typeDescriptions":{"typeIdentifier":"t_contract$_PoolAddressesProvider_$12040","typeString":"contract PoolAddressesProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolAddressesProvider_$12040","typeString":"contract PoolAddressesProvider"}],"id":11911,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6790:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11910,"name":"address","nodeType":"ElementaryTypeName","src":"6790:7:82","typeDescriptions":{}}},"id":11913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6790:13:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c4d66de8473e8f74cb05df264ee8262da16b56717ef1f05d73bfdcea3adc85e5","typeString":"literal_string \"initialize(address)\""},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":11907,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6743:3:82","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":11908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"6743:23:82","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":11914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6743:61:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6721:83:82"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":11921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11916,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11896,"src":"6815:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":11919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6839:1:82","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":11918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6831:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11917,"name":"address","nodeType":"ElementaryTypeName","src":"6831:7:82","typeDescriptions":{}}},"id":11920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6831:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6815:26:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11974,"nodeType":"Block","src":"7090:142:82","statements":[{"expression":{"id":11965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11958,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11903,"src":"7098:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":11962,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11896,"src":"7161:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7153:8:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":11960,"name":"address","nodeType":"ElementaryTypeName","src":"7153:8:82","stateMutability":"payable","typeDescriptions":{}}},"id":11963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7153:21:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":11959,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12669,"src":"7106:46:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669_$","typeString":"type(contract InitializableImmutableAdminUpgradeabilityProxy)"}},"id":11964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7106:69:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"src":"7098:77:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":11966,"nodeType":"ExpressionStatement","src":"7098:77:82"},{"expression":{"arguments":[{"id":11970,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11892,"src":"7206:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11971,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11906,"src":"7218:6:82","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11967,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11903,"src":"7183:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":11969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":12612,"src":"7183:22:82","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":11972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7183:42:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11973,"nodeType":"ExpressionStatement","src":"7183:42:82"}]},"id":11975,"nodeType":"IfStatement","src":"6811:421:82","trueBody":{"id":11957,"nodeType":"Block","src":"6843:241:82","statements":[{"expression":{"id":11931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11922,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11903,"src":"6851:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":11928,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6918:4:82","typeDescriptions":{"typeIdentifier":"t_contract$_PoolAddressesProvider_$12040","typeString":"contract PoolAddressesProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolAddressesProvider_$12040","typeString":"contract PoolAddressesProvider"}],"id":11927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6910:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11926,"name":"address","nodeType":"ElementaryTypeName","src":"6910:7:82","typeDescriptions":{}}},"id":11929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6910:13:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"6859:50:82","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669_$","typeString":"function (address) returns (contract InitializableImmutableAdminUpgradeabilityProxy)"},"typeName":{"id":11924,"nodeType":"UserDefinedTypeName","pathNode":{"id":11923,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":12669,"src":"6863:46:82"},"referencedDeclaration":12669,"src":"6863:46:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}}},"id":11930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6859:65:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"src":"6851:73:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":11932,"nodeType":"ExpressionStatement","src":"6851:73:82"},{"expression":{"id":11942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11933,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"6932:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":11935,"indexExpression":{"id":11934,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11890,"src":"6943:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6932:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11936,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11896,"src":"6949:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11939,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11903,"src":"6972:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}],"id":11938,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6964:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11937,"name":"address","nodeType":"ElementaryTypeName","src":"6964:7:82","typeDescriptions":{}}},"id":11940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6964:14:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6949:29:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6932:46:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11943,"nodeType":"ExpressionStatement","src":"6932:46:82"},{"expression":{"arguments":[{"id":11947,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11892,"src":"7003:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11948,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11906,"src":"7015:6:82","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11944,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11903,"src":"6986:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":11946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":3006,"src":"6986:16:82","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":11949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6986:36:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11950,"nodeType":"ExpressionStatement","src":"6986:36:82"},{"eventCall":{"arguments":[{"id":11952,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11890,"src":"7048:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11953,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11896,"src":"7052:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11954,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11892,"src":"7066:10: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":11951,"name":"ProxyCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5141,"src":"7035:12:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":11955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7035:42:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11956,"nodeType":"EmitStatement","src":"7030:47:82"}]}}]},"documentation":{"id":11888,"nodeType":"StructuredDocumentation","src":"5956:593:82","text":" @notice Internal function to update the implementation of a specific proxied component of the protocol.\n @dev If there is no proxy registered with the given identifier, it creates the proxy setting `newAddress`\n   as implementation and calls the initialize() function on the proxy\n @dev If there is already a proxy registered, it just updates the implementation to `newAddress` and\n   calls the initialize() function via upgradeToAndCall() in the proxy\n @param id The id of the proxy to be updated\n @param newAddress The address of the new implementation"},"id":11977,"implemented":true,"kind":"function","modifiers":[],"name":"_updateImpl","nameLocation":"6561:11:82","nodeType":"FunctionDefinition","parameters":{"id":11893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11890,"mutability":"mutable","name":"id","nameLocation":"6581:2:82","nodeType":"VariableDeclaration","scope":11977,"src":"6573:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11889,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6573:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11892,"mutability":"mutable","name":"newAddress","nameLocation":"6593:10:82","nodeType":"VariableDeclaration","scope":11977,"src":"6585:18:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11891,"name":"address","nodeType":"ElementaryTypeName","src":"6585:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6572:32:82"},"returnParameters":{"id":11894,"nodeType":"ParameterList","parameters":[],"src":"6614:0:82"},"scope":12040,"src":"6552:684:82","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11996,"nodeType":"Block","src":"7415:125:82","statements":[{"assignments":[11984],"declarations":[{"constant":false,"id":11984,"mutability":"mutable","name":"oldMarketId","nameLocation":"7435:11:82","nodeType":"VariableDeclaration","scope":11996,"src":"7421:25:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11983,"name":"string","nodeType":"ElementaryTypeName","src":"7421:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":11986,"initialValue":{"id":11985,"name":"_marketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11470,"src":"7449:9:82","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7421:37:82"},{"expression":{"id":11989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11987,"name":"_marketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11470,"src":"7464:9:82","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11988,"name":"newMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11980,"src":"7476:11:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"7464:23:82","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":11990,"nodeType":"ExpressionStatement","src":"7464:23:82"},{"eventCall":{"arguments":[{"id":11992,"name":"oldMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11984,"src":"7510:11:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":11993,"name":"newMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11980,"src":"7523:11:82","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"}],"id":11991,"name":"MarketIdSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5083,"src":"7498:11:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":11994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7498:37:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11995,"nodeType":"EmitStatement","src":"7493:42:82"}]},"documentation":{"id":11978,"nodeType":"StructuredDocumentation","src":"7240:114:82","text":" @notice Updates the identifier of the Aave market.\n @param newMarketId The new id of the market"},"id":11997,"implemented":true,"kind":"function","modifiers":[],"name":"_setMarketId","nameLocation":"7366:12:82","nodeType":"FunctionDefinition","parameters":{"id":11981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11980,"mutability":"mutable","name":"newMarketId","nameLocation":"7393:11:82","nodeType":"VariableDeclaration","scope":11997,"src":"7379:25:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11979,"name":"string","nodeType":"ElementaryTypeName","src":"7379:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7378:27:82"},"returnParameters":{"id":11982,"nodeType":"ParameterList","parameters":[],"src":"7415:0:82"},"scope":12040,"src":"7357:183:82","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12038,"nodeType":"Block","src":"7999:296:82","statements":[{"assignments":[12006],"declarations":[{"constant":false,"id":12006,"mutability":"mutable","name":"proxyAddress","nameLocation":"8013:12:82","nodeType":"VariableDeclaration","scope":12038,"src":"8005:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12005,"name":"address","nodeType":"ElementaryTypeName","src":"8005:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12010,"initialValue":{"baseExpression":{"id":12007,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11474,"src":"8028:10:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":12009,"indexExpression":{"id":12008,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12000,"src":"8039:2:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8028:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8005:37:82"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12011,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"8052:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":12014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8076:1:82","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":12013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8068:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12012,"name":"address","nodeType":"ElementaryTypeName","src":"8068:7:82","typeDescriptions":{}}},"id":12015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8068:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8052:26:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12036,"nodeType":"Block","src":"8118:173:82","statements":[{"assignments":[12024],"declarations":[{"constant":false,"id":12024,"mutability":"mutable","name":"payableProxyAddress","nameLocation":"8142:19:82","nodeType":"VariableDeclaration","scope":12036,"src":"8126:35:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":12023,"name":"address","nodeType":"ElementaryTypeName","src":"8126:15:82","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"id":12029,"initialValue":{"arguments":[{"id":12027,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"8172:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12026,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8164:8:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":12025,"name":"address","nodeType":"ElementaryTypeName","src":"8164:8:82","stateMutability":"payable","typeDescriptions":{}}},"id":12028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8164:21:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"8126:59:82"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12031,"name":"payableProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12024,"src":"8247:19:82","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":12030,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12669,"src":"8200:46:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669_$","typeString":"type(contract InitializableImmutableAdminUpgradeabilityProxy)"}},"id":12032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8200:67:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":12033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":12573,"src":"8200:82:82","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_address_$","typeString":"function () external returns (address)"}},"id":12034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8200:84:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12004,"id":12035,"nodeType":"Return","src":"8193:91:82"}]},"id":12037,"nodeType":"IfStatement","src":"8048:243:82","trueBody":{"id":12022,"nodeType":"Block","src":"8080:32:82","statements":[{"expression":{"arguments":[{"hexValue":"30","id":12019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8103:1:82","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":12018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8095:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12017,"name":"address","nodeType":"ElementaryTypeName","src":"8095:7:82","typeDescriptions":{}}},"id":12020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8095:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12004,"id":12021,"nodeType":"Return","src":"8088:17:82"}]}}]},"documentation":{"id":11998,"nodeType":"StructuredDocumentation","src":"7544:380:82","text":" @notice Returns the the implementation contract of the proxy contract by its identifier.\n @dev It returns ZERO if there is no registered address with the given id\n @dev It reverts if the registered address with the given id is not `InitializableImmutableAdminUpgradeabilityProxy`\n @param id The id\n @return The address of the implementation contract"},"id":12039,"implemented":true,"kind":"function","modifiers":[],"name":"_getProxyImplementation","nameLocation":"7936:23:82","nodeType":"FunctionDefinition","parameters":{"id":12001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12000,"mutability":"mutable","name":"id","nameLocation":"7968:2:82","nodeType":"VariableDeclaration","scope":12039,"src":"7960:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11999,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7960:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7959:12:82"},"returnParameters":{"id":12004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12003,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12039,"src":"7990:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12002,"name":"address","nodeType":"ElementaryTypeName","src":"7990:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7989:9:82"},"scope":12040,"src":"7927:368:82","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":12041,"src":"672:7625:82","usedErrors":[]}],"src":"37:8261:82"},"id":82},"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol":{"ast":{"absolutePath":"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol","exportedSymbols":{"Errors":[14819],"IPoolAddressesProviderRegistry":[5337],"Ownable":[1573],"PoolAddressesProviderRegistry":[12307]},"id":12308,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":12042,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:83"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"../../dependencies/openzeppelin/contracts/Ownable.sol","id":12044,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12308,"sourceUnit":1574,"src":"63:78:83","symbolAliases":[{"foreign":{"id":12043,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":12046,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12308,"sourceUnit":14820,"src":"142:55:83","symbolAliases":[{"foreign":{"id":12045,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:6:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProviderRegistry.sol","file":"../../interfaces/IPoolAddressesProviderRegistry.sol","id":12048,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12308,"sourceUnit":5338,"src":"198:99:83","symbolAliases":[{"foreign":{"id":12047,"name":"IPoolAddressesProviderRegistry","nodeType":"Identifier","overloadedDeclarations":[],"src":"206:30:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":12050,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"700:7:83"},"id":12051,"nodeType":"InheritanceSpecifier","src":"700:7:83"},{"baseName":{"id":12052,"name":"IPoolAddressesProviderRegistry","nodeType":"IdentifierPath","referencedDeclaration":5337,"src":"709:30:83"},"id":12053,"nodeType":"InheritanceSpecifier","src":"709:30:83"}],"canonicalName":"PoolAddressesProviderRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":12049,"nodeType":"StructuredDocumentation","src":"299:358:83","text":" @title PoolAddressesProviderRegistry\n @author Aave\n @notice Main registry of PoolAddressesProvider of Aave markets.\n @dev Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the\n market it is connected with, for example with `1` for the Aave main market and `2` for the next created."},"fullyImplemented":true,"id":12307,"linearizedBaseContracts":[12307,5337,1573,748],"name":"PoolAddressesProviderRegistry","nameLocation":"667:29:83","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":12057,"mutability":"mutable","name":"_addressesProviderToId","nameLocation":"839:22:83","nodeType":"VariableDeclaration","scope":12307,"src":"803:58:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":12056,"keyType":{"id":12054,"name":"address","nodeType":"ElementaryTypeName","src":"811:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"803:27:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":12055,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":12061,"mutability":"mutable","name":"_idToAddressesProvider","nameLocation":"962:22:83","nodeType":"VariableDeclaration","scope":12307,"src":"926:58:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":12060,"keyType":{"id":12058,"name":"uint256","nodeType":"ElementaryTypeName","src":"934:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"926:27:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":12059,"name":"address","nodeType":"ElementaryTypeName","src":"945:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":12064,"mutability":"mutable","name":"_addressesProvidersList","nameLocation":"1039:23:83","nodeType":"VariableDeclaration","scope":12307,"src":"1021:41:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":12062,"name":"address","nodeType":"ElementaryTypeName","src":"1021:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12063,"nodeType":"ArrayTypeName","src":"1021:9:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":12068,"mutability":"mutable","name":"_addressesProvidersIndexes","nameLocation":"1179:26:83","nodeType":"VariableDeclaration","scope":12307,"src":"1143:62:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":12067,"keyType":{"id":12065,"name":"address","nodeType":"ElementaryTypeName","src":"1151:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1143:27:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":12066,"name":"uint256","nodeType":"ElementaryTypeName","src":"1162:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":12078,"nodeType":"Block","src":"1326:35:83","statements":[{"expression":{"arguments":[{"id":12075,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12071,"src":"1350:5:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12074,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1332:17:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":12076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1332:24:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12077,"nodeType":"ExpressionStatement","src":"1332:24:83"}]},"documentation":{"id":12069,"nodeType":"StructuredDocumentation","src":"1210:86:83","text":" @dev Constructor.\n @param owner The owner address of this contract."},"id":12079,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":12072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12071,"mutability":"mutable","name":"owner","nameLocation":"1319:5:83","nodeType":"VariableDeclaration","scope":12079,"src":"1311:13:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12070,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1310:15:83"},"returnParameters":{"id":12073,"nodeType":"ParameterList","parameters":[],"src":"1326:0:83"},"scope":12307,"src":"1299:62:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5306],"body":{"id":12089,"nodeType":"Block","src":"1501:41:83","statements":[{"expression":{"id":12087,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12064,"src":"1514:23:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":12086,"id":12088,"nodeType":"Return","src":"1507:30:83"}]},"documentation":{"id":12080,"nodeType":"StructuredDocumentation","src":"1365:46:83","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"365ccbbf","id":12090,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressesProvidersList","nameLocation":"1423:25:83","nodeType":"FunctionDefinition","overrides":{"id":12082,"nodeType":"OverrideSpecifier","overrides":[],"src":"1465:8:83"},"parameters":{"id":12081,"nodeType":"ParameterList","parameters":[],"src":"1448:2:83"},"returnParameters":{"id":12086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12090,"src":"1483:16:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12083,"name":"address","nodeType":"ElementaryTypeName","src":"1483:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12084,"nodeType":"ArrayTypeName","src":"1483:9:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1482:18:83"},"scope":12307,"src":"1414:128:83","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5330],"body":{"id":12153,"nodeType":"Block","src":"1688:435:83","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12102,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12095,"src":"1702:2:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1708:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1702:7:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12105,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1711:6:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":12106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_ADDRESSES_PROVIDER_ID","nodeType":"MemberAccess","referencedDeclaration":14572,"src":"1711:36:83","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12101,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1694:7:83","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1694:54:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12108,"nodeType":"ExpressionStatement","src":"1694:54:83"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12110,"name":"_idToAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12061,"src":"1762:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":12112,"indexExpression":{"id":12111,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12095,"src":"1785:2:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1762:26:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":12115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1800:1:83","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":12114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1792:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12113,"name":"address","nodeType":"ElementaryTypeName","src":"1792:7:83","typeDescriptions":{}}},"id":12116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1792:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1762:40:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12118,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1804:6:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":12119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_ADDRESSES_PROVIDER_ID","nodeType":"MemberAccess","referencedDeclaration":14572,"src":"1804:36:83","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12109,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1754:7:83","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1754:87:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12121,"nodeType":"ExpressionStatement","src":"1754:87:83"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12123,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12057,"src":"1855:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12125,"indexExpression":{"id":12124,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"1878:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1855:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1891:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1855:37:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12128,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1894:6:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":12129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ADDRESSES_PROVIDER_ALREADY_ADDED","nodeType":"MemberAccess","referencedDeclaration":14803,"src":"1894:39:83","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12122,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1847:7:83","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1847:87:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12131,"nodeType":"ExpressionStatement","src":"1847:87:83"},{"expression":{"id":12136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12132,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12057,"src":"1941:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12134,"indexExpression":{"id":12133,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"1964:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1941:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12135,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12095,"src":"1976:2:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1941:37:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12137,"nodeType":"ExpressionStatement","src":"1941:37:83"},{"expression":{"id":12142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12138,"name":"_idToAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12061,"src":"1984:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":12140,"indexExpression":{"id":12139,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12095,"src":"2007:2:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1984:26:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12141,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"2013:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1984:37:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12143,"nodeType":"ExpressionStatement","src":"1984:37:83"},{"expression":{"arguments":[{"id":12145,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"2057:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12144,"name":"_addToAddressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12252,"src":"2028:28:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":12146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2028:38:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12147,"nodeType":"ExpressionStatement","src":"2028:38:83"},{"eventCall":{"arguments":[{"id":12149,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"2105:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12150,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12095,"src":"2115:2:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12148,"name":"AddressesProviderRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5292,"src":"2077:27:83","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":12151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2077:41:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12152,"nodeType":"EmitStatement","src":"2072:46:83"}]},"documentation":{"id":12091,"nodeType":"StructuredDocumentation","src":"1546:46:83","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"d258191e","id":12154,"implemented":true,"kind":"function","modifiers":[{"id":12099,"kind":"modifierInvocation","modifierName":{"id":12098,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1678:9:83"},"nodeType":"ModifierInvocation","src":"1678:9:83"}],"name":"registerAddressesProvider","nameLocation":"1604:25:83","nodeType":"FunctionDefinition","overrides":{"id":12097,"nodeType":"OverrideSpecifier","overrides":[],"src":"1669:8:83"},"parameters":{"id":12096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12093,"mutability":"mutable","name":"provider","nameLocation":"1638:8:83","nodeType":"VariableDeclaration","scope":12154,"src":"1630:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12092,"name":"address","nodeType":"ElementaryTypeName","src":"1630:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12095,"mutability":"mutable","name":"id","nameLocation":"1656:2:83","nodeType":"VariableDeclaration","scope":12154,"src":"1648:10:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12094,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1629:30:83"},"returnParameters":{"id":12100,"nodeType":"ParameterList","parameters":[],"src":"1688:0:83"},"scope":12307,"src":"1595:528:83","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5336],"body":{"id":12203,"nodeType":"Block","src":"2259:351:83","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":12164,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12057,"src":"2273:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12166,"indexExpression":{"id":12165,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12157,"src":"2296:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2273:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2309:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2273:37:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12169,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2312:6:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":12170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ADDRESSES_PROVIDER_NOT_REGISTERED","nodeType":"MemberAccess","referencedDeclaration":14569,"src":"2312:40:83","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12163,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2265:7:83","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2265:88:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12172,"nodeType":"ExpressionStatement","src":"2265:88:83"},{"assignments":[12174],"declarations":[{"constant":false,"id":12174,"mutability":"mutable","name":"oldId","nameLocation":"2367:5:83","nodeType":"VariableDeclaration","scope":12203,"src":"2359:13:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12173,"name":"uint256","nodeType":"ElementaryTypeName","src":"2359:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12178,"initialValue":{"baseExpression":{"id":12175,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12057,"src":"2375:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12177,"indexExpression":{"id":12176,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12157,"src":"2398:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2375:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2359:48:83"},{"expression":{"id":12186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12179,"name":"_idToAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12061,"src":"2413:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":12181,"indexExpression":{"id":12180,"name":"oldId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12174,"src":"2436:5:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2413:29:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":12184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2453:1:83","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":12183,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2445:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12182,"name":"address","nodeType":"ElementaryTypeName","src":"2445:7:83","typeDescriptions":{}}},"id":12185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2445:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2413:42:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12187,"nodeType":"ExpressionStatement","src":"2413:42:83"},{"expression":{"id":12192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12188,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12057,"src":"2461:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12190,"indexExpression":{"id":12189,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12157,"src":"2484:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2461:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":12191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2496:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2461:36:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12193,"nodeType":"ExpressionStatement","src":"2461:36:83"},{"expression":{"arguments":[{"id":12195,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12157,"src":"2538:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12194,"name":"_removeFromAddressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12306,"src":"2504:33:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":12196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2504:43:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12197,"nodeType":"ExpressionStatement","src":"2504:43:83"},{"eventCall":{"arguments":[{"id":12199,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12157,"src":"2589:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12200,"name":"oldId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12174,"src":"2599:5:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12198,"name":"AddressesProviderUnregistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5299,"src":"2559:29:83","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":12201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2559:46:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12202,"nodeType":"EmitStatement","src":"2554:51:83"}]},"documentation":{"id":12155,"nodeType":"StructuredDocumentation","src":"2127:46:83","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"0de26707","id":12204,"implemented":true,"kind":"function","modifiers":[{"id":12161,"kind":"modifierInvocation","modifierName":{"id":12160,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2249:9:83"},"nodeType":"ModifierInvocation","src":"2249:9:83"}],"name":"unregisterAddressesProvider","nameLocation":"2185:27:83","nodeType":"FunctionDefinition","overrides":{"id":12159,"nodeType":"OverrideSpecifier","overrides":[],"src":"2240:8:83"},"parameters":{"id":12158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12157,"mutability":"mutable","name":"provider","nameLocation":"2221:8:83","nodeType":"VariableDeclaration","scope":12204,"src":"2213:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12156,"name":"address","nodeType":"ElementaryTypeName","src":"2213:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2212:18:83"},"returnParameters":{"id":12162,"nodeType":"ParameterList","parameters":[],"src":"2259:0:83"},"scope":12307,"src":"2176:434:83","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5314],"body":{"id":12217,"nodeType":"Block","src":"2780:59:83","statements":[{"expression":{"baseExpression":{"id":12213,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12057,"src":"2793:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12215,"indexExpression":{"id":12214,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12207,"src":"2816:17:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2793:41:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12212,"id":12216,"nodeType":"Return","src":"2786:48:83"}]},"documentation":{"id":12205,"nodeType":"StructuredDocumentation","src":"2614:46:83","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"d0267be7","id":12218,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressesProviderIdByAddress","nameLocation":"2672:31:83","nodeType":"FunctionDefinition","overrides":{"id":12209,"nodeType":"OverrideSpecifier","overrides":[],"src":"2753:8:83"},"parameters":{"id":12208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12207,"mutability":"mutable","name":"addressesProvider","nameLocation":"2717:17:83","nodeType":"VariableDeclaration","scope":12218,"src":"2709:25:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12206,"name":"address","nodeType":"ElementaryTypeName","src":"2709:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2703:35:83"},"returnParameters":{"id":12212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12211,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12218,"src":"2771:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12210,"name":"uint256","nodeType":"ElementaryTypeName","src":"2771:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2770:9:83"},"scope":12307,"src":"2663:176:83","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5322],"body":{"id":12231,"nodeType":"Block","src":"2986:44:83","statements":[{"expression":{"baseExpression":{"id":12227,"name":"_idToAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12061,"src":"2999:22:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":12229,"indexExpression":{"id":12228,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12221,"src":"3022:2:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2999:26:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12226,"id":12230,"nodeType":"Return","src":"2992:33:83"}]},"documentation":{"id":12219,"nodeType":"StructuredDocumentation","src":"2843:46:83","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"57dc0566","id":12232,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressesProviderAddressById","nameLocation":"2901:31:83","nodeType":"FunctionDefinition","overrides":{"id":12223,"nodeType":"OverrideSpecifier","overrides":[],"src":"2959:8:83"},"parameters":{"id":12222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12221,"mutability":"mutable","name":"id","nameLocation":"2941:2:83","nodeType":"VariableDeclaration","scope":12232,"src":"2933:10:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12220,"name":"uint256","nodeType":"ElementaryTypeName","src":"2933:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2932:12:83"},"returnParameters":{"id":12226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12232,"src":"2977:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12224,"name":"address","nodeType":"ElementaryTypeName","src":"2977:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2976:9:83"},"scope":12307,"src":"2892:138:83","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":12251,"nodeType":"Block","src":"3235:124:83","statements":[{"expression":{"id":12243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12238,"name":"_addressesProvidersIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12068,"src":"3241:26:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12240,"indexExpression":{"id":12239,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12235,"src":"3268:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3241:36:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":12241,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12064,"src":"3280:23:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":12242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3280:30:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3241:69:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12244,"nodeType":"ExpressionStatement","src":"3241:69:83"},{"expression":{"arguments":[{"id":12248,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12235,"src":"3345:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12245,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12064,"src":"3316:23:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":12247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"3316:28:83","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":12249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3316:38:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12250,"nodeType":"ExpressionStatement","src":"3316:38:83"}]},"documentation":{"id":12233,"nodeType":"StructuredDocumentation","src":"3034:133:83","text":" @notice Adds the addresses provider address to the list.\n @param provider The address of the PoolAddressesProvider"},"id":12252,"implemented":true,"kind":"function","modifiers":[],"name":"_addToAddressesProvidersList","nameLocation":"3179:28:83","nodeType":"FunctionDefinition","parameters":{"id":12236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12235,"mutability":"mutable","name":"provider","nameLocation":"3216:8:83","nodeType":"VariableDeclaration","scope":12252,"src":"3208:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12234,"name":"address","nodeType":"ElementaryTypeName","src":"3208:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3207:18:83"},"returnParameters":{"id":12237,"nodeType":"ParameterList","parameters":[],"src":"3235:0:83"},"scope":12307,"src":"3170:189:83","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12305,"nodeType":"Block","src":"3574:521:83","statements":[{"assignments":[12259],"declarations":[{"constant":false,"id":12259,"mutability":"mutable","name":"index","nameLocation":"3588:5:83","nodeType":"VariableDeclaration","scope":12305,"src":"3580:13:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12258,"name":"uint256","nodeType":"ElementaryTypeName","src":"3580:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12263,"initialValue":{"baseExpression":{"id":12260,"name":"_addressesProvidersIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12068,"src":"3596:26:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12262,"indexExpression":{"id":12261,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12255,"src":"3623:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3596:36:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3580:52:83"},{"expression":{"id":12268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12264,"name":"_addressesProvidersIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12068,"src":"3639:26:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12266,"indexExpression":{"id":12265,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12255,"src":"3666:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3639:36:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":12267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3678:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3639:40:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12269,"nodeType":"ExpressionStatement","src":"3639:40:83"},{"assignments":[12271],"declarations":[{"constant":false,"id":12271,"mutability":"mutable","name":"lastIndex","nameLocation":"3800:9:83","nodeType":"VariableDeclaration","scope":12305,"src":"3792:17:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12270,"name":"uint256","nodeType":"ElementaryTypeName","src":"3792:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12276,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12272,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12064,"src":"3812:23:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":12273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3812:30:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3845:1:83","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3812:34:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3792:54:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12277,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12259,"src":"3856:5:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12278,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12271,"src":"3864:9:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3856:17:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12299,"nodeType":"IfStatement","src":"3852:204:83","trueBody":{"id":12298,"nodeType":"Block","src":"3875:181:83","statements":[{"assignments":[12281],"declarations":[{"constant":false,"id":12281,"mutability":"mutable","name":"lastProvider","nameLocation":"3891:12:83","nodeType":"VariableDeclaration","scope":12298,"src":"3883:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12280,"name":"address","nodeType":"ElementaryTypeName","src":"3883:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12285,"initialValue":{"baseExpression":{"id":12282,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12064,"src":"3906:23:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":12284,"indexExpression":{"id":12283,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12271,"src":"3930:9:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3906:34:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3883:57:83"},{"expression":{"id":12290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12286,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12064,"src":"3948:23:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":12288,"indexExpression":{"id":12287,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12259,"src":"3972:5:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3948:30:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12289,"name":"lastProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12281,"src":"3981:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3948:45:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12291,"nodeType":"ExpressionStatement","src":"3948:45:83"},{"expression":{"id":12296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12292,"name":"_addressesProvidersIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12068,"src":"4001:26:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12294,"indexExpression":{"id":12293,"name":"lastProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12281,"src":"4028:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4001:40:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12295,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12259,"src":"4044:5:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4001:48:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12297,"nodeType":"ExpressionStatement","src":"4001:48:83"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12300,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12064,"src":"4061:23:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":12302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"pop","nodeType":"MemberAccess","src":"4061:27:83","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer)"}},"id":12303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4061:29:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12304,"nodeType":"ExpressionStatement","src":"4061:29:83"}]},"documentation":{"id":12253,"nodeType":"StructuredDocumentation","src":"3363:138:83","text":" @notice Removes the addresses provider address from the list.\n @param provider The address of the PoolAddressesProvider"},"id":12306,"implemented":true,"kind":"function","modifiers":[],"name":"_removeFromAddressesProvidersList","nameLocation":"3513:33:83","nodeType":"FunctionDefinition","parameters":{"id":12256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12255,"mutability":"mutable","name":"provider","nameLocation":"3555:8:83","nodeType":"VariableDeclaration","scope":12306,"src":"3547:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12254,"name":"address","nodeType":"ElementaryTypeName","src":"3547:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3546:18:83"},"returnParameters":{"id":12257,"nodeType":"ParameterList","parameters":[],"src":"3574:0:83"},"scope":12307,"src":"3504:591:83","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":12308,"src":"658:3439:83","usedErrors":[]}],"src":"37:4061:83"},"id":83},"contracts/protocol/configuration/PriceOracleSentinel.sol":{"ast":{"absolutePath":"contracts/protocol/configuration/PriceOracleSentinel.sol","exportedSymbols":{"Errors":[14819],"IACLManager":[3843],"IPoolAddressesProvider":[5282],"IPriceOracleSentinel":[6107],"ISequencerOracle":[6206],"PriceOracleSentinel":[12516]},"id":12517,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":12309,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:84"},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":12311,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12517,"sourceUnit":14820,"src":"63:55:84","symbolAliases":[{"foreign":{"id":12310,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":12313,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12517,"sourceUnit":5283,"src":"119:83:84","symbolAliases":[{"foreign":{"id":12312,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"127:22:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPriceOracleSentinel.sol","file":"../../interfaces/IPriceOracleSentinel.sol","id":12315,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12517,"sourceUnit":6108,"src":"203:79:84","symbolAliases":[{"foreign":{"id":12314,"name":"IPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"src":"211:20:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/ISequencerOracle.sol","file":"../../interfaces/ISequencerOracle.sol","id":12317,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12517,"sourceUnit":6207,"src":"283:71:84","symbolAliases":[{"foreign":{"id":12316,"name":"ISequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"src":"291:16:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IACLManager.sol","file":"../../interfaces/IACLManager.sol","id":12319,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12517,"sourceUnit":3844,"src":"355:61:84","symbolAliases":[{"foreign":{"id":12318,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"363:11:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":12321,"name":"IPriceOracleSentinel","nodeType":"IdentifierPath","referencedDeclaration":6107,"src":"808:20:84"},"id":12322,"nodeType":"InheritanceSpecifier","src":"808:20:84"}],"canonicalName":"PriceOracleSentinel","contractDependencies":[],"contractKind":"contract","documentation":{"id":12320,"nodeType":"StructuredDocumentation","src":"418:357:84","text":" @title PriceOracleSentinel\n @author Aave\n @notice It validates if operations are allowed depending on the PriceOracle health.\n @dev Once the PriceOracle gets up after an outage/downtime, users can make their positions healthy during a grace\n  period. So the PriceOracle is considered completely up once its up and the grace period passed."},"fullyImplemented":true,"id":12516,"linearizedBaseContracts":[12516,6107],"name":"PriceOracleSentinel","nameLocation":"785:19:84","nodeType":"ContractDefinition","nodes":[{"body":{"id":12345,"nodeType":"Block","src":"940:169:84","statements":[{"assignments":[12327],"declarations":[{"constant":false,"id":12327,"mutability":"mutable","name":"aclManager","nameLocation":"958:10:84","nodeType":"VariableDeclaration","scope":12345,"src":"946:22:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":12326,"nodeType":"UserDefinedTypeName","pathNode":{"id":12325,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"946:11:84"},"referencedDeclaration":3843,"src":"946:11:84","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":12333,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12329,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12380,"src":"983:18:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":12330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"983:32:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":12331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"983:34:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12328,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"971:11:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":12332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"971:47:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"946:72:84"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12337,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1055:3:84","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1055:10:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12335,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12327,"src":"1032:10:84","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":12336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"1032:22:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":12339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1032:34:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12340,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1068:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":12341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14551,"src":"1068:28:84","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12334,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1024:7:84","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1024:73:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12343,"nodeType":"ExpressionStatement","src":"1024:73:84"},{"id":12344,"nodeType":"PlaceholderStatement","src":"1103:1:84"}]},"documentation":{"id":12323,"nodeType":"StructuredDocumentation","src":"833:79:84","text":" @dev Only pool admin can call functions marked by this modifier."},"id":12346,"name":"onlyPoolAdmin","nameLocation":"924:13:84","nodeType":"ModifierDefinition","parameters":{"id":12324,"nodeType":"ParameterList","parameters":[],"src":"937:2:84"},"src":"915:194:84","virtual":false,"visibility":"internal"},{"body":{"id":12375,"nodeType":"Block","src":"1235:233:84","statements":[{"assignments":[12351],"declarations":[{"constant":false,"id":12351,"mutability":"mutable","name":"aclManager","nameLocation":"1253:10:84","nodeType":"VariableDeclaration","scope":12375,"src":"1241:22:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":12350,"nodeType":"UserDefinedTypeName","pathNode":{"id":12349,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"1241:11:84"},"referencedDeclaration":3843,"src":"1241:11:84","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":12357,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12353,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12380,"src":"1278:18:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":12354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"1278:32:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":12355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1278:34:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12352,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"1266:11:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":12356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1266:47:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"1241:72:84"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":12361,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1357:3:84","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1357:10:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12359,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12351,"src":"1334:10:84","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":12360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isRiskAdmin","nodeType":"MemberAccess","referencedDeclaration":3782,"src":"1334:22:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":12363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1334:34:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":12366,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1395:3:84","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1395:10:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12364,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12351,"src":"1372:10:84","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":12365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"1372:22:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":12368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1372:34:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1334:72:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12370,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1414:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":12371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_RISK_OR_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14560,"src":"1414:36:84","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12358,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1319:7:84","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1319:137:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12373,"nodeType":"ExpressionStatement","src":"1319:137:84"},{"id":12374,"nodeType":"PlaceholderStatement","src":"1462:1:84"}]},"documentation":{"id":12347,"nodeType":"StructuredDocumentation","src":"1113:87:84","text":" @dev Only risk or pool admin can call functions marked by this modifier."},"id":12376,"name":"onlyRiskOrPoolAdmins","nameLocation":"1212:20:84","nodeType":"ModifierDefinition","parameters":{"id":12348,"nodeType":"ParameterList","parameters":[],"src":"1232:2:84"},"src":"1203:265:84","virtual":false,"visibility":"internal"},{"baseFunctions":[6070],"constant":false,"functionSelector":"0542975c","id":12380,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"1521:18:84","nodeType":"VariableDeclaration","overrides":{"id":12379,"nodeType":"OverrideSpecifier","overrides":[],"src":"1512:8:84"},"scope":12516,"src":"1472:67:84","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":12378,"nodeType":"UserDefinedTypeName","pathNode":{"id":12377,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1472:22:84"},"referencedDeclaration":5282,"src":"1472:22:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"constant":false,"id":12383,"mutability":"mutable","name":"_sequencerOracle","nameLocation":"1570:16:84","nodeType":"VariableDeclaration","scope":12516,"src":"1544:42:84","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"},"typeName":{"id":12382,"nodeType":"UserDefinedTypeName","pathNode":{"id":12381,"name":"ISequencerOracle","nodeType":"IdentifierPath","referencedDeclaration":6206,"src":"1544:16:84"},"referencedDeclaration":6206,"src":"1544:16:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"visibility":"internal"},{"constant":false,"id":12385,"mutability":"mutable","name":"_gracePeriod","nameLocation":"1608:12:84","nodeType":"VariableDeclaration","scope":12516,"src":"1591:29:84","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12384,"name":"uint256","nodeType":"ElementaryTypeName","src":"1591:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":12409,"nodeType":"Block","src":"1934:103:84","statements":[{"expression":{"id":12399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12397,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12380,"src":"1940:18:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12398,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12389,"src":"1961:8:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"1940:29:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":12400,"nodeType":"ExpressionStatement","src":"1940:29:84"},{"expression":{"id":12403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12401,"name":"_sequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12383,"src":"1975:16:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12402,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12392,"src":"1994:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"src":"1975:25:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"id":12404,"nodeType":"ExpressionStatement","src":"1975:25:84"},{"expression":{"id":12407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12405,"name":"_gracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"2006:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12406,"name":"gracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12394,"src":"2021:11:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2006:26:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12408,"nodeType":"ExpressionStatement","src":"2006:26:84"}]},"documentation":{"id":12386,"nodeType":"StructuredDocumentation","src":"1625:215:84","text":" @dev Constructor\n @param provider The address of the PoolAddressesProvider\n @param oracle The address of the SequencerOracle\n @param gracePeriod The duration of the grace period in seconds"},"id":12410,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":12395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12389,"mutability":"mutable","name":"provider","nameLocation":"1878:8:84","nodeType":"VariableDeclaration","scope":12410,"src":"1855:31:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":12388,"nodeType":"UserDefinedTypeName","pathNode":{"id":12387,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1855:22:84"},"referencedDeclaration":5282,"src":"1855:22:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":12392,"mutability":"mutable","name":"oracle","nameLocation":"1905:6:84","nodeType":"VariableDeclaration","scope":12410,"src":"1888:23:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"},"typeName":{"id":12391,"nodeType":"UserDefinedTypeName","pathNode":{"id":12390,"name":"ISequencerOracle","nodeType":"IdentifierPath","referencedDeclaration":6206,"src":"1888:16:84"},"referencedDeclaration":6206,"src":"1888:16:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"visibility":"internal"},{"constant":false,"id":12394,"mutability":"mutable","name":"gracePeriod","nameLocation":"1921:11:84","nodeType":"VariableDeclaration","scope":12410,"src":"1913:19:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12393,"name":"uint256","nodeType":"ElementaryTypeName","src":"1913:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1854:79:84"},"returnParameters":{"id":12396,"nodeType":"ParameterList","parameters":[],"src":"1934:0:84"},"scope":12516,"src":"1843:194:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[6076],"body":{"id":12420,"nodeType":"Block","src":"2143:45:84","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12417,"name":"_isUpAndGracePeriodPassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12458,"src":"2156:25:84","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":12418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2156:27:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12416,"id":12419,"nodeType":"Return","src":"2149:34:84"}]},"documentation":{"id":12411,"nodeType":"StructuredDocumentation","src":"2041:36:84","text":"@inheritdoc IPriceOracleSentinel"},"functionSelector":"49aa2e81","id":12421,"implemented":true,"kind":"function","modifiers":[],"name":"isBorrowAllowed","nameLocation":"2089:15:84","nodeType":"FunctionDefinition","overrides":{"id":12413,"nodeType":"OverrideSpecifier","overrides":[],"src":"2119:8:84"},"parameters":{"id":12412,"nodeType":"ParameterList","parameters":[],"src":"2104:2:84"},"returnParameters":{"id":12416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12415,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12421,"src":"2137:4:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12414,"name":"bool","nodeType":"ElementaryTypeName","src":"2137:4:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2136:6:84"},"scope":12516,"src":"2080:108:84","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[6082],"body":{"id":12431,"nodeType":"Block","src":"2299:45:84","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12428,"name":"_isUpAndGracePeriodPassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12458,"src":"2312:25:84","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":12429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2312:27:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12427,"id":12430,"nodeType":"Return","src":"2305:34:84"}]},"documentation":{"id":12422,"nodeType":"StructuredDocumentation","src":"2192:36:84","text":"@inheritdoc IPriceOracleSentinel"},"functionSelector":"7a5d20ea","id":12432,"implemented":true,"kind":"function","modifiers":[],"name":"isLiquidationAllowed","nameLocation":"2240:20:84","nodeType":"FunctionDefinition","overrides":{"id":12424,"nodeType":"OverrideSpecifier","overrides":[],"src":"2275:8:84"},"parameters":{"id":12423,"nodeType":"ParameterList","parameters":[],"src":"2260:2:84"},"returnParameters":{"id":12427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12432,"src":"2293:4:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12425,"name":"bool","nodeType":"ElementaryTypeName","src":"2293:4:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2292:6:84"},"scope":12516,"src":"2231:113:84","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":12457,"nodeType":"Block","src":"2602:178:84","statements":[{"assignments":[null,12439,null,12441,null],"declarations":[null,{"constant":false,"id":12439,"mutability":"mutable","name":"answer","nameLocation":"2618:6:84","nodeType":"VariableDeclaration","scope":12457,"src":"2611:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12438,"name":"int256","nodeType":"ElementaryTypeName","src":"2611:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},null,{"constant":false,"id":12441,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"2636:19:84","nodeType":"VariableDeclaration","scope":12457,"src":"2628:27:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12440,"name":"uint256","nodeType":"ElementaryTypeName","src":"2628:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":12445,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12442,"name":"_sequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12383,"src":"2661:16:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"id":12443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestRoundData","nodeType":"MemberAccess","referencedDeclaration":6205,"src":"2661:32:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"function () view external returns (uint80,int256,uint256,uint256,uint80)"}},"id":12444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2661:34:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,uint256,uint256,uint80)"}},"nodeType":"VariableDeclarationStatement","src":"2608:87:84"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12446,"name":"answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"2708:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2718:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2708:11:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12449,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2723:5:84","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":12450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"2723:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12451,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12441,"src":"2741:19:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2723:37:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12453,"name":"_gracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"2763:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2723:52:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2708:67:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12437,"id":12456,"nodeType":"Return","src":"2701:74:84"}]},"documentation":{"id":12433,"nodeType":"StructuredDocumentation","src":"2348:185:84","text":" @notice Checks the sequencer oracle is healthy: is up and grace period passed.\n @return True if the SequencerOracle is up and the grace period passed, false otherwise"},"id":12458,"implemented":true,"kind":"function","modifiers":[],"name":"_isUpAndGracePeriodPassed","nameLocation":"2545:25:84","nodeType":"FunctionDefinition","parameters":{"id":12434,"nodeType":"ParameterList","parameters":[],"src":"2570:2:84"},"returnParameters":{"id":12437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12436,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12458,"src":"2596:4:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12435,"name":"bool","nodeType":"ElementaryTypeName","src":"2596:4:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2595:6:84"},"scope":12516,"src":"2536:244:84","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[6088],"body":{"id":12476,"nodeType":"Block","src":"2900:119:84","statements":[{"expression":{"id":12470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12466,"name":"_sequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12383,"src":"2906:16:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12468,"name":"newSequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12461,"src":"2942:18:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12467,"name":"ISequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6206,"src":"2925:16:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISequencerOracle_$6206_$","typeString":"type(contract ISequencerOracle)"}},"id":12469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2925:36:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"src":"2906:55:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}},"id":12471,"nodeType":"ExpressionStatement","src":"2906:55:84"},{"eventCall":{"arguments":[{"id":12473,"name":"newSequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12461,"src":"2995:18:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12472,"name":"SequencerOracleUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6058,"src":"2972:22:84","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":12474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2972:42:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12475,"nodeType":"EmitStatement","src":"2967:47:84"}]},"documentation":{"id":12459,"nodeType":"StructuredDocumentation","src":"2784:36:84","text":"@inheritdoc IPriceOracleSentinel"},"functionSelector":"f0aef31c","id":12477,"implemented":true,"kind":"function","modifiers":[{"id":12464,"kind":"modifierInvocation","modifierName":{"id":12463,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":12346,"src":"2886:13:84"},"nodeType":"ModifierInvocation","src":"2886:13:84"}],"name":"setSequencerOracle","nameLocation":"2832:18:84","nodeType":"FunctionDefinition","parameters":{"id":12462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12461,"mutability":"mutable","name":"newSequencerOracle","nameLocation":"2859:18:84","nodeType":"VariableDeclaration","scope":12477,"src":"2851:26:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12460,"name":"address","nodeType":"ElementaryTypeName","src":"2851:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2850:28:84"},"returnParameters":{"id":12465,"nodeType":"ParameterList","parameters":[],"src":"2900:0:84"},"scope":12516,"src":"2823:196:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[6094],"body":{"id":12493,"nodeType":"Block","src":"3138:85:84","statements":[{"expression":{"id":12487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12485,"name":"_gracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"3144:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12486,"name":"newGracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12480,"src":"3159:14:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3144:29:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12488,"nodeType":"ExpressionStatement","src":"3144:29:84"},{"eventCall":{"arguments":[{"id":12490,"name":"newGracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12480,"src":"3203:14:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12489,"name":"GracePeriodUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"3184:18:84","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":12491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3184:34:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12492,"nodeType":"EmitStatement","src":"3179:39:84"}]},"documentation":{"id":12478,"nodeType":"StructuredDocumentation","src":"3023:36:84","text":"@inheritdoc IPriceOracleSentinel"},"functionSelector":"f2f65960","id":12494,"implemented":true,"kind":"function","modifiers":[{"id":12483,"kind":"modifierInvocation","modifierName":{"id":12482,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":12376,"src":"3117:20:84"},"nodeType":"ModifierInvocation","src":"3117:20:84"}],"name":"setGracePeriod","nameLocation":"3071:14:84","nodeType":"FunctionDefinition","parameters":{"id":12481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12480,"mutability":"mutable","name":"newGracePeriod","nameLocation":"3094:14:84","nodeType":"VariableDeclaration","scope":12494,"src":"3086:22:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12479,"name":"uint256","nodeType":"ElementaryTypeName","src":"3086:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3085:24:84"},"returnParameters":{"id":12484,"nodeType":"ParameterList","parameters":[],"src":"3138:0:84"},"scope":12516,"src":"3062:161:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[6100],"body":{"id":12505,"nodeType":"Block","src":"3326:43:84","statements":[{"expression":{"arguments":[{"id":12502,"name":"_sequencerOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12383,"src":"3347:16:84","typeDescriptions":{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ISequencerOracle_$6206","typeString":"contract ISequencerOracle"}],"id":12501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3339:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12500,"name":"address","nodeType":"ElementaryTypeName","src":"3339:7:84","typeDescriptions":{}}},"id":12503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3339:25:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12499,"id":12504,"nodeType":"Return","src":"3332:32:84"}]},"documentation":{"id":12495,"nodeType":"StructuredDocumentation","src":"3227:36:84","text":"@inheritdoc IPriceOracleSentinel"},"functionSelector":"12168dc2","id":12506,"implemented":true,"kind":"function","modifiers":[],"name":"getSequencerOracle","nameLocation":"3275:18:84","nodeType":"FunctionDefinition","parameters":{"id":12496,"nodeType":"ParameterList","parameters":[],"src":"3293:2:84"},"returnParameters":{"id":12499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12506,"src":"3317:7:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12497,"name":"address","nodeType":"ElementaryTypeName","src":"3317:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3316:9:84"},"scope":12516,"src":"3266:103:84","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[6106],"body":{"id":12514,"nodeType":"Block","src":"3468:30:84","statements":[{"expression":{"id":12512,"name":"_gracePeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"3481:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12511,"id":12513,"nodeType":"Return","src":"3474:19:84"}]},"documentation":{"id":12507,"nodeType":"StructuredDocumentation","src":"3373:36:84","text":"@inheritdoc IPriceOracleSentinel"},"functionSelector":"dbd18388","id":12515,"implemented":true,"kind":"function","modifiers":[],"name":"getGracePeriod","nameLocation":"3421:14:84","nodeType":"FunctionDefinition","parameters":{"id":12508,"nodeType":"ParameterList","parameters":[],"src":"3435:2:84"},"returnParameters":{"id":12511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12510,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12515,"src":"3459:7:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12509,"name":"uint256","nodeType":"ElementaryTypeName","src":"3459:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3458:9:84"},"scope":12516,"src":"3412:86:84","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":12517,"src":"776:2724:84","usedErrors":[]}],"src":"37:3464:84"},"id":84},"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","exportedSymbols":{"BaseImmutableAdminUpgradeabilityProxy":[12632],"BaseUpgradeabilityProxy":[2805]},"id":12633,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":12518,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:85"},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","file":"../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","id":12520,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12633,"sourceUnit":2806,"src":"62:118:85","symbolAliases":[{"foreign":{"id":12519,"name":"BaseUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:23:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":12522,"name":"BaseUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2805,"src":"770:23:85"},"id":12523,"nodeType":"InheritanceSpecifier","src":"770:23:85"}],"canonicalName":"BaseImmutableAdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":12521,"nodeType":"StructuredDocumentation","src":"182:537:85","text":" @title BaseImmutableAdminUpgradeabilityProxy\n @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\n @notice This contract combines an upgradeability proxy with an authorization\n mechanism for administrative tasks.\n @dev The admin role is stored in an immutable, which helps saving transactions costs\n All external functions in this contract must be guarded by the\n `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\n feature proposal that would enable this to be done automatically."},"fullyImplemented":true,"id":12632,"linearizedBaseContracts":[12632,2805,3051],"name":"BaseImmutableAdminUpgradeabilityProxy","nameLocation":"729:37:85","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":12525,"mutability":"immutable","name":"_admin","nameLocation":"825:6:85","nodeType":"VariableDeclaration","scope":12632,"src":"798:33:85","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12524,"name":"address","nodeType":"ElementaryTypeName","src":"798:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":12535,"nodeType":"Block","src":"941:25:85","statements":[{"expression":{"id":12533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12531,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12525,"src":"947:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12532,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12528,"src":"956:5:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"947:14:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12534,"nodeType":"ExpressionStatement","src":"947:14:85"}]},"documentation":{"id":12526,"nodeType":"StructuredDocumentation","src":"836:75:85","text":" @dev Constructor.\n @param admin The address of the admin"},"id":12536,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":12529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12528,"mutability":"mutable","name":"admin","nameLocation":"934:5:85","nodeType":"VariableDeclaration","scope":12536,"src":"926:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12527,"name":"address","nodeType":"ElementaryTypeName","src":"926:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"925:15:85"},"returnParameters":{"id":12530,"nodeType":"ParameterList","parameters":[],"src":"941:0:85"},"scope":12632,"src":"914:52:85","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":12549,"nodeType":"Block","src":"989:84:85","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12538,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"999:3:85","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"999:10:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":12540,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12525,"src":"1013:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"999:20:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12547,"nodeType":"Block","src":"1043:26:85","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12544,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3050,"src":"1051:9:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":12545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1051:11:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12546,"nodeType":"ExpressionStatement","src":"1051:11:85"}]},"id":12548,"nodeType":"IfStatement","src":"995:74:85","trueBody":{"id":12543,"nodeType":"Block","src":"1021:16:85","statements":[{"id":12542,"nodeType":"PlaceholderStatement","src":"1029:1:85"}]}}]},"id":12550,"name":"ifAdmin","nameLocation":"979:7:85","nodeType":"ModifierDefinition","parameters":{"id":12537,"nodeType":"ParameterList","parameters":[],"src":"986:2:85"},"src":"970:103:85","virtual":false,"visibility":"internal"},{"body":{"id":12560,"nodeType":"Block","src":"1224:24:85","statements":[{"expression":{"id":12558,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12525,"src":"1237:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12557,"id":12559,"nodeType":"Return","src":"1230:13:85"}]},"documentation":{"id":12551,"nodeType":"StructuredDocumentation","src":"1077:92:85","text":" @notice Return the admin address\n @return The address of the proxy admin."},"functionSelector":"f851a440","id":12561,"implemented":true,"kind":"function","modifiers":[{"id":12554,"kind":"modifierInvocation","modifierName":{"id":12553,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":12550,"src":"1198:7:85"},"nodeType":"ModifierInvocation","src":"1198:7:85"}],"name":"admin","nameLocation":"1181:5:85","nodeType":"FunctionDefinition","parameters":{"id":12552,"nodeType":"ParameterList","parameters":[],"src":"1186:2:85"},"returnParameters":{"id":12557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12561,"src":"1215:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12555,"name":"address","nodeType":"ElementaryTypeName","src":"1215:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1214:9:85"},"scope":12632,"src":"1172:76:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":12572,"nodeType":"Block","src":"1420:35:85","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12569,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[2769],"referencedDeclaration":2769,"src":"1433:15:85","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":12570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1433:17:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12568,"id":12571,"nodeType":"Return","src":"1426:24:85"}]},"documentation":{"id":12562,"nodeType":"StructuredDocumentation","src":"1252:104:85","text":" @notice Return the implementation address\n @return The address of the implementation."},"functionSelector":"5c60da1b","id":12573,"implemented":true,"kind":"function","modifiers":[{"id":12565,"kind":"modifierInvocation","modifierName":{"id":12564,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":12550,"src":"1394:7:85"},"nodeType":"ModifierInvocation","src":"1394:7:85"}],"name":"implementation","nameLocation":"1368:14:85","nodeType":"FunctionDefinition","parameters":{"id":12563,"nodeType":"ParameterList","parameters":[],"src":"1382:2:85"},"returnParameters":{"id":12568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12567,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12573,"src":"1411:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12566,"name":"address","nodeType":"ElementaryTypeName","src":"1411:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1410:9:85"},"scope":12632,"src":"1359:96:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":12585,"nodeType":"Block","src":"1714:40:85","statements":[{"expression":{"arguments":[{"id":12582,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12576,"src":"1731:17:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12581,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2784,"src":"1720:10:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":12583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1720:29:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12584,"nodeType":"ExpressionStatement","src":"1720:29:85"}]},"documentation":{"id":12574,"nodeType":"StructuredDocumentation","src":"1459:189:85","text":" @notice Upgrade the backing implementation of the proxy.\n @dev Only the admin can call this function.\n @param newImplementation The address of the new implementation."},"functionSelector":"3659cfe6","id":12586,"implemented":true,"kind":"function","modifiers":[{"id":12579,"kind":"modifierInvocation","modifierName":{"id":12578,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":12550,"src":"1706:7:85"},"nodeType":"ModifierInvocation","src":"1706:7:85"}],"name":"upgradeTo","nameLocation":"1660:9:85","nodeType":"FunctionDefinition","parameters":{"id":12577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12576,"mutability":"mutable","name":"newImplementation","nameLocation":"1678:17:85","nodeType":"VariableDeclaration","scope":12586,"src":"1670:25:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12575,"name":"address","nodeType":"ElementaryTypeName","src":"1670:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1669:27:85"},"returnParameters":{"id":12580,"nodeType":"ParameterList","parameters":[],"src":"1714:0:85"},"scope":12632,"src":"1651:103:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":12611,"nodeType":"Block","src":"2394:123:85","statements":[{"expression":{"arguments":[{"id":12597,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12589,"src":"2411:17:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12596,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2784,"src":"2400:10:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":12598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2400:29:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12599,"nodeType":"ExpressionStatement","src":"2400:29:85"},{"assignments":[12601,null],"declarations":[{"constant":false,"id":12601,"mutability":"mutable","name":"success","nameLocation":"2441:7:85","nodeType":"VariableDeclaration","scope":12611,"src":"2436:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12600,"name":"bool","nodeType":"ElementaryTypeName","src":"2436:4:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":12606,"initialValue":{"arguments":[{"id":12604,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12591,"src":"2485:4:85","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":12602,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12589,"src":"2454:17:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"2454:30:85","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":12605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2454:36:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2435:55:85"},{"expression":{"arguments":[{"id":12608,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12601,"src":"2504:7:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":12607,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2496:7:85","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":12609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2496:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12610,"nodeType":"ExpressionStatement","src":"2496:16:85"}]},"documentation":{"id":12587,"nodeType":"StructuredDocumentation","src":"1758:522:85","text":" @notice Upgrade the backing implementation of the proxy and call a function\n on the new implementation.\n @dev This is useful to initialize the proxied contract.\n @param newImplementation The address of the new implementation.\n @param data Data to send as msg.data in the low level call.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding."},"functionSelector":"4f1ef286","id":12612,"implemented":true,"kind":"function","modifiers":[{"id":12594,"kind":"modifierInvocation","modifierName":{"id":12593,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":12550,"src":"2386:7:85"},"nodeType":"ModifierInvocation","src":"2386:7:85"}],"name":"upgradeToAndCall","nameLocation":"2292:16:85","nodeType":"FunctionDefinition","parameters":{"id":12592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12589,"mutability":"mutable","name":"newImplementation","nameLocation":"2322:17:85","nodeType":"VariableDeclaration","scope":12612,"src":"2314:25:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12588,"name":"address","nodeType":"ElementaryTypeName","src":"2314:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12591,"mutability":"mutable","name":"data","nameLocation":"2360:4:85","nodeType":"VariableDeclaration","scope":12612,"src":"2345:19:85","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":12590,"name":"bytes","nodeType":"ElementaryTypeName","src":"2345:5:85","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2308:60:85"},"returnParameters":{"id":12595,"nodeType":"ParameterList","parameters":[],"src":"2394:0:85"},"scope":12632,"src":"2283:234:85","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[3037],"body":{"id":12630,"nodeType":"Block","src":"2646:121:85","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12618,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2660:3:85","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2660:10:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12620,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12525,"src":"2674:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2660:20:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e","id":12622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2682:52:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9","typeString":"literal_string \"Cannot call fallback function from the proxy admin\""},"value":"Cannot call fallback function from the proxy admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9","typeString":"literal_string \"Cannot call fallback function from the proxy admin\""}],"id":12617,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2652:7:85","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2652:83:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12624,"nodeType":"ExpressionStatement","src":"2652:83:85"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12625,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2741:5:85","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_BaseImmutableAdminUpgradeabilityProxy_$12632_$","typeString":"type(contract super BaseImmutableAdminUpgradeabilityProxy)"}},"id":12627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":3037,"src":"2741:19:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":12628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2741:21:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12629,"nodeType":"ExpressionStatement","src":"2741:21:85"}]},"documentation":{"id":12613,"nodeType":"StructuredDocumentation","src":"2521:71:85","text":" @notice Only fall back when the sender is not the admin."},"id":12631,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"2604:13:85","nodeType":"FunctionDefinition","overrides":{"id":12615,"nodeType":"OverrideSpecifier","overrides":[],"src":"2637:8:85"},"parameters":{"id":12614,"nodeType":"ParameterList","parameters":[],"src":"2617:2:85"},"returnParameters":{"id":12616,"nodeType":"ParameterList","parameters":[],"src":"2646:0:85"},"scope":12632,"src":"2595:172:85","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":12633,"src":"720:2049:85","usedErrors":[]}],"src":"37:2733:85"},"id":85},"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","exportedSymbols":{"BaseImmutableAdminUpgradeabilityProxy":[12632],"InitializableImmutableAdminUpgradeabilityProxy":[12669],"InitializableUpgradeabilityProxy":[3007],"Proxy":[3051]},"id":12670,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":12634,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:86"},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","file":"../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","id":12636,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12670,"sourceUnit":3008,"src":"62:136:86","symbolAliases":[{"foreign":{"id":12635,"name":"InitializableUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:32:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","file":"../../../dependencies/openzeppelin/upgradeability/Proxy.sol","id":12638,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12670,"sourceUnit":3052,"src":"199:82:86","symbolAliases":[{"foreign":{"id":12637,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"207:5:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","file":"./BaseImmutableAdminUpgradeabilityProxy.sol","id":12640,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12670,"sourceUnit":12633,"src":"282:98:86","symbolAliases":[{"foreign":{"id":12639,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"290:37:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":12642,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":12632,"src":"589:37:86"},"id":12643,"nodeType":"InheritanceSpecifier","src":"589:37:86"},{"baseName":{"id":12644,"name":"InitializableUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":3007,"src":"630:32:86"},"id":12645,"nodeType":"InheritanceSpecifier","src":"630:32:86"}],"canonicalName":"InitializableImmutableAdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":12641,"nodeType":"StructuredDocumentation","src":"382:145:86","text":" @title InitializableAdminUpgradeabilityProxy\n @author Aave\n @dev Extends BaseAdminUpgradeabilityProxy with an initializer function"},"fullyImplemented":true,"id":12669,"linearizedBaseContracts":[12669,3007,12632,2805,3051],"name":"InitializableImmutableAdminUpgradeabilityProxy","nameLocation":"537:46:86","nodeType":"ContractDefinition","nodes":[{"body":{"id":12654,"nodeType":"Block","src":"817:37:86","statements":[]},"documentation":{"id":12646,"nodeType":"StructuredDocumentation","src":"667:75:86","text":" @dev Constructor.\n @param admin The address of the admin"},"id":12655,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":12651,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12648,"src":"810:5:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":12652,"kind":"baseConstructorSpecifier","modifierName":{"id":12650,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":12632,"src":"772:37:86"},"nodeType":"ModifierInvocation","src":"772:44:86"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":12649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12648,"mutability":"mutable","name":"admin","nameLocation":"765:5:86","nodeType":"VariableDeclaration","scope":12655,"src":"757:13:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12647,"name":"address","nodeType":"ElementaryTypeName","src":"757:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"756:15:86"},"returnParameters":{"id":12653,"nodeType":"ParameterList","parameters":[],"src":"817:0:86"},"scope":12669,"src":"745:109:86","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3037,12631],"body":{"id":12667,"nodeType":"Block","src":"1003:64:86","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12662,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12632,"src":"1009:37:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BaseImmutableAdminUpgradeabilityProxy_$12632_$","typeString":"type(contract BaseImmutableAdminUpgradeabilityProxy)"}},"id":12664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":12631,"src":"1009:51:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":12665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1009:53:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12666,"nodeType":"ExpressionStatement","src":"1009:53:86"}]},"documentation":{"id":12656,"nodeType":"StructuredDocumentation","src":"858:53:86","text":"@inheritdoc BaseImmutableAdminUpgradeabilityProxy"},"id":12668,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"923:13:86","nodeType":"FunctionDefinition","overrides":{"id":12660,"nodeType":"OverrideSpecifier","overrides":[{"id":12658,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":12632,"src":"957:37:86"},{"id":12659,"name":"Proxy","nodeType":"IdentifierPath","referencedDeclaration":3051,"src":"996:5:86"}],"src":"948:54:86"},"parameters":{"id":12657,"nodeType":"ParameterList","parameters":[],"src":"936:2:86"},"returnParameters":{"id":12661,"nodeType":"ParameterList","parameters":[],"src":"1003:0:86"},"scope":12669,"src":"914:153:86","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":12670,"src":"528:541:86","usedErrors":[]}],"src":"37:1033:86"},"id":86},"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","exportedSymbols":{"VersionedInitializable":[12750]},"id":12751,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":12671,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:87"},{"abstract":true,"baseContracts":[],"canonicalName":"VersionedInitializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":12672,"nodeType":"StructuredDocumentation","src":"62:706:87","text":" @title VersionedInitializable\n @author Aave, inspired by the OpenZeppelin Initializable contract\n @notice Helper contract to implement initializer functions. To use it, replace\n the constructor with a function that has the `initializer` modifier.\n @dev WARNING: Unlike constructors, initializer functions must be manually\n invoked. This applies both to deploying an Initializable contract, as well\n as extending an Initializable contract via inheritance.\n WARNING: When used with inheritance, manual care must be taken to not invoke\n a parent initializer twice, or ensure that all initializers are idempotent,\n because this is not dealt with automatically as with constructors."},"fullyImplemented":false,"id":12750,"linearizedBaseContracts":[12750],"name":"VersionedInitializable","nameLocation":"787:22:87","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":12673,"nodeType":"StructuredDocumentation","src":"814:69:87","text":" @dev Indicates that the contract has been initialized."},"id":12676,"mutability":"mutable","name":"lastInitializedRevision","nameLocation":"902:23:87","nodeType":"VariableDeclaration","scope":12750,"src":"886:43:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12674,"name":"uint256","nodeType":"ElementaryTypeName","src":"886:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":12675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"928:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"private"},{"constant":false,"documentation":{"id":12677,"nodeType":"StructuredDocumentation","src":"934:87:87","text":" @dev Indicates that the contract is in the process of being initialized."},"id":12679,"mutability":"mutable","name":"initializing","nameLocation":"1037:12:87","nodeType":"VariableDeclaration","scope":12750,"src":"1024:25:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12678,"name":"bool","nodeType":"ElementaryTypeName","src":"1024:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"body":{"id":12723,"nodeType":"Block","src":"1158:407:87","statements":[{"assignments":[12683],"declarations":[{"constant":false,"id":12683,"mutability":"mutable","name":"revision","nameLocation":"1172:8:87","nodeType":"VariableDeclaration","scope":12723,"src":"1164:16:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12682,"name":"uint256","nodeType":"ElementaryTypeName","src":"1164:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12686,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":12684,"name":"getRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12730,"src":"1183:11:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint256_$","typeString":"function () pure returns (uint256)"}},"id":12685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1183:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1164:32:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12688,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12679,"src":"1217:12:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":12689,"name":"isConstructor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12745,"src":"1233:13:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":12690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1233:15:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1217:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12692,"name":"revision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12683,"src":"1252:8:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12693,"name":"lastInitializedRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12676,"src":"1263:23:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1252:34:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1217:69:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564","id":12696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1294:48:87","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4","typeString":"literal_string \"Contract instance has already been initialized\""},"value":"Contract instance has already been initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4","typeString":"literal_string \"Contract instance has already been initialized\""}],"id":12687,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1202:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1202:146:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12698,"nodeType":"ExpressionStatement","src":"1202:146:87"},{"assignments":[12700],"declarations":[{"constant":false,"id":12700,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"1360:14:87","nodeType":"VariableDeclaration","scope":12723,"src":"1355:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12699,"name":"bool","nodeType":"ElementaryTypeName","src":"1355:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":12703,"initialValue":{"id":12702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1377:13:87","subExpression":{"id":12701,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12679,"src":"1378:12:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"1355:35:87"},{"condition":{"id":12704,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12700,"src":"1400:14:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12714,"nodeType":"IfStatement","src":"1396:96:87","trueBody":{"id":12713,"nodeType":"Block","src":"1416:76:87","statements":[{"expression":{"id":12707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12705,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12679,"src":"1424:12:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":12706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1439:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1424:19:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12708,"nodeType":"ExpressionStatement","src":"1424:19:87"},{"expression":{"id":12711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12709,"name":"lastInitializedRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12676,"src":"1451:23:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12710,"name":"revision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12683,"src":"1477:8:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1451:34:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12712,"nodeType":"ExpressionStatement","src":"1451:34:87"}]}},{"id":12715,"nodeType":"PlaceholderStatement","src":"1498:1:87"},{"condition":{"id":12716,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12700,"src":"1510:14:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12722,"nodeType":"IfStatement","src":"1506:55:87","trueBody":{"id":12721,"nodeType":"Block","src":"1526:35:87","statements":[{"expression":{"id":12719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12717,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12679,"src":"1534:12:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":12718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1549:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1534:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12720,"nodeType":"ExpressionStatement","src":"1534:20:87"}]}}]},"documentation":{"id":12680,"nodeType":"StructuredDocumentation","src":"1054:78:87","text":" @dev Modifier to use in the initializer function of a contract."},"id":12724,"name":"initializer","nameLocation":"1144:11:87","nodeType":"ModifierDefinition","parameters":{"id":12681,"nodeType":"ParameterList","parameters":[],"src":"1155:2:87"},"src":"1135:430:87","virtual":false,"visibility":"internal"},{"documentation":{"id":12725,"nodeType":"StructuredDocumentation","src":"1569:167:87","text":" @notice Returns the revision number of the contract\n @dev Needs to be defined in the inherited class as a constant.\n @return The revision number"},"id":12730,"implemented":false,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1748:11:87","nodeType":"FunctionDefinition","parameters":{"id":12726,"nodeType":"ParameterList","parameters":[],"src":"1759:2:87"},"returnParameters":{"id":12729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12728,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12730,"src":"1793:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12727,"name":"uint256","nodeType":"ElementaryTypeName","src":"1793:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1792:9:87"},"scope":12750,"src":"1739:63:87","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":12744,"nodeType":"Block","src":"2019:457:87","statements":[{"assignments":[12737],"declarations":[{"constant":false,"id":12737,"mutability":"mutable","name":"cs","nameLocation":"2362:2:87","nodeType":"VariableDeclaration","scope":12744,"src":"2354:10:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12736,"name":"uint256","nodeType":"ElementaryTypeName","src":"2354:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12738,"nodeType":"VariableDeclarationStatement","src":"2354:10:87"},{"AST":{"nodeType":"YulBlock","src":"2410:42:87","statements":[{"nodeType":"YulAssignment","src":"2418:28:87","value":{"arguments":[{"arguments":[],"functionName":{"name":"address","nodeType":"YulIdentifier","src":"2436:7:87"},"nodeType":"YulFunctionCall","src":"2436:9:87"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"2424:11:87"},"nodeType":"YulFunctionCall","src":"2424:22:87"},"variableNames":[{"name":"cs","nodeType":"YulIdentifier","src":"2418:2:87"}]}]},"evmVersion":"london","externalReferences":[{"declaration":12737,"isOffset":false,"isSlot":false,"src":"2418:2:87","valueSize":1}],"id":12739,"nodeType":"InlineAssembly","src":"2401:51:87"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12740,"name":"cs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12737,"src":"2464:2:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2470:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2464:7:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12735,"id":12743,"nodeType":"Return","src":"2457:14:87"}]},"documentation":{"id":12731,"nodeType":"StructuredDocumentation","src":"1806:157:87","text":" @notice Returns true if and only if the function is running in the constructor\n @return True if the function is running in the constructor"},"id":12745,"implemented":true,"kind":"function","modifiers":[],"name":"isConstructor","nameLocation":"1975:13:87","nodeType":"FunctionDefinition","parameters":{"id":12732,"nodeType":"ParameterList","parameters":[],"src":"1988:2:87"},"returnParameters":{"id":12735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12745,"src":"2013:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12733,"name":"bool","nodeType":"ElementaryTypeName","src":"2013:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2012:6:87"},"scope":12750,"src":"1966:510:87","stateMutability":"view","virtual":false,"visibility":"private"},{"constant":false,"id":12749,"mutability":"mutable","name":"______gap","nameLocation":"2571:9:87","nodeType":"VariableDeclaration","scope":12750,"src":"2551:29:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":12746,"name":"uint256","nodeType":"ElementaryTypeName","src":"2551:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12748,"length":{"hexValue":"3530","id":12747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2559:2:87","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"2551:11:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":12751,"src":"769:1814:87","usedErrors":[]}],"src":"37:2547:87"},"id":87},"contracts/protocol/libraries/configuration/ReserveConfiguration.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","exportedSymbols":{"DataTypes":[24227],"Errors":[14819],"ReserveConfiguration":[14034]},"id":14035,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":12752,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:88"},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":12754,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14035,"sourceUnit":14820,"src":"62:45:88","symbolAliases":[{"foreign":{"id":12753,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":12756,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14035,"sourceUnit":24228,"src":"108:49:88","symbolAliases":[{"foreign":{"id":12755,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"116:9:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ReserveConfiguration","contractDependencies":[],"contractKind":"library","documentation":{"id":12757,"nodeType":"StructuredDocumentation","src":"159:137:88","text":" @title ReserveConfiguration library\n @author Aave\n @notice Implements the bitmap logic to handle the reserve configuration"},"fullyImplemented":true,"id":14034,"linearizedBaseContracts":[14034],"name":"ReserveConfiguration","nameLocation":"305:20:88","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":12760,"mutability":"constant","name":"LTV_MASK","nameLocation":"356:8:88","nodeType":"VariableDeclaration","scope":14034,"src":"330:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12758,"name":"uint256","nodeType":"ElementaryTypeName","src":"330:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464630303030","id":12759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"389:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457584007913129574400_by_1","typeString":"int_const 1157...(70 digits omitted)...4400"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000"},"visibility":"internal"},{"constant":true,"id":12763,"mutability":"constant","name":"LIQUIDATION_THRESHOLD_MASK","nameLocation":"504:26:88","nodeType":"VariableDeclaration","scope":14034,"src":"478:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12761,"name":"uint256","nodeType":"ElementaryTypeName","src":"478:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463030303046464646","id":12762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"537:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457584007908834738175_by_1","typeString":"int_const 1157...(70 digits omitted)...8175"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF"},"visibility":"internal"},{"constant":true,"id":12766,"mutability":"constant","name":"LIQUIDATION_BONUS_MASK","nameLocation":"652:22:88","nodeType":"VariableDeclaration","scope":14034,"src":"626:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12764,"name":"uint256","nodeType":"ElementaryTypeName","src":"626:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646303030304646464646464646","id":12765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"685:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457583726442447896575_by_1","typeString":"int_const 1157...(70 digits omitted)...6575"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12769,"mutability":"constant","name":"DECIMALS_MASK","nameLocation":"800:13:88","nodeType":"VariableDeclaration","scope":14034,"src":"774:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12767,"name":"uint256","nodeType":"ElementaryTypeName","src":"774:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463030464646464646464646464646","id":12768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"833:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457512231794068422655_by_1","typeString":"int_const 1157...(70 digits omitted)...2655"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12772,"mutability":"constant","name":"ACTIVE_MASK","nameLocation":"948:11:88","nodeType":"VariableDeclaration","scope":14034,"src":"922:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12770,"name":"uint256","nodeType":"ElementaryTypeName","src":"922:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646454646464646464646464646464646","id":12771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"981:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457511950319091711999_by_1","typeString":"int_const 1157...(70 digits omitted)...1999"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12775,"mutability":"constant","name":"FROZEN_MASK","nameLocation":"1096:11:88","nodeType":"VariableDeclaration","scope":14034,"src":"1070:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12773,"name":"uint256","nodeType":"ElementaryTypeName","src":"1070:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646444646464646464646464646464646","id":12774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1129:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457439892725053784063_by_1","typeString":"int_const 1157...(70 digits omitted)...4063"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12778,"mutability":"constant","name":"BORROWING_MASK","nameLocation":"1244:14:88","nodeType":"VariableDeclaration","scope":14034,"src":"1218:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12776,"name":"uint256","nodeType":"ElementaryTypeName","src":"1218:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646424646464646464646464646464646","id":12777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1277:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457295777536977928191_by_1","typeString":"int_const 1157...(70 digits omitted)...8191"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12781,"mutability":"constant","name":"STABLE_BORROWING_MASK","nameLocation":"1392:21:88","nodeType":"VariableDeclaration","scope":14034,"src":"1366:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12779,"name":"uint256","nodeType":"ElementaryTypeName","src":"1366:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646374646464646464646464646464646","id":12780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1425:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457007547160826216447_by_1","typeString":"int_const 1157...(70 digits omitted)...6447"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12784,"mutability":"constant","name":"PAUSED_MASK","nameLocation":"1540:11:88","nodeType":"VariableDeclaration","scope":14034,"src":"1514:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12782,"name":"uint256","nodeType":"ElementaryTypeName","src":"1514:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645464646464646464646464646464646","id":12783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1573:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039456431086408522792959_by_1","typeString":"int_const 1157...(70 digits omitted)...2959"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12787,"mutability":"constant","name":"BORROWABLE_IN_ISOLATION_MASK","nameLocation":"1688:28:88","nodeType":"VariableDeclaration","scope":14034,"src":"1662:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12785,"name":"uint256","nodeType":"ElementaryTypeName","src":"1662:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464644464646464646464646464646464646","id":12786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1721:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039455278164903915945983_by_1","typeString":"int_const 1157...(70 digits omitted)...5983"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12790,"mutability":"constant","name":"SILOED_BORROWING_MASK","nameLocation":"1836:21:88","nodeType":"VariableDeclaration","scope":14034,"src":"1810:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12788,"name":"uint256","nodeType":"ElementaryTypeName","src":"1810:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464642464646464646464646464646464646","id":12789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1869:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039452972321894702252031_by_1","typeString":"int_const 1157...(70 digits omitted)...2031"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12793,"mutability":"constant","name":"FLASHLOAN_ENABLED_MASK","nameLocation":"1984:22:88","nodeType":"VariableDeclaration","scope":14034,"src":"1958:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12791,"name":"uint256","nodeType":"ElementaryTypeName","src":"1958:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464637464646464646464646464646464646","id":12792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2017:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039448360635876274864127_by_1","typeString":"int_const 1157...(70 digits omitted)...4127"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12796,"mutability":"constant","name":"RESERVE_FACTOR_MASK","nameLocation":"2132:19:88","nodeType":"VariableDeclaration","scope":14034,"src":"2106:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12794,"name":"uint256","nodeType":"ElementaryTypeName","src":"2106:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646463030303046464646464646464646464646464646","id":12795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2165:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640562830550211137357664485375_by_1","typeString":"int_const 1157...(70 digits omitted)...5375"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12799,"mutability":"constant","name":"BORROW_CAP_MASK","nameLocation":"2280:15:88","nodeType":"VariableDeclaration","scope":14034,"src":"2254:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12797,"name":"uint256","nodeType":"ElementaryTypeName","src":"2254:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646463030303030303030304646464646464646464646464646464646464646","id":12798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2313:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269901588890828691141347134601036824575_by_1","typeString":"int_const 1157...(70 digits omitted)...4575"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12802,"mutability":"constant","name":"SUPPLY_CAP_MASK","nameLocation":"2428:15:88","nodeType":"VariableDeclaration","scope":14034,"src":"2402:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12800,"name":"uint256","nodeType":"ElementaryTypeName","src":"2402:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646463030303030303030304646464646464646464646464646464646464646464646464646464646","id":12801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2461:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008682198862499243902866067452821842515308866174975_by_1","typeString":"int_const 1157...(70 digits omitted)...4975"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12805,"mutability":"constant","name":"LIQUIDATION_PROTOCOL_FEE_MASK","nameLocation":"2576:29:88","nodeType":"VariableDeclaration","scope":14034,"src":"2550:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12803,"name":"uint256","nodeType":"ElementaryTypeName","src":"2550:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646303030304646464646464646464646464646464646464646464646464646464646464646464646464646","id":12804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2609:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570984634549197687329661445021480007966928956539929624575_by_1","typeString":"int_const 1157...(70 digits omitted)...4575"},"value":"0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12808,"mutability":"constant","name":"EMODE_CATEGORY_MASK","nameLocation":"2724:19:88","nodeType":"VariableDeclaration","scope":14034,"src":"2698:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12806,"name":"uint256","nodeType":"ElementaryTypeName","src":"2698:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646463030464646464646464646464646464646464646464646464646464646464646464646464646464646464646","id":12807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2757:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570889601861022891927484329094684320502060868636724166655_by_1","typeString":"int_const 1157...(70 digits omitted)...6655"},"value":"0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12811,"mutability":"constant","name":"UNBACKED_MINT_CAP_MASK","nameLocation":"2872:22:88","nodeType":"VariableDeclaration","scope":14034,"src":"2846:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12809,"name":"uint256","nodeType":"ElementaryTypeName","src":"2846:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646463030303030303030304646464646464646464646464646464646464646464646464646464646464646464646464646464646464646","id":12810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2905:66:88","typeDescriptions":{"typeIdentifier":"t_rational_115792089237309613405341795965490592094593402660309829990319025859654871678975_by_1","typeString":"int_const 1157...(70 digits omitted)...8975"},"value":"0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":12814,"mutability":"constant","name":"DEBT_CEILING_MASK","nameLocation":"3020:17:88","nodeType":"VariableDeclaration","scope":14034,"src":"2994:125:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12812,"name":"uint256","nodeType":"ElementaryTypeName","src":"2994:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846303030303030303030304646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646","id":12813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3053:66:88","typeDescriptions":{"typeIdentifier":"t_rational_108555083659990515227827083269813533489170840026057959730454019326871953473535_by_1","typeString":"int_const 1085...(70 digits omitted)...3535"},"value":"0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"documentation":{"id":12815,"nodeType":"StructuredDocumentation","src":"3143:83:88","text":"@dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed"},"id":12818,"mutability":"constant","name":"LIQUIDATION_THRESHOLD_START_BIT_POSITION","nameLocation":"3255:40:88","nodeType":"VariableDeclaration","scope":14034,"src":"3229:71:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12816,"name":"uint256","nodeType":"ElementaryTypeName","src":"3229:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3136","id":12817,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3298:2:88","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"visibility":"internal"},{"constant":true,"id":12821,"mutability":"constant","name":"LIQUIDATION_BONUS_START_BIT_POSITION","nameLocation":"3330:36:88","nodeType":"VariableDeclaration","scope":14034,"src":"3304:67:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12819,"name":"uint256","nodeType":"ElementaryTypeName","src":"3304:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3332","id":12820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3369:2:88","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"visibility":"internal"},{"constant":true,"id":12824,"mutability":"constant","name":"RESERVE_DECIMALS_START_BIT_POSITION","nameLocation":"3401:35:88","nodeType":"VariableDeclaration","scope":14034,"src":"3375:66:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12822,"name":"uint256","nodeType":"ElementaryTypeName","src":"3375:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3438","id":12823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3439:2:88","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"visibility":"internal"},{"constant":true,"id":12827,"mutability":"constant","name":"IS_ACTIVE_START_BIT_POSITION","nameLocation":"3471:28:88","nodeType":"VariableDeclaration","scope":14034,"src":"3445:59:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12825,"name":"uint256","nodeType":"ElementaryTypeName","src":"3445:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3536","id":12826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3502:2:88","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},"visibility":"internal"},{"constant":true,"id":12830,"mutability":"constant","name":"IS_FROZEN_START_BIT_POSITION","nameLocation":"3534:28:88","nodeType":"VariableDeclaration","scope":14034,"src":"3508:59:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12828,"name":"uint256","nodeType":"ElementaryTypeName","src":"3508:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3537","id":12829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3565:2:88","typeDescriptions":{"typeIdentifier":"t_rational_57_by_1","typeString":"int_const 57"},"value":"57"},"visibility":"internal"},{"constant":true,"id":12833,"mutability":"constant","name":"BORROWING_ENABLED_START_BIT_POSITION","nameLocation":"3597:36:88","nodeType":"VariableDeclaration","scope":14034,"src":"3571:67:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12831,"name":"uint256","nodeType":"ElementaryTypeName","src":"3571:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3538","id":12832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3636:2:88","typeDescriptions":{"typeIdentifier":"t_rational_58_by_1","typeString":"int_const 58"},"value":"58"},"visibility":"internal"},{"constant":true,"id":12836,"mutability":"constant","name":"STABLE_BORROWING_ENABLED_START_BIT_POSITION","nameLocation":"3668:43:88","nodeType":"VariableDeclaration","scope":14034,"src":"3642:74:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12834,"name":"uint256","nodeType":"ElementaryTypeName","src":"3642:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3539","id":12835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3714:2:88","typeDescriptions":{"typeIdentifier":"t_rational_59_by_1","typeString":"int_const 59"},"value":"59"},"visibility":"internal"},{"constant":true,"id":12839,"mutability":"constant","name":"IS_PAUSED_START_BIT_POSITION","nameLocation":"3746:28:88","nodeType":"VariableDeclaration","scope":14034,"src":"3720:59:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12837,"name":"uint256","nodeType":"ElementaryTypeName","src":"3720:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3630","id":12838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3777:2:88","typeDescriptions":{"typeIdentifier":"t_rational_60_by_1","typeString":"int_const 60"},"value":"60"},"visibility":"internal"},{"constant":true,"id":12842,"mutability":"constant","name":"BORROWABLE_IN_ISOLATION_START_BIT_POSITION","nameLocation":"3809:42:88","nodeType":"VariableDeclaration","scope":14034,"src":"3783:73:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12840,"name":"uint256","nodeType":"ElementaryTypeName","src":"3783:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3631","id":12841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3854:2:88","typeDescriptions":{"typeIdentifier":"t_rational_61_by_1","typeString":"int_const 61"},"value":"61"},"visibility":"internal"},{"constant":true,"id":12845,"mutability":"constant","name":"SILOED_BORROWING_START_BIT_POSITION","nameLocation":"3886:35:88","nodeType":"VariableDeclaration","scope":14034,"src":"3860:66:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12843,"name":"uint256","nodeType":"ElementaryTypeName","src":"3860:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3632","id":12844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3924:2:88","typeDescriptions":{"typeIdentifier":"t_rational_62_by_1","typeString":"int_const 62"},"value":"62"},"visibility":"internal"},{"constant":true,"id":12848,"mutability":"constant","name":"FLASHLOAN_ENABLED_START_BIT_POSITION","nameLocation":"3956:36:88","nodeType":"VariableDeclaration","scope":14034,"src":"3930:67:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12846,"name":"uint256","nodeType":"ElementaryTypeName","src":"3930:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3633","id":12847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3995:2:88","typeDescriptions":{"typeIdentifier":"t_rational_63_by_1","typeString":"int_const 63"},"value":"63"},"visibility":"internal"},{"constant":true,"id":12851,"mutability":"constant","name":"RESERVE_FACTOR_START_BIT_POSITION","nameLocation":"4027:33:88","nodeType":"VariableDeclaration","scope":14034,"src":"4001:64:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12849,"name":"uint256","nodeType":"ElementaryTypeName","src":"4001:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3634","id":12850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:2:88","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"visibility":"internal"},{"constant":true,"id":12854,"mutability":"constant","name":"BORROW_CAP_START_BIT_POSITION","nameLocation":"4095:29:88","nodeType":"VariableDeclaration","scope":14034,"src":"4069:60:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12852,"name":"uint256","nodeType":"ElementaryTypeName","src":"4069:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3830","id":12853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4127:2:88","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},"visibility":"internal"},{"constant":true,"id":12857,"mutability":"constant","name":"SUPPLY_CAP_START_BIT_POSITION","nameLocation":"4159:29:88","nodeType":"VariableDeclaration","scope":14034,"src":"4133:61:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12855,"name":"uint256","nodeType":"ElementaryTypeName","src":"4133:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313136","id":12856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4191:3:88","typeDescriptions":{"typeIdentifier":"t_rational_116_by_1","typeString":"int_const 116"},"value":"116"},"visibility":"internal"},{"constant":true,"id":12860,"mutability":"constant","name":"LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION","nameLocation":"4224:43:88","nodeType":"VariableDeclaration","scope":14034,"src":"4198:75:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12858,"name":"uint256","nodeType":"ElementaryTypeName","src":"4198:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313532","id":12859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4270:3:88","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},"visibility":"internal"},{"constant":true,"id":12863,"mutability":"constant","name":"EMODE_CATEGORY_START_BIT_POSITION","nameLocation":"4303:33:88","nodeType":"VariableDeclaration","scope":14034,"src":"4277:65:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12861,"name":"uint256","nodeType":"ElementaryTypeName","src":"4277:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313638","id":12862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4339:3:88","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},"visibility":"internal"},{"constant":true,"id":12866,"mutability":"constant","name":"UNBACKED_MINT_CAP_START_BIT_POSITION","nameLocation":"4372:36:88","nodeType":"VariableDeclaration","scope":14034,"src":"4346:68:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12864,"name":"uint256","nodeType":"ElementaryTypeName","src":"4346:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313736","id":12865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4411:3:88","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},"visibility":"internal"},{"constant":true,"id":12869,"mutability":"constant","name":"DEBT_CEILING_START_BIT_POSITION","nameLocation":"4444:31:88","nodeType":"VariableDeclaration","scope":14034,"src":"4418:63:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12867,"name":"uint256","nodeType":"ElementaryTypeName","src":"4418:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"323132","id":12868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4478:3:88","typeDescriptions":{"typeIdentifier":"t_rational_212_by_1","typeString":"int_const 212"},"value":"212"},"visibility":"internal"},{"constant":true,"id":12872,"mutability":"constant","name":"MAX_VALID_LTV","nameLocation":"4512:13:88","nodeType":"VariableDeclaration","scope":14034,"src":"4486:47:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12870,"name":"uint256","nodeType":"ElementaryTypeName","src":"4486:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":12871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4528:5:88","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":12875,"mutability":"constant","name":"MAX_VALID_LIQUIDATION_THRESHOLD","nameLocation":"4563:31:88","nodeType":"VariableDeclaration","scope":14034,"src":"4537:65:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12873,"name":"uint256","nodeType":"ElementaryTypeName","src":"4537:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":12874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4597:5:88","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":12878,"mutability":"constant","name":"MAX_VALID_LIQUIDATION_BONUS","nameLocation":"4632:27:88","nodeType":"VariableDeclaration","scope":14034,"src":"4606:61:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12876,"name":"uint256","nodeType":"ElementaryTypeName","src":"4606:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":12877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4662:5:88","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":12881,"mutability":"constant","name":"MAX_VALID_DECIMALS","nameLocation":"4697:18:88","nodeType":"VariableDeclaration","scope":14034,"src":"4671:50:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12879,"name":"uint256","nodeType":"ElementaryTypeName","src":"4671:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"323535","id":12880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4718:3:88","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"visibility":"internal"},{"constant":true,"id":12884,"mutability":"constant","name":"MAX_VALID_RESERVE_FACTOR","nameLocation":"4751:24:88","nodeType":"VariableDeclaration","scope":14034,"src":"4725:58:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12882,"name":"uint256","nodeType":"ElementaryTypeName","src":"4725:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":12883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4778:5:88","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":12887,"mutability":"constant","name":"MAX_VALID_BORROW_CAP","nameLocation":"4813:20:88","nodeType":"VariableDeclaration","scope":14034,"src":"4787:60:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12885,"name":"uint256","nodeType":"ElementaryTypeName","src":"4787:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3638373139343736373335","id":12886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4836:11:88","typeDescriptions":{"typeIdentifier":"t_rational_68719476735_by_1","typeString":"int_const 68719476735"},"value":"68719476735"},"visibility":"internal"},{"constant":true,"id":12890,"mutability":"constant","name":"MAX_VALID_SUPPLY_CAP","nameLocation":"4877:20:88","nodeType":"VariableDeclaration","scope":14034,"src":"4851:60:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12888,"name":"uint256","nodeType":"ElementaryTypeName","src":"4851:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3638373139343736373335","id":12889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4900:11:88","typeDescriptions":{"typeIdentifier":"t_rational_68719476735_by_1","typeString":"int_const 68719476735"},"value":"68719476735"},"visibility":"internal"},{"constant":true,"id":12893,"mutability":"constant","name":"MAX_VALID_LIQUIDATION_PROTOCOL_FEE","nameLocation":"4941:34:88","nodeType":"VariableDeclaration","scope":14034,"src":"4915:68:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12891,"name":"uint256","nodeType":"ElementaryTypeName","src":"4915:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":12892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4978:5:88","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":12896,"mutability":"constant","name":"MAX_VALID_EMODE_CATEGORY","nameLocation":"5013:24:88","nodeType":"VariableDeclaration","scope":14034,"src":"4987:56:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12894,"name":"uint256","nodeType":"ElementaryTypeName","src":"4987:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"323535","id":12895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5040:3:88","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"visibility":"internal"},{"constant":true,"id":12899,"mutability":"constant","name":"MAX_VALID_UNBACKED_MINT_CAP","nameLocation":"5073:27:88","nodeType":"VariableDeclaration","scope":14034,"src":"5047:67:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12897,"name":"uint256","nodeType":"ElementaryTypeName","src":"5047:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3638373139343736373335","id":12898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5103:11:88","typeDescriptions":{"typeIdentifier":"t_rational_68719476735_by_1","typeString":"int_const 68719476735"},"value":"68719476735"},"visibility":"internal"},{"constant":true,"id":12902,"mutability":"constant","name":"MAX_VALID_DEBT_CEILING","nameLocation":"5144:22:88","nodeType":"VariableDeclaration","scope":14034,"src":"5118:64:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12900,"name":"uint256","nodeType":"ElementaryTypeName","src":"5118:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31303939353131363237373735","id":12901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5169:13:88","typeDescriptions":{"typeIdentifier":"t_rational_1099511627775_by_1","typeString":"int_const 1099511627775"},"value":"1099511627775"},"visibility":"internal"},{"constant":true,"functionSelector":"280d5de9","id":12905,"mutability":"constant","name":"DEBT_CEILING_DECIMALS","nameLocation":"5211:21:88","nodeType":"VariableDeclaration","scope":14034,"src":"5187:49:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12903,"name":"uint256","nodeType":"ElementaryTypeName","src":"5187:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":12904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5235:1:88","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"constant":true,"functionSelector":"31b561ba","id":12908,"mutability":"constant","name":"MAX_RESERVES_COUNT","nameLocation":"5263:18:88","nodeType":"VariableDeclaration","scope":14034,"src":"5240:47:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":12906,"name":"uint16","nodeType":"ElementaryTypeName","src":"5240:6:88","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"value":{"hexValue":"313238","id":12907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5284:3:88","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"visibility":"public"},{"body":{"id":12937,"nodeType":"Block","src":"5516:107:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12918,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12914,"src":"5530:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":12919,"name":"MAX_VALID_LTV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12872,"src":"5537:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5530:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12921,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5552:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":12922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LTV","nodeType":"MemberAccess","referencedDeclaration":14734,"src":"5552:18:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12917,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5522:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5522:49:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12924,"nodeType":"ExpressionStatement","src":"5522:49:88"},{"expression":{"id":12935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12925,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"5578:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":12927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"5578:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12928,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"5591:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":12929,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"5591:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12930,"name":"LTV_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12760,"src":"5603:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12932,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5590:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"id":12933,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12914,"src":"5615:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5590:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5578:40:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12936,"nodeType":"ExpressionStatement","src":"5578:40:88"}]},"documentation":{"id":12909,"nodeType":"StructuredDocumentation","src":"5292:131:88","text":" @notice Sets the Loan to Value of the reserve\n @param self The reserve configuration\n @param ltv The new ltv"},"id":12938,"implemented":true,"kind":"function","modifiers":[],"name":"setLtv","nameLocation":"5435:6:88","nodeType":"FunctionDefinition","parameters":{"id":12915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12912,"mutability":"mutable","name":"self","nameLocation":"5483:4:88","nodeType":"VariableDeclaration","scope":12938,"src":"5442:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":12911,"nodeType":"UserDefinedTypeName","pathNode":{"id":12910,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"5442:33:88"},"referencedDeclaration":23912,"src":"5442:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":12914,"mutability":"mutable","name":"ltv","nameLocation":"5497:3:88","nodeType":"VariableDeclaration","scope":12938,"src":"5489:11:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12913,"name":"uint256","nodeType":"ElementaryTypeName","src":"5489:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5441:60:88"},"returnParameters":{"id":12916,"nodeType":"ParameterList","parameters":[],"src":"5516:0:88"},"scope":14034,"src":"5426:197:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12953,"nodeType":"Block","src":"5859:39:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12947,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12942,"src":"5872:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":12948,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"5872:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"5884:9:88","subExpression":{"id":12949,"name":"LTV_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12760,"src":"5885:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5872:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12946,"id":12952,"nodeType":"Return","src":"5865:28:88"}]},"documentation":{"id":12939,"nodeType":"StructuredDocumentation","src":"5627:134:88","text":" @notice Gets the Loan to Value of the reserve\n @param self The reserve configuration\n @return The loan to value"},"id":12954,"implemented":true,"kind":"function","modifiers":[],"name":"getLtv","nameLocation":"5773:6:88","nodeType":"FunctionDefinition","parameters":{"id":12943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12942,"mutability":"mutable","name":"self","nameLocation":"5821:4:88","nodeType":"VariableDeclaration","scope":12954,"src":"5780:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":12941,"nodeType":"UserDefinedTypeName","pathNode":{"id":12940,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"5780:33:88"},"referencedDeclaration":23912,"src":"5780:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"5779:47:88"},"returnParameters":{"id":12946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12945,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12954,"src":"5850:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12944,"name":"uint256","nodeType":"ElementaryTypeName","src":"5850:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5849:9:88"},"scope":14034,"src":"5764:134:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12986,"nodeType":"Block","src":"6193:223:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12964,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12960,"src":"6207:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":12965,"name":"MAX_VALID_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12875,"src":"6220:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6207:44:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12967,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"6253:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":12968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LIQ_THRESHOLD","nodeType":"MemberAccess","referencedDeclaration":14737,"src":"6253:28:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12963,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6199:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6199:83:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12970,"nodeType":"ExpressionStatement","src":"6199:83:88"},{"expression":{"id":12984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12971,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12958,"src":"6289:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":12973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"6289:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12974,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12958,"src":"6308:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":12975,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"6308:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12976,"name":"LIQUIDATION_THRESHOLD_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12763,"src":"6320:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6308:38:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12978,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6307:40:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12979,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12960,"src":"6357:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":12980,"name":"LIQUIDATION_THRESHOLD_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12818,"src":"6370:40:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6357:53:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12982,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:55:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6307:104:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6289:122:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12985,"nodeType":"ExpressionStatement","src":"6289:122:88"}]},"documentation":{"id":12955,"nodeType":"StructuredDocumentation","src":"5902:163:88","text":" @notice Sets the liquidation threshold of the reserve\n @param self The reserve configuration\n @param threshold The new liquidation threshold"},"id":12987,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationThreshold","nameLocation":"6077:23:88","nodeType":"FunctionDefinition","parameters":{"id":12961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12958,"mutability":"mutable","name":"self","nameLocation":"6147:4:88","nodeType":"VariableDeclaration","scope":12987,"src":"6106:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":12957,"nodeType":"UserDefinedTypeName","pathNode":{"id":12956,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"6106:33:88"},"referencedDeclaration":23912,"src":"6106:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":12960,"mutability":"mutable","name":"threshold","nameLocation":"6165:9:88","nodeType":"VariableDeclaration","scope":12987,"src":"6157:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12959,"name":"uint256","nodeType":"ElementaryTypeName","src":"6157:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6100:78:88"},"returnParameters":{"id":12962,"nodeType":"ParameterList","parameters":[],"src":"6193:0:88"},"scope":14034,"src":"6068:348:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13005,"nodeType":"Block","src":"6693:103:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12996,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12991,"src":"6707:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":12997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"6707:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12999,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"6719:27:88","subExpression":{"id":12998,"name":"LIQUIDATION_THRESHOLD_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12763,"src":"6720:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6707:39:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13001,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6706:41:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13002,"name":"LIQUIDATION_THRESHOLD_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12818,"src":"6751:40:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6706:85:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12995,"id":13004,"nodeType":"Return","src":"6699:92:88"}]},"documentation":{"id":12988,"nodeType":"StructuredDocumentation","src":"6420:150:88","text":" @notice Gets the liquidation threshold of the reserve\n @param self The reserve configuration\n @return The liquidation threshold"},"id":13006,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationThreshold","nameLocation":"6582:23:88","nodeType":"FunctionDefinition","parameters":{"id":12992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12991,"mutability":"mutable","name":"self","nameLocation":"6652:4:88","nodeType":"VariableDeclaration","scope":13006,"src":"6611:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":12990,"nodeType":"UserDefinedTypeName","pathNode":{"id":12989,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"6611:33:88"},"referencedDeclaration":23912,"src":"6611:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"6605:55:88"},"returnParameters":{"id":12995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13006,"src":"6684:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12993,"name":"uint256","nodeType":"ElementaryTypeName","src":"6684:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6683:9:88"},"scope":14034,"src":"6573:223:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13038,"nodeType":"Block","src":"7071:199:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13016,"name":"bonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13012,"src":"7085:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13017,"name":"MAX_VALID_LIQUIDATION_BONUS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12878,"src":"7094:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7085:36:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13019,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"7123:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LIQ_BONUS","nodeType":"MemberAccess","referencedDeclaration":14740,"src":"7123:24:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13015,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7077:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7077:71:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13022,"nodeType":"ExpressionStatement","src":"7077:71:88"},{"expression":{"id":13036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13023,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13010,"src":"7155:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13025,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"7155:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13026,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13010,"src":"7174:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"7174:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13028,"name":"LIQUIDATION_BONUS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12766,"src":"7186:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7174:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13030,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7173:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13031,"name":"bonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13012,"src":"7219:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13032,"name":"LIQUIDATION_BONUS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12821,"src":"7228:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7219:45:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13034,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7218:47:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7173:92:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7155:110:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13037,"nodeType":"ExpressionStatement","src":"7155:110:88"}]},"documentation":{"id":13007,"nodeType":"StructuredDocumentation","src":"6800:151:88","text":" @notice Sets the liquidation bonus of the reserve\n @param self The reserve configuration\n @param bonus The new liquidation bonus"},"id":13039,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationBonus","nameLocation":"6963:19:88","nodeType":"FunctionDefinition","parameters":{"id":13013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13010,"mutability":"mutable","name":"self","nameLocation":"7029:4:88","nodeType":"VariableDeclaration","scope":13039,"src":"6988:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13009,"nodeType":"UserDefinedTypeName","pathNode":{"id":13008,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"6988:33:88"},"referencedDeclaration":23912,"src":"6988:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13012,"mutability":"mutable","name":"bonus","nameLocation":"7047:5:88","nodeType":"VariableDeclaration","scope":13039,"src":"7039:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13011,"name":"uint256","nodeType":"ElementaryTypeName","src":"7039:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6982:74:88"},"returnParameters":{"id":13014,"nodeType":"ParameterList","parameters":[],"src":"7071:0:88"},"scope":14034,"src":"6954:316:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13057,"nodeType":"Block","src":"7535:95:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13048,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13043,"src":"7549:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"7549:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"7561:23:88","subExpression":{"id":13050,"name":"LIQUIDATION_BONUS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12766,"src":"7562:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7549:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13053,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7548:37:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13054,"name":"LIQUIDATION_BONUS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12821,"src":"7589:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7548:77:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13047,"id":13056,"nodeType":"Return","src":"7541:84:88"}]},"documentation":{"id":13040,"nodeType":"StructuredDocumentation","src":"7274:142:88","text":" @notice Gets the liquidation bonus of the reserve\n @param self The reserve configuration\n @return The liquidation bonus"},"id":13058,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationBonus","nameLocation":"7428:19:88","nodeType":"FunctionDefinition","parameters":{"id":13044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13043,"mutability":"mutable","name":"self","nameLocation":"7494:4:88","nodeType":"VariableDeclaration","scope":13058,"src":"7453:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13042,"nodeType":"UserDefinedTypeName","pathNode":{"id":13041,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"7453:33:88"},"referencedDeclaration":23912,"src":"7453:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"7447:55:88"},"returnParameters":{"id":13047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13046,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13058,"src":"7526:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13045,"name":"uint256","nodeType":"ElementaryTypeName","src":"7526:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7525:9:88"},"scope":14034,"src":"7419:211:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13090,"nodeType":"Block","src":"7905:173:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13068,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13064,"src":"7919:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13069,"name":"MAX_VALID_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12881,"src":"7931:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7919:30:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13071,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"7951:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":14743,"src":"7951:23:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13067,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7911:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7911:64:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13074,"nodeType":"ExpressionStatement","src":"7911:64:88"},{"expression":{"id":13088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13075,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13062,"src":"7982:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"7982:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13078,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13062,"src":"7995:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13079,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"7995:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13080,"name":"DECIMALS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12769,"src":"8007:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7995:25:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13082,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7994:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13083,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13064,"src":"8025:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13084,"name":"RESERVE_DECIMALS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12824,"src":"8037:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8025:47:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13086,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8024:49:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7994:79:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7982:91:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13089,"nodeType":"ExpressionStatement","src":"7982:91:88"}]},"documentation":{"id":13059,"nodeType":"StructuredDocumentation","src":"7634:156:88","text":" @notice Sets the decimals of the underlying asset of the reserve\n @param self The reserve configuration\n @param decimals The decimals"},"id":13091,"implemented":true,"kind":"function","modifiers":[],"name":"setDecimals","nameLocation":"7802:11:88","nodeType":"FunctionDefinition","parameters":{"id":13065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13062,"mutability":"mutable","name":"self","nameLocation":"7860:4:88","nodeType":"VariableDeclaration","scope":13091,"src":"7819:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13061,"nodeType":"UserDefinedTypeName","pathNode":{"id":13060,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"7819:33:88"},"referencedDeclaration":23912,"src":"7819:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13064,"mutability":"mutable","name":"decimals","nameLocation":"7878:8:88","nodeType":"VariableDeclaration","scope":13091,"src":"7870:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13063,"name":"uint256","nodeType":"ElementaryTypeName","src":"7870:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7813:77:88"},"returnParameters":{"id":13066,"nodeType":"ParameterList","parameters":[],"src":"7905:0:88"},"scope":14034,"src":"7793:285:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13109,"nodeType":"Block","src":"8354:85:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13100,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13095,"src":"8368:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"8368:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13103,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"8380:14:88","subExpression":{"id":13102,"name":"DECIMALS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12769,"src":"8381:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8368:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13105,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8367:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13106,"name":"RESERVE_DECIMALS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12824,"src":"8399:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8367:67:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13099,"id":13108,"nodeType":"Return","src":"8360:74:88"}]},"documentation":{"id":13092,"nodeType":"StructuredDocumentation","src":"8082:161:88","text":" @notice Gets the decimals of the underlying asset of the reserve\n @param self The reserve configuration\n @return The decimals of the asset"},"id":13110,"implemented":true,"kind":"function","modifiers":[],"name":"getDecimals","nameLocation":"8255:11:88","nodeType":"FunctionDefinition","parameters":{"id":13096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13095,"mutability":"mutable","name":"self","nameLocation":"8313:4:88","nodeType":"VariableDeclaration","scope":13110,"src":"8272:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13094,"nodeType":"UserDefinedTypeName","pathNode":{"id":13093,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"8272:33:88"},"referencedDeclaration":23912,"src":"8272:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"8266:55:88"},"returnParameters":{"id":13099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13110,"src":"8345:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13097,"name":"uint256","nodeType":"ElementaryTypeName","src":"8345:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8344:9:88"},"scope":14034,"src":"8246:193:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13140,"nodeType":"Block","src":"8677:120:88","statements":[{"expression":{"id":13138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13119,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13114,"src":"8683:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"8683:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13122,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13114,"src":"8702:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13123,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"8702:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13124,"name":"ACTIVE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12772,"src":"8714:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8702:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13126,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8701:25:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":13129,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13116,"src":"8744:6:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8757:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8744:14:88","trueExpression":{"hexValue":"31","id":13130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8753:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13128,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8736:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13127,"name":"uint256","nodeType":"ElementaryTypeName","src":"8736:7:88","typeDescriptions":{}}},"id":13133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8736:23:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13134,"name":"IS_ACTIVE_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12827,"src":"8763:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8736:55:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13136,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8735:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8701:91:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8683:109:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13139,"nodeType":"ExpressionStatement","src":"8683:109:88"}]},"documentation":{"id":13111,"nodeType":"StructuredDocumentation","src":"8443:138:88","text":" @notice Sets the active state of the reserve\n @param self The reserve configuration\n @param active The active state"},"id":13141,"implemented":true,"kind":"function","modifiers":[],"name":"setActive","nameLocation":"8593:9:88","nodeType":"FunctionDefinition","parameters":{"id":13117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13114,"mutability":"mutable","name":"self","nameLocation":"8644:4:88","nodeType":"VariableDeclaration","scope":13141,"src":"8603:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13113,"nodeType":"UserDefinedTypeName","pathNode":{"id":13112,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"8603:33:88"},"referencedDeclaration":23912,"src":"8603:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13116,"mutability":"mutable","name":"active","nameLocation":"8655:6:88","nodeType":"VariableDeclaration","scope":13141,"src":"8650:11:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13115,"name":"bool","nodeType":"ElementaryTypeName","src":"8650:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8602:60:88"},"returnParameters":{"id":13118,"nodeType":"ParameterList","parameters":[],"src":"8677:0:88"},"scope":14034,"src":"8584:213:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13159,"nodeType":"Block","src":"9031:49:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13150,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13145,"src":"9045:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13151,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"9045:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13153,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"9057:12:88","subExpression":{"id":13152,"name":"ACTIVE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12772,"src":"9058:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9045:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13155,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9044:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9074:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9044:31:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13149,"id":13158,"nodeType":"Return","src":"9037:38:88"}]},"documentation":{"id":13142,"nodeType":"StructuredDocumentation","src":"8801:132:88","text":" @notice Gets the active state of the reserve\n @param self The reserve configuration\n @return The active state"},"id":13160,"implemented":true,"kind":"function","modifiers":[],"name":"getActive","nameLocation":"8945:9:88","nodeType":"FunctionDefinition","parameters":{"id":13146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13145,"mutability":"mutable","name":"self","nameLocation":"8996:4:88","nodeType":"VariableDeclaration","scope":13160,"src":"8955:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13144,"nodeType":"UserDefinedTypeName","pathNode":{"id":13143,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"8955:33:88"},"referencedDeclaration":23912,"src":"8955:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"8954:47:88"},"returnParameters":{"id":13149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13148,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13160,"src":"9025:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13147,"name":"bool","nodeType":"ElementaryTypeName","src":"9025:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9024:6:88"},"scope":14034,"src":"8936:144:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13190,"nodeType":"Block","src":"9318:120:88","statements":[{"expression":{"id":13188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13169,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13164,"src":"9324:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13171,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"9324:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13172,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13164,"src":"9343:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13173,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"9343:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13174,"name":"FROZEN_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12775,"src":"9355:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9343:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13176,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9342:25:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":13179,"name":"frozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13166,"src":"9385:6:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9398:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9385:14:88","trueExpression":{"hexValue":"31","id":13180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9394:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9377:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13177,"name":"uint256","nodeType":"ElementaryTypeName","src":"9377:7:88","typeDescriptions":{}}},"id":13183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9377:23:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13184,"name":"IS_FROZEN_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12830,"src":"9404:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9377:55:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13186,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9376:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9342:91:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9324:109:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13189,"nodeType":"ExpressionStatement","src":"9324:109:88"}]},"documentation":{"id":13161,"nodeType":"StructuredDocumentation","src":"9084:138:88","text":" @notice Sets the frozen state of the reserve\n @param self The reserve configuration\n @param frozen The frozen state"},"id":13191,"implemented":true,"kind":"function","modifiers":[],"name":"setFrozen","nameLocation":"9234:9:88","nodeType":"FunctionDefinition","parameters":{"id":13167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13164,"mutability":"mutable","name":"self","nameLocation":"9285:4:88","nodeType":"VariableDeclaration","scope":13191,"src":"9244:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13163,"nodeType":"UserDefinedTypeName","pathNode":{"id":13162,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"9244:33:88"},"referencedDeclaration":23912,"src":"9244:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13166,"mutability":"mutable","name":"frozen","nameLocation":"9296:6:88","nodeType":"VariableDeclaration","scope":13191,"src":"9291:11:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13165,"name":"bool","nodeType":"ElementaryTypeName","src":"9291:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9243:60:88"},"returnParameters":{"id":13168,"nodeType":"ParameterList","parameters":[],"src":"9318:0:88"},"scope":14034,"src":"9225:213:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13209,"nodeType":"Block","src":"9672:49:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13200,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13195,"src":"9686:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13201,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"9686:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"9698:12:88","subExpression":{"id":13202,"name":"FROZEN_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12775,"src":"9699:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9686:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13205,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9685:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9715:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9685:31:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13199,"id":13208,"nodeType":"Return","src":"9678:38:88"}]},"documentation":{"id":13192,"nodeType":"StructuredDocumentation","src":"9442:132:88","text":" @notice Gets the frozen state of the reserve\n @param self The reserve configuration\n @return The frozen state"},"id":13210,"implemented":true,"kind":"function","modifiers":[],"name":"getFrozen","nameLocation":"9586:9:88","nodeType":"FunctionDefinition","parameters":{"id":13196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13195,"mutability":"mutable","name":"self","nameLocation":"9637:4:88","nodeType":"VariableDeclaration","scope":13210,"src":"9596:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13194,"nodeType":"UserDefinedTypeName","pathNode":{"id":13193,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"9596:33:88"},"referencedDeclaration":23912,"src":"9596:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"9595:47:88"},"returnParameters":{"id":13199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13198,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13210,"src":"9666:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13197,"name":"bool","nodeType":"ElementaryTypeName","src":"9666:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9665:6:88"},"scope":14034,"src":"9577:144:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13240,"nodeType":"Block","src":"9959:120:88","statements":[{"expression":{"id":13238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13219,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13214,"src":"9965:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13221,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"9965:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13222,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13214,"src":"9984:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"9984:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13224,"name":"PAUSED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12784,"src":"9996:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9984:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13226,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9983:25:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":13229,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13216,"src":"10026:6:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10039:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10026:14:88","trueExpression":{"hexValue":"31","id":13230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10035:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13228,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10018:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13227,"name":"uint256","nodeType":"ElementaryTypeName","src":"10018:7:88","typeDescriptions":{}}},"id":13233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10018:23:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13234,"name":"IS_PAUSED_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12839,"src":"10045:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10018:55:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13236,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10017:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9983:91:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9965:109:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13239,"nodeType":"ExpressionStatement","src":"9965:109:88"}]},"documentation":{"id":13211,"nodeType":"StructuredDocumentation","src":"9725:138:88","text":" @notice Sets the paused state of the reserve\n @param self The reserve configuration\n @param paused The paused state"},"id":13241,"implemented":true,"kind":"function","modifiers":[],"name":"setPaused","nameLocation":"9875:9:88","nodeType":"FunctionDefinition","parameters":{"id":13217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13214,"mutability":"mutable","name":"self","nameLocation":"9926:4:88","nodeType":"VariableDeclaration","scope":13241,"src":"9885:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13213,"nodeType":"UserDefinedTypeName","pathNode":{"id":13212,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"9885:33:88"},"referencedDeclaration":23912,"src":"9885:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13216,"mutability":"mutable","name":"paused","nameLocation":"9937:6:88","nodeType":"VariableDeclaration","scope":13241,"src":"9932:11:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13215,"name":"bool","nodeType":"ElementaryTypeName","src":"9932:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9884:60:88"},"returnParameters":{"id":13218,"nodeType":"ParameterList","parameters":[],"src":"9959:0:88"},"scope":14034,"src":"9866:213:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13259,"nodeType":"Block","src":"10313:49:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13250,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13245,"src":"10327:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"10327:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"10339:12:88","subExpression":{"id":13252,"name":"PAUSED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12784,"src":"10340:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10327:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13255,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10326:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10356:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10326:31:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13249,"id":13258,"nodeType":"Return","src":"10319:38:88"}]},"documentation":{"id":13242,"nodeType":"StructuredDocumentation","src":"10083:132:88","text":" @notice Gets the paused state of the reserve\n @param self The reserve configuration\n @return The paused state"},"id":13260,"implemented":true,"kind":"function","modifiers":[],"name":"getPaused","nameLocation":"10227:9:88","nodeType":"FunctionDefinition","parameters":{"id":13246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13245,"mutability":"mutable","name":"self","nameLocation":"10278:4:88","nodeType":"VariableDeclaration","scope":13260,"src":"10237:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13244,"nodeType":"UserDefinedTypeName","pathNode":{"id":13243,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"10237:33:88"},"referencedDeclaration":23912,"src":"10237:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"10236:47:88"},"returnParameters":{"id":13249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13260,"src":"10307:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13247,"name":"bool","nodeType":"ElementaryTypeName","src":"10307:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10306:6:88"},"scope":14034,"src":"10218:144:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13290,"nodeType":"Block","src":"11026:155:88","statements":[{"expression":{"id":13288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13269,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13264,"src":"11032:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"11032:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13272,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13264,"src":"11051:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"11051:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13274,"name":"BORROWABLE_IN_ISOLATION_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12787,"src":"11063:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11051:40:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13276,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11050:42:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":13279,"name":"borrowable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13266,"src":"11110:10:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11127:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11110:18:88","trueExpression":{"hexValue":"31","id":13280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11123:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11102:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13277,"name":"uint256","nodeType":"ElementaryTypeName","src":"11102:7:88","typeDescriptions":{}}},"id":13283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11102:27:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13284,"name":"BORROWABLE_IN_ISOLATION_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12842,"src":"11133:42:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11102:73:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13286,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11101:75:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11050:126:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11032:144:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13289,"nodeType":"ExpressionStatement","src":"11032:144:88"}]},"documentation":{"id":13261,"nodeType":"StructuredDocumentation","src":"10366:533:88","text":" @notice Sets the borrowable in isolation flag for the reserve.\n @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\n amount will be accumulated in the isolated collateral's total debt exposure.\n @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\n consistency in the debt ceiling calculations.\n @param self The reserve configuration\n @param borrowable True if the asset is borrowable"},"id":13291,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowableInIsolation","nameLocation":"10911:24:88","nodeType":"FunctionDefinition","parameters":{"id":13267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13264,"mutability":"mutable","name":"self","nameLocation":"10982:4:88","nodeType":"VariableDeclaration","scope":13291,"src":"10941:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13263,"nodeType":"UserDefinedTypeName","pathNode":{"id":13262,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"10941:33:88"},"referencedDeclaration":23912,"src":"10941:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13266,"mutability":"mutable","name":"borrowable","nameLocation":"10997:10:88","nodeType":"VariableDeclaration","scope":13291,"src":"10992:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13265,"name":"bool","nodeType":"ElementaryTypeName","src":"10992:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10935:76:88"},"returnParameters":{"id":13268,"nodeType":"ParameterList","parameters":[],"src":"11026:0:88"},"scope":14034,"src":"10902:279:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13309,"nodeType":"Block","src":"11838:66:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13300,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13295,"src":"11852:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"11852:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13303,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"11864:29:88","subExpression":{"id":13302,"name":"BORROWABLE_IN_ISOLATION_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12787,"src":"11865:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11852:41:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13305,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11851:43:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11898:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11851:48:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13299,"id":13308,"nodeType":"Return","src":"11844:55:88"}]},"documentation":{"id":13292,"nodeType":"StructuredDocumentation","src":"11185:532:88","text":" @notice Gets the borrowable in isolation flag for the reserve.\n @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\n isolated collateral is accounted for in the isolated collateral's total debt exposure.\n @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\n consistency in the debt ceiling calculations.\n @param self The reserve configuration\n @return The borrowable in isolation flag"},"id":13310,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowableInIsolation","nameLocation":"11729:24:88","nodeType":"FunctionDefinition","parameters":{"id":13296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13295,"mutability":"mutable","name":"self","nameLocation":"11800:4:88","nodeType":"VariableDeclaration","scope":13310,"src":"11759:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13294,"nodeType":"UserDefinedTypeName","pathNode":{"id":13293,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"11759:33:88"},"referencedDeclaration":23912,"src":"11759:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"11753:55:88"},"returnParameters":{"id":13299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13298,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13310,"src":"11832:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13297,"name":"bool","nodeType":"ElementaryTypeName","src":"11832:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11831:6:88"},"scope":14034,"src":"11720:184:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13340,"nodeType":"Block","src":"12300:137:88","statements":[{"expression":{"id":13338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13319,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13314,"src":"12306:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"12306:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13322,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13314,"src":"12325:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"12325:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13324,"name":"SILOED_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12790,"src":"12337:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12325:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13326,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12324:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":13329,"name":"siloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13316,"src":"12377:6:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12390:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12377:14:88","trueExpression":{"hexValue":"31","id":13330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12386:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13328,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12369:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13327,"name":"uint256","nodeType":"ElementaryTypeName","src":"12369:7:88","typeDescriptions":{}}},"id":13333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12369:23:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13334,"name":"SILOED_BORROWING_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12845,"src":"12396:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12369:62:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13336,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12368:64:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12324:108:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12306:126:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13339,"nodeType":"ExpressionStatement","src":"12306:126:88"}]},"documentation":{"id":13311,"nodeType":"StructuredDocumentation","src":"11908:275:88","text":" @notice Sets the siloed borrowing flag for the reserve.\n @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\n @param self The reserve configuration\n @param siloed True if the asset is siloed"},"id":13341,"implemented":true,"kind":"function","modifiers":[],"name":"setSiloedBorrowing","nameLocation":"12195:18:88","nodeType":"FunctionDefinition","parameters":{"id":13317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13314,"mutability":"mutable","name":"self","nameLocation":"12260:4:88","nodeType":"VariableDeclaration","scope":13341,"src":"12219:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13313,"nodeType":"UserDefinedTypeName","pathNode":{"id":13312,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"12219:33:88"},"referencedDeclaration":23912,"src":"12219:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13316,"mutability":"mutable","name":"siloed","nameLocation":"12275:6:88","nodeType":"VariableDeclaration","scope":13341,"src":"12270:11:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13315,"name":"bool","nodeType":"ElementaryTypeName","src":"12270:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12213:72:88"},"returnParameters":{"id":13318,"nodeType":"ParameterList","parameters":[],"src":"12300:0:88"},"scope":14034,"src":"12186:251:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13359,"nodeType":"Block","src":"12823:59:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13350,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13345,"src":"12837:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"12837:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"12849:22:88","subExpression":{"id":13352,"name":"SILOED_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12790,"src":"12850:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12837:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13355,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12836:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12876:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12836:41:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13349,"id":13358,"nodeType":"Return","src":"12829:48:88"}]},"documentation":{"id":13342,"nodeType":"StructuredDocumentation","src":"12441:267:88","text":" @notice Gets the siloed borrowing flag for the reserve.\n @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\n @param self The reserve configuration\n @return The siloed borrowing flag"},"id":13360,"implemented":true,"kind":"function","modifiers":[],"name":"getSiloedBorrowing","nameLocation":"12720:18:88","nodeType":"FunctionDefinition","parameters":{"id":13346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13345,"mutability":"mutable","name":"self","nameLocation":"12785:4:88","nodeType":"VariableDeclaration","scope":13360,"src":"12744:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13344,"nodeType":"UserDefinedTypeName","pathNode":{"id":13343,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"12744:33:88"},"referencedDeclaration":23912,"src":"12744:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"12738:55:88"},"returnParameters":{"id":13349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13348,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13360,"src":"12817:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13347,"name":"bool","nodeType":"ElementaryTypeName","src":"12817:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12816:6:88"},"scope":14034,"src":"12711:171:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13390,"nodeType":"Block","src":"13194:132:88","statements":[{"expression":{"id":13388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13369,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13200:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"13200:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13372,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13219:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13373,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"13219:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13374,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12778,"src":"13231:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13219:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13376,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13218:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":13379,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13366,"src":"13264:7:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13278:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13264:15:88","trueExpression":{"hexValue":"31","id":13380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13274:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13256:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13377,"name":"uint256","nodeType":"ElementaryTypeName","src":"13256:7:88","typeDescriptions":{}}},"id":13383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13256:24:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13384,"name":"BORROWING_ENABLED_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12833,"src":"13284:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13256:64:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13386,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13255:66:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13218:103:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13200:121:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13389,"nodeType":"ExpressionStatement","src":"13200:121:88"}]},"documentation":{"id":13361,"nodeType":"StructuredDocumentation","src":"12886:189:88","text":" @notice Enables or disables borrowing on the reserve\n @param self The reserve configuration\n @param enabled True if the borrowing needs to be enabled, false otherwise"},"id":13391,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowingEnabled","nameLocation":"13087:19:88","nodeType":"FunctionDefinition","parameters":{"id":13367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13364,"mutability":"mutable","name":"self","nameLocation":"13153:4:88","nodeType":"VariableDeclaration","scope":13391,"src":"13112:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13363,"nodeType":"UserDefinedTypeName","pathNode":{"id":13362,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"13112:33:88"},"referencedDeclaration":23912,"src":"13112:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13366,"mutability":"mutable","name":"enabled","nameLocation":"13168:7:88","nodeType":"VariableDeclaration","scope":13391,"src":"13163:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13365,"name":"bool","nodeType":"ElementaryTypeName","src":"13163:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13106:73:88"},"returnParameters":{"id":13368,"nodeType":"ParameterList","parameters":[],"src":"13194:0:88"},"scope":14034,"src":"13078:248:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13409,"nodeType":"Block","src":"13584:52:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13400,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13395,"src":"13598:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"13598:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"13610:15:88","subExpression":{"id":13402,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12778,"src":"13611:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13598:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13405,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13597:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13630:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13597:34:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13399,"id":13408,"nodeType":"Return","src":"13590:41:88"}]},"documentation":{"id":13392,"nodeType":"StructuredDocumentation","src":"13330:138:88","text":" @notice Gets the borrowing state of the reserve\n @param self The reserve configuration\n @return The borrowing state"},"id":13410,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowingEnabled","nameLocation":"13480:19:88","nodeType":"FunctionDefinition","parameters":{"id":13396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13395,"mutability":"mutable","name":"self","nameLocation":"13546:4:88","nodeType":"VariableDeclaration","scope":13410,"src":"13505:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13394,"nodeType":"UserDefinedTypeName","pathNode":{"id":13393,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"13505:33:88"},"referencedDeclaration":23912,"src":"13505:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"13499:55:88"},"returnParameters":{"id":13399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13410,"src":"13578:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13397,"name":"bool","nodeType":"ElementaryTypeName","src":"13578:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13577:6:88"},"scope":14034,"src":"13471:165:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13440,"nodeType":"Block","src":"13982:146:88","statements":[{"expression":{"id":13438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13419,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13414,"src":"13988:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13421,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"13988:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13422,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13414,"src":"14007:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"14007:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13424,"name":"STABLE_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12781,"src":"14019:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14007:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13426,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14006:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":13429,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13416,"src":"14059:7:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14073:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14059:15:88","trueExpression":{"hexValue":"31","id":13430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14069:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13428,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14051:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13427,"name":"uint256","nodeType":"ElementaryTypeName","src":"14051:7:88","typeDescriptions":{}}},"id":13433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14051:24:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13434,"name":"STABLE_BORROWING_ENABLED_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12836,"src":"14079:43:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14051:71:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14050:73:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14006:117:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13988:135:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13439,"nodeType":"ExpressionStatement","src":"13988:135:88"}]},"documentation":{"id":13411,"nodeType":"StructuredDocumentation","src":"13640:213:88","text":" @notice Enables or disables stable rate borrowing on the reserve\n @param self The reserve configuration\n @param enabled True if the stable rate borrowing needs to be enabled, false otherwise"},"id":13441,"implemented":true,"kind":"function","modifiers":[],"name":"setStableRateBorrowingEnabled","nameLocation":"13865:29:88","nodeType":"FunctionDefinition","parameters":{"id":13417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13414,"mutability":"mutable","name":"self","nameLocation":"13941:4:88","nodeType":"VariableDeclaration","scope":13441,"src":"13900:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13413,"nodeType":"UserDefinedTypeName","pathNode":{"id":13412,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"13900:33:88"},"referencedDeclaration":23912,"src":"13900:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13416,"mutability":"mutable","name":"enabled","nameLocation":"13956:7:88","nodeType":"VariableDeclaration","scope":13441,"src":"13951:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13415,"name":"bool","nodeType":"ElementaryTypeName","src":"13951:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13894:73:88"},"returnParameters":{"id":13418,"nodeType":"ParameterList","parameters":[],"src":"13982:0:88"},"scope":14034,"src":"13856:272:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13459,"nodeType":"Block","src":"14420:59:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13450,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13445,"src":"14434:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"14434:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"14446:22:88","subExpression":{"id":13452,"name":"STABLE_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12781,"src":"14447:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14434:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13455,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14433:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14473:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14433:41:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13449,"id":13458,"nodeType":"Return","src":"14426:48:88"}]},"documentation":{"id":13442,"nodeType":"StructuredDocumentation","src":"14132:162:88","text":" @notice Gets the stable rate borrowing state of the reserve\n @param self The reserve configuration\n @return The stable rate borrowing state"},"id":13460,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateBorrowingEnabled","nameLocation":"14306:29:88","nodeType":"FunctionDefinition","parameters":{"id":13446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13445,"mutability":"mutable","name":"self","nameLocation":"14382:4:88","nodeType":"VariableDeclaration","scope":13460,"src":"14341:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13444,"nodeType":"UserDefinedTypeName","pathNode":{"id":13443,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"14341:33:88"},"referencedDeclaration":23912,"src":"14341:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"14335:55:88"},"returnParameters":{"id":13449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13448,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13460,"src":"14414:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13447,"name":"bool","nodeType":"ElementaryTypeName","src":"14414:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14413:6:88"},"scope":14034,"src":"14297:182:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13492,"nodeType":"Block","src":"14757:211:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13470,"name":"reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13466,"src":"14771:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13471,"name":"MAX_VALID_RESERVE_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12884,"src":"14788:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14771:41:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13473,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"14814:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":14746,"src":"14814:29:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13469,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14763:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14763:81:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13476,"nodeType":"ExpressionStatement","src":"14763:81:88"},{"expression":{"id":13490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13477,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13464,"src":"14851:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13479,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"14851:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13480,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13464,"src":"14870:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13481,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"14870:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13482,"name":"RESERVE_FACTOR_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12796,"src":"14882:19:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14870:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13484,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14869:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13485,"name":"reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13466,"src":"14912:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13486,"name":"RESERVE_FACTOR_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12851,"src":"14929:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14912:50:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13488,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14911:52:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14869:94:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14851:112:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13491,"nodeType":"ExpressionStatement","src":"14851:112:88"}]},"documentation":{"id":13461,"nodeType":"StructuredDocumentation","src":"14483:149:88","text":" @notice Sets the reserve factor of the reserve\n @param self The reserve configuration\n @param reserveFactor The reserve factor"},"id":13493,"implemented":true,"kind":"function","modifiers":[],"name":"setReserveFactor","nameLocation":"14644:16:88","nodeType":"FunctionDefinition","parameters":{"id":13467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13464,"mutability":"mutable","name":"self","nameLocation":"14707:4:88","nodeType":"VariableDeclaration","scope":13493,"src":"14666:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13463,"nodeType":"UserDefinedTypeName","pathNode":{"id":13462,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"14666:33:88"},"referencedDeclaration":23912,"src":"14666:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13466,"mutability":"mutable","name":"reserveFactor","nameLocation":"14725:13:88","nodeType":"VariableDeclaration","scope":13493,"src":"14717:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13465,"name":"uint256","nodeType":"ElementaryTypeName","src":"14717:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14660:82:88"},"returnParameters":{"id":13468,"nodeType":"ParameterList","parameters":[],"src":"14757:0:88"},"scope":14034,"src":"14635:333:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13511,"nodeType":"Block","src":"15224:89:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13502,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13497,"src":"15238:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"15238:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"15250:20:88","subExpression":{"id":13504,"name":"RESERVE_FACTOR_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12796,"src":"15251:19:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15238:32:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13507,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15237:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13508,"name":"RESERVE_FACTOR_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12851,"src":"15275:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15237:71:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13501,"id":13510,"nodeType":"Return","src":"15230:78:88"}]},"documentation":{"id":13494,"nodeType":"StructuredDocumentation","src":"14972:136:88","text":" @notice Gets the reserve factor of the reserve\n @param self The reserve configuration\n @return The reserve factor"},"id":13512,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveFactor","nameLocation":"15120:16:88","nodeType":"FunctionDefinition","parameters":{"id":13498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13497,"mutability":"mutable","name":"self","nameLocation":"15183:4:88","nodeType":"VariableDeclaration","scope":13512,"src":"15142:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13496,"nodeType":"UserDefinedTypeName","pathNode":{"id":13495,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"15142:33:88"},"referencedDeclaration":23912,"src":"15142:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"15136:55:88"},"returnParameters":{"id":13501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13512,"src":"15215:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13499,"name":"uint256","nodeType":"ElementaryTypeName","src":"15215:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15214:9:88"},"scope":14034,"src":"15111:202:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13544,"nodeType":"Block","src":"15571:175:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13522,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13518,"src":"15585:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13523,"name":"MAX_VALID_BORROW_CAP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12887,"src":"15598:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15585:33:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13525,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"15620:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_BORROW_CAP","nodeType":"MemberAccess","referencedDeclaration":14749,"src":"15620:25:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13521,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15577:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15577:69:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13528,"nodeType":"ExpressionStatement","src":"15577:69:88"},{"expression":{"id":13542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13529,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13516,"src":"15653:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"15653:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13532,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13516,"src":"15666:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"15666:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13534,"name":"BORROW_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12799,"src":"15678:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15666:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13536,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15665:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13537,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13518,"src":"15698:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13538,"name":"BORROW_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12854,"src":"15711:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15698:42:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15697:44:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15665:76:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15653:88:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13543,"nodeType":"ExpressionStatement","src":"15653:88:88"}]},"documentation":{"id":13513,"nodeType":"StructuredDocumentation","src":"15317:137:88","text":" @notice Sets the borrow cap of the reserve\n @param self The reserve configuration\n @param borrowCap The borrow cap"},"id":13545,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowCap","nameLocation":"15466:12:88","nodeType":"FunctionDefinition","parameters":{"id":13519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13516,"mutability":"mutable","name":"self","nameLocation":"15525:4:88","nodeType":"VariableDeclaration","scope":13545,"src":"15484:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13515,"nodeType":"UserDefinedTypeName","pathNode":{"id":13514,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"15484:33:88"},"referencedDeclaration":23912,"src":"15484:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13518,"mutability":"mutable","name":"borrowCap","nameLocation":"15543:9:88","nodeType":"VariableDeclaration","scope":13545,"src":"15535:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13517,"name":"uint256","nodeType":"ElementaryTypeName","src":"15535:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15478:78:88"},"returnParameters":{"id":13520,"nodeType":"ParameterList","parameters":[],"src":"15571:0:88"},"scope":14034,"src":"15457:289:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13563,"nodeType":"Block","src":"15990:81:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13554,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13549,"src":"16004:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"16004:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13557,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"16016:16:88","subExpression":{"id":13556,"name":"BORROW_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12799,"src":"16017:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16004:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13559,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16003:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13560,"name":"BORROW_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12854,"src":"16037:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16003:63:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13553,"id":13562,"nodeType":"Return","src":"15996:70:88"}]},"documentation":{"id":13546,"nodeType":"StructuredDocumentation","src":"15750:128:88","text":" @notice Gets the borrow cap of the reserve\n @param self The reserve configuration\n @return The borrow cap"},"id":13564,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowCap","nameLocation":"15890:12:88","nodeType":"FunctionDefinition","parameters":{"id":13550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13549,"mutability":"mutable","name":"self","nameLocation":"15949:4:88","nodeType":"VariableDeclaration","scope":13564,"src":"15908:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13548,"nodeType":"UserDefinedTypeName","pathNode":{"id":13547,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"15908:33:88"},"referencedDeclaration":23912,"src":"15908:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"15902:55:88"},"returnParameters":{"id":13553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13564,"src":"15981:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13551,"name":"uint256","nodeType":"ElementaryTypeName","src":"15981:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15980:9:88"},"scope":14034,"src":"15881:190:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13596,"nodeType":"Block","src":"16329:175:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13574,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13570,"src":"16343:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13575,"name":"MAX_VALID_SUPPLY_CAP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12890,"src":"16356:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16343:33:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13577,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"16378:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_SUPPLY_CAP","nodeType":"MemberAccess","referencedDeclaration":14752,"src":"16378:25:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13573,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16335:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16335:69:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13580,"nodeType":"ExpressionStatement","src":"16335:69:88"},{"expression":{"id":13594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13581,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13568,"src":"16411:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13583,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"16411:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13584,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13568,"src":"16424:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"16424:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13586,"name":"SUPPLY_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12802,"src":"16436:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16424:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13588,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16423:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13589,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13570,"src":"16456:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13590,"name":"SUPPLY_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12857,"src":"16469:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16456:42:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13592,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16455:44:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16423:76:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16411:88:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13595,"nodeType":"ExpressionStatement","src":"16411:88:88"}]},"documentation":{"id":13565,"nodeType":"StructuredDocumentation","src":"16075:137:88","text":" @notice Sets the supply cap of the reserve\n @param self The reserve configuration\n @param supplyCap The supply cap"},"id":13597,"implemented":true,"kind":"function","modifiers":[],"name":"setSupplyCap","nameLocation":"16224:12:88","nodeType":"FunctionDefinition","parameters":{"id":13571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13568,"mutability":"mutable","name":"self","nameLocation":"16283:4:88","nodeType":"VariableDeclaration","scope":13597,"src":"16242:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13567,"nodeType":"UserDefinedTypeName","pathNode":{"id":13566,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"16242:33:88"},"referencedDeclaration":23912,"src":"16242:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13570,"mutability":"mutable","name":"supplyCap","nameLocation":"16301:9:88","nodeType":"VariableDeclaration","scope":13597,"src":"16293:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13569,"name":"uint256","nodeType":"ElementaryTypeName","src":"16293:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16236:78:88"},"returnParameters":{"id":13572,"nodeType":"ParameterList","parameters":[],"src":"16329:0:88"},"scope":14034,"src":"16215:289:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13615,"nodeType":"Block","src":"16748:81:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13606,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13601,"src":"16762:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13607,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"16762:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13609,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"16774:16:88","subExpression":{"id":13608,"name":"SUPPLY_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12802,"src":"16775:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16762:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13611,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16761:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13612,"name":"SUPPLY_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12857,"src":"16795:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16761:63:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13605,"id":13614,"nodeType":"Return","src":"16754:70:88"}]},"documentation":{"id":13598,"nodeType":"StructuredDocumentation","src":"16508:128:88","text":" @notice Gets the supply cap of the reserve\n @param self The reserve configuration\n @return The supply cap"},"id":13616,"implemented":true,"kind":"function","modifiers":[],"name":"getSupplyCap","nameLocation":"16648:12:88","nodeType":"FunctionDefinition","parameters":{"id":13602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13601,"mutability":"mutable","name":"self","nameLocation":"16707:4:88","nodeType":"VariableDeclaration","scope":13616,"src":"16666:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13600,"nodeType":"UserDefinedTypeName","pathNode":{"id":13599,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"16666:33:88"},"referencedDeclaration":23912,"src":"16666:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"16660:55:88"},"returnParameters":{"id":13605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13604,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13616,"src":"16739:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13603,"name":"uint256","nodeType":"ElementaryTypeName","src":"16739:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16738:9:88"},"scope":14034,"src":"16639:190:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13648,"nodeType":"Block","src":"17128:179:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13626,"name":"ceiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"17142:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13627,"name":"MAX_VALID_DEBT_CEILING","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12902,"src":"17153:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17142:33:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13629,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"17177:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_DEBT_CEILING","nodeType":"MemberAccess","referencedDeclaration":14764,"src":"17177:27:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13625,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17134:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17134:71:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13632,"nodeType":"ExpressionStatement","src":"17134:71:88"},{"expression":{"id":13646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13633,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13620,"src":"17212:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13635,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"17212:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13636,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13620,"src":"17225:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"17225:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13638,"name":"DEBT_CEILING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12814,"src":"17237:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17225:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13640,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17224:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13641,"name":"ceiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"17259:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13642,"name":"DEBT_CEILING_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12869,"src":"17270:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17259:42:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13644,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17258:44:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17224:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17212:90:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13647,"nodeType":"ExpressionStatement","src":"17212:90:88"}]},"documentation":{"id":13617,"nodeType":"StructuredDocumentation","src":"16833:178:88","text":" @notice Sets the debt ceiling in isolation mode for the asset\n @param self The reserve configuration\n @param ceiling The maximum debt ceiling for the asset"},"id":13649,"implemented":true,"kind":"function","modifiers":[],"name":"setDebtCeiling","nameLocation":"17023:14:88","nodeType":"FunctionDefinition","parameters":{"id":13623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13620,"mutability":"mutable","name":"self","nameLocation":"17084:4:88","nodeType":"VariableDeclaration","scope":13649,"src":"17043:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13619,"nodeType":"UserDefinedTypeName","pathNode":{"id":13618,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"17043:33:88"},"referencedDeclaration":23912,"src":"17043:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13622,"mutability":"mutable","name":"ceiling","nameLocation":"17102:7:88","nodeType":"VariableDeclaration","scope":13649,"src":"17094:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13621,"name":"uint256","nodeType":"ElementaryTypeName","src":"17094:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17037:76:88"},"returnParameters":{"id":13624,"nodeType":"ParameterList","parameters":[],"src":"17128:0:88"},"scope":14034,"src":"17014:293:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13667,"nodeType":"Block","src":"17620:85:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13658,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13653,"src":"17634:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"17634:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13661,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"17646:18:88","subExpression":{"id":13660,"name":"DEBT_CEILING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12814,"src":"17647:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17634:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13663,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17633:32:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13664,"name":"DEBT_CEILING_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12869,"src":"17669:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17633:67:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13657,"id":13666,"nodeType":"Return","src":"17626:74:88"}]},"documentation":{"id":13650,"nodeType":"StructuredDocumentation","src":"17311:195:88","text":" @notice Gets the debt ceiling for the asset if the asset is in isolation mode\n @param self The reserve configuration\n @return The debt ceiling (0 = isolation mode disabled)"},"id":13668,"implemented":true,"kind":"function","modifiers":[],"name":"getDebtCeiling","nameLocation":"17518:14:88","nodeType":"FunctionDefinition","parameters":{"id":13654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13653,"mutability":"mutable","name":"self","nameLocation":"17579:4:88","nodeType":"VariableDeclaration","scope":13668,"src":"17538:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13652,"nodeType":"UserDefinedTypeName","pathNode":{"id":13651,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"17538:33:88"},"referencedDeclaration":23912,"src":"17538:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"17532:55:88"},"returnParameters":{"id":13657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13656,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13668,"src":"17611:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13655,"name":"uint256","nodeType":"ElementaryTypeName","src":"17611:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17610:9:88"},"scope":14034,"src":"17509:196:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13700,"nodeType":"Block","src":"18030:287:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13678,"name":"liquidationProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13674,"src":"18051:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13679,"name":"MAX_VALID_LIQUIDATION_PROTOCOL_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"18077:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18051:60:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13681,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18119:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LIQUIDATION_PROTOCOL_FEE","nodeType":"MemberAccess","referencedDeclaration":14755,"src":"18119:39:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13677,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18036:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18036:128:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13684,"nodeType":"ExpressionStatement","src":"18036:128:88"},{"expression":{"id":13698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13685,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"18171:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"18171:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13688,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"18190:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13689,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"18190:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13690,"name":"LIQUIDATION_PROTOCOL_FEE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12805,"src":"18202:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18190:41:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13692,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18189:43:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13693,"name":"liquidationProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13674,"src":"18242:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13694,"name":"LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12860,"src":"18268:43:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18242:69:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13696,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18241:71:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18189:123:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18171:141:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13699,"nodeType":"ExpressionStatement","src":"18171:141:88"}]},"documentation":{"id":13669,"nodeType":"StructuredDocumentation","src":"17709:178:88","text":" @notice Sets the liquidation protocol fee of the reserve\n @param self The reserve configuration\n @param liquidationProtocolFee The liquidation protocol fee"},"id":13701,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationProtocolFee","nameLocation":"17899:25:88","nodeType":"FunctionDefinition","parameters":{"id":13675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13672,"mutability":"mutable","name":"self","nameLocation":"17971:4:88","nodeType":"VariableDeclaration","scope":13701,"src":"17930:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13671,"nodeType":"UserDefinedTypeName","pathNode":{"id":13670,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"17930:33:88"},"referencedDeclaration":23912,"src":"17930:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13674,"mutability":"mutable","name":"liquidationProtocolFee","nameLocation":"17989:22:88","nodeType":"VariableDeclaration","scope":13701,"src":"17981:30:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13673,"name":"uint256","nodeType":"ElementaryTypeName","src":"17981:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17924:91:88"},"returnParameters":{"id":13676,"nodeType":"ParameterList","parameters":[],"src":"18030:0:88"},"scope":14034,"src":"17890:427:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13719,"nodeType":"Block","src":"18584:115:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13710,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13705,"src":"18604:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"18604:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"18616:30:88","subExpression":{"id":13712,"name":"LIQUIDATION_PROTOCOL_FEE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12805,"src":"18617:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18604:42:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13715,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18603:44:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13716,"name":"LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12860,"src":"18651:43:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18603:91:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13709,"id":13718,"nodeType":"Return","src":"18590:104:88"}]},"documentation":{"id":13702,"nodeType":"StructuredDocumentation","src":"18321:138:88","text":" @dev Gets the liquidation protocol fee\n @param self The reserve configuration\n @return The liquidation protocol fee"},"id":13720,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationProtocolFee","nameLocation":"18471:25:88","nodeType":"FunctionDefinition","parameters":{"id":13706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13705,"mutability":"mutable","name":"self","nameLocation":"18543:4:88","nodeType":"VariableDeclaration","scope":13720,"src":"18502:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13704,"nodeType":"UserDefinedTypeName","pathNode":{"id":13703,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"18502:33:88"},"referencedDeclaration":23912,"src":"18502:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"18496:55:88"},"returnParameters":{"id":13709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13720,"src":"18575:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13707,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:9:88"},"scope":14034,"src":"18462:237:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13752,"nodeType":"Block","src":"18989:227:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13730,"name":"unbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"19003:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13731,"name":"MAX_VALID_UNBACKED_MINT_CAP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12899,"src":"19022:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19003:46:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13733,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"19051:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_UNBACKED_MINT_CAP","nodeType":"MemberAccess","referencedDeclaration":14761,"src":"19051:32:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13729,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18995:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18995:89:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13736,"nodeType":"ExpressionStatement","src":"18995:89:88"},{"expression":{"id":13750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13737,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"19091:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"19091:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13740,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13724,"src":"19110:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"19110:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13742,"name":"UNBACKED_MINT_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12811,"src":"19122:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19110:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13744,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19109:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13745,"name":"unbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"19155:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13746,"name":"UNBACKED_MINT_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12866,"src":"19174:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19155:55:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13748,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19154:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19109:102:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19091:120:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13751,"nodeType":"ExpressionStatement","src":"19091:120:88"}]},"documentation":{"id":13721,"nodeType":"StructuredDocumentation","src":"18703:157:88","text":" @notice Sets the unbacked mint cap of the reserve\n @param self The reserve configuration\n @param unbackedMintCap The unbacked mint cap"},"id":13753,"implemented":true,"kind":"function","modifiers":[],"name":"setUnbackedMintCap","nameLocation":"18872:18:88","nodeType":"FunctionDefinition","parameters":{"id":13727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13724,"mutability":"mutable","name":"self","nameLocation":"18937:4:88","nodeType":"VariableDeclaration","scope":13753,"src":"18896:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13723,"nodeType":"UserDefinedTypeName","pathNode":{"id":13722,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"18896:33:88"},"referencedDeclaration":23912,"src":"18896:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13726,"mutability":"mutable","name":"unbackedMintCap","nameLocation":"18955:15:88","nodeType":"VariableDeclaration","scope":13753,"src":"18947:23:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13725,"name":"uint256","nodeType":"ElementaryTypeName","src":"18947:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18890:84:88"},"returnParameters":{"id":13728,"nodeType":"ParameterList","parameters":[],"src":"18989:0:88"},"scope":14034,"src":"18863:353:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13771,"nodeType":"Block","src":"19477:95:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13762,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13757,"src":"19491:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13763,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"19491:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13765,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"19503:23:88","subExpression":{"id":13764,"name":"UNBACKED_MINT_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12811,"src":"19504:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19491:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13767,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19490:37:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13768,"name":"UNBACKED_MINT_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12866,"src":"19531:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19490:77:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13761,"id":13770,"nodeType":"Return","src":"19483:84:88"}]},"documentation":{"id":13754,"nodeType":"StructuredDocumentation","src":"19220:139:88","text":" @dev Gets the unbacked mint cap of the reserve\n @param self The reserve configuration\n @return The unbacked mint cap"},"id":13772,"implemented":true,"kind":"function","modifiers":[],"name":"getUnbackedMintCap","nameLocation":"19371:18:88","nodeType":"FunctionDefinition","parameters":{"id":13758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13757,"mutability":"mutable","name":"self","nameLocation":"19436:4:88","nodeType":"VariableDeclaration","scope":13772,"src":"19395:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13756,"nodeType":"UserDefinedTypeName","pathNode":{"id":13755,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"19395:33:88"},"referencedDeclaration":23912,"src":"19395:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"19389:55:88"},"returnParameters":{"id":13761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13772,"src":"19468:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13759,"name":"uint256","nodeType":"ElementaryTypeName","src":"19468:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19467:9:88"},"scope":14034,"src":"19362:210:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13804,"nodeType":"Block","src":"19863:189:88","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13782,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13778,"src":"19877:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13783,"name":"MAX_VALID_EMODE_CATEGORY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12896,"src":"19889:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19877:36:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13785,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"19915:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":13786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY","nodeType":"MemberAccess","referencedDeclaration":14758,"src":"19915:29:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13781,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19869:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19869:76:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13788,"nodeType":"ExpressionStatement","src":"19869:76:88"},{"expression":{"id":13802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13789,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13776,"src":"19952:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"19952:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13792,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13776,"src":"19965:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13793,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"19965:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13794,"name":"EMODE_CATEGORY_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12808,"src":"19977:19:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19965:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13796,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19964:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13797,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13778,"src":"20001:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13798,"name":"EMODE_CATEGORY_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12863,"src":"20013:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20001:45:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13800,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20000:47:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19964:83:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19952:95:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13803,"nodeType":"ExpressionStatement","src":"19952:95:88"}]},"documentation":{"id":13773,"nodeType":"StructuredDocumentation","src":"19576:167:88","text":" @notice Sets the eMode asset category\n @param self The reserve configuration\n @param category The asset category when the user selects the eMode"},"id":13805,"implemented":true,"kind":"function","modifiers":[],"name":"setEModeCategory","nameLocation":"19755:16:88","nodeType":"FunctionDefinition","parameters":{"id":13779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13776,"mutability":"mutable","name":"self","nameLocation":"19818:4:88","nodeType":"VariableDeclaration","scope":13805,"src":"19777:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13775,"nodeType":"UserDefinedTypeName","pathNode":{"id":13774,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"19777:33:88"},"referencedDeclaration":23912,"src":"19777:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13778,"mutability":"mutable","name":"category","nameLocation":"19836:8:88","nodeType":"VariableDeclaration","scope":13805,"src":"19828:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13777,"name":"uint256","nodeType":"ElementaryTypeName","src":"19828:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19771:77:88"},"returnParameters":{"id":13780,"nodeType":"ParameterList","parameters":[],"src":"19863:0:88"},"scope":14034,"src":"19746:306:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13823,"nodeType":"Block","src":"20310:89:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13814,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13809,"src":"20324:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13815,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"20324:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"20336:20:88","subExpression":{"id":13816,"name":"EMODE_CATEGORY_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12808,"src":"20337:19:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20324:32:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13819,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20323:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13820,"name":"EMODE_CATEGORY_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12863,"src":"20361:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20323:71:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13813,"id":13822,"nodeType":"Return","src":"20316:78:88"}]},"documentation":{"id":13806,"nodeType":"StructuredDocumentation","src":"20056:138:88","text":" @dev Gets the eMode asset category\n @param self The reserve configuration\n @return The eMode category for the asset"},"id":13824,"implemented":true,"kind":"function","modifiers":[],"name":"getEModeCategory","nameLocation":"20206:16:88","nodeType":"FunctionDefinition","parameters":{"id":13810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13809,"mutability":"mutable","name":"self","nameLocation":"20269:4:88","nodeType":"VariableDeclaration","scope":13824,"src":"20228:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13808,"nodeType":"UserDefinedTypeName","pathNode":{"id":13807,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"20228:33:88"},"referencedDeclaration":23912,"src":"20228:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"20222:55:88"},"returnParameters":{"id":13813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13824,"src":"20301:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13811,"name":"uint256","nodeType":"ElementaryTypeName","src":"20301:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20300:9:88"},"scope":14034,"src":"20197:202:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13854,"nodeType":"Block","src":"20721:149:88","statements":[{"expression":{"id":13852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13833,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13828,"src":"20727:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13835,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"20727:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13836,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13828,"src":"20746:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"20746:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13838,"name":"FLASHLOAN_ENABLED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12793,"src":"20758:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20746:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13840,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20745:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":13843,"name":"flashLoanEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13830,"src":"20799:16:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20822:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20799:24:88","trueExpression":{"hexValue":"31","id":13844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20818:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13842,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20791:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13841,"name":"uint256","nodeType":"ElementaryTypeName","src":"20791:7:88","typeDescriptions":{}}},"id":13847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20791:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13848,"name":"FLASHLOAN_ENABLED_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12848,"src":"20828:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20791:73:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13850,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20790:75:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20745:120:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20727:138:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13853,"nodeType":"ExpressionStatement","src":"20727:138:88"}]},"documentation":{"id":13825,"nodeType":"StructuredDocumentation","src":"20403:190:88","text":" @notice Sets the flashloanable flag for the reserve\n @param self The reserve configuration\n @param flashLoanEnabled True if the asset is flashloanable, false otherwise"},"id":13855,"implemented":true,"kind":"function","modifiers":[],"name":"setFlashLoanEnabled","nameLocation":"20605:19:88","nodeType":"FunctionDefinition","parameters":{"id":13831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13828,"mutability":"mutable","name":"self","nameLocation":"20671:4:88","nodeType":"VariableDeclaration","scope":13855,"src":"20630:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13827,"nodeType":"UserDefinedTypeName","pathNode":{"id":13826,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"20630:33:88"},"referencedDeclaration":23912,"src":"20630:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13830,"mutability":"mutable","name":"flashLoanEnabled","nameLocation":"20686:16:88","nodeType":"VariableDeclaration","scope":13855,"src":"20681:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13829,"name":"bool","nodeType":"ElementaryTypeName","src":"20681:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20624:82:88"},"returnParameters":{"id":13832,"nodeType":"ParameterList","parameters":[],"src":"20721:0:88"},"scope":14034,"src":"20596:274:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13873,"nodeType":"Block","src":"21135:60:88","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13864,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13859,"src":"21149:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"21149:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21161:23:88","subExpression":{"id":13866,"name":"FLASHLOAN_ENABLED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12793,"src":"21162:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21149:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13869,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21148:37:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21189:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21148:42:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13863,"id":13872,"nodeType":"Return","src":"21141:49:88"}]},"documentation":{"id":13856,"nodeType":"StructuredDocumentation","src":"20874:145:88","text":" @notice Gets the flashloanable flag for the reserve\n @param self The reserve configuration\n @return The flashloanable flag"},"id":13874,"implemented":true,"kind":"function","modifiers":[],"name":"getFlashLoanEnabled","nameLocation":"21031:19:88","nodeType":"FunctionDefinition","parameters":{"id":13860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13859,"mutability":"mutable","name":"self","nameLocation":"21097:4:88","nodeType":"VariableDeclaration","scope":13874,"src":"21056:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13858,"nodeType":"UserDefinedTypeName","pathNode":{"id":13857,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"21056:33:88"},"referencedDeclaration":23912,"src":"21056:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"21050:55:88"},"returnParameters":{"id":13863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13862,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13874,"src":"21129:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13861,"name":"bool","nodeType":"ElementaryTypeName","src":"21129:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21128:6:88"},"scope":14034,"src":"21022:173:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13933,"nodeType":"Block","src":"21709:268:88","statements":[{"assignments":[13892],"declarations":[{"constant":false,"id":13892,"mutability":"mutable","name":"dataLocal","nameLocation":"21723:9:88","nodeType":"VariableDeclaration","scope":13933,"src":"21715:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13891,"name":"uint256","nodeType":"ElementaryTypeName","src":"21715:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13895,"initialValue":{"expression":{"id":13893,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13878,"src":"21735:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"21735:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21715:29:88"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13896,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13892,"src":"21767:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21779:12:88","subExpression":{"id":13897,"name":"ACTIVE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12772,"src":"21780:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21767:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13900,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21766:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21796:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21766:31:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13903,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13892,"src":"21806:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21818:12:88","subExpression":{"id":13904,"name":"FROZEN_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12775,"src":"21819:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21806:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13907,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21805:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21835:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21805:31:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13910,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13892,"src":"21845:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21857:15:88","subExpression":{"id":13911,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12778,"src":"21858:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21845:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13914,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21844:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21877:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21844:34:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13917,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13892,"src":"21887:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13919,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21899:22:88","subExpression":{"id":13918,"name":"STABLE_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12781,"src":"21900:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21887:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13921,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21886:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21926:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21886:41:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13924,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13892,"src":"21936:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21948:12:88","subExpression":{"id":13925,"name":"PAUSED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12784,"src":"21949:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21936:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13928,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21935:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21965:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21935:31:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":13931,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21758:214:88","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"functionReturnParameters":13890,"id":13932,"nodeType":"Return","src":"21751:221:88"}]},"documentation":{"id":13875,"nodeType":"StructuredDocumentation","src":"21199:381:88","text":" @notice Gets the configuration flags of the reserve\n @param self The reserve configuration\n @return The state flag representing active\n @return The state flag representing frozen\n @return The state flag representing borrowing enabled\n @return The state flag representing stableRateBorrowing enabled\n @return The state flag representing paused"},"id":13934,"implemented":true,"kind":"function","modifiers":[],"name":"getFlags","nameLocation":"21592:8:88","nodeType":"FunctionDefinition","parameters":{"id":13879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13878,"mutability":"mutable","name":"self","nameLocation":"21647:4:88","nodeType":"VariableDeclaration","scope":13934,"src":"21606:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13877,"nodeType":"UserDefinedTypeName","pathNode":{"id":13876,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"21606:33:88"},"referencedDeclaration":23912,"src":"21606:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"21600:55:88"},"returnParameters":{"id":13890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13881,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13934,"src":"21679:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13880,"name":"bool","nodeType":"ElementaryTypeName","src":"21679:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13883,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13934,"src":"21685:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13882,"name":"bool","nodeType":"ElementaryTypeName","src":"21685:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13885,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13934,"src":"21691:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13884,"name":"bool","nodeType":"ElementaryTypeName","src":"21691:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13887,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13934,"src":"21697:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13886,"name":"bool","nodeType":"ElementaryTypeName","src":"21697:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13889,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13934,"src":"21703:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13888,"name":"bool","nodeType":"ElementaryTypeName","src":"21703:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21678:30:88"},"scope":14034,"src":"21583:394:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13999,"nodeType":"Block","src":"22605:500:88","statements":[{"assignments":[13954],"declarations":[{"constant":false,"id":13954,"mutability":"mutable","name":"dataLocal","nameLocation":"22619:9:88","nodeType":"VariableDeclaration","scope":13999,"src":"22611:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13953,"name":"uint256","nodeType":"ElementaryTypeName","src":"22611:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13957,"initialValue":{"expression":{"id":13955,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13938,"src":"22631:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13956,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"22631:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22611:29:88"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13958,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13954,"src":"22662:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22674:9:88","subExpression":{"id":13959,"name":"LTV_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12760,"src":"22675:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22662:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13962,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13954,"src":"22692:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22704:27:88","subExpression":{"id":13963,"name":"LIQUIDATION_THRESHOLD_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12763,"src":"22705:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22692:39:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13966,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22691:41:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13967,"name":"LIQUIDATION_THRESHOLD_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12818,"src":"22736:40:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22691:85:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13969,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13954,"src":"22785:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22797:23:88","subExpression":{"id":13970,"name":"LIQUIDATION_BONUS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12766,"src":"22798:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22785:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13973,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22784:37:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13974,"name":"LIQUIDATION_BONUS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12821,"src":"22825:36:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22784:77:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13976,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13954,"src":"22870:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22882:14:88","subExpression":{"id":13977,"name":"DECIMALS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12769,"src":"22883:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22870:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13980,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22869:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13981,"name":"RESERVE_DECIMALS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12824,"src":"22901:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22869:67:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13983,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13954,"src":"22945:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22957:20:88","subExpression":{"id":13984,"name":"RESERVE_FACTOR_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12796,"src":"22958:19:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22945:32:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13987,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22944:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13988,"name":"RESERVE_FACTOR_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12851,"src":"22982:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22944:71:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13990,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13954,"src":"23024:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13992,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23036:20:88","subExpression":{"id":13991,"name":"EMODE_CATEGORY_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12808,"src":"23037:19:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23024:32:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13994,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23023:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13995,"name":"EMODE_CATEGORY_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12863,"src":"23061:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23023:71:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13997,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22654:446:88","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"functionReturnParameters":13952,"id":13998,"nodeType":"Return","src":"22647:453:88"}]},"documentation":{"id":13935,"nodeType":"StructuredDocumentation","src":"21981:470:88","text":" @notice Gets the configuration parameters of the reserve from storage\n @param self The reserve configuration\n @return The state param representing ltv\n @return The state param representing liquidation threshold\n @return The state param representing liquidation bonus\n @return The state param representing reserve decimals\n @return The state param representing reserve factor\n @return The state param representing eMode category"},"id":14000,"implemented":true,"kind":"function","modifiers":[],"name":"getParams","nameLocation":"22463:9:88","nodeType":"FunctionDefinition","parameters":{"id":13939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13938,"mutability":"mutable","name":"self","nameLocation":"22519:4:88","nodeType":"VariableDeclaration","scope":14000,"src":"22478:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":13937,"nodeType":"UserDefinedTypeName","pathNode":{"id":13936,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"22478:33:88"},"referencedDeclaration":23912,"src":"22478:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"22472:55:88"},"returnParameters":{"id":13952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13941,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14000,"src":"22551:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13940,"name":"uint256","nodeType":"ElementaryTypeName","src":"22551:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14000,"src":"22560:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13942,"name":"uint256","nodeType":"ElementaryTypeName","src":"22560:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13945,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14000,"src":"22569:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13944,"name":"uint256","nodeType":"ElementaryTypeName","src":"22569:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14000,"src":"22578:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13946,"name":"uint256","nodeType":"ElementaryTypeName","src":"22578:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13949,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14000,"src":"22587:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13948,"name":"uint256","nodeType":"ElementaryTypeName","src":"22587:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13951,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14000,"src":"22596:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13950,"name":"uint256","nodeType":"ElementaryTypeName","src":"22596:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22550:54:88"},"scope":14034,"src":"22454:651:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14032,"nodeType":"Block","src":"23450:202:88","statements":[{"assignments":[14012],"declarations":[{"constant":false,"id":14012,"mutability":"mutable","name":"dataLocal","nameLocation":"23464:9:88","nodeType":"VariableDeclaration","scope":14032,"src":"23456:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14011,"name":"uint256","nodeType":"ElementaryTypeName","src":"23456:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14015,"initialValue":{"expression":{"id":14013,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14004,"src":"23476:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":14014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23911,"src":"23476:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23456:29:88"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14016,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"23508:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":14018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23520:16:88","subExpression":{"id":14017,"name":"BORROW_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12799,"src":"23521:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23508:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14020,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23507:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14021,"name":"BORROW_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12854,"src":"23541:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23507:63:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14023,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"23579:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":14025,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23591:16:88","subExpression":{"id":14024,"name":"SUPPLY_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12802,"src":"23592:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23579:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14027,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23578:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14028,"name":"SUPPLY_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12857,"src":"23612:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23578:63:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14030,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23499:148:88","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":14010,"id":14031,"nodeType":"Return","src":"23492:155:88"}]},"documentation":{"id":14001,"nodeType":"StructuredDocumentation","src":"23109:225:88","text":" @notice Gets the caps parameters of the reserve from storage\n @param self The reserve configuration\n @return The state param representing borrow cap\n @return The state param representing supply cap."},"id":14033,"implemented":true,"kind":"function","modifiers":[],"name":"getCaps","nameLocation":"23346:7:88","nodeType":"FunctionDefinition","parameters":{"id":14005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14004,"mutability":"mutable","name":"self","nameLocation":"23400:4:88","nodeType":"VariableDeclaration","scope":14033,"src":"23359:45:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":14003,"nodeType":"UserDefinedTypeName","pathNode":{"id":14002,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"23359:33:88"},"referencedDeclaration":23912,"src":"23359:33:88","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"23353:55:88"},"returnParameters":{"id":14010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14033,"src":"23432:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14006,"name":"uint256","nodeType":"ElementaryTypeName","src":"23432:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14033,"src":"23441:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14008,"name":"uint256","nodeType":"ElementaryTypeName","src":"23441:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23431:18:88"},"scope":14034,"src":"23337:315:88","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":14035,"src":"297:23357:88","usedErrors":[]}],"src":"37:23618:88"},"id":88},"contracts/protocol/libraries/configuration/UserConfiguration.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","exportedSymbols":{"DataTypes":[24227],"Errors":[14819],"ReserveConfiguration":[14034],"UserConfiguration":[14545]},"id":14546,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":14036,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:89"},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":14038,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14546,"sourceUnit":14820,"src":"62:45:89","symbolAliases":[{"foreign":{"id":14037,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":14040,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14546,"sourceUnit":24228,"src":"108:49:89","symbolAliases":[{"foreign":{"id":14039,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"116:9:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"./ReserveConfiguration.sol","id":14042,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14546,"sourceUnit":14035,"src":"158:64:89","symbolAliases":[{"foreign":{"id":14041,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"166:20:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"UserConfiguration","contractDependencies":[],"contractKind":"library","documentation":{"id":14043,"nodeType":"StructuredDocumentation","src":"224:131:89","text":" @title UserConfiguration library\n @author Aave\n @notice Implements the bitmap logic to handle the user configuration"},"fullyImplemented":true,"id":14545,"linearizedBaseContracts":[14545],"name":"UserConfiguration","nameLocation":"364:17:89","nodeType":"ContractDefinition","nodes":[{"id":14047,"libraryName":{"id":14044,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"392:20:89"},"nodeType":"UsingForDirective","src":"386:65:89","typeName":{"id":14046,"nodeType":"UserDefinedTypeName","pathNode":{"id":14045,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"417:33:89"},"referencedDeclaration":23912,"src":"417:33:89","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"constant":true,"id":14050,"mutability":"constant","name":"BORROWING_MASK","nameLocation":"481:14:89","nodeType":"VariableDeclaration","scope":14545,"src":"455:113:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14048,"name":"uint256","nodeType":"ElementaryTypeName","src":"455:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307835353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535","id":14049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"502:66:89","typeDescriptions":{"typeIdentifier":"t_rational_38597363079105398474523661669562635951089994888546854679819194669304376546645_by_1","typeString":"int_const 3859...(69 digits omitted)...6645"},"value":"0x5555555555555555555555555555555555555555555555555555555555555555"},"visibility":"internal"},{"constant":true,"id":14053,"mutability":"constant","name":"COLLATERAL_MASK","nameLocation":"598:15:89","nodeType":"VariableDeclaration","scope":14545,"src":"572:114:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14051,"name":"uint256","nodeType":"ElementaryTypeName","src":"572:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307841414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141","id":14052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"620:66:89","typeDescriptions":{"typeIdentifier":"t_rational_77194726158210796949047323339125271902179989777093709359638389338608753093290_by_1","typeString":"int_const 7719...(69 digits omitted)...3290"},"value":"0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"},"visibility":"internal"},{"body":{"id":14100,"nodeType":"Block","src":"1102:273:89","statements":[{"id":14099,"nodeType":"UncheckedBlock","src":"1108:263:89","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14065,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14059,"src":"1134:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14066,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"1149:20:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":14067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":12908,"src":"1149:39:89","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"1134:54:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":14069,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1190:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":14070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":14767,"src":"1190:28:89","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":14064,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1126:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1126:93:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14072,"nodeType":"ExpressionStatement","src":"1126:93:89"},{"assignments":[14074],"declarations":[{"constant":false,"id":14074,"mutability":"mutable","name":"bit","nameLocation":"1235:3:89","nodeType":"VariableDeclaration","scope":14099,"src":"1227:11:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14073,"name":"uint256","nodeType":"ElementaryTypeName","src":"1227:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14081,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":14075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1241:1:89","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":14078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14076,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14059,"src":"1247:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":14077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1263:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1247:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14079,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1246:19:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1241:24:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1227:38:89"},{"condition":{"id":14082,"name":"borrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14061,"src":"1277:9:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":14097,"nodeType":"Block","src":"1329:36:89","statements":[{"expression":{"id":14095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14090,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14057,"src":"1339:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":14092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"1339:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"&=","rightHandSide":{"id":14094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"1352:4:89","subExpression":{"id":14093,"name":"bit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14074,"src":"1353:3:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1339:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14096,"nodeType":"ExpressionStatement","src":"1339:17:89"}]},"id":14098,"nodeType":"IfStatement","src":"1273:92:89","trueBody":{"id":14089,"nodeType":"Block","src":"1288:35:89","statements":[{"expression":{"id":14087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14083,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14057,"src":"1298:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":14085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"1298:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"id":14086,"name":"bit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14074,"src":"1311:3:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1298:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14088,"nodeType":"ExpressionStatement","src":"1298:16:89"}]}}]}]},"documentation":{"id":14054,"nodeType":"StructuredDocumentation","src":"691:278:89","text":" @notice Sets if the user is borrowing the reserve identified by reserveIndex\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @param borrowing True if the user is borrowing the reserve, false otherwise"},"id":14101,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowing","nameLocation":"981:12:89","nodeType":"FunctionDefinition","parameters":{"id":14062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14057,"mutability":"mutable","name":"self","nameLocation":"1038:4:89","nodeType":"VariableDeclaration","scope":14101,"src":"999:43:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14056,"nodeType":"UserDefinedTypeName","pathNode":{"id":14055,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"999:30:89"},"referencedDeclaration":23916,"src":"999:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14059,"mutability":"mutable","name":"reserveIndex","nameLocation":"1056:12:89","nodeType":"VariableDeclaration","scope":14101,"src":"1048:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14058,"name":"uint256","nodeType":"ElementaryTypeName","src":"1048:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14061,"mutability":"mutable","name":"borrowing","nameLocation":"1079:9:89","nodeType":"VariableDeclaration","scope":14101,"src":"1074:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14060,"name":"bool","nodeType":"ElementaryTypeName","src":"1074:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"993:99:89"},"returnParameters":{"id":14063,"nodeType":"ParameterList","parameters":[],"src":"1102:0:89"},"scope":14545,"src":"972:403:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14151,"nodeType":"Block","src":"1834:287:89","statements":[{"id":14150,"nodeType":"UncheckedBlock","src":"1840:277:89","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14113,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14107,"src":"1866:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14114,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"1881:20:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":14115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":12908,"src":"1881:39:89","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"1866:54:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":14117,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1922:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":14118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":14767,"src":"1922:28:89","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":14112,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1858:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1858:93:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14120,"nodeType":"ExpressionStatement","src":"1858:93:89"},{"assignments":[14122],"declarations":[{"constant":false,"id":14122,"mutability":"mutable","name":"bit","nameLocation":"1967:3:89","nodeType":"VariableDeclaration","scope":14150,"src":"1959:11:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14121,"name":"uint256","nodeType":"ElementaryTypeName","src":"1959:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14132,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":14123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1973:1:89","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":14129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14124,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14107,"src":"1980:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":14125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1996:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1980:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14127,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1979:19:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":14128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2001:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1979:23:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14130,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1978:25:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1973:30:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1959:44:89"},{"condition":{"id":14133,"name":"usingAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14109,"src":"2015:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":14148,"nodeType":"Block","src":"2075:36:89","statements":[{"expression":{"id":14146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14141,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14105,"src":"2085:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":14143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"2085:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"&=","rightHandSide":{"id":14145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"2098:4:89","subExpression":{"id":14144,"name":"bit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14122,"src":"2099:3:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2085:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14147,"nodeType":"ExpressionStatement","src":"2085:17:89"}]},"id":14149,"nodeType":"IfStatement","src":"2011:100:89","trueBody":{"id":14140,"nodeType":"Block","src":"2034:35:89","statements":[{"expression":{"id":14138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14134,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14105,"src":"2044:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":14136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"2044:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"id":14137,"name":"bit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14122,"src":"2057:3:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14139,"nodeType":"ExpressionStatement","src":"2044:16:89"}]}}]}]},"documentation":{"id":14102,"nodeType":"StructuredDocumentation","src":"1379:306:89","text":" @notice Sets if the user is using as collateral the reserve identified by reserveIndex\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise"},"id":14152,"implemented":true,"kind":"function","modifiers":[],"name":"setUsingAsCollateral","nameLocation":"1697:20:89","nodeType":"FunctionDefinition","parameters":{"id":14110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14105,"mutability":"mutable","name":"self","nameLocation":"1762:4:89","nodeType":"VariableDeclaration","scope":14152,"src":"1723:43:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14104,"nodeType":"UserDefinedTypeName","pathNode":{"id":14103,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"1723:30:89"},"referencedDeclaration":23916,"src":"1723:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14107,"mutability":"mutable","name":"reserveIndex","nameLocation":"1780:12:89","nodeType":"VariableDeclaration","scope":14152,"src":"1772:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14106,"name":"uint256","nodeType":"ElementaryTypeName","src":"1772:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14109,"mutability":"mutable","name":"usingAsCollateral","nameLocation":"1803:17:89","nodeType":"VariableDeclaration","scope":14152,"src":"1798:22:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14108,"name":"bool","nodeType":"ElementaryTypeName","src":"1798:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1717:107:89"},"returnParameters":{"id":14111,"nodeType":"ParameterList","parameters":[],"src":"1834:0:89"},"scope":14545,"src":"1688:433:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14186,"nodeType":"Block","src":"2582:186:89","statements":[{"id":14185,"nodeType":"UncheckedBlock","src":"2588:176:89","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14164,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14158,"src":"2614:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14165,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"2629:20:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":14166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":12908,"src":"2629:39:89","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2614:54:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":14168,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2670:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":14169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":14767,"src":"2670:28:89","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":14163,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2606:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2606:93:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14171,"nodeType":"ExpressionStatement","src":"2606:93:89"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14172,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14156,"src":"2715:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14173,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"2715:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14174,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14158,"src":"2729:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":14175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2745:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2729:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14177,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2728:19:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2715:32:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14179,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2714:34:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"33","id":14180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2751:1:89","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"2714:38:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2756:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2714:43:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14162,"id":14184,"nodeType":"Return","src":"2707:50:89"}]}]},"documentation":{"id":14153,"nodeType":"StructuredDocumentation","src":"2125:307:89","text":" @notice Returns if a user has been using the reserve for borrowing or as collateral\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @return True if the user has been using a reserve for borrowing or as collateral, false otherwise"},"id":14187,"implemented":true,"kind":"function","modifiers":[],"name":"isUsingAsCollateralOrBorrowing","nameLocation":"2444:30:89","nodeType":"FunctionDefinition","parameters":{"id":14159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14156,"mutability":"mutable","name":"self","nameLocation":"2518:4:89","nodeType":"VariableDeclaration","scope":14187,"src":"2480:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14155,"nodeType":"UserDefinedTypeName","pathNode":{"id":14154,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"2480:30:89"},"referencedDeclaration":23916,"src":"2480:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14158,"mutability":"mutable","name":"reserveIndex","nameLocation":"2536:12:89","nodeType":"VariableDeclaration","scope":14187,"src":"2528:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14157,"name":"uint256","nodeType":"ElementaryTypeName","src":"2528:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2474:78:89"},"returnParameters":{"id":14162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14161,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14187,"src":"2576:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14160,"name":"bool","nodeType":"ElementaryTypeName","src":"2576:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2575:6:89"},"scope":14545,"src":"2435:333:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14221,"nodeType":"Block","src":"3174:186:89","statements":[{"id":14220,"nodeType":"UncheckedBlock","src":"3180:176:89","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14199,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14193,"src":"3206:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14200,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"3221:20:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":14201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":12908,"src":"3221:39:89","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"3206:54:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":14203,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3262:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":14204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":14767,"src":"3262:28:89","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":14198,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3198:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3198:93:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14206,"nodeType":"ExpressionStatement","src":"3198:93:89"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14207,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14191,"src":"3307:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"3307:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14209,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14193,"src":"3321:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":14210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3337:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3321:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14212,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3320:19:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:32:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14214,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3306:34:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":14215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3343:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3306:38:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3348:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3306:43:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14197,"id":14219,"nodeType":"Return","src":"3299:50:89"}]}]},"documentation":{"id":14188,"nodeType":"StructuredDocumentation","src":"2772:271:89","text":" @notice Validate a user has been using the reserve for borrowing\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @return True if the user has been using a reserve for borrowing, false otherwise"},"id":14222,"implemented":true,"kind":"function","modifiers":[],"name":"isBorrowing","nameLocation":"3055:11:89","nodeType":"FunctionDefinition","parameters":{"id":14194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14191,"mutability":"mutable","name":"self","nameLocation":"3110:4:89","nodeType":"VariableDeclaration","scope":14222,"src":"3072:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14190,"nodeType":"UserDefinedTypeName","pathNode":{"id":14189,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"3072:30:89"},"referencedDeclaration":23916,"src":"3072:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14193,"mutability":"mutable","name":"reserveIndex","nameLocation":"3128:12:89","nodeType":"VariableDeclaration","scope":14222,"src":"3120:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14192,"name":"uint256","nodeType":"ElementaryTypeName","src":"3120:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3066:78:89"},"returnParameters":{"id":14197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14196,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14222,"src":"3168:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14195,"name":"bool","nodeType":"ElementaryTypeName","src":"3168:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3167:6:89"},"scope":14545,"src":"3046:314:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14259,"nodeType":"Block","src":"3774:192:89","statements":[{"id":14258,"nodeType":"UncheckedBlock","src":"3780:182:89","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14234,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14228,"src":"3806:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14235,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"3821:20:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":14236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":12908,"src":"3821:39:89","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"3806:54:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":14238,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3862:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":14239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":14767,"src":"3862:28:89","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":14233,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3798:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3798:93:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14241,"nodeType":"ExpressionStatement","src":"3798:93:89"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14242,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"3907:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"3907:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14244,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14228,"src":"3922:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":14245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3938:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3922:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14247,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3921:19:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":14248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3943:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3921:23:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14250,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3920:25:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3907:38:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14252,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3906:40:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":14253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3949:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3906:44:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3954:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3906:49:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14232,"id":14257,"nodeType":"Return","src":"3899:56:89"}]}]},"documentation":{"id":14223,"nodeType":"StructuredDocumentation","src":"3364:271:89","text":" @notice Validate a user has been using the reserve as collateral\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @return True if the user has been using a reserve as collateral, false otherwise"},"id":14260,"implemented":true,"kind":"function","modifiers":[],"name":"isUsingAsCollateral","nameLocation":"3647:19:89","nodeType":"FunctionDefinition","parameters":{"id":14229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14226,"mutability":"mutable","name":"self","nameLocation":"3710:4:89","nodeType":"VariableDeclaration","scope":14260,"src":"3672:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14225,"nodeType":"UserDefinedTypeName","pathNode":{"id":14224,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"3672:30:89"},"referencedDeclaration":23916,"src":"3672:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14228,"mutability":"mutable","name":"reserveIndex","nameLocation":"3728:12:89","nodeType":"VariableDeclaration","scope":14260,"src":"3720:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14227,"name":"uint256","nodeType":"ElementaryTypeName","src":"3720:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3666:78:89"},"returnParameters":{"id":14232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14231,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14260,"src":"3768:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14230,"name":"bool","nodeType":"ElementaryTypeName","src":"3768:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3767:6:89"},"scope":14545,"src":"3638:328:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14290,"nodeType":"Block","src":"4417:143:89","statements":[{"assignments":[14270],"declarations":[{"constant":false,"id":14270,"mutability":"mutable","name":"collateralData","nameLocation":"4431:14:89","nodeType":"VariableDeclaration","scope":14290,"src":"4423:22:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14269,"name":"uint256","nodeType":"ElementaryTypeName","src":"4423:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14275,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14271,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14264,"src":"4448:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"4448:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":14273,"name":"COLLATERAL_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14053,"src":"4460:15:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4448:27:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4423:52:89"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14276,"name":"collateralData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14270,"src":"4488:14:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4506:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4488:19:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14279,"name":"collateralData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14270,"src":"4512:14:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14280,"name":"collateralData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14270,"src":"4530:14:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":14281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4547:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4530:18:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14283,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4529:20:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4512:37:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4553:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4512:42:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":14287,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4511:44:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4488:67:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14268,"id":14289,"nodeType":"Return","src":"4481:74:89"}]},"documentation":{"id":14261,"nodeType":"StructuredDocumentation","src":"3970:331:89","text":" @notice Checks if a user has been supplying only one reserve as collateral\n @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\n @param self The configuration object\n @return True if the user has been supplying as collateral one reserve, false otherwise"},"id":14291,"implemented":true,"kind":"function","modifiers":[],"name":"isUsingAsCollateralOne","nameLocation":"4313:22:89","nodeType":"FunctionDefinition","parameters":{"id":14265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14264,"mutability":"mutable","name":"self","nameLocation":"4379:4:89","nodeType":"VariableDeclaration","scope":14291,"src":"4341:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14263,"nodeType":"UserDefinedTypeName","pathNode":{"id":14262,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"4341:30:89"},"referencedDeclaration":23916,"src":"4341:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"4335:52:89"},"returnParameters":{"id":14268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14267,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14291,"src":"4411:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14266,"name":"bool","nodeType":"ElementaryTypeName","src":"4411:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4410:6:89"},"scope":14545,"src":"4304:256:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14307,"nodeType":"Block","src":"4898:50:89","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14300,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14295,"src":"4911:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"4911:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":14302,"name":"COLLATERAL_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14053,"src":"4923:15:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4911:27:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4942:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4911:32:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14299,"id":14306,"nodeType":"Return","src":"4904:39:89"}]},"documentation":{"id":14292,"nodeType":"StructuredDocumentation","src":"4564:218:89","text":" @notice Checks if a user has been supplying any reserve as collateral\n @param self The configuration object\n @return True if the user has been supplying as collateral any reserve, false otherwise"},"id":14308,"implemented":true,"kind":"function","modifiers":[],"name":"isUsingAsCollateralAny","nameLocation":"4794:22:89","nodeType":"FunctionDefinition","parameters":{"id":14296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14295,"mutability":"mutable","name":"self","nameLocation":"4860:4:89","nodeType":"VariableDeclaration","scope":14308,"src":"4822:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14294,"nodeType":"UserDefinedTypeName","pathNode":{"id":14293,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"4822:30:89"},"referencedDeclaration":23916,"src":"4822:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"4816:52:89"},"returnParameters":{"id":14299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14298,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14308,"src":"4892:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14297,"name":"bool","nodeType":"ElementaryTypeName","src":"4892:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4891:6:89"},"scope":14545,"src":"4785:163:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14338,"nodeType":"Block","src":"5367:138:89","statements":[{"assignments":[14318],"declarations":[{"constant":false,"id":14318,"mutability":"mutable","name":"borrowingData","nameLocation":"5381:13:89","nodeType":"VariableDeclaration","scope":14338,"src":"5373:21:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14317,"name":"uint256","nodeType":"ElementaryTypeName","src":"5373:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14323,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14319,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14312,"src":"5397:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"5397:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":14321,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14050,"src":"5409:14:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5397:26:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5373:50:89"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14324,"name":"borrowingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14318,"src":"5436:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5453:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5436:18:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14327,"name":"borrowingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14318,"src":"5459:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14328,"name":"borrowingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14318,"src":"5476:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":14329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5492:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5476:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14331,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5475:19:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5459:35:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5498:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5459:40:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":14335,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5458:42:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5436:64:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14316,"id":14337,"nodeType":"Return","src":"5429:71:89"}]},"documentation":{"id":14309,"nodeType":"StructuredDocumentation","src":"4952:315:89","text":" @notice Checks if a user has been borrowing only one asset\n @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\n @param self The configuration object\n @return True if the user has been supplying as collateral one reserve, false otherwise"},"id":14339,"implemented":true,"kind":"function","modifiers":[],"name":"isBorrowingOne","nameLocation":"5279:14:89","nodeType":"FunctionDefinition","parameters":{"id":14313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14312,"mutability":"mutable","name":"self","nameLocation":"5332:4:89","nodeType":"VariableDeclaration","scope":14339,"src":"5294:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14311,"nodeType":"UserDefinedTypeName","pathNode":{"id":14310,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"5294:30:89"},"referencedDeclaration":23916,"src":"5294:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"5293:44:89"},"returnParameters":{"id":14316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14339,"src":"5361:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14314,"name":"bool","nodeType":"ElementaryTypeName","src":"5361:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5360:6:89"},"scope":14545,"src":"5270:235:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14355,"nodeType":"Block","src":"5804:49:89","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14348,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14343,"src":"5817:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"5817:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":14350,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14050,"src":"5829:14:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5817:26:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5847:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5817:31:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14347,"id":14354,"nodeType":"Return","src":"5810:38:89"}]},"documentation":{"id":14340,"nodeType":"StructuredDocumentation","src":"5509:195:89","text":" @notice Checks if a user has been borrowing from any reserve\n @param self The configuration object\n @return True if the user has been borrowing any reserve, false otherwise"},"id":14356,"implemented":true,"kind":"function","modifiers":[],"name":"isBorrowingAny","nameLocation":"5716:14:89","nodeType":"FunctionDefinition","parameters":{"id":14344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14343,"mutability":"mutable","name":"self","nameLocation":"5769:4:89","nodeType":"VariableDeclaration","scope":14356,"src":"5731:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14342,"nodeType":"UserDefinedTypeName","pathNode":{"id":14341,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"5731:30:89"},"referencedDeclaration":23916,"src":"5731:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"5730:44:89"},"returnParameters":{"id":14347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14356,"src":"5798:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14345,"name":"bool","nodeType":"ElementaryTypeName","src":"5798:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5797:6:89"},"scope":14545,"src":"5707:146:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14370,"nodeType":"Block","src":"6181:32:89","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14365,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14360,"src":"6194:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"6194:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6207:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6194:14:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14364,"id":14369,"nodeType":"Return","src":"6187:21:89"}]},"documentation":{"id":14357,"nodeType":"StructuredDocumentation","src":"5857:231:89","text":" @notice Checks if a user has not been using any reserve for borrowing or supply\n @param self The configuration object\n @return True if the user has not been borrowing or supplying any reserve, false otherwise"},"id":14371,"implemented":true,"kind":"function","modifiers":[],"name":"isEmpty","nameLocation":"6100:7:89","nodeType":"FunctionDefinition","parameters":{"id":14361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14360,"mutability":"mutable","name":"self","nameLocation":"6146:4:89","nodeType":"VariableDeclaration","scope":14371,"src":"6108:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14359,"nodeType":"UserDefinedTypeName","pathNode":{"id":14358,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"6108:30:89"},"referencedDeclaration":23916,"src":"6108:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"6107:44:89"},"returnParameters":{"id":14364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14363,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14371,"src":"6175:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14362,"name":"bool","nodeType":"ElementaryTypeName","src":"6175:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6174:6:89"},"scope":14545,"src":"6091:122:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14438,"nodeType":"Block","src":"6877:373:89","statements":[{"condition":{"arguments":[{"id":14394,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"6910:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}],"id":14393,"name":"isUsingAsCollateralOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14291,"src":"6887:22:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$returns$_t_bool_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":14395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6887:28:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14429,"nodeType":"IfStatement","src":"6883:328:89","trueBody":{"id":14428,"nodeType":"Block","src":"6917:294:89","statements":[{"assignments":[14397],"declarations":[{"constant":false,"id":14397,"mutability":"mutable","name":"assetId","nameLocation":"6933:7:89","nodeType":"VariableDeclaration","scope":14428,"src":"6925:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14396,"name":"uint256","nodeType":"ElementaryTypeName","src":"6925:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14402,"initialValue":{"arguments":[{"id":14399,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"6966:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"id":14400,"name":"COLLATERAL_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14053,"src":"6972:15:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14398,"name":"_getFirstAssetIdByMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14544,"src":"6943:22:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (uint256)"}},"id":14401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6943:45:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6925:63:89"},{"assignments":[14404],"declarations":[{"constant":false,"id":14404,"mutability":"mutable","name":"assetAddress","nameLocation":"7005:12:89","nodeType":"VariableDeclaration","scope":14428,"src":"6997:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14403,"name":"address","nodeType":"ElementaryTypeName","src":"6997:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14408,"initialValue":{"baseExpression":{"id":14405,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14384,"src":"7020:12:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":14407,"indexExpression":{"id":14406,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14397,"src":"7033:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7020:21:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6997:44:89"},{"assignments":[14410],"declarations":[{"constant":false,"id":14410,"mutability":"mutable","name":"ceiling","nameLocation":"7057:7:89","nodeType":"VariableDeclaration","scope":14428,"src":"7049:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14409,"name":"uint256","nodeType":"ElementaryTypeName","src":"7049:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14417,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"baseExpression":{"id":14411,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14380,"src":"7067:12:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":14413,"indexExpression":{"id":14412,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14404,"src":"7080:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7067:26:89","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":14414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"7067:40:89","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":14415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":13668,"src":"7067:55:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":14416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7067:57:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7049:75:89"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14418,"name":"ceiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"7136:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7147:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7136:12:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14427,"nodeType":"IfStatement","src":"7132:73:89","trueBody":{"id":14426,"nodeType":"Block","src":"7150:55:89","statements":[{"expression":{"components":[{"hexValue":"74727565","id":14421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7168:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":14422,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14404,"src":"7174:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14423,"name":"ceiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"7188:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14424,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7167:29:89","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_uint256_$","typeString":"tuple(bool,address,uint256)"}},"functionReturnParameters":14392,"id":14425,"nodeType":"Return","src":"7160:36:89"}]}}]}},{"expression":{"components":[{"hexValue":"66616c7365","id":14430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7224:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":14433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7239:1:89","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":14432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7231:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14431,"name":"address","nodeType":"ElementaryTypeName","src":"7231:7:89","typeDescriptions":{}}},"id":14434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7231:10:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":14435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7243:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":14436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7223:22:89","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(bool,address,int_const 0)"}},"functionReturnParameters":14392,"id":14437,"nodeType":"Return","src":"7216:29:89"}]},"documentation":{"id":14372,"nodeType":"StructuredDocumentation","src":"6217:405:89","text":" @notice Returns the Isolation Mode state of the user\n @param self The configuration object\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @return True if the user is in isolation mode, false otherwise\n @return The address of the only asset used as collateral\n @return The debt ceiling of the reserve"},"id":14439,"implemented":true,"kind":"function","modifiers":[],"name":"getIsolationModeState","nameLocation":"6634:21:89","nodeType":"FunctionDefinition","parameters":{"id":14385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14375,"mutability":"mutable","name":"self","nameLocation":"6699:4:89","nodeType":"VariableDeclaration","scope":14439,"src":"6661:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14374,"nodeType":"UserDefinedTypeName","pathNode":{"id":14373,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"6661:30:89"},"referencedDeclaration":23916,"src":"6661:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14380,"mutability":"mutable","name":"reservesData","nameLocation":"6759:12:89","nodeType":"VariableDeclaration","scope":14439,"src":"6709:62:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":14379,"keyType":{"id":14376,"name":"address","nodeType":"ElementaryTypeName","src":"6717:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6709:41:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":14378,"nodeType":"UserDefinedTypeName","pathNode":{"id":14377,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"6728:21:89"},"referencedDeclaration":23909,"src":"6728:21:89","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":14384,"mutability":"mutable","name":"reservesList","nameLocation":"6813:12:89","nodeType":"VariableDeclaration","scope":14439,"src":"6777:48:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":14383,"keyType":{"id":14381,"name":"uint256","nodeType":"ElementaryTypeName","src":"6785:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6777:27:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":14382,"name":"address","nodeType":"ElementaryTypeName","src":"6796:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"}],"src":"6655:174:89"},"returnParameters":{"id":14392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14387,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14439,"src":"6853:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14386,"name":"bool","nodeType":"ElementaryTypeName","src":"6853:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":14389,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14439,"src":"6859:7:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14388,"name":"address","nodeType":"ElementaryTypeName","src":"6859:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14439,"src":"6868:7:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14390,"name":"uint256","nodeType":"ElementaryTypeName","src":"6868:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6852:24:89"},"scope":14545,"src":"6625:625:89","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14496,"nodeType":"Block","src":"7837:318:89","statements":[{"condition":{"arguments":[{"id":14460,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14443,"src":"7862:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}],"id":14459,"name":"isBorrowingOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14339,"src":"7847:14:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$returns$_t_bool_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":14461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7847:20:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14488,"nodeType":"IfStatement","src":"7843:275:89","trueBody":{"id":14487,"nodeType":"Block","src":"7869:249:89","statements":[{"assignments":[14463],"declarations":[{"constant":false,"id":14463,"mutability":"mutable","name":"assetId","nameLocation":"7885:7:89","nodeType":"VariableDeclaration","scope":14487,"src":"7877:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14462,"name":"uint256","nodeType":"ElementaryTypeName","src":"7877:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14468,"initialValue":{"arguments":[{"id":14465,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14443,"src":"7918:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"id":14466,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14050,"src":"7924:14:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14464,"name":"_getFirstAssetIdByMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14544,"src":"7895:22:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (uint256)"}},"id":14467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7895:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7877:62:89"},{"assignments":[14470],"declarations":[{"constant":false,"id":14470,"mutability":"mutable","name":"assetAddress","nameLocation":"7955:12:89","nodeType":"VariableDeclaration","scope":14487,"src":"7947:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14469,"name":"address","nodeType":"ElementaryTypeName","src":"7947:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14474,"initialValue":{"baseExpression":{"id":14471,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14452,"src":"7970:12:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":14473,"indexExpression":{"id":14472,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14463,"src":"7983:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7970:21:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7947:44:89"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"baseExpression":{"id":14475,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14448,"src":"8003:12:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":14477,"indexExpression":{"id":14476,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14470,"src":"8016:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8003:26:89","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":14478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"8003:40:89","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":14479,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":13360,"src":"8003:59:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":14480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8003:61:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14486,"nodeType":"IfStatement","src":"7999:113:89","trueBody":{"id":14485,"nodeType":"Block","src":"8066:46:89","statements":[{"expression":{"components":[{"hexValue":"74727565","id":14481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8084:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":14482,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14470,"src":"8090:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":14483,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8083:20:89","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":14458,"id":14484,"nodeType":"Return","src":"8076:27:89"}]}}]}},{"expression":{"components":[{"hexValue":"66616c7365","id":14489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8132:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":14492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8147:1:89","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":14491,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8139:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14490,"name":"address","nodeType":"ElementaryTypeName","src":"8139:7:89","typeDescriptions":{}}},"id":14493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8139:10:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":14494,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8131:19:89","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":14458,"id":14495,"nodeType":"Return","src":"8124:26:89"}]},"documentation":{"id":14440,"nodeType":"StructuredDocumentation","src":"7254:335:89","text":" @notice Returns the siloed borrowing state for the user\n @param self The configuration object\n @param reservesData The data of all the reserves\n @param reservesList The reserve list\n @return True if the user has borrowed a siloed asset, false otherwise\n @return The address of the only borrowed asset"},"id":14497,"implemented":true,"kind":"function","modifiers":[],"name":"getSiloedBorrowingState","nameLocation":"7601:23:89","nodeType":"FunctionDefinition","parameters":{"id":14453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14443,"mutability":"mutable","name":"self","nameLocation":"7668:4:89","nodeType":"VariableDeclaration","scope":14497,"src":"7630:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14442,"nodeType":"UserDefinedTypeName","pathNode":{"id":14441,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"7630:30:89"},"referencedDeclaration":23916,"src":"7630:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14448,"mutability":"mutable","name":"reservesData","nameLocation":"7728:12:89","nodeType":"VariableDeclaration","scope":14497,"src":"7678:62:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":14447,"keyType":{"id":14444,"name":"address","nodeType":"ElementaryTypeName","src":"7686:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7678:41:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":14446,"nodeType":"UserDefinedTypeName","pathNode":{"id":14445,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"7697:21:89"},"referencedDeclaration":23909,"src":"7697:21:89","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":14452,"mutability":"mutable","name":"reservesList","nameLocation":"7782:12:89","nodeType":"VariableDeclaration","scope":14497,"src":"7746:48:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":14451,"keyType":{"id":14449,"name":"uint256","nodeType":"ElementaryTypeName","src":"7754:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"7746:27:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":14450,"name":"address","nodeType":"ElementaryTypeName","src":"7765:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"}],"src":"7624:174:89"},"returnParameters":{"id":14458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14455,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14497,"src":"7822:4:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14454,"name":"bool","nodeType":"ElementaryTypeName","src":"7822:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":14457,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14497,"src":"7828:7:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14456,"name":"address","nodeType":"ElementaryTypeName","src":"7828:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7821:15:89"},"scope":14545,"src":"7592:563:89","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14543,"nodeType":"Block","src":"8556:248:89","statements":[{"id":14542,"nodeType":"UncheckedBlock","src":"8562:238:89","statements":[{"assignments":[14509],"declarations":[{"constant":false,"id":14509,"mutability":"mutable","name":"bitmapData","nameLocation":"8588:10:89","nodeType":"VariableDeclaration","scope":14542,"src":"8580:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14508,"name":"uint256","nodeType":"ElementaryTypeName","src":"8580:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14514,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14510,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14501,"src":"8601:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":14511,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":23915,"src":"8601:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":14512,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14503,"src":"8613:4:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8601:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8580:37:89"},{"assignments":[14516],"declarations":[{"constant":false,"id":14516,"mutability":"mutable","name":"firstAssetPosition","nameLocation":"8633:18:89","nodeType":"VariableDeclaration","scope":14542,"src":"8625:26:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14515,"name":"uint256","nodeType":"ElementaryTypeName","src":"8625:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14524,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14517,"name":"bitmapData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14509,"src":"8654:10:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":14522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"8667:17:89","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14518,"name":"bitmapData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14509,"src":"8669:10:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":14519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8682:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8669:14:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14521,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8668:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8654:30:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8625:59:89"},{"assignments":[14526],"declarations":[{"constant":false,"id":14526,"mutability":"mutable","name":"id","nameLocation":"8700:2:89","nodeType":"VariableDeclaration","scope":14542,"src":"8692:10:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14525,"name":"uint256","nodeType":"ElementaryTypeName","src":"8692:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14527,"nodeType":"VariableDeclarationStatement","src":"8692:10:89"},{"body":{"id":14538,"nodeType":"Block","src":"8751:26:89","statements":[{"expression":{"id":14536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14534,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14526,"src":"8761:2:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":14535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8767:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8761:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14537,"nodeType":"ExpressionStatement","src":"8761:7:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":14530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14528,"name":"firstAssetPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14516,"src":"8719:18:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"32","id":14529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8742:1:89","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"8719:24:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14531,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8718:26:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8748:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8718:31:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14539,"nodeType":"WhileStatement","src":"8711:66:89"},{"expression":{"id":14540,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14526,"src":"8791:2:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14507,"id":14541,"nodeType":"Return","src":"8784:9:89"}]}]},"documentation":{"id":14498,"nodeType":"StructuredDocumentation","src":"8159:260:89","text":" @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\n @param self The configuration object\n @return The index of the first asset flagged in the bitmap once the corresponding mask is applied"},"id":14544,"implemented":true,"kind":"function","modifiers":[],"name":"_getFirstAssetIdByMask","nameLocation":"8431:22:89","nodeType":"FunctionDefinition","parameters":{"id":14504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14501,"mutability":"mutable","name":"self","nameLocation":"8497:4:89","nodeType":"VariableDeclaration","scope":14544,"src":"8459:42:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14500,"nodeType":"UserDefinedTypeName","pathNode":{"id":14499,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"8459:30:89"},"referencedDeclaration":23916,"src":"8459:30:89","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14503,"mutability":"mutable","name":"mask","nameLocation":"8515:4:89","nodeType":"VariableDeclaration","scope":14544,"src":"8507:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14502,"name":"uint256","nodeType":"ElementaryTypeName","src":"8507:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8453:70:89"},"returnParameters":{"id":14507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14544,"src":"8547:7:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14505,"name":"uint256","nodeType":"ElementaryTypeName","src":"8547:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8546:9:89"},"scope":14545,"src":"8422:382:89","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":14546,"src":"356:8450:89","usedErrors":[]}],"src":"37:8770:89"},"id":89},"contracts/protocol/libraries/helpers/Errors.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","exportedSymbols":{"Errors":[14819]},"id":14820,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":14547,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:90"},{"abstract":false,"baseContracts":[],"canonicalName":"Errors","contractDependencies":[],"contractKind":"library","documentation":{"id":14548,"nodeType":"StructuredDocumentation","src":"62:142:90","text":" @title Errors library\n @author Aave\n @notice Defines the error messages emitted by the different contracts of the Aave protocol"},"fullyImplemented":true,"id":14819,"linearizedBaseContracts":[14819],"name":"Errors","nameLocation":"213:6:90","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"ac753236","id":14551,"mutability":"constant","name":"CALLER_NOT_POOL_ADMIN","nameLocation":"247:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"224:50:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14549,"name":"string","nodeType":"ElementaryTypeName","src":"224:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"31","id":14550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"271:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"},"visibility":"public"},{"constant":true,"functionSelector":"485c8ff6","id":14554,"mutability":"constant","name":"CALLER_NOT_EMERGENCY_ADMIN","nameLocation":"353:26:90","nodeType":"VariableDeclaration","scope":14819,"src":"330:55:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14552,"name":"string","nodeType":"ElementaryTypeName","src":"330:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"32","id":14553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"382:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_ad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5","typeString":"literal_string \"2\""},"value":"2"},"visibility":"public"},{"constant":true,"functionSelector":"26e7b312","id":14557,"mutability":"constant","name":"CALLER_NOT_POOL_OR_EMERGENCY_ADMIN","nameLocation":"470:34:90","nodeType":"VariableDeclaration","scope":14819,"src":"447:63:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14555,"name":"string","nodeType":"ElementaryTypeName","src":"447:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"33","id":14556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"507:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de","typeString":"literal_string \"3\""},"value":"3"},"visibility":"public"},{"constant":true,"functionSelector":"b5e79366","id":14560,"mutability":"constant","name":"CALLER_NOT_RISK_OR_POOL_ADMIN","nameLocation":"602:29:90","nodeType":"VariableDeclaration","scope":14819,"src":"579:58:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14558,"name":"string","nodeType":"ElementaryTypeName","src":"579:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"34","id":14559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"634:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_13600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c060","typeString":"literal_string \"4\""},"value":"4"},"visibility":"public"},{"constant":true,"functionSelector":"2c8e3b4c","id":14563,"mutability":"constant","name":"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN","nameLocation":"724:38:90","nodeType":"VariableDeclaration","scope":14819,"src":"701:67:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14561,"name":"string","nodeType":"ElementaryTypeName","src":"701:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"35","id":14562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"765:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_ceebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1","typeString":"literal_string \"5\""},"value":"5"},"visibility":"public"},{"constant":true,"functionSelector":"4f77647b","id":14566,"mutability":"constant","name":"CALLER_NOT_BRIDGE","nameLocation":"865:17:90","nodeType":"VariableDeclaration","scope":14819,"src":"842:46:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14564,"name":"string","nodeType":"ElementaryTypeName","src":"842:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"36","id":14565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"885:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_e455bf8ea6e7463a1046a0b52804526e119b4bf5136279614e0b1e8e296a4e2d","typeString":"literal_string \"6\""},"value":"6"},"visibility":"public"},{"constant":true,"functionSelector":"e02f07ee","id":14569,"mutability":"constant","name":"ADDRESSES_PROVIDER_NOT_REGISTERED","nameLocation":"963:33:90","nodeType":"VariableDeclaration","scope":14819,"src":"940:62:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14567,"name":"string","nodeType":"ElementaryTypeName","src":"940:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"37","id":14568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"999:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_52f1a9b320cab38e5da8a8f97989383aab0a49165fc91c737310e4f7e9821021","typeString":"literal_string \"7\""},"value":"7"},"visibility":"public"},{"constant":true,"functionSelector":"60c3de80","id":14572,"mutability":"constant","name":"INVALID_ADDRESSES_PROVIDER_ID","nameLocation":"1076:29:90","nodeType":"VariableDeclaration","scope":14819,"src":"1053:58:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14570,"name":"string","nodeType":"ElementaryTypeName","src":"1053:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"38","id":14571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1108:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_e4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10","typeString":"literal_string \"8\""},"value":"8"},"visibility":"public"},{"constant":true,"functionSelector":"11d7b006","id":14575,"mutability":"constant","name":"NOT_CONTRACT","nameLocation":"1186:12:90","nodeType":"VariableDeclaration","scope":14819,"src":"1163:41:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14573,"name":"string","nodeType":"ElementaryTypeName","src":"1163:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"39","id":14574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1201:3:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_d2f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb","typeString":"literal_string \"9\""},"value":"9"},"visibility":"public"},{"constant":true,"functionSelector":"61c111d2","id":14578,"mutability":"constant","name":"CALLER_NOT_POOL_CONFIGURATOR","nameLocation":"1262:28:90","nodeType":"VariableDeclaration","scope":14819,"src":"1239:58:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14576,"name":"string","nodeType":"ElementaryTypeName","src":"1239:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3130","id":14577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1293:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_1a192fabce13988b84994d4296e6cdc418d55e2f1d7f942188d4040b94fc57ac","typeString":"literal_string \"10\""},"value":"10"},"visibility":"public"},{"constant":true,"functionSelector":"a2e976c6","id":14581,"mutability":"constant","name":"CALLER_NOT_ATOKEN","nameLocation":"1385:17:90","nodeType":"VariableDeclaration","scope":14819,"src":"1362:47:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14579,"name":"string","nodeType":"ElementaryTypeName","src":"1362:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3131","id":14580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1405:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_7880aec93413f117ef14bd4e6d130875ab2c7d7d55a064fac3c2f7bd51516380","typeString":"literal_string \"11\""},"value":"11"},"visibility":"public"},{"constant":true,"functionSelector":"37930782","id":14584,"mutability":"constant","name":"INVALID_ADDRESSES_PROVIDER","nameLocation":"1485:26:90","nodeType":"VariableDeclaration","scope":14819,"src":"1462:56:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14582,"name":"string","nodeType":"ElementaryTypeName","src":"1462:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3132","id":14583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1514:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_7f8b6b088b6d74c2852fc86c796dca07b44eed6fb3daf5e6b59f7c364db14528","typeString":"literal_string \"12\""},"value":"12"},"visibility":"public"},{"constant":true,"functionSelector":"7fea6f36","id":14587,"mutability":"constant","name":"INVALID_FLASHLOAN_EXECUTOR_RETURN","nameLocation":"1604:33:90","nodeType":"VariableDeclaration","scope":14819,"src":"1581:63:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14585,"name":"string","nodeType":"ElementaryTypeName","src":"1581:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3133","id":14586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1640:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_789bcdf275fa270780a52ae3b79bb1ce0fda7e0aaad87b57b74bb99ac290714a","typeString":"literal_string \"13\""},"value":"13"},"visibility":"public"},{"constant":true,"functionSelector":"12dcade8","id":14590,"mutability":"constant","name":"RESERVE_ALREADY_ADDED","nameLocation":"1732:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"1709:51:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14588,"name":"string","nodeType":"ElementaryTypeName","src":"1709:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3134","id":14589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1756:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_5c4c6aa067b6f8e6cb38e6ab843832a94d1712d661a04d73c517d6a1931a9e5d","typeString":"literal_string \"14\""},"value":"14"},"visibility":"public"},{"constant":true,"functionSelector":"76ae8fca","id":14593,"mutability":"constant","name":"NO_MORE_RESERVES_ALLOWED","nameLocation":"1839:24:90","nodeType":"VariableDeclaration","scope":14819,"src":"1816:54:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14591,"name":"string","nodeType":"ElementaryTypeName","src":"1816:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3135","id":14592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1866:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_1d3be50b2bb17407dd170f1d5da128d1def30c6b1598d6a629e79b4775265526","typeString":"literal_string \"15\""},"value":"15"},"visibility":"public"},{"constant":true,"functionSelector":"f479ea11","id":14596,"mutability":"constant","name":"EMODE_CATEGORY_RESERVED","nameLocation":"1949:23:90","nodeType":"VariableDeclaration","scope":14819,"src":"1926:53:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14594,"name":"string","nodeType":"ElementaryTypeName","src":"1926:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3136","id":14595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1975:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_277ab82e5a4641341820a4a2933a62c1de997e42e92548657ae21b3728d580fe","typeString":"literal_string \"16\""},"value":"16"},"visibility":"public"},{"constant":true,"functionSelector":"5d9c76c0","id":14599,"mutability":"constant","name":"INVALID_EMODE_CATEGORY_ASSIGNMENT","nameLocation":"2077:33:90","nodeType":"VariableDeclaration","scope":14819,"src":"2054:63:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14597,"name":"string","nodeType":"ElementaryTypeName","src":"2054:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3137","id":14598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2113:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e8fab5f003314da8d1873ea7720e8d9f47650136d916064d1edb8a11d682624","typeString":"literal_string \"17\""},"value":"17"},"visibility":"public"},{"constant":true,"functionSelector":"084dfa0d","id":14602,"mutability":"constant","name":"RESERVE_LIQUIDITY_NOT_ZERO","nameLocation":"2192:26:90","nodeType":"VariableDeclaration","scope":14819,"src":"2169:56:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14600,"name":"string","nodeType":"ElementaryTypeName","src":"2169:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3138","id":14601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2221:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_8fef2229291b68be841adf029e58b87f39ba144b2d3b0af1760243d0a9bc6a1c","typeString":"literal_string \"18\""},"value":"18"},"visibility":"public"},{"constant":true,"functionSelector":"747fa556","id":14605,"mutability":"constant","name":"FLASHLOAN_PREMIUM_INVALID","nameLocation":"2300:25:90","nodeType":"VariableDeclaration","scope":14819,"src":"2277:55:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14603,"name":"string","nodeType":"ElementaryTypeName","src":"2277:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3139","id":14604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2328:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_939eb54753ed0cc7e2272bfb34cbe098308c93936ed54d79078f76ade0b2e789","typeString":"literal_string \"19\""},"value":"19"},"visibility":"public"},{"constant":true,"functionSelector":"335763de","id":14608,"mutability":"constant","name":"INVALID_RESERVE_PARAMS","nameLocation":"2390:22:90","nodeType":"VariableDeclaration","scope":14819,"src":"2367:52:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14606,"name":"string","nodeType":"ElementaryTypeName","src":"2367:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3230","id":14607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2415:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_731dc163f73d31d8c68f9917ce4ff967753939f70432973c04fd2c2a48148607","typeString":"literal_string \"20\""},"value":"20"},"visibility":"public"},{"constant":true,"functionSelector":"47cf1523","id":14611,"mutability":"constant","name":"INVALID_EMODE_CATEGORY_PARAMS","nameLocation":"2491:29:90","nodeType":"VariableDeclaration","scope":14819,"src":"2468:59:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14609,"name":"string","nodeType":"ElementaryTypeName","src":"2468:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3231","id":14610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2523:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_f4c2b5de886427473655d4c904c743576dc2d53249b7535d96c06cc97ae7216b","typeString":"literal_string \"21\""},"value":"21"},"visibility":"public"},{"constant":true,"functionSelector":"7aa0767e","id":14614,"mutability":"constant","name":"BRIDGE_PROTOCOL_FEE_INVALID","nameLocation":"2606:27:90","nodeType":"VariableDeclaration","scope":14819,"src":"2583:57:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14612,"name":"string","nodeType":"ElementaryTypeName","src":"2583:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3232","id":14613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2636:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_d4d1a59767271eefdc7830a772b9732a11d503531d972ab8c981a6b1c0e666e5","typeString":"literal_string \"22\""},"value":"22"},"visibility":"public"},{"constant":true,"functionSelector":"471df685","id":14617,"mutability":"constant","name":"CALLER_MUST_BE_POOL","nameLocation":"2700:19:90","nodeType":"VariableDeclaration","scope":14819,"src":"2677:49:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14615,"name":"string","nodeType":"ElementaryTypeName","src":"2677:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3233","id":14616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2722:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_1572b593c53d839d80004aa4b8c51211864104f06ace9e22be9c4365b50655ea","typeString":"literal_string \"23\""},"value":"23"},"visibility":"public"},{"constant":true,"functionSelector":"abd351b1","id":14620,"mutability":"constant","name":"INVALID_MINT_AMOUNT","nameLocation":"2801:19:90","nodeType":"VariableDeclaration","scope":14819,"src":"2778:49:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14618,"name":"string","nodeType":"ElementaryTypeName","src":"2778:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3234","id":14619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2823:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_6585423cb6456b1d4957f6454d2f004f0c4f58d53a00082412d5c2ef4b1b31fd","typeString":"literal_string \"24\""},"value":"24"},"visibility":"public"},{"constant":true,"functionSelector":"51267450","id":14623,"mutability":"constant","name":"INVALID_BURN_AMOUNT","nameLocation":"2882:19:90","nodeType":"VariableDeclaration","scope":14819,"src":"2859:49:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14621,"name":"string","nodeType":"ElementaryTypeName","src":"2859:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3235","id":14622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2904:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_81e080ffc23e8b8d44dd829bc823229e92b893eb1d8f624419d3f5682eb97fc3","typeString":"literal_string \"25\""},"value":"25"},"visibility":"public"},{"constant":true,"functionSelector":"fae82791","id":14626,"mutability":"constant","name":"INVALID_AMOUNT","nameLocation":"2963:14:90","nodeType":"VariableDeclaration","scope":14819,"src":"2940:44:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14624,"name":"string","nodeType":"ElementaryTypeName","src":"2940:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3236","id":14625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2980:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_9cce9eb03c9f29c6481fca9f0f942b15bef0bbbc47fda0ddb44df157019835d9","typeString":"literal_string \"26\""},"value":"26"},"visibility":"public"},{"constant":true,"functionSelector":"52ba9dbe","id":14629,"mutability":"constant","name":"RESERVE_INACTIVE","nameLocation":"3046:16:90","nodeType":"VariableDeclaration","scope":14819,"src":"3023:46:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14627,"name":"string","nodeType":"ElementaryTypeName","src":"3023:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3237","id":14628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3065:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_58a280f74f57bf051c40f060139dc747e015be52f68c57e2c4ab2e4bd4146f43","typeString":"literal_string \"27\""},"value":"27"},"visibility":"public"},{"constant":true,"functionSelector":"6cd3cfbc","id":14632,"mutability":"constant","name":"RESERVE_FROZEN","nameLocation":"3135:14:90","nodeType":"VariableDeclaration","scope":14819,"src":"3112:44:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14630,"name":"string","nodeType":"ElementaryTypeName","src":"3112:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3238","id":14631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3152:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_9560168699514dcd528543d614e81b4f36adf182dc624d2f1eb91df8addd987e","typeString":"literal_string \"28\""},"value":"28"},"visibility":"public"},{"constant":true,"functionSelector":"b68774e9","id":14635,"mutability":"constant","name":"RESERVE_PAUSED","nameLocation":"3245:14:90","nodeType":"VariableDeclaration","scope":14819,"src":"3222:44:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14633,"name":"string","nodeType":"ElementaryTypeName","src":"3222:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3239","id":14634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3262:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_7749cc8014201da2069c21d93ba99c584b6f62d393fde534ed47eac227e31561","typeString":"literal_string \"29\""},"value":"29"},"visibility":"public"},{"constant":true,"functionSelector":"4ef999ff","id":14638,"mutability":"constant","name":"BORROWING_NOT_ENABLED","nameLocation":"3355:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"3332:51:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14636,"name":"string","nodeType":"ElementaryTypeName","src":"3332:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3330","id":14637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3379:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_bbf5a24880b10a5f9f601c4058e4771ddea17e7d765ceb3c903814e1c0d621e0","typeString":"literal_string \"30\""},"value":"30"},"visibility":"public"},{"constant":true,"functionSelector":"4d86f393","id":14641,"mutability":"constant","name":"STABLE_BORROWING_NOT_ENABLED","nameLocation":"3440:28:90","nodeType":"VariableDeclaration","scope":14819,"src":"3417:58:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14639,"name":"string","nodeType":"ElementaryTypeName","src":"3417:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3331","id":14640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3471:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_933c48a61c3bad621ebc5d57117f9e773fefae4468bceaf9d3198a3bf7c1d678","typeString":"literal_string \"31\""},"value":"31"},"visibility":"public"},{"constant":true,"functionSelector":"b7f5e224","id":14644,"mutability":"constant","name":"NOT_ENOUGH_AVAILABLE_USER_BALANCE","nameLocation":"3539:33:90","nodeType":"VariableDeclaration","scope":14819,"src":"3516:63:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14642,"name":"string","nodeType":"ElementaryTypeName","src":"3516:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3332","id":14643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3575:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b953cbb84328003779eb1ef176ef07f7dd0ae3d4a8e408de53d15a36466c86e","typeString":"literal_string \"32\""},"value":"32"},"visibility":"public"},{"constant":true,"functionSelector":"89c5d45f","id":14647,"mutability":"constant","name":"INVALID_INTEREST_RATE_MODE_SELECTED","nameLocation":"3664:35:90","nodeType":"VariableDeclaration","scope":14819,"src":"3641:65:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14645,"name":"string","nodeType":"ElementaryTypeName","src":"3641:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3333","id":14646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3702:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed93c67e1a9b7f09d3b44ee593360f0073603a8e45415e2c3c69afc994a1103d","typeString":"literal_string \"33\""},"value":"33"},"visibility":"public"},{"constant":true,"functionSelector":"4e01e3c1","id":14650,"mutability":"constant","name":"COLLATERAL_BALANCE_IS_ZERO","nameLocation":"3774:26:90","nodeType":"VariableDeclaration","scope":14819,"src":"3751:56:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14648,"name":"string","nodeType":"ElementaryTypeName","src":"3751:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3334","id":14649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3803:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_77c32b454bb61eb9df9e3848d0ded3e59753acda90ae58befe564733aec82e4c","typeString":"literal_string \"34\""},"value":"34"},"visibility":"public"},{"constant":true,"functionSelector":"366eb54d","id":14653,"mutability":"constant","name":"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD","nameLocation":"3867:46:90","nodeType":"VariableDeclaration","scope":14819,"src":"3844:76:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14651,"name":"string","nodeType":"ElementaryTypeName","src":"3844:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3335","id":14652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3916:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ca7b081b8c6c57b0469c340dba43ec8d33c0b898c69e55c4f74ff7ed9ac71ea","typeString":"literal_string \"35\""},"value":"35"},"visibility":"public"},{"constant":true,"functionSelector":"e3fa20f5","id":14656,"mutability":"constant","name":"COLLATERAL_CANNOT_COVER_NEW_BORROW","nameLocation":"4007:34:90","nodeType":"VariableDeclaration","scope":14819,"src":"3984:64:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14654,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3336","id":14655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4044:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b4066bd7b7960752225af105d3beafb5c47a26c5aae7e6798a437b7c0bb33e6","typeString":"literal_string \"36\""},"value":"36"},"visibility":"public"},{"constant":true,"functionSelector":"8a344000","id":14659,"mutability":"constant","name":"COLLATERAL_SAME_AS_BORROWING_CURRENCY","nameLocation":"4133:37:90","nodeType":"VariableDeclaration","scope":14819,"src":"4110:67:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14657,"name":"string","nodeType":"ElementaryTypeName","src":"4110:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3337","id":14658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4173:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_5bc0457d8881b800fd1bc0d6df907345b3bf287e43a5790ded3d08dbacf9c03a","typeString":"literal_string \"37\""},"value":"37"},"visibility":"public"},{"constant":true,"functionSelector":"f07f6785","id":14662,"mutability":"constant","name":"AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE","nameLocation":"4273:39:90","nodeType":"VariableDeclaration","scope":14819,"src":"4250:69:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14660,"name":"string","nodeType":"ElementaryTypeName","src":"4250:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3338","id":14661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4315:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_d67d834462ca31eaef1f30157e31659f60355143b7441e6fc7d9eae1fa79f3f8","typeString":"literal_string \"38\""},"value":"38"},"visibility":"public"},{"constant":true,"functionSelector":"dc191bd9","id":14665,"mutability":"constant","name":"NO_DEBT_OF_SELECTED_TYPE","nameLocation":"4426:24:90","nodeType":"VariableDeclaration","scope":14819,"src":"4403:54:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14663,"name":"string","nodeType":"ElementaryTypeName","src":"4403:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3339","id":14664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4453:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_318a541463286d7584b45438601196fbc1a55628e303a0613eb6d46e60640c95","typeString":"literal_string \"39\""},"value":"39"},"visibility":"public"},{"constant":true,"functionSelector":"712f536a","id":14668,"mutability":"constant","name":"NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF","nameLocation":"4569:37:90","nodeType":"VariableDeclaration","scope":14819,"src":"4546:67:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14666,"name":"string","nodeType":"ElementaryTypeName","src":"4546:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3430","id":14667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4609:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_880de8116b3dfac28e9ff528a9fef1d1e0a51449c1addce011ffec1f302992b6","typeString":"literal_string \"40\""},"value":"40"},"visibility":"public"},{"constant":true,"functionSelector":"74459b14","id":14671,"mutability":"constant","name":"NO_OUTSTANDING_STABLE_DEBT","nameLocation":"4712:26:90","nodeType":"VariableDeclaration","scope":14819,"src":"4689:56:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14669,"name":"string","nodeType":"ElementaryTypeName","src":"4689:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3431","id":14670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4741:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_6bcaf047ba4c8ac400fca43393035242dd1aabda2d6068a0c51242b97224de8d","typeString":"literal_string \"41\""},"value":"41"},"visibility":"public"},{"constant":true,"functionSelector":"b4a45730","id":14674,"mutability":"constant","name":"NO_OUTSTANDING_VARIABLE_DEBT","nameLocation":"4841:28:90","nodeType":"VariableDeclaration","scope":14819,"src":"4818:58:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14672,"name":"string","nodeType":"ElementaryTypeName","src":"4818:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3432","id":14673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4872:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_ccb1f717aa77602faf03a594761a36956b1c4cf44c6b336d1db57da799b331b8","typeString":"literal_string \"42\""},"value":"42"},"visibility":"public"},{"constant":true,"functionSelector":"a2797c80","id":14677,"mutability":"constant","name":"UNDERLYING_BALANCE_ZERO","nameLocation":"4974:23:90","nodeType":"VariableDeclaration","scope":14819,"src":"4951:53:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14675,"name":"string","nodeType":"ElementaryTypeName","src":"4951:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3433","id":14676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5000:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_4dfb3440902001bce9b7ebf7be7d95fe9e2056bd5ce309ceb83b32f4e00e21ed","typeString":"literal_string \"43\""},"value":"43"},"visibility":"public"},{"constant":true,"functionSelector":"2926c971","id":14680,"mutability":"constant","name":"INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET","nameLocation":"5086:42:90","nodeType":"VariableDeclaration","scope":14819,"src":"5063:72:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14678,"name":"string","nodeType":"ElementaryTypeName","src":"5063:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3434","id":14679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5131:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_2e9b7c94e032d8b3b8b30bd825717a5ac74958b53e7c37a892a4fd7dc56e4975","typeString":"literal_string \"44\""},"value":"44"},"visibility":"public"},{"constant":true,"functionSelector":"952633c5","id":14683,"mutability":"constant","name":"HEALTH_FACTOR_NOT_BELOW_THRESHOLD","nameLocation":"5215:33:90","nodeType":"VariableDeclaration","scope":14819,"src":"5192:63:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14681,"name":"string","nodeType":"ElementaryTypeName","src":"5192:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3435","id":14682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5251:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc1431a2586c1e11fb75c87e5ee58e4204126a9fdde07075c91770f50276cbb0","typeString":"literal_string \"45\""},"value":"45"},"visibility":"public"},{"constant":true,"functionSelector":"895f7dc8","id":14686,"mutability":"constant","name":"COLLATERAL_CANNOT_BE_LIQUIDATED","nameLocation":"5328:31:90","nodeType":"VariableDeclaration","scope":14819,"src":"5305:61:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14684,"name":"string","nodeType":"ElementaryTypeName","src":"5305:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3436","id":14685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5362:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_c47ece0ffae697632ce145a7086cbcf260f7fa60876ff2606761ea2b7581ee76","typeString":"literal_string \"46\""},"value":"46"},"visibility":"public"},{"constant":true,"functionSelector":"22a73446","id":14689,"mutability":"constant","name":"SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER","nameLocation":"5441:39:90","nodeType":"VariableDeclaration","scope":14819,"src":"5418:69:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14687,"name":"string","nodeType":"ElementaryTypeName","src":"5418:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3437","id":14688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5483:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_eb09910a03c892999c305d4a86a46fa82693119d981eef22c8d043b31f9e8a31","typeString":"literal_string \"47\""},"value":"47"},"visibility":"public"},{"constant":true,"functionSelector":"73dea5e3","id":14692,"mutability":"constant","name":"INCONSISTENT_FLASHLOAN_PARAMS","nameLocation":"5562:29:90","nodeType":"VariableDeclaration","scope":14819,"src":"5539:59:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14690,"name":"string","nodeType":"ElementaryTypeName","src":"5539:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3439","id":14691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5594:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_59c0d2b7af0a8e6d3d8e710a078764bd67b7223777026c424cdb4f599824bb79","typeString":"literal_string \"49\""},"value":"49"},"visibility":"public"},{"constant":true,"functionSelector":"2eed17e8","id":14695,"mutability":"constant","name":"BORROW_CAP_EXCEEDED","nameLocation":"5664:19:90","nodeType":"VariableDeclaration","scope":14819,"src":"5641:49:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14693,"name":"string","nodeType":"ElementaryTypeName","src":"5641:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3530","id":14694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5686:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_215d56ac8bbcf4ec574772ebea743ba30ac9d1c5e1b1ff899e5de1045f5df803","typeString":"literal_string \"50\""},"value":"50"},"visibility":"public"},{"constant":true,"functionSelector":"b0510054","id":14698,"mutability":"constant","name":"SUPPLY_CAP_EXCEEDED","nameLocation":"5745:19:90","nodeType":"VariableDeclaration","scope":14819,"src":"5722:49:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14696,"name":"string","nodeType":"ElementaryTypeName","src":"5722:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3531","id":14697,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5767:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_f928ede1c39c5595ff22fe845412ee05a93eeaa584f8ef0c46b5eeb14cb99ec8","typeString":"literal_string \"51\""},"value":"51"},"visibility":"public"},{"constant":true,"functionSelector":"6b3f7cc7","id":14701,"mutability":"constant","name":"UNBACKED_MINT_CAP_EXCEEDED","nameLocation":"5826:26:90","nodeType":"VariableDeclaration","scope":14819,"src":"5803:56:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14699,"name":"string","nodeType":"ElementaryTypeName","src":"5803:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3532","id":14700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5855:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_cd41b8bf8f20f7ad95d96d948a315af225b219053fc98a80aee13063b692b681","typeString":"literal_string \"52\""},"value":"52"},"visibility":"public"},{"constant":true,"functionSelector":"65a83bab","id":14704,"mutability":"constant","name":"DEBT_CEILING_EXCEEDED","nameLocation":"5921:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"5898:51:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14702,"name":"string","nodeType":"ElementaryTypeName","src":"5898:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3533","id":14703,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5945:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_bbd48b257be1b8216d144ef9be5734f8d11697959c9e0f7768bec89db74a63a3","typeString":"literal_string \"53\""},"value":"53"},"visibility":"public"},{"constant":true,"functionSelector":"94f9fd8a","id":14707,"mutability":"constant","name":"UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO","nameLocation":"6006:36:90","nodeType":"VariableDeclaration","scope":14819,"src":"5983:66:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14705,"name":"string","nodeType":"ElementaryTypeName","src":"5983:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3534","id":14706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6045:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_006b3e710f3089a74ecb6b0f5948e5ff07a3db6ba4da475d2be17624ba96b95b","typeString":"literal_string \"54\""},"value":"54"},"visibility":"public"},{"constant":true,"functionSelector":"65e7ef4c","id":14710,"mutability":"constant","name":"STABLE_DEBT_NOT_ZERO","nameLocation":"6160:20:90","nodeType":"VariableDeclaration","scope":14819,"src":"6137:50:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14708,"name":"string","nodeType":"ElementaryTypeName","src":"6137:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3535","id":14709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6183:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_6590fa52fa76f967656340b874bc9ca09733c2fddea9886210ebcbbceee04b35","typeString":"literal_string \"55\""},"value":"55"},"visibility":"public"},{"constant":true,"functionSelector":"f10727db","id":14713,"mutability":"constant","name":"VARIABLE_DEBT_SUPPLY_NOT_ZERO","nameLocation":"6250:29:90","nodeType":"VariableDeclaration","scope":14819,"src":"6227:59:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14711,"name":"string","nodeType":"ElementaryTypeName","src":"6227:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3536","id":14712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6282:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_32da71dbd53bc029835bc5ecdd3e688035cc92bb61b1811d1685e67ba974e19f","typeString":"literal_string \"56\""},"value":"56"},"visibility":"public"},{"constant":true,"functionSelector":"b87041c2","id":14716,"mutability":"constant","name":"LTV_VALIDATION_FAILED","nameLocation":"6351:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"6328:51:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14714,"name":"string","nodeType":"ElementaryTypeName","src":"6328:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3537","id":14715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6375:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_e921da22f871c25c63f06c1365385cbb26397f64f79055cdbab32187a9377d16","typeString":"literal_string \"57\""},"value":"57"},"visibility":"public"},{"constant":true,"functionSelector":"8f7722b2","id":14719,"mutability":"constant","name":"INCONSISTENT_EMODE_CATEGORY","nameLocation":"6433:27:90","nodeType":"VariableDeclaration","scope":14819,"src":"6410:57:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14717,"name":"string","nodeType":"ElementaryTypeName","src":"6410:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3538","id":14718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6463:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_59d26ca75eb04b47ab1bca5d789d02e4d0cf9ff8cb49c9041caeeeab4eccafbf","typeString":"literal_string \"58\""},"value":"58"},"visibility":"public"},{"constant":true,"functionSelector":"c8638082","id":14722,"mutability":"constant","name":"PRICE_ORACLE_SENTINEL_CHECK_FAILED","nameLocation":"6527:34:90","nodeType":"VariableDeclaration","scope":14819,"src":"6504:64:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14720,"name":"string","nodeType":"ElementaryTypeName","src":"6504:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3539","id":14721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6564:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_dec29173c70f4e70086d64e09cb72b415f3d6a1843817cff62483903f0e12f62","typeString":"literal_string \"59\""},"value":"59"},"visibility":"public"},{"constant":true,"functionSelector":"8596aad5","id":14725,"mutability":"constant","name":"ASSET_NOT_BORROWABLE_IN_ISOLATION","nameLocation":"6640:33:90","nodeType":"VariableDeclaration","scope":14819,"src":"6617:63:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14723,"name":"string","nodeType":"ElementaryTypeName","src":"6617:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3630","id":14724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6676:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_7446b42d7fe1689ec32fc1ca65129d9f21f1979742315d34500a6886f6986bea","typeString":"literal_string \"60\""},"value":"60"},"visibility":"public"},{"constant":true,"functionSelector":"d9adda85","id":14728,"mutability":"constant","name":"RESERVE_ALREADY_INITIALIZED","nameLocation":"6754:27:90","nodeType":"VariableDeclaration","scope":14819,"src":"6731:57:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14726,"name":"string","nodeType":"ElementaryTypeName","src":"6731:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3631","id":14727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6784:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ae62207e7adee0b793bf869601474e77943fa4d9e3e0420f34d788e59bc19bd","typeString":"literal_string \"61\""},"value":"61"},"visibility":"public"},{"constant":true,"functionSelector":"480702ae","id":14731,"mutability":"constant","name":"USER_IN_ISOLATION_MODE_OR_LTV_ZERO","nameLocation":"6857:34:90","nodeType":"VariableDeclaration","scope":14819,"src":"6834:64:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14729,"name":"string","nodeType":"ElementaryTypeName","src":"6834:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3632","id":14730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6894:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_d9670a00d025e59e1bd58d53874bea4ab34fea782716e2c168e89a3c8452d3bb","typeString":"literal_string \"62\""},"value":"62"},"visibility":"public"},{"constant":true,"functionSelector":"99ce53f3","id":14734,"mutability":"constant","name":"INVALID_LTV","nameLocation":"6971:11:90","nodeType":"VariableDeclaration","scope":14819,"src":"6948:41:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14732,"name":"string","nodeType":"ElementaryTypeName","src":"6948:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3633","id":14733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6985:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_4569971f3d79dc8da7f8a6820be6cb8dc4a52bb0df6599b2aae7182111b63cd5","typeString":"literal_string \"63\""},"value":"63"},"visibility":"public"},{"constant":true,"functionSelector":"dd1dd95f","id":14737,"mutability":"constant","name":"INVALID_LIQ_THRESHOLD","nameLocation":"7059:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"7036:51:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14735,"name":"string","nodeType":"ElementaryTypeName","src":"7036:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3634","id":14736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7083:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_646d998f946f968f0675fd4e3cb527e1222094ea0d9cc1fd615146a8fe29802e","typeString":"literal_string \"64\""},"value":"64"},"visibility":"public"},{"constant":true,"functionSelector":"9527e9d9","id":14740,"mutability":"constant","name":"INVALID_LIQ_BONUS","nameLocation":"7173:17:90","nodeType":"VariableDeclaration","scope":14819,"src":"7150:47:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14738,"name":"string","nodeType":"ElementaryTypeName","src":"7150:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3635","id":14739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7193:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_606503ebd6bdca7290248af82fd5a09ca0489398da9f242244210336ae6ece9f","typeString":"literal_string \"65\""},"value":"65"},"visibility":"public"},{"constant":true,"functionSelector":"fa163a83","id":14743,"mutability":"constant","name":"INVALID_DECIMALS","nameLocation":"7279:16:90","nodeType":"VariableDeclaration","scope":14819,"src":"7256:46:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14741,"name":"string","nodeType":"ElementaryTypeName","src":"7256:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3636","id":14742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7298:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_35bb2e240092263378f77ea1e9c278099a33b604c4c4e26d13ea227e8bb74470","typeString":"literal_string \"66\""},"value":"66"},"visibility":"public"},{"constant":true,"functionSelector":"a4868dca","id":14746,"mutability":"constant","name":"INVALID_RESERVE_FACTOR","nameLocation":"7400:22:90","nodeType":"VariableDeclaration","scope":14819,"src":"7377:52:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14744,"name":"string","nodeType":"ElementaryTypeName","src":"7377:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3637","id":14745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7425:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_eafa31dc210956fc0884ec5660eba9405197797219cbbda41b6aaf7118c651d8","typeString":"literal_string \"67\""},"value":"67"},"visibility":"public"},{"constant":true,"functionSelector":"d6f9fcde","id":14749,"mutability":"constant","name":"INVALID_BORROW_CAP","nameLocation":"7510:18:90","nodeType":"VariableDeclaration","scope":14819,"src":"7487:48:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14747,"name":"string","nodeType":"ElementaryTypeName","src":"7487:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3638","id":14748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7531:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc143a676b82d5e07b2c9d57717b403ab3c58caa273a42cdb95b15980141a86c","typeString":"literal_string \"68\""},"value":"68"},"visibility":"public"},{"constant":true,"functionSelector":"26bbd053","id":14752,"mutability":"constant","name":"INVALID_SUPPLY_CAP","nameLocation":"7602:18:90","nodeType":"VariableDeclaration","scope":14819,"src":"7579:48:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14750,"name":"string","nodeType":"ElementaryTypeName","src":"7579:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3639","id":14751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7623:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_db37925934a3d3177db64e11f5e0156ceb8a756fee58ded16e549afa607ddb1d","typeString":"literal_string \"69\""},"value":"69"},"visibility":"public"},{"constant":true,"functionSelector":"8eda46bd","id":14755,"mutability":"constant","name":"INVALID_LIQUIDATION_PROTOCOL_FEE","nameLocation":"7694:32:90","nodeType":"VariableDeclaration","scope":14819,"src":"7671:62:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14753,"name":"string","nodeType":"ElementaryTypeName","src":"7671:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3730","id":14754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7729:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_cdbc23227c72e0a3f4683bdbccfcbed38047ca1a70d48b78c210dc5393029019","typeString":"literal_string \"70\""},"value":"70"},"visibility":"public"},{"constant":true,"functionSelector":"a8c97853","id":14758,"mutability":"constant","name":"INVALID_EMODE_CATEGORY","nameLocation":"7814:22:90","nodeType":"VariableDeclaration","scope":14819,"src":"7791:52:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14756,"name":"string","nodeType":"ElementaryTypeName","src":"7791:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3731","id":14757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7839:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_2cc0d3dcb20652cd8f106aee76b6a7391771a130885634c0eb2bbe3cde796691","typeString":"literal_string \"71\""},"value":"71"},"visibility":"public"},{"constant":true,"functionSelector":"47ba93d8","id":14761,"mutability":"constant","name":"INVALID_UNBACKED_MINT_CAP","nameLocation":"7914:25:90","nodeType":"VariableDeclaration","scope":14819,"src":"7891:55:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14759,"name":"string","nodeType":"ElementaryTypeName","src":"7891:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3732","id":14760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7942:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_8fd0324b6a5df169e0aa0c7938ef0034d0e971a998f91b36eba211882d3617b1","typeString":"literal_string \"72\""},"value":"72"},"visibility":"public"},{"constant":true,"functionSelector":"dcc56db6","id":14764,"mutability":"constant","name":"INVALID_DEBT_CEILING","nameLocation":"8020:20:90","nodeType":"VariableDeclaration","scope":14819,"src":"7997:50:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14762,"name":"string","nodeType":"ElementaryTypeName","src":"7997:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3733","id":14763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8043:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_b2219b801710730437d0358146c829b62297a059eceaa0b40b27aea2daecf595","typeString":"literal_string \"73\""},"value":"73"},"visibility":"public"},{"constant":true,"functionSelector":"d1cd8b1d","id":14767,"mutability":"constant","name":"INVALID_RESERVE_INDEX","nameLocation":"8115:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"8092:51:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14765,"name":"string","nodeType":"ElementaryTypeName","src":"8092:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3734","id":14766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8139:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_57014f1e5f1d53e43fa40624186159531d6372d1ab8f40ec7882845ca66de31d","typeString":"literal_string \"74\""},"value":"74"},"visibility":"public"},{"constant":true,"functionSelector":"fd1828ff","id":14770,"mutability":"constant","name":"ACL_ADMIN_CANNOT_BE_ZERO","nameLocation":"8197:24:90","nodeType":"VariableDeclaration","scope":14819,"src":"8174:54:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14768,"name":"string","nodeType":"ElementaryTypeName","src":"8174:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3735","id":14769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8224:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_6dbb33232cde86c8a04f90a8bed9fc1c5ef520188a14538d96eb100d69bc2a94","typeString":"literal_string \"75\""},"value":"75"},"visibility":"public"},{"constant":true,"functionSelector":"bad8308c","id":14773,"mutability":"constant","name":"INCONSISTENT_PARAMS_LENGTH","nameLocation":"8304:26:90","nodeType":"VariableDeclaration","scope":14819,"src":"8281:56:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14771,"name":"string","nodeType":"ElementaryTypeName","src":"8281:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3736","id":14772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8333:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_f1ae7da53f98170be52cc9330214a82f7ba06ee306297b4e1fb86fb21c611aa6","typeString":"literal_string \"76\""},"value":"76"},"visibility":"public"},{"constant":true,"functionSelector":"d14bb17a","id":14776,"mutability":"constant","name":"ZERO_ADDRESS_NOT_VALID","nameLocation":"8422:22:90","nodeType":"VariableDeclaration","scope":14819,"src":"8399:52:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14774,"name":"string","nodeType":"ElementaryTypeName","src":"8399:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3737","id":14775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8447:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_7fe86492ed9171487feeb17b76d71244c5fb104d897816bb03a924e5871f3fa3","typeString":"literal_string \"77\""},"value":"77"},"visibility":"public"},{"constant":true,"functionSelector":"c08a1146","id":14779,"mutability":"constant","name":"INVALID_EXPIRATION","nameLocation":"8506:18:90","nodeType":"VariableDeclaration","scope":14819,"src":"8483:48:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14777,"name":"string","nodeType":"ElementaryTypeName","src":"8483:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3738","id":14778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8527:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_63867b8d5e748cf93e24f7b381d92337d037805bfc271d6d67e0e86772662677","typeString":"literal_string \"78\""},"value":"78"},"visibility":"public"},{"constant":true,"functionSelector":"a3402a38","id":14782,"mutability":"constant","name":"INVALID_SIGNATURE","nameLocation":"8582:17:90","nodeType":"VariableDeclaration","scope":14819,"src":"8559:47:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14780,"name":"string","nodeType":"ElementaryTypeName","src":"8559:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3739","id":14781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8602:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_2bf418e3ea3cce1b306c1bbf566df40bf3703cc73b456ccd399088d784bc76ee","typeString":"literal_string \"79\""},"value":"79"},"visibility":"public"},{"constant":true,"functionSelector":"8b8b98d7","id":14785,"mutability":"constant","name":"OPERATION_NOT_SUPPORTED","nameLocation":"8656:23:90","nodeType":"VariableDeclaration","scope":14819,"src":"8633:53:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14783,"name":"string","nodeType":"ElementaryTypeName","src":"8633:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3830","id":14784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8682:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_742ccb3c5ad7b0e2030ad7fa03711e32b9f4236452343c6e16a6cf67d464d149","typeString":"literal_string \"80\""},"value":"80"},"visibility":"public"},{"constant":true,"functionSelector":"e4dd8b74","id":14788,"mutability":"constant","name":"DEBT_CEILING_NOT_ZERO","nameLocation":"8742:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"8719:51:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14786,"name":"string","nodeType":"ElementaryTypeName","src":"8719:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3831","id":14787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8766:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_e2ecacab2e0418b841e7d0b206f5c40e0e0489353c5747dd1cc77d7f5a66829f","typeString":"literal_string \"81\""},"value":"81"},"visibility":"public"},{"constant":true,"functionSelector":"cd23367c","id":14791,"mutability":"constant","name":"ASSET_NOT_LISTED","nameLocation":"8827:16:90","nodeType":"VariableDeclaration","scope":14819,"src":"8804:46:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14789,"name":"string","nodeType":"ElementaryTypeName","src":"8804:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3832","id":14790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8846:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_5392f7a671cdf89487ccf8e3646ea8f7570009490584962db6fa064c6e4ad499","typeString":"literal_string \"82\""},"value":"82"},"visibility":"public"},{"constant":true,"functionSelector":"4e3aed37","id":14794,"mutability":"constant","name":"INVALID_OPTIMAL_USAGE_RATIO","nameLocation":"8902:27:90","nodeType":"VariableDeclaration","scope":14819,"src":"8879:57:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14792,"name":"string","nodeType":"ElementaryTypeName","src":"8879:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3833","id":14793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8932:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_043ab7193d962ca510e48770a5a13714f4684febe0e5affcfd1eb73cfed1f218","typeString":"literal_string \"83\""},"value":"83"},"visibility":"public"},{"constant":true,"functionSelector":"c899301a","id":14797,"mutability":"constant","name":"INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"8996:42:90","nodeType":"VariableDeclaration","scope":14819,"src":"8973:72:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14795,"name":"string","nodeType":"ElementaryTypeName","src":"8973:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3834","id":14796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9041:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_ab20a672b3c5d5f71a8da6c43d4bf580ed35b623d6b0366b1de9df7e12238080","typeString":"literal_string \"84\""},"value":"84"},"visibility":"public"},{"constant":true,"functionSelector":"ab883ca0","id":14800,"mutability":"constant","name":"UNDERLYING_CANNOT_BE_RESCUED","nameLocation":"9120:28:90","nodeType":"VariableDeclaration","scope":14819,"src":"9097:58:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14798,"name":"string","nodeType":"ElementaryTypeName","src":"9097:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3835","id":14799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9151:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_17157e479612de6088d957c64aca858964825e74089b3c7dacc26409e6d53000","typeString":"literal_string \"85\""},"value":"85"},"visibility":"public"},{"constant":true,"functionSelector":"14dcfbbc","id":14803,"mutability":"constant","name":"ADDRESSES_PROVIDER_ALREADY_ADDED","nameLocation":"9226:32:90","nodeType":"VariableDeclaration","scope":14819,"src":"9203:62:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14801,"name":"string","nodeType":"ElementaryTypeName","src":"9203:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3836","id":14802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9261:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc193713febc75d3d9bd2f9ce113f403ff19633f15c8cdbcf79756ae23e77f9a","typeString":"literal_string \"86\""},"value":"86"},"visibility":"public"},{"constant":true,"functionSelector":"1abbb001","id":14806,"mutability":"constant","name":"POOL_ADDRESSES_DO_NOT_MATCH","nameLocation":"9344:27:90","nodeType":"VariableDeclaration","scope":14819,"src":"9321:57:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14804,"name":"string","nodeType":"ElementaryTypeName","src":"9321:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3837","id":14805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9374:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_845e9c18ca148a712f01bf14c91c3e2fe352eabe86c44817e3f33b63f585a343","typeString":"literal_string \"87\""},"value":"87"},"visibility":"public"},{"constant":true,"functionSelector":"198d6a6b","id":14809,"mutability":"constant","name":"STABLE_BORROWING_ENABLED","nameLocation":"9516:24:90","nodeType":"VariableDeclaration","scope":14819,"src":"9493:54:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14807,"name":"string","nodeType":"ElementaryTypeName","src":"9493:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3838","id":14808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9543:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_a3bcf8af6929b66d6da7ee355c48fd1cf926fd090bc75a4dcbf7bd8e365645e3","typeString":"literal_string \"88\""},"value":"88"},"visibility":"public"},{"constant":true,"functionSelector":"de24948c","id":14812,"mutability":"constant","name":"SILOED_BORROWING_VIOLATION","nameLocation":"9607:26:90","nodeType":"VariableDeclaration","scope":14819,"src":"9584:56:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14810,"name":"string","nodeType":"ElementaryTypeName","src":"9584:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3839","id":14811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9636:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ad0f966e4dd8863f27c0e6ee7d684c0c8f4319efed210fe15662a0d29bcd615","typeString":"literal_string \"89\""},"value":"89"},"visibility":"public"},{"constant":true,"functionSelector":"e981483a","id":14815,"mutability":"constant","name":"RESERVE_DEBT_NOT_ZERO","nameLocation":"9736:21:90","nodeType":"VariableDeclaration","scope":14819,"src":"9713:51:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14813,"name":"string","nodeType":"ElementaryTypeName","src":"9713:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3930","id":14814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9760:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_04e57633024368235fc5219bfb9802814291d3a7b9a68d0aeb7bd3d297ac474e","typeString":"literal_string \"90\""},"value":"90"},"visibility":"public"},{"constant":true,"functionSelector":"8aa3ca4c","id":14818,"mutability":"constant","name":"FLASHLOAN_DISABLED","nameLocation":"9838:18:90","nodeType":"VariableDeclaration","scope":14819,"src":"9815:48:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14816,"name":"string","nodeType":"ElementaryTypeName","src":"9815:6:90","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3931","id":14817,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9859:4:90","typeDescriptions":{"typeIdentifier":"t_stringliteral_4393e7114eb674248a1480712950c28cb06e118e040859a2eafa3ca8a6dfbd69","typeString":"literal_string \"91\""},"value":"91"},"visibility":"public"}],"scope":14820,"src":"205:9704:90","usedErrors":[]}],"src":"37:9873:90"},"id":90},"contracts/protocol/libraries/helpers/Helpers.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/helpers/Helpers.sol","exportedSymbols":{"DataTypes":[24227],"Helpers":[14857],"IERC20":[1442]},"id":14858,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":14821,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:91"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":14823,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14858,"sourceUnit":1443,"src":"62:79:91","symbolAliases":[{"foreign":{"id":14822,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":14825,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14858,"sourceUnit":24228,"src":"142:49:91","symbolAliases":[{"foreign":{"id":14824,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:9:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Helpers","contractDependencies":[],"contractKind":"library","documentation":{"id":14826,"nodeType":"StructuredDocumentation","src":"193:49:91","text":" @title Helpers library\n @author Aave"},"fullyImplemented":true,"id":14857,"linearizedBaseContracts":[14857],"name":"Helpers","nameLocation":"251:7:91","nodeType":"ContractDefinition","nodes":[{"body":{"id":14855,"nodeType":"Block","src":"651:160:91","statements":[{"expression":{"components":[{"arguments":[{"id":14844,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14829,"src":"726:4:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":14840,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14832,"src":"679:12:91","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":14841,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"679:35:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14839,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"672:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":14842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"672:43:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":14843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"672:53:91","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"672:59:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":14851,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14829,"src":"795:4:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":14847,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14832,"src":"746:12:91","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":14848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"746:37:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14846,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"739:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":14849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"739:45:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":14850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"739:55:91","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"739:61:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14853,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"664:142:91","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":14838,"id":14854,"nodeType":"Return","src":"657:149:91"}]},"documentation":{"id":14827,"nodeType":"StructuredDocumentation","src":"263:246:91","text":" @notice Fetches the user current stable and variable debt balances\n @param user The user address\n @param reserveCache The reserve cache data object\n @return The stable debt balance\n @return The variable debt balance"},"id":14856,"implemented":true,"kind":"function","modifiers":[],"name":"getUserCurrentDebt","nameLocation":"521:18:91","nodeType":"FunctionDefinition","parameters":{"id":14833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14829,"mutability":"mutable","name":"user","nameLocation":"553:4:91","nodeType":"VariableDeclaration","scope":14856,"src":"545:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14828,"name":"address","nodeType":"ElementaryTypeName","src":"545:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14832,"mutability":"mutable","name":"reserveCache","nameLocation":"593:12:91","nodeType":"VariableDeclaration","scope":14856,"src":"563:42:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":14831,"nodeType":"UserDefinedTypeName","pathNode":{"id":14830,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"563:22:91"},"referencedDeclaration":23973,"src":"563:22:91","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"539:70:91"},"returnParameters":{"id":14838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14856,"src":"633:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14834,"name":"uint256","nodeType":"ElementaryTypeName","src":"633:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14837,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14856,"src":"642:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14836,"name":"uint256","nodeType":"ElementaryTypeName","src":"642:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"632:18:91"},"scope":14857,"src":"512:299:91","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":14858,"src":"243:570:91","usedErrors":[]}],"src":"37:777:91"},"id":91},"contracts/protocol/libraries/logic/BorrowLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/BorrowLogic.sol","exportedSymbols":{"BorrowLogic":[15720],"DataTypes":[24227],"GPv2SafeERC20":[118],"Helpers":[14857],"IAToken":[3986],"IERC20":[1442],"IStableDebtToken":[6340],"IVariableDebtToken":[6386],"IsolationModeLogic":[18572],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"SafeCast":[1966],"UserConfiguration":[14545],"ValidationLogic":[23502]},"id":15721,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":14859,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:92"},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":14861,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":119,"src":"63:87:92","symbolAliases":[{"foreign":{"id":14860,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":14863,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":1967,"src":"151:83:92","symbolAliases":[{"foreign":{"id":14862,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"159:8:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":14865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":1443,"src":"235:79:92","symbolAliases":[{"foreign":{"id":14864,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"243:6:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IStableDebtToken.sol","file":"../../../interfaces/IStableDebtToken.sol","id":14867,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":6341,"src":"315:74:92","symbolAliases":[{"foreign":{"id":14866,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"323:16:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IVariableDebtToken.sol","file":"../../../interfaces/IVariableDebtToken.sol","id":14869,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":6387,"src":"390:78:92","symbolAliases":[{"foreign":{"id":14868,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"398:18:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":14871,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":3987,"src":"469:56:92","symbolAliases":[{"foreign":{"id":14870,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"477:7:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":14873,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":14546,"src":"526:73:92","symbolAliases":[{"foreign":{"id":14872,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"534:17:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":14875,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":14035,"src":"600:79:92","symbolAliases":[{"foreign":{"id":14874,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"608:20:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Helpers.sol","file":"../helpers/Helpers.sol","id":14877,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":14858,"src":"680:47:92","symbolAliases":[{"foreign":{"id":14876,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"src":"688:7:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":14879,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":24228,"src":"728:49:92","symbolAliases":[{"foreign":{"id":14878,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"736:9:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":14881,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":23503,"src":"778:54:92","symbolAliases":[{"foreign":{"id":14880,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"786:15:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":14883,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":20972,"src":"833:48:92","symbolAliases":[{"foreign":{"id":14882,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"841:12:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/IsolationModeLogic.sol","file":"./IsolationModeLogic.sol","id":14885,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15721,"sourceUnit":18573,"src":"882:60:92","symbolAliases":[{"foreign":{"id":14884,"name":"IsolationModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"890:18:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BorrowLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":14886,"nodeType":"StructuredDocumentation","src":"944:131:92","text":" @title BorrowLogic library\n @author Aave\n @notice Implements the base logic for all the actions related to borrowing"},"fullyImplemented":true,"id":15720,"linearizedBaseContracts":[15720],"name":"BorrowLogic","nameLocation":"1084:11:92","nodeType":"ContractDefinition","nodes":[{"id":14890,"libraryName":{"id":14887,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1106:12:92"},"nodeType":"UsingForDirective","src":"1100:46:92","typeName":{"id":14889,"nodeType":"UserDefinedTypeName","pathNode":{"id":14888,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"1123:22:92"},"referencedDeclaration":23973,"src":"1123:22:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":14894,"libraryName":{"id":14891,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1155:12:92"},"nodeType":"UsingForDirective","src":"1149:45:92","typeName":{"id":14893,"nodeType":"UserDefinedTypeName","pathNode":{"id":14892,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1172:21:92"},"referencedDeclaration":23909,"src":"1172:21:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":14898,"libraryName":{"id":14895,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1203:13:92"},"nodeType":"UsingForDirective","src":"1197:31:92","typeName":{"id":14897,"nodeType":"UserDefinedTypeName","pathNode":{"id":14896,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1221:6:92"},"referencedDeclaration":1442,"src":"1221:6:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":14902,"libraryName":{"id":14899,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"1237:17:92"},"nodeType":"UsingForDirective","src":"1231:59:92","typeName":{"id":14901,"nodeType":"UserDefinedTypeName","pathNode":{"id":14900,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"1259:30:92"},"referencedDeclaration":23916,"src":"1259:30:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":14906,"libraryName":{"id":14903,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1299:20:92"},"nodeType":"UsingForDirective","src":"1293:65:92","typeName":{"id":14905,"nodeType":"UserDefinedTypeName","pathNode":{"id":14904,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1324:33:92"},"referencedDeclaration":23912,"src":"1324:33:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":14909,"libraryName":{"id":14907,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1367:8:92"},"nodeType":"UsingForDirective","src":"1361:27:92","typeName":{"id":14908,"name":"uint256","nodeType":"ElementaryTypeName","src":"1380:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":14926,"name":"Borrow","nameLocation":"1432:6:92","nodeType":"EventDefinition","parameters":{"id":14925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14911,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1460:7:92","nodeType":"VariableDeclaration","scope":14926,"src":"1444:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14910,"name":"address","nodeType":"ElementaryTypeName","src":"1444:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14913,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"1481:4:92","nodeType":"VariableDeclaration","scope":14926,"src":"1473:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14912,"name":"address","nodeType":"ElementaryTypeName","src":"1473:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14915,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1507:10:92","nodeType":"VariableDeclaration","scope":14926,"src":"1491:26:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14914,"name":"address","nodeType":"ElementaryTypeName","src":"1491:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14917,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1531:6:92","nodeType":"VariableDeclaration","scope":14926,"src":"1523:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14916,"name":"uint256","nodeType":"ElementaryTypeName","src":"1523:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14920,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"1570:16:92","nodeType":"VariableDeclaration","scope":14926,"src":"1543:43:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":14919,"nodeType":"UserDefinedTypeName","pathNode":{"id":14918,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"1543:26:92"},"referencedDeclaration":23931,"src":"1543:26:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":14922,"indexed":false,"mutability":"mutable","name":"borrowRate","nameLocation":"1600:10:92","nodeType":"VariableDeclaration","scope":14926,"src":"1592:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14921,"name":"uint256","nodeType":"ElementaryTypeName","src":"1592:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14924,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1631:12:92","nodeType":"VariableDeclaration","scope":14926,"src":"1616:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":14923,"name":"uint16","nodeType":"ElementaryTypeName","src":"1616:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1438:209:92"},"src":"1426:222:92"},{"anonymous":false,"id":14938,"name":"Repay","nameLocation":"1657:5:92","nodeType":"EventDefinition","parameters":{"id":14937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14928,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1684:7:92","nodeType":"VariableDeclaration","scope":14938,"src":"1668:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14927,"name":"address","nodeType":"ElementaryTypeName","src":"1668:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14930,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1713:4:92","nodeType":"VariableDeclaration","scope":14938,"src":"1697:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14929,"name":"address","nodeType":"ElementaryTypeName","src":"1697:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14932,"indexed":true,"mutability":"mutable","name":"repayer","nameLocation":"1739:7:92","nodeType":"VariableDeclaration","scope":14938,"src":"1723:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14931,"name":"address","nodeType":"ElementaryTypeName","src":"1723:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14934,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1760:6:92","nodeType":"VariableDeclaration","scope":14938,"src":"1752:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14933,"name":"uint256","nodeType":"ElementaryTypeName","src":"1752:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14936,"indexed":false,"mutability":"mutable","name":"useATokens","nameLocation":"1777:10:92","nodeType":"VariableDeclaration","scope":14938,"src":"1772:15:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14935,"name":"bool","nodeType":"ElementaryTypeName","src":"1772:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1662:129:92"},"src":"1651:141:92"},{"anonymous":false,"id":14944,"name":"RebalanceStableBorrowRate","nameLocation":"1801:25:92","nodeType":"EventDefinition","parameters":{"id":14943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14940,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1843:7:92","nodeType":"VariableDeclaration","scope":14944,"src":"1827:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14939,"name":"address","nodeType":"ElementaryTypeName","src":"1827:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14942,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1868:4:92","nodeType":"VariableDeclaration","scope":14944,"src":"1852:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14941,"name":"address","nodeType":"ElementaryTypeName","src":"1852:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1826:47:92"},"src":"1795:79:92"},{"anonymous":false,"id":14953,"name":"SwapBorrowRateMode","nameLocation":"1883:18:92","nodeType":"EventDefinition","parameters":{"id":14952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14946,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1923:7:92","nodeType":"VariableDeclaration","scope":14953,"src":"1907:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14945,"name":"address","nodeType":"ElementaryTypeName","src":"1907:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14948,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1952:4:92","nodeType":"VariableDeclaration","scope":14953,"src":"1936:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14947,"name":"address","nodeType":"ElementaryTypeName","src":"1936:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14951,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"1989:16:92","nodeType":"VariableDeclaration","scope":14953,"src":"1962:43:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":14950,"nodeType":"UserDefinedTypeName","pathNode":{"id":14949,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"1962:26:92"},"referencedDeclaration":23931,"src":"1962:26:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"}],"src":"1901:108:92"},"src":"1877:133:92"},{"anonymous":false,"id":14959,"name":"IsolationModeTotalDebtUpdated","nameLocation":"2019:29:92","nodeType":"EventDefinition","parameters":{"id":14958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14955,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2065:5:92","nodeType":"VariableDeclaration","scope":14959,"src":"2049:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14954,"name":"address","nodeType":"ElementaryTypeName","src":"2049:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14957,"indexed":false,"mutability":"mutable","name":"totalDebt","nameLocation":"2080:9:92","nodeType":"VariableDeclaration","scope":14959,"src":"2072:17:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14956,"name":"uint256","nodeType":"ElementaryTypeName","src":"2072:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2048:42:92"},"src":"2013:78:92"},{"body":{"id":15215,"nodeType":"Block","src":"3112:3052:92","statements":[{"assignments":[14987],"declarations":[{"constant":false,"id":14987,"mutability":"mutable","name":"reserve","nameLocation":"3148:7:92","nodeType":"VariableDeclaration","scope":15215,"src":"3118:37:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":14986,"nodeType":"UserDefinedTypeName","pathNode":{"id":14985,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"3118:21:92"},"referencedDeclaration":23909,"src":"3118:21:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":14992,"initialValue":{"baseExpression":{"id":14988,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14965,"src":"3158:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":14991,"indexExpression":{"expression":{"id":14989,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3171:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":14990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24003,"src":"3171:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3158:26:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3118:66:92"},{"assignments":[14997],"declarations":[{"constant":false,"id":14997,"mutability":"mutable","name":"reserveCache","nameLocation":"3220:12:92","nodeType":"VariableDeclaration","scope":15215,"src":"3190:42:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":14996,"nodeType":"UserDefinedTypeName","pathNode":{"id":14995,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"3190:22:92"},"referencedDeclaration":23973,"src":"3190:22:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":15001,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14998,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14987,"src":"3235:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":14999,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"3235:13:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":15000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3235:15:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"3190:60:92"},{"expression":{"arguments":[{"id":15005,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"3277:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15002,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14987,"src":"3257:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"3257:19:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":15006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3257:33:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15007,"nodeType":"ExpressionStatement","src":"3257:33:92"},{"assignments":[15009,15011,15013],"declarations":[{"constant":false,"id":15009,"mutability":"mutable","name":"isolationModeActive","nameLocation":"3310:19:92","nodeType":"VariableDeclaration","scope":15215,"src":"3305:24:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15008,"name":"bool","nodeType":"ElementaryTypeName","src":"3305:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":15011,"mutability":"mutable","name":"isolationModeCollateralAddress","nameLocation":"3345:30:92","nodeType":"VariableDeclaration","scope":15215,"src":"3337:38:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15010,"name":"address","nodeType":"ElementaryTypeName","src":"3337:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15013,"mutability":"mutable","name":"isolationModeDebtCeiling","nameLocation":"3391:24:92","nodeType":"VariableDeclaration","scope":15215,"src":"3383:32:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15012,"name":"uint256","nodeType":"ElementaryTypeName","src":"3383:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15019,"initialValue":{"arguments":[{"id":15016,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14965,"src":"3457:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":15017,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14969,"src":"3471:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}],"expression":{"id":15014,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14977,"src":"3424:10:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":15015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getIsolationModeState","nodeType":"MemberAccess","referencedDeclaration":14439,"src":"3424:32:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$returns$_t_bool_$_t_address_$_t_uint256_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address)) view returns (bool,address,uint256)"}},"id":15018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3424:60:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_uint256_$","typeString":"tuple(bool,address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3297:187:92"},{"expression":{"arguments":[{"id":15023,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14965,"src":"3529:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":15024,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14969,"src":"3549:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":15025,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14974,"src":"3569:15:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"id":15028,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"3647:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":15029,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14977,"src":"3681:10:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":15030,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3708:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24003,"src":"3708:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15032,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3743:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24007,"src":"3743:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15034,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3778:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15035,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24009,"src":"3778:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15036,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3819:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15037,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24012,"src":"3819:23:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":15038,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3874:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15039,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxStableRateBorrowSizePercent","nodeType":"MemberAccess","referencedDeclaration":24018,"src":"3874:37:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15040,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3936:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15041,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24020,"src":"3936:20:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15042,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3974:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15043,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":24022,"src":"3974:13:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15044,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4016:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15045,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24024,"src":"4016:24:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":15046,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4071:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15047,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":24026,"src":"4071:26:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15048,"name":"isolationModeActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15009,"src":"4128:19:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":15049,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15011,"src":"4189:30:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15050,"name":"isolationModeDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15013,"src":"4255:24:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15026,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"3592:9:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":15027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ValidateBorrowParams","nodeType":"MemberAccess","referencedDeclaration":24182,"src":"3592:30:92","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ValidateBorrowParams_$24182_storage_ptr_$","typeString":"type(struct DataTypes.ValidateBorrowParams storage pointer)"}},"id":15051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["reserveCache","userConfig","asset","userAddress","amount","interestRateMode","maxStableLoanPercent","reservesCount","oracle","userEModeCategory","priceOracleSentinel","isolationModeActive","isolationModeCollateralAddress","isolationModeDebtCeiling"],"nodeType":"FunctionCall","src":"3592:696:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}],"expression":{"id":15020,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"3491:15:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":15022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateBorrow","nodeType":"MemberAccess","referencedDeclaration":22477,"src":"3491:30:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_ValidateBorrowParams_$24182_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ValidateBorrowParams memory) view"}},"id":15052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3491:803:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15053,"nodeType":"ExpressionStatement","src":"3491:803:92"},{"assignments":[15055],"declarations":[{"constant":false,"id":15055,"mutability":"mutable","name":"currentStableRate","nameLocation":"4309:17:92","nodeType":"VariableDeclaration","scope":15215,"src":"4301:25:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15054,"name":"uint256","nodeType":"ElementaryTypeName","src":"4301:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15057,"initialValue":{"hexValue":"30","id":15056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4329:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4301:29:92"},{"assignments":[15059],"declarations":[{"constant":false,"id":15059,"mutability":"mutable","name":"isFirstBorrowing","nameLocation":"4341:16:92","nodeType":"VariableDeclaration","scope":15215,"src":"4336:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15058,"name":"bool","nodeType":"ElementaryTypeName","src":"4336:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":15061,"initialValue":{"hexValue":"66616c7365","id":15060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4360:5:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"4336:29:92"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":15067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15062,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4376:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24012,"src":"4376:23:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":15064,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"4403:9:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":15065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"4403:26:92","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":15066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"4403:33:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"4376:60:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15115,"nodeType":"Block","src":"4808:236:92","statements":[{"expression":{"id":15113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15095,"name":"isFirstBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15059,"src":"4817:16:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":15096,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"4835:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23935,"src":"4835:35:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15098,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4816:55:92","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15104,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4953:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":24005,"src":"4953:11:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15106,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4966:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24007,"src":"4966:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15108,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4985:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24009,"src":"4985:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15110,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"5000:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"5000:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15100,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"4902:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"4902:37:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15099,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"4874:18:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6386_$","typeString":"type(contract IVariableDebtToken)"}},"id":15102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4874:73:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6386","typeString":"contract IVariableDebtToken"}},"id":15103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6367,"src":"4874:78:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256)"}},"id":15112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4874:163:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"src":"4816:221:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15114,"nodeType":"ExpressionStatement","src":"4816:221:92"}]},"id":15116,"nodeType":"IfStatement","src":"4372:672:92","trueBody":{"id":15094,"nodeType":"Block","src":"4438:364:92","statements":[{"expression":{"id":15071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15068,"name":"currentStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15055,"src":"4446:17:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":15069,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14987,"src":"4466:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23890,"src":"4466:31:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4446:51:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15072,"nodeType":"ExpressionStatement","src":"4446:51:92"},{"expression":{"id":15092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15073,"name":"isFirstBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15059,"src":"4516:16:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":15074,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"4542:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23945,"src":"4542:32:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15076,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"4584:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23943,"src":"4584:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15078,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4506:122:92","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15084,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4699:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":24005,"src":"4699:11:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15086,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4720:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15087,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24007,"src":"4720:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15088,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"4747:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24009,"src":"4747:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15090,"name":"currentStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15055,"src":"4770:17:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15080,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"4648:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"4648:35:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15079,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"4631:16:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":15082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4631:53:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":15083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6265,"src":"4631:58:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256,uint256)"}},"id":15091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4631:164:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"src":"4506:289:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15093,"nodeType":"ExpressionStatement","src":"4506:289:92"}]}},{"condition":{"id":15117,"name":"isFirstBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15059,"src":"5054:16:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15127,"nodeType":"IfStatement","src":"5050:78:92","trueBody":{"id":15126,"nodeType":"Block","src":"5072:56:92","statements":[{"expression":{"arguments":[{"expression":{"id":15121,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14987,"src":"5104:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"5104:10:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":15123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5116:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":15118,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14977,"src":"5080:10:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":15120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowing","nodeType":"MemberAccess","referencedDeclaration":14101,"src":"5080:23:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":15124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5080:41:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15125,"nodeType":"ExpressionStatement","src":"5080:41:92"}]}},{"condition":{"id":15128,"name":"isolationModeActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15009,"src":"5138:19:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15159,"nodeType":"IfStatement","src":"5134:443:92","trueBody":{"id":15158,"nodeType":"Block","src":"5159:418:92","statements":[{"assignments":[15130],"declarations":[{"constant":false,"id":15130,"mutability":"mutable","name":"nextIsolationModeTotalDebt","nameLocation":"5175:26:92","nodeType":"VariableDeclaration","scope":15158,"src":"5167:34:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15129,"name":"uint256","nodeType":"ElementaryTypeName","src":"5167:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15152,"initialValue":{"id":15151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":15131,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14965,"src":"5204:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":15133,"indexExpression":{"id":15132,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15011,"src":"5217:30:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5204:44:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":15134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":23908,"src":"5204:76:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15135,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5285:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24009,"src":"5285:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":15137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5309:2:92","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15138,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"5326:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"5326:33:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":15140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":13110,"src":"5326:45:92","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":15141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5326:47:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":15142,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"5388:20:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":15143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":12905,"src":"5388:42:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5326:104:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15145,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5325:106:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5309:122:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5285:146:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15148,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5284:148:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5284:158:92","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":15150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5284:160:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5204:240:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"5167:277:92"},{"eventCall":{"arguments":[{"id":15154,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15011,"src":"5496:30:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15155,"name":"nextIsolationModeTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15130,"src":"5536:26:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15153,"name":"IsolationModeTotalDebtUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14959,"src":"5457:29:92","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":15156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5457:113:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15157,"nodeType":"EmitStatement","src":"5452:118:92"}]}},{"expression":{"arguments":[{"id":15163,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"5618:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":15164,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5638:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15165,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24003,"src":"5638:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":15166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5658:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"condition":{"expression":{"id":15167,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5667:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15168,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"releaseUnderlying","nodeType":"MemberAccess","referencedDeclaration":24016,"src":"5667:24:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":15171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5710:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":15172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5667:44:92","trueExpression":{"expression":{"id":15169,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5694:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24009,"src":"5694:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15160,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14987,"src":"5583:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"5583:27:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":15173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5583:134:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15174,"nodeType":"ExpressionStatement","src":"5583:134:92"},{"condition":{"expression":{"id":15175,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5728:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"releaseUnderlying","nodeType":"MemberAccess","referencedDeclaration":24016,"src":"5728:24:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15189,"nodeType":"IfStatement","src":"5724:129:92","trueBody":{"id":15188,"nodeType":"Block","src":"5754:99:92","statements":[{"expression":{"arguments":[{"expression":{"id":15182,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5819:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15183,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":24005,"src":"5819:11:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15184,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5832:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24009,"src":"5832:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15178,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14997,"src":"5770:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"5770:26:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15177,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"5762:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":15180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5762:35:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":15181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferUnderlyingTo","nodeType":"MemberAccess","referencedDeclaration":3921,"src":"5762:56:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":15186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5762:84:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15187,"nodeType":"ExpressionStatement","src":"5762:84:92"}]}},{"eventCall":{"arguments":[{"expression":{"id":15191,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5878:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15192,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24003,"src":"5878:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15193,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5898:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":24005,"src":"5898:11:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15195,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5917:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24007,"src":"5917:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15197,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5942:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15198,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24009,"src":"5942:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15199,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5963:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15200,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24012,"src":"5963:23:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":15206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15201,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"5994:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24012,"src":"5994:23:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":15203,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"6021:9:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":15204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"6021:26:92","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":15205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"6021:33:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"5994:60:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":15208,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14987,"src":"6093:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23888,"src":"6093:33:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":15210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5994:132:92","trueExpression":{"id":15207,"name":"currentStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15055,"src":"6065:17:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15211,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"6134:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":15212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":24014,"src":"6134:19:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":15190,"name":"Borrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14926,"src":"5864:6:92","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_enum$_InterestRateMode_$23931_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,enum DataTypes.InterestRateMode,uint256,uint16)"}},"id":15213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5864:295:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15214,"nodeType":"EmitStatement","src":"5859:300:92"}]},"documentation":{"id":14960,"nodeType":"StructuredDocumentation","src":"2095:683:92","text":" @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\n Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\n isolated debt.\n @dev  Emits the `Borrow()` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the borrow function"},"functionSelector":"1e6473f9","id":15216,"implemented":true,"kind":"function","modifiers":[],"name":"executeBorrow","nameLocation":"2790:13:92","nodeType":"FunctionDefinition","parameters":{"id":14981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14965,"mutability":"mutable","name":"reservesData","nameLocation":"2859:12:92","nodeType":"VariableDeclaration","scope":15216,"src":"2809:62:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":14964,"keyType":{"id":14961,"name":"address","nodeType":"ElementaryTypeName","src":"2817:7:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2809:41:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":14963,"nodeType":"UserDefinedTypeName","pathNode":{"id":14962,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2828:21:92"},"referencedDeclaration":23909,"src":"2828:21:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":14969,"mutability":"mutable","name":"reservesList","nameLocation":"2913:12:92","nodeType":"VariableDeclaration","scope":15216,"src":"2877:48:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":14968,"keyType":{"id":14966,"name":"uint256","nodeType":"ElementaryTypeName","src":"2885:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2877:27:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":14967,"name":"address","nodeType":"ElementaryTypeName","src":"2896:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":14974,"mutability":"mutable","name":"eModeCategories","nameLocation":"2981:15:92","nodeType":"VariableDeclaration","scope":15216,"src":"2931:65:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":14973,"keyType":{"id":14970,"name":"uint8","nodeType":"ElementaryTypeName","src":"2939:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"2931:41:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":14972,"nodeType":"UserDefinedTypeName","pathNode":{"id":14971,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"2948:23:92"},"referencedDeclaration":23927,"src":"2948:23:92","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":14977,"mutability":"mutable","name":"userConfig","nameLocation":"3041:10:92","nodeType":"VariableDeclaration","scope":15216,"src":"3002:49:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14976,"nodeType":"UserDefinedTypeName","pathNode":{"id":14975,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"3002:30:92"},"referencedDeclaration":23916,"src":"3002:30:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14980,"mutability":"mutable","name":"params","nameLocation":"3094:6:92","nodeType":"VariableDeclaration","scope":15216,"src":"3057:43:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams"},"typeName":{"id":14979,"nodeType":"UserDefinedTypeName","pathNode":{"id":14978,"name":"DataTypes.ExecuteBorrowParams","nodeType":"IdentifierPath","referencedDeclaration":24027,"src":"3057:29:92"},"referencedDeclaration":24027,"src":"3057:29:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_storage_ptr","typeString":"struct DataTypes.ExecuteBorrowParams"}},"visibility":"internal"}],"src":"2803:301:92"},"returnParameters":{"id":14982,"nodeType":"ParameterList","parameters":[],"src":"3112:0:92"},"scope":15720,"src":"2781:3383:92","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":15476,"nodeType":"Block","src":"7097:2410:92","statements":[{"assignments":[15241],"declarations":[{"constant":false,"id":15241,"mutability":"mutable","name":"reserve","nameLocation":"7133:7:92","nodeType":"VariableDeclaration","scope":15476,"src":"7103:37:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15240,"nodeType":"UserDefinedTypeName","pathNode":{"id":15239,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"7103:21:92"},"referencedDeclaration":23909,"src":"7103:21:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":15246,"initialValue":{"baseExpression":{"id":15242,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15222,"src":"7143:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":15245,"indexExpression":{"expression":{"id":15243,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7156:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24029,"src":"7156:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7143:26:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7103:66:92"},{"assignments":[15251],"declarations":[{"constant":false,"id":15251,"mutability":"mutable","name":"reserveCache","nameLocation":"7205:12:92","nodeType":"VariableDeclaration","scope":15476,"src":"7175:42:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":15250,"nodeType":"UserDefinedTypeName","pathNode":{"id":15249,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"7175:22:92"},"referencedDeclaration":23973,"src":"7175:22:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":15255,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15252,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15241,"src":"7220:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"7220:13:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":15254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7220:15:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"7175:60:92"},{"expression":{"arguments":[{"id":15259,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"7261:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15256,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15241,"src":"7241:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15258,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"7241:19:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":15260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7241:33:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15261,"nodeType":"ExpressionStatement","src":"7241:33:92"},{"assignments":[15263,15265],"declarations":[{"constant":false,"id":15263,"mutability":"mutable","name":"stableDebt","nameLocation":"7290:10:92","nodeType":"VariableDeclaration","scope":15476,"src":"7282:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15262,"name":"uint256","nodeType":"ElementaryTypeName","src":"7282:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15265,"mutability":"mutable","name":"variableDebt","nameLocation":"7310:12:92","nodeType":"VariableDeclaration","scope":15476,"src":"7302:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15264,"name":"uint256","nodeType":"ElementaryTypeName","src":"7302:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15272,"initialValue":{"arguments":[{"expression":{"id":15268,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7360:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24036,"src":"7360:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15270,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"7385:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15266,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14857,"src":"7326:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Helpers_$14857_$","typeString":"type(library Helpers)"}},"id":15267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserCurrentDebt","nodeType":"MemberAccess","referencedDeclaration":14856,"src":"7326:26:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveCache memory) view returns (uint256,uint256)"}},"id":15271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7326:77:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7281:122:92"},{"expression":{"arguments":[{"id":15276,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"7447:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":15277,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7467:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24031,"src":"7467:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15279,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7488:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24034,"src":"7488:23:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":15281,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7519:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24036,"src":"7519:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15283,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15263,"src":"7544:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15284,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15265,"src":"7562:12:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15273,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"7410:15:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":15275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateRepay","nodeType":"MemberAccess","referencedDeclaration":22569,"src":"7410:29:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_uint256_$_t_enum$_InterestRateMode_$23931_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,uint256,enum DataTypes.InterestRateMode,address,uint256,uint256) view"}},"id":15285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7410:170:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15286,"nodeType":"ExpressionStatement","src":"7410:170:92"},{"assignments":[15288],"declarations":[{"constant":false,"id":15288,"mutability":"mutable","name":"paybackAmount","nameLocation":"7595:13:92","nodeType":"VariableDeclaration","scope":15476,"src":"7587:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15287,"name":"uint256","nodeType":"ElementaryTypeName","src":"7587:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15298,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":15294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15289,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7611:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24034,"src":"7611:23:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":15291,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"7638:9:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":15292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"7638:26:92","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":15293,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"7638:33:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"7611:60:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":15296,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15265,"src":"7699:12:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"7611:100:92","trueExpression":{"id":15295,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15263,"src":"7680:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7587:124:92"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15299,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7801:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15300,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"useATokens","nodeType":"MemberAccess","referencedDeclaration":24038,"src":"7801:17:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15301,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7822:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24031,"src":"7822:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":15305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7844:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15304,"name":"uint256","nodeType":"ElementaryTypeName","src":"7844:7:92","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":15303,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7839:4:92","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7839:13:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":15307,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"7839:17:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7822:34:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7801:55:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15324,"nodeType":"IfStatement","src":"7797:149:92","trueBody":{"id":15323,"nodeType":"Block","src":"7858:88:92","statements":[{"expression":{"id":15321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15310,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7866:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15312,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24031,"src":"7866:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15318,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7928:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"7928:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":15314,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"7890:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"7890:26:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15313,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"7882:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":15316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7882:35:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":15317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"7882:45:92","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7882:57:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7866:73:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15322,"nodeType":"ExpressionStatement","src":"7866:73:92"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15325,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7956:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24031,"src":"7956:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15327,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"7972:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7956:29:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15335,"nodeType":"IfStatement","src":"7952:79:92","trueBody":{"id":15334,"nodeType":"Block","src":"7987:44:92","statements":[{"expression":{"id":15332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15329,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"7995:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":15330,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"8011:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15331,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24031,"src":"8011:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7995:29:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15333,"nodeType":"ExpressionStatement","src":"7995:29:92"}]}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":15341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15336,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"8041:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24034,"src":"8041:23:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":15338,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"8068:9:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":15339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"8068:26:92","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":15340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"8068:33:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"8041:60:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15376,"nodeType":"Block","src":"8307:203:92","statements":[{"expression":{"id":15374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15360,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8315:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15362,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23935,"src":"8315:35:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15368,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"8432:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24036,"src":"8432:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15370,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"8451:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15371,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8466:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"8466:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15364,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8381:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"8381:37:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15363,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"8353:18:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6386_$","typeString":"type(contract IVariableDebtToken)"}},"id":15366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8353:73:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6386","typeString":"contract IVariableDebtToken"}},"id":15367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6379,"src":"8353:78:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) external returns (uint256)"}},"id":15373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8353:150:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8315:188:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15375,"nodeType":"ExpressionStatement","src":"8315:188:92"}]},"id":15377,"nodeType":"IfStatement","src":"8037:473:92","trueBody":{"id":15359,"nodeType":"Block","src":"8103:198:92","statements":[{"expression":{"id":15357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":15342,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8112:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23945,"src":"8112:32:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15345,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8146:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23943,"src":"8146:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15347,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8111:72:92","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15353,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"8261:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24036,"src":"8261:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15355,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"8280:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15349,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8212:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15350,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"8212:35:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15348,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"8186:16:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":15351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8186:69:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":15352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6277,"src":"8186:74:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,uint256) external returns (uint256,uint256)"}},"id":15356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8186:108:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"8111:183:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15358,"nodeType":"ExpressionStatement","src":"8111:183:92"}]}},{"expression":{"arguments":[{"id":15381,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8551:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":15382,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"8571:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24029,"src":"8571:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"condition":{"expression":{"id":15384,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"8591:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15385,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"useATokens","nodeType":"MemberAccess","referencedDeclaration":24038,"src":"8591:17:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":15387,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"8615:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8591:37:92","trueExpression":{"hexValue":"30","id":15386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8611:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":15389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8636:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":15378,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15241,"src":"8516:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15380,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"8516:27:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":15390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8516:127:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15391,"nodeType":"ExpressionStatement","src":"8516:127:92"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15392,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15263,"src":"8654:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15393,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15265,"src":"8667:12:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8654:25:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15395,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"8682:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8654:41:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8699:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8654:46:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15408,"nodeType":"IfStatement","src":"8650:109:92","trueBody":{"id":15407,"nodeType":"Block","src":"8702:57:92","statements":[{"expression":{"arguments":[{"expression":{"id":15402,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15241,"src":"8734:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"8734:10:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":15404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8746:5:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":15399,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"8710:10:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":15401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowing","nodeType":"MemberAccess","referencedDeclaration":14101,"src":"8710:23:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":15405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8710:42:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15406,"nodeType":"ExpressionStatement","src":"8710:42:92"}]}},{"expression":{"arguments":[{"id":15412,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15222,"src":"8820:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":15413,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"8840:12:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":15414,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"8860:10:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":15415,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8878:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":15416,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"8898:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15409,"name":"IsolationModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"8765:18:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IsolationModeLogic_$18572_$","typeString":"type(library IsolationModeLogic)"}},"id":15411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateIsolatedDebtIfIsolated","nodeType":"MemberAccess","referencedDeclaration":18571,"src":"8765:47:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveCache memory,uint256)"}},"id":15417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8765:152:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15418,"nodeType":"ExpressionStatement","src":"8765:152:92"},{"condition":{"expression":{"id":15419,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"8928:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15420,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"useATokens","nodeType":"MemberAccess","referencedDeclaration":24038,"src":"8928:17:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15460,"nodeType":"Block","src":"9136:244:92","statements":[{"expression":{"arguments":[{"expression":{"id":15441,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9182:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9182:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15443,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"9194:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"9194:26:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15445,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"9222: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":[{"expression":{"id":15437,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"9151:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24029,"src":"9151:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15436,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"9144:6:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":15439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9144:20:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":15440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"9144:37:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":15446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9144:92:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15447,"nodeType":"ExpressionStatement","src":"9144:92:92"},{"expression":{"arguments":[{"expression":{"id":15453,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9305:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9305:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15455,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"9325:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15456,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24036,"src":"9325:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15457,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"9352: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":[{"expression":{"id":15449,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"9252:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15450,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"9252:26:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15448,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"9244:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":15451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9244:35:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":15452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleRepayment","nodeType":"MemberAccess","referencedDeclaration":3931,"src":"9244:51:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":15458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9244:129:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15459,"nodeType":"ExpressionStatement","src":"9244:129:92"}]},"id":15461,"nodeType":"IfStatement","src":"8924:456:92","trueBody":{"id":15435,"nodeType":"Block","src":"8947:183:92","statements":[{"expression":{"arguments":[{"expression":{"id":15426,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9005:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9005:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15428,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"9025:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"9025:26:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15430,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"9061:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15431,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"9084:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"9084:31:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15422,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"8963:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"8963:26:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15421,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"8955:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":15424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8955:35:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":15425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":3895,"src":"8955:40:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256) external"}},"id":15433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8955:168:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15434,"nodeType":"ExpressionStatement","src":"8955:168:92"}]}},{"eventCall":{"arguments":[{"expression":{"id":15463,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"9397:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24029,"src":"9397:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15465,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"9411:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24036,"src":"9411:17:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15467,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9430:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9430:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15469,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"9442:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15470,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"9457:6:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":15471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"useATokens","nodeType":"MemberAccess","referencedDeclaration":24038,"src":"9457:17:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15462,"name":"Repay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14938,"src":"9391:5:92","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,address,uint256,bool)"}},"id":15472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9391:84:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15473,"nodeType":"EmitStatement","src":"9386:89:92"},{"expression":{"id":15474,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15288,"src":"9489:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15236,"id":15475,"nodeType":"Return","src":"9482:20:92"}]},"documentation":{"id":15217,"nodeType":"StructuredDocumentation","src":"6168:648:92","text":" @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\n equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\n reduces the isolated debt.\n @dev  Emits the `Repay()` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the repay function\n @return The actual amount being repaid"},"functionSelector":"40e95de6","id":15477,"implemented":true,"kind":"function","modifiers":[],"name":"executeRepay","nameLocation":"6828:12:92","nodeType":"FunctionDefinition","parameters":{"id":15233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15222,"mutability":"mutable","name":"reservesData","nameLocation":"6896:12:92","nodeType":"VariableDeclaration","scope":15477,"src":"6846:62:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":15221,"keyType":{"id":15218,"name":"address","nodeType":"ElementaryTypeName","src":"6854:7:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6846:41:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":15220,"nodeType":"UserDefinedTypeName","pathNode":{"id":15219,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"6865:21:92"},"referencedDeclaration":23909,"src":"6865:21:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":15226,"mutability":"mutable","name":"reservesList","nameLocation":"6950:12:92","nodeType":"VariableDeclaration","scope":15477,"src":"6914:48:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":15225,"keyType":{"id":15223,"name":"uint256","nodeType":"ElementaryTypeName","src":"6922:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6914:27:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":15224,"name":"address","nodeType":"ElementaryTypeName","src":"6933:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":15229,"mutability":"mutable","name":"userConfig","nameLocation":"7007:10:92","nodeType":"VariableDeclaration","scope":15477,"src":"6968:49:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":15228,"nodeType":"UserDefinedTypeName","pathNode":{"id":15227,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"6968:30:92"},"referencedDeclaration":23916,"src":"6968:30:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":15232,"mutability":"mutable","name":"params","nameLocation":"7059:6:92","nodeType":"VariableDeclaration","scope":15477,"src":"7023:42:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams"},"typeName":{"id":15231,"nodeType":"UserDefinedTypeName","pathNode":{"id":15230,"name":"DataTypes.ExecuteRepayParams","nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"7023:28:92"},"referencedDeclaration":24039,"src":"7023:28:92","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_storage_ptr","typeString":"struct DataTypes.ExecuteRepayParams"}},"visibility":"internal"}],"src":"6840:229:92"},"returnParameters":{"id":15236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15477,"src":"7088:7:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15234,"name":"uint256","nodeType":"ElementaryTypeName","src":"7088:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7087:9:92"},"scope":15720,"src":"6819:2688:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15568,"nodeType":"Block","src":"10254:690:92","statements":[{"assignments":[15492],"declarations":[{"constant":false,"id":15492,"mutability":"mutable","name":"reserveCache","nameLocation":"10290:12:92","nodeType":"VariableDeclaration","scope":15568,"src":"10260:42:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":15491,"nodeType":"UserDefinedTypeName","pathNode":{"id":15490,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"10260:22:92"},"referencedDeclaration":23973,"src":"10260:22:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":15496,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15493,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15481,"src":"10305:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"10305:13:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":15495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10305:15:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"10260:60:92"},{"expression":{"arguments":[{"id":15500,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15492,"src":"10346:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15497,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15481,"src":"10326:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15499,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"10326:19:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":15501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10326:33:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15502,"nodeType":"ExpressionStatement","src":"10326:33:92"},{"expression":{"arguments":[{"id":15506,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15481,"src":"10416:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":15507,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15492,"src":"10425:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":15508,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"10439:5:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15503,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"10366:15:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":15505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateRebalanceStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":22783,"src":"10366:49:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address) view"}},"id":15509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10366:79:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15510,"nodeType":"ExpressionStatement","src":"10366:79:92"},{"assignments":[15513],"declarations":[{"constant":false,"id":15513,"mutability":"mutable","name":"stableDebtToken","nameLocation":"10469:15:92","nodeType":"VariableDeclaration","scope":15568,"src":"10452:32:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"},"typeName":{"id":15512,"nodeType":"UserDefinedTypeName","pathNode":{"id":15511,"name":"IStableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":6340,"src":"10452:16:92"},"referencedDeclaration":6340,"src":"10452:16:92","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"visibility":"internal"}],"id":15518,"initialValue":{"arguments":[{"expression":{"id":15515,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15492,"src":"10504:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"10504:35:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15514,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"10487:16:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":15517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10487:53:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"nodeType":"VariableDeclarationStatement","src":"10452:88:92"},{"assignments":[15520],"declarations":[{"constant":false,"id":15520,"mutability":"mutable","name":"stableDebt","nameLocation":"10554:10:92","nodeType":"VariableDeclaration","scope":15568,"src":"10546:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15519,"name":"uint256","nodeType":"ElementaryTypeName","src":"10546:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15530,"initialValue":{"arguments":[{"id":15528,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"10610:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":15524,"name":"stableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15513,"src":"10582:15:92","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}],"id":15523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10574:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15522,"name":"address","nodeType":"ElementaryTypeName","src":"10574:7:92","typeDescriptions":{}}},"id":15525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10574:24:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15521,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10567:6:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":15526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10567:32:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":15527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"10567:42:92","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10567:48:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10546:69:92"},{"expression":{"arguments":[{"id":15534,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"10643:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15535,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15520,"src":"10649:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15531,"name":"stableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15513,"src":"10622:15:92","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":15533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6277,"src":"10622:20:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,uint256) external returns (uint256,uint256)"}},"id":15536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10622:38:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":15537,"nodeType":"ExpressionStatement","src":"10622:38:92"},{"expression":{"id":15552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"expression":{"id":15538,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15492,"src":"10670:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23945,"src":"10670:32:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15541,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15492,"src":"10704:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23943,"src":"10704:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15543,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"10667:74:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$_t_uint256_$","typeString":"tuple(,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15546,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"10772:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15547,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"10778:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15548,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15520,"src":"10784:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15549,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15481,"src":"10796:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23890,"src":"10796:31:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":15544,"name":"stableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15513,"src":"10744:15:92","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":15545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6265,"src":"10744:27:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256,uint256)"}},"id":15551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10744:84:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"src":"10667:161:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15553,"nodeType":"ExpressionStatement","src":"10667:161:92"},{"expression":{"arguments":[{"id":15557,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15492,"src":"10863:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":15558,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"10877:5:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":15559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10884:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":15560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10887:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":15554,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15481,"src":"10835:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"10835:27:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":15561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10835:54:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15562,"nodeType":"ExpressionStatement","src":"10835:54:92"},{"eventCall":{"arguments":[{"id":15564,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"10927:5:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15565,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"10934:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15563,"name":"RebalanceStableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14944,"src":"10901:25:92","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":15566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10901:38:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15567,"nodeType":"EmitStatement","src":"10896:43:92"}]},"documentation":{"id":15478,"nodeType":"StructuredDocumentation","src":"9511:605:92","text":" @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\n rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\n @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\n @dev Emits the `RebalanceStableBorrowRate()` event\n @param reserve The state of the reserve of the asset being repaid\n @param asset The asset of the position being rebalanced\n @param user The user being rebalanced"},"functionSelector":"6973f744","id":15569,"implemented":true,"kind":"function","modifiers":[],"name":"executeRebalanceStableBorrowRate","nameLocation":"10128:32:92","nodeType":"FunctionDefinition","parameters":{"id":15486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15481,"mutability":"mutable","name":"reserve","nameLocation":"10196:7:92","nodeType":"VariableDeclaration","scope":15569,"src":"10166:37:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15480,"nodeType":"UserDefinedTypeName","pathNode":{"id":15479,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"10166:21:92"},"referencedDeclaration":23909,"src":"10166:21:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":15483,"mutability":"mutable","name":"asset","nameLocation":"10217:5:92","nodeType":"VariableDeclaration","scope":15569,"src":"10209:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15482,"name":"address","nodeType":"ElementaryTypeName","src":"10209:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15485,"mutability":"mutable","name":"user","nameLocation":"10236:4:92","nodeType":"VariableDeclaration","scope":15569,"src":"10228:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15484,"name":"address","nodeType":"ElementaryTypeName","src":"10228:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10160:84:92"},"returnParameters":{"id":15487,"nodeType":"ParameterList","parameters":[],"src":"10254:0:92"},"scope":15720,"src":"10119:825:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15718,"nodeType":"Block","src":"11637:1413:92","statements":[{"assignments":[15588],"declarations":[{"constant":false,"id":15588,"mutability":"mutable","name":"reserveCache","nameLocation":"11673:12:92","nodeType":"VariableDeclaration","scope":15718,"src":"11643:42:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":15587,"nodeType":"UserDefinedTypeName","pathNode":{"id":15586,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"11643:22:92"},"referencedDeclaration":23973,"src":"11643:22:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":15592,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15589,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15573,"src":"11688:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"11688:13:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":15591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11688:15:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"11643:60:92"},{"expression":{"arguments":[{"id":15596,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"11730:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15593,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15573,"src":"11710:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15595,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"11710:19:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":15597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11710:33:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15598,"nodeType":"ExpressionStatement","src":"11710:33:92"},{"assignments":[15600,15602],"declarations":[{"constant":false,"id":15600,"mutability":"mutable","name":"stableDebt","nameLocation":"11759:10:92","nodeType":"VariableDeclaration","scope":15718,"src":"11751:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15599,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15602,"mutability":"mutable","name":"variableDebt","nameLocation":"11779:12:92","nodeType":"VariableDeclaration","scope":15718,"src":"11771:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15601,"name":"uint256","nodeType":"ElementaryTypeName","src":"11771:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15609,"initialValue":{"arguments":[{"expression":{"id":15605,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11829:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11829:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15607,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"11847:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15603,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14857,"src":"11795:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Helpers_$14857_$","typeString":"type(library Helpers)"}},"id":15604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserCurrentDebt","nodeType":"MemberAccess","referencedDeclaration":14856,"src":"11795:26:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveCache memory) view returns (uint256,uint256)"}},"id":15608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11795:70:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11750:115:92"},{"expression":{"arguments":[{"id":15613,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15573,"src":"11916:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":15614,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"11931:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":15615,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"11951:10:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":15616,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15600,"src":"11969:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15617,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15602,"src":"11987:12:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15618,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15581,"src":"12007:16:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}],"expression":{"id":15610,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"11872:15:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":15612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSwapRateMode","nodeType":"MemberAccess","referencedDeclaration":22696,"src":"11872:36:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_uint256_$_t_enum$_InterestRateMode_$23931_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,struct DataTypes.UserConfigurationMap storage pointer,uint256,uint256,enum DataTypes.InterestRateMode) view"}},"id":15619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11872:157:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15620,"nodeType":"ExpressionStatement","src":"11872:157:92"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":15625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15621,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15581,"src":"12040:16:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":15622,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"12060:9:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":15623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"12060:26:92","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":15624,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"12060:33:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"12040:53:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15700,"nodeType":"Block","src":"12492:426:92","statements":[{"expression":{"id":15677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15663,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12500:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23935,"src":"12500:35:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15671,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12617:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12617:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15673,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15602,"src":"12629:12:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15674,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12643:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15675,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"12643:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15667,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12566:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15668,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"12566:37:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15666,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"12538:18:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6386_$","typeString":"type(contract IVariableDebtToken)"}},"id":15669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12538:73:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6386","typeString":"contract IVariableDebtToken"}},"id":15670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6379,"src":"12538:78:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) external returns (uint256)"}},"id":15676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12538:142:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12500:180:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15678,"nodeType":"ExpressionStatement","src":"12500:180:92"},{"expression":{"id":15698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"expression":{"id":15679,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12692:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15681,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23945,"src":"12692:32:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15682,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12726:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15683,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23943,"src":"12726:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15684,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12689:74:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$_t_uint256_$","typeString":"tuple(,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15690,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12841:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12841:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15692,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12853:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12853:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15694,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15602,"src":"12865:12:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15695,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15573,"src":"12879:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15696,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23890,"src":"12879:31:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":15686,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12792:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"12792:35:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15685,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"12766:16:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":15688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12766:69:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":15689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6265,"src":"12766:74:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256,uint256)"}},"id":15697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12766:145:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"src":"12689:222:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15699,"nodeType":"ExpressionStatement","src":"12689:222:92"}]},"id":15701,"nodeType":"IfStatement","src":"12036:882:92","trueBody":{"id":15662,"nodeType":"Block","src":"12095:391:92","statements":[{"expression":{"id":15641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":15626,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12104:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15628,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23945,"src":"12104:32:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15629,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12138:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23943,"src":"12138:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15631,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12103:72:92","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15637,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12253:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12253:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15639,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15600,"src":"12265:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15633,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12204:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"12204:35:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15632,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"12178:16:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":15635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12178:69:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":15636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6277,"src":"12178:74:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,uint256) external returns (uint256,uint256)"}},"id":15640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12178:98:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"12103:173:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15642,"nodeType":"ExpressionStatement","src":"12103:173:92"},{"expression":{"id":15660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"expression":{"id":15643,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12288:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15645,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23935,"src":"12288:35:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15646,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12285:39:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$","typeString":"tuple(,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15652,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12406:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12406:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15654,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12418:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12418:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15656,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15600,"src":"12430:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15657,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12442:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"12442:36:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15648,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12355:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15649,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"12355:37:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15647,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"12327:18:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6386_$","typeString":"type(contract IVariableDebtToken)"}},"id":15650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12327:73:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6386","typeString":"contract IVariableDebtToken"}},"id":15651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6367,"src":"12327:78:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256)"}},"id":15659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12327:152:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"src":"12285:194:92","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15661,"nodeType":"ExpressionStatement","src":"12285:194:92"}]}},{"expression":{"arguments":[{"id":15705,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"12952:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":15706,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15578,"src":"12966:5:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":15707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12973:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":15708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12976:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":15702,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15573,"src":"12924:7:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"12924:27:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":15709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12924:54:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15710,"nodeType":"ExpressionStatement","src":"12924:54:92"},{"eventCall":{"arguments":[{"id":15712,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15578,"src":"13009:5:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15713,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13016:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"13016:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15715,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15581,"src":"13028:16:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}],"id":15711,"name":"SwapBorrowRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14953,"src":"12990:18:92","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_enum$_InterestRateMode_$23931_$returns$__$","typeString":"function (address,address,enum DataTypes.InterestRateMode)"}},"id":15716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12990:55:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15717,"nodeType":"EmitStatement","src":"12985:60:92"}]},"documentation":{"id":15570,"nodeType":"StructuredDocumentation","src":"10948:472:92","text":" @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\n @dev Emits the `Swap()` event\n @param reserve The of the reserve of the asset being repaid\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param asset The asset of the position being swapped\n @param interestRateMode The current interest rate mode of the position being swapped"},"functionSelector":"eac4d703","id":15719,"implemented":true,"kind":"function","modifiers":[],"name":"executeSwapBorrowRateMode","nameLocation":"11432:25:92","nodeType":"FunctionDefinition","parameters":{"id":15582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15573,"mutability":"mutable","name":"reserve","nameLocation":"11493:7:92","nodeType":"VariableDeclaration","scope":15719,"src":"11463:37:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15572,"nodeType":"UserDefinedTypeName","pathNode":{"id":15571,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"11463:21:92"},"referencedDeclaration":23909,"src":"11463:21:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":15576,"mutability":"mutable","name":"userConfig","nameLocation":"11545:10:92","nodeType":"VariableDeclaration","scope":15719,"src":"11506:49:92","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":15575,"nodeType":"UserDefinedTypeName","pathNode":{"id":15574,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"11506:30:92"},"referencedDeclaration":23916,"src":"11506:30:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":15578,"mutability":"mutable","name":"asset","nameLocation":"11569:5:92","nodeType":"VariableDeclaration","scope":15719,"src":"11561:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15577,"name":"address","nodeType":"ElementaryTypeName","src":"11561:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15581,"mutability":"mutable","name":"interestRateMode","nameLocation":"11607:16:92","nodeType":"VariableDeclaration","scope":15719,"src":"11580:43:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":15580,"nodeType":"UserDefinedTypeName","pathNode":{"id":15579,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"11580:26:92"},"referencedDeclaration":23931,"src":"11580:26:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"}],"src":"11457:170:92"},"returnParameters":{"id":15583,"nodeType":"ParameterList","parameters":[],"src":"11637:0:92"},"scope":15720,"src":"11423:1627:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":15721,"src":"1076:11976:92","usedErrors":[]}],"src":"37:13016:92"},"id":92},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/BridgeLogic.sol","exportedSymbols":{"BridgeLogic":[16097],"DataTypes":[24227],"Errors":[14819],"GPv2SafeERC20":[118],"IAToken":[3986],"IERC20":[1442],"PercentageMath":[23726],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"SafeCast":[1966],"UserConfiguration":[14545],"ValidationLogic":[23502],"WadRayMath":[23813]},"id":16098,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":15722,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:93"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":15724,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":1443,"src":"63:79:93","symbolAliases":[{"foreign":{"id":15723,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":15726,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":119,"src":"143:87:93","symbolAliases":[{"foreign":{"id":15725,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:13:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":15728,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":1967,"src":"231:83:93","symbolAliases":[{"foreign":{"id":15727,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:8:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":15730,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":3987,"src":"315:56:93","symbolAliases":[{"foreign":{"id":15729,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"323:7:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":15732,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":24228,"src":"372:49:93","symbolAliases":[{"foreign":{"id":15731,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"380:9:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":15734,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":14546,"src":"422:73:93","symbolAliases":[{"foreign":{"id":15733,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"430:17:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":15736,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":14035,"src":"496:79:93","symbolAliases":[{"foreign":{"id":15735,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"504:20:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":15738,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":23814,"src":"576:50:93","symbolAliases":[{"foreign":{"id":15737,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"584:10:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":15740,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":23727,"src":"627:58:93","symbolAliases":[{"foreign":{"id":15739,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"635:14:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":15742,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":14820,"src":"686:45:93","symbolAliases":[{"foreign":{"id":15741,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"694:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":15744,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":23503,"src":"732:54:93","symbolAliases":[{"foreign":{"id":15743,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"740:15:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":15746,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16098,"sourceUnit":20972,"src":"787:48:93","symbolAliases":[{"foreign":{"id":15745,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"795:12:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BridgeLogic","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":16097,"linearizedBaseContracts":[16097],"name":"BridgeLogic","nameLocation":"845:11:93","nodeType":"ContractDefinition","nodes":[{"id":15750,"libraryName":{"id":15747,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"867:12:93"},"nodeType":"UsingForDirective","src":"861:46:93","typeName":{"id":15749,"nodeType":"UserDefinedTypeName","pathNode":{"id":15748,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"884:22:93"},"referencedDeclaration":23973,"src":"884:22:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":15754,"libraryName":{"id":15751,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"916:12:93"},"nodeType":"UsingForDirective","src":"910:45:93","typeName":{"id":15753,"nodeType":"UserDefinedTypeName","pathNode":{"id":15752,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"933:21:93"},"referencedDeclaration":23909,"src":"933:21:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":15758,"libraryName":{"id":15755,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"964:17:93"},"nodeType":"UsingForDirective","src":"958:59:93","typeName":{"id":15757,"nodeType":"UserDefinedTypeName","pathNode":{"id":15756,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"986:30:93"},"referencedDeclaration":23916,"src":"986:30:93","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":15762,"libraryName":{"id":15759,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1026:20:93"},"nodeType":"UsingForDirective","src":"1020:65:93","typeName":{"id":15761,"nodeType":"UserDefinedTypeName","pathNode":{"id":15760,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1051:33:93"},"referencedDeclaration":23912,"src":"1051:33:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":15765,"libraryName":{"id":15763,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1094:10:93"},"nodeType":"UsingForDirective","src":"1088:29:93","typeName":{"id":15764,"name":"uint256","nodeType":"ElementaryTypeName","src":"1109:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":15768,"libraryName":{"id":15766,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1126:14:93"},"nodeType":"UsingForDirective","src":"1120:33:93","typeName":{"id":15767,"name":"uint256","nodeType":"ElementaryTypeName","src":"1145:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":15771,"libraryName":{"id":15769,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1162:8:93"},"nodeType":"UsingForDirective","src":"1156:27:93","typeName":{"id":15770,"name":"uint256","nodeType":"ElementaryTypeName","src":"1175:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":15775,"libraryName":{"id":15772,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1192:13:93"},"nodeType":"UsingForDirective","src":"1186:31:93","typeName":{"id":15774,"nodeType":"UserDefinedTypeName","pathNode":{"id":15773,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1210:6:93"},"referencedDeclaration":1442,"src":"1210:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"anonymous":false,"id":15781,"name":"ReserveUsedAsCollateralEnabled","nameLocation":"1261:30:93","nodeType":"EventDefinition","parameters":{"id":15780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15777,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1308:7:93","nodeType":"VariableDeclaration","scope":15781,"src":"1292:23:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15776,"name":"address","nodeType":"ElementaryTypeName","src":"1292:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15779,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1333:4:93","nodeType":"VariableDeclaration","scope":15781,"src":"1317:20:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15778,"name":"address","nodeType":"ElementaryTypeName","src":"1317:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1291:47:93"},"src":"1255:84:93"},{"anonymous":false,"id":15793,"name":"MintUnbacked","nameLocation":"1348:12:93","nodeType":"EventDefinition","parameters":{"id":15792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15783,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1382:7:93","nodeType":"VariableDeclaration","scope":15793,"src":"1366:23:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15782,"name":"address","nodeType":"ElementaryTypeName","src":"1366:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15785,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"1403:4:93","nodeType":"VariableDeclaration","scope":15793,"src":"1395:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15784,"name":"address","nodeType":"ElementaryTypeName","src":"1395:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15787,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1429:10:93","nodeType":"VariableDeclaration","scope":15793,"src":"1413:26:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15786,"name":"address","nodeType":"ElementaryTypeName","src":"1413:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15789,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1453:6:93","nodeType":"VariableDeclaration","scope":15793,"src":"1445:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15788,"name":"uint256","nodeType":"ElementaryTypeName","src":"1445:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15791,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1480:12:93","nodeType":"VariableDeclaration","scope":15793,"src":"1465:27:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":15790,"name":"uint16","nodeType":"ElementaryTypeName","src":"1465:6:93","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1360:136:93"},"src":"1342:155:93"},{"anonymous":false,"id":15803,"name":"BackUnbacked","nameLocation":"1506:12:93","nodeType":"EventDefinition","parameters":{"id":15802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15795,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1535:7:93","nodeType":"VariableDeclaration","scope":15803,"src":"1519:23:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15794,"name":"address","nodeType":"ElementaryTypeName","src":"1519:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15797,"indexed":true,"mutability":"mutable","name":"backer","nameLocation":"1560:6:93","nodeType":"VariableDeclaration","scope":15803,"src":"1544:22:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15796,"name":"address","nodeType":"ElementaryTypeName","src":"1544:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15799,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1576:6:93","nodeType":"VariableDeclaration","scope":15803,"src":"1568:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15798,"name":"uint256","nodeType":"ElementaryTypeName","src":"1568:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15801,"indexed":false,"mutability":"mutable","name":"fee","nameLocation":"1592:3:93","nodeType":"VariableDeclaration","scope":15803,"src":"1584:11:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15800,"name":"uint256","nodeType":"ElementaryTypeName","src":"1584:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1518:78:93"},"src":"1500:97:93"},{"body":{"id":15956,"nodeType":"Block","src":"2783:1301:93","statements":[{"assignments":[15831],"declarations":[{"constant":false,"id":15831,"mutability":"mutable","name":"reserve","nameLocation":"2819:7:93","nodeType":"VariableDeclaration","scope":15956,"src":"2789:37:93","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15830,"nodeType":"UserDefinedTypeName","pathNode":{"id":15829,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2789:21:93"},"referencedDeclaration":23909,"src":"2789:21:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":15835,"initialValue":{"baseExpression":{"id":15832,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15809,"src":"2829:12:93","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":15834,"indexExpression":{"id":15833,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15818,"src":"2842:5:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2829:19:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2789:59:93"},{"assignments":[15840],"declarations":[{"constant":false,"id":15840,"mutability":"mutable","name":"reserveCache","nameLocation":"2884:12:93","nodeType":"VariableDeclaration","scope":15956,"src":"2854:42:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":15839,"nodeType":"UserDefinedTypeName","pathNode":{"id":15838,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"2854:22:93"},"referencedDeclaration":23973,"src":"2854:22:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":15844,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15841,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"2899:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15842,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"2899:13:93","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":15843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2899:15:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"2854:60:93"},{"expression":{"arguments":[{"id":15848,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"2941:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15845,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"2921:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"2921:19:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":15849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2921:33:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15850,"nodeType":"ExpressionStatement","src":"2921:33:93"},{"expression":{"arguments":[{"id":15854,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"2992:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":15855,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"3006:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":15856,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"3015:6:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15851,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"2961:15:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":15853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSupply","nodeType":"MemberAccess","referencedDeclaration":21871,"src":"2961:30:93","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_struct$_ReserveData_$23909_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,struct DataTypes.ReserveData storage pointer,uint256) view"}},"id":15857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2961:61:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15858,"nodeType":"ExpressionStatement","src":"2961:61:93"},{"assignments":[15860],"declarations":[{"constant":false,"id":15860,"mutability":"mutable","name":"unbackedMintCap","nameLocation":"3037:15:93","nodeType":"VariableDeclaration","scope":15956,"src":"3029:23:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15859,"name":"uint256","nodeType":"ElementaryTypeName","src":"3029:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15865,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15861,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"3055:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15862,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"3055:33:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":15863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":13772,"src":"3055:52:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":15864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3055:54:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3029:80:93"},{"assignments":[15867],"declarations":[{"constant":false,"id":15867,"mutability":"mutable","name":"reserveDecimals","nameLocation":"3123:15:93","nodeType":"VariableDeclaration","scope":15956,"src":"3115:23:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15866,"name":"uint256","nodeType":"ElementaryTypeName","src":"3115:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15872,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15868,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"3141:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15869,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"3141:33:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":15870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":13110,"src":"3141:45:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":15871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3141:47:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3115:73:93"},{"assignments":[15874],"declarations":[{"constant":false,"id":15874,"mutability":"mutable","name":"unbacked","nameLocation":"3203:8:93","nodeType":"VariableDeclaration","scope":15956,"src":"3195:16:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15873,"name":"uint256","nodeType":"ElementaryTypeName","src":"3195:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15881,"initialValue":{"id":15880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15875,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"3214:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":23906,"src":"3214:16:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15877,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"3234:6:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"3234:16:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":15879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3234:18:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3214:38:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3195:57:93"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15883,"name":"unbacked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15874,"src":"3274:8:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15884,"name":"unbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15860,"src":"3286:15:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":15885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3305:2:93","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":15886,"name":"reserveDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15867,"src":"3311:15:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3305:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15888,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3304:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3286:41:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3274:53:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":15891,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3335:6:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":15892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"UNBACKED_MINT_CAP_EXCEEDED","nodeType":"MemberAccess","referencedDeclaration":14701,"src":"3335:33:93","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":15882,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3259:7:93","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":15893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3259:115:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15894,"nodeType":"ExpressionStatement","src":"3259:115:93"},{"expression":{"arguments":[{"id":15898,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"3409:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":15899,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15818,"src":"3423:5:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":15900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3430:1:93","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":15901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3433:1:93","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":15895,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"3381:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"3381:27:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":15902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3381:54:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15903,"nodeType":"ExpressionStatement","src":"3381:54:93"},{"assignments":[15905],"declarations":[{"constant":false,"id":15905,"mutability":"mutable","name":"isFirstSupply","nameLocation":"3447:13:93","nodeType":"VariableDeclaration","scope":15956,"src":"3442:18:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15904,"name":"bool","nodeType":"ElementaryTypeName","src":"3442:4:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":15918,"initialValue":{"arguments":[{"expression":{"id":15911,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3511:3:93","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3511:10:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15913,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15822,"src":"3529:10:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15914,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"3547:6:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15915,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"3561:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15916,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"3561:31:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15907,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"3471:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"3471:26:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15906,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"3463:7:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":15909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3463:35:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":15910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":3883,"src":"3463:40:93","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) external returns (bool)"}},"id":15917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3463:135:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3442:156:93"},{"condition":{"id":15919,"name":"isFirstSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15905,"src":"3609:13:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15946,"nodeType":"IfStatement","src":"3605:398:93","trueBody":{"id":15945,"nodeType":"Block","src":"3624:379:93","statements":[{"condition":{"arguments":[{"id":15922,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15809,"src":"3705:12:93","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":15923,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15813,"src":"3729:12:93","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":15924,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15816,"src":"3753:10:93","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":15925,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"3775:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"3775:33:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},{"expression":{"id":15927,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15840,"src":"3820:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"3820:26:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15920,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"3645:15:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":15921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateAutomaticUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":23501,"src":"3645:48:93","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address) view returns (bool)"}},"id":15929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3645:211:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15944,"nodeType":"IfStatement","src":"3632:365:93","trueBody":{"id":15943,"nodeType":"Block","src":"3865:132:93","statements":[{"expression":{"arguments":[{"expression":{"id":15933,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"3907:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"3907:10:93","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":15935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3919:4:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":15930,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15816,"src":"3875:10:93","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":15932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"3875:31:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":15936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3875:49:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15937,"nodeType":"ExpressionStatement","src":"3875:49:93"},{"eventCall":{"arguments":[{"id":15939,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15818,"src":"3970:5:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15940,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15822,"src":"3977:10:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15938,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15781,"src":"3939:30:93","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":15941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3939:49:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15942,"nodeType":"EmitStatement","src":"3934:54:93"}]}}]}},{"eventCall":{"arguments":[{"id":15948,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15818,"src":"4027:5:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15949,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4034:3:93","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4034:10:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15951,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15822,"src":"4046:10:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15952,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"4058:6:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15953,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15824,"src":"4066:12:93","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":15947,"name":"MintUnbacked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15793,"src":"4014:12:93","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,uint16)"}},"id":15954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4014:65:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15955,"nodeType":"EmitStatement","src":"4009:70:93"}]},"documentation":{"id":15804,"nodeType":"StructuredDocumentation","src":"1601:872:93","text":" @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\n @dev Essentially a supply without transferring the underlying.\n @dev Emits the `MintUnbacked` event\n @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param asset The address of the underlying asset to mint aTokens of\n @param amount The amount to mint\n @param onBehalfOf The address that will receive the aTokens\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"0413c86f","id":15957,"implemented":true,"kind":"function","modifiers":[],"name":"executeMintUnbacked","nameLocation":"2485:19:93","nodeType":"FunctionDefinition","parameters":{"id":15825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15809,"mutability":"mutable","name":"reservesData","nameLocation":"2560:12:93","nodeType":"VariableDeclaration","scope":15957,"src":"2510:62:93","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":15808,"keyType":{"id":15805,"name":"address","nodeType":"ElementaryTypeName","src":"2518:7:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2510:41:93","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":15807,"nodeType":"UserDefinedTypeName","pathNode":{"id":15806,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2529:21:93"},"referencedDeclaration":23909,"src":"2529:21:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":15813,"mutability":"mutable","name":"reservesList","nameLocation":"2614:12:93","nodeType":"VariableDeclaration","scope":15957,"src":"2578:48:93","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":15812,"keyType":{"id":15810,"name":"uint256","nodeType":"ElementaryTypeName","src":"2586:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2578:27:93","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":15811,"name":"address","nodeType":"ElementaryTypeName","src":"2597:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":15816,"mutability":"mutable","name":"userConfig","nameLocation":"2671:10:93","nodeType":"VariableDeclaration","scope":15957,"src":"2632:49:93","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":15815,"nodeType":"UserDefinedTypeName","pathNode":{"id":15814,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"2632:30:93"},"referencedDeclaration":23916,"src":"2632:30:93","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":15818,"mutability":"mutable","name":"asset","nameLocation":"2695:5:93","nodeType":"VariableDeclaration","scope":15957,"src":"2687:13:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15817,"name":"address","nodeType":"ElementaryTypeName","src":"2687:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15820,"mutability":"mutable","name":"amount","nameLocation":"2714:6:93","nodeType":"VariableDeclaration","scope":15957,"src":"2706:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15819,"name":"uint256","nodeType":"ElementaryTypeName","src":"2706:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15822,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2734:10:93","nodeType":"VariableDeclaration","scope":15957,"src":"2726:18:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15821,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15824,"mutability":"mutable","name":"referralCode","nameLocation":"2757:12:93","nodeType":"VariableDeclaration","scope":15957,"src":"2750:19:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":15823,"name":"uint16","nodeType":"ElementaryTypeName","src":"2750:6:93","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"2504:269:93"},"returnParameters":{"id":15826,"nodeType":"ParameterList","parameters":[],"src":"2783:0:93"},"scope":16097,"src":"2476:1608:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16095,"nodeType":"Block","src":"4797:968:93","statements":[{"assignments":[15978],"declarations":[{"constant":false,"id":15978,"mutability":"mutable","name":"reserveCache","nameLocation":"4833:12:93","nodeType":"VariableDeclaration","scope":16095,"src":"4803:42:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":15977,"nodeType":"UserDefinedTypeName","pathNode":{"id":15976,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"4803:22:93"},"referencedDeclaration":23973,"src":"4803:22:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":15982,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15979,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"4848:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"4848:13:93","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":15981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4848:15:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"4803:60:93"},{"expression":{"arguments":[{"id":15986,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"4890:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15983,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"4870:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"4870:19:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":15987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4870:33:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15988,"nodeType":"ExpressionStatement","src":"4870:33:93"},{"assignments":[15990],"declarations":[{"constant":false,"id":15990,"mutability":"mutable","name":"backingAmount","nameLocation":"4918:13:93","nodeType":"VariableDeclaration","scope":16095,"src":"4910:21:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15989,"name":"uint256","nodeType":"ElementaryTypeName","src":"4910:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16000,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15991,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15965,"src":"4935:6:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15992,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"4944:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":23906,"src":"4944:16:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4935:25:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":15995,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4934:27:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":15997,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"4973:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":23906,"src":"4973:16:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":15999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4934:55:93","trueExpression":{"id":15996,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15965,"src":"4964:6:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4910:79:93"},{"assignments":[16002],"declarations":[{"constant":false,"id":16002,"mutability":"mutable","name":"feeToProtocol","nameLocation":"5004:13:93","nodeType":"VariableDeclaration","scope":16095,"src":"4996:21:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16001,"name":"uint256","nodeType":"ElementaryTypeName","src":"4996:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16007,"initialValue":{"arguments":[{"id":16005,"name":"protocolFeeBps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15969,"src":"5035:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16003,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15967,"src":"5020:3:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"5020:14:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5020:30:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4996:54:93"},{"assignments":[16009],"declarations":[{"constant":false,"id":16009,"mutability":"mutable","name":"feeToLP","nameLocation":"5064:7:93","nodeType":"VariableDeclaration","scope":16095,"src":"5056:15:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16008,"name":"uint256","nodeType":"ElementaryTypeName","src":"5056:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16013,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16010,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15967,"src":"5074:3:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16011,"name":"feeToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16002,"src":"5080:13:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5074:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5056:37:93"},{"assignments":[16015],"declarations":[{"constant":false,"id":16015,"mutability":"mutable","name":"added","nameLocation":"5107:5:93","nodeType":"VariableDeclaration","scope":16095,"src":"5099:13:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16014,"name":"uint256","nodeType":"ElementaryTypeName","src":"5099:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16019,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16016,"name":"backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15990,"src":"5115:13:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16017,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15967,"src":"5131:3:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5115:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5099:35:93"},{"expression":{"id":16043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16020,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"5141:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16022,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"5141:31:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":16026,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"5222:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"5222:26:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16025,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"5215:6:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":16028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5215:34:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":16029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"5215:46:93","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":16030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5215:48:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":16037,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"5316:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"5316:31:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":16033,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"5282:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16034,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"5282:25:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":16032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5274:7:93","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16031,"name":"uint256","nodeType":"ElementaryTypeName","src":"5274:7:93","typeDescriptions":{}}},"id":16035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5274:34:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"5274:41:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5274:74:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5215:133:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16041,"name":"feeToLP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16009,"src":"5356:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16023,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"5175:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cumulateToLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":20430,"src":"5175:32:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,uint256,uint256) returns (uint256)"}},"id":16042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5175:194:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5141:228:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16044,"nodeType":"ExpressionStatement","src":"5141:228:93"},{"expression":{"id":16055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16045,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"5376:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16047,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"5376:25:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":16050,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"5426:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"5426:31:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16048,"name":"feeToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16002,"src":"5405:13:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"5405:20:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5405:53:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5405:63:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":16054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5405:65:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5376:94:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":16056,"nodeType":"ExpressionStatement","src":"5376:94:93"},{"expression":{"id":16063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16057,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"5477:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":23906,"src":"5477:16:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16060,"name":"backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15990,"src":"5497:13:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5497:23:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":16062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5497:25:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5477:45:93","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":16064,"nodeType":"ExpressionStatement","src":"5477:45:93"},{"expression":{"arguments":[{"id":16068,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"5556:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":16069,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15963,"src":"5570:5:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16070,"name":"added","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16015,"src":"5577:5:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":16071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5584:1:93","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":16065,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"5528:7:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"5528:27:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":16072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5528:58:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16073,"nodeType":"ExpressionStatement","src":"5528:58:93"},{"expression":{"arguments":[{"expression":{"id":16078,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5624:3:93","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5624:10:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16080,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"5636:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"5636:26:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16082,"name":"added","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16015,"src":"5664:5:93","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":16075,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15963,"src":"5600:5:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16074,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"5593:6:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":16076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5593:13:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":16077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"5593:30:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":16083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5593:77:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16084,"nodeType":"ExpressionStatement","src":"5593:77:93"},{"eventCall":{"arguments":[{"id":16086,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15963,"src":"5695:5:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16087,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5702:3:93","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5702:10:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16089,"name":"backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15990,"src":"5714:13:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16090,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15967,"src":"5729:3:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16085,"name":"BackUnbacked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15803,"src":"5682:12:93","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":16091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5682:51:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16092,"nodeType":"EmitStatement","src":"5677:56:93"},{"expression":{"id":16093,"name":"backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15990,"src":"5747:13:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15973,"id":16094,"nodeType":"Return","src":"5740:20:93"}]},"documentation":{"id":15958,"nodeType":"StructuredDocumentation","src":"4088:519:93","text":" @notice Back the current unbacked with `amount` and pay `fee`.\n @dev It is not possible to back more than the existing unbacked amount of the reserve\n @dev Emits the `BackUnbacked` event\n @param reserve The reserve to back unbacked for\n @param asset The address of the underlying asset to repay\n @param amount The amount to back\n @param fee The amount paid in fees\n @param protocolFeeBps The fraction of fees in basis points paid to the protocol\n @return The backed amount"},"functionSelector":"8e743248","id":16096,"implemented":true,"kind":"function","modifiers":[],"name":"executeBackUnbacked","nameLocation":"4619:19:93","nodeType":"FunctionDefinition","parameters":{"id":15970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15961,"mutability":"mutable","name":"reserve","nameLocation":"4674:7:93","nodeType":"VariableDeclaration","scope":16096,"src":"4644:37:93","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15960,"nodeType":"UserDefinedTypeName","pathNode":{"id":15959,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4644:21:93"},"referencedDeclaration":23909,"src":"4644:21:93","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":15963,"mutability":"mutable","name":"asset","nameLocation":"4695:5:93","nodeType":"VariableDeclaration","scope":16096,"src":"4687:13:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15962,"name":"address","nodeType":"ElementaryTypeName","src":"4687:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15965,"mutability":"mutable","name":"amount","nameLocation":"4714:6:93","nodeType":"VariableDeclaration","scope":16096,"src":"4706:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15964,"name":"uint256","nodeType":"ElementaryTypeName","src":"4706:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15967,"mutability":"mutable","name":"fee","nameLocation":"4734:3:93","nodeType":"VariableDeclaration","scope":16096,"src":"4726:11:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15966,"name":"uint256","nodeType":"ElementaryTypeName","src":"4726:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15969,"mutability":"mutable","name":"protocolFeeBps","nameLocation":"4751:14:93","nodeType":"VariableDeclaration","scope":16096,"src":"4743:22:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15968,"name":"uint256","nodeType":"ElementaryTypeName","src":"4743:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4638:131:93"},"returnParameters":{"id":15973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16096,"src":"4788:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15971,"name":"uint256","nodeType":"ElementaryTypeName","src":"4788:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4787:9:93"},"scope":16097,"src":"4610:1155:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":16098,"src":"837:4930:93","usedErrors":[]}],"src":"37:5731:93"},"id":93},"contracts/protocol/libraries/logic/CalldataLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/CalldataLogic.sol","exportedSymbols":{"CalldataLogic":[16514]},"id":16515,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":16099,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:94"},{"abstract":false,"baseContracts":[],"canonicalName":"CalldataLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":16100,"nodeType":"StructuredDocumentation","src":"63:166:94","text":" @title CalldataLogic library\n @author Aave\n @notice Library to decode calldata, used to optimize calldata size in L2Pool for transaction cost reduction"},"fullyImplemented":true,"id":16514,"linearizedBaseContracts":[16514],"name":"CalldataLogic","nameLocation":"238:13:94","nodeType":"ContractDefinition","nodes":[{"body":{"id":16133,"nodeType":"Block","src":"709:306:94","statements":[{"assignments":[16117],"declarations":[{"constant":false,"id":16117,"mutability":"mutable","name":"assetId","nameLocation":"722:7:94","nodeType":"VariableDeclaration","scope":16133,"src":"715:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16116,"name":"uint16","nodeType":"ElementaryTypeName","src":"715:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16118,"nodeType":"VariableDeclarationStatement","src":"715:14:94"},{"assignments":[16120],"declarations":[{"constant":false,"id":16120,"mutability":"mutable","name":"amount","nameLocation":"743:6:94","nodeType":"VariableDeclaration","scope":16133,"src":"735:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16119,"name":"uint256","nodeType":"ElementaryTypeName","src":"735:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16121,"nodeType":"VariableDeclarationStatement","src":"735:14:94"},{"assignments":[16123],"declarations":[{"constant":false,"id":16123,"mutability":"mutable","name":"referralCode","nameLocation":"762:12:94","nodeType":"VariableDeclaration","scope":16133,"src":"755:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16122,"name":"uint16","nodeType":"ElementaryTypeName","src":"755:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16124,"nodeType":"VariableDeclarationStatement","src":"755:19:94"},{"AST":{"nodeType":"YulBlock","src":"790:163:94","statements":[{"nodeType":"YulAssignment","src":"798:28:94","value":{"arguments":[{"name":"args","nodeType":"YulIdentifier","src":"813:4:94"},{"kind":"number","nodeType":"YulLiteral","src":"819:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"809:3:94"},"nodeType":"YulFunctionCall","src":"809:17:94"},"variableNames":[{"name":"assetId","nodeType":"YulIdentifier","src":"798:7:94"}]},{"nodeType":"YulAssignment","src":"833:64:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"851:2:94","type":"","value":"16"},{"name":"args","nodeType":"YulIdentifier","src":"855:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"847:3:94"},"nodeType":"YulFunctionCall","src":"847:13:94"},{"kind":"number","nodeType":"YulLiteral","src":"862:34:94","type":"","value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"843:3:94"},"nodeType":"YulFunctionCall","src":"843:54:94"},"variableNames":[{"name":"amount","nodeType":"YulIdentifier","src":"833:6:94"}]},{"nodeType":"YulAssignment","src":"904:43:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"928:3:94","type":"","value":"144"},{"name":"args","nodeType":"YulIdentifier","src":"933:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"924:3:94"},"nodeType":"YulFunctionCall","src":"924:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"940:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"920:3:94"},"nodeType":"YulFunctionCall","src":"920:27:94"},"variableNames":[{"name":"referralCode","nodeType":"YulIdentifier","src":"904:12:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16120,"isOffset":false,"isSlot":false,"src":"833:6:94","valueSize":1},{"declaration":16107,"isOffset":false,"isSlot":false,"src":"813:4:94","valueSize":1},{"declaration":16107,"isOffset":false,"isSlot":false,"src":"855:4:94","valueSize":1},{"declaration":16107,"isOffset":false,"isSlot":false,"src":"933:4:94","valueSize":1},{"declaration":16117,"isOffset":false,"isSlot":false,"src":"798:7:94","valueSize":1},{"declaration":16123,"isOffset":false,"isSlot":false,"src":"904:12:94","valueSize":1}],"id":16125,"nodeType":"InlineAssembly","src":"781:172:94"},{"expression":{"components":[{"baseExpression":{"id":16126,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16105,"src":"966:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16128,"indexExpression":{"id":16127,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16117,"src":"979:7:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"966:21:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16129,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16120,"src":"989:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16130,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16123,"src":"997:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"id":16131,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"965:45:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint16_$","typeString":"tuple(address,uint256,uint16)"}},"functionReturnParameters":16115,"id":16132,"nodeType":"Return","src":"958:52:94"}]},"documentation":{"id":16101,"nodeType":"StructuredDocumentation","src":"256:297:94","text":" @notice Decodes compressed supply params to standard params\n @param reservesList The addresses of all the active reserves\n @param args The packed supply params\n @return The address of the underlying reserve\n @return The amount to supply\n @return The referralCode"},"id":16134,"implemented":true,"kind":"function","modifiers":[],"name":"decodeSupplyParams","nameLocation":"565:18:94","nodeType":"FunctionDefinition","parameters":{"id":16108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16105,"mutability":"mutable","name":"reservesList","nameLocation":"625:12:94","nodeType":"VariableDeclaration","scope":16134,"src":"589:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16104,"keyType":{"id":16102,"name":"uint256","nodeType":"ElementaryTypeName","src":"597:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"589:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16103,"name":"address","nodeType":"ElementaryTypeName","src":"608:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16107,"mutability":"mutable","name":"args","nameLocation":"651:4:94","nodeType":"VariableDeclaration","scope":16134,"src":"643:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16106,"name":"bytes32","nodeType":"ElementaryTypeName","src":"643:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"583:76:94"},"returnParameters":{"id":16115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16110,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16134,"src":"683:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16109,"name":"address","nodeType":"ElementaryTypeName","src":"683:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16134,"src":"692:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16111,"name":"uint256","nodeType":"ElementaryTypeName","src":"692:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16114,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16134,"src":"701:6:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16113,"name":"uint16","nodeType":"ElementaryTypeName","src":"701:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"682:26:94"},"scope":16514,"src":"556:459:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16179,"nodeType":"Block","src":"1624:322:94","statements":[{"assignments":[16155],"declarations":[{"constant":false,"id":16155,"mutability":"mutable","name":"deadline","nameLocation":"1638:8:94","nodeType":"VariableDeclaration","scope":16179,"src":"1630:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16154,"name":"uint256","nodeType":"ElementaryTypeName","src":"1630:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16156,"nodeType":"VariableDeclarationStatement","src":"1630:16:94"},{"assignments":[16158],"declarations":[{"constant":false,"id":16158,"mutability":"mutable","name":"permitV","nameLocation":"1658:7:94","nodeType":"VariableDeclaration","scope":16179,"src":"1652:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":16157,"name":"uint8","nodeType":"ElementaryTypeName","src":"1652:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":16159,"nodeType":"VariableDeclarationStatement","src":"1652:13:94"},{"AST":{"nodeType":"YulBlock","src":"1681:100:94","statements":[{"nodeType":"YulAssignment","src":"1689:43:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1709:3:94","type":"","value":"160"},{"name":"args","nodeType":"YulIdentifier","src":"1714:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1705:3:94"},"nodeType":"YulFunctionCall","src":"1705:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"1721:10:94","type":"","value":"0xFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1701:3:94"},"nodeType":"YulFunctionCall","src":"1701:31:94"},"variableNames":[{"name":"deadline","nodeType":"YulIdentifier","src":"1689:8:94"}]},{"nodeType":"YulAssignment","src":"1739:36:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1758:3:94","type":"","value":"192"},{"name":"args","nodeType":"YulIdentifier","src":"1763:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1754:3:94"},"nodeType":"YulFunctionCall","src":"1754:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"1770:4:94","type":"","value":"0xFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1750:3:94"},"nodeType":"YulFunctionCall","src":"1750:25:94"},"variableNames":[{"name":"permitV","nodeType":"YulIdentifier","src":"1739:7:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16141,"isOffset":false,"isSlot":false,"src":"1714:4:94","valueSize":1},{"declaration":16141,"isOffset":false,"isSlot":false,"src":"1763:4:94","valueSize":1},{"declaration":16155,"isOffset":false,"isSlot":false,"src":"1689:8:94","valueSize":1},{"declaration":16158,"isOffset":false,"isSlot":false,"src":"1739:7:94","valueSize":1}],"id":16160,"nodeType":"InlineAssembly","src":"1672:109:94"},{"assignments":[16162,16164,16166],"declarations":[{"constant":false,"id":16162,"mutability":"mutable","name":"asset","nameLocation":"1795:5:94","nodeType":"VariableDeclaration","scope":16179,"src":"1787:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16161,"name":"address","nodeType":"ElementaryTypeName","src":"1787:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16164,"mutability":"mutable","name":"amount","nameLocation":"1810:6:94","nodeType":"VariableDeclaration","scope":16179,"src":"1802:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16163,"name":"uint256","nodeType":"ElementaryTypeName","src":"1802:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16166,"mutability":"mutable","name":"referralCode","nameLocation":"1825:12:94","nodeType":"VariableDeclaration","scope":16179,"src":"1818:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16165,"name":"uint16","nodeType":"ElementaryTypeName","src":"1818:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16171,"initialValue":{"arguments":[{"id":16168,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16139,"src":"1860:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":16169,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16141,"src":"1874:4:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16167,"name":"decodeSupplyParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16134,"src":"1841:18:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$_t_uint16_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256,uint16)"}},"id":16170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1841:38:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint16_$","typeString":"tuple(address,uint256,uint16)"}},"nodeType":"VariableDeclarationStatement","src":"1786:93:94"},{"expression":{"components":[{"id":16172,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16162,"src":"1894:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16173,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16164,"src":"1901:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16174,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16166,"src":"1909:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":16175,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16155,"src":"1923:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16176,"name":"permitV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16158,"src":"1933:7:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":16177,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1893:48:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint16_$_t_uint256_$_t_uint8_$","typeString":"tuple(address,uint256,uint16,uint256,uint8)"}},"functionReturnParameters":16153,"id":16178,"nodeType":"Return","src":"1886:55:94"}]},"documentation":{"id":16135,"nodeType":"StructuredDocumentation","src":"1019:423:94","text":" @notice Decodes compressed supply params to standard params along with permit params\n @param reservesList The addresses of all the active reserves\n @param args The packed supply with permit params\n @return The address of the underlying reserve\n @return The amount to supply\n @return The referralCode\n @return The deadline of the permit\n @return The V value of the permit signature"},"id":16180,"implemented":true,"kind":"function","modifiers":[],"name":"decodeSupplyWithPermitParams","nameLocation":"1454:28:94","nodeType":"FunctionDefinition","parameters":{"id":16142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16139,"mutability":"mutable","name":"reservesList","nameLocation":"1524:12:94","nodeType":"VariableDeclaration","scope":16180,"src":"1488:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16138,"keyType":{"id":16136,"name":"uint256","nodeType":"ElementaryTypeName","src":"1496:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1488:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16137,"name":"address","nodeType":"ElementaryTypeName","src":"1507:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16141,"mutability":"mutable","name":"args","nameLocation":"1550:4:94","nodeType":"VariableDeclaration","scope":16180,"src":"1542:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16140,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1542:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1482:76:94"},"returnParameters":{"id":16153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16144,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16180,"src":"1582:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16143,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16146,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16180,"src":"1591:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16145,"name":"uint256","nodeType":"ElementaryTypeName","src":"1591:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16148,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16180,"src":"1600:6:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16147,"name":"uint16","nodeType":"ElementaryTypeName","src":"1600:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":16150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16180,"src":"1608:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16149,"name":"uint256","nodeType":"ElementaryTypeName","src":"1608:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16180,"src":"1617:5:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":16151,"name":"uint8","nodeType":"ElementaryTypeName","src":"1617:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1581:42:94"},"scope":16514,"src":"1445:501:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16224,"nodeType":"Block","src":"2373:295:94","statements":[{"assignments":[16195],"declarations":[{"constant":false,"id":16195,"mutability":"mutable","name":"assetId","nameLocation":"2386:7:94","nodeType":"VariableDeclaration","scope":16224,"src":"2379:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16194,"name":"uint16","nodeType":"ElementaryTypeName","src":"2379:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16196,"nodeType":"VariableDeclarationStatement","src":"2379:14:94"},{"assignments":[16198],"declarations":[{"constant":false,"id":16198,"mutability":"mutable","name":"amount","nameLocation":"2407:6:94","nodeType":"VariableDeclaration","scope":16224,"src":"2399:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16197,"name":"uint256","nodeType":"ElementaryTypeName","src":"2399:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16199,"nodeType":"VariableDeclarationStatement","src":"2399:14:94"},{"AST":{"nodeType":"YulBlock","src":"2428:113:94","statements":[{"nodeType":"YulAssignment","src":"2436:28:94","value":{"arguments":[{"name":"args","nodeType":"YulIdentifier","src":"2451:4:94"},{"kind":"number","nodeType":"YulLiteral","src":"2457:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2447:3:94"},"nodeType":"YulFunctionCall","src":"2447:17:94"},"variableNames":[{"name":"assetId","nodeType":"YulIdentifier","src":"2436:7:94"}]},{"nodeType":"YulAssignment","src":"2471:64:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2489:2:94","type":"","value":"16"},{"name":"args","nodeType":"YulIdentifier","src":"2493:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2485:3:94"},"nodeType":"YulFunctionCall","src":"2485:13:94"},{"kind":"number","nodeType":"YulLiteral","src":"2500:34:94","type":"","value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2481:3:94"},"nodeType":"YulFunctionCall","src":"2481:54:94"},"variableNames":[{"name":"amount","nodeType":"YulIdentifier","src":"2471:6:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16198,"isOffset":false,"isSlot":false,"src":"2471:6:94","valueSize":1},{"declaration":16187,"isOffset":false,"isSlot":false,"src":"2451:4:94","valueSize":1},{"declaration":16187,"isOffset":false,"isSlot":false,"src":"2493:4:94","valueSize":1},{"declaration":16195,"isOffset":false,"isSlot":false,"src":"2436:7:94","valueSize":1}],"id":16200,"nodeType":"InlineAssembly","src":"2419:122:94"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16201,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16198,"src":"2550:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":16204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2565:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":16203,"name":"uint128","nodeType":"ElementaryTypeName","src":"2565:7:94","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":16202,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2560:4:94","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2560:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":16206,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2560:17:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2550:27:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16217,"nodeType":"IfStatement","src":"2546:74:94","trueBody":{"id":16216,"nodeType":"Block","src":"2579:41:94","statements":[{"expression":{"id":16214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16208,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16198,"src":"2587:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":16211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2601:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16210,"name":"uint256","nodeType":"ElementaryTypeName","src":"2601:7:94","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":16209,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2596:4:94","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2596:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":16213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2596:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2587:26:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16215,"nodeType":"ExpressionStatement","src":"2587:26:94"}]}},{"expression":{"components":[{"baseExpression":{"id":16218,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16185,"src":"2633:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16220,"indexExpression":{"id":16219,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16195,"src":"2646:7:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2633:21:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16221,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16198,"src":"2656:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16222,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2632:31:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":16193,"id":16223,"nodeType":"Return","src":"2625:38:94"}]},"documentation":{"id":16181,"nodeType":"StructuredDocumentation","src":"1950:273:94","text":" @notice Decodes compressed withdraw params to standard params\n @param reservesList The addresses of all the active reserves\n @param args The packed withdraw params\n @return The address of the underlying reserve\n @return The amount to withdraw"},"id":16225,"implemented":true,"kind":"function","modifiers":[],"name":"decodeWithdrawParams","nameLocation":"2235:20:94","nodeType":"FunctionDefinition","parameters":{"id":16188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16185,"mutability":"mutable","name":"reservesList","nameLocation":"2297:12:94","nodeType":"VariableDeclaration","scope":16225,"src":"2261:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16184,"keyType":{"id":16182,"name":"uint256","nodeType":"ElementaryTypeName","src":"2269:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2261:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16183,"name":"address","nodeType":"ElementaryTypeName","src":"2280:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16187,"mutability":"mutable","name":"args","nameLocation":"2323:4:94","nodeType":"VariableDeclaration","scope":16225,"src":"2315:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16186,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2315:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2255:76:94"},"returnParameters":{"id":16193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16225,"src":"2355:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16189,"name":"address","nodeType":"ElementaryTypeName","src":"2355:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16192,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16225,"src":"2364:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16191,"name":"uint256","nodeType":"ElementaryTypeName","src":"2364:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2354:18:94"},"scope":16514,"src":"2226:442:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16264,"nodeType":"Block","src":"3205:407:94","statements":[{"assignments":[16244],"declarations":[{"constant":false,"id":16244,"mutability":"mutable","name":"assetId","nameLocation":"3218:7:94","nodeType":"VariableDeclaration","scope":16264,"src":"3211:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16243,"name":"uint16","nodeType":"ElementaryTypeName","src":"3211:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16245,"nodeType":"VariableDeclarationStatement","src":"3211:14:94"},{"assignments":[16247],"declarations":[{"constant":false,"id":16247,"mutability":"mutable","name":"amount","nameLocation":"3239:6:94","nodeType":"VariableDeclaration","scope":16264,"src":"3231:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16246,"name":"uint256","nodeType":"ElementaryTypeName","src":"3231:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16248,"nodeType":"VariableDeclarationStatement","src":"3231:14:94"},{"assignments":[16250],"declarations":[{"constant":false,"id":16250,"mutability":"mutable","name":"interestRateMode","nameLocation":"3259:16:94","nodeType":"VariableDeclaration","scope":16264,"src":"3251:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16249,"name":"uint256","nodeType":"ElementaryTypeName","src":"3251:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16251,"nodeType":"VariableDeclarationStatement","src":"3251:24:94"},{"assignments":[16253],"declarations":[{"constant":false,"id":16253,"mutability":"mutable","name":"referralCode","nameLocation":"3288:12:94","nodeType":"VariableDeclaration","scope":16264,"src":"3281:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16252,"name":"uint16","nodeType":"ElementaryTypeName","src":"3281:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16254,"nodeType":"VariableDeclarationStatement","src":"3281:19:94"},{"AST":{"nodeType":"YulBlock","src":"3316:215:94","statements":[{"nodeType":"YulAssignment","src":"3324:28:94","value":{"arguments":[{"name":"args","nodeType":"YulIdentifier","src":"3339:4:94"},{"kind":"number","nodeType":"YulLiteral","src":"3345:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3335:3:94"},"nodeType":"YulFunctionCall","src":"3335:17:94"},"variableNames":[{"name":"assetId","nodeType":"YulIdentifier","src":"3324:7:94"}]},{"nodeType":"YulAssignment","src":"3359:64:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3377:2:94","type":"","value":"16"},{"name":"args","nodeType":"YulIdentifier","src":"3381:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3373:3:94"},"nodeType":"YulFunctionCall","src":"3373:13:94"},{"kind":"number","nodeType":"YulLiteral","src":"3388:34:94","type":"","value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3369:3:94"},"nodeType":"YulFunctionCall","src":"3369:54:94"},"variableNames":[{"name":"amount","nodeType":"YulIdentifier","src":"3359:6:94"}]},{"nodeType":"YulAssignment","src":"3430:45:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3458:3:94","type":"","value":"144"},{"name":"args","nodeType":"YulIdentifier","src":"3463:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3454:3:94"},"nodeType":"YulFunctionCall","src":"3454:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"3470:4:94","type":"","value":"0xFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3450:3:94"},"nodeType":"YulFunctionCall","src":"3450:25:94"},"variableNames":[{"name":"interestRateMode","nodeType":"YulIdentifier","src":"3430:16:94"}]},{"nodeType":"YulAssignment","src":"3482:43:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3506:3:94","type":"","value":"152"},{"name":"args","nodeType":"YulIdentifier","src":"3511:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3502:3:94"},"nodeType":"YulFunctionCall","src":"3502:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"3518:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3498:3:94"},"nodeType":"YulFunctionCall","src":"3498:27:94"},"variableNames":[{"name":"referralCode","nodeType":"YulIdentifier","src":"3482:12:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16247,"isOffset":false,"isSlot":false,"src":"3359:6:94","valueSize":1},{"declaration":16232,"isOffset":false,"isSlot":false,"src":"3339:4:94","valueSize":1},{"declaration":16232,"isOffset":false,"isSlot":false,"src":"3381:4:94","valueSize":1},{"declaration":16232,"isOffset":false,"isSlot":false,"src":"3463:4:94","valueSize":1},{"declaration":16232,"isOffset":false,"isSlot":false,"src":"3511:4:94","valueSize":1},{"declaration":16244,"isOffset":false,"isSlot":false,"src":"3324:7:94","valueSize":1},{"declaration":16250,"isOffset":false,"isSlot":false,"src":"3430:16:94","valueSize":1},{"declaration":16253,"isOffset":false,"isSlot":false,"src":"3482:12:94","valueSize":1}],"id":16255,"nodeType":"InlineAssembly","src":"3307:224:94"},{"expression":{"components":[{"baseExpression":{"id":16256,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16230,"src":"3545:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16258,"indexExpression":{"id":16257,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16244,"src":"3558:7:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3545:21:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16259,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16247,"src":"3568:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16260,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16250,"src":"3576:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16261,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16253,"src":"3594:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"id":16262,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3544:63:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$","typeString":"tuple(address,uint256,uint256,uint16)"}},"functionReturnParameters":16242,"id":16263,"nodeType":"Return","src":"3537:70:94"}]},"documentation":{"id":16226,"nodeType":"StructuredDocumentation","src":"2672:368:94","text":" @notice Decodes compressed borrow params to standard params\n @param reservesList The addresses of all the active reserves\n @param args The packed borrow params\n @return The address of the underlying reserve\n @return The amount to borrow\n @return The interestRateMode, 1 for stable or 2 for variable debt\n @return The referralCode"},"id":16265,"implemented":true,"kind":"function","modifiers":[],"name":"decodeBorrowParams","nameLocation":"3052:18:94","nodeType":"FunctionDefinition","parameters":{"id":16233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16230,"mutability":"mutable","name":"reservesList","nameLocation":"3112:12:94","nodeType":"VariableDeclaration","scope":16265,"src":"3076:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16229,"keyType":{"id":16227,"name":"uint256","nodeType":"ElementaryTypeName","src":"3084:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"3076:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16228,"name":"address","nodeType":"ElementaryTypeName","src":"3095:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16232,"mutability":"mutable","name":"args","nameLocation":"3138:4:94","nodeType":"VariableDeclaration","scope":16265,"src":"3130:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16231,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3130:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3070:76:94"},"returnParameters":{"id":16242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16265,"src":"3170:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16234,"name":"address","nodeType":"ElementaryTypeName","src":"3170:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16265,"src":"3179:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16236,"name":"uint256","nodeType":"ElementaryTypeName","src":"3179:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16239,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16265,"src":"3188:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16238,"name":"uint256","nodeType":"ElementaryTypeName","src":"3188:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16265,"src":"3197:6:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16240,"name":"uint16","nodeType":"ElementaryTypeName","src":"3197:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"3169:35:94"},"scope":16514,"src":"3043:569:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16315,"nodeType":"Block","src":"4107:398:94","statements":[{"assignments":[16282],"declarations":[{"constant":false,"id":16282,"mutability":"mutable","name":"assetId","nameLocation":"4120:7:94","nodeType":"VariableDeclaration","scope":16315,"src":"4113:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16281,"name":"uint16","nodeType":"ElementaryTypeName","src":"4113:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16283,"nodeType":"VariableDeclarationStatement","src":"4113:14:94"},{"assignments":[16285],"declarations":[{"constant":false,"id":16285,"mutability":"mutable","name":"amount","nameLocation":"4141:6:94","nodeType":"VariableDeclaration","scope":16315,"src":"4133:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16284,"name":"uint256","nodeType":"ElementaryTypeName","src":"4133:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16286,"nodeType":"VariableDeclarationStatement","src":"4133:14:94"},{"assignments":[16288],"declarations":[{"constant":false,"id":16288,"mutability":"mutable","name":"interestRateMode","nameLocation":"4161:16:94","nodeType":"VariableDeclaration","scope":16315,"src":"4153:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16287,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16289,"nodeType":"VariableDeclarationStatement","src":"4153:24:94"},{"AST":{"nodeType":"YulBlock","src":"4193:165:94","statements":[{"nodeType":"YulAssignment","src":"4201:28:94","value":{"arguments":[{"name":"args","nodeType":"YulIdentifier","src":"4216:4:94"},{"kind":"number","nodeType":"YulLiteral","src":"4222:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4212:3:94"},"nodeType":"YulFunctionCall","src":"4212:17:94"},"variableNames":[{"name":"assetId","nodeType":"YulIdentifier","src":"4201:7:94"}]},{"nodeType":"YulAssignment","src":"4236:64:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4254:2:94","type":"","value":"16"},{"name":"args","nodeType":"YulIdentifier","src":"4258:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4250:3:94"},"nodeType":"YulFunctionCall","src":"4250:13:94"},{"kind":"number","nodeType":"YulLiteral","src":"4265:34:94","type":"","value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4246:3:94"},"nodeType":"YulFunctionCall","src":"4246:54:94"},"variableNames":[{"name":"amount","nodeType":"YulIdentifier","src":"4236:6:94"}]},{"nodeType":"YulAssignment","src":"4307:45:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4335:3:94","type":"","value":"144"},{"name":"args","nodeType":"YulIdentifier","src":"4340:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4331:3:94"},"nodeType":"YulFunctionCall","src":"4331:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"4347:4:94","type":"","value":"0xFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4327:3:94"},"nodeType":"YulFunctionCall","src":"4327:25:94"},"variableNames":[{"name":"interestRateMode","nodeType":"YulIdentifier","src":"4307:16:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16285,"isOffset":false,"isSlot":false,"src":"4236:6:94","valueSize":1},{"declaration":16272,"isOffset":false,"isSlot":false,"src":"4216:4:94","valueSize":1},{"declaration":16272,"isOffset":false,"isSlot":false,"src":"4258:4:94","valueSize":1},{"declaration":16272,"isOffset":false,"isSlot":false,"src":"4340:4:94","valueSize":1},{"declaration":16282,"isOffset":false,"isSlot":false,"src":"4201:7:94","valueSize":1},{"declaration":16288,"isOffset":false,"isSlot":false,"src":"4307:16:94","valueSize":1}],"id":16290,"nodeType":"InlineAssembly","src":"4184:174:94"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16291,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16285,"src":"4368:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":16294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4383:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":16293,"name":"uint128","nodeType":"ElementaryTypeName","src":"4383:7:94","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":16292,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4378:4:94","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4378:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":16296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"4378:17:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4368:27:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16307,"nodeType":"IfStatement","src":"4364:74:94","trueBody":{"id":16306,"nodeType":"Block","src":"4397:41:94","statements":[{"expression":{"id":16304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16298,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16285,"src":"4405:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":16301,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4419:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16300,"name":"uint256","nodeType":"ElementaryTypeName","src":"4419:7:94","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":16299,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4414:4:94","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4414:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":16303,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"4414:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4405:26:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16305,"nodeType":"ExpressionStatement","src":"4405:26:94"}]}},{"expression":{"components":[{"baseExpression":{"id":16308,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16270,"src":"4452:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16310,"indexExpression":{"id":16309,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16282,"src":"4465:7:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4452:21:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16311,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16285,"src":"4475:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16312,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16288,"src":"4483:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16313,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4451:49:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$","typeString":"tuple(address,uint256,uint256)"}},"functionReturnParameters":16280,"id":16314,"nodeType":"Return","src":"4444:56:94"}]},"documentation":{"id":16266,"nodeType":"StructuredDocumentation","src":"3616:335:94","text":" @notice Decodes compressed repay params to standard params\n @param reservesList The addresses of all the active reserves\n @param args The packed repay params\n @return The address of the underlying reserve\n @return The amount to repay\n @return The interestRateMode, 1 for stable or 2 for variable debt"},"id":16316,"implemented":true,"kind":"function","modifiers":[],"name":"decodeRepayParams","nameLocation":"3963:17:94","nodeType":"FunctionDefinition","parameters":{"id":16273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16270,"mutability":"mutable","name":"reservesList","nameLocation":"4022:12:94","nodeType":"VariableDeclaration","scope":16316,"src":"3986:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16269,"keyType":{"id":16267,"name":"uint256","nodeType":"ElementaryTypeName","src":"3994:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"3986:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16268,"name":"address","nodeType":"ElementaryTypeName","src":"4005:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16272,"mutability":"mutable","name":"args","nameLocation":"4048:4:94","nodeType":"VariableDeclaration","scope":16316,"src":"4040:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16271,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4040:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3980:76:94"},"returnParameters":{"id":16280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16316,"src":"4080:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16274,"name":"address","nodeType":"ElementaryTypeName","src":"4080:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16277,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16316,"src":"4089:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16276,"name":"uint256","nodeType":"ElementaryTypeName","src":"4089:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16279,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16316,"src":"4098:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16278,"name":"uint256","nodeType":"ElementaryTypeName","src":"4098:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4079:27:94"},"scope":16514,"src":"3954:551:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16361,"nodeType":"Block","src":"5152:349:94","statements":[{"assignments":[16337],"declarations":[{"constant":false,"id":16337,"mutability":"mutable","name":"deadline","nameLocation":"5166:8:94","nodeType":"VariableDeclaration","scope":16361,"src":"5158:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16336,"name":"uint256","nodeType":"ElementaryTypeName","src":"5158:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16338,"nodeType":"VariableDeclarationStatement","src":"5158:16:94"},{"assignments":[16340],"declarations":[{"constant":false,"id":16340,"mutability":"mutable","name":"permitV","nameLocation":"5186:7:94","nodeType":"VariableDeclaration","scope":16361,"src":"5180:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":16339,"name":"uint8","nodeType":"ElementaryTypeName","src":"5180:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":16341,"nodeType":"VariableDeclarationStatement","src":"5180:13:94"},{"assignments":[16343,16345,16347],"declarations":[{"constant":false,"id":16343,"mutability":"mutable","name":"asset","nameLocation":"5209:5:94","nodeType":"VariableDeclaration","scope":16361,"src":"5201:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16342,"name":"address","nodeType":"ElementaryTypeName","src":"5201:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16345,"mutability":"mutable","name":"amount","nameLocation":"5224:6:94","nodeType":"VariableDeclaration","scope":16361,"src":"5216:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16344,"name":"uint256","nodeType":"ElementaryTypeName","src":"5216:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16347,"mutability":"mutable","name":"interestRateMode","nameLocation":"5240:16:94","nodeType":"VariableDeclaration","scope":16361,"src":"5232:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16346,"name":"uint256","nodeType":"ElementaryTypeName","src":"5232:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16352,"initialValue":{"arguments":[{"id":16349,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16321,"src":"5285:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":16350,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16323,"src":"5305:4:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16348,"name":"decodeRepayParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16316,"src":"5260:17:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$_t_uint256_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256,uint256)"}},"id":16351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5260:55:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$","typeString":"tuple(address,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5200:115:94"},{"AST":{"nodeType":"YulBlock","src":"5331:100:94","statements":[{"nodeType":"YulAssignment","src":"5339:43:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5359:3:94","type":"","value":"152"},{"name":"args","nodeType":"YulIdentifier","src":"5364:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"5355:3:94"},"nodeType":"YulFunctionCall","src":"5355:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"5371:10:94","type":"","value":"0xFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5351:3:94"},"nodeType":"YulFunctionCall","src":"5351:31:94"},"variableNames":[{"name":"deadline","nodeType":"YulIdentifier","src":"5339:8:94"}]},{"nodeType":"YulAssignment","src":"5389:36:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5408:3:94","type":"","value":"184"},{"name":"args","nodeType":"YulIdentifier","src":"5413:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"5404:3:94"},"nodeType":"YulFunctionCall","src":"5404:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"5420:4:94","type":"","value":"0xFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5400:3:94"},"nodeType":"YulFunctionCall","src":"5400:25:94"},"variableNames":[{"name":"permitV","nodeType":"YulIdentifier","src":"5389:7:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16323,"isOffset":false,"isSlot":false,"src":"5364:4:94","valueSize":1},{"declaration":16323,"isOffset":false,"isSlot":false,"src":"5413:4:94","valueSize":1},{"declaration":16337,"isOffset":false,"isSlot":false,"src":"5339:8:94","valueSize":1},{"declaration":16340,"isOffset":false,"isSlot":false,"src":"5389:7:94","valueSize":1}],"id":16353,"nodeType":"InlineAssembly","src":"5322:109:94"},{"expression":{"components":[{"id":16354,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16343,"src":"5445:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16355,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16345,"src":"5452:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16356,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16347,"src":"5460:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16357,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16337,"src":"5478:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16358,"name":"permitV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16340,"src":"5488:7:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":16359,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5444:52:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint8_$","typeString":"tuple(address,uint256,uint256,uint256,uint8)"}},"functionReturnParameters":16335,"id":16360,"nodeType":"Return","src":"5437:59:94"}]},"documentation":{"id":16317,"nodeType":"StructuredDocumentation","src":"4509:461:94","text":" @notice Decodes compressed repay params to standard params along with permit params\n @param reservesList The addresses of all the active reserves\n @param args The packed repay with permit params\n @return The address of the underlying reserve\n @return The amount to repay\n @return The interestRateMode, 1 for stable or 2 for variable debt\n @return The deadline of the permit\n @return The V value of the permit signature"},"id":16362,"implemented":true,"kind":"function","modifiers":[],"name":"decodeRepayWithPermitParams","nameLocation":"4982:27:94","nodeType":"FunctionDefinition","parameters":{"id":16324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16321,"mutability":"mutable","name":"reservesList","nameLocation":"5051:12:94","nodeType":"VariableDeclaration","scope":16362,"src":"5015:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16320,"keyType":{"id":16318,"name":"uint256","nodeType":"ElementaryTypeName","src":"5023:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5015:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16319,"name":"address","nodeType":"ElementaryTypeName","src":"5034:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16323,"mutability":"mutable","name":"args","nameLocation":"5077:4:94","nodeType":"VariableDeclaration","scope":16362,"src":"5069:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16322,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5069:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5009:76:94"},"returnParameters":{"id":16335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16362,"src":"5109:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16325,"name":"address","nodeType":"ElementaryTypeName","src":"5109:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16362,"src":"5118:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16327,"name":"uint256","nodeType":"ElementaryTypeName","src":"5118:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16362,"src":"5127:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16329,"name":"uint256","nodeType":"ElementaryTypeName","src":"5127:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16332,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16362,"src":"5136:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16331,"name":"uint256","nodeType":"ElementaryTypeName","src":"5136:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16362,"src":"5145:5:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":16333,"name":"uint8","nodeType":"ElementaryTypeName","src":"5145:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5108:43:94"},"scope":16514,"src":"4973:528:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16389,"nodeType":"Block","src":"5998:218:94","statements":[{"assignments":[16377],"declarations":[{"constant":false,"id":16377,"mutability":"mutable","name":"assetId","nameLocation":"6011:7:94","nodeType":"VariableDeclaration","scope":16389,"src":"6004:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16376,"name":"uint16","nodeType":"ElementaryTypeName","src":"6004:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16378,"nodeType":"VariableDeclarationStatement","src":"6004:14:94"},{"assignments":[16380],"declarations":[{"constant":false,"id":16380,"mutability":"mutable","name":"interestRateMode","nameLocation":"6032:16:94","nodeType":"VariableDeclaration","scope":16389,"src":"6024:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16379,"name":"uint256","nodeType":"ElementaryTypeName","src":"6024:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16381,"nodeType":"VariableDeclarationStatement","src":"6024:24:94"},{"AST":{"nodeType":"YulBlock","src":"6064:93:94","statements":[{"nodeType":"YulAssignment","src":"6072:28:94","value":{"arguments":[{"name":"args","nodeType":"YulIdentifier","src":"6087:4:94"},{"kind":"number","nodeType":"YulLiteral","src":"6093:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6083:3:94"},"nodeType":"YulFunctionCall","src":"6083:17:94"},"variableNames":[{"name":"assetId","nodeType":"YulIdentifier","src":"6072:7:94"}]},{"nodeType":"YulAssignment","src":"6107:44:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6135:2:94","type":"","value":"16"},{"name":"args","nodeType":"YulIdentifier","src":"6139:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6131:3:94"},"nodeType":"YulFunctionCall","src":"6131:13:94"},{"kind":"number","nodeType":"YulLiteral","src":"6146:4:94","type":"","value":"0xFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6127:3:94"},"nodeType":"YulFunctionCall","src":"6127:24:94"},"variableNames":[{"name":"interestRateMode","nodeType":"YulIdentifier","src":"6107:16:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16369,"isOffset":false,"isSlot":false,"src":"6087:4:94","valueSize":1},{"declaration":16369,"isOffset":false,"isSlot":false,"src":"6139:4:94","valueSize":1},{"declaration":16377,"isOffset":false,"isSlot":false,"src":"6072:7:94","valueSize":1},{"declaration":16380,"isOffset":false,"isSlot":false,"src":"6107:16:94","valueSize":1}],"id":16382,"nodeType":"InlineAssembly","src":"6055:102:94"},{"expression":{"components":[{"baseExpression":{"id":16383,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16367,"src":"6171:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16385,"indexExpression":{"id":16384,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16377,"src":"6184:7:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6171:21:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16386,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16380,"src":"6194:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16387,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6170:41:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":16375,"id":16388,"nodeType":"Return","src":"6163:48:94"}]},"documentation":{"id":16363,"nodeType":"StructuredDocumentation","src":"5505:333:94","text":" @notice Decodes compressed swap borrow rate mode params to standard params\n @param reservesList The addresses of all the active reserves\n @param args The packed swap borrow rate mode params\n @return The address of the underlying reserve\n @return The interest rate mode, 1 for stable 2 for variable debt"},"id":16390,"implemented":true,"kind":"function","modifiers":[],"name":"decodeSwapBorrowRateModeParams","nameLocation":"5850:30:94","nodeType":"FunctionDefinition","parameters":{"id":16370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16367,"mutability":"mutable","name":"reservesList","nameLocation":"5922:12:94","nodeType":"VariableDeclaration","scope":16390,"src":"5886:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16366,"keyType":{"id":16364,"name":"uint256","nodeType":"ElementaryTypeName","src":"5894:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5886:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16365,"name":"address","nodeType":"ElementaryTypeName","src":"5905:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16369,"mutability":"mutable","name":"args","nameLocation":"5948:4:94","nodeType":"VariableDeclaration","scope":16390,"src":"5940:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16368,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5940:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5880:76:94"},"returnParameters":{"id":16375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16372,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16390,"src":"5980:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16371,"name":"address","nodeType":"ElementaryTypeName","src":"5980:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16374,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16390,"src":"5989:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16373,"name":"uint256","nodeType":"ElementaryTypeName","src":"5989:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5979:18:94"},"scope":16514,"src":"5841:375:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16417,"nodeType":"Block","src":"6714:218:94","statements":[{"assignments":[16405],"declarations":[{"constant":false,"id":16405,"mutability":"mutable","name":"assetId","nameLocation":"6727:7:94","nodeType":"VariableDeclaration","scope":16417,"src":"6720:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16404,"name":"uint16","nodeType":"ElementaryTypeName","src":"6720:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16406,"nodeType":"VariableDeclarationStatement","src":"6720:14:94"},{"assignments":[16408],"declarations":[{"constant":false,"id":16408,"mutability":"mutable","name":"user","nameLocation":"6748:4:94","nodeType":"VariableDeclaration","scope":16417,"src":"6740:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16407,"name":"address","nodeType":"ElementaryTypeName","src":"6740:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16409,"nodeType":"VariableDeclarationStatement","src":"6740:12:94"},{"AST":{"nodeType":"YulBlock","src":"6767:119:94","statements":[{"nodeType":"YulAssignment","src":"6775:28:94","value":{"arguments":[{"name":"args","nodeType":"YulIdentifier","src":"6790:4:94"},{"kind":"number","nodeType":"YulLiteral","src":"6796:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6786:3:94"},"nodeType":"YulFunctionCall","src":"6786:17:94"},"variableNames":[{"name":"assetId","nodeType":"YulIdentifier","src":"6775:7:94"}]},{"nodeType":"YulAssignment","src":"6810:70:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6826:2:94","type":"","value":"16"},{"name":"args","nodeType":"YulIdentifier","src":"6830:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6822:3:94"},"nodeType":"YulFunctionCall","src":"6822:13:94"},{"kind":"number","nodeType":"YulLiteral","src":"6837:42:94","type":"","value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6818:3:94"},"nodeType":"YulFunctionCall","src":"6818:62:94"},"variableNames":[{"name":"user","nodeType":"YulIdentifier","src":"6810:4:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16397,"isOffset":false,"isSlot":false,"src":"6790:4:94","valueSize":1},{"declaration":16397,"isOffset":false,"isSlot":false,"src":"6830:4:94","valueSize":1},{"declaration":16405,"isOffset":false,"isSlot":false,"src":"6775:7:94","valueSize":1},{"declaration":16408,"isOffset":false,"isSlot":false,"src":"6810:4:94","valueSize":1}],"id":16410,"nodeType":"InlineAssembly","src":"6758:128:94"},{"expression":{"components":[{"baseExpression":{"id":16411,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16395,"src":"6899:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16413,"indexExpression":{"id":16412,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16405,"src":"6912:7:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6899:21:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16414,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16408,"src":"6922:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16415,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6898:29:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"functionReturnParameters":16403,"id":16416,"nodeType":"Return","src":"6891:36:94"}]},"documentation":{"id":16391,"nodeType":"StructuredDocumentation","src":"6220:327:94","text":" @notice Decodes compressed rebalance stable borrow rate params to standard params\n @param reservesList The addresses of all the active reserves\n @param args The packed rabalance stable borrow rate params\n @return The address of the underlying reserve\n @return The address of the user to rebalance"},"id":16418,"implemented":true,"kind":"function","modifiers":[],"name":"decodeRebalanceStableBorrowRateParams","nameLocation":"6559:37:94","nodeType":"FunctionDefinition","parameters":{"id":16398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16395,"mutability":"mutable","name":"reservesList","nameLocation":"6638:12:94","nodeType":"VariableDeclaration","scope":16418,"src":"6602:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16394,"keyType":{"id":16392,"name":"uint256","nodeType":"ElementaryTypeName","src":"6610:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6602:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16393,"name":"address","nodeType":"ElementaryTypeName","src":"6621:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16397,"mutability":"mutable","name":"args","nameLocation":"6664:4:94","nodeType":"VariableDeclaration","scope":16418,"src":"6656:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16396,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6656:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6596:76:94"},"returnParameters":{"id":16403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16418,"src":"6696:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16399,"name":"address","nodeType":"ElementaryTypeName","src":"6696:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16402,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16418,"src":"6705:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16401,"name":"address","nodeType":"ElementaryTypeName","src":"6705:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6695:18:94"},"scope":16514,"src":"6550:382:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16445,"nodeType":"Block","src":"7458:209:94","statements":[{"assignments":[16433],"declarations":[{"constant":false,"id":16433,"mutability":"mutable","name":"assetId","nameLocation":"7471:7:94","nodeType":"VariableDeclaration","scope":16445,"src":"7464:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16432,"name":"uint16","nodeType":"ElementaryTypeName","src":"7464:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16434,"nodeType":"VariableDeclarationStatement","src":"7464:14:94"},{"assignments":[16436],"declarations":[{"constant":false,"id":16436,"mutability":"mutable","name":"useAsCollateral","nameLocation":"7489:15:94","nodeType":"VariableDeclaration","scope":16445,"src":"7484:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16435,"name":"bool","nodeType":"ElementaryTypeName","src":"7484:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":16437,"nodeType":"VariableDeclarationStatement","src":"7484:20:94"},{"AST":{"nodeType":"YulBlock","src":"7519:91:94","statements":[{"nodeType":"YulAssignment","src":"7527:28:94","value":{"arguments":[{"name":"args","nodeType":"YulIdentifier","src":"7542:4:94"},{"kind":"number","nodeType":"YulLiteral","src":"7548:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7538:3:94"},"nodeType":"YulFunctionCall","src":"7538:17:94"},"variableNames":[{"name":"assetId","nodeType":"YulIdentifier","src":"7527:7:94"}]},{"nodeType":"YulAssignment","src":"7562:42:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7589:2:94","type":"","value":"16"},{"name":"args","nodeType":"YulIdentifier","src":"7593:4:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"7585:3:94"},"nodeType":"YulFunctionCall","src":"7585:13:94"},{"kind":"number","nodeType":"YulLiteral","src":"7600:3:94","type":"","value":"0x1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7581:3:94"},"nodeType":"YulFunctionCall","src":"7581:23:94"},"variableNames":[{"name":"useAsCollateral","nodeType":"YulIdentifier","src":"7562:15:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16425,"isOffset":false,"isSlot":false,"src":"7542:4:94","valueSize":1},{"declaration":16425,"isOffset":false,"isSlot":false,"src":"7593:4:94","valueSize":1},{"declaration":16433,"isOffset":false,"isSlot":false,"src":"7527:7:94","valueSize":1},{"declaration":16436,"isOffset":false,"isSlot":false,"src":"7562:15:94","valueSize":1}],"id":16438,"nodeType":"InlineAssembly","src":"7510:100:94"},{"expression":{"components":[{"baseExpression":{"id":16439,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16423,"src":"7623:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16441,"indexExpression":{"id":16440,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16433,"src":"7636:7:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7623:21:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16442,"name":"useAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16436,"src":"7646:15:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":16443,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7622:40:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_bool_$","typeString":"tuple(address,bool)"}},"functionReturnParameters":16431,"id":16444,"nodeType":"Return","src":"7615:47:94"}]},"documentation":{"id":16419,"nodeType":"StructuredDocumentation","src":"6936:354:94","text":" @notice Decodes compressed set user use reserve as collateral params to standard params\n @param reservesList The addresses of all the active reserves\n @param args The packed set user use reserve as collateral params\n @return The address of the underlying reserve\n @return True if to set using as collateral, false otherwise"},"id":16446,"implemented":true,"kind":"function","modifiers":[],"name":"decodeSetUserUseReserveAsCollateralParams","nameLocation":"7302:41:94","nodeType":"FunctionDefinition","parameters":{"id":16426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16423,"mutability":"mutable","name":"reservesList","nameLocation":"7385:12:94","nodeType":"VariableDeclaration","scope":16446,"src":"7349:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16422,"keyType":{"id":16420,"name":"uint256","nodeType":"ElementaryTypeName","src":"7357:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"7349:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16421,"name":"address","nodeType":"ElementaryTypeName","src":"7368:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16425,"mutability":"mutable","name":"args","nameLocation":"7411:4:94","nodeType":"VariableDeclaration","scope":16446,"src":"7403:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16424,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7403:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7343:76:94"},"returnParameters":{"id":16431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16428,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16446,"src":"7443:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16427,"name":"address","nodeType":"ElementaryTypeName","src":"7443:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16430,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16446,"src":"7452:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16429,"name":"bool","nodeType":"ElementaryTypeName","src":"7452:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7442:15:94"},"scope":16514,"src":"7293:374:94","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16512,"nodeType":"Block","src":"8422:673:94","statements":[{"assignments":[16469],"declarations":[{"constant":false,"id":16469,"mutability":"mutable","name":"collateralAssetId","nameLocation":"8435:17:94","nodeType":"VariableDeclaration","scope":16512,"src":"8428:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16468,"name":"uint16","nodeType":"ElementaryTypeName","src":"8428:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16470,"nodeType":"VariableDeclarationStatement","src":"8428:24:94"},{"assignments":[16472],"declarations":[{"constant":false,"id":16472,"mutability":"mutable","name":"debtAssetId","nameLocation":"8465:11:94","nodeType":"VariableDeclaration","scope":16512,"src":"8458:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":16471,"name":"uint16","nodeType":"ElementaryTypeName","src":"8458:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":16473,"nodeType":"VariableDeclarationStatement","src":"8458:18:94"},{"assignments":[16475],"declarations":[{"constant":false,"id":16475,"mutability":"mutable","name":"user","nameLocation":"8490:4:94","nodeType":"VariableDeclaration","scope":16512,"src":"8482:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16474,"name":"address","nodeType":"ElementaryTypeName","src":"8482:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16476,"nodeType":"VariableDeclarationStatement","src":"8482:12:94"},{"assignments":[16478],"declarations":[{"constant":false,"id":16478,"mutability":"mutable","name":"debtToCover","nameLocation":"8508:11:94","nodeType":"VariableDeclaration","scope":16512,"src":"8500:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16477,"name":"uint256","nodeType":"ElementaryTypeName","src":"8500:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16479,"nodeType":"VariableDeclarationStatement","src":"8500:19:94"},{"assignments":[16481],"declarations":[{"constant":false,"id":16481,"mutability":"mutable","name":"receiveAToken","nameLocation":"8530:13:94","nodeType":"VariableDeclaration","scope":16512,"src":"8525:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16480,"name":"bool","nodeType":"ElementaryTypeName","src":"8525:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":16482,"nodeType":"VariableDeclarationStatement","src":"8525:18:94"},{"AST":{"nodeType":"YulBlock","src":"8559:298:94","statements":[{"nodeType":"YulAssignment","src":"8567:39:94","value":{"arguments":[{"name":"args1","nodeType":"YulIdentifier","src":"8592:5:94"},{"kind":"number","nodeType":"YulLiteral","src":"8599:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8588:3:94"},"nodeType":"YulFunctionCall","src":"8588:18:94"},"variableNames":[{"name":"collateralAssetId","nodeType":"YulIdentifier","src":"8567:17:94"}]},{"nodeType":"YulAssignment","src":"8613:42:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8636:2:94","type":"","value":"16"},{"name":"args1","nodeType":"YulIdentifier","src":"8640:5:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8632:3:94"},"nodeType":"YulFunctionCall","src":"8632:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"8648:6:94","type":"","value":"0xFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8628:3:94"},"nodeType":"YulFunctionCall","src":"8628:27:94"},"variableNames":[{"name":"debtAssetId","nodeType":"YulIdentifier","src":"8613:11:94"}]},{"nodeType":"YulAssignment","src":"8662:71:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8678:2:94","type":"","value":"32"},{"name":"args1","nodeType":"YulIdentifier","src":"8682:5:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8674:3:94"},"nodeType":"YulFunctionCall","src":"8674:14:94"},{"kind":"number","nodeType":"YulLiteral","src":"8690:42:94","type":"","value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8670:3:94"},"nodeType":"YulFunctionCall","src":"8670:63:94"},"variableNames":[{"name":"user","nodeType":"YulIdentifier","src":"8662:4:94"}]},{"nodeType":"YulAssignment","src":"8741:61:94","value":{"arguments":[{"name":"args2","nodeType":"YulIdentifier","src":"8760:5:94"},{"kind":"number","nodeType":"YulLiteral","src":"8767:34:94","type":"","value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8756:3:94"},"nodeType":"YulFunctionCall","src":"8756:46:94"},"variableNames":[{"name":"debtToCover","nodeType":"YulIdentifier","src":"8741:11:94"}]},{"nodeType":"YulAssignment","src":"8809:42:94","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8834:3:94","type":"","value":"128"},{"name":"args2","nodeType":"YulIdentifier","src":"8839:5:94"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8830:3:94"},"nodeType":"YulFunctionCall","src":"8830:15:94"},{"kind":"number","nodeType":"YulLiteral","src":"8847:3:94","type":"","value":"0x1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8826:3:94"},"nodeType":"YulFunctionCall","src":"8826:25:94"},"variableNames":[{"name":"receiveAToken","nodeType":"YulIdentifier","src":"8809:13:94"}]}]},"evmVersion":"london","externalReferences":[{"declaration":16453,"isOffset":false,"isSlot":false,"src":"8592:5:94","valueSize":1},{"declaration":16453,"isOffset":false,"isSlot":false,"src":"8640:5:94","valueSize":1},{"declaration":16453,"isOffset":false,"isSlot":false,"src":"8682:5:94","valueSize":1},{"declaration":16455,"isOffset":false,"isSlot":false,"src":"8760:5:94","valueSize":1},{"declaration":16455,"isOffset":false,"isSlot":false,"src":"8839:5:94","valueSize":1},{"declaration":16469,"isOffset":false,"isSlot":false,"src":"8567:17:94","valueSize":1},{"declaration":16472,"isOffset":false,"isSlot":false,"src":"8613:11:94","valueSize":1},{"declaration":16478,"isOffset":false,"isSlot":false,"src":"8741:11:94","valueSize":1},{"declaration":16481,"isOffset":false,"isSlot":false,"src":"8809:13:94","valueSize":1},{"declaration":16475,"isOffset":false,"isSlot":false,"src":"8662:4:94","valueSize":1}],"id":16483,"nodeType":"InlineAssembly","src":"8550:307:94"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16484,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16478,"src":"8867:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":16487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8887:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":16486,"name":"uint128","nodeType":"ElementaryTypeName","src":"8887:7:94","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":16485,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8882:4:94","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8882:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":16489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"8882:17:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8867:32:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16500,"nodeType":"IfStatement","src":"8863:84:94","trueBody":{"id":16499,"nodeType":"Block","src":"8901:46:94","statements":[{"expression":{"id":16497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16491,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16478,"src":"8909:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":16494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8928:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16493,"name":"uint256","nodeType":"ElementaryTypeName","src":"8928:7:94","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":16492,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8923:4:94","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8923:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":16496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"8923:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8909:31:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16498,"nodeType":"ExpressionStatement","src":"8909:31:94"}]}},{"expression":{"components":[{"baseExpression":{"id":16501,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16451,"src":"8968:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16503,"indexExpression":{"id":16502,"name":"collateralAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16469,"src":"8981:17:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8968:31:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":16504,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16451,"src":"9007:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":16506,"indexExpression":{"id":16505,"name":"debtAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16472,"src":"9020:11:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9007:25:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16507,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16475,"src":"9040:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16508,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16478,"src":"9052:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16509,"name":"receiveAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16481,"src":"9071:13:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":16510,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8960:130:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$","typeString":"tuple(address,address,address,uint256,bool)"}},"functionReturnParameters":16467,"id":16511,"nodeType":"Return","src":"8953:137:94"}]},"documentation":{"id":16447,"nodeType":"StructuredDocumentation","src":"7671:550:94","text":" @notice Decodes compressed liquidation call params to standard params\n @param reservesList The addresses of all the active reserves\n @param args1 The first half of packed liquidation call params\n @param args2 The second half of the packed liquidation call params\n @return The address of the underlying collateral asset\n @return The address of the underlying debt asset\n @return The address of the user to liquidate\n @return The amount of debt to cover\n @return True if receiving aTokens, false otherwise"},"id":16513,"implemented":true,"kind":"function","modifiers":[],"name":"decodeLiquidationCallParams","nameLocation":"8233:27:94","nodeType":"FunctionDefinition","parameters":{"id":16456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16451,"mutability":"mutable","name":"reservesList","nameLocation":"8302:12:94","nodeType":"VariableDeclaration","scope":16513,"src":"8266:48:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16450,"keyType":{"id":16448,"name":"uint256","nodeType":"ElementaryTypeName","src":"8274:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"8266:27:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16449,"name":"address","nodeType":"ElementaryTypeName","src":"8285:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16453,"mutability":"mutable","name":"args1","nameLocation":"8328:5:94","nodeType":"VariableDeclaration","scope":16513,"src":"8320:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16452,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8320:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":16455,"mutability":"mutable","name":"args2","nameLocation":"8347:5:94","nodeType":"VariableDeclaration","scope":16513,"src":"8339:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16454,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8339:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8260:96:94"},"returnParameters":{"id":16467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16458,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16513,"src":"8380:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16457,"name":"address","nodeType":"ElementaryTypeName","src":"8380:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16460,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16513,"src":"8389:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16459,"name":"address","nodeType":"ElementaryTypeName","src":"8389:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16462,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16513,"src":"8398:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16461,"name":"address","nodeType":"ElementaryTypeName","src":"8398:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16464,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16513,"src":"8407:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16463,"name":"uint256","nodeType":"ElementaryTypeName","src":"8407:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16513,"src":"8416:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16465,"name":"bool","nodeType":"ElementaryTypeName","src":"8416:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8379:42:94"},"scope":16514,"src":"8224:871:94","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":16515,"src":"230:8867:94","usedErrors":[]}],"src":"37:9061:94"},"id":94},"contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/ConfiguratorLogic.sol","exportedSymbols":{"ConfiguratorInputTypes":[23875],"ConfiguratorLogic":[17003],"DataTypes":[24227],"IInitializableAToken":[4301],"IInitializableDebtToken":[4346],"IPool":[5073],"InitializableImmutableAdminUpgradeabilityProxy":[12669],"ReserveConfiguration":[14034]},"id":17004,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":16516,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:95"},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../../interfaces/IPool.sol","id":16518,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17004,"sourceUnit":5074,"src":"63:52:95","symbolAliases":[{"foreign":{"id":16517,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:5:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IInitializableAToken.sol","file":"../../../interfaces/IInitializableAToken.sol","id":16520,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17004,"sourceUnit":4302,"src":"116:82:95","symbolAliases":[{"foreign":{"id":16519,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"124:20:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IInitializableDebtToken.sol","file":"../../../interfaces/IInitializableDebtToken.sol","id":16522,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17004,"sourceUnit":4347,"src":"199:88:95","symbolAliases":[{"foreign":{"id":16521,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"207:23:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","file":"../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","id":16524,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17004,"sourceUnit":12670,"src":"288:137:95","symbolAliases":[{"foreign":{"id":16523,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"296:46:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":16526,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17004,"sourceUnit":14035,"src":"426:79:95","symbolAliases":[{"foreign":{"id":16525,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"434:20:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":16528,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17004,"sourceUnit":24228,"src":"506:49:95","symbolAliases":[{"foreign":{"id":16527,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"514:9:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol","file":"../types/ConfiguratorInputTypes.sol","id":16530,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17004,"sourceUnit":23876,"src":"556:75:95","symbolAliases":[{"foreign":{"id":16529,"name":"ConfiguratorInputTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"564:22:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ConfiguratorLogic","contractDependencies":[12669],"contractKind":"library","documentation":{"id":16531,"nodeType":"StructuredDocumentation","src":"633:152:95","text":" @title ConfiguratorLogic library\n @author Aave\n @notice Implements the functions to initialize reserves and update aTokens and debtTokens"},"fullyImplemented":true,"id":17003,"linearizedBaseContracts":[17003],"name":"ConfiguratorLogic","nameLocation":"794:17:95","nodeType":"ContractDefinition","nodes":[{"id":16535,"libraryName":{"id":16532,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"822:20:95"},"nodeType":"UsingForDirective","src":"816:65:95","typeName":{"id":16534,"nodeType":"UserDefinedTypeName","pathNode":{"id":16533,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"847:33:95"},"referencedDeclaration":23912,"src":"847:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"anonymous":false,"id":16547,"name":"ReserveInitialized","nameLocation":"937:18:95","nodeType":"EventDefinition","parameters":{"id":16546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16537,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"977:5:95","nodeType":"VariableDeclaration","scope":16547,"src":"961:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16536,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16539,"indexed":true,"mutability":"mutable","name":"aToken","nameLocation":"1004:6:95","nodeType":"VariableDeclaration","scope":16547,"src":"988:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16538,"name":"address","nodeType":"ElementaryTypeName","src":"988:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16541,"indexed":false,"mutability":"mutable","name":"stableDebtToken","nameLocation":"1024:15:95","nodeType":"VariableDeclaration","scope":16547,"src":"1016:23:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16540,"name":"address","nodeType":"ElementaryTypeName","src":"1016:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16543,"indexed":false,"mutability":"mutable","name":"variableDebtToken","nameLocation":"1053:17:95","nodeType":"VariableDeclaration","scope":16547,"src":"1045:25:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16542,"name":"address","nodeType":"ElementaryTypeName","src":"1045:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16545,"indexed":false,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"1084:27:95","nodeType":"VariableDeclaration","scope":16547,"src":"1076:35:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16544,"name":"address","nodeType":"ElementaryTypeName","src":"1076:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"955:160:95"},"src":"931:185:95"},{"anonymous":false,"id":16555,"name":"ATokenUpgraded","nameLocation":"1125:14:95","nodeType":"EventDefinition","parameters":{"id":16554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16549,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1161:5:95","nodeType":"VariableDeclaration","scope":16555,"src":"1145:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16548,"name":"address","nodeType":"ElementaryTypeName","src":"1145:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16551,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"1188:5:95","nodeType":"VariableDeclaration","scope":16555,"src":"1172:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16550,"name":"address","nodeType":"ElementaryTypeName","src":"1172:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16553,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1215:14:95","nodeType":"VariableDeclaration","scope":16555,"src":"1199:30:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16552,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1139:94:95"},"src":"1119:115:95"},{"anonymous":false,"id":16563,"name":"StableDebtTokenUpgraded","nameLocation":"1243:23:95","nodeType":"EventDefinition","parameters":{"id":16562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16557,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1288:5:95","nodeType":"VariableDeclaration","scope":16563,"src":"1272:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16556,"name":"address","nodeType":"ElementaryTypeName","src":"1272:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16559,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"1315:5:95","nodeType":"VariableDeclaration","scope":16563,"src":"1299:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16558,"name":"address","nodeType":"ElementaryTypeName","src":"1299:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16561,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1342:14:95","nodeType":"VariableDeclaration","scope":16563,"src":"1326:30:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16560,"name":"address","nodeType":"ElementaryTypeName","src":"1326:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1266:94:95"},"src":"1237:124:95"},{"anonymous":false,"id":16571,"name":"VariableDebtTokenUpgraded","nameLocation":"1370:25:95","nodeType":"EventDefinition","parameters":{"id":16570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16565,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1417:5:95","nodeType":"VariableDeclaration","scope":16571,"src":"1401:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16564,"name":"address","nodeType":"ElementaryTypeName","src":"1401:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16567,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"1444:5:95","nodeType":"VariableDeclaration","scope":16571,"src":"1428:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16566,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16569,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1471:14:95","nodeType":"VariableDeclaration","scope":16571,"src":"1455:30:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16568,"name":"address","nodeType":"ElementaryTypeName","src":"1455:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1395:94:95"},"src":"1364:126:95"},{"body":{"id":16726,"nodeType":"Block","src":"1911:1959:95","statements":[{"assignments":[16582],"declarations":[{"constant":false,"id":16582,"mutability":"mutable","name":"aTokenProxyAddress","nameLocation":"1925:18:95","nodeType":"VariableDeclaration","scope":16726,"src":"1917:26:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16581,"name":"address","nodeType":"ElementaryTypeName","src":"1917:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16608,"initialValue":{"arguments":[{"expression":{"id":16584,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"1973:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"aTokenImpl","nodeType":"MemberAccess","referencedDeclaration":23817,"src":"1973:16:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":16588,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4301,"src":"2029:20:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableAToken_$4301_$","typeString":"type(contract IInitializableAToken)"}},"id":16589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4300,"src":"2029:31:95","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$5073_$_t_address_$_t_address_$_t_contract$_IAaveIncentivesController_$4000_$_t_uint8_$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableAToken.initialize(contract IPool,address,address,contract IAaveIncentivesController,uint8,string calldata,string calldata,bytes calldata)"}},"id":16590,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2029:40:95","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":16591,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16575,"src":"2079:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"expression":{"id":16592,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2093:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"treasury","nodeType":"MemberAccess","referencedDeclaration":23829,"src":"2093:14:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16594,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2117:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":23827,"src":"2117:21:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16596,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2148:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":23831,"src":"2148:26:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16598,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2184:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":23823,"src":"2184:29:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":16600,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2223:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"aTokenName","nodeType":"MemberAccess","referencedDeclaration":23833,"src":"2223:16:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16602,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2249:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"aTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":23835,"src":"2249:18:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16604,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2277:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":23845,"src":"2277:12:95","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16586,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1997:3:95","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1997:22:95","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":16606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1997:300:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16583,"name":"_initTokenWithProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16974,"src":"1946:19:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (address,bytes memory) returns (address)"}},"id":16607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1946:357:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1917:386:95"},{"assignments":[16610],"declarations":[{"constant":false,"id":16610,"mutability":"mutable","name":"stableDebtTokenProxyAddress","nameLocation":"2318:27:95","nodeType":"VariableDeclaration","scope":16726,"src":"2310:35:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16609,"name":"address","nodeType":"ElementaryTypeName","src":"2310:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16634,"initialValue":{"arguments":[{"expression":{"id":16612,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2375:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenImpl","nodeType":"MemberAccess","referencedDeclaration":23819,"src":"2375:25:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":16616,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4346,"src":"2440:23:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableDebtToken_$4346_$","typeString":"type(contract IInitializableDebtToken)"}},"id":16617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4345,"src":"2440:34:95","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$5073_$_t_address_$_t_contract$_IAaveIncentivesController_$4000_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableDebtToken.initialize(contract IPool,address,contract IAaveIncentivesController,uint8,string memory,string memory,bytes calldata)"}},"id":16618,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2440:43:95","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":16619,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16575,"src":"2493:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"expression":{"id":16620,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2507:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":23827,"src":"2507:21:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16622,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2538:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":23831,"src":"2538:26:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16624,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2574:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":23823,"src":"2574:29:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":16626,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2613:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenName","nodeType":"MemberAccess","referencedDeclaration":23841,"src":"2613:25:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16628,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2648:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":23843,"src":"2648:27:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16630,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2685:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":23845,"src":"2685:12:95","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16614,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2408:3:95","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2408:22:95","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":16632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2408:297:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16611,"name":"_initTokenWithProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16974,"src":"2348:19:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (address,bytes memory) returns (address)"}},"id":16633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2348:363:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2310:401:95"},{"assignments":[16636],"declarations":[{"constant":false,"id":16636,"mutability":"mutable","name":"variableDebtTokenProxyAddress","nameLocation":"2726:29:95","nodeType":"VariableDeclaration","scope":16726,"src":"2718:37:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16635,"name":"address","nodeType":"ElementaryTypeName","src":"2718:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16660,"initialValue":{"arguments":[{"expression":{"id":16638,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2785:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenImpl","nodeType":"MemberAccess","referencedDeclaration":23821,"src":"2785:27:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":16642,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4346,"src":"2852:23:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableDebtToken_$4346_$","typeString":"type(contract IInitializableDebtToken)"}},"id":16643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4345,"src":"2852:34:95","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$5073_$_t_address_$_t_contract$_IAaveIncentivesController_$4000_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableDebtToken.initialize(contract IPool,address,contract IAaveIncentivesController,uint8,string memory,string memory,bytes calldata)"}},"id":16644,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2852:43:95","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":16645,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16575,"src":"2905:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"expression":{"id":16646,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2919:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":23827,"src":"2919:21:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16648,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2950:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":23831,"src":"2950:26:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16650,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"2986:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":23823,"src":"2986:29:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":16652,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3025:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenName","nodeType":"MemberAccess","referencedDeclaration":23837,"src":"3025:27:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16654,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3062:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":23839,"src":"3062:29:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16656,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3101:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":23845,"src":"3101:12:95","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16640,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2820:3:95","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2820:22:95","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":16658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2820:301:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16637,"name":"_initTokenWithProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16974,"src":"2758:19:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (address,bytes memory) returns (address)"}},"id":16659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2758:369:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2718:409:95"},{"expression":{"arguments":[{"expression":{"id":16664,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3158:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":23827,"src":"3158:21:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16666,"name":"aTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16582,"src":"3187:18:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16667,"name":"stableDebtTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16610,"src":"3213:27:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16668,"name":"variableDebtTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16636,"src":"3248:29:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16669,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3285:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":23825,"src":"3285:33:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16661,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16575,"src":"3134:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":16663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initReserve","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"3134:16:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address,address,address) external"}},"id":16671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3134:190:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16672,"nodeType":"ExpressionStatement","src":"3134:190:95"},{"assignments":[16677],"declarations":[{"constant":false,"id":16677,"mutability":"mutable","name":"currentConfig","nameLocation":"3372:13:95","nodeType":"VariableDeclaration","scope":16726,"src":"3331:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":16676,"nodeType":"UserDefinedTypeName","pathNode":{"id":16675,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"3331:33:95"},"referencedDeclaration":23912,"src":"3331:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":16682,"initialValue":{"arguments":[{"hexValue":"30","id":16680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3422: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"}],"expression":{"id":16678,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"3388:9:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":16679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ReserveConfigurationMap","nodeType":"MemberAccess","referencedDeclaration":23912,"src":"3388:33:95","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ReserveConfigurationMap_$23912_storage_ptr_$","typeString":"type(struct DataTypes.ReserveConfigurationMap storage pointer)"}},"id":16681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3388:36:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"3331:93:95"},{"expression":{"arguments":[{"expression":{"id":16686,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3457:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":23823,"src":"3457:29:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":16683,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16677,"src":"3431:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":16685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setDecimals","nodeType":"MemberAccess","referencedDeclaration":13091,"src":"3431:25:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":16688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3431:56:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16689,"nodeType":"ExpressionStatement","src":"3431:56:95"},{"expression":{"arguments":[{"hexValue":"74727565","id":16693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3518:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":16690,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16677,"src":"3494:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":16692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setActive","nodeType":"MemberAccess","referencedDeclaration":13141,"src":"3494:23:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":16694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3494:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16695,"nodeType":"ExpressionStatement","src":"3494:29:95"},{"expression":{"arguments":[{"hexValue":"66616c7365","id":16699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3553:5:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":16696,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16677,"src":"3529:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":16698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setPaused","nodeType":"MemberAccess","referencedDeclaration":13241,"src":"3529:23:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":16700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3529:30:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16701,"nodeType":"ExpressionStatement","src":"3529:30:95"},{"expression":{"arguments":[{"hexValue":"66616c7365","id":16705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3589:5:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":16702,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16677,"src":"3565:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":16704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFrozen","nodeType":"MemberAccess","referencedDeclaration":13191,"src":"3565:23:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":16706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3565:30:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16707,"nodeType":"ExpressionStatement","src":"3565:30:95"},{"expression":{"arguments":[{"expression":{"id":16711,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3624:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":23827,"src":"3624:21:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16713,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16677,"src":"3647:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":16708,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16575,"src":"3602:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":16710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"3602:21:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":16714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3602:59:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16715,"nodeType":"ExpressionStatement","src":"3602:59:95"},{"eventCall":{"arguments":[{"expression":{"id":16717,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3699:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":23827,"src":"3699:21:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16719,"name":"aTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16582,"src":"3728:18:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16720,"name":"stableDebtTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16610,"src":"3754:27:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16721,"name":"variableDebtTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16636,"src":"3789:29:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16722,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16578,"src":"3826:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":16723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":23825,"src":"3826:33:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":16716,"name":"ReserveInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16547,"src":"3673:18:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address,address,address)"}},"id":16724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3673:192:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16725,"nodeType":"EmitStatement","src":"3668:197:95"}]},"documentation":{"id":16572,"nodeType":"StructuredDocumentation","src":"1494:299:95","text":" @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\n @dev Emits the `ReserveInitialized` event\n @param pool The Pool in which the reserve will be initialized\n @param input The needed parameters for the initialization"},"functionSelector":"df59b8b2","id":16727,"implemented":true,"kind":"function","modifiers":[],"name":"executeInitReserve","nameLocation":"1805:18:95","nodeType":"FunctionDefinition","parameters":{"id":16579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16575,"mutability":"mutable","name":"pool","nameLocation":"1835:4:95","nodeType":"VariableDeclaration","scope":16727,"src":"1829:10:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":16574,"nodeType":"UserDefinedTypeName","pathNode":{"id":16573,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1829:5:95"},"referencedDeclaration":5073,"src":"1829:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":16578,"mutability":"mutable","name":"input","nameLocation":"1894:5:95","nodeType":"VariableDeclaration","scope":16727,"src":"1845:54:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput"},"typeName":{"id":16577,"nodeType":"UserDefinedTypeName","pathNode":{"id":16576,"name":"ConfiguratorInputTypes.InitReserveInput","nodeType":"IdentifierPath","referencedDeclaration":23846,"src":"1845:39:95"},"referencedDeclaration":23846,"src":"1845:39:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput"}},"visibility":"internal"}],"src":"1823:80:95"},"returnParameters":{"id":16580,"nodeType":"ParameterList","parameters":[],"src":"1911:0:95"},"scope":17003,"src":"1796:2074:95","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":16798,"nodeType":"Block","src":"4253:643:95","statements":[{"assignments":[16741],"declarations":[{"constant":false,"id":16741,"mutability":"mutable","name":"reserveData","nameLocation":"4288:11:95","nodeType":"VariableDeclaration","scope":16798,"src":"4259:40:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16740,"nodeType":"UserDefinedTypeName","pathNode":{"id":16739,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4259:21:95"},"referencedDeclaration":23909,"src":"4259:21:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":16747,"initialValue":{"arguments":[{"expression":{"id":16744,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4328:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23848,"src":"4328:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16742,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16731,"src":"4302:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":16743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"4302:25:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":16746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4302:38:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"4259:81:95"},{"assignments":[null,null,null,16749,null,null],"declarations":[null,null,null,{"constant":false,"id":16749,"mutability":"mutable","name":"decimals","nameLocation":"4362:8:95","nodeType":"VariableDeclaration","scope":16798,"src":"4354:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16748,"name":"uint256","nodeType":"ElementaryTypeName","src":"4354:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":16757,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":16752,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4406:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23848,"src":"4406:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16750,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16731,"src":"4378:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":16751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"4378:27:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":16754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4378:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":16755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":14000,"src":"4378:50:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":16756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4378:52:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4347:83:95"},{"assignments":[16759],"declarations":[{"constant":false,"id":16759,"mutability":"mutable","name":"encodedCall","nameLocation":"4450:11:95","nodeType":"VariableDeclaration","scope":16798,"src":"4437:24:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16758,"name":"bytes","nodeType":"ElementaryTypeName","src":"4437:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":16780,"initialValue":{"arguments":[{"expression":{"expression":{"id":16762,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4301,"src":"4494:20:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableAToken_$4301_$","typeString":"type(contract IInitializableAToken)"}},"id":16763,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4300,"src":"4494:31:95","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$5073_$_t_address_$_t_address_$_t_contract$_IAaveIncentivesController_$4000_$_t_uint8_$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableAToken.initialize(contract IPool,address,address,contract IAaveIncentivesController,uint8,string calldata,string calldata,bytes calldata)"}},"id":16764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"4494:40:95","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":16765,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16731,"src":"4542:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"expression":{"id":16766,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4560:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"treasury","nodeType":"MemberAccess","referencedDeclaration":23850,"src":"4560:14:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16768,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4582:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23848,"src":"4582:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16770,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4601:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":23852,"src":"4601:26:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16772,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16749,"src":"4635:8:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16773,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4651:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":23854,"src":"4651:10:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16775,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4669:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":23856,"src":"4669:12:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16777,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4689:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":23860,"src":"4689:12:95","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16760,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4464:3:95","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16761,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4464:22:95","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":16779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4464:243:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4437:270:95"},{"expression":{"arguments":[{"expression":{"id":16782,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16741,"src":"4742:11:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":16783,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"4742:25:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16784,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4769:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":23858,"src":"4769:20:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16786,"name":"encodedCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16759,"src":"4791:11:95","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16781,"name":"_upgradeTokenImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17002,"src":"4714:27:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory)"}},"id":16787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4714:89:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16788,"nodeType":"ExpressionStatement","src":"4714:89:95"},{"eventCall":{"arguments":[{"expression":{"id":16790,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4830:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23848,"src":"4830:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16792,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16741,"src":"4843:11:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":16793,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"4843:25:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16794,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16734,"src":"4870:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":16795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":23858,"src":"4870:20: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":16789,"name":"ATokenUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16555,"src":"4815:14:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":16796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4815:76:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16797,"nodeType":"EmitStatement","src":"4810:81:95"}]},"documentation":{"id":16728,"nodeType":"StructuredDocumentation","src":"3874:253:95","text":" @notice Updates the aToken implementation and initializes it\n @dev Emits the `ATokenUpgraded` event\n @param cachedPool The Pool containing the reserve with the aToken\n @param input The parameters needed for the initialize call"},"functionSelector":"b13c96a8","id":16799,"implemented":true,"kind":"function","modifiers":[],"name":"executeUpdateAToken","nameLocation":"4139:19:95","nodeType":"FunctionDefinition","parameters":{"id":16735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16731,"mutability":"mutable","name":"cachedPool","nameLocation":"4170:10:95","nodeType":"VariableDeclaration","scope":16799,"src":"4164:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":16730,"nodeType":"UserDefinedTypeName","pathNode":{"id":16729,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"4164:5:95"},"referencedDeclaration":5073,"src":"4164:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":16734,"mutability":"mutable","name":"input","nameLocation":"4236:5:95","nodeType":"VariableDeclaration","scope":16799,"src":"4186:55:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"},"typeName":{"id":16733,"nodeType":"UserDefinedTypeName","pathNode":{"id":16732,"name":"ConfiguratorInputTypes.UpdateATokenInput","nodeType":"IdentifierPath","referencedDeclaration":23861,"src":"4186:40:95"},"referencedDeclaration":23861,"src":"4186:40:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"}},"visibility":"internal"}],"src":"4158:87:95"},"returnParameters":{"id":16736,"nodeType":"ParameterList","parameters":[],"src":"4253:0:95"},"scope":17003,"src":"4130:766:95","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":16868,"nodeType":"Block","src":"5322:699:95","statements":[{"assignments":[16813],"declarations":[{"constant":false,"id":16813,"mutability":"mutable","name":"reserveData","nameLocation":"5357:11:95","nodeType":"VariableDeclaration","scope":16868,"src":"5328:40:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16812,"nodeType":"UserDefinedTypeName","pathNode":{"id":16811,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"5328:21:95"},"referencedDeclaration":23909,"src":"5328:21:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":16819,"initialValue":{"arguments":[{"expression":{"id":16816,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5397:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23863,"src":"5397:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16814,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16803,"src":"5371:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":16815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"5371:25:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":16818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5371:38:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"5328:81:95"},{"assignments":[null,null,null,16821,null,null],"declarations":[null,null,null,{"constant":false,"id":16821,"mutability":"mutable","name":"decimals","nameLocation":"5431:8:95","nodeType":"VariableDeclaration","scope":16868,"src":"5423:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16820,"name":"uint256","nodeType":"ElementaryTypeName","src":"5423:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":16829,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":16824,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5475:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23863,"src":"5475:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16822,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16803,"src":"5447:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":16823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"5447:27:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":16826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5447:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":16827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":14000,"src":"5447:50:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":16828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5447:52:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5416:83:95"},{"assignments":[16831],"declarations":[{"constant":false,"id":16831,"mutability":"mutable","name":"encodedCall","nameLocation":"5519:11:95","nodeType":"VariableDeclaration","scope":16868,"src":"5506:24:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16830,"name":"bytes","nodeType":"ElementaryTypeName","src":"5506:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":16850,"initialValue":{"arguments":[{"expression":{"expression":{"id":16834,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4346,"src":"5563:23:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableDebtToken_$4346_$","typeString":"type(contract IInitializableDebtToken)"}},"id":16835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4345,"src":"5563:34:95","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$5073_$_t_address_$_t_contract$_IAaveIncentivesController_$4000_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableDebtToken.initialize(contract IPool,address,contract IAaveIncentivesController,uint8,string memory,string memory,bytes calldata)"}},"id":16836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"5563:43:95","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":16837,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16803,"src":"5614:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"expression":{"id":16838,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5632:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23863,"src":"5632:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16840,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5651:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":23865,"src":"5651:26:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16842,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16821,"src":"5685:8:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16843,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5701:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":23867,"src":"5701:10:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16845,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5719:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":23869,"src":"5719:12:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16847,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5739:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":23873,"src":"5739:12:95","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16832,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5533:3:95","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5533:22:95","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":16849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5533:224:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5506:251:95"},{"expression":{"arguments":[{"expression":{"id":16852,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16813,"src":"5799:11:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":16853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"5799:34:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16854,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5841:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":23871,"src":"5841:20:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16856,"name":"encodedCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16831,"src":"5869:11:95","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16851,"name":"_upgradeTokenImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17002,"src":"5764:27:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory)"}},"id":16857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5764:122:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16858,"nodeType":"ExpressionStatement","src":"5764:122:95"},{"eventCall":{"arguments":[{"expression":{"id":16860,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5929:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23863,"src":"5929:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16862,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16813,"src":"5948:11:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":16863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"5948:34:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16864,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"5990:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":23871,"src":"5990:20: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":16859,"name":"StableDebtTokenUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16563,"src":"5898:23:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":16866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5898:118:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16867,"nodeType":"EmitStatement","src":"5893:123:95"}]},"documentation":{"id":16800,"nodeType":"StructuredDocumentation","src":"4900:284:95","text":" @notice Updates the stable debt token implementation and initializes it\n @dev Emits the `StableDebtTokenUpgraded` event\n @param cachedPool The Pool containing the reserve with the stable debt token\n @param input The parameters needed for the initialize call"},"functionSelector":"f5b50e70","id":16869,"implemented":true,"kind":"function","modifiers":[],"name":"executeUpdateStableDebtToken","nameLocation":"5196:28:95","nodeType":"FunctionDefinition","parameters":{"id":16807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16803,"mutability":"mutable","name":"cachedPool","nameLocation":"5236:10:95","nodeType":"VariableDeclaration","scope":16869,"src":"5230:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":16802,"nodeType":"UserDefinedTypeName","pathNode":{"id":16801,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"5230:5:95"},"referencedDeclaration":5073,"src":"5230:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":16806,"mutability":"mutable","name":"input","nameLocation":"5305:5:95","nodeType":"VariableDeclaration","scope":16869,"src":"5252:58:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":16805,"nodeType":"UserDefinedTypeName","pathNode":{"id":16804,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":23874,"src":"5252:43:95"},"referencedDeclaration":23874,"src":"5252:43:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"5224:90:95"},"returnParameters":{"id":16808,"nodeType":"ParameterList","parameters":[],"src":"5322:0:95"},"scope":17003,"src":"5187:834:95","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":16938,"nodeType":"Block","src":"6455:705:95","statements":[{"assignments":[16883],"declarations":[{"constant":false,"id":16883,"mutability":"mutable","name":"reserveData","nameLocation":"6490:11:95","nodeType":"VariableDeclaration","scope":16938,"src":"6461:40:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16882,"nodeType":"UserDefinedTypeName","pathNode":{"id":16881,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"6461:21:95"},"referencedDeclaration":23909,"src":"6461:21:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":16889,"initialValue":{"arguments":[{"expression":{"id":16886,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"6530:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23863,"src":"6530:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16884,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16873,"src":"6504:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":16885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"6504:25:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":16888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6504:38:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"6461:81:95"},{"assignments":[null,null,null,16891,null,null],"declarations":[null,null,null,{"constant":false,"id":16891,"mutability":"mutable","name":"decimals","nameLocation":"6564:8:95","nodeType":"VariableDeclaration","scope":16938,"src":"6556:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16890,"name":"uint256","nodeType":"ElementaryTypeName","src":"6556:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":16899,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":16894,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"6608:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23863,"src":"6608:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16892,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16873,"src":"6580:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":16893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"6580:27:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":16896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6580:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":16897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":14000,"src":"6580:50:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":16898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6580:52:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6549:83:95"},{"assignments":[16901],"declarations":[{"constant":false,"id":16901,"mutability":"mutable","name":"encodedCall","nameLocation":"6652:11:95","nodeType":"VariableDeclaration","scope":16938,"src":"6639:24:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16900,"name":"bytes","nodeType":"ElementaryTypeName","src":"6639:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":16920,"initialValue":{"arguments":[{"expression":{"expression":{"id":16904,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4346,"src":"6696:23:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableDebtToken_$4346_$","typeString":"type(contract IInitializableDebtToken)"}},"id":16905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4345,"src":"6696:34:95","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$5073_$_t_address_$_t_contract$_IAaveIncentivesController_$4000_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableDebtToken.initialize(contract IPool,address,contract IAaveIncentivesController,uint8,string memory,string memory,bytes calldata)"}},"id":16906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"6696:43:95","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":16907,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16873,"src":"6747:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"expression":{"id":16908,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"6765:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23863,"src":"6765:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16910,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"6784:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":23865,"src":"6784:26:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16912,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16891,"src":"6818:8:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16913,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"6834:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":23867,"src":"6834:10:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16915,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"6852:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":23869,"src":"6852:12:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":16917,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"6872:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":23873,"src":"6872:12:95","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16902,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6666:3:95","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"6666:22:95","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":16919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6666:224:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6639:251:95"},{"expression":{"arguments":[{"expression":{"id":16922,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16883,"src":"6932:11:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":16923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"6932:36:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16924,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"6976:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":23871,"src":"6976:20:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16926,"name":"encodedCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16901,"src":"7004:11:95","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16921,"name":"_upgradeTokenImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17002,"src":"6897:27:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory)"}},"id":16927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6897:124:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16928,"nodeType":"ExpressionStatement","src":"6897:124:95"},{"eventCall":{"arguments":[{"expression":{"id":16930,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"7066:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23863,"src":"7066:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16932,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16883,"src":"7085:11:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":16933,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"7085:36:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16934,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"7129:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":16935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":23871,"src":"7129:20: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":16929,"name":"VariableDebtTokenUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16571,"src":"7033:25:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":16936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7033:122:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16937,"nodeType":"EmitStatement","src":"7028:127:95"}]},"documentation":{"id":16870,"nodeType":"StructuredDocumentation","src":"6025:290:95","text":" @notice Updates the variable debt token implementation and initializes it\n @dev Emits the `VariableDebtTokenUpgraded` event\n @param cachedPool The Pool containing the reserve with the variable debt token\n @param input The parameters needed for the initialize call"},"functionSelector":"b0f09355","id":16939,"implemented":true,"kind":"function","modifiers":[],"name":"executeUpdateVariableDebtToken","nameLocation":"6327:30:95","nodeType":"FunctionDefinition","parameters":{"id":16877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16873,"mutability":"mutable","name":"cachedPool","nameLocation":"6369:10:95","nodeType":"VariableDeclaration","scope":16939,"src":"6363:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":16872,"nodeType":"UserDefinedTypeName","pathNode":{"id":16871,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"6363:5:95"},"referencedDeclaration":5073,"src":"6363:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":16876,"mutability":"mutable","name":"input","nameLocation":"6438:5:95","nodeType":"VariableDeclaration","scope":16939,"src":"6385:58:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":16875,"nodeType":"UserDefinedTypeName","pathNode":{"id":16874,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":23874,"src":"6385:43:95"},"referencedDeclaration":23874,"src":"6385:43:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"6357:90:95"},"returnParameters":{"id":16878,"nodeType":"ParameterList","parameters":[],"src":"6455:0:95"},"scope":17003,"src":"6318:842:95","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":16973,"nodeType":"Block","src":"7557:226:95","statements":[{"assignments":[16951],"declarations":[{"constant":false,"id":16951,"mutability":"mutable","name":"proxy","nameLocation":"7610:5:95","nodeType":"VariableDeclaration","scope":16973,"src":"7563:52:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"},"typeName":{"id":16950,"nodeType":"UserDefinedTypeName","pathNode":{"id":16949,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":12669,"src":"7563:46:95"},"referencedDeclaration":12669,"src":"7563:46:95","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"visibility":"internal"}],"id":16960,"initialValue":{"arguments":[{"arguments":[{"id":16957,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7686:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_ConfiguratorLogic_$17003","typeString":"library ConfiguratorLogic"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ConfiguratorLogic_$17003","typeString":"library ConfiguratorLogic"}],"id":16956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7678:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16955,"name":"address","nodeType":"ElementaryTypeName","src":"7678:7:95","typeDescriptions":{}}},"id":16958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7678:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"7618:50:95","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669_$","typeString":"function (address) returns (contract InitializableImmutableAdminUpgradeabilityProxy)"},"typeName":{"id":16953,"nodeType":"UserDefinedTypeName","pathNode":{"id":16952,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":12669,"src":"7622:46:95"},"referencedDeclaration":12669,"src":"7622:46:95","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}}},"id":16959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7618:81:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"nodeType":"VariableDeclarationStatement","src":"7563:136:95"},{"expression":{"arguments":[{"id":16964,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"7723:14:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16965,"name":"initParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16944,"src":"7739:10:95","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":16961,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16951,"src":"7706:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":16963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":3006,"src":"7706:16:95","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":16966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7706:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16967,"nodeType":"ExpressionStatement","src":"7706:44:95"},{"expression":{"arguments":[{"id":16970,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16951,"src":"7772:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}],"id":16969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7764:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16968,"name":"address","nodeType":"ElementaryTypeName","src":"7764:7:95","typeDescriptions":{}}},"id":16971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7764:14:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":16948,"id":16972,"nodeType":"Return","src":"7757:21:95"}]},"documentation":{"id":16940,"nodeType":"StructuredDocumentation","src":"7164:273:95","text":" @notice Creates a new proxy and initializes the implementation\n @param implementation The address of the implementation\n @param initParams The parameters that is passed to the implementation to initialize\n @return The address of initialized proxy"},"id":16974,"implemented":true,"kind":"function","modifiers":[],"name":"_initTokenWithProxy","nameLocation":"7449:19:95","nodeType":"FunctionDefinition","parameters":{"id":16945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16942,"mutability":"mutable","name":"implementation","nameLocation":"7482:14:95","nodeType":"VariableDeclaration","scope":16974,"src":"7474:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16941,"name":"address","nodeType":"ElementaryTypeName","src":"7474:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16944,"mutability":"mutable","name":"initParams","nameLocation":"7515:10:95","nodeType":"VariableDeclaration","scope":16974,"src":"7502:23:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16943,"name":"bytes","nodeType":"ElementaryTypeName","src":"7502:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7468:61:95"},"returnParameters":{"id":16948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16974,"src":"7548:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16946,"name":"address","nodeType":"ElementaryTypeName","src":"7548:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7547:9:95"},"scope":17003,"src":"7440:343:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17001,"nodeType":"Block","src":"8250:208:95","statements":[{"assignments":[16986],"declarations":[{"constant":false,"id":16986,"mutability":"mutable","name":"proxy","nameLocation":"8303:5:95","nodeType":"VariableDeclaration","scope":17001,"src":"8256:52:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"},"typeName":{"id":16985,"nodeType":"UserDefinedTypeName","pathNode":{"id":16984,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":12669,"src":"8256:46:95"},"referencedDeclaration":12669,"src":"8256:46:95","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"visibility":"internal"}],"id":16993,"initialValue":{"arguments":[{"arguments":[{"id":16990,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16977,"src":"8375:12:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16989,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8367:8:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":16988,"name":"address","nodeType":"ElementaryTypeName","src":"8367:8:95","stateMutability":"payable","typeDescriptions":{}}},"id":16991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8367:21:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":16987,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12669,"src":"8311:46:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669_$","typeString":"type(contract InitializableImmutableAdminUpgradeabilityProxy)"}},"id":16992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8311:85:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"nodeType":"VariableDeclarationStatement","src":"8256:140:95"},{"expression":{"arguments":[{"id":16997,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16979,"src":"8426:14:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16998,"name":"initParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16981,"src":"8442:10:95","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":16994,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16986,"src":"8403:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$12669","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":16996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":12612,"src":"8403:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":16999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8403:50:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17000,"nodeType":"ExpressionStatement","src":"8403:50:95"}]},"documentation":{"id":16975,"nodeType":"StructuredDocumentation","src":"7787:327:95","text":" @notice Upgrades the implementation and makes call to the proxy\n @dev The call is used to initialize the new implementation.\n @param proxyAddress The address of the proxy\n @param implementation The address of the new implementation\n @param  initParams The parameters to the call after the upgrade"},"id":17002,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTokenImplementation","nameLocation":"8126:27:95","nodeType":"FunctionDefinition","parameters":{"id":16982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16977,"mutability":"mutable","name":"proxyAddress","nameLocation":"8167:12:95","nodeType":"VariableDeclaration","scope":17002,"src":"8159:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16976,"name":"address","nodeType":"ElementaryTypeName","src":"8159:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16979,"mutability":"mutable","name":"implementation","nameLocation":"8193:14:95","nodeType":"VariableDeclaration","scope":17002,"src":"8185:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16978,"name":"address","nodeType":"ElementaryTypeName","src":"8185:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16981,"mutability":"mutable","name":"initParams","nameLocation":"8226:10:95","nodeType":"VariableDeclaration","scope":17002,"src":"8213:23:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16980,"name":"bytes","nodeType":"ElementaryTypeName","src":"8213:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8153:87:95"},"returnParameters":{"id":16983,"nodeType":"ParameterList","parameters":[],"src":"8250:0:95"},"scope":17003,"src":"8117:341:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":17004,"src":"786:7674:95","usedErrors":[]}],"src":"37:8424:95"},"id":95},"contracts/protocol/libraries/logic/EModeLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/EModeLogic.sol","exportedSymbols":{"DataTypes":[24227],"EModeLogic":[17209],"Errors":[14819],"GPv2SafeERC20":[118],"IERC20":[1442],"IPriceOracleGetter":[6048],"PercentageMath":[23726],"ReserveLogic":[20971],"UserConfiguration":[14545],"ValidationLogic":[23502],"WadRayMath":[23813]},"id":17210,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":17005,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:96"},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":17007,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":119,"src":"63:87:96","symbolAliases":[{"foreign":{"id":17006,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":17009,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":1443,"src":"151:79:96","symbolAliases":[{"foreign":{"id":17008,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"159:6:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPriceOracleGetter.sol","file":"../../../interfaces/IPriceOracleGetter.sol","id":17011,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":6049,"src":"231:78:96","symbolAliases":[{"foreign":{"id":17010,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:18:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":17013,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":14546,"src":"310:73:96","symbolAliases":[{"foreign":{"id":17012,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"318:17:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":17015,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":14820,"src":"384:45:96","symbolAliases":[{"foreign":{"id":17014,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"392:6:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":17017,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":23814,"src":"430:50:96","symbolAliases":[{"foreign":{"id":17016,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"438:10:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":17019,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":23727,"src":"481:58:96","symbolAliases":[{"foreign":{"id":17018,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"489:14:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":17021,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":24228,"src":"540:49:96","symbolAliases":[{"foreign":{"id":17020,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"548:9:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":17023,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":23503,"src":"590:54:96","symbolAliases":[{"foreign":{"id":17022,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"598:15:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":17025,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17210,"sourceUnit":20972,"src":"645:48:96","symbolAliases":[{"foreign":{"id":17024,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"653:12:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"EModeLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":17026,"nodeType":"StructuredDocumentation","src":"695:130:96","text":" @title EModeLogic library\n @author Aave\n @notice Implements the base logic for all the actions related to the eMode"},"fullyImplemented":true,"id":17209,"linearizedBaseContracts":[17209],"name":"EModeLogic","nameLocation":"834:10:96","nodeType":"ContractDefinition","nodes":[{"id":17030,"libraryName":{"id":17027,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"855:12:96"},"nodeType":"UsingForDirective","src":"849:46:96","typeName":{"id":17029,"nodeType":"UserDefinedTypeName","pathNode":{"id":17028,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"872:22:96"},"referencedDeclaration":23973,"src":"872:22:96","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":17034,"libraryName":{"id":17031,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"904:12:96"},"nodeType":"UsingForDirective","src":"898:45:96","typeName":{"id":17033,"nodeType":"UserDefinedTypeName","pathNode":{"id":17032,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"921:21:96"},"referencedDeclaration":23909,"src":"921:21:96","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":17038,"libraryName":{"id":17035,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"952:13:96"},"nodeType":"UsingForDirective","src":"946:31:96","typeName":{"id":17037,"nodeType":"UserDefinedTypeName","pathNode":{"id":17036,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"970:6:96"},"referencedDeclaration":1442,"src":"970:6:96","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":17042,"libraryName":{"id":17039,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"986:17:96"},"nodeType":"UsingForDirective","src":"980:59:96","typeName":{"id":17041,"nodeType":"UserDefinedTypeName","pathNode":{"id":17040,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"1008:30:96"},"referencedDeclaration":23916,"src":"1008:30:96","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":17045,"libraryName":{"id":17043,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1048:10:96"},"nodeType":"UsingForDirective","src":"1042:29:96","typeName":{"id":17044,"name":"uint256","nodeType":"ElementaryTypeName","src":"1063:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17048,"libraryName":{"id":17046,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1080:14:96"},"nodeType":"UsingForDirective","src":"1074:33:96","typeName":{"id":17047,"name":"uint256","nodeType":"ElementaryTypeName","src":"1099:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":17054,"name":"UserEModeSet","nameLocation":"1151:12:96","nodeType":"EventDefinition","parameters":{"id":17053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17050,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1180:4:96","nodeType":"VariableDeclaration","scope":17054,"src":"1164:20:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17049,"name":"address","nodeType":"ElementaryTypeName","src":"1164:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17052,"indexed":false,"mutability":"mutable","name":"categoryId","nameLocation":"1192:10:96","nodeType":"VariableDeclaration","scope":17054,"src":"1186:16:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":17051,"name":"uint8","nodeType":"ElementaryTypeName","src":"1186:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1163:40:96"},"src":"1145:59:96"},{"body":{"id":17139,"nodeType":"Block","src":"2312:636:96","statements":[{"expression":{"arguments":[{"id":17085,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17060,"src":"2362:12:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":17086,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17064,"src":"2382:12:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":17087,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17069,"src":"2402:15:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":17088,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17076,"src":"2425:10:96","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":17089,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17079,"src":"2443:6:96","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":17090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24054,"src":"2443:20:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17091,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17079,"src":"2471:6:96","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":17092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"categoryId","nodeType":"MemberAccess","referencedDeclaration":24058,"src":"2471:17:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":17082,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"2318:15:96","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":17084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSetUserEMode","nodeType":"MemberAccess","referencedDeclaration":23381,"src":"2318:36:96","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,uint256,uint8) view"}},"id":17093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2318:176:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17094,"nodeType":"ExpressionStatement","src":"2318:176:96"},{"assignments":[17096],"declarations":[{"constant":false,"id":17096,"mutability":"mutable","name":"prevCategoryId","nameLocation":"2507:14:96","nodeType":"VariableDeclaration","scope":17139,"src":"2501:20:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":17095,"name":"uint8","nodeType":"ElementaryTypeName","src":"2501:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":17101,"initialValue":{"baseExpression":{"id":17097,"name":"usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17073,"src":"2524:18:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":17100,"indexExpression":{"expression":{"id":17098,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2543:3:96","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2543:10:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2524:30:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"2501:53:96"},{"expression":{"id":17108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17102,"name":"usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17073,"src":"2560:18:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":17105,"indexExpression":{"expression":{"id":17103,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2579:3:96","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2579:10:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2560:30:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17106,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17079,"src":"2593:6:96","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":17107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"categoryId","nodeType":"MemberAccess","referencedDeclaration":24058,"src":"2593:17:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2560:50:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":17109,"nodeType":"ExpressionStatement","src":"2560:50:96"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":17112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17110,"name":"prevCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17096,"src":"2621:14:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2639:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2621:19:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17131,"nodeType":"IfStatement","src":"2617:273:96","trueBody":{"id":17130,"nodeType":"Block","src":"2642:248:96","statements":[{"expression":{"arguments":[{"id":17116,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17060,"src":"2696:12:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":17117,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17064,"src":"2718:12:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":17118,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17069,"src":"2740:15:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":17119,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17076,"src":"2765:10:96","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":17120,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2785:3:96","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2785:10:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17122,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17079,"src":"2805:6:96","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":17123,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"categoryId","nodeType":"MemberAccess","referencedDeclaration":24058,"src":"2805:17:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":17124,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17079,"src":"2832:6:96","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":17125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24054,"src":"2832:20:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17126,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17079,"src":"2862:6:96","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":17127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":24056,"src":"2862:13:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17113,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"2650:15:96","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":17115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateHealthFactor","nodeType":"MemberAccess","referencedDeclaration":23118,"src":"2650:36:96","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_address_$_t_uint8_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,uint8,uint256,address) view returns (uint256,bool)"}},"id":17128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2650:233:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"id":17129,"nodeType":"ExpressionStatement","src":"2650:233:96"}]}},{"eventCall":{"arguments":[{"expression":{"id":17133,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2913:3:96","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2913:10:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17135,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17079,"src":"2925:6:96","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":17136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"categoryId","nodeType":"MemberAccess","referencedDeclaration":24058,"src":"2925:17:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":17132,"name":"UserEModeSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17054,"src":"2900:12:96","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint8_$returns$__$","typeString":"function (address,uint8)"}},"id":17137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2900:43:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17138,"nodeType":"EmitStatement","src":"2895:48:96"}]},"documentation":{"id":17055,"nodeType":"StructuredDocumentation","src":"1208:698:96","text":" @notice Updates the user efficiency mode category\n @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\n @dev Emits the `UserEModeSet` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param usersEModeCategory The state of all users efficiency mode category\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the setUserEMode function"},"functionSelector":"5d5dc313","id":17140,"implemented":true,"kind":"function","modifiers":[],"name":"executeSetUserEMode","nameLocation":"1918:19:96","nodeType":"FunctionDefinition","parameters":{"id":17080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17060,"mutability":"mutable","name":"reservesData","nameLocation":"1993:12:96","nodeType":"VariableDeclaration","scope":17140,"src":"1943:62:96","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":17059,"keyType":{"id":17056,"name":"address","nodeType":"ElementaryTypeName","src":"1951:7:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1943:41:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":17058,"nodeType":"UserDefinedTypeName","pathNode":{"id":17057,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1962:21:96"},"referencedDeclaration":23909,"src":"1962:21:96","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":17064,"mutability":"mutable","name":"reservesList","nameLocation":"2047:12:96","nodeType":"VariableDeclaration","scope":17140,"src":"2011:48:96","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":17063,"keyType":{"id":17061,"name":"uint256","nodeType":"ElementaryTypeName","src":"2019:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2011:27:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":17062,"name":"address","nodeType":"ElementaryTypeName","src":"2030:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":17069,"mutability":"mutable","name":"eModeCategories","nameLocation":"2115:15:96","nodeType":"VariableDeclaration","scope":17140,"src":"2065:65:96","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":17068,"keyType":{"id":17065,"name":"uint8","nodeType":"ElementaryTypeName","src":"2073:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"2065:41:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":17067,"nodeType":"UserDefinedTypeName","pathNode":{"id":17066,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"2082:23:96"},"referencedDeclaration":23927,"src":"2082:23:96","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":17073,"mutability":"mutable","name":"usersEModeCategory","nameLocation":"2170:18:96","nodeType":"VariableDeclaration","scope":17140,"src":"2136:52:96","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"typeName":{"id":17072,"keyType":{"id":17070,"name":"address","nodeType":"ElementaryTypeName","src":"2144:7:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2136:25:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"valueType":{"id":17071,"name":"uint8","nodeType":"ElementaryTypeName","src":"2155:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}},"visibility":"internal"},{"constant":false,"id":17076,"mutability":"mutable","name":"userConfig","nameLocation":"2233:10:96","nodeType":"VariableDeclaration","scope":17140,"src":"2194:49:96","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":17075,"nodeType":"UserDefinedTypeName","pathNode":{"id":17074,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"2194:30:96"},"referencedDeclaration":23916,"src":"2194:30:96","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":17079,"mutability":"mutable","name":"params","nameLocation":"2292:6:96","nodeType":"VariableDeclaration","scope":17140,"src":"2249:49:96","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams"},"typeName":{"id":17078,"nodeType":"UserDefinedTypeName","pathNode":{"id":17077,"name":"DataTypes.ExecuteSetUserEModeParams","nodeType":"IdentifierPath","referencedDeclaration":24059,"src":"2249:35:96"},"referencedDeclaration":24059,"src":"2249:35:96","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_storage_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams"}},"visibility":"internal"}],"src":"1937:365:96"},"returnParameters":{"id":17081,"nodeType":"ParameterList","parameters":[],"src":"2312:0:96"},"scope":17209,"src":"1909:1039:96","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17187,"nodeType":"Block","src":"3498:280:96","statements":[{"assignments":[17157],"declarations":[{"constant":false,"id":17157,"mutability":"mutable","name":"eModeAssetPrice","nameLocation":"3512:15:96","nodeType":"VariableDeclaration","scope":17187,"src":"3504:23:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17156,"name":"uint256","nodeType":"ElementaryTypeName","src":"3504:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17159,"initialValue":{"hexValue":"30","id":17158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3530:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3504:27:96"},{"assignments":[17161],"declarations":[{"constant":false,"id":17161,"mutability":"mutable","name":"eModePriceSource","nameLocation":"3545:16:96","nodeType":"VariableDeclaration","scope":17187,"src":"3537:24:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17160,"name":"address","nodeType":"ElementaryTypeName","src":"3537:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17164,"initialValue":{"expression":{"id":17162,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17144,"src":"3564:8:96","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory storage pointer"}},"id":17163,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceSource","nodeType":"MemberAccess","referencedDeclaration":23924,"src":"3564:20:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3537:47:96"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17165,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17161,"src":"3595:16:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3623: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":17167,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3615:7:96","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17166,"name":"address","nodeType":"ElementaryTypeName","src":"3615:7:96","typeDescriptions":{}}},"id":17169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3615:10:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3595:30:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17179,"nodeType":"IfStatement","src":"3591:107:96","trueBody":{"id":17178,"nodeType":"Block","src":"3627:71:96","statements":[{"expression":{"id":17176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17171,"name":"eModeAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17157,"src":"3635:15:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17174,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17161,"src":"3674:16:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17172,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17147,"src":"3653:6:96","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"id":17173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":6047,"src":"3653:20:96","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3653:38:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3635:56:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17177,"nodeType":"ExpressionStatement","src":"3635:56:96"}]}},{"expression":{"components":[{"expression":{"id":17180,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17144,"src":"3712:8:96","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory storage pointer"}},"id":17181,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":23918,"src":"3712:12:96","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"expression":{"id":17182,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17144,"src":"3726:8:96","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory storage pointer"}},"id":17183,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":23920,"src":"3726:29:96","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":17184,"name":"eModeAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17157,"src":"3757:15:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17185,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3711:62:96","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint16_$_t_uint16_$_t_uint256_$","typeString":"tuple(uint16,uint16,uint256)"}},"functionReturnParameters":17155,"id":17186,"nodeType":"Return","src":"3704:69:96"}]},"documentation":{"id":17141,"nodeType":"StructuredDocumentation","src":"2952:381:96","text":" @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\n @dev The eMode asset price returned is 0 if no oracle is specified\n @param category The user eMode category\n @param oracle The price oracle\n @return The eMode ltv\n @return The eMode liquidation threshold\n @return The eMode asset price"},"id":17188,"implemented":true,"kind":"function","modifiers":[],"name":"getEModeConfiguration","nameLocation":"3345:21:96","nodeType":"FunctionDefinition","parameters":{"id":17148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17144,"mutability":"mutable","name":"category","nameLocation":"3404:8:96","nodeType":"VariableDeclaration","scope":17188,"src":"3372:40:96","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":17143,"nodeType":"UserDefinedTypeName","pathNode":{"id":17142,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"3372:23:96"},"referencedDeclaration":23927,"src":"3372:23:96","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"},{"constant":false,"id":17147,"mutability":"mutable","name":"oracle","nameLocation":"3437:6:96","nodeType":"VariableDeclaration","scope":17188,"src":"3418:25:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"},"typeName":{"id":17146,"nodeType":"UserDefinedTypeName","pathNode":{"id":17145,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":6048,"src":"3418:18:96"},"referencedDeclaration":6048,"src":"3418:18:96","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"visibility":"internal"}],"src":"3366:81:96"},"returnParameters":{"id":17155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17188,"src":"3471:7:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17149,"name":"uint256","nodeType":"ElementaryTypeName","src":"3471:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17188,"src":"3480:7:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17151,"name":"uint256","nodeType":"ElementaryTypeName","src":"3480:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17188,"src":"3489:7:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17153,"name":"uint256","nodeType":"ElementaryTypeName","src":"3489:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3470:27:96"},"scope":17209,"src":"3336:442:96","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17207,"nodeType":"Block","src":"4256:85:96","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17198,"name":"eModeUserCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17191,"src":"4270:17:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4291:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4270:22:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17201,"name":"eModeAssetCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17193,"src":"4296:18:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":17202,"name":"eModeUserCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17191,"src":"4318:17:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4296:39:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4270:65:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":17205,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4269:67:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17197,"id":17206,"nodeType":"Return","src":"4262:74:96"}]},"documentation":{"id":17189,"nodeType":"StructuredDocumentation","src":"3782:348:96","text":" @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\n @param eModeUserCategory The user eMode category\n @param eModeAssetCategory The asset eMode category\n @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise"},"id":17208,"implemented":true,"kind":"function","modifiers":[],"name":"isInEModeCategory","nameLocation":"4142:17:96","nodeType":"FunctionDefinition","parameters":{"id":17194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17191,"mutability":"mutable","name":"eModeUserCategory","nameLocation":"4173:17:96","nodeType":"VariableDeclaration","scope":17208,"src":"4165:25:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17190,"name":"uint256","nodeType":"ElementaryTypeName","src":"4165:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17193,"mutability":"mutable","name":"eModeAssetCategory","nameLocation":"4204:18:96","nodeType":"VariableDeclaration","scope":17208,"src":"4196:26:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17192,"name":"uint256","nodeType":"ElementaryTypeName","src":"4196:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4159:67:96"},"returnParameters":{"id":17197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17196,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17208,"src":"4250:4:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17195,"name":"bool","nodeType":"ElementaryTypeName","src":"4250:4:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4249:6:96"},"scope":17209,"src":"4133:208:96","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":17210,"src":"826:3517:96","usedErrors":[]}],"src":"37:4307:96"},"id":96},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/FlashLoanLogic.sol","exportedSymbols":{"BorrowLogic":[15720],"DataTypes":[24227],"Errors":[14819],"FlashLoanLogic":[17844],"GPv2SafeERC20":[118],"IAToken":[3986],"IERC20":[1442],"IFlashLoanReceiver":[3630],"IFlashLoanSimpleReceiver":[3666],"IPoolAddressesProvider":[5282],"PercentageMath":[23726],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"SafeCast":[1966],"UserConfiguration":[14545],"ValidationLogic":[23502],"WadRayMath":[23813]},"id":17845,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":17211,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:97"},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":17213,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":119,"src":"63:87:97","symbolAliases":[{"foreign":{"id":17212,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":17215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":1967,"src":"151:83:97","symbolAliases":[{"foreign":{"id":17214,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"159:8:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":17217,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":1443,"src":"235:79:97","symbolAliases":[{"foreign":{"id":17216,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"243:6:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":17219,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":3987,"src":"315:56:97","symbolAliases":[{"foreign":{"id":17218,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"323:7:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/flashloan/interfaces/IFlashLoanReceiver.sol","file":"../../../flashloan/interfaces/IFlashLoanReceiver.sol","id":17221,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":3631,"src":"372:88:97","symbolAliases":[{"foreign":{"id":17220,"name":"IFlashLoanReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"380:18:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol","file":"../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol","id":17223,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":3667,"src":"461:100:97","symbolAliases":[{"foreign":{"id":17222,"name":"IFlashLoanSimpleReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"469:24:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../../interfaces/IPoolAddressesProvider.sol","id":17225,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":5283,"src":"562:86:97","symbolAliases":[{"foreign":{"id":17224,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"570:22:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":17227,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":14546,"src":"649:73:97","symbolAliases":[{"foreign":{"id":17226,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"657:17:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":17229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":14035,"src":"723:79:97","symbolAliases":[{"foreign":{"id":17228,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"731:20:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":17231,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":14820,"src":"803:45:97","symbolAliases":[{"foreign":{"id":17230,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"811:6:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":17233,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":23814,"src":"849:50:97","symbolAliases":[{"foreign":{"id":17232,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"857:10:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":17235,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":23727,"src":"900:58:97","symbolAliases":[{"foreign":{"id":17234,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"908:14:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":17237,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":24228,"src":"959:49:97","symbolAliases":[{"foreign":{"id":17236,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"967:9:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":17239,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":23503,"src":"1009:54:97","symbolAliases":[{"foreign":{"id":17238,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1017:15:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/BorrowLogic.sol","file":"./BorrowLogic.sol","id":17241,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":15721,"src":"1064:46:97","symbolAliases":[{"foreign":{"id":17240,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1072:11:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":17243,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17845,"sourceUnit":20972,"src":"1111:48:97","symbolAliases":[{"foreign":{"id":17242,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1119:12:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FlashLoanLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":17244,"nodeType":"StructuredDocumentation","src":"1161:108:97","text":" @title FlashLoanLogic library\n @author Aave\n @notice Implements the logic for the flash loans"},"fullyImplemented":true,"id":17844,"linearizedBaseContracts":[17844],"name":"FlashLoanLogic","nameLocation":"1278:14:97","nodeType":"ContractDefinition","nodes":[{"id":17248,"libraryName":{"id":17245,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1303:12:97"},"nodeType":"UsingForDirective","src":"1297:46:97","typeName":{"id":17247,"nodeType":"UserDefinedTypeName","pathNode":{"id":17246,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"1320:22:97"},"referencedDeclaration":23973,"src":"1320:22:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":17252,"libraryName":{"id":17249,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1352:12:97"},"nodeType":"UsingForDirective","src":"1346:45:97","typeName":{"id":17251,"nodeType":"UserDefinedTypeName","pathNode":{"id":17250,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1369:21:97"},"referencedDeclaration":23909,"src":"1369:21:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":17256,"libraryName":{"id":17253,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1400:13:97"},"nodeType":"UsingForDirective","src":"1394:31:97","typeName":{"id":17255,"nodeType":"UserDefinedTypeName","pathNode":{"id":17254,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1418:6:97"},"referencedDeclaration":1442,"src":"1418:6:97","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":17260,"libraryName":{"id":17257,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1434:20:97"},"nodeType":"UsingForDirective","src":"1428:65:97","typeName":{"id":17259,"nodeType":"UserDefinedTypeName","pathNode":{"id":17258,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1459:33:97"},"referencedDeclaration":23912,"src":"1459:33:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":17263,"libraryName":{"id":17261,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1502:10:97"},"nodeType":"UsingForDirective","src":"1496:29:97","typeName":{"id":17262,"name":"uint256","nodeType":"ElementaryTypeName","src":"1517:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17266,"libraryName":{"id":17264,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1534:14:97"},"nodeType":"UsingForDirective","src":"1528:33:97","typeName":{"id":17265,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17269,"libraryName":{"id":17267,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1570:8:97"},"nodeType":"UsingForDirective","src":"1564:27:97","typeName":{"id":17268,"name":"uint256","nodeType":"ElementaryTypeName","src":"1583:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":17286,"name":"FlashLoan","nameLocation":"1635:9:97","nodeType":"EventDefinition","parameters":{"id":17285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17271,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"1666:6:97","nodeType":"VariableDeclaration","scope":17286,"src":"1650:22:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17270,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17273,"indexed":false,"mutability":"mutable","name":"initiator","nameLocation":"1686:9:97","nodeType":"VariableDeclaration","scope":17286,"src":"1678:17:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17272,"name":"address","nodeType":"ElementaryTypeName","src":"1678:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17275,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1717:5:97","nodeType":"VariableDeclaration","scope":17286,"src":"1701:21:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17274,"name":"address","nodeType":"ElementaryTypeName","src":"1701:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17277,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1736:6:97","nodeType":"VariableDeclaration","scope":17286,"src":"1728:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17276,"name":"uint256","nodeType":"ElementaryTypeName","src":"1728:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17280,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"1775:16:97","nodeType":"VariableDeclaration","scope":17286,"src":"1748:43:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":17279,"nodeType":"UserDefinedTypeName","pathNode":{"id":17278,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"1748:26:97"},"referencedDeclaration":23931,"src":"1748:26:97","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":17282,"indexed":false,"mutability":"mutable","name":"premium","nameLocation":"1805:7:97","nodeType":"VariableDeclaration","scope":17286,"src":"1797:15:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17281,"name":"uint256","nodeType":"ElementaryTypeName","src":"1797:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17284,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1833:12:97","nodeType":"VariableDeclaration","scope":17286,"src":"1818:27:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":17283,"name":"uint16","nodeType":"ElementaryTypeName","src":"1818:6:97","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1644:205:97"},"src":"1629:221:97"},{"canonicalName":"FlashLoanLogic.FlashLoanLocalVars","id":17303,"members":[{"constant":false,"id":17289,"mutability":"mutable","name":"receiver","nameLocation":"1987:8:97","nodeType":"VariableDeclaration","scope":17303,"src":"1968:27:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3630","typeString":"contract IFlashLoanReceiver"},"typeName":{"id":17288,"nodeType":"UserDefinedTypeName","pathNode":{"id":17287,"name":"IFlashLoanReceiver","nodeType":"IdentifierPath","referencedDeclaration":3630,"src":"1968:18:97"},"referencedDeclaration":3630,"src":"1968:18:97","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3630","typeString":"contract IFlashLoanReceiver"}},"visibility":"internal"},{"constant":false,"id":17291,"mutability":"mutable","name":"i","nameLocation":"2009:1:97","nodeType":"VariableDeclaration","scope":17303,"src":"2001:9:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17290,"name":"uint256","nodeType":"ElementaryTypeName","src":"2001:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17293,"mutability":"mutable","name":"currentAsset","nameLocation":"2024:12:97","nodeType":"VariableDeclaration","scope":17303,"src":"2016:20:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17292,"name":"address","nodeType":"ElementaryTypeName","src":"2016:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17295,"mutability":"mutable","name":"currentAmount","nameLocation":"2050:13:97","nodeType":"VariableDeclaration","scope":17303,"src":"2042:21:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17294,"name":"uint256","nodeType":"ElementaryTypeName","src":"2042:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17298,"mutability":"mutable","name":"totalPremiums","nameLocation":"2079:13:97","nodeType":"VariableDeclaration","scope":17303,"src":"2069:23:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17296,"name":"uint256","nodeType":"ElementaryTypeName","src":"2069:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17297,"nodeType":"ArrayTypeName","src":"2069:9:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17300,"mutability":"mutable","name":"flashloanPremiumTotal","nameLocation":"2106:21:97","nodeType":"VariableDeclaration","scope":17303,"src":"2098:29:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17299,"name":"uint256","nodeType":"ElementaryTypeName","src":"2098:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17302,"mutability":"mutable","name":"flashloanPremiumToProtocol","nameLocation":"2141:26:97","nodeType":"VariableDeclaration","scope":17303,"src":"2133:34:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17301,"name":"uint256","nodeType":"ElementaryTypeName","src":"2133:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"FlashLoanLocalVars","nameLocation":"1943:18:97","nodeType":"StructDefinition","scope":17844,"src":"1936:236:97","visibility":"public"},{"body":{"id":17622,"nodeType":"Block","src":"3369:3685:97","statements":[{"expression":{"arguments":[{"id":17330,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"3733:12:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"expression":{"id":17331,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"3747:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":24083,"src":"3747:13:97","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"expression":{"id":17333,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"3762:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amounts","nodeType":"MemberAccess","referencedDeclaration":24086,"src":"3762:14:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":17327,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"3699:15:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":17329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateFlashloan","nodeType":"MemberAccess","referencedDeclaration":22870,"src":"3699:33:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),address[] memory,uint256[] memory) view"}},"id":17335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3699:78:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17336,"nodeType":"ExpressionStatement","src":"3699:78:97"},{"assignments":[17339],"declarations":[{"constant":false,"id":17339,"mutability":"mutable","name":"vars","nameLocation":"3810:4:97","nodeType":"VariableDeclaration","scope":17622,"src":"3784:30:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars"},"typeName":{"id":17338,"nodeType":"UserDefinedTypeName","pathNode":{"id":17337,"name":"FlashLoanLocalVars","nodeType":"IdentifierPath","referencedDeclaration":17303,"src":"3784:18:97"},"referencedDeclaration":17303,"src":"3784:18:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_storage_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars"}},"visibility":"internal"}],"id":17340,"nodeType":"VariableDeclarationStatement","src":"3784:30:97"},{"expression":{"id":17351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17341,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"3821:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPremiums","nodeType":"MemberAccess","referencedDeclaration":17298,"src":"3821:18:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":17347,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"3856:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":24083,"src":"3856:13:97","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":17349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3856:20:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3842:13:97","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":17344,"name":"uint256","nodeType":"ElementaryTypeName","src":"3846:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17345,"nodeType":"ArrayTypeName","src":"3846:9:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":17350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3842:35:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"3821:56:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17352,"nodeType":"ExpressionStatement","src":"3821:56:97"},{"expression":{"id":17360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17353,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"3884:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17355,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":17289,"src":"3884:13:97","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3630","typeString":"contract IFlashLoanReceiver"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":17357,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"3919:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17358,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24080,"src":"3919:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17356,"name":"IFlashLoanReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3630,"src":"3900:18:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IFlashLoanReceiver_$3630_$","typeString":"type(contract IFlashLoanReceiver)"}},"id":17359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3900:42:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3630","typeString":"contract IFlashLoanReceiver"}},"src":"3884:58:97","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3630","typeString":"contract IFlashLoanReceiver"}},"id":17361,"nodeType":"ExpressionStatement","src":"3884:58:97"},{"expression":{"id":17379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":17362,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"3949:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17364,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"flashloanPremiumTotal","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"3949:26:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17365,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"3977:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"flashloanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":17302,"src":"3977:31:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17367,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3948:61:97","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"expression":{"id":17368,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4012:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isAuthorizedFlashBorrower","nodeType":"MemberAccess","referencedDeclaration":24109,"src":"4012:32:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"expression":{"id":17373,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4069:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17374,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumTotal","nodeType":"MemberAccess","referencedDeclaration":24099,"src":"4069:28:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17375,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4099:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17376,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":24097,"src":"4099:33:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17377,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4068:65:97","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":17378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4012:121:97","trueExpression":{"components":[{"hexValue":"30","id":17370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4054:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4057:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":17372,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4053:6:97","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"3948:185:97","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17380,"nodeType":"ExpressionStatement","src":"3948:185:97"},{"body":{"id":17452,"nodeType":"Block","src":"4198:433:97","statements":[{"expression":{"id":17405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17397,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4206:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":17295,"src":"4206:18:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":17400,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4227:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amounts","nodeType":"MemberAccess","referencedDeclaration":24086,"src":"4227:14:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17404,"indexExpression":{"expression":{"id":17402,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4242:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4242:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4227:22:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4206:43:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17406,"nodeType":"ExpressionStatement","src":"4206:43:97"},{"expression":{"id":17433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17407,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4257:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17411,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremiums","nodeType":"MemberAccess","referencedDeclaration":17298,"src":"4257:18:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17412,"indexExpression":{"expression":{"id":17409,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4276:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4276:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4257:26:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":17424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"expression":{"id":17415,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4313:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateModes","nodeType":"MemberAccess","referencedDeclaration":24089,"src":"4313:24:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17419,"indexExpression":{"expression":{"id":17417,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4338:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4338:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4313:32:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17413,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"4286:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"4286:26:97","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":17420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4286:60:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":17421,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"4358:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"4358:26:97","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":17423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"NONE","nodeType":"MemberAccess","referencedDeclaration":23928,"src":"4358:31:97","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"4286:103:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":17431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4468:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":17432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4286:183:97","trueExpression":{"arguments":[{"expression":{"id":17428,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4430:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashloanPremiumTotal","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"4430:26:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":17425,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4400:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17426,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":17295,"src":"4400:18:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"4400:29:97","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4400:57:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4257:212:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17434,"nodeType":"ExpressionStatement","src":"4257:212:97"},{"expression":{"arguments":[{"expression":{"id":17446,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4566:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24080,"src":"4566:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17448,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4598:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":17295,"src":"4598:18:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"baseExpression":{"id":17436,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"4485:12:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17442,"indexExpression":{"baseExpression":{"expression":{"id":17437,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4498:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":24083,"src":"4498:13:97","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":17441,"indexExpression":{"expression":{"id":17439,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4512:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17440,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4512:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4498:21:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4485:35:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":17443,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"4485:49:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17435,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"4477:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":17444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4477:58:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":17445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferUnderlyingTo","nodeType":"MemberAccess","referencedDeclaration":3921,"src":"4477:79:97","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":17450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4477:147:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17451,"nodeType":"ExpressionStatement","src":"4477:147:97"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17387,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4157:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4157:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":17389,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4166:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":24083,"src":"4166:13:97","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":17391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4166:20:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4157:29:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17453,"initializationExpression":{"expression":{"id":17385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17381,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4145:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4145:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":17384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4154:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4145:10:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17386,"nodeType":"ExpressionStatement","src":"4145:10:97"},"loopExpression":{"expression":{"id":17395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4188:8:97","subExpression":{"expression":{"id":17393,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4188:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17394,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4188:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17396,"nodeType":"ExpressionStatement","src":"4188:8:97"},"nodeType":"ForStatement","src":"4140:491:97"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":17458,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4692:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":24083,"src":"4692:13:97","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"expression":{"id":17460,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4715:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amounts","nodeType":"MemberAccess","referencedDeclaration":24086,"src":"4715:14:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":17462,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4739:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremiums","nodeType":"MemberAccess","referencedDeclaration":17298,"src":"4739:18:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":17464,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4767:3:97","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4767:10:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17466,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4787:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":24093,"src":"4787:13:97","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] 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_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":17455,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4652:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17456,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":17289,"src":"4652:13:97","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3630","typeString":"contract IFlashLoanReceiver"}},"id":17457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeOperation","nodeType":"MemberAccess","referencedDeclaration":3617,"src":"4652:30:97","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address[] memory,uint256[] memory,uint256[] memory,address,bytes memory) external returns (bool)"}},"id":17468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4652:156:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17469,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4816:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":17470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_FLASHLOAN_EXECUTOR_RETURN","nodeType":"MemberAccess","referencedDeclaration":14587,"src":"4816:40:97","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17454,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4637:7:97","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":17471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4637:225:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17472,"nodeType":"ExpressionStatement","src":"4637:225:97"},{"body":{"id":17620,"nodeType":"Block","src":"4927:2123:97","statements":[{"expression":{"id":17497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17489,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4935:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17491,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":17293,"src":"4935:17:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":17492,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4955:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17493,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":24083,"src":"4955:13:97","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":17496,"indexExpression":{"expression":{"id":17494,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4969:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4969:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4955:21:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4935:41:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17498,"nodeType":"ExpressionStatement","src":"4935:41:97"},{"expression":{"id":17507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17499,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4984:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17501,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":17295,"src":"4984:18:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":17502,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"5005:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amounts","nodeType":"MemberAccess","referencedDeclaration":24086,"src":"5005:14:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17506,"indexExpression":{"expression":{"id":17504,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5020:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"5020:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5005:22:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4984:43:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17508,"nodeType":"ExpressionStatement","src":"4984:43:97"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":17520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"expression":{"id":17511,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"5076:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateModes","nodeType":"MemberAccess","referencedDeclaration":24089,"src":"5076:24:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17515,"indexExpression":{"expression":{"id":17513,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5101:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"5101:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5076:32:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17509,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"5049:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"5049:26:97","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":17516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5049:60:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":17517,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"5121:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"5121:26:97","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":17519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"NONE","nodeType":"MemberAccess","referencedDeclaration":23928,"src":"5121:31:97","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"5049:103:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17618,"nodeType":"Block","src":"5629:1415:97","statements":[{"expression":{"arguments":[{"id":17550,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"5826:12:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":17551,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17313,"src":"5850:12:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":17552,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17318,"src":"5874:15:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":17553,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17321,"src":"5901:10:97","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"arguments":[{"expression":{"id":17556,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5974:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":17293,"src":"5974:17:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17558,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6011:3:97","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6011:10:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17560,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6047:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":24091,"src":"6047:17:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17562,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"6086:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":17295,"src":"6086:18:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"expression":{"id":17566,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6163:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateModes","nodeType":"MemberAccess","referencedDeclaration":24089,"src":"6163:24:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17570,"indexExpression":{"expression":{"id":17568,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"6188:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"6188:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6163:32:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17564,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"6136:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"6136:26:97","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":17571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6136:60:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":17572,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6224:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":24095,"src":"6224:19:97","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":17574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6276:5:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"expression":{"id":17575,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6327:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxStableRateBorrowSizePercent","nodeType":"MemberAccess","referencedDeclaration":24101,"src":"6327:37:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17577,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6393:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24103,"src":"6393:20:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":17580,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6458:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17581,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"addressesProvider","nodeType":"MemberAccess","referencedDeclaration":24105,"src":"6458:24:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17579,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"6435:22:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolAddressesProvider_$5282_$","typeString":"type(contract IPoolAddressesProvider)"}},"id":17582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6435:48:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":17583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5227,"src":"6435:63:97","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":17584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6435:65:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17585,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6533:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24107,"src":"6533:24:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":17588,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6615:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17589,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"addressesProvider","nodeType":"MemberAccess","referencedDeclaration":24105,"src":"6615:24:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17587,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"6592:22:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolAddressesProvider_$5282_$","typeString":"type(contract IPoolAddressesProvider)"}},"id":17590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6592:48:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":17591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":5263,"src":"6592:86:97","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":17592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6592:88:97","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"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17554,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"5923:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteBorrowParams","nodeType":"MemberAccess","referencedDeclaration":24027,"src":"5923:29:97","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteBorrowParams_$24027_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteBorrowParams storage pointer)"}},"id":17593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","user","onBehalfOf","amount","interestRateMode","referralCode","releaseUnderlying","maxStableRateBorrowSizePercent","reservesCount","oracle","userEModeCategory","priceOracleSentinel"],"nodeType":"FunctionCall","src":"5923:770:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}],"expression":{"id":17547,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15720,"src":"5789:11:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$15720_$","typeString":"type(library BorrowLogic)"}},"id":17549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeBorrow","nodeType":"MemberAccess","referencedDeclaration":15216,"src":"5789:25:97","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteBorrowParams_$24027_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteBorrowParams memory)"}},"id":17594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5789:914:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17595,"nodeType":"ExpressionStatement","src":"5789:914:97"},{"eventCall":{"arguments":[{"expression":{"id":17597,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6806:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24080,"src":"6806:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17599,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6840:3:97","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6840:10:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17601,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"6862:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17602,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":17293,"src":"6862:17:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17603,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"6891:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":17295,"src":"6891:18:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"expression":{"id":17607,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"6948:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateModes","nodeType":"MemberAccess","referencedDeclaration":24089,"src":"6948:24:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17611,"indexExpression":{"expression":{"id":17609,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"6973:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17610,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"6973:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6948:32:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17605,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"6921:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"6921:26:97","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":17612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6921:60:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"hexValue":"30","id":17613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6993:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":17614,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"7006:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":24095,"src":"7006:19:97","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":17596,"name":"FlashLoan","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17286,"src":"6785:9:97","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_enum$_InterestRateMode_$23931_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,enum DataTypes.InterestRateMode,uint256,uint16)"}},"id":17616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6785:250:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17617,"nodeType":"EmitStatement","src":"6780:255:97"}]},"id":17619,"nodeType":"IfStatement","src":"5036:2008:97","trueBody":{"id":17546,"nodeType":"Block","src":"5161:462:97","statements":[{"expression":{"arguments":[{"baseExpression":{"id":17522,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"5208:12:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17525,"indexExpression":{"expression":{"id":17523,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5221:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":17293,"src":"5221:17:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5208:31:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"arguments":[{"expression":{"id":17528,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5307:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17529,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":17293,"src":"5307:17:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17530,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"5355:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24080,"src":"5355:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17532,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5399:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":17295,"src":"5399:18:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":17534,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5445:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremiums","nodeType":"MemberAccess","referencedDeclaration":17298,"src":"5445:18:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17538,"indexExpression":{"expression":{"id":17536,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5464:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"5464:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5445:26:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17539,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"5513:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashloanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":17302,"src":"5513:31:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17541,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"5572:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":24095,"src":"5572:19:97","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"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"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":17526,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"5251:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FlashLoanRepaymentParams","nodeType":"MemberAccess","referencedDeclaration":24138,"src":"5251:34:97","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FlashLoanRepaymentParams_$24138_storage_ptr_$","typeString":"type(struct DataTypes.FlashLoanRepaymentParams storage pointer)"}},"id":17543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","receiverAddress","amount","totalPremium","flashLoanPremiumToProtocol","referralCode"],"nodeType":"FunctionCall","src":"5251:353:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}],"id":17521,"name":"_handleFlashLoanRepayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17843,"src":"5171:25:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.FlashLoanRepaymentParams memory)"}},"id":17544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5171:443:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17545,"nodeType":"ExpressionStatement","src":"5171:443:97"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17479,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4886:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17480,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4886:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":17481,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"4895:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":17482,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":24083,"src":"4895:13:97","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":17483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4895:20:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4886:29:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17621,"initializationExpression":{"expression":{"id":17477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17473,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4874:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4874:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":17476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4883:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4874:10:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17478,"nodeType":"ExpressionStatement","src":"4874:10:97"},"loopExpression":{"expression":{"id":17487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4917:8:97","subExpression":{"expression":{"id":17485,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17339,"src":"4917:4:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$17303_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":17486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17291,"src":"4917:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17488,"nodeType":"ExpressionStatement","src":"4917:8:97"},"nodeType":"ForStatement","src":"4869:2181:97"}]},"documentation":{"id":17304,"nodeType":"StructuredDocumentation","src":"2176:858:97","text":" @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\n as long as the amount taken plus fee is returned or debt is opened.\n @dev For authorized flashborrowers the fee is waived\n @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\n if the receiver have not approved the pool the transaction will revert.\n @dev Emits the `FlashLoan()` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the flashloan function"},"functionSelector":"2e7263ea","id":17623,"implemented":true,"kind":"function","modifiers":[],"name":"executeFlashLoan","nameLocation":"3046:16:97","nodeType":"FunctionDefinition","parameters":{"id":17325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17309,"mutability":"mutable","name":"reservesData","nameLocation":"3118:12:97","nodeType":"VariableDeclaration","scope":17623,"src":"3068:62:97","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":17308,"keyType":{"id":17305,"name":"address","nodeType":"ElementaryTypeName","src":"3076:7:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3068:41:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":17307,"nodeType":"UserDefinedTypeName","pathNode":{"id":17306,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"3087:21:97"},"referencedDeclaration":23909,"src":"3087:21:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":17313,"mutability":"mutable","name":"reservesList","nameLocation":"3172:12:97","nodeType":"VariableDeclaration","scope":17623,"src":"3136:48:97","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":17312,"keyType":{"id":17310,"name":"uint256","nodeType":"ElementaryTypeName","src":"3144:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"3136:27:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":17311,"name":"address","nodeType":"ElementaryTypeName","src":"3155:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":17318,"mutability":"mutable","name":"eModeCategories","nameLocation":"3240:15:97","nodeType":"VariableDeclaration","scope":17623,"src":"3190:65:97","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":17317,"keyType":{"id":17314,"name":"uint8","nodeType":"ElementaryTypeName","src":"3198:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"3190:41:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":17316,"nodeType":"UserDefinedTypeName","pathNode":{"id":17315,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"3207:23:97"},"referencedDeclaration":23927,"src":"3207:23:97","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":17321,"mutability":"mutable","name":"userConfig","nameLocation":"3300:10:97","nodeType":"VariableDeclaration","scope":17623,"src":"3261:49:97","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":17320,"nodeType":"UserDefinedTypeName","pathNode":{"id":17319,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"3261:30:97"},"referencedDeclaration":23916,"src":"3261:30:97","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":17324,"mutability":"mutable","name":"params","nameLocation":"3349:6:97","nodeType":"VariableDeclaration","scope":17623,"src":"3316:39:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams"},"typeName":{"id":17323,"nodeType":"UserDefinedTypeName","pathNode":{"id":17322,"name":"DataTypes.FlashloanParams","nodeType":"IdentifierPath","referencedDeclaration":24110,"src":"3316:25:97"},"referencedDeclaration":24110,"src":"3316:25:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_storage_ptr","typeString":"struct DataTypes.FlashloanParams"}},"visibility":"internal"}],"src":"3062:297:97"},"returnParameters":{"id":17326,"nodeType":"ParameterList","parameters":[],"src":"3369:0:97"},"scope":17844,"src":"3037:4017:97","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17702,"nodeType":"Block","src":"7870:1236:97","statements":[{"expression":{"arguments":[{"id":17636,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17627,"src":"8240:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}],"expression":{"id":17633,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"8200:15:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":17635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateFlashloanSimple","nodeType":"MemberAccess","referencedDeclaration":22911,"src":"8200:39:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer) view"}},"id":17637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8200:48:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17638,"nodeType":"ExpressionStatement","src":"8200:48:97"},{"assignments":[17641],"declarations":[{"constant":false,"id":17641,"mutability":"mutable","name":"receiver","nameLocation":"8280:8:97","nodeType":"VariableDeclaration","scope":17702,"src":"8255:33:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanSimpleReceiver_$3666","typeString":"contract IFlashLoanSimpleReceiver"},"typeName":{"id":17640,"nodeType":"UserDefinedTypeName","pathNode":{"id":17639,"name":"IFlashLoanSimpleReceiver","nodeType":"IdentifierPath","referencedDeclaration":3666,"src":"8255:24:97"},"referencedDeclaration":3666,"src":"8255:24:97","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanSimpleReceiver_$3666","typeString":"contract IFlashLoanSimpleReceiver"}},"visibility":"internal"}],"id":17646,"initialValue":{"arguments":[{"expression":{"id":17643,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8316:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24112,"src":"8316:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17642,"name":"IFlashLoanSimpleReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3666,"src":"8291:24:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IFlashLoanSimpleReceiver_$3666_$","typeString":"type(contract IFlashLoanSimpleReceiver)"}},"id":17645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8291:48:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanSimpleReceiver_$3666","typeString":"contract IFlashLoanSimpleReceiver"}},"nodeType":"VariableDeclarationStatement","src":"8255:84:97"},{"assignments":[17648],"declarations":[{"constant":false,"id":17648,"mutability":"mutable","name":"totalPremium","nameLocation":"8353:12:97","nodeType":"VariableDeclaration","scope":17702,"src":"8345:20:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17647,"name":"uint256","nodeType":"ElementaryTypeName","src":"8345:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17655,"initialValue":{"arguments":[{"expression":{"id":17652,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8393:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17653,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumTotal","nodeType":"MemberAccess","referencedDeclaration":24124,"src":"8393:28:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":17649,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8368:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17650,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24116,"src":"8368:13:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"8368:24:97","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8368:54:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8345:77:97"},{"expression":{"arguments":[{"expression":{"id":17661,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8480:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24112,"src":"8480:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17663,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8504:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24116,"src":"8504:13:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":17657,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17627,"src":"8436:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"8436:21:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17656,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"8428:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":17659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8428:30:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":17660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferUnderlyingTo","nodeType":"MemberAccess","referencedDeclaration":3921,"src":"8428:51:97","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":17665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8428:90:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17666,"nodeType":"ExpressionStatement","src":"8428:90:97"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":17670,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8575:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24114,"src":"8575:12:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17672,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8597:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24116,"src":"8597:13:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17674,"name":"totalPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17648,"src":"8620:12:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17675,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8642:3:97","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8642:10:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17677,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8662:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17678,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":24118,"src":"8662:13:97","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17668,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"8540:8:97","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanSimpleReceiver_$3666","typeString":"contract IFlashLoanSimpleReceiver"}},"id":17669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeOperation","nodeType":"MemberAccess","referencedDeclaration":3653,"src":"8540:25:97","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,uint256,address,bytes memory) external returns (bool)"}},"id":17679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8540:143:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17680,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"8691:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":17681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_FLASHLOAN_EXECUTOR_RETURN","nodeType":"MemberAccess","referencedDeclaration":14587,"src":"8691:40:97","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17667,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8525:7:97","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":17682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8525:212:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17683,"nodeType":"ExpressionStatement","src":"8525:212:97"},{"expression":{"arguments":[{"id":17685,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17627,"src":"8777:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"arguments":[{"expression":{"id":17688,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8844:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17689,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24114,"src":"8844:12:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17690,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8883:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24112,"src":"8883:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17692,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"8923:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17693,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24116,"src":"8923:13:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17694,"name":"totalPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17648,"src":"8960:12:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17695,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"9010:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17696,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":24122,"src":"9010:33:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17697,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"9067:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":17698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":24120,"src":"9067:19:97","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"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"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":17686,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"8792:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FlashLoanRepaymentParams","nodeType":"MemberAccess","referencedDeclaration":24138,"src":"8792:34:97","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FlashLoanRepaymentParams_$24138_storage_ptr_$","typeString":"type(struct DataTypes.FlashLoanRepaymentParams storage pointer)"}},"id":17699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","receiverAddress","amount","totalPremium","flashLoanPremiumToProtocol","referralCode"],"nodeType":"FunctionCall","src":"8792:303:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}],"id":17684,"name":"_handleFlashLoanRepayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17843,"src":"8744:25:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.FlashLoanRepaymentParams memory)"}},"id":17700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8744:357:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17701,"nodeType":"ExpressionStatement","src":"8744:357:97"}]},"documentation":{"id":17624,"nodeType":"StructuredDocumentation","src":"7058:670:97","text":" @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\n transaction as long as the amount taken plus fee is returned.\n @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\n @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\n if the receiver have not approved the pool the transaction will revert.\n @dev Emits the `FlashLoan()` event\n @param reserve The state of the flashloaned reserve\n @param params The additional parameters needed to execute the simple flashloan function"},"functionSelector":"a1fe0e8d","id":17703,"implemented":true,"kind":"function","modifiers":[],"name":"executeFlashLoanSimple","nameLocation":"7740:22:97","nodeType":"FunctionDefinition","parameters":{"id":17631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17627,"mutability":"mutable","name":"reserve","nameLocation":"7798:7:97","nodeType":"VariableDeclaration","scope":17703,"src":"7768:37:97","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17626,"nodeType":"UserDefinedTypeName","pathNode":{"id":17625,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"7768:21:97"},"referencedDeclaration":23909,"src":"7768:21:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":17630,"mutability":"mutable","name":"params","nameLocation":"7850:6:97","nodeType":"VariableDeclaration","scope":17703,"src":"7811:45:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams"},"typeName":{"id":17629,"nodeType":"UserDefinedTypeName","pathNode":{"id":17628,"name":"DataTypes.FlashloanSimpleParams","nodeType":"IdentifierPath","referencedDeclaration":24125,"src":"7811:31:97"},"referencedDeclaration":24125,"src":"7811:31:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_storage_ptr","typeString":"struct DataTypes.FlashloanSimpleParams"}},"visibility":"internal"}],"src":"7762:98:97"},"returnParameters":{"id":17632,"nodeType":"ParameterList","parameters":[],"src":"7870:0:97"},"scope":17844,"src":"7731:1375:97","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17842,"nodeType":"Block","src":"9560:1282:97","statements":[{"assignments":[17714],"declarations":[{"constant":false,"id":17714,"mutability":"mutable","name":"premiumToProtocol","nameLocation":"9574:17:97","nodeType":"VariableDeclaration","scope":17842,"src":"9566:25:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17713,"name":"uint256","nodeType":"ElementaryTypeName","src":"9566:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17721,"initialValue":{"arguments":[{"expression":{"id":17718,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"9625:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":24131,"src":"9625:33:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":17715,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"9594:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremium","nodeType":"MemberAccess","referencedDeclaration":24129,"src":"9594:19:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"9594:30:97","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9594:65:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9566:93:97"},{"assignments":[17723],"declarations":[{"constant":false,"id":17723,"mutability":"mutable","name":"premiumToLP","nameLocation":"9673:11:97","nodeType":"VariableDeclaration","scope":17842,"src":"9665:19:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17722,"name":"uint256","nodeType":"ElementaryTypeName","src":"9665:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17728,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17724,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"9687:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17725,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremium","nodeType":"MemberAccess","referencedDeclaration":24129,"src":"9687:19:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17726,"name":"premiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17714,"src":"9709:17:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9687:39:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9665:61:97"},{"assignments":[17730],"declarations":[{"constant":false,"id":17730,"mutability":"mutable","name":"amountPlusPremium","nameLocation":"9740:17:97","nodeType":"VariableDeclaration","scope":17842,"src":"9732:25:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17729,"name":"uint256","nodeType":"ElementaryTypeName","src":"9732:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17736,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17731,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"9760:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24127,"src":"9760:13:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":17733,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"9776:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremium","nodeType":"MemberAccess","referencedDeclaration":24129,"src":"9776:19:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9760:35:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9732:63:97"},{"assignments":[17741],"declarations":[{"constant":false,"id":17741,"mutability":"mutable","name":"reserveCache","nameLocation":"9832:12:97","nodeType":"VariableDeclaration","scope":17842,"src":"9802:42:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":17740,"nodeType":"UserDefinedTypeName","pathNode":{"id":17739,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"9802:22:97"},"referencedDeclaration":23973,"src":"9802:22:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":17745,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17742,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17707,"src":"9847:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"9847:13:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":17744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9847:15:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"9802:60:97"},{"expression":{"arguments":[{"id":17749,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"9888:12:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":17746,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17707,"src":"9868:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"9868:19:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":17750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9868:33:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17751,"nodeType":"ExpressionStatement","src":"9868:33:97"},{"expression":{"id":17775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17752,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"9907:12:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"9907:31:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":17758,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"9988:12:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17759,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"9988:26:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17757,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"9981:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":17760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9981:34:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":17761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"9981:46:97","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9981:48:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":17769,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"10082:12:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"10082:31:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":17765,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17707,"src":"10048:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"10048:25:97","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":17764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10040:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17763,"name":"uint256","nodeType":"ElementaryTypeName","src":"10040:7:97","typeDescriptions":{}}},"id":17767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10040:34:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"10040:41:97","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10040:74:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9981:133:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17773,"name":"premiumToLP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17723,"src":"10122:11:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17755,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17707,"src":"9941:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cumulateToLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":20430,"src":"9941:32:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,uint256,uint256) returns (uint256)"}},"id":17774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9941:198:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9907:232:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17776,"nodeType":"ExpressionStatement","src":"9907:232:97"},{"expression":{"id":17787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17777,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17707,"src":"10146:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"10146:25:97","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":17782,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"10207:12:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17783,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"10207:31:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17780,"name":"premiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17714,"src":"10175:17:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"10175:31:97","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10175:64:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"10175:81:97","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":17786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10175:83:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"10146:112:97","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":17788,"nodeType":"ExpressionStatement","src":"10146:112:97"},{"expression":{"arguments":[{"id":17792,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"10293:12:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":17793,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10307:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24133,"src":"10307:12:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17795,"name":"amountPlusPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17730,"src":"10321:17:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":17796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10340:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":17789,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17707,"src":"10265:7:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"10265:27:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":17797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10265:77:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17798,"nodeType":"ExpressionStatement","src":"10265:77:97"},{"expression":{"arguments":[{"expression":{"id":17804,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10394:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24135,"src":"10394:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17806,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"10424:12:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"10424:26:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17808,"name":"amountPlusPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17730,"src":"10458:17:97","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":[{"expression":{"id":17800,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10356:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17801,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24133,"src":"10356:12:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17799,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10349:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":17802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10349:20:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":17803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"10349:37:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":17809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10349:132:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17810,"nodeType":"ExpressionStatement","src":"10349:132:97"},{"expression":{"arguments":[{"expression":{"id":17816,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10547:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17817,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24135,"src":"10547:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17818,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10577:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17819,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24135,"src":"10577:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17820,"name":"amountPlusPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17730,"src":"10607:17:97","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":[{"expression":{"id":17812,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"10496:12:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17813,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"10496:26:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17811,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"10488:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":17814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10488:35:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":17815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleRepayment","nodeType":"MemberAccess","referencedDeclaration":3931,"src":"10488:51:97","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":17821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10488:142:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17822,"nodeType":"ExpressionStatement","src":"10488:142:97"},{"eventCall":{"arguments":[{"expression":{"id":17824,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10659:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":24135,"src":"10659:22:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17826,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10689:3:97","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"10689:10:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17828,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10707:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24133,"src":"10707:12:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17830,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10727:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24127,"src":"10727:13:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":17834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10775:1:97","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"}],"expression":{"id":17832,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"10748:9:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":17833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"10748:26:97","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":17835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10748:29:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":17836,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10785:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremium","nodeType":"MemberAccess","referencedDeclaration":24129,"src":"10785:19:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17838,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17710,"src":"10812:6:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":17839,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":24137,"src":"10812:19:97","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":17823,"name":"FlashLoan","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17286,"src":"10642:9:97","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_enum$_InterestRateMode_$23931_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,enum DataTypes.InterestRateMode,uint256,uint16)"}},"id":17840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10642:195:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17841,"nodeType":"EmitStatement","src":"10637:200:97"}]},"documentation":{"id":17704,"nodeType":"StructuredDocumentation","src":"9110:302:97","text":" @notice Handles repayment of flashloaned assets + premium\n @dev Will pull the amount + premium from the receiver, so must have approved pool\n @param reserve The state of the flashloaned reserve\n @param params The additional parameters needed to execute the repayment function"},"id":17843,"implemented":true,"kind":"function","modifiers":[],"name":"_handleFlashLoanRepayment","nameLocation":"9424:25:97","nodeType":"FunctionDefinition","parameters":{"id":17711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17707,"mutability":"mutable","name":"reserve","nameLocation":"9485:7:97","nodeType":"VariableDeclaration","scope":17843,"src":"9455:37:97","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17706,"nodeType":"UserDefinedTypeName","pathNode":{"id":17705,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"9455:21:97"},"referencedDeclaration":23909,"src":"9455:21:97","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":17710,"mutability":"mutable","name":"params","nameLocation":"9540:6:97","nodeType":"VariableDeclaration","scope":17843,"src":"9498:48:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams"},"typeName":{"id":17709,"nodeType":"UserDefinedTypeName","pathNode":{"id":17708,"name":"DataTypes.FlashLoanRepaymentParams","nodeType":"IdentifierPath","referencedDeclaration":24138,"src":"9498:34:97"},"referencedDeclaration":24138,"src":"9498:34:97","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$24138_storage_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams"}},"visibility":"internal"}],"src":"9449:101:97"},"returnParameters":{"id":17712,"nodeType":"ParameterList","parameters":[],"src":"9560:0:97"},"scope":17844,"src":"9415:1427:97","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":17845,"src":"1270:9574:97","usedErrors":[]}],"src":"37:10808:97"},"id":97},"contracts/protocol/libraries/logic/GenericLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/GenericLogic.sol","exportedSymbols":{"DataTypes":[24227],"EModeLogic":[17209],"GenericLogic":[18449],"IERC20":[1442],"IPriceOracleGetter":[6048],"IScaledBalanceToken":[6188],"PercentageMath":[23726],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"UserConfiguration":[14545],"WadRayMath":[23813]},"id":18450,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":17846,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:98"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":17848,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":1443,"src":"63:79:98","symbolAliases":[{"foreign":{"id":17847,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IScaledBalanceToken.sol","file":"../../../interfaces/IScaledBalanceToken.sol","id":17850,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":6189,"src":"143:80:98","symbolAliases":[{"foreign":{"id":17849,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:19:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPriceOracleGetter.sol","file":"../../../interfaces/IPriceOracleGetter.sol","id":17852,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":6049,"src":"224:78:98","symbolAliases":[{"foreign":{"id":17851,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"232:18:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":17854,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":14035,"src":"303:79:98","symbolAliases":[{"foreign":{"id":17853,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"311:20:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":17856,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":14546,"src":"383:73:98","symbolAliases":[{"foreign":{"id":17855,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"391:17:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":17858,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":23727,"src":"457:58:98","symbolAliases":[{"foreign":{"id":17857,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"465:14:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":17860,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":23814,"src":"516:50:98","symbolAliases":[{"foreign":{"id":17859,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"524:10:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":17862,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":24228,"src":"567:49:98","symbolAliases":[{"foreign":{"id":17861,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"575:9:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":17864,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":20972,"src":"617:48:98","symbolAliases":[{"foreign":{"id":17863,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"625:12:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/EModeLogic.sol","file":"./EModeLogic.sol","id":17866,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18450,"sourceUnit":17210,"src":"666:44:98","symbolAliases":[{"foreign":{"id":17865,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"674:10:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"GenericLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":17867,"nodeType":"StructuredDocumentation","src":"712:143:98","text":" @title GenericLogic library\n @author Aave\n @notice Implements protocol-level logic to calculate and validate the state of a user"},"fullyImplemented":true,"id":18449,"linearizedBaseContracts":[18449],"name":"GenericLogic","nameLocation":"864:12:98","nodeType":"ContractDefinition","nodes":[{"id":17871,"libraryName":{"id":17868,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"887:12:98"},"nodeType":"UsingForDirective","src":"881:45:98","typeName":{"id":17870,"nodeType":"UserDefinedTypeName","pathNode":{"id":17869,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"904:21:98"},"referencedDeclaration":23909,"src":"904:21:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":17874,"libraryName":{"id":17872,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"935:10:98"},"nodeType":"UsingForDirective","src":"929:29:98","typeName":{"id":17873,"name":"uint256","nodeType":"ElementaryTypeName","src":"950:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17877,"libraryName":{"id":17875,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"967:14:98"},"nodeType":"UsingForDirective","src":"961:33:98","typeName":{"id":17876,"name":"uint256","nodeType":"ElementaryTypeName","src":"986:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17881,"libraryName":{"id":17878,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1003:20:98"},"nodeType":"UsingForDirective","src":"997:65:98","typeName":{"id":17880,"nodeType":"UserDefinedTypeName","pathNode":{"id":17879,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1028:33:98"},"referencedDeclaration":23912,"src":"1028:33:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":17885,"libraryName":{"id":17882,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"1071:17:98"},"nodeType":"UsingForDirective","src":"1065:59:98","typeName":{"id":17884,"nodeType":"UserDefinedTypeName","pathNode":{"id":17883,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"1093:30:98"},"referencedDeclaration":23916,"src":"1093:30:98","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"canonicalName":"GenericLogic.CalculateUserAccountDataVars","id":17924,"members":[{"constant":false,"id":17887,"mutability":"mutable","name":"assetPrice","nameLocation":"1178:10:98","nodeType":"VariableDeclaration","scope":17924,"src":"1170:18:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17886,"name":"uint256","nodeType":"ElementaryTypeName","src":"1170:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17889,"mutability":"mutable","name":"assetUnit","nameLocation":"1202:9:98","nodeType":"VariableDeclaration","scope":17924,"src":"1194:17:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17888,"name":"uint256","nodeType":"ElementaryTypeName","src":"1194:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17891,"mutability":"mutable","name":"userBalanceInBaseCurrency","nameLocation":"1225:25:98","nodeType":"VariableDeclaration","scope":17924,"src":"1217:33:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17890,"name":"uint256","nodeType":"ElementaryTypeName","src":"1217:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17893,"mutability":"mutable","name":"decimals","nameLocation":"1264:8:98","nodeType":"VariableDeclaration","scope":17924,"src":"1256:16:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17892,"name":"uint256","nodeType":"ElementaryTypeName","src":"1256:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17895,"mutability":"mutable","name":"ltv","nameLocation":"1286:3:98","nodeType":"VariableDeclaration","scope":17924,"src":"1278:11:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17894,"name":"uint256","nodeType":"ElementaryTypeName","src":"1278:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17897,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"1303:20:98","nodeType":"VariableDeclaration","scope":17924,"src":"1295:28:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17896,"name":"uint256","nodeType":"ElementaryTypeName","src":"1295:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17899,"mutability":"mutable","name":"i","nameLocation":"1337:1:98","nodeType":"VariableDeclaration","scope":17924,"src":"1329:9:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17898,"name":"uint256","nodeType":"ElementaryTypeName","src":"1329:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17901,"mutability":"mutable","name":"healthFactor","nameLocation":"1352:12:98","nodeType":"VariableDeclaration","scope":17924,"src":"1344:20:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17900,"name":"uint256","nodeType":"ElementaryTypeName","src":"1344:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17903,"mutability":"mutable","name":"totalCollateralInBaseCurrency","nameLocation":"1378:29:98","nodeType":"VariableDeclaration","scope":17924,"src":"1370:37:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17902,"name":"uint256","nodeType":"ElementaryTypeName","src":"1370:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17905,"mutability":"mutable","name":"totalDebtInBaseCurrency","nameLocation":"1421:23:98","nodeType":"VariableDeclaration","scope":17924,"src":"1413:31:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17904,"name":"uint256","nodeType":"ElementaryTypeName","src":"1413:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17907,"mutability":"mutable","name":"avgLtv","nameLocation":"1458:6:98","nodeType":"VariableDeclaration","scope":17924,"src":"1450:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17906,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17909,"mutability":"mutable","name":"avgLiquidationThreshold","nameLocation":"1478:23:98","nodeType":"VariableDeclaration","scope":17924,"src":"1470:31:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17908,"name":"uint256","nodeType":"ElementaryTypeName","src":"1470:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17911,"mutability":"mutable","name":"eModeAssetPrice","nameLocation":"1515:15:98","nodeType":"VariableDeclaration","scope":17924,"src":"1507:23:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17910,"name":"uint256","nodeType":"ElementaryTypeName","src":"1507:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17913,"mutability":"mutable","name":"eModeLtv","nameLocation":"1544:8:98","nodeType":"VariableDeclaration","scope":17924,"src":"1536:16:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17912,"name":"uint256","nodeType":"ElementaryTypeName","src":"1536:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17915,"mutability":"mutable","name":"eModeLiqThreshold","nameLocation":"1566:17:98","nodeType":"VariableDeclaration","scope":17924,"src":"1558:25:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17914,"name":"uint256","nodeType":"ElementaryTypeName","src":"1558:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17917,"mutability":"mutable","name":"eModeAssetCategory","nameLocation":"1597:18:98","nodeType":"VariableDeclaration","scope":17924,"src":"1589:26:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17916,"name":"uint256","nodeType":"ElementaryTypeName","src":"1589:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17919,"mutability":"mutable","name":"currentReserveAddress","nameLocation":"1629:21:98","nodeType":"VariableDeclaration","scope":17924,"src":"1621:29:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17918,"name":"address","nodeType":"ElementaryTypeName","src":"1621:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17921,"mutability":"mutable","name":"hasZeroLtvCollateral","nameLocation":"1661:20:98","nodeType":"VariableDeclaration","scope":17924,"src":"1656:25:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17920,"name":"bool","nodeType":"ElementaryTypeName","src":"1656:4:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17923,"mutability":"mutable","name":"isInEModeCategory","nameLocation":"1692:17:98","nodeType":"VariableDeclaration","scope":17924,"src":"1687:22:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17922,"name":"bool","nodeType":"ElementaryTypeName","src":"1687:4:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"CalculateUserAccountDataVars","nameLocation":"1135:28:98","nodeType":"StructDefinition","scope":18449,"src":"1128:586:98","visibility":"public"},{"body":{"id":18306,"nodeType":"Block","src":"2998:3358:98","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17957,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"3008:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":17958,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":24141,"src":"3008:17:98","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":17959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isEmpty","nodeType":"MemberAccess","referencedDeclaration":14371,"src":"3008:25:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":17960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3008:27:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17974,"nodeType":"IfStatement","src":"3004:93:98","trueBody":{"id":17973,"nodeType":"Block","src":"3037:60:98","statements":[{"expression":{"components":[{"hexValue":"30","id":17961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3053:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3056:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3059:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3062:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":17967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3070:7:98","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17966,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:98","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":17965,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3065:4:98","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":17968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3065:13:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":17969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3065:17:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":17970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3084:5:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"id":17971,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3052:38:98","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_uint256_$_t_bool_$","typeString":"tuple(int_const 0,int_const 0,int_const 0,int_const 0,uint256,bool)"}},"functionReturnParameters":17956,"id":17972,"nodeType":"Return","src":"3045:45:98"}]}},{"assignments":[17977],"declarations":[{"constant":false,"id":17977,"mutability":"mutable","name":"vars","nameLocation":"3139:4:98","nodeType":"VariableDeclaration","scope":18306,"src":"3103:40:98","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars"},"typeName":{"id":17976,"nodeType":"UserDefinedTypeName","pathNode":{"id":17975,"name":"CalculateUserAccountDataVars","nodeType":"IdentifierPath","referencedDeclaration":17924,"src":"3103:28:98"},"referencedDeclaration":17924,"src":"3103:28:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_storage_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars"}},"visibility":"internal"}],"id":17978,"nodeType":"VariableDeclarationStatement","src":"3103:40:98"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":17982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17979,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"3154:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":17980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24149,"src":"3154:24:98","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3182:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3154:29:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18005,"nodeType":"IfStatement","src":"3150:263:98","trueBody":{"id":18004,"nodeType":"Block","src":"3185:228:98","statements":[{"expression":{"id":18002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":17983,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3194:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":17985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeLtv","nodeType":"MemberAccess","referencedDeclaration":17913,"src":"3194:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17986,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3209:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":17987,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeLiqThreshold","nodeType":"MemberAccess","referencedDeclaration":17915,"src":"3209:22:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17988,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3233:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":17989,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeAssetPrice","nodeType":"MemberAccess","referencedDeclaration":17911,"src":"3233:20:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17990,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3193:61:98","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":17993,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17939,"src":"3310:15:98","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":17996,"indexExpression":{"expression":{"id":17994,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"3326:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":17995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24149,"src":"3326:24:98","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3310:41:98","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},{"arguments":[{"expression":{"id":17998,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"3382:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":17999,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":24147,"src":"3382:13:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17997,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6048,"src":"3363:18:98","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$6048_$","typeString":"type(contract IPriceOracleGetter)"}},"id":18000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3363:33:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"},{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}],"expression":{"id":17991,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17209,"src":"3257:10:98","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EModeLogic_$17209_$","typeString":"type(library EModeLogic)"}},"id":17992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getEModeConfiguration","nodeType":"MemberAccess","referencedDeclaration":17188,"src":"3257:41:98","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_EModeCategory_$23927_storage_ptr_$_t_contract$_IPriceOracleGetter_$6048_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.EModeCategory storage pointer,contract IPriceOracleGetter) view returns (uint256,uint256,uint256)"}},"id":18001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3257:149:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"3193:213:98","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18003,"nodeType":"ExpressionStatement","src":"3193:213:98"}]}},{"body":{"id":18230,"nodeType":"Block","src":"3457:2137:98","statements":[{"condition":{"id":18017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3469:57:98","subExpression":{"arguments":[{"expression":{"id":18014,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3519:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17899,"src":"3519:6:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18011,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"3470:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":24141,"src":"3470:17:98","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":18013,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateralOrBorrowing","nodeType":"MemberAccess","referencedDeclaration":14187,"src":"3470:48:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":18016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3470:56:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18025,"nodeType":"IfStatement","src":"3465:140:98","trueBody":{"id":18024,"nodeType":"Block","src":"3528:77:98","statements":[{"id":18022,"nodeType":"UncheckedBlock","src":"3538:41:98","statements":[{"expression":{"id":18020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3560:8:98","subExpression":{"expression":{"id":18018,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3562:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18019,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17899,"src":"3562:6:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18021,"nodeType":"ExpressionStatement","src":"3560:8:98"}]},{"id":18023,"nodeType":"Continue","src":"3588:8:98"}]}},{"expression":{"id":18033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18026,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3613:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18028,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentReserveAddress","nodeType":"MemberAccess","referencedDeclaration":17919,"src":"3613:26:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18029,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17934,"src":"3642:12:98","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":18032,"indexExpression":{"expression":{"id":18030,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3655:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17899,"src":"3655:6:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3642:20:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3613:49:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18034,"nodeType":"ExpressionStatement","src":"3613:49:98"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18035,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3675:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18036,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentReserveAddress","nodeType":"MemberAccess","referencedDeclaration":17919,"src":"3675:26:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3713:1:98","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":18038,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3705:7:98","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18037,"name":"address","nodeType":"ElementaryTypeName","src":"3705:7:98","typeDescriptions":{}}},"id":18040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3705:10:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3675:40:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18049,"nodeType":"IfStatement","src":"3671:123:98","trueBody":{"id":18048,"nodeType":"Block","src":"3717:77:98","statements":[{"id":18046,"nodeType":"UncheckedBlock","src":"3727:41:98","statements":[{"expression":{"id":18044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3749:8:98","subExpression":{"expression":{"id":18042,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3751:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18043,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17899,"src":"3751:6:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18045,"nodeType":"ExpressionStatement","src":"3749:8:98"}]},{"id":18047,"nodeType":"Continue","src":"3777:8:98"}]}},{"assignments":[18054],"declarations":[{"constant":false,"id":18054,"mutability":"mutable","name":"currentReserve","nameLocation":"3832:14:98","nodeType":"VariableDeclaration","scope":18230,"src":"3802:44:98","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18053,"nodeType":"UserDefinedTypeName","pathNode":{"id":18052,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"3802:21:98"},"referencedDeclaration":23909,"src":"3802:21:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":18059,"initialValue":{"baseExpression":{"id":18055,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17930,"src":"3849:12:98","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18058,"indexExpression":{"expression":{"id":18056,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3862:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentReserveAddress","nodeType":"MemberAccess","referencedDeclaration":17919,"src":"3862:26:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3849:40:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3802:87:98"},{"expression":{"id":18074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":18060,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3908:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18062,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":17895,"src":"3908:8:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18063,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3926:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18064,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":17897,"src":"3926:25:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,{"expression":{"id":18065,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3971:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18066,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":17893,"src":"3971:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,{"expression":{"id":18067,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4004:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeAssetCategory","nodeType":"MemberAccess","referencedDeclaration":17917,"src":"4004:23:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18069,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3898:137:98","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$__$_t_uint256_$__$_t_uint256_$","typeString":"tuple(uint256,uint256,,uint256,,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":18070,"name":"currentReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18054,"src":"4038:14:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18071,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"4038:28:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":18072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":14000,"src":"4038:38:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":18073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4038:40:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"src":"3898:180:98","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18075,"nodeType":"ExpressionStatement","src":"3898:180:98"},{"id":18085,"nodeType":"UncheckedBlock","src":"4087:65:98","statements":[{"expression":{"id":18083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18076,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4107:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":17889,"src":"4107:14:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":18079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4124:2:98","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"id":18080,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4130:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":17893,"src":"4130:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4124:19:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4107:36:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18084,"nodeType":"ExpressionStatement","src":"4107:36:98"}]},{"expression":{"id":18110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18086,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4160:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"assetPrice","nodeType":"MemberAccess","referencedDeclaration":17887,"src":"4160:15:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18089,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4178:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeAssetPrice","nodeType":"MemberAccess","referencedDeclaration":17911,"src":"4178:20:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4202:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4178:25:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18093,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"4215:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24149,"src":"4215:24:98","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":18095,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4243:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeAssetCategory","nodeType":"MemberAccess","referencedDeclaration":17917,"src":"4243:23:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4215:51:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4178:88:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"expression":{"id":18106,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4356:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentReserveAddress","nodeType":"MemberAccess","referencedDeclaration":17919,"src":"4356:26:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":18102,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"4327:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":24147,"src":"4327:13:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18101,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6048,"src":"4308:18:98","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$6048_$","typeString":"type(contract IPriceOracleGetter)"}},"id":18104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4308:33:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"id":18105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":6047,"src":"4308:47:98","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4308:75:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4178:205:98","trueExpression":{"expression":{"id":18099,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4277:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeAssetPrice","nodeType":"MemberAccess","referencedDeclaration":17911,"src":"4277:20:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4160:223:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18111,"nodeType":"ExpressionStatement","src":"4160:223:98"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18112,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4396:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":17897,"src":"4396:25:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4425:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4396:30:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[{"expression":{"id":18119,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4468:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17899,"src":"4468:6:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18116,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"4430:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":24141,"src":"4430:17:98","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":18118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14260,"src":"4430:37:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":18121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4430:45:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4396:79:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18202,"nodeType":"IfStatement","src":"4392:911:98","trueBody":{"id":18201,"nodeType":"Block","src":"4477:826:98","statements":[{"expression":{"id":18135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18123,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4487:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userBalanceInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17891,"src":"4487:30:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18127,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"4561:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":24145,"src":"4561:11:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18129,"name":"currentReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18054,"src":"4584:14:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"expression":{"id":18130,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4610:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetPrice","nodeType":"MemberAccess","referencedDeclaration":17887,"src":"4610:15:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18132,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4637:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":17889,"src":"4637:14:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18126,"name":"_getUserBalanceInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18448,"src":"4520:29:98","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveData_$23909_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveData storage pointer,uint256,uint256) view returns (uint256)"}},"id":18134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4520:141:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4487:174:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18136,"nodeType":"ExpressionStatement","src":"4487:174:98"},{"expression":{"id":18142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18137,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4672:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17903,"src":"4672:34:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"id":18140,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4710:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18141,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalanceInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17891,"src":"4710:30:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4672:68:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18143,"nodeType":"ExpressionStatement","src":"4672:68:98"},{"expression":{"id":18154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18144,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4751:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":17923,"src":"4751:22:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18149,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"4816:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18150,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24149,"src":"4816:24:98","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":18151,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4852:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18152,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeAssetCategory","nodeType":"MemberAccess","referencedDeclaration":17917,"src":"4852:23:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18147,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17209,"src":"4776:10:98","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EModeLogic_$17209_$","typeString":"type(library EModeLogic)"}},"id":18148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":17208,"src":"4776:28:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":18153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4776:109:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4751:134:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18155,"nodeType":"ExpressionStatement","src":"4751:134:98"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18156,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4900:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":17895,"src":"4900:8:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4912:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4900:13:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":18183,"nodeType":"Block","src":"5067:55:98","statements":[{"expression":{"id":18181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18177,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5079:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"hasZeroLtvCollateral","nodeType":"MemberAccess","referencedDeclaration":17921,"src":"5079:25:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":18180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5107:4:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5079:32:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18182,"nodeType":"ExpressionStatement","src":"5079:32:98"}]},"id":18184,"nodeType":"IfStatement","src":"4896:226:98","trueBody":{"id":18176,"nodeType":"Block","src":"4915:146:98","statements":[{"expression":{"id":18174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18160,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4927:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"avgLtv","nodeType":"MemberAccess","referencedDeclaration":17907,"src":"4927:11:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18163,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"4954:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalanceInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17891,"src":"4954:30:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"condition":{"expression":{"id":18165,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5000:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":17923,"src":"5000:22:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":18169,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5041:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":17895,"src":"5041:8:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5000:49:98","trueExpression":{"expression":{"id":18167,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5025:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18168,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeLtv","nodeType":"MemberAccess","referencedDeclaration":17913,"src":"5025:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18172,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4999:51:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4954:96:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4927:123:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18175,"nodeType":"ExpressionStatement","src":"4927:123:98"}]}},{"expression":{"id":18199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18185,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5132:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":17909,"src":"5132:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18188,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5174:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalanceInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17891,"src":"5174:30:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"condition":{"expression":{"id":18190,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5218:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":17923,"src":"5218:22:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":18194,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5268:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":17897,"src":"5268:25:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5218:75:98","trueExpression":{"expression":{"id":18192,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5243:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeLiqThreshold","nodeType":"MemberAccess","referencedDeclaration":17915,"src":"5243:22:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5217:77:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5174:120:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5132:162:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18200,"nodeType":"ExpressionStatement","src":"5132:162:98"}]}},{"condition":{"arguments":[{"expression":{"id":18206,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5345:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17899,"src":"5345:6:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18203,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"5315:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18204,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":24141,"src":"5315:17:98","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":18205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowing","nodeType":"MemberAccess","referencedDeclaration":14222,"src":"5315:29:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":18208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5315:37:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18224,"nodeType":"IfStatement","src":"5311:232:98","trueBody":{"id":18223,"nodeType":"Block","src":"5354:189:98","statements":[{"expression":{"id":18221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18209,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5364:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17905,"src":"5364:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"expression":{"id":18213,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"5434:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":24145,"src":"5434:11:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18215,"name":"currentReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18054,"src":"5457:14:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"expression":{"id":18216,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5483:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetPrice","nodeType":"MemberAccess","referencedDeclaration":17887,"src":"5483:15:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18218,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5510:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":17889,"src":"5510:14:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18212,"name":"_getUserDebtInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18405,"src":"5396:26:98","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveData_$23909_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveData storage pointer,uint256,uint256) view returns (uint256)"}},"id":18220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5396:138:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5364:170:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18222,"nodeType":"ExpressionStatement","src":"5364:170:98"}]}},{"id":18229,"nodeType":"UncheckedBlock","src":"5551:37:98","statements":[{"expression":{"id":18227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5571:8:98","subExpression":{"expression":{"id":18225,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5573:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17899,"src":"5573:6:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18228,"nodeType":"ExpressionStatement","src":"5571:8:98"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18006,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"3426:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":17899,"src":"3426:6:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18008,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17942,"src":"3435:6:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":18009,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24143,"src":"3435:20:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3426:29:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18231,"nodeType":"WhileStatement","src":"3419:2175:98"},{"id":18264,"nodeType":"UncheckedBlock","src":"5600:315:98","statements":[{"expression":{"id":18246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18232,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5618:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"avgLtv","nodeType":"MemberAccess","referencedDeclaration":17907,"src":"5618:11:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18235,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5632:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17903,"src":"5632:34:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5670:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5632:39:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":18244,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5741:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":18245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5632:110:98","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18239,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5682:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLtv","nodeType":"MemberAccess","referencedDeclaration":17907,"src":"5682:11:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":18241,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5696:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18242,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17903,"src":"5696:34:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5682:48:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5618:124:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18247,"nodeType":"ExpressionStatement","src":"5618:124:98"},{"expression":{"id":18262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18248,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5750:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18250,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":17909,"src":"5750:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18251,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5781:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17903,"src":"5781:34:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5819:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5781:39:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":18260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5907:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":18261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5781:127:98","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18255,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5831:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18256,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":17909,"src":"5831:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":18257,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5862:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18258,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17903,"src":"5862:34:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5831:65:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5750:158:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18263,"nodeType":"ExpressionStatement","src":"5750:158:98"}]},{"expression":{"id":18290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18265,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5921:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":17901,"src":"5921:17:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18268,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"5942:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17905,"src":"5942:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5974:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5942:33:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":18272,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5941:35:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"expression":{"id":18286,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6105:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17905,"src":"6105:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"arguments":[{"expression":{"id":18281,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6058:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":17909,"src":"6058:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18278,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6012:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17903,"src":"6012:34:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"6012:45:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":18283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6012:75:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18284,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6011:77:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadDiv","nodeType":"MemberAccess","referencedDeclaration":23768,"src":"6011:84:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":18288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6011:130:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5941:200:98","trueExpression":{"expression":{"arguments":[{"id":18275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5990:7:98","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18274,"name":"uint256","nodeType":"ElementaryTypeName","src":"5990:7:98","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":18273,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5985:4:98","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":18276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5985:13:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":18277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"5985:17:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5921:220:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18291,"nodeType":"ExpressionStatement","src":"5921:220:98"},{"expression":{"components":[{"expression":{"id":18292,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6162:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17903,"src":"6162:34:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18294,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6204:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":17905,"src":"6204:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18296,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6240:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18297,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLtv","nodeType":"MemberAccess","referencedDeclaration":17907,"src":"6240:11:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18298,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6259:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":17909,"src":"6259:28:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18300,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6295:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":17901,"src":"6295:17:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18302,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17977,"src":"6320:4:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$17924_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":18303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"hasZeroLtvCollateral","nodeType":"MemberAccess","referencedDeclaration":17921,"src":"6320:25:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":18304,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6154:197:98","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"functionReturnParameters":17956,"id":18305,"nodeType":"Return","src":"6147:204:98"}]},"documentation":{"id":17925,"nodeType":"StructuredDocumentation","src":"1718:912:98","text":" @notice Calculates the user data across the reserves.\n @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\n the average Loan To Value, the average Liquidation Ratio, and the Health factor.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param params Additional parameters needed for the calculation\n @return The total collateral of the user in the base currency used by the price feed\n @return The total debt of the user in the base currency used by the price feed\n @return The average ltv of the user\n @return The average liquidation threshold of the user\n @return The health factor of the user\n @return True if the ltv is zero, false otherwise"},"id":18307,"implemented":true,"kind":"function","modifiers":[],"name":"calculateUserAccountData","nameLocation":"2642:24:98","nodeType":"FunctionDefinition","parameters":{"id":17943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17930,"mutability":"mutable","name":"reservesData","nameLocation":"2722:12:98","nodeType":"VariableDeclaration","scope":18307,"src":"2672:62:98","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":17929,"keyType":{"id":17926,"name":"address","nodeType":"ElementaryTypeName","src":"2680:7:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2672:41:98","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":17928,"nodeType":"UserDefinedTypeName","pathNode":{"id":17927,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2691:21:98"},"referencedDeclaration":23909,"src":"2691:21:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":17934,"mutability":"mutable","name":"reservesList","nameLocation":"2776:12:98","nodeType":"VariableDeclaration","scope":18307,"src":"2740:48:98","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":17933,"keyType":{"id":17931,"name":"uint256","nodeType":"ElementaryTypeName","src":"2748:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2740:27:98","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":17932,"name":"address","nodeType":"ElementaryTypeName","src":"2759:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":17939,"mutability":"mutable","name":"eModeCategories","nameLocation":"2844:15:98","nodeType":"VariableDeclaration","scope":18307,"src":"2794:65:98","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":17938,"keyType":{"id":17935,"name":"uint8","nodeType":"ElementaryTypeName","src":"2802:5:98","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"2794:41:98","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":17937,"nodeType":"UserDefinedTypeName","pathNode":{"id":17936,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"2811:23:98"},"referencedDeclaration":23927,"src":"2811:23:98","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":17942,"mutability":"mutable","name":"params","nameLocation":"2913:6:98","nodeType":"VariableDeclaration","scope":18307,"src":"2865:54:98","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams"},"typeName":{"id":17941,"nodeType":"UserDefinedTypeName","pathNode":{"id":17940,"name":"DataTypes.CalculateUserAccountDataParams","nodeType":"IdentifierPath","referencedDeclaration":24150,"src":"2865:40:98"},"referencedDeclaration":24150,"src":"2865:40:98","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_storage_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams"}},"visibility":"internal"}],"src":"2666:257:98"},"returnParameters":{"id":17956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17945,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18307,"src":"2947:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17944,"name":"uint256","nodeType":"ElementaryTypeName","src":"2947:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18307,"src":"2956:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17946,"name":"uint256","nodeType":"ElementaryTypeName","src":"2956:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17949,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18307,"src":"2965:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17948,"name":"uint256","nodeType":"ElementaryTypeName","src":"2965:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17951,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18307,"src":"2974:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17950,"name":"uint256","nodeType":"ElementaryTypeName","src":"2974:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18307,"src":"2983:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17952,"name":"uint256","nodeType":"ElementaryTypeName","src":"2983:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17955,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18307,"src":"2992:4:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17954,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2946:51:98"},"scope":18449,"src":"2633:3723:98","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":18341,"nodeType":"Block","src":"7042:327:98","statements":[{"assignments":[18320],"declarations":[{"constant":false,"id":18320,"mutability":"mutable","name":"availableBorrowsInBaseCurrency","nameLocation":"7056:30:98","nodeType":"VariableDeclaration","scope":18341,"src":"7048:38:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18319,"name":"uint256","nodeType":"ElementaryTypeName","src":"7048:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18325,"initialValue":{"arguments":[{"id":18323,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18314,"src":"7130:3:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18321,"name":"totalCollateralInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18310,"src":"7089:29:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"7089:40:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":18324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7089:45:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7048:86:98"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18326,"name":"availableBorrowsInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18320,"src":"7145:30:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":18327,"name":"totalDebtInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18312,"src":"7178:23:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7145:56:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18332,"nodeType":"IfStatement","src":"7141:85:98","trueBody":{"id":18331,"nodeType":"Block","src":"7203:23:98","statements":[{"expression":{"hexValue":"30","id":18329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7218:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":18318,"id":18330,"nodeType":"Return","src":"7211:8:98"}]}},{"expression":{"id":18337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18333,"name":"availableBorrowsInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18320,"src":"7232:30:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18334,"name":"availableBorrowsInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18320,"src":"7265:30:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":18335,"name":"totalDebtInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18312,"src":"7298:23:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7265:56:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7232:89:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18338,"nodeType":"ExpressionStatement","src":"7232:89:98"},{"expression":{"id":18339,"name":"availableBorrowsInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18320,"src":"7334:30:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18318,"id":18340,"nodeType":"Return","src":"7327:37:98"}]},"documentation":{"id":18308,"nodeType":"StructuredDocumentation","src":"6360:511:98","text":" @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\n and the average Loan To Value\n @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\n @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\n @param ltv The average loan to value\n @return The amount available to borrow in the base currency of the used by the price feed"},"id":18342,"implemented":true,"kind":"function","modifiers":[],"name":"calculateAvailableBorrows","nameLocation":"6883:25:98","nodeType":"FunctionDefinition","parameters":{"id":18315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18310,"mutability":"mutable","name":"totalCollateralInBaseCurrency","nameLocation":"6922:29:98","nodeType":"VariableDeclaration","scope":18342,"src":"6914:37:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18309,"name":"uint256","nodeType":"ElementaryTypeName","src":"6914:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18312,"mutability":"mutable","name":"totalDebtInBaseCurrency","nameLocation":"6965:23:98","nodeType":"VariableDeclaration","scope":18342,"src":"6957:31:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18311,"name":"uint256","nodeType":"ElementaryTypeName","src":"6957:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18314,"mutability":"mutable","name":"ltv","nameLocation":"7002:3:98","nodeType":"VariableDeclaration","scope":18342,"src":"6994:11:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18313,"name":"uint256","nodeType":"ElementaryTypeName","src":"6994:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6908:101:98"},"returnParameters":{"id":18318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18342,"src":"7033:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18316,"name":"uint256","nodeType":"ElementaryTypeName","src":"7033:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7032:9:98"},"scope":18449,"src":"6874:495:98","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":18404,"nodeType":"Block","src":"8329:466:98","statements":[{"assignments":[18358],"declarations":[{"constant":false,"id":18358,"mutability":"mutable","name":"userTotalDebt","nameLocation":"8373:13:98","nodeType":"VariableDeclaration","scope":18404,"src":"8365:21:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18357,"name":"uint256","nodeType":"ElementaryTypeName","src":"8365:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18366,"initialValue":{"arguments":[{"id":18364,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18345,"src":"8466:4:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":18360,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18348,"src":"8409:7:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18361,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"8409:32:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18359,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6188,"src":"8389:19:98","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IScaledBalanceToken_$6188_$","typeString":"type(contract IScaledBalanceToken)"}},"id":18362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8389:53:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IScaledBalanceToken_$6188","typeString":"contract IScaledBalanceToken"}},"id":18363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":6163,"src":"8389:69:98","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8389:87:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8365:111:98"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18367,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18358,"src":"8486:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8503:1:98","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8486:18:98","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18380,"nodeType":"IfStatement","src":"8482:104:98","trueBody":{"id":18379,"nodeType":"Block","src":"8506:80:98","statements":[{"expression":{"id":18377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18370,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18358,"src":"8514:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18373,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18348,"src":"8551:7:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18374,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedDebt","nodeType":"MemberAccess","referencedDeclaration":20345,"src":"8551:25:98","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":18375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8551:27:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18371,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18358,"src":"8530:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"8530:20:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":18376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8530:49:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8514:65:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18378,"nodeType":"ExpressionStatement","src":"8514:65:98"}]}},{"expression":{"id":18391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18381,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18358,"src":"8592:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18382,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18358,"src":"8608:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":18388,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18345,"src":"8673:4:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":18384,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18348,"src":"8631:7:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18385,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"8631:30:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18383,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"8624:6:98","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":18386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8624:38:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":18387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8624:48:98","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8624:54:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8608:70:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8592:86:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18392,"nodeType":"ExpressionStatement","src":"8592:86:98"},{"expression":{"id":18397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18393,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18358,"src":"8685:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18394,"name":"assetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18350,"src":"8701:10:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":18395,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18358,"src":"8714:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8701:26:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8685:42:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18398,"nodeType":"ExpressionStatement","src":"8685:42:98"},{"id":18403,"nodeType":"UncheckedBlock","src":"8734:57:98","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18399,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18358,"src":"8759:13:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":18400,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18352,"src":"8775:9:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8759:25:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18356,"id":18402,"nodeType":"Return","src":"8752:32:98"}]}]},"documentation":{"id":18343,"nodeType":"StructuredDocumentation","src":"7373:774:98","text":" @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\n @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\n variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\n fetching `balanceOf`\n @param user The address of the user\n @param reserve The data of the reserve for which the total debt of the user is being calculated\n @param assetPrice The price of the asset for which the total debt of the user is being calculated\n @param assetUnit The value representing one full unit of the asset (10^decimals)\n @return The total debt of the user normalized to the base currency"},"id":18405,"implemented":true,"kind":"function","modifiers":[],"name":"_getUserDebtInBaseCurrency","nameLocation":"8159:26:98","nodeType":"FunctionDefinition","parameters":{"id":18353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18345,"mutability":"mutable","name":"user","nameLocation":"8199:4:98","nodeType":"VariableDeclaration","scope":18405,"src":"8191:12:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18344,"name":"address","nodeType":"ElementaryTypeName","src":"8191:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18348,"mutability":"mutable","name":"reserve","nameLocation":"8239:7:98","nodeType":"VariableDeclaration","scope":18405,"src":"8209:37:98","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18347,"nodeType":"UserDefinedTypeName","pathNode":{"id":18346,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"8209:21:98"},"referencedDeclaration":23909,"src":"8209:21:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":18350,"mutability":"mutable","name":"assetPrice","nameLocation":"8260:10:98","nodeType":"VariableDeclaration","scope":18405,"src":"8252:18:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18349,"name":"uint256","nodeType":"ElementaryTypeName","src":"8252:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18352,"mutability":"mutable","name":"assetUnit","nameLocation":"8284:9:98","nodeType":"VariableDeclaration","scope":18405,"src":"8276:17:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18351,"name":"uint256","nodeType":"ElementaryTypeName","src":"8276:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8185:112:98"},"returnParameters":{"id":18356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18405,"src":"8320:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18354,"name":"uint256","nodeType":"ElementaryTypeName","src":"8320:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8319:9:98"},"scope":18449,"src":"8150:645:98","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":18447,"nodeType":"Block","src":"9706:264:98","statements":[{"assignments":[18421],"declarations":[{"constant":false,"id":18421,"mutability":"mutable","name":"normalizedIncome","nameLocation":"9720:16:98","nodeType":"VariableDeclaration","scope":18447,"src":"9712:24:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18420,"name":"uint256","nodeType":"ElementaryTypeName","src":"9712:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18425,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18422,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18411,"src":"9739:7:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":20309,"src":"9739:27:98","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":18424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9739:29:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9712:56:98"},{"assignments":[18427],"declarations":[{"constant":false,"id":18427,"mutability":"mutable","name":"balance","nameLocation":"9782:7:98","nodeType":"VariableDeclaration","scope":18447,"src":"9774:15:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18426,"name":"uint256","nodeType":"ElementaryTypeName","src":"9774:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18441,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"arguments":[{"id":18436,"name":"normalizedIncome","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18421,"src":"9872:16:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":18433,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18408,"src":"9859:4:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":18429,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18411,"src":"9820:7:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"9820:21:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18428,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6188,"src":"9800:19:98","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IScaledBalanceToken_$6188_$","typeString":"type(contract IScaledBalanceToken)"}},"id":18431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9800:42:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IScaledBalanceToken_$6188","typeString":"contract IScaledBalanceToken"}},"id":18432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":6163,"src":"9800:58:98","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9800:64:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"9800:71:98","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":18437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9800:89:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18438,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9792:103:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":18439,"name":"assetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18413,"src":"9898:10:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9792:116:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9774:134:98"},{"id":18446,"nodeType":"UncheckedBlock","src":"9915:51:98","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18442,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18427,"src":"9940:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":18443,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18415,"src":"9950:9:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9940:19:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18419,"id":18445,"nodeType":"Return","src":"9933:26:98"}]}]},"documentation":{"id":18406,"nodeType":"StructuredDocumentation","src":"8799:722:98","text":" @notice Calculates total aToken balance of the user in the based currency used by the price oracle\n @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\n is cheaper than fetching `balanceOf`\n @param user The address of the user\n @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\n @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\n @param assetUnit The value representing one full unit of the asset (10^decimals)\n @return The total aToken balance of the user normalized to the base currency of the price oracle"},"id":18448,"implemented":true,"kind":"function","modifiers":[],"name":"_getUserBalanceInBaseCurrency","nameLocation":"9533:29:98","nodeType":"FunctionDefinition","parameters":{"id":18416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18408,"mutability":"mutable","name":"user","nameLocation":"9576:4:98","nodeType":"VariableDeclaration","scope":18448,"src":"9568:12:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18407,"name":"address","nodeType":"ElementaryTypeName","src":"9568:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18411,"mutability":"mutable","name":"reserve","nameLocation":"9616:7:98","nodeType":"VariableDeclaration","scope":18448,"src":"9586:37:98","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18410,"nodeType":"UserDefinedTypeName","pathNode":{"id":18409,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"9586:21:98"},"referencedDeclaration":23909,"src":"9586:21:98","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":18413,"mutability":"mutable","name":"assetPrice","nameLocation":"9637:10:98","nodeType":"VariableDeclaration","scope":18448,"src":"9629:18:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18412,"name":"uint256","nodeType":"ElementaryTypeName","src":"9629:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18415,"mutability":"mutable","name":"assetUnit","nameLocation":"9661:9:98","nodeType":"VariableDeclaration","scope":18448,"src":"9653:17:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18414,"name":"uint256","nodeType":"ElementaryTypeName","src":"9653:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9562:112:98"},"returnParameters":{"id":18419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18418,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18448,"src":"9697:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18417,"name":"uint256","nodeType":"ElementaryTypeName","src":"9697:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9696:9:98"},"scope":18449,"src":"9524:446:98","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":18450,"src":"856:9116:98","usedErrors":[]}],"src":"37:9936:98"},"id":98},"contracts/protocol/libraries/logic/IsolationModeLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/IsolationModeLogic.sol","exportedSymbols":{"DataTypes":[24227],"IsolationModeLogic":[18572],"ReserveConfiguration":[14034],"SafeCast":[1966],"UserConfiguration":[14545]},"id":18573,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":18451,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:99"},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":18453,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18573,"sourceUnit":24228,"src":"63:49:99","symbolAliases":[{"foreign":{"id":18452,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:9:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":18455,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18573,"sourceUnit":14035,"src":"113:79:99","symbolAliases":[{"foreign":{"id":18454,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"121:20:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":18457,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18573,"sourceUnit":14546,"src":"193:73:99","symbolAliases":[{"foreign":{"id":18456,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"201:17:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":18459,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18573,"sourceUnit":1967,"src":"267:83:99","symbolAliases":[{"foreign":{"id":18458,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"275:8:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IsolationModeLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":18460,"nodeType":"StructuredDocumentation","src":"352:159:99","text":" @title IsolationModeLogic library\n @author Aave\n @notice Implements the base logic for handling repayments for assets borrowed in isolation mode"},"fullyImplemented":true,"id":18572,"linearizedBaseContracts":[18572],"name":"IsolationModeLogic","nameLocation":"520:18:99","nodeType":"ContractDefinition","nodes":[{"id":18464,"libraryName":{"id":18461,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"549:20:99"},"nodeType":"UsingForDirective","src":"543:65:99","typeName":{"id":18463,"nodeType":"UserDefinedTypeName","pathNode":{"id":18462,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"574:33:99"},"referencedDeclaration":23912,"src":"574:33:99","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":18468,"libraryName":{"id":18465,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"617:17:99"},"nodeType":"UsingForDirective","src":"611:59:99","typeName":{"id":18467,"nodeType":"UserDefinedTypeName","pathNode":{"id":18466,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"639:30:99"},"referencedDeclaration":23916,"src":"639:30:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":18471,"libraryName":{"id":18469,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"679:8:99"},"nodeType":"UsingForDirective","src":"673:27:99","typeName":{"id":18470,"name":"uint256","nodeType":"ElementaryTypeName","src":"692:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":18477,"name":"IsolationModeTotalDebtUpdated","nameLocation":"744:29:99","nodeType":"EventDefinition","parameters":{"id":18476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18473,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"790:5:99","nodeType":"VariableDeclaration","scope":18477,"src":"774:21:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18472,"name":"address","nodeType":"ElementaryTypeName","src":"774:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18475,"indexed":false,"mutability":"mutable","name":"totalDebt","nameLocation":"805:9:99","nodeType":"VariableDeclaration","scope":18477,"src":"797:17:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18474,"name":"uint256","nodeType":"ElementaryTypeName","src":"797:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"773:42:99"},"src":"738:78:99"},{"body":{"id":18570,"nodeType":"Block","src":"1531:1197:99","statements":[{"assignments":[18499,18501,null],"declarations":[{"constant":false,"id":18499,"mutability":"mutable","name":"isolationModeActive","nameLocation":"1543:19:99","nodeType":"VariableDeclaration","scope":18570,"src":"1538:24:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18498,"name":"bool","nodeType":"ElementaryTypeName","src":"1538:4:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18501,"mutability":"mutable","name":"isolationModeCollateralAddress","nameLocation":"1572:30:99","nodeType":"VariableDeclaration","scope":18570,"src":"1564:38:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18500,"name":"address","nodeType":"ElementaryTypeName","src":"1564:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":18507,"initialValue":{"arguments":[{"id":18504,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18483,"src":"1648:12:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":18505,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18487,"src":"1662:12:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}],"expression":{"id":18502,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18490,"src":"1608:10:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getIsolationModeState","nodeType":"MemberAccess","referencedDeclaration":14439,"src":"1608:39:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$returns$_t_bool_$_t_address_$_t_uint256_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address)) view returns (bool,address,uint256)"}},"id":18506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1608:67:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_uint256_$","typeString":"tuple(bool,address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"1537:138:99"},{"condition":{"id":18508,"name":"isolationModeActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18499,"src":"1686:19:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18569,"nodeType":"IfStatement","src":"1682:1042:99","trueBody":{"id":18568,"nodeType":"Block","src":"1707:1017:99","statements":[{"assignments":[18510],"declarations":[{"constant":false,"id":18510,"mutability":"mutable","name":"isolationModeTotalDebt","nameLocation":"1723:22:99","nodeType":"VariableDeclaration","scope":18568,"src":"1715:30:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":18509,"name":"uint128","nodeType":"ElementaryTypeName","src":"1715:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":18515,"initialValue":{"expression":{"baseExpression":{"id":18511,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18483,"src":"1748:12:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18513,"indexExpression":{"id":18512,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18501,"src":"1761:30:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1748:44:99","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":18514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":23908,"src":"1748:76:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1715:109:99"},{"assignments":[18517],"declarations":[{"constant":false,"id":18517,"mutability":"mutable","name":"isolatedDebtRepaid","nameLocation":"1841:18:99","nodeType":"VariableDeclaration","scope":18568,"src":"1833:26:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":18516,"name":"uint128","nodeType":"ElementaryTypeName","src":"1833:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":18533,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18518,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"1863:11:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":18519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1885:2:99","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":18520,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18493,"src":"1902:12:99","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"1902:33:99","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":18522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":13110,"src":"1902:45:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":18523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1902:47:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":18524,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"1964:20:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":18525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":12905,"src":"1964:42:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1902:104:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18527,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1901:106:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1885:122:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1863:144:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18530,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1862:146:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"1862:156:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":18532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1862:158:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1833:187:99"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":18536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18534,"name":"isolationModeTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"2183:22:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":18535,"name":"isolatedDebtRepaid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18517,"src":"2209:18:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2183:44:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":18566,"nodeType":"Block","src":"2404:314:99","statements":[{"assignments":[18551],"declarations":[{"constant":false,"id":18551,"mutability":"mutable","name":"nextIsolationModeTotalDebt","nameLocation":"2422:26:99","nodeType":"VariableDeclaration","scope":18566,"src":"2414:34:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18550,"name":"uint256","nodeType":"ElementaryTypeName","src":"2414:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18560,"initialValue":{"id":18559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":18552,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18483,"src":"2451:12:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18554,"indexExpression":{"id":18553,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18501,"src":"2464:30:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2451:44:99","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":18555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":23908,"src":"2451:78:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":18558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18556,"name":"isolationModeTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"2532:22:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":18557,"name":"isolatedDebtRepaid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18517,"src":"2557:18:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2532:43:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2451:124:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"2414:161:99"},{"eventCall":{"arguments":[{"id":18562,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18501,"src":"2631:30:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18563,"name":"nextIsolationModeTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18551,"src":"2673:26:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18561,"name":"IsolationModeTotalDebtUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18477,"src":"2590:29:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":18564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2590:119:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18565,"nodeType":"EmitStatement","src":"2585:124:99"}]},"id":18567,"nodeType":"IfStatement","src":"2179:539:99","trueBody":{"id":18549,"nodeType":"Block","src":"2229:169:99","statements":[{"expression":{"id":18542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":18537,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18483,"src":"2239:12:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18539,"indexExpression":{"id":18538,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18501,"src":"2252:30:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2239:44:99","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":18540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":23908,"src":"2239:67:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":18541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2309:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2239:71:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":18543,"nodeType":"ExpressionStatement","src":"2239:71:99"},{"eventCall":{"arguments":[{"id":18545,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18501,"src":"2355:30:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":18546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2387:1:99","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"}],"id":18544,"name":"IsolationModeTotalDebtUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18477,"src":"2325:29:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":18547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2325:64:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18548,"nodeType":"EmitStatement","src":"2320:69:99"}]}}]}}]},"documentation":{"id":18478,"nodeType":"StructuredDocumentation","src":"820:407:99","text":" @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig The user configuration mapping\n @param reserveCache The cached data of the reserve\n @param repayAmount The amount being repaid"},"id":18571,"implemented":true,"kind":"function","modifiers":[],"name":"updateIsolatedDebtIfIsolated","nameLocation":"1239:28:99","nodeType":"FunctionDefinition","parameters":{"id":18496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18483,"mutability":"mutable","name":"reservesData","nameLocation":"1323:12:99","nodeType":"VariableDeclaration","scope":18571,"src":"1273:62:99","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":18482,"keyType":{"id":18479,"name":"address","nodeType":"ElementaryTypeName","src":"1281:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1273:41:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":18481,"nodeType":"UserDefinedTypeName","pathNode":{"id":18480,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1292:21:99"},"referencedDeclaration":23909,"src":"1292:21:99","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":18487,"mutability":"mutable","name":"reservesList","nameLocation":"1377:12:99","nodeType":"VariableDeclaration","scope":18571,"src":"1341:48:99","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":18486,"keyType":{"id":18484,"name":"uint256","nodeType":"ElementaryTypeName","src":"1349:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1341:27:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":18485,"name":"address","nodeType":"ElementaryTypeName","src":"1360:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":18490,"mutability":"mutable","name":"userConfig","nameLocation":"1434:10:99","nodeType":"VariableDeclaration","scope":18571,"src":"1395:49:99","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":18489,"nodeType":"UserDefinedTypeName","pathNode":{"id":18488,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"1395:30:99"},"referencedDeclaration":23916,"src":"1395:30:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":18493,"mutability":"mutable","name":"reserveCache","nameLocation":"1480:12:99","nodeType":"VariableDeclaration","scope":18571,"src":"1450:42:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18492,"nodeType":"UserDefinedTypeName","pathNode":{"id":18491,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"1450:22:99"},"referencedDeclaration":23973,"src":"1450:22:99","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":18495,"mutability":"mutable","name":"repayAmount","nameLocation":"1506:11:99","nodeType":"VariableDeclaration","scope":18571,"src":"1498:19:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18494,"name":"uint256","nodeType":"ElementaryTypeName","src":"1498:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1267:254:99"},"returnParameters":{"id":18497,"nodeType":"ParameterList","parameters":[],"src":"1531:0:99"},"scope":18572,"src":"1230:1498:99","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":18573,"src":"512:2218:99","usedErrors":[]}],"src":"37:2694:99"},"id":99},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/LiquidationLogic.sol","exportedSymbols":{"DataTypes":[24227],"EModeLogic":[17209],"GPv2SafeERC20":[118],"GenericLogic":[18449],"Helpers":[14857],"IAToken":[3986],"IERC20":[1442],"IPriceOracleGetter":[6048],"IStableDebtToken":[6340],"IVariableDebtToken":[6386],"IsolationModeLogic":[18572],"LiquidationLogic":[19765],"PercentageMath":[23726],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"UserConfiguration":[14545],"ValidationLogic":[23502],"WadRayMath":[23813]},"id":19766,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":18574,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:100"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts//IERC20.sol","id":18576,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":1443,"src":"63:80:100","symbolAliases":[{"foreign":{"id":18575,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":18578,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":119,"src":"144:87:100","symbolAliases":[{"foreign":{"id":18577,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"152:13:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../../libraries/math/PercentageMath.sol","id":18580,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":23727,"src":"232:71:100","symbolAliases":[{"foreign":{"id":18579,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"240:14:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../../libraries/math/WadRayMath.sol","id":18582,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":23814,"src":"304:63:100","symbolAliases":[{"foreign":{"id":18581,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"312:10:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Helpers.sol","file":"../../libraries/helpers/Helpers.sol","id":18584,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":14858,"src":"368:60:100","symbolAliases":[{"foreign":{"id":18583,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"src":"376:7:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../../libraries/types/DataTypes.sol","id":18586,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":24228,"src":"429:62:100","symbolAliases":[{"foreign":{"id":18585,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"437:9:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":18588,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":20972,"src":"492:48:100","symbolAliases":[{"foreign":{"id":18587,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"500:12:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":18590,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":23503,"src":"541:54:100","symbolAliases":[{"foreign":{"id":18589,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"549:15:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/GenericLogic.sol","file":"./GenericLogic.sol","id":18592,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":18450,"src":"596:48:100","symbolAliases":[{"foreign":{"id":18591,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"604:12:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/IsolationModeLogic.sol","file":"./IsolationModeLogic.sol","id":18594,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":18573,"src":"645:60:100","symbolAliases":[{"foreign":{"id":18593,"name":"IsolationModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"653:18:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/EModeLogic.sol","file":"./EModeLogic.sol","id":18596,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":17210,"src":"706:44:100","symbolAliases":[{"foreign":{"id":18595,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"714:10:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../../libraries/configuration/UserConfiguration.sol","id":18598,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":14546,"src":"751:86:100","symbolAliases":[{"foreign":{"id":18597,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"759:17:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../../libraries/configuration/ReserveConfiguration.sol","id":18600,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":14035,"src":"838:92:100","symbolAliases":[{"foreign":{"id":18599,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"846:20:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":18602,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":3987,"src":"931:56:100","symbolAliases":[{"foreign":{"id":18601,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"939:7:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IStableDebtToken.sol","file":"../../../interfaces/IStableDebtToken.sol","id":18604,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":6341,"src":"988:74:100","symbolAliases":[{"foreign":{"id":18603,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"996:16:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IVariableDebtToken.sol","file":"../../../interfaces/IVariableDebtToken.sol","id":18606,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":6387,"src":"1063:78:100","symbolAliases":[{"foreign":{"id":18605,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"1071:18:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPriceOracleGetter.sol","file":"../../../interfaces/IPriceOracleGetter.sol","id":18608,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19766,"sourceUnit":6049,"src":"1142:78:100","symbolAliases":[{"foreign":{"id":18607,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"1150:18:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"LiquidationLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":18609,"nodeType":"StructuredDocumentation","src":"1222:176:100","text":" @title LiquidationLogic library\n @author Aave\n @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations"},"fullyImplemented":true,"id":19765,"linearizedBaseContracts":[19765],"name":"LiquidationLogic","nameLocation":"1407:16:100","nodeType":"ContractDefinition","nodes":[{"id":18612,"libraryName":{"id":18610,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1434:10:100"},"nodeType":"UsingForDirective","src":"1428:29:100","typeName":{"id":18611,"name":"uint256","nodeType":"ElementaryTypeName","src":"1449:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":18615,"libraryName":{"id":18613,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1466:14:100"},"nodeType":"UsingForDirective","src":"1460:33:100","typeName":{"id":18614,"name":"uint256","nodeType":"ElementaryTypeName","src":"1485:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":18619,"libraryName":{"id":18616,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1502:12:100"},"nodeType":"UsingForDirective","src":"1496:46:100","typeName":{"id":18618,"nodeType":"UserDefinedTypeName","pathNode":{"id":18617,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"1519:22:100"},"referencedDeclaration":23973,"src":"1519:22:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":18623,"libraryName":{"id":18620,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1551:12:100"},"nodeType":"UsingForDirective","src":"1545:45:100","typeName":{"id":18622,"nodeType":"UserDefinedTypeName","pathNode":{"id":18621,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1568:21:100"},"referencedDeclaration":23909,"src":"1568:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":18627,"libraryName":{"id":18624,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"1599:17:100"},"nodeType":"UsingForDirective","src":"1593:59:100","typeName":{"id":18626,"nodeType":"UserDefinedTypeName","pathNode":{"id":18625,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"1621:30:100"},"referencedDeclaration":23916,"src":"1621:30:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":18631,"libraryName":{"id":18628,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1661:20:100"},"nodeType":"UsingForDirective","src":"1655:65:100","typeName":{"id":18630,"nodeType":"UserDefinedTypeName","pathNode":{"id":18629,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1686:33:100"},"referencedDeclaration":23912,"src":"1686:33:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":18635,"libraryName":{"id":18632,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1729:13:100"},"nodeType":"UsingForDirective","src":"1723:31:100","typeName":{"id":18634,"nodeType":"UserDefinedTypeName","pathNode":{"id":18633,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1747:6:100"},"referencedDeclaration":1442,"src":"1747:6:100","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"anonymous":false,"id":18641,"name":"ReserveUsedAsCollateralEnabled","nameLocation":"1798:30:100","nodeType":"EventDefinition","parameters":{"id":18640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18637,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1845:7:100","nodeType":"VariableDeclaration","scope":18641,"src":"1829:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18636,"name":"address","nodeType":"ElementaryTypeName","src":"1829:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18639,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1870:4:100","nodeType":"VariableDeclaration","scope":18641,"src":"1854:20:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18638,"name":"address","nodeType":"ElementaryTypeName","src":"1854:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1828:47:100"},"src":"1792:84:100"},{"anonymous":false,"id":18647,"name":"ReserveUsedAsCollateralDisabled","nameLocation":"1885:31:100","nodeType":"EventDefinition","parameters":{"id":18646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18643,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1933:7:100","nodeType":"VariableDeclaration","scope":18647,"src":"1917:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18642,"name":"address","nodeType":"ElementaryTypeName","src":"1917:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18645,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1958:4:100","nodeType":"VariableDeclaration","scope":18647,"src":"1942:20:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18644,"name":"address","nodeType":"ElementaryTypeName","src":"1942:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1916:47:100"},"src":"1879:85:100"},{"anonymous":false,"id":18663,"name":"LiquidationCall","nameLocation":"1973:15:100","nodeType":"EventDefinition","parameters":{"id":18662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18649,"indexed":true,"mutability":"mutable","name":"collateralAsset","nameLocation":"2010:15:100","nodeType":"VariableDeclaration","scope":18663,"src":"1994:31:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18648,"name":"address","nodeType":"ElementaryTypeName","src":"1994:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18651,"indexed":true,"mutability":"mutable","name":"debtAsset","nameLocation":"2047:9:100","nodeType":"VariableDeclaration","scope":18663,"src":"2031:25:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18650,"name":"address","nodeType":"ElementaryTypeName","src":"2031:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18653,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"2078:4:100","nodeType":"VariableDeclaration","scope":18663,"src":"2062:20:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18652,"name":"address","nodeType":"ElementaryTypeName","src":"2062:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18655,"indexed":false,"mutability":"mutable","name":"debtToCover","nameLocation":"2096:11:100","nodeType":"VariableDeclaration","scope":18663,"src":"2088:19:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18654,"name":"uint256","nodeType":"ElementaryTypeName","src":"2088:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18657,"indexed":false,"mutability":"mutable","name":"liquidatedCollateralAmount","nameLocation":"2121:26:100","nodeType":"VariableDeclaration","scope":18663,"src":"2113:34:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18656,"name":"uint256","nodeType":"ElementaryTypeName","src":"2113:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18659,"indexed":false,"mutability":"mutable","name":"liquidator","nameLocation":"2161:10:100","nodeType":"VariableDeclaration","scope":18663,"src":"2153:18:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18658,"name":"address","nodeType":"ElementaryTypeName","src":"2153:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18661,"indexed":false,"mutability":"mutable","name":"receiveAToken","nameLocation":"2182:13:100","nodeType":"VariableDeclaration","scope":18663,"src":"2177:18:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18660,"name":"bool","nodeType":"ElementaryTypeName","src":"2177:4:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1988:211:100"},"src":"1967:233:100"},{"constant":true,"documentation":{"id":18664,"nodeType":"StructuredDocumentation","src":"2204:241:100","text":" @dev Default percentage of borrower's debt to be repaid in a liquidation.\n @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\n Expressed in bps, a value of 0.5e4 results in 50.00%"},"id":18667,"mutability":"constant","name":"DEFAULT_LIQUIDATION_CLOSE_FACTOR","nameLocation":"2474:32:100","nodeType":"VariableDeclaration","scope":19765,"src":"2448:66:100","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18665,"name":"uint256","nodeType":"ElementaryTypeName","src":"2448:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e356534","id":18666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2509:5:100","typeDescriptions":{"typeIdentifier":"t_rational_5000_by_1","typeString":"int_const 5000"},"value":"0.5e4"},"visibility":"internal"},{"constant":true,"documentation":{"id":18668,"nodeType":"StructuredDocumentation","src":"2519:239:100","text":" @dev Maximum percentage of borrower's debt to be repaid in a liquidation\n @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\n Expressed in bps, a value of 1e4 results in 100.00%"},"functionSelector":"d2467544","id":18671,"mutability":"constant","name":"MAX_LIQUIDATION_CLOSE_FACTOR","nameLocation":"2785:28:100","nodeType":"VariableDeclaration","scope":19765,"src":"2761:58:100","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18669,"name":"uint256","nodeType":"ElementaryTypeName","src":"2761:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316534","id":18670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2816:3:100","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"1e4"},"visibility":"public"},{"constant":true,"documentation":{"id":18672,"nodeType":"StructuredDocumentation","src":"2824:216:100","text":" @dev This constant represents below which health factor value it is possible to liquidate\n an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\n A value of 0.95e18 results in 0.95"},"functionSelector":"a18964a5","id":18675,"mutability":"constant","name":"CLOSE_FACTOR_HF_THRESHOLD","nameLocation":"3067:25:100","nodeType":"VariableDeclaration","scope":19765,"src":"3043:59:100","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18673,"name":"uint256","nodeType":"ElementaryTypeName","src":"3043:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e3935653138","id":18674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3095:7:100","typeDescriptions":{"typeIdentifier":"t_rational_950000000000000000_by_1","typeString":"int_const 950000000000000000"},"value":"0.95e18"},"visibility":"public"},{"canonicalName":"LiquidationLogic.LiquidationCallLocalVars","id":18702,"members":[{"constant":false,"id":18677,"mutability":"mutable","name":"userCollateralBalance","nameLocation":"3153:21:100","nodeType":"VariableDeclaration","scope":18702,"src":"3145:29:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18676,"name":"uint256","nodeType":"ElementaryTypeName","src":"3145:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18679,"mutability":"mutable","name":"userVariableDebt","nameLocation":"3188:16:100","nodeType":"VariableDeclaration","scope":18702,"src":"3180:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18678,"name":"uint256","nodeType":"ElementaryTypeName","src":"3180:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18681,"mutability":"mutable","name":"userTotalDebt","nameLocation":"3218:13:100","nodeType":"VariableDeclaration","scope":18702,"src":"3210:21:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18680,"name":"uint256","nodeType":"ElementaryTypeName","src":"3210:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18683,"mutability":"mutable","name":"actualDebtToLiquidate","nameLocation":"3245:21:100","nodeType":"VariableDeclaration","scope":18702,"src":"3237:29:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18682,"name":"uint256","nodeType":"ElementaryTypeName","src":"3237:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18685,"mutability":"mutable","name":"actualCollateralToLiquidate","nameLocation":"3280:27:100","nodeType":"VariableDeclaration","scope":18702,"src":"3272:35:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18684,"name":"uint256","nodeType":"ElementaryTypeName","src":"3272:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18687,"mutability":"mutable","name":"liquidationBonus","nameLocation":"3321:16:100","nodeType":"VariableDeclaration","scope":18702,"src":"3313:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18686,"name":"uint256","nodeType":"ElementaryTypeName","src":"3313:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18689,"mutability":"mutable","name":"healthFactor","nameLocation":"3351:12:100","nodeType":"VariableDeclaration","scope":18702,"src":"3343:20:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18688,"name":"uint256","nodeType":"ElementaryTypeName","src":"3343:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18691,"mutability":"mutable","name":"liquidationProtocolFeeAmount","nameLocation":"3377:28:100","nodeType":"VariableDeclaration","scope":18702,"src":"3369:36:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18690,"name":"uint256","nodeType":"ElementaryTypeName","src":"3369:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18693,"mutability":"mutable","name":"collateralPriceSource","nameLocation":"3419:21:100","nodeType":"VariableDeclaration","scope":18702,"src":"3411:29:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18692,"name":"address","nodeType":"ElementaryTypeName","src":"3411:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18695,"mutability":"mutable","name":"debtPriceSource","nameLocation":"3454:15:100","nodeType":"VariableDeclaration","scope":18702,"src":"3446:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18694,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18698,"mutability":"mutable","name":"collateralAToken","nameLocation":"3483:16:100","nodeType":"VariableDeclaration","scope":18702,"src":"3475:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"},"typeName":{"id":18697,"nodeType":"UserDefinedTypeName","pathNode":{"id":18696,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3986,"src":"3475:7:100"},"referencedDeclaration":3986,"src":"3475:7:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"visibility":"internal"},{"constant":false,"id":18701,"mutability":"mutable","name":"debtReserveCache","nameLocation":"3528:16:100","nodeType":"VariableDeclaration","scope":18702,"src":"3505:39:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18700,"nodeType":"UserDefinedTypeName","pathNode":{"id":18699,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"3505:22:100"},"referencedDeclaration":23973,"src":"3505:22:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"name":"LiquidationCallLocalVars","nameLocation":"3114:24:100","nodeType":"StructDefinition","scope":19765,"src":"3107:442:100","visibility":"public"},{"body":{"id":19085,"nodeType":"Block","src":"4650:4584:100","statements":[{"assignments":[18730],"declarations":[{"constant":false,"id":18730,"mutability":"mutable","name":"vars","nameLocation":"4688:4:100","nodeType":"VariableDeclaration","scope":19085,"src":"4656:36:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"},"typeName":{"id":18729,"nodeType":"UserDefinedTypeName","pathNode":{"id":18728,"name":"LiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":18702,"src":"4656:24:100"},"referencedDeclaration":18702,"src":"4656:24:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_storage_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"}},"visibility":"internal"}],"id":18731,"nodeType":"VariableDeclarationStatement","src":"4656:36:100"},{"assignments":[18736],"declarations":[{"constant":false,"id":18736,"mutability":"mutable","name":"collateralReserve","nameLocation":"4729:17:100","nodeType":"VariableDeclaration","scope":19085,"src":"4699:47:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18735,"nodeType":"UserDefinedTypeName","pathNode":{"id":18734,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4699:21:100"},"referencedDeclaration":23909,"src":"4699:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":18741,"initialValue":{"baseExpression":{"id":18737,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18708,"src":"4749:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18740,"indexExpression":{"expression":{"id":18738,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"4762:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":23979,"src":"4762:22:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4749:36:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4699:86:100"},{"assignments":[18746],"declarations":[{"constant":false,"id":18746,"mutability":"mutable","name":"debtReserve","nameLocation":"4821:11:100","nodeType":"VariableDeclaration","scope":19085,"src":"4791:41:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18745,"nodeType":"UserDefinedTypeName","pathNode":{"id":18744,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4791:21:100"},"referencedDeclaration":23909,"src":"4791:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":18751,"initialValue":{"baseExpression":{"id":18747,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18708,"src":"4835:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18750,"indexExpression":{"expression":{"id":18748,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"4848:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":23981,"src":"4848:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4835:30:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4791:74:100"},{"assignments":[18756],"declarations":[{"constant":false,"id":18756,"mutability":"mutable","name":"userConfig","nameLocation":"4910:10:100","nodeType":"VariableDeclaration","scope":19085,"src":"4871:49:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":18755,"nodeType":"UserDefinedTypeName","pathNode":{"id":18754,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"4871:30:100"},"referencedDeclaration":23916,"src":"4871:30:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":18761,"initialValue":{"baseExpression":{"id":18757,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18717,"src":"4923:11:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":18760,"indexExpression":{"expression":{"id":18758,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"4935:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18759,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"4935:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4923:24:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4871:76:100"},{"expression":{"id":18768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18762,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"4953:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18764,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"4953:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18765,"name":"debtReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18746,"src":"4977:11:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"4977:17:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":18767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4977:19:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"src":"4953:43:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18769,"nodeType":"ExpressionStatement","src":"4953:43:100"},{"expression":{"arguments":[{"expression":{"id":18773,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5026:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"5026:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":18770,"name":"debtReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18746,"src":"5002:11:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"5002:23:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":18775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5002:46:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18776,"nodeType":"ExpressionStatement","src":"5002:46:100"},{"expression":{"id":18799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,null,null,null,{"expression":{"id":18777,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5064:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":18689,"src":"5064:17:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":18780,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5055:29:100","typeDescriptions":{"typeIdentifier":"t_tuple$__$__$__$__$_t_uint256_$__$","typeString":"tuple(,,,,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18783,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18708,"src":"5132:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":18784,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18712,"src":"5152:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":18785,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18722,"src":"5172:15:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"id":18788,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18756,"src":"5258:10:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":18789,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"5293:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18790,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":23975,"src":"5293:20:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18791,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"5329:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"5329:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18793,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"5358:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracle","nodeType":"MemberAccess","referencedDeclaration":23987,"src":"5358:18:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18795,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"5405:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":23989,"src":"5405:24:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":18786,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"5195:9:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":18787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateUserAccountDataParams","nodeType":"MemberAccess","referencedDeclaration":24150,"src":"5195:40:100","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateUserAccountDataParams_$24150_storage_ptr_$","typeString":"type(struct DataTypes.CalculateUserAccountDataParams storage pointer)"}},"id":18797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["userConfig","reservesCount","user","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"5195:243:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":18781,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"5087:12:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$18449_$","typeString":"type(library GenericLogic)"}},"id":18782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateUserAccountData","nodeType":"MemberAccess","referencedDeclaration":18307,"src":"5087:37:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,bool)"}},"id":18798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5087:357:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"src":"5055:389:100","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18800,"nodeType":"ExpressionStatement","src":"5055:389:100"},{"expression":{"id":18816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":18801,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5452:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18803,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18679,"src":"5452:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18804,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5475:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userTotalDebt","nodeType":"MemberAccess","referencedDeclaration":18681,"src":"5475:18:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18806,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5495:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"5495:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18808,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5451:71:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18810,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5547:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"5547:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":18812,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"5576:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},{"expression":{"id":18813,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5590:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18814,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":18689,"src":"5590:17:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18809,"name":"_calculateDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19395,"src":"5525:14:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.ReserveCache memory,struct DataTypes.ExecuteLiquidationCallParams memory,uint256) view returns (uint256,uint256,uint256)"}},"id":18815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5525:88:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"5451:162:100","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18817,"nodeType":"ExpressionStatement","src":"5451:162:100"},{"expression":{"arguments":[{"id":18821,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18756,"src":"5667:10:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":18822,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"5685:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"arguments":[{"expression":{"id":18825,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5778:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18826,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"5778:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":18827,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5820:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userTotalDebt","nodeType":"MemberAccess","referencedDeclaration":18681,"src":"5820:18:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18829,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5862:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":18689,"src":"5862:17:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18831,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"5910:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":23991,"src":"5910:26:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18823,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"5710:9:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":18824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ValidateLiquidationCallParams","nodeType":"MemberAccess","referencedDeclaration":24192,"src":"5710:39:100","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ValidateLiquidationCallParams_$24192_storage_ptr_$","typeString":"type(struct DataTypes.ValidateLiquidationCallParams storage pointer)"}},"id":18833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["debtReserveCache","totalDebt","healthFactor","priceOracleSentinel"],"nodeType":"FunctionCall","src":"5710:235:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}],"expression":{"id":18818,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"5620:15:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":18820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateLiquidationCall","nodeType":"MemberAccess","referencedDeclaration":23053,"src":"5620:39:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveData storage pointer,struct DataTypes.ValidateLiquidationCallParams memory) view"}},"id":18834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5620:331:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18835,"nodeType":"ExpressionStatement","src":"5620:331:100"},{"expression":{"id":18851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":18836,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5966:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":18698,"src":"5966:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},{"expression":{"id":18839,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"5995:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18840,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralPriceSource","nodeType":"MemberAccess","referencedDeclaration":18693,"src":"5995:26:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18841,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6029:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18842,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtPriceSource","nodeType":"MemberAccess","referencedDeclaration":18695,"src":"6029:20:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18843,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6057:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18844,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":18687,"src":"6057:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18845,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5958:126:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IAToken_$3986_$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(contract IAToken,address,address,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18847,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18722,"src":"6109:15:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":18848,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"6126:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":18849,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"6145:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}],"id":18846,"name":"_getConfigurationData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19508,"src":"6087:21:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr_$returns$_t_contract$_IAToken_$3986_$_t_address_$_t_address_$_t_uint256_$","typeString":"function (mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory) view returns (contract IAToken,address,address,uint256)"}},"id":18850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6087:65:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IAToken_$3986_$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(contract IAToken,address,address,uint256)"}},"src":"5958:194:100","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18852,"nodeType":"ExpressionStatement","src":"5958:194:100"},{"expression":{"id":18862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18853,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6159:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userCollateralBalance","nodeType":"MemberAccess","referencedDeclaration":18677,"src":"6159:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18859,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"6220:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18860,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"6220:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":18856,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6188:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18857,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":18698,"src":"6188:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":18858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"6188:31:100","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6188:44:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6159:73:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18863,"nodeType":"ExpressionStatement","src":"6159:73:100"},{"expression":{"id":18891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":18864,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6247:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18685,"src":"6247:32:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18867,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6287:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"6287:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18869,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6321:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":18691,"src":"6321:33:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18871,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6239:121:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18873,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"6411:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"expression":{"id":18874,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6436:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"6436:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":18876,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6465:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18877,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralPriceSource","nodeType":"MemberAccess","referencedDeclaration":18693,"src":"6465:26:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18878,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6499:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtPriceSource","nodeType":"MemberAccess","referencedDeclaration":18695,"src":"6499:20:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18880,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6527:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18881,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"6527:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18882,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6561:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18883,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userCollateralBalance","nodeType":"MemberAccess","referencedDeclaration":18677,"src":"6561:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18884,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6595:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18885,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":18687,"src":"6595:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":18887,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"6643:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18888,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracle","nodeType":"MemberAccess","referencedDeclaration":23987,"src":"6643:18:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18886,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6048,"src":"6624:18:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$6048_$","typeString":"type(contract IPriceOracleGetter)"}},"id":18889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6624:38:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"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"},{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}],"id":18872,"name":"_calculateAvailableCollateralToLiquidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19764,"src":"6363:40:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IPriceOracleGetter_$6048_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,address,uint256,uint256,uint256,contract IPriceOracleGetter) view returns (uint256,uint256,uint256)"}},"id":18890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6363:305:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"6239:429:100","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18892,"nodeType":"ExpressionStatement","src":"6239:429:100"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18893,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6679:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userTotalDebt","nodeType":"MemberAccess","referencedDeclaration":18681,"src":"6679:18:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":18895,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6701:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"6701:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6679:48:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18907,"nodeType":"IfStatement","src":"6675:115:100","trueBody":{"id":18906,"nodeType":"Block","src":"6729:61:100","statements":[{"expression":{"arguments":[{"expression":{"id":18901,"name":"debtReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18746,"src":"6761:11:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"6761:14:100","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":18903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6777:5:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":18898,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18756,"src":"6737:10:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18900,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowing","nodeType":"MemberAccess","referencedDeclaration":14101,"src":"6737:23:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":18904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6737:46:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18905,"nodeType":"ExpressionStatement","src":"6737:46:100"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18908,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6946:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18685,"src":"6946:32:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":18910,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"6981:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":18691,"src":"6981:33:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6946:68:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":18913,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7024:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18914,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userCollateralBalance","nodeType":"MemberAccess","referencedDeclaration":18677,"src":"7024:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6946:104:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18932,"nodeType":"IfStatement","src":"6935:278:100","trueBody":{"id":18931,"nodeType":"Block","src":"7057:156:100","statements":[{"expression":{"arguments":[{"expression":{"id":18919,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"7097:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"7097:20:100","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":18921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7119:5:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":18916,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18756,"src":"7065:10:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18918,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"7065:31:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":18922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7065:60:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18923,"nodeType":"ExpressionStatement","src":"7065:60:100"},{"eventCall":{"arguments":[{"expression":{"id":18925,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"7170:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":23979,"src":"7170:22:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18927,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"7194:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"7194:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18924,"name":"ReserveUsedAsCollateralDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18647,"src":"7138:31:100","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7138:68:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18930,"nodeType":"EmitStatement","src":"7133:73:100"}]}},{"expression":{"arguments":[{"id":18934,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"7235:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},{"id":18935,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7243:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"},{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}],"id":18933,"name":"_burnDebtTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19327,"src":"7219:15:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr_$_t_struct$_LiquidationCallLocalVars_$18702_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)"}},"id":18936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7219:29:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18937,"nodeType":"ExpressionStatement","src":"7219:29:100"},{"expression":{"arguments":[{"expression":{"id":18941,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7294:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18942,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"7294:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":18943,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"7323:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":23981,"src":"7323:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18945,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7347:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"7347:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":18947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7381:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":18938,"name":"debtReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18746,"src":"7255:11:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18940,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"7255:31:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":18948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7255:133:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18949,"nodeType":"ExpressionStatement","src":"7255:133:100"},{"expression":{"arguments":[{"id":18953,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18708,"src":"7450:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":18954,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18712,"src":"7470:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":18955,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18756,"src":"7490:10:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":18956,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7508:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"7508:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":18958,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7537:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"7537:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18950,"name":"IsolationModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"7395:18:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IsolationModeLogic_$18572_$","typeString":"type(library IsolationModeLogic)"}},"id":18952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateIsolatedDebtIfIsolated","nodeType":"MemberAccess","referencedDeclaration":18571,"src":"7395:47:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveCache memory,uint256)"}},"id":18960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7395:174:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18961,"nodeType":"ExpressionStatement","src":"7395:174:100"},{"condition":{"expression":{"id":18962,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"7580:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":18963,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiveAToken","nodeType":"MemberAccess","referencedDeclaration":23985,"src":"7580:20:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":18980,"nodeType":"Block","src":"7714:70:100","statements":[{"expression":{"arguments":[{"id":18975,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"7745:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":18976,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"7764:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},{"id":18977,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7772:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"},{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}],"id":18974,"name":"_burnCollateralATokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19141,"src":"7722:22:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr_$_t_struct$_LiquidationCallLocalVars_$18702_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)"}},"id":18978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7722:55:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18979,"nodeType":"ExpressionStatement","src":"7722:55:100"}]},"id":18981,"nodeType":"IfStatement","src":"7576:208:100","trueBody":{"id":18973,"nodeType":"Block","src":"7602:106:100","statements":[{"expression":{"arguments":[{"id":18965,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18708,"src":"7628:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":18966,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18712,"src":"7642:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":18967,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18717,"src":"7656:11:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},{"id":18968,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"7669:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":18969,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"7688:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},{"id":18970,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7696:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"},{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"},{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}],"id":18964,"name":"_liquidateATokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19235,"src":"7610:17:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr_$_t_struct$_LiquidationCallLocalVars_$18702_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(address => struct DataTypes.UserConfigurationMap storage ref),struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)"}},"id":18971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7610:91:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18972,"nodeType":"ExpressionStatement","src":"7610:91:100"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18982,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"7844:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":18691,"src":"7844:33:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7881:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7844:38:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19039,"nodeType":"IfStatement","src":"7840:783:100","trueBody":{"id":19038,"nodeType":"Block","src":"7884:739:100","statements":[{"assignments":[18987],"declarations":[{"constant":false,"id":18987,"mutability":"mutable","name":"liquidityIndex","nameLocation":"7900:14:100","nodeType":"VariableDeclaration","scope":19038,"src":"7892:22:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18986,"name":"uint256","nodeType":"ElementaryTypeName","src":"7892:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18991,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18988,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"7917:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18989,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":20309,"src":"7917:37:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":18990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7917:39:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7892:64:100"},{"assignments":[18993],"declarations":[{"constant":false,"id":18993,"mutability":"mutable","name":"scaledDownLiquidationProtocolFee","nameLocation":"7972:32:100","nodeType":"VariableDeclaration","scope":19038,"src":"7964:40:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18992,"name":"uint256","nodeType":"ElementaryTypeName","src":"7964:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18999,"initialValue":{"arguments":[{"id":18997,"name":"liquidityIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18987,"src":"8057:14:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18994,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8007:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":18995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":18691,"src":"8007:33:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"8007:40:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":18998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8007:72:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7964:115:100"},{"assignments":[19001],"declarations":[{"constant":false,"id":19001,"mutability":"mutable","name":"scaledDownUserBalance","nameLocation":"8095:21:100","nodeType":"VariableDeclaration","scope":19038,"src":"8087:29:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19000,"name":"uint256","nodeType":"ElementaryTypeName","src":"8087:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19008,"initialValue":{"arguments":[{"expression":{"id":19005,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"8157:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"8157:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":19002,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8119:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19003,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":18698,"src":"8119:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":19004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":6163,"src":"8119:37:100","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8119:50:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8087:82:100"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19009,"name":"scaledDownLiquidationProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18993,"src":"8279:32:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19010,"name":"scaledDownUserBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19001,"src":"8314:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8279:56:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19022,"nodeType":"IfStatement","src":"8275:161:100","trueBody":{"id":19021,"nodeType":"Block","src":"8337:99:100","statements":[{"expression":{"id":19019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19012,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8347:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":18691,"src":"8347:33:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19017,"name":"liquidityIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18987,"src":"8412:14:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19015,"name":"scaledDownUserBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19001,"src":"8383:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"8383:28:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":19018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8383:44:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8347:80:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19020,"nodeType":"ExpressionStatement","src":"8347:80:100"}]}},{"expression":{"arguments":[{"expression":{"id":19028,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"8496:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"8496:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19030,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8517:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":18698,"src":"8517:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":19032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_TREASURY_ADDRESS","nodeType":"MemberAccess","referencedDeclaration":3961,"src":"8517:46:100","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8517:48:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19034,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8575:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19035,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":18691,"src":"8575:33:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":19023,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8443:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19026,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":18698,"src":"8443:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":19027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferOnLiquidation","nodeType":"MemberAccess","referencedDeclaration":3913,"src":"8443:43:100","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":19036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8443:173:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19037,"nodeType":"ExpressionStatement","src":"8443:173:100"}]}},{"expression":{"arguments":[{"expression":{"id":19045,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8766:3:100","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8766:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":19047,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8784:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19048,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"8784:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"8784:35:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19050,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8827:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"8827:26:100","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":[{"expression":{"id":19041,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"8724:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19042,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":23981,"src":"8724:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19040,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"8717:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":19043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8717:24:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":19044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"8717:41:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":19052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8717:142:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19053,"nodeType":"ExpressionStatement","src":"8717:142:100"},{"expression":{"arguments":[{"expression":{"id":19060,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8934:3:100","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8934:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19062,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"8952:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"8952:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19064,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8971:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19065,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"8971:26:100","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":[{"expression":{"expression":{"id":19055,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"8874:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"8874:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"8874:35:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19054,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"8866:7:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":19058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8866:44:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":19059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleRepayment","nodeType":"MemberAccess","referencedDeclaration":3931,"src":"8866:60:100","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":19066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8866:137:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19067,"nodeType":"ExpressionStatement","src":"8866:137:100"},{"eventCall":{"arguments":[{"expression":{"id":19069,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"9038:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":23979,"src":"9038:22:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19071,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"9068:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":23981,"src":"9068:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19073,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"9092:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"9092:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19075,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"9111:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"9111:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19077,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18730,"src":"9145:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18685,"src":"9145:32:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19079,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9185:3:100","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9185:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19081,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"9203:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiveAToken","nodeType":"MemberAccess","referencedDeclaration":23985,"src":"9203:20:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19068,"name":"LiquidationCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18663,"src":"9015:15:100","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,uint256,uint256,address,bool)"}},"id":19083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9015:214:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19084,"nodeType":"EmitStatement","src":"9010:219:100"}]},"documentation":{"id":18703,"nodeType":"StructuredDocumentation","src":"3553:722:100","text":" @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\n covers `debtToCover` amount of debt of the user getting liquidated, and receives\n a proportional amount of the `collateralAsset` plus a bonus to cover market risk\n @dev Emits the `LiquidationCall()` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n @param eModeCategories The configuration of all the efficiency mode categories\n @param params The additional parameters needed to execute the liquidation function"},"functionSelector":"83c1087d","id":19086,"implemented":true,"kind":"function","modifiers":[],"name":"executeLiquidationCall","nameLocation":"4287:22:100","nodeType":"FunctionDefinition","parameters":{"id":18726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18708,"mutability":"mutable","name":"reservesData","nameLocation":"4365:12:100","nodeType":"VariableDeclaration","scope":19086,"src":"4315:62:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":18707,"keyType":{"id":18704,"name":"address","nodeType":"ElementaryTypeName","src":"4323:7:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4315:41:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":18706,"nodeType":"UserDefinedTypeName","pathNode":{"id":18705,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4334:21:100"},"referencedDeclaration":23909,"src":"4334:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":18712,"mutability":"mutable","name":"reservesList","nameLocation":"4419:12:100","nodeType":"VariableDeclaration","scope":19086,"src":"4383:48:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":18711,"keyType":{"id":18709,"name":"uint256","nodeType":"ElementaryTypeName","src":"4391:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4383:27:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":18710,"name":"address","nodeType":"ElementaryTypeName","src":"4402:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":18717,"mutability":"mutable","name":"usersConfig","nameLocation":"4496:11:100","nodeType":"VariableDeclaration","scope":19086,"src":"4437:70:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"typeName":{"id":18716,"keyType":{"id":18713,"name":"address","nodeType":"ElementaryTypeName","src":"4445:7:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4437:50:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"valueType":{"id":18715,"nodeType":"UserDefinedTypeName","pathNode":{"id":18714,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"4456:30:100"},"referencedDeclaration":23916,"src":"4456:30:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},"visibility":"internal"},{"constant":false,"id":18722,"mutability":"mutable","name":"eModeCategories","nameLocation":"4563:15:100","nodeType":"VariableDeclaration","scope":19086,"src":"4513:65:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":18721,"keyType":{"id":18718,"name":"uint8","nodeType":"ElementaryTypeName","src":"4521:5:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"4513:41:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":18720,"nodeType":"UserDefinedTypeName","pathNode":{"id":18719,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"4530:23:100"},"referencedDeclaration":23927,"src":"4530:23:100","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":18725,"mutability":"mutable","name":"params","nameLocation":"4630:6:100","nodeType":"VariableDeclaration","scope":19086,"src":"4584:52:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":18724,"nodeType":"UserDefinedTypeName","pathNode":{"id":18723,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":23992,"src":"4584:38:100"},"referencedDeclaration":23992,"src":"4584:38:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"}],"src":"4309:331:100"},"returnParameters":{"id":18727,"nodeType":"ParameterList","parameters":[],"src":"4650:0:100"},"scope":19765,"src":"4278:4956:100","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19140,"nodeType":"Block","src":"9854:559:100","statements":[{"assignments":[19103],"declarations":[{"constant":false,"id":19103,"mutability":"mutable","name":"collateralReserveCache","nameLocation":"9890:22:100","nodeType":"VariableDeclaration","scope":19140,"src":"9860:52:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":19102,"nodeType":"UserDefinedTypeName","pathNode":{"id":19101,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"9860:22:100"},"referencedDeclaration":23973,"src":"9860:22:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":19107,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19104,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"9915:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"9915:23:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":19106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9915:25:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"9860:80:100"},{"expression":{"arguments":[{"id":19111,"name":"collateralReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19103,"src":"9976:22:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":19108,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"9946:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19110,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"9946:29:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":19112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9946:53:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19113,"nodeType":"ExpressionStatement","src":"9946:53:100"},{"expression":{"arguments":[{"id":19117,"name":"collateralReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19103,"src":"10050:22:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":19118,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19093,"src":"10080:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":23979,"src":"10080:22:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":19120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10110:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":19121,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19096,"src":"10119:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18685,"src":"10119:32:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19114,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"10005:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"10005:37:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":19123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10005:152:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19124,"nodeType":"ExpressionStatement","src":"10005:152:100"},{"expression":{"arguments":[{"expression":{"id":19130,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19093,"src":"10284:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"10284:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19132,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10303:3:100","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"10303:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19134,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19096,"src":"10321:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19135,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18685,"src":"10321:32:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19136,"name":"collateralReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19103,"src":"10361:22:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"10361:41:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":19125,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19096,"src":"10250:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":18698,"src":"10250:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":19129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":3895,"src":"10250:26:100","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256) external"}},"id":19138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10250:158:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19139,"nodeType":"ExpressionStatement","src":"10250:158:100"}]},"documentation":{"id":19087,"nodeType":"StructuredDocumentation","src":"9238:415:100","text":" @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\n @dev   The function also updates the state and the interest rate of the collateral reserve.\n @param collateralReserve The data of the collateral reserve\n @param params The additional parameters needed to execute the liquidation function\n @param vars The executeLiquidationCall() function local vars"},"id":19141,"implemented":true,"kind":"function","modifiers":[],"name":"_burnCollateralATokens","nameLocation":"9665:22:100","nodeType":"FunctionDefinition","parameters":{"id":19097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19090,"mutability":"mutable","name":"collateralReserve","nameLocation":"9723:17:100","nodeType":"VariableDeclaration","scope":19141,"src":"9693:47:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":19089,"nodeType":"UserDefinedTypeName","pathNode":{"id":19088,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"9693:21:100"},"referencedDeclaration":23909,"src":"9693:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":19093,"mutability":"mutable","name":"params","nameLocation":"9792:6:100","nodeType":"VariableDeclaration","scope":19141,"src":"9746:52:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":19092,"nodeType":"UserDefinedTypeName","pathNode":{"id":19091,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":23992,"src":"9746:38:100"},"referencedDeclaration":23992,"src":"9746:38:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"},{"constant":false,"id":19096,"mutability":"mutable","name":"vars","nameLocation":"9836:4:100","nodeType":"VariableDeclaration","scope":19141,"src":"9804:36:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"},"typeName":{"id":19095,"nodeType":"UserDefinedTypeName","pathNode":{"id":19094,"name":"LiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":18702,"src":"9804:24:100"},"referencedDeclaration":18702,"src":"9804:24:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_storage_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"}},"visibility":"internal"}],"src":"9687:157:100"},"returnParameters":{"id":19098,"nodeType":"ParameterList","parameters":[],"src":"9854:0:100"},"scope":19765,"src":"9656:757:100","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19234,"nodeType":"Block","src":"11527:794:100","statements":[{"assignments":[19169],"declarations":[{"constant":false,"id":19169,"mutability":"mutable","name":"liquidatorPreviousATokenBalance","nameLocation":"11541:31:100","nodeType":"VariableDeclaration","scope":19234,"src":"11533:39:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19168,"name":"uint256","nodeType":"ElementaryTypeName","src":"11533:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19178,"initialValue":{"arguments":[{"expression":{"id":19175,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11615:3:100","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11615:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":19171,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19165,"src":"11582:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":18698,"src":"11582:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}],"id":19170,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"11575:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":19173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11575:29:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":19174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"11575:39:100","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11575:51:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11533:93:100"},{"expression":{"arguments":[{"expression":{"id":19184,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19162,"src":"11683:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"11683:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19186,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11702:3:100","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11702:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19188,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19165,"src":"11720:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18685,"src":"11720:32:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":19179,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19165,"src":"11632:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":18698,"src":"11632:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":19183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferOnLiquidation","nodeType":"MemberAccess","referencedDeclaration":3913,"src":"11632:43:100","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":19190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11632:126:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19191,"nodeType":"ExpressionStatement","src":"11632:126:100"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19192,"name":"liquidatorPreviousATokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19169,"src":"11769:31:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11804:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11769:36:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19233,"nodeType":"IfStatement","src":"11765:552:100","trueBody":{"id":19232,"nodeType":"Block","src":"11807:510:100","statements":[{"assignments":[19199],"declarations":[{"constant":false,"id":19199,"mutability":"mutable","name":"liquidatorConfig","nameLocation":"11854:16:100","nodeType":"VariableDeclaration","scope":19232,"src":"11815:55:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":19198,"nodeType":"UserDefinedTypeName","pathNode":{"id":19197,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"11815:30:100"},"referencedDeclaration":23916,"src":"11815:30:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":19204,"initialValue":{"baseExpression":{"id":19200,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19156,"src":"11873:11:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":19203,"indexExpression":{"expression":{"id":19201,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11885:3:100","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11885:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11873:23:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11815:81:100"},{"condition":{"arguments":[{"id":19207,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19147,"src":"11977:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":19208,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19151,"src":"12001:12:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":19209,"name":"liquidatorConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19199,"src":"12025:16:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":19210,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19159,"src":"12053:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"12053:31:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},{"expression":{"id":19212,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19159,"src":"12096:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"12096:31:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19205,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"11917:15:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":19206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateAutomaticUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":23501,"src":"11917:48:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address) view returns (bool)"}},"id":19214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11917:220:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19231,"nodeType":"IfStatement","src":"11904:407:100","trueBody":{"id":19230,"nodeType":"Block","src":"12146:165:100","statements":[{"expression":{"arguments":[{"expression":{"id":19218,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19159,"src":"12194:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"12194:20:100","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":19220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12216:4:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":19215,"name":"liquidatorConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19199,"src":"12156:16:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":19217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"12156:37:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":19221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12156:65:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19222,"nodeType":"ExpressionStatement","src":"12156:65:100"},{"eventCall":{"arguments":[{"expression":{"id":19224,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19162,"src":"12267:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":23979,"src":"12267:22:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19226,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12291:3:100","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12291:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19223,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18641,"src":"12236:30:100","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":19228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12236:66:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19229,"nodeType":"EmitStatement","src":"12231:71:100"}]}}]}}]},"documentation":{"id":19142,"nodeType":"StructuredDocumentation","src":"10417:716:100","text":" @notice Liquidates the user aTokens by transferring them to the liquidator.\n @dev   The function also checks the state of the liquidator and activates the aToken as collateral\n        as in standard transfers if the isolation mode constraints are respected.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n @param collateralReserve The data of the collateral reserve\n @param params The additional parameters needed to execute the liquidation function\n @param vars The executeLiquidationCall() function local vars"},"id":19235,"implemented":true,"kind":"function","modifiers":[],"name":"_liquidateATokens","nameLocation":"11145:17:100","nodeType":"FunctionDefinition","parameters":{"id":19166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19147,"mutability":"mutable","name":"reservesData","nameLocation":"11218:12:100","nodeType":"VariableDeclaration","scope":19235,"src":"11168:62:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":19146,"keyType":{"id":19143,"name":"address","nodeType":"ElementaryTypeName","src":"11176:7:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"11168:41:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":19145,"nodeType":"UserDefinedTypeName","pathNode":{"id":19144,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"11187:21:100"},"referencedDeclaration":23909,"src":"11187:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":19151,"mutability":"mutable","name":"reservesList","nameLocation":"11272:12:100","nodeType":"VariableDeclaration","scope":19235,"src":"11236:48:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":19150,"keyType":{"id":19148,"name":"uint256","nodeType":"ElementaryTypeName","src":"11244:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"11236:27:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":19149,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":19156,"mutability":"mutable","name":"usersConfig","nameLocation":"11349:11:100","nodeType":"VariableDeclaration","scope":19235,"src":"11290:70:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"typeName":{"id":19155,"keyType":{"id":19152,"name":"address","nodeType":"ElementaryTypeName","src":"11298:7:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"11290:50:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"valueType":{"id":19154,"nodeType":"UserDefinedTypeName","pathNode":{"id":19153,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"11309:30:100"},"referencedDeclaration":23916,"src":"11309:30:100","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},"visibility":"internal"},{"constant":false,"id":19159,"mutability":"mutable","name":"collateralReserve","nameLocation":"11396:17:100","nodeType":"VariableDeclaration","scope":19235,"src":"11366:47:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":19158,"nodeType":"UserDefinedTypeName","pathNode":{"id":19157,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"11366:21:100"},"referencedDeclaration":23909,"src":"11366:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":19162,"mutability":"mutable","name":"params","nameLocation":"11465:6:100","nodeType":"VariableDeclaration","scope":19235,"src":"11419:52:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":19161,"nodeType":"UserDefinedTypeName","pathNode":{"id":19160,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":23992,"src":"11419:38:100"},"referencedDeclaration":23992,"src":"11419:38:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"},{"constant":false,"id":19165,"mutability":"mutable","name":"vars","nameLocation":"11509:4:100","nodeType":"VariableDeclaration","scope":19235,"src":"11477:36:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"},"typeName":{"id":19164,"nodeType":"UserDefinedTypeName","pathNode":{"id":19163,"name":"LiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":18702,"src":"11477:24:100"},"referencedDeclaration":18702,"src":"11477:24:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_storage_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"}},"visibility":"internal"}],"src":"11162:355:100"},"returnParameters":{"id":19167,"nodeType":"ParameterList","parameters":[],"src":"11527:0:100"},"scope":19765,"src":"11136:1185:100","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19326,"nodeType":"Block","src":"12827:1010:100","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19245,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"12837:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18679,"src":"12837:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":19247,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"12862:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"12862:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12837:51:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19324,"nodeType":"Block","src":"13173:660:100","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19272,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13278:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18679,"src":"13278:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13303:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13278:26:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19298,"nodeType":"IfStatement","src":"13274:272:100","trueBody":{"id":19297,"nodeType":"Block","src":"13306:240:100","statements":[{"expression":{"id":19295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":19276,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13316:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"13316:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23935,"src":"13316:44:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":19287,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19239,"src":"13455:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"13455:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19289,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13468:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18679,"src":"13468:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":19291,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13491:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"13491:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"13491:45:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":19282,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13393:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19283,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"13393:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"13393:46:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19281,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"13363:18:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6386_$","typeString":"type(contract IVariableDebtToken)"}},"id":19285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13363:86:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6386","typeString":"contract IVariableDebtToken"}},"id":19286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6379,"src":"13363:91:100","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) external returns (uint256)"}},"id":19294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13363:174:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13316:221:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19296,"nodeType":"ExpressionStatement","src":"13316:221:100"}]}},{"expression":{"id":19322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"expression":{"id":19299,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13563:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"13563:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23945,"src":"13563:41:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":19304,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13614:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"13614:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23943,"src":"13614:45:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19307,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13553:114:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":19314,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19239,"src":"13747:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"13747:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19316,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13768:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"13768:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":19318,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13797:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18679,"src":"13797:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13768:50:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":19309,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13687:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19310,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"13687:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19311,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"13687:44:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19308,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"13670:16:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":19312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13670:62:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":19313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6277,"src":"13670:67:100","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,uint256) external returns (uint256,uint256)"}},"id":19321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13670:156:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"13553:273:100","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19323,"nodeType":"ExpressionStatement","src":"13553:273:100"}]},"id":19325,"nodeType":"IfStatement","src":"12833:1000:100","trueBody":{"id":19271,"nodeType":"Block","src":"12890:277:100","statements":[{"expression":{"id":19269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":19250,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"12898:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"12898:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19254,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23935,"src":"12898:44:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":19261,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19239,"src":"13044:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"13044:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19263,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13067:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19264,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":18683,"src":"13067:26:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":19265,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"13105:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19266,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"13105:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"13105:45:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":19256,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19242,"src":"12973:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":19257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":18701,"src":"12973:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19258,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"12973:46:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19255,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"12945:18:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6386_$","typeString":"type(contract IVariableDebtToken)"}},"id":19259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12945:82:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6386","typeString":"contract IVariableDebtToken"}},"id":19260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6379,"src":"12945:87:100","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) external returns (uint256)"}},"id":19268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12945:215:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12898:262:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19270,"nodeType":"ExpressionStatement","src":"12898:262:100"}]}}]},"documentation":{"id":19236,"nodeType":"StructuredDocumentation","src":"12325:361:100","text":" @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\n @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\n @param params The additional parameters needed to execute the liquidation function\n @param vars the executeLiquidationCall() function local vars"},"id":19327,"implemented":true,"kind":"function","modifiers":[],"name":"_burnDebtTokens","nameLocation":"12698:15:100","nodeType":"FunctionDefinition","parameters":{"id":19243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19239,"mutability":"mutable","name":"params","nameLocation":"12765:6:100","nodeType":"VariableDeclaration","scope":19327,"src":"12719:52:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":19238,"nodeType":"UserDefinedTypeName","pathNode":{"id":19237,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":23992,"src":"12719:38:100"},"referencedDeclaration":23992,"src":"12719:38:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"},{"constant":false,"id":19242,"mutability":"mutable","name":"vars","nameLocation":"12809:4:100","nodeType":"VariableDeclaration","scope":19327,"src":"12777:36:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"},"typeName":{"id":19241,"nodeType":"UserDefinedTypeName","pathNode":{"id":19240,"name":"LiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":18702,"src":"12777:24:100"},"referencedDeclaration":18702,"src":"12777:24:100","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$18702_storage_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"}},"visibility":"internal"}],"src":"12713:104:100"},"returnParameters":{"id":19244,"nodeType":"ParameterList","parameters":[],"src":"12827:0:100"},"scope":19765,"src":"12689:1148:100","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19394,"nodeType":"Block","src":"14734:628:100","statements":[{"assignments":[19346,19348],"declarations":[{"constant":false,"id":19346,"mutability":"mutable","name":"userStableDebt","nameLocation":"14749:14:100","nodeType":"VariableDeclaration","scope":19394,"src":"14741:22:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19345,"name":"uint256","nodeType":"ElementaryTypeName","src":"14741:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19348,"mutability":"mutable","name":"userVariableDebt","nameLocation":"14773:16:100","nodeType":"VariableDeclaration","scope":19394,"src":"14765:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19347,"name":"uint256","nodeType":"ElementaryTypeName","src":"14765:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19355,"initialValue":{"arguments":[{"expression":{"id":19351,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"14827:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":23983,"src":"14827:11:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19353,"name":"debtReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19331,"src":"14846:16:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":19349,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14857,"src":"14793:7:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Helpers_$14857_$","typeString":"type(library Helpers)"}},"id":19350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserCurrentDebt","nodeType":"MemberAccess","referencedDeclaration":14856,"src":"14793:26:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveCache memory) view returns (uint256,uint256)"}},"id":19354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14793:75:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"14740:128:100"},{"assignments":[19357],"declarations":[{"constant":false,"id":19357,"mutability":"mutable","name":"userTotalDebt","nameLocation":"14883:13:100","nodeType":"VariableDeclaration","scope":19394,"src":"14875:21:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19356,"name":"uint256","nodeType":"ElementaryTypeName","src":"14875:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19361,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19358,"name":"userStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19346,"src":"14899:14:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":19359,"name":"userVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19348,"src":"14916:16:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14899:33:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14875:57:100"},{"assignments":[19363],"declarations":[{"constant":false,"id":19363,"mutability":"mutable","name":"closeFactor","nameLocation":"14947:11:100","nodeType":"VariableDeclaration","scope":19394,"src":"14939:19:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19362,"name":"uint256","nodeType":"ElementaryTypeName","src":"14939:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19370,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19364,"name":"healthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19336,"src":"14961:12:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19365,"name":"CLOSE_FACTOR_HF_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18675,"src":"14976:25:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14961:40:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":19368,"name":"MAX_LIQUIDATION_CLOSE_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18671,"src":"15051:28:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14961:118:100","trueExpression":{"id":19367,"name":"DEFAULT_LIQUIDATION_CLOSE_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18667,"src":"15010:32:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14939:140:100"},{"assignments":[19372],"declarations":[{"constant":false,"id":19372,"mutability":"mutable","name":"maxLiquidatableDebt","nameLocation":"15094:19:100","nodeType":"VariableDeclaration","scope":19394,"src":"15086:27:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19371,"name":"uint256","nodeType":"ElementaryTypeName","src":"15086:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19377,"initialValue":{"arguments":[{"id":19375,"name":"closeFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19363,"src":"15141:11:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19373,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19357,"src":"15116:13:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"15116:24:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":19376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15116:37:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15086:67:100"},{"assignments":[19379],"declarations":[{"constant":false,"id":19379,"mutability":"mutable","name":"actualDebtToLiquidate","nameLocation":"15168:21:100","nodeType":"VariableDeclaration","scope":19394,"src":"15160:29:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19378,"name":"uint256","nodeType":"ElementaryTypeName","src":"15160:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19388,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19380,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"15192:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtToCover","nodeType":"MemberAccess","referencedDeclaration":23977,"src":"15192:18:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19382,"name":"maxLiquidatableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19372,"src":"15213:19:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15192:40:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":19385,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"15269:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19386,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtToCover","nodeType":"MemberAccess","referencedDeclaration":23977,"src":"15269:18:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"15192:95:100","trueExpression":{"id":19384,"name":"maxLiquidatableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19372,"src":"15241:19:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15160:127:100"},{"expression":{"components":[{"id":19389,"name":"userVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19348,"src":"15302:16:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19390,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19357,"src":"15320:13:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19391,"name":"actualDebtToLiquidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19379,"src":"15335:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19392,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15301:56:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":19344,"id":19393,"nodeType":"Return","src":"15294:63:100"}]},"documentation":{"id":19328,"nodeType":"StructuredDocumentation","src":"13841:676:100","text":" @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\n and corresponding close factor.\n @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\n @param debtReserveCache The reserve cache data object of the debt reserve\n @param params The additional parameters needed to execute the liquidation function\n @param healthFactor The health factor of the position\n @return The variable debt of the user\n @return The total debt of the user\n @return The actual debt to liquidate as a function of the closeFactor"},"id":19395,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateDebt","nameLocation":"14529:14:100","nodeType":"FunctionDefinition","parameters":{"id":19337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19331,"mutability":"mutable","name":"debtReserveCache","nameLocation":"14579:16:100","nodeType":"VariableDeclaration","scope":19395,"src":"14549:46:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":19330,"nodeType":"UserDefinedTypeName","pathNode":{"id":19329,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"14549:22:100"},"referencedDeclaration":23973,"src":"14549:22:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":19334,"mutability":"mutable","name":"params","nameLocation":"14647:6:100","nodeType":"VariableDeclaration","scope":19395,"src":"14601:52:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":19333,"nodeType":"UserDefinedTypeName","pathNode":{"id":19332,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":23992,"src":"14601:38:100"},"referencedDeclaration":23992,"src":"14601:38:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"},{"constant":false,"id":19336,"mutability":"mutable","name":"healthFactor","nameLocation":"14667:12:100","nodeType":"VariableDeclaration","scope":19395,"src":"14659:20:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19335,"name":"uint256","nodeType":"ElementaryTypeName","src":"14659:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14543:140:100"},"returnParameters":{"id":19344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19339,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19395,"src":"14707:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19338,"name":"uint256","nodeType":"ElementaryTypeName","src":"14707:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19341,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19395,"src":"14716:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19340,"name":"uint256","nodeType":"ElementaryTypeName","src":"14716:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19343,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19395,"src":"14725:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19342,"name":"uint256","nodeType":"ElementaryTypeName","src":"14725:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14706:27:100"},"scope":19765,"src":"14520:842:100","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19507,"nodeType":"Block","src":"16202:1072:100","statements":[{"assignments":[19421],"declarations":[{"constant":false,"id":19421,"mutability":"mutable","name":"collateralAToken","nameLocation":"16216:16:100","nodeType":"VariableDeclaration","scope":19507,"src":"16208:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"},"typeName":{"id":19420,"nodeType":"UserDefinedTypeName","pathNode":{"id":19419,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3986,"src":"16208:7:100"},"referencedDeclaration":3986,"src":"16208:7:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"visibility":"internal"}],"id":19426,"initialValue":{"arguments":[{"expression":{"id":19423,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19404,"src":"16243:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19424,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"16243:31:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19422,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"16235:7:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":19425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16235:40:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"nodeType":"VariableDeclarationStatement","src":"16208:67:100"},{"assignments":[19428],"declarations":[{"constant":false,"id":19428,"mutability":"mutable","name":"liquidationBonus","nameLocation":"16289:16:100","nodeType":"VariableDeclaration","scope":19507,"src":"16281:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19427,"name":"uint256","nodeType":"ElementaryTypeName","src":"16281:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19433,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19429,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19404,"src":"16308:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"16308:31:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":19431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":13058,"src":"16308:51:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16308:53:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16281:80:100"},{"assignments":[19435],"declarations":[{"constant":false,"id":19435,"mutability":"mutable","name":"collateralPriceSource","nameLocation":"16376:21:100","nodeType":"VariableDeclaration","scope":19507,"src":"16368:29:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19434,"name":"address","nodeType":"ElementaryTypeName","src":"16368:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":19438,"initialValue":{"expression":{"id":19436,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"16400:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19437,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":23979,"src":"16400:22:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16368:54:100"},{"assignments":[19440],"declarations":[{"constant":false,"id":19440,"mutability":"mutable","name":"debtPriceSource","nameLocation":"16436:15:100","nodeType":"VariableDeclaration","scope":19507,"src":"16428:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19439,"name":"address","nodeType":"ElementaryTypeName","src":"16428:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":19443,"initialValue":{"expression":{"id":19441,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"16454:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":23981,"src":"16454:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16428:42:100"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":19447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19444,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"16481:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19445,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":23989,"src":"16481:24:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16509:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16481:29:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19500,"nodeType":"IfStatement","src":"16477:703:100","trueBody":{"id":19499,"nodeType":"Block","src":"16512:668:100","statements":[{"assignments":[19449],"declarations":[{"constant":false,"id":19449,"mutability":"mutable","name":"eModePriceSource","nameLocation":"16528:16:100","nodeType":"VariableDeclaration","scope":19499,"src":"16520:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19448,"name":"address","nodeType":"ElementaryTypeName","src":"16520:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":19455,"initialValue":{"expression":{"baseExpression":{"id":19450,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19401,"src":"16547:15:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":19453,"indexExpression":{"expression":{"id":19451,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"16563:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":23989,"src":"16563:24:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16547:41:100","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":19454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceSource","nodeType":"MemberAccess","referencedDeclaration":23924,"src":"16547:53:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16520:80:100"},{"condition":{"arguments":[{"expression":{"id":19458,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"16662:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":23989,"src":"16662:24:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19460,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19404,"src":"16698:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"16698:31:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":19462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13824,"src":"16698:48:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16698:50:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19456,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17209,"src":"16622:10:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EModeLogic_$17209_$","typeString":"type(library EModeLogic)"}},"id":19457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":17208,"src":"16622:28:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":19464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16622:136:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19486,"nodeType":"IfStatement","src":"16609:363:100","trueBody":{"id":19485,"nodeType":"Block","src":"16767:205:100","statements":[{"expression":{"id":19471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19465,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"16777:16:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":19466,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19401,"src":"16796:15:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":19469,"indexExpression":{"expression":{"id":19467,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"16812:6:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":19468,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":23989,"src":"16812:24:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16796:41:100","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":19470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":23922,"src":"16796:58:100","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16777:77:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19472,"nodeType":"ExpressionStatement","src":"16777:77:100"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19473,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19449,"src":"16869:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":19476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16897:1:100","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":19475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16889:7:100","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19474,"name":"address","nodeType":"ElementaryTypeName","src":"16889:7:100","typeDescriptions":{}}},"id":19477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16889:10:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16869:30:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19484,"nodeType":"IfStatement","src":"16865:99:100","trueBody":{"id":19483,"nodeType":"Block","src":"16901:63:100","statements":[{"expression":{"id":19481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19479,"name":"collateralPriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19435,"src":"16913:21:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19480,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19449,"src":"16937:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16913:40:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19482,"nodeType":"ExpressionStatement","src":"16913:40:100"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19487,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19449,"src":"17089:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":19490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17117:1:100","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":19489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17109:7:100","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19488,"name":"address","nodeType":"ElementaryTypeName","src":"17109:7:100","typeDescriptions":{}}},"id":19491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17109:10:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17089:30:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19498,"nodeType":"IfStatement","src":"17085:89:100","trueBody":{"id":19497,"nodeType":"Block","src":"17121:53:100","statements":[{"expression":{"id":19495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19493,"name":"debtPriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19440,"src":"17131:15:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19494,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19449,"src":"17149:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17131:34:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19496,"nodeType":"ExpressionStatement","src":"17131:34:100"}]}}]}},{"expression":{"components":[{"id":19501,"name":"collateralAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19421,"src":"17194:16:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},{"id":19502,"name":"collateralPriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19435,"src":"17212:21:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19503,"name":"debtPriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19440,"src":"17235:15:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19504,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"17252:16:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19505,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17193:76:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IAToken_$3986_$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(contract IAToken,address,address,uint256)"}},"functionReturnParameters":19418,"id":19506,"nodeType":"Return","src":"17186:83:100"}]},"documentation":{"id":19396,"nodeType":"StructuredDocumentation","src":"15366:557:100","text":" @notice Returns the configuration data for the debt and the collateral reserves.\n @param eModeCategories The configuration of all the efficiency mode categories\n @param collateralReserve The data of the collateral reserve\n @param params The additional parameters needed to execute the liquidation function\n @return The collateral aToken\n @return The address to use as price source for the collateral\n @return The address to use as price source for the debt\n @return The liquidation bonus to apply to the collateral"},"id":19508,"implemented":true,"kind":"function","modifiers":[],"name":"_getConfigurationData","nameLocation":"15935:21:100","nodeType":"FunctionDefinition","parameters":{"id":19408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19401,"mutability":"mutable","name":"eModeCategories","nameLocation":"16012:15:100","nodeType":"VariableDeclaration","scope":19508,"src":"15962:65:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":19400,"keyType":{"id":19397,"name":"uint8","nodeType":"ElementaryTypeName","src":"15970:5:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"15962:41:100","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":19399,"nodeType":"UserDefinedTypeName","pathNode":{"id":19398,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"15979:23:100"},"referencedDeclaration":23927,"src":"15979:23:100","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":19404,"mutability":"mutable","name":"collateralReserve","nameLocation":"16063:17:100","nodeType":"VariableDeclaration","scope":19508,"src":"16033:47:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":19403,"nodeType":"UserDefinedTypeName","pathNode":{"id":19402,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"16033:21:100"},"referencedDeclaration":23909,"src":"16033:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":19407,"mutability":"mutable","name":"params","nameLocation":"16132:6:100","nodeType":"VariableDeclaration","scope":19508,"src":"16086:52:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":19406,"nodeType":"UserDefinedTypeName","pathNode":{"id":19405,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":23992,"src":"16086:38:100"},"referencedDeclaration":23992,"src":"16086:38:100","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"}],"src":"15956:186:100"},"returnParameters":{"id":19418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19411,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19508,"src":"16166:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"},"typeName":{"id":19410,"nodeType":"UserDefinedTypeName","pathNode":{"id":19409,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3986,"src":"16166:7:100"},"referencedDeclaration":3986,"src":"16166:7:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"visibility":"internal"},{"constant":false,"id":19413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19508,"src":"16175:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19412,"name":"address","nodeType":"ElementaryTypeName","src":"16175:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19415,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19508,"src":"16184:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19414,"name":"address","nodeType":"ElementaryTypeName","src":"16184:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19508,"src":"16193:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19416,"name":"uint256","nodeType":"ElementaryTypeName","src":"16193:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16165:36:100"},"scope":19765,"src":"15926:1348:100","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"LiquidationLogic.AvailableCollateralToLiquidateLocalVars","id":19535,"members":[{"constant":false,"id":19510,"mutability":"mutable","name":"collateralPrice","nameLocation":"17339:15:100","nodeType":"VariableDeclaration","scope":19535,"src":"17331:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19509,"name":"uint256","nodeType":"ElementaryTypeName","src":"17331:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19512,"mutability":"mutable","name":"debtAssetPrice","nameLocation":"17368:14:100","nodeType":"VariableDeclaration","scope":19535,"src":"17360:22:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19511,"name":"uint256","nodeType":"ElementaryTypeName","src":"17360:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19514,"mutability":"mutable","name":"maxCollateralToLiquidate","nameLocation":"17396:24:100","nodeType":"VariableDeclaration","scope":19535,"src":"17388:32:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19513,"name":"uint256","nodeType":"ElementaryTypeName","src":"17388:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19516,"mutability":"mutable","name":"baseCollateral","nameLocation":"17434:14:100","nodeType":"VariableDeclaration","scope":19535,"src":"17426:22:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19515,"name":"uint256","nodeType":"ElementaryTypeName","src":"17426:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19518,"mutability":"mutable","name":"bonusCollateral","nameLocation":"17462:15:100","nodeType":"VariableDeclaration","scope":19535,"src":"17454:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19517,"name":"uint256","nodeType":"ElementaryTypeName","src":"17454:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19520,"mutability":"mutable","name":"debtAssetDecimals","nameLocation":"17491:17:100","nodeType":"VariableDeclaration","scope":19535,"src":"17483:25:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19519,"name":"uint256","nodeType":"ElementaryTypeName","src":"17483:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19522,"mutability":"mutable","name":"collateralDecimals","nameLocation":"17522:18:100","nodeType":"VariableDeclaration","scope":19535,"src":"17514:26:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19521,"name":"uint256","nodeType":"ElementaryTypeName","src":"17514:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19524,"mutability":"mutable","name":"collateralAssetUnit","nameLocation":"17554:19:100","nodeType":"VariableDeclaration","scope":19535,"src":"17546:27:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19523,"name":"uint256","nodeType":"ElementaryTypeName","src":"17546:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19526,"mutability":"mutable","name":"debtAssetUnit","nameLocation":"17587:13:100","nodeType":"VariableDeclaration","scope":19535,"src":"17579:21:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19525,"name":"uint256","nodeType":"ElementaryTypeName","src":"17579:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19528,"mutability":"mutable","name":"collateralAmount","nameLocation":"17614:16:100","nodeType":"VariableDeclaration","scope":19535,"src":"17606:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19527,"name":"uint256","nodeType":"ElementaryTypeName","src":"17606:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19530,"mutability":"mutable","name":"debtAmountNeeded","nameLocation":"17644:16:100","nodeType":"VariableDeclaration","scope":19535,"src":"17636:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19529,"name":"uint256","nodeType":"ElementaryTypeName","src":"17636:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19532,"mutability":"mutable","name":"liquidationProtocolFeePercentage","nameLocation":"17674:32:100","nodeType":"VariableDeclaration","scope":19535,"src":"17666:40:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19531,"name":"uint256","nodeType":"ElementaryTypeName","src":"17666:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19534,"mutability":"mutable","name":"liquidationProtocolFee","nameLocation":"17720:22:100","nodeType":"VariableDeclaration","scope":19535,"src":"17712:30:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19533,"name":"uint256","nodeType":"ElementaryTypeName","src":"17712:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"AvailableCollateralToLiquidateLocalVars","nameLocation":"17285:39:100","nodeType":"StructDefinition","scope":19765,"src":"17278:469:100","visibility":"public"},{"body":{"id":19763,"nodeType":"Block","src":"19348:1899:100","statements":[{"assignments":[19566],"declarations":[{"constant":false,"id":19566,"mutability":"mutable","name":"vars","nameLocation":"19401:4:100","nodeType":"VariableDeclaration","scope":19763,"src":"19354:51:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars"},"typeName":{"id":19565,"nodeType":"UserDefinedTypeName","pathNode":{"id":19564,"name":"AvailableCollateralToLiquidateLocalVars","nodeType":"IdentifierPath","referencedDeclaration":19535,"src":"19354:39:100"},"referencedDeclaration":19535,"src":"19354:39:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_storage_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars"}},"visibility":"internal"}],"id":19567,"nodeType":"VariableDeclarationStatement","src":"19354:51:100"},{"expression":{"id":19575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19568,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19412:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralPrice","nodeType":"MemberAccess","referencedDeclaration":19510,"src":"19412:20:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19573,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19544,"src":"19456:15:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19571,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19555,"src":"19435:6:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"id":19572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":6047,"src":"19435:20:100","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19435:37:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19412:60:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19576,"nodeType":"ExpressionStatement","src":"19412:60:100"},{"expression":{"id":19584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19577,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19478:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19579,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAssetPrice","nodeType":"MemberAccess","referencedDeclaration":19512,"src":"19478:19:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19582,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19546,"src":"19521:9:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19580,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19555,"src":"19500:6:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"id":19581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":6047,"src":"19500:20:100","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19500:31:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19478:53:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19585,"nodeType":"ExpressionStatement","src":"19478:53:100"},{"expression":{"id":19593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19586,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19538:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralDecimals","nodeType":"MemberAccess","referencedDeclaration":19522,"src":"19538:23:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19589,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19539,"src":"19564:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"19564:31:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":19591,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":13110,"src":"19564:43:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19564:45:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19538:71:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19594,"nodeType":"ExpressionStatement","src":"19538:71:100"},{"expression":{"id":19602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19595,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19615:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19597,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":19520,"src":"19615:22:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19598,"name":"debtReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19542,"src":"19640:16:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"19640:37:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19600,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":13110,"src":"19640:49:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19640:51:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19615:76:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19603,"nodeType":"ExpressionStatement","src":"19615:76:100"},{"id":19622,"nodeType":"UncheckedBlock","src":"19698:138:100","statements":[{"expression":{"id":19611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19604,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19716:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralAssetUnit","nodeType":"MemberAccess","referencedDeclaration":19524,"src":"19716:24:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19743:2:100","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"id":19608,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19749:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19609,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralDecimals","nodeType":"MemberAccess","referencedDeclaration":19522,"src":"19749:23:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19743:29:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19716:56:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19612,"nodeType":"ExpressionStatement","src":"19716:56:100"},{"expression":{"id":19620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19613,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19780:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAssetUnit","nodeType":"MemberAccess","referencedDeclaration":19526,"src":"19780:18:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19801:2:100","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"id":19617,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19807:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":19520,"src":"19807:22:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19801:28:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19780:49:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19621,"nodeType":"ExpressionStatement","src":"19780:49:100"}]},{"expression":{"id":19630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19623,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"19842:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationProtocolFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19532,"src":"19842:37:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19626,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19539,"src":"19882:17:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"19882:38:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":19628,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":13720,"src":"19882:71:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19882:73:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19842:113:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19631,"nodeType":"ExpressionStatement","src":"19842:113:100"},{"expression":{"id":19651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19632,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20043:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"baseCollateral","nodeType":"MemberAccess","referencedDeclaration":19516,"src":"20043:19:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19635,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20073:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19636,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetPrice","nodeType":"MemberAccess","referencedDeclaration":19512,"src":"20073:19:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":19637,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19548,"src":"20095:11:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20073:33:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19639,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20109:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAssetUnit","nodeType":"MemberAccess","referencedDeclaration":19524,"src":"20109:24:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20073:60:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19642,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20072:62:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19643,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20071:64:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19644,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20145:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19645,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralPrice","nodeType":"MemberAccess","referencedDeclaration":19510,"src":"20145:20:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19646,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20168:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetUnit","nodeType":"MemberAccess","referencedDeclaration":19526,"src":"20168:18:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20145:41:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19649,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20144:43:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20071:116:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20043:144:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19652,"nodeType":"ExpressionStatement","src":"20043:144:100"},{"expression":{"id":19661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19653,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20194:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"maxCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":19514,"src":"20194:29:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19659,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19552,"src":"20257:16:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":19656,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20226:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"baseCollateral","nodeType":"MemberAccess","referencedDeclaration":19516,"src":"20226:19:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"20226:30:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":19660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20226:48:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20194:80:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19662,"nodeType":"ExpressionStatement","src":"20194:80:100"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19663,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20285:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":19514,"src":"20285:29:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19665,"name":"userCollateralBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19550,"src":"20317:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20285:53:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19712,"nodeType":"Block","src":"20595:111:100","statements":[{"expression":{"id":19704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19699,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20603:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":19528,"src":"20603:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":19702,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20627:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":19514,"src":"20627:29:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20603:53:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19705,"nodeType":"ExpressionStatement","src":"20603:53:100"},{"expression":{"id":19710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19706,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20664:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAmountNeeded","nodeType":"MemberAccess","referencedDeclaration":19530,"src":"20664:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19709,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19548,"src":"20688:11:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20664:35:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19711,"nodeType":"ExpressionStatement","src":"20664:35:100"}]},"id":19713,"nodeType":"IfStatement","src":"20281:425:100","trueBody":{"id":19698,"nodeType":"Block","src":"20340:249:100","statements":[{"expression":{"id":19671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19667,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20348:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":19528,"src":"20348:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19670,"name":"userCollateralBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19550,"src":"20372:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20348:45:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19672,"nodeType":"ExpressionStatement","src":"20348:45:100"},{"expression":{"id":19696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19673,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20401:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19675,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAmountNeeded","nodeType":"MemberAccess","referencedDeclaration":19530,"src":"20401:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19694,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19552,"src":"20565:16:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19676,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20427:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralPrice","nodeType":"MemberAccess","referencedDeclaration":19510,"src":"20427:20:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19678,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20450:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":19528,"src":"20450:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20427:44:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19681,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20474:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetUnit","nodeType":"MemberAccess","referencedDeclaration":19526,"src":"20474:18:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20427:65:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19684,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20426:67:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19685,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20505:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetPrice","nodeType":"MemberAccess","referencedDeclaration":19512,"src":"20505:19:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19687,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20527:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAssetUnit","nodeType":"MemberAccess","referencedDeclaration":19524,"src":"20527:24:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20505:46:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19690,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20504:48:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20426:126:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19692,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20425:128:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentDiv","nodeType":"MemberAccess","referencedDeclaration":23725,"src":"20425:139:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":19695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20425:157:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20401:181:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19697,"nodeType":"ExpressionStatement","src":"20401:181:100"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19714,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20716:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19715,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19532,"src":"20716:37:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19716,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20757:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20716:42:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19761,"nodeType":"Block","src":"21172:71:100","statements":[{"expression":{"components":[{"expression":{"id":19754,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"21188:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":19528,"src":"21188:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19756,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"21211:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAmountNeeded","nodeType":"MemberAccess","referencedDeclaration":19530,"src":"21211:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":19758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21234:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":19759,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21187:49:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_rational_0_by_1_$","typeString":"tuple(uint256,uint256,int_const 0)"}},"functionReturnParameters":19563,"id":19760,"nodeType":"Return","src":"21180:56:100"}]},"id":19762,"nodeType":"IfStatement","src":"20712:531:100","trueBody":{"id":19753,"nodeType":"Block","src":"20760:406:100","statements":[{"expression":{"id":19729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19718,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20768:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19720,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"bonusCollateral","nodeType":"MemberAccess","referencedDeclaration":19518,"src":"20768:20:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19721,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20799:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19722,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":19528,"src":"20799:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":19726,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19552,"src":"20864:16:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":19723,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20831:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":19528,"src":"20831:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentDiv","nodeType":"MemberAccess","referencedDeclaration":23725,"src":"20831:32:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":19727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20831:50:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20799:82:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20768:113:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19730,"nodeType":"ExpressionStatement","src":"20768:113:100"},{"expression":{"id":19740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19731,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20890:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19733,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":19534,"src":"20890:27:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":19737,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20961:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeePercentage","nodeType":"MemberAccess","referencedDeclaration":19532,"src":"20961:37:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":19734,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"20920:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"bonusCollateral","nodeType":"MemberAccess","referencedDeclaration":19518,"src":"20920:20:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"20920:31:100","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":19739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20920:86:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20890:116:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19741,"nodeType":"ExpressionStatement","src":"20890:116:100"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19742,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"21032:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":19528,"src":"21032:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":19744,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"21056:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19745,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":19534,"src":"21056:27:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21032:51:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19747,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"21093:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAmountNeeded","nodeType":"MemberAccess","referencedDeclaration":19530,"src":"21093:21:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19749,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19566,"src":"21124:4:100","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$19535_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":19750,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":19534,"src":"21124:27:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19751,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21022:137:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":19563,"id":19752,"nodeType":"Return","src":"21015:144:100"}]}}]},"documentation":{"id":19536,"nodeType":"StructuredDocumentation","src":"17751:1212:100","text":" @notice Calculates how much of a specific collateral can be liquidated, given\n a certain amount of debt asset.\n @dev This function needs to be called after all the checks to validate the liquidation have been performed,\n   otherwise it might fail.\n @param collateralReserve The data of the collateral reserve\n @param debtReserveCache The cached data of the debt reserve\n @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\n @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\n @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\n @return The amount to repay with the liquidation\n @return The fee taken from the liquidation bonus amount to be paid to the protocol"},"id":19764,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateAvailableCollateralToLiquidate","nameLocation":"18975:40:100","nodeType":"FunctionDefinition","parameters":{"id":19556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19539,"mutability":"mutable","name":"collateralReserve","nameLocation":"19051:17:100","nodeType":"VariableDeclaration","scope":19764,"src":"19021:47:100","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":19538,"nodeType":"UserDefinedTypeName","pathNode":{"id":19537,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"19021:21:100"},"referencedDeclaration":23909,"src":"19021:21:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":19542,"mutability":"mutable","name":"debtReserveCache","nameLocation":"19104:16:100","nodeType":"VariableDeclaration","scope":19764,"src":"19074:46:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":19541,"nodeType":"UserDefinedTypeName","pathNode":{"id":19540,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"19074:22:100"},"referencedDeclaration":23973,"src":"19074:22:100","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":19544,"mutability":"mutable","name":"collateralAsset","nameLocation":"19134:15:100","nodeType":"VariableDeclaration","scope":19764,"src":"19126:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19543,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19546,"mutability":"mutable","name":"debtAsset","nameLocation":"19163:9:100","nodeType":"VariableDeclaration","scope":19764,"src":"19155:17:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19545,"name":"address","nodeType":"ElementaryTypeName","src":"19155:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19548,"mutability":"mutable","name":"debtToCover","nameLocation":"19186:11:100","nodeType":"VariableDeclaration","scope":19764,"src":"19178:19:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19547,"name":"uint256","nodeType":"ElementaryTypeName","src":"19178:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19550,"mutability":"mutable","name":"userCollateralBalance","nameLocation":"19211:21:100","nodeType":"VariableDeclaration","scope":19764,"src":"19203:29:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19549,"name":"uint256","nodeType":"ElementaryTypeName","src":"19203:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19552,"mutability":"mutable","name":"liquidationBonus","nameLocation":"19246:16:100","nodeType":"VariableDeclaration","scope":19764,"src":"19238:24:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19551,"name":"uint256","nodeType":"ElementaryTypeName","src":"19238:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19555,"mutability":"mutable","name":"oracle","nameLocation":"19287:6:100","nodeType":"VariableDeclaration","scope":19764,"src":"19268:25:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"},"typeName":{"id":19554,"nodeType":"UserDefinedTypeName","pathNode":{"id":19553,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":6048,"src":"19268:18:100"},"referencedDeclaration":6048,"src":"19268:18:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"visibility":"internal"}],"src":"19015:282:100"},"returnParameters":{"id":19563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19558,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19764,"src":"19321:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19557,"name":"uint256","nodeType":"ElementaryTypeName","src":"19321:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19764,"src":"19330:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19559,"name":"uint256","nodeType":"ElementaryTypeName","src":"19330:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19562,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19764,"src":"19339:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19561,"name":"uint256","nodeType":"ElementaryTypeName","src":"19339:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19320:27:100"},"scope":19765,"src":"18966:2281:100","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":19766,"src":"1399:19850:100","usedErrors":[]}],"src":"37:21213:100"},"id":100},"contracts/protocol/libraries/logic/PoolLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/PoolLogic.sol","exportedSymbols":{"Address":[722],"DataTypes":[24227],"Errors":[14819],"GPv2SafeERC20":[118],"GenericLogic":[18449],"IAToken":[3986],"IERC20":[1442],"PoolLogic":[20211],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"ValidationLogic":[23502],"WadRayMath":[23813]},"id":20212,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":19767,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:101"},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":19769,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":119,"src":"63:87:101","symbolAliases":[{"foreign":{"id":19768,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Address.sol","file":"../../../dependencies/openzeppelin/contracts/Address.sol","id":19771,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":723,"src":"151:81:101","symbolAliases":[{"foreign":{"id":19770,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"src":"159:7:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":19773,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":1443,"src":"233:79:101","symbolAliases":[{"foreign":{"id":19772,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"241:6:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":19775,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":3987,"src":"313:56:101","symbolAliases":[{"foreign":{"id":19774,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"321:7:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":19777,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":14035,"src":"370:79:101","symbolAliases":[{"foreign":{"id":19776,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"378:20:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":19779,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":14820,"src":"450:45:101","symbolAliases":[{"foreign":{"id":19778,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"458:6:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":19781,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":23814,"src":"496:50:101","symbolAliases":[{"foreign":{"id":19780,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"504:10:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":19783,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":24228,"src":"547:49:101","symbolAliases":[{"foreign":{"id":19782,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"555:9:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":19785,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":20972,"src":"597:48:101","symbolAliases":[{"foreign":{"id":19784,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"605:12:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":19787,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":23503,"src":"646:54:101","symbolAliases":[{"foreign":{"id":19786,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"654:15:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/GenericLogic.sol","file":"./GenericLogic.sol","id":19789,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20212,"sourceUnit":18450,"src":"701:48:101","symbolAliases":[{"foreign":{"id":19788,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"709:12:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":19790,"nodeType":"StructuredDocumentation","src":"751:111:101","text":" @title PoolLogic library\n @author Aave\n @notice Implements the logic for Pool specific functions"},"fullyImplemented":true,"id":20211,"linearizedBaseContracts":[20211],"name":"PoolLogic","nameLocation":"871:9:101","nodeType":"ContractDefinition","nodes":[{"id":19794,"libraryName":{"id":19791,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"891:13:101"},"nodeType":"UsingForDirective","src":"885:31:101","typeName":{"id":19793,"nodeType":"UserDefinedTypeName","pathNode":{"id":19792,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"909:6:101"},"referencedDeclaration":1442,"src":"909:6:101","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":19797,"libraryName":{"id":19795,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"925:10:101"},"nodeType":"UsingForDirective","src":"919:29:101","typeName":{"id":19796,"name":"uint256","nodeType":"ElementaryTypeName","src":"940:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":19801,"libraryName":{"id":19798,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"957:12:101"},"nodeType":"UsingForDirective","src":"951:45:101","typeName":{"id":19800,"nodeType":"UserDefinedTypeName","pathNode":{"id":19799,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"974:21:101"},"referencedDeclaration":23909,"src":"974:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":19805,"libraryName":{"id":19802,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1005:20:101"},"nodeType":"UsingForDirective","src":"999:65:101","typeName":{"id":19804,"nodeType":"UserDefinedTypeName","pathNode":{"id":19803,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1030:33:101"},"referencedDeclaration":23912,"src":"1030:33:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"anonymous":false,"id":19811,"name":"MintedToTreasury","nameLocation":"1108:16:101","nodeType":"EventDefinition","parameters":{"id":19810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19807,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1141:7:101","nodeType":"VariableDeclaration","scope":19811,"src":"1125:23:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19806,"name":"address","nodeType":"ElementaryTypeName","src":"1125:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19809,"indexed":false,"mutability":"mutable","name":"amountMinted","nameLocation":"1158:12:101","nodeType":"VariableDeclaration","scope":19811,"src":"1150:20:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19808,"name":"uint256","nodeType":"ElementaryTypeName","src":"1150:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1124:47:101"},"src":"1102:70:101"},{"anonymous":false,"id":19817,"name":"IsolationModeTotalDebtUpdated","nameLocation":"1181:29:101","nodeType":"EventDefinition","parameters":{"id":19816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19813,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1227:5:101","nodeType":"VariableDeclaration","scope":19817,"src":"1211:21:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19812,"name":"address","nodeType":"ElementaryTypeName","src":"1211:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19815,"indexed":false,"mutability":"mutable","name":"totalDebt","nameLocation":"1242:9:101","nodeType":"VariableDeclaration","scope":19817,"src":"1234:17:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19814,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1210:42:101"},"src":"1175:78:101"},{"body":{"id":19953,"nodeType":"Block","src":"1835:871:101","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":19838,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"1868:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19839,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24213,"src":"1868:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19836,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":722,"src":"1849:7:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$722_$","typeString":"type(library Address)"}},"id":19837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":445,"src":"1849:18:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":19840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1849:32:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19841,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1883:6:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":19842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NOT_CONTRACT","nodeType":"MemberAccess","referencedDeclaration":14575,"src":"1883:19:101","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19835,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1841:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1841:62:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19844,"nodeType":"ExpressionStatement","src":"1841:62:101"},{"expression":{"arguments":[{"expression":{"id":19850,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"1948:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19851,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":24215,"src":"1948:20:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19852,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"1976:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtAddress","nodeType":"MemberAccess","referencedDeclaration":24217,"src":"1976:24:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19854,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2008:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtAddress","nodeType":"MemberAccess","referencedDeclaration":24219,"src":"2008:26:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19856,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2042:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19857,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":24221,"src":"2042:34:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":19845,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19823,"src":"1909:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":19848,"indexExpression":{"expression":{"id":19846,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"1922:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24213,"src":"1922:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1909:26:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":19849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"init","nodeType":"MemberAccess","referencedDeclaration":20502,"src":"1909:31:101","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,address,address,address,address)"}},"id":19858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1909:173:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19859,"nodeType":"ExpressionStatement","src":"1909:173:101"},{"assignments":[19861],"declarations":[{"constant":false,"id":19861,"mutability":"mutable","name":"reserveAlreadyAdded","nameLocation":"2094:19:101","nodeType":"VariableDeclaration","scope":19953,"src":"2089:24:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19860,"name":"bool","nodeType":"ElementaryTypeName","src":"2089:4:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19876,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":19868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":19862,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19823,"src":"2116:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":19865,"indexExpression":{"expression":{"id":19863,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2129:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24213,"src":"2129:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2116:26:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":19866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"2116:29:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2149:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2116:34:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":19869,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19827,"src":"2160:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":19871,"indexExpression":{"hexValue":"30","id":19870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2173:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2160:15:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":19872,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2179:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24213,"src":"2179:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2160:31:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2116:75:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"2089:102:101"},{"expression":{"arguments":[{"id":19879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2205:20:101","subExpression":{"id":19878,"name":"reserveAlreadyAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19861,"src":"2206:19:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19880,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2227:6:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":19881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_ALREADY_ADDED","nodeType":"MemberAccess","referencedDeclaration":14590,"src":"2227:28:101","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19877,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2197:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2197:59:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19883,"nodeType":"ExpressionStatement","src":"2197:59:101"},{"body":{"id":19922,"nodeType":"Block","src":"2313:163:101","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":19895,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19827,"src":"2325:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":19897,"indexExpression":{"id":19896,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19885,"src":"2338:1:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2325:15:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2352:1:101","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":19899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2344:7:101","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19898,"name":"address","nodeType":"ElementaryTypeName","src":"2344:7:101","typeDescriptions":{}}},"id":19901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2344:10:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2325:29:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19921,"nodeType":"IfStatement","src":"2321:149:101","trueBody":{"id":19920,"nodeType":"Block","src":"2356:114:101","statements":[{"expression":{"id":19909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":19903,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19823,"src":"2366:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":19906,"indexExpression":{"expression":{"id":19904,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2379:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19905,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24213,"src":"2379:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2366:26:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":19907,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"2366:29:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19908,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19885,"src":"2398:1:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2366:33:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":19910,"nodeType":"ExpressionStatement","src":"2366:33:101"},{"expression":{"id":19916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19911,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19827,"src":"2409:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":19913,"indexExpression":{"id":19912,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19885,"src":"2422:1:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2409:15:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":19914,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2427:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24213,"src":"2427:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2409:30:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19917,"nodeType":"ExpressionStatement","src":"2409:30:101"},{"expression":{"hexValue":"66616c7365","id":19918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2456:5:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":19834,"id":19919,"nodeType":"Return","src":"2449:12:101"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":19891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19888,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19885,"src":"2282:1:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":19889,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2286:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19890,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24223,"src":"2286:20:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2282:24:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19923,"initializationExpression":{"assignments":[19885],"declarations":[{"constant":false,"id":19885,"mutability":"mutable","name":"i","nameLocation":"2275:1:101","nodeType":"VariableDeclaration","scope":19923,"src":"2268:8:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":19884,"name":"uint16","nodeType":"ElementaryTypeName","src":"2268:6:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":19887,"initialValue":{"hexValue":"30","id":19886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2279:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2268:12:101"},"loopExpression":{"expression":{"id":19893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2308:3:101","subExpression":{"id":19892,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19885,"src":"2308:1:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":19894,"nodeType":"ExpressionStatement","src":"2308:3:101"},"nodeType":"ForStatement","src":"2263:213:101"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":19929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19925,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2490:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24223,"src":"2490:20:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":19927,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2513:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxNumberReserves","nodeType":"MemberAccess","referencedDeclaration":24225,"src":"2513:24:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2490:47:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19930,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2539:6:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":19931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_MORE_RESERVES_ALLOWED","nodeType":"MemberAccess","referencedDeclaration":14593,"src":"2539:31:101","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19924,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2482:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2482:89:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19933,"nodeType":"ExpressionStatement","src":"2482:89:101"},{"expression":{"id":19941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":19934,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19823,"src":"2577:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":19937,"indexExpression":{"expression":{"id":19935,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2590:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24213,"src":"2590:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2577:26:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":19938,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"2577:29:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":19939,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2609:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19940,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24223,"src":"2609:20:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2577:52:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":19942,"nodeType":"ExpressionStatement","src":"2577:52:101"},{"expression":{"id":19949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19943,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19827,"src":"2635:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":19946,"indexExpression":{"expression":{"id":19944,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2648:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19945,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24223,"src":"2648:20:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2635:34:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":19947,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19830,"src":"2672:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":19948,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24213,"src":"2672:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2635:49:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19950,"nodeType":"ExpressionStatement","src":"2635:49:101"},{"expression":{"hexValue":"74727565","id":19951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2697:4:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":19834,"id":19952,"nodeType":"Return","src":"2690:11:101"}]},"documentation":{"id":19818,"nodeType":"StructuredDocumentation","src":"1257:350:101","text":" @notice Initialize an asset reserve and add the reserve to the list of reserves\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param params Additional parameters needed for initiation\n @return true if appended, false if inserted at existing empty spot"},"functionSelector":"69fc1bdf","id":19954,"implemented":true,"kind":"function","modifiers":[],"name":"executeInitReserve","nameLocation":"1619:18:101","nodeType":"FunctionDefinition","parameters":{"id":19831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19823,"mutability":"mutable","name":"reservesData","nameLocation":"1693:12:101","nodeType":"VariableDeclaration","scope":19954,"src":"1643:62:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":19822,"keyType":{"id":19819,"name":"address","nodeType":"ElementaryTypeName","src":"1651:7:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1643:41:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":19821,"nodeType":"UserDefinedTypeName","pathNode":{"id":19820,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1662:21:101"},"referencedDeclaration":23909,"src":"1662:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":19827,"mutability":"mutable","name":"reservesList","nameLocation":"1747:12:101","nodeType":"VariableDeclaration","scope":19954,"src":"1711:48:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":19826,"keyType":{"id":19824,"name":"uint256","nodeType":"ElementaryTypeName","src":"1719:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1711:27:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":19825,"name":"address","nodeType":"ElementaryTypeName","src":"1730:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":19830,"mutability":"mutable","name":"params","nameLocation":"1800:6:101","nodeType":"VariableDeclaration","scope":19954,"src":"1765:41:101","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams"},"typeName":{"id":19829,"nodeType":"UserDefinedTypeName","pathNode":{"id":19828,"name":"DataTypes.InitReserveParams","nodeType":"IdentifierPath","referencedDeclaration":24226,"src":"1765:27:101"},"referencedDeclaration":24226,"src":"1765:27:101","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_storage_ptr","typeString":"struct DataTypes.InitReserveParams"}},"visibility":"internal"}],"src":"1637:173:101"},"returnParameters":{"id":19834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19833,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19954,"src":"1829:4:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19832,"name":"bool","nodeType":"ElementaryTypeName","src":"1829:4:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1828:6:101"},"scope":20211,"src":"1610:1096:101","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19972,"nodeType":"Block","src":"3005:49:101","statements":[{"expression":{"arguments":[{"id":19968,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19959,"src":"3038:2:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19969,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19961,"src":"3042:6:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":19965,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19957,"src":"3018:5:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19964,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"3011:6:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":19966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3011:13:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":19967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"3011:26:101","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":19970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3011:38:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19971,"nodeType":"ExpressionStatement","src":"3011:38:101"}]},"documentation":{"id":19955,"nodeType":"StructuredDocumentation","src":"2710:211:101","text":" @notice Rescue and transfer tokens locked in this contract\n @param token The address of the token\n @param to The address of the recipient\n @param amount The amount of token to transfer"},"functionSelector":"87b322b2","id":19973,"implemented":true,"kind":"function","modifiers":[],"name":"executeRescueTokens","nameLocation":"2933:19:101","nodeType":"FunctionDefinition","parameters":{"id":19962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19957,"mutability":"mutable","name":"token","nameLocation":"2961:5:101","nodeType":"VariableDeclaration","scope":19973,"src":"2953:13:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19956,"name":"address","nodeType":"ElementaryTypeName","src":"2953:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19959,"mutability":"mutable","name":"to","nameLocation":"2976:2:101","nodeType":"VariableDeclaration","scope":19973,"src":"2968:10:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19958,"name":"address","nodeType":"ElementaryTypeName","src":"2968:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19961,"mutability":"mutable","name":"amount","nameLocation":"2988:6:101","nodeType":"VariableDeclaration","scope":19973,"src":"2980:14:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19960,"name":"uint256","nodeType":"ElementaryTypeName","src":"2980:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2952:43:101"},"returnParameters":{"id":19963,"nodeType":"ParameterList","parameters":[],"src":"3005:0:101"},"scope":20211,"src":"2924:130:101","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20064,"nodeType":"Block","src":"3455:783:101","statements":[{"body":{"id":20062,"nodeType":"Block","src":"3505:729:101","statements":[{"assignments":[19997],"declarations":[{"constant":false,"id":19997,"mutability":"mutable","name":"assetAddress","nameLocation":"3521:12:101","nodeType":"VariableDeclaration","scope":20062,"src":"3513:20:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19996,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20001,"initialValue":{"baseExpression":{"id":19998,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"3536:6:101","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":20000,"indexExpression":{"id":19999,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19986,"src":"3543:1:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3536:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3513:32:101"},{"assignments":[20006],"declarations":[{"constant":false,"id":20006,"mutability":"mutable","name":"reserve","nameLocation":"3584:7:101","nodeType":"VariableDeclaration","scope":20062,"src":"3554:37:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20005,"nodeType":"UserDefinedTypeName","pathNode":{"id":20004,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"3554:21:101"},"referencedDeclaration":23909,"src":"3554:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":20010,"initialValue":{"baseExpression":{"id":20007,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19979,"src":"3594:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20009,"indexExpression":{"id":20008,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19997,"src":"3607:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3594:26:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3554:66:101"},{"condition":{"id":20015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3731:34:101","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20011,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20006,"src":"3732:7:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"3732:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":20013,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getActive","nodeType":"MemberAccess","referencedDeclaration":13160,"src":"3732:31:101","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":20014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3732:33:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20018,"nodeType":"IfStatement","src":"3727:67:101","trueBody":{"id":20017,"nodeType":"Block","src":"3767:27:101","statements":[{"id":20016,"nodeType":"Continue","src":"3777:8:101"}]}},{"assignments":[20020],"declarations":[{"constant":false,"id":20020,"mutability":"mutable","name":"accruedToTreasury","nameLocation":"3810:17:101","nodeType":"VariableDeclaration","scope":20062,"src":"3802:25:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20019,"name":"uint256","nodeType":"ElementaryTypeName","src":"3802:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20023,"initialValue":{"expression":{"id":20021,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20006,"src":"3830:7:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20022,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"3830:25:101","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3802:53:101"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20024,"name":"accruedToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20020,"src":"3868:17:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3889:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3868:22:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20061,"nodeType":"IfStatement","src":"3864:364:101","trueBody":{"id":20060,"nodeType":"Block","src":"3892:336:101","statements":[{"expression":{"id":20031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20027,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20006,"src":"3902:7:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"3902:25:101","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3930:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3902:29:101","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20032,"nodeType":"ExpressionStatement","src":"3902:29:101"},{"assignments":[20034],"declarations":[{"constant":false,"id":20034,"mutability":"mutable","name":"normalizedIncome","nameLocation":"3949:16:101","nodeType":"VariableDeclaration","scope":20060,"src":"3941:24:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20033,"name":"uint256","nodeType":"ElementaryTypeName","src":"3941:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20038,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20035,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20006,"src":"3968:7:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20036,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":20309,"src":"3968:27:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":20037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3968:29:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3941:56:101"},{"assignments":[20040],"declarations":[{"constant":false,"id":20040,"mutability":"mutable","name":"amountToMint","nameLocation":"4015:12:101","nodeType":"VariableDeclaration","scope":20060,"src":"4007:20:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20039,"name":"uint256","nodeType":"ElementaryTypeName","src":"4007:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20045,"initialValue":{"arguments":[{"id":20043,"name":"normalizedIncome","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20034,"src":"4055:16:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20041,"name":"accruedToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20020,"src":"4030:17:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"4030:24:101","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4030:42:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4007:65:101"},{"expression":{"arguments":[{"id":20051,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20040,"src":"4128:12:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20052,"name":"normalizedIncome","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20034,"src":"4142:16:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":20047,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20006,"src":"4090:7:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20048,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"4090:21:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20046,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"4082:7:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":20049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4082:30:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":20050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mintToTreasury","nodeType":"MemberAccess","referencedDeclaration":3903,"src":"4082:45:101","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) external"}},"id":20053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4082:77:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20054,"nodeType":"ExpressionStatement","src":"4082:77:101"},{"eventCall":{"arguments":[{"id":20056,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19997,"src":"4192:12:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20057,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20040,"src":"4206:12:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20055,"name":"MintedToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19811,"src":"4175:16:101","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4175:44:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20059,"nodeType":"EmitStatement","src":"4170:49:101"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19989,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19986,"src":"3481:1:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":19990,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"3485:6:101","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":19991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3485:13:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3481:17:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20063,"initializationExpression":{"assignments":[19986],"declarations":[{"constant":false,"id":19986,"mutability":"mutable","name":"i","nameLocation":"3474:1:101","nodeType":"VariableDeclaration","scope":20063,"src":"3466:9:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19985,"name":"uint256","nodeType":"ElementaryTypeName","src":"3466:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19988,"initialValue":{"hexValue":"30","id":19987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3478:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3466:13:101"},"loopExpression":{"expression":{"id":19994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3500:3:101","subExpression":{"id":19993,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19986,"src":"3500:1:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19995,"nodeType":"ExpressionStatement","src":"3500:3:101"},"nodeType":"ForStatement","src":"3461:773:101"}]},"documentation":{"id":19974,"nodeType":"StructuredDocumentation","src":"3058:251:101","text":" @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\n @param reservesData The state of all the reserves\n @param assets The list of reserves for which the minting needs to be executed"},"functionSelector":"48c2ca8c","id":20065,"implemented":true,"kind":"function","modifiers":[],"name":"executeMintToTreasury","nameLocation":"3321:21:101","nodeType":"FunctionDefinition","parameters":{"id":19983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19979,"mutability":"mutable","name":"reservesData","nameLocation":"3398:12:101","nodeType":"VariableDeclaration","scope":20065,"src":"3348:62:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":19978,"keyType":{"id":19975,"name":"address","nodeType":"ElementaryTypeName","src":"3356:7:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3348:41:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":19977,"nodeType":"UserDefinedTypeName","pathNode":{"id":19976,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"3367:21:101"},"referencedDeclaration":23909,"src":"3367:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":19982,"mutability":"mutable","name":"assets","nameLocation":"3435:6:101","nodeType":"VariableDeclaration","scope":20065,"src":"3416:25:101","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":19980,"name":"address","nodeType":"ElementaryTypeName","src":"3416:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19981,"nodeType":"ArrayTypeName","src":"3416:9:101","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3342:103:101"},"returnParameters":{"id":19984,"nodeType":"ParameterList","parameters":[],"src":"3455:0:101"},"scope":20211,"src":"3312:926:101","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20101,"nodeType":"Block","src":"4680:207:101","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"baseExpression":{"id":20077,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20071,"src":"4694:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20079,"indexExpression":{"id":20078,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20073,"src":"4707:5:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4694:19:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":20080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"4694:33:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":20081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":13668,"src":"4694:48:101","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4694:50:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4748:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4694:55:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20085,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4751:6:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":20086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":14788,"src":"4751:28:101","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20076,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4686:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4686:94:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20088,"nodeType":"ExpressionStatement","src":"4686:94:101"},{"expression":{"id":20094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":20089,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20071,"src":"4786:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20091,"indexExpression":{"id":20090,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20073,"src":"4799:5:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4786:19:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":20092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":23908,"src":"4786:42:101","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4831:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4786:46:101","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20095,"nodeType":"ExpressionStatement","src":"4786:46:101"},{"eventCall":{"arguments":[{"id":20097,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20073,"src":"4873:5:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":20098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4880:1:101","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"}],"id":20096,"name":"IsolationModeTotalDebtUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19817,"src":"4843:29:101","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4843:39:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20100,"nodeType":"EmitStatement","src":"4838:44:101"}]},"documentation":{"id":20066,"nodeType":"StructuredDocumentation","src":"4242:291:101","text":" @notice Resets the isolation mode total debt of the given asset to zero\n @dev It requires the given asset has zero debt ceiling\n @param reservesData The state of all the reserves\n @param asset The address of the underlying asset to reset the isolationModeTotalDebt"},"functionSelector":"1e3b4145","id":20102,"implemented":true,"kind":"function","modifiers":[],"name":"executeResetIsolationModeTotalDebt","nameLocation":"4545:34:101","nodeType":"FunctionDefinition","parameters":{"id":20074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20071,"mutability":"mutable","name":"reservesData","nameLocation":"4635:12:101","nodeType":"VariableDeclaration","scope":20102,"src":"4585:62:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20070,"keyType":{"id":20067,"name":"address","nodeType":"ElementaryTypeName","src":"4593:7:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4585:41:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20069,"nodeType":"UserDefinedTypeName","pathNode":{"id":20068,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4604:21:101"},"referencedDeclaration":23909,"src":"4604:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20073,"mutability":"mutable","name":"asset","nameLocation":"4661:5:101","nodeType":"VariableDeclaration","scope":20102,"src":"4653:13:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20072,"name":"address","nodeType":"ElementaryTypeName","src":"4653:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4579:91:101"},"returnParameters":{"id":20075,"nodeType":"ParameterList","parameters":[],"src":"4680:0:101"},"scope":20211,"src":"4536:351:101","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20151,"nodeType":"Block","src":"5303:228:101","statements":[{"assignments":[20121],"declarations":[{"constant":false,"id":20121,"mutability":"mutable","name":"reserve","nameLocation":"5339:7:101","nodeType":"VariableDeclaration","scope":20151,"src":"5309:37:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20120,"nodeType":"UserDefinedTypeName","pathNode":{"id":20119,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"5309:21:101"},"referencedDeclaration":23909,"src":"5309:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":20125,"initialValue":{"baseExpression":{"id":20122,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20108,"src":"5349:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20124,"indexExpression":{"id":20123,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20114,"src":"5362:5:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5349:19:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"5309:59:101"},{"expression":{"arguments":[{"id":20129,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20112,"src":"5410:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":20130,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20121,"src":"5424:7:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":20131,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20114,"src":"5433:5:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20126,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"5374:15:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":20128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateDropReserve","nodeType":"MemberAccess","referencedDeclaration":23288,"src":"5374:35:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_ReserveData_$23909_storage_ptr_$_t_address_$returns$__$","typeString":"function (mapping(uint256 => address),struct DataTypes.ReserveData storage pointer,address) view"}},"id":20132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5374:65:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20133,"nodeType":"ExpressionStatement","src":"5374:65:101"},{"expression":{"id":20144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20134,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20112,"src":"5445:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20139,"indexExpression":{"expression":{"baseExpression":{"id":20135,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20108,"src":"5458:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20137,"indexExpression":{"id":20136,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20114,"src":"5471:5:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5458:19:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":20138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"5458:22:101","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5445:36:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":20142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5492:1:101","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":20141,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5484:7:101","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20140,"name":"address","nodeType":"ElementaryTypeName","src":"5484:7:101","typeDescriptions":{}}},"id":20143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5484:10:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5445:49:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20145,"nodeType":"ExpressionStatement","src":"5445:49:101"},{"expression":{"id":20149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5500:26:101","subExpression":{"baseExpression":{"id":20146,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20108,"src":"5507:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20148,"indexExpression":{"id":20147,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20114,"src":"5520:5:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5507:19:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20150,"nodeType":"ExpressionStatement","src":"5500:26:101"}]},"documentation":{"id":20103,"nodeType":"StructuredDocumentation","src":"4891:227:101","text":" @notice Drop a reserve\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param asset The address of the underlying asset of the reserve"},"functionSelector":"9cf57023","id":20152,"implemented":true,"kind":"function","modifiers":[],"name":"executeDropReserve","nameLocation":"5130:18:101","nodeType":"FunctionDefinition","parameters":{"id":20115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20108,"mutability":"mutable","name":"reservesData","nameLocation":"5204:12:101","nodeType":"VariableDeclaration","scope":20152,"src":"5154:62:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20107,"keyType":{"id":20104,"name":"address","nodeType":"ElementaryTypeName","src":"5162:7:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5154:41:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20106,"nodeType":"UserDefinedTypeName","pathNode":{"id":20105,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"5173:21:101"},"referencedDeclaration":23909,"src":"5173:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20112,"mutability":"mutable","name":"reservesList","nameLocation":"5258:12:101","nodeType":"VariableDeclaration","scope":20152,"src":"5222:48:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20111,"keyType":{"id":20109,"name":"uint256","nodeType":"ElementaryTypeName","src":"5230:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5222:27:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":20110,"name":"address","nodeType":"ElementaryTypeName","src":"5241:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":20114,"mutability":"mutable","name":"asset","nameLocation":"5284:5:101","nodeType":"VariableDeclaration","scope":20152,"src":"5276:13:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20113,"name":"address","nodeType":"ElementaryTypeName","src":"5276:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5148:145:101"},"returnParameters":{"id":20116,"nodeType":"ParameterList","parameters":[],"src":"5303:0:101"},"scope":20211,"src":"5121:410:101","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20209,"nodeType":"Block","src":"6921:359:101","statements":[{"expression":{"id":20198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":20185,"name":"totalCollateralBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20173,"src":"6935:19:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20186,"name":"totalDebtBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20175,"src":"6962:13:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20187,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20181,"src":"6983:3:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20188,"name":"currentLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20179,"src":"6994:27:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20189,"name":"healthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20183,"src":"7029:12:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":20190,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6927:122:101","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$__$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20193,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20158,"src":"7090:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":20194,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20162,"src":"7104:12:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":20195,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20167,"src":"7118:15:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":20196,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20170,"src":"7135:6:101","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":20191,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"7052:12:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$18449_$","typeString":"type(library GenericLogic)"}},"id":20192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateUserAccountData","nodeType":"MemberAccess","referencedDeclaration":18307,"src":"7052:37:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,bool)"}},"id":20197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7052:90:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"src":"6927:215:101","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20199,"nodeType":"ExpressionStatement","src":"6927:215:101"},{"expression":{"id":20207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20200,"name":"availableBorrowsBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20177,"src":"7149:20:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20203,"name":"totalCollateralBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20173,"src":"7218:19:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20204,"name":"totalDebtBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20175,"src":"7245:13:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20205,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20181,"src":"7266:3:101","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":20201,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"7172:12:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$18449_$","typeString":"type(library GenericLogic)"}},"id":20202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateAvailableBorrows","nodeType":"MemberAccess","referencedDeclaration":18342,"src":"7172:38:101","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7172:103:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7149:126:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20208,"nodeType":"ExpressionStatement","src":"7149:126:101"}]},"documentation":{"id":20153,"nodeType":"StructuredDocumentation","src":"5535:858:101","text":" @notice Returns the user account data across all the reserves\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param params Additional params needed for the calculation\n @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\n @return totalDebtBase The total debt of the user in the base currency used by the price feed\n @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\n @return currentLiquidationThreshold The liquidation threshold of the user\n @return ltv The loan to value of The user\n @return healthFactor The current health factor of the user"},"functionSelector":"26ec273f","id":20210,"implemented":true,"kind":"function","modifiers":[],"name":"executeGetUserAccountData","nameLocation":"6405:25:101","nodeType":"FunctionDefinition","parameters":{"id":20171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20158,"mutability":"mutable","name":"reservesData","nameLocation":"6486:12:101","nodeType":"VariableDeclaration","scope":20210,"src":"6436:62:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20157,"keyType":{"id":20154,"name":"address","nodeType":"ElementaryTypeName","src":"6444:7:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6436:41:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20156,"nodeType":"UserDefinedTypeName","pathNode":{"id":20155,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"6455:21:101"},"referencedDeclaration":23909,"src":"6455:21:101","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20162,"mutability":"mutable","name":"reservesList","nameLocation":"6540:12:101","nodeType":"VariableDeclaration","scope":20210,"src":"6504:48:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20161,"keyType":{"id":20159,"name":"uint256","nodeType":"ElementaryTypeName","src":"6512:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6504:27:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":20160,"name":"address","nodeType":"ElementaryTypeName","src":"6523:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":20167,"mutability":"mutable","name":"eModeCategories","nameLocation":"6608:15:101","nodeType":"VariableDeclaration","scope":20210,"src":"6558:65:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":20166,"keyType":{"id":20163,"name":"uint8","nodeType":"ElementaryTypeName","src":"6566:5:101","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"6558:41:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":20165,"nodeType":"UserDefinedTypeName","pathNode":{"id":20164,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"6575:23:101"},"referencedDeclaration":23927,"src":"6575:23:101","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":20170,"mutability":"mutable","name":"params","nameLocation":"6677:6:101","nodeType":"VariableDeclaration","scope":20210,"src":"6629:54:101","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams"},"typeName":{"id":20169,"nodeType":"UserDefinedTypeName","pathNode":{"id":20168,"name":"DataTypes.CalculateUserAccountDataParams","nodeType":"IdentifierPath","referencedDeclaration":24150,"src":"6629:40:101"},"referencedDeclaration":24150,"src":"6629:40:101","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_storage_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams"}},"visibility":"internal"}],"src":"6430:257:101"},"returnParameters":{"id":20184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20173,"mutability":"mutable","name":"totalCollateralBase","nameLocation":"6738:19:101","nodeType":"VariableDeclaration","scope":20210,"src":"6730:27:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20172,"name":"uint256","nodeType":"ElementaryTypeName","src":"6730:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20175,"mutability":"mutable","name":"totalDebtBase","nameLocation":"6773:13:101","nodeType":"VariableDeclaration","scope":20210,"src":"6765:21:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20174,"name":"uint256","nodeType":"ElementaryTypeName","src":"6765:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20177,"mutability":"mutable","name":"availableBorrowsBase","nameLocation":"6802:20:101","nodeType":"VariableDeclaration","scope":20210,"src":"6794:28:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20176,"name":"uint256","nodeType":"ElementaryTypeName","src":"6794:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20179,"mutability":"mutable","name":"currentLiquidationThreshold","nameLocation":"6838:27:101","nodeType":"VariableDeclaration","scope":20210,"src":"6830:35:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20178,"name":"uint256","nodeType":"ElementaryTypeName","src":"6830:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20181,"mutability":"mutable","name":"ltv","nameLocation":"6881:3:101","nodeType":"VariableDeclaration","scope":20210,"src":"6873:11:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20180,"name":"uint256","nodeType":"ElementaryTypeName","src":"6873:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20183,"mutability":"mutable","name":"healthFactor","nameLocation":"6900:12:101","nodeType":"VariableDeclaration","scope":20210,"src":"6892:20:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20182,"name":"uint256","nodeType":"ElementaryTypeName","src":"6892:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6722:196:101"},"scope":20211,"src":"6396:884:101","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":20212,"src":"863:6419:101","usedErrors":[]}],"src":"37:7246:101"},"id":101},"contracts/protocol/libraries/logic/ReserveLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","exportedSymbols":{"DataTypes":[24227],"Errors":[14819],"GPv2SafeERC20":[118],"IERC20":[1442],"IReserveInterestRateStrategy":[6126],"IStableDebtToken":[6340],"IVariableDebtToken":[6386],"MathUtils":[23692],"PercentageMath":[23726],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"SafeCast":[1966],"WadRayMath":[23813]},"id":20972,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":20213,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:102"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":20215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":1443,"src":"63:79:102","symbolAliases":[{"foreign":{"id":20214,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":20217,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":119,"src":"143:87:102","symbolAliases":[{"foreign":{"id":20216,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:13:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IStableDebtToken.sol","file":"../../../interfaces/IStableDebtToken.sol","id":20219,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":6341,"src":"231:74:102","symbolAliases":[{"foreign":{"id":20218,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:16:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IVariableDebtToken.sol","file":"../../../interfaces/IVariableDebtToken.sol","id":20221,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":6387,"src":"306:78:102","symbolAliases":[{"foreign":{"id":20220,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"314:18:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IReserveInterestRateStrategy.sol","file":"../../../interfaces/IReserveInterestRateStrategy.sol","id":20223,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":6127,"src":"385:98:102","symbolAliases":[{"foreign":{"id":20222,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"393:28:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":20225,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":14035,"src":"484:79:102","symbolAliases":[{"foreign":{"id":20224,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"492:20:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/MathUtils.sol","file":"../math/MathUtils.sol","id":20227,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":23693,"src":"564:48:102","symbolAliases":[{"foreign":{"id":20226,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"src":"572:9:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":20229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":23814,"src":"613:50:102","symbolAliases":[{"foreign":{"id":20228,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"621:10:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":20231,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":23727,"src":"664:58:102","symbolAliases":[{"foreign":{"id":20230,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"672:14:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":20233,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":14820,"src":"723:45:102","symbolAliases":[{"foreign":{"id":20232,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"731:6:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":20235,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":24228,"src":"769:49:102","symbolAliases":[{"foreign":{"id":20234,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"777:9:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":20237,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20972,"sourceUnit":1967,"src":"819:83:102","symbolAliases":[{"foreign":{"id":20236,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"827:8:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ReserveLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":20238,"nodeType":"StructuredDocumentation","src":"904:115:102","text":" @title ReserveLogic library\n @author Aave\n @notice Implements the logic to update the reserves state"},"fullyImplemented":true,"id":20971,"linearizedBaseContracts":[20971],"name":"ReserveLogic","nameLocation":"1028:12:102","nodeType":"ContractDefinition","nodes":[{"id":20241,"libraryName":{"id":20239,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1051:10:102"},"nodeType":"UsingForDirective","src":"1045:29:102","typeName":{"id":20240,"name":"uint256","nodeType":"ElementaryTypeName","src":"1066:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":20244,"libraryName":{"id":20242,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1083:14:102"},"nodeType":"UsingForDirective","src":"1077:33:102","typeName":{"id":20243,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":20247,"libraryName":{"id":20245,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1119:8:102"},"nodeType":"UsingForDirective","src":"1113:27:102","typeName":{"id":20246,"name":"uint256","nodeType":"ElementaryTypeName","src":"1132:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":20251,"libraryName":{"id":20248,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1149:13:102"},"nodeType":"UsingForDirective","src":"1143:31:102","typeName":{"id":20250,"nodeType":"UserDefinedTypeName","pathNode":{"id":20249,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1167:6:102"},"referencedDeclaration":1442,"src":"1167:6:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":20255,"libraryName":{"id":20252,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1183:12:102"},"nodeType":"UsingForDirective","src":"1177:45:102","typeName":{"id":20254,"nodeType":"UserDefinedTypeName","pathNode":{"id":20253,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1200:21:102"},"referencedDeclaration":23909,"src":"1200:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":20259,"libraryName":{"id":20256,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1231:20:102"},"nodeType":"UsingForDirective","src":"1225:65:102","typeName":{"id":20258,"nodeType":"UserDefinedTypeName","pathNode":{"id":20257,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1256:33:102"},"referencedDeclaration":23912,"src":"1256:33:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"anonymous":false,"id":20273,"name":"ReserveDataUpdated","nameLocation":"1334:18:102","nodeType":"EventDefinition","parameters":{"id":20272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20261,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1374:7:102","nodeType":"VariableDeclaration","scope":20273,"src":"1358:23:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20260,"name":"address","nodeType":"ElementaryTypeName","src":"1358:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20263,"indexed":false,"mutability":"mutable","name":"liquidityRate","nameLocation":"1395:13:102","nodeType":"VariableDeclaration","scope":20273,"src":"1387:21:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20262,"name":"uint256","nodeType":"ElementaryTypeName","src":"1387:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20265,"indexed":false,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"1422:16:102","nodeType":"VariableDeclaration","scope":20273,"src":"1414:24:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20264,"name":"uint256","nodeType":"ElementaryTypeName","src":"1414:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20267,"indexed":false,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"1452:18:102","nodeType":"VariableDeclaration","scope":20273,"src":"1444:26:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20266,"name":"uint256","nodeType":"ElementaryTypeName","src":"1444:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20269,"indexed":false,"mutability":"mutable","name":"liquidityIndex","nameLocation":"1484:14:102","nodeType":"VariableDeclaration","scope":20273,"src":"1476:22:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20268,"name":"uint256","nodeType":"ElementaryTypeName","src":"1476:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20271,"indexed":false,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"1512:19:102","nodeType":"VariableDeclaration","scope":20273,"src":"1504:27:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20270,"name":"uint256","nodeType":"ElementaryTypeName","src":"1504:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1352:183:102"},"src":"1328:208:102"},{"body":{"id":20308,"nodeType":"Block","src":"2003:420:102","statements":[{"assignments":[20283],"declarations":[{"constant":false,"id":20283,"mutability":"mutable","name":"timestamp","nameLocation":"2016:9:102","nodeType":"VariableDeclaration","scope":20308,"src":"2009:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":20282,"name":"uint40","nodeType":"ElementaryTypeName","src":"2009:6:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"id":20286,"initialValue":{"expression":{"id":20284,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20277,"src":"2028:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20285,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23892,"src":"2028:27:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"VariableDeclarationStatement","src":"2009:46:102"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20287,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20283,"src":"2097:9:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20288,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2110:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":20289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"2110:15:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2097:28:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20306,"nodeType":"Block","src":"2264:155:102","statements":[{"expression":{"arguments":[{"expression":{"id":20302,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20277,"src":"2380:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23882,"src":"2380:22:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":20297,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20277,"src":"2321:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20298,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23884,"src":"2321:28:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":20299,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20283,"src":"2351:9:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":20295,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23692,"src":"2287:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$23692_$","typeString":"type(library MathUtils)"}},"id":20296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateLinearInterest","nodeType":"MemberAccess","referencedDeclaration":23550,"src":"2287:33:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":20300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2287:74:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"2287:81:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2287:125:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20281,"id":20305,"nodeType":"Return","src":"2272:140:102"}]},"id":20307,"nodeType":"IfStatement","src":"2093:326:102","trueBody":{"id":20294,"nodeType":"Block","src":"2127:131:102","statements":[{"expression":{"expression":{"id":20291,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20277,"src":"2229:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23882,"src":"2229:22:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":20281,"id":20293,"nodeType":"Return","src":"2222:29:102"}]}}]},"documentation":{"id":20274,"nodeType":"StructuredDocumentation","src":"1540:352:102","text":" @notice Returns the ongoing normalized income for the reserve.\n @dev A value of 1e27 means there is no income. As time passes, the income is accrued\n @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\n @param reserve The reserve object\n @return The normalized income, expressed in ray"},"id":20309,"implemented":true,"kind":"function","modifiers":[],"name":"getNormalizedIncome","nameLocation":"1904:19:102","nodeType":"FunctionDefinition","parameters":{"id":20278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20277,"mutability":"mutable","name":"reserve","nameLocation":"1959:7:102","nodeType":"VariableDeclaration","scope":20309,"src":"1929:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20276,"nodeType":"UserDefinedTypeName","pathNode":{"id":20275,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1929:21:102"},"referencedDeclaration":23909,"src":"1929:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"1923:47:102"},"returnParameters":{"id":20281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20309,"src":"1994:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20279,"name":"uint256","nodeType":"ElementaryTypeName","src":"1994:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1993:9:102"},"scope":20971,"src":"1895:528:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20344,"nodeType":"Block","src":"2915:439:102","statements":[{"assignments":[20319],"declarations":[{"constant":false,"id":20319,"mutability":"mutable","name":"timestamp","nameLocation":"2928:9:102","nodeType":"VariableDeclaration","scope":20344,"src":"2921:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":20318,"name":"uint40","nodeType":"ElementaryTypeName","src":"2921:6:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"id":20322,"initialValue":{"expression":{"id":20320,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20313,"src":"2940:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23892,"src":"2940:27:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"VariableDeclarationStatement","src":"2921:46:102"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20323,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20319,"src":"3009:9:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20324,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3022:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":20325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"3022:15:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3009:28:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20342,"nodeType":"Block","src":"3181:169:102","statements":[{"expression":{"arguments":[{"expression":{"id":20338,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20313,"src":"3306:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23886,"src":"3306:27:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":20333,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20313,"src":"3242:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23888,"src":"3242:33:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":20335,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20319,"src":"3277:9:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":20331,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23692,"src":"3204:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$23692_$","typeString":"type(library MathUtils)"}},"id":20332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":23691,"src":"3204:37:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":20336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3204:83:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"3204:90:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3204:139:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20317,"id":20341,"nodeType":"Return","src":"3189:154:102"}]},"id":20343,"nodeType":"IfStatement","src":"3005:345:102","trueBody":{"id":20330,"nodeType":"Block","src":"3039:136:102","statements":[{"expression":{"expression":{"id":20327,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20313,"src":"3141:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20328,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23886,"src":"3141:27:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":20317,"id":20329,"nodeType":"Return","src":"3134:34:102"}]}}]},"documentation":{"id":20310,"nodeType":"StructuredDocumentation","src":"2427:379:102","text":" @notice Returns the ongoing normalized variable debt for the reserve.\n @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\n @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\n @param reserve The reserve object\n @return The normalized variable debt, expressed in ray"},"id":20345,"implemented":true,"kind":"function","modifiers":[],"name":"getNormalizedDebt","nameLocation":"2818:17:102","nodeType":"FunctionDefinition","parameters":{"id":20314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20313,"mutability":"mutable","name":"reserve","nameLocation":"2871:7:102","nodeType":"VariableDeclaration","scope":20345,"src":"2841:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20312,"nodeType":"UserDefinedTypeName","pathNode":{"id":20311,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2841:21:102"},"referencedDeclaration":23909,"src":"2841:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"2835:47:102"},"returnParameters":{"id":20317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20345,"src":"2906:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20315,"name":"uint256","nodeType":"ElementaryTypeName","src":"2906:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2905:9:102"},"scope":20971,"src":"2809:545:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20386,"nodeType":"Block","src":"3681:377:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint40","typeString":"uint40"},"id":20362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20355,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20349,"src":"3796:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20356,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23892,"src":"3796:27:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"expression":{"id":20359,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3834:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":20360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"3834:15:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3827:6:102","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":20357,"name":"uint40","nodeType":"ElementaryTypeName","src":"3827:6:102","typeDescriptions":{}}},"id":20361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3827:23:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"3796:54:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20365,"nodeType":"IfStatement","src":"3792:81:102","trueBody":{"id":20364,"nodeType":"Block","src":"3852:21:102","statements":[{"functionReturnParameters":20354,"id":20363,"nodeType":"Return","src":"3860:7:102"}]}},{"expression":{"arguments":[{"id":20367,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20349,"src":"3894:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":20368,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20352,"src":"3903:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"id":20366,"name":"_updateIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20827,"src":"3879:14:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":20369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3879:37:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20370,"nodeType":"ExpressionStatement","src":"3879:37:102"},{"expression":{"arguments":[{"id":20372,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20349,"src":"3940:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":20373,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20352,"src":"3949:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"id":20371,"name":"_accrueToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20746,"src":"3922:17:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":20374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3922:40:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20375,"nodeType":"ExpressionStatement","src":"3922:40:102"},{"expression":{"id":20384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20376,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20349,"src":"4000:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23892,"src":"4000:27:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20381,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4037:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":20382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"4037:15:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4030:6:102","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":20379,"name":"uint40","nodeType":"ElementaryTypeName","src":"4030:6:102","typeDescriptions":{}}},"id":20383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4030:23:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"4000:53:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":20385,"nodeType":"ExpressionStatement","src":"4000:53:102"}]},"documentation":{"id":20346,"nodeType":"StructuredDocumentation","src":"3358:195:102","text":" @notice Updates the liquidity cumulative index and the variable borrow index.\n @param reserve The reserve object\n @param reserveCache The caching layer for the reserve data"},"id":20387,"implemented":true,"kind":"function","modifiers":[],"name":"updateState","nameLocation":"3565:11:102","nodeType":"FunctionDefinition","parameters":{"id":20353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20349,"mutability":"mutable","name":"reserve","nameLocation":"3612:7:102","nodeType":"VariableDeclaration","scope":20387,"src":"3582:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20348,"nodeType":"UserDefinedTypeName","pathNode":{"id":20347,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"3582:21:102"},"referencedDeclaration":23909,"src":"3582:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20352,"mutability":"mutable","name":"reserveCache","nameLocation":"3655:12:102","nodeType":"VariableDeclaration","scope":20387,"src":"3625:42:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":20351,"nodeType":"UserDefinedTypeName","pathNode":{"id":20350,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"3625:22:102"},"referencedDeclaration":23973,"src":"3625:22:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"3576:95:102"},"returnParameters":{"id":20354,"nodeType":"ParameterList","parameters":[],"src":"3681:0:102"},"scope":20971,"src":"3556:502:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20429,"nodeType":"Block","src":"4652:378:102","statements":[{"assignments":[20401],"declarations":[{"constant":false,"id":20401,"mutability":"mutable","name":"result","nameLocation":"4835:6:102","nodeType":"VariableDeclaration","scope":20429,"src":"4827:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20400,"name":"uint256","nodeType":"ElementaryTypeName","src":"4827:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20418,"initialValue":{"arguments":[{"expression":{"id":20415,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20391,"src":"4929:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23882,"src":"4929:22:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20406,"name":"totalLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20393,"src":"4870:14:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"4870:23:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":20408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4870:25:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20402,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20395,"src":"4845:6:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"4845:15:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":20404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4845:17:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"4845:24:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4845:51:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":20410,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"4899:10:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":20411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"4899:14:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4845:68:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20413,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4844:70:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"4844:77:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4844:113:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4827:130:102"},{"expression":{"id":20425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20419,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20391,"src":"4963:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20421,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23882,"src":"4963:22:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20422,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20401,"src":"4988:6:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"4988:16:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":20424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4988:18:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4963:43:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20426,"nodeType":"ExpressionStatement","src":"4963:43:102"},{"expression":{"id":20427,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20401,"src":"5019:6:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20399,"id":20428,"nodeType":"Return","src":"5012:13:102"}]},"documentation":{"id":20388,"nodeType":"StructuredDocumentation","src":"4062:431:102","text":" @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\n to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\n @param reserve The reserve object\n @param totalLiquidity The total liquidity available in the reserve\n @param amount The amount to accumulate\n @return The next liquidity index of the reserve"},"id":20430,"implemented":true,"kind":"function","modifiers":[],"name":"cumulateToLiquidityIndex","nameLocation":"4505:24:102","nodeType":"FunctionDefinition","parameters":{"id":20396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20391,"mutability":"mutable","name":"reserve","nameLocation":"4565:7:102","nodeType":"VariableDeclaration","scope":20430,"src":"4535:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20390,"nodeType":"UserDefinedTypeName","pathNode":{"id":20389,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4535:21:102"},"referencedDeclaration":23909,"src":"4535:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20393,"mutability":"mutable","name":"totalLiquidity","nameLocation":"4586:14:102","nodeType":"VariableDeclaration","scope":20430,"src":"4578:22:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20392,"name":"uint256","nodeType":"ElementaryTypeName","src":"4578:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20395,"mutability":"mutable","name":"amount","nameLocation":"4614:6:102","nodeType":"VariableDeclaration","scope":20430,"src":"4606:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20394,"name":"uint256","nodeType":"ElementaryTypeName","src":"4606:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4529:95:102"},"returnParameters":{"id":20399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20430,"src":"4643:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20397,"name":"uint256","nodeType":"ElementaryTypeName","src":"4643:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4642:9:102"},"scope":20971,"src":"4496:534:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20501,"nodeType":"Block","src":"5681:445:102","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20446,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20434,"src":"5695:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"5695:21:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5728:1:102","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":20449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5720:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20448,"name":"address","nodeType":"ElementaryTypeName","src":"5720:7:102","typeDescriptions":{}}},"id":20451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5720:10:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5695:35:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20453,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5732:6:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":20454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_ALREADY_INITIALIZED","nodeType":"MemberAccess","referencedDeclaration":14728,"src":"5732:34:102","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20445,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5687:7:102","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5687:80:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20456,"nodeType":"ExpressionStatement","src":"5687:80:102"},{"expression":{"id":20465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20457,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20434,"src":"5774:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23882,"src":"5774:22:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20462,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"5807:10:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":20463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"5807:14:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5799:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":20460,"name":"uint128","nodeType":"ElementaryTypeName","src":"5799:7:102","typeDescriptions":{}}},"id":20464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5799:23:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5774:48:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20466,"nodeType":"ExpressionStatement","src":"5774:48:102"},{"expression":{"id":20475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20467,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20434,"src":"5828:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23886,"src":"5828:27:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20472,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"5866:10:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":20473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"5866:14:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5858:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":20470,"name":"uint128","nodeType":"ElementaryTypeName","src":"5858:7:102","typeDescriptions":{}}},"id":20474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5858:23:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5828:53:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20476,"nodeType":"ExpressionStatement","src":"5828:53:102"},{"expression":{"id":20481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20477,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20434,"src":"5887:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20479,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"5887:21:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20480,"name":"aTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20436,"src":"5911:13:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5887:37:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20482,"nodeType":"ExpressionStatement","src":"5887:37:102"},{"expression":{"id":20487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20483,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20434,"src":"5930:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"5930:30:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20486,"name":"stableDebtTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20438,"src":"5963:22:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5930:55:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20488,"nodeType":"ExpressionStatement","src":"5930:55:102"},{"expression":{"id":20493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20489,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20434,"src":"5991:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20491,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"5991:32:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20492,"name":"variableDebtTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"6026:24:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5991:59:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20494,"nodeType":"ExpressionStatement","src":"5991:59:102"},{"expression":{"id":20499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20495,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20434,"src":"6056:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20497,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":23902,"src":"6056:35:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20498,"name":"interestRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20442,"src":"6094:27:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6056:65:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20500,"nodeType":"ExpressionStatement","src":"6056:65:102"}]},"documentation":{"id":20431,"nodeType":"StructuredDocumentation","src":"5034:432:102","text":" @notice Initializes a reserve.\n @param reserve The reserve object\n @param aTokenAddress The address of the overlying atoken contract\n @param stableDebtTokenAddress The address of the overlying stable debt token contract\n @param variableDebtTokenAddress The address of the overlying variable debt token contract\n @param interestRateStrategyAddress The address of the interest rate strategy contract"},"id":20502,"implemented":true,"kind":"function","modifiers":[],"name":"init","nameLocation":"5478:4:102","nodeType":"FunctionDefinition","parameters":{"id":20443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20434,"mutability":"mutable","name":"reserve","nameLocation":"5518:7:102","nodeType":"VariableDeclaration","scope":20502,"src":"5488:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20433,"nodeType":"UserDefinedTypeName","pathNode":{"id":20432,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"5488:21:102"},"referencedDeclaration":23909,"src":"5488:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20436,"mutability":"mutable","name":"aTokenAddress","nameLocation":"5539:13:102","nodeType":"VariableDeclaration","scope":20502,"src":"5531:21:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20435,"name":"address","nodeType":"ElementaryTypeName","src":"5531:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20438,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"5566:22:102","nodeType":"VariableDeclaration","scope":20502,"src":"5558:30:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20437,"name":"address","nodeType":"ElementaryTypeName","src":"5558:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20440,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"5602:24:102","nodeType":"VariableDeclaration","scope":20502,"src":"5594:32:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20439,"name":"address","nodeType":"ElementaryTypeName","src":"5594:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20442,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"5640:27:102","nodeType":"VariableDeclaration","scope":20502,"src":"5632:35:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20441,"name":"address","nodeType":"ElementaryTypeName","src":"5632:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5482:189:102"},"returnParameters":{"id":20444,"nodeType":"ParameterList","parameters":[],"src":"5681:0:102"},"scope":20971,"src":"5469:657:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"canonicalName":"ReserveLogic.UpdateInterestRatesLocalVars","id":20511,"members":[{"constant":false,"id":20504,"mutability":"mutable","name":"nextLiquidityRate","nameLocation":"6180:17:102","nodeType":"VariableDeclaration","scope":20511,"src":"6172:25:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20503,"name":"uint256","nodeType":"ElementaryTypeName","src":"6172:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20506,"mutability":"mutable","name":"nextStableRate","nameLocation":"6211:14:102","nodeType":"VariableDeclaration","scope":20511,"src":"6203:22:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20505,"name":"uint256","nodeType":"ElementaryTypeName","src":"6203:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20508,"mutability":"mutable","name":"nextVariableRate","nameLocation":"6239:16:102","nodeType":"VariableDeclaration","scope":20511,"src":"6231:24:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20507,"name":"uint256","nodeType":"ElementaryTypeName","src":"6231:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20510,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"6269:17:102","nodeType":"VariableDeclaration","scope":20511,"src":"6261:25:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20509,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"UpdateInterestRatesLocalVars","nameLocation":"6137:28:102","nodeType":"StructDefinition","scope":20971,"src":"6130:161:102","visibility":"public"},{"body":{"id":20617,"nodeType":"Block","src":"7044:1297:102","statements":[{"assignments":[20529],"declarations":[{"constant":false,"id":20529,"mutability":"mutable","name":"vars","nameLocation":"7086:4:102","nodeType":"VariableDeclaration","scope":20617,"src":"7050:40:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars"},"typeName":{"id":20528,"nodeType":"UserDefinedTypeName","pathNode":{"id":20527,"name":"UpdateInterestRatesLocalVars","nodeType":"IdentifierPath","referencedDeclaration":20511,"src":"7050:28:102"},"referencedDeclaration":20511,"src":"7050:28:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_storage_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars"}},"visibility":"internal"}],"id":20530,"nodeType":"VariableDeclarationStatement","src":"7050:40:102"},{"expression":{"id":20540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20531,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"7097:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":20510,"src":"7097:22:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20537,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"7172:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"7172:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20534,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"7122:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23935,"src":"7122:35:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"7122:42:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7122:92:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7097:117:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20541,"nodeType":"ExpressionStatement","src":"7097:117:102"},{"expression":{"id":20574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":20542,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"7229:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":20504,"src":"7229:22:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20545,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"7259:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20546,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":20506,"src":"7259:19:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20547,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"7286:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20548,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextVariableRate","nodeType":"MemberAccess","referencedDeclaration":20508,"src":"7286:21:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20549,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"7221:92:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":20557,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20515,"src":"7471:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":23906,"src":"7471:16:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":20559,"name":"liquidityAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20522,"src":"7513:14:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20560,"name":"liquidityTaken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20524,"src":"7553:14:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20561,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"7594:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20562,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23945,"src":"7594:32:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20563,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"7655:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":20510,"src":"7655:22:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20565,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"7712:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20566,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23943,"src":"7712:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20567,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"7773:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":23959,"src":"7773:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20569,"name":"reserveAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20520,"src":"7818:14:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":20570,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"7850:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20571,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"7850:26:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"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"}],"expression":{"id":20555,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"7412:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":20556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateInterestRatesParams","nodeType":"MemberAccess","referencedDeclaration":24211,"src":"7412:38:102","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateInterestRatesParams_$24211_storage_ptr_$","typeString":"type(struct DataTypes.CalculateInterestRatesParams storage pointer)"}},"id":20572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["unbacked","liquidityAdded","liquidityTaken","totalStableDebt","totalVariableDebt","averageStableBorrowRate","reserveFactor","reserve","aToken"],"nodeType":"FunctionCall","src":"7412:473:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}],"expression":{"arguments":[{"expression":{"id":20551,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20515,"src":"7345:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20552,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":23902,"src":"7345:35:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20550,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6126,"src":"7316:28:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IReserveInterestRateStrategy_$6126_$","typeString":"type(contract IReserveInterestRateStrategy)"}},"id":20553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7316:65:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IReserveInterestRateStrategy_$6126","typeString":"contract IReserveInterestRateStrategy"}},"id":20554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateInterestRates","nodeType":"MemberAccess","referencedDeclaration":6125,"src":"7316:88:102","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.CalculateInterestRatesParams memory) view external returns (uint256,uint256,uint256)"}},"id":20573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7316:575:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"7221:670:102","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20575,"nodeType":"ExpressionStatement","src":"7221:670:102"},{"expression":{"id":20583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20576,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20515,"src":"7898:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23884,"src":"7898:28:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20579,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"7929:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20580,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":20504,"src":"7929:22:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"7929:32:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":20582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7929:34:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7898:65:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20584,"nodeType":"ExpressionStatement","src":"7898:65:102"},{"expression":{"id":20592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20585,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20515,"src":"7969:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23890,"src":"7969:31:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20588,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"8003:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20589,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":20506,"src":"8003:19:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"8003:29:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":20591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8003:31:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7969:65:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20593,"nodeType":"ExpressionStatement","src":"7969:65:102"},{"expression":{"id":20601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20594,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20515,"src":"8040:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20596,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23888,"src":"8040:33:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20597,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"8076:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableRate","nodeType":"MemberAccess","referencedDeclaration":20508,"src":"8076:21:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"8076:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":20600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8076:33:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8040:69:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20602,"nodeType":"ExpressionStatement","src":"8040:69:102"},{"eventCall":{"arguments":[{"id":20604,"name":"reserveAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20520,"src":"8147:14:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":20605,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"8169:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":20504,"src":"8169:22:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20607,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"8199:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":20506,"src":"8199:19:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20609,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20529,"src":"8226:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$20511_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":20610,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableRate","nodeType":"MemberAccess","referencedDeclaration":20508,"src":"8226:21:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20611,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"8255:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20612,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"8255:31:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20613,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"8294:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"8294:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"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"}],"id":20603,"name":"ReserveDataUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20273,"src":"8121:18:102","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256,uint256,uint256)"}},"id":20615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8121:215:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20616,"nodeType":"EmitStatement","src":"8116:220:102"}]},"documentation":{"id":20512,"nodeType":"StructuredDocumentation","src":"6295:529:102","text":" @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\n @param reserve The reserve reserve to be updated\n @param reserveCache The caching layer for the reserve data\n @param reserveAddress The address of the reserve to be updated\n @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\n @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)"},"id":20618,"implemented":true,"kind":"function","modifiers":[],"name":"updateInterestRates","nameLocation":"6836:19:102","nodeType":"FunctionDefinition","parameters":{"id":20525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20515,"mutability":"mutable","name":"reserve","nameLocation":"6891:7:102","nodeType":"VariableDeclaration","scope":20618,"src":"6861:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20514,"nodeType":"UserDefinedTypeName","pathNode":{"id":20513,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"6861:21:102"},"referencedDeclaration":23909,"src":"6861:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20518,"mutability":"mutable","name":"reserveCache","nameLocation":"6934:12:102","nodeType":"VariableDeclaration","scope":20618,"src":"6904:42:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":20517,"nodeType":"UserDefinedTypeName","pathNode":{"id":20516,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"6904:22:102"},"referencedDeclaration":23973,"src":"6904:22:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":20520,"mutability":"mutable","name":"reserveAddress","nameLocation":"6960:14:102","nodeType":"VariableDeclaration","scope":20618,"src":"6952:22:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20519,"name":"address","nodeType":"ElementaryTypeName","src":"6952:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20522,"mutability":"mutable","name":"liquidityAdded","nameLocation":"6988:14:102","nodeType":"VariableDeclaration","scope":20618,"src":"6980:22:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20521,"name":"uint256","nodeType":"ElementaryTypeName","src":"6980:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20524,"mutability":"mutable","name":"liquidityTaken","nameLocation":"7016:14:102","nodeType":"VariableDeclaration","scope":20618,"src":"7008:22:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20523,"name":"uint256","nodeType":"ElementaryTypeName","src":"7008:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6855:179:102"},"returnParameters":{"id":20526,"nodeType":"ParameterList","parameters":[],"src":"7044:0:102"},"scope":20971,"src":"6827:1514:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"canonicalName":"ReserveLogic.AccrueToTreasuryLocalVars","id":20631,"members":[{"constant":false,"id":20620,"mutability":"mutable","name":"prevTotalStableDebt","nameLocation":"8392:19:102","nodeType":"VariableDeclaration","scope":20631,"src":"8384:27:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20619,"name":"uint256","nodeType":"ElementaryTypeName","src":"8384:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20622,"mutability":"mutable","name":"prevTotalVariableDebt","nameLocation":"8425:21:102","nodeType":"VariableDeclaration","scope":20631,"src":"8417:29:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20621,"name":"uint256","nodeType":"ElementaryTypeName","src":"8417:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20624,"mutability":"mutable","name":"currTotalVariableDebt","nameLocation":"8460:21:102","nodeType":"VariableDeclaration","scope":20631,"src":"8452:29:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20623,"name":"uint256","nodeType":"ElementaryTypeName","src":"8452:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20626,"mutability":"mutable","name":"cumulatedStableInterest","nameLocation":"8495:23:102","nodeType":"VariableDeclaration","scope":20631,"src":"8487:31:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20625,"name":"uint256","nodeType":"ElementaryTypeName","src":"8487:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20628,"mutability":"mutable","name":"totalDebtAccrued","nameLocation":"8532:16:102","nodeType":"VariableDeclaration","scope":20631,"src":"8524:24:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20627,"name":"uint256","nodeType":"ElementaryTypeName","src":"8524:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20630,"mutability":"mutable","name":"amountToMint","nameLocation":"8562:12:102","nodeType":"VariableDeclaration","scope":20631,"src":"8554:20:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20629,"name":"uint256","nodeType":"ElementaryTypeName","src":"8554:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"AccrueToTreasuryLocalVars","nameLocation":"8352:25:102","nodeType":"StructDefinition","scope":20971,"src":"8345:234:102","visibility":"public"},{"body":{"id":20745,"nodeType":"Block","src":"8972:1467:102","statements":[{"assignments":[20643],"declarations":[{"constant":false,"id":20643,"mutability":"mutable","name":"vars","nameLocation":"9011:4:102","nodeType":"VariableDeclaration","scope":20745,"src":"8978:37:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars"},"typeName":{"id":20642,"nodeType":"UserDefinedTypeName","pathNode":{"id":20641,"name":"AccrueToTreasuryLocalVars","nodeType":"IdentifierPath","referencedDeclaration":20631,"src":"8978:25:102"},"referencedDeclaration":20631,"src":"8978:25:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_storage_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars"}},"visibility":"internal"}],"id":20644,"nodeType":"VariableDeclarationStatement","src":"8978:37:102"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20645,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9026:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":23959,"src":"9026:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9056:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9026:31:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20651,"nodeType":"IfStatement","src":"9022:58:102","trueBody":{"id":20650,"nodeType":"Block","src":"9059:21:102","statements":[{"functionReturnParameters":20640,"id":20649,"nodeType":"Return","src":"9067:7:102"}]}},{"expression":{"id":20661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20652,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"9160:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"prevTotalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":20622,"src":"9160:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20658,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9239:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23951,"src":"9239:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20655,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9189:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20656,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23933,"src":"9189:35:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"9189:42:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9189:92:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9160:121:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20662,"nodeType":"ExpressionStatement","src":"9160:121:102"},{"expression":{"id":20672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20663,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"9380:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currTotalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":20624,"src":"9380:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20669,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9459:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"9459:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20666,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9409:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23933,"src":"9409:35:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"9409:42:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9409:92:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9380:121:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20673,"nodeType":"ExpressionStatement","src":"9380:121:102"},{"expression":{"id":20686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20674,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"9572:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20676,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"cumulatedStableInterest","nodeType":"MemberAccess","referencedDeclaration":20626,"src":"9572:28:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20679,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9648:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23939,"src":"9648:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20681,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9692:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23972,"src":"9692:42:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"expression":{"id":20683,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9742:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20684,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23970,"src":"9742:39:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":20677,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23692,"src":"9603:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$23692_$","typeString":"type(library MathUtils)"}},"id":20678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":23673,"src":"9603:37:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint40_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint40,uint256) pure returns (uint256)"}},"id":20685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9603:184:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9572:215:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20687,"nodeType":"ExpressionStatement","src":"9572:215:102"},{"expression":{"id":20697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20688,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"9794:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20690,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"prevTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":20620,"src":"9794:24:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20694,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"9872:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cumulatedStableInterest","nodeType":"MemberAccess","referencedDeclaration":20626,"src":"9872:28:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20691,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"9821:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currPrincipalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23937,"src":"9821:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"9821:43:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9821:85:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9794:112:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20698,"nodeType":"ExpressionStatement","src":"9794:112:102"},{"expression":{"id":20713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20699,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"10008:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalDebtAccrued","nodeType":"MemberAccess","referencedDeclaration":20628,"src":"10008:21:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20702,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"10038:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currTotalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":20624,"src":"10038:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":20704,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"10073:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23941,"src":"10073:32:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10038:67:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":20707,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"10114:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prevTotalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":20622,"src":"10114:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10038:102:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":20710,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"10149:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prevTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":20620,"src":"10149:24:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10038:135:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10008:165:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20714,"nodeType":"ExpressionStatement","src":"10008:165:102"},{"expression":{"id":20724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20715,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"10180:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amountToMint","nodeType":"MemberAccess","referencedDeclaration":20630,"src":"10180:17:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20721,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"10233:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20722,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":23959,"src":"10233:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20718,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"10200:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebtAccrued","nodeType":"MemberAccess","referencedDeclaration":20628,"src":"10200:21:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"10200:32:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10200:60:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10180:80:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20725,"nodeType":"ExpressionStatement","src":"10180:80:102"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20726,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"10271:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountToMint","nodeType":"MemberAccess","referencedDeclaration":20630,"src":"10271:17:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10292:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10271:22:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20744,"nodeType":"IfStatement","src":"10267:168:102","trueBody":{"id":20743,"nodeType":"Block","src":"10295:140:102","statements":[{"expression":{"id":20741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20730,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20635,"src":"10303:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"10303:25:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20736,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"10375:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20737,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"10375:31:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20733,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"10332:4:102","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$20631_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":20734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountToMint","nodeType":"MemberAccess","referencedDeclaration":20630,"src":"10332:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"10332:42:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10332:75:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"10332:94:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":20740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10332:96:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"10303:125:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20742,"nodeType":"ExpressionStatement","src":"10303:125:102"}]}}]},"documentation":{"id":20632,"nodeType":"StructuredDocumentation","src":"8583:255:102","text":" @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\n specific asset.\n @param reserve The reserve to be updated\n @param reserveCache The caching layer for the reserve data"},"id":20746,"implemented":true,"kind":"function","modifiers":[],"name":"_accrueToTreasury","nameLocation":"8850:17:102","nodeType":"FunctionDefinition","parameters":{"id":20639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20635,"mutability":"mutable","name":"reserve","nameLocation":"8903:7:102","nodeType":"VariableDeclaration","scope":20746,"src":"8873:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20634,"nodeType":"UserDefinedTypeName","pathNode":{"id":20633,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"8873:21:102"},"referencedDeclaration":23909,"src":"8873:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20638,"mutability":"mutable","name":"reserveCache","nameLocation":"8946:12:102","nodeType":"VariableDeclaration","scope":20746,"src":"8916:42:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":20637,"nodeType":"UserDefinedTypeName","pathNode":{"id":20636,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"8916:22:102"},"referencedDeclaration":23973,"src":"8916:22:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"8867:95:102"},"returnParameters":{"id":20640,"nodeType":"ParameterList","parameters":[],"src":"8972:0:102"},"scope":20971,"src":"8841:1598:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20826,"nodeType":"Block","src":"10785:1414:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20756,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11008:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23955,"src":"11008:30:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11042:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11008:35:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20790,"nodeType":"IfStatement","src":"11004:423:102","trueBody":{"id":20789,"nodeType":"Block","src":"11045:382:102","statements":[{"assignments":[20761],"declarations":[{"constant":false,"id":20761,"mutability":"mutable","name":"cumulatedLiquidityInterest","nameLocation":"11061:26:102","nodeType":"VariableDeclaration","scope":20789,"src":"11053:34:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20760,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20769,"initialValue":{"arguments":[{"expression":{"id":20764,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11133:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23955,"src":"11133:30:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20766,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11173:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23970,"src":"11173:39:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":20762,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23692,"src":"11090:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$23692_$","typeString":"type(library MathUtils)"}},"id":20763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateLinearInterest","nodeType":"MemberAccess","referencedDeclaration":23550,"src":"11090:33:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":20768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11090:130:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11053:167:102"},{"expression":{"id":20778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20770,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11228:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"11228:31:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20775,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11305:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20776,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23947,"src":"11305:31:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20773,"name":"cumulatedLiquidityInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20761,"src":"11262:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"11262:33:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11262:82:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11228:116:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20779,"nodeType":"ExpressionStatement","src":"11228:116:102"},{"expression":{"id":20787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20780,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20750,"src":"11352:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23882,"src":"11352:22:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20783,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11377:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20784,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"11377:31:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"11377:41:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":20786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11377:43:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11352:68:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20788,"nodeType":"ExpressionStatement","src":"11352:68:102"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20791,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11732:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23933,"src":"11732:35:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11771:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11732:40:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20825,"nodeType":"IfStatement","src":"11728:467:102","trueBody":{"id":20824,"nodeType":"Block","src":"11774:421:102","statements":[{"assignments":[20796],"declarations":[{"constant":false,"id":20796,"mutability":"mutable","name":"cumulatedVariableBorrowInterest","nameLocation":"11790:31:102","nodeType":"VariableDeclaration","scope":20824,"src":"11782:39:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20795,"name":"uint256","nodeType":"ElementaryTypeName","src":"11782:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20804,"initialValue":{"arguments":[{"expression":{"id":20799,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11871:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23957,"src":"11871:35:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20801,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11916:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20802,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23970,"src":"11916:39:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":20797,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23692,"src":"11824:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$23692_$","typeString":"type(library MathUtils)"}},"id":20798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":23691,"src":"11824:37:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":20803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11824:139:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11782:181:102"},{"expression":{"id":20813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20805,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"11971:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"11971:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20810,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"12058:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23951,"src":"12058:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20808,"name":"cumulatedVariableBorrowInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20796,"src":"12010:31:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"12010:38:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12010:92:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11971:131:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20814,"nodeType":"ExpressionStatement","src":"11971:131:102"},{"expression":{"id":20822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20815,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20750,"src":"12110:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20817,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23886,"src":"12110:27:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20818,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"12140:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20819,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"12140:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"12140:46:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":20821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12140:48:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"12110:78:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":20823,"nodeType":"ExpressionStatement","src":"12110:78:102"}]}}]},"documentation":{"id":20747,"nodeType":"StructuredDocumentation","src":"10443:211:102","text":" @notice Updates the reserve indexes and the timestamp of the update.\n @param reserve The reserve reserve to be updated\n @param reserveCache The cache layer holding the cached protocol data"},"id":20827,"implemented":true,"kind":"function","modifiers":[],"name":"_updateIndexes","nameLocation":"10666:14:102","nodeType":"FunctionDefinition","parameters":{"id":20754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20750,"mutability":"mutable","name":"reserve","nameLocation":"10716:7:102","nodeType":"VariableDeclaration","scope":20827,"src":"10686:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20749,"nodeType":"UserDefinedTypeName","pathNode":{"id":20748,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"10686:21:102"},"referencedDeclaration":23909,"src":"10686:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20753,"mutability":"mutable","name":"reserveCache","nameLocation":"10759:12:102","nodeType":"VariableDeclaration","scope":20827,"src":"10729:42:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":20752,"nodeType":"UserDefinedTypeName","pathNode":{"id":20751,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"10729:22:102"},"referencedDeclaration":23973,"src":"10729:22:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"10680:95:102"},"returnParameters":{"id":20755,"nodeType":"ParameterList","parameters":[],"src":"10785:0:102"},"scope":20971,"src":"10657:1542:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20969,"nodeType":"Block","src":"12576:1623:102","statements":[{"assignments":[20841],"declarations":[{"constant":false,"id":20841,"mutability":"mutable","name":"reserveCache","nameLocation":"12612:12:102","nodeType":"VariableDeclaration","scope":20969,"src":"12582:42:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":20840,"nodeType":"UserDefinedTypeName","pathNode":{"id":20839,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"12582:22:102"},"referencedDeclaration":23973,"src":"12582:22:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":20842,"nodeType":"VariableDeclarationStatement","src":"12582:42:102"},{"expression":{"id":20848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20843,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"12631:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20845,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"12631:33:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20846,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"12667:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"12667:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"src":"12631:57:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20849,"nodeType":"ExpressionStatement","src":"12631:57:102"},{"expression":{"id":20857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20850,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"12694:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":23959,"src":"12694:26:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20853,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"12723:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"12723:33:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getReserveFactor","nodeType":"MemberAccess","referencedDeclaration":13512,"src":"12723:50:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12723:52:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12694:81:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20858,"nodeType":"ExpressionStatement","src":"12694:81:102"},{"expression":{"id":20867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20859,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"12781:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23947,"src":"12781:31:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20862,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"12815:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"12815:31:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20864,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"12849:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23882,"src":"12849:22:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"12815:56:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12781:90:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20868,"nodeType":"ExpressionStatement","src":"12781:90:102"},{"expression":{"id":20877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20869,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"12877:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23951,"src":"12877:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20872,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"12916:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"12916:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20874,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"12955:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23886,"src":"12955:34:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"12916:73:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12877:112:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20878,"nodeType":"ExpressionStatement","src":"12877:112:102"},{"expression":{"id":20884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20879,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"12995:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20881,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23955,"src":"12995:30:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20882,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"13028:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20883,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23884,"src":"13028:28:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"12995:61:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20885,"nodeType":"ExpressionStatement","src":"12995:61:102"},{"expression":{"id":20891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20886,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13062:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20888,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23957,"src":"13062:35:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20889,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"13100:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20890,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23888,"src":"13100:33:102","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"13062:71:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20892,"nodeType":"ExpressionStatement","src":"13062:71:102"},{"expression":{"id":20898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20893,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13140:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20895,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"13140:26:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20896,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"13169:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"13169:21:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13140:50:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20899,"nodeType":"ExpressionStatement","src":"13140:50:102"},{"expression":{"id":20905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20900,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13196:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"13196:35:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20903,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"13234:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20904,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"13234:30:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13196:68:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20906,"nodeType":"ExpressionStatement","src":"13196:68:102"},{"expression":{"id":20912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20907,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13270:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"13270:37:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20910,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"13310:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"13310:32:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13270:72:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20913,"nodeType":"ExpressionStatement","src":"13270:72:102"},{"expression":{"id":20919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20914,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13349:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20916,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23970,"src":"13349:39:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20917,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20831,"src":"13391:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20918,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23892,"src":"13391:27:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"13349:69:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":20920,"nodeType":"ExpressionStatement","src":"13349:69:102"},{"expression":{"id":20933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20921,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13425:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23933,"src":"13425:35:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20924,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13463:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20925,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23935,"src":"13463:35:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20927,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13527:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"13527:37:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20926,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"13501:18:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6386_$","typeString":"type(contract IVariableDebtToken)"}},"id":20929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13501:69:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6386","typeString":"contract IVariableDebtToken"}},"id":20930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledTotalSupply","nodeType":"MemberAccess","referencedDeclaration":6179,"src":"13501:87:102","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":20931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13501:89:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13463:127:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13425:165:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20934,"nodeType":"ExpressionStatement","src":"13425:165:102"},{"expression":{"id":20951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":20935,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13605:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20937,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currPrincipalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23937,"src":"13605:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20938,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13649:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23941,"src":"13649:32:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20940,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13689:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23939,"src":"13689:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20942,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13733:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableDebtLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":23972,"src":"13733:42:102","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"id":20944,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13597:184:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint40)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20946,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"13801:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20947,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"13801:35:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20945,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6340,"src":"13784:16:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6340_$","typeString":"type(contract IStableDebtToken)"}},"id":20948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13784:53:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6340","typeString":"contract IStableDebtToken"}},"id":20949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getSupplyData","nodeType":"MemberAccess","referencedDeclaration":6311,"src":"13784:67:102","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"function () view external returns (uint256,uint256,uint256,uint40)"}},"id":20950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13784:69:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint40)"}},"src":"13597:256:102","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20952,"nodeType":"ExpressionStatement","src":"13597:256:102"},{"expression":{"id":20958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20953,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"14020:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23945,"src":"14020:32:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20956,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"14055:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23941,"src":"14055:32:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14020:67:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20959,"nodeType":"ExpressionStatement","src":"14020:67:102"},{"expression":{"id":20965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20960,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"14093:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23943,"src":"14093:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20963,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"14132:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20964,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":23939,"src":"14132:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14093:75:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20966,"nodeType":"ExpressionStatement","src":"14093:75:102"},{"expression":{"id":20967,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20841,"src":"14182:12:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"functionReturnParameters":20836,"id":20968,"nodeType":"Return","src":"14175:19:102"}]},"documentation":{"id":20828,"nodeType":"StructuredDocumentation","src":"12203:254:102","text":" @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\n interest rates.\n @param reserve The reserve object for which the cache will be filled\n @return The cache object"},"id":20970,"implemented":true,"kind":"function","modifiers":[],"name":"cache","nameLocation":"12469:5:102","nodeType":"FunctionDefinition","parameters":{"id":20832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20831,"mutability":"mutable","name":"reserve","nameLocation":"12510:7:102","nodeType":"VariableDeclaration","scope":20970,"src":"12480:37:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20830,"nodeType":"UserDefinedTypeName","pathNode":{"id":20829,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"12480:21:102"},"referencedDeclaration":23909,"src":"12480:21:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"12474:47:102"},"returnParameters":{"id":20836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20970,"src":"12545:29:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":20834,"nodeType":"UserDefinedTypeName","pathNode":{"id":20833,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"12545:22:102"},"referencedDeclaration":23973,"src":"12545:22:102","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"12544:31:102"},"scope":20971,"src":"12460:1739:102","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":20972,"src":"1020:13181:102","usedErrors":[]}],"src":"37:14165:102"},"id":102},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/SupplyLogic.sol","exportedSymbols":{"DataTypes":[24227],"Errors":[14819],"GPv2SafeERC20":[118],"IAToken":[3986],"IERC20":[1442],"PercentageMath":[23726],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"SupplyLogic":[21684],"UserConfiguration":[14545],"ValidationLogic":[23502],"WadRayMath":[23813]},"id":21685,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":20973,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:103"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":20975,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":1443,"src":"63:79:103","symbolAliases":[{"foreign":{"id":20974,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":20977,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":119,"src":"143:87:103","symbolAliases":[{"foreign":{"id":20976,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:13:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":20979,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":3987,"src":"231:56:103","symbolAliases":[{"foreign":{"id":20978,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:7:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":20981,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":14820,"src":"288:45:103","symbolAliases":[{"foreign":{"id":20980,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"296:6:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":20983,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":14546,"src":"334:73:103","symbolAliases":[{"foreign":{"id":20982,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"342:17:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":20985,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":24228,"src":"408:49:103","symbolAliases":[{"foreign":{"id":20984,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"416:9:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":20987,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":23814,"src":"458:50:103","symbolAliases":[{"foreign":{"id":20986,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"466:10:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":20989,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":23727,"src":"509:58:103","symbolAliases":[{"foreign":{"id":20988,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"517:14:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":20991,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":23503,"src":"568:54:103","symbolAliases":[{"foreign":{"id":20990,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"576:15:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":20993,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":20972,"src":"623:48:103","symbolAliases":[{"foreign":{"id":20992,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"631:12:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":20995,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21685,"sourceUnit":14035,"src":"672:79:103","symbolAliases":[{"foreign":{"id":20994,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"680:20:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SupplyLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":20996,"nodeType":"StructuredDocumentation","src":"753:110:103","text":" @title SupplyLogic library\n @author Aave\n @notice Implements the base logic for supply/withdraw"},"fullyImplemented":true,"id":21684,"linearizedBaseContracts":[21684],"name":"SupplyLogic","nameLocation":"872:11:103","nodeType":"ContractDefinition","nodes":[{"id":21000,"libraryName":{"id":20997,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"894:12:103"},"nodeType":"UsingForDirective","src":"888:46:103","typeName":{"id":20999,"nodeType":"UserDefinedTypeName","pathNode":{"id":20998,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"911:22:103"},"referencedDeclaration":23973,"src":"911:22:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":21004,"libraryName":{"id":21001,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"943:12:103"},"nodeType":"UsingForDirective","src":"937:45:103","typeName":{"id":21003,"nodeType":"UserDefinedTypeName","pathNode":{"id":21002,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"960:21:103"},"referencedDeclaration":23909,"src":"960:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":21008,"libraryName":{"id":21005,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"991:13:103"},"nodeType":"UsingForDirective","src":"985:31:103","typeName":{"id":21007,"nodeType":"UserDefinedTypeName","pathNode":{"id":21006,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1009:6:103"},"referencedDeclaration":1442,"src":"1009:6:103","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":21012,"libraryName":{"id":21009,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"1025:17:103"},"nodeType":"UsingForDirective","src":"1019:59:103","typeName":{"id":21011,"nodeType":"UserDefinedTypeName","pathNode":{"id":21010,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"1047:30:103"},"referencedDeclaration":23916,"src":"1047:30:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":21016,"libraryName":{"id":21013,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1087:20:103"},"nodeType":"UsingForDirective","src":"1081:65:103","typeName":{"id":21015,"nodeType":"UserDefinedTypeName","pathNode":{"id":21014,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1112:33:103"},"referencedDeclaration":23912,"src":"1112:33:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":21019,"libraryName":{"id":21017,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1155:10:103"},"nodeType":"UsingForDirective","src":"1149:29:103","typeName":{"id":21018,"name":"uint256","nodeType":"ElementaryTypeName","src":"1170:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":21022,"libraryName":{"id":21020,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1187:14:103"},"nodeType":"UsingForDirective","src":"1181:33:103","typeName":{"id":21021,"name":"uint256","nodeType":"ElementaryTypeName","src":"1206:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":21028,"name":"ReserveUsedAsCollateralEnabled","nameLocation":"1258:30:103","nodeType":"EventDefinition","parameters":{"id":21027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21024,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1305:7:103","nodeType":"VariableDeclaration","scope":21028,"src":"1289:23:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21023,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21026,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1330:4:103","nodeType":"VariableDeclaration","scope":21028,"src":"1314:20:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21025,"name":"address","nodeType":"ElementaryTypeName","src":"1314:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1288:47:103"},"src":"1252:84:103"},{"anonymous":false,"id":21034,"name":"ReserveUsedAsCollateralDisabled","nameLocation":"1345:31:103","nodeType":"EventDefinition","parameters":{"id":21033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21030,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1393:7:103","nodeType":"VariableDeclaration","scope":21034,"src":"1377:23:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21029,"name":"address","nodeType":"ElementaryTypeName","src":"1377:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21032,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1418:4:103","nodeType":"VariableDeclaration","scope":21034,"src":"1402:20:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21031,"name":"address","nodeType":"ElementaryTypeName","src":"1402:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1376:47:103"},"src":"1339:85:103"},{"anonymous":false,"id":21044,"name":"Withdraw","nameLocation":"1433:8:103","nodeType":"EventDefinition","parameters":{"id":21043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21036,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1458:7:103","nodeType":"VariableDeclaration","scope":21044,"src":"1442:23:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21035,"name":"address","nodeType":"ElementaryTypeName","src":"1442:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21038,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1483:4:103","nodeType":"VariableDeclaration","scope":21044,"src":"1467:20:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21037,"name":"address","nodeType":"ElementaryTypeName","src":"1467:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21040,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1505:2:103","nodeType":"VariableDeclaration","scope":21044,"src":"1489:18:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21039,"name":"address","nodeType":"ElementaryTypeName","src":"1489:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21042,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1517:6:103","nodeType":"VariableDeclaration","scope":21044,"src":"1509:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21041,"name":"uint256","nodeType":"ElementaryTypeName","src":"1509:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1441:83:103"},"src":"1427:98:103"},{"anonymous":false,"id":21056,"name":"Supply","nameLocation":"1534:6:103","nodeType":"EventDefinition","parameters":{"id":21055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21046,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1562:7:103","nodeType":"VariableDeclaration","scope":21056,"src":"1546:23:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21045,"name":"address","nodeType":"ElementaryTypeName","src":"1546:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21048,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"1583:4:103","nodeType":"VariableDeclaration","scope":21056,"src":"1575:12:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21047,"name":"address","nodeType":"ElementaryTypeName","src":"1575:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21050,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1609:10:103","nodeType":"VariableDeclaration","scope":21056,"src":"1593:26:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21049,"name":"address","nodeType":"ElementaryTypeName","src":"1593:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21052,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1633:6:103","nodeType":"VariableDeclaration","scope":21056,"src":"1625:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21051,"name":"uint256","nodeType":"ElementaryTypeName","src":"1625:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21054,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1660:12:103","nodeType":"VariableDeclaration","scope":21056,"src":"1645:27:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21053,"name":"uint16","nodeType":"ElementaryTypeName","src":"1645:6:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1540:136:103"},"src":"1528:149:103"},{"body":{"id":21193,"nodeType":"Block","src":"2531:1131:103","statements":[{"assignments":[21079],"declarations":[{"constant":false,"id":21079,"mutability":"mutable","name":"reserve","nameLocation":"2567:7:103","nodeType":"VariableDeclaration","scope":21193,"src":"2537:37:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":21078,"nodeType":"UserDefinedTypeName","pathNode":{"id":21077,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2537:21:103"},"referencedDeclaration":23909,"src":"2537:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":21084,"initialValue":{"baseExpression":{"id":21080,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21062,"src":"2577:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":21083,"indexExpression":{"expression":{"id":21081,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"2590:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23994,"src":"2590:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2577:26:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2537:66:103"},{"assignments":[21089],"declarations":[{"constant":false,"id":21089,"mutability":"mutable","name":"reserveCache","nameLocation":"2639:12:103","nodeType":"VariableDeclaration","scope":21193,"src":"2609:42:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":21088,"nodeType":"UserDefinedTypeName","pathNode":{"id":21087,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"2609:22:103"},"referencedDeclaration":23973,"src":"2609:22:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":21093,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21090,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21079,"src":"2654:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"2654:13:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":21092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2654:15:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"2609:60:103"},{"expression":{"arguments":[{"id":21097,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21089,"src":"2696:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":21094,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21079,"src":"2676:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"2676:19:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":21098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2676:33:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21099,"nodeType":"ExpressionStatement","src":"2676:33:103"},{"expression":{"arguments":[{"id":21103,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21089,"src":"2747:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":21104,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21079,"src":"2761:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"expression":{"id":21105,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"2770:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21106,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":23996,"src":"2770:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21100,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"2716:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSupply","nodeType":"MemberAccess","referencedDeclaration":21871,"src":"2716:30:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_struct$_ReserveData_$23909_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,struct DataTypes.ReserveData storage pointer,uint256) view"}},"id":21107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2716:68:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21108,"nodeType":"ExpressionStatement","src":"2716:68:103"},{"expression":{"arguments":[{"id":21112,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21089,"src":"2819:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":21113,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"2833:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23994,"src":"2833:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21115,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"2847:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":23996,"src":"2847:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":21117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2862:1:103","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":21109,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21079,"src":"2791:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"2791:27:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":21118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2791:73:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21119,"nodeType":"ExpressionStatement","src":"2791:73:103"},{"expression":{"arguments":[{"expression":{"id":21125,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2909:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2909:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21127,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21089,"src":"2921:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"2921:26:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21129,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"2949:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21130,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":23996,"src":"2949:13:103","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":[{"expression":{"id":21121,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"2878:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23994,"src":"2878:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21120,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2871:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":21123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2871:20:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":21124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"2871:37:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":21131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2871:92:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21132,"nodeType":"ExpressionStatement","src":"2871:92:103"},{"assignments":[21134],"declarations":[{"constant":false,"id":21134,"mutability":"mutable","name":"isFirstSupply","nameLocation":"2975:13:103","nodeType":"VariableDeclaration","scope":21193,"src":"2970:18:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21133,"name":"bool","nodeType":"ElementaryTypeName","src":"2970:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":21149,"initialValue":{"arguments":[{"expression":{"id":21140,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3039:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3039:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21142,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"3057:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":23998,"src":"3057:17:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21144,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"3082:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":23996,"src":"3082:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21146,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21089,"src":"3103:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"3103:31:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":21136,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21089,"src":"2999:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"2999:26:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21135,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"2991:7:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":21138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2991:35:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":21139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":3883,"src":"2991:40:103","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) external returns (bool)"}},"id":21148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2991:149:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"2970:170:103"},{"condition":{"id":21150,"name":"isFirstSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21134,"src":"3151:13:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21179,"nodeType":"IfStatement","src":"3147:412:103","trueBody":{"id":21178,"nodeType":"Block","src":"3166:393:103","statements":[{"condition":{"arguments":[{"id":21153,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21062,"src":"3247:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":21154,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21066,"src":"3271:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":21155,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21069,"src":"3295:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":21156,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21089,"src":"3317:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"3317:33:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},{"expression":{"id":21158,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21089,"src":"3362:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21159,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"3362:26:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21151,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"3187:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateAutomaticUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":23501,"src":"3187:48:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address) view returns (bool)"}},"id":21160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3187:211:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21177,"nodeType":"IfStatement","src":"3174:379:103","trueBody":{"id":21176,"nodeType":"Block","src":"3407:146:103","statements":[{"expression":{"arguments":[{"expression":{"id":21164,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21079,"src":"3449:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21165,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"3449:10:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":21166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3461:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":21161,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21069,"src":"3417:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21163,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"3417:31:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":21167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3417:49:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21168,"nodeType":"ExpressionStatement","src":"3417:49:103"},{"eventCall":{"arguments":[{"expression":{"id":21170,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"3512:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21171,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23994,"src":"3512:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21172,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"3526:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21173,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":23998,"src":"3526:17:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21169,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21028,"src":"3481:30:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":21174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3481:63:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21175,"nodeType":"EmitStatement","src":"3476:68:103"}]}}]}},{"eventCall":{"arguments":[{"expression":{"id":21181,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"3577:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":23994,"src":"3577:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21183,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3591:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3591:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21185,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"3603:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":23998,"src":"3603:17:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21187,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"3622:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":23996,"src":"3622:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21189,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21072,"src":"3637:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":21190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":24000,"src":"3637:19:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":21180,"name":"Supply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21056,"src":"3570:6:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,uint16)"}},"id":21191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3570:87:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21192,"nodeType":"EmitStatement","src":"3565:92:103"}]},"documentation":{"id":21057,"nodeType":"StructuredDocumentation","src":"1681:585:103","text":" @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\n @dev Emits the `Supply()` event.\n @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\n collateral.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the supply function"},"functionSelector":"1913f161","id":21194,"implemented":true,"kind":"function","modifiers":[],"name":"executeSupply","nameLocation":"2278:13:103","nodeType":"FunctionDefinition","parameters":{"id":21073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21062,"mutability":"mutable","name":"reservesData","nameLocation":"2347:12:103","nodeType":"VariableDeclaration","scope":21194,"src":"2297:62:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":21061,"keyType":{"id":21058,"name":"address","nodeType":"ElementaryTypeName","src":"2305:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2297:41:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":21060,"nodeType":"UserDefinedTypeName","pathNode":{"id":21059,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"2316:21:103"},"referencedDeclaration":23909,"src":"2316:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":21066,"mutability":"mutable","name":"reservesList","nameLocation":"2401:12:103","nodeType":"VariableDeclaration","scope":21194,"src":"2365:48:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":21065,"keyType":{"id":21063,"name":"uint256","nodeType":"ElementaryTypeName","src":"2373:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2365:27:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":21064,"name":"address","nodeType":"ElementaryTypeName","src":"2384:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":21069,"mutability":"mutable","name":"userConfig","nameLocation":"2458:10:103","nodeType":"VariableDeclaration","scope":21194,"src":"2419:49:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":21068,"nodeType":"UserDefinedTypeName","pathNode":{"id":21067,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"2419:30:103"},"referencedDeclaration":23916,"src":"2419:30:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":21072,"mutability":"mutable","name":"params","nameLocation":"2511:6:103","nodeType":"VariableDeclaration","scope":21194,"src":"2474:43:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams"},"typeName":{"id":21071,"nodeType":"UserDefinedTypeName","pathNode":{"id":21070,"name":"DataTypes.ExecuteSupplyParams","nodeType":"IdentifierPath","referencedDeclaration":24001,"src":"2474:29:103"},"referencedDeclaration":24001,"src":"2474:29:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_storage_ptr","typeString":"struct DataTypes.ExecuteSupplyParams"}},"visibility":"internal"}],"src":"2291:230:103"},"returnParameters":{"id":21074,"nodeType":"ParameterList","parameters":[],"src":"2531:0:103"},"scope":21684,"src":"2269:1393:103","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21379,"nodeType":"Block","src":"4758:1479:103","statements":[{"assignments":[21224],"declarations":[{"constant":false,"id":21224,"mutability":"mutable","name":"reserve","nameLocation":"4794:7:103","nodeType":"VariableDeclaration","scope":21379,"src":"4764:37:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":21223,"nodeType":"UserDefinedTypeName","pathNode":{"id":21222,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4764:21:103"},"referencedDeclaration":23909,"src":"4764:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":21229,"initialValue":{"baseExpression":{"id":21225,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"4804:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":21228,"indexExpression":{"expression":{"id":21226,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"4817:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21227,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24041,"src":"4817:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4804:26:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4764:66:103"},{"assignments":[21234],"declarations":[{"constant":false,"id":21234,"mutability":"mutable","name":"reserveCache","nameLocation":"4866:12:103","nodeType":"VariableDeclaration","scope":21379,"src":"4836:42:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":21233,"nodeType":"UserDefinedTypeName","pathNode":{"id":21232,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"4836:22:103"},"referencedDeclaration":23973,"src":"4836:22:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":21238,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21235,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21224,"src":"4881:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"4881:13:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":21237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4881:15:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"4836:60:103"},{"expression":{"arguments":[{"id":21242,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21234,"src":"4923:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":21239,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21224,"src":"4903:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":20387,"src":"4903:19:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":21243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4903:33:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21244,"nodeType":"ExpressionStatement","src":"4903:33:103"},{"assignments":[21246],"declarations":[{"constant":false,"id":21246,"mutability":"mutable","name":"userBalance","nameLocation":"4951:11:103","nodeType":"VariableDeclaration","scope":21379,"src":"4943:19:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21245,"name":"uint256","nodeType":"ElementaryTypeName","src":"4943:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21259,"initialValue":{"arguments":[{"expression":{"id":21256,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21234,"src":"5043:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"5043:31:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":21252,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5017:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5017:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":21248,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21234,"src":"4973:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"4973:26:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21247,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"4965:7:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":21250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4965:35:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":21251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":6163,"src":"4965:51:103","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":21254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4965:63:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"4965:70:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":21258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4965:115:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4943:137:103"},{"assignments":[21261],"declarations":[{"constant":false,"id":21261,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"5095:16:103","nodeType":"VariableDeclaration","scope":21379,"src":"5087:24:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21260,"name":"uint256","nodeType":"ElementaryTypeName","src":"5087:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21264,"initialValue":{"expression":{"id":21262,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"5114:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24043,"src":"5114:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5087:40:103"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21265,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"5138:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21266,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24043,"src":"5138:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":21269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5160:7:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21268,"name":"uint256","nodeType":"ElementaryTypeName","src":"5160:7:103","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":21267,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5155:4:103","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":21270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5155:13:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":21271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"5155:17:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5138:34:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21278,"nodeType":"IfStatement","src":"5134:85:103","trueBody":{"id":21277,"nodeType":"Block","src":"5174:45:103","statements":[{"expression":{"id":21275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21273,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"5182:16:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21274,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"5201:11:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5182:30:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21276,"nodeType":"ExpressionStatement","src":"5182:30:103"}]}},{"expression":{"arguments":[{"id":21282,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21234,"src":"5258:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":21283,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"5272:16:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21284,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"5290:11:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21279,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"5225:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateWithdraw","nodeType":"MemberAccess","referencedDeclaration":21921,"src":"5225:32:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,uint256,uint256) pure"}},"id":21285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5225:77:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21286,"nodeType":"ExpressionStatement","src":"5225:77:103"},{"expression":{"arguments":[{"id":21290,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21234,"src":"5337:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":21291,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"5351:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24041,"src":"5351:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":21293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5365:1:103","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":21294,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"5368:16:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21287,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21224,"src":"5309:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":20618,"src":"5309:27:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":21295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5309:76:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21296,"nodeType":"ExpressionStatement","src":"5309:76:103"},{"assignments":[21298],"declarations":[{"constant":false,"id":21298,"mutability":"mutable","name":"isCollateral","nameLocation":"5397:12:103","nodeType":"VariableDeclaration","scope":21379,"src":"5392:17:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21297,"name":"bool","nodeType":"ElementaryTypeName","src":"5392:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":21304,"initialValue":{"arguments":[{"expression":{"id":21301,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21224,"src":"5443:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"5443:10:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":21299,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21212,"src":"5412:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21300,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14260,"src":"5412:30:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":21303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5412:42:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"5392:62:103"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21305,"name":"isCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21298,"src":"5465:12:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21306,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"5481:16:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":21307,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"5501:11:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5481:31:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5465:47:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21326,"nodeType":"IfStatement","src":"5461:188:103","trueBody":{"id":21325,"nodeType":"Block","src":"5514:135:103","statements":[{"expression":{"arguments":[{"expression":{"id":21313,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21224,"src":"5554:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21314,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"5554:10:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":21315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5566:5:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":21310,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21212,"src":"5522:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21312,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"5522:31:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":21316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5522:50:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21317,"nodeType":"ExpressionStatement","src":"5522:50:103"},{"eventCall":{"arguments":[{"expression":{"id":21319,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"5617:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24041,"src":"5617:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21321,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5631:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5631:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21318,"name":"ReserveUsedAsCollateralDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21034,"src":"5585:31:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":21323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5585:57:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21324,"nodeType":"EmitStatement","src":"5580:62:103"}]}},{"expression":{"arguments":[{"expression":{"id":21332,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5703:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5703:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21334,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"5721:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":24045,"src":"5721:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21336,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"5738:16:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21337,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21234,"src":"5762:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"5762:31:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":21328,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21234,"src":"5663:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"5663:26:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21327,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"5655:7:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":21330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5655:35:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":21331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":3895,"src":"5655:40:103","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256) external"}},"id":21339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5655:144:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21340,"nodeType":"ExpressionStatement","src":"5655:144:103"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21341,"name":"isCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21298,"src":"5810:12:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21342,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21212,"src":"5826:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowingAny","nodeType":"MemberAccess","referencedDeclaration":14356,"src":"5826:25:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":21344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5826:27:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5810:43:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21366,"nodeType":"IfStatement","src":"5806:322:103","trueBody":{"id":21365,"nodeType":"Block","src":"5855:273:103","statements":[{"expression":{"arguments":[{"id":21349,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"5905:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":21350,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21204,"src":"5927:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":21351,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21209,"src":"5949:15:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":21352,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21212,"src":"5974:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":21353,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"5994:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24041,"src":"5994:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21355,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6016:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6016:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21357,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"6036:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21358,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24047,"src":"6036:20:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21359,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"6066:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21360,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":24049,"src":"6066:13:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21361,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"6089:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21362,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24051,"src":"6089:24:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":21346,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"5863:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateHFAndLtv","nodeType":"MemberAccess","referencedDeclaration":23186,"src":"5863:32:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,address,uint256,address,uint8) view"}},"id":21363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5863:258:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21364,"nodeType":"ExpressionStatement","src":"5863:258:103"}]}},{"eventCall":{"arguments":[{"expression":{"id":21368,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"6148:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24041,"src":"6148:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21370,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6162:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6162:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21372,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"6174:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":21373,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":24045,"src":"6174:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21374,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"6185:16:103","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":21367,"name":"Withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21044,"src":"6139:8:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":21375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6139:63:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21376,"nodeType":"EmitStatement","src":"6134:68:103"},{"expression":{"id":21377,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"6216:16:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21219,"id":21378,"nodeType":"Return","src":"6209:23:103"}]},"documentation":{"id":21195,"nodeType":"StructuredDocumentation","src":"3666:734:103","text":" @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\n previously supplied in the Aave protocol.\n @dev Emits the `Withdraw()` event.\n @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the withdraw function\n @return The actual amount withdrawn"},"functionSelector":"186dea44","id":21380,"implemented":true,"kind":"function","modifiers":[],"name":"executeWithdraw","nameLocation":"4412:15:103","nodeType":"FunctionDefinition","parameters":{"id":21216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21200,"mutability":"mutable","name":"reservesData","nameLocation":"4483:12:103","nodeType":"VariableDeclaration","scope":21380,"src":"4433:62:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":21199,"keyType":{"id":21196,"name":"address","nodeType":"ElementaryTypeName","src":"4441:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4433:41:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":21198,"nodeType":"UserDefinedTypeName","pathNode":{"id":21197,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"4452:21:103"},"referencedDeclaration":23909,"src":"4452:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":21204,"mutability":"mutable","name":"reservesList","nameLocation":"4537:12:103","nodeType":"VariableDeclaration","scope":21380,"src":"4501:48:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":21203,"keyType":{"id":21201,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4501:27:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":21202,"name":"address","nodeType":"ElementaryTypeName","src":"4520:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":21209,"mutability":"mutable","name":"eModeCategories","nameLocation":"4605:15:103","nodeType":"VariableDeclaration","scope":21380,"src":"4555:65:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":21208,"keyType":{"id":21205,"name":"uint8","nodeType":"ElementaryTypeName","src":"4563:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"4555:41:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":21207,"nodeType":"UserDefinedTypeName","pathNode":{"id":21206,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"4572:23:103"},"referencedDeclaration":23927,"src":"4572:23:103","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":21212,"mutability":"mutable","name":"userConfig","nameLocation":"4665:10:103","nodeType":"VariableDeclaration","scope":21380,"src":"4626:49:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":21211,"nodeType":"UserDefinedTypeName","pathNode":{"id":21210,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"4626:30:103"},"referencedDeclaration":23916,"src":"4626:30:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":21215,"mutability":"mutable","name":"params","nameLocation":"4720:6:103","nodeType":"VariableDeclaration","scope":21380,"src":"4681:45:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams"},"typeName":{"id":21214,"nodeType":"UserDefinedTypeName","pathNode":{"id":21213,"name":"DataTypes.ExecuteWithdrawParams","nodeType":"IdentifierPath","referencedDeclaration":24052,"src":"4681:31:103"},"referencedDeclaration":24052,"src":"4681:31:103","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_storage_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams"}},"visibility":"internal"}],"src":"4427:303:103"},"returnParameters":{"id":21219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21218,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21380,"src":"4749:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21217,"name":"uint256","nodeType":"ElementaryTypeName","src":"4749:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4748:9:103"},"scope":21684,"src":"4403:1834:103","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21545,"nodeType":"Block","src":"7417:1468:103","statements":[{"assignments":[21410],"declarations":[{"constant":false,"id":21410,"mutability":"mutable","name":"reserve","nameLocation":"7453:7:103","nodeType":"VariableDeclaration","scope":21545,"src":"7423:37:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":21409,"nodeType":"UserDefinedTypeName","pathNode":{"id":21408,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"7423:21:103"},"referencedDeclaration":23909,"src":"7423:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":21415,"initialValue":{"baseExpression":{"id":21411,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21386,"src":"7463:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":21414,"indexExpression":{"expression":{"id":21412,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"7476:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24061,"src":"7476:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7463:26:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7423:66:103"},{"expression":{"arguments":[{"id":21419,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21410,"src":"7529:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}],"expression":{"id":21416,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"7496:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateTransfer","nodeType":"MemberAccess","referencedDeclaration":23204,"src":"7496:32:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer) view"}},"id":21420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7496:41:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21421,"nodeType":"ExpressionStatement","src":"7496:41:103"},{"assignments":[21423],"declarations":[{"constant":false,"id":21423,"mutability":"mutable","name":"reserveId","nameLocation":"7552:9:103","nodeType":"VariableDeclaration","scope":21545,"src":"7544:17:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21422,"name":"uint256","nodeType":"ElementaryTypeName","src":"7544:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21426,"initialValue":{"expression":{"id":21424,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21410,"src":"7564:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"7564:10:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"7544:30:103"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21427,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"7585:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":24063,"src":"7585:11:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":21429,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"7600:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":24065,"src":"7600:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7585:24:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21432,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"7613:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21433,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24067,"src":"7613:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":21434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7630:1:103","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7613:18:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7585:46:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21544,"nodeType":"IfStatement","src":"7581:1300:103","trueBody":{"id":21543,"nodeType":"Block","src":"7633:1248:103","statements":[{"assignments":[21441],"declarations":[{"constant":false,"id":21441,"mutability":"mutable","name":"fromConfig","nameLocation":"7680:10:103","nodeType":"VariableDeclaration","scope":21543,"src":"7641:49:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":21440,"nodeType":"UserDefinedTypeName","pathNode":{"id":21439,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"7641:30:103"},"referencedDeclaration":23916,"src":"7641:30:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":21446,"initialValue":{"baseExpression":{"id":21442,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21400,"src":"7693:11:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":21445,"indexExpression":{"expression":{"id":21443,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"7705:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":24063,"src":"7705:11:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7693:24:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7641:76:103"},{"condition":{"arguments":[{"id":21449,"name":"reserveId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21423,"src":"7761:9:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21447,"name":"fromConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21441,"src":"7730:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21448,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14260,"src":"7730:30:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":21450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7730:41:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21500,"nodeType":"IfStatement","src":"7726:637:103","trueBody":{"id":21499,"nodeType":"Block","src":"7773:590:103","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21451,"name":"fromConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21441,"src":"7787:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowingAny","nodeType":"MemberAccess","referencedDeclaration":14356,"src":"7787:25:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":21453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7787:27:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21477,"nodeType":"IfStatement","src":"7783:369:103","trueBody":{"id":21476,"nodeType":"Block","src":"7816:336:103","statements":[{"expression":{"arguments":[{"id":21457,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21386,"src":"7874:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":21458,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21390,"src":"7900:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":21459,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21395,"src":"7926:15:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":21460,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21400,"src":"7955:11:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":21463,"indexExpression":{"expression":{"id":21461,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"7967:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":24063,"src":"7967:11:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7955:24:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"expression":{"id":21464,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"7993:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24061,"src":"7993:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21466,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8019:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":24063,"src":"8019:11:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21468,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8044:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24073,"src":"8044:20:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21470,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8078:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":24075,"src":"8078:13:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21472,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8105:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21473,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"fromEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24077,"src":"8105:24:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":21454,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"7828:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateHFAndLtv","nodeType":"MemberAccess","referencedDeclaration":23186,"src":"7828:32:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,address,uint256,address,uint8) view"}},"id":21474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7828:313:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21475,"nodeType":"ExpressionStatement","src":"7828:313:103"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21478,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8165:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21479,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balanceFromBefore","nodeType":"MemberAccess","referencedDeclaration":24069,"src":"8165:24:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21480,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8193:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21481,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24067,"src":"8193:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8165:41:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21498,"nodeType":"IfStatement","src":"8161:194:103","trueBody":{"id":21497,"nodeType":"Block","src":"8208:147:103","statements":[{"expression":{"arguments":[{"id":21486,"name":"reserveId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21423,"src":"8252:9:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":21487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8263:5:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":21483,"name":"fromConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21441,"src":"8220:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"8220:31:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":21488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8220:49:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21489,"nodeType":"ExpressionStatement","src":"8220:49:103"},{"eventCall":{"arguments":[{"expression":{"id":21491,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8318:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24061,"src":"8318:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21493,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8332:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":24063,"src":"8332:11:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21490,"name":"ReserveUsedAsCollateralDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21034,"src":"8286:31:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":21495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8286:58:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21496,"nodeType":"EmitStatement","src":"8281:63:103"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21501,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8375:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balanceToBefore","nodeType":"MemberAccess","referencedDeclaration":24071,"src":"8375:22:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8401:1:103","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8375:27:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21542,"nodeType":"IfStatement","src":"8371:504:103","trueBody":{"id":21541,"nodeType":"Block","src":"8404:471:103","statements":[{"assignments":[21509],"declarations":[{"constant":false,"id":21509,"mutability":"mutable","name":"toConfig","nameLocation":"8453:8:103","nodeType":"VariableDeclaration","scope":21541,"src":"8414:47:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":21508,"nodeType":"UserDefinedTypeName","pathNode":{"id":21507,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"8414:30:103"},"referencedDeclaration":23916,"src":"8414:30:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":21514,"initialValue":{"baseExpression":{"id":21510,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21400,"src":"8464:11:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":21513,"indexExpression":{"expression":{"id":21511,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8476:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":24065,"src":"8476:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8464:22:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"8414:72:103"},{"condition":{"arguments":[{"id":21517,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21386,"src":"8573:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":21518,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21390,"src":"8599:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":21519,"name":"toConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21509,"src":"8625:8:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":21520,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21410,"src":"8647:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"8647:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},{"expression":{"id":21522,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21410,"src":"8682:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21523,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"8682:21:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21515,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"8511:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateAutomaticUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":23501,"src":"8511:48:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address) view returns (bool)"}},"id":21524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8511:204:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21540,"nodeType":"IfStatement","src":"8496:371:103","trueBody":{"id":21539,"nodeType":"Block","src":"8726:141:103","statements":[{"expression":{"arguments":[{"id":21528,"name":"reserveId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21423,"src":"8768:9:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":21529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8779:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":21525,"name":"toConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21509,"src":"8738:8:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"8738:29:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":21530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8738:46:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21531,"nodeType":"ExpressionStatement","src":"8738:46:103"},{"eventCall":{"arguments":[{"expression":{"id":21533,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8832:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24061,"src":"8832:12:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21535,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"8846:6:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":21536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":24065,"src":"8846:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21532,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21028,"src":"8801:30:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":21537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8801:55:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21538,"nodeType":"EmitStatement","src":"8796:60:103"}]}}]}}]}}]},"documentation":{"id":21381,"nodeType":"StructuredDocumentation","src":"6241:806:103","text":" @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\n collateralization constraints violation.\n @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\n collateral.\n @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n @param params The additional parameters needed to execute the finalizeTransfer function"},"functionSelector":"8a5dadd1","id":21546,"implemented":true,"kind":"function","modifiers":[],"name":"executeFinalizeTransfer","nameLocation":"7059:23:103","nodeType":"FunctionDefinition","parameters":{"id":21404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21386,"mutability":"mutable","name":"reservesData","nameLocation":"7138:12:103","nodeType":"VariableDeclaration","scope":21546,"src":"7088:62:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":21385,"keyType":{"id":21382,"name":"address","nodeType":"ElementaryTypeName","src":"7096:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7088:41:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":21384,"nodeType":"UserDefinedTypeName","pathNode":{"id":21383,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"7107:21:103"},"referencedDeclaration":23909,"src":"7107:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":21390,"mutability":"mutable","name":"reservesList","nameLocation":"7192:12:103","nodeType":"VariableDeclaration","scope":21546,"src":"7156:48:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":21389,"keyType":{"id":21387,"name":"uint256","nodeType":"ElementaryTypeName","src":"7164:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"7156:27:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":21388,"name":"address","nodeType":"ElementaryTypeName","src":"7175:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":21395,"mutability":"mutable","name":"eModeCategories","nameLocation":"7260:15:103","nodeType":"VariableDeclaration","scope":21546,"src":"7210:65:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":21394,"keyType":{"id":21391,"name":"uint8","nodeType":"ElementaryTypeName","src":"7218:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"7210:41:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":21393,"nodeType":"UserDefinedTypeName","pathNode":{"id":21392,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"7227:23:103"},"referencedDeclaration":23927,"src":"7227:23:103","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":21400,"mutability":"mutable","name":"usersConfig","nameLocation":"7340:11:103","nodeType":"VariableDeclaration","scope":21546,"src":"7281:70:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"typeName":{"id":21399,"keyType":{"id":21396,"name":"address","nodeType":"ElementaryTypeName","src":"7289:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7281:50:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"valueType":{"id":21398,"nodeType":"UserDefinedTypeName","pathNode":{"id":21397,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"7300:30:103"},"referencedDeclaration":23916,"src":"7300:30:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},"visibility":"internal"},{"constant":false,"id":21403,"mutability":"mutable","name":"params","nameLocation":"7397:6:103","nodeType":"VariableDeclaration","scope":21546,"src":"7357:46:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams"},"typeName":{"id":21402,"nodeType":"UserDefinedTypeName","pathNode":{"id":21401,"name":"DataTypes.FinalizeTransferParams","nodeType":"IdentifierPath","referencedDeclaration":24078,"src":"7357:32:103"},"referencedDeclaration":24078,"src":"7357:32:103","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_storage_ptr","typeString":"struct DataTypes.FinalizeTransferParams"}},"visibility":"internal"}],"src":"7082:325:103"},"returnParameters":{"id":21405,"nodeType":"ParameterList","parameters":[],"src":"7417:0:103"},"scope":21684,"src":"7050:1835:103","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21682,"nodeType":"Block","src":"10469:1164:103","statements":[{"assignments":[21581],"declarations":[{"constant":false,"id":21581,"mutability":"mutable","name":"reserve","nameLocation":"10505:7:103","nodeType":"VariableDeclaration","scope":21682,"src":"10475:37:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":21580,"nodeType":"UserDefinedTypeName","pathNode":{"id":21579,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"10475:21:103"},"referencedDeclaration":23909,"src":"10475:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":21585,"initialValue":{"baseExpression":{"id":21582,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21552,"src":"10515:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":21584,"indexExpression":{"id":21583,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21566,"src":"10528:5:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10515:19:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10475:59:103"},{"assignments":[21590],"declarations":[{"constant":false,"id":21590,"mutability":"mutable","name":"reserveCache","nameLocation":"10570:12:103","nodeType":"VariableDeclaration","scope":21682,"src":"10540:42:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":21589,"nodeType":"UserDefinedTypeName","pathNode":{"id":21588,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"10540:22:103"},"referencedDeclaration":23973,"src":"10540:22:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":21594,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21591,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21581,"src":"10585:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21592,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":20970,"src":"10585:13:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_struct$_ReserveCache_$23973_memory_ptr_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":21593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10585:15:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"10540:60:103"},{"assignments":[21596],"declarations":[{"constant":false,"id":21596,"mutability":"mutable","name":"userBalance","nameLocation":"10615:11:103","nodeType":"VariableDeclaration","scope":21682,"src":"10607:19:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21595,"name":"uint256","nodeType":"ElementaryTypeName","src":"10607:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21605,"initialValue":{"arguments":[{"expression":{"id":21602,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10674:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"10674:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":21598,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21590,"src":"10636:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"10636:26:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21597,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10629:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":21600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10629:34:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":21601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"10629:44:103","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":21604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10629:56:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10607:78:103"},{"expression":{"arguments":[{"id":21609,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21590,"src":"10742:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":21610,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21596,"src":"10756:11:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21606,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"10692:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSetUseReserveAsCollateral","nodeType":"MemberAccess","referencedDeclaration":22823,"src":"10692:49:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveCache_$23973_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,uint256) pure"}},"id":21611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10692:76:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21612,"nodeType":"ExpressionStatement","src":"10692:76:103"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21613,"name":"useAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21568,"src":"10779:15:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"expression":{"id":21616,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21581,"src":"10829:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"10829:10:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":21614,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21564,"src":"10798:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14260,"src":"10798:30:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":21618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10798:42:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10779:61:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21621,"nodeType":"IfStatement","src":"10775:74:103","trueBody":{"functionReturnParameters":21576,"id":21620,"nodeType":"Return","src":"10842:7:103"}},{"condition":{"id":21622,"name":"useAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21568,"src":"10859:15:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":21680,"nodeType":"Block","src":"11257:372:103","statements":[{"expression":{"arguments":[{"expression":{"id":21654,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21581,"src":"11297:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"11297:10:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":21656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11309:5:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":21651,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21564,"src":"11265:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21653,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"11265:31:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":21657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11265:50:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21658,"nodeType":"ExpressionStatement","src":"11265:50:103"},{"expression":{"arguments":[{"id":21662,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21552,"src":"11365:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":21663,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21556,"src":"11387:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":21664,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21561,"src":"11409:15:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":21665,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21564,"src":"11434:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":21666,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21566,"src":"11454:5:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21667,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11469:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11469:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21669,"name":"reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21570,"src":"11489:13:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21670,"name":"priceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21572,"src":"11512:11:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21671,"name":"userEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21574,"src":"11533:17:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":21659,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"11323:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateHFAndLtv","nodeType":"MemberAccess","referencedDeclaration":23186,"src":"11323:32:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,address,uint256,address,uint8) view"}},"id":21672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11323:235:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21673,"nodeType":"ExpressionStatement","src":"11323:235:103"},{"eventCall":{"arguments":[{"id":21675,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21566,"src":"11604:5:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21676,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11611:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11611:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21674,"name":"ReserveUsedAsCollateralDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21034,"src":"11572:31:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":21678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11572:50:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21679,"nodeType":"EmitStatement","src":"11567:55:103"}]},"id":21681,"nodeType":"IfStatement","src":"10855:774:103","trueBody":{"id":21650,"nodeType":"Block","src":"10876:375:103","statements":[{"expression":{"arguments":[{"arguments":[{"id":21626,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21552,"src":"10952:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":21627,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21556,"src":"10976:12:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":21628,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21564,"src":"11000:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":21629,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21590,"src":"11022:12:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"11022:33:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":21624,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23502,"src":"10901:15:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$23502_$","typeString":"type(library ValidationLogic)"}},"id":21625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":23438,"src":"10901:39:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory) view returns (bool)"}},"id":21631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10901:164:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21632,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"11075:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"USER_IN_ISOLATION_MODE_OR_LTV_ZERO","nodeType":"MemberAccess","referencedDeclaration":14731,"src":"11075:41:103","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21623,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10884:7:103","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10884:240:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21635,"nodeType":"ExpressionStatement","src":"10884:240:103"},{"expression":{"arguments":[{"expression":{"id":21639,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21581,"src":"11165:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"11165:10:103","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":21641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11177:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":21636,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21564,"src":"11133:10:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":21638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14152,"src":"11133:31:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":21642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11133:49:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21643,"nodeType":"ExpressionStatement","src":"11133:49:103"},{"eventCall":{"arguments":[{"id":21645,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21566,"src":"11226:5:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21646,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11233:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11233:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21644,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21028,"src":"11195:30:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":21648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11195:49:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21649,"nodeType":"EmitStatement","src":"11190:54:103"}]}}]},"documentation":{"id":21547,"nodeType":"StructuredDocumentation","src":"8889:1151:103","text":" @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\n collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\n checks to ensure collateralization.\n @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\n @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The users configuration mapping that track the supplied/borrowed assets\n @param asset The address of the asset being configured as collateral\n @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\n @param reservesCount The number of initialized reserves\n @param priceOracle The address of the price oracle\n @param userEModeCategory The eMode category chosen by the user"},"functionSelector":"bf697a26","id":21683,"implemented":true,"kind":"function","modifiers":[],"name":"executeUseReserveAsCollateral","nameLocation":"10052:29:103","nodeType":"FunctionDefinition","parameters":{"id":21575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21552,"mutability":"mutable","name":"reservesData","nameLocation":"10137:12:103","nodeType":"VariableDeclaration","scope":21683,"src":"10087:62:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":21551,"keyType":{"id":21548,"name":"address","nodeType":"ElementaryTypeName","src":"10095:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"10087:41:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":21550,"nodeType":"UserDefinedTypeName","pathNode":{"id":21549,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"10106:21:103"},"referencedDeclaration":23909,"src":"10106:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":21556,"mutability":"mutable","name":"reservesList","nameLocation":"10191:12:103","nodeType":"VariableDeclaration","scope":21683,"src":"10155:48:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":21555,"keyType":{"id":21553,"name":"uint256","nodeType":"ElementaryTypeName","src":"10163:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"10155:27:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":21554,"name":"address","nodeType":"ElementaryTypeName","src":"10174:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":21561,"mutability":"mutable","name":"eModeCategories","nameLocation":"10259:15:103","nodeType":"VariableDeclaration","scope":21683,"src":"10209:65:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":21560,"keyType":{"id":21557,"name":"uint8","nodeType":"ElementaryTypeName","src":"10217:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"10209:41:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":21559,"nodeType":"UserDefinedTypeName","pathNode":{"id":21558,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"10226:23:103"},"referencedDeclaration":23927,"src":"10226:23:103","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":21564,"mutability":"mutable","name":"userConfig","nameLocation":"10319:10:103","nodeType":"VariableDeclaration","scope":21683,"src":"10280:49:103","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":21563,"nodeType":"UserDefinedTypeName","pathNode":{"id":21562,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"10280:30:103"},"referencedDeclaration":23916,"src":"10280:30:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":21566,"mutability":"mutable","name":"asset","nameLocation":"10343:5:103","nodeType":"VariableDeclaration","scope":21683,"src":"10335:13:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21565,"name":"address","nodeType":"ElementaryTypeName","src":"10335:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21568,"mutability":"mutable","name":"useAsCollateral","nameLocation":"10359:15:103","nodeType":"VariableDeclaration","scope":21683,"src":"10354:20:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21567,"name":"bool","nodeType":"ElementaryTypeName","src":"10354:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21570,"mutability":"mutable","name":"reservesCount","nameLocation":"10388:13:103","nodeType":"VariableDeclaration","scope":21683,"src":"10380:21:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21569,"name":"uint256","nodeType":"ElementaryTypeName","src":"10380:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21572,"mutability":"mutable","name":"priceOracle","nameLocation":"10415:11:103","nodeType":"VariableDeclaration","scope":21683,"src":"10407:19:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21571,"name":"address","nodeType":"ElementaryTypeName","src":"10407:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21574,"mutability":"mutable","name":"userEModeCategory","nameLocation":"10438:17:103","nodeType":"VariableDeclaration","scope":21683,"src":"10432:23:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21573,"name":"uint8","nodeType":"ElementaryTypeName","src":"10432:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"10081:378:103"},"returnParameters":{"id":21576,"nodeType":"ParameterList","parameters":[],"src":"10469:0:103"},"scope":21684,"src":"10043:1590:103","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":21685,"src":"864:10771:103","usedErrors":[]}],"src":"37:11599:103"},"id":103},"contracts/protocol/libraries/logic/ValidationLogic.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/logic/ValidationLogic.sol","exportedSymbols":{"Address":[722],"DataTypes":[24227],"Errors":[14819],"GPv2SafeERC20":[118],"GenericLogic":[18449],"IAToken":[3986],"IAccessControl":[1352],"IERC20":[1442],"IPoolAddressesProvider":[5282],"IPriceOracleGetter":[6048],"IPriceOracleSentinel":[6107],"IReserveInterestRateStrategy":[6126],"IScaledBalanceToken":[6188],"IStableDebtToken":[6340],"IncentivizedERC20":[31300],"PercentageMath":[23726],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"SafeCast":[1966],"UserConfiguration":[14545],"ValidationLogic":[23502],"WadRayMath":[23813]},"id":23503,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":21686,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:104"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":21688,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":1443,"src":"63:79:104","symbolAliases":[{"foreign":{"id":21687,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Address.sol","file":"../../../dependencies/openzeppelin/contracts/Address.sol","id":21690,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":723,"src":"143:81:104","symbolAliases":[{"foreign":{"id":21689,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:7:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":21692,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":119,"src":"225:87:104","symbolAliases":[{"foreign":{"id":21691,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"233:13:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IReserveInterestRateStrategy.sol","file":"../../../interfaces/IReserveInterestRateStrategy.sol","id":21694,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":6127,"src":"313:98:104","symbolAliases":[{"foreign":{"id":21693,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"321:28:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IStableDebtToken.sol","file":"../../../interfaces/IStableDebtToken.sol","id":21696,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":6341,"src":"412:74:104","symbolAliases":[{"foreign":{"id":21695,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"420:16:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IScaledBalanceToken.sol","file":"../../../interfaces/IScaledBalanceToken.sol","id":21698,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":6189,"src":"487:80:104","symbolAliases":[{"foreign":{"id":21697,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"495:19:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPriceOracleGetter.sol","file":"../../../interfaces/IPriceOracleGetter.sol","id":21700,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":6049,"src":"568:78:104","symbolAliases":[{"foreign":{"id":21699,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"576:18:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":21702,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":3987,"src":"647:56:104","symbolAliases":[{"foreign":{"id":21701,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"655:7:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPriceOracleSentinel.sol","file":"../../../interfaces/IPriceOracleSentinel.sol","id":21704,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":6108,"src":"704:82:104","symbolAliases":[{"foreign":{"id":21703,"name":"IPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"src":"712:20:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../../interfaces/IPoolAddressesProvider.sol","id":21706,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":5283,"src":"787:86:104","symbolAliases":[{"foreign":{"id":21705,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"795:22:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol","file":"../../../dependencies/openzeppelin/contracts/IAccessControl.sol","id":21708,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":1353,"src":"874:95:104","symbolAliases":[{"foreign":{"id":21707,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"src":"882:14:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":21710,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":14035,"src":"970:79:104","symbolAliases":[{"foreign":{"id":21709,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"978:20:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":21712,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":14546,"src":"1050:73:104","symbolAliases":[{"foreign":{"id":21711,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"1058:17:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":21714,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":14820,"src":"1124:45:104","symbolAliases":[{"foreign":{"id":21713,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"1132:6:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":21716,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":23814,"src":"1170:50:104","symbolAliases":[{"foreign":{"id":21715,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"1178:10:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":21718,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":23727,"src":"1221:58:104","symbolAliases":[{"foreign":{"id":21717,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"1229:14:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":21720,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":24228,"src":"1280:49:104","symbolAliases":[{"foreign":{"id":21719,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"1288:9:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":21722,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":20972,"src":"1330:48:104","symbolAliases":[{"foreign":{"id":21721,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1338:12:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/GenericLogic.sol","file":"./GenericLogic.sol","id":21724,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":18450,"src":"1379:48:104","symbolAliases":[{"foreign":{"id":21723,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1387:12:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":21726,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":1967,"src":"1428:83:104","symbolAliases":[{"foreign":{"id":21725,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"1436:8:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"../../tokenization/base/IncentivizedERC20.sol","id":21728,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23503,"sourceUnit":31301,"src":"1512:80:104","symbolAliases":[{"foreign":{"id":21727,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"1520:17:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ValidationLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":21729,"nodeType":"StructuredDocumentation","src":"1594:136:104","text":" @title ReserveLogic library\n @author Aave\n @notice Implements functions to validate the different actions of the protocol"},"fullyImplemented":true,"id":23502,"linearizedBaseContracts":[23502],"name":"ValidationLogic","nameLocation":"1739:15:104","nodeType":"ContractDefinition","nodes":[{"id":21733,"libraryName":{"id":21730,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1765:12:104"},"nodeType":"UsingForDirective","src":"1759:45:104","typeName":{"id":21732,"nodeType":"UserDefinedTypeName","pathNode":{"id":21731,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1782:21:104"},"referencedDeclaration":23909,"src":"1782:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":21736,"libraryName":{"id":21734,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1813:10:104"},"nodeType":"UsingForDirective","src":"1807:29:104","typeName":{"id":21735,"name":"uint256","nodeType":"ElementaryTypeName","src":"1828:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":21739,"libraryName":{"id":21737,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1845:14:104"},"nodeType":"UsingForDirective","src":"1839:33:104","typeName":{"id":21738,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":21742,"libraryName":{"id":21740,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1881:8:104"},"nodeType":"UsingForDirective","src":"1875:27:104","typeName":{"id":21741,"name":"uint256","nodeType":"ElementaryTypeName","src":"1894:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":21746,"libraryName":{"id":21743,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1911:13:104"},"nodeType":"UsingForDirective","src":"1905:31:104","typeName":{"id":21745,"nodeType":"UserDefinedTypeName","pathNode":{"id":21744,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1929:6:104"},"referencedDeclaration":1442,"src":"1929:6:104","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":21750,"libraryName":{"id":21747,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1945:20:104"},"nodeType":"UsingForDirective","src":"1939:65:104","typeName":{"id":21749,"nodeType":"UserDefinedTypeName","pathNode":{"id":21748,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1970:33:104"},"referencedDeclaration":23912,"src":"1970:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":21754,"libraryName":{"id":21751,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"2013:17:104"},"nodeType":"UsingForDirective","src":"2007:59:104","typeName":{"id":21753,"nodeType":"UserDefinedTypeName","pathNode":{"id":21752,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"2035:30:104"},"referencedDeclaration":23916,"src":"2035:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":21757,"libraryName":{"id":21755,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":722,"src":"2075:7:104"},"nodeType":"UsingForDirective","src":"2069:26:104","typeName":{"id":21756,"name":"address","nodeType":"ElementaryTypeName","src":"2087:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"constant":true,"functionSelector":"abfcc86a","id":21760,"mutability":"constant","name":"REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD","nameLocation":"2271:37:104","nodeType":"VariableDeclaration","scope":23502,"src":"2247:69:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21758,"name":"uint256","nodeType":"ElementaryTypeName","src":"2247:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e396534","id":21759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2311:5:104","typeDescriptions":{"typeIdentifier":"t_rational_9000_by_1","typeString":"int_const 9000"},"value":"0.9e4"},"visibility":"public"},{"constant":true,"functionSelector":"561cbec9","id":21763,"mutability":"constant","name":"MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nameLocation":"2443:43:104","nodeType":"VariableDeclaration","scope":23502,"src":"2419:77:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21761,"name":"uint256","nodeType":"ElementaryTypeName","src":"2419:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e3935653138","id":21762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2489:7:104","typeDescriptions":{"typeIdentifier":"t_rational_950000000000000000_by_1","typeString":"int_const 950000000000000000"},"value":"0.95e18"},"visibility":"public"},{"constant":true,"documentation":{"id":21764,"nodeType":"StructuredDocumentation","src":"2501:111:104","text":" @dev Minimum health factor to consider a user position healthy\n A value of 1e18 results in 1"},"functionSelector":"c3525c28","id":21767,"mutability":"constant","name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nameLocation":"2639:35:104","nodeType":"VariableDeclaration","scope":23502,"src":"2615:66:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21765,"name":"uint256","nodeType":"ElementaryTypeName","src":"2615:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":21766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2677:4:104","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"public"},{"constant":true,"documentation":{"id":21768,"nodeType":"StructuredDocumentation","src":"2686:98:104","text":" @dev Role identifier for the role allowed to supply isolated reserves as collateral"},"functionSelector":"2b0139fa","id":21773,"mutability":"constant","name":"ISOLATED_COLLATERAL_SUPPLIER_ROLE","nameLocation":"2811:33:104","nodeType":"VariableDeclaration","scope":23502,"src":"2787:105:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21769,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2787:7:104","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"49534f4c415445445f434f4c4c41544552414c5f535550504c494552","id":21771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2861:30:104","typeDescriptions":{"typeIdentifier":"t_stringliteral_d1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782","typeString":"literal_string \"ISOLATED_COLLATERAL_SUPPLIER\""},"value":"ISOLATED_COLLATERAL_SUPPLIER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_d1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782","typeString":"literal_string \"ISOLATED_COLLATERAL_SUPPLIER\""}],"id":21770,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2851:9:104","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":21772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2851:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"body":{"id":21870,"nodeType":"Block","src":"3203:709:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21786,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21782,"src":"3217:6:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":21787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3217:11:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21789,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3230:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":14626,"src":"3230:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21785,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3209:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3209:43:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21792,"nodeType":"ExpressionStatement","src":"3209:43:104"},{"assignments":[21794,21796,null,null,21798],"declarations":[{"constant":false,"id":21794,"mutability":"mutable","name":"isActive","nameLocation":"3265:8:104","nodeType":"VariableDeclaration","scope":21870,"src":"3260:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21793,"name":"bool","nodeType":"ElementaryTypeName","src":"3260:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21796,"mutability":"mutable","name":"isFrozen","nameLocation":"3280:8:104","nodeType":"VariableDeclaration","scope":21870,"src":"3275:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21795,"name":"bool","nodeType":"ElementaryTypeName","src":"3275:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,{"constant":false,"id":21798,"mutability":"mutable","name":"isPaused","nameLocation":"3299:8:104","nodeType":"VariableDeclaration","scope":21870,"src":"3294:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21797,"name":"bool","nodeType":"ElementaryTypeName","src":"3294:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":21803,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21799,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21777,"src":"3311:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"3311:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":21801,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"3311:56:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":21802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3311:58:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"3259:110:104"},{"expression":{"arguments":[{"id":21805,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21794,"src":"3383:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21806,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3393:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"3393:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21804,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3375:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3375:42:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21809,"nodeType":"ExpressionStatement","src":"3375:42:104"},{"expression":{"arguments":[{"id":21812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3431:9:104","subExpression":{"id":21811,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21798,"src":"3432:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21813,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3442:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"3442:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21810,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3423:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3423:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21816,"nodeType":"ExpressionStatement","src":"3423:41:104"},{"expression":{"arguments":[{"id":21819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3478:9:104","subExpression":{"id":21818,"name":"isFrozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21796,"src":"3479:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21820,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3489:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_FROZEN","nodeType":"MemberAccess","referencedDeclaration":14632,"src":"3489:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21817,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3470:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3470:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21823,"nodeType":"ExpressionStatement","src":"3470:41:104"},{"assignments":[21825],"declarations":[{"constant":false,"id":21825,"mutability":"mutable","name":"supplyCap","nameLocation":"3526:9:104","nodeType":"VariableDeclaration","scope":21870,"src":"3518:17:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21824,"name":"uint256","nodeType":"ElementaryTypeName","src":"3518:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21830,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21826,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21777,"src":"3538:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"3538:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":21828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSupplyCap","nodeType":"MemberAccess","referencedDeclaration":13616,"src":"3538:46:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":21829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3538:48:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3518:68:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21832,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21825,"src":"3607:9:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3620:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3607:14:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":21849,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21777,"src":"3746:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":23949,"src":"3746:31:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":21836,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21777,"src":"3643:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"3643:26:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21835,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"3635:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3986_$","typeString":"type(contract IAToken)"}},"id":21838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3635:35:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3986","typeString":"contract IAToken"}},"id":21839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledTotalSupply","nodeType":"MemberAccess","referencedDeclaration":6179,"src":"3635:53:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":21840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3635:55:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":21843,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21780,"src":"3711:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":21844,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"3711:25:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":21842,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3703:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21841,"name":"uint256","nodeType":"ElementaryTypeName","src":"3703:7:104","typeDescriptions":{}}},"id":21845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3703:34:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3635:102:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":21847,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3634:104:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"3634:111:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":21851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3634:144:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":21852,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21782,"src":"3781:6:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3634:153:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":21854,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3633:155:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21855,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21825,"src":"3800:9:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":21856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3813:2:104","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21857,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21777,"src":"3819:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"3819:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":21859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":13110,"src":"3819:45:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":21860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3819:47:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3813:53:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":21862,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3812:55:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3800:67:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3633:234:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3607:260:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21866,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3875:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"SUPPLY_CAP_EXCEEDED","nodeType":"MemberAccess","referencedDeclaration":14698,"src":"3875:26:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21831,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3592:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3592:315:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21869,"nodeType":"ExpressionStatement","src":"3592:315:104"}]},"documentation":{"id":21774,"nodeType":"StructuredDocumentation","src":"2897:150:104","text":" @notice Validates a supply action.\n @param reserveCache The cached data of the reserve\n @param amount The amount to be supplied"},"id":21871,"implemented":true,"kind":"function","modifiers":[],"name":"validateSupply","nameLocation":"3059:14:104","nodeType":"FunctionDefinition","parameters":{"id":21783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21777,"mutability":"mutable","name":"reserveCache","nameLocation":"3109:12:104","nodeType":"VariableDeclaration","scope":21871,"src":"3079:42:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":21776,"nodeType":"UserDefinedTypeName","pathNode":{"id":21775,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"3079:22:104"},"referencedDeclaration":23973,"src":"3079:22:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":21780,"mutability":"mutable","name":"reserve","nameLocation":"3157:7:104","nodeType":"VariableDeclaration","scope":21871,"src":"3127:37:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":21779,"nodeType":"UserDefinedTypeName","pathNode":{"id":21778,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"3127:21:104"},"referencedDeclaration":23909,"src":"3127:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":21782,"mutability":"mutable","name":"amount","nameLocation":"3178:6:104","nodeType":"VariableDeclaration","scope":21871,"src":"3170:14:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21781,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3073:115:104"},"returnParameters":{"id":21784,"nodeType":"ParameterList","parameters":[],"src":"3203:0:104"},"scope":23502,"src":"3050:862:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21920,"nodeType":"Block","src":"4257:317:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21883,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21877,"src":"4271:6:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":21884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4281:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4271:11:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21886,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4284:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":14626,"src":"4284:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21882,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4263:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4263:43:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21889,"nodeType":"ExpressionStatement","src":"4263:43:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21891,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21877,"src":"4320:6:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":21892,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21879,"src":"4330:11:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4320:21:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21894,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4343:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NOT_ENOUGH_AVAILABLE_USER_BALANCE","nodeType":"MemberAccess","referencedDeclaration":14644,"src":"4343:40:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21890,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4312:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4312:72:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21897,"nodeType":"ExpressionStatement","src":"4312:72:104"},{"assignments":[21899,null,null,null,21901],"declarations":[{"constant":false,"id":21899,"mutability":"mutable","name":"isActive","nameLocation":"4397:8:104","nodeType":"VariableDeclaration","scope":21920,"src":"4392:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21898,"name":"bool","nodeType":"ElementaryTypeName","src":"4392:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,{"constant":false,"id":21901,"mutability":"mutable","name":"isPaused","nameLocation":"4418:8:104","nodeType":"VariableDeclaration","scope":21920,"src":"4413:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21900,"name":"bool","nodeType":"ElementaryTypeName","src":"4413:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":21906,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21902,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21875,"src":"4430:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":21903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"4430:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":21904,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"4430:42:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":21905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4430:44:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"4391:83:104"},{"expression":{"arguments":[{"id":21908,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21899,"src":"4488:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21909,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4498:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"4498:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21907,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4480:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4480:42:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21912,"nodeType":"ExpressionStatement","src":"4480:42:104"},{"expression":{"arguments":[{"id":21915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4536:9:104","subExpression":{"id":21914,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21901,"src":"4537:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21916,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4547:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"4547:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21913,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4528:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4528:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21919,"nodeType":"ExpressionStatement","src":"4528:41:104"}]},"documentation":{"id":21872,"nodeType":"StructuredDocumentation","src":"3916:201:104","text":" @notice Validates a withdraw action.\n @param reserveCache The cached data of the reserve\n @param amount The amount to be withdrawn\n @param userBalance The balance of the user"},"id":21921,"implemented":true,"kind":"function","modifiers":[],"name":"validateWithdraw","nameLocation":"4129:16:104","nodeType":"FunctionDefinition","parameters":{"id":21880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21875,"mutability":"mutable","name":"reserveCache","nameLocation":"4181:12:104","nodeType":"VariableDeclaration","scope":21921,"src":"4151:42:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":21874,"nodeType":"UserDefinedTypeName","pathNode":{"id":21873,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"4151:22:104"},"referencedDeclaration":23973,"src":"4151:22:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":21877,"mutability":"mutable","name":"amount","nameLocation":"4207:6:104","nodeType":"VariableDeclaration","scope":21921,"src":"4199:14:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21876,"name":"uint256","nodeType":"ElementaryTypeName","src":"4199:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21879,"mutability":"mutable","name":"userBalance","nameLocation":"4227:11:104","nodeType":"VariableDeclaration","scope":21921,"src":"4219:19:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21878,"name":"uint256","nodeType":"ElementaryTypeName","src":"4219:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4145:97:104"},"returnParameters":{"id":21881,"nodeType":"ParameterList","parameters":[],"src":"4257:0:104"},"scope":23502,"src":"4120:454:104","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"ValidationLogic.ValidateBorrowLocalVars","id":21962,"members":[{"constant":false,"id":21923,"mutability":"mutable","name":"currentLtv","nameLocation":"4623:10:104","nodeType":"VariableDeclaration","scope":21962,"src":"4615:18:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21922,"name":"uint256","nodeType":"ElementaryTypeName","src":"4615:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21925,"mutability":"mutable","name":"collateralNeededInBaseCurrency","nameLocation":"4647:30:104","nodeType":"VariableDeclaration","scope":21962,"src":"4639:38:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21924,"name":"uint256","nodeType":"ElementaryTypeName","src":"4639:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21927,"mutability":"mutable","name":"userCollateralInBaseCurrency","nameLocation":"4691:28:104","nodeType":"VariableDeclaration","scope":21962,"src":"4683:36:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21926,"name":"uint256","nodeType":"ElementaryTypeName","src":"4683:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21929,"mutability":"mutable","name":"userDebtInBaseCurrency","nameLocation":"4733:22:104","nodeType":"VariableDeclaration","scope":21962,"src":"4725:30:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21928,"name":"uint256","nodeType":"ElementaryTypeName","src":"4725:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21931,"mutability":"mutable","name":"availableLiquidity","nameLocation":"4769:18:104","nodeType":"VariableDeclaration","scope":21962,"src":"4761:26:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21930,"name":"uint256","nodeType":"ElementaryTypeName","src":"4761:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21933,"mutability":"mutable","name":"healthFactor","nameLocation":"4801:12:104","nodeType":"VariableDeclaration","scope":21962,"src":"4793:20:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21932,"name":"uint256","nodeType":"ElementaryTypeName","src":"4793:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21935,"mutability":"mutable","name":"totalDebt","nameLocation":"4827:9:104","nodeType":"VariableDeclaration","scope":21962,"src":"4819:17:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21934,"name":"uint256","nodeType":"ElementaryTypeName","src":"4819:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21937,"mutability":"mutable","name":"totalSupplyVariableDebt","nameLocation":"4850:23:104","nodeType":"VariableDeclaration","scope":21962,"src":"4842:31:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21936,"name":"uint256","nodeType":"ElementaryTypeName","src":"4842:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21939,"mutability":"mutable","name":"reserveDecimals","nameLocation":"4887:15:104","nodeType":"VariableDeclaration","scope":21962,"src":"4879:23:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21938,"name":"uint256","nodeType":"ElementaryTypeName","src":"4879:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21941,"mutability":"mutable","name":"borrowCap","nameLocation":"4916:9:104","nodeType":"VariableDeclaration","scope":21962,"src":"4908:17:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21940,"name":"uint256","nodeType":"ElementaryTypeName","src":"4908:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21943,"mutability":"mutable","name":"amountInBaseCurrency","nameLocation":"4939:20:104","nodeType":"VariableDeclaration","scope":21962,"src":"4931:28:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21942,"name":"uint256","nodeType":"ElementaryTypeName","src":"4931:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21945,"mutability":"mutable","name":"assetUnit","nameLocation":"4973:9:104","nodeType":"VariableDeclaration","scope":21962,"src":"4965:17:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21944,"name":"uint256","nodeType":"ElementaryTypeName","src":"4965:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21947,"mutability":"mutable","name":"eModePriceSource","nameLocation":"4996:16:104","nodeType":"VariableDeclaration","scope":21962,"src":"4988:24:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21946,"name":"address","nodeType":"ElementaryTypeName","src":"4988:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21949,"mutability":"mutable","name":"siloedBorrowingAddress","nameLocation":"5026:22:104","nodeType":"VariableDeclaration","scope":21962,"src":"5018:30:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21948,"name":"address","nodeType":"ElementaryTypeName","src":"5018:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21951,"mutability":"mutable","name":"isActive","nameLocation":"5059:8:104","nodeType":"VariableDeclaration","scope":21962,"src":"5054:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21950,"name":"bool","nodeType":"ElementaryTypeName","src":"5054:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21953,"mutability":"mutable","name":"isFrozen","nameLocation":"5078:8:104","nodeType":"VariableDeclaration","scope":21962,"src":"5073:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21952,"name":"bool","nodeType":"ElementaryTypeName","src":"5073:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21955,"mutability":"mutable","name":"isPaused","nameLocation":"5097:8:104","nodeType":"VariableDeclaration","scope":21962,"src":"5092:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21954,"name":"bool","nodeType":"ElementaryTypeName","src":"5092:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21957,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"5116:16:104","nodeType":"VariableDeclaration","scope":21962,"src":"5111:21:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21956,"name":"bool","nodeType":"ElementaryTypeName","src":"5111:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21959,"mutability":"mutable","name":"stableRateBorrowingEnabled","nameLocation":"5143:26:104","nodeType":"VariableDeclaration","scope":21962,"src":"5138:31:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21958,"name":"bool","nodeType":"ElementaryTypeName","src":"5138:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21961,"mutability":"mutable","name":"siloedBorrowingEnabled","nameLocation":"5180:22:104","nodeType":"VariableDeclaration","scope":21962,"src":"5175:27:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21960,"name":"bool","nodeType":"ElementaryTypeName","src":"5175:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ValidateBorrowLocalVars","nameLocation":"4585:23:104","nodeType":"StructDefinition","scope":23502,"src":"4578:629:104","visibility":"public"},{"body":{"id":22476,"nodeType":"Block","src":"5816:6067:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21984,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"5830:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":21985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24162,"src":"5830:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":21986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5847:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5830:18:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21988,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5850:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":21989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":14626,"src":"5850:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21983,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5822:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5822:50:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21991,"nodeType":"ExpressionStatement","src":"5822:50:104"},{"assignments":[21994],"declarations":[{"constant":false,"id":21994,"mutability":"mutable","name":"vars","nameLocation":"5910:4:104","nodeType":"VariableDeclaration","scope":22476,"src":"5879:35:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars"},"typeName":{"id":21993,"nodeType":"UserDefinedTypeName","pathNode":{"id":21992,"name":"ValidateBorrowLocalVars","nodeType":"IdentifierPath","referencedDeclaration":21962,"src":"5879:23:104"},"referencedDeclaration":21962,"src":"5879:23:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_storage_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars"}},"visibility":"internal"}],"id":21995,"nodeType":"VariableDeclarationStatement","src":"5879:35:104"},{"expression":{"id":22013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":21996,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"5929:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":21998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":21951,"src":"5929:13:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21999,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"5950:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isFrozen","nodeType":"MemberAccess","referencedDeclaration":21953,"src":"5950:13:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22001,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"5971:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":21957,"src":"5971:21:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22003,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6000:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":21959,"src":"6000:31:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22005,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6039:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isPaused","nodeType":"MemberAccess","referencedDeclaration":21955,"src":"6039:13:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":22007,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5921:137:104","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":22008,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"6061:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22009,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"6061:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"6061:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22011,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"6061:49:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":22012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6061:51:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"5921:191:104","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22014,"nodeType":"ExpressionStatement","src":"5921:191:104"},{"expression":{"arguments":[{"expression":{"id":22016,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6127:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":21951,"src":"6127:13:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22018,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"6142:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"6142:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22015,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6119:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6119:47:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22021,"nodeType":"ExpressionStatement","src":"6119:47:104"},{"expression":{"arguments":[{"id":22025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6180:14:104","subExpression":{"expression":{"id":22023,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6181:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isPaused","nodeType":"MemberAccess","referencedDeclaration":21955,"src":"6181:13:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22026,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"6196:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"6196:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22022,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6172:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6172:46:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22029,"nodeType":"ExpressionStatement","src":"6172:46:104"},{"expression":{"arguments":[{"id":22033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6232:14:104","subExpression":{"expression":{"id":22031,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6233:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isFrozen","nodeType":"MemberAccess","referencedDeclaration":21953,"src":"6233:13:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22034,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"6248:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_FROZEN","nodeType":"MemberAccess","referencedDeclaration":14632,"src":"6248:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22030,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6224:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6224:46:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22037,"nodeType":"ExpressionStatement","src":"6224:46:104"},{"expression":{"arguments":[{"expression":{"id":22039,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6284:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22040,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":21957,"src":"6284:21:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22041,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"6307:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BORROWING_NOT_ENABLED","nodeType":"MemberAccess","referencedDeclaration":14638,"src":"6307:28:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22038,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6276:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6276:60:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22044,"nodeType":"ExpressionStatement","src":"6276:60:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22046,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"6358:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22047,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":24175,"src":"6358:26:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22050,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6396:1:104","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":22049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6388:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22048,"name":"address","nodeType":"ElementaryTypeName","src":"6388:7:104","typeDescriptions":{}}},"id":22051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6388:10:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6358:40:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":22054,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"6431:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22055,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":24175,"src":"6431:26:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22053,"name":"IPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6107,"src":"6410:20:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleSentinel_$6107_$","typeString":"type(contract IPriceOracleSentinel)"}},"id":22056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6410:48:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleSentinel_$6107","typeString":"contract IPriceOracleSentinel"}},"id":22057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isBorrowAllowed","nodeType":"MemberAccess","referencedDeclaration":6076,"src":"6410:64:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":22058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6410:66:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6358:118:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22060,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"6484:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PRICE_ORACLE_SENTINEL_CHECK_FAILED","nodeType":"MemberAccess","referencedDeclaration":14722,"src":"6484:41:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22045,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6343:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6343:188:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22063,"nodeType":"ExpressionStatement","src":"6343:188:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":22070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22065,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"6587:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22066,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24165,"src":"6587:23:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":22067,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"6614:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"6614:26:104","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22069,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"VARIABLE","nodeType":"MemberAccess","referencedDeclaration":23930,"src":"6614:35:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"6587:62:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":22076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22071,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"6661:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24165,"src":"6661:23:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":22073,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"6688:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"6688:26:104","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"6688:33:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"6661:60:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6587:134:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22078,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"6729:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_INTEREST_RATE_MODE_SELECTED","nodeType":"MemberAccess","referencedDeclaration":14647,"src":"6729:42:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22064,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6572:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6572:205:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22081,"nodeType":"ExpressionStatement","src":"6572:205:104"},{"expression":{"id":22090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22082,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6784:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveDecimals","nodeType":"MemberAccess","referencedDeclaration":21939,"src":"6784:20:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":22085,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"6807:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"6807:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22087,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"6807:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":13110,"src":"6807:52:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":22089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6807:54:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6784:77:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22091,"nodeType":"ExpressionStatement","src":"6784:77:104"},{"expression":{"id":22100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22092,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6867:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":21941,"src":"6867:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":22095,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"6884:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"6884:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"6884:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowCap","nodeType":"MemberAccess","referencedDeclaration":13564,"src":"6884:53:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":22099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6884:55:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6867:72:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22101,"nodeType":"ExpressionStatement","src":"6867:72:104"},{"id":22111,"nodeType":"UncheckedBlock","src":"6945:68:104","statements":[{"expression":{"id":22109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22102,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6963:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22104,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":21945,"src":"6963:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":22105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6980:2:104","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"id":22106,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"6986:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveDecimals","nodeType":"MemberAccess","referencedDeclaration":21939,"src":"6986:20:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6980:26:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6963:43:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22110,"nodeType":"ExpressionStatement","src":"6963:43:104"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22112,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"7023:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":21941,"src":"7023:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7041:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7023:19:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22158,"nodeType":"IfStatement","src":"7019:440:104","trueBody":{"id":22157,"nodeType":"Block","src":"7044:415:104","statements":[{"expression":{"id":22127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22116,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"7052:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalSupplyVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21937,"src":"7052:28:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":22123,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"7142:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"7142:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":23953,"src":"7142:43:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"expression":{"id":22119,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"7083:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"7083:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":23933,"src":"7083:42:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"7083:49:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":22126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7083:110:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7052:141:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22128,"nodeType":"ExpressionStatement","src":"7052:141:104"},{"expression":{"id":22141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22129,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"7202:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21935,"src":"7202:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":22132,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"7227:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"7227:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":23941,"src":"7227:39:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":22135,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"7277:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupplyVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21937,"src":"7277:28:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7227:78:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":22138,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"7316:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24162,"src":"7316:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7227:102:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7202:127:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22142,"nodeType":"ExpressionStatement","src":"7202:127:104"},{"id":22156,"nodeType":"UncheckedBlock","src":"7338:115:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22144,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"7366:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21935,"src":"7366:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22146,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"7384:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":21941,"src":"7384:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":22148,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"7401:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":21945,"src":"7401:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7384:31:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7366:49:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22152,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"7417:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BORROW_CAP_EXCEEDED","nodeType":"MemberAccess","referencedDeclaration":14695,"src":"7417:26:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22143,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7358:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7358:86:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22155,"nodeType":"ExpressionStatement","src":"7358:86:104"}]}]}},{"condition":{"expression":{"id":22159,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"7469:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22160,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeActive","nodeType":"MemberAccess","referencedDeclaration":24177,"src":"7469:26:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22200,"nodeType":"IfStatement","src":"7465:676:104","trueBody":{"id":22199,"nodeType":"Block","src":"7497:644:104","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":22162,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"7677:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22163,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"7677:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"7677:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22165,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowableInIsolation","nodeType":"MemberAccess","referencedDeclaration":13310,"src":"7677:65:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":22166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7677:67:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22167,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"7754:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ASSET_NOT_BORROWABLE_IN_ISOLATION","nodeType":"MemberAccess","referencedDeclaration":14725,"src":"7754:40:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22161,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7660:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7660:142:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22170,"nodeType":"ExpressionStatement","src":"7660:142:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":22191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":22172,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21968,"src":"7828:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":22175,"indexExpression":{"expression":{"id":22173,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"7841:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22174,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeCollateralAddress","nodeType":"MemberAccess","referencedDeclaration":24179,"src":"7841:37:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7828:51:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":22176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":23908,"src":"7828:74:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22177,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"7916:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22178,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24162,"src":"7916:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":22179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7944:2:104","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22180,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"7951:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22181,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveDecimals","nodeType":"MemberAccess","referencedDeclaration":21939,"src":"7951:20:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":22182,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"7974:20:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":22183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":12905,"src":"7974:42:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7951:65:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22185,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7950:67:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7944:73:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7916:101:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22188,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7915:103:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"7915:126:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":22190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7915:128:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7828:215:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":22192,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8057:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":24181,"src":"8057:31:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7828:260:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22195,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"8098:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_EXCEEDED","nodeType":"MemberAccess","referencedDeclaration":14704,"src":"8098:28:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22171,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7811:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7811:323:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22198,"nodeType":"ExpressionStatement","src":"7811:323:104"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":22204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22201,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8151:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24173,"src":"8151:24:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8179:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8151:29:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22229,"nodeType":"IfStatement","src":"8147:291:104","trueBody":{"id":22228,"nodeType":"Block","src":"8182:256:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":22206,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8207:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"8207:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"8207:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13824,"src":"8207:57:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":22210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8207:59:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22211,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8270:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24173,"src":"8270:24:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8207:87:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22214,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"8304:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_EMODE_CATEGORY","nodeType":"MemberAccess","referencedDeclaration":14719,"src":"8304:34:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22205,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8190:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8190:156:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22217,"nodeType":"ExpressionStatement","src":"8190:156:104"},{"expression":{"id":22226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22218,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"8354:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModePriceSource","nodeType":"MemberAccess","referencedDeclaration":21947,"src":"8354:21:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":22221,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21977,"src":"8378:15:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":22224,"indexExpression":{"expression":{"id":22222,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8394:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24173,"src":"8394:24:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8378:41:104","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":22225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceSource","nodeType":"MemberAccess","referencedDeclaration":23924,"src":"8378:53:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8354:77:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22227,"nodeType":"ExpressionStatement","src":"8354:77:104"}]}},{"expression":{"id":22259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":22230,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"8452:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22232,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21927,"src":"8452:33:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22233,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"8493:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21929,"src":"8493:27:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22235,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"8528:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentLtv","nodeType":"MemberAccess","referencedDeclaration":21923,"src":"8528:15:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,{"expression":{"id":22237,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"8559:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":21933,"src":"8559:17:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":22239,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8444:140:104","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$__$_t_uint256_$__$","typeString":"tuple(uint256,uint256,uint256,,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22242,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21968,"src":"8632:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22243,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21972,"src":"8652:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":22244,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21977,"src":"8672:15:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"expression":{"id":22247,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8758:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":24156,"src":"8758:17:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"expression":{"id":22249,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8800:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22250,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":24169,"src":"8800:20:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22251,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8836:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userAddress","nodeType":"MemberAccess","referencedDeclaration":24160,"src":"8836:18:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":22253,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8872:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22254,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":24171,"src":"8872:13:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":22255,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"8914:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22256,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":24173,"src":"8914:24:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":22245,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"8695:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateUserAccountDataParams","nodeType":"MemberAccess","referencedDeclaration":24150,"src":"8695:40:104","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateUserAccountDataParams_$24150_storage_ptr_$","typeString":"type(struct DataTypes.CalculateUserAccountDataParams storage pointer)"}},"id":22257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["userConfig","reservesCount","user","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"8695:252:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":22240,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"8587:12:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$18449_$","typeString":"type(library GenericLogic)"}},"id":22241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateUserAccountData","nodeType":"MemberAccess","referencedDeclaration":18307,"src":"8587:37:104","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,bool)"}},"id":22258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8587:366:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"src":"8444:509:104","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22260,"nodeType":"ExpressionStatement","src":"8444:509:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22262,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"8968:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21927,"src":"8968:33:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9005:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8968:38:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22266,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"9008:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_BALANCE_IS_ZERO","nodeType":"MemberAccess","referencedDeclaration":14650,"src":"9008:33:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22261,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8960:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8960:82:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22269,"nodeType":"ExpressionStatement","src":"8960:82:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22271,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9056:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLtv","nodeType":"MemberAccess","referencedDeclaration":21923,"src":"9056:15:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9075:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9056:20:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22275,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"9078:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LTV_VALIDATION_FAILED","nodeType":"MemberAccess","referencedDeclaration":14716,"src":"9078:28:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22270,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9048:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9048:59:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22278,"nodeType":"ExpressionStatement","src":"9048:59:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22280,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9129:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22281,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":21933,"src":"9129:17:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22282,"name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21767,"src":"9149:35:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9129:55:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22284,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"9192:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD","nodeType":"MemberAccess","referencedDeclaration":14653,"src":"9192:53:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22279,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9114:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9114:137:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22287,"nodeType":"ExpressionStatement","src":"9114:137:104"},{"expression":{"id":22312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22288,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9258:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amountInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21943,"src":"9258:25:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22296,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9349:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22297,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModePriceSource","nodeType":"MemberAccess","referencedDeclaration":21947,"src":"9349:21:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9382:1:104","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":22299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9374:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22298,"name":"address","nodeType":"ElementaryTypeName","src":"9374:7:104","typeDescriptions":{}}},"id":22301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9374:10:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9349:35:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":22305,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"9411:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24158,"src":"9411:12:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9349:74:104","trueExpression":{"expression":{"id":22303,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9387:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModePriceSource","nodeType":"MemberAccess","referencedDeclaration":21947,"src":"9387:21:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":22292,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"9311:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":24171,"src":"9311:13:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22291,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6048,"src":"9292:18:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$6048_$","typeString":"type(contract IPriceOracleGetter)"}},"id":22294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9292:33:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$6048","typeString":"contract IPriceOracleGetter"}},"id":22295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":6047,"src":"9292:47:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9292:139:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":22309,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"9440:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22310,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24162,"src":"9440:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9292:161:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9258:195:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22313,"nodeType":"ExpressionStatement","src":"9258:195:104"},{"id":22321,"nodeType":"UncheckedBlock","src":"9459:68:104","statements":[{"expression":{"id":22319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22314,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9477:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22316,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amountInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21943,"src":"9477:25:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"expression":{"id":22317,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9506:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22318,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":21945,"src":"9506:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9477:43:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22320,"nodeType":"ExpressionStatement","src":"9477:43:104"}]},{"expression":{"id":22335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22322,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9645:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralNeededInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21925,"src":"9645:35:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":22332,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9759:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22333,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLtv","nodeType":"MemberAccess","referencedDeclaration":21923,"src":"9759:15:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22325,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9684:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21929,"src":"9684:27:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":22327,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9714:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22328,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21943,"src":"9714:25:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9684:55:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22330,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9683:57:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentDiv","nodeType":"MemberAccess","referencedDeclaration":23725,"src":"9683:75:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":22334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9683:92:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9645:130:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22336,"nodeType":"ExpressionStatement","src":"9645:130:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22338,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9831:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralNeededInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21925,"src":"9831:35:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":22340,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"9870:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22341,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":21927,"src":"9870:33:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9831:72:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22343,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"9911:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_CANNOT_COVER_NEW_BORROW","nodeType":"MemberAccess","referencedDeclaration":14656,"src":"9911:41:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22337,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9816:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9816:142:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22346,"nodeType":"ExpressionStatement","src":"9816:142:104"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":22352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22347,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"10365:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":24165,"src":"10365:23:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":22349,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"10392:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"10392:26:104","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"10392:33:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"10365:60:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":" Following conditions need to be met if the user is borrowing at a stable rate:\n 1. Reserve must be enabled for stable rate borrowing\n 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\n    they are borrowing, to prevent abuses.\n 3. Users will be able to borrow only a portion of the total available liquidity","id":22429,"nodeType":"IfStatement","src":"10361:1001:104","trueBody":{"id":22428,"nodeType":"Block","src":"10427:935:104","statements":[{"expression":{"arguments":[{"expression":{"id":22354,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"10543:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22355,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":21959,"src":"10543:31:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22356,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"10576:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STABLE_BORROWING_NOT_ENABLED","nodeType":"MemberAccess","referencedDeclaration":14641,"src":"10576:35:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22353,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10535:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10535:77:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22359,"nodeType":"ExpressionStatement","src":"10535:77:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10638:69:104","subExpression":{"arguments":[{"expression":{"baseExpression":{"id":22364,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21968,"src":"10677:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":22367,"indexExpression":{"expression":{"id":22365,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"10690:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24158,"src":"10690:12:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10677:26:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":22368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"10677:29:104","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"expression":{"id":22361,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"10639:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22362,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":24156,"src":"10639:17:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":22363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14260,"src":"10639:37:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":22369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10639:68:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":22371,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"10721:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"10721:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22373,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"10721:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22374,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":12954,"src":"10721:47:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":22375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10721:49:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":22376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10774:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10721:54:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10638:137:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22379,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"10789:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22380,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24162,"src":"10789:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"id":22387,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"10857:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userAddress","nodeType":"MemberAccess","referencedDeclaration":24160,"src":"10857:18:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":22382,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"10812:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"10812:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22384,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"10812:33:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22381,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10805:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":22385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10805:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":22386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"10805:51:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10805:71:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10789:87:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10638:238:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22392,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"10886:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_SAME_AS_BORROWING_CURRENCY","nodeType":"MemberAccess","referencedDeclaration":14659,"src":"10886:44:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22360,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10621:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10621:317:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22395,"nodeType":"ExpressionStatement","src":"10621:317:104"},{"expression":{"id":22408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22396,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"10947:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22398,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":21931,"src":"10947:23:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":22404,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"11004:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"11004:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"11004:33:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":22400,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"10980:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24158,"src":"10980:12:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22399,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10973:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":22402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10973:20:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":22403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"10973:30:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10973:65:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10947:91:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22409,"nodeType":"ExpressionStatement","src":"10947:91:104"},{"assignments":[22411],"declarations":[{"constant":false,"id":22411,"mutability":"mutable","name":"maxLoanSizeStable","nameLocation":"11172:17:104","nodeType":"VariableDeclaration","scope":22428,"src":"11164:25:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22410,"name":"uint256","nodeType":"ElementaryTypeName","src":"11164:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22418,"initialValue":{"arguments":[{"expression":{"id":22415,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"11227:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxStableLoanPercent","nodeType":"MemberAccess","referencedDeclaration":24167,"src":"11227:27:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":22412,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"11192:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":21931,"src":"11192:23:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"11192:34:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":22417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11192:63:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11164:91:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22420,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"11272:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22421,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":24162,"src":"11272:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":22422,"name":"maxLoanSizeStable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22411,"src":"11289:17:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11272:34:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22424,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"11308:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE","nodeType":"MemberAccess","referencedDeclaration":14662,"src":"11308:46:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22419,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11264:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11264:91:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22427,"nodeType":"ExpressionStatement","src":"11264:91:104"}]}},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":22430,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"11372:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":24156,"src":"11372:17:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":22432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowingAny","nodeType":"MemberAccess","referencedDeclaration":14356,"src":"11372:32:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":22433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11372:34:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22475,"nodeType":"IfStatement","src":"11368:511:104","trueBody":{"id":22474,"nodeType":"Block","src":"11408:471:104","statements":[{"expression":{"id":22446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":22434,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"11417:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"siloedBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":21961,"src":"11417:27:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22437,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"11446:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"siloedBorrowingAddress","nodeType":"MemberAccess","referencedDeclaration":21949,"src":"11446:27:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":22439,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11416:58:104","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22443,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21968,"src":"11537:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22444,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21972,"src":"11551:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}],"expression":{"expression":{"id":22440,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"11477:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":24156,"src":"11477:26:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":22442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowingState","nodeType":"MemberAccess","referencedDeclaration":14497,"src":"11477:59:104","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$returns$_t_bool_$_t_address_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address)) view returns (bool,address)"}},"id":22445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11477:87:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"src":"11416:148:104","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22447,"nodeType":"ExpressionStatement","src":"11416:148:104"},{"condition":{"expression":{"id":22448,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"11577:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"siloedBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":21961,"src":"11577:27:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22472,"nodeType":"Block","src":"11718:155:104","statements":[{"expression":{"arguments":[{"id":22467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11747:62:104","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":22462,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"11748:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"11748:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"11748:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":13360,"src":"11748:59:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":22466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11748:61:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22468,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"11821:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"SILOED_BORROWING_VIOLATION","nodeType":"MemberAccess","referencedDeclaration":14812,"src":"11821:33:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22461,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11728:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11728:136:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22471,"nodeType":"ExpressionStatement","src":"11728:136:104"}]},"id":22473,"nodeType":"IfStatement","src":"11573:300:104","trueBody":{"id":22460,"nodeType":"Block","src":"11606:106:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22451,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"11624:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$21962_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":22452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"siloedBorrowingAddress","nodeType":"MemberAccess","referencedDeclaration":21949,"src":"11624:27:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22453,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21980,"src":"11655:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":22454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":24158,"src":"11655:12:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11624:43:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22456,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"11669:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"SILOED_BORROWING_VIOLATION","nodeType":"MemberAccess","referencedDeclaration":14812,"src":"11669:33:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22450,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11616:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11616:87:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22459,"nodeType":"ExpressionStatement","src":"11616:87:104"}]}}]}}]},"documentation":{"id":21963,"nodeType":"StructuredDocumentation","src":"5211:317:104","text":" @notice Validates a borrow action.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param params Additional params needed for the validation"},"id":22477,"implemented":true,"kind":"function","modifiers":[],"name":"validateBorrow","nameLocation":"5540:14:104","nodeType":"FunctionDefinition","parameters":{"id":21981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21968,"mutability":"mutable","name":"reservesData","nameLocation":"5610:12:104","nodeType":"VariableDeclaration","scope":22477,"src":"5560:62:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":21967,"keyType":{"id":21964,"name":"address","nodeType":"ElementaryTypeName","src":"5568:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5560:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":21966,"nodeType":"UserDefinedTypeName","pathNode":{"id":21965,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"5579:21:104"},"referencedDeclaration":23909,"src":"5579:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":21972,"mutability":"mutable","name":"reservesList","nameLocation":"5664:12:104","nodeType":"VariableDeclaration","scope":22477,"src":"5628:48:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":21971,"keyType":{"id":21969,"name":"uint256","nodeType":"ElementaryTypeName","src":"5636:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5628:27:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":21970,"name":"address","nodeType":"ElementaryTypeName","src":"5647:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":21977,"mutability":"mutable","name":"eModeCategories","nameLocation":"5732:15:104","nodeType":"VariableDeclaration","scope":22477,"src":"5682:65:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":21976,"keyType":{"id":21973,"name":"uint8","nodeType":"ElementaryTypeName","src":"5690:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"5682:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":21975,"nodeType":"UserDefinedTypeName","pathNode":{"id":21974,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"5699:23:104"},"referencedDeclaration":23927,"src":"5699:23:104","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":21980,"mutability":"mutable","name":"params","nameLocation":"5791:6:104","nodeType":"VariableDeclaration","scope":22477,"src":"5753:44:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams"},"typeName":{"id":21979,"nodeType":"UserDefinedTypeName","pathNode":{"id":21978,"name":"DataTypes.ValidateBorrowParams","nodeType":"IdentifierPath","referencedDeclaration":24182,"src":"5753:30:104"},"referencedDeclaration":24182,"src":"5753:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$24182_storage_ptr","typeString":"struct DataTypes.ValidateBorrowParams"}},"visibility":"internal"}],"src":"5554:247:104"},"returnParameters":{"id":21982,"nodeType":"ParameterList","parameters":[],"src":"5816:0:104"},"scope":23502,"src":"5531:6352:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":22568,"nodeType":"Block","src":"12584:612:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22496,"name":"amountSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22483,"src":"12598:10:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12612:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12598:15:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22499,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12615:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":14626,"src":"12615:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22495,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12590:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12590:47:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22502,"nodeType":"ExpressionStatement","src":"12590:47:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22504,"name":"amountSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22483,"src":"12658:10:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":22507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12677:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":22506,"name":"uint256","nodeType":"ElementaryTypeName","src":"12677:7:104","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":22505,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12672:4:104","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":22508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12672:13:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":22509,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"12672:17:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12658:31:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22511,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12693:3:104","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12693:10:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":22513,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22488,"src":"12707:10:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12693:24:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12658:59:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22516,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12725:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF","nodeType":"MemberAccess","referencedDeclaration":14668,"src":"12725:44:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22503,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12643:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12643:132:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22519,"nodeType":"ExpressionStatement","src":"12643:132:104"},{"assignments":[22521,null,null,null,22523],"declarations":[{"constant":false,"id":22521,"mutability":"mutable","name":"isActive","nameLocation":"12788:8:104","nodeType":"VariableDeclaration","scope":22568,"src":"12783:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22520,"name":"bool","nodeType":"ElementaryTypeName","src":"12783:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,{"constant":false,"id":22523,"mutability":"mutable","name":"isPaused","nameLocation":"12809:8:104","nodeType":"VariableDeclaration","scope":22568,"src":"12804:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22522,"name":"bool","nodeType":"ElementaryTypeName","src":"12804:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":22528,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":22524,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22481,"src":"12821:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"12821:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"12821:42:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":22527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12821:44:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"12782:83:104"},{"expression":{"arguments":[{"id":22530,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22521,"src":"12879:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22531,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12889:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"12889:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22529,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12871:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12871:42:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22534,"nodeType":"ExpressionStatement","src":"12871:42:104"},{"expression":{"arguments":[{"id":22537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12927:9:104","subExpression":{"id":22536,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22523,"src":"12928:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22538,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12938:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"12938:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22535,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12919:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12919:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22541,"nodeType":"ExpressionStatement","src":"12919:41:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22543,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22490,"src":"12983:10:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12997:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12983:15:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":22550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22546,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22486,"src":"13002:16:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":22547,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"13022:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"13022:26:104","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"13022:33:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"13002:53:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12983:72:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":22552,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12982:74:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22553,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22492,"src":"13069:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13085:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13069:17:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":22560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22556,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22486,"src":"13090:16:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":22557,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"13110:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"13110:26:104","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22559,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"VARIABLE","nodeType":"MemberAccess","referencedDeclaration":23930,"src":"13110:35:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"13090:55:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13069:76:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":22562,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13068:78:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12982:164:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22564,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"13154:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_DEBT_OF_SELECTED_TYPE","nodeType":"MemberAccess","referencedDeclaration":14665,"src":"13154:31:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22542,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12967:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12967:224:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22567,"nodeType":"ExpressionStatement","src":"12967:224:104"}]},"documentation":{"id":22478,"nodeType":"StructuredDocumentation","src":"11887:458:104","text":" @notice Validates a repay action.\n @param reserveCache The cached data of the reserve\n @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\n @param interestRateMode The interest rate mode of the debt being repaid\n @param onBehalfOf The address of the user msg.sender is repaying for\n @param stableDebt The borrow balance of the user\n @param variableDebt The borrow balance of the user"},"id":22569,"implemented":true,"kind":"function","modifiers":[],"name":"validateRepay","nameLocation":"12357:13:104","nodeType":"FunctionDefinition","parameters":{"id":22493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22481,"mutability":"mutable","name":"reserveCache","nameLocation":"12406:12:104","nodeType":"VariableDeclaration","scope":22569,"src":"12376:42:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":22480,"nodeType":"UserDefinedTypeName","pathNode":{"id":22479,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"12376:22:104"},"referencedDeclaration":23973,"src":"12376:22:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":22483,"mutability":"mutable","name":"amountSent","nameLocation":"12432:10:104","nodeType":"VariableDeclaration","scope":22569,"src":"12424:18:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22482,"name":"uint256","nodeType":"ElementaryTypeName","src":"12424:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22486,"mutability":"mutable","name":"interestRateMode","nameLocation":"12475:16:104","nodeType":"VariableDeclaration","scope":22569,"src":"12448:43:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":22485,"nodeType":"UserDefinedTypeName","pathNode":{"id":22484,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"12448:26:104"},"referencedDeclaration":23931,"src":"12448:26:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":22488,"mutability":"mutable","name":"onBehalfOf","nameLocation":"12505:10:104","nodeType":"VariableDeclaration","scope":22569,"src":"12497:18:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22487,"name":"address","nodeType":"ElementaryTypeName","src":"12497:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22490,"mutability":"mutable","name":"stableDebt","nameLocation":"12529:10:104","nodeType":"VariableDeclaration","scope":22569,"src":"12521:18:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22489,"name":"uint256","nodeType":"ElementaryTypeName","src":"12521:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22492,"mutability":"mutable","name":"variableDebt","nameLocation":"12553:12:104","nodeType":"VariableDeclaration","scope":22569,"src":"12545:20:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22491,"name":"uint256","nodeType":"ElementaryTypeName","src":"12545:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12370:199:104"},"returnParameters":{"id":22494,"nodeType":"ParameterList","parameters":[],"src":"12584:0:104"},"scope":23502,"src":"12348:848:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":22695,"nodeType":"Block","src":"13917:1363:104","statements":[{"assignments":[22590,22592,null,22594,22596],"declarations":[{"constant":false,"id":22590,"mutability":"mutable","name":"isActive","nameLocation":"13929:8:104","nodeType":"VariableDeclaration","scope":22695,"src":"13924:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22589,"name":"bool","nodeType":"ElementaryTypeName","src":"13924:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":22592,"mutability":"mutable","name":"isFrozen","nameLocation":"13944:8:104","nodeType":"VariableDeclaration","scope":22695,"src":"13939:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22591,"name":"bool","nodeType":"ElementaryTypeName","src":"13939:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,{"constant":false,"id":22594,"mutability":"mutable","name":"stableRateEnabled","nameLocation":"13961:17:104","nodeType":"VariableDeclaration","scope":22695,"src":"13956:22:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22593,"name":"bool","nodeType":"ElementaryTypeName","src":"13956:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":22596,"mutability":"mutable","name":"isPaused","nameLocation":"13985:8:104","nodeType":"VariableDeclaration","scope":22695,"src":"13980:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22595,"name":"bool","nodeType":"ElementaryTypeName","src":"13980:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":22601,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":22597,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22576,"src":"13997:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"13997:40:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"13997:56:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":22600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13997:58:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"13923:132:104"},{"expression":{"arguments":[{"id":22603,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22590,"src":"14069:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22604,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"14079:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"14079:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22602,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14061:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14061:42:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22607,"nodeType":"ExpressionStatement","src":"14061:42:104"},{"expression":{"arguments":[{"id":22610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14117:9:104","subExpression":{"id":22609,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22596,"src":"14118:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22611,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"14128:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"14128:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22608,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14109:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14109:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22614,"nodeType":"ExpressionStatement","src":"14109:41:104"},{"expression":{"arguments":[{"id":22617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14164:9:104","subExpression":{"id":22616,"name":"isFrozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22592,"src":"14165:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22618,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"14175:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_FROZEN","nodeType":"MemberAccess","referencedDeclaration":14632,"src":"14175:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22615,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14156:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14156:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22621,"nodeType":"ExpressionStatement","src":"14156:41:104"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":22626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22622,"name":"currentRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22586,"src":"14208:15:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":22623,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"14227:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"14227:26:104","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":23929,"src":"14227:33:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"14208:52:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"id":22640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22636,"name":"currentRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22586,"src":"14346:15:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":22637,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"14365:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"14365:26:104","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22639,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"VARIABLE","nodeType":"MemberAccess","referencedDeclaration":23930,"src":"14365:35:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"src":"14346:54:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22692,"nodeType":"Block","src":"15211:65:104","statements":[{"expression":{"arguments":[{"expression":{"id":22688,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"15226:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_INTEREST_RATE_MODE_SELECTED","nodeType":"MemberAccess","referencedDeclaration":14647,"src":"15226:42:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22687,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"15219:6:104","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":22690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15219:50:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22691,"nodeType":"ExpressionStatement","src":"15219:50:104"}]},"id":22693,"nodeType":"IfStatement","src":"14342:934:104","trueBody":{"id":22686,"nodeType":"Block","src":"14402:803:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22642,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22583,"src":"14418:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14434:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14418:17:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22645,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"14437:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_OUTSTANDING_VARIABLE_DEBT","nodeType":"MemberAccess","referencedDeclaration":14674,"src":"14437:35:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22641,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14410:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14410:63:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22648,"nodeType":"ExpressionStatement","src":"14410:63:104"},{"documentation":" user wants to swap to stable, before swapping we need to ensure that\n 1. stable borrow rate is enabled on the reserve\n 2. user is not trying to abuse the reserve by supplying\n more collateral than he is borrowing, artificially lowering\n the interest rate, borrowing at variable, and switching to stable","expression":{"arguments":[{"id":22650,"name":"stableRateEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22594,"src":"14853:17:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22651,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"14872:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STABLE_BORROWING_NOT_ENABLED","nodeType":"MemberAccess","referencedDeclaration":14641,"src":"14872:35:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22649,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14845:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14845:63:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22654,"nodeType":"ExpressionStatement","src":"14845:63:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14934:43:104","subExpression":{"arguments":[{"expression":{"id":22658,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22573,"src":"14966:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":22659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"14966:10:104","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":22656,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22579,"src":"14935:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":22657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14260,"src":"14935:30:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":22660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14935:42:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":22662,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22576,"src":"14991:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"14991:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":12954,"src":"14991:40:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":22665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14991:42:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":22666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15037:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14991:47:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14934:104:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22669,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22581,"src":"15052:10:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22670,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22583,"src":"15065:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15052:25:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"id":22677,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15125:3:104","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"15125:10:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":22673,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22576,"src":"15087:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"15087:26:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22672,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"15080:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":22675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15080:34:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":22676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"15080:44:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15080:56:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15052:84:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14934:202:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22682,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"15146:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_SAME_AS_BORROWING_CURRENCY","nodeType":"MemberAccess","referencedDeclaration":14659,"src":"15146:44:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22655,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14917:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14917:281:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22685,"nodeType":"ExpressionStatement","src":"14917:281:104"}]}},"id":22694,"nodeType":"IfStatement","src":"14204:1072:104","trueBody":{"id":22635,"nodeType":"Block","src":"14262:74:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22628,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22581,"src":"14278:10:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14292:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14278:15:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22631,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"14295:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_OUTSTANDING_STABLE_DEBT","nodeType":"MemberAccess","referencedDeclaration":14671,"src":"14295:33:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22627,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14270:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14270:59:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22634,"nodeType":"ExpressionStatement","src":"14270:59:104"}]}}]},"documentation":{"id":22570,"nodeType":"StructuredDocumentation","src":"13200:422:104","text":" @notice Validates a swap of borrow rate mode.\n @param reserve The reserve state on which the user is swapping the rate\n @param reserveCache The cached data of the reserve\n @param userConfig The user reserves configuration\n @param stableDebt The stable debt of the user\n @param variableDebt The variable debt of the user\n @param currentRateMode The rate mode of the debt being swapped"},"id":22696,"implemented":true,"kind":"function","modifiers":[],"name":"validateSwapRateMode","nameLocation":"13634:20:104","nodeType":"FunctionDefinition","parameters":{"id":22587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22573,"mutability":"mutable","name":"reserve","nameLocation":"13690:7:104","nodeType":"VariableDeclaration","scope":22696,"src":"13660:37:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":22572,"nodeType":"UserDefinedTypeName","pathNode":{"id":22571,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"13660:21:104"},"referencedDeclaration":23909,"src":"13660:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":22576,"mutability":"mutable","name":"reserveCache","nameLocation":"13733:12:104","nodeType":"VariableDeclaration","scope":22696,"src":"13703:42:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":22575,"nodeType":"UserDefinedTypeName","pathNode":{"id":22574,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"13703:22:104"},"referencedDeclaration":23973,"src":"13703:22:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":22579,"mutability":"mutable","name":"userConfig","nameLocation":"13790:10:104","nodeType":"VariableDeclaration","scope":22696,"src":"13751:49:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":22578,"nodeType":"UserDefinedTypeName","pathNode":{"id":22577,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"13751:30:104"},"referencedDeclaration":23916,"src":"13751:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":22581,"mutability":"mutable","name":"stableDebt","nameLocation":"13814:10:104","nodeType":"VariableDeclaration","scope":22696,"src":"13806:18:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22580,"name":"uint256","nodeType":"ElementaryTypeName","src":"13806:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22583,"mutability":"mutable","name":"variableDebt","nameLocation":"13838:12:104","nodeType":"VariableDeclaration","scope":22696,"src":"13830:20:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22582,"name":"uint256","nodeType":"ElementaryTypeName","src":"13830:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22586,"mutability":"mutable","name":"currentRateMode","nameLocation":"13883:15:104","nodeType":"VariableDeclaration","scope":22696,"src":"13856:42:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":22585,"nodeType":"UserDefinedTypeName","pathNode":{"id":22584,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"13856:26:104"},"referencedDeclaration":23931,"src":"13856:26:104","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"}],"src":"13654:248:104"},"returnParameters":{"id":22588,"nodeType":"ParameterList","parameters":[],"src":"13917:0:104"},"scope":23502,"src":"13625:1655:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":22782,"nodeType":"Block","src":"15989:1106:104","statements":[{"assignments":[22709,null,null,null,22711],"declarations":[{"constant":false,"id":22709,"mutability":"mutable","name":"isActive","nameLocation":"16001:8:104","nodeType":"VariableDeclaration","scope":22782,"src":"15996:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22708,"name":"bool","nodeType":"ElementaryTypeName","src":"15996:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,{"constant":false,"id":22711,"mutability":"mutable","name":"isPaused","nameLocation":"16022:8:104","nodeType":"VariableDeclaration","scope":22782,"src":"16017:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22710,"name":"bool","nodeType":"ElementaryTypeName","src":"16017:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":22716,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":22712,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22703,"src":"16034:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22713,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"16034:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22714,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"16034:42:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":22715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16034:44:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"15995:83:104"},{"expression":{"arguments":[{"id":22718,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22709,"src":"16092:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22719,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"16102:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"16102:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22717,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16084:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16084:42:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22722,"nodeType":"ExpressionStatement","src":"16084:42:104"},{"expression":{"arguments":[{"id":22725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16140:9:104","subExpression":{"id":22724,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22711,"src":"16141:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22726,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"16151:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"16151:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22723,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16132:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16132:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22729,"nodeType":"ExpressionStatement","src":"16132:41:104"},{"assignments":[22731],"declarations":[{"constant":false,"id":22731,"mutability":"mutable","name":"totalDebt","nameLocation":"16188:9:104","nodeType":"VariableDeclaration","scope":22782,"src":"16180:17:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22730,"name":"uint256","nodeType":"ElementaryTypeName","src":"16180:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22745,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":22733,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22703,"src":"16207:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23966,"src":"16207:35:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22732,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"16200:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":22735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16200:43:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":22736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"16200:55:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16200:57:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":22739,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22703,"src":"16273:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23968,"src":"16273:37:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22738,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"16266:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":22741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16266:45:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":22742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"16266:57:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16266:59:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16200:125:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16180:145:104"},{"assignments":[22747,null,null],"declarations":[{"constant":false,"id":22747,"mutability":"mutable","name":"liquidityRateVariableDebtOnly","nameLocation":"16341:29:104","nodeType":"VariableDeclaration","scope":22782,"src":"16333:37:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22746,"name":"uint256","nodeType":"ElementaryTypeName","src":"16333:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":22769,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":22755,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22700,"src":"16549:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":22756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":23906,"src":"16549:16:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"hexValue":"30","id":22757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16593:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":22758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16622:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":22759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16652:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":22760,"name":"totalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22731,"src":"16684:9:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":22761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16730:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":22762,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22703,"src":"16758:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22763,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":23959,"src":"16758:26:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22764,"name":"reserveAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22705,"src":"16805:14:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":22765,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22703,"src":"16839:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23964,"src":"16839:26:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"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_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22753,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"16488:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":22754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateInterestRatesParams","nodeType":"MemberAccess","referencedDeclaration":24211,"src":"16488:38:104","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateInterestRatesParams_$24211_storage_ptr_$","typeString":"type(struct DataTypes.CalculateInterestRatesParams storage pointer)"}},"id":22767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["unbacked","liquidityAdded","liquidityTaken","totalStableDebt","totalVariableDebt","averageStableBorrowRate","reserveFactor","reserve","aToken"],"nodeType":"FunctionCall","src":"16488:388:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}],"expression":{"arguments":[{"expression":{"id":22749,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22700,"src":"16414:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":22750,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":23902,"src":"16414:35:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22748,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6126,"src":"16378:28:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IReserveInterestRateStrategy_$6126_$","typeString":"type(contract IReserveInterestRateStrategy)"}},"id":22751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16378:77:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IReserveInterestRateStrategy_$6126","typeString":"contract IReserveInterestRateStrategy"}},"id":22752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateInterestRates","nodeType":"MemberAccess","referencedDeclaration":6125,"src":"16378:100:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.CalculateInterestRatesParams memory) view external returns (uint256,uint256,uint256)"}},"id":22768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16378:506:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"16332:552:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22771,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22703,"src":"16906:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":23955,"src":"16906:30:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"id":22775,"name":"REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21760,"src":"16989:37:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22773,"name":"liquidityRateVariableDebtOnly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22747,"src":"16948:29:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"16948:40:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":22776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16948:79:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16906:121:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22778,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"17035:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET","nodeType":"MemberAccess","referencedDeclaration":14680,"src":"17035:49:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22770,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16891:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16891:199:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22781,"nodeType":"ExpressionStatement","src":"16891:199:104"}]},"documentation":{"id":22697,"nodeType":"StructuredDocumentation","src":"15284:522:104","text":" @notice Validates a stable borrow rate rebalance action.\n @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\n For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\n @param reserve The reserve state on which the user is getting rebalanced\n @param reserveCache The cached state of the reserve\n @param reserveAddress The address of the reserve"},"id":22783,"implemented":true,"kind":"function","modifiers":[],"name":"validateRebalanceStableBorrowRate","nameLocation":"15818:33:104","nodeType":"FunctionDefinition","parameters":{"id":22706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22700,"mutability":"mutable","name":"reserve","nameLocation":"15887:7:104","nodeType":"VariableDeclaration","scope":22783,"src":"15857:37:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":22699,"nodeType":"UserDefinedTypeName","pathNode":{"id":22698,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"15857:21:104"},"referencedDeclaration":23909,"src":"15857:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":22703,"mutability":"mutable","name":"reserveCache","nameLocation":"15930:12:104","nodeType":"VariableDeclaration","scope":22783,"src":"15900:42:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":22702,"nodeType":"UserDefinedTypeName","pathNode":{"id":22701,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"15900:22:104"},"referencedDeclaration":23973,"src":"15900:22:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":22705,"mutability":"mutable","name":"reserveAddress","nameLocation":"15956:14:104","nodeType":"VariableDeclaration","scope":22783,"src":"15948:22:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22704,"name":"address","nodeType":"ElementaryTypeName","src":"15948:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15851:123:104"},"returnParameters":{"id":22707,"nodeType":"ParameterList","parameters":[],"src":"15989:0:104"},"scope":23502,"src":"15809:1286:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":22822,"nodeType":"Block","src":"17418:253:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22793,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22789,"src":"17432:11:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17447:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17432:16:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22796,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"17450:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"UNDERLYING_BALANCE_ZERO","nodeType":"MemberAccess","referencedDeclaration":14677,"src":"17450:30:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22792,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17424:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17424:57:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22799,"nodeType":"ExpressionStatement","src":"17424:57:104"},{"assignments":[22801,null,null,null,22803],"declarations":[{"constant":false,"id":22801,"mutability":"mutable","name":"isActive","nameLocation":"17494:8:104","nodeType":"VariableDeclaration","scope":22822,"src":"17489:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22800,"name":"bool","nodeType":"ElementaryTypeName","src":"17489:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,{"constant":false,"id":22803,"mutability":"mutable","name":"isPaused","nameLocation":"17515:8:104","nodeType":"VariableDeclaration","scope":22822,"src":"17510:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22802,"name":"bool","nodeType":"ElementaryTypeName","src":"17510:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":22808,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":22804,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22787,"src":"17527:12:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"17527:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22806,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"17527:42:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":22807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17527:44:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"17488:83:104"},{"expression":{"arguments":[{"id":22810,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22801,"src":"17585:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22811,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"17595:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"17595:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22809,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17577:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17577:42:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22814,"nodeType":"ExpressionStatement","src":"17577:42:104"},{"expression":{"arguments":[{"id":22817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"17633:9:104","subExpression":{"id":22816,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22803,"src":"17634:8:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22818,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"17644:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"17644:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22815,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17625:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17625:41:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22821,"nodeType":"ExpressionStatement","src":"17625:41:104"}]},"documentation":{"id":22784,"nodeType":"StructuredDocumentation","src":"17099:182:104","text":" @notice Validates the action of setting an asset as collateral.\n @param reserveCache The cached data of the reserve\n @param userBalance The balance of the user"},"id":22823,"implemented":true,"kind":"function","modifiers":[],"name":"validateSetUseReserveAsCollateral","nameLocation":"17293:33:104","nodeType":"FunctionDefinition","parameters":{"id":22790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22787,"mutability":"mutable","name":"reserveCache","nameLocation":"17362:12:104","nodeType":"VariableDeclaration","scope":22823,"src":"17332:42:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":22786,"nodeType":"UserDefinedTypeName","pathNode":{"id":22785,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"17332:22:104"},"referencedDeclaration":23973,"src":"17332:22:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":22789,"mutability":"mutable","name":"userBalance","nameLocation":"17388:11:104","nodeType":"VariableDeclaration","scope":22823,"src":"17380:19:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22788,"name":"uint256","nodeType":"ElementaryTypeName","src":"17380:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17326:77:104"},"returnParameters":{"id":22791,"nodeType":"ParameterList","parameters":[],"src":"17418:0:104"},"scope":23502,"src":"17284:387:104","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":22869,"nodeType":"Block","src":"18070:201:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22839,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22832,"src":"18084:6:104","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18084:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22841,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22835,"src":"18101:7:104","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":22842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18101:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18084:31:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22844,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18117:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_FLASHLOAN_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14692,"src":"18117:36:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22838,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18076:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18076:78:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22847,"nodeType":"ExpressionStatement","src":"18076:78:104"},{"body":{"id":22867,"nodeType":"Block","src":"18204:63:104","statements":[{"expression":{"arguments":[{"baseExpression":{"id":22860,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22829,"src":"18236:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":22864,"indexExpression":{"baseExpression":{"id":22861,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22832,"src":"18249:6:104","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22863,"indexExpression":{"id":22862,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22849,"src":"18256:1:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18249:9:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18236:23:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}],"id":22859,"name":"validateFlashloanSimple","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22911,"src":"18212:23:104","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer) view"}},"id":22865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18212:48:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22866,"nodeType":"ExpressionStatement","src":"18212:48:104"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22852,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22849,"src":"18180:1:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22853,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22832,"src":"18184:6:104","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18184:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18180:17:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22868,"initializationExpression":{"assignments":[22849],"declarations":[{"constant":false,"id":22849,"mutability":"mutable","name":"i","nameLocation":"18173:1:104","nodeType":"VariableDeclaration","scope":22868,"src":"18165:9:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22848,"name":"uint256","nodeType":"ElementaryTypeName","src":"18165:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22851,"initialValue":{"hexValue":"30","id":22850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18177:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18165:13:104"},"loopExpression":{"expression":{"id":22857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18199:3:104","subExpression":{"id":22856,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22849,"src":"18199:1:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22858,"nodeType":"ExpressionStatement","src":"18199:3:104"},"nodeType":"ForStatement","src":"18160:107:104"}]},"documentation":{"id":22824,"nodeType":"StructuredDocumentation","src":"17675:220:104","text":" @notice Validates a flashloan action.\n @param reservesData The state of all the reserves\n @param assets The assets being flash-borrowed\n @param amounts The amounts for each asset being borrowed"},"id":22870,"implemented":true,"kind":"function","modifiers":[],"name":"validateFlashloan","nameLocation":"17907:17:104","nodeType":"FunctionDefinition","parameters":{"id":22836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22829,"mutability":"mutable","name":"reservesData","nameLocation":"17980:12:104","nodeType":"VariableDeclaration","scope":22870,"src":"17930:62:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":22828,"keyType":{"id":22825,"name":"address","nodeType":"ElementaryTypeName","src":"17938:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"17930:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":22827,"nodeType":"UserDefinedTypeName","pathNode":{"id":22826,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"17949:21:104"},"referencedDeclaration":23909,"src":"17949:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":22832,"mutability":"mutable","name":"assets","nameLocation":"18015:6:104","nodeType":"VariableDeclaration","scope":22870,"src":"17998:23:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":22830,"name":"address","nodeType":"ElementaryTypeName","src":"17998:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22831,"nodeType":"ArrayTypeName","src":"17998:9:104","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":22835,"mutability":"mutable","name":"amounts","nameLocation":"18044:7:104","nodeType":"VariableDeclaration","scope":22870,"src":"18027:24:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":22833,"name":"uint256","nodeType":"ElementaryTypeName","src":"18027:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22834,"nodeType":"ArrayTypeName","src":"18027:9:104","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17924:131:104"},"returnParameters":{"id":22837,"nodeType":"ParameterList","parameters":[],"src":"18070:0:104"},"scope":23502,"src":"17898:373:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":22910,"nodeType":"Block","src":"18461:295:104","statements":[{"assignments":[22881],"declarations":[{"constant":false,"id":22881,"mutability":"mutable","name":"configuration","nameLocation":"18508:13:104","nodeType":"VariableDeclaration","scope":22910,"src":"18467:54:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":22880,"nodeType":"UserDefinedTypeName","pathNode":{"id":22879,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"18467:33:104"},"referencedDeclaration":23912,"src":"18467:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":22884,"initialValue":{"expression":{"id":22882,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22874,"src":"18524:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":22883,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"18524:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"18467:78:104"},{"expression":{"arguments":[{"id":22889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18559:26:104","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22886,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22881,"src":"18560:13:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getPaused","nodeType":"MemberAccess","referencedDeclaration":13260,"src":"18560:23:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":22888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18560:25:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22890,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18587:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"18587:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22885,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18551:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18551:58:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22893,"nodeType":"ExpressionStatement","src":"18551:58:104"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22895,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22881,"src":"18623:13:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getActive","nodeType":"MemberAccess","referencedDeclaration":13160,"src":"18623:23:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":22897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18623:25:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22898,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18650:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"18650:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22894,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18615:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18615:59:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22901,"nodeType":"ExpressionStatement","src":"18615:59:104"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22903,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22881,"src":"18688:13:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22904,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":13874,"src":"18688:33:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":22905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18688:35:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22906,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18725:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_DISABLED","nodeType":"MemberAccess","referencedDeclaration":14818,"src":"18725:25:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22902,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18680:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18680:71:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22909,"nodeType":"ExpressionStatement","src":"18680:71:104"}]},"documentation":{"id":22871,"nodeType":"StructuredDocumentation","src":"18275:97:104","text":" @notice Validates a flashloan action.\n @param reserve The state of the reserve"},"id":22911,"implemented":true,"kind":"function","modifiers":[],"name":"validateFlashloanSimple","nameLocation":"18384:23:104","nodeType":"FunctionDefinition","parameters":{"id":22875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22874,"mutability":"mutable","name":"reserve","nameLocation":"18438:7:104","nodeType":"VariableDeclaration","scope":22911,"src":"18408:37:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":22873,"nodeType":"UserDefinedTypeName","pathNode":{"id":22872,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"18408:21:104"},"referencedDeclaration":23909,"src":"18408:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"18407:39:104"},"returnParameters":{"id":22876,"nodeType":"ParameterList","parameters":[],"src":"18461:0:104"},"scope":23502,"src":"18375:381:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"ValidationLogic.ValidateLiquidationCallLocalVars","id":22922,"members":[{"constant":false,"id":22913,"mutability":"mutable","name":"collateralReserveActive","nameLocation":"18811:23:104","nodeType":"VariableDeclaration","scope":22922,"src":"18806:28:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22912,"name":"bool","nodeType":"ElementaryTypeName","src":"18806:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":22915,"mutability":"mutable","name":"collateralReservePaused","nameLocation":"18845:23:104","nodeType":"VariableDeclaration","scope":22922,"src":"18840:28:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22914,"name":"bool","nodeType":"ElementaryTypeName","src":"18840:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":22917,"mutability":"mutable","name":"principalReserveActive","nameLocation":"18879:22:104","nodeType":"VariableDeclaration","scope":22922,"src":"18874:27:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22916,"name":"bool","nodeType":"ElementaryTypeName","src":"18874:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":22919,"mutability":"mutable","name":"principalReservePaused","nameLocation":"18912:22:104","nodeType":"VariableDeclaration","scope":22922,"src":"18907:27:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22918,"name":"bool","nodeType":"ElementaryTypeName","src":"18907:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":22921,"mutability":"mutable","name":"isCollateralEnabled","nameLocation":"18945:19:104","nodeType":"VariableDeclaration","scope":22922,"src":"18940:24:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22920,"name":"bool","nodeType":"ElementaryTypeName","src":"18940:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ValidateLiquidationCallLocalVars","nameLocation":"18767:32:104","nodeType":"StructDefinition","scope":23502,"src":"18760:209:104","visibility":"public"},{"body":{"id":23052,"nodeType":"Block","src":"19436:1355:104","statements":[{"assignments":[22937],"declarations":[{"constant":false,"id":22937,"mutability":"mutable","name":"vars","nameLocation":"19482:4:104","nodeType":"VariableDeclaration","scope":23052,"src":"19442:44:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars"},"typeName":{"id":22936,"nodeType":"UserDefinedTypeName","pathNode":{"id":22935,"name":"ValidateLiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":22922,"src":"19442:32:104"},"referencedDeclaration":22922,"src":"19442:32:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_storage_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars"}},"visibility":"internal"}],"id":22938,"nodeType":"VariableDeclarationStatement","src":"19442:44:104"},{"expression":{"id":22949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":22939,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"19494:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":22941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralReserveActive","nodeType":"MemberAccess","referencedDeclaration":22913,"src":"19494:28:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},null,null,null,{"expression":{"id":22942,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"19530:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":22943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralReservePaused","nodeType":"MemberAccess","referencedDeclaration":22915,"src":"19530:28:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":22944,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"19493:66:104","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$__$__$__$_t_bool_$","typeString":"tuple(bool,,,,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":22945,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22929,"src":"19562:17:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":22946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"19562:38:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":22947,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"19562:54:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":22948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19562:56:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"19493:125:104","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22950,"nodeType":"ExpressionStatement","src":"19493:125:104"},{"expression":{"id":22962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":22951,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"19626:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":22953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"principalReserveActive","nodeType":"MemberAccess","referencedDeclaration":22917,"src":"19626:27:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},null,null,null,{"expression":{"id":22954,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"19661:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":22955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"principalReservePaused","nodeType":"MemberAccess","referencedDeclaration":22919,"src":"19661:27:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":22956,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"19625:64:104","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$__$__$__$_t_bool_$","typeString":"tuple(bool,,,,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":22957,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22932,"src":"19692:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":22958,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":24185,"src":"19692:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":22959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":23962,"src":"19692:58:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":22960,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":13934,"src":"19692:74:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":22961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19692:76:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"19625:143:104","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22963,"nodeType":"ExpressionStatement","src":"19625:143:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22965,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"19783:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":22966,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralReserveActive","nodeType":"MemberAccess","referencedDeclaration":22913,"src":"19783:28:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"expression":{"id":22967,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"19815:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":22968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"principalReserveActive","nodeType":"MemberAccess","referencedDeclaration":22917,"src":"19815:27:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19783:59:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22970,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"19844:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":14629,"src":"19844:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22964,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19775:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19775:93:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22973,"nodeType":"ExpressionStatement","src":"19775:93:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19882:29:104","subExpression":{"expression":{"id":22975,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"19883:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":22976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralReservePaused","nodeType":"MemberAccess","referencedDeclaration":22915,"src":"19883:28:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":22980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19915:28:104","subExpression":{"expression":{"id":22978,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"19916:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":22979,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"principalReservePaused","nodeType":"MemberAccess","referencedDeclaration":22919,"src":"19916:27:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19882:61:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22982,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"19945:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":22983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"19945:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22974,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19874:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19874:93:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22985,"nodeType":"ExpressionStatement","src":"19874:93:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22987,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22932,"src":"19989:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":22988,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":24191,"src":"19989:26:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20027:1:104","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":22990,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20019:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22989,"name":"address","nodeType":"ElementaryTypeName","src":"20019:7:104","typeDescriptions":{}}},"id":22992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20019:10:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19989:40:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22994,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22932,"src":"20041:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":22995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":24189,"src":"20041:19:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":22996,"name":"MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21763,"src":"20063:43:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20041:65:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19989:117:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":23000,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22932,"src":"20139:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":23001,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":24191,"src":"20139:26:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22999,"name":"IPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6107,"src":"20118:20:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleSentinel_$6107_$","typeString":"type(contract IPriceOracleSentinel)"}},"id":23002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20118:48:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleSentinel_$6107","typeString":"contract IPriceOracleSentinel"}},"id":23003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isLiquidationAllowed","nodeType":"MemberAccess","referencedDeclaration":6082,"src":"20118:69:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":23004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20118:71:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19989:200:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23006,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"20197:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PRICE_ORACLE_SENTINEL_CHECK_FAILED","nodeType":"MemberAccess","referencedDeclaration":14722,"src":"20197:41:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22986,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19974:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19974:270:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23009,"nodeType":"ExpressionStatement","src":"19974:270:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23011,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22932,"src":"20266:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":23012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":24189,"src":"20266:19:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23013,"name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21767,"src":"20288:35:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20266:57:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23015,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"20331:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"HEALTH_FACTOR_NOT_BELOW_THRESHOLD","nodeType":"MemberAccess","referencedDeclaration":14683,"src":"20331:40:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23010,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20251:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20251:126:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23018,"nodeType":"ExpressionStatement","src":"20251:126:104"},{"expression":{"id":23034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":23019,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"20384:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":23021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isCollateralEnabled","nodeType":"MemberAccess","referencedDeclaration":22921,"src":"20384:24:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":23022,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22929,"src":"20417:17:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":23023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"20417:31:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":23024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":13006,"src":"20417:55:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":23025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20417:57:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20478:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20417:62:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[{"expression":{"id":23030,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22929,"src":"20520:17:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":23031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"20520:20:104","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":23028,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22926,"src":"20489:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":23029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":14260,"src":"20489:30:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":23032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20489:52:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20417:124:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20384:157:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23035,"nodeType":"ExpressionStatement","src":"20384:157:104"},{"expression":{"arguments":[{"expression":{"id":23037,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"20637:4:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$22922_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":23038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isCollateralEnabled","nodeType":"MemberAccess","referencedDeclaration":22921,"src":"20637:24:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23039,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"20663:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_CANNOT_BE_LIQUIDATED","nodeType":"MemberAccess","referencedDeclaration":14686,"src":"20663:38:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23036,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20629:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20629:73:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23042,"nodeType":"ExpressionStatement","src":"20629:73:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23044,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22932,"src":"20716:6:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":23045,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":24187,"src":"20716:16:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20736:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20716:21:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23048,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"20739:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER","nodeType":"MemberAccess","referencedDeclaration":14689,"src":"20739:46:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23043,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20708:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20708:78:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23051,"nodeType":"ExpressionStatement","src":"20708:78:104"}]},"documentation":{"id":22923,"nodeType":"StructuredDocumentation","src":"18973:242:104","text":" @notice Validates the liquidation action.\n @param userConfig The user configuration mapping\n @param collateralReserve The reserve data of the collateral\n @param params Additional parameters needed for the validation"},"id":23053,"implemented":true,"kind":"function","modifiers":[],"name":"validateLiquidationCall","nameLocation":"19227:23:104","nodeType":"FunctionDefinition","parameters":{"id":22933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22926,"mutability":"mutable","name":"userConfig","nameLocation":"19295:10:104","nodeType":"VariableDeclaration","scope":23053,"src":"19256:49:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":22925,"nodeType":"UserDefinedTypeName","pathNode":{"id":22924,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"19256:30:104"},"referencedDeclaration":23916,"src":"19256:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":22929,"mutability":"mutable","name":"collateralReserve","nameLocation":"19341:17:104","nodeType":"VariableDeclaration","scope":23053,"src":"19311:47:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":22928,"nodeType":"UserDefinedTypeName","pathNode":{"id":22927,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"19311:21:104"},"referencedDeclaration":23909,"src":"19311:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":22932,"mutability":"mutable","name":"params","nameLocation":"19411:6:104","nodeType":"VariableDeclaration","scope":23053,"src":"19364:53:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams"},"typeName":{"id":22931,"nodeType":"UserDefinedTypeName","pathNode":{"id":22930,"name":"DataTypes.ValidateLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":24192,"src":"19364:39:104"},"referencedDeclaration":24192,"src":"19364:39:104","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$24192_storage_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams"}},"visibility":"internal"}],"src":"19250:171:104"},"returnParameters":{"id":22934,"nodeType":"ParameterList","parameters":[],"src":"19436:0:104"},"scope":23502,"src":"19218:1573:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23117,"nodeType":"Block","src":"21769:614:104","statements":[{"assignments":[null,null,null,null,23087,23089],"declarations":[null,null,null,null,{"constant":false,"id":23087,"mutability":"mutable","name":"healthFactor","nameLocation":"21792:12:104","nodeType":"VariableDeclaration","scope":23117,"src":"21784:20:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23086,"name":"uint256","nodeType":"ElementaryTypeName","src":"21784:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23089,"mutability":"mutable","name":"hasZeroLtvCollateral","nameLocation":"21811:20:104","nodeType":"VariableDeclaration","scope":23117,"src":"21806:25:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23088,"name":"bool","nodeType":"ElementaryTypeName","src":"21806:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":23104,"initialValue":{"arguments":[{"id":23092,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23059,"src":"21889:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23093,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23063,"src":"21911:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":23094,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23068,"src":"21933:15:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"id":23097,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23071,"src":"22023:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"id":23098,"name":"reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23077,"src":"22060:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23099,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23073,"src":"22091:4:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23100,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23079,"src":"22115:6:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23101,"name":"userEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23075,"src":"22152:17:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":23095,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"21958:9:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":23096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateUserAccountDataParams","nodeType":"MemberAccess","referencedDeclaration":24150,"src":"21958:40:104","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateUserAccountDataParams_$24150_storage_ptr_$","typeString":"type(struct DataTypes.CalculateUserAccountDataParams storage pointer)"}},"id":23102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["userConfig","reservesCount","user","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"21958:222:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":23090,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"21835:12:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$18449_$","typeString":"type(library GenericLogic)"}},"id":23091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateUserAccountData","nodeType":"MemberAccess","referencedDeclaration":18307,"src":"21835:44:104","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,bool)"}},"id":23103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21835:353:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21775:413:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23106,"name":"healthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23087,"src":"22210:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23107,"name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21767,"src":"22226:35:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22210:51:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23109,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"22269:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD","nodeType":"MemberAccess","referencedDeclaration":14653,"src":"22269:53:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23105,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"22195:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22195:133:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23112,"nodeType":"ExpressionStatement","src":"22195:133:104"},{"expression":{"components":[{"id":23113,"name":"healthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23087,"src":"22343:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23114,"name":"hasZeroLtvCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23089,"src":"22357:20:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":23115,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22342:36:104","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"functionReturnParameters":23085,"id":23116,"nodeType":"Return","src":"22335:43:104"}]},"documentation":{"id":23054,"nodeType":"StructuredDocumentation","src":"20795:558:104","text":" @notice Validates the health factor of a user.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The state of the user for the specific reserve\n @param user The user to validate health factor of\n @param userEModeCategory The users active efficiency mode category\n @param reservesCount The number of available reserves\n @param oracle The price oracle"},"id":23118,"implemented":true,"kind":"function","modifiers":[],"name":"validateHealthFactor","nameLocation":"21365:20:104","nodeType":"FunctionDefinition","parameters":{"id":23080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23059,"mutability":"mutable","name":"reservesData","nameLocation":"21441:12:104","nodeType":"VariableDeclaration","scope":23118,"src":"21391:62:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":23058,"keyType":{"id":23055,"name":"address","nodeType":"ElementaryTypeName","src":"21399:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"21391:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":23057,"nodeType":"UserDefinedTypeName","pathNode":{"id":23056,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"21410:21:104"},"referencedDeclaration":23909,"src":"21410:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":23063,"mutability":"mutable","name":"reservesList","nameLocation":"21495:12:104","nodeType":"VariableDeclaration","scope":23118,"src":"21459:48:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":23062,"keyType":{"id":23060,"name":"uint256","nodeType":"ElementaryTypeName","src":"21467:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"21459:27:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":23061,"name":"address","nodeType":"ElementaryTypeName","src":"21478:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":23068,"mutability":"mutable","name":"eModeCategories","nameLocation":"21563:15:104","nodeType":"VariableDeclaration","scope":23118,"src":"21513:65:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":23067,"keyType":{"id":23064,"name":"uint8","nodeType":"ElementaryTypeName","src":"21521:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"21513:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":23066,"nodeType":"UserDefinedTypeName","pathNode":{"id":23065,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"21530:23:104"},"referencedDeclaration":23927,"src":"21530:23:104","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":23071,"mutability":"mutable","name":"userConfig","nameLocation":"21622:10:104","nodeType":"VariableDeclaration","scope":23118,"src":"21584:48:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":23070,"nodeType":"UserDefinedTypeName","pathNode":{"id":23069,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"21584:30:104"},"referencedDeclaration":23916,"src":"21584:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":23073,"mutability":"mutable","name":"user","nameLocation":"21646:4:104","nodeType":"VariableDeclaration","scope":23118,"src":"21638:12:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23072,"name":"address","nodeType":"ElementaryTypeName","src":"21638:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23075,"mutability":"mutable","name":"userEModeCategory","nameLocation":"21662:17:104","nodeType":"VariableDeclaration","scope":23118,"src":"21656:23:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23074,"name":"uint8","nodeType":"ElementaryTypeName","src":"21656:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":23077,"mutability":"mutable","name":"reservesCount","nameLocation":"21693:13:104","nodeType":"VariableDeclaration","scope":23118,"src":"21685:21:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23076,"name":"uint256","nodeType":"ElementaryTypeName","src":"21685:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23079,"mutability":"mutable","name":"oracle","nameLocation":"21720:6:104","nodeType":"VariableDeclaration","scope":23118,"src":"21712:14:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23078,"name":"address","nodeType":"ElementaryTypeName","src":"21712:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21385:345:104"},"returnParameters":{"id":23085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23082,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23118,"src":"21754:7:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23081,"name":"uint256","nodeType":"ElementaryTypeName","src":"21754:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23118,"src":"21763:4:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23083,"name":"bool","nodeType":"ElementaryTypeName","src":"21763:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21753:15:104"},"scope":23502,"src":"21356:1027:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23185,"nodeType":"Block","src":"23473:411:104","statements":[{"assignments":[23153],"declarations":[{"constant":false,"id":23153,"mutability":"mutable","name":"reserve","nameLocation":"23508:7:104","nodeType":"VariableDeclaration","scope":23185,"src":"23479:36:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":23152,"nodeType":"UserDefinedTypeName","pathNode":{"id":23151,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"23479:21:104"},"referencedDeclaration":23909,"src":"23479:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":23157,"initialValue":{"baseExpression":{"id":23154,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23124,"src":"23518:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23156,"indexExpression":{"id":23155,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23138,"src":"23531:5:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23518:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"23479:58:104"},{"assignments":[null,23159],"declarations":[null,{"constant":false,"id":23159,"mutability":"mutable","name":"hasZeroLtvCollateral","nameLocation":"23552:20:104","nodeType":"VariableDeclaration","scope":23185,"src":"23547:25:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23158,"name":"bool","nodeType":"ElementaryTypeName","src":"23547:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":23170,"initialValue":{"arguments":[{"id":23161,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23124,"src":"23604:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23162,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23128,"src":"23624:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":23163,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23133,"src":"23644:15:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":23164,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23136,"src":"23667:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"id":23165,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23140,"src":"23685:4:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23166,"name":"userEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23146,"src":"23697:17:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":23167,"name":"reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23142,"src":"23722:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23168,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23144,"src":"23743:6:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23160,"name":"validateHealthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23118,"src":"23576:20:104","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_address_$_t_uint8_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,uint8,uint256,address) view returns (uint256,bool)"}},"id":23169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23576:179:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"23544:211:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"23777:21:104","subExpression":{"id":23172,"name":"hasZeroLtvCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23159,"src":"23778:20:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":23174,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23153,"src":"23802:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":23175,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"23802:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":23176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":12954,"src":"23802:28:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":23177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23802:30:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23836:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23802:35:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"23777:60:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23181,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"23845:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LTV_VALIDATION_FAILED","nodeType":"MemberAccess","referencedDeclaration":14716,"src":"23845:28:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23171,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23762:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23762:117:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23184,"nodeType":"ExpressionStatement","src":"23762:117:104"}]},"documentation":{"id":23119,"nodeType":"StructuredDocumentation","src":"22387:679:104","text":" @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The state of the user for the specific reserve\n @param asset The asset for which the ltv will be validated\n @param from The user from which the aTokens are being transferred\n @param reservesCount The number of available reserves\n @param oracle The price oracle\n @param userEModeCategory The users active efficiency mode category"},"id":23186,"implemented":true,"kind":"function","modifiers":[],"name":"validateHFAndLtv","nameLocation":"23078:16:104","nodeType":"FunctionDefinition","parameters":{"id":23147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23124,"mutability":"mutable","name":"reservesData","nameLocation":"23150:12:104","nodeType":"VariableDeclaration","scope":23186,"src":"23100:62:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":23123,"keyType":{"id":23120,"name":"address","nodeType":"ElementaryTypeName","src":"23108:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"23100:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":23122,"nodeType":"UserDefinedTypeName","pathNode":{"id":23121,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"23119:21:104"},"referencedDeclaration":23909,"src":"23119:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":23128,"mutability":"mutable","name":"reservesList","nameLocation":"23204:12:104","nodeType":"VariableDeclaration","scope":23186,"src":"23168:48:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":23127,"keyType":{"id":23125,"name":"uint256","nodeType":"ElementaryTypeName","src":"23176:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"23168:27:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":23126,"name":"address","nodeType":"ElementaryTypeName","src":"23187:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":23133,"mutability":"mutable","name":"eModeCategories","nameLocation":"23272:15:104","nodeType":"VariableDeclaration","scope":23186,"src":"23222:65:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":23132,"keyType":{"id":23129,"name":"uint8","nodeType":"ElementaryTypeName","src":"23230:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"23222:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":23131,"nodeType":"UserDefinedTypeName","pathNode":{"id":23130,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"23239:23:104"},"referencedDeclaration":23927,"src":"23239:23:104","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":23136,"mutability":"mutable","name":"userConfig","nameLocation":"23331:10:104","nodeType":"VariableDeclaration","scope":23186,"src":"23293:48:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":23135,"nodeType":"UserDefinedTypeName","pathNode":{"id":23134,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"23293:30:104"},"referencedDeclaration":23916,"src":"23293:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":23138,"mutability":"mutable","name":"asset","nameLocation":"23355:5:104","nodeType":"VariableDeclaration","scope":23186,"src":"23347:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23137,"name":"address","nodeType":"ElementaryTypeName","src":"23347:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23140,"mutability":"mutable","name":"from","nameLocation":"23374:4:104","nodeType":"VariableDeclaration","scope":23186,"src":"23366:12:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23139,"name":"address","nodeType":"ElementaryTypeName","src":"23366:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23142,"mutability":"mutable","name":"reservesCount","nameLocation":"23392:13:104","nodeType":"VariableDeclaration","scope":23186,"src":"23384:21:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23141,"name":"uint256","nodeType":"ElementaryTypeName","src":"23384:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23144,"mutability":"mutable","name":"oracle","nameLocation":"23419:6:104","nodeType":"VariableDeclaration","scope":23186,"src":"23411:14:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23143,"name":"address","nodeType":"ElementaryTypeName","src":"23411:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23146,"mutability":"mutable","name":"userEModeCategory","nameLocation":"23437:17:104","nodeType":"VariableDeclaration","scope":23186,"src":"23431:23:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23145,"name":"uint8","nodeType":"ElementaryTypeName","src":"23431:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"23094:364:104"},"returnParameters":{"id":23148,"nodeType":"ParameterList","parameters":[],"src":"23473:0:104"},"scope":23502,"src":"23069:815:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23203,"nodeType":"Block","src":"24060:77:104","statements":[{"expression":{"arguments":[{"id":23198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"24074:34:104","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":23194,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23190,"src":"24075:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":23195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"24075:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":23196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getPaused","nodeType":"MemberAccess","referencedDeclaration":13260,"src":"24075:31:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":23197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24075:33:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23199,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"24110:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":14635,"src":"24110:21:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23193,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24066:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24066:66:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23202,"nodeType":"ExpressionStatement","src":"24066:66:104"}]},"documentation":{"id":23187,"nodeType":"StructuredDocumentation","src":"23888:90:104","text":" @notice Validates a transfer action.\n @param reserve The reserve object"},"id":23204,"implemented":true,"kind":"function","modifiers":[],"name":"validateTransfer","nameLocation":"23990:16:104","nodeType":"FunctionDefinition","parameters":{"id":23191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23190,"mutability":"mutable","name":"reserve","nameLocation":"24037:7:104","nodeType":"VariableDeclaration","scope":23204,"src":"24007:37:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":23189,"nodeType":"UserDefinedTypeName","pathNode":{"id":23188,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"24007:21:104"},"referencedDeclaration":23909,"src":"24007:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"24006:39:104"},"returnParameters":{"id":23192,"nodeType":"ParameterList","parameters":[],"src":"24060:0:104"},"scope":23502,"src":"23981:156:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23287,"nodeType":"Block","src":"24531:544:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23218,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23214,"src":"24545:5:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24562:1:104","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":23220,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24554:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23219,"name":"address","nodeType":"ElementaryTypeName","src":"24554:7:104","typeDescriptions":{}}},"id":23222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24554:10:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24545:19:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23224,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"24566:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":14776,"src":"24566:29:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23217,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24537:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24537:59:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23227,"nodeType":"ExpressionStatement","src":"24537:59:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":23232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23229,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23212,"src":"24610:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":23230,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"24610:10:104","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24624:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24610:15:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23233,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23209,"src":"24629:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":23235,"indexExpression":{"hexValue":"30","id":23234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24642:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24629:15:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23236,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23214,"src":"24648:5:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24629:24:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"24610:43:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23239,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"24655:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ASSET_NOT_LISTED","nodeType":"MemberAccess","referencedDeclaration":14791,"src":"24655:23:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23228,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24602:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24602:77:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23242,"nodeType":"ExpressionStatement","src":"24602:77:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":23245,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23212,"src":"24700:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":23246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23898,"src":"24700:30:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23244,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"24693:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":23247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24693:38:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":23248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"24693:50:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":23249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24693:52:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24749:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24693:57:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23252,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"24752:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STABLE_DEBT_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":14710,"src":"24752:27:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23243,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24685:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24685:95:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23255,"nodeType":"ExpressionStatement","src":"24685:95:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":23258,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23212,"src":"24808:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":23259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23900,"src":"24808:32:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23257,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"24801:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":23260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24801:40:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":23261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"24801:52:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":23262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24801:54:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24859:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24801:59:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23265,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"24868:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"VARIABLE_DEBT_SUPPLY_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":14713,"src":"24868:36:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23256,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24786:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24786:124:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23268,"nodeType":"ExpressionStatement","src":"24786:124:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":23271,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23212,"src":"24938:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":23272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"24938:21:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23270,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"24931:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":23273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24931:29:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":23274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"24931:41:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":23275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24931:43:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24978:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24931:48:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":23281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23278,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23212,"src":"24983:7:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":23279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":23904,"src":"24983:25:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25012:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24983:30:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"24931:82:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23283,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"25021:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"25021:43:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23269,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24916:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24916:154:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23286,"nodeType":"ExpressionStatement","src":"24916:154:104"}]},"documentation":{"id":23205,"nodeType":"StructuredDocumentation","src":"24141:224:104","text":" @notice Validates a drop reserve action.\n @param reservesList The addresses of all the active reserves\n @param reserve The reserve object\n @param asset The address of the reserve's underlying asset"},"id":23288,"implemented":true,"kind":"function","modifiers":[],"name":"validateDropReserve","nameLocation":"24377:19:104","nodeType":"FunctionDefinition","parameters":{"id":23215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23209,"mutability":"mutable","name":"reservesList","nameLocation":"24438:12:104","nodeType":"VariableDeclaration","scope":23288,"src":"24402:48:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":23208,"keyType":{"id":23206,"name":"uint256","nodeType":"ElementaryTypeName","src":"24410:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"24402:27:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":23207,"name":"address","nodeType":"ElementaryTypeName","src":"24421:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":23212,"mutability":"mutable","name":"reserve","nameLocation":"24486:7:104","nodeType":"VariableDeclaration","scope":23288,"src":"24456:37:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":23211,"nodeType":"UserDefinedTypeName","pathNode":{"id":23210,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"24456:21:104"},"referencedDeclaration":23909,"src":"24456:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":23214,"mutability":"mutable","name":"asset","nameLocation":"24507:5:104","nodeType":"VariableDeclaration","scope":23288,"src":"24499:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23213,"name":"address","nodeType":"ElementaryTypeName","src":"24499:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24396:120:104"},"returnParameters":{"id":23216,"nodeType":"ParameterList","parameters":[],"src":"24531:0:104"},"scope":23502,"src":"24368:707:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23380,"nodeType":"Block","src":"25867:943:104","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":23316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23314,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23310,"src":"25947:10:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25961:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25947:15:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":23322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":23317,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23303,"src":"25966:15:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":23319,"indexExpression":{"id":23318,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23310,"src":"25982:10:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25966:27:104","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":23320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":23920,"src":"25966:48:104","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26018:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25966:53:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"25947:72:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23324,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"26027:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_EMODE_CATEGORY","nodeType":"MemberAccess","referencedDeclaration":14719,"src":"26027:34:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23313,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"25932:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25932:135:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23327,"nodeType":"ExpressionStatement","src":"25932:135:104"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23328,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23306,"src":"26150:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":23329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isEmpty","nodeType":"MemberAccess","referencedDeclaration":14371,"src":"26150:18:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":23330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26150:20:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23333,"nodeType":"IfStatement","src":"26146:47:104","trueBody":{"id":23332,"nodeType":"Block","src":"26172:21:104","statements":[{"functionReturnParameters":23312,"id":23331,"nodeType":"Return","src":"26180:7:104"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":23336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23334,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23310,"src":"26361:10:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26375:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26361:15:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23379,"nodeType":"IfStatement","src":"26357:449:104","trueBody":{"id":23378,"nodeType":"Block","src":"26378:428:104","statements":[{"id":23377,"nodeType":"UncheckedBlock","src":"26386:414:104","statements":[{"body":{"id":23375,"nodeType":"Block","src":"26450:342:104","statements":[{"condition":{"arguments":[{"id":23349,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23338,"src":"26489:1:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23347,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23306,"src":"26466:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":23348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowing","nodeType":"MemberAccess","referencedDeclaration":14222,"src":"26466:22:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":23350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26466:25:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23374,"nodeType":"IfStatement","src":"26462:320:104","trueBody":{"id":23373,"nodeType":"Block","src":"26493:289:104","statements":[{"assignments":[23355],"declarations":[{"constant":false,"id":23355,"mutability":"mutable","name":"configuration","nameLocation":"26548:13:104","nodeType":"VariableDeclaration","scope":23373,"src":"26507:54:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23354,"nodeType":"UserDefinedTypeName","pathNode":{"id":23353,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"26507:33:104"},"referencedDeclaration":23912,"src":"26507:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":23362,"initialValue":{"expression":{"baseExpression":{"id":23356,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23294,"src":"26564:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23360,"indexExpression":{"baseExpression":{"id":23357,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23298,"src":"26577:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":23359,"indexExpression":{"id":23358,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23338,"src":"26590:1:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26577:15:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26564:29:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23361,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"26564:58:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"26507:115:104"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23364,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23355,"src":"26659:13:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":23365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13824,"src":"26659:30:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":23366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26659:32:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23367,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23310,"src":"26695:10:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"26659:46:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23369,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"26721:6:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":23370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_EMODE_CATEGORY","nodeType":"MemberAccess","referencedDeclaration":14719,"src":"26721:34:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23363,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"26636:7:104","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26636:133:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23372,"nodeType":"ExpressionStatement","src":"26636:133:104"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23341,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23338,"src":"26426:1:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23342,"name":"reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23308,"src":"26430:13:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26426:17:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23376,"initializationExpression":{"assignments":[23338],"declarations":[{"constant":false,"id":23338,"mutability":"mutable","name":"i","nameLocation":"26419:1:104","nodeType":"VariableDeclaration","scope":23376,"src":"26411:9:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23337,"name":"uint256","nodeType":"ElementaryTypeName","src":"26411:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23340,"initialValue":{"hexValue":"30","id":23339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26423:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26411:13:104"},"loopExpression":{"expression":{"id":23345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26445:3:104","subExpression":{"id":23344,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23338,"src":"26445:1:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23346,"nodeType":"ExpressionStatement","src":"26445:3:104"},"nodeType":"ForStatement","src":"26406:386:104"}]}]}}]},"documentation":{"id":23289,"nodeType":"StructuredDocumentation","src":"25079:441:104","text":" @notice Validates the action of setting efficiency mode.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories a mapping storing configurations for all efficiency mode categories\n @param userConfig the user configuration\n @param reservesCount The total number of valid reserves\n @param categoryId The id of the category"},"id":23381,"implemented":true,"kind":"function","modifiers":[],"name":"validateSetUserEMode","nameLocation":"25532:20:104","nodeType":"FunctionDefinition","parameters":{"id":23311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23294,"mutability":"mutable","name":"reservesData","nameLocation":"25608:12:104","nodeType":"VariableDeclaration","scope":23381,"src":"25558:62:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":23293,"keyType":{"id":23290,"name":"address","nodeType":"ElementaryTypeName","src":"25566:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"25558:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":23292,"nodeType":"UserDefinedTypeName","pathNode":{"id":23291,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"25577:21:104"},"referencedDeclaration":23909,"src":"25577:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":23298,"mutability":"mutable","name":"reservesList","nameLocation":"25662:12:104","nodeType":"VariableDeclaration","scope":23381,"src":"25626:48:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":23297,"keyType":{"id":23295,"name":"uint256","nodeType":"ElementaryTypeName","src":"25634:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"25626:27:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":23296,"name":"address","nodeType":"ElementaryTypeName","src":"25645:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":23303,"mutability":"mutable","name":"eModeCategories","nameLocation":"25730:15:104","nodeType":"VariableDeclaration","scope":23381,"src":"25680:65:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":23302,"keyType":{"id":23299,"name":"uint8","nodeType":"ElementaryTypeName","src":"25688:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"25680:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":23301,"nodeType":"UserDefinedTypeName","pathNode":{"id":23300,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"25697:23:104"},"referencedDeclaration":23927,"src":"25697:23:104","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":23306,"mutability":"mutable","name":"userConfig","nameLocation":"25789:10:104","nodeType":"VariableDeclaration","scope":23381,"src":"25751:48:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":23305,"nodeType":"UserDefinedTypeName","pathNode":{"id":23304,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"25751:30:104"},"referencedDeclaration":23916,"src":"25751:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":23308,"mutability":"mutable","name":"reservesCount","nameLocation":"25813:13:104","nodeType":"VariableDeclaration","scope":23381,"src":"25805:21:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23307,"name":"uint256","nodeType":"ElementaryTypeName","src":"25805:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23310,"mutability":"mutable","name":"categoryId","nameLocation":"25838:10:104","nodeType":"VariableDeclaration","scope":23381,"src":"25832:16:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23309,"name":"uint8","nodeType":"ElementaryTypeName","src":"25832:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"25552:300:104"},"returnParameters":{"id":23312,"nodeType":"ParameterList","parameters":[],"src":"25867:0:104"},"scope":23502,"src":"25523:1287:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23437,"nodeType":"Block","src":"27592:317:104","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23402,"name":"reserveConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"27602:13:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":23403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":12954,"src":"27602:20:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":23404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27602:22:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27628:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27602:27:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23410,"nodeType":"IfStatement","src":"27598:60:104","trueBody":{"id":23409,"nodeType":"Block","src":"27631:27:104","statements":[{"expression":{"hexValue":"66616c7365","id":23407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27646:5:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":23401,"id":23408,"nodeType":"Return","src":"27639:12:104"}]}},{"condition":{"id":23414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"27667:36:104","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23411,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23394,"src":"27668:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":23412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateralAny","nodeType":"MemberAccess","referencedDeclaration":14308,"src":"27668:33:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":23413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27668:35:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23418,"nodeType":"IfStatement","src":"27663:68:104","trueBody":{"id":23417,"nodeType":"Block","src":"27705:26:104","statements":[{"expression":{"hexValue":"74727565","id":23415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27720:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":23401,"id":23416,"nodeType":"Return","src":"27713:11:104"}]}},{"assignments":[23420,null,null],"declarations":[{"constant":false,"id":23420,"mutability":"mutable","name":"isolationModeActive","nameLocation":"27742:19:104","nodeType":"VariableDeclaration","scope":23437,"src":"27737:24:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23419,"name":"bool","nodeType":"ElementaryTypeName","src":"27737:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null],"id":23426,"initialValue":{"arguments":[{"id":23423,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"27802:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23424,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23391,"src":"27816:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}],"expression":{"id":23421,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23394,"src":"27769:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":23422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getIsolationModeState","nodeType":"MemberAccess","referencedDeclaration":14439,"src":"27769:32:104","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$returns$_t_bool_$_t_address_$_t_uint256_$bound_to$_t_struct$_UserConfigurationMap_$23916_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address)) view returns (bool,address,uint256)"}},"id":23425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27769:60:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_uint256_$","typeString":"tuple(bool,address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"27736:93:104"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"27844:20:104","subExpression":{"id":23427,"name":"isolationModeActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23420,"src":"27845:19:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23429,"name":"reserveConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"27868:13:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":23430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":13668,"src":"27868:28:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":23431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27868:30:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27902:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27868:35:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"27844:59:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":23435,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27843:61:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":23401,"id":23436,"nodeType":"Return","src":"27836:68:104"}]},"documentation":{"id":23382,"nodeType":"StructuredDocumentation","src":"26814:472:104","text":" @notice Validates the action of activating the asset as collateral.\n @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig the user configuration\n @param reserveConfig The reserve configuration\n @return True if the asset can be activated as collateral, false otherwise"},"id":23438,"implemented":true,"kind":"function","modifiers":[],"name":"validateUseAsCollateral","nameLocation":"27298:23:104","nodeType":"FunctionDefinition","parameters":{"id":23398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23387,"mutability":"mutable","name":"reservesData","nameLocation":"27377:12:104","nodeType":"VariableDeclaration","scope":23438,"src":"27327:62:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":23386,"keyType":{"id":23383,"name":"address","nodeType":"ElementaryTypeName","src":"27335:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"27327:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":23385,"nodeType":"UserDefinedTypeName","pathNode":{"id":23384,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"27346:21:104"},"referencedDeclaration":23909,"src":"27346:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":23391,"mutability":"mutable","name":"reservesList","nameLocation":"27431:12:104","nodeType":"VariableDeclaration","scope":23438,"src":"27395:48:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":23390,"keyType":{"id":23388,"name":"uint256","nodeType":"ElementaryTypeName","src":"27403:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"27395:27:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":23389,"name":"address","nodeType":"ElementaryTypeName","src":"27414:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":23394,"mutability":"mutable","name":"userConfig","nameLocation":"27488:10:104","nodeType":"VariableDeclaration","scope":23438,"src":"27449:49:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":23393,"nodeType":"UserDefinedTypeName","pathNode":{"id":23392,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"27449:30:104"},"referencedDeclaration":23916,"src":"27449:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":23397,"mutability":"mutable","name":"reserveConfig","nameLocation":"27545:13:104","nodeType":"VariableDeclaration","scope":23438,"src":"27504:54:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23396,"nodeType":"UserDefinedTypeName","pathNode":{"id":23395,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"27504:33:104"},"referencedDeclaration":23912,"src":"27504:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"27321:241:104"},"returnParameters":{"id":23401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23438,"src":"27586:4:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23399,"name":"bool","nodeType":"ElementaryTypeName","src":"27586:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"27585:6:104"},"scope":23502,"src":"27289:620:104","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23500,"nodeType":"Block","src":"28821:565:104","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23461,"name":"reserveConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23454,"src":"28831:13:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":23462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":13668,"src":"28831:28:104","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":23463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28831:30:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28865:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28831:35:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23492,"nodeType":"IfStatement","src":"28827:464:104","trueBody":{"id":23491,"nodeType":"Block","src":"28868:423:104","statements":[{"assignments":[23468],"declarations":[{"constant":false,"id":23468,"mutability":"mutable","name":"addressesProvider","nameLocation":"29009:17:104","nodeType":"VariableDeclaration","scope":23491,"src":"28986:40:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":23467,"nodeType":"UserDefinedTypeName","pathNode":{"id":23466,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"28986:22:104"},"referencedDeclaration":5282,"src":"28986:22:104","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"id":23476,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":23470,"name":"aTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23456,"src":"29047:13:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23469,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31300,"src":"29029:17:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IncentivizedERC20_$31300_$","typeString":"type(contract IncentivizedERC20)"}},"id":23471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29029:32:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IncentivizedERC20_$31300","typeString":"contract IncentivizedERC20"}},"id":23472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"POOL","nodeType":"MemberAccess","referencedDeclaration":30880,"src":"29029:46:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IPool_$5073_$","typeString":"function () view external returns (contract IPool)"}},"id":23473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29029:48:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":23474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ADDRESSES_PROVIDER","nodeType":"MemberAccess","referencedDeclaration":4961,"src":"29029:76:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IPoolAddressesProvider_$5282_$","typeString":"function () view external returns (contract IPoolAddressesProvider)"}},"id":23475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29029:78:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"VariableDeclarationStatement","src":"28986:121:104"},{"condition":{"id":23487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"29128:135:104","subExpression":{"arguments":[{"id":23483,"name":"ISOLATED_COLLATERAL_SUPPLIER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21773,"src":"29198:33:104","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":23484,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29243:3:104","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"29243:10:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23478,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23468,"src":"29144:17:104","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":23479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"29144:31:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":23480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29144:33:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23477,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"29129:14:104","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$1352_$","typeString":"type(contract IAccessControl)"}},"id":23481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29129:49:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControl_$1352","typeString":"contract IAccessControl"}},"id":23482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":1319,"src":"29129:57:104","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view external returns (bool)"}},"id":23486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29129:134:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23490,"nodeType":"IfStatement","src":"29115:169:104","trueBody":{"expression":{"hexValue":"66616c7365","id":23488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29279:5:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":23460,"id":23489,"nodeType":"Return","src":"29272:12:104"}}]}},{"expression":{"arguments":[{"id":23494,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23444,"src":"29327:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23495,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23448,"src":"29341:12:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":23496,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23451,"src":"29355:10:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":23497,"name":"reserveConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23454,"src":"29367:13:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"id":23493,"name":"validateUseAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23438,"src":"29303:23:104","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory) view returns (bool)"}},"id":23498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29303:78:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":23460,"id":23499,"nodeType":"Return","src":"29296:85:104"}]},"documentation":{"id":23439,"nodeType":"StructuredDocumentation","src":"27913:566:104","text":" @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\n transfer, mint unbacked, and liquidate\n @dev This is used to ensure that isolated assets are not enabled as collateral automatically\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig the user configuration\n @param reserveConfig The reserve configuration\n @return True if the asset can be activated as collateral, false otherwise"},"id":23501,"implemented":true,"kind":"function","modifiers":[],"name":"validateAutomaticUseAsCollateral","nameLocation":"28491:32:104","nodeType":"FunctionDefinition","parameters":{"id":23457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23444,"mutability":"mutable","name":"reservesData","nameLocation":"28579:12:104","nodeType":"VariableDeclaration","scope":23501,"src":"28529:62:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":23443,"keyType":{"id":23440,"name":"address","nodeType":"ElementaryTypeName","src":"28537:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"28529:41:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":23442,"nodeType":"UserDefinedTypeName","pathNode":{"id":23441,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"28548:21:104"},"referencedDeclaration":23909,"src":"28548:21:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":23448,"mutability":"mutable","name":"reservesList","nameLocation":"28633:12:104","nodeType":"VariableDeclaration","scope":23501,"src":"28597:48:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":23447,"keyType":{"id":23445,"name":"uint256","nodeType":"ElementaryTypeName","src":"28605:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"28597:27:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":23446,"name":"address","nodeType":"ElementaryTypeName","src":"28616:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":23451,"mutability":"mutable","name":"userConfig","nameLocation":"28690:10:104","nodeType":"VariableDeclaration","scope":23501,"src":"28651:49:104","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":23450,"nodeType":"UserDefinedTypeName","pathNode":{"id":23449,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"28651:30:104"},"referencedDeclaration":23916,"src":"28651:30:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":23454,"mutability":"mutable","name":"reserveConfig","nameLocation":"28747:13:104","nodeType":"VariableDeclaration","scope":23501,"src":"28706:54:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23453,"nodeType":"UserDefinedTypeName","pathNode":{"id":23452,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"28706:33:104"},"referencedDeclaration":23912,"src":"28706:33:104","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":23456,"mutability":"mutable","name":"aTokenAddress","nameLocation":"28774:13:104","nodeType":"VariableDeclaration","scope":23501,"src":"28766:21:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23455,"name":"address","nodeType":"ElementaryTypeName","src":"28766:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"28523:268:104"},"returnParameters":{"id":23460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23501,"src":"28815:4:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23458,"name":"bool","nodeType":"ElementaryTypeName","src":"28815:4:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"28814:6:104"},"scope":23502,"src":"28482:904:104","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":23503,"src":"1731:27657:104","usedErrors":[]}],"src":"37:29352:104"},"id":104},"contracts/protocol/libraries/math/MathUtils.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/math/MathUtils.sol","exportedSymbols":{"MathUtils":[23692],"WadRayMath":[23813]},"id":23693,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":23504,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:105"},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"./WadRayMath.sol","id":23506,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23693,"sourceUnit":23814,"src":"62:44:105","symbolAliases":[{"foreign":{"id":23505,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:10:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MathUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":23507,"nodeType":"StructuredDocumentation","src":"108:136:105","text":" @title MathUtils library\n @author Aave\n @notice Provides functions to perform linear and compounded interest calculations"},"fullyImplemented":true,"id":23692,"linearizedBaseContracts":[23692],"name":"MathUtils","nameLocation":"253:9:105","nodeType":"ContractDefinition","nodes":[{"id":23510,"libraryName":{"id":23508,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"273:10:105"},"nodeType":"UsingForDirective","src":"267:29:105","typeName":{"id":23509,"name":"uint256","nodeType":"ElementaryTypeName","src":"288:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"documentation":{"id":23511,"nodeType":"StructuredDocumentation","src":"300:28:105","text":"@dev Ignoring leap years"},"id":23514,"mutability":"constant","name":"SECONDS_PER_YEAR","nameLocation":"357:16:105","nodeType":"VariableDeclaration","scope":23692,"src":"331:53:105","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23512,"name":"uint256","nodeType":"ElementaryTypeName","src":"331:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"333635","id":23513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"376:8:105","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_31536000_by_1","typeString":"int_const 31536000"},"value":"365"},"visibility":"internal"},{"body":{"id":23549,"nodeType":"Block","src":"819:215:105","statements":[{"assignments":[23525],"declarations":[{"constant":false,"id":23525,"mutability":"mutable","name":"result","nameLocation":"864:6:105","nodeType":"VariableDeclaration","scope":23549,"src":"856:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23524,"name":"uint256","nodeType":"ElementaryTypeName","src":"856:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23536,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23526,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23517,"src":"873:4:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23527,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"881:5:105","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":23528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"881:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":23531,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23519,"src":"907:19:105","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":23530,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"899:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":23529,"name":"uint256","nodeType":"ElementaryTypeName","src":"899:7:105","typeDescriptions":{}}},"id":23532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"899:28:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"881:46:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":23534,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"880:48:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"873:55:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"856:72:105"},{"id":23543,"nodeType":"UncheckedBlock","src":"934:59:105","statements":[{"expression":{"id":23541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23537,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"952:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23538,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"961:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":23539,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23514,"src":"970:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"961:25:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"952:34:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23542,"nodeType":"ExpressionStatement","src":"952:34:105"}]},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23544,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"1006:10:105","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":23545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"1006:14:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":23546,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"1023:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1006:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23523,"id":23548,"nodeType":"Return","src":"999:30:105"}]},"documentation":{"id":23515,"nodeType":"StructuredDocumentation","src":"389:308:105","text":" @dev Function to calculate the interest accumulated using a linear interest rate formula\n @param rate The interest rate, in ray\n @param lastUpdateTimestamp The timestamp of the last update of the interest\n @return The interest rate linearly accumulated during the timeDelta, in ray"},"id":23550,"implemented":true,"kind":"function","modifiers":[],"name":"calculateLinearInterest","nameLocation":"709:23:105","nodeType":"FunctionDefinition","parameters":{"id":23520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23517,"mutability":"mutable","name":"rate","nameLocation":"746:4:105","nodeType":"VariableDeclaration","scope":23550,"src":"738:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23516,"name":"uint256","nodeType":"ElementaryTypeName","src":"738:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23519,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"763:19:105","nodeType":"VariableDeclaration","scope":23550,"src":"756:26:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":23518,"name":"uint40","nodeType":"ElementaryTypeName","src":"756:6:105","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"732:54:105"},"returnParameters":{"id":23523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23522,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23550,"src":"810:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23521,"name":"uint256","nodeType":"ElementaryTypeName","src":"810:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"809:9:105"},"scope":23692,"src":"700:334:105","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23672,"nodeType":"Block","src":"1933:819:105","statements":[{"assignments":[23563],"declarations":[{"constant":false,"id":23563,"mutability":"mutable","name":"exp","nameLocation":"1978:3:105","nodeType":"VariableDeclaration","scope":23672,"src":"1970:11:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23562,"name":"uint256","nodeType":"ElementaryTypeName","src":"1970:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23570,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23564,"name":"currentTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23557,"src":"1984:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":23567,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23555,"src":"2011:19:105","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":23566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2003:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":23565,"name":"uint256","nodeType":"ElementaryTypeName","src":"2003:7:105","typeDescriptions":{}}},"id":23568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2003:28:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1984:47:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1970:61:105"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23571,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23563,"src":"2042:3:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2049:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2042:8:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23578,"nodeType":"IfStatement","src":"2038:50:105","trueBody":{"id":23577,"nodeType":"Block","src":"2052:36:105","statements":[{"expression":{"expression":{"id":23574,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"2067:10:105","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":23575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"2067:14:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23561,"id":23576,"nodeType":"Return","src":"2060:21:105"}]}},{"assignments":[23580],"declarations":[{"constant":false,"id":23580,"mutability":"mutable","name":"expMinusOne","nameLocation":"2102:11:105","nodeType":"VariableDeclaration","scope":23672,"src":"2094:19:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23579,"name":"uint256","nodeType":"ElementaryTypeName","src":"2094:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23581,"nodeType":"VariableDeclarationStatement","src":"2094:19:105"},{"assignments":[23583],"declarations":[{"constant":false,"id":23583,"mutability":"mutable","name":"expMinusTwo","nameLocation":"2127:11:105","nodeType":"VariableDeclaration","scope":23672,"src":"2119:19:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23582,"name":"uint256","nodeType":"ElementaryTypeName","src":"2119:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23584,"nodeType":"VariableDeclarationStatement","src":"2119:19:105"},{"assignments":[23586],"declarations":[{"constant":false,"id":23586,"mutability":"mutable","name":"basePowerTwo","nameLocation":"2152:12:105","nodeType":"VariableDeclaration","scope":23672,"src":"2144:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23585,"name":"uint256","nodeType":"ElementaryTypeName","src":"2144:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23587,"nodeType":"VariableDeclarationStatement","src":"2144:20:105"},{"assignments":[23589],"declarations":[{"constant":false,"id":23589,"mutability":"mutable","name":"basePowerThree","nameLocation":"2178:14:105","nodeType":"VariableDeclaration","scope":23672,"src":"2170:22:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23588,"name":"uint256","nodeType":"ElementaryTypeName","src":"2170:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23590,"nodeType":"VariableDeclarationStatement","src":"2170:22:105"},{"id":23629,"nodeType":"UncheckedBlock","src":"2198:240:105","statements":[{"expression":{"id":23595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23591,"name":"expMinusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23580,"src":"2216:11:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23592,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23563,"src":"2230:3:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2236:1:105","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2230:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2216:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23596,"nodeType":"ExpressionStatement","src":"2216:21:105"},{"expression":{"id":23606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23597,"name":"expMinusTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23583,"src":"2246:11:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23598,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23563,"src":"2260:3:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"32","id":23599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2266:1:105","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2260:7:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":23604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2280:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":23605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2260:21:105","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23601,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23563,"src":"2270:3:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":23602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2276:1:105","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2270:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2246:35:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23607,"nodeType":"ExpressionStatement","src":"2246:35:105"},{"expression":{"id":23618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23608,"name":"basePowerTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23586,"src":"2290:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":23611,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"2317:4:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23609,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"2305:4:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"2305:11:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":23612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2305:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":23613,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23514,"src":"2326:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":23614,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23514,"src":"2345:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2326:35:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":23616,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2325:37:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2305:57:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2290:72:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23619,"nodeType":"ExpressionStatement","src":"2290:72:105"},{"expression":{"id":23627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23620,"name":"basePowerThree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23589,"src":"2370:14:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":23623,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"2407:4:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23621,"name":"basePowerTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23586,"src":"2387:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"2387:19:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":23624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2387:25:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":23625,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23514,"src":"2415:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2387:44:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2370:61:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23628,"nodeType":"ExpressionStatement","src":"2370:61:105"}]},{"assignments":[23631],"declarations":[{"constant":false,"id":23631,"mutability":"mutable","name":"secondTerm","nameLocation":"2452:10:105","nodeType":"VariableDeclaration","scope":23672,"src":"2444:18:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23630,"name":"uint256","nodeType":"ElementaryTypeName","src":"2444:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23637,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23632,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23563,"src":"2465:3:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":23633,"name":"expMinusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23580,"src":"2471:11:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2465:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":23635,"name":"basePowerTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23586,"src":"2485:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2465:32:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2444:53:105"},{"id":23642,"nodeType":"UncheckedBlock","src":"2503:40:105","statements":[{"expression":{"id":23640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23638,"name":"secondTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23631,"src":"2521:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"32","id":23639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2535:1:105","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2521:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23641,"nodeType":"ExpressionStatement","src":"2521:15:105"}]},{"assignments":[23644],"declarations":[{"constant":false,"id":23644,"mutability":"mutable","name":"thirdTerm","nameLocation":"2556:9:105","nodeType":"VariableDeclaration","scope":23672,"src":"2548:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23643,"name":"uint256","nodeType":"ElementaryTypeName","src":"2548:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23652,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23645,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23563,"src":"2568:3:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":23646,"name":"expMinusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23580,"src":"2574:11:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2568:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":23648,"name":"expMinusTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23583,"src":"2588:11:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2568:31:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":23650,"name":"basePowerThree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23589,"src":"2602:14:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2568:48:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2548:68:105"},{"id":23657,"nodeType":"UncheckedBlock","src":"2622:39:105","statements":[{"expression":{"id":23655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23653,"name":"thirdTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23644,"src":"2640:9:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"36","id":23654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2653:1:105","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"2640:14:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23656,"nodeType":"ExpressionStatement","src":"2640:14:105"}]},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23658,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"2674:10:105","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":23659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"2674:14:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23660,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"2692:4:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":23661,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23563,"src":"2699:3:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2692:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":23663,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2691:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":23664,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23514,"src":"2706:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2691:31:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2674:48:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":23667,"name":"secondTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23631,"src":"2725:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2674:61:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":23669,"name":"thirdTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23644,"src":"2738:9:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2674:73:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23561,"id":23671,"nodeType":"Return","src":"2667:80:105"}]},"documentation":{"id":23551,"nodeType":"StructuredDocumentation","src":"1038:739:105","text":" @dev Function to calculate the interest using a compounded interest rate formula\n To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\n  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\n The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\n gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\n error per different time periods\n @param rate The interest rate, in ray\n @param lastUpdateTimestamp The timestamp of the last update of the interest\n @return The interest rate compounded during the timeDelta, in ray"},"id":23673,"implemented":true,"kind":"function","modifiers":[],"name":"calculateCompoundedInterest","nameLocation":"1789:27:105","nodeType":"FunctionDefinition","parameters":{"id":23558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23553,"mutability":"mutable","name":"rate","nameLocation":"1830:4:105","nodeType":"VariableDeclaration","scope":23673,"src":"1822:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23552,"name":"uint256","nodeType":"ElementaryTypeName","src":"1822:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23555,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"1847:19:105","nodeType":"VariableDeclaration","scope":23673,"src":"1840:26:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":23554,"name":"uint40","nodeType":"ElementaryTypeName","src":"1840:6:105","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":23557,"mutability":"mutable","name":"currentTimestamp","nameLocation":"1880:16:105","nodeType":"VariableDeclaration","scope":23673,"src":"1872:24:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23556,"name":"uint256","nodeType":"ElementaryTypeName","src":"1872:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1816:84:105"},"returnParameters":{"id":23561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23673,"src":"1924:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23559,"name":"uint256","nodeType":"ElementaryTypeName","src":"1924:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1923:9:105"},"scope":23692,"src":"1780:972:105","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23690,"nodeType":"Block","src":"3265:89:105","statements":[{"expression":{"arguments":[{"id":23684,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23676,"src":"3306:4:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23685,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23678,"src":"3312:19:105","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"expression":{"id":23686,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3333:5:105","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":23687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"3333:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23683,"name":"calculateCompoundedInterest","nodeType":"Identifier","overloadedDeclarations":[23673,23691],"referencedDeclaration":23673,"src":"3278:27:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint40_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint40,uint256) pure returns (uint256)"}},"id":23688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3278:71:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23682,"id":23689,"nodeType":"Return","src":"3271:78:105"}]},"documentation":{"id":23674,"nodeType":"StructuredDocumentation","src":"2756:383:105","text":" @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\n @param rate The interest rate (in ray)\n @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\n @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray"},"id":23691,"implemented":true,"kind":"function","modifiers":[],"name":"calculateCompoundedInterest","nameLocation":"3151:27:105","nodeType":"FunctionDefinition","parameters":{"id":23679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23676,"mutability":"mutable","name":"rate","nameLocation":"3192:4:105","nodeType":"VariableDeclaration","scope":23691,"src":"3184:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23675,"name":"uint256","nodeType":"ElementaryTypeName","src":"3184:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23678,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"3209:19:105","nodeType":"VariableDeclaration","scope":23691,"src":"3202:26:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":23677,"name":"uint40","nodeType":"ElementaryTypeName","src":"3202:6:105","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"3178:54:105"},"returnParameters":{"id":23682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23681,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23691,"src":"3256:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23680,"name":"uint256","nodeType":"ElementaryTypeName","src":"3256:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3255:9:105"},"scope":23692,"src":"3142:212:105","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":23693,"src":"245:3111:105","usedErrors":[]}],"src":"37:3320:105"},"id":105},"contracts/protocol/libraries/math/PercentageMath.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","exportedSymbols":{"PercentageMath":[23726]},"id":23727,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":23694,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:106"},{"abstract":false,"baseContracts":[],"canonicalName":"PercentageMath","contractDependencies":[],"contractKind":"library","documentation":{"id":23695,"nodeType":"StructuredDocumentation","src":"62:347:106","text":" @title PercentageMath library\n @author Aave\n @notice Provides functions to perform percentage calculations\n @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\n @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down."},"fullyImplemented":true,"id":23726,"linearizedBaseContracts":[23726],"name":"PercentageMath","nameLocation":"418:14:106","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":23698,"mutability":"constant","name":"PERCENTAGE_FACTOR","nameLocation":"504:17:106","nodeType":"VariableDeclaration","scope":23726,"src":"478:49:106","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23696,"name":"uint256","nodeType":"ElementaryTypeName","src":"478:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316534","id":23697,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"524:3:106","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"1e4"},"visibility":"internal"},{"constant":true,"id":23701,"mutability":"constant","name":"HALF_PERCENTAGE_FACTOR","nameLocation":"595:22:106","nodeType":"VariableDeclaration","scope":23726,"src":"569:56:106","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23699,"name":"uint256","nodeType":"ElementaryTypeName","src":"569:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e356534","id":23700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"620:5:106","typeDescriptions":{"typeIdentifier":"t_rational_5000_by_1","typeString":"int_const 5000"},"value":"0.5e4"},"visibility":"internal"},{"body":{"id":23712,"nodeType":"Block","src":"1099:402:106","statements":[{"AST":{"nodeType":"YulBlock","src":"1207:290:106","statements":[{"body":{"nodeType":"YulBlock","src":"1368:30:106","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1385:1:106","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1388:1:106","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1378:6:106"},"nodeType":"YulFunctionCall","src":"1378:12:106"},"nodeType":"YulExpressionStatement","src":"1378:12:106"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"percentage","nodeType":"YulIdentifier","src":"1255:10:106"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1248:6:106"},"nodeType":"YulFunctionCall","src":"1248:18:106"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1288:5:106"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1307:1:106","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1303:3:106"},"nodeType":"YulFunctionCall","src":"1303:6:106"},{"name":"HALF_PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"1311:22:106"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1299:3:106"},"nodeType":"YulFunctionCall","src":"1299:35:106"},{"name":"percentage","nodeType":"YulIdentifier","src":"1336:10:106"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1295:3:106"},"nodeType":"YulFunctionCall","src":"1295:52:106"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1285:2:106"},"nodeType":"YulFunctionCall","src":"1285:63:106"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1278:6:106"},"nodeType":"YulFunctionCall","src":"1278:71:106"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1234:2:106"},"nodeType":"YulFunctionCall","src":"1234:125:106"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1218:6:106"},"nodeType":"YulFunctionCall","src":"1218:149:106"},"nodeType":"YulIf","src":"1215:183:106"},{"nodeType":"YulAssignment","src":"1406:85:106","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1428:5:106"},{"name":"percentage","nodeType":"YulIdentifier","src":"1435:10:106"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1424:3:106"},"nodeType":"YulFunctionCall","src":"1424:22:106"},{"name":"HALF_PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"1448:22:106"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1420:3:106"},"nodeType":"YulFunctionCall","src":"1420:51:106"},{"name":"PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"1473:17:106"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1416:3:106"},"nodeType":"YulFunctionCall","src":"1416:75:106"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"1406:6:106"}]}]},"evmVersion":"london","externalReferences":[{"declaration":23701,"isOffset":false,"isSlot":false,"src":"1311:22:106","valueSize":1},{"declaration":23701,"isOffset":false,"isSlot":false,"src":"1448:22:106","valueSize":1},{"declaration":23698,"isOffset":false,"isSlot":false,"src":"1473:17:106","valueSize":1},{"declaration":23706,"isOffset":false,"isSlot":false,"src":"1255:10:106","valueSize":1},{"declaration":23706,"isOffset":false,"isSlot":false,"src":"1336:10:106","valueSize":1},{"declaration":23706,"isOffset":false,"isSlot":false,"src":"1435:10:106","valueSize":1},{"declaration":23709,"isOffset":false,"isSlot":false,"src":"1406:6:106","valueSize":1},{"declaration":23704,"isOffset":false,"isSlot":false,"src":"1288:5:106","valueSize":1},{"declaration":23704,"isOffset":false,"isSlot":false,"src":"1428:5:106","valueSize":1}],"id":23711,"nodeType":"InlineAssembly","src":"1198:299:106"}]},"documentation":{"id":23702,"nodeType":"StructuredDocumentation","src":"630:372:106","text":" @notice Executes a percentage multiplication\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param value The value of which the percentage needs to be calculated\n @param percentage The percentage of the value to be calculated\n @return result value percentmul percentage"},"id":23713,"implemented":true,"kind":"function","modifiers":[],"name":"percentMul","nameLocation":"1014:10:106","nodeType":"FunctionDefinition","parameters":{"id":23707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23704,"mutability":"mutable","name":"value","nameLocation":"1033:5:106","nodeType":"VariableDeclaration","scope":23713,"src":"1025:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23703,"name":"uint256","nodeType":"ElementaryTypeName","src":"1025:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23706,"mutability":"mutable","name":"percentage","nameLocation":"1048:10:106","nodeType":"VariableDeclaration","scope":23713,"src":"1040:18:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23705,"name":"uint256","nodeType":"ElementaryTypeName","src":"1040:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1024:35:106"},"returnParameters":{"id":23710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23709,"mutability":"mutable","name":"result","nameLocation":"1091:6:106","nodeType":"VariableDeclaration","scope":23713,"src":"1083:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23708,"name":"uint256","nodeType":"ElementaryTypeName","src":"1083:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1082:16:106"},"scope":23726,"src":"1005:496:106","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23724,"nodeType":"Block","src":"1968:378:106","statements":[{"AST":{"nodeType":"YulBlock","src":"2075:267:106","statements":[{"body":{"nodeType":"YulBlock","src":"2217:30:106","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2234:1:106","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2237:1:106","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2227:6:106"},"nodeType":"YulFunctionCall","src":"2227:12:106"},"nodeType":"YulExpressionStatement","src":"2227:12:106"}]},"condition":{"arguments":[{"arguments":[{"name":"percentage","nodeType":"YulIdentifier","src":"2105:10:106"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2098:6:106"},"nodeType":"YulFunctionCall","src":"2098:18:106"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2143:5:106"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2162:1:106","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2158:3:106"},"nodeType":"YulFunctionCall","src":"2158:6:106"},{"arguments":[{"name":"percentage","nodeType":"YulIdentifier","src":"2170:10:106"},{"kind":"number","nodeType":"YulLiteral","src":"2182:1:106","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2166:3:106"},"nodeType":"YulFunctionCall","src":"2166:18:106"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2154:3:106"},"nodeType":"YulFunctionCall","src":"2154:31:106"},{"name":"PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"2187:17:106"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2150:3:106"},"nodeType":"YulFunctionCall","src":"2150:55:106"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2140:2:106"},"nodeType":"YulFunctionCall","src":"2140:66:106"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2133:6:106"},"nodeType":"YulFunctionCall","src":"2133:74:106"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2126:6:106"},"nodeType":"YulFunctionCall","src":"2126:82:106"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2086:2:106"},"nodeType":"YulFunctionCall","src":"2086:130:106"},"nodeType":"YulIf","src":"2083:164:106"},{"nodeType":"YulAssignment","src":"2255:81:106","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2277:5:106"},{"name":"PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"2284:17:106"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2273:3:106"},"nodeType":"YulFunctionCall","src":"2273:29:106"},{"arguments":[{"name":"percentage","nodeType":"YulIdentifier","src":"2308:10:106"},{"kind":"number","nodeType":"YulLiteral","src":"2320:1:106","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2304:3:106"},"nodeType":"YulFunctionCall","src":"2304:18:106"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2269:3:106"},"nodeType":"YulFunctionCall","src":"2269:54:106"},{"name":"percentage","nodeType":"YulIdentifier","src":"2325:10:106"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2265:3:106"},"nodeType":"YulFunctionCall","src":"2265:71:106"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"2255:6:106"}]}]},"evmVersion":"london","externalReferences":[{"declaration":23698,"isOffset":false,"isSlot":false,"src":"2187:17:106","valueSize":1},{"declaration":23698,"isOffset":false,"isSlot":false,"src":"2284:17:106","valueSize":1},{"declaration":23718,"isOffset":false,"isSlot":false,"src":"2105:10:106","valueSize":1},{"declaration":23718,"isOffset":false,"isSlot":false,"src":"2170:10:106","valueSize":1},{"declaration":23718,"isOffset":false,"isSlot":false,"src":"2308:10:106","valueSize":1},{"declaration":23718,"isOffset":false,"isSlot":false,"src":"2325:10:106","valueSize":1},{"declaration":23721,"isOffset":false,"isSlot":false,"src":"2255:6:106","valueSize":1},{"declaration":23716,"isOffset":false,"isSlot":false,"src":"2143:5:106","valueSize":1},{"declaration":23716,"isOffset":false,"isSlot":false,"src":"2277:5:106","valueSize":1}],"id":23723,"nodeType":"InlineAssembly","src":"2066:276:106"}]},"documentation":{"id":23714,"nodeType":"StructuredDocumentation","src":"1505:366:106","text":" @notice Executes a percentage division\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param value The value of which the percentage needs to be calculated\n @param percentage The percentage of the value to be calculated\n @return result value percentdiv percentage"},"id":23725,"implemented":true,"kind":"function","modifiers":[],"name":"percentDiv","nameLocation":"1883:10:106","nodeType":"FunctionDefinition","parameters":{"id":23719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23716,"mutability":"mutable","name":"value","nameLocation":"1902:5:106","nodeType":"VariableDeclaration","scope":23725,"src":"1894:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23715,"name":"uint256","nodeType":"ElementaryTypeName","src":"1894:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23718,"mutability":"mutable","name":"percentage","nameLocation":"1917:10:106","nodeType":"VariableDeclaration","scope":23725,"src":"1909:18:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23717,"name":"uint256","nodeType":"ElementaryTypeName","src":"1909:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1893:35:106"},"returnParameters":{"id":23722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23721,"mutability":"mutable","name":"result","nameLocation":"1960:6:106","nodeType":"VariableDeclaration","scope":23725,"src":"1952:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23720,"name":"uint256","nodeType":"ElementaryTypeName","src":"1952:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1951:16:106"},"scope":23726,"src":"1874:472:106","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":23727,"src":"410:1938:106","usedErrors":[]}],"src":"37:2312:106"},"id":106},"contracts/protocol/libraries/math/WadRayMath.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","exportedSymbols":{"WadRayMath":[23813]},"id":23814,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":23728,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:107"},{"abstract":false,"baseContracts":[],"canonicalName":"WadRayMath","contractDependencies":[],"contractKind":"library","documentation":{"id":23729,"nodeType":"StructuredDocumentation","src":"62:376:107","text":" @title WadRayMath library\n @author Aave\n @notice Provides functions to perform calculations with Wad and Ray units\n @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\n with 27 digits of precision)\n @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down."},"fullyImplemented":true,"id":23813,"linearizedBaseContracts":[23813],"name":"WadRayMath","nameLocation":"447:10:107","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":23732,"mutability":"constant","name":"WAD","nameLocation":"610:3:107","nodeType":"VariableDeclaration","scope":23813,"src":"584:36:107","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23730,"name":"uint256","nodeType":"ElementaryTypeName","src":"584:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":23731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"616:4:107","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":23735,"mutability":"constant","name":"HALF_WAD","nameLocation":"650:8:107","nodeType":"VariableDeclaration","scope":23813,"src":"624:43:107","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23733,"name":"uint256","nodeType":"ElementaryTypeName","src":"624:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e35653138","id":23734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"661:6:107","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"0.5e18"},"visibility":"internal"},{"constant":true,"id":23738,"mutability":"constant","name":"RAY","nameLocation":"698:3:107","nodeType":"VariableDeclaration","scope":23813,"src":"672:36:107","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23736,"name":"uint256","nodeType":"ElementaryTypeName","src":"672:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653237","id":23737,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"704:4:107","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000_by_1","typeString":"int_const 1000000000000000000000000000"},"value":"1e27"},"visibility":"internal"},{"constant":true,"id":23741,"mutability":"constant","name":"HALF_RAY","nameLocation":"738:8:107","nodeType":"VariableDeclaration","scope":23813,"src":"712:43:107","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23739,"name":"uint256","nodeType":"ElementaryTypeName","src":"712:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e35653237","id":23740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"749:6:107","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000000000000_by_1","typeString":"int_const 500000000000000000000000000"},"value":"0.5e27"},"visibility":"internal"},{"constant":true,"id":23744,"mutability":"constant","name":"WAD_RAY_RATIO","nameLocation":"786:13:107","nodeType":"VariableDeclaration","scope":23813,"src":"760:45:107","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23742,"name":"uint256","nodeType":"ElementaryTypeName","src":"760:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316539","id":23743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"802:3:107","typeDescriptions":{"typeIdentifier":"t_rational_1000000000_by_1","typeString":"int_const 1000000000"},"value":"1e9"},"visibility":"internal"},{"body":{"id":23755,"nodeType":"Block","src":"1147:247:107","statements":[{"AST":{"nodeType":"YulBlock","src":"1228:162:107","statements":[{"body":{"nodeType":"YulBlock","src":"1307:30:107","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1324:1:107","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1327:1:107","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1317:6:107"},"nodeType":"YulFunctionCall","src":"1317:12:107"},"nodeType":"YulExpressionStatement","src":"1317:12:107"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"1256:1:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1249:6:107"},"nodeType":"YulFunctionCall","src":"1249:9:107"},{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"1270:1:107"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1285:1:107","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1281:3:107"},"nodeType":"YulFunctionCall","src":"1281:6:107"},{"name":"HALF_WAD","nodeType":"YulIdentifier","src":"1289:8:107"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1277:3:107"},"nodeType":"YulFunctionCall","src":"1277:21:107"},{"name":"b","nodeType":"YulIdentifier","src":"1300:1:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1273:3:107"},"nodeType":"YulFunctionCall","src":"1273:29:107"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1267:2:107"},"nodeType":"YulFunctionCall","src":"1267:36:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1260:6:107"},"nodeType":"YulFunctionCall","src":"1260:44:107"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1246:2:107"},"nodeType":"YulFunctionCall","src":"1246:59:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1239:6:107"},"nodeType":"YulFunctionCall","src":"1239:67:107"},"nodeType":"YulIf","src":"1236:101:107"},{"nodeType":"YulAssignment","src":"1345:39:107","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"1362:1:107"},{"name":"b","nodeType":"YulIdentifier","src":"1365:1:107"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1358:3:107"},"nodeType":"YulFunctionCall","src":"1358:9:107"},{"name":"HALF_WAD","nodeType":"YulIdentifier","src":"1369:8:107"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1354:3:107"},"nodeType":"YulFunctionCall","src":"1354:24:107"},{"name":"WAD","nodeType":"YulIdentifier","src":"1380:3:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1350:3:107"},"nodeType":"YulFunctionCall","src":"1350:34:107"},"variableNames":[{"name":"c","nodeType":"YulIdentifier","src":"1345:1:107"}]}]},"evmVersion":"london","externalReferences":[{"declaration":23735,"isOffset":false,"isSlot":false,"src":"1289:8:107","valueSize":1},{"declaration":23735,"isOffset":false,"isSlot":false,"src":"1369:8:107","valueSize":1},{"declaration":23732,"isOffset":false,"isSlot":false,"src":"1380:3:107","valueSize":1},{"declaration":23747,"isOffset":false,"isSlot":false,"src":"1270:1:107","valueSize":1},{"declaration":23747,"isOffset":false,"isSlot":false,"src":"1362:1:107","valueSize":1},{"declaration":23749,"isOffset":false,"isSlot":false,"src":"1256:1:107","valueSize":1},{"declaration":23749,"isOffset":false,"isSlot":false,"src":"1300:1:107","valueSize":1},{"declaration":23749,"isOffset":false,"isSlot":false,"src":"1365:1:107","valueSize":1},{"declaration":23752,"isOffset":false,"isSlot":false,"src":"1345:1:107","valueSize":1}],"id":23754,"nodeType":"InlineAssembly","src":"1219:171:107"}]},"documentation":{"id":23745,"nodeType":"StructuredDocumentation","src":"810:262:107","text":" @dev Multiplies two wad, rounding half up to the nearest wad\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Wad\n @param b Wad\n @return c = a*b, in wad"},"id":23756,"implemented":true,"kind":"function","modifiers":[],"name":"wadMul","nameLocation":"1084:6:107","nodeType":"FunctionDefinition","parameters":{"id":23750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23747,"mutability":"mutable","name":"a","nameLocation":"1099:1:107","nodeType":"VariableDeclaration","scope":23756,"src":"1091:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23746,"name":"uint256","nodeType":"ElementaryTypeName","src":"1091:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23749,"mutability":"mutable","name":"b","nameLocation":"1110:1:107","nodeType":"VariableDeclaration","scope":23756,"src":"1102:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23748,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1090:22:107"},"returnParameters":{"id":23753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23752,"mutability":"mutable","name":"c","nameLocation":"1144:1:107","nodeType":"VariableDeclaration","scope":23756,"src":"1136:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23751,"name":"uint256","nodeType":"ElementaryTypeName","src":"1136:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1135:11:107"},"scope":23813,"src":"1075:319:107","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23767,"nodeType":"Block","src":"1732:250:107","statements":[{"AST":{"nodeType":"YulBlock","src":"1812:166:107","statements":[{"body":{"nodeType":"YulBlock","src":"1894:30:107","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1911:1:107","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1914:1:107","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1904:6:107"},"nodeType":"YulFunctionCall","src":"1904:12:107"},"nodeType":"YulExpressionStatement","src":"1904:12:107"}]},"condition":{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"1833:1:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1826:6:107"},"nodeType":"YulFunctionCall","src":"1826:9:107"},{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"1854:1:107"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1869:1:107","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1865:3:107"},"nodeType":"YulFunctionCall","src":"1865:6:107"},{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"1877:1:107"},{"kind":"number","nodeType":"YulLiteral","src":"1880:1:107","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1873:3:107"},"nodeType":"YulFunctionCall","src":"1873:9:107"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1861:3:107"},"nodeType":"YulFunctionCall","src":"1861:22:107"},{"name":"WAD","nodeType":"YulIdentifier","src":"1885:3:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1857:3:107"},"nodeType":"YulFunctionCall","src":"1857:32:107"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1851:2:107"},"nodeType":"YulFunctionCall","src":"1851:39:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1844:6:107"},"nodeType":"YulFunctionCall","src":"1844:47:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1837:6:107"},"nodeType":"YulFunctionCall","src":"1837:55:107"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1823:2:107"},"nodeType":"YulFunctionCall","src":"1823:70:107"},"nodeType":"YulIf","src":"1820:104:107"},{"nodeType":"YulAssignment","src":"1932:40:107","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"1949:1:107"},{"name":"WAD","nodeType":"YulIdentifier","src":"1952:3:107"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1945:3:107"},"nodeType":"YulFunctionCall","src":"1945:11:107"},{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"1962:1:107"},{"kind":"number","nodeType":"YulLiteral","src":"1965:1:107","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1958:3:107"},"nodeType":"YulFunctionCall","src":"1958:9:107"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1941:3:107"},"nodeType":"YulFunctionCall","src":"1941:27:107"},{"name":"b","nodeType":"YulIdentifier","src":"1970:1:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1937:3:107"},"nodeType":"YulFunctionCall","src":"1937:35:107"},"variableNames":[{"name":"c","nodeType":"YulIdentifier","src":"1932:1:107"}]}]},"evmVersion":"london","externalReferences":[{"declaration":23732,"isOffset":false,"isSlot":false,"src":"1885:3:107","valueSize":1},{"declaration":23732,"isOffset":false,"isSlot":false,"src":"1952:3:107","valueSize":1},{"declaration":23759,"isOffset":false,"isSlot":false,"src":"1854:1:107","valueSize":1},{"declaration":23759,"isOffset":false,"isSlot":false,"src":"1949:1:107","valueSize":1},{"declaration":23761,"isOffset":false,"isSlot":false,"src":"1833:1:107","valueSize":1},{"declaration":23761,"isOffset":false,"isSlot":false,"src":"1877:1:107","valueSize":1},{"declaration":23761,"isOffset":false,"isSlot":false,"src":"1962:1:107","valueSize":1},{"declaration":23761,"isOffset":false,"isSlot":false,"src":"1970:1:107","valueSize":1},{"declaration":23764,"isOffset":false,"isSlot":false,"src":"1932:1:107","valueSize":1}],"id":23766,"nodeType":"InlineAssembly","src":"1803:175:107"}]},"documentation":{"id":23757,"nodeType":"StructuredDocumentation","src":"1398:259:107","text":" @dev Divides two wad, rounding half up to the nearest wad\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Wad\n @param b Wad\n @return c = a/b, in wad"},"id":23768,"implemented":true,"kind":"function","modifiers":[],"name":"wadDiv","nameLocation":"1669:6:107","nodeType":"FunctionDefinition","parameters":{"id":23762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23759,"mutability":"mutable","name":"a","nameLocation":"1684:1:107","nodeType":"VariableDeclaration","scope":23768,"src":"1676:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23758,"name":"uint256","nodeType":"ElementaryTypeName","src":"1676:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23761,"mutability":"mutable","name":"b","nameLocation":"1695:1:107","nodeType":"VariableDeclaration","scope":23768,"src":"1687:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23760,"name":"uint256","nodeType":"ElementaryTypeName","src":"1687:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1675:22:107"},"returnParameters":{"id":23765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23764,"mutability":"mutable","name":"c","nameLocation":"1729:1:107","nodeType":"VariableDeclaration","scope":23768,"src":"1721:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23763,"name":"uint256","nodeType":"ElementaryTypeName","src":"1721:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1720:11:107"},"scope":23813,"src":"1660:322:107","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23779,"nodeType":"Block","src":"2325:247:107","statements":[{"AST":{"nodeType":"YulBlock","src":"2406:162:107","statements":[{"body":{"nodeType":"YulBlock","src":"2485:30:107","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2502:1:107","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2505:1:107","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2495:6:107"},"nodeType":"YulFunctionCall","src":"2495:12:107"},"nodeType":"YulExpressionStatement","src":"2495:12:107"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"2434:1:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2427:6:107"},"nodeType":"YulFunctionCall","src":"2427:9:107"},{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"2448:1:107"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2463:1:107","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2459:3:107"},"nodeType":"YulFunctionCall","src":"2459:6:107"},{"name":"HALF_RAY","nodeType":"YulIdentifier","src":"2467:8:107"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2455:3:107"},"nodeType":"YulFunctionCall","src":"2455:21:107"},{"name":"b","nodeType":"YulIdentifier","src":"2478:1:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2451:3:107"},"nodeType":"YulFunctionCall","src":"2451:29:107"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2445:2:107"},"nodeType":"YulFunctionCall","src":"2445:36:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2438:6:107"},"nodeType":"YulFunctionCall","src":"2438:44:107"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2424:2:107"},"nodeType":"YulFunctionCall","src":"2424:59:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2417:6:107"},"nodeType":"YulFunctionCall","src":"2417:67:107"},"nodeType":"YulIf","src":"2414:101:107"},{"nodeType":"YulAssignment","src":"2523:39:107","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"2540:1:107"},{"name":"b","nodeType":"YulIdentifier","src":"2543:1:107"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2536:3:107"},"nodeType":"YulFunctionCall","src":"2536:9:107"},{"name":"HALF_RAY","nodeType":"YulIdentifier","src":"2547:8:107"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2532:3:107"},"nodeType":"YulFunctionCall","src":"2532:24:107"},{"name":"RAY","nodeType":"YulIdentifier","src":"2558:3:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2528:3:107"},"nodeType":"YulFunctionCall","src":"2528:34:107"},"variableNames":[{"name":"c","nodeType":"YulIdentifier","src":"2523:1:107"}]}]},"evmVersion":"london","externalReferences":[{"declaration":23741,"isOffset":false,"isSlot":false,"src":"2467:8:107","valueSize":1},{"declaration":23741,"isOffset":false,"isSlot":false,"src":"2547:8:107","valueSize":1},{"declaration":23738,"isOffset":false,"isSlot":false,"src":"2558:3:107","valueSize":1},{"declaration":23771,"isOffset":false,"isSlot":false,"src":"2448:1:107","valueSize":1},{"declaration":23771,"isOffset":false,"isSlot":false,"src":"2540:1:107","valueSize":1},{"declaration":23773,"isOffset":false,"isSlot":false,"src":"2434:1:107","valueSize":1},{"declaration":23773,"isOffset":false,"isSlot":false,"src":"2478:1:107","valueSize":1},{"declaration":23773,"isOffset":false,"isSlot":false,"src":"2543:1:107","valueSize":1},{"declaration":23776,"isOffset":false,"isSlot":false,"src":"2523:1:107","valueSize":1}],"id":23778,"nodeType":"InlineAssembly","src":"2397:171:107"}]},"documentation":{"id":23769,"nodeType":"StructuredDocumentation","src":"1986:264:107","text":" @notice Multiplies two ray, rounding half up to the nearest ray\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Ray\n @param b Ray\n @return c = a raymul b"},"id":23780,"implemented":true,"kind":"function","modifiers":[],"name":"rayMul","nameLocation":"2262:6:107","nodeType":"FunctionDefinition","parameters":{"id":23774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23771,"mutability":"mutable","name":"a","nameLocation":"2277:1:107","nodeType":"VariableDeclaration","scope":23780,"src":"2269:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23770,"name":"uint256","nodeType":"ElementaryTypeName","src":"2269:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23773,"mutability":"mutable","name":"b","nameLocation":"2288:1:107","nodeType":"VariableDeclaration","scope":23780,"src":"2280:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23772,"name":"uint256","nodeType":"ElementaryTypeName","src":"2280:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2268:22:107"},"returnParameters":{"id":23777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23776,"mutability":"mutable","name":"c","nameLocation":"2322:1:107","nodeType":"VariableDeclaration","scope":23780,"src":"2314:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23775,"name":"uint256","nodeType":"ElementaryTypeName","src":"2314:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2313:11:107"},"scope":23813,"src":"2253:319:107","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23791,"nodeType":"Block","src":"2912:250:107","statements":[{"AST":{"nodeType":"YulBlock","src":"2992:166:107","statements":[{"body":{"nodeType":"YulBlock","src":"3074:30:107","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3091:1:107","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3094:1:107","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3084:6:107"},"nodeType":"YulFunctionCall","src":"3084:12:107"},"nodeType":"YulExpressionStatement","src":"3084:12:107"}]},"condition":{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"3013:1:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3006:6:107"},"nodeType":"YulFunctionCall","src":"3006:9:107"},{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"3034:1:107"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3049:1:107","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3045:3:107"},"nodeType":"YulFunctionCall","src":"3045:6:107"},{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"3057:1:107"},{"kind":"number","nodeType":"YulLiteral","src":"3060:1:107","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3053:3:107"},"nodeType":"YulFunctionCall","src":"3053:9:107"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3041:3:107"},"nodeType":"YulFunctionCall","src":"3041:22:107"},{"name":"RAY","nodeType":"YulIdentifier","src":"3065:3:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3037:3:107"},"nodeType":"YulFunctionCall","src":"3037:32:107"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3031:2:107"},"nodeType":"YulFunctionCall","src":"3031:39:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3024:6:107"},"nodeType":"YulFunctionCall","src":"3024:47:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3017:6:107"},"nodeType":"YulFunctionCall","src":"3017:55:107"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3003:2:107"},"nodeType":"YulFunctionCall","src":"3003:70:107"},"nodeType":"YulIf","src":"3000:104:107"},{"nodeType":"YulAssignment","src":"3112:40:107","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"3129:1:107"},{"name":"RAY","nodeType":"YulIdentifier","src":"3132:3:107"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3125:3:107"},"nodeType":"YulFunctionCall","src":"3125:11:107"},{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"3142:1:107"},{"kind":"number","nodeType":"YulLiteral","src":"3145:1:107","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3138:3:107"},"nodeType":"YulFunctionCall","src":"3138:9:107"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3121:3:107"},"nodeType":"YulFunctionCall","src":"3121:27:107"},{"name":"b","nodeType":"YulIdentifier","src":"3150:1:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3117:3:107"},"nodeType":"YulFunctionCall","src":"3117:35:107"},"variableNames":[{"name":"c","nodeType":"YulIdentifier","src":"3112:1:107"}]}]},"evmVersion":"london","externalReferences":[{"declaration":23738,"isOffset":false,"isSlot":false,"src":"3065:3:107","valueSize":1},{"declaration":23738,"isOffset":false,"isSlot":false,"src":"3132:3:107","valueSize":1},{"declaration":23783,"isOffset":false,"isSlot":false,"src":"3034:1:107","valueSize":1},{"declaration":23783,"isOffset":false,"isSlot":false,"src":"3129:1:107","valueSize":1},{"declaration":23785,"isOffset":false,"isSlot":false,"src":"3013:1:107","valueSize":1},{"declaration":23785,"isOffset":false,"isSlot":false,"src":"3057:1:107","valueSize":1},{"declaration":23785,"isOffset":false,"isSlot":false,"src":"3142:1:107","valueSize":1},{"declaration":23785,"isOffset":false,"isSlot":false,"src":"3150:1:107","valueSize":1},{"declaration":23788,"isOffset":false,"isSlot":false,"src":"3112:1:107","valueSize":1}],"id":23790,"nodeType":"InlineAssembly","src":"2983:175:107"}]},"documentation":{"id":23781,"nodeType":"StructuredDocumentation","src":"2576:261:107","text":" @notice Divides two ray, rounding half up to the nearest ray\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Ray\n @param b Ray\n @return c = a raydiv b"},"id":23792,"implemented":true,"kind":"function","modifiers":[],"name":"rayDiv","nameLocation":"2849:6:107","nodeType":"FunctionDefinition","parameters":{"id":23786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23783,"mutability":"mutable","name":"a","nameLocation":"2864:1:107","nodeType":"VariableDeclaration","scope":23792,"src":"2856:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23782,"name":"uint256","nodeType":"ElementaryTypeName","src":"2856:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23785,"mutability":"mutable","name":"b","nameLocation":"2875:1:107","nodeType":"VariableDeclaration","scope":23792,"src":"2867:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23784,"name":"uint256","nodeType":"ElementaryTypeName","src":"2867:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2855:22:107"},"returnParameters":{"id":23789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23788,"mutability":"mutable","name":"c","nameLocation":"2909:1:107","nodeType":"VariableDeclaration","scope":23792,"src":"2901:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23787,"name":"uint256","nodeType":"ElementaryTypeName","src":"2901:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2900:11:107"},"scope":23813,"src":"2840:322:107","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23801,"nodeType":"Block","src":"3485:191:107","statements":[{"AST":{"nodeType":"YulBlock","src":"3500:172:107","statements":[{"nodeType":"YulAssignment","src":"3508:26:107","value":{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"3517:1:107"},{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"3520:13:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3513:3:107"},"nodeType":"YulFunctionCall","src":"3513:21:107"},"variableNames":[{"name":"b","nodeType":"YulIdentifier","src":"3508:1:107"}]},{"nodeType":"YulVariableDeclaration","src":"3541:38:107","value":{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"3562:1:107"},{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"3565:13:107"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"3558:3:107"},"nodeType":"YulFunctionCall","src":"3558:21:107"},"variables":[{"name":"remainder","nodeType":"YulTypedName","src":"3545:9:107","type":""}]},{"body":{"nodeType":"YulBlock","src":"3634:32:107","statements":[{"nodeType":"YulAssignment","src":"3644:14:107","value":{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"3653:1:107"},{"kind":"number","nodeType":"YulLiteral","src":"3656:1:107","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3649:3:107"},"nodeType":"YulFunctionCall","src":"3649:9:107"},"variableNames":[{"name":"b","nodeType":"YulIdentifier","src":"3644:1:107"}]}]},"condition":{"arguments":[{"arguments":[{"name":"remainder","nodeType":"YulIdentifier","src":"3599:9:107"},{"arguments":[{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"3614:13:107"},{"kind":"number","nodeType":"YulLiteral","src":"3629:1:107","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3610:3:107"},"nodeType":"YulFunctionCall","src":"3610:21:107"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3596:2:107"},"nodeType":"YulFunctionCall","src":"3596:36:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3589:6:107"},"nodeType":"YulFunctionCall","src":"3589:44:107"},"nodeType":"YulIf","src":"3586:80:107"}]},"evmVersion":"london","externalReferences":[{"declaration":23744,"isOffset":false,"isSlot":false,"src":"3520:13:107","valueSize":1},{"declaration":23744,"isOffset":false,"isSlot":false,"src":"3565:13:107","valueSize":1},{"declaration":23744,"isOffset":false,"isSlot":false,"src":"3614:13:107","valueSize":1},{"declaration":23795,"isOffset":false,"isSlot":false,"src":"3517:1:107","valueSize":1},{"declaration":23795,"isOffset":false,"isSlot":false,"src":"3562:1:107","valueSize":1},{"declaration":23798,"isOffset":false,"isSlot":false,"src":"3508:1:107","valueSize":1},{"declaration":23798,"isOffset":false,"isSlot":false,"src":"3644:1:107","valueSize":1},{"declaration":23798,"isOffset":false,"isSlot":false,"src":"3653:1:107","valueSize":1}],"id":23800,"nodeType":"InlineAssembly","src":"3491:181:107"}]},"documentation":{"id":23793,"nodeType":"StructuredDocumentation","src":"3166:253:107","text":" @dev Casts ray down to wad\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Ray\n @return b = a converted to wad, rounded half up to the nearest wad"},"id":23802,"implemented":true,"kind":"function","modifiers":[],"name":"rayToWad","nameLocation":"3431:8:107","nodeType":"FunctionDefinition","parameters":{"id":23796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23795,"mutability":"mutable","name":"a","nameLocation":"3448:1:107","nodeType":"VariableDeclaration","scope":23802,"src":"3440:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23794,"name":"uint256","nodeType":"ElementaryTypeName","src":"3440:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3439:11:107"},"returnParameters":{"id":23799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23798,"mutability":"mutable","name":"b","nameLocation":"3482:1:107","nodeType":"VariableDeclaration","scope":23802,"src":"3474:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23797,"name":"uint256","nodeType":"ElementaryTypeName","src":"3474:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3473:11:107"},"scope":23813,"src":"3422:254:107","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23811,"nodeType":"Block","src":"3964:184:107","statements":[{"AST":{"nodeType":"YulBlock","src":"4026:118:107","statements":[{"nodeType":"YulAssignment","src":"4034:26:107","value":{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"4043:1:107"},{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"4046:13:107"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4039:3:107"},"nodeType":"YulFunctionCall","src":"4039:21:107"},"variableNames":[{"name":"b","nodeType":"YulIdentifier","src":"4034:1:107"}]},{"body":{"nodeType":"YulBlock","src":"4108:30:107","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4125:1:107","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4128:1:107","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4118:6:107"},"nodeType":"YulFunctionCall","src":"4118:12:107"},"nodeType":"YulExpressionStatement","src":"4118:12:107"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"4085:1:107"},{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"4088:13:107"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4081:3:107"},"nodeType":"YulFunctionCall","src":"4081:21:107"},{"name":"a","nodeType":"YulIdentifier","src":"4104:1:107"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4078:2:107"},"nodeType":"YulFunctionCall","src":"4078:28:107"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4071:6:107"},"nodeType":"YulFunctionCall","src":"4071:36:107"},"nodeType":"YulIf","src":"4068:70:107"}]},"evmVersion":"london","externalReferences":[{"declaration":23744,"isOffset":false,"isSlot":false,"src":"4046:13:107","valueSize":1},{"declaration":23744,"isOffset":false,"isSlot":false,"src":"4088:13:107","valueSize":1},{"declaration":23805,"isOffset":false,"isSlot":false,"src":"4043:1:107","valueSize":1},{"declaration":23805,"isOffset":false,"isSlot":false,"src":"4104:1:107","valueSize":1},{"declaration":23808,"isOffset":false,"isSlot":false,"src":"4034:1:107","valueSize":1},{"declaration":23808,"isOffset":false,"isSlot":false,"src":"4085:1:107","valueSize":1}],"id":23810,"nodeType":"InlineAssembly","src":"4017:127:107"}]},"documentation":{"id":23803,"nodeType":"StructuredDocumentation","src":"3680:218:107","text":" @dev Converts wad up to ray\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Wad\n @return b = a converted in ray"},"id":23812,"implemented":true,"kind":"function","modifiers":[],"name":"wadToRay","nameLocation":"3910:8:107","nodeType":"FunctionDefinition","parameters":{"id":23806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23805,"mutability":"mutable","name":"a","nameLocation":"3927:1:107","nodeType":"VariableDeclaration","scope":23812,"src":"3919:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23804,"name":"uint256","nodeType":"ElementaryTypeName","src":"3919:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3918:11:107"},"returnParameters":{"id":23809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23808,"mutability":"mutable","name":"b","nameLocation":"3961:1:107","nodeType":"VariableDeclaration","scope":23812,"src":"3953:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23807,"name":"uint256","nodeType":"ElementaryTypeName","src":"3953:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3952:11:107"},"scope":23813,"src":"3901:247:107","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":23814,"src":"439:3711:107","usedErrors":[]}],"src":"37:4114:107"},"id":107},"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol","exportedSymbols":{"ConfiguratorInputTypes":[23875]},"id":23876,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":23815,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:108"},{"abstract":false,"baseContracts":[],"canonicalName":"ConfiguratorInputTypes","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":23875,"linearizedBaseContracts":[23875],"name":"ConfiguratorInputTypes","nameLocation":"70:22:108","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ConfiguratorInputTypes.InitReserveInput","id":23846,"members":[{"constant":false,"id":23817,"mutability":"mutable","name":"aTokenImpl","nameLocation":"135:10:108","nodeType":"VariableDeclaration","scope":23846,"src":"127:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23816,"name":"address","nodeType":"ElementaryTypeName","src":"127:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23819,"mutability":"mutable","name":"stableDebtTokenImpl","nameLocation":"159:19:108","nodeType":"VariableDeclaration","scope":23846,"src":"151:27:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23818,"name":"address","nodeType":"ElementaryTypeName","src":"151:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23821,"mutability":"mutable","name":"variableDebtTokenImpl","nameLocation":"192:21:108","nodeType":"VariableDeclaration","scope":23846,"src":"184:29:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23820,"name":"address","nodeType":"ElementaryTypeName","src":"184:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23823,"mutability":"mutable","name":"underlyingAssetDecimals","nameLocation":"225:23:108","nodeType":"VariableDeclaration","scope":23846,"src":"219:29:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23822,"name":"uint8","nodeType":"ElementaryTypeName","src":"219:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":23825,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"262:27:108","nodeType":"VariableDeclaration","scope":23846,"src":"254:35:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23824,"name":"address","nodeType":"ElementaryTypeName","src":"254:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23827,"mutability":"mutable","name":"underlyingAsset","nameLocation":"303:15:108","nodeType":"VariableDeclaration","scope":23846,"src":"295:23:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23826,"name":"address","nodeType":"ElementaryTypeName","src":"295:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23829,"mutability":"mutable","name":"treasury","nameLocation":"332:8:108","nodeType":"VariableDeclaration","scope":23846,"src":"324:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23828,"name":"address","nodeType":"ElementaryTypeName","src":"324:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23831,"mutability":"mutable","name":"incentivesController","nameLocation":"354:20:108","nodeType":"VariableDeclaration","scope":23846,"src":"346:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23830,"name":"address","nodeType":"ElementaryTypeName","src":"346:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23833,"mutability":"mutable","name":"aTokenName","nameLocation":"387:10:108","nodeType":"VariableDeclaration","scope":23846,"src":"380:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23832,"name":"string","nodeType":"ElementaryTypeName","src":"380:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23835,"mutability":"mutable","name":"aTokenSymbol","nameLocation":"410:12:108","nodeType":"VariableDeclaration","scope":23846,"src":"403:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23834,"name":"string","nodeType":"ElementaryTypeName","src":"403:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23837,"mutability":"mutable","name":"variableDebtTokenName","nameLocation":"435:21:108","nodeType":"VariableDeclaration","scope":23846,"src":"428:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23836,"name":"string","nodeType":"ElementaryTypeName","src":"428:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23839,"mutability":"mutable","name":"variableDebtTokenSymbol","nameLocation":"469:23:108","nodeType":"VariableDeclaration","scope":23846,"src":"462:30:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23838,"name":"string","nodeType":"ElementaryTypeName","src":"462:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23841,"mutability":"mutable","name":"stableDebtTokenName","nameLocation":"505:19:108","nodeType":"VariableDeclaration","scope":23846,"src":"498:26:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23840,"name":"string","nodeType":"ElementaryTypeName","src":"498:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23843,"mutability":"mutable","name":"stableDebtTokenSymbol","nameLocation":"537:21:108","nodeType":"VariableDeclaration","scope":23846,"src":"530:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23842,"name":"string","nodeType":"ElementaryTypeName","src":"530:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23845,"mutability":"mutable","name":"params","nameLocation":"570:6:108","nodeType":"VariableDeclaration","scope":23846,"src":"564:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":23844,"name":"bytes","nodeType":"ElementaryTypeName","src":"564:5:108","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"InitReserveInput","nameLocation":"104:16:108","nodeType":"StructDefinition","scope":23875,"src":"97:484:108","visibility":"public"},{"canonicalName":"ConfiguratorInputTypes.UpdateATokenInput","id":23861,"members":[{"constant":false,"id":23848,"mutability":"mutable","name":"asset","nameLocation":"624:5:108","nodeType":"VariableDeclaration","scope":23861,"src":"616:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23847,"name":"address","nodeType":"ElementaryTypeName","src":"616:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23850,"mutability":"mutable","name":"treasury","nameLocation":"643:8:108","nodeType":"VariableDeclaration","scope":23861,"src":"635:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23849,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23852,"mutability":"mutable","name":"incentivesController","nameLocation":"665:20:108","nodeType":"VariableDeclaration","scope":23861,"src":"657:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23851,"name":"address","nodeType":"ElementaryTypeName","src":"657:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23854,"mutability":"mutable","name":"name","nameLocation":"698:4:108","nodeType":"VariableDeclaration","scope":23861,"src":"691:11:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23853,"name":"string","nodeType":"ElementaryTypeName","src":"691:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23856,"mutability":"mutable","name":"symbol","nameLocation":"715:6:108","nodeType":"VariableDeclaration","scope":23861,"src":"708:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23855,"name":"string","nodeType":"ElementaryTypeName","src":"708:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23858,"mutability":"mutable","name":"implementation","nameLocation":"735:14:108","nodeType":"VariableDeclaration","scope":23861,"src":"727:22:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23857,"name":"address","nodeType":"ElementaryTypeName","src":"727:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23860,"mutability":"mutable","name":"params","nameLocation":"761:6:108","nodeType":"VariableDeclaration","scope":23861,"src":"755:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":23859,"name":"bytes","nodeType":"ElementaryTypeName","src":"755:5:108","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"UpdateATokenInput","nameLocation":"592:17:108","nodeType":"StructDefinition","scope":23875,"src":"585:187:108","visibility":"public"},{"canonicalName":"ConfiguratorInputTypes.UpdateDebtTokenInput","id":23874,"members":[{"constant":false,"id":23863,"mutability":"mutable","name":"asset","nameLocation":"818:5:108","nodeType":"VariableDeclaration","scope":23874,"src":"810:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23862,"name":"address","nodeType":"ElementaryTypeName","src":"810:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23865,"mutability":"mutable","name":"incentivesController","nameLocation":"837:20:108","nodeType":"VariableDeclaration","scope":23874,"src":"829:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23864,"name":"address","nodeType":"ElementaryTypeName","src":"829:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23867,"mutability":"mutable","name":"name","nameLocation":"870:4:108","nodeType":"VariableDeclaration","scope":23874,"src":"863:11:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23866,"name":"string","nodeType":"ElementaryTypeName","src":"863:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23869,"mutability":"mutable","name":"symbol","nameLocation":"887:6:108","nodeType":"VariableDeclaration","scope":23874,"src":"880:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23868,"name":"string","nodeType":"ElementaryTypeName","src":"880:6:108","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23871,"mutability":"mutable","name":"implementation","nameLocation":"907:14:108","nodeType":"VariableDeclaration","scope":23874,"src":"899:22:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23870,"name":"address","nodeType":"ElementaryTypeName","src":"899:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23873,"mutability":"mutable","name":"params","nameLocation":"933:6:108","nodeType":"VariableDeclaration","scope":23874,"src":"927:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":23872,"name":"bytes","nodeType":"ElementaryTypeName","src":"927:5:108","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"UpdateDebtTokenInput","nameLocation":"783:20:108","nodeType":"StructDefinition","scope":23875,"src":"776:168:108","visibility":"public"}],"scope":23876,"src":"62:884:108","usedErrors":[]}],"src":"37:910:108"},"id":108},"contracts/protocol/libraries/types/DataTypes.sol":{"ast":{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","exportedSymbols":{"DataTypes":[24227]},"id":24228,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":23877,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:109"},{"abstract":false,"baseContracts":[],"canonicalName":"DataTypes","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":24227,"linearizedBaseContracts":[24227],"name":"DataTypes","nameLocation":"70:9:109","nodeType":"ContractDefinition","nodes":[{"canonicalName":"DataTypes.ReserveData","id":23909,"members":[{"constant":false,"id":23880,"mutability":"mutable","name":"configuration","nameLocation":"172:13:109","nodeType":"VariableDeclaration","scope":23909,"src":"148:37:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23879,"nodeType":"UserDefinedTypeName","pathNode":{"id":23878,"name":"ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"148:23:109"},"referencedDeclaration":23912,"src":"148:23:109","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":23882,"mutability":"mutable","name":"liquidityIndex","nameLocation":"243:14:109","nodeType":"VariableDeclaration","scope":23909,"src":"235:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23881,"name":"uint128","nodeType":"ElementaryTypeName","src":"235:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":23884,"mutability":"mutable","name":"currentLiquidityRate","nameLocation":"319:20:109","nodeType":"VariableDeclaration","scope":23909,"src":"311:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23883,"name":"uint128","nodeType":"ElementaryTypeName","src":"311:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":23886,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"399:19:109","nodeType":"VariableDeclaration","scope":23909,"src":"391:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23885,"name":"uint128","nodeType":"ElementaryTypeName","src":"391:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":23888,"mutability":"mutable","name":"currentVariableBorrowRate","nameLocation":"489:25:109","nodeType":"VariableDeclaration","scope":23909,"src":"481:33:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23887,"name":"uint128","nodeType":"ElementaryTypeName","src":"481:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":23890,"mutability":"mutable","name":"currentStableBorrowRate","nameLocation":"583:23:109","nodeType":"VariableDeclaration","scope":23909,"src":"575:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23889,"name":"uint128","nodeType":"ElementaryTypeName","src":"575:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":23892,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"650:19:109","nodeType":"VariableDeclaration","scope":23909,"src":"643:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":23891,"name":"uint40","nodeType":"ElementaryTypeName","src":"643:6:109","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":23894,"mutability":"mutable","name":"id","nameLocation":"770:2:109","nodeType":"VariableDeclaration","scope":23909,"src":"763:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":23893,"name":"uint16","nodeType":"ElementaryTypeName","src":"763:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":23896,"mutability":"mutable","name":"aTokenAddress","nameLocation":"807:13:109","nodeType":"VariableDeclaration","scope":23909,"src":"799:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23895,"name":"address","nodeType":"ElementaryTypeName","src":"799:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23898,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"864:22:109","nodeType":"VariableDeclaration","scope":23909,"src":"856:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23897,"name":"address","nodeType":"ElementaryTypeName","src":"856:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23900,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"932:24:109","nodeType":"VariableDeclaration","scope":23909,"src":"924:32:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23899,"name":"address","nodeType":"ElementaryTypeName","src":"924:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23902,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"1014:27:109","nodeType":"VariableDeclaration","scope":23909,"src":"1006:35:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23901,"name":"address","nodeType":"ElementaryTypeName","src":"1006:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23904,"mutability":"mutable","name":"accruedToTreasury","nameLocation":"1098:17:109","nodeType":"VariableDeclaration","scope":23909,"src":"1090:25:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23903,"name":"uint128","nodeType":"ElementaryTypeName","src":"1090:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":23906,"mutability":"mutable","name":"unbacked","nameLocation":"1204:8:109","nodeType":"VariableDeclaration","scope":23909,"src":"1196:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23905,"name":"uint128","nodeType":"ElementaryTypeName","src":"1196:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":23908,"mutability":"mutable","name":"isolationModeTotalDebt","nameLocation":"1299:22:109","nodeType":"VariableDeclaration","scope":23909,"src":"1291:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23907,"name":"uint128","nodeType":"ElementaryTypeName","src":"1291:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"name":"ReserveData","nameLocation":"91:11:109","nodeType":"StructDefinition","scope":24227,"src":"84:1242:109","visibility":"public"},{"canonicalName":"DataTypes.ReserveConfigurationMap","id":23912,"members":[{"constant":false,"id":23911,"mutability":"mutable","name":"data","nameLocation":"2260:4:109","nodeType":"VariableDeclaration","scope":23912,"src":"2252:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23910,"name":"uint256","nodeType":"ElementaryTypeName","src":"2252:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ReserveConfigurationMap","nameLocation":"1337:23:109","nodeType":"StructDefinition","scope":24227,"src":"1330:939:109","visibility":"public"},{"canonicalName":"DataTypes.UserConfigurationMap","id":23916,"members":[{"constant":false,"id":23915,"mutability":"mutable","name":"data","nameLocation":"2578:4:109","nodeType":"VariableDeclaration","scope":23916,"src":"2570:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23914,"name":"uint256","nodeType":"ElementaryTypeName","src":"2570:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"UserConfigurationMap","nameLocation":"2280:20:109","nodeType":"StructDefinition","scope":24227,"src":"2273:314:109","visibility":"public"},{"canonicalName":"DataTypes.EModeCategory","id":23927,"members":[{"constant":false,"id":23918,"mutability":"mutable","name":"ltv","nameLocation":"2695:3:109","nodeType":"VariableDeclaration","scope":23927,"src":"2688:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":23917,"name":"uint16","nodeType":"ElementaryTypeName","src":"2688:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":23920,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"2711:20:109","nodeType":"VariableDeclaration","scope":23927,"src":"2704:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":23919,"name":"uint16","nodeType":"ElementaryTypeName","src":"2704:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":23922,"mutability":"mutable","name":"liquidationBonus","nameLocation":"2744:16:109","nodeType":"VariableDeclaration","scope":23927,"src":"2737:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":23921,"name":"uint16","nodeType":"ElementaryTypeName","src":"2737:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":23924,"mutability":"mutable","name":"priceSource","nameLocation":"2885:11:109","nodeType":"VariableDeclaration","scope":23927,"src":"2877:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23923,"name":"address","nodeType":"ElementaryTypeName","src":"2877:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23926,"mutability":"mutable","name":"label","nameLocation":"2909:5:109","nodeType":"VariableDeclaration","scope":23927,"src":"2902:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":23925,"name":"string","nodeType":"ElementaryTypeName","src":"2902:6:109","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"EModeCategory","nameLocation":"2598:13:109","nodeType":"StructDefinition","scope":24227,"src":"2591:328:109","visibility":"public"},{"canonicalName":"DataTypes.InterestRateMode","id":23931,"members":[{"id":23928,"name":"NONE","nameLocation":"2946:4:109","nodeType":"EnumValue","src":"2946:4:109"},{"id":23929,"name":"STABLE","nameLocation":"2952:6:109","nodeType":"EnumValue","src":"2952:6:109"},{"id":23930,"name":"VARIABLE","nameLocation":"2960:8:109","nodeType":"EnumValue","src":"2960:8:109"}],"name":"InterestRateMode","nameLocation":"2928:16:109","nodeType":"EnumDefinition","src":"2923:46:109"},{"canonicalName":"DataTypes.ReserveCache","id":23973,"members":[{"constant":false,"id":23933,"mutability":"mutable","name":"currScaledVariableDebt","nameLocation":"3007:22:109","nodeType":"VariableDeclaration","scope":23973,"src":"2999:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23932,"name":"uint256","nodeType":"ElementaryTypeName","src":"2999:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23935,"mutability":"mutable","name":"nextScaledVariableDebt","nameLocation":"3043:22:109","nodeType":"VariableDeclaration","scope":23973,"src":"3035:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23934,"name":"uint256","nodeType":"ElementaryTypeName","src":"3035:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23937,"mutability":"mutable","name":"currPrincipalStableDebt","nameLocation":"3079:23:109","nodeType":"VariableDeclaration","scope":23973,"src":"3071:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23936,"name":"uint256","nodeType":"ElementaryTypeName","src":"3071:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23939,"mutability":"mutable","name":"currAvgStableBorrowRate","nameLocation":"3116:23:109","nodeType":"VariableDeclaration","scope":23973,"src":"3108:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23938,"name":"uint256","nodeType":"ElementaryTypeName","src":"3108:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23941,"mutability":"mutable","name":"currTotalStableDebt","nameLocation":"3153:19:109","nodeType":"VariableDeclaration","scope":23973,"src":"3145:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23940,"name":"uint256","nodeType":"ElementaryTypeName","src":"3145:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23943,"mutability":"mutable","name":"nextAvgStableBorrowRate","nameLocation":"3186:23:109","nodeType":"VariableDeclaration","scope":23973,"src":"3178:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23942,"name":"uint256","nodeType":"ElementaryTypeName","src":"3178:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23945,"mutability":"mutable","name":"nextTotalStableDebt","nameLocation":"3223:19:109","nodeType":"VariableDeclaration","scope":23973,"src":"3215:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23944,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23947,"mutability":"mutable","name":"currLiquidityIndex","nameLocation":"3256:18:109","nodeType":"VariableDeclaration","scope":23973,"src":"3248:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23946,"name":"uint256","nodeType":"ElementaryTypeName","src":"3248:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23949,"mutability":"mutable","name":"nextLiquidityIndex","nameLocation":"3288:18:109","nodeType":"VariableDeclaration","scope":23973,"src":"3280:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23948,"name":"uint256","nodeType":"ElementaryTypeName","src":"3280:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23951,"mutability":"mutable","name":"currVariableBorrowIndex","nameLocation":"3320:23:109","nodeType":"VariableDeclaration","scope":23973,"src":"3312:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23950,"name":"uint256","nodeType":"ElementaryTypeName","src":"3312:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23953,"mutability":"mutable","name":"nextVariableBorrowIndex","nameLocation":"3357:23:109","nodeType":"VariableDeclaration","scope":23973,"src":"3349:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23952,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23955,"mutability":"mutable","name":"currLiquidityRate","nameLocation":"3394:17:109","nodeType":"VariableDeclaration","scope":23973,"src":"3386:25:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23954,"name":"uint256","nodeType":"ElementaryTypeName","src":"3386:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23957,"mutability":"mutable","name":"currVariableBorrowRate","nameLocation":"3425:22:109","nodeType":"VariableDeclaration","scope":23973,"src":"3417:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23956,"name":"uint256","nodeType":"ElementaryTypeName","src":"3417:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23959,"mutability":"mutable","name":"reserveFactor","nameLocation":"3461:13:109","nodeType":"VariableDeclaration","scope":23973,"src":"3453:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23958,"name":"uint256","nodeType":"ElementaryTypeName","src":"3453:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23962,"mutability":"mutable","name":"reserveConfiguration","nameLocation":"3504:20:109","nodeType":"VariableDeclaration","scope":23973,"src":"3480:44:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23961,"nodeType":"UserDefinedTypeName","pathNode":{"id":23960,"name":"ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"3480:23:109"},"referencedDeclaration":23912,"src":"3480:23:109","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":23964,"mutability":"mutable","name":"aTokenAddress","nameLocation":"3538:13:109","nodeType":"VariableDeclaration","scope":23973,"src":"3530:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23963,"name":"address","nodeType":"ElementaryTypeName","src":"3530:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23966,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"3565:22:109","nodeType":"VariableDeclaration","scope":23973,"src":"3557:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23965,"name":"address","nodeType":"ElementaryTypeName","src":"3557:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23968,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"3601:24:109","nodeType":"VariableDeclaration","scope":23973,"src":"3593:32:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23967,"name":"address","nodeType":"ElementaryTypeName","src":"3593:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23970,"mutability":"mutable","name":"reserveLastUpdateTimestamp","nameLocation":"3638:26:109","nodeType":"VariableDeclaration","scope":23973,"src":"3631:33:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":23969,"name":"uint40","nodeType":"ElementaryTypeName","src":"3631:6:109","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":23972,"mutability":"mutable","name":"stableDebtLastUpdateTimestamp","nameLocation":"3677:29:109","nodeType":"VariableDeclaration","scope":23973,"src":"3670:36:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":23971,"name":"uint40","nodeType":"ElementaryTypeName","src":"3670:6:109","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"name":"ReserveCache","nameLocation":"2980:12:109","nodeType":"StructDefinition","scope":24227,"src":"2973:738:109","visibility":"public"},{"canonicalName":"DataTypes.ExecuteLiquidationCallParams","id":23992,"members":[{"constant":false,"id":23975,"mutability":"mutable","name":"reservesCount","nameLocation":"3765:13:109","nodeType":"VariableDeclaration","scope":23992,"src":"3757:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23974,"name":"uint256","nodeType":"ElementaryTypeName","src":"3757:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23977,"mutability":"mutable","name":"debtToCover","nameLocation":"3792:11:109","nodeType":"VariableDeclaration","scope":23992,"src":"3784:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23976,"name":"uint256","nodeType":"ElementaryTypeName","src":"3784:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23979,"mutability":"mutable","name":"collateralAsset","nameLocation":"3817:15:109","nodeType":"VariableDeclaration","scope":23992,"src":"3809:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23978,"name":"address","nodeType":"ElementaryTypeName","src":"3809:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23981,"mutability":"mutable","name":"debtAsset","nameLocation":"3846:9:109","nodeType":"VariableDeclaration","scope":23992,"src":"3838:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23980,"name":"address","nodeType":"ElementaryTypeName","src":"3838:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23983,"mutability":"mutable","name":"user","nameLocation":"3869:4:109","nodeType":"VariableDeclaration","scope":23992,"src":"3861:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23982,"name":"address","nodeType":"ElementaryTypeName","src":"3861:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23985,"mutability":"mutable","name":"receiveAToken","nameLocation":"3884:13:109","nodeType":"VariableDeclaration","scope":23992,"src":"3879:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23984,"name":"bool","nodeType":"ElementaryTypeName","src":"3879:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":23987,"mutability":"mutable","name":"priceOracle","nameLocation":"3911:11:109","nodeType":"VariableDeclaration","scope":23992,"src":"3903:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23986,"name":"address","nodeType":"ElementaryTypeName","src":"3903:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23989,"mutability":"mutable","name":"userEModeCategory","nameLocation":"3934:17:109","nodeType":"VariableDeclaration","scope":23992,"src":"3928:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23988,"name":"uint8","nodeType":"ElementaryTypeName","src":"3928:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":23991,"mutability":"mutable","name":"priceOracleSentinel","nameLocation":"3965:19:109","nodeType":"VariableDeclaration","scope":23992,"src":"3957:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23990,"name":"address","nodeType":"ElementaryTypeName","src":"3957:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ExecuteLiquidationCallParams","nameLocation":"3722:28:109","nodeType":"StructDefinition","scope":24227,"src":"3715:274:109","visibility":"public"},{"canonicalName":"DataTypes.ExecuteSupplyParams","id":24001,"members":[{"constant":false,"id":23994,"mutability":"mutable","name":"asset","nameLocation":"4034:5:109","nodeType":"VariableDeclaration","scope":24001,"src":"4026:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23993,"name":"address","nodeType":"ElementaryTypeName","src":"4026:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23996,"mutability":"mutable","name":"amount","nameLocation":"4053:6:109","nodeType":"VariableDeclaration","scope":24001,"src":"4045:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23995,"name":"uint256","nodeType":"ElementaryTypeName","src":"4045:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23998,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4073:10:109","nodeType":"VariableDeclaration","scope":24001,"src":"4065:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23997,"name":"address","nodeType":"ElementaryTypeName","src":"4065:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24000,"mutability":"mutable","name":"referralCode","nameLocation":"4096:12:109","nodeType":"VariableDeclaration","scope":24001,"src":"4089:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":23999,"name":"uint16","nodeType":"ElementaryTypeName","src":"4089:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"name":"ExecuteSupplyParams","nameLocation":"4000:19:109","nodeType":"StructDefinition","scope":24227,"src":"3993:120:109","visibility":"public"},{"canonicalName":"DataTypes.ExecuteBorrowParams","id":24027,"members":[{"constant":false,"id":24003,"mutability":"mutable","name":"asset","nameLocation":"4158:5:109","nodeType":"VariableDeclaration","scope":24027,"src":"4150:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24002,"name":"address","nodeType":"ElementaryTypeName","src":"4150:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24005,"mutability":"mutable","name":"user","nameLocation":"4177:4:109","nodeType":"VariableDeclaration","scope":24027,"src":"4169:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24004,"name":"address","nodeType":"ElementaryTypeName","src":"4169:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24007,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4195:10:109","nodeType":"VariableDeclaration","scope":24027,"src":"4187:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24006,"name":"address","nodeType":"ElementaryTypeName","src":"4187:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24009,"mutability":"mutable","name":"amount","nameLocation":"4219:6:109","nodeType":"VariableDeclaration","scope":24027,"src":"4211:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24008,"name":"uint256","nodeType":"ElementaryTypeName","src":"4211:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24012,"mutability":"mutable","name":"interestRateMode","nameLocation":"4248:16:109","nodeType":"VariableDeclaration","scope":24027,"src":"4231:33:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":24011,"nodeType":"UserDefinedTypeName","pathNode":{"id":24010,"name":"InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"4231:16:109"},"referencedDeclaration":23931,"src":"4231:16:109","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":24014,"mutability":"mutable","name":"referralCode","nameLocation":"4277:12:109","nodeType":"VariableDeclaration","scope":24027,"src":"4270:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24013,"name":"uint16","nodeType":"ElementaryTypeName","src":"4270:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":24016,"mutability":"mutable","name":"releaseUnderlying","nameLocation":"4300:17:109","nodeType":"VariableDeclaration","scope":24027,"src":"4295:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24015,"name":"bool","nodeType":"ElementaryTypeName","src":"4295:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":24018,"mutability":"mutable","name":"maxStableRateBorrowSizePercent","nameLocation":"4331:30:109","nodeType":"VariableDeclaration","scope":24027,"src":"4323:38:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24017,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24020,"mutability":"mutable","name":"reservesCount","nameLocation":"4375:13:109","nodeType":"VariableDeclaration","scope":24027,"src":"4367:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24019,"name":"uint256","nodeType":"ElementaryTypeName","src":"4367:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24022,"mutability":"mutable","name":"oracle","nameLocation":"4402:6:109","nodeType":"VariableDeclaration","scope":24027,"src":"4394:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24021,"name":"address","nodeType":"ElementaryTypeName","src":"4394:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24024,"mutability":"mutable","name":"userEModeCategory","nameLocation":"4420:17:109","nodeType":"VariableDeclaration","scope":24027,"src":"4414:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24023,"name":"uint8","nodeType":"ElementaryTypeName","src":"4414:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24026,"mutability":"mutable","name":"priceOracleSentinel","nameLocation":"4451:19:109","nodeType":"VariableDeclaration","scope":24027,"src":"4443:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24025,"name":"address","nodeType":"ElementaryTypeName","src":"4443:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ExecuteBorrowParams","nameLocation":"4124:19:109","nodeType":"StructDefinition","scope":24227,"src":"4117:358:109","visibility":"public"},{"canonicalName":"DataTypes.ExecuteRepayParams","id":24039,"members":[{"constant":false,"id":24029,"mutability":"mutable","name":"asset","nameLocation":"4519:5:109","nodeType":"VariableDeclaration","scope":24039,"src":"4511:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24028,"name":"address","nodeType":"ElementaryTypeName","src":"4511:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24031,"mutability":"mutable","name":"amount","nameLocation":"4538:6:109","nodeType":"VariableDeclaration","scope":24039,"src":"4530:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24030,"name":"uint256","nodeType":"ElementaryTypeName","src":"4530:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24034,"mutability":"mutable","name":"interestRateMode","nameLocation":"4567:16:109","nodeType":"VariableDeclaration","scope":24039,"src":"4550:33:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":24033,"nodeType":"UserDefinedTypeName","pathNode":{"id":24032,"name":"InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"4550:16:109"},"referencedDeclaration":23931,"src":"4550:16:109","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":24036,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4597:10:109","nodeType":"VariableDeclaration","scope":24039,"src":"4589:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24035,"name":"address","nodeType":"ElementaryTypeName","src":"4589:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24038,"mutability":"mutable","name":"useATokens","nameLocation":"4618:10:109","nodeType":"VariableDeclaration","scope":24039,"src":"4613:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24037,"name":"bool","nodeType":"ElementaryTypeName","src":"4613:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ExecuteRepayParams","nameLocation":"4486:18:109","nodeType":"StructDefinition","scope":24227,"src":"4479:154:109","visibility":"public"},{"canonicalName":"DataTypes.ExecuteWithdrawParams","id":24052,"members":[{"constant":false,"id":24041,"mutability":"mutable","name":"asset","nameLocation":"4680:5:109","nodeType":"VariableDeclaration","scope":24052,"src":"4672:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24040,"name":"address","nodeType":"ElementaryTypeName","src":"4672:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24043,"mutability":"mutable","name":"amount","nameLocation":"4699:6:109","nodeType":"VariableDeclaration","scope":24052,"src":"4691:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24042,"name":"uint256","nodeType":"ElementaryTypeName","src":"4691:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24045,"mutability":"mutable","name":"to","nameLocation":"4719:2:109","nodeType":"VariableDeclaration","scope":24052,"src":"4711:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24044,"name":"address","nodeType":"ElementaryTypeName","src":"4711:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24047,"mutability":"mutable","name":"reservesCount","nameLocation":"4735:13:109","nodeType":"VariableDeclaration","scope":24052,"src":"4727:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24046,"name":"uint256","nodeType":"ElementaryTypeName","src":"4727:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24049,"mutability":"mutable","name":"oracle","nameLocation":"4762:6:109","nodeType":"VariableDeclaration","scope":24052,"src":"4754:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24048,"name":"address","nodeType":"ElementaryTypeName","src":"4754:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24051,"mutability":"mutable","name":"userEModeCategory","nameLocation":"4780:17:109","nodeType":"VariableDeclaration","scope":24052,"src":"4774:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24050,"name":"uint8","nodeType":"ElementaryTypeName","src":"4774:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"ExecuteWithdrawParams","nameLocation":"4644:21:109","nodeType":"StructDefinition","scope":24227,"src":"4637:165:109","visibility":"public"},{"canonicalName":"DataTypes.ExecuteSetUserEModeParams","id":24059,"members":[{"constant":false,"id":24054,"mutability":"mutable","name":"reservesCount","nameLocation":"4853:13:109","nodeType":"VariableDeclaration","scope":24059,"src":"4845:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24053,"name":"uint256","nodeType":"ElementaryTypeName","src":"4845:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24056,"mutability":"mutable","name":"oracle","nameLocation":"4880:6:109","nodeType":"VariableDeclaration","scope":24059,"src":"4872:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24055,"name":"address","nodeType":"ElementaryTypeName","src":"4872:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24058,"mutability":"mutable","name":"categoryId","nameLocation":"4898:10:109","nodeType":"VariableDeclaration","scope":24059,"src":"4892:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24057,"name":"uint8","nodeType":"ElementaryTypeName","src":"4892:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"ExecuteSetUserEModeParams","nameLocation":"4813:25:109","nodeType":"StructDefinition","scope":24227,"src":"4806:107:109","visibility":"public"},{"canonicalName":"DataTypes.FinalizeTransferParams","id":24078,"members":[{"constant":false,"id":24061,"mutability":"mutable","name":"asset","nameLocation":"4961:5:109","nodeType":"VariableDeclaration","scope":24078,"src":"4953:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24060,"name":"address","nodeType":"ElementaryTypeName","src":"4953:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24063,"mutability":"mutable","name":"from","nameLocation":"4980:4:109","nodeType":"VariableDeclaration","scope":24078,"src":"4972:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24062,"name":"address","nodeType":"ElementaryTypeName","src":"4972:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24065,"mutability":"mutable","name":"to","nameLocation":"4998:2:109","nodeType":"VariableDeclaration","scope":24078,"src":"4990:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24064,"name":"address","nodeType":"ElementaryTypeName","src":"4990:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24067,"mutability":"mutable","name":"amount","nameLocation":"5014:6:109","nodeType":"VariableDeclaration","scope":24078,"src":"5006:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24066,"name":"uint256","nodeType":"ElementaryTypeName","src":"5006:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24069,"mutability":"mutable","name":"balanceFromBefore","nameLocation":"5034:17:109","nodeType":"VariableDeclaration","scope":24078,"src":"5026:25:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24068,"name":"uint256","nodeType":"ElementaryTypeName","src":"5026:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24071,"mutability":"mutable","name":"balanceToBefore","nameLocation":"5065:15:109","nodeType":"VariableDeclaration","scope":24078,"src":"5057:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24070,"name":"uint256","nodeType":"ElementaryTypeName","src":"5057:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24073,"mutability":"mutable","name":"reservesCount","nameLocation":"5094:13:109","nodeType":"VariableDeclaration","scope":24078,"src":"5086:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24072,"name":"uint256","nodeType":"ElementaryTypeName","src":"5086:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24075,"mutability":"mutable","name":"oracle","nameLocation":"5121:6:109","nodeType":"VariableDeclaration","scope":24078,"src":"5113:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24074,"name":"address","nodeType":"ElementaryTypeName","src":"5113:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24077,"mutability":"mutable","name":"fromEModeCategory","nameLocation":"5139:17:109","nodeType":"VariableDeclaration","scope":24078,"src":"5133:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24076,"name":"uint8","nodeType":"ElementaryTypeName","src":"5133:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"FinalizeTransferParams","nameLocation":"4924:22:109","nodeType":"StructDefinition","scope":24227,"src":"4917:244:109","visibility":"public"},{"canonicalName":"DataTypes.FlashloanParams","id":24110,"members":[{"constant":false,"id":24080,"mutability":"mutable","name":"receiverAddress","nameLocation":"5202:15:109","nodeType":"VariableDeclaration","scope":24110,"src":"5194:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24079,"name":"address","nodeType":"ElementaryTypeName","src":"5194:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24083,"mutability":"mutable","name":"assets","nameLocation":"5233:6:109","nodeType":"VariableDeclaration","scope":24110,"src":"5223:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":24081,"name":"address","nodeType":"ElementaryTypeName","src":"5223:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24082,"nodeType":"ArrayTypeName","src":"5223:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":24086,"mutability":"mutable","name":"amounts","nameLocation":"5255:7:109","nodeType":"VariableDeclaration","scope":24110,"src":"5245:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":24084,"name":"uint256","nodeType":"ElementaryTypeName","src":"5245:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24085,"nodeType":"ArrayTypeName","src":"5245:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":24089,"mutability":"mutable","name":"interestRateModes","nameLocation":"5278:17:109","nodeType":"VariableDeclaration","scope":24110,"src":"5268:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":24087,"name":"uint256","nodeType":"ElementaryTypeName","src":"5268:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24088,"nodeType":"ArrayTypeName","src":"5268:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":24091,"mutability":"mutable","name":"onBehalfOf","nameLocation":"5309:10:109","nodeType":"VariableDeclaration","scope":24110,"src":"5301:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24090,"name":"address","nodeType":"ElementaryTypeName","src":"5301:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24093,"mutability":"mutable","name":"params","nameLocation":"5331:6:109","nodeType":"VariableDeclaration","scope":24110,"src":"5325:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":24092,"name":"bytes","nodeType":"ElementaryTypeName","src":"5325:5:109","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":24095,"mutability":"mutable","name":"referralCode","nameLocation":"5350:12:109","nodeType":"VariableDeclaration","scope":24110,"src":"5343:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24094,"name":"uint16","nodeType":"ElementaryTypeName","src":"5343:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":24097,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"5376:26:109","nodeType":"VariableDeclaration","scope":24110,"src":"5368:34:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24096,"name":"uint256","nodeType":"ElementaryTypeName","src":"5368:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24099,"mutability":"mutable","name":"flashLoanPremiumTotal","nameLocation":"5416:21:109","nodeType":"VariableDeclaration","scope":24110,"src":"5408:29:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24098,"name":"uint256","nodeType":"ElementaryTypeName","src":"5408:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24101,"mutability":"mutable","name":"maxStableRateBorrowSizePercent","nameLocation":"5451:30:109","nodeType":"VariableDeclaration","scope":24110,"src":"5443:38:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24100,"name":"uint256","nodeType":"ElementaryTypeName","src":"5443:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24103,"mutability":"mutable","name":"reservesCount","nameLocation":"5495:13:109","nodeType":"VariableDeclaration","scope":24110,"src":"5487:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24102,"name":"uint256","nodeType":"ElementaryTypeName","src":"5487:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24105,"mutability":"mutable","name":"addressesProvider","nameLocation":"5522:17:109","nodeType":"VariableDeclaration","scope":24110,"src":"5514:25:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24104,"name":"address","nodeType":"ElementaryTypeName","src":"5514:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24107,"mutability":"mutable","name":"userEModeCategory","nameLocation":"5551:17:109","nodeType":"VariableDeclaration","scope":24110,"src":"5545:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24106,"name":"uint8","nodeType":"ElementaryTypeName","src":"5545:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24109,"mutability":"mutable","name":"isAuthorizedFlashBorrower","nameLocation":"5579:25:109","nodeType":"VariableDeclaration","scope":24110,"src":"5574:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24108,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"FlashloanParams","nameLocation":"5172:15:109","nodeType":"StructDefinition","scope":24227,"src":"5165:444:109","visibility":"public"},{"canonicalName":"DataTypes.FlashloanSimpleParams","id":24125,"members":[{"constant":false,"id":24112,"mutability":"mutable","name":"receiverAddress","nameLocation":"5656:15:109","nodeType":"VariableDeclaration","scope":24125,"src":"5648:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24111,"name":"address","nodeType":"ElementaryTypeName","src":"5648:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24114,"mutability":"mutable","name":"asset","nameLocation":"5685:5:109","nodeType":"VariableDeclaration","scope":24125,"src":"5677:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24113,"name":"address","nodeType":"ElementaryTypeName","src":"5677:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24116,"mutability":"mutable","name":"amount","nameLocation":"5704:6:109","nodeType":"VariableDeclaration","scope":24125,"src":"5696:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24115,"name":"uint256","nodeType":"ElementaryTypeName","src":"5696:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24118,"mutability":"mutable","name":"params","nameLocation":"5722:6:109","nodeType":"VariableDeclaration","scope":24125,"src":"5716:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":24117,"name":"bytes","nodeType":"ElementaryTypeName","src":"5716:5:109","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":24120,"mutability":"mutable","name":"referralCode","nameLocation":"5741:12:109","nodeType":"VariableDeclaration","scope":24125,"src":"5734:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24119,"name":"uint16","nodeType":"ElementaryTypeName","src":"5734:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":24122,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"5767:26:109","nodeType":"VariableDeclaration","scope":24125,"src":"5759:34:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24121,"name":"uint256","nodeType":"ElementaryTypeName","src":"5759:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24124,"mutability":"mutable","name":"flashLoanPremiumTotal","nameLocation":"5807:21:109","nodeType":"VariableDeclaration","scope":24125,"src":"5799:29:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24123,"name":"uint256","nodeType":"ElementaryTypeName","src":"5799:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"FlashloanSimpleParams","nameLocation":"5620:21:109","nodeType":"StructDefinition","scope":24227,"src":"5613:220:109","visibility":"public"},{"canonicalName":"DataTypes.FlashLoanRepaymentParams","id":24138,"members":[{"constant":false,"id":24127,"mutability":"mutable","name":"amount","nameLocation":"5883:6:109","nodeType":"VariableDeclaration","scope":24138,"src":"5875:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24126,"name":"uint256","nodeType":"ElementaryTypeName","src":"5875:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24129,"mutability":"mutable","name":"totalPremium","nameLocation":"5903:12:109","nodeType":"VariableDeclaration","scope":24138,"src":"5895:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24128,"name":"uint256","nodeType":"ElementaryTypeName","src":"5895:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24131,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"5929:26:109","nodeType":"VariableDeclaration","scope":24138,"src":"5921:34:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24130,"name":"uint256","nodeType":"ElementaryTypeName","src":"5921:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24133,"mutability":"mutable","name":"asset","nameLocation":"5969:5:109","nodeType":"VariableDeclaration","scope":24138,"src":"5961:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24132,"name":"address","nodeType":"ElementaryTypeName","src":"5961:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24135,"mutability":"mutable","name":"receiverAddress","nameLocation":"5988:15:109","nodeType":"VariableDeclaration","scope":24138,"src":"5980:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24134,"name":"address","nodeType":"ElementaryTypeName","src":"5980:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24137,"mutability":"mutable","name":"referralCode","nameLocation":"6016:12:109","nodeType":"VariableDeclaration","scope":24138,"src":"6009:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24136,"name":"uint16","nodeType":"ElementaryTypeName","src":"6009:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"name":"FlashLoanRepaymentParams","nameLocation":"5844:24:109","nodeType":"StructDefinition","scope":24227,"src":"5837:196:109","visibility":"public"},{"canonicalName":"DataTypes.CalculateUserAccountDataParams","id":24150,"members":[{"constant":false,"id":24141,"mutability":"mutable","name":"userConfig","nameLocation":"6102:10:109","nodeType":"VariableDeclaration","scope":24150,"src":"6081:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":24140,"nodeType":"UserDefinedTypeName","pathNode":{"id":24139,"name":"UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"6081:20:109"},"referencedDeclaration":23916,"src":"6081:20:109","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":24143,"mutability":"mutable","name":"reservesCount","nameLocation":"6126:13:109","nodeType":"VariableDeclaration","scope":24150,"src":"6118:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24142,"name":"uint256","nodeType":"ElementaryTypeName","src":"6118:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24145,"mutability":"mutable","name":"user","nameLocation":"6153:4:109","nodeType":"VariableDeclaration","scope":24150,"src":"6145:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24144,"name":"address","nodeType":"ElementaryTypeName","src":"6145:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24147,"mutability":"mutable","name":"oracle","nameLocation":"6171:6:109","nodeType":"VariableDeclaration","scope":24150,"src":"6163:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24146,"name":"address","nodeType":"ElementaryTypeName","src":"6163:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24149,"mutability":"mutable","name":"userEModeCategory","nameLocation":"6189:17:109","nodeType":"VariableDeclaration","scope":24150,"src":"6183:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24148,"name":"uint8","nodeType":"ElementaryTypeName","src":"6183:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"CalculateUserAccountDataParams","nameLocation":"6044:30:109","nodeType":"StructDefinition","scope":24227,"src":"6037:174:109","visibility":"public"},{"canonicalName":"DataTypes.ValidateBorrowParams","id":24182,"members":[{"constant":false,"id":24153,"mutability":"mutable","name":"reserveCache","nameLocation":"6262:12:109","nodeType":"VariableDeclaration","scope":24182,"src":"6249:25:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":24152,"nodeType":"UserDefinedTypeName","pathNode":{"id":24151,"name":"ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"6249:12:109"},"referencedDeclaration":23973,"src":"6249:12:109","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":24156,"mutability":"mutable","name":"userConfig","nameLocation":"6301:10:109","nodeType":"VariableDeclaration","scope":24182,"src":"6280:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":24155,"nodeType":"UserDefinedTypeName","pathNode":{"id":24154,"name":"UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"6280:20:109"},"referencedDeclaration":23916,"src":"6280:20:109","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":24158,"mutability":"mutable","name":"asset","nameLocation":"6325:5:109","nodeType":"VariableDeclaration","scope":24182,"src":"6317:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24157,"name":"address","nodeType":"ElementaryTypeName","src":"6317:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24160,"mutability":"mutable","name":"userAddress","nameLocation":"6344:11:109","nodeType":"VariableDeclaration","scope":24182,"src":"6336:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24159,"name":"address","nodeType":"ElementaryTypeName","src":"6336:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24162,"mutability":"mutable","name":"amount","nameLocation":"6369:6:109","nodeType":"VariableDeclaration","scope":24182,"src":"6361:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24161,"name":"uint256","nodeType":"ElementaryTypeName","src":"6361:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24165,"mutability":"mutable","name":"interestRateMode","nameLocation":"6398:16:109","nodeType":"VariableDeclaration","scope":24182,"src":"6381:33:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":24164,"nodeType":"UserDefinedTypeName","pathNode":{"id":24163,"name":"InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":23931,"src":"6381:16:109"},"referencedDeclaration":23931,"src":"6381:16:109","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":24167,"mutability":"mutable","name":"maxStableLoanPercent","nameLocation":"6428:20:109","nodeType":"VariableDeclaration","scope":24182,"src":"6420:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24166,"name":"uint256","nodeType":"ElementaryTypeName","src":"6420:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24169,"mutability":"mutable","name":"reservesCount","nameLocation":"6462:13:109","nodeType":"VariableDeclaration","scope":24182,"src":"6454:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24168,"name":"uint256","nodeType":"ElementaryTypeName","src":"6454:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24171,"mutability":"mutable","name":"oracle","nameLocation":"6489:6:109","nodeType":"VariableDeclaration","scope":24182,"src":"6481:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24170,"name":"address","nodeType":"ElementaryTypeName","src":"6481:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24173,"mutability":"mutable","name":"userEModeCategory","nameLocation":"6507:17:109","nodeType":"VariableDeclaration","scope":24182,"src":"6501:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24172,"name":"uint8","nodeType":"ElementaryTypeName","src":"6501:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24175,"mutability":"mutable","name":"priceOracleSentinel","nameLocation":"6538:19:109","nodeType":"VariableDeclaration","scope":24182,"src":"6530:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24174,"name":"address","nodeType":"ElementaryTypeName","src":"6530:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24177,"mutability":"mutable","name":"isolationModeActive","nameLocation":"6568:19:109","nodeType":"VariableDeclaration","scope":24182,"src":"6563:24:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24176,"name":"bool","nodeType":"ElementaryTypeName","src":"6563:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":24179,"mutability":"mutable","name":"isolationModeCollateralAddress","nameLocation":"6601:30:109","nodeType":"VariableDeclaration","scope":24182,"src":"6593:38:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24178,"name":"address","nodeType":"ElementaryTypeName","src":"6593:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24181,"mutability":"mutable","name":"isolationModeDebtCeiling","nameLocation":"6645:24:109","nodeType":"VariableDeclaration","scope":24182,"src":"6637:32:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24180,"name":"uint256","nodeType":"ElementaryTypeName","src":"6637:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ValidateBorrowParams","nameLocation":"6222:20:109","nodeType":"StructDefinition","scope":24227,"src":"6215:459:109","visibility":"public"},{"canonicalName":"DataTypes.ValidateLiquidationCallParams","id":24192,"members":[{"constant":false,"id":24185,"mutability":"mutable","name":"debtReserveCache","nameLocation":"6734:16:109","nodeType":"VariableDeclaration","scope":24192,"src":"6721:29:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":24184,"nodeType":"UserDefinedTypeName","pathNode":{"id":24183,"name":"ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":23973,"src":"6721:12:109"},"referencedDeclaration":23973,"src":"6721:12:109","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$23973_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":24187,"mutability":"mutable","name":"totalDebt","nameLocation":"6764:9:109","nodeType":"VariableDeclaration","scope":24192,"src":"6756:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24186,"name":"uint256","nodeType":"ElementaryTypeName","src":"6756:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24189,"mutability":"mutable","name":"healthFactor","nameLocation":"6787:12:109","nodeType":"VariableDeclaration","scope":24192,"src":"6779:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24188,"name":"uint256","nodeType":"ElementaryTypeName","src":"6779:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24191,"mutability":"mutable","name":"priceOracleSentinel","nameLocation":"6813:19:109","nodeType":"VariableDeclaration","scope":24192,"src":"6805:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24190,"name":"address","nodeType":"ElementaryTypeName","src":"6805:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ValidateLiquidationCallParams","nameLocation":"6685:29:109","nodeType":"StructDefinition","scope":24227,"src":"6678:159:109","visibility":"public"},{"canonicalName":"DataTypes.CalculateInterestRatesParams","id":24211,"members":[{"constant":false,"id":24194,"mutability":"mutable","name":"unbacked","nameLocation":"6891:8:109","nodeType":"VariableDeclaration","scope":24211,"src":"6883:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24193,"name":"uint256","nodeType":"ElementaryTypeName","src":"6883:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24196,"mutability":"mutable","name":"liquidityAdded","nameLocation":"6913:14:109","nodeType":"VariableDeclaration","scope":24211,"src":"6905:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24195,"name":"uint256","nodeType":"ElementaryTypeName","src":"6905:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24198,"mutability":"mutable","name":"liquidityTaken","nameLocation":"6941:14:109","nodeType":"VariableDeclaration","scope":24211,"src":"6933:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24197,"name":"uint256","nodeType":"ElementaryTypeName","src":"6933:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24200,"mutability":"mutable","name":"totalStableDebt","nameLocation":"6969:15:109","nodeType":"VariableDeclaration","scope":24211,"src":"6961:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24199,"name":"uint256","nodeType":"ElementaryTypeName","src":"6961:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24202,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"6998:17:109","nodeType":"VariableDeclaration","scope":24211,"src":"6990:25:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24201,"name":"uint256","nodeType":"ElementaryTypeName","src":"6990:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24204,"mutability":"mutable","name":"averageStableBorrowRate","nameLocation":"7029:23:109","nodeType":"VariableDeclaration","scope":24211,"src":"7021:31:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24203,"name":"uint256","nodeType":"ElementaryTypeName","src":"7021:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24206,"mutability":"mutable","name":"reserveFactor","nameLocation":"7066:13:109","nodeType":"VariableDeclaration","scope":24211,"src":"7058:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24205,"name":"uint256","nodeType":"ElementaryTypeName","src":"7058:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24208,"mutability":"mutable","name":"reserve","nameLocation":"7093:7:109","nodeType":"VariableDeclaration","scope":24211,"src":"7085:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24207,"name":"address","nodeType":"ElementaryTypeName","src":"7085:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24210,"mutability":"mutable","name":"aToken","nameLocation":"7114:6:109","nodeType":"VariableDeclaration","scope":24211,"src":"7106:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24209,"name":"address","nodeType":"ElementaryTypeName","src":"7106:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"CalculateInterestRatesParams","nameLocation":"6848:28:109","nodeType":"StructDefinition","scope":24227,"src":"6841:284:109","visibility":"public"},{"canonicalName":"DataTypes.InitReserveParams","id":24226,"members":[{"constant":false,"id":24213,"mutability":"mutable","name":"asset","nameLocation":"7168:5:109","nodeType":"VariableDeclaration","scope":24226,"src":"7160:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24212,"name":"address","nodeType":"ElementaryTypeName","src":"7160:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24215,"mutability":"mutable","name":"aTokenAddress","nameLocation":"7187:13:109","nodeType":"VariableDeclaration","scope":24226,"src":"7179:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24214,"name":"address","nodeType":"ElementaryTypeName","src":"7179:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24217,"mutability":"mutable","name":"stableDebtAddress","nameLocation":"7214:17:109","nodeType":"VariableDeclaration","scope":24226,"src":"7206:25:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24216,"name":"address","nodeType":"ElementaryTypeName","src":"7206:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24219,"mutability":"mutable","name":"variableDebtAddress","nameLocation":"7245:19:109","nodeType":"VariableDeclaration","scope":24226,"src":"7237:27:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24218,"name":"address","nodeType":"ElementaryTypeName","src":"7237:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24221,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"7278:27:109","nodeType":"VariableDeclaration","scope":24226,"src":"7270:35:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24220,"name":"address","nodeType":"ElementaryTypeName","src":"7270:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24223,"mutability":"mutable","name":"reservesCount","nameLocation":"7318:13:109","nodeType":"VariableDeclaration","scope":24226,"src":"7311:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24222,"name":"uint16","nodeType":"ElementaryTypeName","src":"7311:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":24225,"mutability":"mutable","name":"maxNumberReserves","nameLocation":"7344:17:109","nodeType":"VariableDeclaration","scope":24226,"src":"7337:24:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24224,"name":"uint16","nodeType":"ElementaryTypeName","src":"7337:6:109","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"name":"InitReserveParams","nameLocation":"7136:17:109","nodeType":"StructDefinition","scope":24227,"src":"7129:237:109","visibility":"public"}],"scope":24228,"src":"62:7306:109","usedErrors":[]}],"src":"37:7332:109"},"id":109},"contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol":{"ast":{"absolutePath":"contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol","exportedSymbols":{"DataTypes":[24227],"DefaultReserveInterestRateStrategy":[24785],"Errors":[14819],"IDefaultInterestRateStrategy":[4216],"IERC20":[1442],"IPoolAddressesProvider":[5282],"IReserveInterestRateStrategy":[6126],"PercentageMath":[23726],"WadRayMath":[23813]},"id":24786,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":24229,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:110"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":24231,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24786,"sourceUnit":1443,"src":"63:76:110","symbolAliases":[{"foreign":{"id":24230,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../libraries/math/WadRayMath.sol","id":24233,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24786,"sourceUnit":23814,"src":"140:60:110","symbolAliases":[{"foreign":{"id":24232,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"148:10:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../libraries/math/PercentageMath.sol","id":24235,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24786,"sourceUnit":23727,"src":"201:68:110","symbolAliases":[{"foreign":{"id":24234,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"209:14:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../libraries/types/DataTypes.sol","id":24237,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24786,"sourceUnit":24228,"src":"270:59:110","symbolAliases":[{"foreign":{"id":24236,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"278:9:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":24239,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24786,"sourceUnit":14820,"src":"330:55:110","symbolAliases":[{"foreign":{"id":24238,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"338:6:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IDefaultInterestRateStrategy.sol","file":"../../interfaces/IDefaultInterestRateStrategy.sol","id":24241,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24786,"sourceUnit":4217,"src":"386:95:110","symbolAliases":[{"foreign":{"id":24240,"name":"IDefaultInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"394:28:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IReserveInterestRateStrategy.sol","file":"../../interfaces/IReserveInterestRateStrategy.sol","id":24243,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24786,"sourceUnit":6127,"src":"482:95:110","symbolAliases":[{"foreign":{"id":24242,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"490:28:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":24245,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24786,"sourceUnit":5283,"src":"578:83:110","symbolAliases":[{"foreign":{"id":24244,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"586:22:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24247,"name":"IDefaultInterestRateStrategy","nodeType":"IdentifierPath","referencedDeclaration":4216,"src":"1164:28:110"},"id":24248,"nodeType":"InheritanceSpecifier","src":"1164:28:110"}],"canonicalName":"DefaultReserveInterestRateStrategy","contractDependencies":[],"contractKind":"contract","documentation":{"id":24246,"nodeType":"StructuredDocumentation","src":"663:453:110","text":" @title DefaultReserveInterestRateStrategy contract\n @author Aave\n @notice Implements the calculation of the interest rates depending on the reserve state\n @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO`\n point of usage and another from that one to 100%.\n - An instance of this same contract, can't be used across different Aave markets, due to the caching\n   of the PoolAddressesProvider"},"fullyImplemented":true,"id":24785,"linearizedBaseContracts":[24785,4216,6126],"name":"DefaultReserveInterestRateStrategy","nameLocation":"1126:34:110","nodeType":"ContractDefinition","nodes":[{"id":24251,"libraryName":{"id":24249,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1203:10:110"},"nodeType":"UsingForDirective","src":"1197:29:110","typeName":{"id":24250,"name":"uint256","nodeType":"ElementaryTypeName","src":"1218:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":24254,"libraryName":{"id":24252,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1235:14:110"},"nodeType":"UsingForDirective","src":"1229:33:110","typeName":{"id":24253,"name":"uint256","nodeType":"ElementaryTypeName","src":"1254:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"baseFunctions":[4142],"constant":false,"documentation":{"id":24255,"nodeType":"StructuredDocumentation","src":"1266:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"54c365c6","id":24257,"mutability":"immutable","name":"OPTIMAL_USAGE_RATIO","nameLocation":"1338:19:110","nodeType":"VariableDeclaration","scope":24785,"src":"1313:44:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24256,"name":"uint256","nodeType":"ElementaryTypeName","src":"1313:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4148],"constant":false,"documentation":{"id":24258,"nodeType":"StructuredDocumentation","src":"1362:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"6fb92589","id":24260,"mutability":"immutable","name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"1434:34:110","nodeType":"VariableDeclaration","scope":24785,"src":"1409:59:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24259,"name":"uint256","nodeType":"ElementaryTypeName","src":"1409:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4154],"constant":false,"documentation":{"id":24261,"nodeType":"StructuredDocumentation","src":"1473:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"a9c622f8","id":24263,"mutability":"immutable","name":"MAX_EXCESS_USAGE_RATIO","nameLocation":"1545:22:110","nodeType":"VariableDeclaration","scope":24785,"src":"1520:47:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24262,"name":"uint256","nodeType":"ElementaryTypeName","src":"1520:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4160],"constant":false,"documentation":{"id":24264,"nodeType":"StructuredDocumentation","src":"1572:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"fe5fd698","id":24266,"mutability":"immutable","name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"1644:37:110","nodeType":"VariableDeclaration","scope":24785,"src":"1619:62:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24265,"name":"uint256","nodeType":"ElementaryTypeName","src":"1619:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4167],"constant":false,"functionSelector":"0542975c","id":24269,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"1726:18:110","nodeType":"VariableDeclaration","scope":24785,"src":"1686:58:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":24268,"nodeType":"UserDefinedTypeName","pathNode":{"id":24267,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1686:22:110"},"referencedDeclaration":5282,"src":"1686:22:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"constant":false,"id":24271,"mutability":"immutable","name":"_baseVariableBorrowRate","nameLocation":"1845:23:110","nodeType":"VariableDeclaration","scope":24785,"src":"1818:50:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24270,"name":"uint256","nodeType":"ElementaryTypeName","src":"1818:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24273,"mutability":"immutable","name":"_variableRateSlope1","nameLocation":"2008:19:110","nodeType":"VariableDeclaration","scope":24785,"src":"1981:46:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24272,"name":"uint256","nodeType":"ElementaryTypeName","src":"1981:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24275,"mutability":"immutable","name":"_variableRateSlope2","nameLocation":"2158:19:110","nodeType":"VariableDeclaration","scope":24785,"src":"2131:46:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24274,"name":"uint256","nodeType":"ElementaryTypeName","src":"2131:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24277,"mutability":"immutable","name":"_stableRateSlope1","nameLocation":"2315:17:110","nodeType":"VariableDeclaration","scope":24785,"src":"2288:44:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24276,"name":"uint256","nodeType":"ElementaryTypeName","src":"2288:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24279,"mutability":"immutable","name":"_stableRateSlope2","nameLocation":"2461:17:110","nodeType":"VariableDeclaration","scope":24785,"src":"2434:44:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24278,"name":"uint256","nodeType":"ElementaryTypeName","src":"2434:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24281,"mutability":"immutable","name":"_baseStableRateOffset","nameLocation":"2586:21:110","nodeType":"VariableDeclaration","scope":24785,"src":"2559:48:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24280,"name":"uint256","nodeType":"ElementaryTypeName","src":"2559:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24283,"mutability":"immutable","name":"_stableRateExcessOffset","nameLocation":"2748:23:110","nodeType":"VariableDeclaration","scope":24785,"src":"2721:50:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24282,"name":"uint256","nodeType":"ElementaryTypeName","src":"2721:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":24380,"nodeType":"Block","src":"3989:865:110","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24309,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"4003:10:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":24310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"4003:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":24311,"name":"optimalUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24289,"src":"4021:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4003:35:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24313,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4040:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":24314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_OPTIMAL_USAGE_RATIO","nodeType":"MemberAccess","referencedDeclaration":14794,"src":"4040:34:110","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24308,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3995:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3995:80:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24316,"nodeType":"ExpressionStatement","src":"3995:80:110"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24318,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"4096:10:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":24319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"4096:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":24320,"name":"optimalStableToTotalDebtRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24305,"src":"4114:29:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4096:47:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24322,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4151:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":24323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"MemberAccess","referencedDeclaration":14797,"src":"4151:49:110","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24317,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4081:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4081:125:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24325,"nodeType":"ExpressionStatement","src":"4081:125:110"},{"expression":{"id":24328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24326,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24257,"src":"4212:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24327,"name":"optimalUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24289,"src":"4234:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4212:39:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24329,"nodeType":"ExpressionStatement","src":"4212:39:110"},{"expression":{"id":24335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24330,"name":"MAX_EXCESS_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24263,"src":"4257:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24331,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"4282:10:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":24332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"4282:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":24333,"name":"optimalUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24289,"src":"4299:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4282:34:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4257:59:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24336,"nodeType":"ExpressionStatement","src":"4257:59:110"},{"expression":{"id":24339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24337,"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"4322:34:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24338,"name":"optimalStableToTotalDebtRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24305,"src":"4359:29:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4322:66:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24340,"nodeType":"ExpressionStatement","src":"4322:66:110"},{"expression":{"id":24346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24341,"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24266,"src":"4394:37:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24342,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"4434:10:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$23813_$","typeString":"type(library WadRayMath)"}},"id":24343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":23738,"src":"4434:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":24344,"name":"optimalStableToTotalDebtRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24305,"src":"4451:29:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4434:46:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4394:86:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24347,"nodeType":"ExpressionStatement","src":"4394:86:110"},{"expression":{"id":24350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24348,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24269,"src":"4486:18:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24349,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24287,"src":"4507:8:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"4486:29:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":24351,"nodeType":"ExpressionStatement","src":"4486:29:110"},{"expression":{"id":24354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24352,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24271,"src":"4521:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24353,"name":"baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24291,"src":"4547:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4521:48:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24355,"nodeType":"ExpressionStatement","src":"4521:48:110"},{"expression":{"id":24358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24356,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24273,"src":"4575:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24357,"name":"variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24293,"src":"4597:18:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4575:40:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24359,"nodeType":"ExpressionStatement","src":"4575:40:110"},{"expression":{"id":24362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24360,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24275,"src":"4621:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24361,"name":"variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24295,"src":"4643:18:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4621:40:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24363,"nodeType":"ExpressionStatement","src":"4621:40:110"},{"expression":{"id":24366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24364,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24277,"src":"4667:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24365,"name":"stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24297,"src":"4687:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4667:36:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24367,"nodeType":"ExpressionStatement","src":"4667:36:110"},{"expression":{"id":24370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24368,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24279,"src":"4709:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24369,"name":"stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24299,"src":"4729:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4709:36:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24371,"nodeType":"ExpressionStatement","src":"4709:36:110"},{"expression":{"id":24374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24372,"name":"_baseStableRateOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24281,"src":"4751:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24373,"name":"baseStableRateOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24301,"src":"4775:20:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4751:44:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24375,"nodeType":"ExpressionStatement","src":"4751:44:110"},{"expression":{"id":24378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24376,"name":"_stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24283,"src":"4801:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24377,"name":"stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24303,"src":"4827:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4801:48:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24379,"nodeType":"ExpressionStatement","src":"4801:48:110"}]},"documentation":{"id":24284,"nodeType":"StructuredDocumentation","src":"2776:853:110","text":" @dev Constructor.\n @param provider The address of the PoolAddressesProvider contract\n @param optimalUsageRatio The optimal usage ratio\n @param baseVariableBorrowRate The base variable borrow rate\n @param variableRateSlope1 The variable rate slope below optimal usage ratio\n @param variableRateSlope2 The variable rate slope above optimal usage ratio\n @param stableRateSlope1 The stable rate slope below optimal usage ratio\n @param stableRateSlope2 The stable rate slope above optimal usage ratio\n @param baseStableRateOffset The premium on top of variable rate for base stable borrowing rate\n @param stableRateExcessOffset The premium on top of stable rate when there stable debt surpass the threshold\n @param optimalStableToTotalDebtRatio The optimal stable debt to total debt ratio of the reserve"},"id":24381,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24287,"mutability":"mutable","name":"provider","nameLocation":"3672:8:110","nodeType":"VariableDeclaration","scope":24381,"src":"3649:31:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":24286,"nodeType":"UserDefinedTypeName","pathNode":{"id":24285,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"3649:22:110"},"referencedDeclaration":5282,"src":"3649:22:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":24289,"mutability":"mutable","name":"optimalUsageRatio","nameLocation":"3694:17:110","nodeType":"VariableDeclaration","scope":24381,"src":"3686:25:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24288,"name":"uint256","nodeType":"ElementaryTypeName","src":"3686:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24291,"mutability":"mutable","name":"baseVariableBorrowRate","nameLocation":"3725:22:110","nodeType":"VariableDeclaration","scope":24381,"src":"3717:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24290,"name":"uint256","nodeType":"ElementaryTypeName","src":"3717:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24293,"mutability":"mutable","name":"variableRateSlope1","nameLocation":"3761:18:110","nodeType":"VariableDeclaration","scope":24381,"src":"3753:26:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24292,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24295,"mutability":"mutable","name":"variableRateSlope2","nameLocation":"3793:18:110","nodeType":"VariableDeclaration","scope":24381,"src":"3785:26:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24294,"name":"uint256","nodeType":"ElementaryTypeName","src":"3785:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24297,"mutability":"mutable","name":"stableRateSlope1","nameLocation":"3825:16:110","nodeType":"VariableDeclaration","scope":24381,"src":"3817:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24296,"name":"uint256","nodeType":"ElementaryTypeName","src":"3817:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24299,"mutability":"mutable","name":"stableRateSlope2","nameLocation":"3855:16:110","nodeType":"VariableDeclaration","scope":24381,"src":"3847:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24298,"name":"uint256","nodeType":"ElementaryTypeName","src":"3847:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24301,"mutability":"mutable","name":"baseStableRateOffset","nameLocation":"3885:20:110","nodeType":"VariableDeclaration","scope":24381,"src":"3877:28:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24300,"name":"uint256","nodeType":"ElementaryTypeName","src":"3877:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24303,"mutability":"mutable","name":"stableRateExcessOffset","nameLocation":"3919:22:110","nodeType":"VariableDeclaration","scope":24381,"src":"3911:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24302,"name":"uint256","nodeType":"ElementaryTypeName","src":"3911:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24305,"mutability":"mutable","name":"optimalStableToTotalDebtRatio","nameLocation":"3955:29:110","nodeType":"VariableDeclaration","scope":24381,"src":"3947:37:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24304,"name":"uint256","nodeType":"ElementaryTypeName","src":"3947:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3643:345:110"},"returnParameters":{"id":24307,"nodeType":"ParameterList","parameters":[],"src":"3989:0:110"},"scope":24785,"src":"3632:1222:110","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4173],"body":{"id":24389,"nodeType":"Block","src":"4970:37:110","statements":[{"expression":{"id":24387,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24273,"src":"4983:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24386,"id":24388,"nodeType":"Return","src":"4976:26:110"}]},"documentation":{"id":24382,"nodeType":"StructuredDocumentation","src":"4858:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"0b3429a2","id":24390,"implemented":true,"kind":"function","modifiers":[],"name":"getVariableRateSlope1","nameLocation":"4914:21:110","nodeType":"FunctionDefinition","parameters":{"id":24383,"nodeType":"ParameterList","parameters":[],"src":"4935:2:110"},"returnParameters":{"id":24386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24390,"src":"4961:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24384,"name":"uint256","nodeType":"ElementaryTypeName","src":"4961:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4960:9:110"},"scope":24785,"src":"4905:102:110","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4179],"body":{"id":24398,"nodeType":"Block","src":"5123:37:110","statements":[{"expression":{"id":24396,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24275,"src":"5136:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24395,"id":24397,"nodeType":"Return","src":"5129:26:110"}]},"documentation":{"id":24391,"nodeType":"StructuredDocumentation","src":"5011:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"f4202409","id":24399,"implemented":true,"kind":"function","modifiers":[],"name":"getVariableRateSlope2","nameLocation":"5067:21:110","nodeType":"FunctionDefinition","parameters":{"id":24392,"nodeType":"ParameterList","parameters":[],"src":"5088:2:110"},"returnParameters":{"id":24395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24394,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24399,"src":"5114:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24393,"name":"uint256","nodeType":"ElementaryTypeName","src":"5114:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5113:9:110"},"scope":24785,"src":"5058:102:110","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4185],"body":{"id":24407,"nodeType":"Block","src":"5274:35:110","statements":[{"expression":{"id":24405,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24277,"src":"5287:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24404,"id":24406,"nodeType":"Return","src":"5280:24:110"}]},"documentation":{"id":24400,"nodeType":"StructuredDocumentation","src":"5164:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"d5cd7391","id":24408,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateSlope1","nameLocation":"5220:19:110","nodeType":"FunctionDefinition","parameters":{"id":24401,"nodeType":"ParameterList","parameters":[],"src":"5239:2:110"},"returnParameters":{"id":24404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24408,"src":"5265:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24402,"name":"uint256","nodeType":"ElementaryTypeName","src":"5265:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5264:9:110"},"scope":24785,"src":"5211:98:110","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4191],"body":{"id":24416,"nodeType":"Block","src":"5423:35:110","statements":[{"expression":{"id":24414,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24279,"src":"5436:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24413,"id":24415,"nodeType":"Return","src":"5429:24:110"}]},"documentation":{"id":24409,"nodeType":"StructuredDocumentation","src":"5313:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"14e32da4","id":24417,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateSlope2","nameLocation":"5369:19:110","nodeType":"FunctionDefinition","parameters":{"id":24410,"nodeType":"ParameterList","parameters":[],"src":"5388:2:110"},"returnParameters":{"id":24413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24412,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24417,"src":"5414:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24411,"name":"uint256","nodeType":"ElementaryTypeName","src":"5414:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5413:9:110"},"scope":24785,"src":"5360:98:110","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4197],"body":{"id":24425,"nodeType":"Block","src":"5578:41:110","statements":[{"expression":{"id":24423,"name":"_stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24283,"src":"5591:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24422,"id":24424,"nodeType":"Return","src":"5584:30:110"}]},"documentation":{"id":24418,"nodeType":"StructuredDocumentation","src":"5462:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"bc626908","id":24426,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateExcessOffset","nameLocation":"5518:25:110","nodeType":"FunctionDefinition","parameters":{"id":24419,"nodeType":"ParameterList","parameters":[],"src":"5543:2:110"},"returnParameters":{"id":24422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24421,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24426,"src":"5569:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24420,"name":"uint256","nodeType":"ElementaryTypeName","src":"5569:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5568:9:110"},"scope":24785,"src":"5509:110:110","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4203],"body":{"id":24436,"nodeType":"Block","src":"5735:61:110","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24432,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24273,"src":"5748:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24433,"name":"_baseStableRateOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24281,"src":"5770:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5748:43:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24431,"id":24435,"nodeType":"Return","src":"5741:50:110"}]},"documentation":{"id":24427,"nodeType":"StructuredDocumentation","src":"5623:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"acd78686","id":24437,"implemented":true,"kind":"function","modifiers":[],"name":"getBaseStableBorrowRate","nameLocation":"5679:23:110","nodeType":"FunctionDefinition","parameters":{"id":24428,"nodeType":"ParameterList","parameters":[],"src":"5702:2:110"},"returnParameters":{"id":24431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24430,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24437,"src":"5726:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24429,"name":"uint256","nodeType":"ElementaryTypeName","src":"5726:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5725:9:110"},"scope":24785,"src":"5670:126:110","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[4209],"body":{"id":24446,"nodeType":"Block","src":"5925:41:110","statements":[{"expression":{"id":24444,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24271,"src":"5938:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24443,"id":24445,"nodeType":"Return","src":"5931:30:110"}]},"documentation":{"id":24438,"nodeType":"StructuredDocumentation","src":"5800:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"34762ca5","id":24447,"implemented":true,"kind":"function","modifiers":[],"name":"getBaseVariableBorrowRate","nameLocation":"5856:25:110","nodeType":"FunctionDefinition","overrides":{"id":24440,"nodeType":"OverrideSpecifier","overrides":[],"src":"5898:8:110"},"parameters":{"id":24439,"nodeType":"ParameterList","parameters":[],"src":"5881:2:110"},"returnParameters":{"id":24443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24442,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24447,"src":"5916:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24441,"name":"uint256","nodeType":"ElementaryTypeName","src":"5916:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5915:9:110"},"scope":24785,"src":"5847:119:110","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4215],"body":{"id":24460,"nodeType":"Block","src":"6094:85:110","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24454,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24271,"src":"6107:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24455,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24273,"src":"6133:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6107:45:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24457,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24275,"src":"6155:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6107:67:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24453,"id":24459,"nodeType":"Return","src":"6100:74:110"}]},"documentation":{"id":24448,"nodeType":"StructuredDocumentation","src":"5970:44:110","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"80031e37","id":24461,"implemented":true,"kind":"function","modifiers":[],"name":"getMaxVariableBorrowRate","nameLocation":"6026:24:110","nodeType":"FunctionDefinition","overrides":{"id":24450,"nodeType":"OverrideSpecifier","overrides":[],"src":"6067:8:110"},"parameters":{"id":24449,"nodeType":"ParameterList","parameters":[],"src":"6050:2:110"},"returnParameters":{"id":24453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24452,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24461,"src":"6085:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24451,"name":"uint256","nodeType":"ElementaryTypeName","src":"6085:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6084:9:110"},"scope":24785,"src":"6017:162:110","stateMutability":"view","virtual":false,"visibility":"external"},{"canonicalName":"DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars","id":24480,"members":[{"constant":false,"id":24463,"mutability":"mutable","name":"availableLiquidity","nameLocation":"6231:18:110","nodeType":"VariableDeclaration","scope":24480,"src":"6223:26:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24462,"name":"uint256","nodeType":"ElementaryTypeName","src":"6223:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24465,"mutability":"mutable","name":"totalDebt","nameLocation":"6263:9:110","nodeType":"VariableDeclaration","scope":24480,"src":"6255:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24464,"name":"uint256","nodeType":"ElementaryTypeName","src":"6255:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24467,"mutability":"mutable","name":"currentVariableBorrowRate","nameLocation":"6286:25:110","nodeType":"VariableDeclaration","scope":24480,"src":"6278:33:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24466,"name":"uint256","nodeType":"ElementaryTypeName","src":"6278:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24469,"mutability":"mutable","name":"currentStableBorrowRate","nameLocation":"6325:23:110","nodeType":"VariableDeclaration","scope":24480,"src":"6317:31:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24468,"name":"uint256","nodeType":"ElementaryTypeName","src":"6317:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24471,"mutability":"mutable","name":"currentLiquidityRate","nameLocation":"6362:20:110","nodeType":"VariableDeclaration","scope":24480,"src":"6354:28:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24470,"name":"uint256","nodeType":"ElementaryTypeName","src":"6354:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24473,"mutability":"mutable","name":"borrowUsageRatio","nameLocation":"6396:16:110","nodeType":"VariableDeclaration","scope":24480,"src":"6388:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24472,"name":"uint256","nodeType":"ElementaryTypeName","src":"6388:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24475,"mutability":"mutable","name":"supplyUsageRatio","nameLocation":"6426:16:110","nodeType":"VariableDeclaration","scope":24480,"src":"6418:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24474,"name":"uint256","nodeType":"ElementaryTypeName","src":"6418:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24477,"mutability":"mutable","name":"stableToTotalDebtRatio","nameLocation":"6456:22:110","nodeType":"VariableDeclaration","scope":24480,"src":"6448:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24476,"name":"uint256","nodeType":"ElementaryTypeName","src":"6448:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24479,"mutability":"mutable","name":"availableLiquidityPlusDebt","nameLocation":"6492:26:110","nodeType":"VariableDeclaration","scope":24480,"src":"6484:34:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24478,"name":"uint256","nodeType":"ElementaryTypeName","src":"6484:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"CalcInterestRatesLocalVars","nameLocation":"6190:26:110","nodeType":"StructDefinition","scope":24785,"src":"6183:340:110","visibility":"public"},{"baseFunctions":[6125],"body":{"id":24724,"nodeType":"Block","src":"6725:2353:110","statements":[{"assignments":[24496],"declarations":[{"constant":false,"id":24496,"mutability":"mutable","name":"vars","nameLocation":"6765:4:110","nodeType":"VariableDeclaration","scope":24724,"src":"6731:38:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars"},"typeName":{"id":24495,"nodeType":"UserDefinedTypeName","pathNode":{"id":24494,"name":"CalcInterestRatesLocalVars","nodeType":"IdentifierPath","referencedDeclaration":24480,"src":"6731:26:110"},"referencedDeclaration":24480,"src":"6731:26:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_storage_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars"}},"visibility":"internal"}],"id":24497,"nodeType":"VariableDeclarationStatement","src":"6731:38:110"},{"expression":{"id":24506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24498,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"6776:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":24465,"src":"6776:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24501,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"6793:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalStableDebt","nodeType":"MemberAccess","referencedDeclaration":24200,"src":"6793:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":24503,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"6818:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24504,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":24202,"src":"6818:24:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6793:49:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6776:66:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24507,"nodeType":"ExpressionStatement","src":"6776:66:110"},{"expression":{"id":24512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24508,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"6849:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24510,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":24471,"src":"6849:25:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":24511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6877:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6849:29:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24513,"nodeType":"ExpressionStatement","src":"6849:29:110"},{"expression":{"id":24518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24514,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"6884:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24467,"src":"6884:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24517,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24271,"src":"6917:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6884:56:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24519,"nodeType":"ExpressionStatement","src":"6884:56:110"},{"expression":{"id":24525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24520,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"6946:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24469,"src":"6946:28:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":24523,"name":"getBaseStableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24437,"src":"6977:23:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":24524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6977:25:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6946:56:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24526,"nodeType":"ExpressionStatement","src":"6946:56:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24527,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7013:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":24465,"src":"7013:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":24529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7031:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7013:19:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24597,"nodeType":"IfStatement","src":"7009:557:110","trueBody":{"id":24596,"nodeType":"Block","src":"7034:532:110","statements":[{"expression":{"id":24540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24531,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7042:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableToTotalDebtRatio","nodeType":"MemberAccess","referencedDeclaration":24477,"src":"7042:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":24537,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7102:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":24465,"src":"7102:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":24534,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"7072:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalStableDebt","nodeType":"MemberAccess","referencedDeclaration":24200,"src":"7072:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"7072:29:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7072:45:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7042:75:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24541,"nodeType":"ExpressionStatement","src":"7042:75:110"},{"expression":{"id":24559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24542,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7125:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":24463,"src":"7125:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":24550,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"7192:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24551,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aToken","nodeType":"MemberAccess","referencedDeclaration":24210,"src":"7192:13:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":24546,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"7166:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24547,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserve","nodeType":"MemberAccess","referencedDeclaration":24208,"src":"7166:14:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24545,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"7159:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":24548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7159:22:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":24549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"7159:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":24552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7159:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":24553,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"7217:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityAdded","nodeType":"MemberAccess","referencedDeclaration":24196,"src":"7217:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7159:79:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":24556,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"7249:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityTaken","nodeType":"MemberAccess","referencedDeclaration":24198,"src":"7249:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7159:111:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7125:145:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24560,"nodeType":"ExpressionStatement","src":"7125:145:110"},{"expression":{"id":24569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24561,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7279:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"availableLiquidityPlusDebt","nodeType":"MemberAccess","referencedDeclaration":24479,"src":"7279:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24564,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7313:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24565,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":24463,"src":"7313:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":24566,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7339:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":24465,"src":"7339:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7313:40:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7279:74:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24570,"nodeType":"ExpressionStatement","src":"7279:74:110"},{"expression":{"id":24580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24571,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7361:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":24473,"src":"7361:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":24577,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7407:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableLiquidityPlusDebt","nodeType":"MemberAccess","referencedDeclaration":24479,"src":"7407:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":24574,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7385:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24575,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":24465,"src":"7385:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"7385:21:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7385:54:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7361:78:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24581,"nodeType":"ExpressionStatement","src":"7361:78:110"},{"expression":{"id":24594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24582,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7447:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"supplyUsageRatio","nodeType":"MemberAccess","referencedDeclaration":24475,"src":"7447:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24588,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7502:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24589,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableLiquidityPlusDebt","nodeType":"MemberAccess","referencedDeclaration":24479,"src":"7502:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":24590,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"7536:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24591,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":24194,"src":"7536:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7502:49:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":24585,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7471:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":24465,"src":"7471:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"7471:21:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7471:88:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7447:112:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24595,"nodeType":"ExpressionStatement","src":"7447:112:110"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24598,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7576:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":24473,"src":"7576:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":24600,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24257,"src":"7600:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7576:43:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":24662,"nodeType":"Block","src":"8023:274:110","statements":[{"expression":{"id":24647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24636,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8031:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24469,"src":"8031:28:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":24645,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24257,"src":"8127:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":24641,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8088:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":24473,"src":"8088:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24639,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24277,"src":"8063:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"8063:24:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8063:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"8063:54:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8063:91:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8031:123:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24648,"nodeType":"ExpressionStatement","src":"8031:123:110"},{"expression":{"id":24660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24649,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8163:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24467,"src":"8163:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":24658,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24257,"src":"8263:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":24654,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8224:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":24473,"src":"8224:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24652,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24273,"src":"8197:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"8197:26:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8197:49:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"8197:56:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8197:93:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8163:127:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24661,"nodeType":"ExpressionStatement","src":"8163:127:110"}]},"id":24663,"nodeType":"IfStatement","src":"7572:725:110","trueBody":{"id":24635,"nodeType":"Block","src":"7621:396:110","statements":[{"assignments":[24603],"declarations":[{"constant":false,"id":24603,"mutability":"mutable","name":"excessBorrowUsageRatio","nameLocation":"7637:22:110","nodeType":"VariableDeclaration","scope":24635,"src":"7629:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24602,"name":"uint256","nodeType":"ElementaryTypeName","src":"7629:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24612,"initialValue":{"arguments":[{"id":24610,"name":"MAX_EXCESS_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24263,"src":"7724:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24604,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7663:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24605,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":24473,"src":"7663:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":24606,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24257,"src":"7687:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7663:43:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":24608,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7662:45:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"7662:52:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7662:92:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7629:125:110"},{"expression":{"id":24622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24613,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7763:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24469,"src":"7763:28:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24616,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24277,"src":"7803:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":24619,"name":"excessBorrowUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24603,"src":"7856:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24617,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24279,"src":"7831:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"7831:24:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7831:48:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7803:76:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7763:116:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24623,"nodeType":"ExpressionStatement","src":"7763:116:110"},{"expression":{"id":24633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24624,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"7888:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24467,"src":"7888:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24627,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24273,"src":"7930:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":24630,"name":"excessBorrowUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24603,"src":"7987:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24628,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24275,"src":"7960:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"7960:26:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7960:50:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7930:80:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7888:122:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24634,"nodeType":"ExpressionStatement","src":"7888:122:110"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24664,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8307:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableToTotalDebtRatio","nodeType":"MemberAccess","referencedDeclaration":24477,"src":"8307:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":24666,"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"8337:34:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8307:64:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24689,"nodeType":"IfStatement","src":"8303:330:110","trueBody":{"id":24688,"nodeType":"Block","src":"8373:260:110","statements":[{"assignments":[24669],"declarations":[{"constant":false,"id":24669,"mutability":"mutable","name":"excessStableDebtRatio","nameLocation":"8389:21:110","nodeType":"VariableDeclaration","scope":24688,"src":"8381:29:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24668,"name":"uint256","nodeType":"ElementaryTypeName","src":"8381:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24678,"initialValue":{"arguments":[{"id":24676,"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24266,"src":"8495:37:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24670,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8414:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableToTotalDebtRatio","nodeType":"MemberAccess","referencedDeclaration":24477,"src":"8414:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":24672,"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"8452:34:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8414:72:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":24674,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8413:74:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"8413:81:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8413:120:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8381:152:110"},{"expression":{"id":24686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24679,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8541:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24681,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24469,"src":"8541:28:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":24684,"name":"excessStableDebtRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24669,"src":"8604:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24682,"name":"_stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24283,"src":"8573:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"8573:30:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8573:53:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8541:85:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24687,"nodeType":"ExpressionStatement","src":"8541:85:110"}]}},{"expression":{"id":24714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":24690,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8639:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":24471,"src":"8639:25:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24708,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"8883:14:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":24709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"8883:32:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":24710,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"8918:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":24206,"src":"8918:20:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8883:55:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":24704,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8840:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"supplyUsageRatio","nodeType":"MemberAccess","referencedDeclaration":24475,"src":"8840:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":24694,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"8696:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalStableDebt","nodeType":"MemberAccess","referencedDeclaration":24200,"src":"8696:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24696,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"8726:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":24202,"src":"8726:24:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24698,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8758:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24467,"src":"8758:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24700,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24484,"src":"8796:6:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":24701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"averageStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24204,"src":"8796:30:110","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"}],"id":24693,"name":"_getOverallBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24784,"src":"8667:21:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":24702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8667:165:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"8667:172:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8667:195:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"8667:206:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8667:279:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8639:307:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24715,"nodeType":"ExpressionStatement","src":"8639:307:110"},{"expression":{"components":[{"expression":{"id":24716,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8968:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":24471,"src":"8968:25:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24718,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"9001:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24469,"src":"9001:28:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24720,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"9037:4:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$24480_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":24721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":24467,"src":"9037:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":24722,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8960:113:110","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":24493,"id":24723,"nodeType":"Return","src":"8953:120:110"}]},"documentation":{"id":24481,"nodeType":"StructuredDocumentation","src":"6527:44:110","text":"@inheritdoc IReserveInterestRateStrategy"},"functionSelector":"a5898709","id":24725,"implemented":true,"kind":"function","modifiers":[],"name":"calculateInterestRates","nameLocation":"6583:22:110","nodeType":"FunctionDefinition","overrides":{"id":24486,"nodeType":"OverrideSpecifier","overrides":[],"src":"6680:8:110"},"parameters":{"id":24485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24484,"mutability":"mutable","name":"params","nameLocation":"6657:6:110","nodeType":"VariableDeclaration","scope":24725,"src":"6611:52:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"},"typeName":{"id":24483,"nodeType":"UserDefinedTypeName","pathNode":{"id":24482,"name":"DataTypes.CalculateInterestRatesParams","nodeType":"IdentifierPath","referencedDeclaration":24211,"src":"6611:38:110"},"referencedDeclaration":24211,"src":"6611:38:110","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$24211_storage_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"}},"visibility":"internal"}],"src":"6605:62:110"},"returnParameters":{"id":24493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24725,"src":"6698:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24487,"name":"uint256","nodeType":"ElementaryTypeName","src":"6698:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24725,"src":"6707:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24489,"name":"uint256","nodeType":"ElementaryTypeName","src":"6707:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24492,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24725,"src":"6716:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24491,"name":"uint256","nodeType":"ElementaryTypeName","src":"6716:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6697:27:110"},"scope":24785,"src":"6574:2504:110","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":24783,"nodeType":"Block","src":"9832:452:110","statements":[{"assignments":[24740],"declarations":[{"constant":false,"id":24740,"mutability":"mutable","name":"totalDebt","nameLocation":"9846:9:110","nodeType":"VariableDeclaration","scope":24783,"src":"9838:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24739,"name":"uint256","nodeType":"ElementaryTypeName","src":"9838:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24744,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24741,"name":"totalStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24728,"src":"9858:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24742,"name":"totalVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24730,"src":"9876:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9858:35:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9838:55:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24745,"name":"totalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24740,"src":"9904:9:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9917:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9904:14:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24750,"nodeType":"IfStatement","src":"9900:28:110","trueBody":{"expression":{"hexValue":"30","id":24748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":24738,"id":24749,"nodeType":"Return","src":"9920:8:110"}},{"assignments":[24752],"declarations":[{"constant":false,"id":24752,"mutability":"mutable","name":"weightedVariableRate","nameLocation":"9943:20:110","nodeType":"VariableDeclaration","scope":24783,"src":"9935:28:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24751,"name":"uint256","nodeType":"ElementaryTypeName","src":"9935:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24759,"initialValue":{"arguments":[{"id":24757,"name":"currentVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24732,"src":"10002:25:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24753,"name":"totalVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24730,"src":"9966:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"9966:26:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":24755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9966:28:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"9966:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9966:62:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9935:93:110"},{"assignments":[24761],"declarations":[{"constant":false,"id":24761,"mutability":"mutable","name":"weightedStableRate","nameLocation":"10043:18:110","nodeType":"VariableDeclaration","scope":24783,"src":"10035:26:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24760,"name":"uint256","nodeType":"ElementaryTypeName","src":"10035:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24768,"initialValue":{"arguments":[{"id":24766,"name":"currentAverageStableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24734,"src":"10098:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24762,"name":"totalStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24728,"src":"10064:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"10064:24:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":24764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10064:26:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"10064:33:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10064:65:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10035:94:110"},{"assignments":[24770],"declarations":[{"constant":false,"id":24770,"mutability":"mutable","name":"overallBorrowRate","nameLocation":"10144:17:110","nodeType":"VariableDeclaration","scope":24783,"src":"10136:25:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24769,"name":"uint256","nodeType":"ElementaryTypeName","src":"10136:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24780,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24776,"name":"totalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24740,"src":"10222:9:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"10222:18:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":24778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10222:20:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24771,"name":"weightedVariableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24752,"src":"10165:20:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24772,"name":"weightedStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24761,"src":"10188:18:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10165:41:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":24774,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10164:43:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"10164:50:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10164:84:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10136:112:110"},{"expression":{"id":24781,"name":"overallBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24770,"src":"10262:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24738,"id":24782,"nodeType":"Return","src":"10255:24:110"}]},"documentation":{"id":24726,"nodeType":"StructuredDocumentation","src":"9082:537:110","text":" @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable\n debt\n @param totalStableDebt The total borrowed from the reserve at a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param currentVariableBorrowRate The current variable borrow rate of the reserve\n @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\n @return The weighted averaged borrow rate"},"id":24784,"implemented":true,"kind":"function","modifiers":[],"name":"_getOverallBorrowRate","nameLocation":"9631:21:110","nodeType":"FunctionDefinition","parameters":{"id":24735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24728,"mutability":"mutable","name":"totalStableDebt","nameLocation":"9666:15:110","nodeType":"VariableDeclaration","scope":24784,"src":"9658:23:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24727,"name":"uint256","nodeType":"ElementaryTypeName","src":"9658:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24730,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"9695:17:110","nodeType":"VariableDeclaration","scope":24784,"src":"9687:25:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24729,"name":"uint256","nodeType":"ElementaryTypeName","src":"9687:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24732,"mutability":"mutable","name":"currentVariableBorrowRate","nameLocation":"9726:25:110","nodeType":"VariableDeclaration","scope":24784,"src":"9718:33:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24731,"name":"uint256","nodeType":"ElementaryTypeName","src":"9718:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24734,"mutability":"mutable","name":"currentAverageStableBorrowRate","nameLocation":"9765:30:110","nodeType":"VariableDeclaration","scope":24784,"src":"9757:38:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24733,"name":"uint256","nodeType":"ElementaryTypeName","src":"9757:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9652:147:110"},"returnParameters":{"id":24738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24784,"src":"9823:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24736,"name":"uint256","nodeType":"ElementaryTypeName","src":"9823:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9822:9:110"},"scope":24785,"src":"9622:662:110","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":24786,"src":"1117:9169:110","usedErrors":[]}],"src":"37:10250:110"},"id":110},"contracts/protocol/pool/L2Pool.sol":{"ast":{"absolutePath":"contracts/protocol/pool/L2Pool.sol","exportedSymbols":{"CalldataLogic":[16514],"IL2Pool":[4434],"IPoolAddressesProvider":[5282],"L2Pool":[25142],"Pool":[26587]},"id":25143,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":24787,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:111"},{"absolutePath":"contracts/protocol/pool/Pool.sol","file":"./Pool.sol","id":24789,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25143,"sourceUnit":26588,"src":"63:32:111","symbolAliases":[{"foreign":{"id":24788,"name":"Pool","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:4:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":24791,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25143,"sourceUnit":5283,"src":"96:83:111","symbolAliases":[{"foreign":{"id":24790,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"104:22:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IL2Pool.sol","file":"../../interfaces/IL2Pool.sol","id":24793,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25143,"sourceUnit":4435,"src":"180:53:111","symbolAliases":[{"foreign":{"id":24792,"name":"IL2Pool","nodeType":"Identifier","overloadedDeclarations":[],"src":"188:7:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/CalldataLogic.sol","file":"../libraries/logic/CalldataLogic.sol","id":24795,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25143,"sourceUnit":16515,"src":"234:67:111","symbolAliases":[{"foreign":{"id":24794,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"242:13:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24797,"name":"Pool","nodeType":"IdentifierPath","referencedDeclaration":26587,"src":"522:4:111"},"id":24798,"nodeType":"InheritanceSpecifier","src":"522:4:111"},{"baseName":{"id":24799,"name":"IL2Pool","nodeType":"IdentifierPath","referencedDeclaration":4434,"src":"528:7:111"},"id":24800,"nodeType":"InheritanceSpecifier","src":"528:7:111"}],"canonicalName":"L2Pool","contractDependencies":[],"contractKind":"contract","documentation":{"id":24796,"nodeType":"StructuredDocumentation","src":"303:199:111","text":" @title L2Pool\n @author Aave\n @notice Calldata optimized extension of the Pool contract allowing users to pass compact calldata representation\n to reduce transaction costs on rollups."},"fullyImplemented":true,"id":25142,"linearizedBaseContracts":[25142,4434,26587,5073,28286,12750],"name":"L2Pool","nameLocation":"512:6:111","nodeType":"ContractDefinition","nodes":[{"body":{"id":24810,"nodeType":"Block","src":"706:37:111","statements":[]},"documentation":{"id":24801,"nodeType":"StructuredDocumentation","src":"540:103:111","text":" @dev Constructor.\n @param provider The address of the PoolAddressesProvider contract"},"id":24811,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24807,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24804,"src":"696:8:111","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}}],"id":24808,"kind":"baseConstructorSpecifier","modifierName":{"id":24806,"name":"Pool","nodeType":"IdentifierPath","referencedDeclaration":26587,"src":"691:4:111"},"nodeType":"ModifierInvocation","src":"691:14:111"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24804,"mutability":"mutable","name":"provider","nameLocation":"681:8:111","nodeType":"VariableDeclaration","scope":24811,"src":"658:31:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":24803,"nodeType":"UserDefinedTypeName","pathNode":{"id":24802,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"658:22:111"},"referencedDeclaration":5282,"src":"658:22:111","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"657:33:111"},"returnParameters":{"id":24809,"nodeType":"ParameterList","parameters":[],"src":"706:0:111"},"scope":25142,"src":"646:97:111","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4355],"body":{"id":24838,"nodeType":"Block","src":"821:191:111","statements":[{"assignments":[24819,24821,24823],"declarations":[{"constant":false,"id":24819,"mutability":"mutable","name":"asset","nameLocation":"836:5:111","nodeType":"VariableDeclaration","scope":24838,"src":"828:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24818,"name":"address","nodeType":"ElementaryTypeName","src":"828:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24821,"mutability":"mutable","name":"amount","nameLocation":"851:6:111","nodeType":"VariableDeclaration","scope":24838,"src":"843:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24820,"name":"uint256","nodeType":"ElementaryTypeName","src":"843:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24823,"mutability":"mutable","name":"referralCode","nameLocation":"866:12:111","nodeType":"VariableDeclaration","scope":24838,"src":"859:19:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24822,"name":"uint16","nodeType":"ElementaryTypeName","src":"859:6:111","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":24829,"initialValue":{"arguments":[{"id":24826,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"922:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":24827,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24814,"src":"943:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":24824,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"882:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":24825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeSupplyParams","nodeType":"MemberAccess","referencedDeclaration":16134,"src":"882:32:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$_t_uint16_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256,uint16)"}},"id":24828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"882:71:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint16_$","typeString":"tuple(address,uint256,uint16)"}},"nodeType":"VariableDeclarationStatement","src":"827:126:111"},{"expression":{"arguments":[{"id":24831,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24819,"src":"967:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24832,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24821,"src":"974:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24833,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"982:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"982:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24835,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24823,"src":"994:12:111","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":24830,"name":"supply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25401,"src":"960:6:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint256,address,uint16)"}},"id":24836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"960:47:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24837,"nodeType":"ExpressionStatement","src":"960:47:111"}]},"documentation":{"id":24812,"nodeType":"StructuredDocumentation","src":"747:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"f7a73840","id":24839,"implemented":true,"kind":"function","modifiers":[],"name":"supply","nameLocation":"782:6:111","nodeType":"FunctionDefinition","overrides":{"id":24816,"nodeType":"OverrideSpecifier","overrides":[],"src":"812:8:111"},"parameters":{"id":24815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24814,"mutability":"mutable","name":"args","nameLocation":"797:4:111","nodeType":"VariableDeclaration","scope":24839,"src":"789:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24813,"name":"bytes32","nodeType":"ElementaryTypeName","src":"789:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"788:14:111"},"returnParameters":{"id":24817,"nodeType":"ParameterList","parameters":[],"src":"821:0:111"},"scope":25142,"src":"773:239:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4365],"body":{"id":24878,"nodeType":"Block","src":"1122:246:111","statements":[{"assignments":[24851,24853,24855,24857,24859],"declarations":[{"constant":false,"id":24851,"mutability":"mutable","name":"asset","nameLocation":"1137:5:111","nodeType":"VariableDeclaration","scope":24878,"src":"1129:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24850,"name":"address","nodeType":"ElementaryTypeName","src":"1129:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24853,"mutability":"mutable","name":"amount","nameLocation":"1152:6:111","nodeType":"VariableDeclaration","scope":24878,"src":"1144:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24852,"name":"uint256","nodeType":"ElementaryTypeName","src":"1144:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24855,"mutability":"mutable","name":"referralCode","nameLocation":"1167:12:111","nodeType":"VariableDeclaration","scope":24878,"src":"1160:19:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24854,"name":"uint16","nodeType":"ElementaryTypeName","src":"1160:6:111","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":24857,"mutability":"mutable","name":"deadline","nameLocation":"1189:8:111","nodeType":"VariableDeclaration","scope":24878,"src":"1181:16:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24856,"name":"uint256","nodeType":"ElementaryTypeName","src":"1181:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24859,"mutability":"mutable","name":"v","nameLocation":"1205:1:111","nodeType":"VariableDeclaration","scope":24878,"src":"1199:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24858,"name":"uint8","nodeType":"ElementaryTypeName","src":"1199:5:111","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":24865,"initialValue":{"arguments":[{"id":24862,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"1260:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":24863,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24842,"src":"1275:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":24860,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"1210:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":24861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeSupplyWithPermitParams","nodeType":"MemberAccess","referencedDeclaration":16180,"src":"1210:49:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$_t_uint16_$_t_uint256_$_t_uint8_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256,uint16,uint256,uint8)"}},"id":24864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1210:70:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint16_$_t_uint256_$_t_uint8_$","typeString":"tuple(address,uint256,uint16,uint256,uint8)"}},"nodeType":"VariableDeclarationStatement","src":"1128:152:111"},{"expression":{"arguments":[{"id":24867,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24851,"src":"1304:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24868,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24853,"src":"1311:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24869,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1319:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1319:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24871,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24855,"src":"1331:12:111","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":24872,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24857,"src":"1345:8:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24873,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24859,"src":"1355:1:111","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":24874,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24844,"src":"1358:1:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":24875,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24846,"src":"1361:1:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":24866,"name":"supplyWithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25457,"src":"1287:16:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint16_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)"}},"id":24876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1287:76:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24877,"nodeType":"ExpressionStatement","src":"1287:76:111"}]},"documentation":{"id":24840,"nodeType":"StructuredDocumentation","src":"1016:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"680dd47c","id":24879,"implemented":true,"kind":"function","modifiers":[],"name":"supplyWithPermit","nameLocation":"1051:16:111","nodeType":"FunctionDefinition","overrides":{"id":24848,"nodeType":"OverrideSpecifier","overrides":[],"src":"1113:8:111"},"parameters":{"id":24847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24842,"mutability":"mutable","name":"args","nameLocation":"1076:4:111","nodeType":"VariableDeclaration","scope":24879,"src":"1068:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24841,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1068:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24844,"mutability":"mutable","name":"r","nameLocation":"1090:1:111","nodeType":"VariableDeclaration","scope":24879,"src":"1082:9:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24843,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1082:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24846,"mutability":"mutable","name":"s","nameLocation":"1101:1:111","nodeType":"VariableDeclaration","scope":24879,"src":"1093:9:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24845,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1093:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1067:36:111"},"returnParameters":{"id":24849,"nodeType":"ParameterList","parameters":[],"src":"1122:0:111"},"scope":25142,"src":"1042:326:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4373],"body":{"id":24905,"nodeType":"Block","src":"1466:149:111","statements":[{"assignments":[24889,24891],"declarations":[{"constant":false,"id":24889,"mutability":"mutable","name":"asset","nameLocation":"1481:5:111","nodeType":"VariableDeclaration","scope":24905,"src":"1473:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24888,"name":"address","nodeType":"ElementaryTypeName","src":"1473:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24891,"mutability":"mutable","name":"amount","nameLocation":"1496:6:111","nodeType":"VariableDeclaration","scope":24905,"src":"1488:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24890,"name":"uint256","nodeType":"ElementaryTypeName","src":"1488:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24897,"initialValue":{"arguments":[{"id":24894,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"1541:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":24895,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24882,"src":"1556:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":24892,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"1506:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":24893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeWithdrawParams","nodeType":"MemberAccess","referencedDeclaration":16225,"src":"1506:34:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256)"}},"id":24896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1506:55:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"1472:89:111"},{"expression":{"arguments":[{"id":24899,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24889,"src":"1584:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24900,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"1591:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24901,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1599:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1599:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24898,"name":"withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25496,"src":"1575:8:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) returns (uint256)"}},"id":24903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1575:35:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24887,"id":24904,"nodeType":"Return","src":"1568:42:111"}]},"documentation":{"id":24880,"nodeType":"StructuredDocumentation","src":"1372:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"8e19899e","id":24906,"implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"1407:8:111","nodeType":"FunctionDefinition","overrides":{"id":24884,"nodeType":"OverrideSpecifier","overrides":[],"src":"1439:8:111"},"parameters":{"id":24883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24882,"mutability":"mutable","name":"args","nameLocation":"1424:4:111","nodeType":"VariableDeclaration","scope":24906,"src":"1416:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24881,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1416:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1415:14:111"},"returnParameters":{"id":24887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24886,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24906,"src":"1457:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24885,"name":"uint256","nodeType":"ElementaryTypeName","src":"1457:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1456:9:111"},"scope":25142,"src":"1398:217:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4379],"body":{"id":24936,"nodeType":"Block","src":"1693:224:111","statements":[{"assignments":[24914,24916,24918,24920],"declarations":[{"constant":false,"id":24914,"mutability":"mutable","name":"asset","nameLocation":"1708:5:111","nodeType":"VariableDeclaration","scope":24936,"src":"1700:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24913,"name":"address","nodeType":"ElementaryTypeName","src":"1700:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24916,"mutability":"mutable","name":"amount","nameLocation":"1723:6:111","nodeType":"VariableDeclaration","scope":24936,"src":"1715:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24915,"name":"uint256","nodeType":"ElementaryTypeName","src":"1715:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24918,"mutability":"mutable","name":"interestRateMode","nameLocation":"1739:16:111","nodeType":"VariableDeclaration","scope":24936,"src":"1731:24:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24917,"name":"uint256","nodeType":"ElementaryTypeName","src":"1731:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24920,"mutability":"mutable","name":"referralCode","nameLocation":"1764:12:111","nodeType":"VariableDeclaration","scope":24936,"src":"1757:19:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24919,"name":"uint16","nodeType":"ElementaryTypeName","src":"1757:6:111","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":24926,"initialValue":{"arguments":[{"id":24923,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"1820:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":24924,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24909,"src":"1835:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":24921,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"1780:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":24922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeBorrowParams","nodeType":"MemberAccess","referencedDeclaration":16265,"src":"1780:39:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256,uint256,uint16)"}},"id":24925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1780:60:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$","typeString":"tuple(address,uint256,uint256,uint16)"}},"nodeType":"VariableDeclarationStatement","src":"1699:141:111"},{"expression":{"arguments":[{"id":24928,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24914,"src":"1854:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24929,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24916,"src":"1861:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24930,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24918,"src":"1869:16:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24931,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24920,"src":"1887:12:111","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"expression":{"id":24932,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1901:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1901:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24927,"name":"borrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25548,"src":"1847:6:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_address_$returns$__$","typeString":"function (address,uint256,uint256,uint16,address)"}},"id":24934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1847:65:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24935,"nodeType":"ExpressionStatement","src":"1847:65:111"}]},"documentation":{"id":24907,"nodeType":"StructuredDocumentation","src":"1619:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"d5eed868","id":24937,"implemented":true,"kind":"function","modifiers":[],"name":"borrow","nameLocation":"1654:6:111","nodeType":"FunctionDefinition","overrides":{"id":24911,"nodeType":"OverrideSpecifier","overrides":[],"src":"1684:8:111"},"parameters":{"id":24910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24909,"mutability":"mutable","name":"args","nameLocation":"1669:4:111","nodeType":"VariableDeclaration","scope":24937,"src":"1661:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24908,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1661:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1660:14:111"},"returnParameters":{"id":24912,"nodeType":"ParameterList","parameters":[],"src":"1693:0:111"},"scope":25142,"src":"1645:272:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4387],"body":{"id":24966,"nodeType":"Block","src":"2012:205:111","statements":[{"assignments":[24947,24949,24951],"declarations":[{"constant":false,"id":24947,"mutability":"mutable","name":"asset","nameLocation":"2027:5:111","nodeType":"VariableDeclaration","scope":24966,"src":"2019:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24946,"name":"address","nodeType":"ElementaryTypeName","src":"2019:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24949,"mutability":"mutable","name":"amount","nameLocation":"2042:6:111","nodeType":"VariableDeclaration","scope":24966,"src":"2034:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24948,"name":"uint256","nodeType":"ElementaryTypeName","src":"2034:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24951,"mutability":"mutable","name":"interestRateMode","nameLocation":"2058:16:111","nodeType":"VariableDeclaration","scope":24966,"src":"2050:24:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24950,"name":"uint256","nodeType":"ElementaryTypeName","src":"2050:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24957,"initialValue":{"arguments":[{"id":24954,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"2117:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":24955,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24940,"src":"2138:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":24952,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"2078:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":24953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeRepayParams","nodeType":"MemberAccess","referencedDeclaration":16316,"src":"2078:31:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$_t_uint256_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256,uint256)"}},"id":24956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2078:70:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$","typeString":"tuple(address,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"2018:130:111"},{"expression":{"arguments":[{"id":24959,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24947,"src":"2168:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24960,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24949,"src":"2175:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24961,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24951,"src":"2183:16:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24962,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2201:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2201:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24958,"name":"repay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25584,"src":"2162:5:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256,address) returns (uint256)"}},"id":24964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2162:50:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24945,"id":24965,"nodeType":"Return","src":"2155:57:111"}]},"documentation":{"id":24938,"nodeType":"StructuredDocumentation","src":"1921:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"563dd613","id":24967,"implemented":true,"kind":"function","modifiers":[],"name":"repay","nameLocation":"1956:5:111","nodeType":"FunctionDefinition","overrides":{"id":24942,"nodeType":"OverrideSpecifier","overrides":[],"src":"1985:8:111"},"parameters":{"id":24941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24940,"mutability":"mutable","name":"args","nameLocation":"1970:4:111","nodeType":"VariableDeclaration","scope":24967,"src":"1962:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24939,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1962:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1961:14:111"},"returnParameters":{"id":24945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24944,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24967,"src":"2003:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24943,"name":"uint256","nodeType":"ElementaryTypeName","src":"2003:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2002:9:111"},"scope":25142,"src":"1947:270:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4399],"body":{"id":25008,"nodeType":"Block","src":"2344:289:111","statements":[{"assignments":[24981,24983,24985,24987,24989],"declarations":[{"constant":false,"id":24981,"mutability":"mutable","name":"asset","nameLocation":"2366:5:111","nodeType":"VariableDeclaration","scope":25008,"src":"2358:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24980,"name":"address","nodeType":"ElementaryTypeName","src":"2358:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24983,"mutability":"mutable","name":"amount","nameLocation":"2387:6:111","nodeType":"VariableDeclaration","scope":25008,"src":"2379:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24982,"name":"uint256","nodeType":"ElementaryTypeName","src":"2379:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24985,"mutability":"mutable","name":"interestRateMode","nameLocation":"2409:16:111","nodeType":"VariableDeclaration","scope":25008,"src":"2401:24:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24984,"name":"uint256","nodeType":"ElementaryTypeName","src":"2401:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24987,"mutability":"mutable","name":"deadline","nameLocation":"2441:8:111","nodeType":"VariableDeclaration","scope":25008,"src":"2433:16:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24986,"name":"uint256","nodeType":"ElementaryTypeName","src":"2433:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24989,"mutability":"mutable","name":"v","nameLocation":"2463:1:111","nodeType":"VariableDeclaration","scope":25008,"src":"2457:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24988,"name":"uint8","nodeType":"ElementaryTypeName","src":"2457:5:111","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":24995,"initialValue":{"arguments":[{"id":24992,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"2515:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":24993,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24970,"src":"2530:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":24990,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"2473:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":24991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeRepayWithPermitParams","nodeType":"MemberAccess","referencedDeclaration":16362,"src":"2473:41:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint8_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256,uint256,uint256,uint8)"}},"id":24994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2473:62:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint8_$","typeString":"tuple(address,uint256,uint256,uint256,uint8)"}},"nodeType":"VariableDeclarationStatement","src":"2350:185:111"},{"expression":{"arguments":[{"id":24997,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24981,"src":"2565:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24998,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24983,"src":"2572:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24999,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24985,"src":"2580:16:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":25000,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2598:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2598:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25002,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24987,"src":"2610:8:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25003,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24989,"src":"2620:1:111","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25004,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24972,"src":"2623:1:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":25005,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24974,"src":"2626:1:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":24996,"name":"repayWithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25654,"src":"2549:15:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256,address,uint256,uint8,bytes32,bytes32) returns (uint256)"}},"id":25006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2549:79:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24979,"id":25007,"nodeType":"Return","src":"2542:86:111"}]},"documentation":{"id":24968,"nodeType":"StructuredDocumentation","src":"2221:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"94b576de","id":25009,"implemented":true,"kind":"function","modifiers":[],"name":"repayWithPermit","nameLocation":"2256:15:111","nodeType":"FunctionDefinition","overrides":{"id":24976,"nodeType":"OverrideSpecifier","overrides":[],"src":"2317:8:111"},"parameters":{"id":24975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24970,"mutability":"mutable","name":"args","nameLocation":"2280:4:111","nodeType":"VariableDeclaration","scope":25009,"src":"2272:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24969,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2272:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24972,"mutability":"mutable","name":"r","nameLocation":"2294:1:111","nodeType":"VariableDeclaration","scope":25009,"src":"2286:9:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24971,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2286:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24974,"mutability":"mutable","name":"s","nameLocation":"2305:1:111","nodeType":"VariableDeclaration","scope":25009,"src":"2297:9:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24973,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2297:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2271:36:111"},"returnParameters":{"id":24979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25009,"src":"2335:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24977,"name":"uint256","nodeType":"ElementaryTypeName","src":"2335:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2334:9:111"},"scope":25142,"src":"2247:386:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4407],"body":{"id":25036,"nodeType":"Block","src":"2739:204:111","statements":[{"assignments":[25019,25021,25023],"declarations":[{"constant":false,"id":25019,"mutability":"mutable","name":"asset","nameLocation":"2754:5:111","nodeType":"VariableDeclaration","scope":25036,"src":"2746:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25018,"name":"address","nodeType":"ElementaryTypeName","src":"2746:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25021,"mutability":"mutable","name":"amount","nameLocation":"2769:6:111","nodeType":"VariableDeclaration","scope":25036,"src":"2761:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25020,"name":"uint256","nodeType":"ElementaryTypeName","src":"2761:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25023,"mutability":"mutable","name":"interestRateMode","nameLocation":"2785:16:111","nodeType":"VariableDeclaration","scope":25036,"src":"2777:24:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25022,"name":"uint256","nodeType":"ElementaryTypeName","src":"2777:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25029,"initialValue":{"arguments":[{"id":25026,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"2844:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25027,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25012,"src":"2865:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":25024,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"2805:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":25025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeRepayParams","nodeType":"MemberAccess","referencedDeclaration":16316,"src":"2805:31:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$_t_uint256_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256,uint256)"}},"id":25028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2805:70:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$","typeString":"tuple(address,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"2745:130:111"},{"expression":{"arguments":[{"id":25031,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25019,"src":"2906:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25032,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25021,"src":"2913:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25033,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25023,"src":"2921:16:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25030,"name":"repayWithATokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25690,"src":"2889:16:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) returns (uint256)"}},"id":25034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2889:49:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25017,"id":25035,"nodeType":"Return","src":"2882:56:111"}]},"documentation":{"id":25010,"nodeType":"StructuredDocumentation","src":"2637:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"dc7c0bff","id":25037,"implemented":true,"kind":"function","modifiers":[],"name":"repayWithATokens","nameLocation":"2672:16:111","nodeType":"FunctionDefinition","overrides":{"id":25014,"nodeType":"OverrideSpecifier","overrides":[],"src":"2712:8:111"},"parameters":{"id":25013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25012,"mutability":"mutable","name":"args","nameLocation":"2697:4:111","nodeType":"VariableDeclaration","scope":25037,"src":"2689:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25011,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2689:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2688:14:111"},"returnParameters":{"id":25017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25016,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25037,"src":"2730:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25015,"name":"uint256","nodeType":"ElementaryTypeName","src":"2730:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2729:9:111"},"scope":25142,"src":"2663:280:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4413],"body":{"id":25059,"nodeType":"Block","src":"3033:187:111","statements":[{"assignments":[25045,25047],"declarations":[{"constant":false,"id":25045,"mutability":"mutable","name":"asset","nameLocation":"3048:5:111","nodeType":"VariableDeclaration","scope":25059,"src":"3040:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25044,"name":"address","nodeType":"ElementaryTypeName","src":"3040:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25047,"mutability":"mutable","name":"interestRateMode","nameLocation":"3063:16:111","nodeType":"VariableDeclaration","scope":25059,"src":"3055:24:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25046,"name":"uint256","nodeType":"ElementaryTypeName","src":"3055:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25053,"initialValue":{"arguments":[{"id":25050,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"3135:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25051,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25040,"src":"3156:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":25048,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"3083:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":25049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeSwapBorrowRateModeParams","nodeType":"MemberAccess","referencedDeclaration":16390,"src":"3083:44:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_uint256_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,uint256)"}},"id":25052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3083:83:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3039:127:111"},{"expression":{"arguments":[{"id":25055,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25045,"src":"3191:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25056,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25047,"src":"3198:16:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25054,"name":"swapBorrowRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25717,"src":"3172:18:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":25057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3172:43:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25058,"nodeType":"ExpressionStatement","src":"3172:43:111"}]},"documentation":{"id":25038,"nodeType":"StructuredDocumentation","src":"2947:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"1fe3c6f3","id":25060,"implemented":true,"kind":"function","modifiers":[],"name":"swapBorrowRateMode","nameLocation":"2982:18:111","nodeType":"FunctionDefinition","overrides":{"id":25042,"nodeType":"OverrideSpecifier","overrides":[],"src":"3024:8:111"},"parameters":{"id":25041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25040,"mutability":"mutable","name":"args","nameLocation":"3009:4:111","nodeType":"VariableDeclaration","scope":25060,"src":"3001:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25039,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3001:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3000:14:111"},"returnParameters":{"id":25043,"nodeType":"ParameterList","parameters":[],"src":"3033:0:111"},"scope":25142,"src":"2973:247:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4419],"body":{"id":25082,"nodeType":"Block","src":"3317:177:111","statements":[{"assignments":[25068,25070],"declarations":[{"constant":false,"id":25068,"mutability":"mutable","name":"asset","nameLocation":"3332:5:111","nodeType":"VariableDeclaration","scope":25082,"src":"3324:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25067,"name":"address","nodeType":"ElementaryTypeName","src":"3324:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25070,"mutability":"mutable","name":"user","nameLocation":"3347:4:111","nodeType":"VariableDeclaration","scope":25082,"src":"3339:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25069,"name":"address","nodeType":"ElementaryTypeName","src":"3339:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":25076,"initialValue":{"arguments":[{"id":25073,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"3414:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25074,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25063,"src":"3435:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":25071,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"3355:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":25072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeRebalanceStableBorrowRateParams","nodeType":"MemberAccess","referencedDeclaration":16418,"src":"3355:51:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_address_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,address)"}},"id":25075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3355:90:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"nodeType":"VariableDeclarationStatement","src":"3323:122:111"},{"expression":{"arguments":[{"id":25078,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25068,"src":"3477:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25079,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25070,"src":"3484:4:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":25077,"name":"rebalanceStableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25737,"src":"3451:25:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":25080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3451:38:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25081,"nodeType":"ExpressionStatement","src":"3451:38:111"}]},"documentation":{"id":25061,"nodeType":"StructuredDocumentation","src":"3224:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"427da177","id":25083,"implemented":true,"kind":"function","modifiers":[],"name":"rebalanceStableBorrowRate","nameLocation":"3259:25:111","nodeType":"FunctionDefinition","overrides":{"id":25065,"nodeType":"OverrideSpecifier","overrides":[],"src":"3308:8:111"},"parameters":{"id":25064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25063,"mutability":"mutable","name":"args","nameLocation":"3293:4:111","nodeType":"VariableDeclaration","scope":25083,"src":"3285:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25062,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3285:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3284:14:111"},"returnParameters":{"id":25066,"nodeType":"ParameterList","parameters":[],"src":"3317:0:111"},"scope":25142,"src":"3250:244:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4425],"body":{"id":25105,"nodeType":"Block","src":"3595:204:111","statements":[{"assignments":[25091,25093],"declarations":[{"constant":false,"id":25091,"mutability":"mutable","name":"asset","nameLocation":"3610:5:111","nodeType":"VariableDeclaration","scope":25105,"src":"3602:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25090,"name":"address","nodeType":"ElementaryTypeName","src":"3602:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25093,"mutability":"mutable","name":"useAsCollateral","nameLocation":"3622:15:111","nodeType":"VariableDeclaration","scope":25105,"src":"3617:20:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25092,"name":"bool","nodeType":"ElementaryTypeName","src":"3617:4:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":25099,"initialValue":{"arguments":[{"id":25096,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"3704:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25097,"name":"args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25086,"src":"3725:4:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":25094,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"3641:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":25095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeSetUserUseReserveAsCollateralParams","nodeType":"MemberAccess","referencedDeclaration":16446,"src":"3641:55:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$returns$_t_address_$_t_bool_$","typeString":"function (mapping(uint256 => address),bytes32) view returns (address,bool)"}},"id":25098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3641:94:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_bool_$","typeString":"tuple(address,bool)"}},"nodeType":"VariableDeclarationStatement","src":"3601:134:111"},{"expression":{"arguments":[{"id":25101,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25091,"src":"3771:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25102,"name":"useAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25093,"src":"3778:15:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":25100,"name":"setUserUseReserveAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25769,"src":"3741:29:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":25103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3741:53:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25104,"nodeType":"ExpressionStatement","src":"3741:53:111"}]},"documentation":{"id":25084,"nodeType":"StructuredDocumentation","src":"3498:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"4d013f03","id":25106,"implemented":true,"kind":"function","modifiers":[],"name":"setUserUseReserveAsCollateral","nameLocation":"3533:29:111","nodeType":"FunctionDefinition","overrides":{"id":25088,"nodeType":"OverrideSpecifier","overrides":[],"src":"3586:8:111"},"parameters":{"id":25087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25086,"mutability":"mutable","name":"args","nameLocation":"3571:4:111","nodeType":"VariableDeclaration","scope":25106,"src":"3563:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25085,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3563:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3562:14:111"},"returnParameters":{"id":25089,"nodeType":"ParameterList","parameters":[],"src":"3595:0:111"},"scope":25142,"src":"3524:275:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4433],"body":{"id":25140,"nodeType":"Block","src":"3902:302:111","statements":[{"assignments":[25116,25118,25120,25122,25124],"declarations":[{"constant":false,"id":25116,"mutability":"mutable","name":"collateralAsset","nameLocation":"3924:15:111","nodeType":"VariableDeclaration","scope":25140,"src":"3916:23:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25115,"name":"address","nodeType":"ElementaryTypeName","src":"3916:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25118,"mutability":"mutable","name":"debtAsset","nameLocation":"3955:9:111","nodeType":"VariableDeclaration","scope":25140,"src":"3947:17:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25117,"name":"address","nodeType":"ElementaryTypeName","src":"3947:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25120,"mutability":"mutable","name":"user","nameLocation":"3980:4:111","nodeType":"VariableDeclaration","scope":25140,"src":"3972:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25119,"name":"address","nodeType":"ElementaryTypeName","src":"3972:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25122,"mutability":"mutable","name":"debtToCover","nameLocation":"4000:11:111","nodeType":"VariableDeclaration","scope":25140,"src":"3992:19:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25121,"name":"uint256","nodeType":"ElementaryTypeName","src":"3992:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25124,"mutability":"mutable","name":"receiveAToken","nameLocation":"4024:13:111","nodeType":"VariableDeclaration","scope":25140,"src":"4019:18:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25123,"name":"bool","nodeType":"ElementaryTypeName","src":"4019:4:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":25131,"initialValue":{"arguments":[{"id":25127,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"4088:13:111","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25128,"name":"args1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25109,"src":"4103:5:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":25129,"name":"args2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25111,"src":"4110:5:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":25125,"name":"CalldataLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16514,"src":"4046:13:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CalldataLogic_$16514_$","typeString":"type(library CalldataLogic)"}},"id":25126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decodeLiquidationCallParams","nodeType":"MemberAccess","referencedDeclaration":16513,"src":"4046:41:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$","typeString":"function (mapping(uint256 => address),bytes32,bytes32) view returns (address,address,address,uint256,bool)"}},"id":25130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4046:70:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$","typeString":"tuple(address,address,address,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"3908:208:111"},{"expression":{"arguments":[{"id":25133,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25116,"src":"4138:15:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25134,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25118,"src":"4155:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25135,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25120,"src":"4166:4:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25136,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25122,"src":"4172:11:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25137,"name":"receiveAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25124,"src":"4185:13:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":25132,"name":"liquidationCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25812,"src":"4122:15:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,address,uint256,bool)"}},"id":25138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4122:77:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25139,"nodeType":"ExpressionStatement","src":"4122:77:111"}]},"documentation":{"id":25107,"nodeType":"StructuredDocumentation","src":"3803:23:111","text":"@inheritdoc IL2Pool"},"functionSelector":"fd21ecff","id":25141,"implemented":true,"kind":"function","modifiers":[],"name":"liquidationCall","nameLocation":"3838:15:111","nodeType":"FunctionDefinition","overrides":{"id":25113,"nodeType":"OverrideSpecifier","overrides":[],"src":"3893:8:111"},"parameters":{"id":25112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25109,"mutability":"mutable","name":"args1","nameLocation":"3862:5:111","nodeType":"VariableDeclaration","scope":25141,"src":"3854:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25108,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3854:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":25111,"mutability":"mutable","name":"args2","nameLocation":"3877:5:111","nodeType":"VariableDeclaration","scope":25141,"src":"3869:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25110,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3869:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3853:30:111"},"returnParameters":{"id":25114,"nodeType":"ParameterList","parameters":[],"src":"3902:0:111"},"scope":25142,"src":"3829:375:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":25143,"src":"503:3703:111","usedErrors":[]}],"src":"37:4170:111"},"id":111},"contracts/protocol/pool/Pool.sol":{"ast":{"absolutePath":"contracts/protocol/pool/Pool.sol","exportedSymbols":{"BorrowLogic":[15720],"BridgeLogic":[16097],"DataTypes":[24227],"EModeLogic":[17209],"Errors":[14819],"FlashLoanLogic":[17844],"IACLManager":[3843],"IERC20WithPermit":[4252],"IPool":[5073],"IPoolAddressesProvider":[5282],"LiquidationLogic":[19765],"Pool":[26587],"PoolLogic":[20211],"PoolStorage":[28286],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"SupplyLogic":[21684],"VersionedInitializable":[12750]},"id":26588,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":25144,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:112"},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":25146,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":12751,"src":"63:99:112","symbolAliases":[{"foreign":{"id":25145,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:22:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":25148,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":14820,"src":"163:55:112","symbolAliases":[{"foreign":{"id":25147,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"171:6:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../libraries/configuration/ReserveConfiguration.sol","id":25150,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":14035,"src":"219:89:112","symbolAliases":[{"foreign":{"id":25149,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"227:20:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/PoolLogic.sol","file":"../libraries/logic/PoolLogic.sol","id":25152,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":20212,"src":"309:59:112","symbolAliases":[{"foreign":{"id":25151,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"317:9:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"../libraries/logic/ReserveLogic.sol","id":25154,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":20972,"src":"369:65:112","symbolAliases":[{"foreign":{"id":25153,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"377:12:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/EModeLogic.sol","file":"../libraries/logic/EModeLogic.sol","id":25156,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":17210,"src":"435:61:112","symbolAliases":[{"foreign":{"id":25155,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"443:10:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/SupplyLogic.sol","file":"../libraries/logic/SupplyLogic.sol","id":25158,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":21685,"src":"497:63:112","symbolAliases":[{"foreign":{"id":25157,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"505:11:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/FlashLoanLogic.sol","file":"../libraries/logic/FlashLoanLogic.sol","id":25160,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":17845,"src":"561:69:112","symbolAliases":[{"foreign":{"id":25159,"name":"FlashLoanLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"569:14:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/BorrowLogic.sol","file":"../libraries/logic/BorrowLogic.sol","id":25162,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":15721,"src":"631:63:112","symbolAliases":[{"foreign":{"id":25161,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"639:11:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/LiquidationLogic.sol","file":"../libraries/logic/LiquidationLogic.sol","id":25164,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":19766,"src":"695:73:112","symbolAliases":[{"foreign":{"id":25163,"name":"LiquidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"703:16:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../libraries/types/DataTypes.sol","id":25166,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":24228,"src":"769:59:112","symbolAliases":[{"foreign":{"id":25165,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"777:9:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/BridgeLogic.sol","file":"../libraries/logic/BridgeLogic.sol","id":25168,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":16098,"src":"829:63:112","symbolAliases":[{"foreign":{"id":25167,"name":"BridgeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"837:11:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IERC20WithPermit.sol","file":"../../interfaces/IERC20WithPermit.sol","id":25170,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":4253,"src":"893:71:112","symbolAliases":[{"foreign":{"id":25169,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"901:16:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":25172,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":5283,"src":"965:83:112","symbolAliases":[{"foreign":{"id":25171,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"973:22:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":25174,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":5074,"src":"1049:49:112","symbolAliases":[{"foreign":{"id":25173,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"1057:5:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IACLManager.sol","file":"../../interfaces/IACLManager.sol","id":25176,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":3844,"src":"1099:61:112","symbolAliases":[{"foreign":{"id":25175,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"1107:11:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/pool/PoolStorage.sol","file":"./PoolStorage.sol","id":25178,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26588,"sourceUnit":28287,"src":"1161:46:112","symbolAliases":[{"foreign":{"id":25177,"name":"PoolStorage","nodeType":"Identifier","overloadedDeclarations":[],"src":"1169:11:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":25180,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":12750,"src":"1845:22:112"},"id":25181,"nodeType":"InheritanceSpecifier","src":"1845:22:112"},{"baseName":{"id":25182,"name":"PoolStorage","nodeType":"IdentifierPath","referencedDeclaration":28286,"src":"1869:11:112"},"id":25183,"nodeType":"InheritanceSpecifier","src":"1869:11:112"},{"baseName":{"id":25184,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1882:5:112"},"id":25185,"nodeType":"InheritanceSpecifier","src":"1882:5:112"}],"canonicalName":"Pool","contractDependencies":[],"contractKind":"contract","documentation":{"id":25179,"nodeType":"StructuredDocumentation","src":"1209:618:112","text":" @title Pool contract\n @author Aave\n @notice Main point of interaction with an Aave protocol's market\n - Users can:\n   # Supply\n   # Withdraw\n   # Borrow\n   # Repay\n   # Swap their loans between variable and stable rate\n   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\n   # Liquidate positions\n   # Execute Flash Loans\n @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\n @dev All admin functions are callable by the PoolConfigurator contract defined also in the\n   PoolAddressesProvider"},"fullyImplemented":true,"id":26587,"linearizedBaseContracts":[26587,5073,28286,12750],"name":"Pool","nameLocation":"1837:4:112","nodeType":"ContractDefinition","nodes":[{"id":25189,"libraryName":{"id":25186,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"1898:12:112"},"nodeType":"UsingForDirective","src":"1892:45:112","typeName":{"id":25188,"nodeType":"UserDefinedTypeName","pathNode":{"id":25187,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"1915:21:112"},"referencedDeclaration":23909,"src":"1915:21:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"constant":true,"functionSelector":"0148170e","id":25192,"mutability":"constant","name":"POOL_REVISION","nameLocation":"1965:13:112","nodeType":"VariableDeclaration","scope":26587,"src":"1941:43:112","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25190,"name":"uint256","nodeType":"ElementaryTypeName","src":"1941:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":25191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1981:3:112","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"baseFunctions":[4961],"constant":false,"functionSelector":"0542975c","id":25195,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"2028:18:112","nodeType":"VariableDeclaration","scope":26587,"src":"1988:58:112","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":25194,"nodeType":"UserDefinedTypeName","pathNode":{"id":25193,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1988:22:112"},"referencedDeclaration":5282,"src":"1988:22:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"body":{"id":25202,"nodeType":"Block","src":"2172:41:112","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25198,"name":"_onlyPoolConfigurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25234,"src":"2178:21:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":25199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2178:23:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25200,"nodeType":"ExpressionStatement","src":"2178:23:112"},{"id":25201,"nodeType":"PlaceholderStatement","src":"2207:1:112"}]},"documentation":{"id":25196,"nodeType":"StructuredDocumentation","src":"2051:86:112","text":" @dev Only pool configurator can call functions marked by this modifier."},"id":25203,"name":"onlyPoolConfigurator","nameLocation":"2149:20:112","nodeType":"ModifierDefinition","parameters":{"id":25197,"nodeType":"ParameterList","parameters":[],"src":"2169:2:112"},"src":"2140:73:112","virtual":false,"visibility":"internal"},{"body":{"id":25210,"nodeType":"Block","src":"2324:34:112","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25206,"name":"_onlyPoolAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25252,"src":"2330:14:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":25207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2330:16:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25208,"nodeType":"ExpressionStatement","src":"2330:16:112"},{"id":25209,"nodeType":"PlaceholderStatement","src":"2352:1:112"}]},"documentation":{"id":25204,"nodeType":"StructuredDocumentation","src":"2217:79:112","text":" @dev Only pool admin can call functions marked by this modifier."},"id":25211,"name":"onlyPoolAdmin","nameLocation":"2308:13:112","nodeType":"ModifierDefinition","parameters":{"id":25205,"nodeType":"ParameterList","parameters":[],"src":"2321:2:112"},"src":"2299:59:112","virtual":false,"visibility":"internal"},{"body":{"id":25218,"nodeType":"Block","src":"2462:31:112","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25214,"name":"_onlyBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25270,"src":"2468:11:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":25215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2468:13:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25216,"nodeType":"ExpressionStatement","src":"2468:13:112"},{"id":25217,"nodeType":"PlaceholderStatement","src":"2487:1:112"}]},"documentation":{"id":25212,"nodeType":"StructuredDocumentation","src":"2362:75:112","text":" @dev Only bridge can call functions marked by this modifier."},"id":25219,"name":"onlyBridge","nameLocation":"2449:10:112","nodeType":"ModifierDefinition","parameters":{"id":25213,"nodeType":"ParameterList","parameters":[],"src":"2459:2:112"},"src":"2440:53:112","virtual":false,"visibility":"internal"},{"body":{"id":25233,"nodeType":"Block","src":"2552:129:112","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25223,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"2573:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPoolConfigurator","nodeType":"MemberAccess","referencedDeclaration":5215,"src":"2573:38:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2573:40:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":25226,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2617:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2617:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2573:54:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25229,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2635:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":25230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_CONFIGURATOR","nodeType":"MemberAccess","referencedDeclaration":14578,"src":"2635:35:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25222,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2558:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2558:118:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25232,"nodeType":"ExpressionStatement","src":"2558:118:112"}]},"id":25234,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyPoolConfigurator","nameLocation":"2506:21:112","nodeType":"FunctionDefinition","parameters":{"id":25220,"nodeType":"ParameterList","parameters":[],"src":"2527:2:112"},"returnParameters":{"id":25221,"nodeType":"ParameterList","parameters":[],"src":"2552:0:112"},"scope":26587,"src":"2497:184:112","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":25251,"nodeType":"Block","src":"2733:139:112","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":25244,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2814:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2814:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25239,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"2766:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"2766:32:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2766:34:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25238,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"2754:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":25242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2754:47:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":25243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"2754:59:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2754:71:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25247,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2833:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":25248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14551,"src":"2833:28:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25237,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2739:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2739:128:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25250,"nodeType":"ExpressionStatement","src":"2739:128:112"}]},"id":25252,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyPoolAdmin","nameLocation":"2694:14:112","nodeType":"FunctionDefinition","parameters":{"id":25235,"nodeType":"ParameterList","parameters":[],"src":"2708:2:112"},"returnParameters":{"id":25236,"nodeType":"ParameterList","parameters":[],"src":"2733:0:112"},"scope":26587,"src":"2685:187:112","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":25269,"nodeType":"Block","src":"2921:132:112","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":25262,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2999:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2999:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25257,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"2954:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"2954:32:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2954:34:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25256,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"2942:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":25260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2942:47:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":25261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isBridge","nodeType":"MemberAccess","referencedDeclaration":3822,"src":"2942:56:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2942:68:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25265,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3018:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":25266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_BRIDGE","nodeType":"MemberAccess","referencedDeclaration":14566,"src":"3018:24:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25255,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2927:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2927:121:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25268,"nodeType":"ExpressionStatement","src":"2927:121:112"}]},"id":25270,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyBridge","nameLocation":"2885:11:112","nodeType":"FunctionDefinition","parameters":{"id":25253,"nodeType":"ParameterList","parameters":[],"src":"2896:2:112"},"returnParameters":{"id":25254,"nodeType":"ParameterList","parameters":[],"src":"2921:0:112"},"scope":26587,"src":"2876:177:112","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[12730],"body":{"id":25278,"nodeType":"Block","src":"3129:31:112","statements":[{"expression":{"id":25276,"name":"POOL_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25192,"src":"3142:13:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25275,"id":25277,"nodeType":"Return","src":"3135:20:112"}]},"id":25279,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"3066:11:112","nodeType":"FunctionDefinition","overrides":{"id":25272,"nodeType":"OverrideSpecifier","overrides":[],"src":"3102:8:112"},"parameters":{"id":25271,"nodeType":"ParameterList","parameters":[],"src":"3077:2:112"},"returnParameters":{"id":25275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25274,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25279,"src":"3120:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25273,"name":"uint256","nodeType":"ElementaryTypeName","src":"3120:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3119:9:112"},"scope":26587,"src":"3057:103:112","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":25290,"nodeType":"Block","src":"3315:40:112","statements":[{"expression":{"id":25288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25286,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"3321:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25287,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25283,"src":"3342:8:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"3321:29:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25289,"nodeType":"ExpressionStatement","src":"3321:29:112"}]},"documentation":{"id":25280,"nodeType":"StructuredDocumentation","src":"3164:103:112","text":" @dev Constructor.\n @param provider The address of the PoolAddressesProvider contract"},"id":25291,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":25284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25283,"mutability":"mutable","name":"provider","nameLocation":"3305:8:112","nodeType":"VariableDeclaration","scope":25291,"src":"3282:31:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":25282,"nodeType":"UserDefinedTypeName","pathNode":{"id":25281,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"3282:22:112"},"referencedDeclaration":5282,"src":"3282:22:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"3281:33:112"},"returnParameters":{"id":25285,"nodeType":"ParameterList","parameters":[],"src":"3315:0:112"},"scope":26587,"src":"3270:85:112","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":25312,"nodeType":"Block","src":"3802:131:112","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"id":25303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25301,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"3816:8:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":25302,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"3828:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"3816:30:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25304,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3848:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":25305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_ADDRESSES_PROVIDER","nodeType":"MemberAccess","referencedDeclaration":14584,"src":"3848:33:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25300,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3808:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3808:74:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25307,"nodeType":"ExpressionStatement","src":"3808:74:112"},{"expression":{"id":25310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25308,"name":"_maxStableRateBorrowSizePercent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28283,"src":"3888:31:112","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"302e32356534","id":25309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3922:6:112","typeDescriptions":{"typeIdentifier":"t_rational_2500_by_1","typeString":"int_const 2500"},"value":"0.25e4"},"src":"3888:40:112","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":25311,"nodeType":"ExpressionStatement","src":"3888:40:112"}]},"documentation":{"id":25292,"nodeType":"StructuredDocumentation","src":"3359:358:112","text":" @notice Initializes the Pool.\n @dev Function is invoked by the proxy contract when the Pool contract is added to the\n PoolAddressesProvider of the market.\n @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\n @param provider The address of the PoolAddressesProvider"},"functionSelector":"c4d66de8","id":25313,"implemented":true,"kind":"function","modifiers":[{"id":25298,"kind":"modifierInvocation","modifierName":{"id":25297,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"3790:11:112"},"nodeType":"ModifierInvocation","src":"3790:11:112"}],"name":"initialize","nameLocation":"3729:10:112","nodeType":"FunctionDefinition","parameters":{"id":25296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25295,"mutability":"mutable","name":"provider","nameLocation":"3763:8:112","nodeType":"VariableDeclaration","scope":25313,"src":"3740:31:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":25294,"nodeType":"UserDefinedTypeName","pathNode":{"id":25293,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"3740:22:112"},"referencedDeclaration":5282,"src":"3740:22:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"3739:33:112"},"returnParameters":{"id":25299,"nodeType":"ParameterList","parameters":[],"src":"3802:0:112"},"scope":26587,"src":"3720:213:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4634],"body":{"id":25342,"nodeType":"Block","src":"4112:183:112","statements":[{"expression":{"arguments":[{"id":25331,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"4157:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25332,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"4174:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":25333,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"4195:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25335,"indexExpression":{"id":25334,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"4208:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4195:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":25336,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25316,"src":"4227:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25337,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25318,"src":"4240:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25338,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"4254:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25339,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25322,"src":"4272:12:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":25328,"name":"BridgeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16097,"src":"4118:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BridgeLogic_$16097_$","typeString":"type(library BridgeLogic)"}},"id":25330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeMintUnbacked","nodeType":"MemberAccess","referencedDeclaration":15957,"src":"4118:31:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,address,uint256,address,uint16)"}},"id":25340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4118:172:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25341,"nodeType":"ExpressionStatement","src":"4118:172:112"}]},"documentation":{"id":25314,"nodeType":"StructuredDocumentation","src":"3937:21:112","text":"@inheritdoc IPool"},"functionSelector":"69a933a5","id":25343,"implemented":true,"kind":"function","modifiers":[{"id":25326,"kind":"modifierInvocation","modifierName":{"id":25325,"name":"onlyBridge","nodeType":"IdentifierPath","referencedDeclaration":25219,"src":"4101:10:112"},"nodeType":"ModifierInvocation","src":"4101:10:112"}],"name":"mintUnbacked","nameLocation":"3970:12:112","nodeType":"FunctionDefinition","overrides":{"id":25324,"nodeType":"OverrideSpecifier","overrides":[],"src":"4092:8:112"},"parameters":{"id":25323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25316,"mutability":"mutable","name":"asset","nameLocation":"3996:5:112","nodeType":"VariableDeclaration","scope":25343,"src":"3988:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25315,"name":"address","nodeType":"ElementaryTypeName","src":"3988:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25318,"mutability":"mutable","name":"amount","nameLocation":"4015:6:112","nodeType":"VariableDeclaration","scope":25343,"src":"4007:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25317,"name":"uint256","nodeType":"ElementaryTypeName","src":"4007:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25320,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4035:10:112","nodeType":"VariableDeclaration","scope":25343,"src":"4027:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25319,"name":"address","nodeType":"ElementaryTypeName","src":"4027:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25322,"mutability":"mutable","name":"referralCode","nameLocation":"4058:12:112","nodeType":"VariableDeclaration","scope":25343,"src":"4051:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":25321,"name":"uint16","nodeType":"ElementaryTypeName","src":"4051:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"3982:92:112"},"returnParameters":{"id":25327,"nodeType":"ParameterList","parameters":[],"src":"4112:0:112"},"scope":26587,"src":"3961:334:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4646],"body":{"id":25369,"nodeType":"Block","src":"4460:113:112","statements":[{"expression":{"arguments":[{"baseExpression":{"id":25360,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"4511:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":25362,"indexExpression":{"id":25361,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25346,"src":"4521:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4511:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"id":25363,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25346,"src":"4529:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25364,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25348,"src":"4536:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25365,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25350,"src":"4544:3:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25366,"name":"_bridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28277,"src":"4549:18:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25358,"name":"BridgeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16097,"src":"4479:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BridgeLogic_$16097_$","typeString":"type(library BridgeLogic)"}},"id":25359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeBackUnbacked","nodeType":"MemberAccess","referencedDeclaration":16096,"src":"4479:31:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct DataTypes.ReserveData storage pointer,address,uint256,uint256,uint256) returns (uint256)"}},"id":25367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4479:89:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25357,"id":25368,"nodeType":"Return","src":"4466:102:112"}]},"documentation":{"id":25344,"nodeType":"StructuredDocumentation","src":"4299:21:112","text":"@inheritdoc IPool"},"functionSelector":"d65dc7a1","id":25370,"implemented":true,"kind":"function","modifiers":[{"id":25354,"kind":"modifierInvocation","modifierName":{"id":25353,"name":"onlyBridge","nodeType":"IdentifierPath","referencedDeclaration":25219,"src":"4431:10:112"},"nodeType":"ModifierInvocation","src":"4431:10:112"}],"name":"backUnbacked","nameLocation":"4332:12:112","nodeType":"FunctionDefinition","overrides":{"id":25352,"nodeType":"OverrideSpecifier","overrides":[],"src":"4422:8:112"},"parameters":{"id":25351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25346,"mutability":"mutable","name":"asset","nameLocation":"4358:5:112","nodeType":"VariableDeclaration","scope":25370,"src":"4350:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25345,"name":"address","nodeType":"ElementaryTypeName","src":"4350:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25348,"mutability":"mutable","name":"amount","nameLocation":"4377:6:112","nodeType":"VariableDeclaration","scope":25370,"src":"4369:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25347,"name":"uint256","nodeType":"ElementaryTypeName","src":"4369:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25350,"mutability":"mutable","name":"fee","nameLocation":"4397:3:112","nodeType":"VariableDeclaration","scope":25370,"src":"4389:11:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25349,"name":"uint256","nodeType":"ElementaryTypeName","src":"4389:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4344:60:112"},"returnParameters":{"id":25357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25370,"src":"4451:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25355,"name":"uint256","nodeType":"ElementaryTypeName","src":"4451:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4450:9:112"},"scope":26587,"src":"4323:250:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4658],"body":{"id":25400,"nodeType":"Block","src":"4733:273:112","statements":[{"expression":{"arguments":[{"id":25386,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"4772:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25387,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"4789:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":25388,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"4810:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25390,"indexExpression":{"id":25389,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25377,"src":"4823:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4810:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":25393,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25373,"src":"4889:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25394,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25375,"src":"4912:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25395,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25377,"src":"4940:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25396,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25379,"src":"4974:12:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":25391,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"4842:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteSupplyParams","nodeType":"MemberAccess","referencedDeclaration":24001,"src":"4842:29:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteSupplyParams_$24001_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteSupplyParams storage pointer)"}},"id":25397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","onBehalfOf","referralCode"],"nodeType":"FunctionCall","src":"4842:153:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}],"expression":{"id":25383,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21684,"src":"4739:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$21684_$","typeString":"type(library SupplyLogic)"}},"id":25385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSupply","nodeType":"MemberAccess","referencedDeclaration":21194,"src":"4739:25:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteSupplyParams_$24001_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteSupplyParams memory)"}},"id":25398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4739:262:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25399,"nodeType":"ExpressionStatement","src":"4739:262:112"}]},"documentation":{"id":25371,"nodeType":"StructuredDocumentation","src":"4577:21:112","text":"@inheritdoc IPool"},"functionSelector":"617ba037","id":25401,"implemented":true,"kind":"function","modifiers":[],"name":"supply","nameLocation":"4610:6:112","nodeType":"FunctionDefinition","overrides":{"id":25381,"nodeType":"OverrideSpecifier","overrides":[],"src":"4724:8:112"},"parameters":{"id":25380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25373,"mutability":"mutable","name":"asset","nameLocation":"4630:5:112","nodeType":"VariableDeclaration","scope":25401,"src":"4622:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25372,"name":"address","nodeType":"ElementaryTypeName","src":"4622:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25375,"mutability":"mutable","name":"amount","nameLocation":"4649:6:112","nodeType":"VariableDeclaration","scope":25401,"src":"4641:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25374,"name":"uint256","nodeType":"ElementaryTypeName","src":"4641:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25377,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4669:10:112","nodeType":"VariableDeclaration","scope":25401,"src":"4661:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25376,"name":"address","nodeType":"ElementaryTypeName","src":"4661:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25379,"mutability":"mutable","name":"referralCode","nameLocation":"4692:12:112","nodeType":"VariableDeclaration","scope":25401,"src":"4685:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":25378,"name":"uint16","nodeType":"ElementaryTypeName","src":"4685:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"4616:92:112"},"returnParameters":{"id":25382,"nodeType":"ParameterList","parameters":[],"src":"4733:0:112"},"scope":26587,"src":"4601:405:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4678],"body":{"id":25456,"nodeType":"Block","src":"5259:429:112","statements":[{"expression":{"arguments":[{"expression":{"id":25426,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5303:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5303:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":25430,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5329:4:112","typeDescriptions":{"typeIdentifier":"t_contract$_Pool_$26587","typeString":"contract Pool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Pool_$26587","typeString":"contract Pool"}],"id":25429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5321:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25428,"name":"address","nodeType":"ElementaryTypeName","src":"5321:7:112","typeDescriptions":{}}},"id":25431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5321:13:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25432,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25406,"src":"5342:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25433,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25412,"src":"5356:8:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25434,"name":"permitV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25414,"src":"5372:7:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25435,"name":"permitR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25416,"src":"5387:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":25436,"name":"permitS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25418,"src":"5402:7:112","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":[{"id":25423,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25404,"src":"5282:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25422,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4252,"src":"5265:16:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20WithPermit_$4252_$","typeString":"type(contract IERC20WithPermit)"}},"id":25424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5265:23:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4252","typeString":"contract IERC20WithPermit"}},"id":25425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":4251,"src":"5265:30:112","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":25437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5265:150:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25438,"nodeType":"ExpressionStatement","src":"5265:150:112"},{"expression":{"arguments":[{"id":25442,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"5454:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25443,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"5471:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":25444,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"5492:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25446,"indexExpression":{"id":25445,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25408,"src":"5505:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5492:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":25449,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25404,"src":"5571:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25450,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25406,"src":"5594:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25451,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25408,"src":"5622:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25452,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25410,"src":"5656:12:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":25447,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"5524:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteSupplyParams","nodeType":"MemberAccess","referencedDeclaration":24001,"src":"5524:29:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteSupplyParams_$24001_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteSupplyParams storage pointer)"}},"id":25453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","onBehalfOf","referralCode"],"nodeType":"FunctionCall","src":"5524:153:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}],"expression":{"id":25439,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21684,"src":"5421:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$21684_$","typeString":"type(library SupplyLogic)"}},"id":25441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSupply","nodeType":"MemberAccess","referencedDeclaration":21194,"src":"5421:25:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteSupplyParams_$24001_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteSupplyParams memory)"}},"id":25454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5421:262:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25455,"nodeType":"ExpressionStatement","src":"5421:262:112"}]},"documentation":{"id":25402,"nodeType":"StructuredDocumentation","src":"5010:21:112","text":"@inheritdoc IPool"},"functionSelector":"02c205f0","id":25457,"implemented":true,"kind":"function","modifiers":[],"name":"supplyWithPermit","nameLocation":"5043:16:112","nodeType":"FunctionDefinition","overrides":{"id":25420,"nodeType":"OverrideSpecifier","overrides":[],"src":"5250:8:112"},"parameters":{"id":25419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25404,"mutability":"mutable","name":"asset","nameLocation":"5073:5:112","nodeType":"VariableDeclaration","scope":25457,"src":"5065:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25403,"name":"address","nodeType":"ElementaryTypeName","src":"5065:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25406,"mutability":"mutable","name":"amount","nameLocation":"5092:6:112","nodeType":"VariableDeclaration","scope":25457,"src":"5084:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25405,"name":"uint256","nodeType":"ElementaryTypeName","src":"5084:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25408,"mutability":"mutable","name":"onBehalfOf","nameLocation":"5112:10:112","nodeType":"VariableDeclaration","scope":25457,"src":"5104:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25407,"name":"address","nodeType":"ElementaryTypeName","src":"5104:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25410,"mutability":"mutable","name":"referralCode","nameLocation":"5135:12:112","nodeType":"VariableDeclaration","scope":25457,"src":"5128:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":25409,"name":"uint16","nodeType":"ElementaryTypeName","src":"5128:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":25412,"mutability":"mutable","name":"deadline","nameLocation":"5161:8:112","nodeType":"VariableDeclaration","scope":25457,"src":"5153:16:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25411,"name":"uint256","nodeType":"ElementaryTypeName","src":"5153:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25414,"mutability":"mutable","name":"permitV","nameLocation":"5181:7:112","nodeType":"VariableDeclaration","scope":25457,"src":"5175:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25413,"name":"uint8","nodeType":"ElementaryTypeName","src":"5175:5:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25416,"mutability":"mutable","name":"permitR","nameLocation":"5202:7:112","nodeType":"VariableDeclaration","scope":25457,"src":"5194:15:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25415,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5194:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":25418,"mutability":"mutable","name":"permitS","nameLocation":"5223:7:112","nodeType":"VariableDeclaration","scope":25457,"src":"5215:15:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25417,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5215:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5059:175:112"},"returnParameters":{"id":25421,"nodeType":"ParameterList","parameters":[],"src":"5259:0:112"},"scope":26587,"src":"5034:654:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4690],"body":{"id":25495,"nodeType":"Block","src":"5835:440:112","statements":[{"expression":{"arguments":[{"id":25472,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"5891:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25473,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"5910:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25474,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"5933:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":25475,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"5959:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25478,"indexExpression":{"expression":{"id":25476,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5972:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5972:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5959:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":25481,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25460,"src":"6044:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25482,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25462,"src":"6069:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25483,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25464,"src":"6091:2:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25484,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"6120:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25485,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"6154:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5227,"src":"6154:33:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6154:35:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":25488,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"6220:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25491,"indexExpression":{"expression":{"id":25489,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6240:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6240:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6220:31:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":25479,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"5993:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteWithdrawParams","nodeType":"MemberAccess","referencedDeclaration":24052,"src":"5993:31:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteWithdrawParams_$24052_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteWithdrawParams storage pointer)"}},"id":25492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","to","reservesCount","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"5993:269:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$24052_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}],"expression":{"id":25470,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21684,"src":"5854:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$21684_$","typeString":"type(library SupplyLogic)"}},"id":25471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeWithdraw","nodeType":"MemberAccess","referencedDeclaration":21380,"src":"5854:27:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr_$returns$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteWithdrawParams memory) returns (uint256)"}},"id":25493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5854:416:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25469,"id":25494,"nodeType":"Return","src":"5841:429:112"}]},"documentation":{"id":25458,"nodeType":"StructuredDocumentation","src":"5692:21:112","text":"@inheritdoc IPool"},"functionSelector":"69328dec","id":25496,"implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"5725:8:112","nodeType":"FunctionDefinition","overrides":{"id":25466,"nodeType":"OverrideSpecifier","overrides":[],"src":"5808:8:112"},"parameters":{"id":25465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25460,"mutability":"mutable","name":"asset","nameLocation":"5747:5:112","nodeType":"VariableDeclaration","scope":25496,"src":"5739:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25459,"name":"address","nodeType":"ElementaryTypeName","src":"5739:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25462,"mutability":"mutable","name":"amount","nameLocation":"5766:6:112","nodeType":"VariableDeclaration","scope":25496,"src":"5758:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25461,"name":"uint256","nodeType":"ElementaryTypeName","src":"5758:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25464,"mutability":"mutable","name":"to","nameLocation":"5786:2:112","nodeType":"VariableDeclaration","scope":25496,"src":"5778:10:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25463,"name":"address","nodeType":"ElementaryTypeName","src":"5778:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5733:59:112"},"returnParameters":{"id":25469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25468,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25496,"src":"5826:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25467,"name":"uint256","nodeType":"ElementaryTypeName","src":"5826:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5825:9:112"},"scope":26587,"src":"5716:559:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4704],"body":{"id":25547,"nodeType":"Block","src":"6465:727:112","statements":[{"expression":{"arguments":[{"id":25514,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"6504:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25515,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"6521:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25516,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"6542:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":25517,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"6566:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25519,"indexExpression":{"id":25518,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25507,"src":"6579:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6566:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":25522,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25499,"src":"6645:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":25523,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6666:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6666:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25525,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25507,"src":"6698:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25526,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25501,"src":"6726:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":25529,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25503,"src":"6787:16:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25527,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"6760:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"6760:26:112","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":25530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6760:44:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"id":25531,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25505,"src":"6828:12:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":25532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6869:4:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":25533,"name":"_maxStableRateBorrowSizePercent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28283,"src":"6915:31:112","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":25534,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"6971:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25535,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"7003:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5227,"src":"7003:33:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7003:35:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":25538,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"7067:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25540,"indexExpression":{"id":25539,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25507,"src":"7087:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7067:31:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25541,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"7129:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":5263,"src":"7129:41:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7129:43:112","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"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25520,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"6598:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteBorrowParams","nodeType":"MemberAccess","referencedDeclaration":24027,"src":"6598:29:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteBorrowParams_$24027_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteBorrowParams storage pointer)"}},"id":25544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","user","onBehalfOf","amount","interestRateMode","referralCode","releaseUnderlying","maxStableRateBorrowSizePercent","reservesCount","oracle","userEModeCategory","priceOracleSentinel"],"nodeType":"FunctionCall","src":"6598:583:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$24027_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}],"expression":{"id":25511,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15720,"src":"6471:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$15720_$","typeString":"type(library BorrowLogic)"}},"id":25513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeBorrow","nodeType":"MemberAccess","referencedDeclaration":15216,"src":"6471:25:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteBorrowParams_$24027_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteBorrowParams memory)"}},"id":25545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6471:716:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25546,"nodeType":"ExpressionStatement","src":"6471:716:112"}]},"documentation":{"id":25497,"nodeType":"StructuredDocumentation","src":"6279:21:112","text":"@inheritdoc IPool"},"functionSelector":"a415bcad","id":25548,"implemented":true,"kind":"function","modifiers":[],"name":"borrow","nameLocation":"6312:6:112","nodeType":"FunctionDefinition","overrides":{"id":25509,"nodeType":"OverrideSpecifier","overrides":[],"src":"6456:8:112"},"parameters":{"id":25508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25499,"mutability":"mutable","name":"asset","nameLocation":"6332:5:112","nodeType":"VariableDeclaration","scope":25548,"src":"6324:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25498,"name":"address","nodeType":"ElementaryTypeName","src":"6324:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25501,"mutability":"mutable","name":"amount","nameLocation":"6351:6:112","nodeType":"VariableDeclaration","scope":25548,"src":"6343:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25500,"name":"uint256","nodeType":"ElementaryTypeName","src":"6343:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25503,"mutability":"mutable","name":"interestRateMode","nameLocation":"6371:16:112","nodeType":"VariableDeclaration","scope":25548,"src":"6363:24:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25502,"name":"uint256","nodeType":"ElementaryTypeName","src":"6363:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25505,"mutability":"mutable","name":"referralCode","nameLocation":"6400:12:112","nodeType":"VariableDeclaration","scope":25548,"src":"6393:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":25504,"name":"uint16","nodeType":"ElementaryTypeName","src":"6393:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":25507,"mutability":"mutable","name":"onBehalfOf","nameLocation":"6426:10:112","nodeType":"VariableDeclaration","scope":25548,"src":"6418:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25506,"name":"address","nodeType":"ElementaryTypeName","src":"6418:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6318:122:112"},"returnParameters":{"id":25510,"nodeType":"ParameterList","parameters":[],"src":"6465:0:112"},"scope":26587,"src":"6303:889:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4718],"body":{"id":25583,"nodeType":"Block","src":"7374:369:112","statements":[{"expression":{"arguments":[{"id":25565,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"7427:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25566,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"7446:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":25567,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"7469:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25569,"indexExpression":{"id":25568,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25557,"src":"7482:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7469:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":25572,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25551,"src":"7551:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25573,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25553,"src":"7576:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":25576,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25555,"src":"7639:16:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25574,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"7612:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"7612:26:112","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":25577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7612:44:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"id":25578,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25557,"src":"7680:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":25579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:5:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":25570,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"7503:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteRepayParams","nodeType":"MemberAccess","referencedDeclaration":24039,"src":"7503:28:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteRepayParams_$24039_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteRepayParams storage pointer)"}},"id":25580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","interestRateMode","onBehalfOf","useATokens"],"nodeType":"FunctionCall","src":"7503:227:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}],"expression":{"id":25563,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15720,"src":"7393:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$15720_$","typeString":"type(library BorrowLogic)"}},"id":25564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRepay","nodeType":"MemberAccess","referencedDeclaration":15477,"src":"7393:24:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteRepayParams_$24039_memory_ptr_$returns$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteRepayParams memory) returns (uint256)"}},"id":25581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7393:345:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25562,"id":25582,"nodeType":"Return","src":"7380:358:112"}]},"documentation":{"id":25549,"nodeType":"StructuredDocumentation","src":"7196:21:112","text":"@inheritdoc IPool"},"functionSelector":"573ade81","id":25584,"implemented":true,"kind":"function","modifiers":[],"name":"repay","nameLocation":"7229:5:112","nodeType":"FunctionDefinition","overrides":{"id":25559,"nodeType":"OverrideSpecifier","overrides":[],"src":"7347:8:112"},"parameters":{"id":25558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25551,"mutability":"mutable","name":"asset","nameLocation":"7248:5:112","nodeType":"VariableDeclaration","scope":25584,"src":"7240:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25550,"name":"address","nodeType":"ElementaryTypeName","src":"7240:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25553,"mutability":"mutable","name":"amount","nameLocation":"7267:6:112","nodeType":"VariableDeclaration","scope":25584,"src":"7259:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25552,"name":"uint256","nodeType":"ElementaryTypeName","src":"7259:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25555,"mutability":"mutable","name":"interestRateMode","nameLocation":"7287:16:112","nodeType":"VariableDeclaration","scope":25584,"src":"7279:24:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25554,"name":"uint256","nodeType":"ElementaryTypeName","src":"7279:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25557,"mutability":"mutable","name":"onBehalfOf","nameLocation":"7317:10:112","nodeType":"VariableDeclaration","scope":25584,"src":"7309:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25556,"name":"address","nodeType":"ElementaryTypeName","src":"7309:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7234:97:112"},"returnParameters":{"id":25562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25584,"src":"7365:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25560,"name":"uint256","nodeType":"ElementaryTypeName","src":"7365:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7364:9:112"},"scope":26587,"src":"7220:523:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4740],"body":{"id":25653,"nodeType":"Block","src":"8018:570:112","statements":[{"id":25624,"nodeType":"Block","src":"8024:181:112","statements":[{"expression":{"arguments":[{"expression":{"id":25611,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8072:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8072:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":25615,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8100:4:112","typeDescriptions":{"typeIdentifier":"t_contract$_Pool_$26587","typeString":"contract Pool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Pool_$26587","typeString":"contract Pool"}],"id":25614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8092:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25613,"name":"address","nodeType":"ElementaryTypeName","src":"8092:7:112","typeDescriptions":{}}},"id":25616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8092:13:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25617,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25589,"src":"8115:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25618,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25595,"src":"8131:8:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25619,"name":"permitV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25597,"src":"8149:7:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25620,"name":"permitR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25599,"src":"8166:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":25621,"name":"permitS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25601,"src":"8183:7:112","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":[{"id":25608,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25587,"src":"8049:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25607,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4252,"src":"8032:16:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20WithPermit_$4252_$","typeString":"type(contract IERC20WithPermit)"}},"id":25609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8032:23:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4252","typeString":"contract IERC20WithPermit"}},"id":25610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":4251,"src":"8032:30:112","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":25622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8032:166:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25623,"nodeType":"ExpressionStatement","src":"8032:166:112"}]},{"id":25652,"nodeType":"Block","src":"8210:374:112","statements":[{"assignments":[25629],"declarations":[{"constant":false,"id":25629,"mutability":"mutable","name":"params","nameLocation":"8254:6:112","nodeType":"VariableDeclaration","scope":25652,"src":"8218:42:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams"},"typeName":{"id":25628,"nodeType":"UserDefinedTypeName","pathNode":{"id":25627,"name":"DataTypes.ExecuteRepayParams","nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"8218:28:112"},"referencedDeclaration":24039,"src":"8218:28:112","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_storage_ptr","typeString":"struct DataTypes.ExecuteRepayParams"}},"visibility":"internal"}],"id":25641,"initialValue":{"arguments":[{"id":25632,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25587,"src":"8309:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25633,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25589,"src":"8332:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":25636,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25591,"src":"8393:16:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25634,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"8366:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"8366:26:112","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":25637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8366:44:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"id":25638,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25593,"src":"8432:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":25639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8464:5:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":25630,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"8263:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteRepayParams","nodeType":"MemberAccess","referencedDeclaration":24039,"src":"8263:28:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteRepayParams_$24039_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteRepayParams storage pointer)"}},"id":25640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","interestRateMode","onBehalfOf","useATokens"],"nodeType":"FunctionCall","src":"8263:215:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"nodeType":"VariableDeclarationStatement","src":"8218:260:112"},{"expression":{"arguments":[{"id":25644,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"8518:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25645,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"8529:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":25646,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"8544:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25648,"indexExpression":{"id":25647,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25593,"src":"8557:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8544:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":25649,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25629,"src":"8570:6:112","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}],"expression":{"id":25642,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15720,"src":"8493:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$15720_$","typeString":"type(library BorrowLogic)"}},"id":25643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRepay","nodeType":"MemberAccess","referencedDeclaration":15477,"src":"8493:24:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteRepayParams_$24039_memory_ptr_$returns$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteRepayParams memory) returns (uint256)"}},"id":25650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8493:84:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25606,"id":25651,"nodeType":"Return","src":"8486:91:112"}]}]},"documentation":{"id":25585,"nodeType":"StructuredDocumentation","src":"7747:21:112","text":"@inheritdoc IPool"},"functionSelector":"ee3e210b","id":25654,"implemented":true,"kind":"function","modifiers":[],"name":"repayWithPermit","nameLocation":"7780:15:112","nodeType":"FunctionDefinition","overrides":{"id":25603,"nodeType":"OverrideSpecifier","overrides":[],"src":"7991:8:112"},"parameters":{"id":25602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25587,"mutability":"mutable","name":"asset","nameLocation":"7809:5:112","nodeType":"VariableDeclaration","scope":25654,"src":"7801:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25586,"name":"address","nodeType":"ElementaryTypeName","src":"7801:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25589,"mutability":"mutable","name":"amount","nameLocation":"7828:6:112","nodeType":"VariableDeclaration","scope":25654,"src":"7820:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25588,"name":"uint256","nodeType":"ElementaryTypeName","src":"7820:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25591,"mutability":"mutable","name":"interestRateMode","nameLocation":"7848:16:112","nodeType":"VariableDeclaration","scope":25654,"src":"7840:24:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25590,"name":"uint256","nodeType":"ElementaryTypeName","src":"7840:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25593,"mutability":"mutable","name":"onBehalfOf","nameLocation":"7878:10:112","nodeType":"VariableDeclaration","scope":25654,"src":"7870:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25592,"name":"address","nodeType":"ElementaryTypeName","src":"7870:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25595,"mutability":"mutable","name":"deadline","nameLocation":"7902:8:112","nodeType":"VariableDeclaration","scope":25654,"src":"7894:16:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25594,"name":"uint256","nodeType":"ElementaryTypeName","src":"7894:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25597,"mutability":"mutable","name":"permitV","nameLocation":"7922:7:112","nodeType":"VariableDeclaration","scope":25654,"src":"7916:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25596,"name":"uint8","nodeType":"ElementaryTypeName","src":"7916:5:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25599,"mutability":"mutable","name":"permitR","nameLocation":"7943:7:112","nodeType":"VariableDeclaration","scope":25654,"src":"7935:15:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25598,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7935:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":25601,"mutability":"mutable","name":"permitS","nameLocation":"7964:7:112","nodeType":"VariableDeclaration","scope":25654,"src":"7956:15:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25600,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7956:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7795:180:112"},"returnParameters":{"id":25606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25605,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25654,"src":"8009:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25604,"name":"uint256","nodeType":"ElementaryTypeName","src":"8009:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8008:9:112"},"scope":26587,"src":"7771:817:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4752],"body":{"id":25689,"nodeType":"Block","src":"8757:368:112","statements":[{"expression":{"arguments":[{"id":25669,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"8810:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25670,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"8829:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":25671,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"8852:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25674,"indexExpression":{"expression":{"id":25672,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8865:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8865:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8852:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":25677,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25657,"src":"8934:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25678,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25659,"src":"8959:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":25681,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25661,"src":"9022:16:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25679,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"8995:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"8995:26:112","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":25682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8995:44:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":25683,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9063:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9063:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":25685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9097:4:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":25675,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"8886:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteRepayParams","nodeType":"MemberAccess","referencedDeclaration":24039,"src":"8886:28:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteRepayParams_$24039_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteRepayParams storage pointer)"}},"id":25686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","interestRateMode","onBehalfOf","useATokens"],"nodeType":"FunctionCall","src":"8886:226:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteRepayParams_$24039_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}],"expression":{"id":25667,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15720,"src":"8776:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$15720_$","typeString":"type(library BorrowLogic)"}},"id":25668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRepay","nodeType":"MemberAccess","referencedDeclaration":15477,"src":"8776:24:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteRepayParams_$24039_memory_ptr_$returns$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteRepayParams memory) returns (uint256)"}},"id":25687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8776:344:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25666,"id":25688,"nodeType":"Return","src":"8763:357:112"}]},"documentation":{"id":25655,"nodeType":"StructuredDocumentation","src":"8592:21:112","text":"@inheritdoc IPool"},"functionSelector":"2dad97d4","id":25690,"implemented":true,"kind":"function","modifiers":[],"name":"repayWithATokens","nameLocation":"8625:16:112","nodeType":"FunctionDefinition","overrides":{"id":25663,"nodeType":"OverrideSpecifier","overrides":[],"src":"8730:8:112"},"parameters":{"id":25662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25657,"mutability":"mutable","name":"asset","nameLocation":"8655:5:112","nodeType":"VariableDeclaration","scope":25690,"src":"8647:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25656,"name":"address","nodeType":"ElementaryTypeName","src":"8647:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25659,"mutability":"mutable","name":"amount","nameLocation":"8674:6:112","nodeType":"VariableDeclaration","scope":25690,"src":"8666:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25658,"name":"uint256","nodeType":"ElementaryTypeName","src":"8666:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25661,"mutability":"mutable","name":"interestRateMode","nameLocation":"8694:16:112","nodeType":"VariableDeclaration","scope":25690,"src":"8686:24:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25660,"name":"uint256","nodeType":"ElementaryTypeName","src":"8686:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8641:73:112"},"returnParameters":{"id":25666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25690,"src":"8748:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25664,"name":"uint256","nodeType":"ElementaryTypeName","src":"8748:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8747:9:112"},"scope":26587,"src":"8616:509:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4760],"body":{"id":25716,"nodeType":"Block","src":"9246:175:112","statements":[{"expression":{"arguments":[{"baseExpression":{"id":25702,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"9297:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":25704,"indexExpression":{"id":25703,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25693,"src":"9307:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9297:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"baseExpression":{"id":25705,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"9321:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25708,"indexExpression":{"expression":{"id":25706,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9334:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9334:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9321:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":25709,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25693,"src":"9353:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":25712,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25695,"src":"9393:16:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25710,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"9366:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":23931,"src":"9366:26:112","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$23931_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":25713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9366:44:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_InterestRateMode_$23931","typeString":"enum DataTypes.InterestRateMode"}],"expression":{"id":25699,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15720,"src":"9252:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$15720_$","typeString":"type(library BorrowLogic)"}},"id":25701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSwapBorrowRateMode","nodeType":"MemberAccess","referencedDeclaration":15719,"src":"9252:37:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_address_$_t_enum$_InterestRateMode_$23931_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.UserConfigurationMap storage pointer,address,enum DataTypes.InterestRateMode)"}},"id":25714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9252:164:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25715,"nodeType":"ExpressionStatement","src":"9252:164:112"}]},"documentation":{"id":25691,"nodeType":"StructuredDocumentation","src":"9129:21:112","text":"@inheritdoc IPool"},"functionSelector":"94ba89a2","id":25717,"implemented":true,"kind":"function","modifiers":[],"name":"swapBorrowRateMode","nameLocation":"9162:18:112","nodeType":"FunctionDefinition","overrides":{"id":25697,"nodeType":"OverrideSpecifier","overrides":[],"src":"9237:8:112"},"parameters":{"id":25696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25693,"mutability":"mutable","name":"asset","nameLocation":"9189:5:112","nodeType":"VariableDeclaration","scope":25717,"src":"9181:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25692,"name":"address","nodeType":"ElementaryTypeName","src":"9181:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25695,"mutability":"mutable","name":"interestRateMode","nameLocation":"9204:16:112","nodeType":"VariableDeclaration","scope":25717,"src":"9196:24:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25694,"name":"uint256","nodeType":"ElementaryTypeName","src":"9196:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9180:41:112"},"returnParameters":{"id":25698,"nodeType":"ParameterList","parameters":[],"src":"9246:0:112"},"scope":26587,"src":"9153:268:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4768],"body":{"id":25736,"nodeType":"Block","src":"9537:86:112","statements":[{"expression":{"arguments":[{"baseExpression":{"id":25729,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"9588:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":25731,"indexExpression":{"id":25730,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25720,"src":"9598:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9588:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"id":25732,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25720,"src":"9606:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25733,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25722,"src":"9613:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25726,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15720,"src":"9543:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$15720_$","typeString":"type(library BorrowLogic)"}},"id":25728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRebalanceStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":15569,"src":"9543:44:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_address_$_t_address_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,address,address)"}},"id":25734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9543:75:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25735,"nodeType":"ExpressionStatement","src":"9543:75:112"}]},"documentation":{"id":25718,"nodeType":"StructuredDocumentation","src":"9425:21:112","text":"@inheritdoc IPool"},"functionSelector":"cd112382","id":25737,"implemented":true,"kind":"function","modifiers":[],"name":"rebalanceStableBorrowRate","nameLocation":"9458:25:112","nodeType":"FunctionDefinition","overrides":{"id":25724,"nodeType":"OverrideSpecifier","overrides":[],"src":"9528:8:112"},"parameters":{"id":25723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25720,"mutability":"mutable","name":"asset","nameLocation":"9492:5:112","nodeType":"VariableDeclaration","scope":25737,"src":"9484:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25719,"name":"address","nodeType":"ElementaryTypeName","src":"9484:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25722,"mutability":"mutable","name":"user","nameLocation":"9507:4:112","nodeType":"VariableDeclaration","scope":25737,"src":"9499:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25721,"name":"address","nodeType":"ElementaryTypeName","src":"9499:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9483:29:112"},"returnParameters":{"id":25725,"nodeType":"ParameterList","parameters":[],"src":"9537:0:112"},"scope":26587,"src":"9449:174:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4776],"body":{"id":25768,"nodeType":"Block","src":"9763:292:112","statements":[{"expression":{"arguments":[{"id":25749,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"9818:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25750,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"9835:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25751,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"9856:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":25752,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"9880:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25755,"indexExpression":{"expression":{"id":25753,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9893:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9893:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9880:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":25756,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25740,"src":"9912:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25757,"name":"useAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25742,"src":"9925:15:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":25758,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"9948:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25759,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"9970:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5227,"src":"9970:33:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9970:35:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":25762,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"10013:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25765,"indexExpression":{"expression":{"id":25763,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10033:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"10033:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10013:31:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":25746,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21684,"src":"9769:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$21684_$","typeString":"type(library SupplyLogic)"}},"id":25748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeUseReserveAsCollateral","nodeType":"MemberAccess","referencedDeclaration":21683,"src":"9769:41:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_address_$_t_bool_$_t_uint256_$_t_address_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,address,bool,uint256,address,uint8)"}},"id":25766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9769:281:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25767,"nodeType":"ExpressionStatement","src":"9769:281:112"}]},"documentation":{"id":25738,"nodeType":"StructuredDocumentation","src":"9627:21:112","text":"@inheritdoc IPool"},"functionSelector":"5a3b74b9","id":25769,"implemented":true,"kind":"function","modifiers":[],"name":"setUserUseReserveAsCollateral","nameLocation":"9660:29:112","nodeType":"FunctionDefinition","overrides":{"id":25744,"nodeType":"OverrideSpecifier","overrides":[],"src":"9754:8:112"},"parameters":{"id":25743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25740,"mutability":"mutable","name":"asset","nameLocation":"9703:5:112","nodeType":"VariableDeclaration","scope":25769,"src":"9695:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25739,"name":"address","nodeType":"ElementaryTypeName","src":"9695:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25742,"mutability":"mutable","name":"useAsCollateral","nameLocation":"9719:15:112","nodeType":"VariableDeclaration","scope":25769,"src":"9714:20:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25741,"name":"bool","nodeType":"ElementaryTypeName","src":"9714:4:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9689:49:112"},"returnParameters":{"id":25745,"nodeType":"ParameterList","parameters":[],"src":"9763:0:112"},"scope":26587,"src":"9651:404:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4790],"body":{"id":25811,"nodeType":"Block","src":"10255:583:112","statements":[{"expression":{"arguments":[{"id":25787,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"10308:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25788,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"10325:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25789,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"10346:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},{"id":25790,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"10366:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"id":25793,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"10454:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":25794,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25778,"src":"10491:11:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25795,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25772,"src":"10529:15:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25796,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25774,"src":"10565:9:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25797,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25776,"src":"10590:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25798,"name":"receiveAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25780,"src":"10619:13:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25799,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"10655:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5227,"src":"10655:33:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10655:35:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":25802,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"10719:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25804,"indexExpression":{"id":25803,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25776,"src":"10739:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10719:25:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25805,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"10775:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":5263,"src":"10775:41:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10775:43:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25791,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"10390:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteLiquidationCallParams","nodeType":"MemberAccess","referencedDeclaration":23992,"src":"10390:38:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteLiquidationCallParams_$23992_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteLiquidationCallParams storage pointer)"}},"id":25808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["reservesCount","debtToCover","collateralAsset","debtAsset","user","receiveAToken","priceOracle","userEModeCategory","priceOracleSentinel"],"nodeType":"FunctionCall","src":"10390:437:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}],"expression":{"id":25784,"name":"LiquidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19765,"src":"10261:16:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LiquidationLogic_$19765_$","typeString":"type(library LiquidationLogic)"}},"id":25786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeLiquidationCall","nodeType":"MemberAccess","referencedDeclaration":19086,"src":"10261:39:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(address => struct DataTypes.UserConfigurationMap storage ref),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ExecuteLiquidationCallParams memory)"}},"id":25809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10261:572:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25810,"nodeType":"ExpressionStatement","src":"10261:572:112"}]},"documentation":{"id":25770,"nodeType":"StructuredDocumentation","src":"10059:21:112","text":"@inheritdoc IPool"},"functionSelector":"00a718a9","id":25812,"implemented":true,"kind":"function","modifiers":[],"name":"liquidationCall","nameLocation":"10092:15:112","nodeType":"FunctionDefinition","overrides":{"id":25782,"nodeType":"OverrideSpecifier","overrides":[],"src":"10246:8:112"},"parameters":{"id":25781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25772,"mutability":"mutable","name":"collateralAsset","nameLocation":"10121:15:112","nodeType":"VariableDeclaration","scope":25812,"src":"10113:23:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25771,"name":"address","nodeType":"ElementaryTypeName","src":"10113:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25774,"mutability":"mutable","name":"debtAsset","nameLocation":"10150:9:112","nodeType":"VariableDeclaration","scope":25812,"src":"10142:17:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25773,"name":"address","nodeType":"ElementaryTypeName","src":"10142:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25776,"mutability":"mutable","name":"user","nameLocation":"10173:4:112","nodeType":"VariableDeclaration","scope":25812,"src":"10165:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25775,"name":"address","nodeType":"ElementaryTypeName","src":"10165:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25778,"mutability":"mutable","name":"debtToCover","nameLocation":"10191:11:112","nodeType":"VariableDeclaration","scope":25812,"src":"10183:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25777,"name":"uint256","nodeType":"ElementaryTypeName","src":"10183:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25780,"mutability":"mutable","name":"receiveAToken","nameLocation":"10213:13:112","nodeType":"VariableDeclaration","scope":25812,"src":"10208:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25779,"name":"bool","nodeType":"ElementaryTypeName","src":"10208:4:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10107:123:112"},"returnParameters":{"id":25783,"nodeType":"ParameterList","parameters":[],"src":"10255:0:112"},"scope":26587,"src":"10083:755:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4811],"body":{"id":25882,"nodeType":"Block","src":"11123:926:112","statements":[{"assignments":[25838],"declarations":[{"constant":false,"id":25838,"mutability":"mutable","name":"flashParams","nameLocation":"11162:11:112","nodeType":"VariableDeclaration","scope":25882,"src":"11129:44:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams"},"typeName":{"id":25837,"nodeType":"UserDefinedTypeName","pathNode":{"id":25836,"name":"DataTypes.FlashloanParams","nodeType":"IdentifierPath","referencedDeclaration":24110,"src":"11129:25:112"},"referencedDeclaration":24110,"src":"11129:25:112","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_storage_ptr","typeString":"struct DataTypes.FlashloanParams"}},"visibility":"internal"}],"id":25869,"initialValue":{"arguments":[{"id":25841,"name":"receiverAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25815,"src":"11227:15:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25842,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25818,"src":"11258:6:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":25843,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25821,"src":"11281:7:112","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":25844,"name":"interestRateModes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25824,"src":"11315:17:112","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":25845,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25826,"src":"11352:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25846,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25828,"src":"11378:6:112","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":25847,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25830,"src":"11406:12:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":25848,"name":"_flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28281,"src":"11454:27:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":25849,"name":"_flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28279,"src":"11512:22:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":25850,"name":"_maxStableRateBorrowSizePercent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28283,"src":"11574:31:112","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":25851,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"11628:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[{"id":25854,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"11677:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}],"id":25853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11669:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25852,"name":"address","nodeType":"ElementaryTypeName","src":"11669:7:112","typeDescriptions":{}}},"id":25855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11669:27:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":25856,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"11723:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25858,"indexExpression":{"id":25857,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25826,"src":"11743:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11723:31:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"expression":{"id":25865,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11862:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11862:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25860,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"11801:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"11801:32:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11801:34:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25859,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"11789:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":25863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11789:47:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":25864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isFlashBorrower","nodeType":"MemberAccess","referencedDeclaration":3802,"src":"11789:63:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11789:91:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":25839,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"11176:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FlashloanParams","nodeType":"MemberAccess","referencedDeclaration":24110,"src":"11176:25:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FlashloanParams_$24110_storage_ptr_$","typeString":"type(struct DataTypes.FlashloanParams storage pointer)"}},"id":25868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["receiverAddress","assets","amounts","interestRateModes","onBehalfOf","params","referralCode","flashLoanPremiumToProtocol","flashLoanPremiumTotal","maxStableRateBorrowSizePercent","reservesCount","addressesProvider","userEModeCategory","isAuthorizedFlashBorrower"],"nodeType":"FunctionCall","src":"11176:711:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"nodeType":"VariableDeclarationStatement","src":"11129:758:112"},{"expression":{"arguments":[{"id":25873,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"11933:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25874,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"11950:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25875,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"11971:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":25876,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"11995:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25878,"indexExpression":{"id":25877,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25826,"src":"12008:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11995:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":25879,"name":"flashParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25838,"src":"12027:11:112","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_FlashloanParams_$24110_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}],"expression":{"id":25870,"name":"FlashLoanLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17844,"src":"11894:14:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FlashLoanLogic_$17844_$","typeString":"type(library FlashLoanLogic)"}},"id":25872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeFlashLoan","nodeType":"MemberAccess","referencedDeclaration":17623,"src":"11894:31:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_FlashloanParams_$24110_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.FlashloanParams memory)"}},"id":25880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11894:150:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25881,"nodeType":"ExpressionStatement","src":"11894:150:112"}]},"documentation":{"id":25813,"nodeType":"StructuredDocumentation","src":"10842:21:112","text":"@inheritdoc IPool"},"functionSelector":"ab9c4b5d","id":25883,"implemented":true,"kind":"function","modifiers":[],"name":"flashLoan","nameLocation":"10875:9:112","nodeType":"FunctionDefinition","overrides":{"id":25832,"nodeType":"OverrideSpecifier","overrides":[],"src":"11114:8:112"},"parameters":{"id":25831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25815,"mutability":"mutable","name":"receiverAddress","nameLocation":"10898:15:112","nodeType":"VariableDeclaration","scope":25883,"src":"10890:23:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25814,"name":"address","nodeType":"ElementaryTypeName","src":"10890:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25818,"mutability":"mutable","name":"assets","nameLocation":"10938:6:112","nodeType":"VariableDeclaration","scope":25883,"src":"10919:25:112","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":25816,"name":"address","nodeType":"ElementaryTypeName","src":"10919:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":25817,"nodeType":"ArrayTypeName","src":"10919:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":25821,"mutability":"mutable","name":"amounts","nameLocation":"10969:7:112","nodeType":"VariableDeclaration","scope":25883,"src":"10950:26:112","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25819,"name":"uint256","nodeType":"ElementaryTypeName","src":"10950:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25820,"nodeType":"ArrayTypeName","src":"10950:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":25824,"mutability":"mutable","name":"interestRateModes","nameLocation":"11001:17:112","nodeType":"VariableDeclaration","scope":25883,"src":"10982:36:112","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25822,"name":"uint256","nodeType":"ElementaryTypeName","src":"10982:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25823,"nodeType":"ArrayTypeName","src":"10982:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":25826,"mutability":"mutable","name":"onBehalfOf","nameLocation":"11032:10:112","nodeType":"VariableDeclaration","scope":25883,"src":"11024:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25825,"name":"address","nodeType":"ElementaryTypeName","src":"11024:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25828,"mutability":"mutable","name":"params","nameLocation":"11063:6:112","nodeType":"VariableDeclaration","scope":25883,"src":"11048:21:112","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":25827,"name":"bytes","nodeType":"ElementaryTypeName","src":"11048:5:112","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":25830,"mutability":"mutable","name":"referralCode","nameLocation":"11082:12:112","nodeType":"VariableDeclaration","scope":25883,"src":"11075:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":25829,"name":"uint16","nodeType":"ElementaryTypeName","src":"11075:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"10884:214:112"},"returnParameters":{"id":25833,"nodeType":"ParameterList","parameters":[],"src":"11123:0:112"},"scope":26587,"src":"10866:1183:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4825],"body":{"id":25923,"nodeType":"Block","src":"12250:431:112","statements":[{"assignments":[25902],"declarations":[{"constant":false,"id":25902,"mutability":"mutable","name":"flashParams","nameLocation":"12295:11:112","nodeType":"VariableDeclaration","scope":25923,"src":"12256:50:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams"},"typeName":{"id":25901,"nodeType":"UserDefinedTypeName","pathNode":{"id":25900,"name":"DataTypes.FlashloanSimpleParams","nodeType":"IdentifierPath","referencedDeclaration":24125,"src":"12256:31:112"},"referencedDeclaration":24125,"src":"12256:31:112","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_storage_ptr","typeString":"struct DataTypes.FlashloanSimpleParams"}},"visibility":"internal"}],"id":25913,"initialValue":{"arguments":[{"id":25905,"name":"receiverAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25886,"src":"12366:15:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25906,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25888,"src":"12396:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25907,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"12417:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25908,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25892,"src":"12439:6:112","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":25909,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25894,"src":"12467:12:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":25910,"name":"_flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28281,"src":"12515:27:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":25911,"name":"_flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28279,"src":"12573:22:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":25903,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"12309:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FlashloanSimpleParams","nodeType":"MemberAccess","referencedDeclaration":24125,"src":"12309:31:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FlashloanSimpleParams_$24125_storage_ptr_$","typeString":"type(struct DataTypes.FlashloanSimpleParams storage pointer)"}},"id":25912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["receiverAddress","asset","amount","params","referralCode","flashLoanPremiumToProtocol","flashLoanPremiumTotal"],"nodeType":"FunctionCall","src":"12309:293:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"nodeType":"VariableDeclarationStatement","src":"12256:346:112"},{"expression":{"arguments":[{"baseExpression":{"id":25917,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"12646:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":25919,"indexExpression":{"id":25918,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25888,"src":"12656:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12646:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"id":25920,"name":"flashParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25902,"src":"12664:11:112","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$24125_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}],"expression":{"id":25914,"name":"FlashLoanLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17844,"src":"12608:14:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FlashLoanLogic_$17844_$","typeString":"type(library FlashLoanLogic)"}},"id":25916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeFlashLoanSimple","nodeType":"MemberAccess","referencedDeclaration":17703,"src":"12608:37:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_ReserveData_$23909_storage_ptr_$_t_struct$_FlashloanSimpleParams_$24125_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.FlashloanSimpleParams memory)"}},"id":25921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12608:68:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25922,"nodeType":"ExpressionStatement","src":"12608:68:112"}]},"documentation":{"id":25884,"nodeType":"StructuredDocumentation","src":"12053:21:112","text":"@inheritdoc IPool"},"functionSelector":"42b0b77c","id":25924,"implemented":true,"kind":"function","modifiers":[],"name":"flashLoanSimple","nameLocation":"12086:15:112","nodeType":"FunctionDefinition","overrides":{"id":25896,"nodeType":"OverrideSpecifier","overrides":[],"src":"12241:8:112"},"parameters":{"id":25895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25886,"mutability":"mutable","name":"receiverAddress","nameLocation":"12115:15:112","nodeType":"VariableDeclaration","scope":25924,"src":"12107:23:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25885,"name":"address","nodeType":"ElementaryTypeName","src":"12107:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25888,"mutability":"mutable","name":"asset","nameLocation":"12144:5:112","nodeType":"VariableDeclaration","scope":25924,"src":"12136:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25887,"name":"address","nodeType":"ElementaryTypeName","src":"12136:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25890,"mutability":"mutable","name":"amount","nameLocation":"12163:6:112","nodeType":"VariableDeclaration","scope":25924,"src":"12155:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25889,"name":"uint256","nodeType":"ElementaryTypeName","src":"12155:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25892,"mutability":"mutable","name":"params","nameLocation":"12190:6:112","nodeType":"VariableDeclaration","scope":25924,"src":"12175:21:112","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":25891,"name":"bytes","nodeType":"ElementaryTypeName","src":"12175:5:112","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":25894,"mutability":"mutable","name":"referralCode","nameLocation":"12209:12:112","nodeType":"VariableDeclaration","scope":25924,"src":"12202:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":25893,"name":"uint16","nodeType":"ElementaryTypeName","src":"12202:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"12101:124:112"},"returnParameters":{"id":25897,"nodeType":"ParameterList","parameters":[],"src":"12250:0:112"},"scope":26587,"src":"12077:604:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[5050],"body":{"id":25939,"nodeType":"Block","src":"12786:61:112","statements":[{"expression":{"arguments":[{"id":25935,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"12824:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25936,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25928,"src":"12835:6:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"expression":{"id":25932,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20211,"src":"12792:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$20211_$","typeString":"type(library PoolLogic)"}},"id":25934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeMintToTreasury","nodeType":"MemberAccess","referencedDeclaration":20065,"src":"12792:31:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),address[] memory)"}},"id":25937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12792:50:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25938,"nodeType":"ExpressionStatement","src":"12792:50:112"}]},"documentation":{"id":25925,"nodeType":"StructuredDocumentation","src":"12685:21:112","text":"@inheritdoc IPool"},"functionSelector":"9cd19996","id":25940,"implemented":true,"kind":"function","modifiers":[],"name":"mintToTreasury","nameLocation":"12718:14:112","nodeType":"FunctionDefinition","overrides":{"id":25930,"nodeType":"OverrideSpecifier","overrides":[],"src":"12777:8:112"},"parameters":{"id":25929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25928,"mutability":"mutable","name":"assets","nameLocation":"12752:6:112","nodeType":"VariableDeclaration","scope":25940,"src":"12733:25:112","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":25926,"name":"address","nodeType":"ElementaryTypeName","src":"12733:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":25927,"nodeType":"ArrayTypeName","src":"12733:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"12732:27:112"},"returnParameters":{"id":25931,"nodeType":"ParameterList","parameters":[],"src":"12786:0:112"},"scope":26587,"src":"12709:138:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4923],"body":{"id":25954,"nodeType":"Block","src":"12992:34:112","statements":[{"expression":{"baseExpression":{"id":25950,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"13005:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":25952,"indexExpression":{"id":25951,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25943,"src":"13015:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13005:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"functionReturnParameters":25949,"id":25953,"nodeType":"Return","src":"12998:23:112"}]},"documentation":{"id":25941,"nodeType":"StructuredDocumentation","src":"12851:21:112","text":"@inheritdoc IPool"},"functionSelector":"35ea6a75","id":25955,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveData","nameLocation":"12884:14:112","nodeType":"FunctionDefinition","overrides":{"id":25945,"nodeType":"OverrideSpecifier","overrides":[],"src":"12944:8:112"},"parameters":{"id":25944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25943,"mutability":"mutable","name":"asset","nameLocation":"12912:5:112","nodeType":"VariableDeclaration","scope":25955,"src":"12904:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25942,"name":"address","nodeType":"ElementaryTypeName","src":"12904:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12898:23:112"},"returnParameters":{"id":25949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25955,"src":"12962:28:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":25947,"nodeType":"UserDefinedTypeName","pathNode":{"id":25946,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"12962:21:112"},"referencedDeclaration":23909,"src":"12962:21:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"12961:30:112"},"scope":26587,"src":"12875:151:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4843],"body":{"id":25995,"nodeType":"Block","src":"13362:413:112","statements":[{"expression":{"arguments":[{"id":25976,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"13426:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":25977,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"13445:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":25978,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"13468:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"baseExpression":{"id":25981,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"13559:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":25983,"indexExpression":{"id":25982,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"13572:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13559:18:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":25984,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"13604:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":25985,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"13636:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25986,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"13660:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":25987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5227,"src":"13660:33:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13660:35:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":25989,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"13726:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25991,"indexExpression":{"id":25990,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"13746:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13726:25:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":25979,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"13494:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":25980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateUserAccountDataParams","nodeType":"MemberAccess","referencedDeclaration":24150,"src":"13494:40:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateUserAccountDataParams_$24150_storage_ptr_$","typeString":"type(struct DataTypes.CalculateUserAccountDataParams storage pointer)"}},"id":25992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["userConfig","reservesCount","user","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"13494:268:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":25974,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20211,"src":"13381:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$20211_$","typeString":"type(library PoolLogic)"}},"id":25975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeGetUserAccountData","nodeType":"MemberAccess","referencedDeclaration":20210,"src":"13381:35:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":25993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13381:389:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"functionReturnParameters":25973,"id":25994,"nodeType":"Return","src":"13368:402:112"}]},"documentation":{"id":25956,"nodeType":"StructuredDocumentation","src":"13030:21:112","text":"@inheritdoc IPool"},"functionSelector":"bf92857c","id":25996,"implemented":true,"kind":"function","modifiers":[],"name":"getUserAccountData","nameLocation":"13063:18:112","nodeType":"FunctionDefinition","overrides":{"id":25960,"nodeType":"OverrideSpecifier","overrides":[],"src":"13142:8:112"},"parameters":{"id":25959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25958,"mutability":"mutable","name":"user","nameLocation":"13095:4:112","nodeType":"VariableDeclaration","scope":25996,"src":"13087:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25957,"name":"address","nodeType":"ElementaryTypeName","src":"13087:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13081:22:112"},"returnParameters":{"id":25973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25962,"mutability":"mutable","name":"totalCollateralBase","nameLocation":"13179:19:112","nodeType":"VariableDeclaration","scope":25996,"src":"13171:27:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25961,"name":"uint256","nodeType":"ElementaryTypeName","src":"13171:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25964,"mutability":"mutable","name":"totalDebtBase","nameLocation":"13214:13:112","nodeType":"VariableDeclaration","scope":25996,"src":"13206:21:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25963,"name":"uint256","nodeType":"ElementaryTypeName","src":"13206:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25966,"mutability":"mutable","name":"availableBorrowsBase","nameLocation":"13243:20:112","nodeType":"VariableDeclaration","scope":25996,"src":"13235:28:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25965,"name":"uint256","nodeType":"ElementaryTypeName","src":"13235:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25968,"mutability":"mutable","name":"currentLiquidationThreshold","nameLocation":"13279:27:112","nodeType":"VariableDeclaration","scope":25996,"src":"13271:35:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25967,"name":"uint256","nodeType":"ElementaryTypeName","src":"13271:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25970,"mutability":"mutable","name":"ltv","nameLocation":"13322:3:112","nodeType":"VariableDeclaration","scope":25996,"src":"13314:11:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25969,"name":"uint256","nodeType":"ElementaryTypeName","src":"13314:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25972,"mutability":"mutable","name":"healthFactor","nameLocation":"13341:12:112","nodeType":"VariableDeclaration","scope":25996,"src":"13333:20:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25971,"name":"uint256","nodeType":"ElementaryTypeName","src":"13333:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13163:196:112"},"scope":26587,"src":"13054:721:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4889],"body":{"id":26011,"nodeType":"Block","src":"13934:48:112","statements":[{"expression":{"expression":{"baseExpression":{"id":26006,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"13947:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":26008,"indexExpression":{"id":26007,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25999,"src":"13957:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13947:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":26009,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"13947:30:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"functionReturnParameters":26005,"id":26010,"nodeType":"Return","src":"13940:37:112"}]},"documentation":{"id":25997,"nodeType":"StructuredDocumentation","src":"13779:21:112","text":"@inheritdoc IPool"},"functionSelector":"c44b11f7","id":26012,"implemented":true,"kind":"function","modifiers":[],"name":"getConfiguration","nameLocation":"13812:16:112","nodeType":"FunctionDefinition","overrides":{"id":26001,"nodeType":"OverrideSpecifier","overrides":[],"src":"13874:8:112"},"parameters":{"id":26000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25999,"mutability":"mutable","name":"asset","nameLocation":"13842:5:112","nodeType":"VariableDeclaration","scope":26012,"src":"13834:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25998,"name":"address","nodeType":"ElementaryTypeName","src":"13834:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13828:23:112"},"returnParameters":{"id":26005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26012,"src":"13892:40:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":26003,"nodeType":"UserDefinedTypeName","pathNode":{"id":26002,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"13892:33:112"},"referencedDeclaration":23912,"src":"13892:33:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"13891:42:112"},"scope":26587,"src":"13803:179:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4898],"body":{"id":26026,"nodeType":"Block","src":"14141:36:112","statements":[{"expression":{"baseExpression":{"id":26022,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"14154:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":26024,"indexExpression":{"id":26023,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26015,"src":"14167:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14154:18:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"functionReturnParameters":26021,"id":26025,"nodeType":"Return","src":"14147:25:112"}]},"documentation":{"id":26013,"nodeType":"StructuredDocumentation","src":"13986:21:112","text":"@inheritdoc IPool"},"functionSelector":"4417a583","id":26027,"implemented":true,"kind":"function","modifiers":[],"name":"getUserConfiguration","nameLocation":"14019:20:112","nodeType":"FunctionDefinition","overrides":{"id":26017,"nodeType":"OverrideSpecifier","overrides":[],"src":"14084:8:112"},"parameters":{"id":26016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26015,"mutability":"mutable","name":"user","nameLocation":"14053:4:112","nodeType":"VariableDeclaration","scope":26027,"src":"14045:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26014,"name":"address","nodeType":"ElementaryTypeName","src":"14045:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14039:22:112"},"returnParameters":{"id":26021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26027,"src":"14102:37:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":26019,"nodeType":"UserDefinedTypeName","pathNode":{"id":26018,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"14102:30:112"},"referencedDeclaration":23916,"src":"14102:30:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"14101:39:112"},"scope":26587,"src":"14010:167:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4906],"body":{"id":26042,"nodeType":"Block","src":"14313:56:112","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":26036,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"14326:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":26038,"indexExpression":{"id":26037,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26030,"src":"14336:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14326:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":26039,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":20309,"src":"14326:36:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":26040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14326:38:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26035,"id":26041,"nodeType":"Return","src":"14319:45:112"}]},"documentation":{"id":26028,"nodeType":"StructuredDocumentation","src":"14181:21:112","text":"@inheritdoc IPool"},"functionSelector":"d15e0053","id":26043,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveNormalizedIncome","nameLocation":"14214:26:112","nodeType":"FunctionDefinition","overrides":{"id":26032,"nodeType":"OverrideSpecifier","overrides":[],"src":"14286:8:112"},"parameters":{"id":26031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26030,"mutability":"mutable","name":"asset","nameLocation":"14254:5:112","nodeType":"VariableDeclaration","scope":26043,"src":"14246:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26029,"name":"address","nodeType":"ElementaryTypeName","src":"14246:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14240:23:112"},"returnParameters":{"id":26035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26034,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26043,"src":"14304:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26033,"name":"uint256","nodeType":"ElementaryTypeName","src":"14304:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14303:9:112"},"scope":26587,"src":"14205:164:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4914],"body":{"id":26058,"nodeType":"Block","src":"14511:54:112","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":26052,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"14524:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":26054,"indexExpression":{"id":26053,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26046,"src":"14534:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14524:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":26055,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedDebt","nodeType":"MemberAccess","referencedDeclaration":20345,"src":"14524:34:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$23909_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$23909_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":26056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14524:36:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26051,"id":26057,"nodeType":"Return","src":"14517:43:112"}]},"documentation":{"id":26044,"nodeType":"StructuredDocumentation","src":"14373:21:112","text":"@inheritdoc IPool"},"functionSelector":"386497fd","id":26059,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveNormalizedVariableDebt","nameLocation":"14406:32:112","nodeType":"FunctionDefinition","overrides":{"id":26048,"nodeType":"OverrideSpecifier","overrides":[],"src":"14484:8:112"},"parameters":{"id":26047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26046,"mutability":"mutable","name":"asset","nameLocation":"14452:5:112","nodeType":"VariableDeclaration","scope":26059,"src":"14444:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26045,"name":"address","nodeType":"ElementaryTypeName","src":"14444:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14438:23:112"},"returnParameters":{"id":26051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26050,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26059,"src":"14502:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26049,"name":"uint256","nodeType":"ElementaryTypeName","src":"14502:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14501:9:112"},"scope":26587,"src":"14397:168:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4946],"body":{"id":26125,"nodeType":"Block","src":"14678:582:112","statements":[{"assignments":[26068],"declarations":[{"constant":false,"id":26068,"mutability":"mutable","name":"reservesListCount","nameLocation":"14692:17:112","nodeType":"VariableDeclaration","scope":26125,"src":"14684:25:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26067,"name":"uint256","nodeType":"ElementaryTypeName","src":"14684:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26070,"initialValue":{"id":26069,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"14712:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"14684:42:112"},{"assignments":[26072],"declarations":[{"constant":false,"id":26072,"mutability":"mutable","name":"droppedReservesCount","nameLocation":"14740:20:112","nodeType":"VariableDeclaration","scope":26125,"src":"14732:28:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26071,"name":"uint256","nodeType":"ElementaryTypeName","src":"14732:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26074,"initialValue":{"hexValue":"30","id":26073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14763:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14732:32:112"},{"assignments":[26079],"declarations":[{"constant":false,"id":26079,"mutability":"mutable","name":"reservesList","nameLocation":"14787:12:112","nodeType":"VariableDeclaration","scope":26125,"src":"14770:29:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":26077,"name":"address","nodeType":"ElementaryTypeName","src":"14770:7:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":26078,"nodeType":"ArrayTypeName","src":"14770:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":26085,"initialValue":{"arguments":[{"id":26083,"name":"reservesListCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26068,"src":"14816:17:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"14802:13:112","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":26080,"name":"address","nodeType":"ElementaryTypeName","src":"14806:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":26081,"nodeType":"ArrayTypeName","src":"14806:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":26084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14802:32:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"14770:64:112"},{"body":{"id":26120,"nodeType":"Block","src":"14889:173:112","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":26096,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"14901:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":26098,"indexExpression":{"id":26097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26087,"src":"14915:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14901:16:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":26101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14929:1:112","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":26100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14921:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26099,"name":"address","nodeType":"ElementaryTypeName","src":"14921:7:112","typeDescriptions":{}}},"id":26102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14921:10:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14901:30:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":26118,"nodeType":"Block","src":"15015:41:112","statements":[{"expression":{"id":26116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15025:22:112","subExpression":{"id":26115,"name":"droppedReservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26072,"src":"15025:20:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26117,"nodeType":"ExpressionStatement","src":"15025:22:112"}]},"id":26119,"nodeType":"IfStatement","src":"14897:159:112","trueBody":{"id":26114,"nodeType":"Block","src":"14933:76:112","statements":[{"expression":{"id":26112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26104,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26079,"src":"14943:12:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":26108,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26105,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26087,"src":"14956:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":26106,"name":"droppedReservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26072,"src":"14960:20:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14956:24:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14943:38:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":26109,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"14984:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":26111,"indexExpression":{"id":26110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26087,"src":"14998:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14984:16:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14943:57:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":26113,"nodeType":"ExpressionStatement","src":"14943:57:112"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26090,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26087,"src":"14861:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":26091,"name":"reservesListCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26068,"src":"14865:17:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14861:21:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26121,"initializationExpression":{"assignments":[26087],"declarations":[{"constant":false,"id":26087,"mutability":"mutable","name":"i","nameLocation":"14854:1:112","nodeType":"VariableDeclaration","scope":26121,"src":"14846:9:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26086,"name":"uint256","nodeType":"ElementaryTypeName","src":"14846:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26089,"initialValue":{"hexValue":"30","id":26088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14858:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14846:13:112"},"loopExpression":{"expression":{"id":26094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14884:3:112","subExpression":{"id":26093,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26087,"src":"14884:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26095,"nodeType":"ExpressionStatement","src":"14884:3:112"},"nodeType":"ForStatement","src":"14841:221:112"},{"AST":{"nodeType":"YulBlock","src":"15151:80:112","statements":[{"expression":{"arguments":[{"name":"reservesList","nodeType":"YulIdentifier","src":"15166:12:112"},{"arguments":[{"name":"reservesListCount","nodeType":"YulIdentifier","src":"15184:17:112"},{"name":"droppedReservesCount","nodeType":"YulIdentifier","src":"15203:20:112"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15180:3:112"},"nodeType":"YulFunctionCall","src":"15180:44:112"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15159:6:112"},"nodeType":"YulFunctionCall","src":"15159:66:112"},"nodeType":"YulExpressionStatement","src":"15159:66:112"}]},"evmVersion":"london","externalReferences":[{"declaration":26072,"isOffset":false,"isSlot":false,"src":"15203:20:112","valueSize":1},{"declaration":26079,"isOffset":false,"isSlot":false,"src":"15166:12:112","valueSize":1},{"declaration":26068,"isOffset":false,"isSlot":false,"src":"15184:17:112","valueSize":1}],"id":26122,"nodeType":"InlineAssembly","src":"15142:89:112"},{"expression":{"id":26123,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26079,"src":"15243:12:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":26066,"id":26124,"nodeType":"Return","src":"15236:19:112"}]},"documentation":{"id":26060,"nodeType":"StructuredDocumentation","src":"14569:21:112","text":"@inheritdoc IPool"},"functionSelector":"d1946dbc","id":26126,"implemented":true,"kind":"function","modifiers":[],"name":"getReservesList","nameLocation":"14602:15:112","nodeType":"FunctionDefinition","overrides":{"id":26062,"nodeType":"OverrideSpecifier","overrides":[],"src":"14642:8:112"},"parameters":{"id":26061,"nodeType":"ParameterList","parameters":[],"src":"14617:2:112"},"returnParameters":{"id":26066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26126,"src":"14660:16:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":26063,"name":"address","nodeType":"ElementaryTypeName","src":"14660:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":26064,"nodeType":"ArrayTypeName","src":"14660:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"14659:18:112"},"scope":26587,"src":"14593:667:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4954],"body":{"id":26138,"nodeType":"Block","src":"15362:35:112","statements":[{"expression":{"baseExpression":{"id":26134,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"15375:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":26136,"indexExpression":{"id":26135,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26129,"src":"15389:2:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15375:17:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":26133,"id":26137,"nodeType":"Return","src":"15368:24:112"}]},"documentation":{"id":26127,"nodeType":"StructuredDocumentation","src":"15264:21:112","text":"@inheritdoc IPool"},"functionSelector":"52751797","id":26139,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveAddressById","nameLocation":"15297:21:112","nodeType":"FunctionDefinition","parameters":{"id":26130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26129,"mutability":"mutable","name":"id","nameLocation":"15326:2:112","nodeType":"VariableDeclaration","scope":26139,"src":"15319:9:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":26128,"name":"uint16","nodeType":"ElementaryTypeName","src":"15319:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"15318:11:112"},"returnParameters":{"id":26133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26139,"src":"15353:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26131,"name":"address","nodeType":"ElementaryTypeName","src":"15353:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15352:9:112"},"scope":26587,"src":"15288:109:112","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5019],"body":{"id":26148,"nodeType":"Block","src":"15519:49:112","statements":[{"expression":{"id":26146,"name":"_maxStableRateBorrowSizePercent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28283,"src":"15532:31:112","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":26145,"id":26147,"nodeType":"Return","src":"15525:38:112"}]},"documentation":{"id":26140,"nodeType":"StructuredDocumentation","src":"15401:21:112","text":"@inheritdoc IPool"},"functionSelector":"e82fec2f","id":26149,"implemented":true,"kind":"function","modifiers":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","nameLocation":"15434:35:112","nodeType":"FunctionDefinition","overrides":{"id":26142,"nodeType":"OverrideSpecifier","overrides":[],"src":"15492:8:112"},"parameters":{"id":26141,"nodeType":"ParameterList","parameters":[],"src":"15469:2:112"},"returnParameters":{"id":26145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26144,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26149,"src":"15510:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26143,"name":"uint256","nodeType":"ElementaryTypeName","src":"15510:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15509:9:112"},"scope":26587,"src":"15425:143:112","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[5031],"body":{"id":26158,"nodeType":"Block","src":"15674:36:112","statements":[{"expression":{"id":26156,"name":"_bridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28277,"src":"15687:18:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26155,"id":26157,"nodeType":"Return","src":"15680:25:112"}]},"documentation":{"id":26150,"nodeType":"StructuredDocumentation","src":"15572:21:112","text":"@inheritdoc IPool"},"functionSelector":"272d9072","id":26159,"implemented":true,"kind":"function","modifiers":[],"name":"BRIDGE_PROTOCOL_FEE","nameLocation":"15605:19:112","nodeType":"FunctionDefinition","overrides":{"id":26152,"nodeType":"OverrideSpecifier","overrides":[],"src":"15647:8:112"},"parameters":{"id":26151,"nodeType":"ParameterList","parameters":[],"src":"15624:2:112"},"returnParameters":{"id":26155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26159,"src":"15665:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26153,"name":"uint256","nodeType":"ElementaryTypeName","src":"15665:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15664:9:112"},"scope":26587,"src":"15596:114:112","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[5025],"body":{"id":26168,"nodeType":"Block","src":"15820:40:112","statements":[{"expression":{"id":26166,"name":"_flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28279,"src":"15833:22:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":26165,"id":26167,"nodeType":"Return","src":"15826:29:112"}]},"documentation":{"id":26160,"nodeType":"StructuredDocumentation","src":"15714:21:112","text":"@inheritdoc IPool"},"functionSelector":"074b2e43","id":26169,"implemented":true,"kind":"function","modifiers":[],"name":"FLASHLOAN_PREMIUM_TOTAL","nameLocation":"15747:23:112","nodeType":"FunctionDefinition","overrides":{"id":26162,"nodeType":"OverrideSpecifier","overrides":[],"src":"15793:8:112"},"parameters":{"id":26161,"nodeType":"ParameterList","parameters":[],"src":"15770:2:112"},"returnParameters":{"id":26165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26164,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26169,"src":"15811:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26163,"name":"uint128","nodeType":"ElementaryTypeName","src":"15811:7:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"15810:9:112"},"scope":26587,"src":"15738:122:112","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[5037],"body":{"id":26178,"nodeType":"Block","src":"15976:45:112","statements":[{"expression":{"id":26176,"name":"_flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28281,"src":"15989:27:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":26175,"id":26177,"nodeType":"Return","src":"15982:34:112"}]},"documentation":{"id":26170,"nodeType":"StructuredDocumentation","src":"15864:21:112","text":"@inheritdoc IPool"},"functionSelector":"6a99c036","id":26179,"implemented":true,"kind":"function","modifiers":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","nameLocation":"15897:29:112","nodeType":"FunctionDefinition","overrides":{"id":26172,"nodeType":"OverrideSpecifier","overrides":[],"src":"15949:8:112"},"parameters":{"id":26171,"nodeType":"ParameterList","parameters":[],"src":"15926:2:112"},"returnParameters":{"id":26175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26174,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26179,"src":"15967:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26173,"name":"uint128","nodeType":"ElementaryTypeName","src":"15967:7:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"15966:9:112"},"scope":26587,"src":"15888:133:112","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[5043],"body":{"id":26189,"nodeType":"Block","src":"16126:57:112","statements":[{"expression":{"expression":{"id":26186,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14034,"src":"16139:20:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$14034_$","typeString":"type(library ReserveConfiguration)"}},"id":26187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":12908,"src":"16139:39:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":26185,"id":26188,"nodeType":"Return","src":"16132:46:112"}]},"documentation":{"id":26180,"nodeType":"StructuredDocumentation","src":"16025:21:112","text":"@inheritdoc IPool"},"functionSelector":"f8119d51","id":26190,"implemented":true,"kind":"function","modifiers":[],"name":"MAX_NUMBER_RESERVES","nameLocation":"16058:19:112","nodeType":"FunctionDefinition","overrides":{"id":26182,"nodeType":"OverrideSpecifier","overrides":[],"src":"16100:8:112"},"parameters":{"id":26181,"nodeType":"ParameterList","parameters":[],"src":"16077:2:112"},"returnParameters":{"id":26185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26184,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26190,"src":"16118:6:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":26183,"name":"uint16","nodeType":"ElementaryTypeName","src":"16118:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16117:8:112"},"scope":26587,"src":"16049:134:112","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[4939],"body":{"id":26244,"nodeType":"Block","src":"16400:585:112","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":26208,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16414:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":26209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"16414:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"baseExpression":{"id":26210,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"16428:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":26212,"indexExpression":{"id":26211,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26193,"src":"16438:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16428:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":26213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":23896,"src":"16428:30:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16414:44:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26215,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"16460:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_ATOKEN","nodeType":"MemberAccess","referencedDeclaration":14581,"src":"16460:24:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26207,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16406:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16406:79:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26218,"nodeType":"ExpressionStatement","src":"16406:79:112"},{"expression":{"arguments":[{"id":26222,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"16534:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":26223,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"16551:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":26224,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"16572:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":26225,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"16596:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},{"arguments":[{"id":26228,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26193,"src":"16666:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26229,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26195,"src":"16687:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26230,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26197,"src":"16705:2:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26231,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26199,"src":"16725:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26232,"name":"balanceFromBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26201,"src":"16760:17:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26233,"name":"balanceToBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26203,"src":"16804:15:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26234,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"16844:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26235,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"16876:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":26236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5227,"src":"16876:33:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":26237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16876:35:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":26238,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"16940:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":26240,"indexExpression":{"id":26239,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26195,"src":"16960:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16940:25:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"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"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":26226,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"16616:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":26227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FinalizeTransferParams","nodeType":"MemberAccess","referencedDeclaration":24078,"src":"16616:32:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FinalizeTransferParams_$24078_storage_ptr_$","typeString":"type(struct DataTypes.FinalizeTransferParams storage pointer)"}},"id":26241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","from","to","amount","balanceFromBefore","balanceToBefore","reservesCount","oracle","fromEModeCategory"],"nodeType":"FunctionCall","src":"16616:358:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"},{"typeIdentifier":"t_struct$_FinalizeTransferParams_$24078_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}],"expression":{"id":26219,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21684,"src":"16491:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$21684_$","typeString":"type(library SupplyLogic)"}},"id":26221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeFinalizeTransfer","nodeType":"MemberAccess","referencedDeclaration":21546,"src":"16491:35:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),mapping(address => struct DataTypes.UserConfigurationMap storage ref),struct DataTypes.FinalizeTransferParams memory)"}},"id":26242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16491:489:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26243,"nodeType":"ExpressionStatement","src":"16491:489:112"}]},"documentation":{"id":26191,"nodeType":"StructuredDocumentation","src":"16187:21:112","text":"@inheritdoc IPool"},"functionSelector":"d5ed3933","id":26245,"implemented":true,"kind":"function","modifiers":[],"name":"finalizeTransfer","nameLocation":"16220:16:112","nodeType":"FunctionDefinition","overrides":{"id":26205,"nodeType":"OverrideSpecifier","overrides":[],"src":"16391:8:112"},"parameters":{"id":26204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26193,"mutability":"mutable","name":"asset","nameLocation":"16250:5:112","nodeType":"VariableDeclaration","scope":26245,"src":"16242:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26192,"name":"address","nodeType":"ElementaryTypeName","src":"16242:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26195,"mutability":"mutable","name":"from","nameLocation":"16269:4:112","nodeType":"VariableDeclaration","scope":26245,"src":"16261:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26194,"name":"address","nodeType":"ElementaryTypeName","src":"16261:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26197,"mutability":"mutable","name":"to","nameLocation":"16287:2:112","nodeType":"VariableDeclaration","scope":26245,"src":"16279:10:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26196,"name":"address","nodeType":"ElementaryTypeName","src":"16279:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26199,"mutability":"mutable","name":"amount","nameLocation":"16303:6:112","nodeType":"VariableDeclaration","scope":26245,"src":"16295:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26198,"name":"uint256","nodeType":"ElementaryTypeName","src":"16295:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26201,"mutability":"mutable","name":"balanceFromBefore","nameLocation":"16323:17:112","nodeType":"VariableDeclaration","scope":26245,"src":"16315:25:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26200,"name":"uint256","nodeType":"ElementaryTypeName","src":"16315:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26203,"mutability":"mutable","name":"balanceToBefore","nameLocation":"16354:15:112","nodeType":"VariableDeclaration","scope":26245,"src":"16346:23:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26202,"name":"uint256","nodeType":"ElementaryTypeName","src":"16346:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16236:137:112"},"returnParameters":{"id":26206,"nodeType":"ParameterList","parameters":[],"src":"16400:0:112"},"scope":26587,"src":"16211:774:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4857],"body":{"id":26283,"nodeType":"Block","src":"17236:511:112","statements":[{"condition":{"arguments":[{"id":26264,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"17291:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":26265,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"17310:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"arguments":[{"id":26268,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26248,"src":"17380:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26269,"name":"aTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26250,"src":"17412:13:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26270,"name":"stableDebtAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26252,"src":"17456:17:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26271,"name":"variableDebtAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26254,"src":"17506:19:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26272,"name":"interestRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26256,"src":"17566:27:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26273,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"17620:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"id":26274,"name":"MAX_NUMBER_RESERVES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26190,"src":"17665:19:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint16_$","typeString":"function () view returns (uint16)"}},"id":26275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17665:21:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":26266,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"17333:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":26267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InitReserveParams","nodeType":"MemberAccess","referencedDeclaration":24226,"src":"17333:27:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_InitReserveParams_$24226_storage_ptr_$","typeString":"type(struct DataTypes.InitReserveParams storage pointer)"}},"id":26276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","aTokenAddress","stableDebtAddress","variableDebtAddress","interestRateStrategyAddress","reservesCount","maxNumberReserves"],"nodeType":"FunctionCall","src":"17333:364:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_InitReserveParams_$24226_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}],"expression":{"id":26262,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20211,"src":"17253:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$20211_$","typeString":"type(library PoolLogic)"}},"id":26263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeInitReserve","nodeType":"MemberAccess","referencedDeclaration":19954,"src":"17253:28:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_InitReserveParams_$24226_memory_ptr_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.InitReserveParams memory) returns (bool)"}},"id":26277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17253:452:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26282,"nodeType":"IfStatement","src":"17242:501:112","trueBody":{"id":26281,"nodeType":"Block","src":"17712:31:112","statements":[{"expression":{"id":26279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"17720:16:112","subExpression":{"id":26278,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"17720:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":26280,"nodeType":"ExpressionStatement","src":"17720:16:112"}]}}]},"documentation":{"id":26246,"nodeType":"StructuredDocumentation","src":"16989:21:112","text":"@inheritdoc IPool"},"functionSelector":"7a708e92","id":26284,"implemented":true,"kind":"function","modifiers":[{"id":26260,"kind":"modifierInvocation","modifierName":{"id":26259,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25203,"src":"17215:20:112"},"nodeType":"ModifierInvocation","src":"17215:20:112"}],"name":"initReserve","nameLocation":"17022:11:112","nodeType":"FunctionDefinition","overrides":{"id":26258,"nodeType":"OverrideSpecifier","overrides":[],"src":"17206:8:112"},"parameters":{"id":26257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26248,"mutability":"mutable","name":"asset","nameLocation":"17047:5:112","nodeType":"VariableDeclaration","scope":26284,"src":"17039:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26247,"name":"address","nodeType":"ElementaryTypeName","src":"17039:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26250,"mutability":"mutable","name":"aTokenAddress","nameLocation":"17066:13:112","nodeType":"VariableDeclaration","scope":26284,"src":"17058:21:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26249,"name":"address","nodeType":"ElementaryTypeName","src":"17058:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26252,"mutability":"mutable","name":"stableDebtAddress","nameLocation":"17093:17:112","nodeType":"VariableDeclaration","scope":26284,"src":"17085:25:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26251,"name":"address","nodeType":"ElementaryTypeName","src":"17085:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26254,"mutability":"mutable","name":"variableDebtAddress","nameLocation":"17124:19:112","nodeType":"VariableDeclaration","scope":26284,"src":"17116:27:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26253,"name":"address","nodeType":"ElementaryTypeName","src":"17116:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26256,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"17157:27:112","nodeType":"VariableDeclaration","scope":26284,"src":"17149:35:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26255,"name":"address","nodeType":"ElementaryTypeName","src":"17149:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17033:155:112"},"returnParameters":{"id":26261,"nodeType":"ParameterList","parameters":[],"src":"17236:0:112"},"scope":26587,"src":"17013:734:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4863],"body":{"id":26301,"nodeType":"Block","src":"17858:72:112","statements":[{"expression":{"arguments":[{"id":26296,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"17893:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":26297,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"17904:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":26298,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"17919:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26293,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20211,"src":"17864:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$20211_$","typeString":"type(library PoolLogic)"}},"id":26295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeDropReserve","nodeType":"MemberAccess","referencedDeclaration":20152,"src":"17864:28:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_address_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),address)"}},"id":26299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17864:61:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26300,"nodeType":"ExpressionStatement","src":"17864:61:112"}]},"documentation":{"id":26285,"nodeType":"StructuredDocumentation","src":"17751:21:112","text":"@inheritdoc IPool"},"functionSelector":"63c9b860","id":26302,"implemented":true,"kind":"function","modifiers":[{"id":26291,"kind":"modifierInvocation","modifierName":{"id":26290,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25203,"src":"17837:20:112"},"nodeType":"ModifierInvocation","src":"17837:20:112"}],"name":"dropReserve","nameLocation":"17784:11:112","nodeType":"FunctionDefinition","overrides":{"id":26289,"nodeType":"OverrideSpecifier","overrides":[],"src":"17828:8:112"},"parameters":{"id":26288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26287,"mutability":"mutable","name":"asset","nameLocation":"17804:5:112","nodeType":"VariableDeclaration","scope":26302,"src":"17796:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26286,"name":"address","nodeType":"ElementaryTypeName","src":"17796:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17795:15:112"},"returnParameters":{"id":26292,"nodeType":"ParameterList","parameters":[],"src":"17858:0:112"},"scope":26587,"src":"17775:155:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4871],"body":{"id":26348,"nodeType":"Block","src":"18108:235:112","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26314,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"18122:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":26317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18139:1:112","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":26316,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18131:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26315,"name":"address","nodeType":"ElementaryTypeName","src":"18131:7:112","typeDescriptions":{}}},"id":26318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18131:10:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18122:19:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26320,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18143:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":14776,"src":"18143:29:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26313,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18114:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18114:59:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26323,"nodeType":"ExpressionStatement","src":"18114:59:112"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":26336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":26330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":26325,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"18187:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":26327,"indexExpression":{"id":26326,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"18197:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18187:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":26328,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"18187:19:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":26329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18210:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18187:24:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":26331,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"18215:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":26333,"indexExpression":{"hexValue":"30","id":26332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18229:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18215:16:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":26334,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"18235:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18215:25:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18187:53:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26337,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18242:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ASSET_NOT_LISTED","nodeType":"MemberAccess","referencedDeclaration":14791,"src":"18242:23:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26324,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18179:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18179:87:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26340,"nodeType":"ExpressionStatement","src":"18179:87:112"},{"expression":{"id":26346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":26341,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"18272:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":26343,"indexExpression":{"id":26342,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"18282:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18272:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":26344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":23902,"src":"18272:44:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26345,"name":"rateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26307,"src":"18319:19:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18272:66:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":26347,"nodeType":"ExpressionStatement","src":"18272:66:112"}]},"documentation":{"id":26303,"nodeType":"StructuredDocumentation","src":"17934:21:112","text":"@inheritdoc IPool"},"functionSelector":"1d2118f9","id":26349,"implemented":true,"kind":"function","modifiers":[{"id":26311,"kind":"modifierInvocation","modifierName":{"id":26310,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25203,"src":"18087:20:112"},"nodeType":"ModifierInvocation","src":"18087:20:112"}],"name":"setReserveInterestRateStrategyAddress","nameLocation":"17967:37:112","nodeType":"FunctionDefinition","overrides":{"id":26309,"nodeType":"OverrideSpecifier","overrides":[],"src":"18078:8:112"},"parameters":{"id":26308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26305,"mutability":"mutable","name":"asset","nameLocation":"18018:5:112","nodeType":"VariableDeclaration","scope":26349,"src":"18010:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26304,"name":"address","nodeType":"ElementaryTypeName","src":"18010:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26307,"mutability":"mutable","name":"rateStrategyAddress","nameLocation":"18037:19:112","nodeType":"VariableDeclaration","scope":26349,"src":"18029:27:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26306,"name":"address","nodeType":"ElementaryTypeName","src":"18029:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18004:56:112"},"returnParameters":{"id":26312,"nodeType":"ParameterList","parameters":[],"src":"18108:0:112"},"scope":26587,"src":"17958:385:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4880],"body":{"id":26396,"nodeType":"Block","src":"18529:215:112","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26362,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26352,"src":"18543:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":26365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18560:1:112","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":26364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18552:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26363,"name":"address","nodeType":"ElementaryTypeName","src":"18552:7:112","typeDescriptions":{}}},"id":26366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18552:10:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18543:19:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26368,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18564:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":14776,"src":"18564:29:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26361,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18535:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18535:59:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26371,"nodeType":"ExpressionStatement","src":"18535:59:112"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":26384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":26378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":26373,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"18608:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":26375,"indexExpression":{"id":26374,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26352,"src":"18618:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18608:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":26376,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":23894,"src":"18608:19:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":26377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18631:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18608:24:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":26379,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"18636:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":26381,"indexExpression":{"hexValue":"30","id":26380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18650:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18636:16:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":26382,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26352,"src":"18656:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18636:25:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18608:53:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26385,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18663:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ASSET_NOT_LISTED","nodeType":"MemberAccess","referencedDeclaration":14791,"src":"18663:23:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26372,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18600:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18600:87:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26388,"nodeType":"ExpressionStatement","src":"18600:87:112"},{"expression":{"id":26394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":26389,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"18693:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":26391,"indexExpression":{"id":26390,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26352,"src":"18703:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18693:16:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":26392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":23880,"src":"18693:30:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26393,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26355,"src":"18726:13:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_calldata_ptr","typeString":"struct DataTypes.ReserveConfigurationMap calldata"}},"src":"18693:46:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":26395,"nodeType":"ExpressionStatement","src":"18693:46:112"}]},"documentation":{"id":26350,"nodeType":"StructuredDocumentation","src":"18347:21:112","text":"@inheritdoc IPool"},"functionSelector":"f51e435b","id":26397,"implemented":true,"kind":"function","modifiers":[{"id":26359,"kind":"modifierInvocation","modifierName":{"id":26358,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25203,"src":"18508:20:112"},"nodeType":"ModifierInvocation","src":"18508:20:112"}],"name":"setConfiguration","nameLocation":"18380:16:112","nodeType":"FunctionDefinition","overrides":{"id":26357,"nodeType":"OverrideSpecifier","overrides":[],"src":"18499:8:112"},"parameters":{"id":26356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26352,"mutability":"mutable","name":"asset","nameLocation":"18410:5:112","nodeType":"VariableDeclaration","scope":26397,"src":"18402:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26351,"name":"address","nodeType":"ElementaryTypeName","src":"18402:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26355,"mutability":"mutable","name":"configuration","nameLocation":"18464:13:112","nodeType":"VariableDeclaration","scope":26397,"src":"18421:56:112","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_calldata_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":26354,"nodeType":"UserDefinedTypeName","pathNode":{"id":26353,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"18421:33:112"},"referencedDeclaration":23912,"src":"18421:33:112","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"18396:85:112"},"returnParameters":{"id":26360,"nodeType":"ParameterList","parameters":[],"src":"18529:0:112"},"scope":26587,"src":"18371:373:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4967],"body":{"id":26410,"nodeType":"Block","src":"18881:43:112","statements":[{"expression":{"id":26408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26406,"name":"_bridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28277,"src":"18887:18:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26407,"name":"protocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26400,"src":"18908:11:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18887:32:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26409,"nodeType":"ExpressionStatement","src":"18887:32:112"}]},"documentation":{"id":26398,"nodeType":"StructuredDocumentation","src":"18748:21:112","text":"@inheritdoc IPool"},"functionSelector":"3036b439","id":26411,"implemented":true,"kind":"function","modifiers":[{"id":26404,"kind":"modifierInvocation","modifierName":{"id":26403,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25203,"src":"18860:20:112"},"nodeType":"ModifierInvocation","src":"18860:20:112"}],"name":"updateBridgeProtocolFee","nameLocation":"18781:23:112","nodeType":"FunctionDefinition","overrides":{"id":26402,"nodeType":"OverrideSpecifier","overrides":[],"src":"18851:8:112"},"parameters":{"id":26401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26400,"mutability":"mutable","name":"protocolFee","nameLocation":"18818:11:112","nodeType":"VariableDeclaration","scope":26411,"src":"18810:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26399,"name":"uint256","nodeType":"ElementaryTypeName","src":"18810:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18804:29:112"},"returnParameters":{"id":26405,"nodeType":"ParameterList","parameters":[],"src":"18881:0:112"},"scope":26587,"src":"18772:152:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4975],"body":{"id":26430,"nodeType":"Block","src":"19111:119:112","statements":[{"expression":{"id":26424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26422,"name":"_flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28279,"src":"19117:22:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26423,"name":"flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26414,"src":"19142:21:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"19117:46:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":26425,"nodeType":"ExpressionStatement","src":"19117:46:112"},{"expression":{"id":26428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26426,"name":"_flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28281,"src":"19169:27:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26427,"name":"flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26416,"src":"19199:26:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"19169:56:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":26429,"nodeType":"ExpressionStatement","src":"19169:56:112"}]},"documentation":{"id":26412,"nodeType":"StructuredDocumentation","src":"18928:21:112","text":"@inheritdoc IPool"},"functionSelector":"bcb6e522","id":26431,"implemented":true,"kind":"function","modifiers":[{"id":26420,"kind":"modifierInvocation","modifierName":{"id":26419,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25203,"src":"19090:20:112"},"nodeType":"ModifierInvocation","src":"19090:20:112"}],"name":"updateFlashloanPremiums","nameLocation":"18961:23:112","nodeType":"FunctionDefinition","overrides":{"id":26418,"nodeType":"OverrideSpecifier","overrides":[],"src":"19081:8:112"},"parameters":{"id":26417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26414,"mutability":"mutable","name":"flashLoanPremiumTotal","nameLocation":"18998:21:112","nodeType":"VariableDeclaration","scope":26431,"src":"18990:29:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26413,"name":"uint128","nodeType":"ElementaryTypeName","src":"18990:7:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":26416,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"19033:26:112","nodeType":"VariableDeclaration","scope":26431,"src":"19025:34:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26415,"name":"uint128","nodeType":"ElementaryTypeName","src":"19025:7:112","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"18984:79:112"},"returnParameters":{"id":26421,"nodeType":"ParameterList","parameters":[],"src":"19111:0:112"},"scope":26587,"src":"18952:278:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4984],"body":{"id":26457,"nodeType":"Block","src":"19400:185:112","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":26446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26444,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26434,"src":"19503:2:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":26445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19509:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19503:7:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26447,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"19512:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"EMODE_CATEGORY_RESERVED","nodeType":"MemberAccess","referencedDeclaration":14596,"src":"19512:30:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26443,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19495:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19495:48:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26450,"nodeType":"ExpressionStatement","src":"19495:48:112"},{"expression":{"id":26455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26451,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"19549:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":26453,"indexExpression":{"id":26452,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26434,"src":"19566:2:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19549:20:112","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26454,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26437,"src":"19572:8:112","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"src":"19549:31:112","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":26456,"nodeType":"ExpressionStatement","src":"19549:31:112"}]},"documentation":{"id":26432,"nodeType":"StructuredDocumentation","src":"19234:21:112","text":"@inheritdoc IPool"},"functionSelector":"d579ea7d","id":26458,"implemented":true,"kind":"function","modifiers":[{"id":26441,"kind":"modifierInvocation","modifierName":{"id":26440,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25203,"src":"19379:20:112"},"nodeType":"ModifierInvocation","src":"19379:20:112"}],"name":"configureEModeCategory","nameLocation":"19267:22:112","nodeType":"FunctionDefinition","overrides":{"id":26439,"nodeType":"OverrideSpecifier","overrides":[],"src":"19370:8:112"},"parameters":{"id":26438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26434,"mutability":"mutable","name":"id","nameLocation":"19301:2:112","nodeType":"VariableDeclaration","scope":26458,"src":"19295:8:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26433,"name":"uint8","nodeType":"ElementaryTypeName","src":"19295:5:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":26437,"mutability":"mutable","name":"category","nameLocation":"19340:8:112","nodeType":"VariableDeclaration","scope":26458,"src":"19309:39:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":26436,"nodeType":"UserDefinedTypeName","pathNode":{"id":26435,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"19309:23:112"},"referencedDeclaration":23927,"src":"19309:23:112","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"src":"19289:63:112"},"returnParameters":{"id":26442,"nodeType":"ParameterList","parameters":[],"src":"19400:0:112"},"scope":26587,"src":"19258:327:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4993],"body":{"id":26472,"nodeType":"Block","src":"19733:38:112","statements":[{"expression":{"baseExpression":{"id":26468,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"19746:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":26470,"indexExpression":{"id":26469,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26461,"src":"19763:2:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19746:20:112","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"functionReturnParameters":26467,"id":26471,"nodeType":"Return","src":"19739:27:112"}]},"documentation":{"id":26459,"nodeType":"StructuredDocumentation","src":"19589:21:112","text":"@inheritdoc IPool"},"functionSelector":"6c6f6ae1","id":26473,"implemented":true,"kind":"function","modifiers":[],"name":"getEModeCategoryData","nameLocation":"19622:20:112","nodeType":"FunctionDefinition","overrides":{"id":26463,"nodeType":"OverrideSpecifier","overrides":[],"src":"19683:8:112"},"parameters":{"id":26462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26461,"mutability":"mutable","name":"id","nameLocation":"19654:2:112","nodeType":"VariableDeclaration","scope":26473,"src":"19648:8:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26460,"name":"uint8","nodeType":"ElementaryTypeName","src":"19648:5:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"19642:18:112"},"returnParameters":{"id":26467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26473,"src":"19701:30:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":26465,"nodeType":"UserDefinedTypeName","pathNode":{"id":26464,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"19701:23:112"},"referencedDeclaration":23927,"src":"19701:23:112","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"src":"19700:32:112"},"scope":26587,"src":"19613:158:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4999],"body":{"id":26501,"nodeType":"Block","src":"19865:345:112","statements":[{"expression":{"arguments":[{"id":26483,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"19909:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":26484,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"19926:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":26485,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28271,"src":"19947:16:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":26486,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"19971:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},{"baseExpression":{"id":26487,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"19998:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":26490,"indexExpression":{"expression":{"id":26488,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20011:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":26489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"20011:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19998:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":26493,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28285,"src":"20091:14:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26494,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"20123:18:112","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":26495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5227,"src":"20123:33:112","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":26496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20123:35:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26497,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26476,"src":"20180:10:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":26491,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"20030:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":26492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteSetUserEModeParams","nodeType":"MemberAccess","referencedDeclaration":24059,"src":"20030:35:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteSetUserEModeParams_$24059_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteSetUserEModeParams storage pointer)"}},"id":26498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["reservesCount","oracle","categoryId"],"nodeType":"FunctionCall","src":"20030:169:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}],"expression":{"id":26480,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17209,"src":"19871:10:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EModeLogic_$17209_$","typeString":"type(library EModeLogic)"}},"id":26482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSetUserEMode","nodeType":"MemberAccess","referencedDeclaration":17140,"src":"19871:30:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_$_t_mapping$_t_address_$_t_uint8_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),mapping(address => uint8),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteSetUserEModeParams memory)"}},"id":26499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19871:334:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26500,"nodeType":"ExpressionStatement","src":"19871:334:112"}]},"documentation":{"id":26474,"nodeType":"StructuredDocumentation","src":"19775:21:112","text":"@inheritdoc IPool"},"functionSelector":"28530a47","id":26502,"implemented":true,"kind":"function","modifiers":[],"name":"setUserEMode","nameLocation":"19808:12:112","nodeType":"FunctionDefinition","overrides":{"id":26478,"nodeType":"OverrideSpecifier","overrides":[],"src":"19856:8:112"},"parameters":{"id":26477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26476,"mutability":"mutable","name":"categoryId","nameLocation":"19827:10:112","nodeType":"VariableDeclaration","scope":26502,"src":"19821:16:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26475,"name":"uint8","nodeType":"ElementaryTypeName","src":"19821:5:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"19820:18:112"},"returnParameters":{"id":26479,"nodeType":"ParameterList","parameters":[],"src":"19865:0:112"},"scope":26587,"src":"19799:411:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[5007],"body":{"id":26515,"nodeType":"Block","src":"20323:43:112","statements":[{"expression":{"baseExpression":{"id":26511,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28275,"src":"20336:19:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":26513,"indexExpression":{"id":26512,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26505,"src":"20356:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20336:25:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":26510,"id":26514,"nodeType":"Return","src":"20329:32:112"}]},"documentation":{"id":26503,"nodeType":"StructuredDocumentation","src":"20214:21:112","text":"@inheritdoc IPool"},"functionSelector":"eddf1b79","id":26516,"implemented":true,"kind":"function","modifiers":[],"name":"getUserEMode","nameLocation":"20247:12:112","nodeType":"FunctionDefinition","overrides":{"id":26507,"nodeType":"OverrideSpecifier","overrides":[],"src":"20296:8:112"},"parameters":{"id":26506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26505,"mutability":"mutable","name":"user","nameLocation":"20268:4:112","nodeType":"VariableDeclaration","scope":26516,"src":"20260:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26504,"name":"address","nodeType":"ElementaryTypeName","src":"20260:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20259:14:112"},"returnParameters":{"id":26510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26509,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26516,"src":"20314:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26508,"name":"uint256","nodeType":"ElementaryTypeName","src":"20314:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20313:9:112"},"scope":26587,"src":"20238:128:112","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[5013],"body":{"id":26532,"nodeType":"Block","src":"20501:73:112","statements":[{"expression":{"arguments":[{"id":26528,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"20552:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":26529,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26519,"src":"20563:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26525,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20211,"src":"20507:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$20211_$","typeString":"type(library PoolLogic)"}},"id":26527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeResetIsolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":20102,"src":"20507:44:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_address_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),address)"}},"id":26530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20507:62:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26531,"nodeType":"ExpressionStatement","src":"20507:62:112"}]},"documentation":{"id":26517,"nodeType":"StructuredDocumentation","src":"20370:21:112","text":"@inheritdoc IPool"},"functionSelector":"e43e88a1","id":26533,"implemented":true,"kind":"function","modifiers":[{"id":26523,"kind":"modifierInvocation","modifierName":{"id":26522,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25203,"src":"20480:20:112"},"nodeType":"ModifierInvocation","src":"20480:20:112"}],"name":"resetIsolationModeTotalDebt","nameLocation":"20403:27:112","nodeType":"FunctionDefinition","overrides":{"id":26521,"nodeType":"OverrideSpecifier","overrides":[],"src":"20471:8:112"},"parameters":{"id":26520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26519,"mutability":"mutable","name":"asset","nameLocation":"20444:5:112","nodeType":"VariableDeclaration","scope":26533,"src":"20436:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26518,"name":"address","nodeType":"ElementaryTypeName","src":"20436:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20430:23:112"},"returnParameters":{"id":26524,"nodeType":"ParameterList","parameters":[],"src":"20501:0:112"},"scope":26587,"src":"20394:180:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[5060],"body":{"id":26554,"nodeType":"Block","src":"20723:59:112","statements":[{"expression":{"arguments":[{"id":26549,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26536,"src":"20759:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26550,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26538,"src":"20766:2:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26551,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26540,"src":"20770:6:112","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":26546,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20211,"src":"20729:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$20211_$","typeString":"type(library PoolLogic)"}},"id":26548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRescueTokens","nodeType":"MemberAccess","referencedDeclaration":19973,"src":"20729:29:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":26552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20729:48:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26553,"nodeType":"ExpressionStatement","src":"20729:48:112"}]},"documentation":{"id":26534,"nodeType":"StructuredDocumentation","src":"20578:21:112","text":"@inheritdoc IPool"},"functionSelector":"cea9d26f","id":26555,"implemented":true,"kind":"function","modifiers":[{"id":26544,"kind":"modifierInvocation","modifierName":{"id":26543,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":25211,"src":"20709:13:112"},"nodeType":"ModifierInvocation","src":"20709:13:112"}],"name":"rescueTokens","nameLocation":"20611:12:112","nodeType":"FunctionDefinition","overrides":{"id":26542,"nodeType":"OverrideSpecifier","overrides":[],"src":"20700:8:112"},"parameters":{"id":26541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26536,"mutability":"mutable","name":"token","nameLocation":"20637:5:112","nodeType":"VariableDeclaration","scope":26555,"src":"20629:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26535,"name":"address","nodeType":"ElementaryTypeName","src":"20629:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26538,"mutability":"mutable","name":"to","nameLocation":"20656:2:112","nodeType":"VariableDeclaration","scope":26555,"src":"20648:10:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26537,"name":"address","nodeType":"ElementaryTypeName","src":"20648:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26540,"mutability":"mutable","name":"amount","nameLocation":"20672:6:112","nodeType":"VariableDeclaration","scope":26555,"src":"20664:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26539,"name":"uint256","nodeType":"ElementaryTypeName","src":"20664:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20623:59:112"},"returnParameters":{"id":26545,"nodeType":"ParameterList","parameters":[],"src":"20723:0:112"},"scope":26587,"src":"20602:180:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[5072],"body":{"id":26585,"nodeType":"Block","src":"21006:273:112","statements":[{"expression":{"arguments":[{"id":26571,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28257,"src":"21045:9:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":26572,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28266,"src":"21062:13:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":26573,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28262,"src":"21083:12:112","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":26575,"indexExpression":{"id":26574,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26562,"src":"21096:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21083:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":26578,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26558,"src":"21162:5:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26579,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26560,"src":"21185:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26580,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26562,"src":"21213:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26581,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26564,"src":"21247:12:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":26576,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"21115:9:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":26577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteSupplyParams","nodeType":"MemberAccess","referencedDeclaration":24001,"src":"21115:29:112","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteSupplyParams_$24001_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteSupplyParams storage pointer)"}},"id":26582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","onBehalfOf","referralCode"],"nodeType":"FunctionCall","src":"21115:153:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$24001_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}],"expression":{"id":26568,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21684,"src":"21012:11:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$21684_$","typeString":"type(library SupplyLogic)"}},"id":26570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSupply","nodeType":"MemberAccess","referencedDeclaration":21194,"src":"21012:25:112","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_$_t_struct$_ExecuteSupplyParams_$24001_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteSupplyParams memory)"}},"id":26583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21012:262:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26584,"nodeType":"ExpressionStatement","src":"21012:262:112"}]},"documentation":{"id":26556,"nodeType":"StructuredDocumentation","src":"20786:82:112","text":"@inheritdoc IPool\n @dev Deprecated: maintained for compatibility purposes"},"functionSelector":"e8eda9df","id":26586,"implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"20880:7:112","nodeType":"FunctionDefinition","overrides":{"id":26566,"nodeType":"OverrideSpecifier","overrides":[],"src":"20997:8:112"},"parameters":{"id":26565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26558,"mutability":"mutable","name":"asset","nameLocation":"20901:5:112","nodeType":"VariableDeclaration","scope":26586,"src":"20893:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26557,"name":"address","nodeType":"ElementaryTypeName","src":"20893:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26560,"mutability":"mutable","name":"amount","nameLocation":"20920:6:112","nodeType":"VariableDeclaration","scope":26586,"src":"20912:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26559,"name":"uint256","nodeType":"ElementaryTypeName","src":"20912:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26562,"mutability":"mutable","name":"onBehalfOf","nameLocation":"20940:10:112","nodeType":"VariableDeclaration","scope":26586,"src":"20932:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26561,"name":"address","nodeType":"ElementaryTypeName","src":"20932:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26564,"mutability":"mutable","name":"referralCode","nameLocation":"20963:12:112","nodeType":"VariableDeclaration","scope":26586,"src":"20956:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":26563,"name":"uint16","nodeType":"ElementaryTypeName","src":"20956:6:112","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"20887:92:112"},"returnParameters":{"id":26567,"nodeType":"ParameterList","parameters":[],"src":"21006:0:112"},"scope":26587,"src":"20871:408:112","stateMutability":"nonpayable","virtual":true,"visibility":"external"}],"scope":26588,"src":"1828:19453:112","usedErrors":[]}],"src":"37:21245:112"},"id":112},"contracts/protocol/pool/PoolConfigurator.sol":{"ast":{"absolutePath":"contracts/protocol/pool/PoolConfigurator.sol","exportedSymbols":{"ConfiguratorInputTypes":[23875],"ConfiguratorLogic":[17003],"DataTypes":[24227],"Errors":[14819],"IACLManager":[3843],"IPool":[5073],"IPoolAddressesProvider":[5282],"IPoolConfigurator":[5780],"IPoolDataProvider":[6004],"PercentageMath":[23726],"PoolConfigurator":[28229],"ReserveConfiguration":[14034],"VersionedInitializable":[12750]},"id":28230,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":26589,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:113"},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":26591,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":12751,"src":"63:99:113","symbolAliases":[{"foreign":{"id":26590,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:22:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../libraries/configuration/ReserveConfiguration.sol","id":26593,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":14035,"src":"163:89:113","symbolAliases":[{"foreign":{"id":26592,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"171:20:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":26595,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":5283,"src":"253:83:113","symbolAliases":[{"foreign":{"id":26594,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"261:22:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":26597,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":14820,"src":"337:55:113","symbolAliases":[{"foreign":{"id":26596,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"345:6:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/PercentageMath.sol","file":"../libraries/math/PercentageMath.sol","id":26599,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":23727,"src":"393:68:113","symbolAliases":[{"foreign":{"id":26598,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"401:14:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../libraries/types/DataTypes.sol","id":26601,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":24228,"src":"462:59:113","symbolAliases":[{"foreign":{"id":26600,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"470:9:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ConfiguratorLogic.sol","file":"../libraries/logic/ConfiguratorLogic.sol","id":26603,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":17004,"src":"522:75:113","symbolAliases":[{"foreign":{"id":26602,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"530:17:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol","file":"../libraries/types/ConfiguratorInputTypes.sol","id":26605,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":23876,"src":"598:85:113","symbolAliases":[{"foreign":{"id":26604,"name":"ConfiguratorInputTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"606:22:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolConfigurator.sol","file":"../../interfaces/IPoolConfigurator.sol","id":26607,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":5781,"src":"684:73:113","symbolAliases":[{"foreign":{"id":26606,"name":"IPoolConfigurator","nodeType":"Identifier","overloadedDeclarations":[],"src":"692:17:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":26609,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":5074,"src":"758:49:113","symbolAliases":[{"foreign":{"id":26608,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"766:5:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IACLManager.sol","file":"../../interfaces/IACLManager.sol","id":26611,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":3844,"src":"808:61:113","symbolAliases":[{"foreign":{"id":26610,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"816:11:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolDataProvider.sol","file":"../../interfaces/IPoolDataProvider.sol","id":26613,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28230,"sourceUnit":6005,"src":"870:73:113","symbolAliases":[{"foreign":{"id":26612,"name":"IPoolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"878:17:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":26615,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":12750,"src":"1092:22:113"},"id":26616,"nodeType":"InheritanceSpecifier","src":"1092:22:113"},{"baseName":{"id":26617,"name":"IPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":5780,"src":"1116:17:113"},"id":26618,"nodeType":"InheritanceSpecifier","src":"1116:17:113"}],"canonicalName":"PoolConfigurator","contractDependencies":[],"contractKind":"contract","documentation":{"id":26614,"nodeType":"StructuredDocumentation","src":"945:117:113","text":" @title PoolConfigurator\n @author Aave\n @dev Implements the configuration methods for the Aave protocol"},"fullyImplemented":true,"id":28229,"linearizedBaseContracts":[28229,5780,12750],"name":"PoolConfigurator","nameLocation":"1072:16:113","nodeType":"ContractDefinition","nodes":[{"id":26621,"libraryName":{"id":26619,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":23726,"src":"1144:14:113"},"nodeType":"UsingForDirective","src":"1138:33:113","typeName":{"id":26620,"name":"uint256","nodeType":"ElementaryTypeName","src":"1163:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":26625,"libraryName":{"id":26622,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"1180:20:113"},"nodeType":"UsingForDirective","src":"1174:65:113","typeName":{"id":26624,"nodeType":"UserDefinedTypeName","pathNode":{"id":26623,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"1205:33:113"},"referencedDeclaration":23912,"src":"1205:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"constant":false,"id":26628,"mutability":"mutable","name":"_addressesProvider","nameLocation":"1275:18:113","nodeType":"VariableDeclaration","scope":28229,"src":"1243:50:113","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":26627,"nodeType":"UserDefinedTypeName","pathNode":{"id":26626,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"1243:22:113"},"referencedDeclaration":5282,"src":"1243:22:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":26631,"mutability":"mutable","name":"_pool","nameLocation":"1312:5:113","nodeType":"VariableDeclaration","scope":28229,"src":"1297:20:113","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":26630,"nodeType":"UserDefinedTypeName","pathNode":{"id":26629,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1297:5:113"},"referencedDeclaration":5073,"src":"1297:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"body":{"id":26638,"nodeType":"Block","src":"1429:34:113","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":26634,"name":"_onlyPoolAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28118,"src":"1435:14:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":26635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1435:16:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26636,"nodeType":"ExpressionStatement","src":"1435:16:113"},{"id":26637,"nodeType":"PlaceholderStatement","src":"1457:1:113"}]},"documentation":{"id":26632,"nodeType":"StructuredDocumentation","src":"1322:79:113","text":" @dev Only pool admin can call functions marked by this modifier."},"id":26639,"name":"onlyPoolAdmin","nameLocation":"1413:13:113","nodeType":"ModifierDefinition","parameters":{"id":26633,"nodeType":"ParameterList","parameters":[],"src":"1426:2:113"},"src":"1404:59:113","virtual":false,"visibility":"internal"},{"body":{"id":26646,"nodeType":"Block","src":"1584:39:113","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":26642,"name":"_onlyEmergencyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28141,"src":"1590:19:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":26643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1590:21:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26644,"nodeType":"ExpressionStatement","src":"1590:21:113"},{"id":26645,"nodeType":"PlaceholderStatement","src":"1617:1:113"}]},"documentation":{"id":26640,"nodeType":"StructuredDocumentation","src":"1467:84:113","text":" @dev Only emergency admin can call functions marked by this modifier."},"id":26647,"name":"onlyEmergencyAdmin","nameLocation":"1563:18:113","nodeType":"ModifierDefinition","parameters":{"id":26641,"nodeType":"ParameterList","parameters":[],"src":"1581:2:113"},"src":"1554:69:113","virtual":false,"visibility":"internal"},{"body":{"id":26654,"nodeType":"Block","src":"1758:45:113","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":26650,"name":"_onlyPoolOrEmergencyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28170,"src":"1764:25:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":26651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1764:27:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26652,"nodeType":"ExpressionStatement","src":"1764:27:113"},{"id":26653,"nodeType":"PlaceholderStatement","src":"1797:1:113"}]},"documentation":{"id":26648,"nodeType":"StructuredDocumentation","src":"1627:92:113","text":" @dev Only emergency or pool admin can call functions marked by this modifier."},"id":26655,"name":"onlyEmergencyOrPoolAdmin","nameLocation":"1731:24:113","nodeType":"ModifierDefinition","parameters":{"id":26649,"nodeType":"ParameterList","parameters":[],"src":"1755:2:113"},"src":"1722:81:113","virtual":false,"visibility":"internal"},{"body":{"id":26662,"nodeType":"Block","src":"1946:49:113","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":26658,"name":"_onlyAssetListingOrPoolAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28199,"src":"1952:29:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":26659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1952:31:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26660,"nodeType":"ExpressionStatement","src":"1952:31:113"},{"id":26661,"nodeType":"PlaceholderStatement","src":"1989:1:113"}]},"documentation":{"id":26656,"nodeType":"StructuredDocumentation","src":"1807:96:113","text":" @dev Only asset listing or pool admin can call functions marked by this modifier."},"id":26663,"name":"onlyAssetListingOrPoolAdmins","nameLocation":"1915:28:113","nodeType":"ModifierDefinition","parameters":{"id":26657,"nodeType":"ParameterList","parameters":[],"src":"1943:2:113"},"src":"1906:89:113","virtual":false,"visibility":"internal"},{"body":{"id":26670,"nodeType":"Block","src":"2121:41:113","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":26666,"name":"_onlyRiskOrPoolAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28228,"src":"2127:21:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":26667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2127:23:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26668,"nodeType":"ExpressionStatement","src":"2127:23:113"},{"id":26669,"nodeType":"PlaceholderStatement","src":"2156:1:113"}]},"documentation":{"id":26664,"nodeType":"StructuredDocumentation","src":"1999:87:113","text":" @dev Only risk or pool admin can call functions marked by this modifier."},"id":26671,"name":"onlyRiskOrPoolAdmins","nameLocation":"2098:20:113","nodeType":"ModifierDefinition","parameters":{"id":26665,"nodeType":"ParameterList","parameters":[],"src":"2118:2:113"},"src":"2089:73:113","virtual":false,"visibility":"internal"},{"constant":true,"functionSelector":"7af635a6","id":26674,"mutability":"constant","name":"CONFIGURATOR_REVISION","nameLocation":"2190:21:113","nodeType":"VariableDeclaration","scope":28229,"src":"2166:51:113","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26672,"name":"uint256","nodeType":"ElementaryTypeName","src":"2166:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":26673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2214:3:113","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"baseFunctions":[12730],"body":{"id":26683,"nodeType":"Block","src":"2335:39:113","statements":[{"expression":{"id":26681,"name":"CONFIGURATOR_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26674,"src":"2348:21:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26680,"id":26682,"nodeType":"Return","src":"2341:28:113"}]},"documentation":{"id":26675,"nodeType":"StructuredDocumentation","src":"2222:38:113","text":"@inheritdoc VersionedInitializable"},"id":26684,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2272:11:113","nodeType":"FunctionDefinition","overrides":{"id":26677,"nodeType":"OverrideSpecifier","overrides":[],"src":"2308:8:113"},"parameters":{"id":26676,"nodeType":"ParameterList","parameters":[],"src":"2283:2:113"},"returnParameters":{"id":26680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26679,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26684,"src":"2326:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26678,"name":"uint256","nodeType":"ElementaryTypeName","src":"2326:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2325:9:113"},"scope":28229,"src":"2263:111:113","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":26704,"nodeType":"Block","src":"2450:89:113","statements":[{"expression":{"id":26694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26692,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"2456:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26693,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26687,"src":"2477:8:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"2456:29:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":26695,"nodeType":"ExpressionStatement","src":"2456:29:113"},{"expression":{"id":26702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26696,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"2491:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26698,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"2505:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":26699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":5203,"src":"2505:26:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":26700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2505:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26697,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"2499:5:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$5073_$","typeString":"type(contract IPool)"}},"id":26701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2499:35:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"2491:43:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":26703,"nodeType":"ExpressionStatement","src":"2491:43:113"}]},"functionSelector":"c4d66de8","id":26705,"implemented":true,"kind":"function","modifiers":[{"id":26690,"kind":"modifierInvocation","modifierName":{"id":26689,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"2438:11:113"},"nodeType":"ModifierInvocation","src":"2438:11:113"}],"name":"initialize","nameLocation":"2387:10:113","nodeType":"FunctionDefinition","parameters":{"id":26688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26687,"mutability":"mutable","name":"provider","nameLocation":"2421:8:113","nodeType":"VariableDeclaration","scope":26705,"src":"2398:31:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":26686,"nodeType":"UserDefinedTypeName","pathNode":{"id":26685,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"2398:22:113"},"referencedDeclaration":5282,"src":"2398:22:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"2397:33:113"},"returnParameters":{"id":26691,"nodeType":"ParameterList","parameters":[],"src":"2450:0:113"},"scope":28229,"src":"2378:161:113","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5572],"body":{"id":26743,"nodeType":"Block","src":"2714:156:113","statements":[{"assignments":[26718],"declarations":[{"constant":false,"id":26718,"mutability":"mutable","name":"cachedPool","nameLocation":"2726:10:113","nodeType":"VariableDeclaration","scope":26743,"src":"2720:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":26717,"nodeType":"UserDefinedTypeName","pathNode":{"id":26716,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"2720:5:113"},"referencedDeclaration":5073,"src":"2720:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"id":26720,"initialValue":{"id":26719,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"2739:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"2720:24:113"},{"body":{"id":26741,"nodeType":"Block","src":"2793:73:113","statements":[{"expression":{"arguments":[{"id":26735,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26718,"src":"2838:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"baseExpression":{"id":26736,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26710,"src":"2850:5:113","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$23846_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata[] calldata"}},"id":26738,"indexExpression":{"id":26737,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26722,"src":"2856:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2850:8:113","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_struct$_InitReserveInput_$23846_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}],"expression":{"id":26732,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17003,"src":"2801:17:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ConfiguratorLogic_$17003_$","typeString":"type(library ConfiguratorLogic)"}},"id":26734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeInitReserve","nodeType":"MemberAccess","referencedDeclaration":16727,"src":"2801:36:113","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_contract$_IPool_$5073_$_t_struct$_InitReserveInput_$23846_memory_ptr_$returns$__$","typeString":"function (contract IPool,struct ConfiguratorInputTypes.InitReserveInput memory)"}},"id":26739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2801:58:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26740,"nodeType":"ExpressionStatement","src":"2801:58:113"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26725,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26722,"src":"2770:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":26726,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26710,"src":"2774:5:113","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$23846_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata[] calldata"}},"id":26727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2774:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2770:16:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26742,"initializationExpression":{"assignments":[26722],"declarations":[{"constant":false,"id":26722,"mutability":"mutable","name":"i","nameLocation":"2763:1:113","nodeType":"VariableDeclaration","scope":26742,"src":"2755:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26721,"name":"uint256","nodeType":"ElementaryTypeName","src":"2755:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26724,"initialValue":{"hexValue":"30","id":26723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2767:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2755:13:113"},"loopExpression":{"expression":{"id":26730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2788:3:113","subExpression":{"id":26729,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26722,"src":"2788:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26731,"nodeType":"ExpressionStatement","src":"2788:3:113"},"nodeType":"ForStatement","src":"2750:116:113"}]},"documentation":{"id":26706,"nodeType":"StructuredDocumentation","src":"2543:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"02fb45e6","id":26744,"implemented":true,"kind":"function","modifiers":[{"id":26714,"kind":"modifierInvocation","modifierName":{"id":26713,"name":"onlyAssetListingOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26663,"src":"2685:28:113"},"nodeType":"ModifierInvocation","src":"2685:28:113"}],"name":"initReserves","nameLocation":"2588:12:113","nodeType":"FunctionDefinition","overrides":{"id":26712,"nodeType":"OverrideSpecifier","overrides":[],"src":"2676:8:113"},"parameters":{"id":26711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26710,"mutability":"mutable","name":"input","nameLocation":"2657:5:113","nodeType":"VariableDeclaration","scope":26744,"src":"2606:56:113","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$23846_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput[]"},"typeName":{"baseType":{"id":26708,"nodeType":"UserDefinedTypeName","pathNode":{"id":26707,"name":"ConfiguratorInputTypes.InitReserveInput","nodeType":"IdentifierPath","referencedDeclaration":23846,"src":"2606:39:113"},"referencedDeclaration":23846,"src":"2606:39:113","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$23846_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput"}},"id":26709,"nodeType":"ArrayTypeName","src":"2606:41:113","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$23846_storage_$dyn_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput[]"}},"visibility":"internal"}],"src":"2600:66:113"},"returnParameters":{"id":26715,"nodeType":"ParameterList","parameters":[],"src":"2714:0:113"},"scope":28229,"src":"2579:291:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5745],"body":{"id":26763,"nodeType":"Block","src":"2978:67:113","statements":[{"expression":{"arguments":[{"id":26756,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26747,"src":"3002:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26753,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"2984:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":26755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"dropReserve","nodeType":"MemberAccess","referencedDeclaration":4863,"src":"2984:17:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":26757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2984:24:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26758,"nodeType":"ExpressionStatement","src":"2984:24:113"},{"eventCall":{"arguments":[{"id":26760,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26747,"src":"3034:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26759,"name":"ReserveDropped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5413,"src":"3019:14:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":26761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3019:21:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26762,"nodeType":"EmitStatement","src":"3014:26:113"}]},"documentation":{"id":26745,"nodeType":"StructuredDocumentation","src":"2874:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"63c9b860","id":26764,"implemented":true,"kind":"function","modifiers":[{"id":26751,"kind":"modifierInvocation","modifierName":{"id":26750,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26639,"src":"2964:13:113"},"nodeType":"ModifierInvocation","src":"2964:13:113"}],"name":"dropReserve","nameLocation":"2919:11:113","nodeType":"FunctionDefinition","overrides":{"id":26749,"nodeType":"OverrideSpecifier","overrides":[],"src":"2955:8:113"},"parameters":{"id":26748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26747,"mutability":"mutable","name":"asset","nameLocation":"2939:5:113","nodeType":"VariableDeclaration","scope":26764,"src":"2931:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26746,"name":"address","nodeType":"ElementaryTypeName","src":"2931:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2930:15:113"},"returnParameters":{"id":26752,"nodeType":"ParameterList","parameters":[],"src":"2978:0:113"},"scope":28229,"src":"2910:135:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5579],"body":{"id":26781,"nodeType":"Block","src":"3204:62:113","statements":[{"expression":{"arguments":[{"id":26777,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"3248:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"id":26778,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26768,"src":"3255:5:113","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}],"expression":{"id":26774,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17003,"src":"3210:17:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ConfiguratorLogic_$17003_$","typeString":"type(library ConfiguratorLogic)"}},"id":26776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeUpdateAToken","nodeType":"MemberAccess","referencedDeclaration":16799,"src":"3210:37:113","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_contract$_IPool_$5073_$_t_struct$_UpdateATokenInput_$23861_memory_ptr_$returns$__$","typeString":"function (contract IPool,struct ConfiguratorInputTypes.UpdateATokenInput memory)"}},"id":26779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3210:51:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26780,"nodeType":"ExpressionStatement","src":"3210:51:113"}]},"documentation":{"id":26765,"nodeType":"StructuredDocumentation","src":"3049:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"bb01c37c","id":26782,"implemented":true,"kind":"function","modifiers":[{"id":26772,"kind":"modifierInvocation","modifierName":{"id":26771,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26639,"src":"3190:13:113"},"nodeType":"ModifierInvocation","src":"3190:13:113"}],"name":"updateAToken","nameLocation":"3094:12:113","nodeType":"FunctionDefinition","overrides":{"id":26770,"nodeType":"OverrideSpecifier","overrides":[],"src":"3181:8:113"},"parameters":{"id":26769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26768,"mutability":"mutable","name":"input","nameLocation":"3162:5:113","nodeType":"VariableDeclaration","scope":26782,"src":"3112:55:113","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"},"typeName":{"id":26767,"nodeType":"UserDefinedTypeName","pathNode":{"id":26766,"name":"ConfiguratorInputTypes.UpdateATokenInput","nodeType":"IdentifierPath","referencedDeclaration":23861,"src":"3112:40:113"},"referencedDeclaration":23861,"src":"3112:40:113","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$23861_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"}},"visibility":"internal"}],"src":"3106:65:113"},"returnParameters":{"id":26773,"nodeType":"ParameterList","parameters":[],"src":"3204:0:113"},"scope":28229,"src":"3085:181:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5586],"body":{"id":26799,"nodeType":"Block","src":"3437:71:113","statements":[{"expression":{"arguments":[{"id":26795,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"3490:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"id":26796,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26786,"src":"3497:5:113","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}],"expression":{"id":26792,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17003,"src":"3443:17:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ConfiguratorLogic_$17003_$","typeString":"type(library ConfiguratorLogic)"}},"id":26794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeUpdateStableDebtToken","nodeType":"MemberAccess","referencedDeclaration":16869,"src":"3443:46:113","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_contract$_IPool_$5073_$_t_struct$_UpdateDebtTokenInput_$23874_memory_ptr_$returns$__$","typeString":"function (contract IPool,struct ConfiguratorInputTypes.UpdateDebtTokenInput memory)"}},"id":26797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3443:60:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26798,"nodeType":"ExpressionStatement","src":"3443:60:113"}]},"documentation":{"id":26783,"nodeType":"StructuredDocumentation","src":"3270:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"7626cde3","id":26800,"implemented":true,"kind":"function","modifiers":[{"id":26790,"kind":"modifierInvocation","modifierName":{"id":26789,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26639,"src":"3423:13:113"},"nodeType":"ModifierInvocation","src":"3423:13:113"}],"name":"updateStableDebtToken","nameLocation":"3315:21:113","nodeType":"FunctionDefinition","overrides":{"id":26788,"nodeType":"OverrideSpecifier","overrides":[],"src":"3414:8:113"},"parameters":{"id":26787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26786,"mutability":"mutable","name":"input","nameLocation":"3395:5:113","nodeType":"VariableDeclaration","scope":26800,"src":"3342:58:113","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":26785,"nodeType":"UserDefinedTypeName","pathNode":{"id":26784,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":23874,"src":"3342:43:113"},"referencedDeclaration":23874,"src":"3342:43:113","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"3336:68:113"},"returnParameters":{"id":26791,"nodeType":"ParameterList","parameters":[],"src":"3437:0:113"},"scope":28229,"src":"3306:202:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5593],"body":{"id":26817,"nodeType":"Block","src":"3681:73:113","statements":[{"expression":{"arguments":[{"id":26813,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"3736:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"id":26814,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26804,"src":"3743:5:113","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}],"expression":{"id":26810,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17003,"src":"3687:17:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ConfiguratorLogic_$17003_$","typeString":"type(library ConfiguratorLogic)"}},"id":26812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeUpdateVariableDebtToken","nodeType":"MemberAccess","referencedDeclaration":16939,"src":"3687:48:113","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_contract$_IPool_$5073_$_t_struct$_UpdateDebtTokenInput_$23874_memory_ptr_$returns$__$","typeString":"function (contract IPool,struct ConfiguratorInputTypes.UpdateDebtTokenInput memory)"}},"id":26815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3687:62:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26816,"nodeType":"ExpressionStatement","src":"3687:62:113"}]},"documentation":{"id":26801,"nodeType":"StructuredDocumentation","src":"3512:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"ad4e6432","id":26818,"implemented":true,"kind":"function","modifiers":[{"id":26808,"kind":"modifierInvocation","modifierName":{"id":26807,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26639,"src":"3667:13:113"},"nodeType":"ModifierInvocation","src":"3667:13:113"}],"name":"updateVariableDebtToken","nameLocation":"3557:23:113","nodeType":"FunctionDefinition","overrides":{"id":26806,"nodeType":"OverrideSpecifier","overrides":[],"src":"3658:8:113"},"parameters":{"id":26805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26804,"mutability":"mutable","name":"input","nameLocation":"3639:5:113","nodeType":"VariableDeclaration","scope":26818,"src":"3586:58:113","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":26803,"nodeType":"UserDefinedTypeName","pathNode":{"id":26802,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":23874,"src":"3586:43:113"},"referencedDeclaration":23874,"src":"3586:43:113","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$23874_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"3580:68:113"},"returnParameters":{"id":26809,"nodeType":"ParameterList","parameters":[],"src":"3681:0:113"},"scope":28229,"src":"3548:206:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5601],"body":{"id":26870,"nodeType":"Block","src":"3891:360:113","statements":[{"assignments":[26833],"declarations":[{"constant":false,"id":26833,"mutability":"mutable","name":"currentConfig","nameLocation":"3938:13:113","nodeType":"VariableDeclaration","scope":26870,"src":"3897:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":26832,"nodeType":"UserDefinedTypeName","pathNode":{"id":26831,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"3897:33:113"},"referencedDeclaration":23912,"src":"3897:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":26838,"initialValue":{"arguments":[{"id":26836,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26821,"src":"3977:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26834,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"3954:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":26835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"3954:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":26837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3954:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"3897:86:113"},{"condition":{"id":26840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3993:8:113","subExpression":{"id":26839,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26823,"src":"3994:7:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26851,"nodeType":"IfStatement","src":"3989:117:113","trueBody":{"id":26850,"nodeType":"Block","src":"4003:103:113","statements":[{"expression":{"arguments":[{"id":26845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4019:46:113","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26842,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26833,"src":"4020:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":26843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getStableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":13460,"src":"4020:43:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":26844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4020:45:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26846,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4067:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STABLE_BORROWING_ENABLED","nodeType":"MemberAccess","referencedDeclaration":14809,"src":"4067:31:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26841,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4011:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4011:88:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26849,"nodeType":"ExpressionStatement","src":"4011:88:113"}]}},{"expression":{"arguments":[{"id":26855,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26823,"src":"4145:7:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26852,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26833,"src":"4111:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":26854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":13391,"src":"4111:33:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":26856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4111:42:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26857,"nodeType":"ExpressionStatement","src":"4111:42:113"},{"expression":{"arguments":[{"id":26861,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26821,"src":"4182:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26862,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26833,"src":"4189:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":26858,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"4159:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":26860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"4159:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":26863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4159:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26864,"nodeType":"ExpressionStatement","src":"4159:44:113"},{"eventCall":{"arguments":[{"id":26866,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26821,"src":"4231:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26867,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26823,"src":"4238:7:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":26865,"name":"ReserveBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5362,"src":"4214:16:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":26868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4214:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26869,"nodeType":"EmitStatement","src":"4209:37:113"}]},"documentation":{"id":26819,"nodeType":"StructuredDocumentation","src":"3758:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"682cf264","id":26871,"implemented":true,"kind":"function","modifiers":[{"id":26827,"kind":"modifierInvocation","modifierName":{"id":26826,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"3870:20:113"},"nodeType":"ModifierInvocation","src":"3870:20:113"}],"name":"setReserveBorrowing","nameLocation":"3803:19:113","nodeType":"FunctionDefinition","overrides":{"id":26825,"nodeType":"OverrideSpecifier","overrides":[],"src":"3861:8:113"},"parameters":{"id":26824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26821,"mutability":"mutable","name":"asset","nameLocation":"3831:5:113","nodeType":"VariableDeclaration","scope":26871,"src":"3823:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26820,"name":"address","nodeType":"ElementaryTypeName","src":"3823:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26823,"mutability":"mutable","name":"enabled","nameLocation":"3843:7:113","nodeType":"VariableDeclaration","scope":26871,"src":"3838:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26822,"name":"bool","nodeType":"ElementaryTypeName","src":"3838:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3822:29:113"},"returnParameters":{"id":26828,"nodeType":"ParameterList","parameters":[],"src":"3891:0:113"},"scope":28229,"src":"3794:457:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5613],"body":{"id":26975,"nodeType":"Block","src":"4472:1581:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26887,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26876,"src":"4675:3:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":26888,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26878,"src":"4682:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4675:27:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26890,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4704:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14608,"src":"4704:29:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26886,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4667:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4667:67:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26893,"nodeType":"ExpressionStatement","src":"4667:67:113"},{"assignments":[26898],"declarations":[{"constant":false,"id":26898,"mutability":"mutable","name":"currentConfig","nameLocation":"4782:13:113","nodeType":"VariableDeclaration","scope":26975,"src":"4741:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":26897,"nodeType":"UserDefinedTypeName","pathNode":{"id":26896,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"4741:33:113"},"referencedDeclaration":23912,"src":"4741:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":26903,"initialValue":{"arguments":[{"id":26901,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26874,"src":"4821:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26899,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"4798:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":26900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"4798:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":26902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4798:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"4741:86:113"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26904,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26878,"src":"4838:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":26905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4862:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4838:25:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":26941,"nodeType":"Block","src":"5471:279:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26930,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26880,"src":"5487:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":26931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5507:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5487:21:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26933,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5510:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14608,"src":"5510:29:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26929,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5479:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5479:61:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26936,"nodeType":"ExpressionStatement","src":"5479:61:113"},{"expression":{"arguments":[{"id":26938,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26874,"src":"5737:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26937,"name":"_checkNoSuppliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28070,"src":"5719:17:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":26939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5719:24:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26940,"nodeType":"ExpressionStatement","src":"5719:24:113"}]},"id":26942,"nodeType":"IfStatement","src":"4834:916:113","trueBody":{"id":26928,"nodeType":"Block","src":"4865:600:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26908,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26880,"src":"5029:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":26909,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"5048:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":26910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"5048:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5029:51:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26912,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5082:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14608,"src":"5082:29:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26907,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5021:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5021:91:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26915,"nodeType":"ExpressionStatement","src":"5021:91:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":26919,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26880,"src":"5358:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26917,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26878,"src":"5326:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"5326:31:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":26920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5326:49:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":26921,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"5379:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":26922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"5379:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5326:85:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26924,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5421:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":26925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14608,"src":"5421:29:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26916,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5309:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5309:149:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26927,"nodeType":"ExpressionStatement","src":"5309:149:113"}]}},{"expression":{"arguments":[{"id":26946,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26876,"src":"5777:3:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26943,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26898,"src":"5756:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":26945,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLtv","nodeType":"MemberAccess","referencedDeclaration":12938,"src":"5756:20:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":26947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5756:25:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26948,"nodeType":"ExpressionStatement","src":"5756:25:113"},{"expression":{"arguments":[{"id":26952,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26878,"src":"5825:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26949,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26898,"src":"5787:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":26951,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":12987,"src":"5787:37:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":26953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5787:59:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26954,"nodeType":"ExpressionStatement","src":"5787:59:113"},{"expression":{"arguments":[{"id":26958,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26880,"src":"5886:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26955,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26898,"src":"5852:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":26957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":13039,"src":"5852:33:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":26959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5852:51:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26960,"nodeType":"ExpressionStatement","src":"5852:51:113"},{"expression":{"arguments":[{"id":26964,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26874,"src":"5933:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26965,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26898,"src":"5940:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":26961,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"5910:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":26963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"5910:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":26966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5910:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26967,"nodeType":"ExpressionStatement","src":"5910:44:113"},{"eventCall":{"arguments":[{"id":26969,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26874,"src":"5997:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26970,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26876,"src":"6004:3:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26971,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26878,"src":"6009:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26972,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26880,"src":"6031:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26968,"name":"CollateralConfigurationChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5380,"src":"5966:30:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256)"}},"id":26973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5966:82:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26974,"nodeType":"EmitStatement","src":"5961:87:113"}]},"documentation":{"id":26872,"nodeType":"StructuredDocumentation","src":"4255:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"7c4e560b","id":26976,"implemented":true,"kind":"function","modifiers":[{"id":26884,"kind":"modifierInvocation","modifierName":{"id":26883,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"4451:20:113"},"nodeType":"ModifierInvocation","src":"4451:20:113"}],"name":"configureReserveAsCollateral","nameLocation":"4300:28:113","nodeType":"FunctionDefinition","overrides":{"id":26882,"nodeType":"OverrideSpecifier","overrides":[],"src":"4442:8:113"},"parameters":{"id":26881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26874,"mutability":"mutable","name":"asset","nameLocation":"4342:5:113","nodeType":"VariableDeclaration","scope":26976,"src":"4334:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26873,"name":"address","nodeType":"ElementaryTypeName","src":"4334:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26876,"mutability":"mutable","name":"ltv","nameLocation":"4361:3:113","nodeType":"VariableDeclaration","scope":26976,"src":"4353:11:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26875,"name":"uint256","nodeType":"ElementaryTypeName","src":"4353:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26878,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"4378:20:113","nodeType":"VariableDeclaration","scope":26976,"src":"4370:28:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26877,"name":"uint256","nodeType":"ElementaryTypeName","src":"4370:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26880,"mutability":"mutable","name":"liquidationBonus","nameLocation":"4412:16:113","nodeType":"VariableDeclaration","scope":26976,"src":"4404:24:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26879,"name":"uint256","nodeType":"ElementaryTypeName","src":"4404:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4328:104:113"},"returnParameters":{"id":26885,"nodeType":"ParameterList","parameters":[],"src":"4472:0:113"},"scope":28229,"src":"4291:1762:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5621],"body":{"id":27026,"nodeType":"Block","src":"6212:365:113","statements":[{"assignments":[26991],"declarations":[{"constant":false,"id":26991,"mutability":"mutable","name":"currentConfig","nameLocation":"6259:13:113","nodeType":"VariableDeclaration","scope":27026,"src":"6218:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":26990,"nodeType":"UserDefinedTypeName","pathNode":{"id":26989,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"6218:33:113"},"referencedDeclaration":23912,"src":"6218:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":26996,"initialValue":{"arguments":[{"id":26994,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26979,"src":"6298:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26992,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"6275:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":26993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"6275:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":26995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6275:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"6218:86:113"},{"condition":{"id":26997,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26981,"src":"6314:7:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27007,"nodeType":"IfStatement","src":"6310:102:113","trueBody":{"id":27006,"nodeType":"Block","src":"6323:89:113","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26999,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26991,"src":"6339:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":13410,"src":"6339:33:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":27001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6339:35:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27002,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"6376:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BORROWING_NOT_ENABLED","nodeType":"MemberAccess","referencedDeclaration":14638,"src":"6376:28:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26998,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6331:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6331:74:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27005,"nodeType":"ExpressionStatement","src":"6331:74:113"}]}},{"expression":{"arguments":[{"id":27011,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26981,"src":"6461:7:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":27008,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26991,"src":"6417:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setStableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":13441,"src":"6417:43:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":27012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6417:52:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27013,"nodeType":"ExpressionStatement","src":"6417:52:113"},{"expression":{"arguments":[{"id":27017,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26979,"src":"6498:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27018,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26991,"src":"6505:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27014,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"6475:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"6475:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6475:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27020,"nodeType":"ExpressionStatement","src":"6475:44:113"},{"eventCall":{"arguments":[{"id":27022,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26979,"src":"6557:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27023,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26981,"src":"6564:7:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27021,"name":"ReserveStableRateBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5387,"src":"6530:26:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":27024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6530:42:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27025,"nodeType":"EmitStatement","src":"6525:47:113"}]},"documentation":{"id":26977,"nodeType":"StructuredDocumentation","src":"6057:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"8a751a60","id":27027,"implemented":true,"kind":"function","modifiers":[{"id":26985,"kind":"modifierInvocation","modifierName":{"id":26984,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"6191:20:113"},"nodeType":"ModifierInvocation","src":"6191:20:113"}],"name":"setReserveStableRateBorrowing","nameLocation":"6102:29:113","nodeType":"FunctionDefinition","overrides":{"id":26983,"nodeType":"OverrideSpecifier","overrides":[],"src":"6182:8:113"},"parameters":{"id":26982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26979,"mutability":"mutable","name":"asset","nameLocation":"6145:5:113","nodeType":"VariableDeclaration","scope":27027,"src":"6137:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26978,"name":"address","nodeType":"ElementaryTypeName","src":"6137:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26981,"mutability":"mutable","name":"enabled","nameLocation":"6161:7:113","nodeType":"VariableDeclaration","scope":27027,"src":"6156:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26980,"name":"bool","nodeType":"ElementaryTypeName","src":"6156:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6131:41:113"},"returnParameters":{"id":26986,"nodeType":"ParameterList","parameters":[],"src":"6212:0:113"},"scope":28229,"src":"6093:484:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5629],"body":{"id":27066,"nodeType":"Block","src":"6729:242:113","statements":[{"assignments":[27042],"declarations":[{"constant":false,"id":27042,"mutability":"mutable","name":"currentConfig","nameLocation":"6776:13:113","nodeType":"VariableDeclaration","scope":27066,"src":"6735:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27041,"nodeType":"UserDefinedTypeName","pathNode":{"id":27040,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"6735:33:113"},"referencedDeclaration":23912,"src":"6735:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27047,"initialValue":{"arguments":[{"id":27045,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27030,"src":"6815:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27043,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"6792:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"6792:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6792:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"6735:86:113"},{"expression":{"arguments":[{"id":27051,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27032,"src":"6862:7:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":27048,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27042,"src":"6828:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27050,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":13855,"src":"6828:33:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":27052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6828:42:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27053,"nodeType":"ExpressionStatement","src":"6828:42:113"},{"expression":{"arguments":[{"id":27057,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27030,"src":"6899:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27058,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27042,"src":"6906:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27054,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"6876:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"6876:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6876:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27060,"nodeType":"ExpressionStatement","src":"6876:44:113"},{"eventCall":{"arguments":[{"id":27062,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27030,"src":"6951:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27063,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27032,"src":"6958:7:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27061,"name":"ReserveFlashLoaning","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5369,"src":"6931:19:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":27064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6931:35:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27065,"nodeType":"EmitStatement","src":"6926:40:113"}]},"documentation":{"id":27028,"nodeType":"StructuredDocumentation","src":"6581:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"f213ef0e","id":27067,"implemented":true,"kind":"function","modifiers":[{"id":27036,"kind":"modifierInvocation","modifierName":{"id":27035,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"6708:20:113"},"nodeType":"ModifierInvocation","src":"6708:20:113"}],"name":"setReserveFlashLoaning","nameLocation":"6626:22:113","nodeType":"FunctionDefinition","overrides":{"id":27034,"nodeType":"OverrideSpecifier","overrides":[],"src":"6699:8:113"},"parameters":{"id":27033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27030,"mutability":"mutable","name":"asset","nameLocation":"6662:5:113","nodeType":"VariableDeclaration","scope":27067,"src":"6654:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27029,"name":"address","nodeType":"ElementaryTypeName","src":"6654:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27032,"mutability":"mutable","name":"enabled","nameLocation":"6678:7:113","nodeType":"VariableDeclaration","scope":27067,"src":"6673:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27031,"name":"bool","nodeType":"ElementaryTypeName","src":"6673:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6648:41:113"},"returnParameters":{"id":27037,"nodeType":"ParameterList","parameters":[],"src":"6729:0:113"},"scope":28229,"src":"6617:354:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5637],"body":{"id":27113,"nodeType":"Block","src":"7097:266:113","statements":[{"condition":{"id":27079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7107:7:113","subExpression":{"id":27078,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27072,"src":"7108:6:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27084,"nodeType":"IfStatement","src":"7103:37:113","trueBody":{"expression":{"arguments":[{"id":27081,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27070,"src":"7134:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27080,"name":"_checkNoSuppliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28070,"src":"7116:17:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":27082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7116:24:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27083,"nodeType":"ExpressionStatement","src":"7116:24:113"}},{"assignments":[27089],"declarations":[{"constant":false,"id":27089,"mutability":"mutable","name":"currentConfig","nameLocation":"7187:13:113","nodeType":"VariableDeclaration","scope":27113,"src":"7146:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27088,"nodeType":"UserDefinedTypeName","pathNode":{"id":27087,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"7146:33:113"},"referencedDeclaration":23912,"src":"7146:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27094,"initialValue":{"arguments":[{"id":27092,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27070,"src":"7226:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27090,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"7203:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"7203:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7203:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"7146:86:113"},{"expression":{"arguments":[{"id":27098,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27072,"src":"7262:6:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":27095,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27089,"src":"7238:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setActive","nodeType":"MemberAccess","referencedDeclaration":13141,"src":"7238:23:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":27099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7238:31:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27100,"nodeType":"ExpressionStatement","src":"7238:31:113"},{"expression":{"arguments":[{"id":27104,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27070,"src":"7298:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27105,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27089,"src":"7305:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27101,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"7275:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"7275:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7275:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27107,"nodeType":"ExpressionStatement","src":"7275:44:113"},{"eventCall":{"arguments":[{"id":27109,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27070,"src":"7344:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27110,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27072,"src":"7351:6:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27108,"name":"ReserveActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"7330:13:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":27111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7330:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27112,"nodeType":"EmitStatement","src":"7325:33:113"}]},"documentation":{"id":27068,"nodeType":"StructuredDocumentation","src":"6975:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"b736aaeb","id":27114,"implemented":true,"kind":"function","modifiers":[{"id":27076,"kind":"modifierInvocation","modifierName":{"id":27075,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26639,"src":"7083:13:113"},"nodeType":"ModifierInvocation","src":"7083:13:113"}],"name":"setReserveActive","nameLocation":"7020:16:113","nodeType":"FunctionDefinition","overrides":{"id":27074,"nodeType":"OverrideSpecifier","overrides":[],"src":"7074:8:113"},"parameters":{"id":27073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27070,"mutability":"mutable","name":"asset","nameLocation":"7045:5:113","nodeType":"VariableDeclaration","scope":27114,"src":"7037:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27069,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27072,"mutability":"mutable","name":"active","nameLocation":"7057:6:113","nodeType":"VariableDeclaration","scope":27114,"src":"7052:11:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27071,"name":"bool","nodeType":"ElementaryTypeName","src":"7052:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7036:28:113"},"returnParameters":{"id":27077,"nodeType":"ParameterList","parameters":[],"src":"7097:0:113"},"scope":28229,"src":"7011:352:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5645],"body":{"id":27153,"nodeType":"Block","src":"7496:223:113","statements":[{"assignments":[27129],"declarations":[{"constant":false,"id":27129,"mutability":"mutable","name":"currentConfig","nameLocation":"7543:13:113","nodeType":"VariableDeclaration","scope":27153,"src":"7502:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27128,"nodeType":"UserDefinedTypeName","pathNode":{"id":27127,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"7502:33:113"},"referencedDeclaration":23912,"src":"7502:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27134,"initialValue":{"arguments":[{"id":27132,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27117,"src":"7582:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27130,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"7559:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"7559:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7559:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"7502:86:113"},{"expression":{"arguments":[{"id":27138,"name":"freeze","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27119,"src":"7618:6:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":27135,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27129,"src":"7594:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFrozen","nodeType":"MemberAccess","referencedDeclaration":13191,"src":"7594:23:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":27139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7594:31:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27140,"nodeType":"ExpressionStatement","src":"7594:31:113"},{"expression":{"arguments":[{"id":27144,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27117,"src":"7654:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27145,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27129,"src":"7661:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27141,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"7631:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"7631:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7631:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27147,"nodeType":"ExpressionStatement","src":"7631:44:113"},{"eventCall":{"arguments":[{"id":27149,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27117,"src":"7700:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27150,"name":"freeze","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27119,"src":"7707:6:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27148,"name":"ReserveFrozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5401,"src":"7686:13:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":27151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7686:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27152,"nodeType":"EmitStatement","src":"7681:33:113"}]},"documentation":{"id":27115,"nodeType":"StructuredDocumentation","src":"7367:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"96e957c4","id":27154,"implemented":true,"kind":"function","modifiers":[{"id":27123,"kind":"modifierInvocation","modifierName":{"id":27122,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"7475:20:113"},"nodeType":"ModifierInvocation","src":"7475:20:113"}],"name":"setReserveFreeze","nameLocation":"7412:16:113","nodeType":"FunctionDefinition","overrides":{"id":27121,"nodeType":"OverrideSpecifier","overrides":[],"src":"7466:8:113"},"parameters":{"id":27120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27117,"mutability":"mutable","name":"asset","nameLocation":"7437:5:113","nodeType":"VariableDeclaration","scope":27154,"src":"7429:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27116,"name":"address","nodeType":"ElementaryTypeName","src":"7429:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27119,"mutability":"mutable","name":"freeze","nameLocation":"7449:6:113","nodeType":"VariableDeclaration","scope":27154,"src":"7444:11:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27118,"name":"bool","nodeType":"ElementaryTypeName","src":"7444:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7428:28:113"},"returnParameters":{"id":27124,"nodeType":"ParameterList","parameters":[],"src":"7496:0:113"},"scope":28229,"src":"7403:316:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5653],"body":{"id":27193,"nodeType":"Block","src":"7876:261:113","statements":[{"assignments":[27169],"declarations":[{"constant":false,"id":27169,"mutability":"mutable","name":"currentConfig","nameLocation":"7923:13:113","nodeType":"VariableDeclaration","scope":27193,"src":"7882:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27168,"nodeType":"UserDefinedTypeName","pathNode":{"id":27167,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"7882:33:113"},"referencedDeclaration":23912,"src":"7882:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27174,"initialValue":{"arguments":[{"id":27172,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27157,"src":"7962:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27170,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"7939:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"7939:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7939:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"7882:86:113"},{"expression":{"arguments":[{"id":27178,"name":"borrowable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27159,"src":"8013:10:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":27175,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27169,"src":"7974:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowableInIsolation","nodeType":"MemberAccess","referencedDeclaration":13291,"src":"7974:38:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":27179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7974:50:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27180,"nodeType":"ExpressionStatement","src":"7974:50:113"},{"expression":{"arguments":[{"id":27184,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27157,"src":"8053:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27185,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27169,"src":"8060:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27181,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"8030:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"8030:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8030:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27187,"nodeType":"ExpressionStatement","src":"8030:44:113"},{"eventCall":{"arguments":[{"id":27189,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27157,"src":"8114:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27190,"name":"borrowable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27159,"src":"8121:10:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27188,"name":"BorrowableInIsolationChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5564,"src":"8085:28:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":27191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8085:47:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27192,"nodeType":"EmitStatement","src":"8080:52:113"}]},"documentation":{"id":27155,"nodeType":"StructuredDocumentation","src":"7723:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"38ae0cc3","id":27194,"implemented":true,"kind":"function","modifiers":[{"id":27163,"kind":"modifierInvocation","modifierName":{"id":27162,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"7855:20:113"},"nodeType":"ModifierInvocation","src":"7855:20:113"}],"name":"setBorrowableInIsolation","nameLocation":"7768:24:113","nodeType":"FunctionDefinition","overrides":{"id":27161,"nodeType":"OverrideSpecifier","overrides":[],"src":"7846:8:113"},"parameters":{"id":27160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27157,"mutability":"mutable","name":"asset","nameLocation":"7806:5:113","nodeType":"VariableDeclaration","scope":27194,"src":"7798:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27156,"name":"address","nodeType":"ElementaryTypeName","src":"7798:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27159,"mutability":"mutable","name":"borrowable","nameLocation":"7822:10:113","nodeType":"VariableDeclaration","scope":27194,"src":"7817:15:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27158,"name":"bool","nodeType":"ElementaryTypeName","src":"7817:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7792:44:113"},"returnParameters":{"id":27164,"nodeType":"ParameterList","parameters":[],"src":"7876:0:113"},"scope":28229,"src":"7759:378:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5661],"body":{"id":27233,"nodeType":"Block","src":"8271:223:113","statements":[{"assignments":[27209],"declarations":[{"constant":false,"id":27209,"mutability":"mutable","name":"currentConfig","nameLocation":"8318:13:113","nodeType":"VariableDeclaration","scope":27233,"src":"8277:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27208,"nodeType":"UserDefinedTypeName","pathNode":{"id":27207,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"8277:33:113"},"referencedDeclaration":23912,"src":"8277:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27214,"initialValue":{"arguments":[{"id":27212,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27197,"src":"8357:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27210,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"8334:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"8334:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8334:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"8277:86:113"},{"expression":{"arguments":[{"id":27218,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27199,"src":"8393:6:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":27215,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27209,"src":"8369:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setPaused","nodeType":"MemberAccess","referencedDeclaration":13241,"src":"8369:23:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":27219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8369:31:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27220,"nodeType":"ExpressionStatement","src":"8369:31:113"},{"expression":{"arguments":[{"id":27224,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27197,"src":"8429:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27225,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27209,"src":"8436:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27221,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"8406:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"8406:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8406:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27227,"nodeType":"ExpressionStatement","src":"8406:44:113"},{"eventCall":{"arguments":[{"id":27229,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27197,"src":"8475:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27230,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27199,"src":"8482:6:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27228,"name":"ReservePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5408,"src":"8461:13:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":27231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8461:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27232,"nodeType":"EmitStatement","src":"8456:33:113"}]},"documentation":{"id":27195,"nodeType":"StructuredDocumentation","src":"8141:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"48d9fba9","id":27234,"implemented":true,"kind":"function","modifiers":[{"id":27203,"kind":"modifierInvocation","modifierName":{"id":27202,"name":"onlyEmergencyOrPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26655,"src":"8246:24:113"},"nodeType":"ModifierInvocation","src":"8246:24:113"}],"name":"setReservePause","nameLocation":"8186:15:113","nodeType":"FunctionDefinition","overrides":{"id":27201,"nodeType":"OverrideSpecifier","overrides":[],"src":"8237:8:113"},"parameters":{"id":27200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27197,"mutability":"mutable","name":"asset","nameLocation":"8210:5:113","nodeType":"VariableDeclaration","scope":27234,"src":"8202:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27196,"name":"address","nodeType":"ElementaryTypeName","src":"8202:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27199,"mutability":"mutable","name":"paused","nameLocation":"8222:6:113","nodeType":"VariableDeclaration","scope":27234,"src":"8217:11:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27198,"name":"bool","nodeType":"ElementaryTypeName","src":"8217:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8201:28:113"},"returnParameters":{"id":27204,"nodeType":"ParameterList","parameters":[],"src":"8271:0:113"},"scope":28229,"src":"8177:317:113","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5669],"body":{"id":27289,"nodeType":"Block","src":"8652:438:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27246,"name":"newReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27239,"src":"8666:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":27247,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"8686:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":27248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"8686:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8666:52:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27250,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"8720:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":14746,"src":"8720:29:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27245,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8658:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8658:92:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27253,"nodeType":"ExpressionStatement","src":"8658:92:113"},{"assignments":[27258],"declarations":[{"constant":false,"id":27258,"mutability":"mutable","name":"currentConfig","nameLocation":"8797:13:113","nodeType":"VariableDeclaration","scope":27289,"src":"8756:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27257,"nodeType":"UserDefinedTypeName","pathNode":{"id":27256,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"8756:33:113"},"referencedDeclaration":23912,"src":"8756:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27263,"initialValue":{"arguments":[{"id":27261,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27237,"src":"8836:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27259,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"8813:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"8813:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8813:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"8756:86:113"},{"assignments":[27265],"declarations":[{"constant":false,"id":27265,"mutability":"mutable","name":"oldReserveFactor","nameLocation":"8856:16:113","nodeType":"VariableDeclaration","scope":27289,"src":"8848:24:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27264,"name":"uint256","nodeType":"ElementaryTypeName","src":"8848:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27269,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27266,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27258,"src":"8875:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getReserveFactor","nodeType":"MemberAccess","referencedDeclaration":13512,"src":"8875:30:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8875:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8848:59:113"},{"expression":{"arguments":[{"id":27273,"name":"newReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27239,"src":"8944:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27270,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27258,"src":"8913:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setReserveFactor","nodeType":"MemberAccess","referencedDeclaration":13493,"src":"8913:30:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":27274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8913:48:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27275,"nodeType":"ExpressionStatement","src":"8913:48:113"},{"expression":{"arguments":[{"id":27279,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27237,"src":"8990:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27280,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27258,"src":"8997:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27276,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"8967:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"8967:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8967:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27282,"nodeType":"ExpressionStatement","src":"8967:44:113"},{"eventCall":{"arguments":[{"id":27284,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27237,"src":"9043:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27285,"name":"oldReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27265,"src":"9050:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27286,"name":"newReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27239,"src":"9068:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27283,"name":"ReserveFactorChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5422,"src":"9022:20:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":27287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9022:63:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27288,"nodeType":"EmitStatement","src":"9017:68:113"}]},"documentation":{"id":27235,"nodeType":"StructuredDocumentation","src":"8498:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"4b4e6753","id":27290,"implemented":true,"kind":"function","modifiers":[{"id":27243,"kind":"modifierInvocation","modifierName":{"id":27242,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"8631:20:113"},"nodeType":"ModifierInvocation","src":"8631:20:113"}],"name":"setReserveFactor","nameLocation":"8543:16:113","nodeType":"FunctionDefinition","overrides":{"id":27241,"nodeType":"OverrideSpecifier","overrides":[],"src":"8622:8:113"},"parameters":{"id":27240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27237,"mutability":"mutable","name":"asset","nameLocation":"8573:5:113","nodeType":"VariableDeclaration","scope":27290,"src":"8565:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27236,"name":"address","nodeType":"ElementaryTypeName","src":"8565:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27239,"mutability":"mutable","name":"newReserveFactor","nameLocation":"8592:16:113","nodeType":"VariableDeclaration","scope":27290,"src":"8584:24:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27238,"name":"uint256","nodeType":"ElementaryTypeName","src":"8584:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8559:53:113"},"returnParameters":{"id":27244,"nodeType":"ParameterList","parameters":[],"src":"8652:0:113"},"scope":28229,"src":"8534:556:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5771],"body":{"id":27356,"nodeType":"Block","src":"9244:483:113","statements":[{"assignments":[27305],"declarations":[{"constant":false,"id":27305,"mutability":"mutable","name":"currentConfig","nameLocation":"9291:13:113","nodeType":"VariableDeclaration","scope":27356,"src":"9250:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27304,"nodeType":"UserDefinedTypeName","pathNode":{"id":27303,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"9250:33:113"},"referencedDeclaration":23912,"src":"9250:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27310,"initialValue":{"arguments":[{"id":27308,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27293,"src":"9330:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27306,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"9307:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"9307:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9307:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"9250:86:113"},{"assignments":[27312],"declarations":[{"constant":false,"id":27312,"mutability":"mutable","name":"oldDebtCeiling","nameLocation":"9351:14:113","nodeType":"VariableDeclaration","scope":27356,"src":"9343:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27311,"name":"uint256","nodeType":"ElementaryTypeName","src":"9343:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27316,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27313,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27305,"src":"9368:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27314,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":13668,"src":"9368:28:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9368:30:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9343:55:113"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27317,"name":"oldDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27312,"src":"9408:14:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":27318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9426:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9408:19:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27325,"nodeType":"IfStatement","src":"9404:64:113","trueBody":{"id":27324,"nodeType":"Block","src":"9429:39:113","statements":[{"expression":{"arguments":[{"id":27321,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27293,"src":"9455:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27320,"name":"_checkNoSuppliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28070,"src":"9437:17:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":27322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9437:24:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27323,"nodeType":"ExpressionStatement","src":"9437:24:113"}]}},{"expression":{"arguments":[{"id":27329,"name":"newDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27295,"src":"9502:14:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27326,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27305,"src":"9473:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27328,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":13649,"src":"9473:28:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":27330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9473:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27331,"nodeType":"ExpressionStatement","src":"9473:44:113"},{"expression":{"arguments":[{"id":27335,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27293,"src":"9546:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27336,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27305,"src":"9553:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27332,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"9523:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"9523:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9523:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27338,"nodeType":"ExpressionStatement","src":"9523:44:113"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27339,"name":"newDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27295,"src":"9578:14:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":27340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9596:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9578:19:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27349,"nodeType":"IfStatement","src":"9574:80:113","trueBody":{"id":27348,"nodeType":"Block","src":"9599:55:113","statements":[{"expression":{"arguments":[{"id":27345,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27293,"src":"9641:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27342,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"9607:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"resetIsolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":5013,"src":"9607:33:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":27346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9607:40:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27347,"nodeType":"ExpressionStatement","src":"9607:40:113"}]}},{"eventCall":{"arguments":[{"id":27351,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27293,"src":"9684:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27352,"name":"oldDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27312,"src":"9691:14:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27353,"name":"newDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27295,"src":"9707:14:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27350,"name":"DebtCeilingChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"9665:18:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":27354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9665:57:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27355,"nodeType":"EmitStatement","src":"9660:62:113"}]},"documentation":{"id":27291,"nodeType":"StructuredDocumentation","src":"9094:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"aeb4fcc1","id":27357,"implemented":true,"kind":"function","modifiers":[{"id":27299,"kind":"modifierInvocation","modifierName":{"id":27298,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"9223:20:113"},"nodeType":"ModifierInvocation","src":"9223:20:113"}],"name":"setDebtCeiling","nameLocation":"9139:14:113","nodeType":"FunctionDefinition","overrides":{"id":27297,"nodeType":"OverrideSpecifier","overrides":[],"src":"9214:8:113"},"parameters":{"id":27296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27293,"mutability":"mutable","name":"asset","nameLocation":"9167:5:113","nodeType":"VariableDeclaration","scope":27357,"src":"9159:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27292,"name":"address","nodeType":"ElementaryTypeName","src":"9159:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27295,"mutability":"mutable","name":"newDebtCeiling","nameLocation":"9186:14:113","nodeType":"VariableDeclaration","scope":27357,"src":"9178:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27294,"name":"uint256","nodeType":"ElementaryTypeName","src":"9178:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9153:51:113"},"returnParameters":{"id":27300,"nodeType":"ParameterList","parameters":[],"src":"9244:0:113"},"scope":28229,"src":"9130:597:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5779],"body":{"id":27410,"nodeType":"Block","src":"9877:378:113","statements":[{"condition":{"id":27368,"name":"newSiloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27362,"src":"9887:9:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27374,"nodeType":"IfStatement","src":"9883:54:113","trueBody":{"id":27373,"nodeType":"Block","src":"9898:39:113","statements":[{"expression":{"arguments":[{"id":27370,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27360,"src":"9924:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27369,"name":"_checkNoBorrowers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28095,"src":"9906:17:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":27371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9906:24:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27372,"nodeType":"ExpressionStatement","src":"9906:24:113"}]}},{"assignments":[27379],"declarations":[{"constant":false,"id":27379,"mutability":"mutable","name":"currentConfig","nameLocation":"9983:13:113","nodeType":"VariableDeclaration","scope":27410,"src":"9942:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27378,"nodeType":"UserDefinedTypeName","pathNode":{"id":27377,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"9942:33:113"},"referencedDeclaration":23912,"src":"9942:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27384,"initialValue":{"arguments":[{"id":27382,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27360,"src":"10022:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27380,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"9999:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"9999:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9999:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"9942:86:113"},{"assignments":[27386],"declarations":[{"constant":false,"id":27386,"mutability":"mutable","name":"oldSiloed","nameLocation":"10040:9:113","nodeType":"VariableDeclaration","scope":27410,"src":"10035:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27385,"name":"bool","nodeType":"ElementaryTypeName","src":"10035:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":27390,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27387,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27379,"src":"10052:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":13360,"src":"10052:32:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":27389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10052:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"10035:51:113"},{"expression":{"arguments":[{"id":27394,"name":"newSiloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27362,"src":"10126:9:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":27391,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27379,"src":"10093:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":13341,"src":"10093:32:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":27395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10093:43:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27396,"nodeType":"ExpressionStatement","src":"10093:43:113"},{"expression":{"arguments":[{"id":27400,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27360,"src":"10166:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27401,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27379,"src":"10173:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27397,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"10143:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"10143:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10143:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27403,"nodeType":"ExpressionStatement","src":"10143:44:113"},{"eventCall":{"arguments":[{"id":27405,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27360,"src":"10222:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27406,"name":"oldSiloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27386,"src":"10229:9:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":27407,"name":"newSiloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27362,"src":"10240:9:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27404,"name":"SiloedBorrowingChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5536,"src":"10199:22:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$_t_bool_$returns$__$","typeString":"function (address,bool,bool)"}},"id":27408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10199:51:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27409,"nodeType":"EmitStatement","src":"10194:56:113"}]},"documentation":{"id":27358,"nodeType":"StructuredDocumentation","src":"9731:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"a7fa83b7","id":27411,"implemented":true,"kind":"function","modifiers":[{"id":27366,"kind":"modifierInvocation","modifierName":{"id":27365,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"9856:20:113"},"nodeType":"ModifierInvocation","src":"9856:20:113"}],"name":"setSiloedBorrowing","nameLocation":"9776:18:113","nodeType":"FunctionDefinition","overrides":{"id":27364,"nodeType":"OverrideSpecifier","overrides":[],"src":"9847:8:113"},"parameters":{"id":27363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27360,"mutability":"mutable","name":"asset","nameLocation":"9808:5:113","nodeType":"VariableDeclaration","scope":27411,"src":"9800:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27359,"name":"address","nodeType":"ElementaryTypeName","src":"9800:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27362,"mutability":"mutable","name":"newSiloed","nameLocation":"9824:9:113","nodeType":"VariableDeclaration","scope":27411,"src":"9819:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27361,"name":"bool","nodeType":"ElementaryTypeName","src":"9819:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9794:43:113"},"returnParameters":{"id":27367,"nodeType":"ParameterList","parameters":[],"src":"9877:0:113"},"scope":28229,"src":"9767:488:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5691],"body":{"id":27457,"nodeType":"Block","src":"10405:312:113","statements":[{"assignments":[27426],"declarations":[{"constant":false,"id":27426,"mutability":"mutable","name":"currentConfig","nameLocation":"10452:13:113","nodeType":"VariableDeclaration","scope":27457,"src":"10411:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27425,"nodeType":"UserDefinedTypeName","pathNode":{"id":27424,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"10411:33:113"},"referencedDeclaration":23912,"src":"10411:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27431,"initialValue":{"arguments":[{"id":27429,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27414,"src":"10491:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27427,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"10468:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"10468:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10468:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"10411:86:113"},{"assignments":[27433],"declarations":[{"constant":false,"id":27433,"mutability":"mutable","name":"oldBorrowCap","nameLocation":"10511:12:113","nodeType":"VariableDeclaration","scope":27457,"src":"10503:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27432,"name":"uint256","nodeType":"ElementaryTypeName","src":"10503:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27437,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27434,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27426,"src":"10526:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27435,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowCap","nodeType":"MemberAccess","referencedDeclaration":13564,"src":"10526:26:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10526:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10503:51:113"},{"expression":{"arguments":[{"id":27441,"name":"newBorrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27416,"src":"10587:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27438,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27426,"src":"10560:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27440,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowCap","nodeType":"MemberAccess","referencedDeclaration":13545,"src":"10560:26:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":27442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10560:40:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27443,"nodeType":"ExpressionStatement","src":"10560:40:113"},{"expression":{"arguments":[{"id":27447,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27414,"src":"10629:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27448,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27426,"src":"10636:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27444,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"10606:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"10606:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10606:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27450,"nodeType":"ExpressionStatement","src":"10606:44:113"},{"eventCall":{"arguments":[{"id":27452,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27414,"src":"10678:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27453,"name":"oldBorrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27433,"src":"10685:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27454,"name":"newBorrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27416,"src":"10699:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27451,"name":"BorrowCapChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5431,"src":"10661:16:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":27455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10661:51:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27456,"nodeType":"EmitStatement","src":"10656:56:113"}]},"documentation":{"id":27412,"nodeType":"StructuredDocumentation","src":"10259:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"d14a0983","id":27458,"implemented":true,"kind":"function","modifiers":[{"id":27420,"kind":"modifierInvocation","modifierName":{"id":27419,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"10384:20:113"},"nodeType":"ModifierInvocation","src":"10384:20:113"}],"name":"setBorrowCap","nameLocation":"10304:12:113","nodeType":"FunctionDefinition","overrides":{"id":27418,"nodeType":"OverrideSpecifier","overrides":[],"src":"10375:8:113"},"parameters":{"id":27417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27414,"mutability":"mutable","name":"asset","nameLocation":"10330:5:113","nodeType":"VariableDeclaration","scope":27458,"src":"10322:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27413,"name":"address","nodeType":"ElementaryTypeName","src":"10322:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27416,"mutability":"mutable","name":"newBorrowCap","nameLocation":"10349:12:113","nodeType":"VariableDeclaration","scope":27458,"src":"10341:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27415,"name":"uint256","nodeType":"ElementaryTypeName","src":"10341:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10316:49:113"},"returnParameters":{"id":27421,"nodeType":"ParameterList","parameters":[],"src":"10405:0:113"},"scope":28229,"src":"10295:422:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5699],"body":{"id":27504,"nodeType":"Block","src":"10867:312:113","statements":[{"assignments":[27473],"declarations":[{"constant":false,"id":27473,"mutability":"mutable","name":"currentConfig","nameLocation":"10914:13:113","nodeType":"VariableDeclaration","scope":27504,"src":"10873:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27472,"nodeType":"UserDefinedTypeName","pathNode":{"id":27471,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"10873:33:113"},"referencedDeclaration":23912,"src":"10873:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27478,"initialValue":{"arguments":[{"id":27476,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27461,"src":"10953:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27474,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"10930:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"10930:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10930:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"10873:86:113"},{"assignments":[27480],"declarations":[{"constant":false,"id":27480,"mutability":"mutable","name":"oldSupplyCap","nameLocation":"10973:12:113","nodeType":"VariableDeclaration","scope":27504,"src":"10965:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27479,"name":"uint256","nodeType":"ElementaryTypeName","src":"10965:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27484,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27481,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27473,"src":"10988:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27482,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSupplyCap","nodeType":"MemberAccess","referencedDeclaration":13616,"src":"10988:26:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10988:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10965:51:113"},{"expression":{"arguments":[{"id":27488,"name":"newSupplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27463,"src":"11049:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27485,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27473,"src":"11022:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setSupplyCap","nodeType":"MemberAccess","referencedDeclaration":13597,"src":"11022:26:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":27489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11022:40:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27490,"nodeType":"ExpressionStatement","src":"11022:40:113"},{"expression":{"arguments":[{"id":27494,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27461,"src":"11091:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27495,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27473,"src":"11098:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27491,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"11068:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"11068:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11068:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27497,"nodeType":"ExpressionStatement","src":"11068:44:113"},{"eventCall":{"arguments":[{"id":27499,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27461,"src":"11140:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27500,"name":"oldSupplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27480,"src":"11147:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27501,"name":"newSupplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27463,"src":"11161:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27498,"name":"SupplyCapChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5440,"src":"11123:16:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":27502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11123:51:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27503,"nodeType":"EmitStatement","src":"11118:56:113"}]},"documentation":{"id":27459,"nodeType":"StructuredDocumentation","src":"10721:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"571f03e5","id":27505,"implemented":true,"kind":"function","modifiers":[{"id":27467,"kind":"modifierInvocation","modifierName":{"id":27466,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"10846:20:113"},"nodeType":"ModifierInvocation","src":"10846:20:113"}],"name":"setSupplyCap","nameLocation":"10766:12:113","nodeType":"FunctionDefinition","overrides":{"id":27465,"nodeType":"OverrideSpecifier","overrides":[],"src":"10837:8:113"},"parameters":{"id":27464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27461,"mutability":"mutable","name":"asset","nameLocation":"10792:5:113","nodeType":"VariableDeclaration","scope":27505,"src":"10784:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27460,"name":"address","nodeType":"ElementaryTypeName","src":"10784:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27463,"mutability":"mutable","name":"newSupplyCap","nameLocation":"10811:12:113","nodeType":"VariableDeclaration","scope":27505,"src":"10803:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27462,"name":"uint256","nodeType":"ElementaryTypeName","src":"10803:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10778:49:113"},"returnParameters":{"id":27468,"nodeType":"ParameterList","parameters":[],"src":"10867:0:113"},"scope":28229,"src":"10757:422:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5707],"body":{"id":27560,"nodeType":"Block","src":"11336:425:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27517,"name":"newFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27510,"src":"11350:6:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":27518,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"11360:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":27519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"11360:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11350:42:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27521,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"11394:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LIQUIDATION_PROTOCOL_FEE","nodeType":"MemberAccess","referencedDeclaration":14755,"src":"11394:39:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27516,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11342:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11342:92:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27524,"nodeType":"ExpressionStatement","src":"11342:92:113"},{"assignments":[27529],"declarations":[{"constant":false,"id":27529,"mutability":"mutable","name":"currentConfig","nameLocation":"11481:13:113","nodeType":"VariableDeclaration","scope":27560,"src":"11440:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27528,"nodeType":"UserDefinedTypeName","pathNode":{"id":27527,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"11440:33:113"},"referencedDeclaration":23912,"src":"11440:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27534,"initialValue":{"arguments":[{"id":27532,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27508,"src":"11520:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27530,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"11497:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"11497:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11497:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"11440:86:113"},{"assignments":[27536],"declarations":[{"constant":false,"id":27536,"mutability":"mutable","name":"oldFee","nameLocation":"11540:6:113","nodeType":"VariableDeclaration","scope":27560,"src":"11532:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27535,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27540,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27537,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27529,"src":"11549:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":13720,"src":"11549:39:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11549:41:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11532:58:113"},{"expression":{"arguments":[{"id":27544,"name":"newFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27510,"src":"11636:6:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27541,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27529,"src":"11596:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":13701,"src":"11596:39:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":27545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11596:47:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27546,"nodeType":"ExpressionStatement","src":"11596:47:113"},{"expression":{"arguments":[{"id":27550,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27508,"src":"11672:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27551,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27529,"src":"11679:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27547,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"11649:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"11649:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11649:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27553,"nodeType":"ExpressionStatement","src":"11649:44:113"},{"eventCall":{"arguments":[{"id":27555,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27508,"src":"11734:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27556,"name":"oldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27536,"src":"11741:6:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27557,"name":"newFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27510,"src":"11749:6:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27554,"name":"LiquidationProtocolFeeChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5449,"src":"11704:29:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":27558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11704:52:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27559,"nodeType":"EmitStatement","src":"11699:57:113"}]},"documentation":{"id":27506,"nodeType":"StructuredDocumentation","src":"11183:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"26d2cec2","id":27561,"implemented":true,"kind":"function","modifiers":[{"id":27514,"kind":"modifierInvocation","modifierName":{"id":27513,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"11315:20:113"},"nodeType":"ModifierInvocation","src":"11315:20:113"}],"name":"setLiquidationProtocolFee","nameLocation":"11228:25:113","nodeType":"FunctionDefinition","overrides":{"id":27512,"nodeType":"OverrideSpecifier","overrides":[],"src":"11306:8:113"},"parameters":{"id":27511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27508,"mutability":"mutable","name":"asset","nameLocation":"11267:5:113","nodeType":"VariableDeclaration","scope":27561,"src":"11259:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27507,"name":"address","nodeType":"ElementaryTypeName","src":"11259:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27510,"mutability":"mutable","name":"newFee","nameLocation":"11286:6:113","nodeType":"VariableDeclaration","scope":27561,"src":"11278:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27509,"name":"uint256","nodeType":"ElementaryTypeName","src":"11278:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11253:43:113"},"returnParameters":{"id":27515,"nodeType":"ParameterList","parameters":[],"src":"11336:0:113"},"scope":28229,"src":"11219:542:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5739],"body":{"id":27712,"nodeType":"Block","src":"12017:1783:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":27583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27581,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27566,"src":"12031:3:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":27582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12038:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12031:8:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27584,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12041:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14611,"src":"12041:36:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27580,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12023:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12023:55:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27587,"nodeType":"ExpressionStatement","src":"12023:55:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":27591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27589,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27568,"src":"12092:20:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":27590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12116:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12092:25:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27592,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12119:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14611,"src":"12119:36:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27588,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12084:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12084:72:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27595,"nodeType":"ExpressionStatement","src":"12084:72:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":27599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27597,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27566,"src":"12363:3:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":27598,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27568,"src":"12370:20:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"12363:27:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27600,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12392:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14611,"src":"12392:36:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27596,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12355:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12355:74:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27603,"nodeType":"ExpressionStatement","src":"12355:74:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27605,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27570,"src":"12450:16:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":27606,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"12469:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":27607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"12469:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12450:51:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27609,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12509:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14611,"src":"12509:36:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27604,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12435:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12435:116:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27612,"nodeType":"ExpressionStatement","src":"12435:116:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":27619,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27570,"src":"12800:16:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"arguments":[{"id":27616,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27568,"src":"12767:20:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":27615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12759:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":27614,"name":"uint256","nodeType":"ElementaryTypeName","src":"12759:7:113","typeDescriptions":{}}},"id":27617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12759:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":23713,"src":"12759:40:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":27620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12759:58:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":27621,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"12829:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":27622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"12829:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12759:102:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27624,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12869:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14611,"src":"12869:36:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27613,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12744:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12744:167:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27627,"nodeType":"ExpressionStatement","src":"12744:167:113"},{"assignments":[27632],"declarations":[{"constant":false,"id":27632,"mutability":"mutable","name":"reserves","nameLocation":"12935:8:113","nodeType":"VariableDeclaration","scope":27712,"src":"12918:25:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":27630,"name":"address","nodeType":"ElementaryTypeName","src":"12918:7:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":27631,"nodeType":"ArrayTypeName","src":"12918:9:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":27636,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27633,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"12946:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"12946:21:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":27635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12946:23:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"12918:51:113"},{"body":{"id":27687,"nodeType":"Block","src":"13021:409:113","statements":[{"assignments":[27652],"declarations":[{"constant":false,"id":27652,"mutability":"mutable","name":"currentConfig","nameLocation":"13070:13:113","nodeType":"VariableDeclaration","scope":27687,"src":"13029:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27651,"nodeType":"UserDefinedTypeName","pathNode":{"id":27650,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"13029:33:113"},"referencedDeclaration":23912,"src":"13029:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27659,"initialValue":{"arguments":[{"baseExpression":{"id":27655,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27632,"src":"13109:8:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":27657,"indexExpression":{"id":27656,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27638,"src":"13118:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13109:11:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27653,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"13086:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"13086:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13086:35:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"13029:92:113"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27660,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27564,"src":"13133:10:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27661,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27652,"src":"13147:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13824,"src":"13147:30:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13147:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13133:46:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27686,"nodeType":"IfStatement","src":"13129:295:113","trueBody":{"id":27685,"nodeType":"Block","src":"13181:243:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27666,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27566,"src":"13199:3:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27667,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27652,"src":"13205:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27668,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":12954,"src":"13205:20:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13205:22:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13199:28:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27671,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"13229:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14611,"src":"13229:36:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27665,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13191:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13191:75:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27674,"nodeType":"ExpressionStatement","src":"13191:75:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27676,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27568,"src":"13295:20:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27677,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27652,"src":"13318:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27678,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":13006,"src":"13318:37:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13318:39:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13295:62:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27681,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"13369:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":14611,"src":"13369:36:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27675,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13276:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13276:139:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27684,"nodeType":"ExpressionStatement","src":"13276:139:113"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27641,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27638,"src":"12995:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":27642,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27632,"src":"12999:8:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":27643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"12999:15:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12995:19:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27688,"initializationExpression":{"assignments":[27638],"declarations":[{"constant":false,"id":27638,"mutability":"mutable","name":"i","nameLocation":"12988:1:113","nodeType":"VariableDeclaration","scope":27688,"src":"12980:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27637,"name":"uint256","nodeType":"ElementaryTypeName","src":"12980:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27640,"initialValue":{"hexValue":"30","id":27639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12992:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12980:13:113"},"loopExpression":{"expression":{"id":27646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13016:3:113","subExpression":{"id":27645,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27638,"src":"13016:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27647,"nodeType":"ExpressionStatement","src":"13016:3:113"},"nodeType":"ForStatement","src":"12975:455:113"},{"expression":{"arguments":[{"id":27692,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27564,"src":"13472:10:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"id":27695,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27566,"src":"13529:3:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":27696,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27568,"src":"13564:20:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":27697,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27570,"src":"13612:16:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":27698,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27572,"src":"13651:6:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27699,"name":"label","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27574,"src":"13674:5:113","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":27693,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"13490:9:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$24227_$","typeString":"type(library DataTypes)"}},"id":27694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"EModeCategory","nodeType":"MemberAccess","referencedDeclaration":23927,"src":"13490:23:113","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_EModeCategory_$23927_storage_ptr_$","typeString":"type(struct DataTypes.EModeCategory storage pointer)"}},"id":27700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["ltv","liquidationThreshold","liquidationBonus","priceSource","label"],"nodeType":"FunctionCall","src":"13490:198:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}],"expression":{"id":27689,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"13436:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"configureEModeCategory","nodeType":"MemberAccess","referencedDeclaration":4984,"src":"13436:28:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint8_$_t_struct$_EModeCategory_$23927_memory_ptr_$returns$__$","typeString":"function (uint8,struct DataTypes.EModeCategory memory) external"}},"id":27701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13436:258:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27702,"nodeType":"ExpressionStatement","src":"13436:258:113"},{"eventCall":{"arguments":[{"id":27704,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27564,"src":"13724:10:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":27705,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27566,"src":"13736:3:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":27706,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27568,"src":"13741:20:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":27707,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27570,"src":"13763:16:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":27708,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27572,"src":"13781:6:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27709,"name":"label","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27574,"src":"13789:5:113","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":27703,"name":"EModeCategoryAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5482,"src":"13705:18:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (uint8,uint256,uint256,uint256,address,string memory)"}},"id":27710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13705:90:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27711,"nodeType":"EmitStatement","src":"13700:95:113"}]},"documentation":{"id":27562,"nodeType":"StructuredDocumentation","src":"11765:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"c19d61e4","id":27713,"implemented":true,"kind":"function","modifiers":[{"id":27578,"kind":"modifierInvocation","modifierName":{"id":27577,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"11996:20:113"},"nodeType":"ModifierInvocation","src":"11996:20:113"}],"name":"setEModeCategory","nameLocation":"11810:16:113","nodeType":"FunctionDefinition","overrides":{"id":27576,"nodeType":"OverrideSpecifier","overrides":[],"src":"11987:8:113"},"parameters":{"id":27575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27564,"mutability":"mutable","name":"categoryId","nameLocation":"11838:10:113","nodeType":"VariableDeclaration","scope":27713,"src":"11832:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27563,"name":"uint8","nodeType":"ElementaryTypeName","src":"11832:5:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27566,"mutability":"mutable","name":"ltv","nameLocation":"11861:3:113","nodeType":"VariableDeclaration","scope":27713,"src":"11854:10:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":27565,"name":"uint16","nodeType":"ElementaryTypeName","src":"11854:6:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":27568,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"11877:20:113","nodeType":"VariableDeclaration","scope":27713,"src":"11870:27:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":27567,"name":"uint16","nodeType":"ElementaryTypeName","src":"11870:6:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":27570,"mutability":"mutable","name":"liquidationBonus","nameLocation":"11910:16:113","nodeType":"VariableDeclaration","scope":27713,"src":"11903:23:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":27569,"name":"uint16","nodeType":"ElementaryTypeName","src":"11903:6:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":27572,"mutability":"mutable","name":"oracle","nameLocation":"11940:6:113","nodeType":"VariableDeclaration","scope":27713,"src":"11932:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27571,"name":"address","nodeType":"ElementaryTypeName","src":"11932:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27574,"mutability":"mutable","name":"label","nameLocation":"11968:5:113","nodeType":"VariableDeclaration","scope":27713,"src":"11952:21:113","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":27573,"name":"string","nodeType":"ElementaryTypeName","src":"11952:6:113","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"11826:151:113"},"returnParameters":{"id":27579,"nodeType":"ParameterList","parameters":[],"src":"12017:0:113"},"scope":28229,"src":"11801:1999:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5723],"body":{"id":27788,"nodeType":"Block","src":"13958:630:113","statements":[{"assignments":[27728],"declarations":[{"constant":false,"id":27728,"mutability":"mutable","name":"currentConfig","nameLocation":"14005:13:113","nodeType":"VariableDeclaration","scope":27788,"src":"13964:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27727,"nodeType":"UserDefinedTypeName","pathNode":{"id":27726,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"13964:33:113"},"referencedDeclaration":23912,"src":"13964:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27733,"initialValue":{"arguments":[{"id":27731,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27716,"src":"14044:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27729,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"14021:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"14021:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14021:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"13964:86:113"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":27736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27734,"name":"newCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27718,"src":"14061:13:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":27735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14078:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14061:18:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27759,"nodeType":"IfStatement","src":"14057:284:113","trueBody":{"id":27758,"nodeType":"Block","src":"14081:260:113","statements":[{"assignments":[27741],"declarations":[{"constant":false,"id":27741,"mutability":"mutable","name":"categoryData","nameLocation":"14120:12:113","nodeType":"VariableDeclaration","scope":27758,"src":"14089:43:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":27740,"nodeType":"UserDefinedTypeName","pathNode":{"id":27739,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"14089:23:113"},"referencedDeclaration":23927,"src":"14089:23:113","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"id":27746,"initialValue":{"arguments":[{"id":27744,"name":"newCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27718,"src":"14162:13:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":27742,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"14135:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategoryData","nodeType":"MemberAccess","referencedDeclaration":4993,"src":"14135:26:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint8_$returns$_t_struct$_EModeCategory_$23927_memory_ptr_$","typeString":"function (uint8) view external returns (struct DataTypes.EModeCategory memory)"}},"id":27745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14135:41:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"nodeType":"VariableDeclarationStatement","src":"14089:87:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27748,"name":"categoryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27741,"src":"14201:12:113","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"id":27749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":23920,"src":"14201:33:113","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27750,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27728,"src":"14237:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27751,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":13006,"src":"14237:37:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14237:39:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14201:75:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27754,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"14286:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_ASSIGNMENT","nodeType":"MemberAccess","referencedDeclaration":14599,"src":"14286:40:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27747,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14184:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14184:150:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27757,"nodeType":"ExpressionStatement","src":"14184:150:113"}]}},{"assignments":[27761],"declarations":[{"constant":false,"id":27761,"mutability":"mutable","name":"oldCategoryId","nameLocation":"14354:13:113","nodeType":"VariableDeclaration","scope":27788,"src":"14346:21:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27760,"name":"uint256","nodeType":"ElementaryTypeName","src":"14346:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27765,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27762,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27728,"src":"14370:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27763,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13824,"src":"14370:30:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14370:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14346:56:113"},{"expression":{"arguments":[{"id":27769,"name":"newCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27718,"src":"14439:13:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":27766,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27728,"src":"14408:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setEModeCategory","nodeType":"MemberAccess","referencedDeclaration":13805,"src":"14408:30:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":27770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14408:45:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27771,"nodeType":"ExpressionStatement","src":"14408:45:113"},{"expression":{"arguments":[{"id":27775,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27716,"src":"14482:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27776,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27728,"src":"14489:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27772,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"14459:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"14459:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14459:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27778,"nodeType":"ExpressionStatement","src":"14459:44:113"},{"eventCall":{"arguments":[{"id":27780,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27716,"src":"14540:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":27783,"name":"oldCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27761,"src":"14553:13:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14547:5:113","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":27781,"name":"uint8","nodeType":"ElementaryTypeName","src":"14547:5:113","typeDescriptions":{}}},"id":27784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14547:20:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":27785,"name":"newCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27718,"src":"14569:13:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":27779,"name":"EModeAssetCategoryChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5467,"src":"14514:25:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint8_$_t_uint8_$returns$__$","typeString":"function (address,uint8,uint8)"}},"id":27786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14514:69:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27787,"nodeType":"EmitStatement","src":"14509:74:113"}]},"documentation":{"id":27714,"nodeType":"StructuredDocumentation","src":"13804:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"d4fe3f99","id":27789,"implemented":true,"kind":"function","modifiers":[{"id":27722,"kind":"modifierInvocation","modifierName":{"id":27721,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"13937:20:113"},"nodeType":"ModifierInvocation","src":"13937:20:113"}],"name":"setAssetEModeCategory","nameLocation":"13849:21:113","nodeType":"FunctionDefinition","overrides":{"id":27720,"nodeType":"OverrideSpecifier","overrides":[],"src":"13928:8:113"},"parameters":{"id":27719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27716,"mutability":"mutable","name":"asset","nameLocation":"13884:5:113","nodeType":"VariableDeclaration","scope":27789,"src":"13876:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27715,"name":"address","nodeType":"ElementaryTypeName","src":"13876:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27718,"mutability":"mutable","name":"newCategoryId","nameLocation":"13901:13:113","nodeType":"VariableDeclaration","scope":27789,"src":"13895:19:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27717,"name":"uint8","nodeType":"ElementaryTypeName","src":"13895:5:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"13870:48:113"},"returnParameters":{"id":27723,"nodeType":"ParameterList","parameters":[],"src":"13958:0:113"},"scope":28229,"src":"13840:748:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5715],"body":{"id":27835,"nodeType":"Block","src":"14750:354:113","statements":[{"assignments":[27804],"declarations":[{"constant":false,"id":27804,"mutability":"mutable","name":"currentConfig","nameLocation":"14797:13:113","nodeType":"VariableDeclaration","scope":27835,"src":"14756:54:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":27803,"nodeType":"UserDefinedTypeName","pathNode":{"id":27802,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"14756:33:113"},"referencedDeclaration":23912,"src":"14756:33:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":27809,"initialValue":{"arguments":[{"id":27807,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27792,"src":"14836:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27805,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"14813:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4889,"src":"14813:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":27808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14813:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"14756:86:113"},{"assignments":[27811],"declarations":[{"constant":false,"id":27811,"mutability":"mutable","name":"oldUnbackedMintCap","nameLocation":"14856:18:113","nodeType":"VariableDeclaration","scope":27835,"src":"14848:26:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27810,"name":"uint256","nodeType":"ElementaryTypeName","src":"14848:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27815,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27812,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27804,"src":"14877:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27813,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":13772,"src":"14877:32:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":27814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14877:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14848:63:113"},{"expression":{"arguments":[{"id":27819,"name":"newUnbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27794,"src":"14950:18:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27816,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27804,"src":"14917:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":27818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":13753,"src":"14917:32:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":27820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14917:52:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27821,"nodeType":"ExpressionStatement","src":"14917:52:113"},{"expression":{"arguments":[{"id":27825,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27792,"src":"14998:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27826,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27804,"src":"15005:13:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":27822,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"14975:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4880,"src":"14975:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":27827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14975:44:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27828,"nodeType":"ExpressionStatement","src":"14975:44:113"},{"eventCall":{"arguments":[{"id":27830,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27792,"src":"15053:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27831,"name":"oldUnbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27811,"src":"15060:18:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27832,"name":"newUnbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27794,"src":"15080:18:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27829,"name":"UnbackedMintCapChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5458,"src":"15030:22:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":27833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15030:69:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27834,"nodeType":"EmitStatement","src":"15025:74:113"}]},"documentation":{"id":27790,"nodeType":"StructuredDocumentation","src":"14592:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"145f5892","id":27836,"implemented":true,"kind":"function","modifiers":[{"id":27798,"kind":"modifierInvocation","modifierName":{"id":27797,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"14729:20:113"},"nodeType":"ModifierInvocation","src":"14729:20:113"}],"name":"setUnbackedMintCap","nameLocation":"14637:18:113","nodeType":"FunctionDefinition","overrides":{"id":27796,"nodeType":"OverrideSpecifier","overrides":[],"src":"14720:8:113"},"parameters":{"id":27795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27792,"mutability":"mutable","name":"asset","nameLocation":"14669:5:113","nodeType":"VariableDeclaration","scope":27836,"src":"14661:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27791,"name":"address","nodeType":"ElementaryTypeName","src":"14661:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27794,"mutability":"mutable","name":"newUnbackedMintCap","nameLocation":"14688:18:113","nodeType":"VariableDeclaration","scope":27836,"src":"14680:26:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27793,"name":"uint256","nodeType":"ElementaryTypeName","src":"14680:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14655:55:113"},"returnParameters":{"id":27799,"nodeType":"ParameterList","parameters":[],"src":"14750:0:113"},"scope":28229,"src":"14628:476:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5677],"body":{"id":27875,"nodeType":"Block","src":"15289:331:113","statements":[{"assignments":[27851],"declarations":[{"constant":false,"id":27851,"mutability":"mutable","name":"reserve","nameLocation":"15324:7:113","nodeType":"VariableDeclaration","scope":27875,"src":"15295:36:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":27850,"nodeType":"UserDefinedTypeName","pathNode":{"id":27849,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"15295:21:113"},"referencedDeclaration":23909,"src":"15295:21:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":27856,"initialValue":{"arguments":[{"id":27854,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27839,"src":"15355:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27852,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"15334:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4923,"src":"15334:20:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$23909_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":27855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15334:27:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"15295:66:113"},{"assignments":[27858],"declarations":[{"constant":false,"id":27858,"mutability":"mutable","name":"oldRateStrategyAddress","nameLocation":"15375:22:113","nodeType":"VariableDeclaration","scope":27875,"src":"15367:30:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27857,"name":"address","nodeType":"ElementaryTypeName","src":"15367:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":27861,"initialValue":{"expression":{"id":27859,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27851,"src":"15400:7:113","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":27860,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":23902,"src":"15400:35:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15367:68:113"},{"expression":{"arguments":[{"id":27865,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27839,"src":"15485:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27866,"name":"newRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27841,"src":"15492:22:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27862,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"15441:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveInterestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":4871,"src":"15441:43:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":27867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15441:74:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27868,"nodeType":"ExpressionStatement","src":"15441:74:113"},{"eventCall":{"arguments":[{"id":27870,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27839,"src":"15561:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27871,"name":"oldRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27858,"src":"15568:22:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27872,"name":"newRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27841,"src":"15592:22:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":27869,"name":"ReserveInterestRateStrategyChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5491,"src":"15526:34:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":27873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15526:89:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27874,"nodeType":"EmitStatement","src":"15521:94:113"}]},"documentation":{"id":27837,"nodeType":"StructuredDocumentation","src":"15108:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"1d2118f9","id":27876,"implemented":true,"kind":"function","modifiers":[{"id":27845,"kind":"modifierInvocation","modifierName":{"id":27844,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":26671,"src":"15268:20:113"},"nodeType":"ModifierInvocation","src":"15268:20:113"}],"name":"setReserveInterestRateStrategyAddress","nameLocation":"15153:37:113","nodeType":"FunctionDefinition","overrides":{"id":27843,"nodeType":"OverrideSpecifier","overrides":[],"src":"15259:8:113"},"parameters":{"id":27842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27839,"mutability":"mutable","name":"asset","nameLocation":"15204:5:113","nodeType":"VariableDeclaration","scope":27876,"src":"15196:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27838,"name":"address","nodeType":"ElementaryTypeName","src":"15196:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27841,"mutability":"mutable","name":"newRateStrategyAddress","nameLocation":"15223:22:113","nodeType":"VariableDeclaration","scope":27876,"src":"15215:30:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27840,"name":"address","nodeType":"ElementaryTypeName","src":"15215:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15190:59:113"},"returnParameters":{"id":27846,"nodeType":"ParameterList","parameters":[],"src":"15289:0:113"},"scope":28229,"src":"15144:476:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5683],"body":{"id":27924,"nodeType":"Block","src":"15732:214:113","statements":[{"assignments":[27889],"declarations":[{"constant":false,"id":27889,"mutability":"mutable","name":"reserves","nameLocation":"15755:8:113","nodeType":"VariableDeclaration","scope":27924,"src":"15738:25:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":27887,"name":"address","nodeType":"ElementaryTypeName","src":"15738:7:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":27888,"nodeType":"ArrayTypeName","src":"15738:9:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":27893,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27890,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"15766:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"15766:21:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":27892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15766:23:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"15738:51:113"},{"body":{"id":27922,"nodeType":"Block","src":"15842:100:113","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":27905,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27889,"src":"15854:8:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":27907,"indexExpression":{"id":27906,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27895,"src":"15863:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15854:11:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":27910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15877: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":27909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15869:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27908,"name":"address","nodeType":"ElementaryTypeName","src":"15869:7:113","typeDescriptions":{}}},"id":27911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15869:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15854:25:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27921,"nodeType":"IfStatement","src":"15850:86:113","trueBody":{"id":27920,"nodeType":"Block","src":"15881:55:113","statements":[{"expression":{"arguments":[{"baseExpression":{"id":27914,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27889,"src":"15907:8:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":27916,"indexExpression":{"id":27915,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27895,"src":"15916:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15907:11:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27917,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27879,"src":"15920:6:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27913,"name":"setReservePause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27234,"src":"15891:15:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":27918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15891:36:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27919,"nodeType":"ExpressionStatement","src":"15891:36:113"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27898,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27895,"src":"15816:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":27899,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27889,"src":"15820:8:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":27900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"15820:15:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15816:19:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27923,"initializationExpression":{"assignments":[27895],"declarations":[{"constant":false,"id":27895,"mutability":"mutable","name":"i","nameLocation":"15809:1:113","nodeType":"VariableDeclaration","scope":27923,"src":"15801:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27894,"name":"uint256","nodeType":"ElementaryTypeName","src":"15801:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27897,"initialValue":{"hexValue":"30","id":27896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15813:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15801:13:113"},"loopExpression":{"expression":{"id":27903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15837:3:113","subExpression":{"id":27902,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27895,"src":"15837:1:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27904,"nodeType":"ExpressionStatement","src":"15837:3:113"},"nodeType":"ForStatement","src":"15796:146:113"}]},"documentation":{"id":27877,"nodeType":"StructuredDocumentation","src":"15624:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"7641f3d9","id":27925,"implemented":true,"kind":"function","modifiers":[{"id":27883,"kind":"modifierInvocation","modifierName":{"id":27882,"name":"onlyEmergencyAdmin","nodeType":"IdentifierPath","referencedDeclaration":26647,"src":"15713:18:113"},"nodeType":"ModifierInvocation","src":"15713:18:113"}],"name":"setPoolPause","nameLocation":"15669:12:113","nodeType":"FunctionDefinition","overrides":{"id":27881,"nodeType":"OverrideSpecifier","overrides":[],"src":"15704:8:113"},"parameters":{"id":27880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27879,"mutability":"mutable","name":"paused","nameLocation":"15687:6:113","nodeType":"VariableDeclaration","scope":27925,"src":"15682:11:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27878,"name":"bool","nodeType":"ElementaryTypeName","src":"15682:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15681:13:113"},"returnParameters":{"id":27884,"nodeType":"ParameterList","parameters":[],"src":"15732:0:113"},"scope":28229,"src":"15660:286:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5751],"body":{"id":27960,"nodeType":"Block","src":"16081:330:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27935,"name":"newBridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27928,"src":"16102:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":27936,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"16126:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":27937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"16126:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16102:56:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27939,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"16166:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BRIDGE_PROTOCOL_FEE_INVALID","nodeType":"MemberAccess","referencedDeclaration":14614,"src":"16166:34:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27934,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16087:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16087:119:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27942,"nodeType":"ExpressionStatement","src":"16087:119:113"},{"assignments":[27944],"declarations":[{"constant":false,"id":27944,"mutability":"mutable","name":"oldBridgeProtocolFee","nameLocation":"16220:20:113","nodeType":"VariableDeclaration","scope":27960,"src":"16212:28:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27943,"name":"uint256","nodeType":"ElementaryTypeName","src":"16212:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27948,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27945,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"16243:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BRIDGE_PROTOCOL_FEE","nodeType":"MemberAccess","referencedDeclaration":5031,"src":"16243:25:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":27947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16243:27:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16212:58:113"},{"expression":{"arguments":[{"id":27952,"name":"newBridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27928,"src":"16306:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27949,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"16276:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateBridgeProtocolFee","nodeType":"MemberAccess","referencedDeclaration":4967,"src":"16276:29:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":27953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16276:51:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27954,"nodeType":"ExpressionStatement","src":"16276:51:113"},{"eventCall":{"arguments":[{"id":27956,"name":"oldBridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27944,"src":"16363:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27957,"name":"newBridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27928,"src":"16385:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27955,"name":"BridgeProtocolFeeUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5543,"src":"16338:24:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":27958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16338:68:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27959,"nodeType":"EmitStatement","src":"16333:73:113"}]},"documentation":{"id":27926,"nodeType":"StructuredDocumentation","src":"15950:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"3036b439","id":27961,"implemented":true,"kind":"function","modifiers":[{"id":27932,"kind":"modifierInvocation","modifierName":{"id":27931,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26639,"src":"16067:13:113"},"nodeType":"ModifierInvocation","src":"16067:13:113"}],"name":"updateBridgeProtocolFee","nameLocation":"15995:23:113","nodeType":"FunctionDefinition","overrides":{"id":27930,"nodeType":"OverrideSpecifier","overrides":[],"src":"16058:8:113"},"parameters":{"id":27929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27928,"mutability":"mutable","name":"newBridgeProtocolFee","nameLocation":"16027:20:113","nodeType":"VariableDeclaration","scope":27961,"src":"16019:28:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27927,"name":"uint256","nodeType":"ElementaryTypeName","src":"16019:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16018:30:113"},"returnParameters":{"id":27933,"nodeType":"ParameterList","parameters":[],"src":"16081:0:113"},"scope":28229,"src":"15986:425:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5757],"body":{"id":27999,"nodeType":"Block","src":"16562:395:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27971,"name":"newFlashloanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27964,"src":"16583:24:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":27972,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"16611:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":27973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"16611:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16583:60:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27975,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"16651:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":27976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_INVALID","nodeType":"MemberAccess","referencedDeclaration":14605,"src":"16651:32:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27970,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16568:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16568:121:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27978,"nodeType":"ExpressionStatement","src":"16568:121:113"},{"assignments":[27980],"declarations":[{"constant":false,"id":27980,"mutability":"mutable","name":"oldFlashloanPremiumTotal","nameLocation":"16703:24:113","nodeType":"VariableDeclaration","scope":27999,"src":"16695:32:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":27979,"name":"uint128","nodeType":"ElementaryTypeName","src":"16695:7:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":27984,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27981,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"16730:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_TOTAL","nodeType":"MemberAccess","referencedDeclaration":5025,"src":"16730:29:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":27983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16730:31:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"16695:66:113"},{"expression":{"arguments":[{"id":27988,"name":"newFlashloanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27964,"src":"16797:24:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27989,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"16823:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_TO_PROTOCOL","nodeType":"MemberAccess","referencedDeclaration":5037,"src":"16823:35:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":27991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16823:37:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":27985,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"16767:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":27987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateFlashloanPremiums","nodeType":"MemberAccess","referencedDeclaration":4975,"src":"16767:29:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (uint128,uint128) external"}},"id":27992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16767:94:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27993,"nodeType":"ExpressionStatement","src":"16767:94:113"},{"eventCall":{"arguments":[{"id":27995,"name":"oldFlashloanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27980,"src":"16901:24:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":27996,"name":"newFlashloanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27964,"src":"16927:24:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":27994,"name":"FlashloanPremiumTotalUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5550,"src":"16872:28:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (uint128,uint128)"}},"id":27997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16872:80:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27998,"nodeType":"EmitStatement","src":"16867:85:113"}]},"documentation":{"id":27962,"nodeType":"StructuredDocumentation","src":"16415:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"8a493676","id":28000,"implemented":true,"kind":"function","modifiers":[{"id":27968,"kind":"modifierInvocation","modifierName":{"id":27967,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26639,"src":"16548:13:113"},"nodeType":"ModifierInvocation","src":"16548:13:113"}],"name":"updateFlashloanPremiumTotal","nameLocation":"16460:27:113","nodeType":"FunctionDefinition","overrides":{"id":27966,"nodeType":"OverrideSpecifier","overrides":[],"src":"16539:8:113"},"parameters":{"id":27965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27964,"mutability":"mutable","name":"newFlashloanPremiumTotal","nameLocation":"16501:24:113","nodeType":"VariableDeclaration","scope":28000,"src":"16493:32:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":27963,"name":"uint128","nodeType":"ElementaryTypeName","src":"16493:7:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"16487:42:113"},"returnParameters":{"id":27969,"nodeType":"ParameterList","parameters":[],"src":"16562:0:113"},"scope":28229,"src":"16451:506:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5763],"body":{"id":28038,"nodeType":"Block","src":"17118:443:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28010,"name":"newFlashloanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28003,"src":"17139:29:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":28011,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"17172:14:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$23726_$","typeString":"type(library PercentageMath)"}},"id":28012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":23698,"src":"17172:32:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17139:65:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28014,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"17212:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_INVALID","nodeType":"MemberAccess","referencedDeclaration":14605,"src":"17212:32:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28009,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17124:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17124:126:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28017,"nodeType":"ExpressionStatement","src":"17124:126:113"},{"assignments":[28019],"declarations":[{"constant":false,"id":28019,"mutability":"mutable","name":"oldFlashloanPremiumToProtocol","nameLocation":"17264:29:113","nodeType":"VariableDeclaration","scope":28038,"src":"17256:37:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28018,"name":"uint128","nodeType":"ElementaryTypeName","src":"17256:7:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":28023,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28020,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"17296:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":28021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_TO_PROTOCOL","nodeType":"MemberAccess","referencedDeclaration":5037,"src":"17296:35:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":28022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17296:37:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"17256:77:113"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28027,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"17369:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":28028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_TOTAL","nodeType":"MemberAccess","referencedDeclaration":5025,"src":"17369:29:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":28029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17369:31:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":28030,"name":"newFlashloanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28003,"src":"17402:29:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28024,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"17339:5:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":28026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateFlashloanPremiums","nodeType":"MemberAccess","referencedDeclaration":4975,"src":"17339:29:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (uint128,uint128) external"}},"id":28031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17339:93:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28032,"nodeType":"ExpressionStatement","src":"17339:93:113"},{"eventCall":{"arguments":[{"id":28034,"name":"oldFlashloanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28019,"src":"17484:29:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":28035,"name":"newFlashloanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28003,"src":"17521:29:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":28033,"name":"FlashloanPremiumToProtocolUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5557,"src":"17443:33:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (uint128,uint128)"}},"id":28036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17443:113:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28037,"nodeType":"EmitStatement","src":"17438:118:113"}]},"documentation":{"id":28001,"nodeType":"StructuredDocumentation","src":"16961:33:113","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"1df970bd","id":28039,"implemented":true,"kind":"function","modifiers":[{"id":28007,"kind":"modifierInvocation","modifierName":{"id":28006,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":26639,"src":"17104:13:113"},"nodeType":"ModifierInvocation","src":"17104:13:113"}],"name":"updateFlashloanPremiumToProtocol","nameLocation":"17006:32:113","nodeType":"FunctionDefinition","overrides":{"id":28005,"nodeType":"OverrideSpecifier","overrides":[],"src":"17095:8:113"},"parameters":{"id":28004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28003,"mutability":"mutable","name":"newFlashloanPremiumToProtocol","nameLocation":"17052:29:113","nodeType":"VariableDeclaration","scope":28039,"src":"17044:37:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28002,"name":"uint128","nodeType":"ElementaryTypeName","src":"17044:7:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"17038:47:113"},"returnParameters":{"id":28008,"nodeType":"ParameterList","parameters":[],"src":"17118:0:113"},"scope":28229,"src":"16997:564:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":28069,"nodeType":"Block","src":"17621:270:113","statements":[{"assignments":[null,28045,28047,null,null,null,null,null,null,null,null,null],"declarations":[null,{"constant":false,"id":28045,"mutability":"mutable","name":"accruedToTreasury","nameLocation":"17638:17:113","nodeType":"VariableDeclaration","scope":28069,"src":"17630:25:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28044,"name":"uint256","nodeType":"ElementaryTypeName","src":"17630:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28047,"mutability":"mutable","name":"totalATokens","nameLocation":"17665:12:113","nodeType":"VariableDeclaration","scope":28069,"src":"17657:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28046,"name":"uint256","nodeType":"ElementaryTypeName","src":"17657:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null,null,null,null,null,null,null,null],"id":28056,"initialValue":{"arguments":[{"id":28054,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28041,"src":"17786:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28049,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"17724:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":28050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPoolDataProvider","nodeType":"MemberAccess","referencedDeclaration":5275,"src":"17724:38:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":28051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17724:40:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28048,"name":"IPoolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6004,"src":"17699:17:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolDataProvider_$6004_$","typeString":"type(contract IPoolDataProvider)"}},"id":28052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17699:71:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolDataProvider_$6004","typeString":"contract IPoolDataProvider"}},"id":28053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":5933,"src":"17699:86:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"function (address) view external returns (uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint40)"}},"id":28055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17699:93:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint40)"}},"nodeType":"VariableDeclarationStatement","src":"17627:165:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":28064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28058,"name":"totalATokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28047,"src":"17807:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":28059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17823:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17807:17:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28061,"name":"accruedToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28045,"src":"17828:17:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":28062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17849:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17828:22:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17807:43:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28065,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"17852:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_LIQUIDITY_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":14602,"src":"17852:33:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28057,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17799:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17799:87:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28068,"nodeType":"ExpressionStatement","src":"17799:87:113"}]},"id":28070,"implemented":true,"kind":"function","modifiers":[],"name":"_checkNoSuppliers","nameLocation":"17574:17:113","nodeType":"FunctionDefinition","parameters":{"id":28042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28041,"mutability":"mutable","name":"asset","nameLocation":"17600:5:113","nodeType":"VariableDeclaration","scope":28070,"src":"17592:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28040,"name":"address","nodeType":"ElementaryTypeName","src":"17592:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17591:15:113"},"returnParameters":{"id":28043,"nodeType":"ParameterList","parameters":[],"src":"17621:0:113"},"scope":28229,"src":"17565:326:113","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28094,"nodeType":"Block","src":"17951:181:113","statements":[{"assignments":[28076],"declarations":[{"constant":false,"id":28076,"mutability":"mutable","name":"totalDebt","nameLocation":"17965:9:113","nodeType":"VariableDeclaration","scope":28094,"src":"17957:17:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28075,"name":"uint256","nodeType":"ElementaryTypeName","src":"17957:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28085,"initialValue":{"arguments":[{"id":28083,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28072,"src":"18057:5:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28078,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"17995:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":28079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPoolDataProvider","nodeType":"MemberAccess","referencedDeclaration":5275,"src":"17995:38:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":28080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17995:40:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28077,"name":"IPoolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6004,"src":"17977:17:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolDataProvider_$6004_$","typeString":"type(contract IPoolDataProvider)"}},"id":28081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17977:59:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolDataProvider_$6004","typeString":"contract IPoolDataProvider"}},"id":28082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getTotalDebt","nodeType":"MemberAccess","referencedDeclaration":5949,"src":"17977:72:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":28084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17977:91:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17957:111:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28087,"name":"totalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28076,"src":"18082:9:113","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":"18095:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18082:14:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28090,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18098:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_DEBT_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":14815,"src":"18098:28:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28086,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18074:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18074:53:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28093,"nodeType":"ExpressionStatement","src":"18074:53:113"}]},"id":28095,"implemented":true,"kind":"function","modifiers":[],"name":"_checkNoBorrowers","nameLocation":"17904:17:113","nodeType":"FunctionDefinition","parameters":{"id":28073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28072,"mutability":"mutable","name":"asset","nameLocation":"17930:5:113","nodeType":"VariableDeclaration","scope":28095,"src":"17922:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28071,"name":"address","nodeType":"ElementaryTypeName","src":"17922:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17921:15:113"},"returnParameters":{"id":28074,"nodeType":"ParameterList","parameters":[],"src":"17951:0:113"},"scope":28229,"src":"17895:237:113","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28117,"nodeType":"Block","src":"18176:162:113","statements":[{"assignments":[28100],"declarations":[{"constant":false,"id":28100,"mutability":"mutable","name":"aclManager","nameLocation":"18194:10:113","nodeType":"VariableDeclaration","scope":28117,"src":"18182:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":28099,"nodeType":"UserDefinedTypeName","pathNode":{"id":28098,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"18182:11:113"},"referencedDeclaration":3843,"src":"18182:11:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":28106,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28102,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"18219:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":28103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"18219:32:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":28104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18219:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28101,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"18207:11:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":28105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18207:47:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"18182:72:113"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":28110,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18291:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18291:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28108,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28100,"src":"18268:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":28109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"18268:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":28112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18268:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28113,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18304:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14551,"src":"18304:28:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28107,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18260:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18260:73:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28116,"nodeType":"ExpressionStatement","src":"18260:73:113"}]},"id":28118,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyPoolAdmin","nameLocation":"18145:14:113","nodeType":"FunctionDefinition","parameters":{"id":28096,"nodeType":"ParameterList","parameters":[],"src":"18159:2:113"},"returnParameters":{"id":28097,"nodeType":"ParameterList","parameters":[],"src":"18176:0:113"},"scope":28229,"src":"18136:202:113","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28140,"nodeType":"Block","src":"18387:172:113","statements":[{"assignments":[28123],"declarations":[{"constant":false,"id":28123,"mutability":"mutable","name":"aclManager","nameLocation":"18405:10:113","nodeType":"VariableDeclaration","scope":28140,"src":"18393:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":28122,"nodeType":"UserDefinedTypeName","pathNode":{"id":28121,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"18393:11:113"},"referencedDeclaration":3843,"src":"18393:11:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":28129,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28125,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"18430:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":28126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"18430:32:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":28127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18430:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28124,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"18418:11:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":28128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18418:47:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"18393:72:113"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":28133,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18507:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18507:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28131,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28123,"src":"18479:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":28132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isEmergencyAdmin","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"18479:27:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":28135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18479:39:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28136,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18520:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_EMERGENCY_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14554,"src":"18520:33:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28130,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18471:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18471:83:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28139,"nodeType":"ExpressionStatement","src":"18471:83:113"}]},"id":28141,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyEmergencyAdmin","nameLocation":"18351:19:113","nodeType":"FunctionDefinition","parameters":{"id":28119,"nodeType":"ParameterList","parameters":[],"src":"18370:2:113"},"returnParameters":{"id":28120,"nodeType":"ParameterList","parameters":[],"src":"18387:0:113"},"scope":28229,"src":"18342:217:113","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28169,"nodeType":"Block","src":"18614:236:113","statements":[{"assignments":[28146],"declarations":[{"constant":false,"id":28146,"mutability":"mutable","name":"aclManager","nameLocation":"18632:10:113","nodeType":"VariableDeclaration","scope":28169,"src":"18620:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":28145,"nodeType":"UserDefinedTypeName","pathNode":{"id":28144,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"18620:11:113"},"referencedDeclaration":3843,"src":"18620:11:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":28152,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28148,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"18657:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":28149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"18657:32:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":28150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18657:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28147,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"18645:11:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":28151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18645:47:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"18620:72:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":28164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":28156,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18736:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18736:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28154,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28146,"src":"18713:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":28155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"18713:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":28158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18713:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":28161,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18779:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18779:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28159,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28146,"src":"18751:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":28160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isEmergencyAdmin","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"18751:27:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":28163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18751:39:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18713:77:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28165,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"18798:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_OR_EMERGENCY_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14557,"src":"18798:41:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28153,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18698:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18698:147:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28168,"nodeType":"ExpressionStatement","src":"18698:147:113"}]},"id":28170,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyPoolOrEmergencyAdmin","nameLocation":"18572:25:113","nodeType":"FunctionDefinition","parameters":{"id":28142,"nodeType":"ParameterList","parameters":[],"src":"18597:2:113"},"returnParameters":{"id":28143,"nodeType":"ParameterList","parameters":[],"src":"18614:0:113"},"scope":28229,"src":"18563:287:113","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28198,"nodeType":"Block","src":"18909:243:113","statements":[{"assignments":[28175],"declarations":[{"constant":false,"id":28175,"mutability":"mutable","name":"aclManager","nameLocation":"18927:10:113","nodeType":"VariableDeclaration","scope":28198,"src":"18915:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":28174,"nodeType":"UserDefinedTypeName","pathNode":{"id":28173,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"18915:11:113"},"referencedDeclaration":3843,"src":"18915:11:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":28181,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28177,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"18952:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":28178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"18952:32:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":28179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18952:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28176,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"18940:11:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":28180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18940:47:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"18915:72:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":28193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":28185,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19039:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19039:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28183,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28175,"src":"19008:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":28184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isAssetListingAdmin","nodeType":"MemberAccess","referencedDeclaration":3842,"src":"19008:30:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":28187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19008:42:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":28190,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19077:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19077:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28188,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28175,"src":"19054:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":28189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"19054:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":28192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19054:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19008:80:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28194,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"19096:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14563,"src":"19096:45:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28182,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18993:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18993:154:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28197,"nodeType":"ExpressionStatement","src":"18993:154:113"}]},"id":28199,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyAssetListingOrPoolAdmins","nameLocation":"18863:29:113","nodeType":"FunctionDefinition","parameters":{"id":28171,"nodeType":"ParameterList","parameters":[],"src":"18892:2:113"},"returnParameters":{"id":28172,"nodeType":"ParameterList","parameters":[],"src":"18909:0:113"},"scope":28229,"src":"18854:298:113","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28227,"nodeType":"Block","src":"19203:226:113","statements":[{"assignments":[28204],"declarations":[{"constant":false,"id":28204,"mutability":"mutable","name":"aclManager","nameLocation":"19221:10:113","nodeType":"VariableDeclaration","scope":28227,"src":"19209:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":28203,"nodeType":"UserDefinedTypeName","pathNode":{"id":28202,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"19209:11:113"},"referencedDeclaration":3843,"src":"19209:11:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":28210,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28206,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26628,"src":"19246:18:113","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":28207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"19246:32:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":28208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19246:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28205,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"19234:11:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":28209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19234:47:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"19209:72:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":28222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":28214,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19325:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19325:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28212,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28204,"src":"19302:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":28213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isRiskAdmin","nodeType":"MemberAccess","referencedDeclaration":3782,"src":"19302:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":28216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19302:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":28219,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19363:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19363:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28217,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28204,"src":"19340:10:113","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":28218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"19340:22:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":28221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19340:34:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19302:72:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28223,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"19382:6:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_RISK_OR_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14560,"src":"19382:36:113","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28211,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19287:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19287:137:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28226,"nodeType":"ExpressionStatement","src":"19287:137:113"}]},"id":28228,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyRiskOrPoolAdmins","nameLocation":"19165:21:113","nodeType":"FunctionDefinition","parameters":{"id":28200,"nodeType":"ParameterList","parameters":[],"src":"19186:2:113"},"returnParameters":{"id":28201,"nodeType":"ParameterList","parameters":[],"src":"19203:0:113"},"scope":28229,"src":"19156:273:113","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":28230,"src":"1063:18368:113","usedErrors":[]}],"src":"37:19395:113"},"id":113},"contracts/protocol/pool/PoolStorage.sol":{"ast":{"absolutePath":"contracts/protocol/pool/PoolStorage.sol","exportedSymbols":{"DataTypes":[24227],"PoolStorage":[28286],"ReserveConfiguration":[14034],"ReserveLogic":[20971],"UserConfiguration":[14545]},"id":28287,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":28231,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:114"},{"absolutePath":"contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../libraries/configuration/UserConfiguration.sol","id":28233,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28287,"sourceUnit":14546,"src":"63:83:114","symbolAliases":[{"foreign":{"id":28232,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:17:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../libraries/configuration/ReserveConfiguration.sol","id":28235,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28287,"sourceUnit":14035,"src":"147:89:114","symbolAliases":[{"foreign":{"id":28234,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"155:20:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/logic/ReserveLogic.sol","file":"../libraries/logic/ReserveLogic.sol","id":28237,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28287,"sourceUnit":20972,"src":"237:65:114","symbolAliases":[{"foreign":{"id":28236,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"245:12:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/types/DataTypes.sol","file":"../libraries/types/DataTypes.sol","id":28239,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28287,"sourceUnit":24228,"src":"303:59:114","symbolAliases":[{"foreign":{"id":28238,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"311:9:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolStorage","contractDependencies":[],"contractKind":"contract","documentation":{"id":28240,"nodeType":"StructuredDocumentation","src":"364:163:114","text":" @title PoolStorage\n @author Aave\n @notice Contract used as storage of the Pool contract.\n @dev It defines the storage layout of the Pool contract."},"fullyImplemented":true,"id":28286,"linearizedBaseContracts":[28286],"name":"PoolStorage","nameLocation":"537:11:114","nodeType":"ContractDefinition","nodes":[{"id":28244,"libraryName":{"id":28241,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":20971,"src":"559:12:114"},"nodeType":"UsingForDirective","src":"553:45:114","typeName":{"id":28243,"nodeType":"UserDefinedTypeName","pathNode":{"id":28242,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"576:21:114"},"referencedDeclaration":23909,"src":"576:21:114","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":28248,"libraryName":{"id":28245,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14034,"src":"607:20:114"},"nodeType":"UsingForDirective","src":"601:65:114","typeName":{"id":28247,"nodeType":"UserDefinedTypeName","pathNode":{"id":28246,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23912,"src":"632:33:114"},"referencedDeclaration":23912,"src":"632:33:114","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$23912_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":28252,"libraryName":{"id":28249,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":14545,"src":"675:17:114"},"nodeType":"UsingForDirective","src":"669:59:114","typeName":{"id":28251,"nodeType":"UserDefinedTypeName","pathNode":{"id":28250,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"697:30:114"},"referencedDeclaration":23916,"src":"697:30:114","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"constant":false,"id":28257,"mutability":"mutable","name":"_reserves","nameLocation":"861:9:114","nodeType":"VariableDeclaration","scope":28286,"src":"810:60:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":28256,"keyType":{"id":28253,"name":"address","nodeType":"ElementaryTypeName","src":"818:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"810:41:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":28255,"nodeType":"UserDefinedTypeName","pathNode":{"id":28254,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":23909,"src":"829:21:114"},"referencedDeclaration":23909,"src":"829:21:114","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$23909_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":28262,"mutability":"mutable","name":"_usersConfig","nameLocation":"1025:12:114","nodeType":"VariableDeclaration","scope":28286,"src":"965:72:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"typeName":{"id":28261,"keyType":{"id":28258,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"965:50:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"valueType":{"id":28260,"nodeType":"UserDefinedTypeName","pathNode":{"id":28259,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":23916,"src":"984:30:114"},"referencedDeclaration":23916,"src":"984:30:114","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$23916_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},"visibility":"internal"},{"constant":false,"id":28266,"mutability":"mutable","name":"_reservesList","nameLocation":"1224:13:114","nodeType":"VariableDeclaration","scope":28286,"src":"1187:50:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":28265,"keyType":{"id":28263,"name":"uint256","nodeType":"ElementaryTypeName","src":"1195:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1187:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":28264,"name":"address","nodeType":"ElementaryTypeName","src":"1206:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":28271,"mutability":"mutable","name":"_eModeCategories","nameLocation":"1463:16:114","nodeType":"VariableDeclaration","scope":28286,"src":"1412:67:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":28270,"keyType":{"id":28267,"name":"uint8","nodeType":"ElementaryTypeName","src":"1420:5:114","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"1412:41:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":28269,"nodeType":"UserDefinedTypeName","pathNode":{"id":28268,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":23927,"src":"1429:23:114"},"referencedDeclaration":23927,"src":"1429:23:114","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$23927_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":28275,"mutability":"mutable","name":"_usersEModeCategory","nameLocation":"1603:19:114","nodeType":"VariableDeclaration","scope":28286,"src":"1568:54:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"typeName":{"id":28274,"keyType":{"id":28272,"name":"address","nodeType":"ElementaryTypeName","src":"1576:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1568:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"valueType":{"id":28273,"name":"uint8","nodeType":"ElementaryTypeName","src":"1587:5:114","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}},"visibility":"internal"},{"constant":false,"id":28277,"mutability":"mutable","name":"_bridgeProtocolFee","nameLocation":"1694:18:114","nodeType":"VariableDeclaration","scope":28286,"src":"1677:35:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28276,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28279,"mutability":"mutable","name":"_flashLoanPremiumTotal","nameLocation":"1781:22:114","nodeType":"VariableDeclaration","scope":28286,"src":"1764:39:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28278,"name":"uint128","nodeType":"ElementaryTypeName","src":"1764:7:114","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":28281,"mutability":"mutable","name":"_flashLoanPremiumToProtocol","nameLocation":"1892:27:114","nodeType":"VariableDeclaration","scope":28286,"src":"1875:44:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28280,"name":"uint128","nodeType":"ElementaryTypeName","src":"1875:7:114","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":28283,"mutability":"mutable","name":"_maxStableRateBorrowSizePercent","nameLocation":"2027:31:114","nodeType":"VariableDeclaration","scope":28286,"src":"2011:47:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":28282,"name":"uint64","nodeType":"ElementaryTypeName","src":"2011:6:114","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":28285,"mutability":"mutable","name":"_reservesCount","nameLocation":"2194:14:114","nodeType":"VariableDeclaration","scope":28286,"src":"2178:30:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":28284,"name":"uint16","nodeType":"ElementaryTypeName","src":"2178:6:114","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"scope":28287,"src":"528:1683:114","usedErrors":[]}],"src":"37:2175:114"},"id":114},"contracts/protocol/tokenization/AToken.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/AToken.sol","exportedSymbols":{"AToken":[28936],"EIP712Base":[30773],"Errors":[14819],"GPv2SafeERC20":[118],"IAToken":[3986],"IAaveIncentivesController":[4000],"IERC20":[1442],"IInitializableAToken":[4301],"IPool":[5073],"IncentivizedERC20":[31300],"SafeCast":[1966],"ScaledBalanceTokenBase":[31917],"VersionedInitializable":[12750],"WadRayMath":[23813]},"id":28937,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":28288,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:115"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":28290,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":1443,"src":"63:76:115","symbolAliases":[{"foreign":{"id":28289,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":28292,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":119,"src":"140:84:115","symbolAliases":[{"foreign":{"id":28291,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"148:13:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../dependencies/openzeppelin/contracts/SafeCast.sol","id":28294,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":1967,"src":"225:80:115","symbolAliases":[{"foreign":{"id":28293,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"233:8:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":28296,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":12751,"src":"306:99:115","symbolAliases":[{"foreign":{"id":28295,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"314:22:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":28298,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":14820,"src":"406:55:115","symbolAliases":[{"foreign":{"id":28297,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"414:6:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../libraries/math/WadRayMath.sol","id":28300,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":23814,"src":"462:60:115","symbolAliases":[{"foreign":{"id":28299,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"470:10:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":28302,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":5074,"src":"523:49:115","symbolAliases":[{"foreign":{"id":28301,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"531:5:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAToken.sol","file":"../../interfaces/IAToken.sol","id":28304,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":3987,"src":"573:53:115","symbolAliases":[{"foreign":{"id":28303,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"581:7:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","file":"../../interfaces/IAaveIncentivesController.sol","id":28306,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":4001,"src":"627:89:115","symbolAliases":[{"foreign":{"id":28305,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"635:25:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IInitializableAToken.sol","file":"../../interfaces/IInitializableAToken.sol","id":28308,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":4302,"src":"717:79:115","symbolAliases":[{"foreign":{"id":28307,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"725:20:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol","file":"./base/ScaledBalanceTokenBase.sol","id":28310,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":31918,"src":"797:73:115","symbolAliases":[{"foreign":{"id":28309,"name":"ScaledBalanceTokenBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"805:22:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"./base/IncentivizedERC20.sol","id":28312,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":31301,"src":"871:63:115","symbolAliases":[{"foreign":{"id":28311,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"879:17:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/EIP712Base.sol","file":"./base/EIP712Base.sol","id":28314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28937,"sourceUnit":30774,"src":"935:49:115","symbolAliases":[{"foreign":{"id":28313,"name":"EIP712Base","nodeType":"Identifier","overloadedDeclarations":[],"src":"943:10:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":28316,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":12750,"src":"1135:22:115"},"id":28317,"nodeType":"InheritanceSpecifier","src":"1135:22:115"},{"baseName":{"id":28318,"name":"ScaledBalanceTokenBase","nodeType":"IdentifierPath","referencedDeclaration":31917,"src":"1159:22:115"},"id":28319,"nodeType":"InheritanceSpecifier","src":"1159:22:115"},{"baseName":{"id":28320,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":30773,"src":"1183:10:115"},"id":28321,"nodeType":"InheritanceSpecifier","src":"1183:10:115"},{"baseName":{"id":28322,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3986,"src":"1195:7:115"},"id":28323,"nodeType":"InheritanceSpecifier","src":"1195:7:115"}],"canonicalName":"AToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":28315,"nodeType":"StructuredDocumentation","src":"986:129:115","text":" @title Aave ERC20 AToken\n @author Aave\n @notice Implementation of the interest bearing token for the Aave protocol"},"fullyImplemented":true,"id":28936,"linearizedBaseContracts":[28936,3986,4301,30773,31917,6188,31450,31300,1464,1442,748,12750],"name":"AToken","nameLocation":"1125:6:115","nodeType":"ContractDefinition","nodes":[{"id":28326,"libraryName":{"id":28324,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1213:10:115"},"nodeType":"UsingForDirective","src":"1207:29:115","typeName":{"id":28325,"name":"uint256","nodeType":"ElementaryTypeName","src":"1228:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":28329,"libraryName":{"id":28327,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1245:8:115"},"nodeType":"UsingForDirective","src":"1239:27:115","typeName":{"id":28328,"name":"uint256","nodeType":"ElementaryTypeName","src":"1258:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":28333,"libraryName":{"id":28330,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1275:13:115"},"nodeType":"UsingForDirective","src":"1269:31:115","typeName":{"id":28332,"nodeType":"UserDefinedTypeName","pathNode":{"id":28331,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1293:6:115"},"referencedDeclaration":1442,"src":"1293:6:115","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"constant":true,"functionSelector":"30adf81f","id":28338,"mutability":"constant","name":"PERMIT_TYPEHASH","nameLocation":"1328:15:115","nodeType":"VariableDeclaration","scope":28936,"src":"1304:141:115","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28334,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1304:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":28336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1360:84:115","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":28335,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1350:9:115","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":28337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1350:95:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":true,"functionSelector":"0bd7ad3b","id":28341,"mutability":"constant","name":"ATOKEN_REVISION","nameLocation":"1474:15:115","nodeType":"VariableDeclaration","scope":28936,"src":"1450:45:115","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28339,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":28340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1492:3:115","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"constant":false,"id":28343,"mutability":"mutable","name":"_treasury","nameLocation":"1517:9:115","nodeType":"VariableDeclaration","scope":28936,"src":"1500:26:115","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28342,"name":"address","nodeType":"ElementaryTypeName","src":"1500:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28345,"mutability":"mutable","name":"_underlyingAsset","nameLocation":"1547:16:115","nodeType":"VariableDeclaration","scope":28936,"src":"1530:33:115","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28344,"name":"address","nodeType":"ElementaryTypeName","src":"1530:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"baseFunctions":[12730],"body":{"id":28354,"nodeType":"Block","src":"1681:33:115","statements":[{"expression":{"id":28352,"name":"ATOKEN_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28341,"src":"1694:15:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28351,"id":28353,"nodeType":"Return","src":"1687:22:115"}]},"documentation":{"id":28346,"nodeType":"StructuredDocumentation","src":"1568:38:115","text":"@inheritdoc VersionedInitializable"},"id":28355,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1618:11:115","nodeType":"FunctionDefinition","overrides":{"id":28348,"nodeType":"OverrideSpecifier","overrides":[],"src":"1654:8:115"},"parameters":{"id":28347,"nodeType":"ParameterList","parameters":[],"src":"1629:2:115"},"returnParameters":{"id":28351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28350,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28355,"src":"1672:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28349,"name":"uint256","nodeType":"ElementaryTypeName","src":"1672:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1671:9:115"},"scope":28936,"src":"1609:105:115","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":28370,"nodeType":"Block","src":"1910:37:115","statements":[]},"documentation":{"id":28356,"nodeType":"StructuredDocumentation","src":"1718:82:115","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":28371,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":28362,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28359,"src":"1858:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"hexValue":"41544f4b454e5f494d504c","id":28363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1864:13:115","typeDescriptions":{"typeIdentifier":"t_stringliteral_60246dc83bf76f5d3ca1e7624837503501076ebb1100263b4d28583c6b2aa1e0","typeString":"literal_string \"ATOKEN_IMPL\""},"value":"ATOKEN_IMPL"},{"hexValue":"41544f4b454e5f494d504c","id":28364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1879:13:115","typeDescriptions":{"typeIdentifier":"t_stringliteral_60246dc83bf76f5d3ca1e7624837503501076ebb1100263b4d28583c6b2aa1e0","typeString":"literal_string \"ATOKEN_IMPL\""},"value":"ATOKEN_IMPL"},{"hexValue":"30","id":28365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1894:1:115","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":28366,"kind":"baseConstructorSpecifier","modifierName":{"id":28361,"name":"ScaledBalanceTokenBase","nodeType":"IdentifierPath","referencedDeclaration":31917,"src":"1835:22:115"},"nodeType":"ModifierInvocation","src":"1835:61:115"},{"arguments":[],"id":28368,"kind":"baseConstructorSpecifier","modifierName":{"id":28367,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":30773,"src":"1897:10:115"},"nodeType":"ModifierInvocation","src":"1897:12:115"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":28360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28359,"mutability":"mutable","name":"pool","nameLocation":"1826:4:115","nodeType":"VariableDeclaration","scope":28371,"src":"1820:10:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":28358,"nodeType":"UserDefinedTypeName","pathNode":{"id":28357,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1820:5:115"},"referencedDeclaration":5073,"src":"1820:5:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1814:20:115"},"returnParameters":{"id":28369,"nodeType":"ParameterList","parameters":[],"src":"1910:0:115"},"scope":28936,"src":"1803:144:115","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4300],"body":{"id":28450,"nodeType":"Block","src":"2300:540:115","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"id":28399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28397,"name":"initializingPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28375,"src":"2314:16:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":28398,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"2334:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"2314:24:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28400,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2340:6:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"POOL_ADDRESSES_DO_NOT_MATCH","nodeType":"MemberAccess","referencedDeclaration":14806,"src":"2340:34:115","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28396,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2306:7:115","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2306:69:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28403,"nodeType":"ExpressionStatement","src":"2306:69:115"},{"expression":{"arguments":[{"id":28405,"name":"aTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28386,"src":"2390:10:115","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":28404,"name":"_setName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31277,"src":"2381:8:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":28406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2381:20:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28407,"nodeType":"ExpressionStatement","src":"2381:20:115"},{"expression":{"arguments":[{"id":28409,"name":"aTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28388,"src":"2418:12:115","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":28408,"name":"_setSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31288,"src":"2407:10:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":28410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2407:24:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28411,"nodeType":"ExpressionStatement","src":"2407:24:115"},{"expression":{"arguments":[{"id":28413,"name":"aTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28384,"src":"2450:14:115","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":28412,"name":"_setDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31299,"src":"2437:12:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":28414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2437:28:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28415,"nodeType":"ExpressionStatement","src":"2437:28:115"},{"expression":{"id":28418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28416,"name":"_treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28343,"src":"2472:9:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28417,"name":"treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28377,"src":"2484:8:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2472:20:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":28419,"nodeType":"ExpressionStatement","src":"2472:20:115"},{"expression":{"id":28422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28420,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"2498:16:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28421,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28379,"src":"2517:15:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2498:34:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":28423,"nodeType":"ExpressionStatement","src":"2498:34:115"},{"expression":{"id":28426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28424,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"2538:21:115","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28425,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28382,"src":"2562:20:115","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"src":"2538:44:115","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":28427,"nodeType":"ExpressionStatement","src":"2538:44:115"},{"expression":{"id":28431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28428,"name":"_domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30693,"src":"2589:16:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":28429,"name":"_calculateDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30766,"src":"2608:25:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":28430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2608:27:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2589:46:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28432,"nodeType":"ExpressionStatement","src":"2589:46:115"},{"eventCall":{"arguments":[{"id":28434,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28379,"src":"2666:15:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":28437,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"2697:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":28436,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2689:7:115","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28435,"name":"address","nodeType":"ElementaryTypeName","src":"2689:7:115","typeDescriptions":{}}},"id":28438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2689:13:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28439,"name":"treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28377,"src":"2710:8:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":28442,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28382,"src":"2734:20:115","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}],"id":28441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2726:7:115","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28440,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:115","typeDescriptions":{}}},"id":28443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2726:29:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28444,"name":"aTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28384,"src":"2763:14:115","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28445,"name":"aTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28386,"src":"2785:10:115","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":28446,"name":"aTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28388,"src":"2803:12:115","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":28447,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28390,"src":"2823:6:115","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":28433,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4278,"src":"2647:11:115","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint8,string memory,string memory,bytes memory)"}},"id":28448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2647:188:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28449,"nodeType":"EmitStatement","src":"2642:193:115"}]},"documentation":{"id":28372,"nodeType":"StructuredDocumentation","src":"1951:36:115","text":"@inheritdoc IInitializableAToken"},"functionSelector":"183fb413","id":28451,"implemented":true,"kind":"function","modifiers":[{"id":28394,"kind":"modifierInvocation","modifierName":{"id":28393,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"2288:11:115"},"nodeType":"ModifierInvocation","src":"2288:11:115"}],"name":"initialize","nameLocation":"1999:10:115","nodeType":"FunctionDefinition","overrides":{"id":28392,"nodeType":"OverrideSpecifier","overrides":[],"src":"2279:8:115"},"parameters":{"id":28391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28375,"mutability":"mutable","name":"initializingPool","nameLocation":"2021:16:115","nodeType":"VariableDeclaration","scope":28451,"src":"2015:22:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":28374,"nodeType":"UserDefinedTypeName","pathNode":{"id":28373,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"2015:5:115"},"referencedDeclaration":5073,"src":"2015:5:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":28377,"mutability":"mutable","name":"treasury","nameLocation":"2051:8:115","nodeType":"VariableDeclaration","scope":28451,"src":"2043:16:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28376,"name":"address","nodeType":"ElementaryTypeName","src":"2043:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28379,"mutability":"mutable","name":"underlyingAsset","nameLocation":"2073:15:115","nodeType":"VariableDeclaration","scope":28451,"src":"2065:23:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28378,"name":"address","nodeType":"ElementaryTypeName","src":"2065:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28382,"mutability":"mutable","name":"incentivesController","nameLocation":"2120:20:115","nodeType":"VariableDeclaration","scope":28451,"src":"2094:46:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":28381,"nodeType":"UserDefinedTypeName","pathNode":{"id":28380,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"2094:25:115"},"referencedDeclaration":4000,"src":"2094:25:115","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":28384,"mutability":"mutable","name":"aTokenDecimals","nameLocation":"2152:14:115","nodeType":"VariableDeclaration","scope":28451,"src":"2146:20:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28383,"name":"uint8","nodeType":"ElementaryTypeName","src":"2146:5:115","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":28386,"mutability":"mutable","name":"aTokenName","nameLocation":"2188:10:115","nodeType":"VariableDeclaration","scope":28451,"src":"2172:26:115","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":28385,"name":"string","nodeType":"ElementaryTypeName","src":"2172:6:115","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":28388,"mutability":"mutable","name":"aTokenSymbol","nameLocation":"2220:12:115","nodeType":"VariableDeclaration","scope":28451,"src":"2204:28:115","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":28387,"name":"string","nodeType":"ElementaryTypeName","src":"2204:6:115","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":28390,"mutability":"mutable","name":"params","nameLocation":"2253:6:115","nodeType":"VariableDeclaration","scope":28451,"src":"2238:21:115","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":28389,"name":"bytes","nodeType":"ElementaryTypeName","src":"2238:5:115","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2009:254:115"},"returnParameters":{"id":28395,"nodeType":"ParameterList","parameters":[],"src":"2300:0:115"},"scope":28936,"src":"1990:850:115","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[3883],"body":{"id":28475,"nodeType":"Block","src":"3021:64:115","statements":[{"expression":{"arguments":[{"id":28469,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28454,"src":"3046:6:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28470,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28456,"src":"3054:10:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28471,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28458,"src":"3066:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28472,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28460,"src":"3074:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28468,"name":"_mintScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31654,"src":"3034:11:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) returns (bool)"}},"id":28473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3034:46:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28467,"id":28474,"nodeType":"Return","src":"3027:53:115"}]},"documentation":{"id":28452,"nodeType":"StructuredDocumentation","src":"2844:23:115","text":"@inheritdoc IAToken"},"functionSelector":"b3f1c93d","id":28476,"implemented":true,"kind":"function","modifiers":[{"id":28464,"kind":"modifierInvocation","modifierName":{"id":28463,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"2997:8:115"},"nodeType":"ModifierInvocation","src":"2997:8:115"}],"name":"mint","nameLocation":"2879:4:115","nodeType":"FunctionDefinition","overrides":{"id":28462,"nodeType":"OverrideSpecifier","overrides":[],"src":"2988:8:115"},"parameters":{"id":28461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28454,"mutability":"mutable","name":"caller","nameLocation":"2897:6:115","nodeType":"VariableDeclaration","scope":28476,"src":"2889:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28453,"name":"address","nodeType":"ElementaryTypeName","src":"2889:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28456,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2917:10:115","nodeType":"VariableDeclaration","scope":28476,"src":"2909:18:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28455,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28458,"mutability":"mutable","name":"amount","nameLocation":"2941:6:115","nodeType":"VariableDeclaration","scope":28476,"src":"2933:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28457,"name":"uint256","nodeType":"ElementaryTypeName","src":"2933:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28460,"mutability":"mutable","name":"index","nameLocation":"2961:5:115","nodeType":"VariableDeclaration","scope":28476,"src":"2953:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28459,"name":"uint256","nodeType":"ElementaryTypeName","src":"2953:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2883:87:115"},"returnParameters":{"id":28467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28476,"src":"3015:4:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28465,"name":"bool","nodeType":"ElementaryTypeName","src":"3015:4:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3014:6:115"},"scope":28936,"src":"2870:215:115","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3895],"body":{"id":28514,"nodeType":"Block","src":"3259:195:115","statements":[{"expression":{"arguments":[{"id":28492,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28479,"src":"3277:4:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28493,"name":"receiverOfUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28481,"src":"3283:20:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28494,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28483,"src":"3305:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28495,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28485,"src":"3313:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28491,"name":"_burnScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31772,"src":"3265:11:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":28496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3265:54:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28497,"nodeType":"ExpressionStatement","src":"3265:54:115"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28498,"name":"receiverOfUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28481,"src":"3329:20:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":28501,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3361:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_AToken_$28936","typeString":"contract AToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AToken_$28936","typeString":"contract AToken"}],"id":28500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3353:7:115","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28499,"name":"address","nodeType":"ElementaryTypeName","src":"3353:7:115","typeDescriptions":{}}},"id":28502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3353:13:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3329:37:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28513,"nodeType":"IfStatement","src":"3325:125:115","trueBody":{"id":28512,"nodeType":"Block","src":"3368:82:115","statements":[{"expression":{"arguments":[{"id":28508,"name":"receiverOfUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28481,"src":"3414:20:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28509,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28483,"src":"3436:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":28505,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"3383:16:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28504,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"3376:6:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":28506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3376:24:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":28507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"3376:37:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":28510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3376:67:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28511,"nodeType":"ExpressionStatement","src":"3376:67:115"}]}}]},"documentation":{"id":28477,"nodeType":"StructuredDocumentation","src":"3089:23:115","text":"@inheritdoc IAToken"},"functionSelector":"d7020d0a","id":28515,"implemented":true,"kind":"function","modifiers":[{"id":28489,"kind":"modifierInvocation","modifierName":{"id":28488,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"3250:8:115"},"nodeType":"ModifierInvocation","src":"3250:8:115"}],"name":"burn","nameLocation":"3124:4:115","nodeType":"FunctionDefinition","overrides":{"id":28487,"nodeType":"OverrideSpecifier","overrides":[],"src":"3241:8:115"},"parameters":{"id":28486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28479,"mutability":"mutable","name":"from","nameLocation":"3142:4:115","nodeType":"VariableDeclaration","scope":28515,"src":"3134:12:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28478,"name":"address","nodeType":"ElementaryTypeName","src":"3134:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28481,"mutability":"mutable","name":"receiverOfUnderlying","nameLocation":"3160:20:115","nodeType":"VariableDeclaration","scope":28515,"src":"3152:28:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28480,"name":"address","nodeType":"ElementaryTypeName","src":"3152:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28483,"mutability":"mutable","name":"amount","nameLocation":"3194:6:115","nodeType":"VariableDeclaration","scope":28515,"src":"3186:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28482,"name":"uint256","nodeType":"ElementaryTypeName","src":"3186:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28485,"mutability":"mutable","name":"index","nameLocation":"3214:5:115","nodeType":"VariableDeclaration","scope":28515,"src":"3206:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28484,"name":"uint256","nodeType":"ElementaryTypeName","src":"3206:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3128:95:115"},"returnParameters":{"id":28490,"nodeType":"ParameterList","parameters":[],"src":"3259:0:115"},"scope":28936,"src":"3115:339:115","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3903],"body":{"id":28542,"nodeType":"Block","src":"3574:106:115","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28526,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28518,"src":"3584:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":28527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3594:1:115","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3584:11:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28531,"nodeType":"IfStatement","src":"3580:38:115","trueBody":{"id":28530,"nodeType":"Block","src":"3597:21:115","statements":[{"functionReturnParameters":28525,"id":28529,"nodeType":"Return","src":"3605:7:115"}]}},{"expression":{"arguments":[{"arguments":[{"id":28535,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"3643:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":28534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3635:7:115","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28533,"name":"address","nodeType":"ElementaryTypeName","src":"3635:7:115","typeDescriptions":{}}},"id":28536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3635:13:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28537,"name":"_treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28343,"src":"3650:9:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28538,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28518,"src":"3661:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28539,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28520,"src":"3669:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28532,"name":"_mintScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31654,"src":"3623:11:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) returns (bool)"}},"id":28540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3623:52:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28541,"nodeType":"ExpressionStatement","src":"3623:52:115"}]},"documentation":{"id":28516,"nodeType":"StructuredDocumentation","src":"3458:23:115","text":"@inheritdoc IAToken"},"functionSelector":"7df5bd3b","id":28543,"implemented":true,"kind":"function","modifiers":[{"id":28524,"kind":"modifierInvocation","modifierName":{"id":28523,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"3565:8:115"},"nodeType":"ModifierInvocation","src":"3565:8:115"}],"name":"mintToTreasury","nameLocation":"3493:14:115","nodeType":"FunctionDefinition","overrides":{"id":28522,"nodeType":"OverrideSpecifier","overrides":[],"src":"3556:8:115"},"parameters":{"id":28521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28518,"mutability":"mutable","name":"amount","nameLocation":"3516:6:115","nodeType":"VariableDeclaration","scope":28543,"src":"3508:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28517,"name":"uint256","nodeType":"ElementaryTypeName","src":"3508:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28520,"mutability":"mutable","name":"index","nameLocation":"3532:5:115","nodeType":"VariableDeclaration","scope":28543,"src":"3524:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28519,"name":"uint256","nodeType":"ElementaryTypeName","src":"3524:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3507:31:115"},"returnParameters":{"id":28525,"nodeType":"ParameterList","parameters":[],"src":"3574:0:115"},"scope":28936,"src":"3484:196:115","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3913],"body":{"id":28563,"nodeType":"Block","src":"3833:173:115","statements":[{"expression":{"arguments":[{"id":28557,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28546,"src":"3978:4:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28558,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28548,"src":"3984:2:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28559,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28550,"src":"3988:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":28560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3995:5:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":28556,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[28844,28863,31916],"referencedDeclaration":28844,"src":"3968:9:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":28561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3968:33:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28562,"nodeType":"ExpressionStatement","src":"3968:33:115"}]},"documentation":{"id":28544,"nodeType":"StructuredDocumentation","src":"3684:23:115","text":"@inheritdoc IAToken"},"functionSelector":"f866c319","id":28564,"implemented":true,"kind":"function","modifiers":[{"id":28554,"kind":"modifierInvocation","modifierName":{"id":28553,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"3824:8:115"},"nodeType":"ModifierInvocation","src":"3824:8:115"}],"name":"transferOnLiquidation","nameLocation":"3719:21:115","nodeType":"FunctionDefinition","overrides":{"id":28552,"nodeType":"OverrideSpecifier","overrides":[],"src":"3815:8:115"},"parameters":{"id":28551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28546,"mutability":"mutable","name":"from","nameLocation":"3754:4:115","nodeType":"VariableDeclaration","scope":28564,"src":"3746:12:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28545,"name":"address","nodeType":"ElementaryTypeName","src":"3746:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28548,"mutability":"mutable","name":"to","nameLocation":"3772:2:115","nodeType":"VariableDeclaration","scope":28564,"src":"3764:10:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28547,"name":"address","nodeType":"ElementaryTypeName","src":"3764:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28550,"mutability":"mutable","name":"value","nameLocation":"3788:5:115","nodeType":"VariableDeclaration","scope":28564,"src":"3780:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28549,"name":"uint256","nodeType":"ElementaryTypeName","src":"3780:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3740:57:115"},"returnParameters":{"id":28555,"nodeType":"ParameterList","parameters":[],"src":"3833:0:115"},"scope":28936,"src":"3710:296:115","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[1381,30971],"body":{"id":28586,"nodeType":"Block","src":"4150:97:115","statements":[{"expression":{"arguments":[{"arguments":[{"id":28582,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"4224:16:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28580,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"4192:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":28581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":4906,"src":"4192:31:115","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":28583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4192:49:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":28577,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28567,"src":"4179:4:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28575,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4163:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$28936_$","typeString":"type(contract super AToken)"}},"id":28576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"4163:15:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4163:21:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"4163:28:115","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":28584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4163:79:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28574,"id":28585,"nodeType":"Return","src":"4156:86:115"}]},"documentation":{"id":28565,"nodeType":"StructuredDocumentation","src":"4010:22:115","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":28587,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"4044:9:115","nodeType":"FunctionDefinition","overrides":{"id":28571,"nodeType":"OverrideSpecifier","overrides":[{"id":28569,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":31300,"src":"4105:17:115"},{"id":28570,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"4124:6:115"}],"src":"4096:35:115"},"parameters":{"id":28568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28567,"mutability":"mutable","name":"user","nameLocation":"4067:4:115","nodeType":"VariableDeclaration","scope":28587,"src":"4059:12:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28566,"name":"address","nodeType":"ElementaryTypeName","src":"4059:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4053:22:115"},"returnParameters":{"id":28574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28573,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28587,"src":"4141:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28572,"name":"uint256","nodeType":"ElementaryTypeName","src":"4141:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4140:9:115"},"scope":28936,"src":"4035:212:115","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1373,30956],"body":{"id":28617,"nodeType":"Block","src":"4373:210:115","statements":[{"assignments":[28597],"declarations":[{"constant":false,"id":28597,"mutability":"mutable","name":"currentSupplyScaled","nameLocation":"4387:19:115","nodeType":"VariableDeclaration","scope":28617,"src":"4379:27:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28596,"name":"uint256","nodeType":"ElementaryTypeName","src":"4379:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28601,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28598,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4409:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$28936_$","typeString":"type(contract super AToken)"}},"id":28599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30956,"src":"4409:17:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":28600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4409:19:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4379:49:115"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28602,"name":"currentSupplyScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28597,"src":"4439:19:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":28603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4462:1:115","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4439:24:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28608,"nodeType":"IfStatement","src":"4435:53:115","trueBody":{"id":28607,"nodeType":"Block","src":"4465:23:115","statements":[{"expression":{"hexValue":"30","id":28605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4480:1:115","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":28595,"id":28606,"nodeType":"Return","src":"4473:8:115"}]}},{"expression":{"arguments":[{"arguments":[{"id":28613,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"4560:16:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28611,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"4528:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":28612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":4906,"src":"4528:31:115","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":28614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4528:49:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28609,"name":"currentSupplyScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28597,"src":"4501:19:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"4501:26:115","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":28615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4501:77:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28595,"id":28616,"nodeType":"Return","src":"4494:84:115"}]},"documentation":{"id":28588,"nodeType":"StructuredDocumentation","src":"4251:22:115","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":28618,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"4285:11:115","nodeType":"FunctionDefinition","overrides":{"id":28592,"nodeType":"OverrideSpecifier","overrides":[{"id":28590,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":31300,"src":"4328:17:115"},{"id":28591,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"4347:6:115"}],"src":"4319:35:115"},"parameters":{"id":28589,"nodeType":"ParameterList","parameters":[],"src":"4296:2:115"},"returnParameters":{"id":28595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28618,"src":"4364:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28593,"name":"uint256","nodeType":"ElementaryTypeName","src":"4364:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4363:9:115"},"scope":28936,"src":"4276:307:115","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[3961],"body":{"id":28627,"nodeType":"Block","src":"4690:27:115","statements":[{"expression":{"id":28625,"name":"_treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28343,"src":"4703:9:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":28624,"id":28626,"nodeType":"Return","src":"4696:16:115"}]},"documentation":{"id":28619,"nodeType":"StructuredDocumentation","src":"4587:23:115","text":"@inheritdoc IAToken"},"functionSelector":"ae167335","id":28628,"implemented":true,"kind":"function","modifiers":[],"name":"RESERVE_TREASURY_ADDRESS","nameLocation":"4622:24:115","nodeType":"FunctionDefinition","overrides":{"id":28621,"nodeType":"OverrideSpecifier","overrides":[],"src":"4663:8:115"},"parameters":{"id":28620,"nodeType":"ParameterList","parameters":[],"src":"4646:2:115"},"returnParameters":{"id":28624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28623,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28628,"src":"4681:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28622,"name":"address","nodeType":"ElementaryTypeName","src":"4681:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4680:9:115"},"scope":28936,"src":"4613:104:115","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3955],"body":{"id":28637,"nodeType":"Block","src":"4824:34:115","statements":[{"expression":{"id":28635,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"4837:16:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":28634,"id":28636,"nodeType":"Return","src":"4830:23:115"}]},"documentation":{"id":28629,"nodeType":"StructuredDocumentation","src":"4721:23:115","text":"@inheritdoc IAToken"},"functionSelector":"b16a19de","id":28638,"implemented":true,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"4756:24:115","nodeType":"FunctionDefinition","overrides":{"id":28631,"nodeType":"OverrideSpecifier","overrides":[],"src":"4797:8:115"},"parameters":{"id":28630,"nodeType":"ParameterList","parameters":[],"src":"4780:2:115"},"returnParameters":{"id":28634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28633,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28638,"src":"4815:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28632,"name":"address","nodeType":"ElementaryTypeName","src":"4815:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4814:9:115"},"scope":28936,"src":"4747:111:115","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3921],"body":{"id":28657,"nodeType":"Block","src":"4985:64:115","statements":[{"expression":{"arguments":[{"id":28653,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28641,"src":"5029:6:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28654,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28643,"src":"5037:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":28650,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"4998:16:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28649,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"4991:6:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":28651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4991:24:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":28652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"4991:37:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":28655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4991:53:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28656,"nodeType":"ExpressionStatement","src":"4991:53:115"}]},"documentation":{"id":28639,"nodeType":"StructuredDocumentation","src":"4862:23:115","text":"@inheritdoc IAToken"},"functionSelector":"4efecaa5","id":28658,"implemented":true,"kind":"function","modifiers":[{"id":28647,"kind":"modifierInvocation","modifierName":{"id":28646,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"4976:8:115"},"nodeType":"ModifierInvocation","src":"4976:8:115"}],"name":"transferUnderlyingTo","nameLocation":"4897:20:115","nodeType":"FunctionDefinition","overrides":{"id":28645,"nodeType":"OverrideSpecifier","overrides":[],"src":"4967:8:115"},"parameters":{"id":28644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28641,"mutability":"mutable","name":"target","nameLocation":"4926:6:115","nodeType":"VariableDeclaration","scope":28658,"src":"4918:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28640,"name":"address","nodeType":"ElementaryTypeName","src":"4918:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28643,"mutability":"mutable","name":"amount","nameLocation":"4942:6:115","nodeType":"VariableDeclaration","scope":28658,"src":"4934:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28642,"name":"uint256","nodeType":"ElementaryTypeName","src":"4934:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4917:32:115"},"returnParameters":{"id":28648,"nodeType":"ParameterList","parameters":[],"src":"4985:0:115"},"scope":28936,"src":"4888:161:115","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3931],"body":{"id":28671,"nodeType":"Block","src":"5205:37:115","statements":[]},"documentation":{"id":28659,"nodeType":"StructuredDocumentation","src":"5053:23:115","text":"@inheritdoc IAToken"},"functionSelector":"6fd97676","id":28672,"implemented":true,"kind":"function","modifiers":[{"id":28669,"kind":"modifierInvocation","modifierName":{"id":28668,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"5196:8:115"},"nodeType":"ModifierInvocation","src":"5196:8:115"}],"name":"handleRepayment","nameLocation":"5088:15:115","nodeType":"FunctionDefinition","overrides":{"id":28667,"nodeType":"OverrideSpecifier","overrides":[],"src":"5187:8:115"},"parameters":{"id":28666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28661,"mutability":"mutable","name":"user","nameLocation":"5117:4:115","nodeType":"VariableDeclaration","scope":28672,"src":"5109:12:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28660,"name":"address","nodeType":"ElementaryTypeName","src":"5109:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28663,"mutability":"mutable","name":"onBehalfOf","nameLocation":"5135:10:115","nodeType":"VariableDeclaration","scope":28672,"src":"5127:18:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28662,"name":"address","nodeType":"ElementaryTypeName","src":"5127:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28665,"mutability":"mutable","name":"amount","nameLocation":"5159:6:115","nodeType":"VariableDeclaration","scope":28672,"src":"5151:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28664,"name":"uint256","nodeType":"ElementaryTypeName","src":"5151:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5103:66:115"},"returnParameters":{"id":28670,"nodeType":"ParameterList","parameters":[],"src":"5205:0:115"},"scope":28936,"src":"5079:163:115","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3949],"body":{"id":28766,"nodeType":"Block","src":"5434:593:115","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28692,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28675,"src":"5448:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":28695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5465:1:115","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":28694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5457:7:115","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28693,"name":"address","nodeType":"ElementaryTypeName","src":"5457:7:115","typeDescriptions":{}}},"id":28696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5457:10:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5448:19:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28698,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5469:6:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":14776,"src":"5469:29:115","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28691,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5440:7:115","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5440:59:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28701,"nodeType":"ExpressionStatement","src":"5440:59:115"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":28703,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5544:5:115","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":28704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"5544:15:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":28705,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28681,"src":"5563:8:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5544:27:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28707,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5573:6:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EXPIRATION","nodeType":"MemberAccess","referencedDeclaration":14779,"src":"5573:25:115","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28702,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5536:7:115","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5536:63:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28710,"nodeType":"ExpressionStatement","src":"5536:63:115"},{"assignments":[28712],"declarations":[{"constant":false,"id":28712,"mutability":"mutable","name":"currentValidNonce","nameLocation":"5613:17:115","nodeType":"VariableDeclaration","scope":28766,"src":"5605:25:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28711,"name":"uint256","nodeType":"ElementaryTypeName","src":"5605:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28716,"initialValue":{"baseExpression":{"id":28713,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30691,"src":"5633:7:115","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":28715,"indexExpression":{"id":28714,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28675,"src":"5641:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5633:14:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5605:42:115"},{"assignments":[28718],"declarations":[{"constant":false,"id":28718,"mutability":"mutable","name":"digest","nameLocation":"5661:6:115","nodeType":"VariableDeclaration","scope":28766,"src":"5653:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28717,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5653:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":28738,"initialValue":{"arguments":[{"arguments":[{"hexValue":"1901","id":28722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5713:10:115","typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},"value":"\u0019\u0001"},{"arguments":[],"expression":{"argumentTypes":[],"id":28723,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[28877],"referencedDeclaration":28877,"src":"5733:16:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":28724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5733:18:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":28728,"name":"PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28338,"src":"5782:15:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28729,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28675,"src":"5799:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28730,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28677,"src":"5806:7:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28731,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28679,"src":"5815:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28732,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28712,"src":"5822:17:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28733,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28681,"src":"5841:8:115","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":28726,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5771:3:115","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":28727,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"5771:10:115","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":28734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5771:79:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":28725,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5761:9:115","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":28735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5761:90:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28720,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5687:3:115","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":28721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"5687:16:115","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":28736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5687:172:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":28719,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5670:9:115","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":28737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5670:195:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5653:212:115"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28740,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28675,"src":"5879:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":28742,"name":"digest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28718,"src":"5898:6:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28743,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28683,"src":"5906:1:115","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28744,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28685,"src":"5909:1:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28745,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28687,"src":"5912:1:115","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":28741,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"5888:9:115","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":28746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5888:26:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5879:35:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28748,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"5916:6:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_SIGNATURE","nodeType":"MemberAccess","referencedDeclaration":14782,"src":"5916:24:115","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28739,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5871:7:115","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5871:70:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28751,"nodeType":"ExpressionStatement","src":"5871:70:115"},{"expression":{"id":28758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":28752,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30691,"src":"5947:7:115","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":28754,"indexExpression":{"id":28753,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28675,"src":"5955:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5947:14:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28755,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28712,"src":"5964:17:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":28756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5984:1:115","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5964:21:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5947:38:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28759,"nodeType":"ExpressionStatement","src":"5947:38:115"},{"expression":{"arguments":[{"id":28761,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28675,"src":"6000:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28762,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28677,"src":"6007:7:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28763,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28679,"src":"6016:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28760,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31266,"src":"5991:8:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5991:31:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28765,"nodeType":"ExpressionStatement","src":"5991:31:115"}]},"documentation":{"id":28673,"nodeType":"StructuredDocumentation","src":"5246:23:115","text":"@inheritdoc IAToken"},"functionSelector":"d505accf","id":28767,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"5281:6:115","nodeType":"FunctionDefinition","overrides":{"id":28689,"nodeType":"OverrideSpecifier","overrides":[],"src":"5425:8:115"},"parameters":{"id":28688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28675,"mutability":"mutable","name":"owner","nameLocation":"5301:5:115","nodeType":"VariableDeclaration","scope":28767,"src":"5293:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28674,"name":"address","nodeType":"ElementaryTypeName","src":"5293:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28677,"mutability":"mutable","name":"spender","nameLocation":"5320:7:115","nodeType":"VariableDeclaration","scope":28767,"src":"5312:15:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28676,"name":"address","nodeType":"ElementaryTypeName","src":"5312:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28679,"mutability":"mutable","name":"value","nameLocation":"5341:5:115","nodeType":"VariableDeclaration","scope":28767,"src":"5333:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28678,"name":"uint256","nodeType":"ElementaryTypeName","src":"5333:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28681,"mutability":"mutable","name":"deadline","nameLocation":"5360:8:115","nodeType":"VariableDeclaration","scope":28767,"src":"5352:16:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28680,"name":"uint256","nodeType":"ElementaryTypeName","src":"5352:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28683,"mutability":"mutable","name":"v","nameLocation":"5380:1:115","nodeType":"VariableDeclaration","scope":28767,"src":"5374:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28682,"name":"uint8","nodeType":"ElementaryTypeName","src":"5374:5:115","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":28685,"mutability":"mutable","name":"r","nameLocation":"5395:1:115","nodeType":"VariableDeclaration","scope":28767,"src":"5387:9:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28684,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5387:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28687,"mutability":"mutable","name":"s","nameLocation":"5410:1:115","nodeType":"VariableDeclaration","scope":28767,"src":"5402:9:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28686,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5402:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5287:128:115"},"returnParameters":{"id":28690,"nodeType":"ParameterList","parameters":[],"src":"5434:0:115"},"scope":28936,"src":"5272:755:115","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":28843,"nodeType":"Block","src":"6480:499:115","statements":[{"assignments":[28780],"declarations":[{"constant":false,"id":28780,"mutability":"mutable","name":"underlyingAsset","nameLocation":"6494:15:115","nodeType":"VariableDeclaration","scope":28843,"src":"6486:23:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28779,"name":"address","nodeType":"ElementaryTypeName","src":"6486:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":28782,"initialValue":{"id":28781,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"6512:16:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6486:42:115"},{"assignments":[28784],"declarations":[{"constant":false,"id":28784,"mutability":"mutable","name":"index","nameLocation":"6543:5:115","nodeType":"VariableDeclaration","scope":28843,"src":"6535:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28783,"name":"uint256","nodeType":"ElementaryTypeName","src":"6535:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28789,"initialValue":{"arguments":[{"id":28787,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28780,"src":"6583:15:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28785,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"6551:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":28786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":4906,"src":"6551:31:115","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":28788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6551:48:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6535:64:115"},{"assignments":[28791],"declarations":[{"constant":false,"id":28791,"mutability":"mutable","name":"fromBalanceBefore","nameLocation":"6614:17:115","nodeType":"VariableDeclaration","scope":28843,"src":"6606:25:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28790,"name":"uint256","nodeType":"ElementaryTypeName","src":"6606:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28799,"initialValue":{"arguments":[{"id":28797,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28784,"src":"6663:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":28794,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28770,"src":"6650:4:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28792,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6634:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$28936_$","typeString":"type(contract super AToken)"}},"id":28793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"6634:15:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6634:21:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"6634:28:115","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":28798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6634:35:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6606:63:115"},{"assignments":[28801],"declarations":[{"constant":false,"id":28801,"mutability":"mutable","name":"toBalanceBefore","nameLocation":"6683:15:115","nodeType":"VariableDeclaration","scope":28843,"src":"6675:23:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28800,"name":"uint256","nodeType":"ElementaryTypeName","src":"6675:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28809,"initialValue":{"arguments":[{"id":28807,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28784,"src":"6728:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":28804,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28772,"src":"6717:2:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28802,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6701:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$28936_$","typeString":"type(contract super AToken)"}},"id":28803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"6701:15:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6701:19:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"6701:26:115","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":28808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6701:33:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6675:59:115"},{"expression":{"arguments":[{"id":28813,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28770,"src":"6757:4:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28814,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28772,"src":"6763:2:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28774,"src":"6767:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28816,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28784,"src":"6775:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28810,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6741:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$28936_$","typeString":"type(contract super AToken)"}},"id":28812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_transfer","nodeType":"MemberAccess","referencedDeclaration":31916,"src":"6741:15:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":28817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6741:40:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28818,"nodeType":"ExpressionStatement","src":"6741:40:115"},{"condition":{"id":28819,"name":"validate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28776,"src":"6792:8:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28832,"nodeType":"IfStatement","src":"6788:121:115","trueBody":{"id":28831,"nodeType":"Block","src":"6802:107:115","statements":[{"expression":{"arguments":[{"id":28823,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28780,"src":"6832:15:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28824,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28770,"src":"6849:4:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28825,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28772,"src":"6855:2:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28826,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28774,"src":"6859:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28827,"name":"fromBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28791,"src":"6867:17:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28828,"name":"toBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28801,"src":"6886:15:115","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"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28820,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"6810:4:115","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":28822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"finalizeTransfer","nodeType":"MemberAccess","referencedDeclaration":4939,"src":"6810:21:115","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256,uint256) external"}},"id":28829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6810:92:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28830,"nodeType":"ExpressionStatement","src":"6810:92:115"}]}},{"eventCall":{"arguments":[{"id":28834,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28770,"src":"6936:4:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28835,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28772,"src":"6942:2:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":28838,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28784,"src":"6960:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28836,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28774,"src":"6946:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"6946:13:115","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":28839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6946:20:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28840,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28784,"src":"6968:5:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28833,"name":"BalanceTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3869,"src":"6920:15:115","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":28841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6920:54:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28842,"nodeType":"EmitStatement","src":"6915:59:115"}]},"documentation":{"id":28768,"nodeType":"StructuredDocumentation","src":"6031:353:115","text":" @notice Transfers the aTokens between two users. Validates the transfer\n (ie checks for valid HF after the transfer) if required\n @param from The source address\n @param to The destination address\n @param amount The amount getting transferred\n @param validate True if the transfer needs to be validated, false otherwise"},"id":28844,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6396:9:115","nodeType":"FunctionDefinition","parameters":{"id":28777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28770,"mutability":"mutable","name":"from","nameLocation":"6414:4:115","nodeType":"VariableDeclaration","scope":28844,"src":"6406:12:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28769,"name":"address","nodeType":"ElementaryTypeName","src":"6406:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28772,"mutability":"mutable","name":"to","nameLocation":"6428:2:115","nodeType":"VariableDeclaration","scope":28844,"src":"6420:10:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28771,"name":"address","nodeType":"ElementaryTypeName","src":"6420:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28774,"mutability":"mutable","name":"amount","nameLocation":"6440:6:115","nodeType":"VariableDeclaration","scope":28844,"src":"6432:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28773,"name":"uint256","nodeType":"ElementaryTypeName","src":"6432:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28776,"mutability":"mutable","name":"validate","nameLocation":"6453:8:115","nodeType":"VariableDeclaration","scope":28844,"src":"6448:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28775,"name":"bool","nodeType":"ElementaryTypeName","src":"6448:4:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6405:57:115"},"returnParameters":{"id":28778,"nodeType":"ParameterList","parameters":[],"src":"6480:0:115"},"scope":28936,"src":"6387:592:115","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[31241],"body":{"id":28862,"nodeType":"Block","src":"7300:44:115","statements":[{"expression":{"arguments":[{"id":28856,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28847,"src":"7316:4:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28857,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28849,"src":"7322:2:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28858,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28851,"src":"7326:6:115","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"hexValue":"74727565","id":28859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7334:4:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":28855,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[28844,28863,31916],"referencedDeclaration":28844,"src":"7306:9:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":28860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7306:33:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28861,"nodeType":"ExpressionStatement","src":"7306:33:115"}]},"documentation":{"id":28845,"nodeType":"StructuredDocumentation","src":"6983:227:115","text":" @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\n @param from The source address\n @param to The destination address\n @param amount The amount getting transferred"},"id":28863,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"7222:9:115","nodeType":"FunctionDefinition","overrides":{"id":28853,"nodeType":"OverrideSpecifier","overrides":[],"src":"7291:8:115"},"parameters":{"id":28852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28847,"mutability":"mutable","name":"from","nameLocation":"7240:4:115","nodeType":"VariableDeclaration","scope":28863,"src":"7232:12:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28846,"name":"address","nodeType":"ElementaryTypeName","src":"7232:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28849,"mutability":"mutable","name":"to","nameLocation":"7254:2:115","nodeType":"VariableDeclaration","scope":28863,"src":"7246:10:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28848,"name":"address","nodeType":"ElementaryTypeName","src":"7246:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28851,"mutability":"mutable","name":"amount","nameLocation":"7266:6:115","nodeType":"VariableDeclaration","scope":28863,"src":"7258:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28850,"name":"uint128","nodeType":"ElementaryTypeName","src":"7258:7:115","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7231:42:115"},"returnParameters":{"id":28854,"nodeType":"ParameterList","parameters":[],"src":"7300:0:115"},"scope":28936,"src":"7213:131:115","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[3967,30723],"body":{"id":28876,"nodeType":"Block","src":"7591:42:115","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28872,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"7604:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$28936_$","typeString":"type(contract super AToken)"}},"id":28873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DOMAIN_SEPARATOR","nodeType":"MemberAccess","referencedDeclaration":30723,"src":"7604:22:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":28874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7604:24:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":28871,"id":28875,"nodeType":"Return","src":"7597:31:115"}]},"documentation":{"id":28864,"nodeType":"StructuredDocumentation","src":"7348:152:115","text":" @dev Overrides the base function to fully implement IAToken\n @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"functionSelector":"3644e515","id":28877,"implemented":true,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"7512:16:115","nodeType":"FunctionDefinition","overrides":{"id":28868,"nodeType":"OverrideSpecifier","overrides":[{"id":28866,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3986,"src":"7552:7:115"},{"id":28867,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":30773,"src":"7561:10:115"}],"src":"7543:29:115"},"parameters":{"id":28865,"nodeType":"ParameterList","parameters":[],"src":"7528:2:115"},"returnParameters":{"id":28871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28870,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28877,"src":"7582:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28869,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7582:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7581:9:115"},"scope":28936,"src":"7503:130:115","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3975,30736],"body":{"id":28893,"nodeType":"Block","src":"7873:37:115","statements":[{"expression":{"arguments":[{"id":28890,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28880,"src":"7899:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28888,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"7886:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$28936_$","typeString":"type(contract super AToken)"}},"id":28889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":30736,"src":"7886:12:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7886:19:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28887,"id":28892,"nodeType":"Return","src":"7879:26:115"}]},"documentation":{"id":28878,"nodeType":"StructuredDocumentation","src":"7637:142:115","text":" @dev Overrides the base function to fully implement IAToken\n @dev see `EIP712Base.nonces()` for more detailed documentation"},"functionSelector":"7ecebe00","id":28894,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"7791:6:115","nodeType":"FunctionDefinition","overrides":{"id":28884,"nodeType":"OverrideSpecifier","overrides":[{"id":28882,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3986,"src":"7834:7:115"},{"id":28883,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":30773,"src":"7843:10:115"}],"src":"7825:29:115"},"parameters":{"id":28881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28880,"mutability":"mutable","name":"owner","nameLocation":"7806:5:115","nodeType":"VariableDeclaration","scope":28894,"src":"7798:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28879,"name":"address","nodeType":"ElementaryTypeName","src":"7798:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7797:15:115"},"returnParameters":{"id":28887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28886,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28894,"src":"7864:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28885,"name":"uint256","nodeType":"ElementaryTypeName","src":"7864:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7863:9:115"},"scope":28936,"src":"7782:128:115","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[30772],"body":{"id":28904,"nodeType":"Block","src":"8015:24:115","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":28901,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30926,"src":"8028:4:115","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":28902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8028:6:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":28900,"id":28903,"nodeType":"Return","src":"8021:13:115"}]},"documentation":{"id":28895,"nodeType":"StructuredDocumentation","src":"7914:26:115","text":"@inheritdoc EIP712Base"},"id":28905,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712BaseId","nameLocation":"7952:13:115","nodeType":"FunctionDefinition","overrides":{"id":28897,"nodeType":"OverrideSpecifier","overrides":[],"src":"7982:8:115"},"parameters":{"id":28896,"nodeType":"ParameterList","parameters":[],"src":"7965:2:115"},"returnParameters":{"id":28900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28899,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28905,"src":"8000:13:115","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":28898,"name":"string","nodeType":"ElementaryTypeName","src":"8000:6:115","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7999:15:115"},"scope":28936,"src":"7943:96:115","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[3985],"body":{"id":28934,"nodeType":"Block","src":"8166:126:115","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28919,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28908,"src":"8180:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":28920,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"8189:16:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8180:25:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28922,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"8207:6:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":28923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"UNDERLYING_CANNOT_BE_RESCUED","nodeType":"MemberAccess","referencedDeclaration":14800,"src":"8207:35:115","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28918,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8172:7:115","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8172:71:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28925,"nodeType":"ExpressionStatement","src":"8172:71:115"},{"expression":{"arguments":[{"id":28930,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28910,"src":"8276:2:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28931,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28912,"src":"8280:6:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":28927,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28908,"src":"8256:5:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28926,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"8249:6:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":28928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8249:13:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":28929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"8249:26:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":28932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8249:38:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28933,"nodeType":"ExpressionStatement","src":"8249:38:115"}]},"documentation":{"id":28906,"nodeType":"StructuredDocumentation","src":"8043:23:115","text":"@inheritdoc IAToken"},"functionSelector":"cea9d26f","id":28935,"implemented":true,"kind":"function","modifiers":[{"id":28916,"kind":"modifierInvocation","modifierName":{"id":28915,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":30830,"src":"8152:13:115"},"nodeType":"ModifierInvocation","src":"8152:13:115"}],"name":"rescueTokens","nameLocation":"8078:12:115","nodeType":"FunctionDefinition","overrides":{"id":28914,"nodeType":"OverrideSpecifier","overrides":[],"src":"8143:8:115"},"parameters":{"id":28913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28908,"mutability":"mutable","name":"token","nameLocation":"8099:5:115","nodeType":"VariableDeclaration","scope":28935,"src":"8091:13:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28907,"name":"address","nodeType":"ElementaryTypeName","src":"8091:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28910,"mutability":"mutable","name":"to","nameLocation":"8114:2:115","nodeType":"VariableDeclaration","scope":28935,"src":"8106:10:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28909,"name":"address","nodeType":"ElementaryTypeName","src":"8106:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28912,"mutability":"mutable","name":"amount","nameLocation":"8126:6:115","nodeType":"VariableDeclaration","scope":28935,"src":"8118:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28911,"name":"uint256","nodeType":"ElementaryTypeName","src":"8118:7:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8090:43:115"},"returnParameters":{"id":28917,"nodeType":"ParameterList","parameters":[],"src":"8166:0:115"},"scope":28936,"src":"8069:223:115","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":28937,"src":"1116:7178:115","usedErrors":[]}],"src":"37:8258:115"},"id":115},"contracts/protocol/tokenization/DelegationAwareAToken.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/DelegationAwareAToken.sol","exportedSymbols":{"AToken":[28936],"DelegationAwareAToken":[28984],"IDelegationToken":[4226],"IPool":[5073]},"id":28985,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":28938,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:116"},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":28940,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28985,"sourceUnit":5074,"src":"63:49:116","symbolAliases":[{"foreign":{"id":28939,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:5:116","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IDelegationToken.sol","file":"../../interfaces/IDelegationToken.sol","id":28942,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28985,"sourceUnit":4227,"src":"113:71:116","symbolAliases":[{"foreign":{"id":28941,"name":"IDelegationToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"121:16:116","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/AToken.sol","file":"./AToken.sol","id":28944,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28985,"sourceUnit":28937,"src":"185:36:116","symbolAliases":[{"foreign":{"id":28943,"name":"AToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"193:6:116","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":28946,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":28936,"src":"498:6:116"},"id":28947,"nodeType":"InheritanceSpecifier","src":"498:6:116"}],"canonicalName":"DelegationAwareAToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":28945,"nodeType":"StructuredDocumentation","src":"223:240:116","text":" @title DelegationAwareAToken\n @author Aave\n @notice AToken enabled to delegate voting power of the underlying asset to a different address\n @dev The underlying asset needs to be compatible with the COMP delegation interface"},"fullyImplemented":true,"id":28984,"linearizedBaseContracts":[28984,28936,3986,4301,30773,31917,6188,31450,31300,1464,1442,748,12750],"name":"DelegationAwareAToken","nameLocation":"473:21:116","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":28948,"nodeType":"StructuredDocumentation","src":"509:120:116","text":" @dev Emitted when underlying voting power is delegated\n @param delegatee The address of the delegatee"},"id":28952,"name":"DelegateUnderlyingTo","nameLocation":"638:20:116","nodeType":"EventDefinition","parameters":{"id":28951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28950,"indexed":true,"mutability":"mutable","name":"delegatee","nameLocation":"675:9:116","nodeType":"VariableDeclaration","scope":28952,"src":"659:25:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28949,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"658:27:116"},"src":"632:54:116"},{"body":{"id":28962,"nodeType":"Block","src":"812:37:116","statements":[]},"documentation":{"id":28953,"nodeType":"StructuredDocumentation","src":"690:82:116","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":28963,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":28959,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28956,"src":"806:4:116","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"id":28960,"kind":"baseConstructorSpecifier","modifierName":{"id":28958,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":28936,"src":"799:6:116"},"nodeType":"ModifierInvocation","src":"799:12:116"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":28957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28956,"mutability":"mutable","name":"pool","nameLocation":"793:4:116","nodeType":"VariableDeclaration","scope":28963,"src":"787:10:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":28955,"nodeType":"UserDefinedTypeName","pathNode":{"id":28954,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"787:5:116"},"referencedDeclaration":5073,"src":"787:5:116","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"786:12:116"},"returnParameters":{"id":28961,"nodeType":"ParameterList","parameters":[],"src":"812:0:116"},"scope":28984,"src":"775:74:116","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":28982,"nodeType":"Block","src":"1089:107:116","statements":[{"expression":{"arguments":[{"id":28975,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28966,"src":"1139:9:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":28972,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28345,"src":"1112:16:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28971,"name":"IDelegationToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4226,"src":"1095:16:116","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDelegationToken_$4226_$","typeString":"type(contract IDelegationToken)"}},"id":28973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1095:34:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDelegationToken_$4226","typeString":"contract IDelegationToken"}},"id":28974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegate","nodeType":"MemberAccess","referencedDeclaration":4225,"src":"1095:43:116","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":28976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1095:54:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28977,"nodeType":"ExpressionStatement","src":"1095:54:116"},{"eventCall":{"arguments":[{"id":28979,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28966,"src":"1181:9:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28978,"name":"DelegateUnderlyingTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28952,"src":"1160:20:116","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":28980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1160:31:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28981,"nodeType":"EmitStatement","src":"1155:36:116"}]},"documentation":{"id":28964,"nodeType":"StructuredDocumentation","src":"853:161:116","text":" @notice Delegates voting power of the underlying asset to a `delegatee` address\n @param delegatee The address that will receive the delegation"},"functionSelector":"2f114618","id":28983,"implemented":true,"kind":"function","modifiers":[{"id":28969,"kind":"modifierInvocation","modifierName":{"id":28968,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":30830,"src":"1075:13:116"},"nodeType":"ModifierInvocation","src":"1075:13:116"}],"name":"delegateUnderlyingTo","nameLocation":"1026:20:116","nodeType":"FunctionDefinition","parameters":{"id":28967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28966,"mutability":"mutable","name":"delegatee","nameLocation":"1055:9:116","nodeType":"VariableDeclaration","scope":28983,"src":"1047:17:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28965,"name":"address","nodeType":"ElementaryTypeName","src":"1047:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1046:19:116"},"returnParameters":{"id":28970,"nodeType":"ParameterList","parameters":[],"src":"1089:0:116"},"scope":28984,"src":"1017:179:116","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":28985,"src":"464:734:116","usedErrors":[]}],"src":"37:1162:116"},"id":116},"contracts/protocol/tokenization/StableDebtToken.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/StableDebtToken.sol","exportedSymbols":{"DebtTokenBase":[30673],"EIP712Base":[30773],"Errors":[14819],"IAaveIncentivesController":[4000],"IERC20":[1442],"IInitializableDebtToken":[4346],"IPool":[5073],"IStableDebtToken":[6340],"IncentivizedERC20":[31300],"MathUtils":[23692],"SafeCast":[1966],"StableDebtToken":[30059],"VersionedInitializable":[12750],"WadRayMath":[23813]},"id":30060,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":28986,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:117"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":28988,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":1443,"src":"63:76:117","symbolAliases":[{"foreign":{"id":28987,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":28990,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":12751,"src":"140:99:117","symbolAliases":[{"foreign":{"id":28989,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"148:22:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/MathUtils.sol","file":"../libraries/math/MathUtils.sol","id":28992,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":23693,"src":"240:58:117","symbolAliases":[{"foreign":{"id":28991,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"src":"248:9:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../libraries/math/WadRayMath.sol","id":28994,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":23814,"src":"299:60:117","symbolAliases":[{"foreign":{"id":28993,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"307:10:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":28996,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":14820,"src":"360:55:117","symbolAliases":[{"foreign":{"id":28995,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"368:6:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","file":"../../interfaces/IAaveIncentivesController.sol","id":28998,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":4001,"src":"416:89:117","symbolAliases":[{"foreign":{"id":28997,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"424:25:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IInitializableDebtToken.sol","file":"../../interfaces/IInitializableDebtToken.sol","id":29000,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":4347,"src":"506:85:117","symbolAliases":[{"foreign":{"id":28999,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"514:23:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IStableDebtToken.sol","file":"../../interfaces/IStableDebtToken.sol","id":29002,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":6341,"src":"592:71:117","symbolAliases":[{"foreign":{"id":29001,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"600:16:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":29004,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":5074,"src":"664:49:117","symbolAliases":[{"foreign":{"id":29003,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"672:5:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/EIP712Base.sol","file":"./base/EIP712Base.sol","id":29006,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":30774,"src":"714:49:117","symbolAliases":[{"foreign":{"id":29005,"name":"EIP712Base","nodeType":"Identifier","overloadedDeclarations":[],"src":"722:10:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/DebtTokenBase.sol","file":"./base/DebtTokenBase.sol","id":29008,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":30674,"src":"764:55:117","symbolAliases":[{"foreign":{"id":29007,"name":"DebtTokenBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"772:13:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"./base/IncentivizedERC20.sol","id":29010,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":31301,"src":"820:63:117","symbolAliases":[{"foreign":{"id":29009,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"828:17:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../dependencies/openzeppelin/contracts/SafeCast.sol","id":29012,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30060,"sourceUnit":1967,"src":"884:80:117","symbolAliases":[{"foreign":{"id":29011,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"892:8:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":29014,"name":"DebtTokenBase","nodeType":"IdentifierPath","referencedDeclaration":30673,"src":"1244:13:117"},"id":29015,"nodeType":"InheritanceSpecifier","src":"1244:13:117"},{"baseName":{"id":29016,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":31300,"src":"1259:17:117"},"id":29017,"nodeType":"InheritanceSpecifier","src":"1259:17:117"},{"baseName":{"id":29018,"name":"IStableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":6340,"src":"1278:16:117"},"id":29019,"nodeType":"InheritanceSpecifier","src":"1278:16:117"}],"canonicalName":"StableDebtToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":29013,"nodeType":"StructuredDocumentation","src":"966:249:117","text":" @title StableDebtToken\n @author Aave\n @notice Implements a stable debt token to track the borrowing positions of users\n at stable rate mode\n @dev Transfer and approve functionalities are disabled since its a non-transferable token"},"fullyImplemented":true,"id":30059,"linearizedBaseContracts":[30059,6340,4346,31300,1464,1442,30673,4127,748,30773,12750],"name":"StableDebtToken","nameLocation":"1225:15:117","nodeType":"ContractDefinition","nodes":[{"id":29022,"libraryName":{"id":29020,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1305:10:117"},"nodeType":"UsingForDirective","src":"1299:29:117","typeName":{"id":29021,"name":"uint256","nodeType":"ElementaryTypeName","src":"1320:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":29025,"libraryName":{"id":29023,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1337:8:117"},"nodeType":"UsingForDirective","src":"1331:27:117","typeName":{"id":29024,"name":"uint256","nodeType":"ElementaryTypeName","src":"1350:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"functionSelector":"b9a7b622","id":29028,"mutability":"constant","name":"DEBT_TOKEN_REVISION","nameLocation":"1386:19:117","nodeType":"VariableDeclaration","scope":30059,"src":"1362:49:117","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29026,"name":"uint256","nodeType":"ElementaryTypeName","src":"1362:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":29027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1408:3:117","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"constant":false,"id":29032,"mutability":"mutable","name":"_timestamps","nameLocation":"1554:11:117","nodeType":"VariableDeclaration","scope":30059,"src":"1518:47:117","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"},"typeName":{"id":29031,"keyType":{"id":29029,"name":"address","nodeType":"ElementaryTypeName","src":"1526:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1518:26:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"},"valueType":{"id":29030,"name":"uint40","nodeType":"ElementaryTypeName","src":"1537:6:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}},"visibility":"internal"},{"constant":false,"id":29034,"mutability":"mutable","name":"_avgStableRate","nameLocation":"1587:14:117","nodeType":"VariableDeclaration","scope":30059,"src":"1570:31:117","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":29033,"name":"uint128","nodeType":"ElementaryTypeName","src":"1570:7:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":29036,"mutability":"mutable","name":"_totalSupplyTimestamp","nameLocation":"1676:21:117","nodeType":"VariableDeclaration","scope":30059,"src":"1660:37:117","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":29035,"name":"uint40","nodeType":"ElementaryTypeName","src":"1660:6:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"body":{"id":29051,"nodeType":"Block","src":"1914:37:117","statements":[]},"documentation":{"id":29037,"nodeType":"StructuredDocumentation","src":"1702:82:117","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":29052,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":29043,"kind":"baseConstructorSpecifier","modifierName":{"id":29042,"name":"DebtTokenBase","nodeType":"IdentifierPath","referencedDeclaration":30673,"src":"1819:13:117"},"nodeType":"ModifierInvocation","src":"1819:15:117"},{"arguments":[{"id":29045,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29040,"src":"1853:4:117","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"hexValue":"535441424c455f444542545f544f4b454e5f494d504c","id":29046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1859:24:117","typeDescriptions":{"typeIdentifier":"t_stringliteral_d8a924851ae84ebd4bea6282eeeaea45c38e81aa54290363a47944b2edbeb9ac","typeString":"literal_string \"STABLE_DEBT_TOKEN_IMPL\""},"value":"STABLE_DEBT_TOKEN_IMPL"},{"hexValue":"535441424c455f444542545f544f4b454e5f494d504c","id":29047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1885:24:117","typeDescriptions":{"typeIdentifier":"t_stringliteral_d8a924851ae84ebd4bea6282eeeaea45c38e81aa54290363a47944b2edbeb9ac","typeString":"literal_string \"STABLE_DEBT_TOKEN_IMPL\""},"value":"STABLE_DEBT_TOKEN_IMPL"},{"hexValue":"30","id":29048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1911:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":29049,"kind":"baseConstructorSpecifier","modifierName":{"id":29044,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":31300,"src":"1835:17:117"},"nodeType":"ModifierInvocation","src":"1835:78:117"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":29041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29040,"mutability":"mutable","name":"pool","nameLocation":"1810:4:117","nodeType":"VariableDeclaration","scope":29052,"src":"1804:10:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":29039,"nodeType":"UserDefinedTypeName","pathNode":{"id":29038,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1804:5:117"},"referencedDeclaration":5073,"src":"1804:5:117","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1798:20:117"},"returnParameters":{"id":29050,"nodeType":"ParameterList","parameters":[],"src":"1914:0:117"},"scope":30059,"src":"1787:164:117","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4345],"body":{"id":29124,"nodeType":"Block","src":"2284:516:117","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"id":29078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29076,"name":"initializingPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29056,"src":"2298:16:117","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":29077,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"2318:4:117","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"2298:24:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29079,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2324:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":29080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"POOL_ADDRESSES_DO_NOT_MATCH","nodeType":"MemberAccess","referencedDeclaration":14806,"src":"2324:34:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":29075,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2290:7:117","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2290:69:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29082,"nodeType":"ExpressionStatement","src":"2290:69:117"},{"expression":{"arguments":[{"id":29084,"name":"debtTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29065,"src":"2374:13:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":29083,"name":"_setName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31277,"src":"2365:8:117","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":29085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2365:23:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29086,"nodeType":"ExpressionStatement","src":"2365:23:117"},{"expression":{"arguments":[{"id":29088,"name":"debtTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29067,"src":"2405:15:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":29087,"name":"_setSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31288,"src":"2394:10:117","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":29089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2394:27:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29090,"nodeType":"ExpressionStatement","src":"2394:27:117"},{"expression":{"arguments":[{"id":29092,"name":"debtTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29063,"src":"2440:17:117","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":29091,"name":"_setDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31299,"src":"2427:12:117","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":29093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2427:31:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29094,"nodeType":"ExpressionStatement","src":"2427:31:117"},{"expression":{"id":29097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29095,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30475,"src":"2465:16:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29096,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29058,"src":"2484:15:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2465:34:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":29098,"nodeType":"ExpressionStatement","src":"2465:34:117"},{"expression":{"id":29101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29099,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"2505:21:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29100,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29061,"src":"2529:20:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"src":"2505:44:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":29102,"nodeType":"ExpressionStatement","src":"2505:44:117"},{"expression":{"id":29106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29103,"name":"_domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30693,"src":"2556:16:117","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":29104,"name":"_calculateDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30766,"src":"2575:25:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":29105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2575:27:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2556:46:117","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29107,"nodeType":"ExpressionStatement","src":"2556:46:117"},{"eventCall":{"arguments":[{"id":29109,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29058,"src":"2633:15:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":29112,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"2664:4:117","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":29111,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2656:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29110,"name":"address","nodeType":"ElementaryTypeName","src":"2656:7:117","typeDescriptions":{}}},"id":29113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2656:13:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":29116,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29061,"src":"2685:20:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}],"id":29115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2677:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29114,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:117","typeDescriptions":{}}},"id":29117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2677:29:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29118,"name":"debtTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29063,"src":"2714:17:117","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":29119,"name":"debtTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29065,"src":"2739:13:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":29120,"name":"debtTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29067,"src":"2760:15:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":29121,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29069,"src":"2783:6:117","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":29108,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4325,"src":"2614:11:117","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint8,string memory,string memory,bytes memory)"}},"id":29122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2614:181:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29123,"nodeType":"EmitStatement","src":"2609:186:117"}]},"documentation":{"id":29053,"nodeType":"StructuredDocumentation","src":"1955:39:117","text":"@inheritdoc IInitializableDebtToken"},"functionSelector":"c222ec8a","id":29125,"implemented":true,"kind":"function","modifiers":[{"id":29073,"kind":"modifierInvocation","modifierName":{"id":29072,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"2272:11:117"},"nodeType":"ModifierInvocation","src":"2272:11:117"}],"name":"initialize","nameLocation":"2006:10:117","nodeType":"FunctionDefinition","overrides":{"id":29071,"nodeType":"OverrideSpecifier","overrides":[],"src":"2263:8:117"},"parameters":{"id":29070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29056,"mutability":"mutable","name":"initializingPool","nameLocation":"2028:16:117","nodeType":"VariableDeclaration","scope":29125,"src":"2022:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":29055,"nodeType":"UserDefinedTypeName","pathNode":{"id":29054,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"2022:5:117"},"referencedDeclaration":5073,"src":"2022:5:117","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":29058,"mutability":"mutable","name":"underlyingAsset","nameLocation":"2058:15:117","nodeType":"VariableDeclaration","scope":29125,"src":"2050:23:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29057,"name":"address","nodeType":"ElementaryTypeName","src":"2050:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29061,"mutability":"mutable","name":"incentivesController","nameLocation":"2105:20:117","nodeType":"VariableDeclaration","scope":29125,"src":"2079:46:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":29060,"nodeType":"UserDefinedTypeName","pathNode":{"id":29059,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"2079:25:117"},"referencedDeclaration":4000,"src":"2079:25:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":29063,"mutability":"mutable","name":"debtTokenDecimals","nameLocation":"2137:17:117","nodeType":"VariableDeclaration","scope":29125,"src":"2131:23:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29062,"name":"uint8","nodeType":"ElementaryTypeName","src":"2131:5:117","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":29065,"mutability":"mutable","name":"debtTokenName","nameLocation":"2174:13:117","nodeType":"VariableDeclaration","scope":29125,"src":"2160:27:117","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":29064,"name":"string","nodeType":"ElementaryTypeName","src":"2160:6:117","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":29067,"mutability":"mutable","name":"debtTokenSymbol","nameLocation":"2207:15:117","nodeType":"VariableDeclaration","scope":29125,"src":"2193:29:117","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":29066,"name":"string","nodeType":"ElementaryTypeName","src":"2193:6:117","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":29069,"mutability":"mutable","name":"params","nameLocation":"2243:6:117","nodeType":"VariableDeclaration","scope":29125,"src":"2228:21:117","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":29068,"name":"bytes","nodeType":"ElementaryTypeName","src":"2228:5:117","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2016:237:117"},"returnParameters":{"id":29074,"nodeType":"ParameterList","parameters":[],"src":"2284:0:117"},"scope":30059,"src":"1997:803:117","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[12730],"body":{"id":29134,"nodeType":"Block","src":"2917:37:117","statements":[{"expression":{"id":29132,"name":"DEBT_TOKEN_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29028,"src":"2930:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29131,"id":29133,"nodeType":"Return","src":"2923:26:117"}]},"documentation":{"id":29126,"nodeType":"StructuredDocumentation","src":"2804:38:117","text":"@inheritdoc VersionedInitializable"},"id":29135,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2854:11:117","nodeType":"FunctionDefinition","overrides":{"id":29128,"nodeType":"OverrideSpecifier","overrides":[],"src":"2890:8:117"},"parameters":{"id":29127,"nodeType":"ParameterList","parameters":[],"src":"2865:2:117"},"returnParameters":{"id":29131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29135,"src":"2908:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29129,"name":"uint256","nodeType":"ElementaryTypeName","src":"2908:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2907:9:117"},"scope":30059,"src":"2845:109:117","stateMutability":"pure","virtual":true,"visibility":"internal"},{"baseFunctions":[6283],"body":{"id":29144,"nodeType":"Block","src":"3074:32:117","statements":[{"expression":{"id":29142,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"3087:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":29141,"id":29143,"nodeType":"Return","src":"3080:21:117"}]},"documentation":{"id":29136,"nodeType":"StructuredDocumentation","src":"2958:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"90f6fcf2","id":29145,"implemented":true,"kind":"function","modifiers":[],"name":"getAverageStableRate","nameLocation":"3002:20:117","nodeType":"FunctionDefinition","overrides":{"id":29138,"nodeType":"OverrideSpecifier","overrides":[],"src":"3047:8:117"},"parameters":{"id":29137,"nodeType":"ParameterList","parameters":[],"src":"3022:2:117"},"returnParameters":{"id":29141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29145,"src":"3065:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29139,"name":"uint256","nodeType":"ElementaryTypeName","src":"3065:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3064:9:117"},"scope":30059,"src":"2993:113:117","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[6299],"body":{"id":29158,"nodeType":"Block","src":"3235:35:117","statements":[{"expression":{"baseExpression":{"id":29154,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29032,"src":"3248:11:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":29156,"indexExpression":{"id":29155,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29148,"src":"3260:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3248:17:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":29153,"id":29157,"nodeType":"Return","src":"3241:24:117"}]},"documentation":{"id":29146,"nodeType":"StructuredDocumentation","src":"3110:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"79ce6b8c","id":29159,"implemented":true,"kind":"function","modifiers":[],"name":"getUserLastUpdated","nameLocation":"3154:18:117","nodeType":"FunctionDefinition","overrides":{"id":29150,"nodeType":"OverrideSpecifier","overrides":[],"src":"3209:8:117"},"parameters":{"id":29149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29148,"mutability":"mutable","name":"user","nameLocation":"3181:4:117","nodeType":"VariableDeclaration","scope":29159,"src":"3173:12:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29147,"name":"address","nodeType":"ElementaryTypeName","src":"3173:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3172:14:117"},"returnParameters":{"id":29153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29159,"src":"3227:6:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":29151,"name":"uint40","nodeType":"ElementaryTypeName","src":"3227:6:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"3226:8:117"},"scope":30059,"src":"3145:125:117","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[6291],"body":{"id":29173,"nodeType":"Block","src":"3399:49:117","statements":[{"expression":{"expression":{"baseExpression":{"id":29168,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"3412:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29170,"indexExpression":{"id":29169,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29162,"src":"3423:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3412:16:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29171,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"3412:31:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":29167,"id":29172,"nodeType":"Return","src":"3405:38:117"}]},"documentation":{"id":29160,"nodeType":"StructuredDocumentation","src":"3274:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"e78c9b3b","id":29174,"implemented":true,"kind":"function","modifiers":[],"name":"getUserStableRate","nameLocation":"3318:17:117","nodeType":"FunctionDefinition","overrides":{"id":29164,"nodeType":"OverrideSpecifier","overrides":[],"src":"3372:8:117"},"parameters":{"id":29163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29162,"mutability":"mutable","name":"user","nameLocation":"3344:4:117","nodeType":"VariableDeclaration","scope":29174,"src":"3336:12:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29161,"name":"address","nodeType":"ElementaryTypeName","src":"3336:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3335:14:117"},"returnParameters":{"id":29167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29174,"src":"3390:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29165,"name":"uint256","nodeType":"ElementaryTypeName","src":"3390:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3389:9:117"},"scope":30059,"src":"3309:139:117","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[30971],"body":{"id":29219,"nodeType":"Block","src":"3560:350:117","statements":[{"assignments":[29184],"declarations":[{"constant":false,"id":29184,"mutability":"mutable","name":"accountBalance","nameLocation":"3574:14:117","nodeType":"VariableDeclaration","scope":29219,"src":"3566:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29183,"name":"uint256","nodeType":"ElementaryTypeName","src":"3566:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29189,"initialValue":{"arguments":[{"id":29187,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29177,"src":"3607:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29185,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3591:5:117","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$30059_$","typeString":"type(contract super StableDebtToken)"}},"id":29186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"3591:15:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":29188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3591:24:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3566:49:117"},{"assignments":[29191],"declarations":[{"constant":false,"id":29191,"mutability":"mutable","name":"stableRate","nameLocation":"3629:10:117","nodeType":"VariableDeclaration","scope":29219,"src":"3621:18:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29190,"name":"uint256","nodeType":"ElementaryTypeName","src":"3621:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29196,"initialValue":{"expression":{"baseExpression":{"id":29192,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"3642:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29194,"indexExpression":{"id":29193,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29177,"src":"3653:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3642:19:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"3642:34:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3621:55:117"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29197,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29184,"src":"3686:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":29198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3704:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3686:19:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29203,"nodeType":"IfStatement","src":"3682:48:117","trueBody":{"id":29202,"nodeType":"Block","src":"3707:23:117","statements":[{"expression":{"hexValue":"30","id":29200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3722:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":29182,"id":29201,"nodeType":"Return","src":"3715:8:117"}]}},{"assignments":[29205],"declarations":[{"constant":false,"id":29205,"mutability":"mutable","name":"cumulatedInterest","nameLocation":"3743:17:117","nodeType":"VariableDeclaration","scope":29219,"src":"3735:25:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29204,"name":"uint256","nodeType":"ElementaryTypeName","src":"3735:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29213,"initialValue":{"arguments":[{"id":29208,"name":"stableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29191,"src":"3808:10:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":29209,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29032,"src":"3826:11:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":29211,"indexExpression":{"id":29210,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29177,"src":"3838:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3826:20:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":29206,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23692,"src":"3763:9:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$23692_$","typeString":"type(library MathUtils)"}},"id":29207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":23691,"src":"3763:37:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":29212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3763:89:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3735:117:117"},{"expression":{"arguments":[{"id":29216,"name":"cumulatedInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29205,"src":"3887:17:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29214,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29184,"src":"3865:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"3865:21:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3865:40:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29182,"id":29218,"nodeType":"Return","src":"3858:47:117"}]},"documentation":{"id":29175,"nodeType":"StructuredDocumentation","src":"3452:22:117","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":29220,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3486:9:117","nodeType":"FunctionDefinition","overrides":{"id":29179,"nodeType":"OverrideSpecifier","overrides":[],"src":"3533:8:117"},"parameters":{"id":29178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29177,"mutability":"mutable","name":"account","nameLocation":"3504:7:117","nodeType":"VariableDeclaration","scope":29220,"src":"3496:15:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29176,"name":"address","nodeType":"ElementaryTypeName","src":"3496:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3495:17:117"},"returnParameters":{"id":29182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29220,"src":"3551:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29180,"name":"uint256","nodeType":"ElementaryTypeName","src":"3551:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3550:9:117"},"scope":30059,"src":"3477:433:117","stateMutability":"view","virtual":true,"visibility":"public"},{"canonicalName":"StableDebtToken.MintLocalVars","id":29233,"members":[{"constant":false,"id":29222,"mutability":"mutable","name":"previousSupply","nameLocation":"3949:14:117","nodeType":"VariableDeclaration","scope":29233,"src":"3941:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29221,"name":"uint256","nodeType":"ElementaryTypeName","src":"3941:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29224,"mutability":"mutable","name":"nextSupply","nameLocation":"3977:10:117","nodeType":"VariableDeclaration","scope":29233,"src":"3969:18:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29223,"name":"uint256","nodeType":"ElementaryTypeName","src":"3969:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29226,"mutability":"mutable","name":"amountInRay","nameLocation":"4001:11:117","nodeType":"VariableDeclaration","scope":29233,"src":"3993:19:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29225,"name":"uint256","nodeType":"ElementaryTypeName","src":"3993:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29228,"mutability":"mutable","name":"currentStableRate","nameLocation":"4026:17:117","nodeType":"VariableDeclaration","scope":29233,"src":"4018:25:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29227,"name":"uint256","nodeType":"ElementaryTypeName","src":"4018:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29230,"mutability":"mutable","name":"nextStableRate","nameLocation":"4057:14:117","nodeType":"VariableDeclaration","scope":29233,"src":"4049:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29229,"name":"uint256","nodeType":"ElementaryTypeName","src":"4049:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29232,"mutability":"mutable","name":"currentAvgStableRate","nameLocation":"4085:20:117","nodeType":"VariableDeclaration","scope":29233,"src":"4077:28:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29231,"name":"uint256","nodeType":"ElementaryTypeName","src":"4077:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"MintLocalVars","nameLocation":"3921:13:117","nodeType":"StructDefinition","scope":30059,"src":"3914:196:117","visibility":"public"},{"baseFunctions":[6265],"body":{"id":29443,"nodeType":"Block","src":"4315:1573:117","statements":[{"assignments":[29256],"declarations":[{"constant":false,"id":29256,"mutability":"mutable","name":"vars","nameLocation":"4342:4:117","nodeType":"VariableDeclaration","scope":29443,"src":"4321:25:117","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars"},"typeName":{"id":29255,"nodeType":"UserDefinedTypeName","pathNode":{"id":29254,"name":"MintLocalVars","nodeType":"IdentifierPath","referencedDeclaration":29233,"src":"4321:13:117"},"referencedDeclaration":29233,"src":"4321:13:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_storage_ptr","typeString":"struct StableDebtToken.MintLocalVars"}},"visibility":"internal"}],"id":29257,"nodeType":"VariableDeclarationStatement","src":"4321:25:117"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":29260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29258,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29236,"src":"4357:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":29259,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"4365:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4357:18:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29268,"nodeType":"IfStatement","src":"4353:89:117","trueBody":{"id":29267,"nodeType":"Block","src":"4377:65:117","statements":[{"expression":{"arguments":[{"id":29262,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"4410:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29263,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29236,"src":"4422:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29264,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29240,"src":"4428:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29261,"name":"_decreaseBorrowAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30672,"src":"4385:24:117","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":29265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4385:50:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29266,"nodeType":"ExpressionStatement","src":"4385:50:117"}]}},{"assignments":[null,29270,29272],"declarations":[null,{"constant":false,"id":29270,"mutability":"mutable","name":"currentBalance","nameLocation":"4459:14:117","nodeType":"VariableDeclaration","scope":29443,"src":"4451:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29269,"name":"uint256","nodeType":"ElementaryTypeName","src":"4451:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29272,"mutability":"mutable","name":"balanceIncrease","nameLocation":"4483:15:117","nodeType":"VariableDeclaration","scope":29443,"src":"4475:23:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29271,"name":"uint256","nodeType":"ElementaryTypeName","src":"4475:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29276,"initialValue":{"arguments":[{"id":29274,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"4528:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29273,"name":"_calculateBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29714,"src":"4502:25:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (address) view returns (uint256,uint256,uint256)"}},"id":29275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4502:37:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4448:91:117"},{"expression":{"id":29282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":29277,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4546:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"previousSupply","nodeType":"MemberAccess","referencedDeclaration":29222,"src":"4546:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":29280,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[29774],"referencedDeclaration":29774,"src":"4568:11:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":29281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4568:13:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4546:35:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29283,"nodeType":"ExpressionStatement","src":"4546:35:117"},{"expression":{"id":29288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":29284,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4587:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":29232,"src":"4587:25:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29287,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"4615:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4587:42:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29289,"nodeType":"ExpressionStatement","src":"4587:42:117"},{"expression":{"id":29299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":29290,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4635:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextSupply","nodeType":"MemberAccess","referencedDeclaration":29224,"src":"4635:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29293,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"4653:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29294,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4668:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"previousSupply","nodeType":"MemberAccess","referencedDeclaration":29222,"src":"4668:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":29296,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29240,"src":"4690:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4668:28:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4653:43:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4635:61:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29300,"nodeType":"ExpressionStatement","src":"4635:61:117"},{"expression":{"id":29307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":29301,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4703:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amountInRay","nodeType":"MemberAccess","referencedDeclaration":29226,"src":"4703:16:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29304,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29240,"src":"4722:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"4722:15:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":29306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4722:17:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4703:36:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29308,"nodeType":"ExpressionStatement","src":"4703:36:117"},{"expression":{"id":29316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":29309,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4746:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29311,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableRate","nodeType":"MemberAccess","referencedDeclaration":29228,"src":"4746:22:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":29312,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"4771:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29314,"indexExpression":{"id":29313,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"4782:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4771:22:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"4771:37:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4746:62:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29317,"nodeType":"ExpressionStatement","src":"4746:62:117"},{"expression":{"id":29343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":29318,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4814:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":29230,"src":"4814:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29336,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29270,"src":"4941:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":29337,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29240,"src":"4958:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4941:23:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29339,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4940:25:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"4940:34:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":29341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4940:36:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29324,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29270,"src":"4867:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"4867:23:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":29326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4867:25:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":29321,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4837:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableRate","nodeType":"MemberAccess","referencedDeclaration":29228,"src":"4837:22:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"4837:29:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4837:56:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":29331,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29242,"src":"4926:4:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":29328,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"4902:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountInRay","nodeType":"MemberAccess","referencedDeclaration":29226,"src":"4902:16:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"4902:23:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4902:29:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4837:94:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29334,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4836:96:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"4836:103:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4836:141:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4814:163:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29344,"nodeType":"ExpressionStatement","src":"4814:163:117"},{"expression":{"id":29353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":29345,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"4984:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29347,"indexExpression":{"id":29346,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"4995:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4984:22:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"4984:37:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":29349,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5024:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29350,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":29230,"src":"5024:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5024:29:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":29352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5024:31:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4984:71:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":29354,"nodeType":"ExpressionStatement","src":"4984:71:117"},{"expression":{"id":29365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29355,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29036,"src":"5093:21:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":29356,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29032,"src":"5117:11:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":29358,"indexExpression":{"id":29357,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"5129:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5117:23:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":29361,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5150:5:117","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":29362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"5150:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5143:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":29359,"name":"uint40","nodeType":"ElementaryTypeName","src":"5143:6:117","typeDescriptions":{}}},"id":29363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5143:23:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"5117:49:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"5093:73:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":29366,"nodeType":"ExpressionStatement","src":"5093:73:117"},{"expression":{"id":29396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":29367,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5223:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":29232,"src":"5223:25:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29370,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"5251:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":29387,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5390:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextSupply","nodeType":"MemberAccess","referencedDeclaration":29224,"src":"5390:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"5390:24:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":29390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5390:26:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":29374,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5310:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29375,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"previousSupply","nodeType":"MemberAccess","referencedDeclaration":29222,"src":"5310:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"5310:28:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":29377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5310:30:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":29371,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5277:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":29232,"src":"5277:25:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"5277:32:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5277:64:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":29381,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5364:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29382,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountInRay","nodeType":"MemberAccess","referencedDeclaration":29226,"src":"5364:16:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29379,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29242,"src":"5352:4:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"5352:11:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5352:29:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5277:104:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29385,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5276:106:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"5276:113:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5276:141:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29392,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5268:155:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5268:165:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":29394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5268:167:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5251:184:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5223:212:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29397,"nodeType":"ExpressionStatement","src":"5223:212:117"},{"assignments":[29399],"declarations":[{"constant":false,"id":29399,"mutability":"mutable","name":"amountToMint","nameLocation":"5450:12:117","nodeType":"VariableDeclaration","scope":29443,"src":"5442:20:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29398,"name":"uint256","nodeType":"ElementaryTypeName","src":"5442:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29403,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29400,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29240,"src":"5465:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":29401,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29272,"src":"5474:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5465:24:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5442:47:117"},{"expression":{"arguments":[{"id":29405,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"5501:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29406,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29399,"src":"5513:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29407,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5527:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"previousSupply","nodeType":"MemberAccess","referencedDeclaration":29222,"src":"5527:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29404,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29896,"src":"5495:5:117","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":29409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5495:52:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29410,"nodeType":"ExpressionStatement","src":"5495:52:117"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":29414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5576:1:117","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":29413,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5568:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29412,"name":"address","nodeType":"ElementaryTypeName","src":"5568:7:117","typeDescriptions":{}}},"id":29415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5568:10:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29416,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"5580:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29417,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29399,"src":"5592:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29411,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"5559:8:117","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":29418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5559:46:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29419,"nodeType":"EmitStatement","src":"5554:51:117"},{"eventCall":{"arguments":[{"id":29421,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29236,"src":"5628:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29422,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29238,"src":"5640:10:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29423,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29399,"src":"5658:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29424,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29270,"src":"5678:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29425,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29272,"src":"5700:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29426,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5723:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":29230,"src":"5723:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29428,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5750:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":29232,"src":"5750:25:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29430,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5783:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextSupply","nodeType":"MemberAccess","referencedDeclaration":29224,"src":"5783:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"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"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29420,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6232,"src":"5616:4:117","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":29432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5616:188:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29433,"nodeType":"EmitStatement","src":"5611:193:117"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29434,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29270,"src":"5819:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":29435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5837:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5819:19:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29437,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5840:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextSupply","nodeType":"MemberAccess","referencedDeclaration":29224,"src":"5840:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29439,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29256,"src":"5857:4:117","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$29233_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":29440,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":29232,"src":"5857:25:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29441,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5818:65:117","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"functionReturnParameters":29253,"id":29442,"nodeType":"Return","src":"5811:72:117"}]},"documentation":{"id":29234,"nodeType":"StructuredDocumentation","src":"4114:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"b3f1c93d","id":29444,"implemented":true,"kind":"function","modifiers":[{"id":29246,"kind":"modifierInvocation","modifierName":{"id":29245,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"4273:8:117"},"nodeType":"ModifierInvocation","src":"4273:8:117"}],"name":"mint","nameLocation":"4158:4:117","nodeType":"FunctionDefinition","overrides":{"id":29244,"nodeType":"OverrideSpecifier","overrides":[],"src":"4264:8:117"},"parameters":{"id":29243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29236,"mutability":"mutable","name":"user","nameLocation":"4176:4:117","nodeType":"VariableDeclaration","scope":29444,"src":"4168:12:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29235,"name":"address","nodeType":"ElementaryTypeName","src":"4168:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29238,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4194:10:117","nodeType":"VariableDeclaration","scope":29444,"src":"4186:18:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29237,"name":"address","nodeType":"ElementaryTypeName","src":"4186:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29240,"mutability":"mutable","name":"amount","nameLocation":"4218:6:117","nodeType":"VariableDeclaration","scope":29444,"src":"4210:14:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29239,"name":"uint256","nodeType":"ElementaryTypeName","src":"4210:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29242,"mutability":"mutable","name":"rate","nameLocation":"4238:4:117","nodeType":"VariableDeclaration","scope":29444,"src":"4230:12:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29241,"name":"uint256","nodeType":"ElementaryTypeName","src":"4230:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4162:84:117"},"returnParameters":{"id":29253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29444,"src":"4291:4:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29247,"name":"bool","nodeType":"ElementaryTypeName","src":"4291:4:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29250,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29444,"src":"4297:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29249,"name":"uint256","nodeType":"ElementaryTypeName","src":"4297:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29252,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29444,"src":"4306:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29251,"name":"uint256","nodeType":"ElementaryTypeName","src":"4306:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4290:24:117"},"scope":30059,"src":"4149:1739:117","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[6277],"body":{"id":29670,"nodeType":"Block","src":"6045:2369:117","statements":[{"assignments":[null,29460,29462],"declarations":[null,{"constant":false,"id":29460,"mutability":"mutable","name":"currentBalance","nameLocation":"6062:14:117","nodeType":"VariableDeclaration","scope":29670,"src":"6054:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29459,"name":"uint256","nodeType":"ElementaryTypeName","src":"6054:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29462,"mutability":"mutable","name":"balanceIncrease","nameLocation":"6086:15:117","nodeType":"VariableDeclaration","scope":29670,"src":"6078:23:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29461,"name":"uint256","nodeType":"ElementaryTypeName","src":"6078:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29466,"initialValue":{"arguments":[{"id":29464,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"6131:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29463,"name":"_calculateBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29714,"src":"6105:25:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (address) view returns (uint256,uint256,uint256)"}},"id":29465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6105:31:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6051:85:117"},{"assignments":[29468],"declarations":[{"constant":false,"id":29468,"mutability":"mutable","name":"previousSupply","nameLocation":"6151:14:117","nodeType":"VariableDeclaration","scope":29670,"src":"6143:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29467,"name":"uint256","nodeType":"ElementaryTypeName","src":"6143:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29471,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":29469,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[29774],"referencedDeclaration":29774,"src":"6168:11:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":29470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6168:13:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6143:38:117"},{"assignments":[29473],"declarations":[{"constant":false,"id":29473,"mutability":"mutable","name":"nextAvgStableRate","nameLocation":"6195:17:117","nodeType":"VariableDeclaration","scope":29670,"src":"6187:25:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29472,"name":"uint256","nodeType":"ElementaryTypeName","src":"6187:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29475,"initialValue":{"hexValue":"30","id":29474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6215:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6187:29:117"},{"assignments":[29477],"declarations":[{"constant":false,"id":29477,"mutability":"mutable","name":"nextSupply","nameLocation":"6230:10:117","nodeType":"VariableDeclaration","scope":29670,"src":"6222:18:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29476,"name":"uint256","nodeType":"ElementaryTypeName","src":"6222:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29479,"initialValue":{"hexValue":"30","id":29478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6243:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6222:22:117"},{"assignments":[29481],"declarations":[{"constant":false,"id":29481,"mutability":"mutable","name":"userStableRate","nameLocation":"6258:14:117","nodeType":"VariableDeclaration","scope":29670,"src":"6250:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29480,"name":"uint256","nodeType":"ElementaryTypeName","src":"6250:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29486,"initialValue":{"expression":{"baseExpression":{"id":29482,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"6275:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29484,"indexExpression":{"id":29483,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"6286:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6275:16:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"6275:31:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6250:56:117"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29487,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29468,"src":"6621:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":29488,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29449,"src":"6639:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6621:24:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":29559,"nodeType":"Block","src":"6710:693:117","statements":[{"expression":{"id":29505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29499,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29477,"src":"6718:10:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29500,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"6731:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29501,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29468,"src":"6746:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29502,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29449,"src":"6763:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6746:23:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6731:38:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6718:51:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29506,"nodeType":"ExpressionStatement","src":"6718:51:117"},{"assignments":[29508],"declarations":[{"constant":false,"id":29508,"mutability":"mutable","name":"firstTerm","nameLocation":"6785:9:117","nodeType":"VariableDeclaration","scope":29559,"src":"6777:17:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29507,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29518,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29514,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29468,"src":"6828:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"6828:23:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":29516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6828:25:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":29511,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"6805:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":29510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6797:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":29509,"name":"uint256","nodeType":"ElementaryTypeName","src":"6797:7:117","typeDescriptions":{}}},"id":29512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6797:23:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"6797:30:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6797:57:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6777:77:117"},{"assignments":[29520],"declarations":[{"constant":false,"id":29520,"mutability":"mutable","name":"secondTerm","nameLocation":"6870:10:117","nodeType":"VariableDeclaration","scope":29559,"src":"6862:18:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29519,"name":"uint256","nodeType":"ElementaryTypeName","src":"6862:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29527,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29523,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29449,"src":"6905:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"6905:15:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":29525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6905:17:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29521,"name":"userStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29481,"src":"6883:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"6883:21:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6883:40:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6862:61:117"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29528,"name":"secondTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29520,"src":"7150:10:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":29529,"name":"firstTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29508,"src":"7164:9:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7150:23:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":29557,"nodeType":"Block","src":"7253:144:117","statements":[{"expression":{"id":29555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29540,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29473,"src":"7263:17:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29541,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"7283:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29547,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29477,"src":"7344:10:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":23812,"src":"7344:19:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":29549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7344:21:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29542,"name":"firstTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29508,"src":"7313:9:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29543,"name":"secondTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29520,"src":"7325:10:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7313:22:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29545,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7312:24:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"7312:31:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7312:54:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29551,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7300:76:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"7300:86:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":29553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7300:88:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7283:105:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7263:125:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29556,"nodeType":"ExpressionStatement","src":"7263:125:117"}]},"id":29558,"nodeType":"IfStatement","src":"7146:251:117","trueBody":{"id":29539,"nodeType":"Block","src":"7175:72:117","statements":[{"expression":{"id":29537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29531,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29473,"src":"7185:17:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29532,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"7205:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29533,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"7220:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":29534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7237:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7220:18:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7205:33:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7185:53:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29538,"nodeType":"ExpressionStatement","src":"7185:53:117"}]}}]},"id":29560,"nodeType":"IfStatement","src":"6617:786:117","trueBody":{"id":29498,"nodeType":"Block","src":"6647:57:117","statements":[{"expression":{"id":29492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29490,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"6655:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":29491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6672:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6655:18:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":29493,"nodeType":"ExpressionStatement","src":"6655:18:117"},{"expression":{"id":29496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29494,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"6681:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":29495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6696:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6681:16:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29497,"nodeType":"ExpressionStatement","src":"6681:16:117"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29561,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29449,"src":"7413:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":29562,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29460,"src":"7423:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7413:24:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":29588,"nodeType":"Block","src":"7524:91:117","statements":[{"expression":{"id":29586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":29578,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29032,"src":"7565:11:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":29580,"indexExpression":{"id":29579,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"7577:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7565:17:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":29583,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7592:5:117","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":29584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"7592:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29582,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7585:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":29581,"name":"uint40","nodeType":"ElementaryTypeName","src":"7585:6:117","typeDescriptions":{}}},"id":29585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7585:23:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"7565:43:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":29587,"nodeType":"ExpressionStatement","src":"7565:43:117"}]},"id":29589,"nodeType":"IfStatement","src":"7409:206:117","trueBody":{"id":29577,"nodeType":"Block","src":"7439:79:117","statements":[{"expression":{"id":29569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":29564,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"7447:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29566,"indexExpression":{"id":29565,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"7458:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7447:16:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"7447:31:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":29568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7481:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7447:35:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":29570,"nodeType":"ExpressionStatement","src":"7447:35:117"},{"expression":{"id":29575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":29571,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29032,"src":"7490:11:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":29573,"indexExpression":{"id":29572,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"7502:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7490:17:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":29574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7510:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7490:21:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":29576,"nodeType":"ExpressionStatement","src":"7490:21:117"}]}},{"expression":{"id":29596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29590,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29036,"src":"7651:21:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":29593,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7682:5:117","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":29594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"7682:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7675:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":29591,"name":"uint40","nodeType":"ElementaryTypeName","src":"7675:6:117","typeDescriptions":{}}},"id":29595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7675:23:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"7651:47:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":29597,"nodeType":"ExpressionStatement","src":"7651:47:117"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29598,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29462,"src":"7709:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":29599,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29449,"src":"7727:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7709:24:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":29664,"nodeType":"Block","src":"8100:265:117","statements":[{"assignments":[29635],"declarations":[{"constant":false,"id":29635,"mutability":"mutable","name":"amountToBurn","nameLocation":"8116:12:117","nodeType":"VariableDeclaration","scope":29664,"src":"8108:20:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29634,"name":"uint256","nodeType":"ElementaryTypeName","src":"8108:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29639,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29636,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29449,"src":"8131:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29637,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29462,"src":"8140:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8131:24:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8108:47:117"},{"expression":{"arguments":[{"id":29641,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"8169:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29642,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29635,"src":"8175:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29643,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29468,"src":"8189:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29640,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29948,"src":"8163:5:117","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":29644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8163:41:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29645,"nodeType":"ExpressionStatement","src":"8163:41:117"},{"eventCall":{"arguments":[{"id":29647,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"8226:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":29650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8240:1:117","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":29649,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8232:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29648,"name":"address","nodeType":"ElementaryTypeName","src":"8232:7:117","typeDescriptions":{}}},"id":29651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8232:10:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29652,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29635,"src":"8244:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29646,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"8217:8:117","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":29653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8217:40:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29654,"nodeType":"EmitStatement","src":"8212:45:117"},{"eventCall":{"arguments":[{"id":29656,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"8275:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29657,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29635,"src":"8281:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29658,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29460,"src":"8295:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29659,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29462,"src":"8311:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29660,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29473,"src":"8328:17:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29661,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29477,"src":"8347:10:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"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"}],"id":29655,"name":"Burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6247,"src":"8270:4:117","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256,uint256,uint256)"}},"id":29662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8270:88:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29663,"nodeType":"EmitStatement","src":"8265:93:117"}]},"id":29665,"nodeType":"IfStatement","src":"7705:660:117","trueBody":{"id":29633,"nodeType":"Block","src":"7735:359:117","statements":[{"assignments":[29602],"declarations":[{"constant":false,"id":29602,"mutability":"mutable","name":"amountToMint","nameLocation":"7751:12:117","nodeType":"VariableDeclaration","scope":29633,"src":"7743:20:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29601,"name":"uint256","nodeType":"ElementaryTypeName","src":"7743:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29606,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29603,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29462,"src":"7766:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29604,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29449,"src":"7784:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7766:24:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7743:47:117"},{"expression":{"arguments":[{"id":29608,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"7804:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29609,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"7810:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29610,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29468,"src":"7824:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29607,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29896,"src":"7798:5:117","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":29611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7798:41:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29612,"nodeType":"ExpressionStatement","src":"7798:41:117"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":29616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7869:1:117","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":29615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7861:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29614,"name":"address","nodeType":"ElementaryTypeName","src":"7861:7:117","typeDescriptions":{}}},"id":29617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7861:10:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29618,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"7873:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29619,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"7879:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29613,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"7852:8:117","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":29620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7852:40:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29621,"nodeType":"EmitStatement","src":"7847:45:117"},{"eventCall":{"arguments":[{"id":29623,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"7919:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29624,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"7933:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29625,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"7947:12:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29626,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29460,"src":"7969:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29627,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29462,"src":"7993:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29628,"name":"userStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29481,"src":"8018:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29629,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29473,"src":"8042:17:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29630,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29477,"src":"8069:10:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"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"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29622,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6232,"src":"7905:4:117","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":29631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7905:182:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29632,"nodeType":"EmitStatement","src":"7900:187:117"}]}},{"expression":{"components":[{"id":29666,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29477,"src":"8379:10:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29667,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29473,"src":"8391:17:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29668,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8378:31:117","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":29458,"id":29669,"nodeType":"Return","src":"8371:38:117"}]},"documentation":{"id":29445,"nodeType":"StructuredDocumentation","src":"5892:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"9dc29fac","id":29671,"implemented":true,"kind":"function","modifiers":[{"id":29453,"kind":"modifierInvocation","modifierName":{"id":29452,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"6009:8:117"},"nodeType":"ModifierInvocation","src":"6009:8:117"}],"name":"burn","nameLocation":"5936:4:117","nodeType":"FunctionDefinition","overrides":{"id":29451,"nodeType":"OverrideSpecifier","overrides":[],"src":"6000:8:117"},"parameters":{"id":29450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29447,"mutability":"mutable","name":"from","nameLocation":"5954:4:117","nodeType":"VariableDeclaration","scope":29671,"src":"5946:12:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29446,"name":"address","nodeType":"ElementaryTypeName","src":"5946:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29449,"mutability":"mutable","name":"amount","nameLocation":"5972:6:117","nodeType":"VariableDeclaration","scope":29671,"src":"5964:14:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29448,"name":"uint256","nodeType":"ElementaryTypeName","src":"5964:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5940:42:117"},"returnParameters":{"id":29458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29455,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29671,"src":"6027:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29454,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29457,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29671,"src":"6036:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29456,"name":"uint256","nodeType":"ElementaryTypeName","src":"6036:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6026:18:117"},"scope":30059,"src":"5927:2487:117","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":29713,"nodeType":"Block","src":"8819:324:117","statements":[{"assignments":[29684],"declarations":[{"constant":false,"id":29684,"mutability":"mutable","name":"previousPrincipalBalance","nameLocation":"8833:24:117","nodeType":"VariableDeclaration","scope":29713,"src":"8825:32:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29683,"name":"uint256","nodeType":"ElementaryTypeName","src":"8825:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29689,"initialValue":{"arguments":[{"id":29687,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29674,"src":"8876:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29685,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"8860:5:117","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$30059_$","typeString":"type(contract super StableDebtToken)"}},"id":29686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"8860:15:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":29688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8860:21:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8825:56:117"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29690,"name":"previousPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29684,"src":"8892:24:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":29691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8920:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8892:29:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29699,"nodeType":"IfStatement","src":"8888:66:117","trueBody":{"id":29698,"nodeType":"Block","src":"8923:31:117","statements":[{"expression":{"components":[{"hexValue":"30","id":29693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8939:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":29694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8942:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":29695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8945:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":29696,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8938:9:117","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0,int_const 0)"}},"functionReturnParameters":29682,"id":29697,"nodeType":"Return","src":"8931:16:117"}]}},{"assignments":[29701],"declarations":[{"constant":false,"id":29701,"mutability":"mutable","name":"newPrincipalBalance","nameLocation":"8968:19:117","nodeType":"VariableDeclaration","scope":29713,"src":"8960:27:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29700,"name":"uint256","nodeType":"ElementaryTypeName","src":"8960:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29705,"initialValue":{"arguments":[{"id":29703,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29674,"src":"9000:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29702,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[29220],"referencedDeclaration":29220,"src":"8990:9:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":29704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8990:15:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8960:45:117"},{"expression":{"components":[{"id":29706,"name":"previousPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29684,"src":"9027:24:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29707,"name":"newPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29701,"src":"9059:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29708,"name":"newPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29701,"src":"9086:19:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29709,"name":"previousPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29684,"src":"9108:24:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9086:46:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29711,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9019:119:117","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":29682,"id":29712,"nodeType":"Return","src":"9012:126:117"}]},"documentation":{"id":29672,"nodeType":"StructuredDocumentation","src":"8418:291:117","text":" @notice Calculates the increase in balance since the last user interaction\n @param user The address of the user for which the interest is being accumulated\n @return The previous principal balance\n @return The new principal balance\n @return The balance increase"},"id":29714,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateBalanceIncrease","nameLocation":"8721:25:117","nodeType":"FunctionDefinition","parameters":{"id":29675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29674,"mutability":"mutable","name":"user","nameLocation":"8760:4:117","nodeType":"VariableDeclaration","scope":29714,"src":"8752:12:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29673,"name":"address","nodeType":"ElementaryTypeName","src":"8752:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8746:22:117"},"returnParameters":{"id":29682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29714,"src":"8792:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29676,"name":"uint256","nodeType":"ElementaryTypeName","src":"8792:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29679,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29714,"src":"8801:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29678,"name":"uint256","nodeType":"ElementaryTypeName","src":"8801:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29681,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29714,"src":"8810:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29680,"name":"uint256","nodeType":"ElementaryTypeName","src":"8810:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8791:27:117"},"scope":30059,"src":"8712:431:117","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[6311],"body":{"id":29741,"nodeType":"Block","src":"9274:136:117","statements":[{"assignments":[29728],"declarations":[{"constant":false,"id":29728,"mutability":"mutable","name":"avgRate","nameLocation":"9288:7:117","nodeType":"VariableDeclaration","scope":29741,"src":"9280:15:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29727,"name":"uint256","nodeType":"ElementaryTypeName","src":"9280:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29730,"initialValue":{"id":29729,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"9298:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"9280:32:117"},{"expression":{"components":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29731,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"9326:5:117","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$30059_$","typeString":"type(contract super StableDebtToken)"}},"id":29732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30956,"src":"9326:17:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":29733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9326:19:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":29735,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29728,"src":"9364:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29734,"name":"_calcTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29844,"src":"9347:16:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":29736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9347:25:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29737,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29728,"src":"9374:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29738,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29036,"src":"9383:21:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"id":29739,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9325:80:117","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint40)"}},"functionReturnParameters":29726,"id":29740,"nodeType":"Return","src":"9318:87:117"}]},"documentation":{"id":29715,"nodeType":"StructuredDocumentation","src":"9147:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"79774338","id":29742,"implemented":true,"kind":"function","modifiers":[],"name":"getSupplyData","nameLocation":"9191:13:117","nodeType":"FunctionDefinition","overrides":{"id":29717,"nodeType":"OverrideSpecifier","overrides":[],"src":"9221:8:117"},"parameters":{"id":29716,"nodeType":"ParameterList","parameters":[],"src":"9204:2:117"},"returnParameters":{"id":29726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29719,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29742,"src":"9239:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29718,"name":"uint256","nodeType":"ElementaryTypeName","src":"9239:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29721,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29742,"src":"9248:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29720,"name":"uint256","nodeType":"ElementaryTypeName","src":"9248:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29723,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29742,"src":"9257:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29722,"name":"uint256","nodeType":"ElementaryTypeName","src":"9257:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29742,"src":"9266:6:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":29724,"name":"uint40","nodeType":"ElementaryTypeName","src":"9266:6:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"9238:35:117"},"scope":30059,"src":"9182:228:117","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6325],"body":{"id":29761,"nodeType":"Block","src":"9535:92:117","statements":[{"assignments":[29752],"declarations":[{"constant":false,"id":29752,"mutability":"mutable","name":"avgRate","nameLocation":"9549:7:117","nodeType":"VariableDeclaration","scope":29761,"src":"9541:15:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29751,"name":"uint256","nodeType":"ElementaryTypeName","src":"9541:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29754,"initialValue":{"id":29753,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"9559:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"9541:32:117"},{"expression":{"components":[{"arguments":[{"id":29756,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29752,"src":"9604:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29755,"name":"_calcTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29844,"src":"9587:16:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":29757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9587:25:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29758,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29752,"src":"9614:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29759,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9586:36:117","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":29750,"id":29760,"nodeType":"Return","src":"9579:43:117"}]},"documentation":{"id":29743,"nodeType":"StructuredDocumentation","src":"9414:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"f731e9be","id":29762,"implemented":true,"kind":"function","modifiers":[],"name":"getTotalSupplyAndAvgRate","nameLocation":"9458:24:117","nodeType":"FunctionDefinition","overrides":{"id":29745,"nodeType":"OverrideSpecifier","overrides":[],"src":"9499:8:117"},"parameters":{"id":29744,"nodeType":"ParameterList","parameters":[],"src":"9482:2:117"},"returnParameters":{"id":29750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29747,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29762,"src":"9517:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29746,"name":"uint256","nodeType":"ElementaryTypeName","src":"9517:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29762,"src":"9526:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29748,"name":"uint256","nodeType":"ElementaryTypeName","src":"9526:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9516:18:117"},"scope":30059,"src":"9449:178:117","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[30956],"body":{"id":29773,"nodeType":"Block","src":"9726:50:117","statements":[{"expression":{"arguments":[{"id":29770,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"9756:14:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":29769,"name":"_calcTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29844,"src":"9739:16:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":29771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9739:32:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29768,"id":29772,"nodeType":"Return","src":"9732:39:117"}]},"documentation":{"id":29763,"nodeType":"StructuredDocumentation","src":"9631:22:117","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":29774,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"9665:11:117","nodeType":"FunctionDefinition","overrides":{"id":29765,"nodeType":"OverrideSpecifier","overrides":[],"src":"9699:8:117"},"parameters":{"id":29764,"nodeType":"ParameterList","parameters":[],"src":"9676:2:117"},"returnParameters":{"id":29768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29774,"src":"9717:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29766,"name":"uint256","nodeType":"ElementaryTypeName","src":"9717:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9716:9:117"},"scope":30059,"src":"9656:120:117","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[6317],"body":{"id":29783,"nodeType":"Block","src":"9892:39:117","statements":[{"expression":{"id":29781,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29036,"src":"9905:21:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":29780,"id":29782,"nodeType":"Return","src":"9898:28:117"}]},"documentation":{"id":29775,"nodeType":"StructuredDocumentation","src":"9780:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"e7484890","id":29784,"implemented":true,"kind":"function","modifiers":[],"name":"getTotalSupplyLastUpdated","nameLocation":"9824:25:117","nodeType":"FunctionDefinition","overrides":{"id":29777,"nodeType":"OverrideSpecifier","overrides":[],"src":"9866:8:117"},"parameters":{"id":29776,"nodeType":"ParameterList","parameters":[],"src":"9849:2:117"},"returnParameters":{"id":29780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29784,"src":"9884:6:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":29778,"name":"uint40","nodeType":"ElementaryTypeName","src":"9884:6:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"9883:8:117"},"scope":30059,"src":"9815:116:117","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6333],"body":{"id":29798,"nodeType":"Block","src":"10061:39:117","statements":[{"expression":{"arguments":[{"id":29795,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29787,"src":"10090:4:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29793,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"10074:5:117","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$30059_$","typeString":"type(contract super StableDebtToken)"}},"id":29794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"10074:15:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":29796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10074:21:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29792,"id":29797,"nodeType":"Return","src":"10067:28:117"}]},"documentation":{"id":29785,"nodeType":"StructuredDocumentation","src":"9935:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"c634dfaa","id":29799,"implemented":true,"kind":"function","modifiers":[],"name":"principalBalanceOf","nameLocation":"9979:18:117","nodeType":"FunctionDefinition","overrides":{"id":29789,"nodeType":"OverrideSpecifier","overrides":[],"src":"10034:8:117"},"parameters":{"id":29788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29787,"mutability":"mutable","name":"user","nameLocation":"10006:4:117","nodeType":"VariableDeclaration","scope":29799,"src":"9998:12:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29786,"name":"address","nodeType":"ElementaryTypeName","src":"9998:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9997:14:117"},"returnParameters":{"id":29792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29799,"src":"10052:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29790,"name":"uint256","nodeType":"ElementaryTypeName","src":"10052:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10051:9:117"},"scope":30059,"src":"9970:130:117","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[6339],"body":{"id":29808,"nodeType":"Block","src":"10216:34:117","statements":[{"expression":{"id":29806,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30475,"src":"10229:16:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":29805,"id":29807,"nodeType":"Return","src":"10222:23:117"}]},"documentation":{"id":29800,"nodeType":"StructuredDocumentation","src":"10104:32:117","text":"@inheritdoc IStableDebtToken"},"functionSelector":"b16a19de","id":29809,"implemented":true,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"10148:24:117","nodeType":"FunctionDefinition","overrides":{"id":29802,"nodeType":"OverrideSpecifier","overrides":[],"src":"10189:8:117"},"parameters":{"id":29801,"nodeType":"ParameterList","parameters":[],"src":"10172:2:117"},"returnParameters":{"id":29805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29804,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29809,"src":"10207:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29803,"name":"address","nodeType":"ElementaryTypeName","src":"10207:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10206:9:117"},"scope":30059,"src":"10139:111:117","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":29843,"nodeType":"Block","src":"10529:288:117","statements":[{"assignments":[29818],"declarations":[{"constant":false,"id":29818,"mutability":"mutable","name":"principalSupply","nameLocation":"10543:15:117","nodeType":"VariableDeclaration","scope":29843,"src":"10535:23:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29817,"name":"uint256","nodeType":"ElementaryTypeName","src":"10535:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29822,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29819,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"10561:5:117","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$30059_$","typeString":"type(contract super StableDebtToken)"}},"id":29820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30956,"src":"10561:17:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":29821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10561:19:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10535:45:117"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29823,"name":"principalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29818,"src":"10591:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":29824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10610:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10591:20:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29829,"nodeType":"IfStatement","src":"10587:49:117","trueBody":{"id":29828,"nodeType":"Block","src":"10613:23:117","statements":[{"expression":{"hexValue":"30","id":29826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10628:1:117","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":29816,"id":29827,"nodeType":"Return","src":"10621:8:117"}]}},{"assignments":[29831],"declarations":[{"constant":false,"id":29831,"mutability":"mutable","name":"cumulatedInterest","nameLocation":"10650:17:117","nodeType":"VariableDeclaration","scope":29843,"src":"10642:25:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29830,"name":"uint256","nodeType":"ElementaryTypeName","src":"10642:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29837,"initialValue":{"arguments":[{"id":29834,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29812,"src":"10715:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29835,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29036,"src":"10730:21:117","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":29832,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23692,"src":"10670:9:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$23692_$","typeString":"type(library MathUtils)"}},"id":29833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":23691,"src":"10670:37:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":29836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10670:87:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10642:115:117"},{"expression":{"arguments":[{"id":29840,"name":"cumulatedInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29831,"src":"10794:17:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29838,"name":"principalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29818,"src":"10771:15:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"10771:22:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10771:41:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29816,"id":29842,"nodeType":"Return","src":"10764:48:117"}]},"documentation":{"id":29810,"nodeType":"StructuredDocumentation","src":"10254:197:117","text":" @notice Calculates the total supply\n @param avgRate The average rate at which the total supply increases\n @return The debt balance of the user since the last burn/mint action"},"id":29844,"implemented":true,"kind":"function","modifiers":[],"name":"_calcTotalSupply","nameLocation":"10463:16:117","nodeType":"FunctionDefinition","parameters":{"id":29813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29812,"mutability":"mutable","name":"avgRate","nameLocation":"10488:7:117","nodeType":"VariableDeclaration","scope":29844,"src":"10480:15:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29811,"name":"uint256","nodeType":"ElementaryTypeName","src":"10480:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10479:17:117"},"returnParameters":{"id":29816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29815,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29844,"src":"10520:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29814,"name":"uint256","nodeType":"ElementaryTypeName","src":"10520:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10519:9:117"},"scope":30059,"src":"10454:363:117","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":29895,"nodeType":"Block","src":"11132:326:117","statements":[{"assignments":[29855],"declarations":[{"constant":false,"id":29855,"mutability":"mutable","name":"castAmount","nameLocation":"11146:10:117","nodeType":"VariableDeclaration","scope":29895,"src":"11138:18:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":29854,"name":"uint128","nodeType":"ElementaryTypeName","src":"11138:7:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":29859,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29856,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29849,"src":"11159:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"11159:16:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":29858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11159:18:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11138:39:117"},{"assignments":[29861],"declarations":[{"constant":false,"id":29861,"mutability":"mutable","name":"oldAccountBalance","nameLocation":"11191:17:117","nodeType":"VariableDeclaration","scope":29895,"src":"11183:25:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":29860,"name":"uint128","nodeType":"ElementaryTypeName","src":"11183:7:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":29866,"initialValue":{"expression":{"baseExpression":{"id":29862,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"11211:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29864,"indexExpression":{"id":29863,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29847,"src":"11222:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11211:19:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"11211:27:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11183:55:117"},{"expression":{"id":29874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":29867,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"11244:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29869,"indexExpression":{"id":29868,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29847,"src":"11255:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11244:19:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"11244:27:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":29873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29871,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"11274:17:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":29872,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29855,"src":"11294:10:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11274:30:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11244:60:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":29875,"nodeType":"ExpressionStatement","src":"11244:60:117"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":29884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":29878,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"11323:21:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}],"id":29877,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11315:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29876,"name":"address","nodeType":"ElementaryTypeName","src":"11315:7:117","typeDescriptions":{}}},"id":29879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11315:30:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":29882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11357:1:117","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":29881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11349:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29880,"name":"address","nodeType":"ElementaryTypeName","src":"11349:7:117","typeDescriptions":{}}},"id":29883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11349:10:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11315:44:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29894,"nodeType":"IfStatement","src":"11311:143:117","trueBody":{"id":29893,"nodeType":"Block","src":"11361:93:117","statements":[{"expression":{"arguments":[{"id":29888,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29847,"src":"11404:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29889,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29851,"src":"11413:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29890,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"11429:17:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":29885,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"11369:21:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":29887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3999,"src":"11369:34:117","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":29891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11369:78:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29892,"nodeType":"ExpressionStatement","src":"11369:78:117"}]}}]},"documentation":{"id":29845,"nodeType":"StructuredDocumentation","src":"10821:227:117","text":" @notice Mints stable debt tokens to a user\n @param account The account receiving the debt tokens\n @param amount The amount being minted\n @param oldTotalSupply The total supply before the minting event"},"id":29896,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"11060:5:117","nodeType":"FunctionDefinition","parameters":{"id":29852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29847,"mutability":"mutable","name":"account","nameLocation":"11074:7:117","nodeType":"VariableDeclaration","scope":29896,"src":"11066:15:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29846,"name":"address","nodeType":"ElementaryTypeName","src":"11066:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29849,"mutability":"mutable","name":"amount","nameLocation":"11091:6:117","nodeType":"VariableDeclaration","scope":29896,"src":"11083:14:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29848,"name":"uint256","nodeType":"ElementaryTypeName","src":"11083:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29851,"mutability":"mutable","name":"oldTotalSupply","nameLocation":"11107:14:117","nodeType":"VariableDeclaration","scope":29896,"src":"11099:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29850,"name":"uint256","nodeType":"ElementaryTypeName","src":"11099:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11065:57:117"},"returnParameters":{"id":29853,"nodeType":"ParameterList","parameters":[],"src":"11132:0:117"},"scope":30059,"src":"11051:407:117","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29947,"nodeType":"Block","src":"11768:326:117","statements":[{"assignments":[29907],"declarations":[{"constant":false,"id":29907,"mutability":"mutable","name":"castAmount","nameLocation":"11782:10:117","nodeType":"VariableDeclaration","scope":29947,"src":"11774:18:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":29906,"name":"uint128","nodeType":"ElementaryTypeName","src":"11774:7:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":29911,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29908,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29901,"src":"11795:6:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"11795:16:117","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":29910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11795:18:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11774:39:117"},{"assignments":[29913],"declarations":[{"constant":false,"id":29913,"mutability":"mutable","name":"oldAccountBalance","nameLocation":"11827:17:117","nodeType":"VariableDeclaration","scope":29947,"src":"11819:25:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":29912,"name":"uint128","nodeType":"ElementaryTypeName","src":"11819:7:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":29918,"initialValue":{"expression":{"baseExpression":{"id":29914,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"11847:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29916,"indexExpression":{"id":29915,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29899,"src":"11858:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11847:19:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"11847:27:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11819:55:117"},{"expression":{"id":29926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":29919,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"11880:10:117","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":29921,"indexExpression":{"id":29920,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29899,"src":"11891:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11880:19:117","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":29922,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"11880:27:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":29925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29923,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29913,"src":"11910:17:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29924,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29907,"src":"11930:10:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11910:30:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11880:60:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":29927,"nodeType":"ExpressionStatement","src":"11880:60:117"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":29936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":29930,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"11959:21:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}],"id":29929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11951:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29928,"name":"address","nodeType":"ElementaryTypeName","src":"11951:7:117","typeDescriptions":{}}},"id":29931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11951:30:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":29934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11993:1:117","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":29933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11985:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29932,"name":"address","nodeType":"ElementaryTypeName","src":"11985:7:117","typeDescriptions":{}}},"id":29935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11985:10:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11951:44:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29946,"nodeType":"IfStatement","src":"11947:143:117","trueBody":{"id":29945,"nodeType":"Block","src":"11997:93:117","statements":[{"expression":{"arguments":[{"id":29940,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29899,"src":"12040:7:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29941,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29903,"src":"12049:14:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29942,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29913,"src":"12065:17:117","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":29937,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"12005:21:117","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":29939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3999,"src":"12005:34:117","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":29943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12005:78:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29944,"nodeType":"ExpressionStatement","src":"12005:78:117"}]}}]},"documentation":{"id":29897,"nodeType":"StructuredDocumentation","src":"11462:222:117","text":" @notice Burns stable debt tokens of a user\n @param account The user getting his debt burned\n @param amount The amount being burned\n @param oldTotalSupply The total supply before the burning event"},"id":29948,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"11696:5:117","nodeType":"FunctionDefinition","parameters":{"id":29904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29899,"mutability":"mutable","name":"account","nameLocation":"11710:7:117","nodeType":"VariableDeclaration","scope":29948,"src":"11702:15:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29898,"name":"address","nodeType":"ElementaryTypeName","src":"11702:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29901,"mutability":"mutable","name":"amount","nameLocation":"11727:6:117","nodeType":"VariableDeclaration","scope":29948,"src":"11719:14:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29900,"name":"uint256","nodeType":"ElementaryTypeName","src":"11719:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29903,"mutability":"mutable","name":"oldTotalSupply","nameLocation":"11743:14:117","nodeType":"VariableDeclaration","scope":29948,"src":"11735:22:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29902,"name":"uint256","nodeType":"ElementaryTypeName","src":"11735:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11701:57:117"},"returnParameters":{"id":29905,"nodeType":"ParameterList","parameters":[],"src":"11768:0:117"},"scope":30059,"src":"11687:407:117","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[30772],"body":{"id":29958,"nodeType":"Block","src":"12199:24:117","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":29955,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30926,"src":"12212:4:117","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":29956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12212:6:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":29954,"id":29957,"nodeType":"Return","src":"12205:13:117"}]},"documentation":{"id":29949,"nodeType":"StructuredDocumentation","src":"12098:26:117","text":"@inheritdoc EIP712Base"},"id":29959,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712BaseId","nameLocation":"12136:13:117","nodeType":"FunctionDefinition","overrides":{"id":29951,"nodeType":"OverrideSpecifier","overrides":[],"src":"12166:8:117"},"parameters":{"id":29950,"nodeType":"ParameterList","parameters":[],"src":"12149:2:117"},"returnParameters":{"id":29954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29959,"src":"12184:13:117","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":29952,"name":"string","nodeType":"ElementaryTypeName","src":"12184:6:117","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12183:15:117"},"scope":30059,"src":"12127:96:117","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[31022],"body":{"id":29975,"nodeType":"Block","src":"12454:49:117","statements":[{"expression":{"arguments":[{"expression":{"id":29971,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12467:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":29972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"12467:30:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":29970,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12460:6:117","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":29973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12460:38:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29974,"nodeType":"ExpressionStatement","src":"12460:38:117"}]},"documentation":{"id":29960,"nodeType":"StructuredDocumentation","src":"12227:147:117","text":" @dev Being non transferrable, the debt token does not implement any of the\n standard ERC20 functions for transfer and allowance."},"functionSelector":"a9059cbb","id":29976,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"12386:8:117","nodeType":"FunctionDefinition","overrides":{"id":29966,"nodeType":"OverrideSpecifier","overrides":[],"src":"12430:8:117"},"parameters":{"id":29965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29962,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29976,"src":"12395:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29961,"name":"address","nodeType":"ElementaryTypeName","src":"12395:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29964,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29976,"src":"12404:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29963,"name":"uint256","nodeType":"ElementaryTypeName","src":"12404:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12394:18:117"},"returnParameters":{"id":29969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29968,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29976,"src":"12448:4:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29967,"name":"bool","nodeType":"ElementaryTypeName","src":"12448:4:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12447:6:117"},"scope":30059,"src":"12377:126:117","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[31040],"body":{"id":29991,"nodeType":"Block","src":"12593:49:117","statements":[{"expression":{"arguments":[{"expression":{"id":29987,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12606:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":29988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"12606:30:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":29986,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12599:6:117","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":29989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12599:38:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29990,"nodeType":"ExpressionStatement","src":"12599:38:117"}]},"functionSelector":"dd62ed3e","id":29992,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12516:9:117","nodeType":"FunctionDefinition","overrides":{"id":29982,"nodeType":"OverrideSpecifier","overrides":[],"src":"12566:8:117"},"parameters":{"id":29981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29992,"src":"12526:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29977,"name":"address","nodeType":"ElementaryTypeName","src":"12526:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29980,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29992,"src":"12535:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29979,"name":"address","nodeType":"ElementaryTypeName","src":"12535:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12525:18:117"},"returnParameters":{"id":29985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29984,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29992,"src":"12584:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29983,"name":"uint256","nodeType":"ElementaryTypeName","src":"12584:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12583:9:117"},"scope":30059,"src":"12507:135:117","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[31061],"body":{"id":30007,"nodeType":"Block","src":"12722:49:117","statements":[{"expression":{"arguments":[{"expression":{"id":30003,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12735:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"12735:30:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30002,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12728:6:117","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12728:38:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30006,"nodeType":"ExpressionStatement","src":"12728:38:117"}]},"functionSelector":"095ea7b3","id":30008,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"12655:7:117","nodeType":"FunctionDefinition","overrides":{"id":29998,"nodeType":"OverrideSpecifier","overrides":[],"src":"12698:8:117"},"parameters":{"id":29997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30008,"src":"12663:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29993,"name":"address","nodeType":"ElementaryTypeName","src":"12663:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29996,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30008,"src":"12672:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29995,"name":"uint256","nodeType":"ElementaryTypeName","src":"12672:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12662:18:117"},"returnParameters":{"id":30001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30008,"src":"12716:4:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29999,"name":"bool","nodeType":"ElementaryTypeName","src":"12716:4:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12715:6:117"},"scope":30059,"src":"12646:125:117","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[31103],"body":{"id":30025,"nodeType":"Block","src":"12865:49:117","statements":[{"expression":{"arguments":[{"expression":{"id":30021,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"12878:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"12878:30:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30020,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12871:6:117","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12871:38:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30024,"nodeType":"ExpressionStatement","src":"12871:38:117"}]},"functionSelector":"23b872dd","id":30026,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"12784:12:117","nodeType":"FunctionDefinition","overrides":{"id":30016,"nodeType":"OverrideSpecifier","overrides":[],"src":"12841:8:117"},"parameters":{"id":30015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30010,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30026,"src":"12797:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30009,"name":"address","nodeType":"ElementaryTypeName","src":"12797:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30026,"src":"12806:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30011,"name":"address","nodeType":"ElementaryTypeName","src":"12806:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30014,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30026,"src":"12815:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30013,"name":"uint256","nodeType":"ElementaryTypeName","src":"12815:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12796:27:117"},"returnParameters":{"id":30019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30018,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30026,"src":"12859:4:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30017,"name":"bool","nodeType":"ElementaryTypeName","src":"12859:4:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12858:6:117"},"scope":30059,"src":"12775:139:117","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[31130],"body":{"id":30041,"nodeType":"Block","src":"13004:49:117","statements":[{"expression":{"arguments":[{"expression":{"id":30037,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"13017:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"13017:30:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30036,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"13010:6:117","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13010:38:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30040,"nodeType":"ExpressionStatement","src":"13010:38:117"}]},"functionSelector":"39509351","id":30042,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"12927:17:117","nodeType":"FunctionDefinition","overrides":{"id":30032,"nodeType":"OverrideSpecifier","overrides":[],"src":"12980:8:117"},"parameters":{"id":30031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30042,"src":"12945:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30027,"name":"address","nodeType":"ElementaryTypeName","src":"12945:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30042,"src":"12954:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30029,"name":"uint256","nodeType":"ElementaryTypeName","src":"12954:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12944:18:117"},"returnParameters":{"id":30035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30034,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30042,"src":"12998:4:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30033,"name":"bool","nodeType":"ElementaryTypeName","src":"12998:4:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12997:6:117"},"scope":30059,"src":"12918:135:117","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[31157],"body":{"id":30057,"nodeType":"Block","src":"13143:49:117","statements":[{"expression":{"arguments":[{"expression":{"id":30053,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"13156:6:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"13156:30:117","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30052,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"13149:6:117","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13149:38:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30056,"nodeType":"ExpressionStatement","src":"13149:38:117"}]},"functionSelector":"a457c2d7","id":30058,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"13066:17:117","nodeType":"FunctionDefinition","overrides":{"id":30048,"nodeType":"OverrideSpecifier","overrides":[],"src":"13119:8:117"},"parameters":{"id":30047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30044,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30058,"src":"13084:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30043,"name":"address","nodeType":"ElementaryTypeName","src":"13084:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30046,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30058,"src":"13093:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30045,"name":"uint256","nodeType":"ElementaryTypeName","src":"13093:7:117","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13083:18:117"},"returnParameters":{"id":30051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30050,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30058,"src":"13137:4:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30049,"name":"bool","nodeType":"ElementaryTypeName","src":"13137:4:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13136:6:117"},"scope":30059,"src":"13057:135:117","stateMutability":"nonpayable","virtual":true,"visibility":"external"}],"scope":30060,"src":"1216:11978:117","usedErrors":[]}],"src":"37:13158:117"},"id":117},"contracts/protocol/tokenization/VariableDebtToken.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/VariableDebtToken.sol","exportedSymbols":{"DebtTokenBase":[30673],"EIP712Base":[30773],"Errors":[14819],"IAaveIncentivesController":[4000],"IERC20":[1442],"IInitializableDebtToken":[4346],"IPool":[5073],"IVariableDebtToken":[6386],"SafeCast":[1966],"ScaledBalanceTokenBase":[31917],"VariableDebtToken":[30441],"VersionedInitializable":[12750],"WadRayMath":[23813]},"id":30442,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":30061,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:118"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":30063,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":1443,"src":"63:76:118","symbolAliases":[{"foreign":{"id":30062,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../dependencies/openzeppelin/contracts/SafeCast.sol","id":30065,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":1967,"src":"140:80:118","symbolAliases":[{"foreign":{"id":30064,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"148:8:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":30067,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":12751,"src":"221:99:118","symbolAliases":[{"foreign":{"id":30066,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"229:22:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../libraries/math/WadRayMath.sol","id":30069,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":23814,"src":"321:60:118","symbolAliases":[{"foreign":{"id":30068,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"329:10:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":30071,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":14820,"src":"382:55:118","symbolAliases":[{"foreign":{"id":30070,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"390:6:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":30073,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":5074,"src":"438:49:118","symbolAliases":[{"foreign":{"id":30072,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"446:5:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","file":"../../interfaces/IAaveIncentivesController.sol","id":30075,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":4001,"src":"488:89:118","symbolAliases":[{"foreign":{"id":30074,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"496:25:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IInitializableDebtToken.sol","file":"../../interfaces/IInitializableDebtToken.sol","id":30077,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":4347,"src":"578:85:118","symbolAliases":[{"foreign":{"id":30076,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"586:23:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IVariableDebtToken.sol","file":"../../interfaces/IVariableDebtToken.sol","id":30079,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":6387,"src":"664:75:118","symbolAliases":[{"foreign":{"id":30078,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"672:18:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/EIP712Base.sol","file":"./base/EIP712Base.sol","id":30081,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":30774,"src":"740:49:118","symbolAliases":[{"foreign":{"id":30080,"name":"EIP712Base","nodeType":"Identifier","overloadedDeclarations":[],"src":"748:10:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/DebtTokenBase.sol","file":"./base/DebtTokenBase.sol","id":30083,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":30674,"src":"790:55:118","symbolAliases":[{"foreign":{"id":30082,"name":"DebtTokenBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"798:13:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol","file":"./base/ScaledBalanceTokenBase.sol","id":30085,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":31918,"src":"846:73:118","symbolAliases":[{"foreign":{"id":30084,"name":"ScaledBalanceTokenBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"854:22:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":30087,"name":"DebtTokenBase","nodeType":"IdentifierPath","referencedDeclaration":30673,"src":"1207:13:118"},"id":30088,"nodeType":"InheritanceSpecifier","src":"1207:13:118"},{"baseName":{"id":30089,"name":"ScaledBalanceTokenBase","nodeType":"IdentifierPath","referencedDeclaration":31917,"src":"1222:22:118"},"id":30090,"nodeType":"InheritanceSpecifier","src":"1222:22:118"},{"baseName":{"id":30091,"name":"IVariableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":6386,"src":"1246:18:118"},"id":30092,"nodeType":"InheritanceSpecifier","src":"1246:18:118"}],"canonicalName":"VariableDebtToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":30086,"nodeType":"StructuredDocumentation","src":"921:255:118","text":" @title VariableDebtToken\n @author Aave\n @notice Implements a variable debt token to track the borrowing positions of users\n at variable rate mode\n @dev Transfer and approve functionalities are disabled since its a non-transferable token"},"fullyImplemented":true,"id":30441,"linearizedBaseContracts":[30441,6386,4346,31917,6188,31450,31300,1464,1442,30673,4127,748,30773,12750],"name":"VariableDebtToken","nameLocation":"1186:17:118","nodeType":"ContractDefinition","nodes":[{"id":30095,"libraryName":{"id":30093,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1275:10:118"},"nodeType":"UsingForDirective","src":"1269:29:118","typeName":{"id":30094,"name":"uint256","nodeType":"ElementaryTypeName","src":"1290:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":30098,"libraryName":{"id":30096,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1307:8:118"},"nodeType":"UsingForDirective","src":"1301:27:118","typeName":{"id":30097,"name":"uint256","nodeType":"ElementaryTypeName","src":"1320:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"functionSelector":"b9a7b622","id":30101,"mutability":"constant","name":"DEBT_TOKEN_REVISION","nameLocation":"1356:19:118","nodeType":"VariableDeclaration","scope":30441,"src":"1332:49:118","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30099,"name":"uint256","nodeType":"ElementaryTypeName","src":"1332:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":30100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1378:3:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"body":{"id":30116,"nodeType":"Block","src":"1617:37:118","statements":[]},"documentation":{"id":30102,"nodeType":"StructuredDocumentation","src":"1386:82:118","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":30117,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":30108,"kind":"baseConstructorSpecifier","modifierName":{"id":30107,"name":"DebtTokenBase","nodeType":"IdentifierPath","referencedDeclaration":30673,"src":"1507:13:118"},"nodeType":"ModifierInvocation","src":"1507:15:118"},{"arguments":[{"id":30110,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30105,"src":"1550:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"hexValue":"5641524941424c455f444542545f544f4b454e5f494d504c","id":30111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1556:26:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_c0c183cc6be07edf097403ebce0bd9f1c8e459ad1322c258230ef0d121344336","typeString":"literal_string \"VARIABLE_DEBT_TOKEN_IMPL\""},"value":"VARIABLE_DEBT_TOKEN_IMPL"},{"hexValue":"5641524941424c455f444542545f544f4b454e5f494d504c","id":30112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1584:26:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_c0c183cc6be07edf097403ebce0bd9f1c8e459ad1322c258230ef0d121344336","typeString":"literal_string \"VARIABLE_DEBT_TOKEN_IMPL\""},"value":"VARIABLE_DEBT_TOKEN_IMPL"},{"hexValue":"30","id":30113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1612:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":30114,"kind":"baseConstructorSpecifier","modifierName":{"id":30109,"name":"ScaledBalanceTokenBase","nodeType":"IdentifierPath","referencedDeclaration":31917,"src":"1527:22:118"},"nodeType":"ModifierInvocation","src":"1527:87:118"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":30106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30105,"mutability":"mutable","name":"pool","nameLocation":"1494:4:118","nodeType":"VariableDeclaration","scope":30117,"src":"1488:10:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":30104,"nodeType":"UserDefinedTypeName","pathNode":{"id":30103,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1488:5:118"},"referencedDeclaration":5073,"src":"1488:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1482:20:118"},"returnParameters":{"id":30115,"nodeType":"ParameterList","parameters":[],"src":"1617:0:118"},"scope":30441,"src":"1471:183:118","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4345],"body":{"id":30189,"nodeType":"Block","src":"1987:516:118","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"id":30143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30141,"name":"initializingPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30121,"src":"2001:16:118","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":30142,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"2021:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"2001:24:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":30144,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2027:6:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"POOL_ADDRESSES_DO_NOT_MATCH","nodeType":"MemberAccess","referencedDeclaration":14806,"src":"2027:34:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30140,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1993:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1993:69:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30147,"nodeType":"ExpressionStatement","src":"1993:69:118"},{"expression":{"arguments":[{"id":30149,"name":"debtTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30130,"src":"2077:13:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30148,"name":"_setName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31277,"src":"2068:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":30150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2068:23:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30151,"nodeType":"ExpressionStatement","src":"2068:23:118"},{"expression":{"arguments":[{"id":30153,"name":"debtTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30132,"src":"2108:15:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30152,"name":"_setSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31288,"src":"2097:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":30154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2097:27:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30155,"nodeType":"ExpressionStatement","src":"2097:27:118"},{"expression":{"arguments":[{"id":30157,"name":"debtTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30128,"src":"2143:17:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":30156,"name":"_setDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31299,"src":"2130:12:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":30158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2130:31:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30159,"nodeType":"ExpressionStatement","src":"2130:31:118"},{"expression":{"id":30162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30160,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30475,"src":"2168:16:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30161,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30123,"src":"2187:15:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2168:34:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":30163,"nodeType":"ExpressionStatement","src":"2168:34:118"},{"expression":{"id":30166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30164,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"2208:21:118","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30165,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30126,"src":"2232:20:118","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"src":"2208:44:118","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":30167,"nodeType":"ExpressionStatement","src":"2208:44:118"},{"expression":{"id":30171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30168,"name":"_domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30693,"src":"2259:16:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":30169,"name":"_calculateDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30766,"src":"2278:25:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":30170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2278:27:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2259:46:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30172,"nodeType":"ExpressionStatement","src":"2259:46:118"},{"eventCall":{"arguments":[{"id":30174,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30123,"src":"2336:15:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":30177,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"2367:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":30176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2359:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30175,"name":"address","nodeType":"ElementaryTypeName","src":"2359:7:118","typeDescriptions":{}}},"id":30178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2359:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":30181,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30126,"src":"2388:20:118","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}],"id":30180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2380:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30179,"name":"address","nodeType":"ElementaryTypeName","src":"2380:7:118","typeDescriptions":{}}},"id":30182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2380:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30183,"name":"debtTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30128,"src":"2417:17:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":30184,"name":"debtTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30130,"src":"2442:13:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":30185,"name":"debtTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30132,"src":"2463:15:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":30186,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30134,"src":"2486:6:118","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":30173,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4325,"src":"2317:11:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint8,string memory,string memory,bytes memory)"}},"id":30187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2317:181:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30188,"nodeType":"EmitStatement","src":"2312:186:118"}]},"documentation":{"id":30118,"nodeType":"StructuredDocumentation","src":"1658:39:118","text":"@inheritdoc IInitializableDebtToken"},"functionSelector":"c222ec8a","id":30190,"implemented":true,"kind":"function","modifiers":[{"id":30138,"kind":"modifierInvocation","modifierName":{"id":30137,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":12724,"src":"1975:11:118"},"nodeType":"ModifierInvocation","src":"1975:11:118"}],"name":"initialize","nameLocation":"1709:10:118","nodeType":"FunctionDefinition","overrides":{"id":30136,"nodeType":"OverrideSpecifier","overrides":[],"src":"1966:8:118"},"parameters":{"id":30135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30121,"mutability":"mutable","name":"initializingPool","nameLocation":"1731:16:118","nodeType":"VariableDeclaration","scope":30190,"src":"1725:22:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":30120,"nodeType":"UserDefinedTypeName","pathNode":{"id":30119,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1725:5:118"},"referencedDeclaration":5073,"src":"1725:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":30123,"mutability":"mutable","name":"underlyingAsset","nameLocation":"1761:15:118","nodeType":"VariableDeclaration","scope":30190,"src":"1753:23:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30122,"name":"address","nodeType":"ElementaryTypeName","src":"1753:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30126,"mutability":"mutable","name":"incentivesController","nameLocation":"1808:20:118","nodeType":"VariableDeclaration","scope":30190,"src":"1782:46:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":30125,"nodeType":"UserDefinedTypeName","pathNode":{"id":30124,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"1782:25:118"},"referencedDeclaration":4000,"src":"1782:25:118","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":30128,"mutability":"mutable","name":"debtTokenDecimals","nameLocation":"1840:17:118","nodeType":"VariableDeclaration","scope":30190,"src":"1834:23:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":30127,"name":"uint8","nodeType":"ElementaryTypeName","src":"1834:5:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":30130,"mutability":"mutable","name":"debtTokenName","nameLocation":"1877:13:118","nodeType":"VariableDeclaration","scope":30190,"src":"1863:27:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30129,"name":"string","nodeType":"ElementaryTypeName","src":"1863:6:118","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":30132,"mutability":"mutable","name":"debtTokenSymbol","nameLocation":"1910:15:118","nodeType":"VariableDeclaration","scope":30190,"src":"1896:29:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30131,"name":"string","nodeType":"ElementaryTypeName","src":"1896:6:118","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":30134,"mutability":"mutable","name":"params","nameLocation":"1946:6:118","nodeType":"VariableDeclaration","scope":30190,"src":"1931:21:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":30133,"name":"bytes","nodeType":"ElementaryTypeName","src":"1931:5:118","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1719:237:118"},"returnParameters":{"id":30139,"nodeType":"ParameterList","parameters":[],"src":"1987:0:118"},"scope":30441,"src":"1700:803:118","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[12730],"body":{"id":30199,"nodeType":"Block","src":"2620:37:118","statements":[{"expression":{"id":30197,"name":"DEBT_TOKEN_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30101,"src":"2633:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30196,"id":30198,"nodeType":"Return","src":"2626:26:118"}]},"documentation":{"id":30191,"nodeType":"StructuredDocumentation","src":"2507:38:118","text":"@inheritdoc VersionedInitializable"},"id":30200,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2557:11:118","nodeType":"FunctionDefinition","overrides":{"id":30193,"nodeType":"OverrideSpecifier","overrides":[],"src":"2593:8:118"},"parameters":{"id":30192,"nodeType":"ParameterList","parameters":[],"src":"2568:2:118"},"returnParameters":{"id":30196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30200,"src":"2611:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30194,"name":"uint256","nodeType":"ElementaryTypeName","src":"2611:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2610:9:118"},"scope":30441,"src":"2548:109:118","stateMutability":"pure","virtual":true,"visibility":"internal"},{"baseFunctions":[30971],"body":{"id":30231,"nodeType":"Block","src":"2766:200:118","statements":[{"assignments":[30210],"declarations":[{"constant":false,"id":30210,"mutability":"mutable","name":"scaledBalance","nameLocation":"2780:13:118","nodeType":"VariableDeclaration","scope":30231,"src":"2772:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30209,"name":"uint256","nodeType":"ElementaryTypeName","src":"2772:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30215,"initialValue":{"arguments":[{"id":30213,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30203,"src":"2812:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30211,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2796:5:118","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_VariableDebtToken_$30441_$","typeString":"type(contract super VariableDebtToken)"}},"id":30212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"2796:15:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":30214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2796:21:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2772:45:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30216,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30210,"src":"2828:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":30217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2828:18:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30222,"nodeType":"IfStatement","src":"2824:47:118","trueBody":{"id":30221,"nodeType":"Block","src":"2848:23:118","statements":[{"expression":{"hexValue":"30","id":30219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2863:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":30208,"id":30220,"nodeType":"Return","src":"2856:8:118"}]}},{"expression":{"arguments":[{"arguments":[{"id":30227,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30475,"src":"2943:16:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30225,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"2905:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":30226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedVariableDebt","nodeType":"MemberAccess","referencedDeclaration":4914,"src":"2905:37:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":30228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2905:55:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30223,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30210,"src":"2884:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"2884:20:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":30229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2884:77:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30208,"id":30230,"nodeType":"Return","src":"2877:84:118"}]},"documentation":{"id":30201,"nodeType":"StructuredDocumentation","src":"2661:22:118","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":30232,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"2695:9:118","nodeType":"FunctionDefinition","overrides":{"id":30205,"nodeType":"OverrideSpecifier","overrides":[],"src":"2739:8:118"},"parameters":{"id":30204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30203,"mutability":"mutable","name":"user","nameLocation":"2713:4:118","nodeType":"VariableDeclaration","scope":30232,"src":"2705:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30202,"name":"address","nodeType":"ElementaryTypeName","src":"2705:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2704:14:118"},"returnParameters":{"id":30208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30232,"src":"2757:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30206,"name":"uint256","nodeType":"ElementaryTypeName","src":"2757:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2756:9:118"},"scope":30441,"src":"2686:280:118","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[6367],"body":{"id":30272,"nodeType":"Block","src":"3165:179:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30251,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30235,"src":"3175:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":30252,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30237,"src":"3183:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3175:18:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30261,"nodeType":"IfStatement","src":"3171:89:118","trueBody":{"id":30260,"nodeType":"Block","src":"3195:65:118","statements":[{"expression":{"arguments":[{"id":30255,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30237,"src":"3228:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30256,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30235,"src":"3240:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30257,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30239,"src":"3246:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30254,"name":"_decreaseBorrowAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30672,"src":"3203:24:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":30258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3203:50:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30259,"nodeType":"ExpressionStatement","src":"3203:50:118"}]}},{"expression":{"components":[{"arguments":[{"id":30263,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30235,"src":"3285:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30264,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30237,"src":"3291:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30265,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30239,"src":"3303:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30266,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30241,"src":"3311:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30262,"name":"_mintScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31654,"src":"3273:11:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) returns (bool)"}},"id":30267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3273:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"id":30268,"name":"scaledTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31543,"src":"3319:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":30269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3319:19:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":30270,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3272:67:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":30250,"id":30271,"nodeType":"Return","src":"3265:74:118"}]},"documentation":{"id":30233,"nodeType":"StructuredDocumentation","src":"2970:34:118","text":"@inheritdoc IVariableDebtToken"},"functionSelector":"b3f1c93d","id":30273,"implemented":true,"kind":"function","modifiers":[{"id":30245,"kind":"modifierInvocation","modifierName":{"id":30244,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"3132:8:118"},"nodeType":"ModifierInvocation","src":"3132:8:118"}],"name":"mint","nameLocation":"3016:4:118","nodeType":"FunctionDefinition","overrides":{"id":30243,"nodeType":"OverrideSpecifier","overrides":[],"src":"3123:8:118"},"parameters":{"id":30242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30235,"mutability":"mutable","name":"user","nameLocation":"3034:4:118","nodeType":"VariableDeclaration","scope":30273,"src":"3026:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30234,"name":"address","nodeType":"ElementaryTypeName","src":"3026:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30237,"mutability":"mutable","name":"onBehalfOf","nameLocation":"3052:10:118","nodeType":"VariableDeclaration","scope":30273,"src":"3044:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30236,"name":"address","nodeType":"ElementaryTypeName","src":"3044:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30239,"mutability":"mutable","name":"amount","nameLocation":"3076:6:118","nodeType":"VariableDeclaration","scope":30273,"src":"3068:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30238,"name":"uint256","nodeType":"ElementaryTypeName","src":"3068:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30241,"mutability":"mutable","name":"index","nameLocation":"3096:5:118","nodeType":"VariableDeclaration","scope":30273,"src":"3088:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30240,"name":"uint256","nodeType":"ElementaryTypeName","src":"3088:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:85:118"},"returnParameters":{"id":30250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30247,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30273,"src":"3150:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30246,"name":"bool","nodeType":"ElementaryTypeName","src":"3150:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":30249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30273,"src":"3156:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30248,"name":"uint256","nodeType":"ElementaryTypeName","src":"3156:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3149:15:118"},"scope":30441,"src":"3007:337:118","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[6379],"body":{"id":30301,"nodeType":"Block","src":"3513:87:118","statements":[{"expression":{"arguments":[{"id":30289,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30276,"src":"3531:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":30292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3545:1:118","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":30291,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3537:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30290,"name":"address","nodeType":"ElementaryTypeName","src":"3537:7:118","typeDescriptions":{}}},"id":30293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3537:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30294,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30278,"src":"3549:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30295,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30280,"src":"3557:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30288,"name":"_burnScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31772,"src":"3519:11:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":30296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3519:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30297,"nodeType":"ExpressionStatement","src":"3519:44:118"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":30298,"name":"scaledTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31543,"src":"3576:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":30299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3576:19:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30287,"id":30300,"nodeType":"Return","src":"3569:26:118"}]},"documentation":{"id":30274,"nodeType":"StructuredDocumentation","src":"3348:34:118","text":"@inheritdoc IVariableDebtToken"},"functionSelector":"f5298aca","id":30302,"implemented":true,"kind":"function","modifiers":[{"id":30284,"kind":"modifierInvocation","modifierName":{"id":30283,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":30847,"src":"3486:8:118"},"nodeType":"ModifierInvocation","src":"3486:8:118"}],"name":"burn","nameLocation":"3394:4:118","nodeType":"FunctionDefinition","overrides":{"id":30282,"nodeType":"OverrideSpecifier","overrides":[],"src":"3477:8:118"},"parameters":{"id":30281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30276,"mutability":"mutable","name":"from","nameLocation":"3412:4:118","nodeType":"VariableDeclaration","scope":30302,"src":"3404:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30275,"name":"address","nodeType":"ElementaryTypeName","src":"3404:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30278,"mutability":"mutable","name":"amount","nameLocation":"3430:6:118","nodeType":"VariableDeclaration","scope":30302,"src":"3422:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30277,"name":"uint256","nodeType":"ElementaryTypeName","src":"3422:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30280,"mutability":"mutable","name":"index","nameLocation":"3450:5:118","nodeType":"VariableDeclaration","scope":30302,"src":"3442:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30279,"name":"uint256","nodeType":"ElementaryTypeName","src":"3442:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3398:61:118"},"returnParameters":{"id":30287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30286,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30302,"src":"3504:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30285,"name":"uint256","nodeType":"ElementaryTypeName","src":"3504:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3503:9:118"},"scope":30441,"src":"3385:215:118","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[30956],"body":{"id":30319,"nodeType":"Block","src":"3699:101:118","statements":[{"expression":{"arguments":[{"arguments":[{"id":30315,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30475,"src":"3777:16:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30313,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"3739:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":30314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedVariableDebt","nodeType":"MemberAccess","referencedDeclaration":4914,"src":"3739:37:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":30316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3739:55:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30309,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3712:5:118","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_VariableDebtToken_$30441_$","typeString":"type(contract super VariableDebtToken)"}},"id":30310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30956,"src":"3712:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":30311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3712:19:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"3712:26:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":30317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3712:83:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30308,"id":30318,"nodeType":"Return","src":"3705:90:118"}]},"documentation":{"id":30303,"nodeType":"StructuredDocumentation","src":"3604:22:118","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":30320,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3638:11:118","nodeType":"FunctionDefinition","overrides":{"id":30305,"nodeType":"OverrideSpecifier","overrides":[],"src":"3672:8:118"},"parameters":{"id":30304,"nodeType":"ParameterList","parameters":[],"src":"3649:2:118"},"returnParameters":{"id":30308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30320,"src":"3690:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30306,"name":"uint256","nodeType":"ElementaryTypeName","src":"3690:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3689:9:118"},"scope":30441,"src":"3629:171:118","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[30772],"body":{"id":30330,"nodeType":"Block","src":"3905:24:118","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":30327,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30926,"src":"3918:4:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":30328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3918:6:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":30326,"id":30329,"nodeType":"Return","src":"3911:13:118"}]},"documentation":{"id":30321,"nodeType":"StructuredDocumentation","src":"3804:26:118","text":"@inheritdoc EIP712Base"},"id":30331,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712BaseId","nameLocation":"3842:13:118","nodeType":"FunctionDefinition","overrides":{"id":30323,"nodeType":"OverrideSpecifier","overrides":[],"src":"3872:8:118"},"parameters":{"id":30322,"nodeType":"ParameterList","parameters":[],"src":"3855:2:118"},"returnParameters":{"id":30326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30325,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30331,"src":"3890:13:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30324,"name":"string","nodeType":"ElementaryTypeName","src":"3890:6:118","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3889:15:118"},"scope":30441,"src":"3833:96:118","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[31022],"body":{"id":30347,"nodeType":"Block","src":"4160:49:118","statements":[{"expression":{"arguments":[{"expression":{"id":30343,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4173:6:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"4173:30:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30342,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4166:6:118","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4166:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30346,"nodeType":"ExpressionStatement","src":"4166:38:118"}]},"documentation":{"id":30332,"nodeType":"StructuredDocumentation","src":"3933:147:118","text":" @dev Being non transferrable, the debt token does not implement any of the\n standard ERC20 functions for transfer and allowance."},"functionSelector":"a9059cbb","id":30348,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4092:8:118","nodeType":"FunctionDefinition","overrides":{"id":30338,"nodeType":"OverrideSpecifier","overrides":[],"src":"4136:8:118"},"parameters":{"id":30337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30348,"src":"4101:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30333,"name":"address","nodeType":"ElementaryTypeName","src":"4101:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30336,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30348,"src":"4110:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30335,"name":"uint256","nodeType":"ElementaryTypeName","src":"4110:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4100:18:118"},"returnParameters":{"id":30341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30340,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30348,"src":"4154:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30339,"name":"bool","nodeType":"ElementaryTypeName","src":"4154:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4153:6:118"},"scope":30441,"src":"4083:126:118","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[31040],"body":{"id":30363,"nodeType":"Block","src":"4299:49:118","statements":[{"expression":{"arguments":[{"expression":{"id":30359,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4312:6:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"4312:30:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30358,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4305:6:118","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4305:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30362,"nodeType":"ExpressionStatement","src":"4305:38:118"}]},"functionSelector":"dd62ed3e","id":30364,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"4222:9:118","nodeType":"FunctionDefinition","overrides":{"id":30354,"nodeType":"OverrideSpecifier","overrides":[],"src":"4272:8:118"},"parameters":{"id":30353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30350,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30364,"src":"4232:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30349,"name":"address","nodeType":"ElementaryTypeName","src":"4232:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30364,"src":"4241:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30351,"name":"address","nodeType":"ElementaryTypeName","src":"4241:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4231:18:118"},"returnParameters":{"id":30357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30364,"src":"4290:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30355,"name":"uint256","nodeType":"ElementaryTypeName","src":"4290:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4289:9:118"},"scope":30441,"src":"4213:135:118","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[31061],"body":{"id":30379,"nodeType":"Block","src":"4428:49:118","statements":[{"expression":{"arguments":[{"expression":{"id":30375,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4441:6:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"4441:30:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30374,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4434:6:118","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4434:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30378,"nodeType":"ExpressionStatement","src":"4434:38:118"}]},"functionSelector":"095ea7b3","id":30380,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4361:7:118","nodeType":"FunctionDefinition","overrides":{"id":30370,"nodeType":"OverrideSpecifier","overrides":[],"src":"4404:8:118"},"parameters":{"id":30369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30366,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30380,"src":"4369:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30365,"name":"address","nodeType":"ElementaryTypeName","src":"4369:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30380,"src":"4378:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30367,"name":"uint256","nodeType":"ElementaryTypeName","src":"4378:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4368:18:118"},"returnParameters":{"id":30373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30372,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30380,"src":"4422:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30371,"name":"bool","nodeType":"ElementaryTypeName","src":"4422:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4421:6:118"},"scope":30441,"src":"4352:125:118","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[31103],"body":{"id":30397,"nodeType":"Block","src":"4571:49:118","statements":[{"expression":{"arguments":[{"expression":{"id":30393,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4584:6:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"4584:30:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30392,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4577:6:118","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4577:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30396,"nodeType":"ExpressionStatement","src":"4577:38:118"}]},"functionSelector":"23b872dd","id":30398,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4490:12:118","nodeType":"FunctionDefinition","overrides":{"id":30388,"nodeType":"OverrideSpecifier","overrides":[],"src":"4547:8:118"},"parameters":{"id":30387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30398,"src":"4503:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30381,"name":"address","nodeType":"ElementaryTypeName","src":"4503:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30398,"src":"4512:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30383,"name":"address","nodeType":"ElementaryTypeName","src":"4512:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30386,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30398,"src":"4521:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30385,"name":"uint256","nodeType":"ElementaryTypeName","src":"4521:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4502:27:118"},"returnParameters":{"id":30391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30398,"src":"4565:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30389,"name":"bool","nodeType":"ElementaryTypeName","src":"4565:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4564:6:118"},"scope":30441,"src":"4481:139:118","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[31130],"body":{"id":30413,"nodeType":"Block","src":"4710:49:118","statements":[{"expression":{"arguments":[{"expression":{"id":30409,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4723:6:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"4723:30:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30408,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4716:6:118","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4716:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30412,"nodeType":"ExpressionStatement","src":"4716:38:118"}]},"functionSelector":"39509351","id":30414,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"4633:17:118","nodeType":"FunctionDefinition","overrides":{"id":30404,"nodeType":"OverrideSpecifier","overrides":[],"src":"4686:8:118"},"parameters":{"id":30403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30414,"src":"4651:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30399,"name":"address","nodeType":"ElementaryTypeName","src":"4651:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30402,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30414,"src":"4660:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30401,"name":"uint256","nodeType":"ElementaryTypeName","src":"4660:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4650:18:118"},"returnParameters":{"id":30407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30406,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30414,"src":"4704:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30405,"name":"bool","nodeType":"ElementaryTypeName","src":"4704:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4703:6:118"},"scope":30441,"src":"4624:135:118","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[31157],"body":{"id":30429,"nodeType":"Block","src":"4849:49:118","statements":[{"expression":{"arguments":[{"expression":{"id":30425,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"4862:6:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":14785,"src":"4862:30:118","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30424,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4855:6:118","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4855:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30428,"nodeType":"ExpressionStatement","src":"4855:38:118"}]},"functionSelector":"a457c2d7","id":30430,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"4772:17:118","nodeType":"FunctionDefinition","overrides":{"id":30420,"nodeType":"OverrideSpecifier","overrides":[],"src":"4825:8:118"},"parameters":{"id":30419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30416,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30430,"src":"4790:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30415,"name":"address","nodeType":"ElementaryTypeName","src":"4790:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30418,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30430,"src":"4799:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30417,"name":"uint256","nodeType":"ElementaryTypeName","src":"4799:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4789:18:118"},"returnParameters":{"id":30423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30422,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30430,"src":"4843:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30421,"name":"bool","nodeType":"ElementaryTypeName","src":"4843:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4842:6:118"},"scope":30441,"src":"4763:135:118","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[6385],"body":{"id":30439,"nodeType":"Block","src":"5016:34:118","statements":[{"expression":{"id":30437,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30475,"src":"5029:16:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":30436,"id":30438,"nodeType":"Return","src":"5022:23:118"}]},"documentation":{"id":30431,"nodeType":"StructuredDocumentation","src":"4902:34:118","text":"@inheritdoc IVariableDebtToken"},"functionSelector":"b16a19de","id":30440,"implemented":true,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"4948:24:118","nodeType":"FunctionDefinition","overrides":{"id":30433,"nodeType":"OverrideSpecifier","overrides":[],"src":"4989:8:118"},"parameters":{"id":30432,"nodeType":"ParameterList","parameters":[],"src":"4972:2:118"},"returnParameters":{"id":30436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30435,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30440,"src":"5007:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30434,"name":"address","nodeType":"ElementaryTypeName","src":"5007:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5006:9:118"},"scope":30441,"src":"4939:111:118","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":30442,"src":"1177:3875:118","usedErrors":[]}],"src":"37:5016:118"},"id":118},"contracts/protocol/tokenization/base/DebtTokenBase.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/base/DebtTokenBase.sol","exportedSymbols":{"Context":[748],"DebtTokenBase":[30673],"EIP712Base":[30773],"Errors":[14819],"ICreditDelegationToken":[4127],"VersionedInitializable":[12750]},"id":30674,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":30443,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:119"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Context.sol","file":"../../../dependencies/openzeppelin/contracts/Context.sol","id":30445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30674,"sourceUnit":749,"src":"63:81:119","symbolAliases":[{"foreign":{"id":30444,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../../libraries/helpers/Errors.sol","id":30447,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30674,"sourceUnit":14820,"src":"145:58:119","symbolAliases":[{"foreign":{"id":30446,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"153:6:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../../libraries/aave-upgradeability/VersionedInitializable.sol","id":30449,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30674,"sourceUnit":12751,"src":"204:102:119","symbolAliases":[{"foreign":{"id":30448,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"212:22:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/ICreditDelegationToken.sol","file":"../../../interfaces/ICreditDelegationToken.sol","id":30451,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30674,"sourceUnit":4128,"src":"307:86:119","symbolAliases":[{"foreign":{"id":30450,"name":"ICreditDelegationToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"315:22:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/EIP712Base.sol","file":"./EIP712Base.sol","id":30453,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30674,"sourceUnit":30774,"src":"394:44:119","symbolAliases":[{"foreign":{"id":30452,"name":"EIP712Base","nodeType":"Identifier","overloadedDeclarations":[],"src":"402:10:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":30455,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":12750,"src":"628:22:119"},"id":30456,"nodeType":"InheritanceSpecifier","src":"628:22:119"},{"baseName":{"id":30457,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":30773,"src":"654:10:119"},"id":30458,"nodeType":"InheritanceSpecifier","src":"654:10:119"},{"baseName":{"id":30459,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"668:7:119"},"id":30460,"nodeType":"InheritanceSpecifier","src":"668:7:119"},{"baseName":{"id":30461,"name":"ICreditDelegationToken","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"679:22:119"},"id":30462,"nodeType":"InheritanceSpecifier","src":"679:22:119"}],"canonicalName":"DebtTokenBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":30454,"nodeType":"StructuredDocumentation","src":"440:150:119","text":" @title DebtTokenBase\n @author Aave\n @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken"},"fullyImplemented":false,"id":30673,"linearizedBaseContracts":[30673,4127,748,30773,12750],"name":"DebtTokenBase","nameLocation":"609:13:119","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":30468,"mutability":"mutable","name":"_borrowAllowances","nameLocation":"843:17:119","nodeType":"VariableDeclaration","scope":30673,"src":"786:74:119","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":30467,"keyType":{"id":30463,"name":"address","nodeType":"ElementaryTypeName","src":"794:7:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"786:47:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":30466,"keyType":{"id":30464,"name":"address","nodeType":"ElementaryTypeName","src":"813:7:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"805:27:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":30465,"name":"uint256","nodeType":"ElementaryTypeName","src":"824:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":true,"functionSelector":"f3bfc738","id":30473,"mutability":"constant","name":"DELEGATION_WITH_SIG_TYPEHASH","nameLocation":"921:28:119","nodeType":"VariableDeclaration","scope":30673,"src":"897:153:119","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30469,"name":"bytes32","nodeType":"ElementaryTypeName","src":"897:7:119","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"44656c65676174696f6e5769746853696728616464726573732064656c6567617465652c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":30471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"966:83:119","typeDescriptions":{"typeIdentifier":"t_stringliteral_323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0","typeString":"literal_string \"DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)\""},"value":"DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0","typeString":"literal_string \"DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)\""}],"id":30470,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"956:9:119","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":30472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"956:94:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":30475,"mutability":"mutable","name":"_underlyingAsset","nameLocation":"1072:16:119","nodeType":"VariableDeclaration","scope":30673,"src":"1055:33:119","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30474,"name":"address","nodeType":"ElementaryTypeName","src":"1055:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":30481,"nodeType":"Block","src":"1155:37:119","statements":[]},"documentation":{"id":30476,"nodeType":"StructuredDocumentation","src":"1093:32:119","text":" @dev Constructor."},"id":30482,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":30479,"kind":"baseConstructorSpecifier","modifierName":{"id":30478,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":30773,"src":"1142:10:119"},"nodeType":"ModifierInvocation","src":"1142:12:119"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":30477,"nodeType":"ParameterList","parameters":[],"src":"1139:2:119"},"returnParameters":{"id":30480,"nodeType":"ParameterList","parameters":[],"src":"1155:0:119"},"scope":30673,"src":"1128:64:119","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[4098],"body":{"id":30498,"nodeType":"Block","src":"1317:62:119","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":30492,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"1342:10:119","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":30493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1342:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":30494,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30485,"src":"1356:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30495,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30487,"src":"1367:6:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30491,"name":"_approveDelegation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30636,"src":"1323:18:119","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":30496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1323:51:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30497,"nodeType":"ExpressionStatement","src":"1323:51:119"}]},"documentation":{"id":30483,"nodeType":"StructuredDocumentation","src":"1196:38:119","text":"@inheritdoc ICreditDelegationToken"},"functionSelector":"c04a8a10","id":30499,"implemented":true,"kind":"function","modifiers":[],"name":"approveDelegation","nameLocation":"1246:17:119","nodeType":"FunctionDefinition","overrides":{"id":30489,"nodeType":"OverrideSpecifier","overrides":[],"src":"1308:8:119"},"parameters":{"id":30488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30485,"mutability":"mutable","name":"delegatee","nameLocation":"1272:9:119","nodeType":"VariableDeclaration","scope":30499,"src":"1264:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30484,"name":"address","nodeType":"ElementaryTypeName","src":"1264:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30487,"mutability":"mutable","name":"amount","nameLocation":"1291:6:119","nodeType":"VariableDeclaration","scope":30499,"src":"1283:14:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30486,"name":"uint256","nodeType":"ElementaryTypeName","src":"1283:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1263:35:119"},"returnParameters":{"id":30490,"nodeType":"ParameterList","parameters":[],"src":"1317:0:119"},"scope":30673,"src":"1237:142:119","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4126],"body":{"id":30591,"nodeType":"Block","src":"1594:653:119","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30518,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30502,"src":"1608:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":30521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1629:1:119","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":30520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1621:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30519,"name":"address","nodeType":"ElementaryTypeName","src":"1621:7:119","typeDescriptions":{}}},"id":30522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1621:10:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1608:23:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":30524,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1633:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":14776,"src":"1633:29:119","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30517,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1600:7:119","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1600:63:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30527,"nodeType":"ExpressionStatement","src":"1600:63:119"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30529,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1708:5:119","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":30530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"1708:15:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":30531,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30508,"src":"1727:8:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1708:27:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":30533,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1737:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EXPIRATION","nodeType":"MemberAccess","referencedDeclaration":14779,"src":"1737:25:119","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30528,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1700:7:119","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1700:63:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30536,"nodeType":"ExpressionStatement","src":"1700:63:119"},{"assignments":[30538],"declarations":[{"constant":false,"id":30538,"mutability":"mutable","name":"currentValidNonce","nameLocation":"1777:17:119","nodeType":"VariableDeclaration","scope":30591,"src":"1769:25:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30537,"name":"uint256","nodeType":"ElementaryTypeName","src":"1769:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30542,"initialValue":{"baseExpression":{"id":30539,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30691,"src":"1797:7:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":30541,"indexExpression":{"id":30540,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30502,"src":"1805:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1797:18:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1769:46:119"},{"assignments":[30544],"declarations":[{"constant":false,"id":30544,"mutability":"mutable","name":"digest","nameLocation":"1829:6:119","nodeType":"VariableDeclaration","scope":30591,"src":"1821:14:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30543,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1821:7:119","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":30563,"initialValue":{"arguments":[{"arguments":[{"hexValue":"1901","id":30548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1881:10:119","typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},"value":"\u0019\u0001"},{"arguments":[],"expression":{"argumentTypes":[],"id":30549,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30723,"src":"1901:16:119","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":30550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1901:18:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":30554,"name":"DELEGATION_WITH_SIG_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30473,"src":"1961:28:119","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":30555,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30504,"src":"1991:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30556,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30506,"src":"2002:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30557,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30538,"src":"2009:17:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30558,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30508,"src":"2028:8:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30552,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1950:3:119","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":30553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1950:10:119","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":30559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1950:87:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":30551,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1929:9:119","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":30560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1929:118:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":30546,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1855:3:119","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":30547,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"1855:16:119","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":30561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1855:200:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":30545,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1838:9:119","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":30562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1838:223:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1821:240:119"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30565,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30502,"src":"2075:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":30567,"name":"digest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30544,"src":"2098:6:119","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":30568,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30510,"src":"2106:1:119","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":30569,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30512,"src":"2109:1:119","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":30570,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30514,"src":"2112:1:119","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":30566,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"2088:9:119","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":30571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2088:26:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2075:39:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":30573,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2116:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_SIGNATURE","nodeType":"MemberAccess","referencedDeclaration":14782,"src":"2116:24:119","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30564,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2067:7:119","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2067:74:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30576,"nodeType":"ExpressionStatement","src":"2067:74:119"},{"expression":{"id":30583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":30577,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30691,"src":"2147:7:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":30579,"indexExpression":{"id":30578,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30502,"src":"2155:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2147:18:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30580,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30538,"src":"2168:17:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":30581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2188:1:119","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2168:21:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2147:42:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30584,"nodeType":"ExpressionStatement","src":"2147:42:119"},{"expression":{"arguments":[{"id":30586,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30502,"src":"2214:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30587,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30504,"src":"2225:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30588,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30506,"src":"2236:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30585,"name":"_approveDelegation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30636,"src":"2195:18:119","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":30589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2195:47:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30590,"nodeType":"ExpressionStatement","src":"2195:47:119"}]},"documentation":{"id":30500,"nodeType":"StructuredDocumentation","src":"1383:38:119","text":"@inheritdoc ICreditDelegationToken"},"functionSelector":"0b52d558","id":30592,"implemented":true,"kind":"function","modifiers":[],"name":"delegationWithSig","nameLocation":"1433:17:119","nodeType":"FunctionDefinition","parameters":{"id":30515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30502,"mutability":"mutable","name":"delegator","nameLocation":"1464:9:119","nodeType":"VariableDeclaration","scope":30592,"src":"1456:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30501,"name":"address","nodeType":"ElementaryTypeName","src":"1456:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30504,"mutability":"mutable","name":"delegatee","nameLocation":"1487:9:119","nodeType":"VariableDeclaration","scope":30592,"src":"1479:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30503,"name":"address","nodeType":"ElementaryTypeName","src":"1479:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30506,"mutability":"mutable","name":"value","nameLocation":"1510:5:119","nodeType":"VariableDeclaration","scope":30592,"src":"1502:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30505,"name":"uint256","nodeType":"ElementaryTypeName","src":"1502:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30508,"mutability":"mutable","name":"deadline","nameLocation":"1529:8:119","nodeType":"VariableDeclaration","scope":30592,"src":"1521:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30507,"name":"uint256","nodeType":"ElementaryTypeName","src":"1521:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30510,"mutability":"mutable","name":"v","nameLocation":"1549:1:119","nodeType":"VariableDeclaration","scope":30592,"src":"1543:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":30509,"name":"uint8","nodeType":"ElementaryTypeName","src":"1543:5:119","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":30512,"mutability":"mutable","name":"r","nameLocation":"1564:1:119","nodeType":"VariableDeclaration","scope":30592,"src":"1556:9:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1556:7:119","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30514,"mutability":"mutable","name":"s","nameLocation":"1579:1:119","nodeType":"VariableDeclaration","scope":30592,"src":"1571:9:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30513,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1571:7:119","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1450:134:119"},"returnParameters":{"id":30516,"nodeType":"ParameterList","parameters":[],"src":"1594:0:119"},"scope":30673,"src":"1424:823:119","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4108],"body":{"id":30609,"nodeType":"Block","src":"2404:53:119","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":30603,"name":"_borrowAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30468,"src":"2417:17:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":30605,"indexExpression":{"id":30604,"name":"fromUser","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30595,"src":"2435:8:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2417:27:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":30607,"indexExpression":{"id":30606,"name":"toUser","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30597,"src":"2445:6:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2417:35:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30602,"id":30608,"nodeType":"Return","src":"2410:42:119"}]},"documentation":{"id":30593,"nodeType":"StructuredDocumentation","src":"2251:38:119","text":"@inheritdoc ICreditDelegationToken"},"functionSelector":"6bd76d24","id":30610,"implemented":true,"kind":"function","modifiers":[],"name":"borrowAllowance","nameLocation":"2301:15:119","nodeType":"FunctionDefinition","overrides":{"id":30599,"nodeType":"OverrideSpecifier","overrides":[],"src":"2377:8:119"},"parameters":{"id":30598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30595,"mutability":"mutable","name":"fromUser","nameLocation":"2330:8:119","nodeType":"VariableDeclaration","scope":30610,"src":"2322:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30594,"name":"address","nodeType":"ElementaryTypeName","src":"2322:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30597,"mutability":"mutable","name":"toUser","nameLocation":"2352:6:119","nodeType":"VariableDeclaration","scope":30610,"src":"2344:14:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30596,"name":"address","nodeType":"ElementaryTypeName","src":"2344:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2316:46:119"},"returnParameters":{"id":30602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30601,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30610,"src":"2395:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30600,"name":"uint256","nodeType":"ElementaryTypeName","src":"2395:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2394:9:119"},"scope":30673,"src":"2292:165:119","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":30635,"nodeType":"Block","src":"2840:142:119","statements":[{"expression":{"id":30626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":30620,"name":"_borrowAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30468,"src":"2846:17:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":30623,"indexExpression":{"id":30621,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30613,"src":"2864:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2846:28:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":30624,"indexExpression":{"id":30622,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30615,"src":"2875:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2846:39:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30625,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30617,"src":"2888:6:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2846:48:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30627,"nodeType":"ExpressionStatement","src":"2846:48:119"},{"eventCall":{"arguments":[{"id":30629,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30613,"src":"2930:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30630,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30615,"src":"2941:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30631,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30475,"src":"2952:16:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30632,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30617,"src":"2970:6:119","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":30628,"name":"BorrowAllowanceDelegated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4090,"src":"2905:24:119","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":30633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2905:72:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30634,"nodeType":"EmitStatement","src":"2900:77:119"}]},"documentation":{"id":30611,"nodeType":"StructuredDocumentation","src":"2461:285:119","text":" @notice Updates the borrow allowance of a user on the specific debt token.\n @param delegator The address delegating the borrowing power\n @param delegatee The address receiving the delegated borrowing power\n @param amount The allowance amount being delegated."},"id":30636,"implemented":true,"kind":"function","modifiers":[],"name":"_approveDelegation","nameLocation":"2758:18:119","nodeType":"FunctionDefinition","parameters":{"id":30618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30613,"mutability":"mutable","name":"delegator","nameLocation":"2785:9:119","nodeType":"VariableDeclaration","scope":30636,"src":"2777:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30612,"name":"address","nodeType":"ElementaryTypeName","src":"2777:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30615,"mutability":"mutable","name":"delegatee","nameLocation":"2804:9:119","nodeType":"VariableDeclaration","scope":30636,"src":"2796:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30614,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30617,"mutability":"mutable","name":"amount","nameLocation":"2823:6:119","nodeType":"VariableDeclaration","scope":30636,"src":"2815:14:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30616,"name":"uint256","nodeType":"ElementaryTypeName","src":"2815:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2776:54:119"},"returnParameters":{"id":30619,"nodeType":"ParameterList","parameters":[],"src":"2840:0:119"},"scope":30673,"src":"2749:233:119","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30671,"nodeType":"Block","src":"3385:233:119","statements":[{"assignments":[30647],"declarations":[{"constant":false,"id":30647,"mutability":"mutable","name":"newAllowance","nameLocation":"3399:12:119","nodeType":"VariableDeclaration","scope":30671,"src":"3391:20:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30646,"name":"uint256","nodeType":"ElementaryTypeName","src":"3391:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30655,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":30648,"name":"_borrowAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30468,"src":"3414:17:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":30650,"indexExpression":{"id":30649,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30639,"src":"3432:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3414:28:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":30652,"indexExpression":{"id":30651,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30641,"src":"3443:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3414:39:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":30653,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30643,"src":"3456:6:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3414:48:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3391:71:119"},{"expression":{"id":30662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":30656,"name":"_borrowAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30468,"src":"3469:17:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":30659,"indexExpression":{"id":30657,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30639,"src":"3487:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3469:28:119","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":30660,"indexExpression":{"id":30658,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30641,"src":"3498:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3469:39:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30661,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30647,"src":"3511:12:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3469:54:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30663,"nodeType":"ExpressionStatement","src":"3469:54:119"},{"eventCall":{"arguments":[{"id":30665,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30639,"src":"3560:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30666,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30641,"src":"3571:9:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30667,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30475,"src":"3582:16:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30668,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30647,"src":"3600:12:119","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":30664,"name":"BorrowAllowanceDelegated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4090,"src":"3535:24:119","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":30669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3535:78:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30670,"nodeType":"EmitStatement","src":"3530:83:119"}]},"documentation":{"id":30637,"nodeType":"StructuredDocumentation","src":"2986:299:119","text":" @notice Decreases the borrow allowance of a user on the specific debt token.\n @param delegator The address delegating the borrowing power\n @param delegatee The address receiving the delegated borrowing power\n @param amount The amount to subtract from the current allowance"},"id":30672,"implemented":true,"kind":"function","modifiers":[],"name":"_decreaseBorrowAllowance","nameLocation":"3297:24:119","nodeType":"FunctionDefinition","parameters":{"id":30644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30639,"mutability":"mutable","name":"delegator","nameLocation":"3330:9:119","nodeType":"VariableDeclaration","scope":30672,"src":"3322:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30638,"name":"address","nodeType":"ElementaryTypeName","src":"3322:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30641,"mutability":"mutable","name":"delegatee","nameLocation":"3349:9:119","nodeType":"VariableDeclaration","scope":30672,"src":"3341:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30640,"name":"address","nodeType":"ElementaryTypeName","src":"3341:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30643,"mutability":"mutable","name":"amount","nameLocation":"3368:6:119","nodeType":"VariableDeclaration","scope":30672,"src":"3360:14:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30642,"name":"uint256","nodeType":"ElementaryTypeName","src":"3360:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3321:54:119"},"returnParameters":{"id":30645,"nodeType":"ParameterList","parameters":[],"src":"3385:0:119"},"scope":30673,"src":"3288:330:119","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":30674,"src":"591:3029:119","usedErrors":[]}],"src":"37:3584:119"},"id":119},"contracts/protocol/tokenization/base/EIP712Base.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/base/EIP712Base.sol","exportedSymbols":{"EIP712Base":[30773]},"id":30774,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":30675,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:120"},{"abstract":true,"baseContracts":[],"canonicalName":"EIP712Base","contractDependencies":[],"contractKind":"contract","documentation":{"id":30676,"nodeType":"StructuredDocumentation","src":"63:95:120","text":" @title EIP712Base\n @author Aave\n @notice Base contract implementation of EIP712."},"fullyImplemented":false,"id":30773,"linearizedBaseContracts":[30773],"name":"EIP712Base","nameLocation":"177:10:120","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"78160376","id":30682,"mutability":"constant","name":"EIP712_REVISION","nameLocation":"214:15:120","nodeType":"VariableDeclaration","scope":30773,"src":"192:50:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":30677,"name":"bytes","nodeType":"ElementaryTypeName","src":"192:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":{"arguments":[{"hexValue":"31","id":30680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"238:3:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":30679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"232:5:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":30678,"name":"bytes","nodeType":"ElementaryTypeName","src":"232:5:120","typeDescriptions":{}}},"id":30681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"232:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"visibility":"public"},{"constant":true,"id":30687,"mutability":"constant","name":"EIP712_DOMAIN","nameLocation":"272:13:120","nodeType":"VariableDeclaration","scope":30773,"src":"246:141:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30683,"name":"bytes32","nodeType":"ElementaryTypeName","src":"246:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":30685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"302:84:120","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":30684,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"292:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":30686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"292:95:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30691,"mutability":"mutable","name":"_nonces","nameLocation":"475:7:120","nodeType":"VariableDeclaration","scope":30773,"src":"438:44:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":30690,"keyType":{"id":30688,"name":"address","nodeType":"ElementaryTypeName","src":"446:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"438:27:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":30689,"name":"uint256","nodeType":"ElementaryTypeName","src":"457:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":30693,"mutability":"mutable","name":"_domainSeparator","nameLocation":"504:16:120","nodeType":"VariableDeclaration","scope":30773,"src":"487:33:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30692,"name":"bytes32","nodeType":"ElementaryTypeName","src":"487:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30695,"mutability":"immutable","name":"_chainId","nameLocation":"551:8:120","nodeType":"VariableDeclaration","scope":30773,"src":"524:35:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30694,"name":"uint256","nodeType":"ElementaryTypeName","src":"524:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":30704,"nodeType":"Block","src":"613:35:120","statements":[{"expression":{"id":30702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30699,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30695,"src":"619:8:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":30700,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"630:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":30701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"630:13:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"619:24:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30703,"nodeType":"ExpressionStatement","src":"619:24:120"}]},"documentation":{"id":30696,"nodeType":"StructuredDocumentation","src":"564:32:120","text":" @dev Constructor."},"id":30705,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":30697,"nodeType":"ParameterList","parameters":[],"src":"610:2:120"},"returnParameters":{"id":30698,"nodeType":"ParameterList","parameters":[],"src":"613:0:120"},"scope":30773,"src":"599:49:120","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30722,"nodeType":"Block","src":"933:119:120","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30711,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"943:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":30712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"943:13:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":30713,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30695,"src":"960:8:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"943:25:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30718,"nodeType":"IfStatement","src":"939:69:120","trueBody":{"id":30717,"nodeType":"Block","src":"970:38:120","statements":[{"expression":{"id":30715,"name":"_domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30693,"src":"985:16:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":30710,"id":30716,"nodeType":"Return","src":"978:23:120"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":30719,"name":"_calculateDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30766,"src":"1020:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":30720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1020:27:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":30710,"id":30721,"nodeType":"Return","src":"1013:34:120"}]},"documentation":{"id":30706,"nodeType":"StructuredDocumentation","src":"652:212:120","text":" @notice Get the domain separator for the token\n @dev Return cached value if chainId matches cache, otherwise recomputes separator\n @return The domain separator of the token at current chain"},"functionSelector":"3644e515","id":30723,"implemented":true,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"876:16:120","nodeType":"FunctionDefinition","parameters":{"id":30707,"nodeType":"ParameterList","parameters":[],"src":"892:2:120"},"returnParameters":{"id":30710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30723,"src":"924:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30708,"name":"bytes32","nodeType":"ElementaryTypeName","src":"924:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"923:9:120"},"scope":30773,"src":"867:185:120","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":30735,"nodeType":"Block","src":"1329:32:120","statements":[{"expression":{"baseExpression":{"id":30731,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30691,"src":"1342:7:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":30733,"indexExpression":{"id":30732,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"1350:5:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1342:14:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30730,"id":30734,"nodeType":"Return","src":"1335:21:120"}]},"documentation":{"id":30724,"nodeType":"StructuredDocumentation","src":"1056:201:120","text":" @notice Returns the nonce value for address specified as parameter\n @param owner The address for which the nonce is being returned\n @return The nonce value for the input address`"},"functionSelector":"7ecebe00","id":30736,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"1269:6:120","nodeType":"FunctionDefinition","parameters":{"id":30727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30726,"mutability":"mutable","name":"owner","nameLocation":"1284:5:120","nodeType":"VariableDeclaration","scope":30736,"src":"1276:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30725,"name":"address","nodeType":"ElementaryTypeName","src":"1276:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1275:15:120"},"returnParameters":{"id":30730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30736,"src":"1320:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30728,"name":"uint256","nodeType":"ElementaryTypeName","src":"1320:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1319:9:120"},"scope":30773,"src":"1260:101:120","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":30765,"nodeType":"Block","src":"1544:229:120","statements":[{"expression":{"arguments":[{"arguments":[{"id":30745,"name":"EIP712_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30687,"src":"1604:13:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":30749,"name":"_EIP712BaseId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30772,"src":"1645:13:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":30750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1645:15:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30748,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1639:5:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":30747,"name":"bytes","nodeType":"ElementaryTypeName","src":"1639:5:120","typeDescriptions":{}}},"id":30751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1639:22:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":30746,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1629:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":30752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1629:33:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":30754,"name":"EIP712_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30682,"src":"1684:15:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":30753,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1674:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":30755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1674:26:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":30756,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1712:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":30757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"1712:13:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":30760,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1745:4:120","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712Base_$30773","typeString":"contract EIP712Base"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712Base_$30773","typeString":"contract EIP712Base"}],"id":30759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1737:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30758,"name":"address","nodeType":"ElementaryTypeName","src":"1737:7:120","typeDescriptions":{}}},"id":30761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1737:13:120","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":30743,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1582:3:120","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":30744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1582:10:120","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":30762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1582:178:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":30742,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1563:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":30763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1563:205:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":30741,"id":30764,"nodeType":"Return","src":"1550:218:120"}]},"documentation":{"id":30737,"nodeType":"StructuredDocumentation","src":"1365:107:120","text":" @notice Compute the current domain separator\n @return The domain separator for the token"},"id":30766,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateDomainSeparator","nameLocation":"1484:25:120","nodeType":"FunctionDefinition","parameters":{"id":30738,"nodeType":"ParameterList","parameters":[],"src":"1509:2:120"},"returnParameters":{"id":30741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30766,"src":"1535:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30739,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1535:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1534:9:120"},"scope":30773,"src":"1475:298:120","stateMutability":"view","virtual":false,"visibility":"internal"},{"documentation":{"id":30767,"nodeType":"StructuredDocumentation","src":"1777:133:120","text":" @notice Returns the user readable name of signing domain (e.g. token name)\n @return The name of the signing domain"},"id":30772,"implemented":false,"kind":"function","modifiers":[],"name":"_EIP712BaseId","nameLocation":"1922:13:120","nodeType":"FunctionDefinition","parameters":{"id":30768,"nodeType":"ParameterList","parameters":[],"src":"1935:2:120"},"returnParameters":{"id":30771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30770,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30772,"src":"1969:13:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30769,"name":"string","nodeType":"ElementaryTypeName","src":"1969:6:120","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1968:15:120"},"scope":30773,"src":"1913:71:120","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":30774,"src":"159:1827:120","usedErrors":[]}],"src":"37:1950:120"},"id":120},"contracts/protocol/tokenization/base/IncentivizedERC20.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","exportedSymbols":{"Context":[748],"Errors":[14819],"IACLManager":[3843],"IAaveIncentivesController":[4000],"IERC20":[1442],"IERC20Detailed":[1464],"IPool":[5073],"IPoolAddressesProvider":[5282],"IncentivizedERC20":[31300],"SafeCast":[1966],"WadRayMath":[23813]},"id":31301,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":30775,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:121"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/Context.sol","file":"../../../dependencies/openzeppelin/contracts/Context.sol","id":30777,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":749,"src":"63:81:121","symbolAliases":[{"foreign":{"id":30776,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":30779,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":1443,"src":"145:79:121","symbolAliases":[{"foreign":{"id":30778,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"153:6:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":30781,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":1465,"src":"225:95:121","symbolAliases":[{"foreign":{"id":30780,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"233:14:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":30783,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":1967,"src":"321:83:121","symbolAliases":[{"foreign":{"id":30782,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"329:8:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../../libraries/math/WadRayMath.sol","id":30785,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":23814,"src":"405:63:121","symbolAliases":[{"foreign":{"id":30784,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"413:10:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../../libraries/helpers/Errors.sol","id":30787,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":14820,"src":"469:58:121","symbolAliases":[{"foreign":{"id":30786,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"477:6:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","file":"../../../interfaces/IAaveIncentivesController.sol","id":30789,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":4001,"src":"528:92:121","symbolAliases":[{"foreign":{"id":30788,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"536:25:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPoolAddressesProvider.sol","file":"../../../interfaces/IPoolAddressesProvider.sol","id":30791,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":5283,"src":"621:86:121","symbolAliases":[{"foreign":{"id":30790,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"629:22:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../../interfaces/IPool.sol","id":30793,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":5074,"src":"708:52:121","symbolAliases":[{"foreign":{"id":30792,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"716:5:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IACLManager.sol","file":"../../../interfaces/IACLManager.sol","id":30795,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31301,"sourceUnit":3844,"src":"761:64:121","symbolAliases":[{"foreign":{"id":30794,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"769:11:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":30797,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"1007:7:121"},"id":30798,"nodeType":"InheritanceSpecifier","src":"1007:7:121"},{"baseName":{"id":30799,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"1016:14:121"},"id":30800,"nodeType":"InheritanceSpecifier","src":"1016:14:121"}],"canonicalName":"IncentivizedERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":30796,"nodeType":"StructuredDocumentation","src":"827:140:121","text":" @title IncentivizedERC20\n @author Aave, inspired by the Openzeppelin ERC20 implementation\n @notice Basic ERC20 implementation"},"fullyImplemented":true,"id":31300,"linearizedBaseContracts":[31300,1464,1442,748],"name":"IncentivizedERC20","nameLocation":"986:17:121","nodeType":"ContractDefinition","nodes":[{"id":30803,"libraryName":{"id":30801,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"1041:10:121"},"nodeType":"UsingForDirective","src":"1035:29:121","typeName":{"id":30802,"name":"uint256","nodeType":"ElementaryTypeName","src":"1056:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":30806,"libraryName":{"id":30804,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1073:8:121"},"nodeType":"UsingForDirective","src":"1067:27:121","typeName":{"id":30805,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":30829,"nodeType":"Block","src":"1205:169:121","statements":[{"assignments":[30811],"declarations":[{"constant":false,"id":30811,"mutability":"mutable","name":"aclManager","nameLocation":"1223:10:121","nodeType":"VariableDeclaration","scope":30829,"src":"1211:22:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"},"typeName":{"id":30810,"nodeType":"UserDefinedTypeName","pathNode":{"id":30809,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3843,"src":"1211:11:121"},"referencedDeclaration":3843,"src":"1211:11:121","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":30817,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30813,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30877,"src":"1248:18:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":30814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5239,"src":"1248:32:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":30815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1248:34:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30812,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3843,"src":"1236:11:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3843_$","typeString":"type(contract IACLManager)"}},"id":30816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1236:47:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"1211:72:121"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":30821,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1320:3:121","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1320:10:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30819,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30811,"src":"1297:10:121","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3843","typeString":"contract IACLManager"}},"id":30820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3742,"src":"1297:22:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":30823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1297:34:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":30824,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1333:6:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":14551,"src":"1333:28:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30818,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1289:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1289:73:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30827,"nodeType":"ExpressionStatement","src":"1289:73:121"},{"id":30828,"nodeType":"PlaceholderStatement","src":"1368:1:121"}]},"documentation":{"id":30807,"nodeType":"StructuredDocumentation","src":"1098:79:121","text":" @dev Only pool admin can call functions marked by this modifier."},"id":30830,"name":"onlyPoolAdmin","nameLocation":"1189:13:121","nodeType":"ModifierDefinition","parameters":{"id":30808,"nodeType":"ParameterList","parameters":[],"src":"1202:2:121"},"src":"1180:194:121","virtual":false,"visibility":"internal"},{"body":{"id":30846,"nodeType":"Block","src":"1474:84:121","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":30834,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"1488:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":30835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1488:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":30838,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"1512:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}],"id":30837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1504:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30836,"name":"address","nodeType":"ElementaryTypeName","src":"1504:7:121","typeDescriptions":{}}},"id":30839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1504:13:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1488:29:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":30841,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"1519:6:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":30842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_MUST_BE_POOL","nodeType":"MemberAccess","referencedDeclaration":14617,"src":"1519:26:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30833,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1480:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1480:66:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30844,"nodeType":"ExpressionStatement","src":"1480:66:121"},{"id":30845,"nodeType":"PlaceholderStatement","src":"1552:1:121"}]},"documentation":{"id":30831,"nodeType":"StructuredDocumentation","src":"1378:73:121","text":" @dev Only pool can call functions marked by this modifier."},"id":30847,"name":"onlyPool","nameLocation":"1463:8:121","nodeType":"ModifierDefinition","parameters":{"id":30832,"nodeType":"ParameterList","parameters":[],"src":"1471:2:121"},"src":"1454:104:121","virtual":false,"visibility":"internal"},{"canonicalName":"IncentivizedERC20.UserState","id":30852,"members":[{"constant":false,"id":30849,"mutability":"mutable","name":"balance","nameLocation":"1860:7:121","nodeType":"VariableDeclaration","scope":30852,"src":"1852:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":30848,"name":"uint128","nodeType":"ElementaryTypeName","src":"1852:7:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":30851,"mutability":"mutable","name":"additionalData","nameLocation":"1881:14:121","nodeType":"VariableDeclaration","scope":30852,"src":"1873:22:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":30850,"name":"uint128","nodeType":"ElementaryTypeName","src":"1873:7:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"name":"UserState","nameLocation":"1836:9:121","nodeType":"StructDefinition","scope":31300,"src":"1829:71:121","visibility":"public"},{"constant":false,"id":30857,"mutability":"mutable","name":"_userState","nameLocation":"2020:10:121","nodeType":"VariableDeclaration","scope":31300,"src":"1981:49:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState)"},"typeName":{"id":30856,"keyType":{"id":30853,"name":"address","nodeType":"ElementaryTypeName","src":"1989:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1981:29:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState)"},"valueType":{"id":30855,"nodeType":"UserDefinedTypeName","pathNode":{"id":30854,"name":"UserState","nodeType":"IdentifierPath","referencedDeclaration":30852,"src":"2000:9:121"},"referencedDeclaration":30852,"src":"2000:9:121","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage_ptr","typeString":"struct IncentivizedERC20.UserState"}}},"visibility":"internal"},{"constant":false,"id":30863,"mutability":"mutable","name":"_allowances","nameLocation":"2158:11:121","nodeType":"VariableDeclaration","scope":31300,"src":"2102:67:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":30862,"keyType":{"id":30858,"name":"address","nodeType":"ElementaryTypeName","src":"2110:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2102:47:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":30861,"keyType":{"id":30859,"name":"address","nodeType":"ElementaryTypeName","src":"2129:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2121:27:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":30860,"name":"uint256","nodeType":"ElementaryTypeName","src":"2140:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":30865,"mutability":"mutable","name":"_totalSupply","nameLocation":"2191:12:121","nodeType":"VariableDeclaration","scope":31300,"src":"2174:29:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30864,"name":"uint256","nodeType":"ElementaryTypeName","src":"2174:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30867,"mutability":"mutable","name":"_name","nameLocation":"2222:5:121","nodeType":"VariableDeclaration","scope":31300,"src":"2207:20:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":30866,"name":"string","nodeType":"ElementaryTypeName","src":"2207:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":30869,"mutability":"mutable","name":"_symbol","nameLocation":"2246:7:121","nodeType":"VariableDeclaration","scope":31300,"src":"2231:22:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":30868,"name":"string","nodeType":"ElementaryTypeName","src":"2231:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":30871,"mutability":"mutable","name":"_decimals","nameLocation":"2271:9:121","nodeType":"VariableDeclaration","scope":31300,"src":"2257:23:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":30870,"name":"uint8","nodeType":"ElementaryTypeName","src":"2257:5:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"constant":false,"id":30874,"mutability":"mutable","name":"_incentivesController","nameLocation":"2319:21:121","nodeType":"VariableDeclaration","scope":31300,"src":"2284:56:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":30873,"nodeType":"UserDefinedTypeName","pathNode":{"id":30872,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"2284:25:121"},"referencedDeclaration":4000,"src":"2284:25:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":30877,"mutability":"immutable","name":"_addressesProvider","nameLocation":"2386:18:121","nodeType":"VariableDeclaration","scope":31300,"src":"2344:60:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":30876,"nodeType":"UserDefinedTypeName","pathNode":{"id":30875,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5282,"src":"2344:22:121"},"referencedDeclaration":5282,"src":"2344:22:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"functionSelector":"7535d246","id":30880,"mutability":"immutable","name":"POOL","nameLocation":"2431:4:121","nodeType":"VariableDeclaration","scope":31300,"src":"2408:27:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":30879,"nodeType":"UserDefinedTypeName","pathNode":{"id":30878,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"2408:5:121"},"referencedDeclaration":5073,"src":"2408:5:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"public"},{"body":{"id":30915,"nodeType":"Block","src":"2753:140:121","statements":[{"expression":{"id":30897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30893,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30877,"src":"2759:18:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30894,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30884,"src":"2780:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":30895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ADDRESSES_PROVIDER","nodeType":"MemberAccess","referencedDeclaration":4961,"src":"2780:23:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IPoolAddressesProvider_$5282_$","typeString":"function () view external returns (contract IPoolAddressesProvider)"}},"id":30896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2780:25:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"src":"2759:46:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5282","typeString":"contract IPoolAddressesProvider"}},"id":30898,"nodeType":"ExpressionStatement","src":"2759:46:121"},{"expression":{"id":30901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30899,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30867,"src":"2811:5:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30900,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30886,"src":"2819:4:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2811:12:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":30902,"nodeType":"ExpressionStatement","src":"2811:12:121"},{"expression":{"id":30905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30903,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30869,"src":"2829:7:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30904,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30888,"src":"2839:6:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2829:16:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":30906,"nodeType":"ExpressionStatement","src":"2829:16:121"},{"expression":{"id":30909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30907,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30871,"src":"2851:9:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30908,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30890,"src":"2863:8:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2851:20:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":30910,"nodeType":"ExpressionStatement","src":"2851:20:121"},{"expression":{"id":30913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30911,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30880,"src":"2877:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30912,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30884,"src":"2884:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"src":"2877:11:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"id":30914,"nodeType":"ExpressionStatement","src":"2877:11:121"}]},"documentation":{"id":30881,"nodeType":"StructuredDocumentation","src":"2440:228:121","text":" @dev Constructor.\n @param pool The reference to the main Pool contract\n @param name The name of the token\n @param symbol The symbol of the token\n @param decimals The number of decimals of the token"},"id":30916,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":30891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30884,"mutability":"mutable","name":"pool","nameLocation":"2689:4:121","nodeType":"VariableDeclaration","scope":30916,"src":"2683:10:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":30883,"nodeType":"UserDefinedTypeName","pathNode":{"id":30882,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"2683:5:121"},"referencedDeclaration":5073,"src":"2683:5:121","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":30886,"mutability":"mutable","name":"name","nameLocation":"2709:4:121","nodeType":"VariableDeclaration","scope":30916,"src":"2695:18:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30885,"name":"string","nodeType":"ElementaryTypeName","src":"2695:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":30888,"mutability":"mutable","name":"symbol","nameLocation":"2729:6:121","nodeType":"VariableDeclaration","scope":30916,"src":"2715:20:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30887,"name":"string","nodeType":"ElementaryTypeName","src":"2715:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":30890,"mutability":"mutable","name":"decimals","nameLocation":"2743:8:121","nodeType":"VariableDeclaration","scope":30916,"src":"2737:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":30889,"name":"uint8","nodeType":"ElementaryTypeName","src":"2737:5:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2682:70:121"},"returnParameters":{"id":30892,"nodeType":"ParameterList","parameters":[],"src":"2753:0:121"},"scope":31300,"src":"2671:222:121","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1453],"body":{"id":30925,"nodeType":"Block","src":"2991:23:121","statements":[{"expression":{"id":30923,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30867,"src":"3004:5:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":30922,"id":30924,"nodeType":"Return","src":"2997:12:121"}]},"documentation":{"id":30917,"nodeType":"StructuredDocumentation","src":"2897:30:121","text":"@inheritdoc IERC20Detailed"},"functionSelector":"06fdde03","id":30926,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2939:4:121","nodeType":"FunctionDefinition","overrides":{"id":30919,"nodeType":"OverrideSpecifier","overrides":[],"src":"2958:8:121"},"parameters":{"id":30918,"nodeType":"ParameterList","parameters":[],"src":"2943:2:121"},"returnParameters":{"id":30922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30926,"src":"2976:13:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30920,"name":"string","nodeType":"ElementaryTypeName","src":"2976:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2975:15:121"},"scope":31300,"src":"2930:84:121","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1458],"body":{"id":30935,"nodeType":"Block","src":"3116:25:121","statements":[{"expression":{"id":30933,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30869,"src":"3129:7:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":30932,"id":30934,"nodeType":"Return","src":"3122:14:121"}]},"documentation":{"id":30927,"nodeType":"StructuredDocumentation","src":"3018:30:121","text":"@inheritdoc IERC20Detailed"},"functionSelector":"95d89b41","id":30936,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"3060:6:121","nodeType":"FunctionDefinition","overrides":{"id":30929,"nodeType":"OverrideSpecifier","overrides":[],"src":"3083:8:121"},"parameters":{"id":30928,"nodeType":"ParameterList","parameters":[],"src":"3066:2:121"},"returnParameters":{"id":30932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30931,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30936,"src":"3101:13:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30930,"name":"string","nodeType":"ElementaryTypeName","src":"3101:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3100:15:121"},"scope":31300,"src":"3051:90:121","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1463],"body":{"id":30945,"nodeType":"Block","src":"3237:27:121","statements":[{"expression":{"id":30943,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30871,"src":"3250:9:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":30942,"id":30944,"nodeType":"Return","src":"3243:16:121"}]},"documentation":{"id":30937,"nodeType":"StructuredDocumentation","src":"3145:30:121","text":"@inheritdoc IERC20Detailed"},"functionSelector":"313ce567","id":30946,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3187:8:121","nodeType":"FunctionDefinition","overrides":{"id":30939,"nodeType":"OverrideSpecifier","overrides":[],"src":"3212:8:121"},"parameters":{"id":30938,"nodeType":"ParameterList","parameters":[],"src":"3195:2:121"},"returnParameters":{"id":30942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30941,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30946,"src":"3230:5:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":30940,"name":"uint8","nodeType":"ElementaryTypeName","src":"3230:5:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3229:7:121"},"scope":31300,"src":"3178:86:121","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1373],"body":{"id":30955,"nodeType":"Block","src":"3363:30:121","statements":[{"expression":{"id":30953,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"3376:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30952,"id":30954,"nodeType":"Return","src":"3369:19:121"}]},"documentation":{"id":30947,"nodeType":"StructuredDocumentation","src":"3268:22:121","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":30956,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3302:11:121","nodeType":"FunctionDefinition","overrides":{"id":30949,"nodeType":"OverrideSpecifier","overrides":[],"src":"3336:8:121"},"parameters":{"id":30948,"nodeType":"ParameterList","parameters":[],"src":"3313:2:121"},"returnParameters":{"id":30952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30951,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30956,"src":"3354:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30950,"name":"uint256","nodeType":"ElementaryTypeName","src":"3354:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3353:9:121"},"scope":31300,"src":"3293:100:121","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1381],"body":{"id":30970,"nodeType":"Block","src":"3505:45:121","statements":[{"expression":{"expression":{"baseExpression":{"id":30965,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"3518:10:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":30967,"indexExpression":{"id":30966,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30959,"src":"3529:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3518:19:121","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":30968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"3518:27:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":30964,"id":30969,"nodeType":"Return","src":"3511:34:121"}]},"documentation":{"id":30957,"nodeType":"StructuredDocumentation","src":"3397:22:121","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":30971,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3431:9:121","nodeType":"FunctionDefinition","overrides":{"id":30961,"nodeType":"OverrideSpecifier","overrides":[],"src":"3478:8:121"},"parameters":{"id":30960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30959,"mutability":"mutable","name":"account","nameLocation":"3449:7:121","nodeType":"VariableDeclaration","scope":30971,"src":"3441:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30958,"name":"address","nodeType":"ElementaryTypeName","src":"3441:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3440:17:121"},"returnParameters":{"id":30964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30963,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30971,"src":"3496:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30962,"name":"uint256","nodeType":"ElementaryTypeName","src":"3496:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3495:9:121"},"scope":31300,"src":"3422:128:121","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":30980,"nodeType":"Block","src":"3784:39:121","statements":[{"expression":{"id":30978,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"3797:21:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"functionReturnParameters":30977,"id":30979,"nodeType":"Return","src":"3790:28:121"}]},"documentation":{"id":30972,"nodeType":"StructuredDocumentation","src":"3554:134:121","text":" @notice Returns the address of the Incentives Controller contract\n @return The address of the Incentives Controller"},"functionSelector":"75d26413","id":30981,"implemented":true,"kind":"function","modifiers":[],"name":"getIncentivesController","nameLocation":"3700:23:121","nodeType":"FunctionDefinition","parameters":{"id":30973,"nodeType":"ParameterList","parameters":[],"src":"3723:2:121"},"returnParameters":{"id":30977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30976,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30981,"src":"3757:25:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":30975,"nodeType":"UserDefinedTypeName","pathNode":{"id":30974,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"3757:25:121"},"referencedDeclaration":4000,"src":"3757:25:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"src":"3756:27:121"},"scope":31300,"src":"3691:132:121","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":30994,"nodeType":"Block","src":"4032:45:121","statements":[{"expression":{"id":30992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30990,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"4038:21:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30991,"name":"controller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30985,"src":"4062:10:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"src":"4038:34:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":30993,"nodeType":"ExpressionStatement","src":"4038:34:121"}]},"documentation":{"id":30982,"nodeType":"StructuredDocumentation","src":"3827:108:121","text":" @notice Sets a new Incentives Controller\n @param controller the new Incentives controller"},"functionSelector":"e655dbd8","id":30995,"implemented":true,"kind":"function","modifiers":[{"id":30988,"kind":"modifierInvocation","modifierName":{"id":30987,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":30830,"src":"4018:13:121"},"nodeType":"ModifierInvocation","src":"4018:13:121"}],"name":"setIncentivesController","nameLocation":"3947:23:121","nodeType":"FunctionDefinition","parameters":{"id":30986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30985,"mutability":"mutable","name":"controller","nameLocation":"3997:10:121","nodeType":"VariableDeclaration","scope":30995,"src":"3971:36:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":30984,"nodeType":"UserDefinedTypeName","pathNode":{"id":30983,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"3971:25:121"},"referencedDeclaration":4000,"src":"3971:25:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"src":"3970:38:121"},"returnParameters":{"id":30989,"nodeType":"ParameterList","parameters":[],"src":"4032:0:121"},"scope":31300,"src":"3938:139:121","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1391],"body":{"id":31021,"nodeType":"Block","src":"4200:119:121","statements":[{"assignments":[31007],"declarations":[{"constant":false,"id":31007,"mutability":"mutable","name":"castAmount","nameLocation":"4214:10:121","nodeType":"VariableDeclaration","scope":31021,"src":"4206:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31006,"name":"uint128","nodeType":"ElementaryTypeName","src":"4206:7:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":31011,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31008,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31000,"src":"4227:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"4227:16:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4227:18:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"4206:39:121"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":31013,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4261:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4261:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":31015,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30998,"src":"4275:9:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31016,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31007,"src":"4286:10:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":31012,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31241,"src":"4251:9:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,address,uint128)"}},"id":31017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4251:46:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31018,"nodeType":"ExpressionStatement","src":"4251:46:121"},{"expression":{"hexValue":"74727565","id":31019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4310:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":31005,"id":31020,"nodeType":"Return","src":"4303:11:121"}]},"documentation":{"id":30996,"nodeType":"StructuredDocumentation","src":"4081:22:121","text":"@inheritdoc IERC20"},"functionSelector":"a9059cbb","id":31022,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4115:8:121","nodeType":"FunctionDefinition","overrides":{"id":31002,"nodeType":"OverrideSpecifier","overrides":[],"src":"4176:8:121"},"parameters":{"id":31001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30998,"mutability":"mutable","name":"recipient","nameLocation":"4132:9:121","nodeType":"VariableDeclaration","scope":31022,"src":"4124:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30997,"name":"address","nodeType":"ElementaryTypeName","src":"4124:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31000,"mutability":"mutable","name":"amount","nameLocation":"4151:6:121","nodeType":"VariableDeclaration","scope":31022,"src":"4143:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30999,"name":"uint256","nodeType":"ElementaryTypeName","src":"4143:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4123:35:121"},"returnParameters":{"id":31005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31022,"src":"4194:4:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31003,"name":"bool","nodeType":"ElementaryTypeName","src":"4194:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4193:6:121"},"scope":31300,"src":"4106:213:121","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[1401],"body":{"id":31039,"nodeType":"Block","src":"4460:45:121","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":31033,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30863,"src":"4473:11:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":31035,"indexExpression":{"id":31034,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31025,"src":"4485:5:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4473:18:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":31037,"indexExpression":{"id":31036,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31027,"src":"4492:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4473:27:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":31032,"id":31038,"nodeType":"Return","src":"4466:34:121"}]},"documentation":{"id":31023,"nodeType":"StructuredDocumentation","src":"4323:22:121","text":"@inheritdoc IERC20"},"functionSelector":"dd62ed3e","id":31040,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"4357:9:121","nodeType":"FunctionDefinition","overrides":{"id":31029,"nodeType":"OverrideSpecifier","overrides":[],"src":"4433:8:121"},"parameters":{"id":31028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31025,"mutability":"mutable","name":"owner","nameLocation":"4380:5:121","nodeType":"VariableDeclaration","scope":31040,"src":"4372:13:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31024,"name":"address","nodeType":"ElementaryTypeName","src":"4372:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31027,"mutability":"mutable","name":"spender","nameLocation":"4399:7:121","nodeType":"VariableDeclaration","scope":31040,"src":"4391:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31026,"name":"address","nodeType":"ElementaryTypeName","src":"4391:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4366:44:121"},"returnParameters":{"id":31032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31040,"src":"4451:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31030,"name":"uint256","nodeType":"ElementaryTypeName","src":"4451:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4450:9:121"},"scope":31300,"src":"4348:157:121","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[1411],"body":{"id":31060,"nodeType":"Block","src":"4625:67:121","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":31052,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4640:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4640:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":31054,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31043,"src":"4654:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31055,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31045,"src":"4663:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31051,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31266,"src":"4631:8:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4631:39:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31057,"nodeType":"ExpressionStatement","src":"4631:39:121"},{"expression":{"hexValue":"74727565","id":31058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4683:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":31050,"id":31059,"nodeType":"Return","src":"4676:11:121"}]},"documentation":{"id":31041,"nodeType":"StructuredDocumentation","src":"4509:22:121","text":"@inheritdoc IERC20"},"functionSelector":"095ea7b3","id":31061,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4543:7:121","nodeType":"FunctionDefinition","overrides":{"id":31047,"nodeType":"OverrideSpecifier","overrides":[],"src":"4601:8:121"},"parameters":{"id":31046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31043,"mutability":"mutable","name":"spender","nameLocation":"4559:7:121","nodeType":"VariableDeclaration","scope":31061,"src":"4551:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31042,"name":"address","nodeType":"ElementaryTypeName","src":"4551:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31045,"mutability":"mutable","name":"amount","nameLocation":"4576:6:121","nodeType":"VariableDeclaration","scope":31061,"src":"4568:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31044,"name":"uint256","nodeType":"ElementaryTypeName","src":"4568:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4550:33:121"},"returnParameters":{"id":31050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31049,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31061,"src":"4619:4:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31048,"name":"bool","nodeType":"ElementaryTypeName","src":"4619:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4618:6:121"},"scope":31300,"src":"4534:158:121","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[1423],"body":{"id":31102,"nodeType":"Block","src":"4851:197:121","statements":[{"assignments":[31075],"declarations":[{"constant":false,"id":31075,"mutability":"mutable","name":"castAmount","nameLocation":"4865:10:121","nodeType":"VariableDeclaration","scope":31102,"src":"4857:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31074,"name":"uint128","nodeType":"ElementaryTypeName","src":"4857:7:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":31079,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31076,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31068,"src":"4878:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"4878:16:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4878:18:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"4857:39:121"},{"expression":{"arguments":[{"id":31081,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31064,"src":"4911:6:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":31082,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4919:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4919:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":31084,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30863,"src":"4933:11:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":31086,"indexExpression":{"id":31085,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31064,"src":"4945:6:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4933:19:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":31089,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":31087,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4953:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4953:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4933:33:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31090,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31075,"src":"4969:10:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4933:46:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31080,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31266,"src":"4902:8:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4902:78:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31093,"nodeType":"ExpressionStatement","src":"4902:78:121"},{"expression":{"arguments":[{"id":31095,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31064,"src":"4996:6:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31096,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31066,"src":"5004:9:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31097,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31075,"src":"5015:10:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":31094,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31241,"src":"4986:9:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,address,uint128)"}},"id":31098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4986:40:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31099,"nodeType":"ExpressionStatement","src":"4986:40:121"},{"expression":{"hexValue":"74727565","id":31100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5039:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":31073,"id":31101,"nodeType":"Return","src":"5032:11:121"}]},"documentation":{"id":31062,"nodeType":"StructuredDocumentation","src":"4696:22:121","text":"@inheritdoc IERC20"},"functionSelector":"23b872dd","id":31103,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4730:12:121","nodeType":"FunctionDefinition","overrides":{"id":31070,"nodeType":"OverrideSpecifier","overrides":[],"src":"4827:8:121"},"parameters":{"id":31069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31064,"mutability":"mutable","name":"sender","nameLocation":"4756:6:121","nodeType":"VariableDeclaration","scope":31103,"src":"4748:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31063,"name":"address","nodeType":"ElementaryTypeName","src":"4748:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31066,"mutability":"mutable","name":"recipient","nameLocation":"4776:9:121","nodeType":"VariableDeclaration","scope":31103,"src":"4768:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31065,"name":"address","nodeType":"ElementaryTypeName","src":"4768:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31068,"mutability":"mutable","name":"amount","nameLocation":"4799:6:121","nodeType":"VariableDeclaration","scope":31103,"src":"4791:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31067,"name":"uint256","nodeType":"ElementaryTypeName","src":"4791:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4742:67:121"},"returnParameters":{"id":31073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31103,"src":"4845:4:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31071,"name":"bool","nodeType":"ElementaryTypeName","src":"4845:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4844:6:121"},"scope":31300,"src":"4721:327:121","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":31129,"nodeType":"Block","src":"5392:108:121","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":31114,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5407:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5407:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":31116,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31106,"src":"5421:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":31117,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30863,"src":"5430:11:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":31120,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":31118,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5442:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5442:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5430:25:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":31122,"indexExpression":{"id":31121,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31106,"src":"5456:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5430:34:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31123,"name":"addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31108,"src":"5467:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5430:47:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31113,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31266,"src":"5398:8:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5398:80:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31126,"nodeType":"ExpressionStatement","src":"5398:80:121"},{"expression":{"hexValue":"74727565","id":31127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5491:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":31112,"id":31128,"nodeType":"Return","src":"5484:11:121"}]},"documentation":{"id":31104,"nodeType":"StructuredDocumentation","src":"5052:241:121","text":" @notice Increases the allowance of spender to spend _msgSender() tokens\n @param spender The user allowed to spend on behalf of _msgSender()\n @param addedValue The amount being added to the allowance\n @return `true`"},"functionSelector":"39509351","id":31130,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"5305:17:121","nodeType":"FunctionDefinition","parameters":{"id":31109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31106,"mutability":"mutable","name":"spender","nameLocation":"5331:7:121","nodeType":"VariableDeclaration","scope":31130,"src":"5323:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31105,"name":"address","nodeType":"ElementaryTypeName","src":"5323:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31108,"mutability":"mutable","name":"addedValue","nameLocation":"5348:10:121","nodeType":"VariableDeclaration","scope":31130,"src":"5340:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31107,"name":"uint256","nodeType":"ElementaryTypeName","src":"5340:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5322:37:121"},"returnParameters":{"id":31112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31111,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31130,"src":"5386:4:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31110,"name":"bool","nodeType":"ElementaryTypeName","src":"5386:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5385:6:121"},"scope":31300,"src":"5296:204:121","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":31156,"nodeType":"Block","src":"5871:113:121","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":31141,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5886:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5886:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":31143,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31133,"src":"5900:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":31144,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30863,"src":"5909:11:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":31147,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":31145,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5921:10:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5921:12:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5909:25:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":31149,"indexExpression":{"id":31148,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31133,"src":"5935:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5909:34:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31150,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31135,"src":"5946:15:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5909:52:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31140,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31266,"src":"5877:8:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5877:85:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31153,"nodeType":"ExpressionStatement","src":"5877:85:121"},{"expression":{"hexValue":"74727565","id":31154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5975:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":31139,"id":31155,"nodeType":"Return","src":"5968:11:121"}]},"documentation":{"id":31131,"nodeType":"StructuredDocumentation","src":"5504:251:121","text":" @notice Decreases the allowance of spender to spend _msgSender() tokens\n @param spender The user allowed to spend on behalf of _msgSender()\n @param subtractedValue The amount being subtracted to the allowance\n @return `true`"},"functionSelector":"a457c2d7","id":31157,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"5767:17:121","nodeType":"FunctionDefinition","parameters":{"id":31136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31133,"mutability":"mutable","name":"spender","nameLocation":"5798:7:121","nodeType":"VariableDeclaration","scope":31157,"src":"5790:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31132,"name":"address","nodeType":"ElementaryTypeName","src":"5790:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31135,"mutability":"mutable","name":"subtractedValue","nameLocation":"5819:15:121","nodeType":"VariableDeclaration","scope":31157,"src":"5811:23:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31134,"name":"uint256","nodeType":"ElementaryTypeName","src":"5811:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5784:54:121"},"returnParameters":{"id":31139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31157,"src":"5865:4:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31137,"name":"bool","nodeType":"ElementaryTypeName","src":"5865:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5864:6:121"},"scope":31300,"src":"5758:226:121","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":31240,"nodeType":"Block","src":"6302:685:121","statements":[{"assignments":[31168],"declarations":[{"constant":false,"id":31168,"mutability":"mutable","name":"oldSenderBalance","nameLocation":"6316:16:121","nodeType":"VariableDeclaration","scope":31240,"src":"6308:24:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31167,"name":"uint128","nodeType":"ElementaryTypeName","src":"6308:7:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":31173,"initialValue":{"expression":{"baseExpression":{"id":31169,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"6335:10:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31171,"indexExpression":{"id":31170,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31160,"src":"6346:6:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6335:18:121","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"6335:26:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6308:53:121"},{"expression":{"id":31181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31174,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"6367:10:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31176,"indexExpression":{"id":31175,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31160,"src":"6378:6:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6367:18:121","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"6367:26:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":31180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31178,"name":"oldSenderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31168,"src":"6396:16:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31179,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31164,"src":"6415:6:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6396:25:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6367:54:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":31182,"nodeType":"ExpressionStatement","src":"6367:54:121"},{"assignments":[31184],"declarations":[{"constant":false,"id":31184,"mutability":"mutable","name":"oldRecipientBalance","nameLocation":"6435:19:121","nodeType":"VariableDeclaration","scope":31240,"src":"6427:27:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31183,"name":"uint128","nodeType":"ElementaryTypeName","src":"6427:7:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":31189,"initialValue":{"expression":{"baseExpression":{"id":31185,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"6457:10:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31187,"indexExpression":{"id":31186,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31162,"src":"6468:9:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6457:21:121","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"6457:29:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6427:59:121"},{"expression":{"id":31197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31190,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"6492:10:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31192,"indexExpression":{"id":31191,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31162,"src":"6503:9:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6492:21:121","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"6492:29:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":31196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31194,"name":"oldRecipientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"6524:19:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31195,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31164,"src":"6546:6:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6524:28:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6492:60:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":31198,"nodeType":"ExpressionStatement","src":"6492:60:121"},{"assignments":[31201],"declarations":[{"constant":false,"id":31201,"mutability":"mutable","name":"incentivesControllerLocal","nameLocation":"6585:25:121","nodeType":"VariableDeclaration","scope":31240,"src":"6559:51:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":31200,"nodeType":"UserDefinedTypeName","pathNode":{"id":31199,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"6559:25:121"},"referencedDeclaration":4000,"src":"6559:25:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"id":31203,"initialValue":{"id":31202,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"6613:21:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"nodeType":"VariableDeclarationStatement","src":"6559:75:121"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31206,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31201,"src":"6652:25:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}],"id":31205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6644:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31204,"name":"address","nodeType":"ElementaryTypeName","src":"6644:7:121","typeDescriptions":{}}},"id":31207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6644:34:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":31210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6690:1:121","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":31209,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6682:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31208,"name":"address","nodeType":"ElementaryTypeName","src":"6682:7:121","typeDescriptions":{}}},"id":31211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6682:10:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6644:48:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31239,"nodeType":"IfStatement","src":"6640:343:121","trueBody":{"id":31238,"nodeType":"Block","src":"6694:289:121","statements":[{"assignments":[31214],"declarations":[{"constant":false,"id":31214,"mutability":"mutable","name":"currentTotalSupply","nameLocation":"6710:18:121","nodeType":"VariableDeclaration","scope":31238,"src":"6702:26:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31213,"name":"uint256","nodeType":"ElementaryTypeName","src":"6702:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31216,"initialValue":{"id":31215,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"6731:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6702:41:121"},{"expression":{"arguments":[{"id":31220,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31160,"src":"6790:6:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31221,"name":"currentTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31214,"src":"6798:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31222,"name":"oldSenderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31168,"src":"6818:16:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31217,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31201,"src":"6751:25:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":31219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3999,"src":"6751:38:121","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":31223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6751:84:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31224,"nodeType":"ExpressionStatement","src":"6751:84:121"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31225,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31160,"src":"6847:6:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":31226,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31162,"src":"6857:9:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6847:19:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31237,"nodeType":"IfStatement","src":"6843:134:121","trueBody":{"id":31236,"nodeType":"Block","src":"6868:109:121","statements":[{"expression":{"arguments":[{"id":31231,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31162,"src":"6917:9:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31232,"name":"currentTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31214,"src":"6928:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31233,"name":"oldRecipientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"6948:19:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31228,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31201,"src":"6878:25:121","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":31230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3999,"src":"6878:38:121","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":31234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6878:90:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31235,"nodeType":"ExpressionStatement","src":"6878:90:121"}]}}]}}]},"documentation":{"id":31158,"nodeType":"StructuredDocumentation","src":"5988:224:121","text":" @notice Transfers tokens between two users and apply incentives if defined.\n @param sender The source address\n @param recipient The destination address\n @param amount The amount getting transferred"},"id":31241,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6224:9:121","nodeType":"FunctionDefinition","parameters":{"id":31165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31160,"mutability":"mutable","name":"sender","nameLocation":"6242:6:121","nodeType":"VariableDeclaration","scope":31241,"src":"6234:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31159,"name":"address","nodeType":"ElementaryTypeName","src":"6234:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31162,"mutability":"mutable","name":"recipient","nameLocation":"6258:9:121","nodeType":"VariableDeclaration","scope":31241,"src":"6250:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31161,"name":"address","nodeType":"ElementaryTypeName","src":"6250:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31164,"mutability":"mutable","name":"amount","nameLocation":"6277:6:121","nodeType":"VariableDeclaration","scope":31241,"src":"6269:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31163,"name":"uint128","nodeType":"ElementaryTypeName","src":"6269:7:121","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6233:51:121"},"returnParameters":{"id":31166,"nodeType":"ParameterList","parameters":[],"src":"6302:0:121"},"scope":31300,"src":"6215:772:121","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":31265,"nodeType":"Block","src":"7318:90:121","statements":[{"expression":{"id":31257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":31251,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30863,"src":"7324:11:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":31254,"indexExpression":{"id":31252,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31244,"src":"7336:5:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7324:18:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":31255,"indexExpression":{"id":31253,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31246,"src":"7343:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7324:27:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31256,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31248,"src":"7354:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7324:36:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31258,"nodeType":"ExpressionStatement","src":"7324:36:121"},{"eventCall":{"arguments":[{"id":31260,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31244,"src":"7380:5:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31261,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31246,"src":"7387:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31262,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31248,"src":"7396:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31259,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1441,"src":"7371:8:121","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7371:32:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31264,"nodeType":"EmitStatement","src":"7366:37:121"}]},"documentation":{"id":31242,"nodeType":"StructuredDocumentation","src":"6991:241:121","text":" @notice Approve `spender` to use `amount` of `owner`s balance\n @param owner The address owning the tokens\n @param spender The address approved for spending\n @param amount The amount of tokens to approve spending of"},"id":31266,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"7244:8:121","nodeType":"FunctionDefinition","parameters":{"id":31249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31244,"mutability":"mutable","name":"owner","nameLocation":"7261:5:121","nodeType":"VariableDeclaration","scope":31266,"src":"7253:13:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31243,"name":"address","nodeType":"ElementaryTypeName","src":"7253:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31246,"mutability":"mutable","name":"spender","nameLocation":"7276:7:121","nodeType":"VariableDeclaration","scope":31266,"src":"7268:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31245,"name":"address","nodeType":"ElementaryTypeName","src":"7268:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31248,"mutability":"mutable","name":"amount","nameLocation":"7293:6:121","nodeType":"VariableDeclaration","scope":31266,"src":"7285:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31247,"name":"uint256","nodeType":"ElementaryTypeName","src":"7285:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7252:48:121"},"returnParameters":{"id":31250,"nodeType":"ParameterList","parameters":[],"src":"7318:0:121"},"scope":31300,"src":"7235:173:121","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":31276,"nodeType":"Block","src":"7563:26:121","statements":[{"expression":{"id":31274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31272,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30867,"src":"7569:5:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31273,"name":"newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31269,"src":"7577:7:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"7569:15:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":31275,"nodeType":"ExpressionStatement","src":"7569:15:121"}]},"documentation":{"id":31267,"nodeType":"StructuredDocumentation","src":"7412:98:121","text":" @notice Update the name of the token\n @param newName The new name for the token"},"id":31277,"implemented":true,"kind":"function","modifiers":[],"name":"_setName","nameLocation":"7522:8:121","nodeType":"FunctionDefinition","parameters":{"id":31270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31269,"mutability":"mutable","name":"newName","nameLocation":"7545:7:121","nodeType":"VariableDeclaration","scope":31277,"src":"7531:21:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":31268,"name":"string","nodeType":"ElementaryTypeName","src":"7531:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7530:23:121"},"returnParameters":{"id":31271,"nodeType":"ParameterList","parameters":[],"src":"7563:0:121"},"scope":31300,"src":"7513:76:121","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":31287,"nodeType":"Block","src":"7755:30:121","statements":[{"expression":{"id":31285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31283,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30869,"src":"7761:7:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31284,"name":"newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31280,"src":"7771:9:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"7761:19:121","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":31286,"nodeType":"ExpressionStatement","src":"7761:19:121"}]},"documentation":{"id":31278,"nodeType":"StructuredDocumentation","src":"7593:105:121","text":" @notice Update the symbol for the token\n @param newSymbol The new symbol for the token"},"id":31288,"implemented":true,"kind":"function","modifiers":[],"name":"_setSymbol","nameLocation":"7710:10:121","nodeType":"FunctionDefinition","parameters":{"id":31281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31280,"mutability":"mutable","name":"newSymbol","nameLocation":"7735:9:121","nodeType":"VariableDeclaration","scope":31288,"src":"7721:23:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":31279,"name":"string","nodeType":"ElementaryTypeName","src":"7721:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7720:25:121"},"returnParameters":{"id":31282,"nodeType":"ParameterList","parameters":[],"src":"7755:0:121"},"scope":31300,"src":"7701:84:121","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":31298,"nodeType":"Block","src":"7973:34:121","statements":[{"expression":{"id":31296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31294,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30871,"src":"7979:9:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31295,"name":"newDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31291,"src":"7991:11:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7979:23:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31297,"nodeType":"ExpressionStatement","src":"7979:23:121"}]},"documentation":{"id":31289,"nodeType":"StructuredDocumentation","src":"7789:131:121","text":" @notice Update the number of decimals for the token\n @param newDecimals The new number of decimals for the token"},"id":31299,"implemented":true,"kind":"function","modifiers":[],"name":"_setDecimals","nameLocation":"7932:12:121","nodeType":"FunctionDefinition","parameters":{"id":31292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31291,"mutability":"mutable","name":"newDecimals","nameLocation":"7951:11:121","nodeType":"VariableDeclaration","scope":31299,"src":"7945:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31290,"name":"uint8","nodeType":"ElementaryTypeName","src":"7945:5:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"7944:19:121"},"returnParameters":{"id":31293,"nodeType":"ParameterList","parameters":[],"src":"7973:0:121"},"scope":31300,"src":"7923:84:121","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":31301,"src":"968:7041:121","usedErrors":[]}],"src":"37:7973:121"},"id":121},"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol","exportedSymbols":{"IAaveIncentivesController":[4000],"IPool":[5073],"IncentivizedERC20":[31300],"MintableIncentivizedERC20":[31450]},"id":31451,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":31302,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:122"},{"absolutePath":"contracts/interfaces/IAaveIncentivesController.sol","file":"../../../interfaces/IAaveIncentivesController.sol","id":31304,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31451,"sourceUnit":4001,"src":"63:92:122","symbolAliases":[{"foreign":{"id":31303,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:25:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../../interfaces/IPool.sol","id":31306,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31451,"sourceUnit":5074,"src":"156:52:122","symbolAliases":[{"foreign":{"id":31305,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"164:5:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"./IncentivizedERC20.sol","id":31308,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31451,"sourceUnit":31301,"src":"209:58:122","symbolAliases":[{"foreign":{"id":31307,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"217:17:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":31310,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":31300,"src":"444:17:122"},"id":31311,"nodeType":"InheritanceSpecifier","src":"444:17:122"}],"canonicalName":"MintableIncentivizedERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":31309,"nodeType":"StructuredDocumentation","src":"269:127:122","text":" @title MintableIncentivizedERC20\n @author Aave\n @notice Implements mint and burn functions for IncentivizedERC20"},"fullyImplemented":true,"id":31450,"linearizedBaseContracts":[31450,31300,1464,1442,748],"name":"MintableIncentivizedERC20","nameLocation":"415:25:122","nodeType":"ContractDefinition","nodes":[{"body":{"id":31330,"nodeType":"Block","src":"847:37:122","statements":[]},"documentation":{"id":31312,"nodeType":"StructuredDocumentation","src":"466:228:122","text":" @dev Constructor.\n @param pool The reference to the main Pool contract\n @param name The name of the token\n @param symbol The symbol of the token\n @param decimals The number of decimals of the token"},"id":31331,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":31324,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31315,"src":"817:4:122","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"id":31325,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31317,"src":"823:4:122","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":31326,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31319,"src":"829:6:122","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":31327,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31321,"src":"837:8:122","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":31328,"kind":"baseConstructorSpecifier","modifierName":{"id":31323,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":31300,"src":"799:17:122"},"nodeType":"ModifierInvocation","src":"799:47:122"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":31322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31315,"mutability":"mutable","name":"pool","nameLocation":"720:4:122","nodeType":"VariableDeclaration","scope":31331,"src":"714:10:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":31314,"nodeType":"UserDefinedTypeName","pathNode":{"id":31313,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"714:5:122"},"referencedDeclaration":5073,"src":"714:5:122","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":31317,"mutability":"mutable","name":"name","nameLocation":"744:4:122","nodeType":"VariableDeclaration","scope":31331,"src":"730:18:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":31316,"name":"string","nodeType":"ElementaryTypeName","src":"730:6:122","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":31319,"mutability":"mutable","name":"symbol","nameLocation":"768:6:122","nodeType":"VariableDeclaration","scope":31331,"src":"754:20:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":31318,"name":"string","nodeType":"ElementaryTypeName","src":"754:6:122","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":31321,"mutability":"mutable","name":"decimals","nameLocation":"786:8:122","nodeType":"VariableDeclaration","scope":31331,"src":"780:14:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31320,"name":"uint8","nodeType":"ElementaryTypeName","src":"780:5:122","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"708:90:122"},"returnParameters":{"id":31329,"nodeType":"ParameterList","parameters":[],"src":"847:0:122"},"scope":31450,"src":"697:187:122","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":31389,"nodeType":"Block","src":"1134:454:122","statements":[{"assignments":[31340],"declarations":[{"constant":false,"id":31340,"mutability":"mutable","name":"oldTotalSupply","nameLocation":"1148:14:122","nodeType":"VariableDeclaration","scope":31389,"src":"1140:22:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31339,"name":"uint256","nodeType":"ElementaryTypeName","src":"1140:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31342,"initialValue":{"id":31341,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"1165:12:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1140:37:122"},{"expression":{"id":31347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31343,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"1183:12:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31344,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31340,"src":"1198:14:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31345,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31336,"src":"1215:6:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1198:23:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1183:38:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31348,"nodeType":"ExpressionStatement","src":"1183:38:122"},{"assignments":[31350],"declarations":[{"constant":false,"id":31350,"mutability":"mutable","name":"oldAccountBalance","nameLocation":"1236:17:122","nodeType":"VariableDeclaration","scope":31389,"src":"1228:25:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31349,"name":"uint128","nodeType":"ElementaryTypeName","src":"1228:7:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":31355,"initialValue":{"expression":{"baseExpression":{"id":31351,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"1256:10:122","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31353,"indexExpression":{"id":31352,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31334,"src":"1267:7:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1256:19:122","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"1256:27:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1228:55:122"},{"expression":{"id":31363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31356,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"1289:10:122","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31358,"indexExpression":{"id":31357,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31334,"src":"1300:7:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1289:19:122","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"1289:27:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":31362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31360,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31350,"src":"1319:17:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31361,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31336,"src":"1339:6:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1319:26:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1289:56:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":31364,"nodeType":"ExpressionStatement","src":"1289:56:122"},{"assignments":[31367],"declarations":[{"constant":false,"id":31367,"mutability":"mutable","name":"incentivesControllerLocal","nameLocation":"1378:25:122","nodeType":"VariableDeclaration","scope":31389,"src":"1352:51:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":31366,"nodeType":"UserDefinedTypeName","pathNode":{"id":31365,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"1352:25:122"},"referencedDeclaration":4000,"src":"1352:25:122","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"id":31369,"initialValue":{"id":31368,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"1406:21:122","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"nodeType":"VariableDeclarationStatement","src":"1352:75:122"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31372,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31367,"src":"1445:25:122","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}],"id":31371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1437:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31370,"name":"address","nodeType":"ElementaryTypeName","src":"1437:7:122","typeDescriptions":{}}},"id":31373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1437:34:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":31376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1483: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":31375,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1475:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31374,"name":"address","nodeType":"ElementaryTypeName","src":"1475:7:122","typeDescriptions":{}}},"id":31377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1475:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1437:48:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31388,"nodeType":"IfStatement","src":"1433:151:122","trueBody":{"id":31387,"nodeType":"Block","src":"1487:97:122","statements":[{"expression":{"arguments":[{"id":31382,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31334,"src":"1534:7:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31383,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31340,"src":"1543:14:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31384,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31350,"src":"1559:17:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31379,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31367,"src":"1495:25:122","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":31381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3999,"src":"1495:38:122","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":31385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1495:82:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31386,"nodeType":"ExpressionStatement","src":"1495:82:122"}]}}]},"documentation":{"id":31332,"nodeType":"StructuredDocumentation","src":"888:178:122","text":" @notice Mints tokens to an account and apply incentives if defined\n @param account The address receiving tokens\n @param amount The amount of tokens to mint"},"id":31390,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"1078:5:122","nodeType":"FunctionDefinition","parameters":{"id":31337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31334,"mutability":"mutable","name":"account","nameLocation":"1092:7:122","nodeType":"VariableDeclaration","scope":31390,"src":"1084:15:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31333,"name":"address","nodeType":"ElementaryTypeName","src":"1084:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31336,"mutability":"mutable","name":"amount","nameLocation":"1109:6:122","nodeType":"VariableDeclaration","scope":31390,"src":"1101:14:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31335,"name":"uint128","nodeType":"ElementaryTypeName","src":"1101:7:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1083:33:122"},"returnParameters":{"id":31338,"nodeType":"ParameterList","parameters":[],"src":"1134:0:122"},"scope":31450,"src":"1069:519:122","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":31448,"nodeType":"Block","src":"1846:455:122","statements":[{"assignments":[31399],"declarations":[{"constant":false,"id":31399,"mutability":"mutable","name":"oldTotalSupply","nameLocation":"1860:14:122","nodeType":"VariableDeclaration","scope":31448,"src":"1852:22:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31398,"name":"uint256","nodeType":"ElementaryTypeName","src":"1852:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31401,"initialValue":{"id":31400,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"1877:12:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1852:37:122"},{"expression":{"id":31406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31402,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30865,"src":"1895:12:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31403,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31399,"src":"1910:14:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31404,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31395,"src":"1927:6:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1910:23:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1895:38:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31407,"nodeType":"ExpressionStatement","src":"1895:38:122"},{"assignments":[31409],"declarations":[{"constant":false,"id":31409,"mutability":"mutable","name":"oldAccountBalance","nameLocation":"1948:17:122","nodeType":"VariableDeclaration","scope":31448,"src":"1940:25:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31408,"name":"uint128","nodeType":"ElementaryTypeName","src":"1940:7:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":31414,"initialValue":{"expression":{"baseExpression":{"id":31410,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"1968:10:122","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31412,"indexExpression":{"id":31411,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31393,"src":"1979:7:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1968:19:122","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"1968:27:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1940:55:122"},{"expression":{"id":31422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31415,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"2001:10:122","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31417,"indexExpression":{"id":31416,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31393,"src":"2012:7:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2001:19:122","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":30849,"src":"2001:27:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":31421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31419,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31409,"src":"2031:17:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31420,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31395,"src":"2051:6:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2031:26:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2001:56:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":31423,"nodeType":"ExpressionStatement","src":"2001:56:122"},{"assignments":[31426],"declarations":[{"constant":false,"id":31426,"mutability":"mutable","name":"incentivesControllerLocal","nameLocation":"2090:25:122","nodeType":"VariableDeclaration","scope":31448,"src":"2064:51:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"},"typeName":{"id":31425,"nodeType":"UserDefinedTypeName","pathNode":{"id":31424,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"2064:25:122"},"referencedDeclaration":4000,"src":"2064:25:122","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"id":31428,"initialValue":{"id":31427,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"2118:21:122","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"nodeType":"VariableDeclarationStatement","src":"2064:75:122"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31431,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31426,"src":"2158:25:122","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}],"id":31430,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2150:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31429,"name":"address","nodeType":"ElementaryTypeName","src":"2150:7:122","typeDescriptions":{}}},"id":31432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2150:34:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":31435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2196: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":31434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2188:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31433,"name":"address","nodeType":"ElementaryTypeName","src":"2188:7:122","typeDescriptions":{}}},"id":31436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2188:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2150:48:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31447,"nodeType":"IfStatement","src":"2146:151:122","trueBody":{"id":31446,"nodeType":"Block","src":"2200:97:122","statements":[{"expression":{"arguments":[{"id":31441,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31393,"src":"2247:7:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31442,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31399,"src":"2256:14:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31443,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31409,"src":"2272:17:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31438,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31426,"src":"2208:25:122","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$4000","typeString":"contract IAaveIncentivesController"}},"id":31440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3999,"src":"2208:38:122","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":31444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2208:82:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31445,"nodeType":"ExpressionStatement","src":"2208:82:122"}]}}]},"documentation":{"id":31391,"nodeType":"StructuredDocumentation","src":"1592:186:122","text":" @notice Burns tokens from an account and apply incentives if defined\n @param account The account whose tokens are burnt\n @param amount The amount of tokens to burn"},"id":31449,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"1790:5:122","nodeType":"FunctionDefinition","parameters":{"id":31396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31393,"mutability":"mutable","name":"account","nameLocation":"1804:7:122","nodeType":"VariableDeclaration","scope":31449,"src":"1796:15:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31392,"name":"address","nodeType":"ElementaryTypeName","src":"1796:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31395,"mutability":"mutable","name":"amount","nameLocation":"1821:6:122","nodeType":"VariableDeclaration","scope":31449,"src":"1813:14:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":31394,"name":"uint128","nodeType":"ElementaryTypeName","src":"1813:7:122","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1795:33:122"},"returnParameters":{"id":31397,"nodeType":"ParameterList","parameters":[],"src":"1846:0:122"},"scope":31450,"src":"1781:520:122","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":31451,"src":"397:1906:122","usedErrors":[]}],"src":"37:2267:122"},"id":122},"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol":{"ast":{"absolutePath":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol","exportedSymbols":{"Errors":[14819],"IPool":[5073],"IScaledBalanceToken":[6188],"MintableIncentivizedERC20":[31450],"SafeCast":[1966],"ScaledBalanceTokenBase":[31917],"WadRayMath":[23813]},"id":31918,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":31452,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:123"},{"absolutePath":"contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":31454,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31918,"sourceUnit":1967,"src":"63:83:123","symbolAliases":[{"foreign":{"id":31453,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:8:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/helpers/Errors.sol","file":"../../libraries/helpers/Errors.sol","id":31456,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31918,"sourceUnit":14820,"src":"147:58:123","symbolAliases":[{"foreign":{"id":31455,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"155:6:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/libraries/math/WadRayMath.sol","file":"../../libraries/math/WadRayMath.sol","id":31458,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31918,"sourceUnit":23814,"src":"206:63:123","symbolAliases":[{"foreign":{"id":31457,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"214:10:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IPool.sol","file":"../../../interfaces/IPool.sol","id":31460,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31918,"sourceUnit":5074,"src":"270:52:123","symbolAliases":[{"foreign":{"id":31459,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"278:5:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IScaledBalanceToken.sol","file":"../../../interfaces/IScaledBalanceToken.sol","id":31462,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31918,"sourceUnit":6189,"src":"323:80:123","symbolAliases":[{"foreign":{"id":31461,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"331:19:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol","file":"./MintableIncentivizedERC20.sol","id":31464,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31918,"sourceUnit":31451,"src":"404:74:123","symbolAliases":[{"foreign":{"id":31463,"name":"MintableIncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"412:25:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":31466,"name":"MintableIncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":31450,"src":"643:25:123"},"id":31467,"nodeType":"InheritanceSpecifier","src":"643:25:123"},{"baseName":{"id":31468,"name":"IScaledBalanceToken","nodeType":"IdentifierPath","referencedDeclaration":6188,"src":"670:19:123"},"id":31469,"nodeType":"InheritanceSpecifier","src":"670:19:123"}],"canonicalName":"ScaledBalanceTokenBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":31465,"nodeType":"StructuredDocumentation","src":"480:118:123","text":" @title ScaledBalanceTokenBase\n @author Aave\n @notice Basic ERC20 implementation of scaled balance token"},"fullyImplemented":true,"id":31917,"linearizedBaseContracts":[31917,6188,31450,31300,1464,1442,748],"name":"ScaledBalanceTokenBase","nameLocation":"617:22:123","nodeType":"ContractDefinition","nodes":[{"id":31472,"libraryName":{"id":31470,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":23813,"src":"700:10:123"},"nodeType":"UsingForDirective","src":"694:29:123","typeName":{"id":31471,"name":"uint256","nodeType":"ElementaryTypeName","src":"715:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":31475,"libraryName":{"id":31473,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"732:8:123"},"nodeType":"UsingForDirective","src":"726:27:123","typeName":{"id":31474,"name":"uint256","nodeType":"ElementaryTypeName","src":"745:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":31494,"nodeType":"Block","src":"1146:37:123","statements":[]},"documentation":{"id":31476,"nodeType":"StructuredDocumentation","src":"757:228:123","text":" @dev Constructor.\n @param pool The reference to the main Pool contract\n @param name The name of the token\n @param symbol The symbol of the token\n @param decimals The number of decimals of the token"},"id":31495,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":31488,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31479,"src":"1116:4:123","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},{"id":31489,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31481,"src":"1122:4:123","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":31490,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31483,"src":"1128:6:123","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":31491,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31485,"src":"1136:8:123","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":31492,"kind":"baseConstructorSpecifier","modifierName":{"id":31487,"name":"MintableIncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":31450,"src":"1090:25:123"},"nodeType":"ModifierInvocation","src":"1090:55:123"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":31486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31479,"mutability":"mutable","name":"pool","nameLocation":"1011:4:123","nodeType":"VariableDeclaration","scope":31495,"src":"1005:10:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"},"typeName":{"id":31478,"nodeType":"UserDefinedTypeName","pathNode":{"id":31477,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":5073,"src":"1005:5:123"},"referencedDeclaration":5073,"src":"1005:5:123","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$5073","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":31481,"mutability":"mutable","name":"name","nameLocation":"1035:4:123","nodeType":"VariableDeclaration","scope":31495,"src":"1021:18:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":31480,"name":"string","nodeType":"ElementaryTypeName","src":"1021:6:123","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":31483,"mutability":"mutable","name":"symbol","nameLocation":"1059:6:123","nodeType":"VariableDeclaration","scope":31495,"src":"1045:20:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":31482,"name":"string","nodeType":"ElementaryTypeName","src":"1045:6:123","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":31485,"mutability":"mutable","name":"decimals","nameLocation":"1077:8:123","nodeType":"VariableDeclaration","scope":31495,"src":"1071:14:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31484,"name":"uint8","nodeType":"ElementaryTypeName","src":"1071:5:123","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"999:90:123"},"returnParameters":{"id":31493,"nodeType":"ParameterList","parameters":[],"src":"1146:0:123"},"scope":31917,"src":"988:195:123","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[6163],"body":{"id":31509,"nodeType":"Block","src":"1305:39:123","statements":[{"expression":{"arguments":[{"id":31506,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31498,"src":"1334:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31504,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1318:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"1318:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":31507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1318:21:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":31503,"id":31508,"nodeType":"Return","src":"1311:28:123"}]},"documentation":{"id":31496,"nodeType":"StructuredDocumentation","src":"1187:35:123","text":"@inheritdoc IScaledBalanceToken"},"functionSelector":"1da24f3e","id":31510,"implemented":true,"kind":"function","modifiers":[],"name":"scaledBalanceOf","nameLocation":"1234:15:123","nodeType":"FunctionDefinition","overrides":{"id":31500,"nodeType":"OverrideSpecifier","overrides":[],"src":"1278:8:123"},"parameters":{"id":31499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31498,"mutability":"mutable","name":"user","nameLocation":"1258:4:123","nodeType":"VariableDeclaration","scope":31510,"src":"1250:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31497,"name":"address","nodeType":"ElementaryTypeName","src":"1250:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1249:14:123"},"returnParameters":{"id":31503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31502,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31510,"src":"1296:7:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31501,"name":"uint256","nodeType":"ElementaryTypeName","src":"1296:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1295:9:123"},"scope":31917,"src":"1225:119:123","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6173],"body":{"id":31530,"nodeType":"Block","src":"1497:62:123","statements":[{"expression":{"components":[{"arguments":[{"id":31523,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31513,"src":"1527:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31521,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1511:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"1511:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":31524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1511:21:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31525,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1534:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30956,"src":"1534:17:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":31527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1534:19:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31528,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1510:44:123","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":31520,"id":31529,"nodeType":"Return","src":"1503:51:123"}]},"documentation":{"id":31511,"nodeType":"StructuredDocumentation","src":"1348:35:123","text":"@inheritdoc IScaledBalanceToken"},"functionSelector":"0afbcdc9","id":31531,"implemented":true,"kind":"function","modifiers":[],"name":"getScaledUserBalanceAndSupply","nameLocation":"1395:29:123","nodeType":"FunctionDefinition","overrides":{"id":31515,"nodeType":"OverrideSpecifier","overrides":[],"src":"1461:8:123"},"parameters":{"id":31514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31513,"mutability":"mutable","name":"user","nameLocation":"1438:4:123","nodeType":"VariableDeclaration","scope":31531,"src":"1430:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31512,"name":"address","nodeType":"ElementaryTypeName","src":"1430:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1424:22:123"},"returnParameters":{"id":31520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31517,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31531,"src":"1479:7:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31516,"name":"uint256","nodeType":"ElementaryTypeName","src":"1479:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31519,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31531,"src":"1488:7:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31518,"name":"uint256","nodeType":"ElementaryTypeName","src":"1488:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1478:18:123"},"scope":31917,"src":"1386:173:123","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6179],"body":{"id":31542,"nodeType":"Block","src":"1677:37:123","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31538,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1690:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30956,"src":"1690:17:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":31540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1690:19:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":31537,"id":31541,"nodeType":"Return","src":"1683:26:123"}]},"documentation":{"id":31532,"nodeType":"StructuredDocumentation","src":"1563:35:123","text":"@inheritdoc IScaledBalanceToken"},"functionSelector":"b1bf962d","id":31543,"implemented":true,"kind":"function","modifiers":[],"name":"scaledTotalSupply","nameLocation":"1610:17:123","nodeType":"FunctionDefinition","overrides":{"id":31534,"nodeType":"OverrideSpecifier","overrides":[],"src":"1650:8:123"},"parameters":{"id":31533,"nodeType":"ParameterList","parameters":[],"src":"1627:2:123"},"returnParameters":{"id":31537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31543,"src":"1668:7:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31535,"name":"uint256","nodeType":"ElementaryTypeName","src":"1668:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1667:9:123"},"scope":31917,"src":"1601:113:123","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[6187],"body":{"id":31557,"nodeType":"Block","src":"1845:49:123","statements":[{"expression":{"expression":{"baseExpression":{"id":31552,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"1858:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31554,"indexExpression":{"id":31553,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"1869:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1858:16:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"1858:31:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":31551,"id":31556,"nodeType":"Return","src":"1851:38:123"}]},"documentation":{"id":31544,"nodeType":"StructuredDocumentation","src":"1718:35:123","text":"@inheritdoc IScaledBalanceToken"},"functionSelector":"e0753986","id":31558,"implemented":true,"kind":"function","modifiers":[],"name":"getPreviousIndex","nameLocation":"1765:16:123","nodeType":"FunctionDefinition","overrides":{"id":31548,"nodeType":"OverrideSpecifier","overrides":[],"src":"1818:8:123"},"parameters":{"id":31547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31546,"mutability":"mutable","name":"user","nameLocation":"1790:4:123","nodeType":"VariableDeclaration","scope":31558,"src":"1782:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31545,"name":"address","nodeType":"ElementaryTypeName","src":"1782:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1781:14:123"},"returnParameters":{"id":31551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31550,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31558,"src":"1836:7:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31549,"name":"uint256","nodeType":"ElementaryTypeName","src":"1836:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1835:9:123"},"scope":31917,"src":"1756:138:123","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":31653,"nodeType":"Block","src":"2427:631:123","statements":[{"assignments":[31573],"declarations":[{"constant":false,"id":31573,"mutability":"mutable","name":"amountScaled","nameLocation":"2441:12:123","nodeType":"VariableDeclaration","scope":31653,"src":"2433:20:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31572,"name":"uint256","nodeType":"ElementaryTypeName","src":"2433:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31578,"initialValue":{"arguments":[{"id":31576,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31567,"src":"2470:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31574,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31565,"src":"2456:6:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"2456:13:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2456:20:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2433:43:123"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31580,"name":"amountScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31573,"src":"2490:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":31581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2506:1:123","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2490:17:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":31583,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"2509:6:123","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":31584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_MINT_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":14620,"src":"2509:26:123","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":31579,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2482:7:123","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2482:54:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31586,"nodeType":"ExpressionStatement","src":"2482:54:123"},{"assignments":[31588],"declarations":[{"constant":false,"id":31588,"mutability":"mutable","name":"scaledBalance","nameLocation":"2551:13:123","nodeType":"VariableDeclaration","scope":31653,"src":"2543:21:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31587,"name":"uint256","nodeType":"ElementaryTypeName","src":"2543:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31593,"initialValue":{"arguments":[{"id":31591,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31563,"src":"2583:10:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31589,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2567:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"2567:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":31592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2567:27:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2543:51:123"},{"assignments":[31595],"declarations":[{"constant":false,"id":31595,"mutability":"mutable","name":"balanceIncrease","nameLocation":"2608:15:123","nodeType":"VariableDeclaration","scope":31653,"src":"2600:23:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31594,"name":"uint256","nodeType":"ElementaryTypeName","src":"2600:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31608,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31598,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31567,"src":"2647:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31596,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31588,"src":"2626:13:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"2626:20:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2626:27:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"baseExpression":{"id":31602,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"2683:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31604,"indexExpression":{"id":31603,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31563,"src":"2694:10:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2683:22:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31605,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"2683:37:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31600,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31588,"src":"2662:13:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"2662:20:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2662:59:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2626:95:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2600:121:123"},{"expression":{"id":31616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31609,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"2728:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31611,"indexExpression":{"id":31610,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31563,"src":"2739:10:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2728:22:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31612,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"2728:37:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31613,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31567,"src":"2768:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"2768:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2768:17:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2728:57:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":31617,"nodeType":"ExpressionStatement","src":"2728:57:123"},{"expression":{"arguments":[{"id":31619,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31563,"src":"2798:10:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31620,"name":"amountScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31573,"src":"2810:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"2810:22:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2810:24:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":31618,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31390,"src":"2792:5:123","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":31623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2792:43:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31624,"nodeType":"ExpressionStatement","src":"2792:43:123"},{"assignments":[31626],"declarations":[{"constant":false,"id":31626,"mutability":"mutable","name":"amountToMint","nameLocation":"2850:12:123","nodeType":"VariableDeclaration","scope":31653,"src":"2842:20:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31625,"name":"uint256","nodeType":"ElementaryTypeName","src":"2842:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31630,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31627,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31565,"src":"2865:6:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31628,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31595,"src":"2874:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2865:24:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2842:47:123"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":31634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2917:1:123","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":31633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2909:7:123","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31632,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:123","typeDescriptions":{}}},"id":31635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2909:10:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31636,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31563,"src":"2921:10:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31637,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31626,"src":"2933:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31631,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"2900:8:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2900:46:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31639,"nodeType":"EmitStatement","src":"2895:51:123"},{"eventCall":{"arguments":[{"id":31641,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31561,"src":"2962:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31642,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31563,"src":"2970:10:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31643,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31626,"src":"2982:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31644,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31595,"src":"2996:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31645,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31567,"src":"3013:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"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"}],"id":31640,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"2957:4:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":31646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2957:62:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31647,"nodeType":"EmitStatement","src":"2952:67:123"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31648,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31588,"src":"3034:13:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":31649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3051:1:123","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3034:18:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":31651,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3033:20:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":31571,"id":31652,"nodeType":"Return","src":"3026:27:123"}]},"documentation":{"id":31559,"nodeType":"StructuredDocumentation","src":"1898:394:123","text":" @notice Implements the basic logic to mint a scaled balance token.\n @param caller The address performing the mint\n @param onBehalfOf The address of the user that will receive the scaled tokens\n @param amount The amount of tokens getting minted\n @param index The next liquidity index of the reserve\n @return `true` if the the previous balance of the user was 0"},"id":31654,"implemented":true,"kind":"function","modifiers":[],"name":"_mintScaled","nameLocation":"2304:11:123","nodeType":"FunctionDefinition","parameters":{"id":31568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31561,"mutability":"mutable","name":"caller","nameLocation":"2329:6:123","nodeType":"VariableDeclaration","scope":31654,"src":"2321:14:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31560,"name":"address","nodeType":"ElementaryTypeName","src":"2321:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31563,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2349:10:123","nodeType":"VariableDeclaration","scope":31654,"src":"2341:18:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31562,"name":"address","nodeType":"ElementaryTypeName","src":"2341:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31565,"mutability":"mutable","name":"amount","nameLocation":"2373:6:123","nodeType":"VariableDeclaration","scope":31654,"src":"2365:14:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31564,"name":"uint256","nodeType":"ElementaryTypeName","src":"2365:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31567,"mutability":"mutable","name":"index","nameLocation":"2393:5:123","nodeType":"VariableDeclaration","scope":31654,"src":"2385:13:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31566,"name":"uint256","nodeType":"ElementaryTypeName","src":"2385:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2315:87:123"},"returnParameters":{"id":31571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31570,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31654,"src":"2421:4:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31569,"name":"bool","nodeType":"ElementaryTypeName","src":"2421:4:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2420:6:123"},"scope":31917,"src":"2295:763:123","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":31771,"nodeType":"Block","src":"3603:797:123","statements":[{"assignments":[31667],"declarations":[{"constant":false,"id":31667,"mutability":"mutable","name":"amountScaled","nameLocation":"3617:12:123","nodeType":"VariableDeclaration","scope":31771,"src":"3609:20:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31666,"name":"uint256","nodeType":"ElementaryTypeName","src":"3609:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31672,"initialValue":{"arguments":[{"id":31670,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"3646:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31668,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31661,"src":"3632:6:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"3632:13:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3632:20:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3609:43:123"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31674,"name":"amountScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31667,"src":"3666:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":31675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3682:1:123","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3666:17:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":31677,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14819,"src":"3685:6:123","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$14819_$","typeString":"type(library Errors)"}},"id":31678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_BURN_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":14623,"src":"3685:26:123","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":31673,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3658:7:123","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3658:54:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31680,"nodeType":"ExpressionStatement","src":"3658:54:123"},{"assignments":[31682],"declarations":[{"constant":false,"id":31682,"mutability":"mutable","name":"scaledBalance","nameLocation":"3727:13:123","nodeType":"VariableDeclaration","scope":31771,"src":"3719:21:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31681,"name":"uint256","nodeType":"ElementaryTypeName","src":"3719:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31687,"initialValue":{"arguments":[{"id":31685,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"3759:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31683,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3743:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"3743:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":31686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3743:21:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3719:45:123"},{"assignments":[31689],"declarations":[{"constant":false,"id":31689,"mutability":"mutable","name":"balanceIncrease","nameLocation":"3778:15:123","nodeType":"VariableDeclaration","scope":31771,"src":"3770:23:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31688,"name":"uint256","nodeType":"ElementaryTypeName","src":"3770:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31702,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31692,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"3817:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31690,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31682,"src":"3796:13:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"3796:20:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3796:27:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"baseExpression":{"id":31696,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"3853:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31698,"indexExpression":{"id":31697,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"3864:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3853:16:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"3853:31:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31694,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31682,"src":"3832:13:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"3832:20:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3832:53:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3796:89:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3770:115:123"},{"expression":{"id":31710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31703,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"3892:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31705,"indexExpression":{"id":31704,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"3903:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3892:16:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"3892:31:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31707,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"3926:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"3926:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3926:17:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3892:51:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":31711,"nodeType":"ExpressionStatement","src":"3892:51:123"},{"expression":{"arguments":[{"id":31713,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"3956:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31714,"name":"amountScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31667,"src":"3962:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"3962:22:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3962:24:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":31712,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31449,"src":"3950:5:123","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":31717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3950:37:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31718,"nodeType":"ExpressionStatement","src":"3950:37:123"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31719,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31689,"src":"3998:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":31720,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31661,"src":"4016:6:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3998:24:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":31769,"nodeType":"Block","src":"4212:184:123","statements":[{"assignments":[31747],"declarations":[{"constant":false,"id":31747,"mutability":"mutable","name":"amountToBurn","nameLocation":"4228:12:123","nodeType":"VariableDeclaration","scope":31769,"src":"4220:20:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31746,"name":"uint256","nodeType":"ElementaryTypeName","src":"4220:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31751,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31748,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31661,"src":"4243:6:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31749,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31689,"src":"4252:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4243:24:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4220:47:123"},{"eventCall":{"arguments":[{"id":31753,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"4289:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":31756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4303:1:123","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":31755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4295:7:123","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31754,"name":"address","nodeType":"ElementaryTypeName","src":"4295:7:123","typeDescriptions":{}}},"id":31757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4295:10:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31758,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31747,"src":"4307:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31752,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"4280:8:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4280:40:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31760,"nodeType":"EmitStatement","src":"4275:45:123"},{"eventCall":{"arguments":[{"id":31762,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"4338:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31763,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31659,"src":"4344:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31764,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31747,"src":"4352:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31765,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31689,"src":"4366:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31766,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"4383:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"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"}],"id":31761,"name":"Burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"4333:4:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":31767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4333:56:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31768,"nodeType":"EmitStatement","src":"4328:61:123"}]},"id":31770,"nodeType":"IfStatement","src":"3994:402:123","trueBody":{"id":31745,"nodeType":"Block","src":"4024:182:123","statements":[{"assignments":[31723],"declarations":[{"constant":false,"id":31723,"mutability":"mutable","name":"amountToMint","nameLocation":"4040:12:123","nodeType":"VariableDeclaration","scope":31745,"src":"4032:20:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31722,"name":"uint256","nodeType":"ElementaryTypeName","src":"4032:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31727,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31724,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31689,"src":"4055:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31725,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31661,"src":"4073:6:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4055:24:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4032:47:123"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":31731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4109:1:123","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":31730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4101:7:123","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31729,"name":"address","nodeType":"ElementaryTypeName","src":"4101:7:123","typeDescriptions":{}}},"id":31732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4101:10:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31733,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"4113:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31734,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31723,"src":"4119:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31728,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"4092:8:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4092:40:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31736,"nodeType":"EmitStatement","src":"4087:45:123"},{"eventCall":{"arguments":[{"id":31738,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"4150:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31739,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31657,"src":"4156:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31740,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31723,"src":"4162:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31741,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31689,"src":"4176:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31742,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"4193:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"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"}],"id":31737,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"4145:4:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":31743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4145:54:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31744,"nodeType":"EmitStatement","src":"4140:59:123"}]}}]},"documentation":{"id":31655,"nodeType":"StructuredDocumentation","src":"3062:447:123","text":" @notice Implements the basic logic to burn a scaled balance token.\n @dev In some instances, a burn transaction will emit a mint event\n if the amount to burn is less than the interest that the user accrued\n @param user The user which debt is burnt\n @param target The address that will receive the underlying, if any\n @param amount The amount getting burned\n @param index The variable debt index of the reserve"},"id":31772,"implemented":true,"kind":"function","modifiers":[],"name":"_burnScaled","nameLocation":"3521:11:123","nodeType":"FunctionDefinition","parameters":{"id":31664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31657,"mutability":"mutable","name":"user","nameLocation":"3541:4:123","nodeType":"VariableDeclaration","scope":31772,"src":"3533:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31656,"name":"address","nodeType":"ElementaryTypeName","src":"3533:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31659,"mutability":"mutable","name":"target","nameLocation":"3555:6:123","nodeType":"VariableDeclaration","scope":31772,"src":"3547:14:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31658,"name":"address","nodeType":"ElementaryTypeName","src":"3547:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31661,"mutability":"mutable","name":"amount","nameLocation":"3571:6:123","nodeType":"VariableDeclaration","scope":31772,"src":"3563:14:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31660,"name":"uint256","nodeType":"ElementaryTypeName","src":"3563:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31663,"mutability":"mutable","name":"index","nameLocation":"3587:5:123","nodeType":"VariableDeclaration","scope":31772,"src":"3579:13:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31662,"name":"uint256","nodeType":"ElementaryTypeName","src":"3579:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3532:61:123"},"returnParameters":{"id":31665,"nodeType":"ParameterList","parameters":[],"src":"3603:0:123"},"scope":31917,"src":"3512:888:123","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":31915,"nodeType":"Block","src":"4861:1109:123","statements":[{"assignments":[31785],"declarations":[{"constant":false,"id":31785,"mutability":"mutable","name":"senderScaledBalance","nameLocation":"4875:19:123","nodeType":"VariableDeclaration","scope":31915,"src":"4867:27:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31784,"name":"uint256","nodeType":"ElementaryTypeName","src":"4867:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31790,"initialValue":{"arguments":[{"id":31788,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31775,"src":"4913:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31786,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4897:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"4897:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":31789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4897:23:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4867:53:123"},{"assignments":[31792],"declarations":[{"constant":false,"id":31792,"mutability":"mutable","name":"senderBalanceIncrease","nameLocation":"4934:21:123","nodeType":"VariableDeclaration","scope":31915,"src":"4926:29:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31791,"name":"uint256","nodeType":"ElementaryTypeName","src":"4926:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31805,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31795,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31781,"src":"4985:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31793,"name":"senderScaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31785,"src":"4958:19:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"4958:26:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4958:33:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"baseExpression":{"id":31799,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"5027:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31801,"indexExpression":{"id":31800,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31775,"src":"5038:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5027:18:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31802,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"5027:33:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31797,"name":"senderScaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31785,"src":"5000:19:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"5000:26:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5000:61:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4958:103:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4926:135:123"},{"assignments":[31807],"declarations":[{"constant":false,"id":31807,"mutability":"mutable","name":"recipientScaledBalance","nameLocation":"5076:22:123","nodeType":"VariableDeclaration","scope":31915,"src":"5068:30:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31806,"name":"uint256","nodeType":"ElementaryTypeName","src":"5068:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31812,"initialValue":{"arguments":[{"id":31810,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31777,"src":"5117:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31808,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"5101:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":30971,"src":"5101:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":31811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5101:26:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5068:59:123"},{"assignments":[31814],"declarations":[{"constant":false,"id":31814,"mutability":"mutable","name":"recipientBalanceIncrease","nameLocation":"5141:24:123","nodeType":"VariableDeclaration","scope":31915,"src":"5133:32:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31813,"name":"uint256","nodeType":"ElementaryTypeName","src":"5133:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31827,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31817,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31781,"src":"5198:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31815,"name":"recipientScaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31807,"src":"5168:22:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"5168:29:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5168:36:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"baseExpression":{"id":31821,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"5243:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31823,"indexExpression":{"id":31822,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31777,"src":"5254:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5243:21:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"5243:36:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31819,"name":"recipientScaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31807,"src":"5213:22:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":23780,"src":"5213:29:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5213:67:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5168:112:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5133:147:123"},{"expression":{"id":31835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31828,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"5287:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31830,"indexExpression":{"id":31829,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31775,"src":"5298:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5287:18:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"5287:33:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31832,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31781,"src":"5323:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5323:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5323:17:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5287:53:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":31836,"nodeType":"ExpressionStatement","src":"5287:53:123"},{"expression":{"id":31844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31837,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"5346:10:123","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$30852_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":31839,"indexExpression":{"id":31838,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31777,"src":"5357:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5346:21:123","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$30852_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":31840,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":30851,"src":"5346:36:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31841,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31781,"src":"5385:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5385:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5385:17:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5346:56:123","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":31845,"nodeType":"ExpressionStatement","src":"5346:56:123"},{"expression":{"arguments":[{"id":31849,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31775,"src":"5425:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31850,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31777,"src":"5433:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":31853,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31781,"src":"5458:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31851,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31779,"src":"5444:6:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":23792,"src":"5444:13:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5444:20:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5444:30:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":31856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5444:32:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":31846,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"5409:5:123","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$31917_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":31848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_transfer","nodeType":"MemberAccess","referencedDeclaration":31241,"src":"5409:15:123","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,address,uint128)"}},"id":31857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5409:68:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31858,"nodeType":"ExpressionStatement","src":"5409:68:123"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31859,"name":"senderBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31792,"src":"5488:21:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":31860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5512:1:123","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5488:25:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31881,"nodeType":"IfStatement","src":"5484:194:123","trueBody":{"id":31880,"nodeType":"Block","src":"5515:163:123","statements":[{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":31865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5545:1:123","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":31864,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5537:7:123","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31863,"name":"address","nodeType":"ElementaryTypeName","src":"5537:7:123","typeDescriptions":{}}},"id":31866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5537:10:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31867,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31775,"src":"5549:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31868,"name":"senderBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31792,"src":"5557:21:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31862,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"5528:8:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5528:51:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31870,"nodeType":"EmitStatement","src":"5523:56:123"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":31872,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5597:10:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5597:12:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":31874,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31775,"src":"5611:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31875,"name":"senderBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31792,"src":"5619:21:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31876,"name":"senderBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31792,"src":"5642:21:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31877,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31781,"src":"5665:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31871,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"5592:4:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":31878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5592:79:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31879,"nodeType":"EmitStatement","src":"5587:84:123"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":31888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31882,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31775,"src":"5688:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":31883,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31777,"src":"5698:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5688:19:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31885,"name":"recipientBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31814,"src":"5711:24:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":31886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5738:1:123","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5711:28:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5688:51:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31908,"nodeType":"IfStatement","src":"5684:235:123","trueBody":{"id":31907,"nodeType":"Block","src":"5741:178:123","statements":[{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":31892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5771:1:123","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":31891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5763:7:123","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31890,"name":"address","nodeType":"ElementaryTypeName","src":"5763:7:123","typeDescriptions":{}}},"id":31893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5763:10:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31894,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31777,"src":"5775:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31895,"name":"recipientBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31814,"src":"5786:24:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31889,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"5754:8:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5754:57:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31897,"nodeType":"EmitStatement","src":"5749:62:123"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":31899,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5829:10:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":31900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5829:12:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":31901,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31777,"src":"5843:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31902,"name":"recipientBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31814,"src":"5854:24:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31903,"name":"recipientBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31814,"src":"5880:24:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31904,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31781,"src":"5906:5:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31898,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"5824:4:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":31905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5824:88:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31906,"nodeType":"EmitStatement","src":"5819:93:123"}]}},{"eventCall":{"arguments":[{"id":31910,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31775,"src":"5939:6:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31911,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31777,"src":"5947:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31912,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31779,"src":"5958:6:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31909,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"5930:8:123","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":31913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5930:35:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31914,"nodeType":"EmitStatement","src":"5925:40:123"}]},"documentation":{"id":31773,"nodeType":"StructuredDocumentation","src":"4404:360:123","text":" @notice Implements the basic logic to transfer scaled balance tokens between two users\n @dev It emits a mint event with the interest accrued per user\n @param sender The source address\n @param recipient The destination address\n @param amount The amount getting transferred\n @param index The next liquidity index of the reserve"},"id":31916,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"4776:9:123","nodeType":"FunctionDefinition","parameters":{"id":31782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31775,"mutability":"mutable","name":"sender","nameLocation":"4794:6:123","nodeType":"VariableDeclaration","scope":31916,"src":"4786:14:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31774,"name":"address","nodeType":"ElementaryTypeName","src":"4786:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31777,"mutability":"mutable","name":"recipient","nameLocation":"4810:9:123","nodeType":"VariableDeclaration","scope":31916,"src":"4802:17:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31776,"name":"address","nodeType":"ElementaryTypeName","src":"4802:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31779,"mutability":"mutable","name":"amount","nameLocation":"4829:6:123","nodeType":"VariableDeclaration","scope":31916,"src":"4821:14:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31778,"name":"uint256","nodeType":"ElementaryTypeName","src":"4821:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31781,"mutability":"mutable","name":"index","nameLocation":"4845:5:123","nodeType":"VariableDeclaration","scope":31916,"src":"4837:13:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31780,"name":"uint256","nodeType":"ElementaryTypeName","src":"4837:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4785:66:123"},"returnParameters":{"id":31783,"nodeType":"ParameterList","parameters":[],"src":"4861:0:123"},"scope":31917,"src":"4767:1203:123","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":31918,"src":"599:5373:123","usedErrors":[]}],"src":"37:5936:123"},"id":123}},"contracts":{"contracts/dependencies/chainlink/AggregatorInterface.sol":{"AggregatorInterface":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"current","type":"int256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updatedAt","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"NewRound","type":"event"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getAnswer(uint256)":"b5ab58dc","getTimestamp(uint256)":"b633620c","latestAnswer()":"50d25bcd","latestRound()":"668a0f02","latestTimestamp()":"8205bf6a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"current\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"name\":\"AnswerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"}],\"name\":\"getAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"}],\"name\":\"getTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/chainlink/AggregatorInterface.sol\":\"AggregatorInterface\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/chainlink/AggregatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Chainlink Contracts v0.8\\npragma solidity ^0.8.0;\\n\\ninterface AggregatorInterface {\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n  event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\\n}\\n\",\"keccak256\":\"0x07df0744d1a393c574d7ee11b75a1690a82f3136a79c76b933724872298bf718\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol":{"GPv2SafeERC20":{"abi":[],"devdoc":{"author":"Gnosis Developers","details":"Gas-efficient version of Openzeppelin's SafeERC20 contract.","kind":"dev","methods":{},"title":"Gnosis Protocol v2 Safe ERC20 Transfer Library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202c390081c472f511f64855b0444e6a411199d21137e839636636940e01a317d664736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C CODECOPY STOP DUP2 0xC4 PUSH19 0xF511F64855B0444E6A411199D21137E8396366 CALLDATASIZE SWAP5 0xE ADD LOG3 OR 0xD6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"293:4431:1:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;293:4431:1;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202c390081c472f511f64855b0444e6a411199d21137e839636636940e01a317d664736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C CODECOPY STOP DUP2 0xC4 PUSH19 0xF511F64855B0444E6A411199D21137E8396366 CALLDATASIZE SWAP5 0xE ADD LOG3 OR 0xD6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"293:4431:1:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getLastTransferResult(contract IERC20)":"infinite","safeTransfer(contract IERC20,address,uint256)":"infinite","safeTransferFrom(contract IERC20,address,address,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Gnosis Developers\",\"details\":\"Gas-efficient version of Openzeppelin's SafeERC20 contract.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Gnosis Protocol v2 Safe ERC20 Transfer Library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":\"GPv2SafeERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/AccessControl.sol":{"AccessControl":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ``` bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ``` function foo() public {     require(hasRole(MY_ROLE, msg.sender));     ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it.","kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ``` bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ``` function foo() public {     require(hasRole(MY_ROLE, msg.sender));     ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it.\",\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/AccessControl.sol\":\"AccessControl\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './IAccessControl.sol';\\nimport './Context.sol';\\nimport './Strings.sol';\\nimport './ERC165.sol';\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n *     require(hasRole(MY_ROLE, msg.sender));\\n *     ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n  struct RoleData {\\n    mapping(address => bool) members;\\n    bytes32 adminRole;\\n  }\\n\\n  mapping(bytes32 => RoleData) private _roles;\\n\\n  bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n  /**\\n   * @dev Modifier that checks that an account has a specific role. Reverts\\n   * with a standardized message including the required role.\\n   *\\n   * The format of the revert reason is given by the following regular expression:\\n   *\\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n   *\\n   * _Available since v4.1._\\n   */\\n  modifier onlyRole(bytes32 role) {\\n    _checkRole(role, _msgSender());\\n    _;\\n  }\\n\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n  }\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) public view override returns (bool) {\\n    return _roles[role].members[account];\\n  }\\n\\n  /**\\n   * @dev Revert with a standard message if `account` is missing `role`.\\n   *\\n   * The format of the revert reason is given by the following regular expression:\\n   *\\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n   */\\n  function _checkRole(bytes32 role, address account) internal view {\\n    if (!hasRole(role, account)) {\\n      revert(\\n        string(\\n          abi.encodePacked(\\n            'AccessControl: account ',\\n            Strings.toHexString(uint160(account), 20),\\n            ' is missing role ',\\n            Strings.toHexString(uint256(role), 32)\\n          )\\n        )\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) public view override returns (bytes32) {\\n    return _roles[role].adminRole;\\n  }\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(\\n    bytes32 role,\\n    address account\\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\\n    _grantRole(role, account);\\n  }\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(\\n    bytes32 role,\\n    address account\\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\\n    _revokeRole(role, account);\\n  }\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) public virtual override {\\n    require(account == _msgSender(), 'AccessControl: can only renounce roles for self');\\n\\n    _revokeRole(role, account);\\n  }\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event. Note that unlike {grantRole}, this function doesn't perform any\\n   * checks on the calling account.\\n   *\\n   * [WARNING]\\n   * ====\\n   * This function should only be called from the constructor when setting\\n   * up the initial roles for the system.\\n   *\\n   * Using this function in any other way is effectively circumventing the admin\\n   * system imposed by {AccessControl}.\\n   * ====\\n   */\\n  function _setupRole(bytes32 role, address account) internal virtual {\\n    _grantRole(role, account);\\n  }\\n\\n  /**\\n   * @dev Sets `adminRole` as ``role``'s admin role.\\n   *\\n   * Emits a {RoleAdminChanged} event.\\n   */\\n  function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n    bytes32 previousAdminRole = getRoleAdmin(role);\\n    _roles[role].adminRole = adminRole;\\n    emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n  }\\n\\n  function _grantRole(bytes32 role, address account) private {\\n    if (!hasRole(role, account)) {\\n      _roles[role].members[account] = true;\\n      emit RoleGranted(role, account, _msgSender());\\n    }\\n  }\\n\\n  function _revokeRole(bytes32 role, address account) private {\\n    if (hasRole(role, account)) {\\n      _roles[role].members[account] = false;\\n      emit RoleRevoked(role, account, _msgSender());\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xee6ee05b311d9683fe6402b9c396d3767bb1c7517a8ac7fb270d6c09facefb36\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './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 *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IERC165).interfaceId;\\n  }\\n}\\n\",\"keccak256\":\"0x583726b0d457b859eb327ac9838dd3ee345e1956a47cd0a5cd0c0c3c17277eef\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\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\",\"keccak256\":\"0xbca9de297214bb9c30daefda5ecaedd0af2c3e8e0440403ad543fb33528c5ef8\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n  bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';\\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    // Inspired by OraclizeAPI's implementation - MIT licence\\n    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n    if (value == 0) {\\n      return '0';\\n    }\\n    uint256 temp = value;\\n    uint256 digits;\\n    while (temp != 0) {\\n      digits++;\\n      temp /= 10;\\n    }\\n    bytes memory buffer = new bytes(digits);\\n    while (value != 0) {\\n      digits -= 1;\\n      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n      value /= 10;\\n    }\\n    return string(buffer);\\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    if (value == 0) {\\n      return '0x00';\\n    }\\n    uint256 temp = value;\\n    uint256 length = 0;\\n    while (temp != 0) {\\n      length++;\\n      temp >>= 8;\\n    }\\n    return toHexString(value, length);\\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    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_SYMBOLS[value & 0xf];\\n      value >>= 4;\\n    }\\n    require(value == 0, 'Strings: hex length insufficient');\\n    return string(buffer);\\n  }\\n}\\n\",\"keccak256\":\"0xb2754a420cad582ee384ce1075833bc78411b4e27198019fe762066f7a72946a\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":143,"contract":"contracts/dependencies/openzeppelin/contracts/AccessControl.sol:AccessControl","label":"_roles","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_struct(RoleData)138_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(RoleData)138_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)138_storage"},"t_struct(RoleData)138_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":135,"contract":"contracts/dependencies/openzeppelin/contracts/AccessControl.sol:AccessControl","label":"members","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":137,"contract":"contracts/dependencies/openzeppelin/contracts/AccessControl.sol:AccessControl","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/Address.sol":{"Address":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b59ae906bc35e663d39c5a474a78a73a9660ba5a3f41cd6b90d1c7e148fcbe5664736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 SWAP11 0xE9 MOD 0xBC CALLDATALOAD 0xE6 PUSH4 0xD39C5A47 0x4A PUSH25 0xA73A9660BA5A3F41CD6B90D1C7E148FCBE5664736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"179:7201:3:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;179:7201:3;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b59ae906bc35e663d39c5a474a78a73a9660ba5a3f41cd6b90d1c7e148fcbe5664736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 SWAP11 0xE9 MOD 0xBC CALLDATALOAD 0xE6 PUSH4 0xD39C5A47 0x4A PUSH25 0xA73A9660BA5A3F41CD6B90D1C7E148FCBE5664736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"179:7201:3:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionDelegateCall(address,bytes memory)":"infinite","functionDelegateCall(address,bytes memory,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/Context.sol":{"Context":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/ERC165.sol":{"ERC165":{"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); } ``` Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.","kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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); } ``` Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './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 *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IERC165).interfaceId;\\n  }\\n}\\n\",\"keccak256\":\"0x583726b0d457b859eb327ac9838dd3ee345e1956a47cd0a5cd0c0c3c17277eef\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\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\",\"keccak256\":\"0xbca9de297214bb9c30daefda5ecaedd0af2c3e8e0440403ad543fb33528c5ef8\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/ERC20.sol":{"ERC20":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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 {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.","kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"constructor":{"details":"Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_828":{"entryPoint":null,"id":828,"parameterSlots":2,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":305,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory":{"entryPoint":488,"id":null,"parameterSlots":2,"returnSlots":2},"extract_byte_array_length":{"entryPoint":594,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":283,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1985:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:124"},"nodeType":"YulFunctionCall","src":"66:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:124"},"nodeType":"YulFunctionCall","src":"56:31:124"},"nodeType":"YulExpressionStatement","src":"56:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:15:124"},"nodeType":"YulExpressionStatement","src":"96:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:124"},"nodeType":"YulFunctionCall","src":"120:15:124"},"nodeType":"YulExpressionStatement","src":"120:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:124"},{"body":{"nodeType":"YulBlock","src":"210:821:124","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:124"},"nodeType":"YulFunctionCall","src":"261:12:124"},"nodeType":"YulExpressionStatement","src":"261:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:124"},"nodeType":"YulFunctionCall","src":"234:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:124"},"nodeType":"YulFunctionCall","src":"230:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:124"},"nodeType":"YulFunctionCall","src":"223:35:124"},"nodeType":"YulIf","src":"220:55:124"},{"nodeType":"YulVariableDeclaration","src":"284:23:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:124"},"nodeType":"YulFunctionCall","src":"294:13:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:124"},"nodeType":"YulFunctionCall","src":"330:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:124"},"nodeType":"YulFunctionCall","src":"326:18:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:124"},"nodeType":"YulFunctionCall","src":"369:18:124"},"nodeType":"YulExpressionStatement","src":"369:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:124"},"nodeType":"YulFunctionCall","src":"356:10:124"},"nodeType":"YulIf","src":"353:36:124"},{"nodeType":"YulVariableDeclaration","src":"398:17:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:124"},"nodeType":"YulFunctionCall","src":"408:7:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:124"},"nodeType":"YulFunctionCall","src":"438:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:124"},"nodeType":"YulFunctionCall","src":"498:13:124"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:124"},"nodeType":"YulFunctionCall","src":"494:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:124"},"nodeType":"YulFunctionCall","src":"490:31:124"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:124"},"nodeType":"YulFunctionCall","src":"486:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:124"},"nodeType":"YulFunctionCall","src":"474:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:124"},"nodeType":"YulFunctionCall","src":"588:18:124"},"nodeType":"YulExpressionStatement","src":"588:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:124"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:124"},"nodeType":"YulFunctionCall","src":"542:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:124"},"nodeType":"YulFunctionCall","src":"562:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:124"},"nodeType":"YulFunctionCall","src":"539:46:124"},"nodeType":"YulIf","src":"536:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:124"},"nodeType":"YulFunctionCall","src":"617:22:124"},"nodeType":"YulExpressionStatement","src":"617:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:124"},"nodeType":"YulFunctionCall","src":"648:18:124"},"nodeType":"YulExpressionStatement","src":"648:18:124"},{"nodeType":"YulVariableDeclaration","src":"675:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:124","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:124"},"nodeType":"YulFunctionCall","src":"737:12:124"},"nodeType":"YulExpressionStatement","src":"737:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:124"},"nodeType":"YulFunctionCall","src":"708:15:124"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:124"},"nodeType":"YulFunctionCall","src":"704:24:124"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:124"},"nodeType":"YulFunctionCall","src":"701:33:124"},"nodeType":"YulIf","src":"698:53:124"},{"nodeType":"YulVariableDeclaration","src":"760:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:14:124"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:124"},"nodeType":"YulFunctionCall","src":"846:23:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:124"},"nodeType":"YulFunctionCall","src":"881:14:124"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:124"},"nodeType":"YulFunctionCall","src":"877:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:124"},"nodeType":"YulFunctionCall","src":"871:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:124"},"nodeType":"YulFunctionCall","src":"839:63:124"},"nodeType":"YulExpressionStatement","src":"839:63:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:124"},"nodeType":"YulFunctionCall","src":"787:9:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:124","statements":[{"nodeType":"YulAssignment","src":"799:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:124"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:124"},"nodeType":"YulFunctionCall","src":"804:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:124","statements":[]},"src":"779:133:124"},{"body":{"nodeType":"YulBlock","src":"942:59:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"971:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"979:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:124"},"nodeType":"YulFunctionCall","src":"967:15:124"},{"name":"_4","nodeType":"YulIdentifier","src":"984:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:124"},"nodeType":"YulFunctionCall","src":"963:24:124"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"956:6:124"},"nodeType":"YulFunctionCall","src":"956:35:124"},"nodeType":"YulExpressionStatement","src":"956:35:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"927:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"930:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"924:2:124"},"nodeType":"YulFunctionCall","src":"924:9:124"},"nodeType":"YulIf","src":"921:80:124"},{"nodeType":"YulAssignment","src":"1010:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1019:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1010:5:124"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:124","type":""}],"src":"146:885:124"},{"body":{"nodeType":"YulBlock","src":"1154:444:124","statements":[{"body":{"nodeType":"YulBlock","src":"1200:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1209:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1212:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1202:6:124"},"nodeType":"YulFunctionCall","src":"1202:12:124"},"nodeType":"YulExpressionStatement","src":"1202:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1175:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1184:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1171:3:124"},"nodeType":"YulFunctionCall","src":"1171:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1196:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1167:3:124"},"nodeType":"YulFunctionCall","src":"1167:32:124"},"nodeType":"YulIf","src":"1164:52:124"},{"nodeType":"YulVariableDeclaration","src":"1225:30:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1245:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1239:5:124"},"nodeType":"YulFunctionCall","src":"1239:16:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1229:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1264:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1286:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1278:3:124"},"nodeType":"YulFunctionCall","src":"1278:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1290:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1274:3:124"},"nodeType":"YulFunctionCall","src":"1274:18:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1268:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1319:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1328:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1331:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1321:6:124"},"nodeType":"YulFunctionCall","src":"1321:12:124"},"nodeType":"YulExpressionStatement","src":"1321:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1307:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1315:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1304:2:124"},"nodeType":"YulFunctionCall","src":"1304:14:124"},"nodeType":"YulIf","src":"1301:34:124"},{"nodeType":"YulAssignment","src":"1344:71:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1387:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1398:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1383:3:124"},"nodeType":"YulFunctionCall","src":"1383:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1407:7:124"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1354:28:124"},"nodeType":"YulFunctionCall","src":"1354:61:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1344:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1424:41:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:124"},"nodeType":"YulFunctionCall","src":"1446:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1440:5:124"},"nodeType":"YulFunctionCall","src":"1440:25:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1428:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1494:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1503:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1506:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1496:6:124"},"nodeType":"YulFunctionCall","src":"1496:12:124"},"nodeType":"YulExpressionStatement","src":"1496:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1480:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1490:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1477:2:124"},"nodeType":"YulFunctionCall","src":"1477:16:124"},"nodeType":"YulIf","src":"1474:36:124"},{"nodeType":"YulAssignment","src":"1519:73:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1562:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1573:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1558:3:124"},"nodeType":"YulFunctionCall","src":"1558:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1584:7:124"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1529:28:124"},"nodeType":"YulFunctionCall","src":"1529:63:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1519:6:124"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1112:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1123:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1135:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1143:6:124","type":""}],"src":"1036:562:124"},{"body":{"nodeType":"YulBlock","src":"1658:325:124","statements":[{"nodeType":"YulAssignment","src":"1668:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1682:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1685:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1678:3:124"},"nodeType":"YulFunctionCall","src":"1678:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1668:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1699:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1729:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"1735:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1725:3:124"},"nodeType":"YulFunctionCall","src":"1725:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"1703:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1776:31:124","statements":[{"nodeType":"YulAssignment","src":"1778:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1792:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1800:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1788:3:124"},"nodeType":"YulFunctionCall","src":"1788:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1778:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1756:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1749:6:124"},"nodeType":"YulFunctionCall","src":"1749:26:124"},"nodeType":"YulIf","src":"1746:61:124"},{"body":{"nodeType":"YulBlock","src":"1866:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1887:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1894:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1899:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1890:3:124"},"nodeType":"YulFunctionCall","src":"1890:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1880:6:124"},"nodeType":"YulFunctionCall","src":"1880:31:124"},"nodeType":"YulExpressionStatement","src":"1880:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1931:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1934:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1924:6:124"},"nodeType":"YulFunctionCall","src":"1924:15:124"},"nodeType":"YulExpressionStatement","src":"1924:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1959:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1962:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1952:6:124"},"nodeType":"YulFunctionCall","src":"1952:15:124"},"nodeType":"YulExpressionStatement","src":"1952:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1822:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1845:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1853:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1842:2:124"},"nodeType":"YulFunctionCall","src":"1842:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1819:2:124"},"nodeType":"YulFunctionCall","src":"1819:38:124"},"nodeType":"YulIf","src":"1816:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1638:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1647:6:124","type":""}],"src":"1603:380:124"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162000d0d38038062000d0d8339810160408190526200003491620001e8565b81516200004990600390602085019062000075565b5080516200005f90600490602084019062000075565b50506005805460ff19166012179055506200028f565b828054620000839062000252565b90600052602060002090601f016020900481019282620000a75760008555620000f2565b82601f10620000c257805160ff1916838001178555620000f2565b82800160010185558215620000f2579182015b82811115620000f2578251825591602001919060010190620000d5565b506200010092915062000104565b5090565b5b8082111562000100576000815560010162000105565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014357600080fd5b81516001600160401b03808211156200016057620001606200011b565b604051601f8301601f19908116603f011681019082821181831017156200018b576200018b6200011b565b81604052838152602092508683858801011115620001a857600080fd5b600091505b83821015620001cc5785820183015181830184015290820190620001ad565b83821115620001de5760008385830101525b9695505050505050565b60008060408385031215620001fc57600080fd5b82516001600160401b03808211156200021457600080fd5b620002228683870162000131565b935060208501519150808211156200023957600080fd5b50620002488582860162000131565b9150509250929050565b600181811c908216806200026757607f821691505b602082108114156200028957634e487b7160e01b600052602260045260246000fd5b50919050565b610a6e806200029f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d71461019a578063a9059cbb146101ad578063dd62ed3e146101c057600080fd5b8063395093511461014957806370a082311461015c57806395d89b411461019257600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610206565b6040516100e3919061081a565b60405180910390f35b6100ff6100fa3660046108b6565b610298565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046108e0565b6102af565b60055460405160ff90911681526020016100e3565b6100ff6101573660046108b6565b610325565b61011361016a36600461091c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d6610368565b6100ff6101a83660046108b6565b610377565b6100ff6101bb3660046108b6565b6103d3565b6101136101ce36600461093e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461021590610971565b80601f016020809104026020016040519081016040528092919081815260200182805461024190610971565b801561028e5780601f106102635761010080835404028352916020019161028e565b820191906000526020600020905b81548152906001019060200180831161027157829003601f168201915b5050505050905090565b60006102a53384846103e0565b5060015b92915050565b60006102bc848484610599565b61031b8433610316856040518060600160405280602881526020016109ec6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906107c3565b6103e0565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916102a5918590610316908661080a565b60606004805461021590610971565b60006102a5338461031685604051806060016040528060258152602001610a146025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906107c3565b60006102a5338484610599565b73ffffffffffffffffffffffffffffffffffffffff8316610487576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161047e565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161047e565b73ffffffffffffffffffffffffffffffffffffffff82166106df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161047e565b610729816040518060600160405280602681526020016109c66026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906107c3565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610765908261080a565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161058c565b8183038184821115610802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047e919061081a565b509392505050565b808201828110156102a957600080fd5b600060208083528351808285015260005b818110156108475785810183015185820160400152820161082b565b81811115610859576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b157600080fd5b919050565b600080604083850312156108c957600080fd5b6108d28361088d565b946020939093013593505050565b6000806000606084860312156108f557600080fd5b6108fe8461088d565b925061090c6020850161088d565b9150604084013590509250925092565b60006020828403121561092e57600080fd5b6109378261088d565b9392505050565b6000806040838503121561095157600080fd5b61095a8361088d565b91506109686020840161088d565b90509250929050565b600181811c9082168061098557607f821691505b602082108114156109bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122078107621747d2147e06f26c9d211b983ba51de8d8b59b0fbb9fdc704079a3c6864736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xD0D CODESIZE SUB DUP1 PUSH3 0xD0D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1E8 JUMP JUMPDEST DUP2 MLOAD PUSH3 0x49 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x75 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x5F SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x75 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH3 0x28F JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x83 SWAP1 PUSH3 0x252 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xA7 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xF2 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xC2 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xF2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xF2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xF2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xD5 JUMP JUMPDEST POP PUSH3 0x100 SWAP3 SWAP2 POP PUSH3 0x104 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x100 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x105 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x160 JUMPI PUSH3 0x160 PUSH3 0x11B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x18B JUMPI PUSH3 0x18B PUSH3 0x11B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x1CC JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x1AD JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x1DE JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x222 DUP7 DUP4 DUP8 ADD PUSH3 0x131 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x248 DUP6 DUP3 DUP7 ADD PUSH3 0x131 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x267 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x289 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA6E DUP1 PUSH3 0x29F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x1C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x134 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xEC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x206 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE3 SWAP2 SWAP1 PUSH2 0x81A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x298 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x12F CALLDATASIZE PUSH1 0x4 PUSH2 0x8E0 JUMP JUMPDEST PUSH2 0x2AF JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x157 CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x325 JUMP JUMPDEST PUSH2 0x113 PUSH2 0x16A CALLDATASIZE PUSH1 0x4 PUSH2 0x91C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x368 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x377 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x3D3 JUMP JUMPDEST PUSH2 0x113 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0x93E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x215 SWAP1 PUSH2 0x971 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x241 SWAP1 PUSH2 0x971 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x28E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x263 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x28E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x271 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 DUP5 PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BC DUP5 DUP5 DUP5 PUSH2 0x599 JUMP JUMPDEST PUSH2 0x31B DUP5 CALLER PUSH2 0x316 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9EC PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x2A5 SWAP2 DUP6 SWAP1 PUSH2 0x316 SWAP1 DUP7 PUSH2 0x80A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x215 SWAP1 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 PUSH2 0x316 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA14 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 DUP5 PUSH2 0x599 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x487 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x52A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x63C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x6DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH2 0x729 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9C6 PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x765 SWAP1 DUP3 PUSH2 0x80A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x58C JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x47E SWAP2 SWAP1 PUSH2 0x81A JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x847 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x82B JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D2 DUP4 PUSH2 0x88D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8FE DUP5 PUSH2 0x88D JUMP JUMPDEST SWAP3 POP PUSH2 0x90C PUSH1 0x20 DUP6 ADD PUSH2 0x88D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x92E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x937 DUP3 PUSH2 0x88D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95A DUP4 PUSH2 0x88D JUMP JUMPDEST SWAP2 POP PUSH2 0x968 PUSH1 0x20 DUP5 ADD PUSH2 0x88D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x985 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x9BF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212207810 PUSH23 0x21747D2147E06F26C9D211B983BA51DE8D8B59B0FBB9FD 0xC7 DIV SMOD SWAP11 EXTCODECOPY PUSH9 0x64736F6C634300080A STOP CALLER ","sourceMap":"1318:8978:6:-:0;;;1947:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2007:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2025:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2047:9:6;:14;;-1:-1:-1;;2047:14:6;2059:2;2047:14;;;-1:-1:-1;1318:8978:6;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1318:8978:6;;;-1:-1:-1;1318:8978:6;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:124;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:124;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:124;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:124:o;1036:562::-;1135:6;1143;1196:2;1184:9;1175:7;1171:23;1167:32;1164:52;;;1212:1;1209;1202:12;1164:52;1239:16;;-1:-1:-1;;;;;1304:14:124;;;1301:34;;;1331:1;1328;1321:12;1301:34;1354:61;1407:7;1398:6;1387:9;1383:22;1354:61;:::i;:::-;1344:71;;1461:2;1450:9;1446:18;1440:25;1424:41;;1490:2;1480:8;1477:16;1474:36;;;1506:1;1503;1496:12;1474:36;;1529:63;1584:7;1573:8;1562:9;1558:24;1529:63;:::i;:::-;1519:73;;;1036:562;;;;;:::o;1603:380::-;1682:1;1678:12;;;;1725;;;1746:61;;1800:4;1792:6;1788:17;1778:27;;1746:61;1853:2;1845:6;1842:14;1822:18;1819:38;1816:161;;;1899:10;1894:3;1890:20;1887:1;1880:31;1934:4;1931:1;1924:15;1962:4;1959:1;1952:15;1816:161;;1603:380;;;:::o;:::-;1318:8978:6;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_approve_1256":{"entryPoint":992,"id":1256,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_1278":{"entryPoint":null,"id":1278,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_transfer_1100":{"entryPoint":1433,"id":1100,"parameterSlots":3,"returnSlots":0},"@add_2216":{"entryPoint":2058,"id":2216,"parameterSlots":2,"returnSlots":1},"@allowance_918":{"entryPoint":null,"id":918,"parameterSlots":2,"returnSlots":1},"@approve_939":{"entryPoint":664,"id":939,"parameterSlots":2,"returnSlots":1},"@balanceOf_879":{"entryPoint":null,"id":879,"parameterSlots":1,"returnSlots":1},"@decimals_855":{"entryPoint":null,"id":855,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_1034":{"entryPoint":887,"id":1034,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_1005":{"entryPoint":805,"id":1005,"parameterSlots":2,"returnSlots":1},"@name_837":{"entryPoint":518,"id":837,"parameterSlots":0,"returnSlots":1},"@sub_2265":{"entryPoint":1987,"id":2265,"parameterSlots":3,"returnSlots":1},"@symbol_846":{"entryPoint":872,"id":846,"parameterSlots":0,"returnSlots":1},"@totalSupply_865":{"entryPoint":null,"id":865,"parameterSlots":0,"returnSlots":1},"@transferFrom_977":{"entryPoint":687,"id":977,"parameterSlots":3,"returnSlots":1},"@transfer_900":{"entryPoint":979,"id":900,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":2189,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2332,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2366,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2272,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2230,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2074,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2417,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4544:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:124"},"nodeType":"YulFunctionCall","src":"166:21:124"},"nodeType":"YulExpressionStatement","src":"166:21:124"},{"nodeType":"YulVariableDeclaration","src":"196:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:124"},"nodeType":"YulFunctionCall","src":"232:34:124"},"nodeType":"YulExpressionStatement","src":"232:34:124"},{"nodeType":"YulVariableDeclaration","src":"275:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:124"},"nodeType":"YulFunctionCall","src":"369:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:124"},"nodeType":"YulFunctionCall","src":"365:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:124"},"nodeType":"YulFunctionCall","src":"403:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:124"},"nodeType":"YulFunctionCall","src":"399:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:124"},"nodeType":"YulFunctionCall","src":"393:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:124"},"nodeType":"YulFunctionCall","src":"358:66:124"},"nodeType":"YulExpressionStatement","src":"358:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:124"},"nodeType":"YulFunctionCall","src":"302:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:124","statements":[{"nodeType":"YulAssignment","src":"318:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:124"},"nodeType":"YulFunctionCall","src":"323:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:124","statements":[]},"src":"294:140:124"},{"body":{"nodeType":"YulBlock","src":"468:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:124"},"nodeType":"YulFunctionCall","src":"493:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:124"},"nodeType":"YulFunctionCall","src":"489:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:124"},"nodeType":"YulFunctionCall","src":"482:42:124"},"nodeType":"YulExpressionStatement","src":"482:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:124"},"nodeType":"YulFunctionCall","src":"446:13:124"},"nodeType":"YulIf","src":"443:91:124"},{"nodeType":"YulAssignment","src":"543:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:124"},"nodeType":"YulFunctionCall","src":"574:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:124"},"nodeType":"YulFunctionCall","src":"570:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:124"},"nodeType":"YulFunctionCall","src":"555:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:124"},"nodeType":"YulFunctionCall","src":"551:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:124","type":""}],"src":"14:656:124"},{"body":{"nodeType":"YulBlock","src":"724:147:124","statements":[{"nodeType":"YulAssignment","src":"734:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:124"},"nodeType":"YulFunctionCall","src":"743:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:124"}]},{"body":{"nodeType":"YulBlock","src":"849:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:124"},"nodeType":"YulFunctionCall","src":"851:12:124"},"nodeType":"YulExpressionStatement","src":"851:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:124"},"nodeType":"YulFunctionCall","src":"792:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:124"},"nodeType":"YulFunctionCall","src":"782:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:124"},"nodeType":"YulFunctionCall","src":"775:73:124"},"nodeType":"YulIf","src":"772:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:124","type":""}],"src":"675:196:124"},{"body":{"nodeType":"YulBlock","src":"963:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:124"},"nodeType":"YulFunctionCall","src":"1011:12:124"},"nodeType":"YulExpressionStatement","src":"1011:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:124"},"nodeType":"YulFunctionCall","src":"980:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:124"},"nodeType":"YulFunctionCall","src":"976:32:124"},"nodeType":"YulIf","src":"973:52:124"},{"nodeType":"YulAssignment","src":"1034:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:124"},"nodeType":"YulFunctionCall","src":"1044:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:124"}]},{"nodeType":"YulAssignment","src":"1082:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:124"},"nodeType":"YulFunctionCall","src":"1105:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:124"},"nodeType":"YulFunctionCall","src":"1092:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:124","type":""}],"src":"876:254:124"},{"body":{"nodeType":"YulBlock","src":"1230:92:124","statements":[{"nodeType":"YulAssignment","src":"1240:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:124"},"nodeType":"YulFunctionCall","src":"1248:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:124"},"nodeType":"YulFunctionCall","src":"1300:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:124"},"nodeType":"YulFunctionCall","src":"1293:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:124"},"nodeType":"YulFunctionCall","src":"1275:41:124"},"nodeType":"YulExpressionStatement","src":"1275:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:124","type":""}],"src":"1135:187:124"},{"body":{"nodeType":"YulBlock","src":"1428:76:124","statements":[{"nodeType":"YulAssignment","src":"1438:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:124"},"nodeType":"YulFunctionCall","src":"1446:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:124"},"nodeType":"YulFunctionCall","src":"1473:25:124"},"nodeType":"YulExpressionStatement","src":"1473:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:124","type":""}],"src":"1327:177:124"},{"body":{"nodeType":"YulBlock","src":"1613:224:124","statements":[{"body":{"nodeType":"YulBlock","src":"1659:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1668:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1671:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1661:6:124"},"nodeType":"YulFunctionCall","src":"1661:12:124"},"nodeType":"YulExpressionStatement","src":"1661:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1634:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1630:3:124"},"nodeType":"YulFunctionCall","src":"1630:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1655:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1626:3:124"},"nodeType":"YulFunctionCall","src":"1626:32:124"},"nodeType":"YulIf","src":"1623:52:124"},{"nodeType":"YulAssignment","src":"1684:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1694:18:124"},"nodeType":"YulFunctionCall","src":"1694:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1684:6:124"}]},{"nodeType":"YulAssignment","src":"1732:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1765:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1776:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1761:3:124"},"nodeType":"YulFunctionCall","src":"1761:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1742:18:124"},"nodeType":"YulFunctionCall","src":"1742:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1732:6:124"}]},{"nodeType":"YulAssignment","src":"1789:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1816:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1827:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1812:3:124"},"nodeType":"YulFunctionCall","src":"1812:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1799:12:124"},"nodeType":"YulFunctionCall","src":"1799:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1789:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1563:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1574:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1586:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1594:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1602:6:124","type":""}],"src":"1509:328:124"},{"body":{"nodeType":"YulBlock","src":"1939:87:124","statements":[{"nodeType":"YulAssignment","src":"1949:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1961:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1972:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1957:3:124"},"nodeType":"YulFunctionCall","src":"1957:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1949:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1991:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2006:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2014:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2002:3:124"},"nodeType":"YulFunctionCall","src":"2002:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1984:6:124"},"nodeType":"YulFunctionCall","src":"1984:36:124"},"nodeType":"YulExpressionStatement","src":"1984:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1908:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1919:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1930:4:124","type":""}],"src":"1842:184:124"},{"body":{"nodeType":"YulBlock","src":"2101:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"2147:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2159:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2149:6:124"},"nodeType":"YulFunctionCall","src":"2149:12:124"},"nodeType":"YulExpressionStatement","src":"2149:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2122:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2131:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2118:3:124"},"nodeType":"YulFunctionCall","src":"2118:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2143:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2114:3:124"},"nodeType":"YulFunctionCall","src":"2114:32:124"},"nodeType":"YulIf","src":"2111:52:124"},{"nodeType":"YulAssignment","src":"2172:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2201:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2182:18:124"},"nodeType":"YulFunctionCall","src":"2182:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2172:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2067:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2078:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2090:6:124","type":""}],"src":"2031:186:124"},{"body":{"nodeType":"YulBlock","src":"2309:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"2355:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:124"},"nodeType":"YulFunctionCall","src":"2357:12:124"},"nodeType":"YulExpressionStatement","src":"2357:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2330:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2339:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2326:3:124"},"nodeType":"YulFunctionCall","src":"2326:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2351:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2322:3:124"},"nodeType":"YulFunctionCall","src":"2322:32:124"},"nodeType":"YulIf","src":"2319:52:124"},{"nodeType":"YulAssignment","src":"2380:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2409:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2390:18:124"},"nodeType":"YulFunctionCall","src":"2390:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2380:6:124"}]},{"nodeType":"YulAssignment","src":"2428:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2461:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2472:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2457:3:124"},"nodeType":"YulFunctionCall","src":"2457:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2438:18:124"},"nodeType":"YulFunctionCall","src":"2438:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2428:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2267:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2278:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2290:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2298:6:124","type":""}],"src":"2222:260:124"},{"body":{"nodeType":"YulBlock","src":"2542:382:124","statements":[{"nodeType":"YulAssignment","src":"2552:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2566:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2569:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2562:3:124"},"nodeType":"YulFunctionCall","src":"2562:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2552:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2583:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2613:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"2619:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2609:3:124"},"nodeType":"YulFunctionCall","src":"2609:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"2587:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2660:31:124","statements":[{"nodeType":"YulAssignment","src":"2662:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2676:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2684:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2672:3:124"},"nodeType":"YulFunctionCall","src":"2672:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2662:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2640:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2633:6:124"},"nodeType":"YulFunctionCall","src":"2633:26:124"},"nodeType":"YulIf","src":"2630:61:124"},{"body":{"nodeType":"YulBlock","src":"2750:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2771:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2774:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2764:6:124"},"nodeType":"YulFunctionCall","src":"2764:88:124"},"nodeType":"YulExpressionStatement","src":"2764:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2872:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2875:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2865:6:124"},"nodeType":"YulFunctionCall","src":"2865:15:124"},"nodeType":"YulExpressionStatement","src":"2865:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2900:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2903:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2893:6:124"},"nodeType":"YulFunctionCall","src":"2893:15:124"},"nodeType":"YulExpressionStatement","src":"2893:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2706:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2729:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2737:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2726:2:124"},"nodeType":"YulFunctionCall","src":"2726:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2703:2:124"},"nodeType":"YulFunctionCall","src":"2703:38:124"},"nodeType":"YulIf","src":"2700:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2522:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2531:6:124","type":""}],"src":"2487:437:124"},{"body":{"nodeType":"YulBlock","src":"3103:226:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3120:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3131:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3113:6:124"},"nodeType":"YulFunctionCall","src":"3113:21:124"},"nodeType":"YulExpressionStatement","src":"3113:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3154:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3165:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3150:3:124"},"nodeType":"YulFunctionCall","src":"3150:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3170:2:124","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3143:6:124"},"nodeType":"YulFunctionCall","src":"3143:30:124"},"nodeType":"YulExpressionStatement","src":"3143:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3193:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3204:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3189:3:124"},"nodeType":"YulFunctionCall","src":"3189:18:124"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"3209:34:124","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3182:6:124"},"nodeType":"YulFunctionCall","src":"3182:62:124"},"nodeType":"YulExpressionStatement","src":"3182:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3264:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3275:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3260:3:124"},"nodeType":"YulFunctionCall","src":"3260:18:124"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"3280:6:124","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3253:6:124"},"nodeType":"YulFunctionCall","src":"3253:34:124"},"nodeType":"YulExpressionStatement","src":"3253:34:124"},{"nodeType":"YulAssignment","src":"3296:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3308:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3319:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3304:3:124"},"nodeType":"YulFunctionCall","src":"3304:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3296:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3080:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3094:4:124","type":""}],"src":"2929:400:124"},{"body":{"nodeType":"YulBlock","src":"3508:224:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3525:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3536:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3518:6:124"},"nodeType":"YulFunctionCall","src":"3518:21:124"},"nodeType":"YulExpressionStatement","src":"3518:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3559:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3570:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3555:3:124"},"nodeType":"YulFunctionCall","src":"3555:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3575:2:124","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3548:6:124"},"nodeType":"YulFunctionCall","src":"3548:30:124"},"nodeType":"YulExpressionStatement","src":"3548:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3598:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3609:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3594:3:124"},"nodeType":"YulFunctionCall","src":"3594:18:124"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"3614:34:124","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3587:6:124"},"nodeType":"YulFunctionCall","src":"3587:62:124"},"nodeType":"YulExpressionStatement","src":"3587:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3669:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3680:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3665:3:124"},"nodeType":"YulFunctionCall","src":"3665:18:124"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"3685:4:124","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3658:6:124"},"nodeType":"YulFunctionCall","src":"3658:32:124"},"nodeType":"YulExpressionStatement","src":"3658:32:124"},{"nodeType":"YulAssignment","src":"3699:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3711:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3722:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3707:3:124"},"nodeType":"YulFunctionCall","src":"3707:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3699:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3485:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3499:4:124","type":""}],"src":"3334:398:124"},{"body":{"nodeType":"YulBlock","src":"3911:227:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3928:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3939:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3921:6:124"},"nodeType":"YulFunctionCall","src":"3921:21:124"},"nodeType":"YulExpressionStatement","src":"3921:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3962:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3973:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3958:3:124"},"nodeType":"YulFunctionCall","src":"3958:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3978:2:124","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3951:6:124"},"nodeType":"YulFunctionCall","src":"3951:30:124"},"nodeType":"YulExpressionStatement","src":"3951:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4001:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4012:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3997:3:124"},"nodeType":"YulFunctionCall","src":"3997:18:124"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"4017:34:124","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3990:6:124"},"nodeType":"YulFunctionCall","src":"3990:62:124"},"nodeType":"YulExpressionStatement","src":"3990:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4072:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4083:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4068:3:124"},"nodeType":"YulFunctionCall","src":"4068:18:124"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"4088:7:124","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4061:6:124"},"nodeType":"YulFunctionCall","src":"4061:35:124"},"nodeType":"YulExpressionStatement","src":"4061:35:124"},{"nodeType":"YulAssignment","src":"4105:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4117:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4128:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4113:3:124"},"nodeType":"YulFunctionCall","src":"4113:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4105:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3888:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3902:4:124","type":""}],"src":"3737:401:124"},{"body":{"nodeType":"YulBlock","src":"4317:225:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4334:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4345:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4327:6:124"},"nodeType":"YulFunctionCall","src":"4327:21:124"},"nodeType":"YulExpressionStatement","src":"4327:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4368:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4379:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4364:3:124"},"nodeType":"YulFunctionCall","src":"4364:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4384:2:124","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4357:6:124"},"nodeType":"YulFunctionCall","src":"4357:30:124"},"nodeType":"YulExpressionStatement","src":"4357:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4407:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4418:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4403:3:124"},"nodeType":"YulFunctionCall","src":"4403:18:124"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"4423:34:124","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4396:6:124"},"nodeType":"YulFunctionCall","src":"4396:62:124"},"nodeType":"YulExpressionStatement","src":"4396:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4478:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4489:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4474:3:124"},"nodeType":"YulFunctionCall","src":"4474:18:124"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"4494:5:124","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4467:6:124"},"nodeType":"YulFunctionCall","src":"4467:33:124"},"nodeType":"YulExpressionStatement","src":"4467:33:124"},{"nodeType":"YulAssignment","src":"4509:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4532:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:124"},"nodeType":"YulFunctionCall","src":"4517:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4509:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4294:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4308:4:124","type":""}],"src":"4143:399:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d71461019a578063a9059cbb146101ad578063dd62ed3e146101c057600080fd5b8063395093511461014957806370a082311461015c57806395d89b411461019257600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610206565b6040516100e3919061081a565b60405180910390f35b6100ff6100fa3660046108b6565b610298565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046108e0565b6102af565b60055460405160ff90911681526020016100e3565b6100ff6101573660046108b6565b610325565b61011361016a36600461091c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d6610368565b6100ff6101a83660046108b6565b610377565b6100ff6101bb3660046108b6565b6103d3565b6101136101ce36600461093e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461021590610971565b80601f016020809104026020016040519081016040528092919081815260200182805461024190610971565b801561028e5780601f106102635761010080835404028352916020019161028e565b820191906000526020600020905b81548152906001019060200180831161027157829003601f168201915b5050505050905090565b60006102a53384846103e0565b5060015b92915050565b60006102bc848484610599565b61031b8433610316856040518060600160405280602881526020016109ec6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906107c3565b6103e0565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916102a5918590610316908661080a565b60606004805461021590610971565b60006102a5338461031685604051806060016040528060258152602001610a146025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906107c3565b60006102a5338484610599565b73ffffffffffffffffffffffffffffffffffffffff8316610487576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161047e565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161047e565b73ffffffffffffffffffffffffffffffffffffffff82166106df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161047e565b610729816040518060600160405280602681526020016109c66026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906107c3565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610765908261080a565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161058c565b8183038184821115610802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047e919061081a565b509392505050565b808201828110156102a957600080fd5b600060208083528351808285015260005b818110156108475785810183015185820160400152820161082b565b81811115610859576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b157600080fd5b919050565b600080604083850312156108c957600080fd5b6108d28361088d565b946020939093013593505050565b6000806000606084860312156108f557600080fd5b6108fe8461088d565b925061090c6020850161088d565b9150604084013590509250925092565b60006020828403121561092e57600080fd5b6109378261088d565b9392505050565b6000806040838503121561095157600080fd5b61095a8361088d565b91506109686020840161088d565b90509250929050565b600181811c9082168061098557607f821691505b602082108114156109bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122078107621747d2147e06f26c9d211b983ba51de8d8b59b0fbb9fdc704079a3c6864736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x1C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x134 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xEC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x206 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE3 SWAP2 SWAP1 PUSH2 0x81A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x298 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x12F CALLDATASIZE PUSH1 0x4 PUSH2 0x8E0 JUMP JUMPDEST PUSH2 0x2AF JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x157 CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x325 JUMP JUMPDEST PUSH2 0x113 PUSH2 0x16A CALLDATASIZE PUSH1 0x4 PUSH2 0x91C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x368 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x377 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x3D3 JUMP JUMPDEST PUSH2 0x113 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0x93E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x215 SWAP1 PUSH2 0x971 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x241 SWAP1 PUSH2 0x971 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x28E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x263 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x28E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x271 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 DUP5 PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BC DUP5 DUP5 DUP5 PUSH2 0x599 JUMP JUMPDEST PUSH2 0x31B DUP5 CALLER PUSH2 0x316 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9EC PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x2A5 SWAP2 DUP6 SWAP1 PUSH2 0x316 SWAP1 DUP7 PUSH2 0x80A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x215 SWAP1 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 PUSH2 0x316 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA14 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 DUP5 PUSH2 0x599 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x487 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x52A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x63C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x6DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH2 0x729 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9C6 PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x765 SWAP1 DUP3 PUSH2 0x80A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x58C JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x47E SWAP2 SWAP1 PUSH2 0x81A JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x847 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x82B JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D2 DUP4 PUSH2 0x88D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8FE DUP5 PUSH2 0x88D JUMP JUMPDEST SWAP3 POP PUSH2 0x90C PUSH1 0x20 DUP6 ADD PUSH2 0x88D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x92E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x937 DUP3 PUSH2 0x88D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95A DUP4 PUSH2 0x88D JUMP JUMPDEST SWAP2 POP PUSH2 0x968 PUSH1 0x20 DUP5 ADD PUSH2 0x88D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x985 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x9BF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212207810 PUSH23 0x21747D2147E06F26C9D211B983BA51DE8D8B59B0FBB9FD 0xC7 DIV SMOD SWAP11 EXTCODECOPY PUSH9 0x64736F6C634300080A STOP CALLER ","sourceMap":"1318:8978:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4029:156;;;;;;:::i;:::-;;:::i;:::-;;;1300:14:124;;1293:22;1275:41;;1263:2;1248:18;4029:156:6;1135:187:124;3102:92:6;3177:12;;3102:92;;;1473:25:124;;;1461:2;1446:18;3102:92:6;1327:177:124;4619:343:6;;;;;;:::i;:::-;;:::i;2975:75::-;3036:9;;2975:75;;3036:9;;;;1984:36:124;;1972:2;1957:18;2975:75:6;1842:184:124;5331:205:6;;;;;;:::i;:::-;;:::i;3244:111::-;;;;;;:::i;:::-;3332:18;;3310:7;3332:18;;;;;;;;;;;;3244:111;2301:79;;;:::i;5993:316::-;;;;;;:::i;:::-;;:::i;3540:162::-;;;;;;:::i;:::-;;:::i;3752:155::-;;;;;;:::i;:::-;3875:18;;;;3853:7;3875:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3752:155;2123:75;2160:13;2188:5;2181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;:::o;4029:156::-;4112:4;4124:39;678:10:4;4147:7:6;4156:6;4124:8;:39::i;:::-;-1:-1:-1;4176:4:6;4029:156;;;;;:::o;4619:343::-;4741:4;4753:36;4763:6;4771:9;4782:6;4753:9;:36::i;:::-;4795:145;4811:6;678:10:4;4845:89:6;4883:6;4845:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;;;678:10:4;4845:33:6;;;;;;;;;;:37;:89::i;:::-;4795:8;:145::i;:::-;-1:-1:-1;4953:4:6;4619:343;;;;;:::o;5331:205::-;678:10:4;5419:4:6;5463:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5419:4;;5431:83;;5454:7;;5463:50;;5502:10;5463:38;:50::i;2301:79::-;2340:13;2368:7;2361:14;;;;;:::i;5993:316::-;6098:4;6110:177;678:10:4;6146:7:6;6161:120;6209:15;6161:120;;;;;;;;;;;;;;;;;678:10:4;6161:25:6;;;;:11;:25;;;;;;;;;:34;;;;;;;;;;;;:38;:120::i;3540:162::-;3626:4;3638:42;678:10:4;3662:9:6;3673:6;3638:9;:42::i;8935:322::-;9032:19;;;9024:68;;;;;;;3131:2:124;9024:68:6;;;3113:21:124;3170:2;3150:18;;;3143:30;3209:34;3189:18;;;3182:62;3280:6;3260:18;;;3253:34;3304:19;;9024:68:6;;;;;;;;;9106:21;;;9098:68;;;;;;;3536:2:124;9098:68:6;;;3518:21:124;3575:2;3555:18;;;3548:30;3614:34;3594:18;;;3587:62;3685:4;3665:18;;;3658:32;3707:19;;9098:68:6;3334:398:124;9098:68:6;9173:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9220:32;;1473:25:124;;;9220:32:6;;1446:18:124;9220:32:6;;;;;;;;8935:322;;;:::o;6753:504::-;6854:20;;;6846:70;;;;;;;3939:2:124;6846:70:6;;;3921:21:124;3978:2;3958:18;;;3951:30;4017:34;3997:18;;;3990:62;4088:7;4068:18;;;4061:35;4113:19;;6846:70:6;3737:401:124;6846:70:6;6930:23;;;6922:71;;;;;;;4345:2:124;6922:71:6;;;4327:21:124;4384:2;4364:18;;;4357:30;4423:34;4403:18;;;4396:62;4494:5;4474:18;;;4467:33;4517:19;;6922:71:6;4143:399:124;6922:71:6;7074;7096:6;7074:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7054:17;;;;:9;:17;;;;;;;;;;;:91;;;;7174:20;;;;;;;:32;;7199:6;7174:24;:32::i;:::-;7151:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7217:35;1473:25:124;;;7151:20:6;;7217:35;;;;;;1446:18:124;7217:35:6;1327:177:124;1011:161:14;1140:5;;;1153:7;1135:16;;;;1127:34;;;;;;;;;;;;;:::i;:::-;;1011:161;;;;;:::o;410:129::-;516:5;;;511:16;;;;503:25;;;;;14:656:124;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:124;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:124:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:124:o;1509:328::-;1586:6;1594;1602;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;1694:29;1713:9;1694:29;:::i;:::-;1684:39;;1742:38;1776:2;1765:9;1761:18;1742:38;:::i;:::-;1732:48;;1827:2;1816:9;1812:18;1799:32;1789:42;;1509:328;;;;;:::o;2031:186::-;2090:6;2143:2;2131:9;2122:7;2118:23;2114:32;2111:52;;;2159:1;2156;2149:12;2111:52;2182:29;2201:9;2182:29;:::i;:::-;2172:39;2031:186;-1:-1:-1;;;2031:186:124:o;2222:260::-;2290:6;2298;2351:2;2339:9;2330:7;2326:23;2322:32;2319:52;;;2367:1;2364;2357:12;2319:52;2390:29;2409:9;2390:29;:::i;:::-;2380:39;;2438:38;2472:2;2461:9;2457:18;2438:38;:::i;:::-;2428:48;;2222:260;;;;;:::o;2487:437::-;2566:1;2562:12;;;;2609;;;2630:61;;2684:4;2676:6;2672:17;2662:27;;2630:61;2737:2;2729:6;2726:14;2706:18;2703:38;2700:218;;;2774:77;2771:1;2764:88;2875:4;2872:1;2865:15;2903:4;2900:1;2893:15;2700:218;;2487:437;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"534000","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24596","balanceOf(address)":"2561","decimals()":"2356","decreaseAllowance(address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","name()":"infinite","symbol()":"infinite","totalSupply()":"2304","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"_approve(address,address,uint256)":"infinite","_beforeTokenTransfer(address,address,uint256)":"infinite","_burn(address,uint256)":"infinite","_mint(address,uint256)":"infinite","_setupDecimals(uint8)":"infinite","_transfer(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"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 {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.sol';\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\n\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n\\n  /**\\n   * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n   * a default value of 18.\\n   *\\n   * To select a different value for {decimals}, use {_setupDecimals}.\\n   *\\n   * All three of these values are immutable: they can only be set once during\\n   * construction.\\n   */\\n  constructor(string memory name, string memory symbol) {\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = 18;\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n   * called.\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `recipient` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n    _transfer(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) public view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20};\\n   *\\n   * Requirements:\\n   * - `sender` and `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) public virtual override returns (bool) {\\n    _transfer(sender, recipient, amount);\\n    _approve(\\n      sender,\\n      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   * - `spender` must have allowance for the caller of at least\\n   * `subtractedValue`.\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');\\n    _balances[recipient] = _balances[recipient].add(amount);\\n    emit Transfer(sender, recipient, amount);\\n  }\\n\\n  /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: mint to the zero address');\\n\\n    _beforeTokenTransfer(address(0), account, amount);\\n\\n    _totalSupply = _totalSupply.add(amount);\\n    _balances[account] = _balances[account].add(amount);\\n    emit Transfer(address(0), account, amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `amount` tokens from `account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `account` cannot be the zero address.\\n   * - `account` must have at least `amount` tokens.\\n   */\\n  function _burn(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');\\n    _totalSupply = _totalSupply.sub(amount);\\n    emit Transfer(account, address(0), amount);\\n  }\\n\\n  /**\\n   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\\n   *\\n   * This is internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `owner` cannot be the zero address.\\n   * - `spender` cannot be the zero address.\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev Sets {decimals} to a value other than the default one of 18.\\n   *\\n   * WARNING: This function should only be called from the constructor. Most\\n   * applications that interact with token contracts will not expect\\n   * {decimals} to ever change, and may work incorrectly if it does.\\n   */\\n  function _setupDecimals(uint8 decimals_) internal {\\n    _decimals = decimals_;\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * will be to transferred to `to`.\\n   * - when `from` is zero, `amount` tokens will be minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":793,"contract":"contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":799,"contract":"contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":801,"contract":"contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":803,"contract":"contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":805,"contract":"contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":807,"contract":"contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol":{"IAccessControl":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":{"details":"External interface of AccessControl declared to support ERC165 detection.","events":{"RoleAdminChanged(bytes32,bytes32,bytes32)":{"details":"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._"},"RoleGranted(bytes32,address,address)":{"details":"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}."},"RoleRevoked(bytes32,address,address)":{"details":"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call:   - if using `revokeRole`, it is the admin role bearer   - if using `renounceRole`, it is the role bearer (i.e. `account`)"}},"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":{\"details\":\"External interface of AccessControl declared to support ERC165 detection.\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call:   - if using `revokeRole`, it is the admin role bearer   - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/IERC165.sol":{"IERC165":{"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},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"contracts/dependencies/openzeppelin/contracts/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\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\",\"keccak256\":\"0xbca9de297214bb9c30daefda5ecaedd0af2c3e8e0440403ad543fb33528c5ef8\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/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":"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","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 `amount` 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 amount of tokens owned by `account`."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"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.10+commit.fc410830\"},\"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\":\"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\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"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 `amount` 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 amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` 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\":{\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol":{"IERC20Detailed":{"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":"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":"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"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 `amount` 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 amount of tokens owned by `account`."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"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.10+commit.fc410830\"},\"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\":\"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\":\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"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 `amount` 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 amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` 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\":{\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":\"IERC20Detailed\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/Ownable.sol":{"Ownable":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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. By default, the owner account will be the one that deploys the contract. 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.","kind":"dev","methods":{"constructor":{"details":"Initializes the contract setting 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 anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing 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},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506103a8806100616000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b1461007c575b600080fd5b61004e61008f565b005b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61004e61008a366004610335565b610184565b60005473ffffffffffffffffffffffffffffffffffffffff163314610115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161010c565b73ffffffffffffffffffffffffffffffffffffffff81166102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161010c565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006020828403121561034757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461036b57600080fd5b939250505056fea2646970667358221220dcf57c5173817b6f73ca6309bb2e00b1eaa3fc880ea034679ca7d2dce299dad764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x3A8 DUP1 PUSH2 0x61 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x8F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x335 JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x115 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x205 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x10C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x10C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x347 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDC CREATE2 PUSH29 0x5173817B6F73CA6309BB2E00B1EAA3FC880EA034679CA7D2DCE299DAD7 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"578:1525:11:-:0;;;815:135;;;;;;;;;-1:-1:-1;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;902:43:11;;835:17;;902:43;829:121;578:1525;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":143,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":388,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":821,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1324:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:125:124","statements":[{"nodeType":"YulAssignment","src":"125:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:124"},"nodeType":"YulFunctionCall","src":"133:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"182:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"190:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"178:3:124"},"nodeType":"YulFunctionCall","src":"178:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:124"},"nodeType":"YulFunctionCall","src":"160:74:124"},"nodeType":"YulExpressionStatement","src":"160:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:124","type":""}],"src":"14:226:124"},{"body":{"nodeType":"YulBlock","src":"315:239:124","statements":[{"body":{"nodeType":"YulBlock","src":"361:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:124"},"nodeType":"YulFunctionCall","src":"363:12:124"},"nodeType":"YulExpressionStatement","src":"363:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"336:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"345:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"332:3:124"},"nodeType":"YulFunctionCall","src":"332:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"357:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"328:3:124"},"nodeType":"YulFunctionCall","src":"328:32:124"},"nodeType":"YulIf","src":"325:52:124"},{"nodeType":"YulVariableDeclaration","src":"386:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"412:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"399:12:124"},"nodeType":"YulFunctionCall","src":"399:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"390:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"508:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"517:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"520:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"510:6:124"},"nodeType":"YulFunctionCall","src":"510:12:124"},"nodeType":"YulExpressionStatement","src":"510:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"444:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"455:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"462:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"451:3:124"},"nodeType":"YulFunctionCall","src":"451:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"441:2:124"},"nodeType":"YulFunctionCall","src":"441:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"434:6:124"},"nodeType":"YulFunctionCall","src":"434:73:124"},"nodeType":"YulIf","src":"431:93:124"},{"nodeType":"YulAssignment","src":"533:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"543:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"533:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"281:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"292:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"304:6:124","type":""}],"src":"245:309:124"},{"body":{"nodeType":"YulBlock","src":"733:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"750:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"761:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"743:6:124"},"nodeType":"YulFunctionCall","src":"743:21:124"},"nodeType":"YulExpressionStatement","src":"743:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"784:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"795:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"780:3:124"},"nodeType":"YulFunctionCall","src":"780:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"800:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"773:6:124"},"nodeType":"YulFunctionCall","src":"773:30:124"},"nodeType":"YulExpressionStatement","src":"773:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"823:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"834:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"819:3:124"},"nodeType":"YulFunctionCall","src":"819:18:124"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"839:34:124","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"812:6:124"},"nodeType":"YulFunctionCall","src":"812:62:124"},"nodeType":"YulExpressionStatement","src":"812:62:124"},{"nodeType":"YulAssignment","src":"883:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"906:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:124"},"nodeType":"YulFunctionCall","src":"891:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"883:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"710:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"724:4:124","type":""}],"src":"559:356:124"},{"body":{"nodeType":"YulBlock","src":"1094:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1111:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1122:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1104:6:124"},"nodeType":"YulFunctionCall","src":"1104:21:124"},"nodeType":"YulExpressionStatement","src":"1104:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1145:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1156:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1141:3:124"},"nodeType":"YulFunctionCall","src":"1141:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"1161:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1134:6:124"},"nodeType":"YulFunctionCall","src":"1134:30:124"},"nodeType":"YulExpressionStatement","src":"1134:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1184:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1195:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1180:3:124"},"nodeType":"YulFunctionCall","src":"1180:18:124"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"1200:34:124","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1173:6:124"},"nodeType":"YulFunctionCall","src":"1173:62:124"},"nodeType":"YulExpressionStatement","src":"1173:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1255:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1266:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1251:3:124"},"nodeType":"YulFunctionCall","src":"1251:18:124"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1271:8:124","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1244:6:124"},"nodeType":"YulFunctionCall","src":"1244:36:124"},"nodeType":"YulExpressionStatement","src":"1244:36:124"},{"nodeType":"YulAssignment","src":"1289:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1301:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1312:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1297:3:124"},"nodeType":"YulFunctionCall","src":"1297:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1289:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1071:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1085:4:124","type":""}],"src":"920:402:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b1461007c575b600080fd5b61004e61008f565b005b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61004e61008a366004610335565b610184565b60005473ffffffffffffffffffffffffffffffffffffffff163314610115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161010c565b73ffffffffffffffffffffffffffffffffffffffff81166102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161010c565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006020828403121561034757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461036b57600080fd5b939250505056fea2646970667358221220dcf57c5173817b6f73ca6309bb2e00b1eaa3fc880ea034679ca7d2dce299dad764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x8F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x335 JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x115 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x205 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x10C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x10C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x347 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDC CREATE2 PUSH29 0x5173817B6F73CA6309BB2E00B1EAA3FC880EA034679CA7D2DCE299DAD7 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"578:1525:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1601:135;;;:::i;:::-;;1018:71;1056:7;1078:6;1018:71;;;1078:6;;;;160:74:124;;1018:71:11;;;;;148:2:124;1018:71:11;;;1875:226;;;;;;:::i;:::-;;:::i;1601:135::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;761:2:124;1196:67:11;;;743:21:124;;;780:18;;;773:30;839:34;819:18;;;812:62;891:18;;1196:67:11;;;;;;;;;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1875:226::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;761:2:124;1196:67:11;;;743:21:124;;;780:18;;;773:30;839:34;819:18;;;812:62;891:18;;1196:67:11;559:356:124;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;1122:2:124;1951:73:11::1;::::0;::::1;1104:21:124::0;1161:2;1141:18;;;1134:30;1200:34;1180:18;;;1173:62;1271:8;1251:18;;;1244:36;1297:19;;1951:73:11::1;920:402:124::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;245:309:124:-;304:6;357:2;345:9;336:7;332:23;328:32;325:52;;;373:1;370;363:12;325:52;412:9;399:23;462:42;455:5;451:54;444:5;441:65;431:93;;520:1;517;510:12;431:93;543:5;245:309;-1:-1:-1;;;245:309:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"187200","executionCost":"26005","totalCost":"213205"},"external":{"owner()":"2280","renounceOwnership()":"30104","transferOwnership(address)":"30312"}},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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. By default, the owner account will be the one that deploys the contract. 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.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting 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 anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing 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\":{\"contracts/dependencies/openzeppelin/contracts/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './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 * By default, the owner account will be the one that deploys the contract. This\\n * can 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 */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = 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    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/dependencies/openzeppelin/contracts/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/SafeCast.sol":{"SafeCast":{"abi":[],"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. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207d6afc5b660f089662e7770dedf65e19f3f0b7aefdf9a9e4d0a43f3e594f281264736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x6AFC5B660F089662E7770DEDF65E19F3F0B7AEFDF9A9E4D0A43F3E594F28 SLT PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"826:6610:12:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;826:6610:12;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207d6afc5b660f089662e7770dedf65e19f3f0b7aefdf9a9e4d0a43f3e594f281264736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x6AFC5B660F089662E7770DEDF65E19F3F0B7AEFDF9A9E4D0A43F3E594F28 SLT PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"826:6610:12:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"toInt128(int256)":"infinite","toInt16(int256)":"infinite","toInt256(uint256)":"infinite","toInt32(int256)":"infinite","toInt64(int256)":"infinite","toInt8(int256)":"infinite","toUint128(uint256)":"infinite","toUint16(uint256)":"infinite","toUint224(uint256)":"infinite","toUint256(int256)":"infinite","toUint32(uint256)":"infinite","toUint64(uint256)":"infinite","toUint8(uint256)":"infinite","toUint96(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"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. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/SafeERC20.sol":{"SafeERC20":{"abi":[],"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.","kind":"dev","methods":{},"title":"SafeERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220eb1dc01e268dc8e3739970ecbb5da48ae622a0fe593b402262e3fdeca0babcac64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEB SAR 0xC0 0x1E 0x26 DUP14 0xC8 0xE3 PUSH20 0x9970ECBB5DA48AE622A0FE593B402262E3FDECA0 0xBA 0xBC 0xAC PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"631:3000:13:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;631:3000:13;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220eb1dc01e268dc8e3739970ecbb5da48ae622a0fe593b402262e3fdeca0babcac64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEB SAR 0xC0 0x1E 0x26 DUP14 0xC8 0xE3 PUSH20 0x9970ECBB5DA48AE622A0FE593B402262E3FDECA0 0xBA 0xBC 0xAC PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"631:3000:13:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_callOptionalReturn(contract IERC20,bytes memory)":"infinite","safeApprove(contract IERC20,address,uint256)":"infinite","safeDecreaseAllowance(contract IERC20,address,uint256)":"infinite","safeIncreaseAllowance(contract IERC20,address,uint256)":"infinite","safeTransfer(contract IERC20,address,uint256)":"infinite","safeTransferFrom(contract IERC20,address,address,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"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.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC20.sol';\\nimport './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  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\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, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x9ada5448c24f34f934122c0e11d1a89bf9a31b7ade0dcb935bd7dcb339ef7f32\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/contracts/SafeMath.sol":{"SafeMath":{"abi":[],"devdoc":{"kind":"dev","methods":{},"title":"Optimized overflow and underflow safe math operations","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fef0398ff24eeca24960ca0a82bfa6152c6b66c06abc56d7dfaa06e86f99d61164736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID CREATE CODECOPY DUP16 CALLCODE 0x4E 0xEC LOG2 0x49 PUSH1 0xCA EXP DUP3 0xBF 0xA6 ISZERO 0x2C PUSH12 0x66C06ABC56D7DFAA06E86F99 0xD6 GT PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"240:1532:14:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;240:1532:14;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fef0398ff24eeca24960ca0a82bfa6152c6b66c06abc56d7dfaa06e86f99d61164736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID CREATE CODECOPY DUP16 CALLCODE 0x4E 0xEC LOG2 0x49 PUSH1 0xCA EXP DUP3 0xBF 0xA6 ISZERO 0x2C PUSH12 0x66C06ABC56D7DFAA06E86F99 0xD6 GT PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"240:1532:14:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"add(uint256,uint256)":"infinite","div(uint256,uint256)":"infinite","mul(uint256,uint256)":"infinite","sub(uint256,uint256)":"infinite","sub(uint256,uint256,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Optimized overflow and underflow safe math operations\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost","version":1}}},"contracts/dependencies/openzeppelin/contracts/Strings.sol":{"Strings":{"abi":[],"devdoc":{"details":"String operations.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122062f141bf90d8d07912572da6bf94fa923bc92b10e77431b69a1d40a83f2b7f1164736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH3 0xF141BF SWAP1 0xD8 0xD0 PUSH26 0x12572DA6BF94FA923BC92B10E77431B69A1D40A83F2B7F116473 PUSH16 0x6C634300080A00330000000000000000 ","sourceMap":"93:1683:15:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;93:1683:15;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122062f141bf90d8d07912572da6bf94fa923bc92b10e77431b69a1d40a83f2b7f1164736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH3 0xF141BF SWAP1 0xD8 0xD0 PUSH26 0x12572DA6BF94FA923BC92B10E77431B69A1D40A83F2B7F116473 PUSH16 0x6C634300080A00330000000000000000 ","sourceMap":"93:1683:15:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"toHexString(uint256)":"infinite","toHexString(uint256,uint256)":"infinite","toString(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/contracts/Strings.sol\":\"Strings\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n  bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';\\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    // Inspired by OraclizeAPI's implementation - MIT licence\\n    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n    if (value == 0) {\\n      return '0';\\n    }\\n    uint256 temp = value;\\n    uint256 digits;\\n    while (temp != 0) {\\n      digits++;\\n      temp /= 10;\\n    }\\n    bytes memory buffer = new bytes(digits);\\n    while (value != 0) {\\n      digits -= 1;\\n      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n      value /= 10;\\n    }\\n    return string(buffer);\\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    if (value == 0) {\\n      return '0x00';\\n    }\\n    uint256 temp = value;\\n    uint256 length = 0;\\n    while (temp != 0) {\\n      length++;\\n      temp >>= 8;\\n    }\\n    return toHexString(value, length);\\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    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_SYMBOLS[value & 0xf];\\n      value >>= 4;\\n    }\\n    require(value == 0, 'Strings: hex length insufficient');\\n    return string(buffer);\\n  }\\n}\\n\",\"keccak256\":\"0xb2754a420cad582ee384ce1075833bc78411b4e27198019fe762066f7a72946a\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol":{"AdminUpgradeabilityProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"Extends from BaseAdminUpgradeabilityProxy with a constructor for initializing the implementation, admin, and init data.","kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"changeAdmin(address)":{"details":"Changes the admin of the proxy. Only the current admin can call this function.","params":{"newAdmin":"Address to transfer proxy administration to."}},"constructor":{"params":{"_admin":"Address of the proxy administrator.","_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"address of the initial implementation."}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"upgradeTo(address)":{"details":"Upgrade the backing implementation of the proxy. Only the admin can call this function.","params":{"newImplementation":"Address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"Address of the new implementation."}}},"title":"AdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_2556":{"entryPoint":null,"id":2556,"parameterSlots":3,"returnSlots":0},"@_3103":{"entryPoint":null,"id":3103,"parameterSlots":2,"returnSlots":0},"@_setAdmin_2719":{"entryPoint":null,"id":2719,"parameterSlots":1,"returnSlots":0},"@_setImplementation_2804":{"entryPoint":360,"id":2804,"parameterSlots":1,"returnSlots":0},"@isContract_445":{"entryPoint":520,"id":445,"parameterSlots":1,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":526,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":628,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":912,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":852,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":577,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x01":{"entryPoint":890,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":555,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2712:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:124","statements":[{"nodeType":"YulAssignment","src":"84:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:124"},"nodeType":"YulFunctionCall","src":"93:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:124"}]},{"body":{"nodeType":"YulBlock","src":"169:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:124"},"nodeType":"YulFunctionCall","src":"171:12:124"},"nodeType":"YulExpressionStatement","src":"171:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:124"},"nodeType":"YulFunctionCall","src":"150:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:124"},"nodeType":"YulFunctionCall","src":"146:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:124"},"nodeType":"YulFunctionCall","src":"135:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:124"},"nodeType":"YulFunctionCall","src":"125:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:124"},"nodeType":"YulFunctionCall","src":"118:50:124"},"nodeType":"YulIf","src":"115:70:124"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:124","type":""}],"src":"14:177:124"},{"body":{"nodeType":"YulBlock","src":"228:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"245:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"252:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"257:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"248:3:124"},"nodeType":"YulFunctionCall","src":"248:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"238:6:124"},"nodeType":"YulFunctionCall","src":"238:31:124"},"nodeType":"YulExpressionStatement","src":"238:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"285:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"288:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"278:6:124"},"nodeType":"YulFunctionCall","src":"278:15:124"},"nodeType":"YulExpressionStatement","src":"278:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"309:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"312:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"302:6:124"},"nodeType":"YulFunctionCall","src":"302:15:124"},"nodeType":"YulExpressionStatement","src":"302:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"196:127:124"},{"body":{"nodeType":"YulBlock","src":"381:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"391:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"400:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"395:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"460:63:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"485:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"490:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"481:3:124"},"nodeType":"YulFunctionCall","src":"481:11:124"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"504:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"509:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"500:3:124"},"nodeType":"YulFunctionCall","src":"500:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"494:5:124"},"nodeType":"YulFunctionCall","src":"494:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"474:6:124"},"nodeType":"YulFunctionCall","src":"474:39:124"},"nodeType":"YulExpressionStatement","src":"474:39:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"421:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"424:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"418:2:124"},"nodeType":"YulFunctionCall","src":"418:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"432:19:124","statements":[{"nodeType":"YulAssignment","src":"434:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"443:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"446:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"439:3:124"},"nodeType":"YulFunctionCall","src":"439:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"434:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"414:3:124","statements":[]},"src":"410:113:124"},{"body":{"nodeType":"YulBlock","src":"549:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"562:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"567:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"558:3:124"},"nodeType":"YulFunctionCall","src":"558:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"576:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"551:6:124"},"nodeType":"YulFunctionCall","src":"551:27:124"},"nodeType":"YulExpressionStatement","src":"551:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"538:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"541:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"535:2:124"},"nodeType":"YulFunctionCall","src":"535:13:124"},"nodeType":"YulIf","src":"532:48:124"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"359:3:124","type":""},{"name":"dst","nodeType":"YulTypedName","src":"364:3:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"369:6:124","type":""}],"src":"328:258:124"},{"body":{"nodeType":"YulBlock","src":"715:929:124","statements":[{"body":{"nodeType":"YulBlock","src":"761:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"770:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"773:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"763:6:124"},"nodeType":"YulFunctionCall","src":"763:12:124"},"nodeType":"YulExpressionStatement","src":"763:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"736:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"745:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"732:3:124"},"nodeType":"YulFunctionCall","src":"732:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"757:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"728:3:124"},"nodeType":"YulFunctionCall","src":"728:32:124"},"nodeType":"YulIf","src":"725:52:124"},{"nodeType":"YulAssignment","src":"786:50:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"826:9:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"796:29:124"},"nodeType":"YulFunctionCall","src":"796:40:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"786:6:124"}]},{"nodeType":"YulAssignment","src":"845:59:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"889:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"900:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"885:3:124"},"nodeType":"YulFunctionCall","src":"885:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"855:29:124"},"nodeType":"YulFunctionCall","src":"855:49:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"845:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"913:39:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"937:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"948:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"933:3:124"},"nodeType":"YulFunctionCall","src":"933:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"927:5:124"},"nodeType":"YulFunctionCall","src":"927:25:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"917:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"961:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"979:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"983:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"975:3:124"},"nodeType":"YulFunctionCall","src":"975:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"987:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"971:3:124"},"nodeType":"YulFunctionCall","src":"971:18:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"965:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1016:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1025:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1028:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1018:6:124"},"nodeType":"YulFunctionCall","src":"1018:12:124"},"nodeType":"YulExpressionStatement","src":"1018:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1004:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1012:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1001:2:124"},"nodeType":"YulFunctionCall","src":"1001:14:124"},"nodeType":"YulIf","src":"998:34:124"},{"nodeType":"YulVariableDeclaration","src":"1041:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1055:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1066:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1051:3:124"},"nodeType":"YulFunctionCall","src":"1051:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1045:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1121:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1130:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1133:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1123:6:124"},"nodeType":"YulFunctionCall","src":"1123:12:124"},"nodeType":"YulExpressionStatement","src":"1123:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1100:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1104:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1096:3:124"},"nodeType":"YulFunctionCall","src":"1096:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1111:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1092:3:124"},"nodeType":"YulFunctionCall","src":"1092:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1085:6:124"},"nodeType":"YulFunctionCall","src":"1085:35:124"},"nodeType":"YulIf","src":"1082:55:124"},{"nodeType":"YulVariableDeclaration","src":"1146:19:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1162:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1156:5:124"},"nodeType":"YulFunctionCall","src":"1156:9:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1150:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1188:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1190:16:124"},"nodeType":"YulFunctionCall","src":"1190:18:124"},"nodeType":"YulExpressionStatement","src":"1190:18:124"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1180:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1184:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1177:2:124"},"nodeType":"YulFunctionCall","src":"1177:10:124"},"nodeType":"YulIf","src":"1174:36:124"},{"nodeType":"YulVariableDeclaration","src":"1219:17:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1233:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1229:3:124"},"nodeType":"YulFunctionCall","src":"1229:7:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1223:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1245:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1265:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1259:5:124"},"nodeType":"YulFunctionCall","src":"1259:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1249:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1277:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1299:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1323:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1327:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1319:3:124"},"nodeType":"YulFunctionCall","src":"1319:13:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1334:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1315:3:124"},"nodeType":"YulFunctionCall","src":"1315:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"1339:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:124"},"nodeType":"YulFunctionCall","src":"1311:31:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1344:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1307:3:124"},"nodeType":"YulFunctionCall","src":"1307:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1295:3:124"},"nodeType":"YulFunctionCall","src":"1295:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1281:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1407:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1409:16:124"},"nodeType":"YulFunctionCall","src":"1409:18:124"},"nodeType":"YulExpressionStatement","src":"1409:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1366:10:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1378:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1363:2:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1386:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1398:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1383:2:124"},"nodeType":"YulFunctionCall","src":"1383:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1360:2:124"},"nodeType":"YulFunctionCall","src":"1360:46:124"},"nodeType":"YulIf","src":"1357:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1445:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1449:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1438:6:124"},"nodeType":"YulFunctionCall","src":"1438:22:124"},"nodeType":"YulExpressionStatement","src":"1438:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1476:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1484:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1469:6:124"},"nodeType":"YulFunctionCall","src":"1469:18:124"},"nodeType":"YulExpressionStatement","src":"1469:18:124"},{"body":{"nodeType":"YulBlock","src":"1533:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1542:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1545:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1535:6:124"},"nodeType":"YulFunctionCall","src":"1535:12:124"},"nodeType":"YulExpressionStatement","src":"1535:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1510:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1514:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"1519:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1502:3:124"},"nodeType":"YulFunctionCall","src":"1502:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1524:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1499:2:124"},"nodeType":"YulFunctionCall","src":"1499:33:124"},"nodeType":"YulIf","src":"1496:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1584:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1588:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1580:3:124"},"nodeType":"YulFunctionCall","src":"1580:11:124"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1597:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1605:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1593:3:124"},"nodeType":"YulFunctionCall","src":"1593:15:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1610:2:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"1558:21:124"},"nodeType":"YulFunctionCall","src":"1558:55:124"},"nodeType":"YulExpressionStatement","src":"1558:55:124"},{"nodeType":"YulAssignment","src":"1622:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1632:6:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1622:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"665:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"676:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"688:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"696:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"704:6:124","type":""}],"src":"591:1053:124"},{"body":{"nodeType":"YulBlock","src":"1698:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"1728:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1749:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1756:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1761:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1752:3:124"},"nodeType":"YulFunctionCall","src":"1752:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1742:6:124"},"nodeType":"YulFunctionCall","src":"1742:31:124"},"nodeType":"YulExpressionStatement","src":"1742:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1793:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1796:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1786:6:124"},"nodeType":"YulFunctionCall","src":"1786:15:124"},"nodeType":"YulExpressionStatement","src":"1786:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1821:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1824:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1814:6:124"},"nodeType":"YulFunctionCall","src":"1814:15:124"},"nodeType":"YulExpressionStatement","src":"1814:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1714:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1717:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1711:2:124"},"nodeType":"YulFunctionCall","src":"1711:8:124"},"nodeType":"YulIf","src":"1708:131:124"},{"nodeType":"YulAssignment","src":"1848:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1860:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1863:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1856:3:124"},"nodeType":"YulFunctionCall","src":"1856:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1848:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1680:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"1683:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1689:4:124","type":""}],"src":"1649:222:124"},{"body":{"nodeType":"YulBlock","src":"1908:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1925:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1932:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1937:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1928:3:124"},"nodeType":"YulFunctionCall","src":"1928:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1918:6:124"},"nodeType":"YulFunctionCall","src":"1918:31:124"},"nodeType":"YulExpressionStatement","src":"1918:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1965:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1968:4:124","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1958:6:124"},"nodeType":"YulFunctionCall","src":"1958:15:124"},"nodeType":"YulExpressionStatement","src":"1958:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1989:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1992:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1982:6:124"},"nodeType":"YulFunctionCall","src":"1982:15:124"},"nodeType":"YulExpressionStatement","src":"1982:15:124"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"1876:127:124"},{"body":{"nodeType":"YulBlock","src":"2145:137:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2155:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2175:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2169:5:124"},"nodeType":"YulFunctionCall","src":"2169:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2159:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2217:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2225:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2213:3:124"},"nodeType":"YulFunctionCall","src":"2213:17:124"},{"name":"pos","nodeType":"YulIdentifier","src":"2232:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2237:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"2191:21:124"},"nodeType":"YulFunctionCall","src":"2191:53:124"},"nodeType":"YulExpressionStatement","src":"2191:53:124"},{"nodeType":"YulAssignment","src":"2253:23:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2264:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2269:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2260:3:124"},"nodeType":"YulFunctionCall","src":"2260:16:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2253:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2121:3:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2126:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2137:3:124","type":""}],"src":"2008:274:124"},{"body":{"nodeType":"YulBlock","src":"2461:249:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2478:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2489:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2471:6:124"},"nodeType":"YulFunctionCall","src":"2471:21:124"},"nodeType":"YulExpressionStatement","src":"2471:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2512:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2523:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2508:3:124"},"nodeType":"YulFunctionCall","src":"2508:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2528:2:124","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2501:6:124"},"nodeType":"YulFunctionCall","src":"2501:30:124"},"nodeType":"YulExpressionStatement","src":"2501:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2551:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2562:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2547:3:124"},"nodeType":"YulFunctionCall","src":"2547:18:124"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"2567:34:124","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2540:6:124"},"nodeType":"YulFunctionCall","src":"2540:62:124"},"nodeType":"YulExpressionStatement","src":"2540:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2622:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2633:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2618:3:124"},"nodeType":"YulFunctionCall","src":"2618:18:124"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"2638:29:124","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2611:6:124"},"nodeType":"YulFunctionCall","src":"2611:57:124"},"nodeType":"YulExpressionStatement","src":"2611:57:124"},{"nodeType":"YulAssignment","src":"2677:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2689:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2700:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2685:3:124"},"nodeType":"YulFunctionCall","src":"2685:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2677:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2438:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2452:4:124","type":""}],"src":"2287:423:124"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        let offset := mload(add(headStart, 64))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n        value2 := memPtr\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405260405162000c6338038062000c63833981016040819052620000269162000274565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd62000354565b60008051602062000c43833981519152146200007557620000756200037a565b620000808262000168565b805115620000f7576000826001600160a01b031682604051620000a4919062000390565b600060405180830381855af49150503d8060008114620000e1576040519150601f19603f3d011682016040523d82523d6000602084013e620000e6565b606091505b5050905080620000f557600080fd5b505b5062000127905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610462000354565b60008051602062000c23833981519152146200014757620001476200037a565b6200015f8260008051602062000c2383398151915255565b505050620003ae565b6200017e816200020860201b620005431760201c565b620001f55760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015260840160405180910390fd5b60008051602062000c4383398151915255565b3b151590565b80516001600160a01b03811681146200022657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200025e57818101518382015260200162000244565b838111156200026e576000848401525b50505050565b6000806000606084860312156200028a57600080fd5b62000295846200020e565b9250620002a5602085016200020e565b60408501519092506001600160401b0380821115620002c357600080fd5b818601915086601f830112620002d857600080fd5b815181811115620002ed57620002ed6200022b565b604051601f8201601f19908116603f011681019083821181831017156200031857620003186200022b565b816040528281528960208487010111156200033257600080fd5b6200034583602083016020880162000241565b80955050505050509250925092565b6000828210156200037557634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b60008251620003a481846020870162000241565b9190910192915050565b61086580620003be6000396000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146100975780638f283970146100d5578063f851a440146100f55761005a565b80633659cfe6146100645780634f1ef28614610084575b61006261010a565b005b34801561007057600080fd5b5061006261007f36600461077a565b610144565b61006261009236600461079c565b6101ad565b3480156100a357600080fd5b506100ac610295565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100e157600080fd5b506100626100f036600461077a565b610323565b34801561010157600080fd5b506100ac6104c0565b610112610549565b61014261013d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610551565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a5576101a281610575565b50565b6101a261010a565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102885761020b83610575565b60008373ffffffffffffffffffffffffffffffffffffffff16838360405161023492919061081f565b600060405180830381855af49150503d806000811461026f576040519150601f19603f3d011682016040523d82523d6000602084013e610274565b606091505b505090508061028257600080fd5b50505050565b61029061010a565b505050565b60006102bf7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61032061010a565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a55773ffffffffffffffffffffffffffffffffffffffff8116610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104697fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101a2817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006104ea7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b3b151590565b6101426105c2565b3660008037600080366000845af43d6000803e808015610570573d6000f35b3d6000fd5b61057e8161069f565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610417565b803b61072d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610417565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461077557600080fd5b919050565b60006020828403121561078c57600080fd5b61079582610751565b9392505050565b6000806000604084860312156107b157600080fd5b6107ba84610751565b9250602084013567ffffffffffffffff808211156107d757600080fd5b818601915086601f8301126107eb57600080fd5b8135818111156107fa57600080fd5b87602082850101111561080c57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea26469706673582212201ff11193b6002f721b771da18659a8d2bec1af039f8e2efc58680633e41c8f7d64736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xC63 CODESIZE SUB DUP1 PUSH3 0xC63 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x274 JUMP JUMPDEST DUP3 DUP2 PUSH3 0x55 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH3 0x354 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xC43 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0x75 JUMPI PUSH3 0x75 PUSH3 0x37A JUMP JUMPDEST PUSH3 0x80 DUP3 PUSH3 0x168 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH3 0xF7 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH3 0xA4 SWAP2 SWAP1 PUSH3 0x390 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0xE1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0xE6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH3 0xF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMPDEST POP PUSH3 0x127 SWAP1 POP PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH3 0x354 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xC23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0x147 JUMPI PUSH3 0x147 PUSH3 0x37A JUMP JUMPDEST PUSH3 0x15F DUP3 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xC23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST POP POP POP PUSH3 0x3AE JUMP JUMPDEST PUSH3 0x17E DUP2 PUSH3 0x208 PUSH1 0x20 SHL PUSH3 0x543 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xC43 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x25E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x244 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x26E JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x28A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x295 DUP5 PUSH3 0x20E JUMP JUMPDEST SWAP3 POP PUSH3 0x2A5 PUSH1 0x20 DUP6 ADD PUSH3 0x20E JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x2D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x2ED JUMPI PUSH3 0x2ED PUSH3 0x22B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x318 JUMPI PUSH3 0x318 PUSH3 0x22B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x345 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x241 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x375 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x3A4 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x241 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x865 DUP1 PUSH3 0x3BE PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xF5 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0x10A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x77A JUMP JUMPDEST PUSH2 0x144 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x79C JUMP JUMPDEST PUSH2 0x1AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x295 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x77A JUMP JUMPDEST PUSH2 0x323 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x4C0 JUMP JUMPDEST PUSH2 0x112 PUSH2 0x549 JUMP JUMPDEST PUSH2 0x142 PUSH2 0x13D PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x551 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH2 0x1A2 DUP2 PUSH2 0x575 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A2 PUSH2 0x10A JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x288 JUMPI PUSH2 0x20B DUP4 PUSH2 0x575 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x234 SWAP3 SWAP2 SWAP1 PUSH2 0x81F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x274 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x290 PUSH2 0x10A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BF PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x320 PUSH2 0x10A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x469 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1A2 DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x142 PUSH2 0x5C2 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x570 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x57E DUP2 PUSH2 0x69F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x142 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x72D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x795 DUP3 PUSH2 0x751 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7BA DUP5 PUSH2 0x751 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1F CALL GT SWAP4 0xB6 STOP 0x2F PUSH19 0x1B771DA18659A8D2BEC1AF039F8E2EFC586806 CALLER 0xE4 SHR DUP16 PUSH30 0x64736F6C634300080A0033B53127684A568B3173AE13B9F8A6016E243E63 0xB6 0xE8 0xEE GT PUSH25 0xD6A717850B5D6103360894A13BA1A3210667C828492DB98DCA RETURNDATACOPY KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC0000000000000000000000 ","sourceMap":"282:1108:16:-:0;;;945:233;;;;;;;;;;;;;;;;;;:::i;:::-;1053:6;1061:5;932:54:23;985:1;940:41;932:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;901:86:23;894:94;;;;:::i;:::-;994:26;1013:6;994:18;:26::i;:::-;1030:12;;:16;1026:106;;1057:12;1075:6;-1:-1:-1;;;;;1075:19:23;1095:5;1075:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1056:45;;;1117:7;1109:16;;;;;;1048:84;1026:106;-1:-1:-1;1103:45:16::1;::::0;-1:-1:-1;1147:1:16::1;1111:32;1103:45;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;1081:68:16::1;1074:76;;;;:::i;:::-;1156:17;1166:6:::0;-1:-1:-1;;;;;;;;;;;3563:22:17;3432:163;1156:17:16::1;945:233:::0;;;282:1108;;1618:334:18;1703:37;1722:17;1703:18;;;;;:37;;:::i;:::-;1688:127;;;;-1:-1:-1;;;1688:127:18;;2489:2:124;1688:127:18;;;2471:21:124;2528:2;2508:18;;;2501:30;2567:34;2547:18;;;2540:62;2638:29;2618:18;;;2611:57;2685:19;;1688:127:18;;;;;;;;-1:-1:-1;;;;;;;;;;;1911:31:18;1618:334::o;735:341:3:-;1025:20;1063:8;;;735:341::o;14:177:124:-;93:13;;-1:-1:-1;;;;;135:31:124;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:258;400:1;410:113;424:6;421:1;418:13;410:113;;;500:11;;;494:18;481:11;;;474:39;446:2;439:10;410:113;;;541:6;538:1;535:13;532:48;;;576:1;567:6;562:3;558:16;551:27;532:48;;328:258;;;:::o;591:1053::-;688:6;696;704;757:2;745:9;736:7;732:23;728:32;725:52;;;773:1;770;763:12;725:52;796:40;826:9;796:40;:::i;:::-;786:50;;855:49;900:2;889:9;885:18;855:49;:::i;:::-;948:2;933:18;;927:25;845:59;;-1:-1:-1;;;;;;1001:14:124;;;998:34;;;1028:1;1025;1018:12;998:34;1066:6;1055:9;1051:22;1041:32;;1111:7;1104:4;1100:2;1096:13;1092:27;1082:55;;1133:1;1130;1123:12;1082:55;1162:2;1156:9;1184:2;1180;1177:10;1174:36;;;1190:18;;:::i;:::-;1265:2;1259:9;1233:2;1319:13;;-1:-1:-1;;1315:22:124;;;1339:2;1311:31;1307:40;1295:53;;;1363:18;;;1383:22;;;1360:46;1357:72;;;1409:18;;:::i;:::-;1449:10;1445:2;1438:22;1484:2;1476:6;1469:18;1524:7;1519:2;1514;1510;1506:11;1502:20;1499:33;1496:53;;;1545:1;1542;1535:12;1496:53;1558:55;1610:2;1605;1597:6;1593:15;1588:2;1584;1580:11;1558:55;:::i;:::-;1632:6;1622:16;;;;;;;591:1053;;;;;:::o;1649:222::-;1689:4;1717:1;1714;1711:8;1708:131;;;1761:10;1756:3;1752:20;1749:1;1742:31;1796:4;1793:1;1786:15;1824:4;1821:1;1814:15;1708:131;-1:-1:-1;1856:9:124;;1649:222::o;1876:127::-;1937:10;1932:3;1928:20;1925:1;1918:31;1968:4;1965:1;1958:15;1992:4;1989:1;1982:15;2008:274;2137:3;2175:6;2169:13;2191:53;2237:6;2232:3;2225:4;2217:6;2213:17;2191:53;:::i;:::-;2260:16;;;;;2008:274;-1:-1:-1;;2008:274:124:o;2287:423::-;282:1108:16;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3018":{"entryPoint":null,"id":3018,"parameterSlots":0,"returnSlots":0},"@_admin_2707":{"entryPoint":null,"id":2707,"parameterSlots":0,"returnSlots":1},"@_delegate_3032":{"entryPoint":1361,"id":3032,"parameterSlots":1,"returnSlots":0},"@_fallback_3050":{"entryPoint":266,"id":3050,"parameterSlots":0,"returnSlots":0},"@_implementation_2769":{"entryPoint":null,"id":2769,"parameterSlots":0,"returnSlots":1},"@_setAdmin_2719":{"entryPoint":null,"id":2719,"parameterSlots":1,"returnSlots":0},"@_setImplementation_2804":{"entryPoint":1695,"id":2804,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2784":{"entryPoint":1397,"id":2784,"parameterSlots":1,"returnSlots":0},"@_willFallback_2569":{"entryPoint":1353,"id":2569,"parameterSlots":0,"returnSlots":0},"@_willFallback_2739":{"entryPoint":1474,"id":2739,"parameterSlots":0,"returnSlots":0},"@_willFallback_3037":{"entryPoint":null,"id":3037,"parameterSlots":0,"returnSlots":0},"@admin_2615":{"entryPoint":1216,"id":2615,"parameterSlots":0,"returnSlots":1},"@changeAdmin_2656":{"entryPoint":803,"id":2656,"parameterSlots":1,"returnSlots":0},"@implementation_2627":{"entryPoint":661,"id":2627,"parameterSlots":0,"returnSlots":1},"@isContract_445":{"entryPoint":1347,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_2695":{"entryPoint":429,"id":2695,"parameterSlots":3,"returnSlots":0},"@upgradeTo_2669":{"entryPoint":324,"id":2669,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1873,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1914,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1948,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2079,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3182:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"285:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:124"},"nodeType":"YulFunctionCall","src":"333:12:124"},"nodeType":"YulExpressionStatement","src":"333:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:124"},"nodeType":"YulFunctionCall","src":"302:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:124"},"nodeType":"YulFunctionCall","src":"298:32:124"},"nodeType":"YulIf","src":"295:52:124"},{"nodeType":"YulAssignment","src":"356:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:124"},"nodeType":"YulFunctionCall","src":"366:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:124","type":""}],"src":"215:186:124"},{"body":{"nodeType":"YulBlock","src":"512:559:124","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:124"},"nodeType":"YulFunctionCall","src":"560:12:124"},"nodeType":"YulExpressionStatement","src":"560:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:124"},"nodeType":"YulFunctionCall","src":"529:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:124"},"nodeType":"YulFunctionCall","src":"525:32:124"},"nodeType":"YulIf","src":"522:52:124"},{"nodeType":"YulAssignment","src":"583:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:124"},"nodeType":"YulFunctionCall","src":"593:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:124"},"nodeType":"YulFunctionCall","src":"658:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:124"},"nodeType":"YulFunctionCall","src":"645:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:124"},"nodeType":"YulFunctionCall","src":"743:12:124"},"nodeType":"YulExpressionStatement","src":"743:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:124"},"nodeType":"YulFunctionCall","src":"726:14:124"},"nodeType":"YulIf","src":"723:34:124"},{"nodeType":"YulVariableDeclaration","src":"766:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:124"},"nodeType":"YulFunctionCall","src":"776:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:124"},"nodeType":"YulFunctionCall","src":"848:12:124"},"nodeType":"YulExpressionStatement","src":"848:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:124"},"nodeType":"YulFunctionCall","src":"821:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:124"},"nodeType":"YulFunctionCall","src":"817:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:124"},"nodeType":"YulFunctionCall","src":"810:35:124"},"nodeType":"YulIf","src":"807:55:124"},{"nodeType":"YulVariableDeclaration","src":"871:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:124"},"nodeType":"YulFunctionCall","src":"885:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:124"},"nodeType":"YulFunctionCall","src":"930:12:124"},"nodeType":"YulExpressionStatement","src":"930:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:124"},"nodeType":"YulFunctionCall","src":"913:14:124"},"nodeType":"YulIf","src":"910:34:124"},{"body":{"nodeType":"YulBlock","src":"994:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:124"},"nodeType":"YulFunctionCall","src":"996:12:124"},"nodeType":"YulExpressionStatement","src":"996:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:124"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:124"},"nodeType":"YulFunctionCall","src":"963:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:124"},"nodeType":"YulFunctionCall","src":"959:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:124"},"nodeType":"YulFunctionCall","src":"956:37:124"},"nodeType":"YulIf","src":"953:57:124"},{"nodeType":"YulAssignment","src":"1019:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:124"},"nodeType":"YulFunctionCall","src":"1029:11:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:124"}]},{"nodeType":"YulAssignment","src":"1049:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:124","type":""}],"src":"406:665:124"},{"body":{"nodeType":"YulBlock","src":"1177:125:124","statements":[{"nodeType":"YulAssignment","src":"1187:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:124"},"nodeType":"YulFunctionCall","src":"1195:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:124"},"nodeType":"YulFunctionCall","src":"1240:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:124"},"nodeType":"YulFunctionCall","src":"1222:74:124"},"nodeType":"YulExpressionStatement","src":"1222:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:124","type":""}],"src":"1076:226:124"},{"body":{"nodeType":"YulBlock","src":"1454:124:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1477:3:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1482:6:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1490:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1464:12:124"},"nodeType":"YulFunctionCall","src":"1464:33:124"},"nodeType":"YulExpressionStatement","src":"1464:33:124"},{"nodeType":"YulVariableDeclaration","src":"1506:26:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1520:3:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1525:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1516:3:124"},"nodeType":"YulFunctionCall","src":"1516:16:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1510:2:124","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1548:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1552:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1541:6:124"},"nodeType":"YulFunctionCall","src":"1541:13:124"},"nodeType":"YulExpressionStatement","src":"1541:13:124"},{"nodeType":"YulAssignment","src":"1563:9:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"1570:2:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1563:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1422:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1427:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1435:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1446:3:124","type":""}],"src":"1307:271:124"},{"body":{"nodeType":"YulBlock","src":"1757:244:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1774:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1785:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1767:6:124"},"nodeType":"YulFunctionCall","src":"1767:21:124"},"nodeType":"YulExpressionStatement","src":"1767:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1808:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1819:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1804:3:124"},"nodeType":"YulFunctionCall","src":"1804:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"1824:2:124","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1797:6:124"},"nodeType":"YulFunctionCall","src":"1797:30:124"},"nodeType":"YulExpressionStatement","src":"1797:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1847:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1858:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1843:3:124"},"nodeType":"YulFunctionCall","src":"1843:18:124"},{"hexValue":"43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f","kind":"string","nodeType":"YulLiteral","src":"1863:34:124","type":"","value":"Cannot change the admin of a pro"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1836:6:124"},"nodeType":"YulFunctionCall","src":"1836:62:124"},"nodeType":"YulExpressionStatement","src":"1836:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1918:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1929:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1914:3:124"},"nodeType":"YulFunctionCall","src":"1914:18:124"},{"hexValue":"787920746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"1934:24:124","type":"","value":"xy to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1907:6:124"},"nodeType":"YulFunctionCall","src":"1907:52:124"},"nodeType":"YulExpressionStatement","src":"1907:52:124"},{"nodeType":"YulAssignment","src":"1968:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1980:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1991:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1976:3:124"},"nodeType":"YulFunctionCall","src":"1976:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1968:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1734:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1748:4:124","type":""}],"src":"1583:418:124"},{"body":{"nodeType":"YulBlock","src":"2135:198:124","statements":[{"nodeType":"YulAssignment","src":"2145:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2157:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2168:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2153:3:124"},"nodeType":"YulFunctionCall","src":"2153:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2145:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"2180:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2190:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2184:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2248:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2263:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2271:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2259:3:124"},"nodeType":"YulFunctionCall","src":"2259:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2241:6:124"},"nodeType":"YulFunctionCall","src":"2241:34:124"},"nodeType":"YulExpressionStatement","src":"2241:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2295:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2306:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2291:3:124"},"nodeType":"YulFunctionCall","src":"2291:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2315:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2323:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2311:3:124"},"nodeType":"YulFunctionCall","src":"2311:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2284:6:124"},"nodeType":"YulFunctionCall","src":"2284:43:124"},"nodeType":"YulExpressionStatement","src":"2284:43:124"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2096:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2107:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2115:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2126:4:124","type":""}],"src":"2006:327:124"},{"body":{"nodeType":"YulBlock","src":"2512:240:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2529:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2540:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2522:6:124"},"nodeType":"YulFunctionCall","src":"2522:21:124"},"nodeType":"YulExpressionStatement","src":"2522:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2563:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2574:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2559:3:124"},"nodeType":"YulFunctionCall","src":"2559:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2579:2:124","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2552:6:124"},"nodeType":"YulFunctionCall","src":"2552:30:124"},"nodeType":"YulExpressionStatement","src":"2552:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2602:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2613:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2598:3:124"},"nodeType":"YulFunctionCall","src":"2598:18:124"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"2618:34:124","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2591:6:124"},"nodeType":"YulFunctionCall","src":"2591:62:124"},"nodeType":"YulExpressionStatement","src":"2591:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2673:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2684:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2669:3:124"},"nodeType":"YulFunctionCall","src":"2669:18:124"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"2689:20:124","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2662:6:124"},"nodeType":"YulFunctionCall","src":"2662:48:124"},"nodeType":"YulExpressionStatement","src":"2662:48:124"},{"nodeType":"YulAssignment","src":"2719:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2731:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2742:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2727:3:124"},"nodeType":"YulFunctionCall","src":"2727:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2719:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2489:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2503:4:124","type":""}],"src":"2338:414:124"},{"body":{"nodeType":"YulBlock","src":"2931:249:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2948:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2959:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2941:6:124"},"nodeType":"YulFunctionCall","src":"2941:21:124"},"nodeType":"YulExpressionStatement","src":"2941:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2982:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2993:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2978:3:124"},"nodeType":"YulFunctionCall","src":"2978:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2998:2:124","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2971:6:124"},"nodeType":"YulFunctionCall","src":"2971:30:124"},"nodeType":"YulExpressionStatement","src":"2971:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3021:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3032:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3017:3:124"},"nodeType":"YulFunctionCall","src":"3017:18:124"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"3037:34:124","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3010:6:124"},"nodeType":"YulFunctionCall","src":"3010:62:124"},"nodeType":"YulExpressionStatement","src":"3010:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3092:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3103:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3088:3:124"},"nodeType":"YulFunctionCall","src":"3088:18:124"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"3108:29:124","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3081:6:124"},"nodeType":"YulFunctionCall","src":"3081:57:124"},"nodeType":"YulExpressionStatement","src":"3081:57:124"},{"nodeType":"YulAssignment","src":"3147:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3159:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3170:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3155:3:124"},"nodeType":"YulFunctionCall","src":"3155:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3147:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2908:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2922:4:124","type":""}],"src":"2757:423:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"Cannot change the admin of a pro\")\n        mstore(add(headStart, 96), \"xy to the zero address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146100975780638f283970146100d5578063f851a440146100f55761005a565b80633659cfe6146100645780634f1ef28614610084575b61006261010a565b005b34801561007057600080fd5b5061006261007f36600461077a565b610144565b61006261009236600461079c565b6101ad565b3480156100a357600080fd5b506100ac610295565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100e157600080fd5b506100626100f036600461077a565b610323565b34801561010157600080fd5b506100ac6104c0565b610112610549565b61014261013d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610551565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a5576101a281610575565b50565b6101a261010a565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102885761020b83610575565b60008373ffffffffffffffffffffffffffffffffffffffff16838360405161023492919061081f565b600060405180830381855af49150503d806000811461026f576040519150601f19603f3d011682016040523d82523d6000602084013e610274565b606091505b505090508061028257600080fd5b50505050565b61029061010a565b505050565b60006102bf7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61032061010a565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a55773ffffffffffffffffffffffffffffffffffffffff8116610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104697fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101a2817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006104ea7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b3b151590565b6101426105c2565b3660008037600080366000845af43d6000803e808015610570573d6000f35b3d6000fd5b61057e8161069f565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610417565b803b61072d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610417565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461077557600080fd5b919050565b60006020828403121561078c57600080fd5b61079582610751565b9392505050565b6000806000604084860312156107b157600080fd5b6107ba84610751565b9250602084013567ffffffffffffffff808211156107d757600080fd5b818601915086601f8301126107eb57600080fd5b8135818111156107fa57600080fd5b87602082850101111561080c57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea26469706673582212201ff11193b6002f721b771da18659a8d2bec1af039f8e2efc58680633e41c8f7d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xF5 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0x10A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x77A JUMP JUMPDEST PUSH2 0x144 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x79C JUMP JUMPDEST PUSH2 0x1AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x295 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x77A JUMP JUMPDEST PUSH2 0x323 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x4C0 JUMP JUMPDEST PUSH2 0x112 PUSH2 0x549 JUMP JUMPDEST PUSH2 0x142 PUSH2 0x13D PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x551 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH2 0x1A2 DUP2 PUSH2 0x575 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A2 PUSH2 0x10A JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x288 JUMPI PUSH2 0x20B DUP4 PUSH2 0x575 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x234 SWAP3 SWAP2 SWAP1 PUSH2 0x81F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x274 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x290 PUSH2 0x10A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BF PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x320 PUSH2 0x10A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x469 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1A2 DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x142 PUSH2 0x5C2 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x570 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x57E DUP2 PUSH2 0x69F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x142 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x72D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x795 DUP3 PUSH2 0x751 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7BA DUP5 PUSH2 0x751 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1F CALL GT SWAP4 0xB6 STOP 0x2F PUSH19 0x1B771DA18659A8D2BEC1AF039F8E2EFC586806 CALLER 0xE4 SHR DUP16 PUSH30 0x64736F6C634300080A003300000000000000000000000000000000000000 ","sourceMap":"282:1108:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:22;:9;:11::i;:::-;282:1108:16;2246:103:17;;;;;;;;;;-1:-1:-1;2246:103:17;;;;;:::i;:::-;;:::i;2866:234::-;;;;;;:::i;:::-;;:::i;1566:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:124;1240:55;;;1222:74;;1210:2;1195:18;1566:96:17;;;;;;;1838:224;;;;;;;;;;-1:-1:-1;1838:224:17;;;;;:::i;:::-;;:::i;1424:78::-;;;;;;;;;;;;;:::i;2155:90:22:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:18;1183:11;;1008:196;2222:17:22;2212:9;:28::i;:::-;2155:90::o;2246:103:17:-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2315:29:::1;2326:17;2315:10;:29::i;:::-;2246:103:::0;:::o;1283:76::-;1341:11;:9;:11::i;2866:234::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2983:29:::1;2994:17;2983:10;:29::i;:::-;3019:12;3037:17;:30;;3068:4;;3037:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:55;;;3087:7;3079:16;;;::::0;::::1;;2977:123;2866:234:::0;;;:::o;1283:76::-;1341:11;:9;:11::i;:::-;2866:234;;;:::o;1566:96::-;1618:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;823:66:18;1183:11;;1566:96:17:o;1283:76::-;1341:11;:9;:11::i;:::-;1566:96;:::o;1838:224::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;1908:22:::1;::::0;::::1;1900:89;;;::::0;::::1;::::0;;1785:2:124;1900:89:17::1;::::0;::::1;1767:21:124::0;1824:2;1804:18;;;1797:30;1863:34;1843:18;;;1836:62;1934:24;1914:18;;;1907:52;1976:19;;1900:89:17::1;;;;;;;;;2000:32;2013:8;1002:66:::0;3295:11;;3149:167;2013:8:::1;2000:32;::::0;;2190:42:124;2259:15;;;2241:34;;2311:15;;;2306:2;2291:18;;2284:43;2153:18;2000:32:17::1;;;;;;;2038:19;2048:8;1002:66:::0;3563:22;3432:163;1424:78;1467:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;1002:66:17;3295:11;;1566:96::o;735:341:3:-;1025:20;1063:8;;;735:341::o;1253:135:16:-;1339:44;:42;:44::i;1005:802:22:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:18;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;3670:174:17:-;1002:66;3295:11;3735:22;;:10;:22;;;;3727:85;;;;;;;2540:2:124;3727:85:17;;;2522:21:124;2579:2;2559:18;;;2552:30;2618:34;2598:18;;;2591:62;2689:20;2669:18;;;2662:48;2727:19;;3727:85:17;2338:414:124;1618:334:18;1025:20:3;;1688:127:18;;;;;;;2959:2:124;1688:127:18;;;2941:21:124;2998:2;2978:18;;;2971:30;3037:34;3017:18;;;3010:62;3108:29;3088:18;;;3081:57;3155:19;;1688:127:18;2757:423:124;1688:127:18;823:66;1911:31;1618:334::o;14:196:124:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:124:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:271::-;1490:6;1482;1477:3;1464:33;1446:3;1516:16;;1541:13;;;1516:16;1307:271;-1:-1:-1;1307:271:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"429800","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite","admin()":"infinite","changeAdmin(address)":"infinite","implementation()":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extends from BaseAdminUpgradeabilityProxy with a constructor for initializing the implementation, admin, and init data.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Only the current admin can call this function.\",\"params\":{\"newAdmin\":\"Address to transfer proxy administration to.\"}},\"constructor\":{\"params\":{\"_admin\":\"Address of the proxy administrator.\",\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"address of the initial implementation.\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Upgrade the backing implementation of the proxy. Only the admin can call this function.\",\"params\":{\"newImplementation\":\"Address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"Address of the new implementation.\"}}},\"title\":\"AdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Contract constructor.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol\":\"AdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title AdminUpgradeabilityProxy\\n * @dev Extends from BaseAdminUpgradeabilityProxy with a constructor for\\n * initializing the implementation, admin, and init data.\\n */\\ncontract AdminUpgradeabilityProxy is BaseAdminUpgradeabilityProxy, UpgradeabilityProxy {\\n  /**\\n   * Contract constructor.\\n   * @param _logic address of the initial implementation.\\n   * @param _admin Address of the proxy administrator.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  constructor(\\n    address _logic,\\n    address _admin,\\n    bytes memory _data\\n  ) payable UpgradeabilityProxy(_logic, _data) {\\n    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));\\n    _setAdmin(_admin);\\n  }\\n\\n  /**\\n   * @dev Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal override(BaseAdminUpgradeabilityProxy, Proxy) {\\n    BaseAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x457275bca2156bd8e32dd43c09ec5e9a83e7e6f585c736adaf38b392d7e53b35\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './UpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseAdminUpgradeabilityProxy\\n * @dev This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Emitted when the administration has been transferred.\\n   * @param previousAdmin Address of the previous admin.\\n   * @param newAdmin Address of the new admin.\\n   */\\n  event AdminChanged(address previousAdmin, address newAdmin);\\n\\n  /**\\n   * @dev Storage slot with the admin of the contract.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant ADMIN_SLOT =\\n    0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n  /**\\n   * @dev Modifier to check whether the `msg.sender` is the admin.\\n   * If it is, it will run the function. Otherwise, it will delegate the call\\n   * to the implementation.\\n   */\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin()) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin();\\n  }\\n\\n  /**\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @dev Changes the admin of the proxy.\\n   * Only the current admin can call this function.\\n   * @param newAdmin Address to transfer proxy administration to.\\n   */\\n  function changeAdmin(address newAdmin) external ifAdmin {\\n    require(newAdmin != address(0), 'Cannot change the admin of a proxy to the zero address');\\n    emit AdminChanged(_admin(), newAdmin);\\n    _setAdmin(newAdmin);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy.\\n   * Only the admin can call this function.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * This is useful to initialize the proxied contract.\\n   * @param newImplementation Address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @return adm The admin slot.\\n   */\\n  function _admin() internal view returns (address adm) {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      adm := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Sets the address of the proxy admin.\\n   * @param newAdmin Address of the new proxy admin.\\n   */\\n  function _setAdmin(address newAdmin) internal {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newAdmin)\\n    }\\n  }\\n\\n  /**\\n   * @dev Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin(), 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xad78efab85afdf5c383699fca5fd3013451d27a77911c6c2317ae688d32de3bc\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title UpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\\n * implementation and init data.\\n */\\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract constructor.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  constructor(address _logic, bytes memory _data) payable {\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa19d50b90ce153fb36d266c926e09db8dc8f110bdda1ae4b4cf2ecd02c26b81c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"Contract constructor."}},"version":1}}},"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol":{"BaseAdminUpgradeabilityProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"This contract combines an upgradeability proxy with an authorization mechanism for administrative tasks. All external functions in this contract must be guarded by the `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity feature proposal that would enable this to be done automatically.","events":{"AdminChanged(address,address)":{"details":"Emitted when the administration has been transferred.","params":{"newAdmin":"Address of the new admin.","previousAdmin":"Address of the previous admin."}}},"kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"changeAdmin(address)":{"details":"Changes the admin of the proxy. Only the current admin can call this function.","params":{"newAdmin":"Address to transfer proxy administration to."}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"upgradeTo(address)":{"details":"Upgrade the backing implementation of the proxy. Only the admin can call this function.","params":{"newImplementation":"Address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"Address of the new implementation."}}},"stateVariables":{"ADMIN_SLOT":{"details":"Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor."}},"title":"BaseAdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610857806100206000396000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146100975780638f283970146100d5578063f851a440146100f55761005a565b80633659cfe6146100645780634f1ef28614610084575b61006261010a565b005b34801561007057600080fd5b5061006261007f36600461076c565b610144565b61006261009236600461078e565b6101ad565b3480156100a357600080fd5b506100ac610295565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100e157600080fd5b506100626100f036600461076c565b610323565b34801561010157600080fd5b506100ac6104c0565b610112610543565b61014261013d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610620565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a5576101a281610644565b50565b6101a261010a565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102885761020b83610644565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051610234929190610811565b600060405180830381855af49150503d806000811461026f576040519150601f19603f3d011682016040523d82523d6000602084013e610274565b606091505b505090508061028257600080fd5b50505050565b61029061010a565b505050565b60006102bf7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61032061010a565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a55773ffffffffffffffffffffffffffffffffffffffff8116610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104697fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101a2817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006104ea7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610417565b3660008037600080366000845af43d6000803e80801561063f573d6000f35b3d6000fd5b61064d81610691565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b61071f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610417565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461076757600080fd5b919050565b60006020828403121561077e57600080fd5b61078782610743565b9392505050565b6000806000604084860312156107a357600080fd5b6107ac84610743565b9250602084013567ffffffffffffffff808211156107c957600080fd5b818601915086601f8301126107dd57600080fd5b8135818111156107ec57600080fd5b8760208285010111156107fe57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea264697066735822122057d0ea84383d8464c3b23bf33e5a147a3ebcdf62fa19924bb9d50a78c647badc64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x857 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xF5 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0x10A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0x144 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x78E JUMP JUMPDEST PUSH2 0x1AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x295 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0x323 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x4C0 JUMP JUMPDEST PUSH2 0x112 PUSH2 0x543 JUMP JUMPDEST PUSH2 0x142 PUSH2 0x13D PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x620 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH2 0x1A2 DUP2 PUSH2 0x644 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A2 PUSH2 0x10A JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x288 JUMPI PUSH2 0x20B DUP4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x234 SWAP3 SWAP2 SWAP1 PUSH2 0x811 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x274 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x290 PUSH2 0x10A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BF PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x320 PUSH2 0x10A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x469 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1A2 DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x142 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x63F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x64D DUP2 PUSH2 0x691 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x71F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x767 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x787 DUP3 PUSH2 0x743 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AC DUP5 PUSH2 0x743 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x7FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPI 0xD0 0xEA DUP5 CODESIZE RETURNDATASIZE DUP5 PUSH5 0xC3B23BF33E GAS EQ PUSH27 0x3EBCDF62FA19924BB9D50A78C647BADC64736F6C634300080A0033 ","sourceMap":"462:3384:17:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3018":{"entryPoint":null,"id":3018,"parameterSlots":0,"returnSlots":0},"@_admin_2707":{"entryPoint":null,"id":2707,"parameterSlots":0,"returnSlots":1},"@_delegate_3032":{"entryPoint":1568,"id":3032,"parameterSlots":1,"returnSlots":0},"@_fallback_3050":{"entryPoint":266,"id":3050,"parameterSlots":0,"returnSlots":0},"@_implementation_2769":{"entryPoint":null,"id":2769,"parameterSlots":0,"returnSlots":1},"@_setAdmin_2719":{"entryPoint":null,"id":2719,"parameterSlots":1,"returnSlots":0},"@_setImplementation_2804":{"entryPoint":1681,"id":2804,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2784":{"entryPoint":1604,"id":2784,"parameterSlots":1,"returnSlots":0},"@_willFallback_2739":{"entryPoint":1347,"id":2739,"parameterSlots":0,"returnSlots":0},"@_willFallback_3037":{"entryPoint":null,"id":3037,"parameterSlots":0,"returnSlots":0},"@admin_2615":{"entryPoint":1216,"id":2615,"parameterSlots":0,"returnSlots":1},"@changeAdmin_2656":{"entryPoint":803,"id":2656,"parameterSlots":1,"returnSlots":0},"@implementation_2627":{"entryPoint":661,"id":2627,"parameterSlots":0,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_2695":{"entryPoint":429,"id":2695,"parameterSlots":3,"returnSlots":0},"@upgradeTo_2669":{"entryPoint":324,"id":2669,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1859,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1900,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1934,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2065,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3182:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"285:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:124"},"nodeType":"YulFunctionCall","src":"333:12:124"},"nodeType":"YulExpressionStatement","src":"333:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:124"},"nodeType":"YulFunctionCall","src":"302:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:124"},"nodeType":"YulFunctionCall","src":"298:32:124"},"nodeType":"YulIf","src":"295:52:124"},{"nodeType":"YulAssignment","src":"356:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:124"},"nodeType":"YulFunctionCall","src":"366:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:124","type":""}],"src":"215:186:124"},{"body":{"nodeType":"YulBlock","src":"512:559:124","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:124"},"nodeType":"YulFunctionCall","src":"560:12:124"},"nodeType":"YulExpressionStatement","src":"560:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:124"},"nodeType":"YulFunctionCall","src":"529:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:124"},"nodeType":"YulFunctionCall","src":"525:32:124"},"nodeType":"YulIf","src":"522:52:124"},{"nodeType":"YulAssignment","src":"583:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:124"},"nodeType":"YulFunctionCall","src":"593:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:124"},"nodeType":"YulFunctionCall","src":"658:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:124"},"nodeType":"YulFunctionCall","src":"645:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:124"},"nodeType":"YulFunctionCall","src":"743:12:124"},"nodeType":"YulExpressionStatement","src":"743:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:124"},"nodeType":"YulFunctionCall","src":"726:14:124"},"nodeType":"YulIf","src":"723:34:124"},{"nodeType":"YulVariableDeclaration","src":"766:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:124"},"nodeType":"YulFunctionCall","src":"776:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:124"},"nodeType":"YulFunctionCall","src":"848:12:124"},"nodeType":"YulExpressionStatement","src":"848:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:124"},"nodeType":"YulFunctionCall","src":"821:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:124"},"nodeType":"YulFunctionCall","src":"817:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:124"},"nodeType":"YulFunctionCall","src":"810:35:124"},"nodeType":"YulIf","src":"807:55:124"},{"nodeType":"YulVariableDeclaration","src":"871:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:124"},"nodeType":"YulFunctionCall","src":"885:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:124"},"nodeType":"YulFunctionCall","src":"930:12:124"},"nodeType":"YulExpressionStatement","src":"930:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:124"},"nodeType":"YulFunctionCall","src":"913:14:124"},"nodeType":"YulIf","src":"910:34:124"},{"body":{"nodeType":"YulBlock","src":"994:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:124"},"nodeType":"YulFunctionCall","src":"996:12:124"},"nodeType":"YulExpressionStatement","src":"996:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:124"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:124"},"nodeType":"YulFunctionCall","src":"963:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:124"},"nodeType":"YulFunctionCall","src":"959:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:124"},"nodeType":"YulFunctionCall","src":"956:37:124"},"nodeType":"YulIf","src":"953:57:124"},{"nodeType":"YulAssignment","src":"1019:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:124"},"nodeType":"YulFunctionCall","src":"1029:11:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:124"}]},{"nodeType":"YulAssignment","src":"1049:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:124","type":""}],"src":"406:665:124"},{"body":{"nodeType":"YulBlock","src":"1177:125:124","statements":[{"nodeType":"YulAssignment","src":"1187:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:124"},"nodeType":"YulFunctionCall","src":"1195:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:124"},"nodeType":"YulFunctionCall","src":"1240:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:124"},"nodeType":"YulFunctionCall","src":"1222:74:124"},"nodeType":"YulExpressionStatement","src":"1222:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:124","type":""}],"src":"1076:226:124"},{"body":{"nodeType":"YulBlock","src":"1454:124:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1477:3:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1482:6:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1490:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1464:12:124"},"nodeType":"YulFunctionCall","src":"1464:33:124"},"nodeType":"YulExpressionStatement","src":"1464:33:124"},{"nodeType":"YulVariableDeclaration","src":"1506:26:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1520:3:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1525:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1516:3:124"},"nodeType":"YulFunctionCall","src":"1516:16:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1510:2:124","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1548:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1552:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1541:6:124"},"nodeType":"YulFunctionCall","src":"1541:13:124"},"nodeType":"YulExpressionStatement","src":"1541:13:124"},{"nodeType":"YulAssignment","src":"1563:9:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"1570:2:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1563:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1422:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1427:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1435:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1446:3:124","type":""}],"src":"1307:271:124"},{"body":{"nodeType":"YulBlock","src":"1757:244:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1774:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1785:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1767:6:124"},"nodeType":"YulFunctionCall","src":"1767:21:124"},"nodeType":"YulExpressionStatement","src":"1767:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1808:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1819:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1804:3:124"},"nodeType":"YulFunctionCall","src":"1804:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"1824:2:124","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1797:6:124"},"nodeType":"YulFunctionCall","src":"1797:30:124"},"nodeType":"YulExpressionStatement","src":"1797:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1847:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1858:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1843:3:124"},"nodeType":"YulFunctionCall","src":"1843:18:124"},{"hexValue":"43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f","kind":"string","nodeType":"YulLiteral","src":"1863:34:124","type":"","value":"Cannot change the admin of a pro"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1836:6:124"},"nodeType":"YulFunctionCall","src":"1836:62:124"},"nodeType":"YulExpressionStatement","src":"1836:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1918:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1929:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1914:3:124"},"nodeType":"YulFunctionCall","src":"1914:18:124"},{"hexValue":"787920746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"1934:24:124","type":"","value":"xy to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1907:6:124"},"nodeType":"YulFunctionCall","src":"1907:52:124"},"nodeType":"YulExpressionStatement","src":"1907:52:124"},{"nodeType":"YulAssignment","src":"1968:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1980:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1991:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1976:3:124"},"nodeType":"YulFunctionCall","src":"1976:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1968:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1734:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1748:4:124","type":""}],"src":"1583:418:124"},{"body":{"nodeType":"YulBlock","src":"2135:198:124","statements":[{"nodeType":"YulAssignment","src":"2145:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2157:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2168:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2153:3:124"},"nodeType":"YulFunctionCall","src":"2153:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2145:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"2180:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2190:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2184:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2248:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2263:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2271:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2259:3:124"},"nodeType":"YulFunctionCall","src":"2259:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2241:6:124"},"nodeType":"YulFunctionCall","src":"2241:34:124"},"nodeType":"YulExpressionStatement","src":"2241:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2295:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2306:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2291:3:124"},"nodeType":"YulFunctionCall","src":"2291:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2315:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2323:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2311:3:124"},"nodeType":"YulFunctionCall","src":"2311:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2284:6:124"},"nodeType":"YulFunctionCall","src":"2284:43:124"},"nodeType":"YulExpressionStatement","src":"2284:43:124"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2096:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2107:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2115:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2126:4:124","type":""}],"src":"2006:327:124"},{"body":{"nodeType":"YulBlock","src":"2512:240:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2529:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2540:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2522:6:124"},"nodeType":"YulFunctionCall","src":"2522:21:124"},"nodeType":"YulExpressionStatement","src":"2522:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2563:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2574:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2559:3:124"},"nodeType":"YulFunctionCall","src":"2559:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2579:2:124","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2552:6:124"},"nodeType":"YulFunctionCall","src":"2552:30:124"},"nodeType":"YulExpressionStatement","src":"2552:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2602:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2613:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2598:3:124"},"nodeType":"YulFunctionCall","src":"2598:18:124"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"2618:34:124","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2591:6:124"},"nodeType":"YulFunctionCall","src":"2591:62:124"},"nodeType":"YulExpressionStatement","src":"2591:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2673:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2684:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2669:3:124"},"nodeType":"YulFunctionCall","src":"2669:18:124"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"2689:20:124","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2662:6:124"},"nodeType":"YulFunctionCall","src":"2662:48:124"},"nodeType":"YulExpressionStatement","src":"2662:48:124"},{"nodeType":"YulAssignment","src":"2719:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2731:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2742:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2727:3:124"},"nodeType":"YulFunctionCall","src":"2727:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2719:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2489:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2503:4:124","type":""}],"src":"2338:414:124"},{"body":{"nodeType":"YulBlock","src":"2931:249:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2948:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2959:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2941:6:124"},"nodeType":"YulFunctionCall","src":"2941:21:124"},"nodeType":"YulExpressionStatement","src":"2941:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2982:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2993:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2978:3:124"},"nodeType":"YulFunctionCall","src":"2978:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2998:2:124","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2971:6:124"},"nodeType":"YulFunctionCall","src":"2971:30:124"},"nodeType":"YulExpressionStatement","src":"2971:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3021:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3032:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3017:3:124"},"nodeType":"YulFunctionCall","src":"3017:18:124"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"3037:34:124","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3010:6:124"},"nodeType":"YulFunctionCall","src":"3010:62:124"},"nodeType":"YulExpressionStatement","src":"3010:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3092:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3103:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3088:3:124"},"nodeType":"YulFunctionCall","src":"3088:18:124"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"3108:29:124","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3081:6:124"},"nodeType":"YulFunctionCall","src":"3081:57:124"},"nodeType":"YulExpressionStatement","src":"3081:57:124"},{"nodeType":"YulAssignment","src":"3147:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3159:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3170:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3155:3:124"},"nodeType":"YulFunctionCall","src":"3155:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3147:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2908:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2922:4:124","type":""}],"src":"2757:423:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"Cannot change the admin of a pro\")\n        mstore(add(headStart, 96), \"xy to the zero address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146100975780638f283970146100d5578063f851a440146100f55761005a565b80633659cfe6146100645780634f1ef28614610084575b61006261010a565b005b34801561007057600080fd5b5061006261007f36600461076c565b610144565b61006261009236600461078e565b6101ad565b3480156100a357600080fd5b506100ac610295565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100e157600080fd5b506100626100f036600461076c565b610323565b34801561010157600080fd5b506100ac6104c0565b610112610543565b61014261013d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610620565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a5576101a281610644565b50565b6101a261010a565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102885761020b83610644565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051610234929190610811565b600060405180830381855af49150503d806000811461026f576040519150601f19603f3d011682016040523d82523d6000602084013e610274565b606091505b505090508061028257600080fd5b50505050565b61029061010a565b505050565b60006102bf7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61032061010a565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a55773ffffffffffffffffffffffffffffffffffffffff8116610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104697fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101a2817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006104ea7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610417565b3660008037600080366000845af43d6000803e80801561063f573d6000f35b3d6000fd5b61064d81610691565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b61071f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610417565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461076757600080fd5b919050565b60006020828403121561077e57600080fd5b61078782610743565b9392505050565b6000806000604084860312156107a357600080fd5b6107ac84610743565b9250602084013567ffffffffffffffff808211156107c957600080fd5b818601915086601f8301126107dd57600080fd5b8135818111156107ec57600080fd5b8760208285010111156107fe57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea264697066735822122057d0ea84383d8464c3b23bf33e5a147a3ebcdf62fa19924bb9d50a78c647badc64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xF5 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0x10A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0x144 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x78E JUMP JUMPDEST PUSH2 0x1AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x295 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0x323 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x4C0 JUMP JUMPDEST PUSH2 0x112 PUSH2 0x543 JUMP JUMPDEST PUSH2 0x142 PUSH2 0x13D PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x620 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH2 0x1A2 DUP2 PUSH2 0x644 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A2 PUSH2 0x10A JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x288 JUMPI PUSH2 0x20B DUP4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x234 SWAP3 SWAP2 SWAP1 PUSH2 0x811 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x274 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x290 PUSH2 0x10A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BF PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x320 PUSH2 0x10A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x469 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1A2 DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x142 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x63F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x64D DUP2 PUSH2 0x691 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x71F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x767 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x787 DUP3 PUSH2 0x743 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AC DUP5 PUSH2 0x743 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x7FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPI 0xD0 0xEA DUP5 CODESIZE RETURNDATASIZE DUP5 PUSH5 0xC3B23BF33E GAS EQ PUSH27 0x3EBCDF62FA19924BB9D50A78C647BADC64736F6C634300080A0033 ","sourceMap":"462:3384:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:22;:9;:11::i;:::-;462:3384:17;2246:103;;;;;;;;;;-1:-1:-1;2246:103:17;;;;;:::i;:::-;;:::i;2866:234::-;;;;;;:::i;:::-;;:::i;1566:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:124;1240:55;;;1222:74;;1210:2;1195:18;1566:96:17;;;;;;;1838:224;;;;;;;;;;-1:-1:-1;1838:224:17;;;;;:::i;:::-;;:::i;1424:78::-;;;;;;;;;;;;;:::i;2155:90:22:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:18;1183:11;;1008:196;2222:17:22;2212:9;:28::i;:::-;2155:90::o;2246:103:17:-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2315:29:::1;2326:17;2315:10;:29::i;:::-;2246:103:::0;:::o;1283:76::-;1341:11;:9;:11::i;2866:234::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2983:29:::1;2994:17;2983:10;:29::i;:::-;3019:12;3037:17;:30;;3068:4;;3037:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:55;;;3087:7;3079:16;;;::::0;::::1;;2977:123;2866:234:::0;;;:::o;1283:76::-;1341:11;:9;:11::i;:::-;2866:234;;;:::o;1566:96::-;1618:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;823:66:18;1183:11;;1566:96:17:o;1283:76::-;1341:11;:9;:11::i;:::-;1566:96;:::o;1838:224::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;1908:22:::1;::::0;::::1;1900:89;;;::::0;::::1;::::0;;1785:2:124;1900:89:17::1;::::0;::::1;1767:21:124::0;1824:2;1804:18;;;1797:30;1863:34;1843:18;;;1836:62;1934:24;1914:18;;;1907:52;1976:19;;1900:89:17::1;;;;;;;;;2000:32;2013:8;1002:66:::0;3295:11;;3149:167;2013:8:::1;2000:32;::::0;;2190:42:124;2259:15;;;2241:34;;2311:15;;;2306:2;2291:18;;2284:43;2153:18;2000:32:17::1;;;;;;;2038:19;2048:8;1002:66:::0;3563:22;3432:163;1424:78;1467:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;1002:66:17;3295:11;;1566:96::o;3670:174::-;1002:66;3295:11;3735:22;;:10;:22;;;;3727:85;;;;;;;2540:2:124;3727:85:17;;;2522:21:124;2579:2;2559:18;;;2552:30;2618:34;2598:18;;;2591:62;2689:20;2669:18;;;2662:48;2727:19;;3727:85:17;2338:414:124;1005:802:22;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:18;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;1618:334::-;1025:20:3;;1688:127:18;;;;;;;2959:2:124;1688:127:18;;;2941:21:124;2998:2;2978:18;;;2971:30;3037:34;3017:18;;;3010:62;3108:29;3088:18;;;3081:57;3155:19;;1688:127:18;2757:423:124;1688:127:18;823:66;1911:31;1618:334::o;14:196:124:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:124:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:271::-;1490:6;1482;1477:3;1464:33;1446:3;1516:16;;1541:13;;;1516:16;1307:271;-1:-1:-1;1307:271:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"427000","executionCost":"461","totalCost":"427461"},"external":{"":"infinite","admin()":"infinite","changeAdmin(address)":"infinite","implementation()":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_admin()":"infinite","_setAdmin(address)":"infinite","_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract combines an upgradeability proxy with an authorization mechanism for administrative tasks. All external functions in this contract must be guarded by the `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity feature proposal that would enable this to be done automatically.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the administration has been transferred.\",\"params\":{\"newAdmin\":\"Address of the new admin.\",\"previousAdmin\":\"Address of the previous admin.\"}}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Only the current admin can call this function.\",\"params\":{\"newAdmin\":\"Address to transfer proxy administration to.\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Upgrade the backing implementation of the proxy. Only the admin can call this function.\",\"params\":{\"newImplementation\":\"Address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"Address of the new implementation.\"}}},\"stateVariables\":{\"ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"title\":\"BaseAdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol\":\"BaseAdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './UpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseAdminUpgradeabilityProxy\\n * @dev This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Emitted when the administration has been transferred.\\n   * @param previousAdmin Address of the previous admin.\\n   * @param newAdmin Address of the new admin.\\n   */\\n  event AdminChanged(address previousAdmin, address newAdmin);\\n\\n  /**\\n   * @dev Storage slot with the admin of the contract.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant ADMIN_SLOT =\\n    0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n  /**\\n   * @dev Modifier to check whether the `msg.sender` is the admin.\\n   * If it is, it will run the function. Otherwise, it will delegate the call\\n   * to the implementation.\\n   */\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin()) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin();\\n  }\\n\\n  /**\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @dev Changes the admin of the proxy.\\n   * Only the current admin can call this function.\\n   * @param newAdmin Address to transfer proxy administration to.\\n   */\\n  function changeAdmin(address newAdmin) external ifAdmin {\\n    require(newAdmin != address(0), 'Cannot change the admin of a proxy to the zero address');\\n    emit AdminChanged(_admin(), newAdmin);\\n    _setAdmin(newAdmin);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy.\\n   * Only the admin can call this function.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * This is useful to initialize the proxied contract.\\n   * @param newImplementation Address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @return adm The admin slot.\\n   */\\n  function _admin() internal view returns (address adm) {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      adm := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Sets the address of the proxy admin.\\n   * @param newAdmin Address of the new proxy admin.\\n   */\\n  function _setAdmin(address newAdmin) internal {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newAdmin)\\n    }\\n  }\\n\\n  /**\\n   * @dev Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin(), 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xad78efab85afdf5c383699fca5fd3013451d27a77911c6c2317ae688d32de3bc\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title UpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\\n * implementation and init data.\\n */\\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract constructor.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  constructor(address _logic, bytes memory _data) payable {\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa19d50b90ce153fb36d266c926e09db8dc8f110bdda1ae4b4cf2ecd02c26b81c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol":{"BaseUpgradeabilityProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"}],"devdoc":{"details":"This contract implements a proxy that allows to change the implementation address to which it will delegate. Such a change is called an implementation upgrade.","events":{"Upgraded(address)":{"details":"Emitted when the implementation is upgraded.","params":{"implementation":"Address of the new implementation."}}},"kind":"dev","methods":{},"stateVariables":{"IMPLEMENTATION_SLOT":{"details":"Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."}},"title":"BaseUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b5060948061001e6000396000f3fe6080604052600a600c565b005b603960357f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b603b565b565b3660008037600080366000845af43d6000803e8080156059573d6000f35b3d6000fdfea26469706673582212206ed40777d784fa472aed58d1150b91e36c194d20a148d7eb729a2bd67dd3f5d464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x94 DUP1 PUSH2 0x1E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x39 PUSH1 0x35 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3B JUMP JUMPDEST JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x59 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0xD40777D784FA472AED58D1150B91E3 PUSH13 0x194D20A148D7EB729A2BD67DD3 CREATE2 0xD4 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"336:1618:18:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3018":{"entryPoint":null,"id":3018,"parameterSlots":0,"returnSlots":0},"@_delegate_3032":{"entryPoint":59,"id":3032,"parameterSlots":1,"returnSlots":0},"@_fallback_3050":{"entryPoint":12,"id":3050,"parameterSlots":0,"returnSlots":0},"@_implementation_2769":{"entryPoint":null,"id":2769,"parameterSlots":0,"returnSlots":1},"@_willFallback_3037":{"entryPoint":null,"id":3037,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600a600c565b005b603960357f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b603b565b565b3660008037600080366000845af43d6000803e8080156059573d6000f35b3d6000fdfea26469706673582212206ed40777d784fa472aed58d1150b91e36c194d20a148d7eb729a2bd67dd3f5d464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x39 PUSH1 0x35 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3B JUMP JUMPDEST JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x59 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0xD40777D784FA472AED58D1150B91E3 PUSH13 0x194D20A148D7EB729A2BD67DD3 CREATE2 0xD4 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"336:1618:18:-:0;;;572:11:22;:9;:11::i;:::-;336:1618:18;2155:90:22;2212:28;2222:17;823:66:18;1183:11;;1008:196;2222:17:22;2212:9;:28::i;:::-;2155:90::o;1005:802::-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27"},"gasEstimates":{"creation":{"codeDepositCost":"29600","executionCost":"81","totalCost":"29681"},"external":{"":"infinite"},"internal":{"_implementation()":"infinite","_setImplementation(address)":"infinite","_upgradeTo(address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that allows to change the implementation address to which it will delegate. Such a change is called an implementation upgrade.\",\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\",\"params\":{\"implementation\":\"Address of the new implementation.\"}}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"title\":\"BaseUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":\"BaseUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol":{"Initializable":{"abi":[],"devdoc":{"details":"Helper contract to support initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier. WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.","kind":"dev","methods":{},"stateVariables":{"initialized":{"details":"Indicates that the contract has been initialized."},"initializing":{"details":"Indicates that the contract is in the process of being initialized."}},"title":"Initializable","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822122069b994770256ffe2a8257eee859f3ace2002c8b993ea86f845f7a3a4c317b92c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xB994770256FFE2A8257E 0xEE DUP6 SWAP16 GASPRICE 0xCE KECCAK256 MUL 0xC8 0xB9 SWAP4 0xEA DUP7 0xF8 GASLIMIT 0xF7 LOG3 LOG4 0xC3 OR 0xB9 0x2C PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"684:1386:19:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea264697066735822122069b994770256ffe2a8257eee859f3ace2002c8b993ea86f845f7a3a4c317b92c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xB994770256FFE2A8257E 0xEE DUP6 SWAP16 GASPRICE 0xCE KECCAK256 MUL 0xC8 0xB9 SWAP4 0xEA DUP7 0xF8 GASLIMIT 0xF7 LOG3 LOG4 0xC3 OR 0xB9 0x2C PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"684:1386:19:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"66","totalCost":"12666"},"internal":{"isConstructor()":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper contract to support initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier. WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"initialized\":{\"details\":\"Indicates that the contract has been initialized.\"},\"initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"title\":\"Initializable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Initializable\\n *\\n * @dev Helper contract to support initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\ncontract Initializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  bool private initialized;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    require(\\n      initializing || isConstructor() || !initialized,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      initialized = true;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /// @dev Returns true if and only if the function is running in the constructor\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x8e345ed23eb38f492a21435190026108638882021e08bcbe7f38b51b885624bd\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2811,"contract":"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol:Initializable","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2814,"contract":"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol:Initializable","label":"initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2872,"contract":"contracts/dependencies/openzeppelin/upgradeability/Initializable.sol:Initializable","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol":{"InitializableAdminUpgradeabilityProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"logic","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"Extends from BaseAdminUpgradeabilityProxy with an initializer for initializing the implementation, admin, and init data.","kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"changeAdmin(address)":{"details":"Changes the admin of the proxy. Only the current admin can call this function.","params":{"newAdmin":"Address to transfer proxy administration to."}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"initialize(address,address,bytes)":{"params":{"admin":"Address of the proxy administrator.","data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","logic":"address of the initial implementation."}},"initialize(address,bytes)":{"details":"Contract initializer.","params":{"_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"Address of the initial implementation."}},"upgradeTo(address)":{"details":"Upgrade the backing implementation of the proxy. Only the admin can call this function.","params":{"newImplementation":"Address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"Address of the new implementation."}}},"title":"InitializableAdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610cca806100206000396000f3fe6080604052600436106100705760003560e01c80638f2839701161004e5780638f283970146100eb578063cf7a1d771461010b578063d1f578941461011e578063f851a4401461013157610070565b80633659cfe61461007a5780634f1ef2861461009a5780635c60da1b146100ad575b610078610146565b005b34801561008657600080fd5b506100786100953660046109b1565b610180565b6100786100a83660046109d3565b6101e9565b3480156100b957600080fd5b506100c26102d1565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f757600080fd5b506100786101063660046109b1565b61035f565b610078610119366004610b30565b6104fc565b61007861012c366004610b8e565b6105d1565b34801561013d57600080fd5b506100c26106fd565b61014e610780565b61017e6101797f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610788565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101e1576101de816107ac565b50565b6101de610146565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102c457610247836107ac565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051610270929190610bdc565b600060405180830381855af49150503d80600081146102ab576040519150601f19603f3d011682016040523d82523d6000602084013e6102b0565b606091505b50509050806102be57600080fd5b50505050565b6102cc610146565b505050565b60006102fb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561035457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61035c610146565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101e15773ffffffffffffffffffffffffffffffffffffffff811661045c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101de817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461054657600080fd5b61055083826105d1565b61057b60017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610bec565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146105a9576105a9610c2a565b6102cc827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105fb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461061b57600080fd5b61064660017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610bec565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461067457610674610c2a565b61067d826107f9565b8051156106f95760008273ffffffffffffffffffffffffffffffffffffffff16826040516106ab9190610c59565b600060405180830381855af49150503d80600081146106e6576040519150601f19603f3d011682016040523d82523d6000602084013e6106eb565b606091505b50509050806102cc57600080fd5b5050565b60006107277fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561035457507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61017e6108ab565b3660008037600080366000845af43d6000803e8080156107a7573d6000f35b3d6000fd5b6107b5816107f9565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610453565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561017e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610453565b803573ffffffffffffffffffffffffffffffffffffffff811681146109ac57600080fd5b919050565b6000602082840312156109c357600080fd5b6109cc82610988565b9392505050565b6000806000604084860312156109e857600080fd5b6109f184610988565b9250602084013567ffffffffffffffff80821115610a0e57600080fd5b818601915086601f830112610a2257600080fd5b813581811115610a3157600080fd5b876020828501011115610a4357600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610a9657600080fd5b813567ffffffffffffffff80821115610ab157610ab1610a56565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610af757610af7610a56565b81604052838152866020858801011115610b1057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610b4557600080fd5b610b4e84610988565b9250610b5c60208501610988565b9150604084013567ffffffffffffffff811115610b7857600080fd5b610b8486828701610a85565b9150509250925092565b60008060408385031215610ba157600080fd5b610baa83610988565b9150602083013567ffffffffffffffff811115610bc657600080fd5b610bd285828601610a85565b9150509250929050565b8183823760009101908152919050565b600082821015610c25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015610c7a5760208186018101518583015201610c60565b81811115610c89576000828501525b50919091019291505056fea26469706673582212207951501cf514337a52ca186e53c41288e023637ff2c5748169d4b05dab82f5fb64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCCA DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x70 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8F283970 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xEB JUMPI DUP1 PUSH4 0xCF7A1D77 EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x131 JUMPI PUSH2 0x70 JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x9A JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xAD JUMPI JUMPDEST PUSH2 0x78 PUSH2 0x146 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78 PUSH2 0x95 CALLDATASIZE PUSH1 0x4 PUSH2 0x9B1 JUMP JUMPDEST PUSH2 0x180 JUMP JUMPDEST PUSH2 0x78 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x9D3 JUMP JUMPDEST PUSH2 0x1E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC2 PUSH2 0x2D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78 PUSH2 0x106 CALLDATASIZE PUSH1 0x4 PUSH2 0x9B1 JUMP JUMPDEST PUSH2 0x35F JUMP JUMPDEST PUSH2 0x78 PUSH2 0x119 CALLDATASIZE PUSH1 0x4 PUSH2 0xB30 JUMP JUMPDEST PUSH2 0x4FC JUMP JUMPDEST PUSH2 0x78 PUSH2 0x12C CALLDATASIZE PUSH1 0x4 PUSH2 0xB8E JUMP JUMPDEST PUSH2 0x5D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC2 PUSH2 0x6FD JUMP JUMPDEST PUSH2 0x14E PUSH2 0x780 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x179 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x788 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E1 JUMPI PUSH2 0x1DE DUP2 PUSH2 0x7AC JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1DE PUSH2 0x146 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2C4 JUMPI PUSH2 0x247 DUP4 PUSH2 0x7AC JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x270 SWAP3 SWAP2 SWAP1 PUSH2 0xBDC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2AB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2B0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2CC PUSH2 0x146 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FB PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x354 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x35C PUSH2 0x146 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x45C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x4A5 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1DE DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x526 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x550 DUP4 DUP3 PUSH2 0x5D1 JUMP JUMPDEST PUSH2 0x57B PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH2 0xBEC JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 EQ PUSH2 0x5A9 JUMPI PUSH2 0x5A9 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x2CC DUP3 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FB PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x646 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0xBEC JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x674 JUMPI PUSH2 0x674 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x67D DUP3 PUSH2 0x7F9 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x6F9 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x6AB SWAP2 SWAP1 PUSH2 0xC59 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6E6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6EB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x727 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x354 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x8AB JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x7A7 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x7B5 DUP2 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x887 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x453 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x17E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x453 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x9AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9CC DUP3 PUSH2 0x988 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9F1 DUP5 PUSH2 0x988 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xA0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xAB1 JUMPI PUSH2 0xAB1 PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xAF7 JUMPI PUSH2 0xAF7 PUSH2 0xA56 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xB10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4E DUP5 PUSH2 0x988 JUMP JUMPDEST SWAP3 POP PUSH2 0xB5C PUSH1 0x20 DUP6 ADD PUSH2 0x988 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB84 DUP7 DUP3 DUP8 ADD PUSH2 0xA85 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBAA DUP4 PUSH2 0x988 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBD2 DUP6 DUP3 DUP7 ADD PUSH2 0xA85 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC25 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC7A JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0xC60 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xC89 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH26 0x51501CF514337A52CA186E53C41288E023637FF2C5748169D4B0 0x5D 0xAB DUP3 CREATE2 0xFB PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"345:1203:20:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3018":{"entryPoint":null,"id":3018,"parameterSlots":0,"returnSlots":0},"@_admin_2707":{"entryPoint":null,"id":2707,"parameterSlots":0,"returnSlots":1},"@_delegate_3032":{"entryPoint":1928,"id":3032,"parameterSlots":1,"returnSlots":0},"@_fallback_3050":{"entryPoint":326,"id":3050,"parameterSlots":0,"returnSlots":0},"@_implementation_2769":{"entryPoint":null,"id":2769,"parameterSlots":0,"returnSlots":1},"@_setAdmin_2719":{"entryPoint":null,"id":2719,"parameterSlots":1,"returnSlots":0},"@_setImplementation_2804":{"entryPoint":2041,"id":2804,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2784":{"entryPoint":1964,"id":2784,"parameterSlots":1,"returnSlots":0},"@_willFallback_2739":{"entryPoint":2219,"id":2739,"parameterSlots":0,"returnSlots":0},"@_willFallback_2943":{"entryPoint":1920,"id":2943,"parameterSlots":0,"returnSlots":0},"@_willFallback_3037":{"entryPoint":null,"id":3037,"parameterSlots":0,"returnSlots":0},"@admin_2615":{"entryPoint":1789,"id":2615,"parameterSlots":0,"returnSlots":1},"@changeAdmin_2656":{"entryPoint":863,"id":2656,"parameterSlots":1,"returnSlots":0},"@implementation_2627":{"entryPoint":721,"id":2627,"parameterSlots":0,"returnSlots":1},"@initialize_2930":{"entryPoint":1276,"id":2930,"parameterSlots":3,"returnSlots":0},"@initialize_3006":{"entryPoint":1489,"id":3006,"parameterSlots":2,"returnSlots":0},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_2695":{"entryPoint":489,"id":2695,"parameterSlots":3,"returnSlots":0},"@upgradeTo_2669":{"entryPoint":384,"id":2669,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":2440,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":2693,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2481,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr":{"entryPoint":2864,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":2515,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_bytes_memory_ptr":{"entryPoint":2958,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":3036,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":3161,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3052,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x01":{"entryPoint":3114,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":2646,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5929:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"285:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:124"},"nodeType":"YulFunctionCall","src":"333:12:124"},"nodeType":"YulExpressionStatement","src":"333:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:124"},"nodeType":"YulFunctionCall","src":"302:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:124"},"nodeType":"YulFunctionCall","src":"298:32:124"},"nodeType":"YulIf","src":"295:52:124"},{"nodeType":"YulAssignment","src":"356:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:124"},"nodeType":"YulFunctionCall","src":"366:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:124","type":""}],"src":"215:186:124"},{"body":{"nodeType":"YulBlock","src":"512:559:124","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:124"},"nodeType":"YulFunctionCall","src":"560:12:124"},"nodeType":"YulExpressionStatement","src":"560:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:124"},"nodeType":"YulFunctionCall","src":"529:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:124"},"nodeType":"YulFunctionCall","src":"525:32:124"},"nodeType":"YulIf","src":"522:52:124"},{"nodeType":"YulAssignment","src":"583:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:124"},"nodeType":"YulFunctionCall","src":"593:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:124"},"nodeType":"YulFunctionCall","src":"658:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:124"},"nodeType":"YulFunctionCall","src":"645:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:124"},"nodeType":"YulFunctionCall","src":"743:12:124"},"nodeType":"YulExpressionStatement","src":"743:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:124"},"nodeType":"YulFunctionCall","src":"726:14:124"},"nodeType":"YulIf","src":"723:34:124"},{"nodeType":"YulVariableDeclaration","src":"766:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:124"},"nodeType":"YulFunctionCall","src":"776:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:124"},"nodeType":"YulFunctionCall","src":"848:12:124"},"nodeType":"YulExpressionStatement","src":"848:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:124"},"nodeType":"YulFunctionCall","src":"821:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:124"},"nodeType":"YulFunctionCall","src":"817:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:124"},"nodeType":"YulFunctionCall","src":"810:35:124"},"nodeType":"YulIf","src":"807:55:124"},{"nodeType":"YulVariableDeclaration","src":"871:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:124"},"nodeType":"YulFunctionCall","src":"885:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:124"},"nodeType":"YulFunctionCall","src":"930:12:124"},"nodeType":"YulExpressionStatement","src":"930:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:124"},"nodeType":"YulFunctionCall","src":"913:14:124"},"nodeType":"YulIf","src":"910:34:124"},{"body":{"nodeType":"YulBlock","src":"994:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:124"},"nodeType":"YulFunctionCall","src":"996:12:124"},"nodeType":"YulExpressionStatement","src":"996:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:124"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:124"},"nodeType":"YulFunctionCall","src":"963:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:124"},"nodeType":"YulFunctionCall","src":"959:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:124"},"nodeType":"YulFunctionCall","src":"956:37:124"},"nodeType":"YulIf","src":"953:57:124"},{"nodeType":"YulAssignment","src":"1019:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:124"},"nodeType":"YulFunctionCall","src":"1029:11:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:124"}]},{"nodeType":"YulAssignment","src":"1049:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:124","type":""}],"src":"406:665:124"},{"body":{"nodeType":"YulBlock","src":"1177:125:124","statements":[{"nodeType":"YulAssignment","src":"1187:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:124"},"nodeType":"YulFunctionCall","src":"1195:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:124"},"nodeType":"YulFunctionCall","src":"1240:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:124"},"nodeType":"YulFunctionCall","src":"1222:74:124"},"nodeType":"YulExpressionStatement","src":"1222:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:124","type":""}],"src":"1076:226:124"},{"body":{"nodeType":"YulBlock","src":"1339:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1356:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1359:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1349:6:124"},"nodeType":"YulFunctionCall","src":"1349:88:124"},"nodeType":"YulExpressionStatement","src":"1349:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1453:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1456:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1446:6:124"},"nodeType":"YulFunctionCall","src":"1446:15:124"},"nodeType":"YulExpressionStatement","src":"1446:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1477:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1480:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1470:6:124"},"nodeType":"YulFunctionCall","src":"1470:15:124"},"nodeType":"YulExpressionStatement","src":"1470:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1307:184:124"},{"body":{"nodeType":"YulBlock","src":"1548:725:124","statements":[{"body":{"nodeType":"YulBlock","src":"1597:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1606:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1609:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1599:6:124"},"nodeType":"YulFunctionCall","src":"1599:12:124"},"nodeType":"YulExpressionStatement","src":"1599:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1576:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1584:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1572:3:124"},"nodeType":"YulFunctionCall","src":"1572:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"1591:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1568:3:124"},"nodeType":"YulFunctionCall","src":"1568:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1561:6:124"},"nodeType":"YulFunctionCall","src":"1561:35:124"},"nodeType":"YulIf","src":"1558:55:124"},{"nodeType":"YulVariableDeclaration","src":"1622:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1645:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1632:12:124"},"nodeType":"YulFunctionCall","src":"1632:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1626:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1661:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1671:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1665:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1712:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1714:16:124"},"nodeType":"YulFunctionCall","src":"1714:18:124"},"nodeType":"YulExpressionStatement","src":"1714:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1704:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1708:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1701:2:124"},"nodeType":"YulFunctionCall","src":"1701:10:124"},"nodeType":"YulIf","src":"1698:36:124"},{"nodeType":"YulVariableDeclaration","src":"1743:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1753:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1747:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1828:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1848:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1842:5:124"},"nodeType":"YulFunctionCall","src":"1842:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1832:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1860:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1882:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1906:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1910:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1902:3:124"},"nodeType":"YulFunctionCall","src":"1902:13:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1917:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1898:3:124"},"nodeType":"YulFunctionCall","src":"1898:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"1922:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1894:3:124"},"nodeType":"YulFunctionCall","src":"1894:31:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1927:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1890:3:124"},"nodeType":"YulFunctionCall","src":"1890:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1878:3:124"},"nodeType":"YulFunctionCall","src":"1878:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1864:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1990:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1992:16:124"},"nodeType":"YulFunctionCall","src":"1992:18:124"},"nodeType":"YulExpressionStatement","src":"1992:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1949:10:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1961:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1946:2:124"},"nodeType":"YulFunctionCall","src":"1946:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1969:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1981:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1966:2:124"},"nodeType":"YulFunctionCall","src":"1966:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1943:2:124"},"nodeType":"YulFunctionCall","src":"1943:46:124"},"nodeType":"YulIf","src":"1940:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2028:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2032:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2021:6:124"},"nodeType":"YulFunctionCall","src":"2021:22:124"},"nodeType":"YulExpressionStatement","src":"2021:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2059:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2067:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2052:6:124"},"nodeType":"YulFunctionCall","src":"2052:18:124"},"nodeType":"YulExpressionStatement","src":"2052:18:124"},{"body":{"nodeType":"YulBlock","src":"2118:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2127:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2130:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2120:6:124"},"nodeType":"YulFunctionCall","src":"2120:12:124"},"nodeType":"YulExpressionStatement","src":"2120:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2093:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2101:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2089:3:124"},"nodeType":"YulFunctionCall","src":"2089:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"2106:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2085:3:124"},"nodeType":"YulFunctionCall","src":"2085:26:124"},{"name":"end","nodeType":"YulIdentifier","src":"2113:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2082:2:124"},"nodeType":"YulFunctionCall","src":"2082:35:124"},"nodeType":"YulIf","src":"2079:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2160:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2168:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2156:3:124"},"nodeType":"YulFunctionCall","src":"2156:17:124"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2179:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2187:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2175:3:124"},"nodeType":"YulFunctionCall","src":"2175:17:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2194:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2143:12:124"},"nodeType":"YulFunctionCall","src":"2143:54:124"},"nodeType":"YulExpressionStatement","src":"2143:54:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2221:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2229:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2217:3:124"},"nodeType":"YulFunctionCall","src":"2217:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"2234:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2213:3:124"},"nodeType":"YulFunctionCall","src":"2213:26:124"},{"kind":"number","nodeType":"YulLiteral","src":"2241:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2206:6:124"},"nodeType":"YulFunctionCall","src":"2206:37:124"},"nodeType":"YulExpressionStatement","src":"2206:37:124"},{"nodeType":"YulAssignment","src":"2252:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2261:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2252:5:124"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1522:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"1530:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1538:5:124","type":""}],"src":"1496:777:124"},{"body":{"nodeType":"YulBlock","src":"2391:355:124","statements":[{"body":{"nodeType":"YulBlock","src":"2437:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2446:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2449:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2439:6:124"},"nodeType":"YulFunctionCall","src":"2439:12:124"},"nodeType":"YulExpressionStatement","src":"2439:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2412:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2421:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2408:3:124"},"nodeType":"YulFunctionCall","src":"2408:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2433:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2404:3:124"},"nodeType":"YulFunctionCall","src":"2404:32:124"},"nodeType":"YulIf","src":"2401:52:124"},{"nodeType":"YulAssignment","src":"2462:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2491:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2472:18:124"},"nodeType":"YulFunctionCall","src":"2472:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2462:6:124"}]},{"nodeType":"YulAssignment","src":"2510:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2543:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2554:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2539:3:124"},"nodeType":"YulFunctionCall","src":"2539:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2520:18:124"},"nodeType":"YulFunctionCall","src":"2520:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2510:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2567:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2598:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2609:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2594:3:124"},"nodeType":"YulFunctionCall","src":"2594:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2581:12:124"},"nodeType":"YulFunctionCall","src":"2581:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2571:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2658:6:124"},"nodeType":"YulFunctionCall","src":"2658:12:124"},"nodeType":"YulExpressionStatement","src":"2658:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2628:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2636:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2625:2:124"},"nodeType":"YulFunctionCall","src":"2625:30:124"},"nodeType":"YulIf","src":"2622:50:124"},{"nodeType":"YulAssignment","src":"2681:59:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2712:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"2723:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2708:3:124"},"nodeType":"YulFunctionCall","src":"2708:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2732:7:124"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2691:16:124"},"nodeType":"YulFunctionCall","src":"2691:49:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2681:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2341:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2352:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2364:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2372:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2380:6:124","type":""}],"src":"2278:468:124"},{"body":{"nodeType":"YulBlock","src":"2847:298:124","statements":[{"body":{"nodeType":"YulBlock","src":"2893:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2902:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2905:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2895:6:124"},"nodeType":"YulFunctionCall","src":"2895:12:124"},"nodeType":"YulExpressionStatement","src":"2895:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2868:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2877:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2864:3:124"},"nodeType":"YulFunctionCall","src":"2864:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2889:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2860:3:124"},"nodeType":"YulFunctionCall","src":"2860:32:124"},"nodeType":"YulIf","src":"2857:52:124"},{"nodeType":"YulAssignment","src":"2918:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2947:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2928:18:124"},"nodeType":"YulFunctionCall","src":"2928:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2918:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2966:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2997:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3008:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2993:3:124"},"nodeType":"YulFunctionCall","src":"2993:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2980:12:124"},"nodeType":"YulFunctionCall","src":"2980:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2970:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3055:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3064:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3067:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3057:6:124"},"nodeType":"YulFunctionCall","src":"3057:12:124"},"nodeType":"YulExpressionStatement","src":"3057:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3027:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3035:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3024:2:124"},"nodeType":"YulFunctionCall","src":"3024:30:124"},"nodeType":"YulIf","src":"3021:50:124"},{"nodeType":"YulAssignment","src":"3080:59:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"3122:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3107:3:124"},"nodeType":"YulFunctionCall","src":"3107:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3131:7:124"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"3090:16:124"},"nodeType":"YulFunctionCall","src":"3090:49:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3080:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2805:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2816:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2828:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2836:6:124","type":""}],"src":"2751:394:124"},{"body":{"nodeType":"YulBlock","src":"3297:124:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3320:3:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3325:6:124"},{"name":"value1","nodeType":"YulIdentifier","src":"3333:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3307:12:124"},"nodeType":"YulFunctionCall","src":"3307:33:124"},"nodeType":"YulExpressionStatement","src":"3307:33:124"},{"nodeType":"YulVariableDeclaration","src":"3349:26:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3363:3:124"},{"name":"value1","nodeType":"YulIdentifier","src":"3368:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3359:3:124"},"nodeType":"YulFunctionCall","src":"3359:16:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3353:2:124","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3391:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3395:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3384:6:124"},"nodeType":"YulFunctionCall","src":"3384:13:124"},"nodeType":"YulExpressionStatement","src":"3384:13:124"},{"nodeType":"YulAssignment","src":"3406:9:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"3413:2:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3406:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3265:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3270:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3278:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3289:3:124","type":""}],"src":"3150:271:124"},{"body":{"nodeType":"YulBlock","src":"3600:244:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3617:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3628:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3610:6:124"},"nodeType":"YulFunctionCall","src":"3610:21:124"},"nodeType":"YulExpressionStatement","src":"3610:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3651:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3662:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3647:3:124"},"nodeType":"YulFunctionCall","src":"3647:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3667:2:124","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3640:6:124"},"nodeType":"YulFunctionCall","src":"3640:30:124"},"nodeType":"YulExpressionStatement","src":"3640:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3690:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3701:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3686:3:124"},"nodeType":"YulFunctionCall","src":"3686:18:124"},{"hexValue":"43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f","kind":"string","nodeType":"YulLiteral","src":"3706:34:124","type":"","value":"Cannot change the admin of a pro"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3679:6:124"},"nodeType":"YulFunctionCall","src":"3679:62:124"},"nodeType":"YulExpressionStatement","src":"3679:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3761:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3772:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3757:3:124"},"nodeType":"YulFunctionCall","src":"3757:18:124"},{"hexValue":"787920746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"3777:24:124","type":"","value":"xy to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3750:6:124"},"nodeType":"YulFunctionCall","src":"3750:52:124"},"nodeType":"YulExpressionStatement","src":"3750:52:124"},{"nodeType":"YulAssignment","src":"3811:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3823:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3834:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3819:3:124"},"nodeType":"YulFunctionCall","src":"3819:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3811:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3577:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3591:4:124","type":""}],"src":"3426:418:124"},{"body":{"nodeType":"YulBlock","src":"3978:198:124","statements":[{"nodeType":"YulAssignment","src":"3988:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4000:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4011:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3996:3:124"},"nodeType":"YulFunctionCall","src":"3996:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3988:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"4023:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4033:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4027:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4091:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4106:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4114:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4102:3:124"},"nodeType":"YulFunctionCall","src":"4102:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4084:6:124"},"nodeType":"YulFunctionCall","src":"4084:34:124"},"nodeType":"YulExpressionStatement","src":"4084:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4138:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4149:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4134:3:124"},"nodeType":"YulFunctionCall","src":"4134:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4158:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4166:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4154:3:124"},"nodeType":"YulFunctionCall","src":"4154:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4127:6:124"},"nodeType":"YulFunctionCall","src":"4127:43:124"},"nodeType":"YulExpressionStatement","src":"4127:43:124"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3939:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3950:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3958:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3969:4:124","type":""}],"src":"3849:327:124"},{"body":{"nodeType":"YulBlock","src":"4230:230:124","statements":[{"body":{"nodeType":"YulBlock","src":"4260:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4281:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4284:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4274:6:124"},"nodeType":"YulFunctionCall","src":"4274:88:124"},"nodeType":"YulExpressionStatement","src":"4274:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4382:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4385:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4375:6:124"},"nodeType":"YulFunctionCall","src":"4375:15:124"},"nodeType":"YulExpressionStatement","src":"4375:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4410:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4413:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4403:6:124"},"nodeType":"YulFunctionCall","src":"4403:15:124"},"nodeType":"YulExpressionStatement","src":"4403:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4246:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"4249:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4243:2:124"},"nodeType":"YulFunctionCall","src":"4243:8:124"},"nodeType":"YulIf","src":"4240:188:124"},{"nodeType":"YulAssignment","src":"4437:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4449:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"4452:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4445:3:124"},"nodeType":"YulFunctionCall","src":"4445:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"4437:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4212:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"4215:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"4221:4:124","type":""}],"src":"4181:279:124"},{"body":{"nodeType":"YulBlock","src":"4497:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4514:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4517:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4507:6:124"},"nodeType":"YulFunctionCall","src":"4507:88:124"},"nodeType":"YulExpressionStatement","src":"4507:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4611:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4614:4:124","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4604:6:124"},"nodeType":"YulFunctionCall","src":"4604:15:124"},"nodeType":"YulExpressionStatement","src":"4604:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4635:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4638:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4628:6:124"},"nodeType":"YulFunctionCall","src":"4628:15:124"},"nodeType":"YulExpressionStatement","src":"4628:15:124"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"4465:184:124"},{"body":{"nodeType":"YulBlock","src":"4791:289:124","statements":[{"nodeType":"YulVariableDeclaration","src":"4801:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4821:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4815:5:124"},"nodeType":"YulFunctionCall","src":"4815:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4805:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4837:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4846:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4841:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4908:77:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4933:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"4938:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4929:3:124"},"nodeType":"YulFunctionCall","src":"4929:11:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4956:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"4964:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4952:3:124"},"nodeType":"YulFunctionCall","src":"4952:14:124"},{"kind":"number","nodeType":"YulLiteral","src":"4968:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4948:3:124"},"nodeType":"YulFunctionCall","src":"4948:25:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4942:5:124"},"nodeType":"YulFunctionCall","src":"4942:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4922:6:124"},"nodeType":"YulFunctionCall","src":"4922:53:124"},"nodeType":"YulExpressionStatement","src":"4922:53:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4867:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"4870:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4864:2:124"},"nodeType":"YulFunctionCall","src":"4864:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4878:21:124","statements":[{"nodeType":"YulAssignment","src":"4880:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4889:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"4892:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4885:3:124"},"nodeType":"YulFunctionCall","src":"4885:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4880:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"4860:3:124","statements":[]},"src":"4856:129:124"},{"body":{"nodeType":"YulBlock","src":"5011:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5024:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"5029:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5020:3:124"},"nodeType":"YulFunctionCall","src":"5020:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"5038:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5013:6:124"},"nodeType":"YulFunctionCall","src":"5013:27:124"},"nodeType":"YulExpressionStatement","src":"5013:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5000:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"5003:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4997:2:124"},"nodeType":"YulFunctionCall","src":"4997:13:124"},"nodeType":"YulIf","src":"4994:48:124"},{"nodeType":"YulAssignment","src":"5051:23:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5062:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"5067:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5058:3:124"},"nodeType":"YulFunctionCall","src":"5058:16:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5051:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4767:3:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4772:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4783:3:124","type":""}],"src":"4654:426:124"},{"body":{"nodeType":"YulBlock","src":"5259:249:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5276:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5287:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5269:6:124"},"nodeType":"YulFunctionCall","src":"5269:21:124"},"nodeType":"YulExpressionStatement","src":"5269:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5310:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5321:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5306:3:124"},"nodeType":"YulFunctionCall","src":"5306:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"5326:2:124","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5299:6:124"},"nodeType":"YulFunctionCall","src":"5299:30:124"},"nodeType":"YulExpressionStatement","src":"5299:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5349:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5360:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5345:3:124"},"nodeType":"YulFunctionCall","src":"5345:18:124"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"5365:34:124","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5338:6:124"},"nodeType":"YulFunctionCall","src":"5338:62:124"},"nodeType":"YulExpressionStatement","src":"5338:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5420:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5431:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5416:3:124"},"nodeType":"YulFunctionCall","src":"5416:18:124"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"5436:29:124","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5409:6:124"},"nodeType":"YulFunctionCall","src":"5409:57:124"},"nodeType":"YulExpressionStatement","src":"5409:57:124"},{"nodeType":"YulAssignment","src":"5475:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5487:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5498:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5483:3:124"},"nodeType":"YulFunctionCall","src":"5483:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5475:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5236:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5250:4:124","type":""}],"src":"5085:423:124"},{"body":{"nodeType":"YulBlock","src":"5687:240:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5704:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5715:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5697:6:124"},"nodeType":"YulFunctionCall","src":"5697:21:124"},"nodeType":"YulExpressionStatement","src":"5697:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5738:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5749:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5734:3:124"},"nodeType":"YulFunctionCall","src":"5734:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"5754:2:124","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5727:6:124"},"nodeType":"YulFunctionCall","src":"5727:30:124"},"nodeType":"YulExpressionStatement","src":"5727:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5777:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5788:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5773:3:124"},"nodeType":"YulFunctionCall","src":"5773:18:124"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"5793:34:124","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5766:6:124"},"nodeType":"YulFunctionCall","src":"5766:62:124"},"nodeType":"YulExpressionStatement","src":"5766:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5848:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5859:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5844:3:124"},"nodeType":"YulFunctionCall","src":"5844:18:124"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"5864:20:124","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5837:6:124"},"nodeType":"YulFunctionCall","src":"5837:48:124"},"nodeType":"YulExpressionStatement","src":"5837:48:124"},{"nodeType":"YulAssignment","src":"5894:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5906:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5917:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5902:3:124"},"nodeType":"YulFunctionCall","src":"5902:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5894:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5664:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5678:4:124","type":""}],"src":"5513:414:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"Cannot change the admin of a pro\")\n        mstore(add(headStart, 96), \"xy to the zero address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        if gt(i, length) { mstore(add(pos, length), 0) }\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100705760003560e01c80638f2839701161004e5780638f283970146100eb578063cf7a1d771461010b578063d1f578941461011e578063f851a4401461013157610070565b80633659cfe61461007a5780634f1ef2861461009a5780635c60da1b146100ad575b610078610146565b005b34801561008657600080fd5b506100786100953660046109b1565b610180565b6100786100a83660046109d3565b6101e9565b3480156100b957600080fd5b506100c26102d1565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f757600080fd5b506100786101063660046109b1565b61035f565b610078610119366004610b30565b6104fc565b61007861012c366004610b8e565b6105d1565b34801561013d57600080fd5b506100c26106fd565b61014e610780565b61017e6101797f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610788565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101e1576101de816107ac565b50565b6101de610146565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102c457610247836107ac565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051610270929190610bdc565b600060405180830381855af49150503d80600081146102ab576040519150601f19603f3d011682016040523d82523d6000602084013e6102b0565b606091505b50509050806102be57600080fd5b50505050565b6102cc610146565b505050565b60006102fb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561035457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61035c610146565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101e15773ffffffffffffffffffffffffffffffffffffffff811661045c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101de817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461054657600080fd5b61055083826105d1565b61057b60017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610bec565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146105a9576105a9610c2a565b6102cc827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105fb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461061b57600080fd5b61064660017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610bec565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461067457610674610c2a565b61067d826107f9565b8051156106f95760008273ffffffffffffffffffffffffffffffffffffffff16826040516106ab9190610c59565b600060405180830381855af49150503d80600081146106e6576040519150601f19603f3d011682016040523d82523d6000602084013e6106eb565b606091505b50509050806102cc57600080fd5b5050565b60006107277fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561035457507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61017e6108ab565b3660008037600080366000845af43d6000803e8080156107a7573d6000f35b3d6000fd5b6107b5816107f9565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610453565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561017e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610453565b803573ffffffffffffffffffffffffffffffffffffffff811681146109ac57600080fd5b919050565b6000602082840312156109c357600080fd5b6109cc82610988565b9392505050565b6000806000604084860312156109e857600080fd5b6109f184610988565b9250602084013567ffffffffffffffff80821115610a0e57600080fd5b818601915086601f830112610a2257600080fd5b813581811115610a3157600080fd5b876020828501011115610a4357600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610a9657600080fd5b813567ffffffffffffffff80821115610ab157610ab1610a56565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610af757610af7610a56565b81604052838152866020858801011115610b1057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610b4557600080fd5b610b4e84610988565b9250610b5c60208501610988565b9150604084013567ffffffffffffffff811115610b7857600080fd5b610b8486828701610a85565b9150509250925092565b60008060408385031215610ba157600080fd5b610baa83610988565b9150602083013567ffffffffffffffff811115610bc657600080fd5b610bd285828601610a85565b9150509250929050565b8183823760009101908152919050565b600082821015610c25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015610c7a5760208186018101518583015201610c60565b81811115610c89576000828501525b50919091019291505056fea26469706673582212207951501cf514337a52ca186e53c41288e023637ff2c5748169d4b05dab82f5fb64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x70 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8F283970 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xEB JUMPI DUP1 PUSH4 0xCF7A1D77 EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x131 JUMPI PUSH2 0x70 JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x9A JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xAD JUMPI JUMPDEST PUSH2 0x78 PUSH2 0x146 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78 PUSH2 0x95 CALLDATASIZE PUSH1 0x4 PUSH2 0x9B1 JUMP JUMPDEST PUSH2 0x180 JUMP JUMPDEST PUSH2 0x78 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x9D3 JUMP JUMPDEST PUSH2 0x1E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC2 PUSH2 0x2D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78 PUSH2 0x106 CALLDATASIZE PUSH1 0x4 PUSH2 0x9B1 JUMP JUMPDEST PUSH2 0x35F JUMP JUMPDEST PUSH2 0x78 PUSH2 0x119 CALLDATASIZE PUSH1 0x4 PUSH2 0xB30 JUMP JUMPDEST PUSH2 0x4FC JUMP JUMPDEST PUSH2 0x78 PUSH2 0x12C CALLDATASIZE PUSH1 0x4 PUSH2 0xB8E JUMP JUMPDEST PUSH2 0x5D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC2 PUSH2 0x6FD JUMP JUMPDEST PUSH2 0x14E PUSH2 0x780 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x179 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x788 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E1 JUMPI PUSH2 0x1DE DUP2 PUSH2 0x7AC JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1DE PUSH2 0x146 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2C4 JUMPI PUSH2 0x247 DUP4 PUSH2 0x7AC JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x270 SWAP3 SWAP2 SWAP1 PUSH2 0xBDC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2AB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2B0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2CC PUSH2 0x146 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FB PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x354 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x35C PUSH2 0x146 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x45C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x4A5 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1DE DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x526 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x550 DUP4 DUP3 PUSH2 0x5D1 JUMP JUMPDEST PUSH2 0x57B PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH2 0xBEC JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 EQ PUSH2 0x5A9 JUMPI PUSH2 0x5A9 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x2CC DUP3 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FB PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x646 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0xBEC JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x674 JUMPI PUSH2 0x674 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x67D DUP3 PUSH2 0x7F9 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x6F9 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x6AB SWAP2 SWAP1 PUSH2 0xC59 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6E6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6EB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x727 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x354 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x8AB JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x7A7 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x7B5 DUP2 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x887 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x453 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x17E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x453 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x9AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9CC DUP3 PUSH2 0x988 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9F1 DUP5 PUSH2 0x988 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xA0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xAB1 JUMPI PUSH2 0xAB1 PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xAF7 JUMPI PUSH2 0xAF7 PUSH2 0xA56 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xB10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4E DUP5 PUSH2 0x988 JUMP JUMPDEST SWAP3 POP PUSH2 0xB5C PUSH1 0x20 DUP6 ADD PUSH2 0x988 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB84 DUP7 DUP3 DUP8 ADD PUSH2 0xA85 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBAA DUP4 PUSH2 0x988 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBD2 DUP6 DUP3 DUP7 ADD PUSH2 0xA85 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC25 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC7A JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0xC60 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xC89 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH26 0x51501CF514337A52CA186E53C41288E023637FF2C5748169D4B0 0x5D 0xAB DUP3 CREATE2 0xFB PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"345:1203:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:22;:9;:11::i;:::-;345:1203:20;2246:103:17;;;;;;;;;;-1:-1:-1;2246:103:17;;;;;:::i;:::-;;:::i;2866:234::-;;;;;;:::i;:::-;;:::i;1566:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:124;1240:55;;;1222:74;;1210:2;1195:18;1566:96:17;;;;;;;1838:224;;;;;;;;;;-1:-1:-1;1838:224:17;;;;;:::i;:::-;;:::i;1035:301:20:-;;;;;;:::i;:::-;;:::i;859:365:21:-;;;;;;:::i;:::-;;:::i;1424:78:17:-;;;;;;;;;;;;;:::i;2155:90:22:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:18;1183:11;;1008:196;2222:17:22;2212:9;:28::i;:::-;2155:90::o;2246:103:17:-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2315:29:::1;2326:17;2315:10;:29::i;:::-;2246:103:::0;:::o;1283:76::-;1341:11;:9;:11::i;2866:234::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2983:29:::1;2994:17;2983:10;:29::i;:::-;3019:12;3037:17;:30;;3068:4;;3037:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:55;;;3087:7;3079:16;;;::::0;::::1;;2977:123;2866:234:::0;;;:::o;1283:76::-;1341:11;:9;:11::i;:::-;2866:234;;;:::o;1566:96::-;1618:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;823:66:18;1183:11;;1566:96:17:o;1283:76::-;1341:11;:9;:11::i;:::-;1566:96;:::o;1838:224::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;1908:22:::1;::::0;::::1;1900:89;;;::::0;::::1;::::0;;3628:2:124;1900:89:17::1;::::0;::::1;3610:21:124::0;3667:2;3647:18;;;3640:30;3706:34;3686:18;;;3679:62;3777:24;3757:18;;;3750:52;3819:19;;1900:89:17::1;;;;;;;;;2000:32;2013:8;1002:66:::0;3295:11;;3149:167;2013:8:::1;2000:32;::::0;;4033:42:124;4102:15;;;4084:34;;4154:15;;;4149:2;4134:18;;4127:43;3996:18;2000:32:17::1;;;;;;;2038:19;2048:8;1002:66:::0;3563:22;3432:163;1035:301:20;1162:1;1133:17;823:66:18;1183:11;;1008:196;1133:17:20;:31;;;1125:40;;;;;;1171:56;1215:5;1222:4;1171:43;:56::i;:::-;1262:45;1306:1;1270:32;1262:45;:::i;:::-;1002:66:17;1240:68:20;1233:76;;;;:::i;:::-;1315:16;1325:5;1002:66:17;3563:22;3432:163;859:365:21;973:1;944:17;823:66:18;1183:11;;1008:196;944:17:21;:31;;;936:40;;;;;;1020:54;1073:1;1028:41;1020:54;:::i;:::-;823:66:18;989:86:21;982:94;;;;:::i;:::-;1082:26;1101:6;1082:18;:26::i;:::-;1118:12;;:16;1114:106;;1145:12;1163:6;:19;;1183:5;1163:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:45;;;1205:7;1197:16;;;;;1114:106;859:365;;:::o;1424:78:17:-;1467:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;1002:66:17;3295:11;;1566:96::o;1411:135:20:-;1497:44;:42;:44::i;1005:802:22:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:18;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;1618:334::-;1025:20:3;;1688:127:18;;;;;;;5287:2:124;1688:127:18;;;5269:21:124;5326:2;5306:18;;;5299:30;5365:34;5345:18;;;5338:62;5436:29;5416:18;;;5409:57;5483:19;;1688:127:18;5085:423:124;1688:127:18;823:66;1911:31;1618:334::o;3670:174:17:-;1002:66;3295:11;3735:22;;:10;:22;;;;3727:85;;;;;;;5715:2:124;3727:85:17;;;5697:21:124;5754:2;5734:18;;;5727:30;5793:34;5773:18;;;5766:62;5864:20;5844:18;;;5837:48;5902:19;;3727:85:17;5513:414:124;14:196;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:124:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:184::-;1359:77;1356:1;1349:88;1456:4;1453:1;1446:15;1480:4;1477:1;1470:15;1496:777;1538:5;1591:3;1584:4;1576:6;1572:17;1568:27;1558:55;;1609:1;1606;1599:12;1558:55;1645:6;1632:20;1671:18;1708:2;1704;1701:10;1698:36;;;1714:18;;:::i;:::-;1848:2;1842:9;1910:4;1902:13;;1753:66;1898:22;;;1922:2;1894:31;1890:40;1878:53;;;1946:18;;;1966:22;;;1943:46;1940:72;;;1992:18;;:::i;:::-;2032:10;2028:2;2021:22;2067:2;2059:6;2052:18;2113:3;2106:4;2101:2;2093:6;2089:15;2085:26;2082:35;2079:55;;;2130:1;2127;2120:12;2079:55;2194:2;2187:4;2179:6;2175:17;2168:4;2160:6;2156:17;2143:54;2241:1;2234:4;2229:2;2221:6;2217:15;2213:26;2206:37;2261:6;2252:15;;;;;;1496:777;;;;:::o;2278:468::-;2364:6;2372;2380;2433:2;2421:9;2412:7;2408:23;2404:32;2401:52;;;2449:1;2446;2439:12;2401:52;2472:29;2491:9;2472:29;:::i;:::-;2462:39;;2520:38;2554:2;2543:9;2539:18;2520:38;:::i;:::-;2510:48;;2609:2;2598:9;2594:18;2581:32;2636:18;2628:6;2625:30;2622:50;;;2668:1;2665;2658:12;2622:50;2691:49;2732:7;2723:6;2712:9;2708:22;2691:49;:::i;:::-;2681:59;;;2278:468;;;;;:::o;2751:394::-;2828:6;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2928:29;2947:9;2928:29;:::i;:::-;2918:39;;3008:2;2997:9;2993:18;2980:32;3035:18;3027:6;3024:30;3021:50;;;3067:1;3064;3057:12;3021:50;3090:49;3131:7;3122:6;3111:9;3107:22;3090:49;:::i;:::-;3080:59;;;2751:394;;;;;:::o;3150:271::-;3333:6;3325;3320:3;3307:33;3289:3;3359:16;;3384:13;;;3359:16;3150:271;-1:-1:-1;3150:271:124:o;4181:279::-;4221:4;4249:1;4246;4243:8;4240:188;;;4284:77;4281:1;4274:88;4385:4;4382:1;4375:15;4413:4;4410:1;4403:15;4240:188;-1:-1:-1;4445:9:124;;4181:279::o;4465:184::-;4517:77;4514:1;4507:88;4614:4;4611:1;4604:15;4638:4;4635:1;4628:15;4654:426;4783:3;4821:6;4815:13;4846:1;4856:129;4870:6;4867:1;4864:13;4856:129;;;4968:4;4952:14;;;4948:25;;4942:32;4929:11;;;4922:53;4885:12;4856:129;;;5003:6;5000:1;4997:13;4994:48;;;5038:1;5029:6;5024:3;5020:16;5013:27;4994:48;-1:-1:-1;5058:16:124;;;;;4654:426;-1:-1:-1;;4654:426:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"654800","executionCost":"689","totalCost":"655489"},"external":{"":"infinite","admin()":"infinite","changeAdmin(address)":"infinite","implementation()":"infinite","initialize(address,address,bytes)":"infinite","initialize(address,bytes)":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","initialize(address,address,bytes)":"cf7a1d77","initialize(address,bytes)":"d1f57894","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extends from BaseAdminUpgradeabilityProxy with an initializer for initializing the implementation, admin, and init data.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Only the current admin can call this function.\",\"params\":{\"newAdmin\":\"Address to transfer proxy administration to.\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"initialize(address,address,bytes)\":{\"params\":{\"admin\":\"Address of the proxy administrator.\",\"data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"logic\":\"address of the initial implementation.\"}},\"initialize(address,bytes)\":{\"details\":\"Contract initializer.\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"Address of the initial implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Upgrade the backing implementation of the proxy. Only the admin can call this function.\",\"params\":{\"newImplementation\":\"Address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"Address of the new implementation.\"}}},\"title\":\"InitializableAdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize(address,address,bytes)\":{\"notice\":\"Contract initializer.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol\":\"InitializableAdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './UpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseAdminUpgradeabilityProxy\\n * @dev This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Emitted when the administration has been transferred.\\n   * @param previousAdmin Address of the previous admin.\\n   * @param newAdmin Address of the new admin.\\n   */\\n  event AdminChanged(address previousAdmin, address newAdmin);\\n\\n  /**\\n   * @dev Storage slot with the admin of the contract.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant ADMIN_SLOT =\\n    0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n  /**\\n   * @dev Modifier to check whether the `msg.sender` is the admin.\\n   * If it is, it will run the function. Otherwise, it will delegate the call\\n   * to the implementation.\\n   */\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin()) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin();\\n  }\\n\\n  /**\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @dev Changes the admin of the proxy.\\n   * Only the current admin can call this function.\\n   * @param newAdmin Address to transfer proxy administration to.\\n   */\\n  function changeAdmin(address newAdmin) external ifAdmin {\\n    require(newAdmin != address(0), 'Cannot change the admin of a proxy to the zero address');\\n    emit AdminChanged(_admin(), newAdmin);\\n    _setAdmin(newAdmin);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy.\\n   * Only the admin can call this function.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * This is useful to initialize the proxied contract.\\n   * @param newImplementation Address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @return adm The admin slot.\\n   */\\n  function _admin() internal view returns (address adm) {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      adm := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Sets the address of the proxy admin.\\n   * @param newAdmin Address of the new proxy admin.\\n   */\\n  function _setAdmin(address newAdmin) internal {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newAdmin)\\n    }\\n  }\\n\\n  /**\\n   * @dev Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin(), 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xad78efab85afdf5c383699fca5fd3013451d27a77911c6c2317ae688d32de3bc\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseAdminUpgradeabilityProxy.sol';\\nimport './InitializableUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @dev Extends from BaseAdminUpgradeabilityProxy with an initializer for\\n * initializing the implementation, admin, and init data.\\n */\\ncontract InitializableAdminUpgradeabilityProxy is\\n  BaseAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * Contract initializer.\\n   * @param logic address of the initial implementation.\\n   * @param admin Address of the proxy administrator.\\n   * @param data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address logic, address admin, bytes memory data) public payable {\\n    require(_implementation() == address(0));\\n    InitializableUpgradeabilityProxy.initialize(logic, data);\\n    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));\\n    _setAdmin(admin);\\n  }\\n\\n  /**\\n   * @dev Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal override(BaseAdminUpgradeabilityProxy, Proxy) {\\n    BaseAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x8ee2967a5cf8f802fd20b194a45c271597f02df4dab5d9ddaa1642dd4822ad1d\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title UpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\\n * implementation and init data.\\n */\\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract constructor.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  constructor(address _logic, bytes memory _data) payable {\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa19d50b90ce153fb36d266c926e09db8dc8f110bdda1ae4b4cf2ecd02c26b81c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"initialize(address,address,bytes)":{"notice":"Contract initializer."}},"version":1}}},"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol":{"InitializableUpgradeabilityProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"Extends BaseUpgradeabilityProxy with an initializer for initializing implementation and init data.","kind":"dev","methods":{"initialize(address,bytes)":{"details":"Contract initializer.","params":{"_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"Address of the initial implementation."}}},"title":"InitializableUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061047d806100206000396000f3fe60806040526004361061001e5760003560e01c8063d1f5789414610028575b61002661003b565b005b6100266100363660046102a4565b61006d565b61006b6100667f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61019b565b565b60006100977f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff16146100b757600080fd5b6100e260017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61039f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc14610110576101106103dd565b610119826101bf565b8051156101975760008273ffffffffffffffffffffffffffffffffffffffff1682604051610147919061040c565b600060405180830381855af49150503d8060008114610182576040519150601f19603f3d011682016040523d82523d6000602084013e610187565b606091505b505090508061019557600080fd5b505b5050565b3660008037600080366000845af43d6000803e8080156101ba573d6000f35b3d6000fd5b803b610251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015260840160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156102b757600080fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146102db57600080fd5b9150602083013567ffffffffffffffff808211156102f857600080fd5b818501915085601f83011261030c57600080fd5b81358181111561031e5761031e610275565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561036457610364610275565b8160405282815288602084870101111561037d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000828210156103d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b8181101561042d5760208186018101518583015201610413565b8181111561043c576000828501525b50919091019291505056fea264697066735822122009034849618ad2285adcb679429422139f4bfac4b1bbe1fedbba443c38d7caad64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47D DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD1F57894 EQ PUSH2 0x28 JUMPI JUMPDEST PUSH2 0x26 PUSH2 0x3B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26 PUSH2 0x36 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A4 JUMP JUMPDEST PUSH2 0x6D JUMP JUMPDEST PUSH2 0x6B PUSH2 0x66 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x19B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE2 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x39F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x110 JUMPI PUSH2 0x110 PUSH2 0x3DD JUMP JUMPDEST PUSH2 0x119 DUP3 PUSH2 0x1BF JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x147 SWAP2 SWAP1 PUSH2 0x40C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x182 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x187 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x1BA JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST DUP1 EXTCODESIZE PUSH2 0x251 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x31E JUMPI PUSH2 0x31E PUSH2 0x275 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x364 JUMPI PUSH2 0x364 PUSH2 0x275 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x37D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3D8 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x42D JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x413 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MULMOD SUB BASEFEE 0x49 PUSH2 0x8AD2 0x28 GAS 0xDC 0xB6 PUSH26 0x429422139F4BFAC4B1BBE1FEDBBA443C38D7CAAD64736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"264:962:21:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3018":{"entryPoint":null,"id":3018,"parameterSlots":0,"returnSlots":0},"@_delegate_3032":{"entryPoint":411,"id":3032,"parameterSlots":1,"returnSlots":0},"@_fallback_3050":{"entryPoint":59,"id":3050,"parameterSlots":0,"returnSlots":0},"@_implementation_2769":{"entryPoint":null,"id":2769,"parameterSlots":0,"returnSlots":1},"@_setImplementation_2804":{"entryPoint":447,"id":2804,"parameterSlots":1,"returnSlots":0},"@_willFallback_3037":{"entryPoint":null,"id":3037,"parameterSlots":0,"returnSlots":0},"@initialize_3006":{"entryPoint":109,"id":3006,"parameterSlots":2,"returnSlots":0},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_memory_ptr":{"entryPoint":676,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1036,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":927,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x01":{"entryPoint":989,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":629,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2714:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"66:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:124"},"nodeType":"YulFunctionCall","src":"56:88:124"},"nodeType":"YulExpressionStatement","src":"56:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"160:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"163:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"153:6:124"},"nodeType":"YulFunctionCall","src":"153:15:124"},"nodeType":"YulExpressionStatement","src":"153:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"184:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"187:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"177:6:124"},"nodeType":"YulFunctionCall","src":"177:15:124"},"nodeType":"YulExpressionStatement","src":"177:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:184:124"},{"body":{"nodeType":"YulBlock","src":"299:1081:124","statements":[{"body":{"nodeType":"YulBlock","src":"345:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"354:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"357:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"347:6:124"},"nodeType":"YulFunctionCall","src":"347:12:124"},"nodeType":"YulExpressionStatement","src":"347:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"320:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"329:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"316:3:124"},"nodeType":"YulFunctionCall","src":"316:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"341:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"312:3:124"},"nodeType":"YulFunctionCall","src":"312:32:124"},"nodeType":"YulIf","src":"309:52:124"},{"nodeType":"YulVariableDeclaration","src":"370:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"396:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"383:12:124"},"nodeType":"YulFunctionCall","src":"383:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"374:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"492:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"501:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"504:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"494:6:124"},"nodeType":"YulFunctionCall","src":"494:12:124"},"nodeType":"YulExpressionStatement","src":"494:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"428:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"439:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"446:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"435:3:124"},"nodeType":"YulFunctionCall","src":"435:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"425:2:124"},"nodeType":"YulFunctionCall","src":"425:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"418:6:124"},"nodeType":"YulFunctionCall","src":"418:73:124"},"nodeType":"YulIf","src":"415:93:124"},{"nodeType":"YulAssignment","src":"517:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"527:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"517:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"541:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"572:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"583:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"568:3:124"},"nodeType":"YulFunctionCall","src":"568:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"555:12:124"},"nodeType":"YulFunctionCall","src":"555:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"545:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"596:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"606:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"600:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"651:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"660:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"663:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"653:6:124"},"nodeType":"YulFunctionCall","src":"653:12:124"},"nodeType":"YulExpressionStatement","src":"653:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"639:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"647:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"636:2:124"},"nodeType":"YulFunctionCall","src":"636:14:124"},"nodeType":"YulIf","src":"633:34:124"},{"nodeType":"YulVariableDeclaration","src":"676:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"690:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"701:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"686:3:124"},"nodeType":"YulFunctionCall","src":"686:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"680:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"756:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"765:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"768:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"758:6:124"},"nodeType":"YulFunctionCall","src":"758:12:124"},"nodeType":"YulExpressionStatement","src":"758:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"735:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"739:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"731:3:124"},"nodeType":"YulFunctionCall","src":"731:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"746:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"727:3:124"},"nodeType":"YulFunctionCall","src":"727:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"720:6:124"},"nodeType":"YulFunctionCall","src":"720:35:124"},"nodeType":"YulIf","src":"717:55:124"},{"nodeType":"YulVariableDeclaration","src":"781:26:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"804:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"791:12:124"},"nodeType":"YulFunctionCall","src":"791:16:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"785:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"830:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"832:16:124"},"nodeType":"YulFunctionCall","src":"832:18:124"},"nodeType":"YulExpressionStatement","src":"832:18:124"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"822:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"826:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"819:2:124"},"nodeType":"YulFunctionCall","src":"819:10:124"},"nodeType":"YulIf","src":"816:36:124"},{"nodeType":"YulVariableDeclaration","src":"861:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"871:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"865:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"946:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"966:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"960:5:124"},"nodeType":"YulFunctionCall","src":"960:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"950:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"978:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1000:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1024:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1028:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1020:3:124"},"nodeType":"YulFunctionCall","src":"1020:13:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1035:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1016:3:124"},"nodeType":"YulFunctionCall","src":"1016:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"1040:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1012:3:124"},"nodeType":"YulFunctionCall","src":"1012:31:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1045:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1008:3:124"},"nodeType":"YulFunctionCall","src":"1008:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"996:3:124"},"nodeType":"YulFunctionCall","src":"996:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"982:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1108:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1110:16:124"},"nodeType":"YulFunctionCall","src":"1110:18:124"},"nodeType":"YulExpressionStatement","src":"1110:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1067:10:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1079:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1064:2:124"},"nodeType":"YulFunctionCall","src":"1064:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1087:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1099:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1084:2:124"},"nodeType":"YulFunctionCall","src":"1084:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1061:2:124"},"nodeType":"YulFunctionCall","src":"1061:46:124"},"nodeType":"YulIf","src":"1058:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1146:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1150:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1139:6:124"},"nodeType":"YulFunctionCall","src":"1139:22:124"},"nodeType":"YulExpressionStatement","src":"1139:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1177:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1185:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1170:6:124"},"nodeType":"YulFunctionCall","src":"1170:18:124"},"nodeType":"YulExpressionStatement","src":"1170:18:124"},{"body":{"nodeType":"YulBlock","src":"1234:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1243:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1246:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1236:6:124"},"nodeType":"YulFunctionCall","src":"1236:12:124"},"nodeType":"YulExpressionStatement","src":"1236:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1211:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1215:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1207:3:124"},"nodeType":"YulFunctionCall","src":"1207:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"1220:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1203:3:124"},"nodeType":"YulFunctionCall","src":"1203:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1225:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1200:2:124"},"nodeType":"YulFunctionCall","src":"1200:33:124"},"nodeType":"YulIf","src":"1197:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1276:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1284:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1272:3:124"},"nodeType":"YulFunctionCall","src":"1272:15:124"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1293:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1297:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1289:3:124"},"nodeType":"YulFunctionCall","src":"1289:11:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1302:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1259:12:124"},"nodeType":"YulFunctionCall","src":"1259:46:124"},"nodeType":"YulExpressionStatement","src":"1259:46:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1329:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1337:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1325:3:124"},"nodeType":"YulFunctionCall","src":"1325:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"1342:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1321:3:124"},"nodeType":"YulFunctionCall","src":"1321:24:124"},{"kind":"number","nodeType":"YulLiteral","src":"1347:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1314:6:124"},"nodeType":"YulFunctionCall","src":"1314:35:124"},"nodeType":"YulExpressionStatement","src":"1314:35:124"},{"nodeType":"YulAssignment","src":"1358:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1368:6:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1358:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"257:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"268:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"280:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"288:6:124","type":""}],"src":"203:1177:124"},{"body":{"nodeType":"YulBlock","src":"1434:230:124","statements":[{"body":{"nodeType":"YulBlock","src":"1464:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1485:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1488:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1478:6:124"},"nodeType":"YulFunctionCall","src":"1478:88:124"},"nodeType":"YulExpressionStatement","src":"1478:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1586:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1589:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1579:6:124"},"nodeType":"YulFunctionCall","src":"1579:15:124"},"nodeType":"YulExpressionStatement","src":"1579:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1614:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1617:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1607:6:124"},"nodeType":"YulFunctionCall","src":"1607:15:124"},"nodeType":"YulExpressionStatement","src":"1607:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1450:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1453:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1447:2:124"},"nodeType":"YulFunctionCall","src":"1447:8:124"},"nodeType":"YulIf","src":"1444:188:124"},{"nodeType":"YulAssignment","src":"1641:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1653:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1656:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1649:3:124"},"nodeType":"YulFunctionCall","src":"1649:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1641:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1416:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"1419:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1425:4:124","type":""}],"src":"1385:279:124"},{"body":{"nodeType":"YulBlock","src":"1701:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1718:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1721:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1711:6:124"},"nodeType":"YulFunctionCall","src":"1711:88:124"},"nodeType":"YulExpressionStatement","src":"1711:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1815:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1818:4:124","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1808:6:124"},"nodeType":"YulFunctionCall","src":"1808:15:124"},"nodeType":"YulExpressionStatement","src":"1808:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1839:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1842:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1832:6:124"},"nodeType":"YulFunctionCall","src":"1832:15:124"},"nodeType":"YulExpressionStatement","src":"1832:15:124"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"1669:184:124"},{"body":{"nodeType":"YulBlock","src":"1995:289:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2005:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2025:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2019:5:124"},"nodeType":"YulFunctionCall","src":"2019:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2009:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2041:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2050:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2045:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2112:77:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2137:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"2142:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2133:3:124"},"nodeType":"YulFunctionCall","src":"2133:11:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2160:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"2168:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2156:3:124"},"nodeType":"YulFunctionCall","src":"2156:14:124"},{"kind":"number","nodeType":"YulLiteral","src":"2172:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2152:3:124"},"nodeType":"YulFunctionCall","src":"2152:25:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2146:5:124"},"nodeType":"YulFunctionCall","src":"2146:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2126:6:124"},"nodeType":"YulFunctionCall","src":"2126:53:124"},"nodeType":"YulExpressionStatement","src":"2126:53:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2071:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2074:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2068:2:124"},"nodeType":"YulFunctionCall","src":"2068:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2082:21:124","statements":[{"nodeType":"YulAssignment","src":"2084:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2093:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"2096:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2089:3:124"},"nodeType":"YulFunctionCall","src":"2089:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2084:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2064:3:124","statements":[]},"src":"2060:129:124"},{"body":{"nodeType":"YulBlock","src":"2215:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2228:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2233:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2224:3:124"},"nodeType":"YulFunctionCall","src":"2224:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"2242:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2217:6:124"},"nodeType":"YulFunctionCall","src":"2217:27:124"},"nodeType":"YulExpressionStatement","src":"2217:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2204:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2207:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2201:2:124"},"nodeType":"YulFunctionCall","src":"2201:13:124"},"nodeType":"YulIf","src":"2198:48:124"},{"nodeType":"YulAssignment","src":"2255:23:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2266:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2271:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2262:3:124"},"nodeType":"YulFunctionCall","src":"2262:16:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2255:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1971:3:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1976:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1987:3:124","type":""}],"src":"1858:426:124"},{"body":{"nodeType":"YulBlock","src":"2463:249:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2480:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2491:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2473:6:124"},"nodeType":"YulFunctionCall","src":"2473:21:124"},"nodeType":"YulExpressionStatement","src":"2473:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2514:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2525:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2510:3:124"},"nodeType":"YulFunctionCall","src":"2510:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2530:2:124","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2503:6:124"},"nodeType":"YulFunctionCall","src":"2503:30:124"},"nodeType":"YulExpressionStatement","src":"2503:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2553:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2564:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2549:3:124"},"nodeType":"YulFunctionCall","src":"2549:18:124"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"2569:34:124","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2542:6:124"},"nodeType":"YulFunctionCall","src":"2542:62:124"},"nodeType":"YulExpressionStatement","src":"2542:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2624:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2635:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2620:3:124"},"nodeType":"YulFunctionCall","src":"2620:18:124"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"2640:29:124","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2613:6:124"},"nodeType":"YulFunctionCall","src":"2613:57:124"},"nodeType":"YulExpressionStatement","src":"2613:57:124"},{"nodeType":"YulAssignment","src":"2679:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2691:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2702:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2687:3:124"},"nodeType":"YulFunctionCall","src":"2687:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2679:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2440:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2454:4:124","type":""}],"src":"2289:423:124"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value1 := memPtr\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        if gt(i, length) { mstore(add(pos, length), 0) }\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061001e5760003560e01c8063d1f5789414610028575b61002661003b565b005b6100266100363660046102a4565b61006d565b61006b6100667f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61019b565b565b60006100977f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff16146100b757600080fd5b6100e260017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61039f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc14610110576101106103dd565b610119826101bf565b8051156101975760008273ffffffffffffffffffffffffffffffffffffffff1682604051610147919061040c565b600060405180830381855af49150503d8060008114610182576040519150601f19603f3d011682016040523d82523d6000602084013e610187565b606091505b505090508061019557600080fd5b505b5050565b3660008037600080366000845af43d6000803e8080156101ba573d6000f35b3d6000fd5b803b610251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015260840160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156102b757600080fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146102db57600080fd5b9150602083013567ffffffffffffffff808211156102f857600080fd5b818501915085601f83011261030c57600080fd5b81358181111561031e5761031e610275565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561036457610364610275565b8160405282815288602084870101111561037d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000828210156103d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b8181101561042d5760208186018101518583015201610413565b8181111561043c576000828501525b50919091019291505056fea264697066735822122009034849618ad2285adcb679429422139f4bfac4b1bbe1fedbba443c38d7caad64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD1F57894 EQ PUSH2 0x28 JUMPI JUMPDEST PUSH2 0x26 PUSH2 0x3B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26 PUSH2 0x36 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A4 JUMP JUMPDEST PUSH2 0x6D JUMP JUMPDEST PUSH2 0x6B PUSH2 0x66 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x19B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE2 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x39F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x110 JUMPI PUSH2 0x110 PUSH2 0x3DD JUMP JUMPDEST PUSH2 0x119 DUP3 PUSH2 0x1BF JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x147 SWAP2 SWAP1 PUSH2 0x40C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x182 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x187 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x1BA JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST DUP1 EXTCODESIZE PUSH2 0x251 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x31E JUMPI PUSH2 0x31E PUSH2 0x275 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x364 JUMPI PUSH2 0x364 PUSH2 0x275 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x37D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3D8 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x42D JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x413 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MULMOD SUB BASEFEE 0x49 PUSH2 0x8AD2 0x28 GAS 0xDC 0xB6 PUSH26 0x429422139F4BFAC4B1BBE1FEDBBA443C38D7CAAD64736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"264:962:21:-:0;;;;;;;;;;;;;;;;;;572:11:22;:9;:11::i;:::-;264:962:21;859:365;;;;;;:::i;:::-;;:::i;2155:90:22:-;2212:28;2222:17;823:66:18;1183:11;;1008:196;2222:17:22;2212:9;:28::i;:::-;2155:90::o;859:365:21:-;973:1;944:17;823:66:18;1183:11;;1008:196;944:17:21;:31;;;936:40;;;;;;1020:54;1073:1;1028:41;1020:54;:::i;:::-;823:66:18;989:86:21;982:94;;;;:::i;:::-;1082:26;1101:6;1082:18;:26::i;:::-;1118:12;;:16;1114:106;;1145:12;1163:6;:19;;1183:5;1163:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:45;;;1205:7;1197:16;;;;;;1136:84;1114:106;859:365;;:::o;1005:802:22:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1618:334:18;1025:20:3;;1688:127:18;;;;;;;2491:2:124;1688:127:18;;;2473:21:124;2530:2;2510:18;;;2503:30;2569:34;2549:18;;;2542:62;2640:29;2620:18;;;2613:57;2687:19;;1688:127:18;;;;;;;;823:66;1911:31;1618:334::o;14:184:124:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:1177;280:6;288;341:2;329:9;320:7;316:23;312:32;309:52;;;357:1;354;347:12;309:52;396:9;383:23;446:42;439:5;435:54;428:5;425:65;415:93;;504:1;501;494:12;415:93;527:5;-1:-1:-1;583:2:124;568:18;;555:32;606:18;636:14;;;633:34;;;663:1;660;653:12;633:34;701:6;690:9;686:22;676:32;;746:7;739:4;735:2;731:13;727:27;717:55;;768:1;765;758:12;717:55;804:2;791:16;826:2;822;819:10;816:36;;;832:18;;:::i;:::-;966:2;960:9;1028:4;1020:13;;871:66;1016:22;;;1040:2;1012:31;1008:40;996:53;;;1064:18;;;1084:22;;;1061:46;1058:72;;;1110:18;;:::i;:::-;1150:10;1146:2;1139:22;1185:2;1177:6;1170:18;1225:7;1220:2;1215;1211;1207:11;1203:20;1200:33;1197:53;;;1246:1;1243;1236:12;1197:53;1302:2;1297;1293;1289:11;1284:2;1276:6;1272:15;1259:46;1347:1;1342:2;1337;1329:6;1325:15;1321:24;1314:35;1368:6;1358:16;;;;;;;203:1177;;;;;:::o;1385:279::-;1425:4;1453:1;1450;1447:8;1444:188;;;1488:77;1485:1;1478:88;1589:4;1586:1;1579:15;1617:4;1614:1;1607:15;1444:188;-1:-1:-1;1649:9:124;;1385:279::o;1669:184::-;1721:77;1718:1;1711:88;1818:4;1815:1;1808:15;1842:4;1839:1;1832:15;1858:426;1987:3;2025:6;2019:13;2050:1;2060:129;2074:6;2071:1;2068:13;2060:129;;;2172:4;2156:14;;;2152:25;;2146:32;2133:11;;;2126:53;2089:12;2060:129;;;2207:6;2204:1;2201:13;2198:48;;;2242:1;2233:6;2228:3;2224:16;2217:27;2198:48;-1:-1:-1;2262:16:124;;;;;1858:426;-1:-1:-1;;1858:426:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"229800","executionCost":"269","totalCost":"230069"},"external":{"":"infinite","initialize(address,bytes)":"infinite"}},"methodIdentifiers":{"initialize(address,bytes)":"d1f57894"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extends BaseUpgradeabilityProxy with an initializer for initializing implementation and init data.\",\"kind\":\"dev\",\"methods\":{\"initialize(address,bytes)\":{\"details\":\"Contract initializer.\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"Address of the initial implementation.\"}}},\"title\":\"InitializableUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":\"InitializableUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol":{"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"}],"devdoc":{"details":"Implements delegation of calls to other contracts, with proper forwarding of return values and bubbling of failures. It defines a fallback function that delegates all calls to the address returned by the abstract _implementation() internal function.","kind":"dev","methods":{},"title":"Proxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"Implements delegation of calls to other contracts, with proper forwarding of return values and bubbling of failures. It defines a fallback function that delegates all calls to the address returned by the abstract _implementation() internal function.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Proxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol":{"UpgradeabilityProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"}],"devdoc":{"details":"Extends BaseUpgradeabilityProxy with a constructor for initializing implementation and init data.","kind":"dev","methods":{"constructor":{"details":"Contract constructor.","params":{"_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"Address of the initial implementation."}}},"title":"UpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_3103":{"entryPoint":null,"id":3103,"parameterSlots":2,"returnSlots":0},"@_setImplementation_2804":{"entryPoint":234,"id":2804,"parameterSlots":1,"returnSlots":0},"@isContract_445":{"entryPoint":389,"id":445,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":465,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":730,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":671,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":417,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x01":{"entryPoint":708,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":395,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2527:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:124"},"nodeType":"YulFunctionCall","src":"66:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:124"},"nodeType":"YulFunctionCall","src":"56:31:124"},"nodeType":"YulExpressionStatement","src":"56:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:15:124"},"nodeType":"YulExpressionStatement","src":"96:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:124"},"nodeType":"YulFunctionCall","src":"120:15:124"},"nodeType":"YulExpressionStatement","src":"120:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:124"},{"body":{"nodeType":"YulBlock","src":"199:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"209:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"218:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"213:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"278:63:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"303:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"308:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"299:3:124"},"nodeType":"YulFunctionCall","src":"299:11:124"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"322:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"327:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:124"},"nodeType":"YulFunctionCall","src":"318:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"312:5:124"},"nodeType":"YulFunctionCall","src":"312:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"292:6:124"},"nodeType":"YulFunctionCall","src":"292:39:124"},"nodeType":"YulExpressionStatement","src":"292:39:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"239:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"242:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"236:2:124"},"nodeType":"YulFunctionCall","src":"236:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"250:19:124","statements":[{"nodeType":"YulAssignment","src":"252:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"261:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"264:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"257:3:124"},"nodeType":"YulFunctionCall","src":"257:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"252:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"232:3:124","statements":[]},"src":"228:113:124"},{"body":{"nodeType":"YulBlock","src":"367:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"380:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"385:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"376:3:124"},"nodeType":"YulFunctionCall","src":"376:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"394:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"369:6:124"},"nodeType":"YulFunctionCall","src":"369:27:124"},"nodeType":"YulExpressionStatement","src":"369:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"356:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"359:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"353:2:124"},"nodeType":"YulFunctionCall","src":"353:13:124"},"nodeType":"YulIf","src":"350:48:124"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"177:3:124","type":""},{"name":"dst","nodeType":"YulTypedName","src":"182:3:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"187:6:124","type":""}],"src":"146:258:124"},{"body":{"nodeType":"YulBlock","src":"516:943:124","statements":[{"body":{"nodeType":"YulBlock","src":"562:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"571:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"574:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"564:6:124"},"nodeType":"YulFunctionCall","src":"564:12:124"},"nodeType":"YulExpressionStatement","src":"564:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"537:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"546:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"533:3:124"},"nodeType":"YulFunctionCall","src":"533:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"558:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"529:3:124"},"nodeType":"YulFunctionCall","src":"529:32:124"},"nodeType":"YulIf","src":"526:52:124"},{"nodeType":"YulVariableDeclaration","src":"587:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"606:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"600:5:124"},"nodeType":"YulFunctionCall","src":"600:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"591:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"679:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"688:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"691:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:12:124"},"nodeType":"YulExpressionStatement","src":"681:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"638:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"649:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"664:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"669:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"660:3:124"},"nodeType":"YulFunctionCall","src":"660:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"673:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"656:3:124"},"nodeType":"YulFunctionCall","src":"656:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"645:3:124"},"nodeType":"YulFunctionCall","src":"645:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"635:2:124"},"nodeType":"YulFunctionCall","src":"635:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"628:6:124"},"nodeType":"YulFunctionCall","src":"628:50:124"},"nodeType":"YulIf","src":"625:70:124"},{"nodeType":"YulAssignment","src":"704:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"714:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"704:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"728:39:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"752:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"763:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"748:3:124"},"nodeType":"YulFunctionCall","src":"748:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"742:5:124"},"nodeType":"YulFunctionCall","src":"742:25:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"732:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"776:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"794:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"798:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"790:3:124"},"nodeType":"YulFunctionCall","src":"790:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"802:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"786:3:124"},"nodeType":"YulFunctionCall","src":"786:18:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"780:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"831:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"840:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"843:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:12:124"},"nodeType":"YulExpressionStatement","src":"833:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"819:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"827:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"816:2:124"},"nodeType":"YulFunctionCall","src":"816:14:124"},"nodeType":"YulIf","src":"813:34:124"},{"nodeType":"YulVariableDeclaration","src":"856:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"870:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"881:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"866:3:124"},"nodeType":"YulFunctionCall","src":"866:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"860:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"936:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"945:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"948:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"938:6:124"},"nodeType":"YulFunctionCall","src":"938:12:124"},"nodeType":"YulExpressionStatement","src":"938:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"915:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"919:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"911:3:124"},"nodeType":"YulFunctionCall","src":"911:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"926:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"907:3:124"},"nodeType":"YulFunctionCall","src":"907:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"900:6:124"},"nodeType":"YulFunctionCall","src":"900:35:124"},"nodeType":"YulIf","src":"897:55:124"},{"nodeType":"YulVariableDeclaration","src":"961:19:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"977:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"971:5:124"},"nodeType":"YulFunctionCall","src":"971:9:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"965:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1003:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1005:16:124"},"nodeType":"YulFunctionCall","src":"1005:18:124"},"nodeType":"YulExpressionStatement","src":"1005:18:124"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"995:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"999:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"992:2:124"},"nodeType":"YulFunctionCall","src":"992:10:124"},"nodeType":"YulIf","src":"989:36:124"},{"nodeType":"YulVariableDeclaration","src":"1034:17:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1048:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1044:3:124"},"nodeType":"YulFunctionCall","src":"1044:7:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1038:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1060:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1080:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1074:5:124"},"nodeType":"YulFunctionCall","src":"1074:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1064:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1092:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1114:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1138:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1142:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1134:3:124"},"nodeType":"YulFunctionCall","src":"1134:13:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1149:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1130:3:124"},"nodeType":"YulFunctionCall","src":"1130:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"1154:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1126:3:124"},"nodeType":"YulFunctionCall","src":"1126:31:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1159:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1122:3:124"},"nodeType":"YulFunctionCall","src":"1122:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1110:3:124"},"nodeType":"YulFunctionCall","src":"1110:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1096:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1222:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1224:16:124"},"nodeType":"YulFunctionCall","src":"1224:18:124"},"nodeType":"YulExpressionStatement","src":"1224:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1181:10:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1193:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1178:2:124"},"nodeType":"YulFunctionCall","src":"1178:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1201:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1213:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1198:2:124"},"nodeType":"YulFunctionCall","src":"1198:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1175:2:124"},"nodeType":"YulFunctionCall","src":"1175:46:124"},"nodeType":"YulIf","src":"1172:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1260:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1264:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1253:6:124"},"nodeType":"YulFunctionCall","src":"1253:22:124"},"nodeType":"YulExpressionStatement","src":"1253:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1291:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1299:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1284:6:124"},"nodeType":"YulFunctionCall","src":"1284:18:124"},"nodeType":"YulExpressionStatement","src":"1284:18:124"},{"body":{"nodeType":"YulBlock","src":"1348:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1357:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1360:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1350:6:124"},"nodeType":"YulFunctionCall","src":"1350:12:124"},"nodeType":"YulExpressionStatement","src":"1350:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1325:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1329:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1321:3:124"},"nodeType":"YulFunctionCall","src":"1321:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"1334:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1317:3:124"},"nodeType":"YulFunctionCall","src":"1317:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1339:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1314:2:124"},"nodeType":"YulFunctionCall","src":"1314:33:124"},"nodeType":"YulIf","src":"1311:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1399:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1403:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1395:3:124"},"nodeType":"YulFunctionCall","src":"1395:11:124"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1412:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1420:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1408:3:124"},"nodeType":"YulFunctionCall","src":"1408:15:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1425:2:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"1373:21:124"},"nodeType":"YulFunctionCall","src":"1373:55:124"},"nodeType":"YulExpressionStatement","src":"1373:55:124"},{"nodeType":"YulAssignment","src":"1437:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1447:6:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1437:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"474:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"485:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"497:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"505:6:124","type":""}],"src":"409:1050:124"},{"body":{"nodeType":"YulBlock","src":"1513:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"1543:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1564:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1571:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1576:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1567:3:124"},"nodeType":"YulFunctionCall","src":"1567:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1557:6:124"},"nodeType":"YulFunctionCall","src":"1557:31:124"},"nodeType":"YulExpressionStatement","src":"1557:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1608:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1611:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1601:6:124"},"nodeType":"YulFunctionCall","src":"1601:15:124"},"nodeType":"YulExpressionStatement","src":"1601:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1636:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1639:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1629:6:124"},"nodeType":"YulFunctionCall","src":"1629:15:124"},"nodeType":"YulExpressionStatement","src":"1629:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1529:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1532:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1526:2:124"},"nodeType":"YulFunctionCall","src":"1526:8:124"},"nodeType":"YulIf","src":"1523:131:124"},{"nodeType":"YulAssignment","src":"1663:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1675:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1678:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1671:3:124"},"nodeType":"YulFunctionCall","src":"1671:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1663:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1495:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"1498:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1504:4:124","type":""}],"src":"1464:222:124"},{"body":{"nodeType":"YulBlock","src":"1723:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1740:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1747:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1752:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1743:3:124"},"nodeType":"YulFunctionCall","src":"1743:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1733:6:124"},"nodeType":"YulFunctionCall","src":"1733:31:124"},"nodeType":"YulExpressionStatement","src":"1733:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1780:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1783:4:124","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1773:6:124"},"nodeType":"YulFunctionCall","src":"1773:15:124"},"nodeType":"YulExpressionStatement","src":"1773:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1804:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1807:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1797:6:124"},"nodeType":"YulFunctionCall","src":"1797:15:124"},"nodeType":"YulExpressionStatement","src":"1797:15:124"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"1691:127:124"},{"body":{"nodeType":"YulBlock","src":"1960:137:124","statements":[{"nodeType":"YulVariableDeclaration","src":"1970:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1990:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1984:5:124"},"nodeType":"YulFunctionCall","src":"1984:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1974:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2032:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2040:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2028:3:124"},"nodeType":"YulFunctionCall","src":"2028:17:124"},{"name":"pos","nodeType":"YulIdentifier","src":"2047:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2052:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"2006:21:124"},"nodeType":"YulFunctionCall","src":"2006:53:124"},"nodeType":"YulExpressionStatement","src":"2006:53:124"},{"nodeType":"YulAssignment","src":"2068:23:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2079:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2084:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2075:3:124"},"nodeType":"YulFunctionCall","src":"2075:16:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2068:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1936:3:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1941:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1952:3:124","type":""}],"src":"1823:274:124"},{"body":{"nodeType":"YulBlock","src":"2276:249:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2293:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2304:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2286:6:124"},"nodeType":"YulFunctionCall","src":"2286:21:124"},"nodeType":"YulExpressionStatement","src":"2286:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2327:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2338:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2323:3:124"},"nodeType":"YulFunctionCall","src":"2323:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2343:2:124","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2316:6:124"},"nodeType":"YulFunctionCall","src":"2316:30:124"},"nodeType":"YulExpressionStatement","src":"2316:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2366:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2377:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2362:3:124"},"nodeType":"YulFunctionCall","src":"2362:18:124"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"2382:34:124","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2355:6:124"},"nodeType":"YulFunctionCall","src":"2355:62:124"},"nodeType":"YulExpressionStatement","src":"2355:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2437:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2448:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2433:3:124"},"nodeType":"YulFunctionCall","src":"2433:18:124"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"2453:29:124","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2426:6:124"},"nodeType":"YulFunctionCall","src":"2426:57:124"},"nodeType":"YulExpressionStatement","src":"2426:57:124"},{"nodeType":"YulAssignment","src":"2492:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2504:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2515:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2500:3:124"},"nodeType":"YulFunctionCall","src":"2500:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2492:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2253:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2267:4:124","type":""}],"src":"2102:423:124"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n        value1 := memPtr\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040526040516103be3803806103be833981016040819052610022916101d1565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61029f565b60008051602061039e83398151915214610069576100696102c4565b610072826100ea565b8051156100e3576000826001600160a01b03168260405161009391906102da565b600060405180830381855af49150503d80600081146100ce576040519150601f19603f3d011682016040523d82523d6000602084013e6100d3565b606091505b50509050806100e157600080fd5b505b50506102f6565b6100fd8161018560201b61003b1760201c565b6101735760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015260840160405180910390fd5b60008051602061039e83398151915255565b3b151590565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101bc5781810151838201526020016101a4565b838111156101cb576000848401525b50505050565b600080604083850312156101e457600080fd5b82516001600160a01b03811681146101fb57600080fd5b60208401519092506001600160401b038082111561021857600080fd5b818501915085601f83011261022c57600080fd5b81518181111561023e5761023e61018b565b604051601f8201601f19908116603f011681019083821181831017156102665761026661018b565b8160405282815288602084870101111561027f57600080fd5b6102908360208301602088016101a1565b80955050505050509250929050565b6000828210156102bf57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600082516102ec8184602087016101a1565b9190910192915050565b609a806103046000396000f3fe6080604052600a600c565b005b603960357f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6041565b565b3b151590565b3660008037600080366000845af43d6000803e808015605f573d6000f35b3d6000fdfea26469706673582212206335f4f8dec32191f9e9dca10e71a27c37cfa64a1e5ea4affa4fb840917af2d164736f6c634300080a0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x3BE CODESIZE SUB DUP1 PUSH2 0x3BE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x1D1 JUMP JUMPDEST PUSH2 0x4D PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x29F JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x39E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0x69 JUMPI PUSH2 0x69 PUSH2 0x2C4 JUMP JUMPDEST PUSH2 0x72 DUP3 PUSH2 0xEA JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x93 SWAP2 SWAP1 PUSH2 0x2DA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCE JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xD3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMPDEST POP POP PUSH2 0x2F6 JUMP JUMPDEST PUSH2 0xFD DUP2 PUSH2 0x185 PUSH1 0x20 SHL PUSH2 0x3B OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x173 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x39E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A4 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x22C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x23E JUMPI PUSH2 0x23E PUSH2 0x18B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x266 JUMPI PUSH2 0x266 PUSH2 0x18B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x290 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1A1 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2BF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2EC DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1A1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x9A DUP1 PUSH2 0x304 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x39 PUSH1 0x35 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x41 JUMP JUMPDEST JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x5F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH4 0x35F4F8DE 0xC3 0x21 SWAP2 0xF9 0xE9 0xDC LOG1 0xE PUSH18 0xA27C37CFA64A1E5EA4AFFA4FB840917AF2D1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC0000000000000000000000 ","sourceMap":"250:888:23:-:0;;;832:304;;;;;;;;;;;;;;;;;;:::i;:::-;932:54;985:1;940:41;932:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;901:86:23;894:94;;;;:::i;:::-;994:26;1013:6;994:18;:26::i;:::-;1030:12;;:16;1026:106;;1057:12;1075:6;-1:-1:-1;;;;;1075:19:23;1095:5;1075:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1056:45;;;1117:7;1109:16;;;;;;1048:84;1026:106;832:304;;250:888;;1618:334:18;1703:37;1722:17;1703:18;;;;;:37;;:::i;:::-;1688:127;;;;-1:-1:-1;;;1688:127:18;;2304:2:124;1688:127:18;;;2286:21:124;2343:2;2323:18;;;2316:30;2382:34;2362:18;;;2355:62;2453:29;2433:18;;;2426:57;2500:19;;1688:127:18;;;;;;;;-1:-1:-1;;;;;;;;;;;1911:31:18;1618:334::o;735:341:3:-;1025:20;1063:8;;;735:341::o;14:127:124:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:258;218:1;228:113;242:6;239:1;236:13;228:113;;;318:11;;;312:18;299:11;;;292:39;264:2;257:10;228:113;;;359:6;356:1;353:13;350:48;;;394:1;385:6;380:3;376:16;369:27;350:48;;146:258;;;:::o;409:1050::-;497:6;505;558:2;546:9;537:7;533:23;529:32;526:52;;;574:1;571;564:12;526:52;600:16;;-1:-1:-1;;;;;645:31:124;;635:42;;625:70;;691:1;688;681:12;625:70;763:2;748:18;;742:25;714:5;;-1:-1:-1;;;;;;816:14:124;;;813:34;;;843:1;840;833:12;813:34;881:6;870:9;866:22;856:32;;926:7;919:4;915:2;911:13;907:27;897:55;;948:1;945;938:12;897:55;977:2;971:9;999:2;995;992:10;989:36;;;1005:18;;:::i;:::-;1080:2;1074:9;1048:2;1134:13;;-1:-1:-1;;1130:22:124;;;1154:2;1126:31;1122:40;1110:53;;;1178:18;;;1198:22;;;1175:46;1172:72;;;1224:18;;:::i;:::-;1264:10;1260:2;1253:22;1299:2;1291:6;1284:18;1339:7;1334:2;1329;1325;1321:11;1317:20;1314:33;1311:53;;;1360:1;1357;1350:12;1311:53;1373:55;1425:2;1420;1412:6;1408:15;1403:2;1399;1395:11;1373:55;:::i;:::-;1447:6;1437:16;;;;;;;409:1050;;;;;:::o;1464:222::-;1504:4;1532:1;1529;1526:8;1523:131;;;1576:10;1571:3;1567:20;1564:1;1557:31;1611:4;1608:1;1601:15;1639:4;1636:1;1629:15;1523:131;-1:-1:-1;1671:9:124;;1464:222::o;1691:127::-;1752:10;1747:3;1743:20;1740:1;1733:31;1783:4;1780:1;1773:15;1807:4;1804:1;1797:15;1823:274;1952:3;1990:6;1984:13;2006:53;2052:6;2047:3;2040:4;2032:6;2028:17;2006:53;:::i;:::-;2075:16;;;;;1823:274;-1:-1:-1;;1823:274:124:o;2102:423::-;250:888:23;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3018":{"entryPoint":null,"id":3018,"parameterSlots":0,"returnSlots":0},"@_delegate_3032":{"entryPoint":65,"id":3032,"parameterSlots":1,"returnSlots":0},"@_fallback_3050":{"entryPoint":12,"id":3050,"parameterSlots":0,"returnSlots":0},"@_implementation_2769":{"entryPoint":null,"id":2769,"parameterSlots":0,"returnSlots":1},"@_willFallback_3037":{"entryPoint":null,"id":3037,"parameterSlots":0,"returnSlots":0},"@isContract_445":{"entryPoint":59,"id":445,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600a600c565b005b603960357f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6041565b565b3b151590565b3660008037600080366000845af43d6000803e808015605f573d6000f35b3d6000fdfea26469706673582212206335f4f8dec32191f9e9dca10e71a27c37cfa64a1e5ea4affa4fb840917af2d164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x39 PUSH1 0x35 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x41 JUMP JUMPDEST JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x5F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH4 0x35F4F8DE 0xC3 0x21 SWAP2 0xF9 0xE9 0xDC LOG1 0xE PUSH18 0xA27C37CFA64A1E5EA4AFFA4FB840917AF2D1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"250:888:23:-:0;;;572:11:22;:9;:11::i;:::-;250:888:23;2155:90:22;2212:28;2222:17;823:66:18;1183:11;;1008:196;2222:17:22;2212:9;:28::i;:::-;2155:90::o;735:341:3:-;1025:20;1063:8;;;735:341::o;1005:802:22:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27"},"gasEstimates":{"creation":{"codeDepositCost":"30800","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"Extends BaseUpgradeabilityProxy with a constructor for initializing implementation and init data.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Contract constructor.\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"Address of the initial implementation.\"}}},\"title\":\"UpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":\"UpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title UpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\\n * implementation and init data.\\n */\\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract constructor.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  constructor(address _logic, bytes memory _data) payable {\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa19d50b90ce153fb36d266c926e09db8dc8f110bdda1ae4b4cf2ecd02c26b81c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/weth/WETH9.sol":{"WETH9":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"deposit","outputs":[],"stateMutability":"payable","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":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"extract_byte_array_length":{"entryPoint":275,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:396:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"69:325:124","statements":[{"nodeType":"YulAssignment","src":"79:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"93:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"96:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"89:3:124"},"nodeType":"YulFunctionCall","src":"89:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"79:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"110:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"140:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"136:3:124"},"nodeType":"YulFunctionCall","src":"136:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"114:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"187:31:124","statements":[{"nodeType":"YulAssignment","src":"189:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"203:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"211:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"199:3:124"},"nodeType":"YulFunctionCall","src":"199:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"189:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"167:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"160:6:124"},"nodeType":"YulFunctionCall","src":"160:26:124"},"nodeType":"YulIf","src":"157:61:124"},{"body":{"nodeType":"YulBlock","src":"277:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"305:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"310:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"301:3:124"},"nodeType":"YulFunctionCall","src":"301:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"291:6:124"},"nodeType":"YulFunctionCall","src":"291:31:124"},"nodeType":"YulExpressionStatement","src":"291:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"342:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"345:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"335:6:124"},"nodeType":"YulFunctionCall","src":"335:15:124"},"nodeType":"YulExpressionStatement","src":"335:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:124"},"nodeType":"YulFunctionCall","src":"363:15:124"},"nodeType":"YulExpressionStatement","src":"363:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"233:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"256:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"264:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"253:2:124"},"nodeType":"YulFunctionCall","src":"253:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"230:2:124"},"nodeType":"YulFunctionCall","src":"230:38:124"},"nodeType":"YulIf","src":"227:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"49:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"58:6:124","type":""}],"src":"14:380:124"}]},"contents":"{\n    { }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6108eb8061015d6000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f6919061069a565b60405180910390f35b34801561010b57600080fd5b5061011f61011a366004610736565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610760565b6103bc565b34801561017857600080fd5b506100cd61018736600461079c565b6105d3565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d33660046107b5565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610679565b34801561020657600080fd5b5061011f610215366004610736565b610686565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d3660046107d0565b600460209081526000928352604080842090915290825290205481565b3360009081526003602052604081208054349290610279908490610832565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c29061084a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee9061084a565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156103ee57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610464575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156104ec5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104a657600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080548492906104e690849061089e565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061052190849061089e565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061055b908490610832565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105c191815260200190565b60405180910390a35060019392505050565b336000908152600360205260409020548111156105ef57600080fd5b336000908152600360205260408120805483929061060e90849061089e565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610640573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c29061084a565b60006106933384846103bc565b9392505050565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461073157600080fd5b919050565b6000806040838503121561074957600080fd5b6107528361070d565b946020939093013593505050565b60008060006060848603121561077557600080fd5b61077e8461070d565b925061078c6020850161070d565b9150604084013590509250925092565b6000602082840312156107ae57600080fd5b5035919050565b6000602082840312156107c757600080fd5b6106938261070d565b600080604083850312156107e357600080fd5b6107ec8361070d565b91506107fa6020840161070d565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561084557610845610803565b500190565b600181811c9082168061085e57607f821691505b60208210811415610898577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156108b0576108b0610803565b50039056fea2646970667358221220b1d7185f965533b3b09e88202a3ccd4f3d931edbb666862f339b1feb4018671364736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH13 0x2BB930B83832B21022BA3432B9 PUSH1 0x99 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x2E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0xAE8AA89 PUSH1 0xE3 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x5A SWAP2 PUSH1 0x1 SWAP2 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14E JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x86 SWAP1 PUSH2 0x113 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0xA8 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0xEE JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0xC1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xEE JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xEE JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xEE JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xD3 JUMP JUMPDEST POP PUSH2 0xFA SWAP3 SWAP2 POP PUSH2 0xFE JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xFF JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x127 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x148 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x8EB DUP1 PUSH2 0x15D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FA JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x16C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xCF JUMPI PUSH2 0xCD PUSH2 0x25A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x2B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x69A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x11A CALLDATASIZE PUSH1 0x4 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x343 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0x760 JUMP JUMPDEST PUSH2 0x3BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x187 CALLDATASIZE PUSH1 0x4 PUSH2 0x79C JUMP JUMPDEST PUSH2 0x5D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x1A6 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E PUSH2 0x1D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x7B5 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x679 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x686 JUMP JUMPDEST PUSH2 0xCD PUSH2 0x25A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E PUSH2 0x23D CALLDATASIZE PUSH1 0x4 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x279 SWAP1 DUP5 SWAP1 PUSH2 0x832 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x2C2 SWAP1 PUSH2 0x84A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2EE SWAP1 PUSH2 0x84A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x33B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x310 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x33B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x31E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x3AB SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x3EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x464 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x4EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x4E6 SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x521 SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x55B SWAP1 DUP5 SWAP1 PUSH2 0x832 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x5C1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x60E SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x640 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x2C2 SWAP1 PUSH2 0x84A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x693 CALLER DUP5 DUP5 PUSH2 0x3BC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6C7 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6AB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x752 DUP4 PUSH2 0x70D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x77E DUP5 PUSH2 0x70D JUMP JUMPDEST SWAP3 POP PUSH2 0x78C PUSH1 0x20 DUP6 ADD PUSH2 0x70D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x693 DUP3 PUSH2 0x70D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7EC DUP4 PUSH2 0x70D JUMP JUMPDEST SWAP2 POP PUSH2 0x7FA PUSH1 0x20 DUP5 ADD PUSH2 0x70D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x845 JUMPI PUSH2 0x845 PUSH2 0x803 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x85E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x898 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x8B0 JUMPI PUSH2 0x8B0 PUSH2 0x803 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB1 0xD7 XOR 0x5F SWAP7 SSTORE CALLER 0xB3 0xB0 SWAP15 DUP9 KECCAK256 0x2A EXTCODECOPY 0xCD 0x4F RETURNDATASIZE SWAP4 0x1E 0xDB 0xB6 PUSH7 0x862F339B1FEB40 XOR PUSH8 0x1364736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"731:36:24:-:0;712:1668;731:36;;712:1668;731:36;;;-1:-1:-1;;;731:36:24;;;;;;-1:-1:-1;;731:36:24;;:::i;:::-;-1:-1:-1;771:29:24;;;;;;;;;;;;;-1:-1:-1;;;771:29:24;;;;;;;;;;;;:::i;:::-;-1:-1:-1;804:26:24;;;-1:-1:-1;;804:26:24;828:2;804:26;;;712:1668;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;712:1668:24;;;-1:-1:-1;712:1668:24;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:380:124;93:1;89:12;;;;136;;;157:61;;211:4;203:6;199:17;189:27;;157:61;264:2;256:6;253:14;233:18;230:38;227:161;;;310:10;305:3;301:20;298:1;291:31;345:4;342:1;335:15;373:4;370:1;363:15;227:161;;14:380;;;:::o;:::-;712:1668:24;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3160":{"entryPoint":null,"id":3160,"parameterSlots":0,"returnSlots":0},"@allowance_3153":{"entryPoint":null,"id":3153,"parameterSlots":0,"returnSlots":0},"@approve_3256":{"entryPoint":835,"id":3256,"parameterSlots":2,"returnSlots":1},"@balanceOf_3147":{"entryPoint":null,"id":3147,"parameterSlots":0,"returnSlots":0},"@decimals_3115":{"entryPoint":null,"id":3115,"parameterSlots":0,"returnSlots":0},"@deposit_3179":{"entryPoint":602,"id":3179,"parameterSlots":0,"returnSlots":0},"@name_3109":{"entryPoint":693,"id":3109,"parameterSlots":0,"returnSlots":0},"@symbol_3112":{"entryPoint":1657,"id":3112,"parameterSlots":0,"returnSlots":0},"@totalSupply_3228":{"entryPoint":null,"id":3228,"parameterSlots":0,"returnSlots":1},"@transferFrom_3352":{"entryPoint":956,"id":3352,"parameterSlots":3,"returnSlots":1},"@transfer_3273":{"entryPoint":1670,"id":3273,"parameterSlots":2,"returnSlots":1},"@withdraw_3216":{"entryPoint":1491,"id":3216,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1805,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1973,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2000,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":1888,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":1846,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":1948,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1690,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2098,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":2206,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2122,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":2051,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3563:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:124"},"nodeType":"YulFunctionCall","src":"166:21:124"},"nodeType":"YulExpressionStatement","src":"166:21:124"},{"nodeType":"YulVariableDeclaration","src":"196:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:124"},"nodeType":"YulFunctionCall","src":"232:34:124"},"nodeType":"YulExpressionStatement","src":"232:34:124"},{"nodeType":"YulVariableDeclaration","src":"275:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:124"},"nodeType":"YulFunctionCall","src":"369:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:124"},"nodeType":"YulFunctionCall","src":"365:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:124"},"nodeType":"YulFunctionCall","src":"403:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:124"},"nodeType":"YulFunctionCall","src":"399:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:124"},"nodeType":"YulFunctionCall","src":"393:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:124"},"nodeType":"YulFunctionCall","src":"358:66:124"},"nodeType":"YulExpressionStatement","src":"358:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:124"},"nodeType":"YulFunctionCall","src":"302:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:124","statements":[{"nodeType":"YulAssignment","src":"318:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:124"},"nodeType":"YulFunctionCall","src":"323:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:124","statements":[]},"src":"294:140:124"},{"body":{"nodeType":"YulBlock","src":"468:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:124"},"nodeType":"YulFunctionCall","src":"493:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:124"},"nodeType":"YulFunctionCall","src":"489:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:124"},"nodeType":"YulFunctionCall","src":"482:42:124"},"nodeType":"YulExpressionStatement","src":"482:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:124"},"nodeType":"YulFunctionCall","src":"446:13:124"},"nodeType":"YulIf","src":"443:91:124"},{"nodeType":"YulAssignment","src":"543:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:124"},"nodeType":"YulFunctionCall","src":"574:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:124"},"nodeType":"YulFunctionCall","src":"570:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:124"},"nodeType":"YulFunctionCall","src":"555:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:124"},"nodeType":"YulFunctionCall","src":"551:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:124","type":""}],"src":"14:656:124"},{"body":{"nodeType":"YulBlock","src":"724:147:124","statements":[{"nodeType":"YulAssignment","src":"734:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:124"},"nodeType":"YulFunctionCall","src":"743:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:124"}]},{"body":{"nodeType":"YulBlock","src":"849:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:124"},"nodeType":"YulFunctionCall","src":"851:12:124"},"nodeType":"YulExpressionStatement","src":"851:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:124"},"nodeType":"YulFunctionCall","src":"792:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:124"},"nodeType":"YulFunctionCall","src":"782:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:124"},"nodeType":"YulFunctionCall","src":"775:73:124"},"nodeType":"YulIf","src":"772:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:124","type":""}],"src":"675:196:124"},{"body":{"nodeType":"YulBlock","src":"963:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:124"},"nodeType":"YulFunctionCall","src":"1011:12:124"},"nodeType":"YulExpressionStatement","src":"1011:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:124"},"nodeType":"YulFunctionCall","src":"980:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:124"},"nodeType":"YulFunctionCall","src":"976:32:124"},"nodeType":"YulIf","src":"973:52:124"},{"nodeType":"YulAssignment","src":"1034:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:124"},"nodeType":"YulFunctionCall","src":"1044:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:124"}]},{"nodeType":"YulAssignment","src":"1082:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:124"},"nodeType":"YulFunctionCall","src":"1105:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:124"},"nodeType":"YulFunctionCall","src":"1092:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:124","type":""}],"src":"876:254:124"},{"body":{"nodeType":"YulBlock","src":"1230:92:124","statements":[{"nodeType":"YulAssignment","src":"1240:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:124"},"nodeType":"YulFunctionCall","src":"1248:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:124"},"nodeType":"YulFunctionCall","src":"1300:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:124"},"nodeType":"YulFunctionCall","src":"1293:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:124"},"nodeType":"YulFunctionCall","src":"1275:41:124"},"nodeType":"YulExpressionStatement","src":"1275:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:124","type":""}],"src":"1135:187:124"},{"body":{"nodeType":"YulBlock","src":"1428:76:124","statements":[{"nodeType":"YulAssignment","src":"1438:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:124"},"nodeType":"YulFunctionCall","src":"1446:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:124"},"nodeType":"YulFunctionCall","src":"1473:25:124"},"nodeType":"YulExpressionStatement","src":"1473:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:124","type":""}],"src":"1327:177:124"},{"body":{"nodeType":"YulBlock","src":"1613:224:124","statements":[{"body":{"nodeType":"YulBlock","src":"1659:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1668:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1671:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1661:6:124"},"nodeType":"YulFunctionCall","src":"1661:12:124"},"nodeType":"YulExpressionStatement","src":"1661:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1634:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1630:3:124"},"nodeType":"YulFunctionCall","src":"1630:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1655:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1626:3:124"},"nodeType":"YulFunctionCall","src":"1626:32:124"},"nodeType":"YulIf","src":"1623:52:124"},{"nodeType":"YulAssignment","src":"1684:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1694:18:124"},"nodeType":"YulFunctionCall","src":"1694:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1684:6:124"}]},{"nodeType":"YulAssignment","src":"1732:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1765:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1776:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1761:3:124"},"nodeType":"YulFunctionCall","src":"1761:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1742:18:124"},"nodeType":"YulFunctionCall","src":"1742:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1732:6:124"}]},{"nodeType":"YulAssignment","src":"1789:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1816:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1827:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1812:3:124"},"nodeType":"YulFunctionCall","src":"1812:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1799:12:124"},"nodeType":"YulFunctionCall","src":"1799:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1789:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1563:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1574:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1586:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1594:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1602:6:124","type":""}],"src":"1509:328:124"},{"body":{"nodeType":"YulBlock","src":"1912:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"1958:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1967:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1970:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1960:6:124"},"nodeType":"YulFunctionCall","src":"1960:12:124"},"nodeType":"YulExpressionStatement","src":"1960:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1933:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1942:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1929:3:124"},"nodeType":"YulFunctionCall","src":"1929:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1954:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1925:3:124"},"nodeType":"YulFunctionCall","src":"1925:32:124"},"nodeType":"YulIf","src":"1922:52:124"},{"nodeType":"YulAssignment","src":"1983:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2006:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1993:12:124"},"nodeType":"YulFunctionCall","src":"1993:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1983:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1878:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1889:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1901:6:124","type":""}],"src":"1842:180:124"},{"body":{"nodeType":"YulBlock","src":"2124:87:124","statements":[{"nodeType":"YulAssignment","src":"2134:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2146:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2157:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2142:3:124"},"nodeType":"YulFunctionCall","src":"2142:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2134:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2176:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2191:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2199:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2187:3:124"},"nodeType":"YulFunctionCall","src":"2187:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2169:6:124"},"nodeType":"YulFunctionCall","src":"2169:36:124"},"nodeType":"YulExpressionStatement","src":"2169:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2093:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2104:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2115:4:124","type":""}],"src":"2027:184:124"},{"body":{"nodeType":"YulBlock","src":"2286:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"2332:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2341:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2344:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2334:6:124"},"nodeType":"YulFunctionCall","src":"2334:12:124"},"nodeType":"YulExpressionStatement","src":"2334:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2307:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2316:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2303:3:124"},"nodeType":"YulFunctionCall","src":"2303:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2328:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2299:3:124"},"nodeType":"YulFunctionCall","src":"2299:32:124"},"nodeType":"YulIf","src":"2296:52:124"},{"nodeType":"YulAssignment","src":"2357:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2386:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2367:18:124"},"nodeType":"YulFunctionCall","src":"2367:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2357:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2252:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2263:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2275:6:124","type":""}],"src":"2216:186:124"},{"body":{"nodeType":"YulBlock","src":"2494:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"2540:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2549:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2552:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2542:6:124"},"nodeType":"YulFunctionCall","src":"2542:12:124"},"nodeType":"YulExpressionStatement","src":"2542:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2515:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2524:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2511:3:124"},"nodeType":"YulFunctionCall","src":"2511:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2536:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2507:3:124"},"nodeType":"YulFunctionCall","src":"2507:32:124"},"nodeType":"YulIf","src":"2504:52:124"},{"nodeType":"YulAssignment","src":"2565:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2594:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2575:18:124"},"nodeType":"YulFunctionCall","src":"2575:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2565:6:124"}]},{"nodeType":"YulAssignment","src":"2613:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2646:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2657:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2642:3:124"},"nodeType":"YulFunctionCall","src":"2642:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2623:18:124"},"nodeType":"YulFunctionCall","src":"2623:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2613:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2452:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2463:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2475:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2483:6:124","type":""}],"src":"2407:260:124"},{"body":{"nodeType":"YulBlock","src":"2704:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2721:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2724:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2714:6:124"},"nodeType":"YulFunctionCall","src":"2714:88:124"},"nodeType":"YulExpressionStatement","src":"2714:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2818:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2821:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2811:6:124"},"nodeType":"YulFunctionCall","src":"2811:15:124"},"nodeType":"YulExpressionStatement","src":"2811:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2842:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2845:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2835:6:124"},"nodeType":"YulFunctionCall","src":"2835:15:124"},"nodeType":"YulExpressionStatement","src":"2835:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2672:184:124"},{"body":{"nodeType":"YulBlock","src":"2909:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"2936:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2938:16:124"},"nodeType":"YulFunctionCall","src":"2938:18:124"},"nodeType":"YulExpressionStatement","src":"2938:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2925:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2932:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2928:3:124"},"nodeType":"YulFunctionCall","src":"2928:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2922:2:124"},"nodeType":"YulFunctionCall","src":"2922:13:124"},"nodeType":"YulIf","src":"2919:39:124"},{"nodeType":"YulAssignment","src":"2967:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2978:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"2981:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2974:3:124"},"nodeType":"YulFunctionCall","src":"2974:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2967:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2892:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"2895:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2901:3:124","type":""}],"src":"2861:128:124"},{"body":{"nodeType":"YulBlock","src":"3049:382:124","statements":[{"nodeType":"YulAssignment","src":"3059:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3073:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3076:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3069:3:124"},"nodeType":"YulFunctionCall","src":"3069:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3059:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3090:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3120:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"3126:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3116:3:124"},"nodeType":"YulFunctionCall","src":"3116:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3094:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3167:31:124","statements":[{"nodeType":"YulAssignment","src":"3169:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3183:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3191:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3179:3:124"},"nodeType":"YulFunctionCall","src":"3179:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3169:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3147:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3140:6:124"},"nodeType":"YulFunctionCall","src":"3140:26:124"},"nodeType":"YulIf","src":"3137:61:124"},{"body":{"nodeType":"YulBlock","src":"3257:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3278:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3281:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3271:6:124"},"nodeType":"YulFunctionCall","src":"3271:88:124"},"nodeType":"YulExpressionStatement","src":"3271:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3379:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3382:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3372:6:124"},"nodeType":"YulFunctionCall","src":"3372:15:124"},"nodeType":"YulExpressionStatement","src":"3372:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3407:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3410:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3400:6:124"},"nodeType":"YulFunctionCall","src":"3400:15:124"},"nodeType":"YulExpressionStatement","src":"3400:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3213:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3236:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3244:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3233:2:124"},"nodeType":"YulFunctionCall","src":"3233:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3210:2:124"},"nodeType":"YulFunctionCall","src":"3210:38:124"},"nodeType":"YulIf","src":"3207:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3029:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3038:6:124","type":""}],"src":"2994:437:124"},{"body":{"nodeType":"YulBlock","src":"3485:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"3507:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3509:16:124"},"nodeType":"YulFunctionCall","src":"3509:18:124"},"nodeType":"YulExpressionStatement","src":"3509:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3501:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3504:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3498:2:124"},"nodeType":"YulFunctionCall","src":"3498:8:124"},"nodeType":"YulIf","src":"3495:34:124"},{"nodeType":"YulAssignment","src":"3538:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3550:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3553:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3546:3:124"},"nodeType":"YulFunctionCall","src":"3546:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3538:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3467:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3470:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3476:4:124","type":""}],"src":"3436:125:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f6919061069a565b60405180910390f35b34801561010b57600080fd5b5061011f61011a366004610736565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610760565b6103bc565b34801561017857600080fd5b506100cd61018736600461079c565b6105d3565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d33660046107b5565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610679565b34801561020657600080fd5b5061011f610215366004610736565b610686565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d3660046107d0565b600460209081526000928352604080842090915290825290205481565b3360009081526003602052604081208054349290610279908490610832565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c29061084a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee9061084a565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156103ee57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610464575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156104ec5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104a657600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080548492906104e690849061089e565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061052190849061089e565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061055b908490610832565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105c191815260200190565b60405180910390a35060019392505050565b336000908152600360205260409020548111156105ef57600080fd5b336000908152600360205260408120805483929061060e90849061089e565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610640573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c29061084a565b60006106933384846103bc565b9392505050565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461073157600080fd5b919050565b6000806040838503121561074957600080fd5b6107528361070d565b946020939093013593505050565b60008060006060848603121561077557600080fd5b61077e8461070d565b925061078c6020850161070d565b9150604084013590509250925092565b6000602082840312156107ae57600080fd5b5035919050565b6000602082840312156107c757600080fd5b6106938261070d565b600080604083850312156107e357600080fd5b6107ec8361070d565b91506107fa6020840161070d565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561084557610845610803565b500190565b600181811c9082168061085e57607f821691505b60208210811415610898577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156108b0576108b0610803565b50039056fea2646970667358221220b1d7185f965533b3b09e88202a3ccd4f3d931edbb666862f339b1feb4018671364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FA JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x16C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xCF JUMPI PUSH2 0xCD PUSH2 0x25A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x2B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x69A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x11A CALLDATASIZE PUSH1 0x4 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x343 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0x760 JUMP JUMPDEST PUSH2 0x3BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x187 CALLDATASIZE PUSH1 0x4 PUSH2 0x79C JUMP JUMPDEST PUSH2 0x5D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x1A6 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E PUSH2 0x1D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x7B5 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x679 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x686 JUMP JUMPDEST PUSH2 0xCD PUSH2 0x25A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E PUSH2 0x23D CALLDATASIZE PUSH1 0x4 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x279 SWAP1 DUP5 SWAP1 PUSH2 0x832 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x2C2 SWAP1 PUSH2 0x84A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2EE SWAP1 PUSH2 0x84A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x33B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x310 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x33B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x31E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x3AB SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x3EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x464 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x4EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x4E6 SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x521 SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x55B SWAP1 DUP5 SWAP1 PUSH2 0x832 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x5C1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x60E SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x640 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x2C2 SWAP1 PUSH2 0x84A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x693 CALLER DUP5 DUP5 PUSH2 0x3BC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6C7 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6AB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x752 DUP4 PUSH2 0x70D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x77E DUP5 PUSH2 0x70D JUMP JUMPDEST SWAP3 POP PUSH2 0x78C PUSH1 0x20 DUP6 ADD PUSH2 0x70D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x693 DUP3 PUSH2 0x70D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7EC DUP4 PUSH2 0x70D JUMP JUMPDEST SWAP2 POP PUSH2 0x7FA PUSH1 0x20 DUP5 ADD PUSH2 0x70D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x845 JUMPI PUSH2 0x845 PUSH2 0x803 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x85E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x898 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x8B0 JUMPI PUSH2 0x8B0 PUSH2 0x803 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB1 0xD7 XOR 0x5F SWAP7 SSTORE CALLER 0xB3 0xB0 SWAP15 DUP9 KECCAK256 0x2A EXTCODECOPY 0xCD 0x4F RETURNDATASIZE SWAP4 0x1E 0xDB 0xB6 PUSH7 0x862F339B1FEB40 XOR PUSH8 0x1364736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"712:1668:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1237:9;:7;:9::i;:::-;712:1668;;;;;731:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1676:166;;;;;;;;;;-1:-1:-1;1676:166:24;;;;;:::i;:::-;;:::i;:::-;;;1300:14:124;;1293:22;1275:41;;1263:2;1248:18;1676:166:24;1135:187:124;1580:92:24;;;;;;;;;;-1:-1:-1;1646:21:24;1580:92;;;1473:25:124;;;1461:2;1446:18;1580:92:24;1327:177:124;1968:410:24;;;;;;;;;;-1:-1:-1;1968:410:24;;;;;:::i;:::-;;:::i;1379:197::-;;;;;;;;;;-1:-1:-1;1379:197:24;;;;;:::i;:::-;;:::i;804:26::-;;;;;;;;;;-1:-1:-1;804:26:24;;;;;;;;;;;2199:4:124;2187:17;;;2169:36;;2157:2;2142:18;804:26:24;2027:184:124;1087:44:24;;;;;;;;;;-1:-1:-1;1087:44:24;;;;;:::i;:::-;;;;;;;;;;;;;;771:29;;;;;;;;;;;;;:::i;1846:118::-;;;;;;;;;;-1:-1:-1;1846:118:24;;;;;:::i;:::-;;:::i;1255:120::-;;;:::i;1135:64::-;;;;;;;;;;-1:-1:-1;1135:64:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1255:120;1305:10;1295:21;;;;:9;:21;;;;;:34;;1320:9;;1295:21;:34;;1320:9;;1295:34;:::i;:::-;;;;-1:-1:-1;;1340:30:24;;1360:9;1473:25:124;;1348:10:24;;1340:30;;1461:2:124;1446:18;1340:30:24;;;;;;;1255:120::o;731:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1676:166::-;1757:10;1735:4;1747:21;;;:9;:21;;;;;;;;;:26;;;;;;;;;;:32;;;1790:30;1735:4;;1747:26;;1790:30;;;;1776:3;1473:25:124;;1461:2;1446:18;;1327:177;1790:30:24;;;;;;;;-1:-1:-1;1833:4:24;1676:166;;;;:::o;1968:410::-;2065:14;;;2045:4;2065:14;;;:9;:14;;;;;;:21;-1:-1:-1;2065:21:24;2057:30;;;;;;2098:17;;;2105:10;2098:17;;;;:68;;-1:-1:-1;2119:14:24;;;;;;;:9;:14;;;;;;;;2134:10;2119:26;;;;;;;;2149:17;2119:47;;2098:68;2094:172;;;2184:14;;;;;;;:9;:14;;;;;;;;2199:10;2184:26;;;;;;;;:33;-1:-1:-1;2184:33:24;2176:42;;;;;;2226:14;;;;;;;:9;:14;;;;;;;;2241:10;2226:26;;;;;;;:33;;2256:3;;2226:14;:33;;2256:3;;2226:33;:::i;:::-;;;;-1:-1:-1;;2094:172:24;2272:14;;;;;;;:9;:14;;;;;:21;;2290:3;;2272:14;:21;;2290:3;;2272:21;:::i;:::-;;;;-1:-1:-1;;2299:14:24;;;;;;;:9;:14;;;;;:21;;2317:3;;2299:14;:21;;2317:3;;2299:21;:::i;:::-;;;;;;;;2346:3;2332:23;;2341:3;2332:23;;;2351:3;2332:23;;;;1473:25:124;;1461:2;1446:18;;1327:177;2332:23:24;;;;;;;;-1:-1:-1;2369:4:24;1968:410;;;;;:::o;1379:197::-;1441:10;1431:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1431:28:24;1423:37;;;;;;1476:10;1466:21;;;;:9;:21;;;;;:28;;1491:3;;1466:21;:28;;1491:3;;1466:28;:::i;:::-;;;;-1:-1:-1;;1500:33:24;;1508:10;;1500:33;;;;;1529:3;;1500:33;;;;1529:3;1508:10;1500:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1544:27:24;;1473:25:124;;;1555:10:24;;1544:27;;1461:2:124;1446:18;1544:27:24;;;;;;;1379:197;:::o;771:29::-;;;;;;;:::i;1846:118::-;1906:4;1925:34;1938:10;1950:3;1955;1925:12;:34::i;:::-;1918:41;1846:118;-1:-1:-1;;;1846:118:24:o;14:656:124:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:124;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:124:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:124:o;1509:328::-;1586:6;1594;1602;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;1694:29;1713:9;1694:29;:::i;:::-;1684:39;;1742:38;1776:2;1765:9;1761:18;1742:38;:::i;:::-;1732:48;;1827:2;1816:9;1812:18;1799:32;1789:42;;1509:328;;;;;:::o;1842:180::-;1901:6;1954:2;1942:9;1933:7;1929:23;1925:32;1922:52;;;1970:1;1967;1960:12;1922:52;-1:-1:-1;1993:23:124;;1842:180;-1:-1:-1;1842:180:124:o;2216:186::-;2275:6;2328:2;2316:9;2307:7;2303:23;2299:32;2296:52;;;2344:1;2341;2334:12;2296:52;2367:29;2386:9;2367:29;:::i;2407:260::-;2475:6;2483;2536:2;2524:9;2515:7;2511:23;2507:32;2504:52;;;2552:1;2549;2542:12;2504:52;2575:29;2594:9;2575:29;:::i;:::-;2565:39;;2623:38;2657:2;2646:9;2642:18;2623:38;:::i;:::-;2613:48;;2407:260;;;;;:::o;2672:184::-;2724:77;2721:1;2714:88;2821:4;2818:1;2811:15;2845:4;2842:1;2835:15;2861:128;2901:3;2932:1;2928:6;2925:1;2922:13;2919:39;;;2938:18;;:::i;:::-;-1:-1:-1;2974:9:124;;2861:128::o;2994:437::-;3073:1;3069:12;;;;3116;;;3137:61;;3191:4;3183:6;3179:17;3169:27;;3137:61;3244:2;3236:6;3233:14;3213:18;3210:38;3207:218;;;3281:77;3278:1;3271:88;3382:4;3379:1;3372:15;3410:4;3407:1;3400:15;3207:218;;2994:437;;;:::o;3436:125::-;3476:4;3504:1;3501;3498:8;3495:34;;;3509:18;;:::i;:::-;-1:-1:-1;3546:9:124;;3436:125::o"},"gasEstimates":{"creation":{"codeDepositCost":"456600","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24521","balanceOf(address)":"2552","decimals()":"2336","deposit()":"25965","name()":"infinite","symbol()":"infinite","totalSupply()":"206","transfer(address,uint256)":"53297","transferFrom(address,address,uint256)":"infinite","withdraw(uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","deposit()":"d0e30db0","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"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\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/weth/WETH9.sol\":\"WETH9\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/weth/WETH9.sol\":{\"content\":\"// Copyright (C) 2015, 2016, 2017 Dapphub\\n\\n// This program is free software: you can redistribute it and/or modify\\n// it under the terms of the GNU General Public License as published by\\n// the Free Software Foundation, either version 3 of the License, or\\n// (at your option) any later version.\\n\\n// This program is distributed in the hope that it will be useful,\\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n// GNU General Public License for more details.\\n\\n// You should have received a copy of the GNU General Public License\\n// along with this program.  If not, see <http://www.gnu.org/licenses/>.\\n\\npragma solidity ^0.8.10;\\n\\ncontract WETH9 {\\n  string public name = 'Wrapped Ether';\\n  string public symbol = 'WETH';\\n  uint8 public decimals = 18;\\n\\n  event Approval(address indexed src, address indexed guy, uint256 wad);\\n  event Transfer(address indexed src, address indexed dst, uint256 wad);\\n  event Deposit(address indexed dst, uint256 wad);\\n  event Withdrawal(address indexed src, uint256 wad);\\n\\n  mapping(address => uint256) public balanceOf;\\n  mapping(address => mapping(address => uint256)) public allowance;\\n\\n  receive() external payable {\\n    deposit();\\n  }\\n\\n  function deposit() public payable {\\n    balanceOf[msg.sender] += msg.value;\\n    emit Deposit(msg.sender, msg.value);\\n  }\\n\\n  function withdraw(uint256 wad) public {\\n    require(balanceOf[msg.sender] >= wad);\\n    balanceOf[msg.sender] -= wad;\\n    payable(msg.sender).transfer(wad);\\n    emit Withdrawal(msg.sender, wad);\\n  }\\n\\n  function totalSupply() public view returns (uint256) {\\n    return address(this).balance;\\n  }\\n\\n  function approve(address guy, uint256 wad) public returns (bool) {\\n    allowance[msg.sender][guy] = wad;\\n    emit Approval(msg.sender, guy, wad);\\n    return true;\\n  }\\n\\n  function transfer(address dst, uint256 wad) public returns (bool) {\\n    return transferFrom(msg.sender, dst, wad);\\n  }\\n\\n  function transferFrom(address src, address dst, uint256 wad) public returns (bool) {\\n    require(balanceOf[src] >= wad);\\n\\n    if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) {\\n      require(allowance[src][msg.sender] >= wad);\\n      allowance[src][msg.sender] -= wad;\\n    }\\n\\n    balanceOf[src] -= wad;\\n    balanceOf[dst] += wad;\\n\\n    emit Transfer(src, dst, wad);\\n\\n    return true;\\n  }\\n}\\n\\n/*\\n                    GNU GENERAL PUBLIC LICENSE\\n                       Version 3, 29 June 2007\\n\\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\\n Everyone is permitted to copy and distribute verbatim copies\\n of this license document, but changing it is not allowed.\\n\\n                            Preamble\\n\\n  The GNU General Public License is a free, copyleft license for\\nsoftware and other kinds of works.\\n\\n  The licenses for most software and other practical works are designed\\nto take away your freedom to share and change the works.  By contrast,\\nthe GNU General Public License is intended to guarantee your freedom to\\nshare and change all versions of a program--to make sure it remains free\\nsoftware for all its users.  We, the Free Software Foundation, use the\\nGNU General Public License for most of our software; it applies also to\\nany other work released this way by its authors.  You can apply it to\\nyour programs, too.\\n\\n  When we speak of free software, we are referring to freedom, not\\nprice.  Our General Public Licenses are designed to make sure that you\\nhave the freedom to distribute copies of free software (and charge for\\nthem if you wish), that you receive source code or can get it if you\\nwant it, that you can change the software or use pieces of it in new\\nfree programs, and that you know you can do these things.\\n\\n  To protect your rights, we need to prevent others from denying you\\nthese rights or asking you to surrender the rights.  Therefore, you have\\ncertain responsibilities if you distribute copies of the software, or if\\nyou modify it: responsibilities to respect the freedom of others.\\n\\n  For example, if you distribute copies of such a program, whether\\ngratis or for a fee, you must pass on to the recipients the same\\nfreedoms that you received.  You must make sure that they, too, receive\\nor can get the source code.  And you must show them these terms so they\\nknow their rights.\\n\\n  Developers that use the GNU GPL protect your rights with two steps:\\n(1) assert copyright on the software, and (2) offer you this License\\ngiving you legal permission to copy, distribute and/or modify it.\\n\\n  For the developers' and authors' protection, the GPL clearly explains\\nthat there is no warranty for this free software.  For both users' and\\nauthors' sake, the GPL requires that modified versions be marked as\\nchanged, so that their problems will not be attributed erroneously to\\nauthors of previous versions.\\n\\n  Some devices are designed to deny users access to install or run\\nmodified versions of the software inside them, although the manufacturer\\ncan do so.  This is fundamentally incompatible with the aim of\\nprotecting users' freedom to change the software.  The systematic\\npattern of such abuse occurs in the area of products for individuals to\\nuse, which is precisely where it is most unacceptable.  Therefore, we\\nhave designed this version of the GPL to prohibit the practice for those\\nproducts.  If such problems arise substantially in other domains, we\\nstand ready to extend this provision to those domains in future versions\\nof the GPL, as needed to protect the freedom of users.\\n\\n  Finally, every program is threatened constantly by software patents.\\nStates should not allow patents to restrict development and use of\\nsoftware on general-purpose computers, but in those that do, we wish to\\navoid the special danger that patents applied to a free program could\\nmake it effectively proprietary.  To prevent this, the GPL assures that\\npatents cannot be used to render the program non-free.\\n\\n  The precise terms and conditions for copying, distribution and\\nmodification follow.\\n\\n                       TERMS AND CONDITIONS\\n\\n  0. Definitions.\\n\\n  \\\"This License\\\" refers to version 3 of the GNU General Public License.\\n\\n  \\\"Copyright\\\" also means copyright-like laws that apply to other kinds of\\nworks, such as semiconductor masks.\\n\\n  \\\"The Program\\\" refers to any copyrightable work licensed under this\\nLicense.  Each licensee is addressed as \\\"you\\\".  \\\"Licensees\\\" and\\n\\\"recipients\\\" may be individuals or organizations.\\n\\n  To \\\"modify\\\" a work means to copy from or adapt all or part of the work\\nin a fashion requiring copyright permission, other than the making of an\\nexact copy.  The resulting work is called a \\\"modified version\\\" of the\\nearlier work or a work \\\"based on\\\" the earlier work.\\n\\n  A \\\"covered work\\\" means either the unmodified Program or a work based\\non the Program.\\n\\n  To \\\"propagate\\\" a work means to do anything with it that, without\\npermission, would make you directly or secondarily liable for\\ninfringement under applicable copyright law, except executing it on a\\ncomputer or modifying a private copy.  Propagation includes copying,\\ndistribution (with or without modification), making available to the\\npublic, and in some countries other activities as well.\\n\\n  To \\\"convey\\\" a work means any kind of propagation that enables other\\nparties to make or receive copies.  Mere interaction with a user through\\na computer network, with no transfer of a copy, is not conveying.\\n\\n  An interactive user interface displays \\\"Appropriate Legal Notices\\\"\\nto the extent that it includes a convenient and prominently visible\\nfeature that (1) displays an appropriate copyright notice, and (2)\\ntells the user that there is no warranty for the work (except to the\\nextent that warranties are provided), that licensees may convey the\\nwork under this License, and how to view a copy of this License.  If\\nthe interface presents a list of user commands or options, such as a\\nmenu, a prominent item in the list meets this criterion.\\n\\n  1. Source Code.\\n\\n  The \\\"source code\\\" for a work means the preferred form of the work\\nfor making modifications to it.  \\\"Object code\\\" means any non-source\\nform of a work.\\n\\n  A \\\"Standard Interface\\\" means an interface that either is an official\\nstandard defined by a recognized standards body, or, in the case of\\ninterfaces specified for a particular programming language, one that\\nis widely used among developers working in that language.\\n\\n  The \\\"System Libraries\\\" of an executable work include anything, other\\nthan the work as a whole, that (a) is included in the normal form of\\npackaging a Major Component, but which is not part of that Major\\nComponent, and (b) serves only to enable use of the work with that\\nMajor Component, or to implement a Standard Interface for which an\\nimplementation is available to the public in source code form.  A\\n\\\"Major Component\\\", in this context, means a major essential component\\n(kernel, window system, and so on) of the specific operating system\\n(if any) on which the executable work runs, or a compiler used to\\nproduce the work, or an object code interpreter used to run it.\\n\\n  The \\\"Corresponding Source\\\" for a work in object code form means all\\nthe source code needed to generate, install, and (for an executable\\nwork) run the object code and to modify the work, including scripts to\\ncontrol those activities.  However, it does not include the work's\\nSystem Libraries, or general-purpose tools or generally available free\\nprograms which are used unmodified in performing those activities but\\nwhich are not part of the work.  For example, Corresponding Source\\nincludes interface definition files associated with source files for\\nthe work, and the source code for shared libraries and dynamically\\nlinked subprograms that the work is specifically designed to require,\\nsuch as by intimate data communication or control flow between those\\nsubprograms and other parts of the work.\\n\\n  The Corresponding Source need not include anything that users\\ncan regenerate automatically from other parts of the Corresponding\\nSource.\\n\\n  The Corresponding Source for a work in source code form is that\\nsame work.\\n\\n  2. Basic Permissions.\\n\\n  All rights granted under this License are granted for the term of\\ncopyright on the Program, and are irrevocable provided the stated\\nconditions are met.  This License explicitly affirms your unlimited\\npermission to run the unmodified Program.  The output from running a\\ncovered work is covered by this License only if the output, given its\\ncontent, constitutes a covered work.  This License acknowledges your\\nrights of fair use or other equivalent, as provided by copyright law.\\n\\n  You may make, run and propagate covered works that you do not\\nconvey, without conditions so long as your license otherwise remains\\nin force.  You may convey covered works to others for the sole purpose\\nof having them make modifications exclusively for you, or provide you\\nwith facilities for running those works, provided that you comply with\\nthe terms of this License in conveying all material for which you do\\nnot control copyright.  Those thus making or running the covered works\\nfor you must do so exclusively on your behalf, under your direction\\nand control, on terms that prohibit them from making any copies of\\nyour copyrighted material outside their relationship with you.\\n\\n  Conveying under any other circumstances is permitted solely under\\nthe conditions stated below.  Sublicensing is not allowed; section 10\\nmakes it unnecessary.\\n\\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\\n\\n  No covered work shall be deemed part of an effective technological\\nmeasure under any applicable law fulfilling obligations under article\\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\\nsimilar laws prohibiting or restricting circumvention of such\\nmeasures.\\n\\n  When you convey a covered work, you waive any legal power to forbid\\ncircumvention of technological measures to the extent such circumvention\\nis effected by exercising rights under this License with respect to\\nthe covered work, and you disclaim any intention to limit operation or\\nmodification of the work as a means of enforcing, against the work's\\nusers, your or third parties' legal rights to forbid circumvention of\\ntechnological measures.\\n\\n  4. Conveying Verbatim Copies.\\n\\n  You may convey verbatim copies of the Program's source code as you\\nreceive it, in any medium, provided that you conspicuously and\\nappropriately publish on each copy an appropriate copyright notice;\\nkeep intact all notices stating that this License and any\\nnon-permissive terms added in accord with section 7 apply to the code;\\nkeep intact all notices of the absence of any warranty; and give all\\nrecipients a copy of this License along with the Program.\\n\\n  You may charge any price or no price for each copy that you convey,\\nand you may offer support or warranty protection for a fee.\\n\\n  5. Conveying Modified Source Versions.\\n\\n  You may convey a work based on the Program, or the modifications to\\nproduce it from the Program, in the form of source code under the\\nterms of section 4, provided that you also meet all of these conditions:\\n\\n    a) The work must carry prominent notices stating that you modified\\n    it, and giving a relevant date.\\n\\n    b) The work must carry prominent notices stating that it is\\n    released under this License and any conditions added under section\\n    7.  This requirement modifies the requirement in section 4 to\\n    \\\"keep intact all notices\\\".\\n\\n    c) You must license the entire work, as a whole, under this\\n    License to anyone who comes into possession of a copy.  This\\n    License will therefore apply, along with any applicable section 7\\n    additional terms, to the whole of the work, and all its parts,\\n    regardless of how they are packaged.  This License gives no\\n    permission to license the work in any other way, but it does not\\n    invalidate such permission if you have separately received it.\\n\\n    d) If the work has interactive user interfaces, each must display\\n    Appropriate Legal Notices; however, if the Program has interactive\\n    interfaces that do not display Appropriate Legal Notices, your\\n    work need not make them do so.\\n\\n  A compilation of a covered work with other separate and independent\\nworks, which are not by their nature extensions of the covered work,\\nand which are not combined with it such as to form a larger program,\\nin or on a volume of a storage or distribution medium, is called an\\n\\\"aggregate\\\" if the compilation and its resulting copyright are not\\nused to limit the access or legal rights of the compilation's users\\nbeyond what the individual works permit.  Inclusion of a covered work\\nin an aggregate does not cause this License to apply to the other\\nparts of the aggregate.\\n\\n  6. Conveying Non-Source Forms.\\n\\n  You may convey a covered work in object code form under the terms\\nof sections 4 and 5, provided that you also convey the\\nmachine-readable Corresponding Source under the terms of this License,\\nin one of these ways:\\n\\n    a) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by the\\n    Corresponding Source fixed on a durable physical medium\\n    customarily used for software interchange.\\n\\n    b) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by a\\n    written offer, valid for at least three years and valid for as\\n    long as you offer spare parts or customer support for that product\\n    model, to give anyone who possesses the object code either (1) a\\n    copy of the Corresponding Source for all the software in the\\n    product that is covered by this License, on a durable physical\\n    medium customarily used for software interchange, for a price no\\n    more than your reasonable cost of physically performing this\\n    conveying of source, or (2) access to copy the\\n    Corresponding Source from a network server at no charge.\\n\\n    c) Convey individual copies of the object code with a copy of the\\n    written offer to provide the Corresponding Source.  This\\n    alternative is allowed only occasionally and noncommercially, and\\n    only if you received the object code with such an offer, in accord\\n    with subsection 6b.\\n\\n    d) Convey the object code by offering access from a designated\\n    place (gratis or for a charge), and offer equivalent access to the\\n    Corresponding Source in the same way through the same place at no\\n    further charge.  You need not require recipients to copy the\\n    Corresponding Source along with the object code.  If the place to\\n    copy the object code is a network server, the Corresponding Source\\n    may be on a different server (operated by you or a third party)\\n    that supports equivalent copying facilities, provided you maintain\\n    clear directions next to the object code saying where to find the\\n    Corresponding Source.  Regardless of what server hosts the\\n    Corresponding Source, you remain obligated to ensure that it is\\n    available for as long as needed to satisfy these requirements.\\n\\n    e) Convey the object code using peer-to-peer transmission, provided\\n    you inform other peers where the object code and Corresponding\\n    Source of the work are being offered to the general public at no\\n    charge under subsection 6d.\\n\\n  A separable portion of the object code, whose source code is excluded\\nfrom the Corresponding Source as a System Library, need not be\\nincluded in conveying the object code work.\\n\\n  A \\\"User Product\\\" is either (1) a \\\"consumer product\\\", which means any\\ntangible personal property which is normally used for personal, family,\\nor household purposes, or (2) anything designed or sold for incorporation\\ninto a dwelling.  In determining whether a product is a consumer product,\\ndoubtful cases shall be resolved in favor of coverage.  For a particular\\nproduct received by a particular user, \\\"normally used\\\" refers to a\\ntypical or common use of that class of product, regardless of the status\\nof the particular user or of the way in which the particular user\\nactually uses, or expects or is expected to use, the product.  A product\\nis a consumer product regardless of whether the product has substantial\\ncommercial, industrial or non-consumer uses, unless such uses represent\\nthe only significant mode of use of the product.\\n\\n  \\\"Installation Information\\\" for a User Product means any methods,\\nprocedures, authorization keys, or other information required to install\\nand execute modified versions of a covered work in that User Product from\\na modified version of its Corresponding Source.  The information must\\nsuffice to ensure that the continued functioning of the modified object\\ncode is in no case prevented or interfered with solely because\\nmodification has been made.\\n\\n  If you convey an object code work under this section in, or with, or\\nspecifically for use in, a User Product, and the conveying occurs as\\npart of a transaction in which the right of possession and use of the\\nUser Product is transferred to the recipient in perpetuity or for a\\nfixed term (regardless of how the transaction is characterized), the\\nCorresponding Source conveyed under this section must be accompanied\\nby the Installation Information.  But this requirement does not apply\\nif neither you nor any third party retains the ability to install\\nmodified object code on the User Product (for example, the work has\\nbeen installed in ROM).\\n\\n  The requirement to provide Installation Information does not include a\\nrequirement to continue to provide support service, warranty, or updates\\nfor a work that has been modified or installed by the recipient, or for\\nthe User Product in which it has been modified or installed.  Access to a\\nnetwork may be denied when the modification itself materially and\\nadversely affects the operation of the network or violates the rules and\\nprotocols for communication across the network.\\n\\n  Corresponding Source conveyed, and Installation Information provided,\\nin accord with this section must be in a format that is publicly\\ndocumented (and with an implementation available to the public in\\nsource code form), and must require no special password or key for\\nunpacking, reading or copying.\\n\\n  7. Additional Terms.\\n\\n  \\\"Additional permissions\\\" are terms that supplement the terms of this\\nLicense by making exceptions from one or more of its conditions.\\nAdditional permissions that are applicable to the entire Program shall\\nbe treated as though they were included in this License, to the extent\\nthat they are valid under applicable law.  If additional permissions\\napply only to part of the Program, that part may be used separately\\nunder those permissions, but the entire Program remains governed by\\nthis License without regard to the additional permissions.\\n\\n  When you convey a copy of a covered work, you may at your option\\nremove any additional permissions from that copy, or from any part of\\nit.  (Additional permissions may be written to require their own\\nremoval in certain cases when you modify the work.)  You may place\\nadditional permissions on material, added by you to a covered work,\\nfor which you have or can give appropriate copyright permission.\\n\\n  Notwithstanding any other provision of this License, for material you\\nadd to a covered work, you may (if authorized by the copyright holders of\\nthat material) supplement the terms of this License with terms:\\n\\n    a) Disclaiming warranty or limiting liability differently from the\\n    terms of sections 15 and 16 of this License; or\\n\\n    b) Requiring preservation of specified reasonable legal notices or\\n    author attributions in that material or in the Appropriate Legal\\n    Notices displayed by works containing it; or\\n\\n    c) Prohibiting misrepresentation of the origin of that material, or\\n    requiring that modified versions of such material be marked in\\n    reasonable ways as different from the original version; or\\n\\n    d) Limiting the use for publicity purposes of names of licensors or\\n    authors of the material; or\\n\\n    e) Declining to grant rights under trademark law for use of some\\n    trade names, trademarks, or service marks; or\\n\\n    f) Requiring indemnification of licensors and authors of that\\n    material by anyone who conveys the material (or modified versions of\\n    it) with contractual assumptions of liability to the recipient, for\\n    any liability that these contractual assumptions directly impose on\\n    those licensors and authors.\\n\\n  All other non-permissive additional terms are considered \\\"further\\nrestrictions\\\" within the meaning of section 10.  If the Program as you\\nreceived it, or any part of it, contains a notice stating that it is\\ngoverned by this License along with a term that is a further\\nrestriction, you may remove that term.  If a license document contains\\na further restriction but permits relicensing or conveying under this\\nLicense, you may add to a covered work material governed by the terms\\nof that license document, provided that the further restriction does\\nnot survive such relicensing or conveying.\\n\\n  If you add terms to a covered work in accord with this section, you\\nmust place, in the relevant source files, a statement of the\\nadditional terms that apply to those files, or a notice indicating\\nwhere to find the applicable terms.\\n\\n  Additional terms, permissive or non-permissive, may be stated in the\\nform of a separately written license, or stated as exceptions;\\nthe above requirements apply either way.\\n\\n  8. Termination.\\n\\n  You may not propagate or modify a covered work except as expressly\\nprovided under this License.  Any attempt otherwise to propagate or\\nmodify it is void, and will automatically terminate your rights under\\nthis License (including any patent licenses granted under the third\\nparagraph of section 11).\\n\\n  However, if you cease all violation of this License, then your\\nlicense from a particular copyright holder is reinstated (a)\\nprovisionally, unless and until the copyright holder explicitly and\\nfinally terminates your license, and (b) permanently, if the copyright\\nholder fails to notify you of the violation by some reasonable means\\nprior to 60 days after the cessation.\\n\\n  Moreover, your license from a particular copyright holder is\\nreinstated permanently if the copyright holder notifies you of the\\nviolation by some reasonable means, this is the first time you have\\nreceived notice of violation of this License (for any work) from that\\ncopyright holder, and you cure the violation prior to 30 days after\\nyour receipt of the notice.\\n\\n  Termination of your rights under this section does not terminate the\\nlicenses of parties who have received copies or rights from you under\\nthis License.  If your rights have been terminated and not permanently\\nreinstated, you do not qualify to receive new licenses for the same\\nmaterial under section 10.\\n\\n  9. Acceptance Not Required for Having Copies.\\n\\n  You are not required to accept this License in order to receive or\\nrun a copy of the Program.  Ancillary propagation of a covered work\\noccurring solely as a consequence of using peer-to-peer transmission\\nto receive a copy likewise does not require acceptance.  However,\\nnothing other than this License grants you permission to propagate or\\nmodify any covered work.  These actions infringe copyright if you do\\nnot accept this License.  Therefore, by modifying or propagating a\\ncovered work, you indicate your acceptance of this License to do so.\\n\\n  10. Automatic Licensing of Downstream Recipients.\\n\\n  Each time you convey a covered work, the recipient automatically\\nreceives a license from the original licensors, to run, modify and\\npropagate that work, subject to this License.  You are not responsible\\nfor enforcing compliance by third parties with this License.\\n\\n  An \\\"entity transaction\\\" is a transaction transferring control of an\\norganization, or substantially all assets of one, or subdividing an\\norganization, or merging organizations.  If propagation of a covered\\nwork results from an entity transaction, each party to that\\ntransaction who receives a copy of the work also receives whatever\\nlicenses to the work the party's predecessor in interest had or could\\ngive under the previous paragraph, plus a right to possession of the\\nCorresponding Source of the work from the predecessor in interest, if\\nthe predecessor has it or can get it with reasonable efforts.\\n\\n  You may not impose any further restrictions on the exercise of the\\nrights granted or affirmed under this License.  For example, you may\\nnot impose a license fee, royalty, or other charge for exercise of\\nrights granted under this License, and you may not initiate litigation\\n(including a cross-claim or counterclaim in a lawsuit) alleging that\\nany patent claim is infringed by making, using, selling, offering for\\nsale, or importing the Program or any portion of it.\\n\\n  11. Patents.\\n\\n  A \\\"contributor\\\" is a copyright holder who authorizes use under this\\nLicense of the Program or a work on which the Program is based.  The\\nwork thus licensed is called the contributor's \\\"contributor version\\\".\\n\\n  A contributor's \\\"essential patent claims\\\" are all patent claims\\nowned or controlled by the contributor, whether already acquired or\\nhereafter acquired, that would be infringed by some manner, permitted\\nby this License, of making, using, or selling its contributor version,\\nbut do not include claims that would be infringed only as a\\nconsequence of further modification of the contributor version.  For\\npurposes of this definition, \\\"control\\\" includes the right to grant\\npatent sublicenses in a manner consistent with the requirements of\\nthis License.\\n\\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\\npatent license under the contributor's essential patent claims, to\\nmake, use, sell, offer for sale, import and otherwise run, modify and\\npropagate the contents of its contributor version.\\n\\n  In the following three paragraphs, a \\\"patent license\\\" is any express\\nagreement or commitment, however denominated, not to enforce a patent\\n(such as an express permission to practice a patent or covenant not to\\nsue for patent infringement).  To \\\"grant\\\" such a patent license to a\\nparty means to make such an agreement or commitment not to enforce a\\npatent against the party.\\n\\n  If you convey a covered work, knowingly relying on a patent license,\\nand the Corresponding Source of the work is not available for anyone\\nto copy, free of charge and under the terms of this License, through a\\npublicly available network server or other readily accessible means,\\nthen you must either (1) cause the Corresponding Source to be so\\navailable, or (2) arrange to deprive yourself of the benefit of the\\npatent license for this particular work, or (3) arrange, in a manner\\nconsistent with the requirements of this License, to extend the patent\\nlicense to downstream recipients.  \\\"Knowingly relying\\\" means you have\\nactual knowledge that, but for the patent license, your conveying the\\ncovered work in a country, or your recipient's use of the covered work\\nin a country, would infringe one or more identifiable patents in that\\ncountry that you have reason to believe are valid.\\n\\n  If, pursuant to or in connection with a single transaction or\\narrangement, you convey, or propagate by procuring conveyance of, a\\ncovered work, and grant a patent license to some of the parties\\nreceiving the covered work authorizing them to use, propagate, modify\\nor convey a specific copy of the covered work, then the patent license\\nyou grant is automatically extended to all recipients of the covered\\nwork and works based on it.\\n\\n  A patent license is \\\"discriminatory\\\" if it does not include within\\nthe scope of its coverage, prohibits the exercise of, or is\\nconditioned on the non-exercise of one or more of the rights that are\\nspecifically granted under this License.  You may not convey a covered\\nwork if you are a party to an arrangement with a third party that is\\nin the business of distributing software, under which you make payment\\nto the third party based on the extent of your activity of conveying\\nthe work, and under which the third party grants, to any of the\\nparties who would receive the covered work from you, a discriminatory\\npatent license (a) in connection with copies of the covered work\\nconveyed by you (or copies made from those copies), or (b) primarily\\nfor and in connection with specific products or compilations that\\ncontain the covered work, unless you entered into that arrangement,\\nor that patent license was granted, prior to 28 March 2007.\\n\\n  Nothing in this License shall be construed as excluding or limiting\\nany implied license or other defenses to infringement that may\\notherwise be available to you under applicable patent law.\\n\\n  12. No Surrender of Others' Freedom.\\n\\n  If conditions are imposed on you (whether by court order, agreement or\\notherwise) that contradict the conditions of this License, they do not\\nexcuse you from the conditions of this License.  If you cannot convey a\\ncovered work so as to satisfy simultaneously your obligations under this\\nLicense and any other pertinent obligations, then as a consequence you may\\nnot convey it at all.  For example, if you agree to terms that obligate you\\nto collect a royalty for further conveying from those to whom you convey\\nthe Program, the only way you could satisfy both those terms and this\\nLicense would be to refrain entirely from conveying the Program.\\n\\n  13. Use with the GNU Affero General Public License.\\n\\n  Notwithstanding any other provision of this License, you have\\npermission to link or combine any covered work with a work licensed\\nunder version 3 of the GNU Affero General Public License into a single\\ncombined work, and to convey the resulting work.  The terms of this\\nLicense will continue to apply to the part which is the covered work,\\nbut the special requirements of the GNU Affero General Public License,\\nsection 13, concerning interaction through a network will apply to the\\ncombination as such.\\n\\n  14. Revised Versions of this License.\\n\\n  The Free Software Foundation may publish revised and/or new versions of\\nthe GNU General Public License from time to time.  Such new versions will\\nbe similar in spirit to the present version, but may differ in detail to\\naddress new problems or concerns.\\n\\n  Each version is given a distinguishing version number.  If the\\nProgram specifies that a certain numbered version of the GNU General\\nPublic License \\\"or any later version\\\" applies to it, you have the\\noption of following the terms and conditions either of that numbered\\nversion or of any later version published by the Free Software\\nFoundation.  If the Program does not specify a version number of the\\nGNU General Public License, you may choose any version ever published\\nby the Free Software Foundation.\\n\\n  If the Program specifies that a proxy can decide which future\\nversions of the GNU General Public License can be used, that proxy's\\npublic statement of acceptance of a version permanently authorizes you\\nto choose that version for the Program.\\n\\n  Later license versions may give you additional or different\\npermissions.  However, no additional obligations are imposed on any\\nauthor or copyright holder as a result of your choosing to follow a\\nlater version.\\n\\n  15. Disclaimer of Warranty.\\n\\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \\\"AS IS\\\" WITHOUT WARRANTY\\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\\n\\n  16. Limitation of Liability.\\n\\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\\nSUCH DAMAGES.\\n\\n  17. Interpretation of Sections 15 and 16.\\n\\n  If the disclaimer of warranty and limitation of liability provided\\nabove cannot be given local legal effect according to their terms,\\nreviewing courts shall apply local law that most closely approximates\\nan absolute waiver of all civil liability in connection with the\\nProgram, unless a warranty or assumption of liability accompanies a\\ncopy of the Program in return for a fee.\\n\\n                     END OF TERMS AND CONDITIONS\\n\\n            How to Apply These Terms to Your New Programs\\n\\n  If you develop a new program, and you want it to be of the greatest\\npossible use to the public, the best way to achieve this is to make it\\nfree software which everyone can redistribute and change under these terms.\\n\\n  To do so, attach the following notices to the program.  It is safest\\nto attach them to the start of each source file to most effectively\\nstate the exclusion of warranty; and each file should have at least\\nthe \\\"copyright\\\" line and a pointer to where the full notice is found.\\n\\n    <one line to give the program's name and a brief idea of what it does.>\\n    Copyright (C) <year>  <name of author>\\n\\n    This program is free software: you can redistribute it and/or modify\\n    it under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    This program is distributed in the hope that it will be useful,\\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n    GNU General Public License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\\n\\nAlso add information on how to contact you by electronic and paper mail.\\n\\n  If the program does terminal interaction, make it output a short\\nnotice like this when it starts in an interactive mode:\\n\\n    <program>  Copyright (C) <year>  <name of author>\\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\\n    This is free software, and you are welcome to redistribute it\\n    under certain conditions; type `show c' for details.\\n\\nThe hypothetical commands `show w' and `show c' should show the appropriate\\nparts of the General Public License.  Of course, your program's commands\\nmight be different; for a GUI interface, you would use an \\\"about box\\\".\\n\\n  You should also get your employer (if you work as a programmer) or school,\\nif any, to sign a \\\"copyright disclaimer\\\" for the program, if necessary.\\nFor more information on this, and how to apply and follow the GNU GPL, see\\n<http://www.gnu.org/licenses/>.\\n\\n  The GNU General Public License does not permit incorporating your program\\ninto proprietary programs.  If your program is a subroutine library, you\\nmay consider it more useful to permit linking proprietary applications with\\nthe library.  If this is what you want to do, use the GNU Lesser General\\nPublic License instead of this License.  But first, please read\\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\\n\\n*/\\n\",\"keccak256\":\"0x08da88e3ef46dae3e7937fbc60210e7a02f1e7b7daddd3c33ab40bdd20ca30e6\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3109,"contract":"contracts/dependencies/weth/WETH9.sol:WETH9","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":3112,"contract":"contracts/dependencies/weth/WETH9.sol:WETH9","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":3115,"contract":"contracts/dependencies/weth/WETH9.sol:WETH9","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":3147,"contract":"contracts/dependencies/weth/WETH9.sol:WETH9","label":"balanceOf","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":3153,"contract":"contracts/dependencies/weth/WETH9.sol:WETH9","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/deployments/ReservesSetupHelper.sol":{"ReservesSetupHelper":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"contract PoolConfigurator","name":"configurator","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"baseLTV","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"bool","name":"stableBorrowingEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"flashLoanEnabled","type":"bool"}],"internalType":"struct ReservesSetupHelper.ConfigureReserveInput[]","name":"inputParams","type":"tuple[]"}],"name":"configureReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":{"author":"Aave","details":"The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract.","kind":"dev","methods":{"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])":{"details":"The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function","params":{"configurator":"The address of PoolConfigurator contract","inputParams":"An array of ConfigureReserveInput struct that contains the assets and their risk parameters"}},"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 anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing 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."}},"title":"ReservesSetupHelper","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610c3e806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806323bb109314610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461009a575b600080fd5b61006461005f366004610aaa565b6100ad565b005b6100646107e4565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100646100a8366004610b33565b6108d4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60005b818110156107de578373ffffffffffffffffffffffffffffffffffffffff16637c4e560b84848481811061016c5761016c610b57565b610183926020610140909202019081019150610b33565b85858581811061019557610195610b57565b90506101400201602001358686868181106101b2576101b2610b57565b90506101400201604001358787878181106101cf576101cf610b57565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815273ffffffffffffffffffffffffffffffffffffffff9096166004870152602486019490945250604484019190915260606101409092020101356064820152608401600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b5050505082828281811061028057610280610b57565b9050610140020161010001602081019061029a9190610b86565b15610531578373ffffffffffffffffffffffffffffffffffffffff1663682cf2648484848181106102cd576102cd610b57565b6102e4926020610140909202019081019150610b33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260016024820152604401600060405180830381600087803b15801561035157600080fd5b505af1158015610365573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663d14a098384848481811061039757610397610b57565b6103ae926020610140909202019081019150610b33565b8585858181106103c0576103c0610b57565b9050610140020160a001356040518363ffffffff1660e01b815260040161040992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b15801561042357600080fd5b505af1158015610437573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16638a751a6084848481811061046957610469610b57565b610480926020610140909202019081019150610b33565b85858581811061049257610492610b57565b9050610140020160e00160208101906104ab9190610b86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015215156024820152604401600060405180830381600087803b15801561051857600080fd5b505af115801561052c573d6000803e3d6000fd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff1663f213ef0e84848481811061055f5761055f610b57565b610576926020610140909202019081019150610b33565b85858581811061058857610588610b57565b905061014002016101200160208101906105a29190610b86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015215156024820152604401600060405180830381600087803b15801561060f57600080fd5b505af1158015610623573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663571f03e584848481811061065557610655610b57565b61066c926020610140909202019081019150610b33565b85858581811061067e5761067e610b57565b9050610140020160c001356040518363ffffffff1660e01b81526004016106c792919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16634b4e675384848481811061072757610727610b57565b61073e926020610140909202019081019150610b33565b85858581811061075057610750610b57565b90506101400201608001356040518363ffffffff1660e01b815260040161079992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b1580156107b357600080fd5b505af11580156107c7573d6000803e3d6000fd5b5050505080806107d690610ba8565b915050610136565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b73ffffffffffffffffffffffffffffffffffffffff81166109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610aa757600080fd5b50565b600080600060408486031215610abf57600080fd5b8335610aca81610a85565b9250602084013567ffffffffffffffff80821115610ae757600080fd5b818601915086601f830112610afb57600080fd5b813581811115610b0a57600080fd5b87602061014083028501011115610b2057600080fd5b6020830194508093505050509250925092565b600060208284031215610b4557600080fd5b8135610b5081610a85565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215610b9857600080fd5b81358015158114610b5057600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea264697066735822122071807dfaac818b038bb1fab3417f74a156ed47b07c929e8c054204200f64850964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0xC3E DUP1 PUSH2 0x61 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x23BB1093 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0xAAA JUMP JUMPDEST PUSH2 0xAD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB33 JUMP JUMPDEST PUSH2 0x8D4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7DE JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7C4E560B DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x16C JUMPI PUSH2 0x16C PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x183 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x195 JUMPI PUSH2 0x195 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x20 ADD CALLDATALOAD DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x1B2 JUMPI PUSH2 0x1B2 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x40 ADD CALLDATALOAD DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x1CF JUMPI PUSH2 0x1CF PUSH2 0xB57 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP10 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 AND PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x44 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 PUSH2 0x140 SWAP1 SWAP3 MUL ADD ADD CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 DUP3 DUP3 DUP2 DUP2 LT PUSH2 0x280 JUMPI PUSH2 0x280 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH2 0x100 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x29A SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST ISZERO PUSH2 0x531 JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x682CF264 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x2CD JUMPI PUSH2 0x2CD PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x2E4 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x365 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD14A0983 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x397 JUMPI PUSH2 0x397 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x3AE SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x3C0 JUMPI PUSH2 0x3C0 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xA0 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x409 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x437 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8A751A60 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x469 JUMPI PUSH2 0x469 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x480 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x492 JUMPI PUSH2 0x492 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xE0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x52C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF213EF0E DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x55F JUMPI PUSH2 0x55F PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x576 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x588 JUMPI PUSH2 0x588 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH2 0x120 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x5A2 SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x623 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x571F03E5 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x655 JUMPI PUSH2 0x655 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x66C SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x67E JUMPI PUSH2 0x67E PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xC0 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6C7 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4B4E6753 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x727 JUMPI PUSH2 0x727 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x73E SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x750 JUMPI PUSH2 0x750 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x80 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x799 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x7D6 SWAP1 PUSH2 0xBA8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x136 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x865 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x955 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x9F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xAA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xACA DUP2 PUSH2 0xA85 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xAE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xAFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 PUSH2 0x140 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0xB20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB50 DUP2 PUSH2 0xA85 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xC01 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0x807DFAAC818B038BB1FAB3417F74A156ED47 0xB0 PUSH29 0x929E8C054204200F64850964736F6C634300080A003300000000000000 ","sourceMap":"478:1785:25:-:0;;;;;;;;;;;;-1:-1:-1;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;902:43:11;;835:17;;902:43;829:121;478:1785:25;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@configureReserves_3512":{"entryPoint":173,"id":3512,"parameterSlots":3,"returnSlots":0},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":2020,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":2260,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":2867,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool":{"entryPoint":2950,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_PoolConfigurator_$28229t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr":{"entryPoint":2730,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":2984,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":2903,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_PoolConfigurator":{"entryPoint":2693,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4182:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"77:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"164:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"173:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"176:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"166:6:124"},"nodeType":"YulFunctionCall","src":"166:12:124"},"nodeType":"YulExpressionStatement","src":"166:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"111:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"118:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"97:2:124"},"nodeType":"YulFunctionCall","src":"97:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"90:6:124"},"nodeType":"YulFunctionCall","src":"90:73:124"},"nodeType":"YulIf","src":"87:93:124"}]},"name":"validator_revert_contract_PoolConfigurator","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"66:5:124","type":""}],"src":"14:172:124"},{"body":{"nodeType":"YulBlock","src":"380:651:124","statements":[{"body":{"nodeType":"YulBlock","src":"426:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"435:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"438:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"428:6:124"},"nodeType":"YulFunctionCall","src":"428:12:124"},"nodeType":"YulExpressionStatement","src":"428:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"401:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"410:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"397:3:124"},"nodeType":"YulFunctionCall","src":"397:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"422:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"393:3:124"},"nodeType":"YulFunctionCall","src":"393:32:124"},"nodeType":"YulIf","src":"390:52:124"},{"nodeType":"YulVariableDeclaration","src":"451:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"477:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"464:12:124"},"nodeType":"YulFunctionCall","src":"464:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"455:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"539:5:124"}],"functionName":{"name":"validator_revert_contract_PoolConfigurator","nodeType":"YulIdentifier","src":"496:42:124"},"nodeType":"YulFunctionCall","src":"496:49:124"},"nodeType":"YulExpressionStatement","src":"496:49:124"},{"nodeType":"YulAssignment","src":"554:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"564:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"554:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"578:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"609:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"620:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"605:3:124"},"nodeType":"YulFunctionCall","src":"605:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"592:12:124"},"nodeType":"YulFunctionCall","src":"592:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"582:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"633:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"643:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"637:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"688:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"697:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"700:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"690:6:124"},"nodeType":"YulFunctionCall","src":"690:12:124"},"nodeType":"YulExpressionStatement","src":"690:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"676:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"684:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"673:2:124"},"nodeType":"YulFunctionCall","src":"673:14:124"},"nodeType":"YulIf","src":"670:34:124"},{"nodeType":"YulVariableDeclaration","src":"713:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"727:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"738:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"723:3:124"},"nodeType":"YulFunctionCall","src":"723:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"717:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"793:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"802:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"805:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"795:6:124"},"nodeType":"YulFunctionCall","src":"795:12:124"},"nodeType":"YulExpressionStatement","src":"795:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"772:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"776:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"768:3:124"},"nodeType":"YulFunctionCall","src":"768:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"783:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"764:3:124"},"nodeType":"YulFunctionCall","src":"764:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"757:6:124"},"nodeType":"YulFunctionCall","src":"757:35:124"},"nodeType":"YulIf","src":"754:55:124"},{"nodeType":"YulVariableDeclaration","src":"818:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"845:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"832:12:124"},"nodeType":"YulFunctionCall","src":"832:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"822:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"875:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"884:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"887:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"877:6:124"},"nodeType":"YulFunctionCall","src":"877:12:124"},"nodeType":"YulExpressionStatement","src":"877:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"863:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"871:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"860:2:124"},"nodeType":"YulFunctionCall","src":"860:14:124"},"nodeType":"YulIf","src":"857:34:124"},{"body":{"nodeType":"YulBlock","src":"954:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"963:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"966:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"956:6:124"},"nodeType":"YulFunctionCall","src":"956:12:124"},"nodeType":"YulExpressionStatement","src":"956:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"914:2:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"922:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"930:6:124","type":"","value":"0x0140"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"918:3:124"},"nodeType":"YulFunctionCall","src":"918:19:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"910:3:124"},"nodeType":"YulFunctionCall","src":"910:28:124"},{"kind":"number","nodeType":"YulLiteral","src":"940:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"906:3:124"},"nodeType":"YulFunctionCall","src":"906:37:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"945:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"903:2:124"},"nodeType":"YulFunctionCall","src":"903:50:124"},"nodeType":"YulIf","src":"900:70:124"},{"nodeType":"YulAssignment","src":"979:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"993:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"997:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"989:3:124"},"nodeType":"YulFunctionCall","src":"989:11:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"979:6:124"}]},{"nodeType":"YulAssignment","src":"1009:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"1019:6:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1009:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_PoolConfigurator_$28229t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"330:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"341:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"353:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"361:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"369:6:124","type":""}],"src":"191:840:124"},{"body":{"nodeType":"YulBlock","src":"1137:125:124","statements":[{"nodeType":"YulAssignment","src":"1147:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1159:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1170:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1155:3:124"},"nodeType":"YulFunctionCall","src":"1155:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1147:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1189:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1204:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1212:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1200:3:124"},"nodeType":"YulFunctionCall","src":"1200:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1182:6:124"},"nodeType":"YulFunctionCall","src":"1182:74:124"},"nodeType":"YulExpressionStatement","src":"1182:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1106:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1117:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1128:4:124","type":""}],"src":"1036:226:124"},{"body":{"nodeType":"YulBlock","src":"1337:195:124","statements":[{"body":{"nodeType":"YulBlock","src":"1383:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1392:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1395:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1385:6:124"},"nodeType":"YulFunctionCall","src":"1385:12:124"},"nodeType":"YulExpressionStatement","src":"1385:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1358:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1354:3:124"},"nodeType":"YulFunctionCall","src":"1354:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1350:3:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"nodeType":"YulIf","src":"1347:52:124"},{"nodeType":"YulVariableDeclaration","src":"1408:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1434:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1421:12:124"},"nodeType":"YulFunctionCall","src":"1421:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1412:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1496:5:124"}],"functionName":{"name":"validator_revert_contract_PoolConfigurator","nodeType":"YulIdentifier","src":"1453:42:124"},"nodeType":"YulFunctionCall","src":"1453:49:124"},"nodeType":"YulExpressionStatement","src":"1453:49:124"},{"nodeType":"YulAssignment","src":"1511:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1521:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1511:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1303:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1314:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1326:6:124","type":""}],"src":"1267:265:124"},{"body":{"nodeType":"YulBlock","src":"1711:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1728:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1739:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1721:6:124"},"nodeType":"YulFunctionCall","src":"1721:21:124"},"nodeType":"YulExpressionStatement","src":"1721:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1762:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1773:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1758:3:124"},"nodeType":"YulFunctionCall","src":"1758:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"1778:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1751:6:124"},"nodeType":"YulFunctionCall","src":"1751:30:124"},"nodeType":"YulExpressionStatement","src":"1751:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1801:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1812:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1797:3:124"},"nodeType":"YulFunctionCall","src":"1797:18:124"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1817:34:124","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1790:6:124"},"nodeType":"YulFunctionCall","src":"1790:62:124"},"nodeType":"YulExpressionStatement","src":"1790:62:124"},{"nodeType":"YulAssignment","src":"1861:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1873:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1884:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1869:3:124"},"nodeType":"YulFunctionCall","src":"1869:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1861:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1688:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1702:4:124","type":""}],"src":"1537:356:124"},{"body":{"nodeType":"YulBlock","src":"1930:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1947:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1950:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1940:6:124"},"nodeType":"YulFunctionCall","src":"1940:88:124"},"nodeType":"YulExpressionStatement","src":"1940:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2044:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2047:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2037:6:124"},"nodeType":"YulFunctionCall","src":"2037:15:124"},"nodeType":"YulExpressionStatement","src":"2037:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2068:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2071:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2061:6:124"},"nodeType":"YulFunctionCall","src":"2061:15:124"},"nodeType":"YulExpressionStatement","src":"2061:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"1898:184:124"},{"body":{"nodeType":"YulBlock","src":"2272:255:124","statements":[{"nodeType":"YulAssignment","src":"2282:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2294:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2305:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2290:3:124"},"nodeType":"YulFunctionCall","src":"2290:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2282:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2325:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2340:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2348:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2336:3:124"},"nodeType":"YulFunctionCall","src":"2336:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2318:6:124"},"nodeType":"YulFunctionCall","src":"2318:74:124"},"nodeType":"YulExpressionStatement","src":"2318:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2412:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2423:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2408:3:124"},"nodeType":"YulFunctionCall","src":"2408:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2428:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2401:6:124"},"nodeType":"YulFunctionCall","src":"2401:34:124"},"nodeType":"YulExpressionStatement","src":"2401:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2455:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2466:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2451:3:124"},"nodeType":"YulFunctionCall","src":"2451:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"2471:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2444:6:124"},"nodeType":"YulFunctionCall","src":"2444:34:124"},"nodeType":"YulExpressionStatement","src":"2444:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2498:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2509:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2494:3:124"},"nodeType":"YulFunctionCall","src":"2494:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"2514:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2487:6:124"},"nodeType":"YulFunctionCall","src":"2487:34:124"},"nodeType":"YulExpressionStatement","src":"2487:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2217:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2228:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2236:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2244:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2252:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2263:4:124","type":""}],"src":"2087:440:124"},{"body":{"nodeType":"YulBlock","src":"2599:206:124","statements":[{"body":{"nodeType":"YulBlock","src":"2645:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2654:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2657:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2647:6:124"},"nodeType":"YulFunctionCall","src":"2647:12:124"},"nodeType":"YulExpressionStatement","src":"2647:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2620:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2629:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2616:3:124"},"nodeType":"YulFunctionCall","src":"2616:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2641:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2612:3:124"},"nodeType":"YulFunctionCall","src":"2612:32:124"},"nodeType":"YulIf","src":"2609:52:124"},{"nodeType":"YulVariableDeclaration","src":"2670:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2696:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2683:12:124"},"nodeType":"YulFunctionCall","src":"2683:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2674:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2759:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:124"},"nodeType":"YulFunctionCall","src":"2761:12:124"},"nodeType":"YulExpressionStatement","src":"2761:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2728:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2749:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2742:6:124"},"nodeType":"YulFunctionCall","src":"2742:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2735:6:124"},"nodeType":"YulFunctionCall","src":"2735:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2725:2:124"},"nodeType":"YulFunctionCall","src":"2725:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2718:6:124"},"nodeType":"YulFunctionCall","src":"2718:40:124"},"nodeType":"YulIf","src":"2715:60:124"},{"nodeType":"YulAssignment","src":"2784:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2794:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2784:6:124"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2565:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2576:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2588:6:124","type":""}],"src":"2532:273:124"},{"body":{"nodeType":"YulBlock","src":"2933:184:124","statements":[{"nodeType":"YulAssignment","src":"2943:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2955:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2966:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2951:3:124"},"nodeType":"YulFunctionCall","src":"2951:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2943:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2985:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3000:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3008:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2996:3:124"},"nodeType":"YulFunctionCall","src":"2996:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2978:6:124"},"nodeType":"YulFunctionCall","src":"2978:74:124"},"nodeType":"YulExpressionStatement","src":"2978:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3072:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3083:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3068:3:124"},"nodeType":"YulFunctionCall","src":"3068:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3102:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3095:6:124"},"nodeType":"YulFunctionCall","src":"3095:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3088:6:124"},"nodeType":"YulFunctionCall","src":"3088:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3061:6:124"},"nodeType":"YulFunctionCall","src":"3061:50:124"},"nodeType":"YulExpressionStatement","src":"3061:50:124"}]},"name":"abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2894:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2905:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2913:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2924:4:124","type":""}],"src":"2810:307:124"},{"body":{"nodeType":"YulBlock","src":"3251:168:124","statements":[{"nodeType":"YulAssignment","src":"3261:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3273:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3284:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3269:3:124"},"nodeType":"YulFunctionCall","src":"3269:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3261:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3303:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3318:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3326:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3314:3:124"},"nodeType":"YulFunctionCall","src":"3314:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3296:6:124"},"nodeType":"YulFunctionCall","src":"3296:74:124"},"nodeType":"YulExpressionStatement","src":"3296:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3390:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3401:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3386:3:124"},"nodeType":"YulFunctionCall","src":"3386:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"3406:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3379:6:124"},"nodeType":"YulFunctionCall","src":"3379:34:124"},"nodeType":"YulExpressionStatement","src":"3379:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3212:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3223:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3231:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3242:4:124","type":""}],"src":"3122:297:124"},{"body":{"nodeType":"YulBlock","src":"3471:302:124","statements":[{"body":{"nodeType":"YulBlock","src":"3570:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3591:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3594:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3584:6:124"},"nodeType":"YulFunctionCall","src":"3584:88:124"},"nodeType":"YulExpressionStatement","src":"3584:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3692:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3695:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3685:6:124"},"nodeType":"YulFunctionCall","src":"3685:15:124"},"nodeType":"YulExpressionStatement","src":"3685:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3720:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3723:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3713:6:124"},"nodeType":"YulFunctionCall","src":"3713:15:124"},"nodeType":"YulExpressionStatement","src":"3713:15:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3487:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3494:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3484:2:124"},"nodeType":"YulFunctionCall","src":"3484:77:124"},"nodeType":"YulIf","src":"3481:257:124"},{"nodeType":"YulAssignment","src":"3747:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3758:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3765:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3754:3:124"},"nodeType":"YulFunctionCall","src":"3754:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"3747:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3453:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"3463:3:124","type":""}],"src":"3424:349:124"},{"body":{"nodeType":"YulBlock","src":"3952:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3969:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3980:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3962:6:124"},"nodeType":"YulFunctionCall","src":"3962:21:124"},"nodeType":"YulExpressionStatement","src":"3962:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4003:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4014:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3999:3:124"},"nodeType":"YulFunctionCall","src":"3999:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4019:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3992:6:124"},"nodeType":"YulFunctionCall","src":"3992:30:124"},"nodeType":"YulExpressionStatement","src":"3992:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4053:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4038:3:124"},"nodeType":"YulFunctionCall","src":"4038:18:124"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"4058:34:124","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4031:6:124"},"nodeType":"YulFunctionCall","src":"4031:62:124"},"nodeType":"YulExpressionStatement","src":"4031:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4113:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4124:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4109:3:124"},"nodeType":"YulFunctionCall","src":"4109:18:124"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"4129:8:124","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4102:6:124"},"nodeType":"YulFunctionCall","src":"4102:36:124"},"nodeType":"YulExpressionStatement","src":"4102:36:124"},{"nodeType":"YulAssignment","src":"4147:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4159:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4170:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4155:3:124"},"nodeType":"YulFunctionCall","src":"4155:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4147:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3929:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3943:4:124","type":""}],"src":"3778:402:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_PoolConfigurator(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_PoolConfigurator_$28229t_array$_t_struct$_ConfigureReserveInput_$3383_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_PoolConfigurator(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, mul(length, 0x0140)), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_PoolConfigurator(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c806323bb109314610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461009a575b600080fd5b61006461005f366004610aaa565b6100ad565b005b6100646107e4565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100646100a8366004610b33565b6108d4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60005b818110156107de578373ffffffffffffffffffffffffffffffffffffffff16637c4e560b84848481811061016c5761016c610b57565b610183926020610140909202019081019150610b33565b85858581811061019557610195610b57565b90506101400201602001358686868181106101b2576101b2610b57565b90506101400201604001358787878181106101cf576101cf610b57565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815273ffffffffffffffffffffffffffffffffffffffff9096166004870152602486019490945250604484019190915260606101409092020101356064820152608401600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b5050505082828281811061028057610280610b57565b9050610140020161010001602081019061029a9190610b86565b15610531578373ffffffffffffffffffffffffffffffffffffffff1663682cf2648484848181106102cd576102cd610b57565b6102e4926020610140909202019081019150610b33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260016024820152604401600060405180830381600087803b15801561035157600080fd5b505af1158015610365573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663d14a098384848481811061039757610397610b57565b6103ae926020610140909202019081019150610b33565b8585858181106103c0576103c0610b57565b9050610140020160a001356040518363ffffffff1660e01b815260040161040992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b15801561042357600080fd5b505af1158015610437573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16638a751a6084848481811061046957610469610b57565b610480926020610140909202019081019150610b33565b85858581811061049257610492610b57565b9050610140020160e00160208101906104ab9190610b86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015215156024820152604401600060405180830381600087803b15801561051857600080fd5b505af115801561052c573d6000803e3d6000fd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff1663f213ef0e84848481811061055f5761055f610b57565b610576926020610140909202019081019150610b33565b85858581811061058857610588610b57565b905061014002016101200160208101906105a29190610b86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015215156024820152604401600060405180830381600087803b15801561060f57600080fd5b505af1158015610623573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663571f03e584848481811061065557610655610b57565b61066c926020610140909202019081019150610b33565b85858581811061067e5761067e610b57565b9050610140020160c001356040518363ffffffff1660e01b81526004016106c792919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16634b4e675384848481811061072757610727610b57565b61073e926020610140909202019081019150610b33565b85858581811061075057610750610b57565b90506101400201608001356040518363ffffffff1660e01b815260040161079992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b1580156107b357600080fd5b505af11580156107c7573d6000803e3d6000fd5b5050505080806107d690610ba8565b915050610136565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b73ffffffffffffffffffffffffffffffffffffffff81166109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610aa757600080fd5b50565b600080600060408486031215610abf57600080fd5b8335610aca81610a85565b9250602084013567ffffffffffffffff80821115610ae757600080fd5b818601915086601f830112610afb57600080fd5b813581811115610b0a57600080fd5b87602061014083028501011115610b2057600080fd5b6020830194508093505050509250925092565b600060208284031215610b4557600080fd5b8135610b5081610a85565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215610b9857600080fd5b81358015158114610b5057600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea264697066735822122071807dfaac818b038bb1fab3417f74a156ed47b07c929e8c054204200f64850964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x23BB1093 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0xAAA JUMP JUMPDEST PUSH2 0xAD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB33 JUMP JUMPDEST PUSH2 0x8D4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7DE JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7C4E560B DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x16C JUMPI PUSH2 0x16C PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x183 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x195 JUMPI PUSH2 0x195 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x20 ADD CALLDATALOAD DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x1B2 JUMPI PUSH2 0x1B2 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x40 ADD CALLDATALOAD DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x1CF JUMPI PUSH2 0x1CF PUSH2 0xB57 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP10 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 AND PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x44 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 PUSH2 0x140 SWAP1 SWAP3 MUL ADD ADD CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 DUP3 DUP3 DUP2 DUP2 LT PUSH2 0x280 JUMPI PUSH2 0x280 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH2 0x100 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x29A SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST ISZERO PUSH2 0x531 JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x682CF264 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x2CD JUMPI PUSH2 0x2CD PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x2E4 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x365 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD14A0983 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x397 JUMPI PUSH2 0x397 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x3AE SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x3C0 JUMPI PUSH2 0x3C0 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xA0 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x409 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x437 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8A751A60 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x469 JUMPI PUSH2 0x469 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x480 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x492 JUMPI PUSH2 0x492 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xE0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x52C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF213EF0E DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x55F JUMPI PUSH2 0x55F PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x576 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x588 JUMPI PUSH2 0x588 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH2 0x120 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x5A2 SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x623 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x571F03E5 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x655 JUMPI PUSH2 0x655 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x66C SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x67E JUMPI PUSH2 0x67E PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xC0 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6C7 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4B4E6753 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x727 JUMPI PUSH2 0x727 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x73E SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x750 JUMPI PUSH2 0x750 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x80 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x799 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x7D6 SWAP1 PUSH2 0xBA8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x136 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x865 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x955 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x9F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xAA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xACA DUP2 PUSH2 0xA85 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xAE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xAFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 PUSH2 0x140 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0xB20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB50 DUP2 PUSH2 0xA85 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xC01 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0x807DFAAC818B038BB1FAB3417F74A156ED47 0xB0 PUSH29 0x929E8C054204200F64850964736F6C634300080A003300000000000000 ","sourceMap":"478:1785:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1236:1025;;;;;;:::i;:::-;;:::i;:::-;;1601:135:11;;;:::i;1018:71::-;1056:7;1078:6;1018:71;;;1078:6;;;;1182:74:124;;1018:71:11;;;;;1170:2:124;1018:71:11;;;1875:226;;;;;;:::i;:::-;;:::i;1236:1025:25:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1739:2:124;1196:67:11;;;1721:21:124;;;1758:18;;;1751:30;1817:34;1797:18;;;1790:62;1869:18;;1196:67:11;;;;;;;;;1382:9:25::1;1377:880;1397:22:::0;;::::1;1377:880;;;1434:12;:41;;;1485:11;;1497:1;1485:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;1485:20:25::1;:::i;:::-;1515:11;;1527:1;1515:14;;;;;;;:::i;:::-;;;;;;:22;;;1547:11;;1559:1;1547:14;;;;;;;:::i;:::-;;;;;;:35;;;1592:11;;1604:1;1592:14;;;;;;;:::i;:::-;1434:197;::::0;;::::1;::::0;;;;;;2348:42:124;2336:55;;;1434:197:25::1;::::0;::::1;2318:74:124::0;2408:18;;;2401:34;;;;-1:-1:-1;2451:18:124;;;2444:34;;;;1592:31:25::1;:14;::::0;;::::1;;:31;;2494:18:124::0;;;2487:34;2290:19;;1434:197:25::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1644:11;;1656:1;1644:14;;;;;;;:::i;:::-;;;;;;:31;;;;;;;;;;:::i;:::-;1640:343;;;1687:12;:32;;;1720:11;;1732:1;1720:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;1720:20:25::1;:::i;:::-;1687:60;::::0;;::::1;::::0;;;;;;3008:42:124;2996:55;;;1687:60:25::1;::::0;::::1;2978:74:124::0;1742:4:25::1;3068:18:124::0;;;3061:50;2951:18;;1687:60:25::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1758:12;:25;;;1784:11;;1796:1;1784:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;1784:20:25::1;:::i;:::-;1806:11;;1818:1;1806:14;;;;;;;:::i;:::-;;;;;;:24;;;1758:73;;;;;;;;;;;;;;;3326:42:124::0;3314:55;;;;3296:74;;3401:2;3386:18;;3379:34;3284:2;3269:18;;3122:297;1758:73:25::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1841:12;:42;;;1895:11;;1907:1;1895:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;1895:20:25::1;:::i;:::-;1927:11;;1939:1;1927:14;;;;;;;:::i;:::-;;;;;;:37;;;;;;;;;;:::i;:::-;1841:133;::::0;;::::1;::::0;;;;;;3008:42:124;2996:55;;;1841:133:25::1;::::0;::::1;2978:74:124::0;3095:14;3088:22;3068:18;;;3061:50;2951:18;;1841:133:25::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1640:343;1990:12;:35;;;2026:11;;2038:1;2026:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;2026:20:25::1;:::i;:::-;2048:11;;2060:1;2048:14;;;;;;;:::i;:::-;;;;;;:31;;;;;;;;;;:::i;:::-;1990:90;::::0;;::::1;::::0;;;;;;3008:42:124;2996:55;;;1990:90:25::1;::::0;::::1;2978:74:124::0;3095:14;3088:22;3068:18;;;3061:50;2951:18;;1990:90:25::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2088:12;:25;;;2114:11;;2126:1;2114:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;2114:20:25::1;:::i;:::-;2136:11;;2148:1;2136:14;;;;;;;:::i;:::-;;;;;;:24;;;2088:73;;;;;;;;;;;;;;;3326:42:124::0;3314:55;;;;3296:74;;3401:2;3386:18;;3379:34;3284:2;3269:18;;3122:297;2088:73:25::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2169:12;:29;;;2199:11;;2211:1;2199:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;2199:20:25::1;:::i;:::-;2221:11;;2233:1;2221:14;;;;;;;:::i;:::-;;;;;;:28;;;2169:81;;;;;;;;;;;;;;;3326:42:124::0;3314:55;;;;3296:74;;3401:2;3386:18;;3379:34;3284:2;3269:18;;3122:297;2169:81:25::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1421:3;;;;;:::i;:::-;;;;1377:880;;;;1236:1025:::0;;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1739:2:124;1196:67:11;;;1721:21:124;;;1758:18;;;1751:30;1817:34;1797:18;;;1790:62;1869:18;;1196:67:11;1537:356:124;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1875:226::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1739:2:124;1196:67:11;;;1721:21:124;;;1758:18;;;1751:30;1817:34;1797:18;;;1790:62;1869:18;;1196:67:11;1537:356:124;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;3980:2:124;1951:73:11::1;::::0;::::1;3962:21:124::0;4019:2;3999:18;;;3992:30;4058:34;4038:18;;;4031:62;4129:8;4109:18;;;4102:36;4155:19;;1951:73:11::1;3778:402:124::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:172:124:-;118:42;111:5;107:54;100:5;97:65;87:93;;176:1;173;166:12;87:93;14:172;:::o;191:840::-;353:6;361;369;422:2;410:9;401:7;397:23;393:32;390:52;;;438:1;435;428:12;390:52;477:9;464:23;496:49;539:5;496:49;:::i;:::-;564:5;-1:-1:-1;620:2:124;605:18;;592:32;643:18;673:14;;;670:34;;;700:1;697;690:12;670:34;738:6;727:9;723:22;713:32;;783:7;776:4;772:2;768:13;764:27;754:55;;805:1;802;795:12;754:55;845:2;832:16;871:2;863:6;860:14;857:34;;;887:1;884;877:12;857:34;945:7;940:2;930:6;922;918:19;914:2;910:28;906:37;903:50;900:70;;;966:1;963;956:12;900:70;997:2;993;989:11;979:21;;1019:6;1009:16;;;;;191:840;;;;;:::o;1267:265::-;1326:6;1379:2;1367:9;1358:7;1354:23;1350:32;1347:52;;;1395:1;1392;1385:12;1347:52;1434:9;1421:23;1453:49;1496:5;1453:49;:::i;:::-;1521:5;1267:265;-1:-1:-1;;;1267:265:124:o;1898:184::-;1950:77;1947:1;1940:88;2047:4;2044:1;2037:15;2071:4;2068:1;2061:15;2532:273;2588:6;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2696:9;2683:23;2749:5;2742:13;2735:21;2728:5;2725:32;2715:60;;2771:1;2768;2761:12;3424:349;3463:3;3494:66;3487:5;3484:77;3481:257;;;3594:77;3591:1;3584:88;3695:4;3692:1;3685:15;3723:4;3720:1;3713:15;3481:257;-1:-1:-1;3765:1:124;3754:13;;3424:349::o"},"gasEstimates":{"creation":{"codeDepositCost":"626800","executionCost":"26430","totalCost":"653230"},"external":{"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])":"infinite","owner()":"2302","renounceOwnership()":"30126","transferOwnership(address)":"30363"}},"methodIdentifiers":{"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])":"23bb1093","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract PoolConfigurator\",\"name\":\"configurator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseLTV\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"stableBorrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"flashLoanEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct ReservesSetupHelper.ConfigureReserveInput[]\",\"name\":\"inputParams\",\"type\":\"tuple[]\"}],\"name\":\"configureReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"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\":{\"author\":\"Aave\",\"details\":\"The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract.\",\"kind\":\"dev\",\"methods\":{\"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])\":{\"details\":\"The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function\",\"params\":{\"configurator\":\"The address of PoolConfigurator contract\",\"inputParams\":\"An array of ConfigureReserveInput struct that contains the assets and their risk parameters\"}},\"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 anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing 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.\"}},\"title\":\"ReservesSetupHelper\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])\":{\"notice\":\"External function called by the owner account to setup the assets risk parameters in batch.\"}},\"notice\":\"Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/deployments/ReservesSetupHelper.sol\":\"ReservesSetupHelper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './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 * By default, the owner account will be the one that deploys the contract. This\\n * can 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 */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = 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    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/deployments/ReservesSetupHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {PoolConfigurator} from '../protocol/pool/PoolConfigurator.sol';\\nimport {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';\\n\\n/**\\n * @title ReservesSetupHelper\\n * @author Aave\\n * @notice Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.\\n * @dev The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract.\\n */\\ncontract ReservesSetupHelper is Ownable {\\n  struct ConfigureReserveInput {\\n    address asset;\\n    uint256 baseLTV;\\n    uint256 liquidationThreshold;\\n    uint256 liquidationBonus;\\n    uint256 reserveFactor;\\n    uint256 borrowCap;\\n    uint256 supplyCap;\\n    bool stableBorrowingEnabled;\\n    bool borrowingEnabled;\\n    bool flashLoanEnabled;\\n  }\\n\\n  /**\\n   * @notice External function called by the owner account to setup the assets risk parameters in batch.\\n   * @dev The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function\\n   * @param configurator The address of PoolConfigurator contract\\n   * @param inputParams An array of ConfigureReserveInput struct that contains the assets and their risk parameters\\n   */\\n  function configureReserves(\\n    PoolConfigurator configurator,\\n    ConfigureReserveInput[] calldata inputParams\\n  ) external onlyOwner {\\n    for (uint256 i = 0; i < inputParams.length; i++) {\\n      configurator.configureReserveAsCollateral(\\n        inputParams[i].asset,\\n        inputParams[i].baseLTV,\\n        inputParams[i].liquidationThreshold,\\n        inputParams[i].liquidationBonus\\n      );\\n\\n      if (inputParams[i].borrowingEnabled) {\\n        configurator.setReserveBorrowing(inputParams[i].asset, true);\\n\\n        configurator.setBorrowCap(inputParams[i].asset, inputParams[i].borrowCap);\\n        configurator.setReserveStableRateBorrowing(\\n          inputParams[i].asset,\\n          inputParams[i].stableBorrowingEnabled\\n        );\\n      }\\n      configurator.setReserveFlashLoaning(inputParams[i].asset, inputParams[i].flashLoanEnabled);\\n      configurator.setSupplyCap(inputParams[i].asset, inputParams[i].supplyCap);\\n      configurator.setReserveFactor(inputParams[i].asset, inputParams[i].reserveFactor);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8390d348bdcd9558c6cef85a8413dfb011f350f386846a836aa9ba73fc40d0c3\",\"license\":\"BUSL-1.1\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title IPoolConfigurator\\n * @author Aave\\n * @notice Defines the basic interface for a Pool configurator.\\n */\\ninterface IPoolConfigurator {\\n  /**\\n   * @dev Emitted when a reserve is initialized.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aToken The address of the associated aToken contract\\n   * @param stableDebtToken The address of the associated stable rate debt token\\n   * @param variableDebtToken The address of the associated variable rate debt token\\n   * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve\\n   */\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when borrowing is enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing is enabled, false otherwise\\n   */\\n  event ReserveBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when flashloans are enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans are enabled, false otherwise\\n   */\\n  event ReserveFlashLoaning(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when the collateralization risk parameters for the specified asset are updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  event CollateralConfigurationChanged(\\n    address indexed asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  );\\n\\n  /**\\n   * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing is enabled, false otherwise\\n   */\\n  event ReserveStableRateBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when a reserve is activated or deactivated\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if reserve is active, false otherwise\\n   */\\n  event ReserveActive(address indexed asset, bool active);\\n\\n  /**\\n   * @dev Emitted when a reserve is frozen or unfrozen\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param frozen True if reserve is frozen, false otherwise\\n   */\\n  event ReserveFrozen(address indexed asset, bool frozen);\\n\\n  /**\\n   * @dev Emitted when a reserve is paused or unpaused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if reserve is paused, false otherwise\\n   */\\n  event ReservePaused(address indexed asset, bool paused);\\n\\n  /**\\n   * @dev Emitted when a reserve is dropped.\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  event ReserveDropped(address indexed asset);\\n\\n  /**\\n   * @dev Emitted when a reserve factor is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldReserveFactor The old reserve factor, expressed in bps\\n   * @param newReserveFactor The new reserve factor, expressed in bps\\n   */\\n  event ReserveFactorChanged(\\n    address indexed asset,\\n    uint256 oldReserveFactor,\\n    uint256 newReserveFactor\\n  );\\n\\n  /**\\n   * @dev Emitted when the borrow cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldBorrowCap The old borrow cap\\n   * @param newBorrowCap The new borrow cap\\n   */\\n  event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);\\n\\n  /**\\n   * @dev Emitted when the supply cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldSupplyCap The old supply cap\\n   * @param newSupplyCap The new supply cap\\n   */\\n  event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);\\n\\n  /**\\n   * @dev Emitted when the liquidation protocol fee of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldFee The old liquidation protocol fee, expressed in bps\\n   * @param newFee The new liquidation protocol fee, expressed in bps\\n   */\\n  event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);\\n\\n  /**\\n   * @dev Emitted when the unbacked mint cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldUnbackedMintCap The old unbacked mint cap\\n   * @param newUnbackedMintCap The new unbacked mint cap\\n   */\\n  event UnbackedMintCapChanged(\\n    address indexed asset,\\n    uint256 oldUnbackedMintCap,\\n    uint256 newUnbackedMintCap\\n  );\\n\\n  /**\\n   * @dev Emitted when the category of an asset in eMode is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldCategoryId The old eMode asset category\\n   * @param newCategoryId The new eMode asset category\\n   */\\n  event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);\\n\\n  /**\\n   * @dev Emitted when a new eMode category is added.\\n   * @param categoryId The new eMode category id\\n   * @param ltv The ltv for the asset category in eMode\\n   * @param liquidationThreshold The liquidationThreshold for the asset category in eMode\\n   * @param liquidationBonus The liquidationBonus for the asset category in eMode\\n   * @param oracle The optional address of the price oracle specific for this category\\n   * @param label A human readable identifier for the category\\n   */\\n  event EModeCategoryAdded(\\n    uint8 indexed categoryId,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus,\\n    address oracle,\\n    string label\\n  );\\n\\n  /**\\n   * @dev Emitted when a reserve interest strategy contract is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldStrategy The address of the old interest strategy contract\\n   * @param newStrategy The address of the new interest strategy contract\\n   */\\n  event ReserveInterestRateStrategyChanged(\\n    address indexed asset,\\n    address oldStrategy,\\n    address newStrategy\\n  );\\n\\n  /**\\n   * @dev Emitted when an aToken implementation is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The aToken proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a stable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The stable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a variable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The variable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the debt ceiling of an asset is set.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldDebtCeiling The old debt ceiling\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);\\n\\n  /**\\n   * @dev Emitted when the the siloed borrowing state for an asset is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldState The old siloed borrowing state\\n   * @param newState The new siloed borrowing state\\n   */\\n  event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);\\n\\n  /**\\n   * @dev Emitted when the bridge protocol fee is updated.\\n   * @param oldBridgeProtocolFee The old protocol fee, expressed in bps\\n   * @param newBridgeProtocolFee The new protocol fee, expressed in bps\\n   */\\n  event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);\\n\\n  /**\\n   * @dev Emitted when the total premium on flashloans is updated.\\n   * @param oldFlashloanPremiumTotal The old premium, expressed in bps\\n   * @param newFlashloanPremiumTotal The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumTotalUpdated(\\n    uint128 oldFlashloanPremiumTotal,\\n    uint128 newFlashloanPremiumTotal\\n  );\\n\\n  /**\\n   * @dev Emitted when the part of the premium that goes to protocol is updated.\\n   * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\\n   * @param newFlashloanPremiumToProtocol The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumToProtocolUpdated(\\n    uint128 oldFlashloanPremiumToProtocol,\\n    uint128 newFlashloanPremiumToProtocol\\n  );\\n\\n  /**\\n   * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the reserve is borrowable in isolation, false otherwise\\n   */\\n  event BorrowableInIsolationChanged(address asset, bool borrowable);\\n\\n  /**\\n   * @notice Initializes multiple reserves.\\n   * @param input The array of initialization parameters\\n   */\\n  function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;\\n\\n  /**\\n   * @dev Updates the aToken implementation for the reserve.\\n   * @param input The aToken update parameters\\n   */\\n  function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;\\n\\n  /**\\n   * @notice Updates the stable debt token implementation for the reserve.\\n   * @param input The stableDebtToken update parameters\\n   */\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Updates the variable debt token implementation for the asset.\\n   * @param input The variableDebtToken update parameters\\n   */\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Configures borrowing on a reserve.\\n   * @dev Can only be disabled (set to false) if stable borrowing is disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Configures the reserve collateralization parameters.\\n   * @dev All the values are expressed in bps. A value of 10000, results in 100.00%\\n   * @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external;\\n\\n  /**\\n   * @notice Enable or disable stable rate borrowing on a reserve.\\n   * @dev Can only be enabled (set to true) if borrowing is enabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveStableRateBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Enable or disable flashloans on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans need to be enabled, false otherwise\\n   */\\n  function setReserveFlashLoaning(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Activate or deactivate a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if the reserve needs to be active, false otherwise\\n   */\\n  function setReserveActive(address asset, bool active) external;\\n\\n  /**\\n   * @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\\n   * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param freeze True if the reserve needs to be frozen, false otherwise\\n   */\\n  function setReserveFreeze(address asset, bool freeze) external;\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\\n   * borrowed amount will be accumulated in the isolated collateral's total debt exposure\\n   * @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the asset should be borrowable in isolation, false otherwise\\n   */\\n  function setBorrowableInIsolation(address asset, bool borrowable) external;\\n\\n  /**\\n   * @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\\n   * swap interest rate, liquidate, atoken transfers).\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if pausing the reserve, false if unpausing\\n   */\\n  function setReservePause(address asset, bool paused) external;\\n\\n  /**\\n   * @notice Updates the reserve factor of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newReserveFactor The new reserve factor of the reserve\\n   */\\n  function setReserveFactor(address asset, uint256 newReserveFactor) external;\\n\\n  /**\\n   * @notice Sets the interest rate strategy of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newRateStrategyAddress The address of the new interest strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\\n   * are suspended.\\n   * @param paused True if protocol needs to be paused, false otherwise\\n   */\\n  function setPoolPause(bool paused) external;\\n\\n  /**\\n   * @notice Updates the borrow cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newBorrowCap The new borrow cap of the reserve\\n   */\\n  function setBorrowCap(address asset, uint256 newBorrowCap) external;\\n\\n  /**\\n   * @notice Updates the supply cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newSupplyCap The new supply cap of the reserve\\n   */\\n  function setSupplyCap(address asset, uint256 newSupplyCap) external;\\n\\n  /**\\n   * @notice Updates the liquidation protocol fee of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newFee The new liquidation protocol fee of the reserve, expressed in bps\\n   */\\n  function setLiquidationProtocolFee(address asset, uint256 newFee) external;\\n\\n  /**\\n   * @notice Updates the unbacked mint cap of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newUnbackedMintCap The new unbacked mint cap of the reserve\\n   */\\n  function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;\\n\\n  /**\\n   * @notice Assign an efficiency mode (eMode) category to asset.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newCategoryId The new category id of the asset\\n   */\\n  function setAssetEModeCategory(address asset, uint8 newCategoryId) external;\\n\\n  /**\\n   * @notice Adds a new efficiency mode (eMode) category.\\n   * @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\\n   * overcollateralization of the users using this category.\\n   * @dev The new ltv and liquidation threshold must be greater than the base\\n   * ltvs and liquidation thresholds of all assets within the eMode category\\n   * @param categoryId The id of the category to be configured\\n   * @param ltv The ltv associated with the category\\n   * @param liquidationThreshold The liquidation threshold associated with the category\\n   * @param liquidationBonus The liquidation bonus associated with the category\\n   * @param oracle The oracle associated with the category\\n   * @param label A label identifying the category\\n   */\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external;\\n\\n  /**\\n   * @notice Drops a reserve entirely.\\n   * @param asset The address of the reserve to drop\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the bridge fee collected by the protocol reserves.\\n   * @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps\\n   */\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates the total flash loan premium.\\n   * Total flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra balance\\n   * - A part is collected by the protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium is calculated on the total amount borrowed\\n   * @param newFlashloanPremiumTotal The total flashloan premium\\n   */\\n  function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;\\n\\n  /**\\n   * @notice Updates the flash loan premium collected by protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium to protocol is calculated on the total flashloan premium\\n   * @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury\\n   */\\n  function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;\\n\\n  /**\\n   * @notice Sets the debt ceiling for an asset.\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  function setDebtCeiling(address asset, uint256 newDebtCeiling) external;\\n\\n  /**\\n   * @notice Sets siloed borrowing for an asset\\n   * @param siloed The new siloed borrowing state\\n   */\\n  function setSiloedBorrowing(address asset, bool siloed) external;\\n}\\n\",\"keccak256\":\"0xd9083035ef01cdab5f60a04f817f3449814f37d5ade136a3d4734447ede04d71\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ConfiguratorLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';\\nimport {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';\\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title ConfiguratorLogic library\\n * @author Aave\\n * @notice Implements the functions to initialize reserves and update aTokens and debtTokens\\n */\\nlibrary ConfiguratorLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPoolConfigurator` for descriptions\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\\n   * @dev Emits the `ReserveInitialized` event\\n   * @param pool The Pool in which the reserve will be initialized\\n   * @param input The needed parameters for the initialization\\n   */\\n  function executeInitReserve(\\n    IPool pool,\\n    ConfiguratorInputTypes.InitReserveInput calldata input\\n  ) public {\\n    address aTokenProxyAddress = _initTokenWithProxy(\\n      input.aTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableAToken.initialize.selector,\\n        pool,\\n        input.treasury,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.aTokenName,\\n        input.aTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address stableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.stableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.stableDebtTokenName,\\n        input.stableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address variableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.variableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.variableDebtTokenName,\\n        input.variableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    pool.initReserve(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);\\n\\n    currentConfig.setDecimals(input.underlyingAssetDecimals);\\n\\n    currentConfig.setActive(true);\\n    currentConfig.setPaused(false);\\n    currentConfig.setFrozen(false);\\n\\n    pool.setConfiguration(input.underlyingAsset, currentConfig);\\n\\n    emit ReserveInitialized(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the aToken implementation and initializes it\\n   * @dev Emits the `ATokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the aToken\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateAToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableAToken.initialize.selector,\\n      cachedPool,\\n      input.treasury,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);\\n\\n    emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);\\n  }\\n\\n  /**\\n   * @notice Updates the stable debt token implementation and initializes it\\n   * @dev Emits the `StableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the stable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateStableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit StableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the variable debt token implementation and initializes it\\n   * @dev Emits the `VariableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the variable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateVariableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit VariableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Creates a new proxy and initializes the implementation\\n   * @param implementation The address of the implementation\\n   * @param initParams The parameters that is passed to the implementation to initialize\\n   * @return The address of initialized proxy\\n   */\\n  function _initTokenWithProxy(\\n    address implementation,\\n    bytes memory initParams\\n  ) internal returns (address) {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(\\n        address(this)\\n      );\\n\\n    proxy.initialize(implementation, initParams);\\n\\n    return address(proxy);\\n  }\\n\\n  /**\\n   * @notice Upgrades the implementation and makes call to the proxy\\n   * @dev The call is used to initialize the new implementation.\\n   * @param proxyAddress The address of the proxy\\n   * @param implementation The address of the new implementation\\n   * @param  initParams The parameters to the call after the upgrade\\n   */\\n  function _upgradeTokenImplementation(\\n    address proxyAddress,\\n    address implementation,\\n    bytes memory initParams\\n  ) internal {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(\\n        payable(proxyAddress)\\n      );\\n\\n    proxy.upgradeToAndCall(implementation, initParams);\\n  }\\n}\\n\",\"keccak256\":\"0xfbf8cf6a8cbfb4c0624f76f1607ec76a58b7320e662309806ee79d6728b78fb7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/PoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {ConfiguratorLogic} from '../libraries/logic/ConfiguratorLogic.sol';\\nimport {ConfiguratorInputTypes} from '../libraries/types/ConfiguratorInputTypes.sol';\\nimport {IPoolConfigurator} from '../../interfaces/IPoolConfigurator.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {IPoolDataProvider} from '../../interfaces/IPoolDataProvider.sol';\\n\\n/**\\n * @title PoolConfigurator\\n * @author Aave\\n * @dev Implements the configuration methods for the Aave protocol\\n */\\ncontract PoolConfigurator is VersionedInitializable, IPoolConfigurator {\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  IPoolAddressesProvider internal _addressesProvider;\\n  IPool internal _pool;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only emergency admin can call functions marked by this modifier.\\n   */\\n  modifier onlyEmergencyAdmin() {\\n    _onlyEmergencyAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only emergency or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyEmergencyOrPoolAdmin() {\\n    _onlyPoolOrEmergencyAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyAssetListingOrPoolAdmins() {\\n    _onlyAssetListingOrPoolAdmins();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only risk or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyRiskOrPoolAdmins() {\\n    _onlyRiskOrPoolAdmins();\\n    _;\\n  }\\n\\n  uint256 public constant CONFIGURATOR_REVISION = 0x1;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return CONFIGURATOR_REVISION;\\n  }\\n\\n  function initialize(IPoolAddressesProvider provider) public initializer {\\n    _addressesProvider = provider;\\n    _pool = IPool(_addressesProvider.getPool());\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function initReserves(\\n    ConfiguratorInputTypes.InitReserveInput[] calldata input\\n  ) external override onlyAssetListingOrPoolAdmins {\\n    IPool cachedPool = _pool;\\n    for (uint256 i = 0; i < input.length; i++) {\\n      ConfiguratorLogic.executeInitReserve(cachedPool, input[i]);\\n    }\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function dropReserve(address asset) external override onlyPoolAdmin {\\n    _pool.dropReserve(asset);\\n    emit ReserveDropped(asset);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateAToken(\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateAToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateStableDebtToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateVariableDebtToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveBorrowing(address asset, bool enabled) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    if (!enabled) {\\n      require(!currentConfig.getStableRateBorrowingEnabled(), Errors.STABLE_BORROWING_ENABLED);\\n    }\\n    currentConfig.setBorrowingEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveBorrowing(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external override onlyRiskOrPoolAdmins {\\n    //validation of the parameters: the LTV can\\n    //only be lower or equal than the liquidation threshold\\n    //(otherwise a loan against the asset would cause instantaneous liquidation)\\n    require(ltv <= liquidationThreshold, Errors.INVALID_RESERVE_PARAMS);\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    if (liquidationThreshold != 0) {\\n      //liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less\\n      //collateral than needed to cover the debt\\n      require(liquidationBonus > PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_PARAMS);\\n\\n      //if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\\n      //a loan is taken there is enough collateral available to cover the liquidation bonus\\n      require(\\n        liquidationThreshold.percentMul(liquidationBonus) <= PercentageMath.PERCENTAGE_FACTOR,\\n        Errors.INVALID_RESERVE_PARAMS\\n      );\\n    } else {\\n      require(liquidationBonus == 0, Errors.INVALID_RESERVE_PARAMS);\\n      //if the liquidation threshold is being set to 0,\\n      // the reserve is being disabled as collateral. To do so,\\n      //we need to ensure no liquidity is supplied\\n      _checkNoSuppliers(asset);\\n    }\\n\\n    currentConfig.setLtv(ltv);\\n    currentConfig.setLiquidationThreshold(liquidationThreshold);\\n    currentConfig.setLiquidationBonus(liquidationBonus);\\n\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    emit CollateralConfigurationChanged(asset, ltv, liquidationThreshold, liquidationBonus);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveStableRateBorrowing(\\n    address asset,\\n    bool enabled\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    if (enabled) {\\n      require(currentConfig.getBorrowingEnabled(), Errors.BORROWING_NOT_ENABLED);\\n    }\\n    currentConfig.setStableRateBorrowingEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveStableRateBorrowing(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFlashLoaning(\\n    address asset,\\n    bool enabled\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    currentConfig.setFlashLoanEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFlashLoaning(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveActive(address asset, bool active) external override onlyPoolAdmin {\\n    if (!active) _checkNoSuppliers(asset);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setActive(active);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveActive(asset, active);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFreeze(address asset, bool freeze) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setFrozen(freeze);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFrozen(asset, freeze);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setBorrowableInIsolation(\\n    address asset,\\n    bool borrowable\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setBorrowableInIsolation(borrowable);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit BorrowableInIsolationChanged(asset, borrowable);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReservePause(address asset, bool paused) public override onlyEmergencyOrPoolAdmin {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setPaused(paused);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReservePaused(asset, paused);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFactor(\\n    address asset,\\n    uint256 newReserveFactor\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(newReserveFactor <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldReserveFactor = currentConfig.getReserveFactor();\\n    currentConfig.setReserveFactor(newReserveFactor);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFactorChanged(asset, oldReserveFactor, newReserveFactor);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setDebtCeiling(\\n    address asset,\\n    uint256 newDebtCeiling\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    uint256 oldDebtCeiling = currentConfig.getDebtCeiling();\\n    if (oldDebtCeiling == 0) {\\n      _checkNoSuppliers(asset);\\n    }\\n    currentConfig.setDebtCeiling(newDebtCeiling);\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    if (newDebtCeiling == 0) {\\n      _pool.resetIsolationModeTotalDebt(asset);\\n    }\\n\\n    emit DebtCeilingChanged(asset, oldDebtCeiling, newDebtCeiling);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setSiloedBorrowing(\\n    address asset,\\n    bool newSiloed\\n  ) external override onlyRiskOrPoolAdmins {\\n    if (newSiloed) {\\n      _checkNoBorrowers(asset);\\n    }\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    bool oldSiloed = currentConfig.getSiloedBorrowing();\\n\\n    currentConfig.setSiloedBorrowing(newSiloed);\\n\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    emit SiloedBorrowingChanged(asset, oldSiloed, newSiloed);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setBorrowCap(\\n    address asset,\\n    uint256 newBorrowCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldBorrowCap = currentConfig.getBorrowCap();\\n    currentConfig.setBorrowCap(newBorrowCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit BorrowCapChanged(asset, oldBorrowCap, newBorrowCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setSupplyCap(\\n    address asset,\\n    uint256 newSupplyCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldSupplyCap = currentConfig.getSupplyCap();\\n    currentConfig.setSupplyCap(newSupplyCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit SupplyCapChanged(asset, oldSupplyCap, newSupplyCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setLiquidationProtocolFee(\\n    address asset,\\n    uint256 newFee\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(newFee <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_LIQUIDATION_PROTOCOL_FEE);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldFee = currentConfig.getLiquidationProtocolFee();\\n    currentConfig.setLiquidationProtocolFee(newFee);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit LiquidationProtocolFeeChanged(asset, oldFee, newFee);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(ltv != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n    require(liquidationThreshold != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n\\n    // validation of the parameters: the LTV can\\n    // only be lower or equal than the liquidation threshold\\n    // (otherwise a loan against the asset would cause instantaneous liquidation)\\n    require(ltv <= liquidationThreshold, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n    require(\\n      liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\\n    );\\n\\n    // if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\\n    // a loan is taken there is enough collateral available to cover the liquidation bonus\\n    require(\\n      uint256(liquidationThreshold).percentMul(liquidationBonus) <=\\n        PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\\n    );\\n\\n    address[] memory reserves = _pool.getReservesList();\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(reserves[i]);\\n      if (categoryId == currentConfig.getEModeCategory()) {\\n        require(ltv > currentConfig.getLtv(), Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n        require(\\n          liquidationThreshold > currentConfig.getLiquidationThreshold(),\\n          Errors.INVALID_EMODE_CATEGORY_PARAMS\\n        );\\n      }\\n    }\\n\\n    _pool.configureEModeCategory(\\n      categoryId,\\n      DataTypes.EModeCategory({\\n        ltv: ltv,\\n        liquidationThreshold: liquidationThreshold,\\n        liquidationBonus: liquidationBonus,\\n        priceSource: oracle,\\n        label: label\\n      })\\n    );\\n    emit EModeCategoryAdded(categoryId, ltv, liquidationThreshold, liquidationBonus, oracle, label);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setAssetEModeCategory(\\n    address asset,\\n    uint8 newCategoryId\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    if (newCategoryId != 0) {\\n      DataTypes.EModeCategory memory categoryData = _pool.getEModeCategoryData(newCategoryId);\\n      require(\\n        categoryData.liquidationThreshold > currentConfig.getLiquidationThreshold(),\\n        Errors.INVALID_EMODE_CATEGORY_ASSIGNMENT\\n      );\\n    }\\n    uint256 oldCategoryId = currentConfig.getEModeCategory();\\n    currentConfig.setEModeCategory(newCategoryId);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit EModeAssetCategoryChanged(asset, uint8(oldCategoryId), newCategoryId);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setUnbackedMintCap(\\n    address asset,\\n    uint256 newUnbackedMintCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldUnbackedMintCap = currentConfig.getUnbackedMintCap();\\n    currentConfig.setUnbackedMintCap(newUnbackedMintCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit UnbackedMintCapChanged(asset, oldUnbackedMintCap, newUnbackedMintCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveData memory reserve = _pool.getReserveData(asset);\\n    address oldRateStrategyAddress = reserve.interestRateStrategyAddress;\\n    _pool.setReserveInterestRateStrategyAddress(asset, newRateStrategyAddress);\\n    emit ReserveInterestRateStrategyChanged(asset, oldRateStrategyAddress, newRateStrategyAddress);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setPoolPause(bool paused) external override onlyEmergencyAdmin {\\n    address[] memory reserves = _pool.getReservesList();\\n\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      if (reserves[i] != address(0)) {\\n        setReservePause(reserves[i], paused);\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external override onlyPoolAdmin {\\n    require(\\n      newBridgeProtocolFee <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.BRIDGE_PROTOCOL_FEE_INVALID\\n    );\\n    uint256 oldBridgeProtocolFee = _pool.BRIDGE_PROTOCOL_FEE();\\n    _pool.updateBridgeProtocolFee(newBridgeProtocolFee);\\n    emit BridgeProtocolFeeUpdated(oldBridgeProtocolFee, newBridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateFlashloanPremiumTotal(\\n    uint128 newFlashloanPremiumTotal\\n  ) external override onlyPoolAdmin {\\n    require(\\n      newFlashloanPremiumTotal <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.FLASHLOAN_PREMIUM_INVALID\\n    );\\n    uint128 oldFlashloanPremiumTotal = _pool.FLASHLOAN_PREMIUM_TOTAL();\\n    _pool.updateFlashloanPremiums(newFlashloanPremiumTotal, _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL());\\n    emit FlashloanPremiumTotalUpdated(oldFlashloanPremiumTotal, newFlashloanPremiumTotal);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateFlashloanPremiumToProtocol(\\n    uint128 newFlashloanPremiumToProtocol\\n  ) external override onlyPoolAdmin {\\n    require(\\n      newFlashloanPremiumToProtocol <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.FLASHLOAN_PREMIUM_INVALID\\n    );\\n    uint128 oldFlashloanPremiumToProtocol = _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL();\\n    _pool.updateFlashloanPremiums(_pool.FLASHLOAN_PREMIUM_TOTAL(), newFlashloanPremiumToProtocol);\\n    emit FlashloanPremiumToProtocolUpdated(\\n      oldFlashloanPremiumToProtocol,\\n      newFlashloanPremiumToProtocol\\n    );\\n  }\\n\\n  function _checkNoSuppliers(address asset) internal view {\\n    (, uint256 accruedToTreasury, uint256 totalATokens, , , , , , , , , ) = IPoolDataProvider(\\n      _addressesProvider.getPoolDataProvider()\\n    ).getReserveData(asset);\\n\\n    require(totalATokens == 0 && accruedToTreasury == 0, Errors.RESERVE_LIQUIDITY_NOT_ZERO);\\n  }\\n\\n  function _checkNoBorrowers(address asset) internal view {\\n    uint256 totalDebt = IPoolDataProvider(_addressesProvider.getPoolDataProvider()).getTotalDebt(\\n      asset\\n    );\\n    require(totalDebt == 0, Errors.RESERVE_DEBT_NOT_ZERO);\\n  }\\n\\n  function _onlyPoolAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n  }\\n\\n  function _onlyEmergencyAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isEmergencyAdmin(msg.sender), Errors.CALLER_NOT_EMERGENCY_ADMIN);\\n  }\\n\\n  function _onlyPoolOrEmergencyAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isPoolAdmin(msg.sender) || aclManager.isEmergencyAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_OR_EMERGENCY_ADMIN\\n    );\\n  }\\n\\n  function _onlyAssetListingOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyRiskOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isRiskAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_RISK_OR_POOL_ADMIN\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x1842366a68e5295a64ff36326bf6055647749bedcd219ca9e385c90c09488edd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/deployments/ReservesSetupHelper.sol:ReservesSetupHelper","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])":{"notice":"External function called by the owner account to setup the assets risk parameters in batch."}},"notice":"Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.","version":1}}},"contracts/flashloan/base/FlashLoanReceiverBase.sol":{"FlashLoanReceiverBase":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"premiums","type":"uint256[]"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeOperation(address[],uint256[],uint256[],address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amounts":"The amounts of the flash-borrowed assets","assets":"The addresses of the flash-borrowed assets","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premiums":"The fee of each flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}}},"title":"FlashLoanReceiverBase","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address[],uint256[],uint256[],address,bytes)":"920f5c84"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"premiums\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address[],uint256[],uint256[],address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amounts\":\"The amounts of the flash-borrowed assets\",\"assets\":\"The addresses of the flash-borrowed assets\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premiums\":\"The fee of each flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}}},\"title\":\"FlashLoanReceiverBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address[],uint256[],uint256[],address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed assets\"}},\"notice\":\"Base contract to develop a flashloan-receiver contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flashloan/base/FlashLoanReceiverBase.sol\":\"FlashLoanReceiverBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/flashloan/base/FlashLoanReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanReceiver} from '../interfaces/IFlashLoanReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanReceiverBase is IFlashLoanReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0xe32679c5957b705034b3b03a84103b9c6ca137d12de656e5eead2c404bc9a382\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeOperation(address[],uint256[],uint256[],address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed assets"}},"notice":"Base contract to develop a flashloan-receiver contract.","version":1}}},"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol":{"FlashLoanSimpleReceiverBase":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}}},"title":"FlashLoanSimpleReceiverBase","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}}},\"title\":\"FlashLoanSimpleReceiverBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed asset\"}},\"notice\":\"Base contract to develop a flashloan-receiver contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":\"FlashLoanSimpleReceiverBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed asset"}},"notice":"Base contract to develop a flashloan-receiver contract.","version":1}}},"contracts/flashloan/interfaces/IFlashLoanReceiver.sol":{"IFlashLoanReceiver":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"premiums","type":"uint256[]"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Implement this interface to develop a flashloan-compatible flashLoanReceiver contract","kind":"dev","methods":{"executeOperation(address[],uint256[],uint256[],address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amounts":"The amounts of the flash-borrowed assets","assets":"The addresses of the flash-borrowed assets","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premiums":"The fee of each flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}}},"title":"IFlashLoanReceiver","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address[],uint256[],uint256[],address,bytes)":"920f5c84"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"premiums\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address[],uint256[],uint256[],address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amounts\":\"The amounts of the flash-borrowed assets\",\"assets\":\"The addresses of the flash-borrowed assets\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premiums\":\"The fee of each flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}}},\"title\":\"IFlashLoanReceiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address[],uint256[],uint256[],address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed assets\"}},\"notice\":\"Defines the basic interface of a flashloan-receiver contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":\"IFlashLoanReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeOperation(address[],uint256[],uint256[],address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed assets"}},"notice":"Defines the basic interface of a flashloan-receiver contract.","version":1}}},"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol":{"IFlashLoanSimpleReceiver":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Implement this interface to develop a flashloan-compatible flashLoanReceiver contract","kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}}},"title":"IFlashLoanSimpleReceiver","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}}},\"title\":\"IFlashLoanSimpleReceiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed asset\"}},\"notice\":\"Defines the basic interface of a flashloan-receiver contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":\"IFlashLoanSimpleReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed asset"}},"notice":"Defines the basic interface of a flashloan-receiver contract.","version":1}}},"contracts/interfaces/IACLManager.sol":{"IACLManager":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_LISTING_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASH_BORROWER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RISK_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAssetListingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"addBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"addFlashBorrower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addPoolAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addRiskAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAssetListingAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"isBridge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isEmergencyAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"isFlashBorrower","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isPoolAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isRiskAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeAssetListingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"removeBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"removeFlashBorrower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removePoolAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeRiskAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"bytes32","name":"adminRole","type":"bytes32"}],"name":"setRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider"}},"ASSET_LISTING_ADMIN_ROLE()":{"returns":{"_0":"The id of the AssetListingAdmin role"}},"BRIDGE_ROLE()":{"returns":{"_0":"The id of the Bridge role"}},"EMERGENCY_ADMIN_ROLE()":{"returns":{"_0":"The id of the EmergencyAdmin role"}},"FLASH_BORROWER_ROLE()":{"returns":{"_0":"The id of the FlashBorrower role"}},"POOL_ADMIN_ROLE()":{"returns":{"_0":"The id of the PoolAdmin role"}},"RISK_ADMIN_ROLE()":{"returns":{"_0":"The id of the RiskAdmin role"}},"addAssetListingAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addBridge(address)":{"params":{"bridge":"The address of the new Bridge"}},"addEmergencyAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addFlashBorrower(address)":{"params":{"borrower":"The address of the new FlashBorrower"}},"addPoolAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addRiskAdmin(address)":{"params":{"admin":"The address of the new admin"}},"isAssetListingAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is AssetListingAdmin, false otherwise"}},"isBridge(address)":{"params":{"bridge":"The address to check"},"returns":{"_0":"True if the given address is Bridge, false otherwise"}},"isEmergencyAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is EmergencyAdmin, false otherwise"}},"isFlashBorrower(address)":{"params":{"borrower":"The address to check"},"returns":{"_0":"True if the given address is FlashBorrower, false otherwise"}},"isPoolAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is PoolAdmin, false otherwise"}},"isRiskAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is RiskAdmin, false otherwise"}},"removeAssetListingAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeBridge(address)":{"params":{"bridge":"The address of the bridge to remove"}},"removeEmergencyAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeFlashBorrower(address)":{"params":{"borrower":"The address of the FlashBorrower to remove"}},"removePoolAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeRiskAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"setRoleAdmin(bytes32,bytes32)":{"details":"By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.","params":{"adminRole":"The admin role","role":"The role to be managed by the admin role"}}},"title":"IACLManager","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","ASSET_LISTING_ADMIN_ROLE()":"78bb0a43","BRIDGE_ROLE()":"b5bfddea","EMERGENCY_ADMIN_ROLE()":"6e76fc8f","FLASH_BORROWER_ROLE()":"5577b7a9","POOL_ADMIN_ROLE()":"b8f6dba7","RISK_ADMIN_ROLE()":"4f16b425","addAssetListingAdmin(address)":"9a2b96f7","addBridge(address)":"9712fdf8","addEmergencyAdmin(address)":"179efb09","addFlashBorrower(address)":"9ac9d80b","addPoolAdmin(address)":"22650caf","addRiskAdmin(address)":"5b9a94e4","isAssetListingAdmin(address)":"13ee32e0","isBridge(address)":"726600ce","isEmergencyAdmin(address)":"2500f2b6","isFlashBorrower(address)":"fa50f297","isPoolAdmin(address)":"7be53ca1","isRiskAdmin(address)":"674b5e4d","removeAssetListingAdmin(address)":"a21bce15","removeBridge(address)":"04df017d","removeEmergencyAdmin(address)":"7a9a93f4","removeFlashBorrower(address)":"253cf980","removePoolAdmin(address)":"f83695cb","removeRiskAdmin(address)":"3c5a08e5","setRoleAdmin(bytes32,bytes32)":"1e4e0091"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_LISTING_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EMERGENCY_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASH_BORROWER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RISK_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addAssetListingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"addBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"addFlashBorrower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addPoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addRiskAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isAssetListingAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"isBridge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isEmergencyAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"isFlashBorrower\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isPoolAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isRiskAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeAssetListingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"removeBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"removeFlashBorrower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removePoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeRiskAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"adminRole\",\"type\":\"bytes32\"}],\"name\":\"setRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider\"}},\"ASSET_LISTING_ADMIN_ROLE()\":{\"returns\":{\"_0\":\"The id of the AssetListingAdmin role\"}},\"BRIDGE_ROLE()\":{\"returns\":{\"_0\":\"The id of the Bridge role\"}},\"EMERGENCY_ADMIN_ROLE()\":{\"returns\":{\"_0\":\"The id of the EmergencyAdmin role\"}},\"FLASH_BORROWER_ROLE()\":{\"returns\":{\"_0\":\"The id of the FlashBorrower role\"}},\"POOL_ADMIN_ROLE()\":{\"returns\":{\"_0\":\"The id of the PoolAdmin role\"}},\"RISK_ADMIN_ROLE()\":{\"returns\":{\"_0\":\"The id of the RiskAdmin role\"}},\"addAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addBridge(address)\":{\"params\":{\"bridge\":\"The address of the new Bridge\"}},\"addEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address of the new FlashBorrower\"}},\"addPoolAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addRiskAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"isAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is AssetListingAdmin, false otherwise\"}},\"isBridge(address)\":{\"params\":{\"bridge\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is Bridge, false otherwise\"}},\"isEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is EmergencyAdmin, false otherwise\"}},\"isFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is FlashBorrower, false otherwise\"}},\"isPoolAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is PoolAdmin, false otherwise\"}},\"isRiskAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is RiskAdmin, false otherwise\"}},\"removeAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeBridge(address)\":{\"params\":{\"bridge\":\"The address of the bridge to remove\"}},\"removeEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address of the FlashBorrower to remove\"}},\"removePoolAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeRiskAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"setRoleAdmin(bytes32,bytes32)\":{\"details\":\"By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\",\"params\":{\"adminRole\":\"The admin role\",\"role\":\"The role to be managed by the admin role\"}}},\"title\":\"IACLManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the contract address of the PoolAddressesProvider\"},\"ASSET_LISTING_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the AssetListingAdmin role\"},\"BRIDGE_ROLE()\":{\"notice\":\"Returns the identifier of the Bridge role\"},\"EMERGENCY_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the EmergencyAdmin role\"},\"FLASH_BORROWER_ROLE()\":{\"notice\":\"Returns the identifier of the FlashBorrower role\"},\"POOL_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the PoolAdmin role\"},\"RISK_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the RiskAdmin role\"},\"addAssetListingAdmin(address)\":{\"notice\":\"Adds a new admin as AssetListingAdmin\"},\"addBridge(address)\":{\"notice\":\"Adds a new address as Bridge\"},\"addEmergencyAdmin(address)\":{\"notice\":\"Adds a new admin as EmergencyAdmin\"},\"addFlashBorrower(address)\":{\"notice\":\"Adds a new address as FlashBorrower\"},\"addPoolAdmin(address)\":{\"notice\":\"Adds a new admin as PoolAdmin\"},\"addRiskAdmin(address)\":{\"notice\":\"Adds a new admin as RiskAdmin\"},\"isAssetListingAdmin(address)\":{\"notice\":\"Returns true if the address is AssetListingAdmin, false otherwise\"},\"isBridge(address)\":{\"notice\":\"Returns true if the address is Bridge, false otherwise\"},\"isEmergencyAdmin(address)\":{\"notice\":\"Returns true if the address is EmergencyAdmin, false otherwise\"},\"isFlashBorrower(address)\":{\"notice\":\"Returns true if the address is FlashBorrower, false otherwise\"},\"isPoolAdmin(address)\":{\"notice\":\"Returns true if the address is PoolAdmin, false otherwise\"},\"isRiskAdmin(address)\":{\"notice\":\"Returns true if the address is RiskAdmin, false otherwise\"},\"removeAssetListingAdmin(address)\":{\"notice\":\"Removes an admin as AssetListingAdmin\"},\"removeBridge(address)\":{\"notice\":\"Removes an address as Bridge\"},\"removeEmergencyAdmin(address)\":{\"notice\":\"Removes an admin as EmergencyAdmin\"},\"removeFlashBorrower(address)\":{\"notice\":\"Removes an address as FlashBorrower\"},\"removePoolAdmin(address)\":{\"notice\":\"Removes an admin as PoolAdmin\"},\"removeRiskAdmin(address)\":{\"notice\":\"Removes an admin as RiskAdmin\"},\"setRoleAdmin(bytes32,bytes32)\":{\"notice\":\"Set the role as admin of a specific role.\"}},\"notice\":\"Defines the basic interface for the ACL Manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IACLManager.sol\":\"IACLManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the contract address of the PoolAddressesProvider"},"ASSET_LISTING_ADMIN_ROLE()":{"notice":"Returns the identifier of the AssetListingAdmin role"},"BRIDGE_ROLE()":{"notice":"Returns the identifier of the Bridge role"},"EMERGENCY_ADMIN_ROLE()":{"notice":"Returns the identifier of the EmergencyAdmin role"},"FLASH_BORROWER_ROLE()":{"notice":"Returns the identifier of the FlashBorrower role"},"POOL_ADMIN_ROLE()":{"notice":"Returns the identifier of the PoolAdmin role"},"RISK_ADMIN_ROLE()":{"notice":"Returns the identifier of the RiskAdmin role"},"addAssetListingAdmin(address)":{"notice":"Adds a new admin as AssetListingAdmin"},"addBridge(address)":{"notice":"Adds a new address as Bridge"},"addEmergencyAdmin(address)":{"notice":"Adds a new admin as EmergencyAdmin"},"addFlashBorrower(address)":{"notice":"Adds a new address as FlashBorrower"},"addPoolAdmin(address)":{"notice":"Adds a new admin as PoolAdmin"},"addRiskAdmin(address)":{"notice":"Adds a new admin as RiskAdmin"},"isAssetListingAdmin(address)":{"notice":"Returns true if the address is AssetListingAdmin, false otherwise"},"isBridge(address)":{"notice":"Returns true if the address is Bridge, false otherwise"},"isEmergencyAdmin(address)":{"notice":"Returns true if the address is EmergencyAdmin, false otherwise"},"isFlashBorrower(address)":{"notice":"Returns true if the address is FlashBorrower, false otherwise"},"isPoolAdmin(address)":{"notice":"Returns true if the address is PoolAdmin, false otherwise"},"isRiskAdmin(address)":{"notice":"Returns true if the address is RiskAdmin, false otherwise"},"removeAssetListingAdmin(address)":{"notice":"Removes an admin as AssetListingAdmin"},"removeBridge(address)":{"notice":"Removes an address as Bridge"},"removeEmergencyAdmin(address)":{"notice":"Removes an admin as EmergencyAdmin"},"removeFlashBorrower(address)":{"notice":"Removes an address as FlashBorrower"},"removePoolAdmin(address)":{"notice":"Removes an admin as PoolAdmin"},"removeRiskAdmin(address)":{"notice":"Removes an admin as RiskAdmin"},"setRoleAdmin(bytes32,bytes32)":{"notice":"Set the role as admin of a specific role."}},"notice":"Defines the basic interface for the ACL Manager","version":1}}},"contracts/interfaces/IAToken.sol":{"IAToken":{"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","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":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"BalanceTransfer(address,address,uint256,uint256)":{"details":"Emitted during the transfer action","params":{"from":"The user whose tokens are being transferred","index":"The next liquidity index of the reserve","to":"The recipient","value":"The scaled amount being transferred"}}},"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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 `amount` 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 amount of tokens owned by `account`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"params":{"owner":"The address of the owner"},"returns":{"_0":"The nonce of the owner"}},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"title":"IAToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"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\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"BalanceTransfer(address,address,uint256,uint256)\":{\"details\":\"Emitted during the transfer action\",\"params\":{\"from\":\"The user whose tokens are being transferred\",\"index\":\"The next liquidity index of the reserve\",\"to\":\"The recipient\",\"value\":\"The scaled amount being transferred\"}}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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 `amount` 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 amount of tokens owned by `account`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address of the owner\"},\"returns\":{\"_0\":\"The nonce of the owner\"}},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"title\":\"IAToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"nonces(address)\":{\"notice\":\"Returns the nonce for owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"notice\":\"Defines the basic interface for an AToken.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IAToken.sol\":\"IAToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"nonces(address)":{"notice":"Returns the nonce for owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"notice":"Defines the basic interface for an AToken.","version":1}}},"contracts/interfaces/IAaveIncentivesController.sol":{"IAaveIncentivesController":{"abi":[{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"}],"name":"handleAction","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"It only contains one single function, needed as a hook on aToken and debtToken transfers.","kind":"dev","methods":{"handleAction(address,uint256,uint256)":{"details":"Called by the corresponding asset on transfer hook in order to update the rewards distribution.The units of `totalSupply` and `userBalance` should be the same.","params":{"totalSupply":"The total supply of the asset prior to user balance change","user":"The address of the user whose asset balance has changed","userBalance":"The previous user balance prior to balance change"}}},"title":"IAaveIncentivesController","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"handleAction(address,uint256,uint256)":"31873e2e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"}],\"name\":\"handleAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"It only contains one single function, needed as a hook on aToken and debtToken transfers.\",\"kind\":\"dev\",\"methods\":{\"handleAction(address,uint256,uint256)\":{\"details\":\"Called by the corresponding asset on transfer hook in order to update the rewards distribution.The units of `totalSupply` and `userBalance` should be the same.\",\"params\":{\"totalSupply\":\"The total supply of the asset prior to user balance change\",\"user\":\"The address of the user whose asset balance has changed\",\"userBalance\":\"The previous user balance prior to balance change\"}}},\"title\":\"IAaveIncentivesController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Defines the basic interface for an Aave Incentives Controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IAaveIncentivesController.sol\":\"IAaveIncentivesController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Defines the basic interface for an Aave Incentives Controller.","version":1}}},"contracts/interfaces/IAaveOracle.sol":{"IAaveOracle":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"source","type":"address"}],"name":"AssetSourceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"baseCurrency","type":"address"},{"indexed":false,"internalType":"uint256","name":"baseCurrencyUnit","type":"uint256"}],"name":"BaseCurrencySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fallbackOracle","type":"address"}],"name":"FallbackOracleUpdated","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY_UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"getAssetsPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFallbackOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSourceOfAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"}],"name":"setAssetSources","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fallbackOracle","type":"address"}],"name":"setFallbackOracle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"AssetSourceUpdated(address,address)":{"details":"Emitted after the price source of an asset is updated","params":{"asset":"The address of the asset","source":"The price source of the asset"}},"BaseCurrencySet(address,uint256)":{"details":"Emitted after the base currency is set","params":{"baseCurrency":"The base currency of used for price quotes","baseCurrencyUnit":"The unit of the base currency"}},"FallbackOracleUpdated(address)":{"details":"Emitted after the address of fallback oracle is updated","params":{"fallbackOracle":"The address of the fallback oracle"}}},"kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider contract"}},"BASE_CURRENCY()":{"details":"Address 0x0 is reserved for USD as base currency.","returns":{"_0":"Returns the base currency address."}},"BASE_CURRENCY_UNIT()":{"details":"1 ether for ETH, 1e8 for USD.","returns":{"_0":"Returns the base currency unit."}},"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}},"getAssetsPrices(address[])":{"params":{"assets":"The list of assets addresses"},"returns":{"_0":"The prices of the given assets"}},"getFallbackOracle()":{"returns":{"_0":"The address of the fallback oracle"}},"getSourceOfAsset(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The address of the source"}},"setAssetSources(address[],address[])":{"params":{"assets":"The addresses of the assets","sources":"The addresses of the price sources"}},"setFallbackOracle(address)":{"params":{"fallbackOracle":"The address of the fallback oracle"}}},"title":"IAaveOracle","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BASE_CURRENCY()":"e19f4700","BASE_CURRENCY_UNIT()":"8c89b64f","getAssetPrice(address)":"b3596f07","getAssetsPrices(address[])":"9d23d9f2","getFallbackOracle()":"6210308c","getSourceOfAsset(address)":"92bf2be0","setAssetSources(address[],address[])":"abfd5310","setFallbackOracle(address)":"170aee73"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"AssetSourceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"baseCurrency\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseCurrencyUnit\",\"type\":\"uint256\"}],\"name\":\"BaseCurrencySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"}],\"name\":\"FallbackOracleUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY_UNIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"getAssetsPrices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFallbackOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getSourceOfAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"sources\",\"type\":\"address[]\"}],\"name\":\"setAssetSources\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"}],\"name\":\"setFallbackOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"AssetSourceUpdated(address,address)\":{\"details\":\"Emitted after the price source of an asset is updated\",\"params\":{\"asset\":\"The address of the asset\",\"source\":\"The price source of the asset\"}},\"BaseCurrencySet(address,uint256)\":{\"details\":\"Emitted after the base currency is set\",\"params\":{\"baseCurrency\":\"The base currency of used for price quotes\",\"baseCurrencyUnit\":\"The unit of the base currency\"}},\"FallbackOracleUpdated(address)\":{\"details\":\"Emitted after the address of fallback oracle is updated\",\"params\":{\"fallbackOracle\":\"The address of the fallback oracle\"}}},\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"BASE_CURRENCY()\":{\"details\":\"Address 0x0 is reserved for USD as base currency.\",\"returns\":{\"_0\":\"Returns the base currency address.\"}},\"BASE_CURRENCY_UNIT()\":{\"details\":\"1 ether for ETH, 1e8 for USD.\",\"returns\":{\"_0\":\"Returns the base currency unit.\"}},\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}},\"getAssetsPrices(address[])\":{\"params\":{\"assets\":\"The list of assets addresses\"},\"returns\":{\"_0\":\"The prices of the given assets\"}},\"getFallbackOracle()\":{\"returns\":{\"_0\":\"The address of the fallback oracle\"}},\"getSourceOfAsset(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The address of the source\"}},\"setAssetSources(address[],address[])\":{\"params\":{\"assets\":\"The addresses of the assets\",\"sources\":\"The addresses of the price sources\"}},\"setFallbackOracle(address)\":{\"params\":{\"fallbackOracle\":\"The address of the fallback oracle\"}}},\"title\":\"IAaveOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider\"},\"BASE_CURRENCY()\":{\"notice\":\"Returns the base currency address\"},\"BASE_CURRENCY_UNIT()\":{\"notice\":\"Returns the base currency unit\"},\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"},\"getAssetsPrices(address[])\":{\"notice\":\"Returns a list of prices from a list of assets addresses\"},\"getFallbackOracle()\":{\"notice\":\"Returns the address of the fallback oracle\"},\"getSourceOfAsset(address)\":{\"notice\":\"Returns the address of the source for an asset address\"},\"setAssetSources(address[],address[])\":{\"notice\":\"Sets or replaces price sources of assets\"},\"setFallbackOracle(address)\":{\"notice\":\"Sets the fallback oracle\"}},\"notice\":\"Defines the basic interface for the Aave Oracle\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IAaveOracle.sol\":\"IAaveOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IAaveOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPriceOracleGetter} from './IPriceOracleGetter.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IAaveOracle\\n * @author Aave\\n * @notice Defines the basic interface for the Aave Oracle\\n */\\ninterface IAaveOracle is IPriceOracleGetter {\\n  /**\\n   * @dev Emitted after the base currency is set\\n   * @param baseCurrency The base currency of used for price quotes\\n   * @param baseCurrencyUnit The unit of the base currency\\n   */\\n  event BaseCurrencySet(address indexed baseCurrency, uint256 baseCurrencyUnit);\\n\\n  /**\\n   * @dev Emitted after the price source of an asset is updated\\n   * @param asset The address of the asset\\n   * @param source The price source of the asset\\n   */\\n  event AssetSourceUpdated(address indexed asset, address indexed source);\\n\\n  /**\\n   * @dev Emitted after the address of fallback oracle is updated\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  event FallbackOracleUpdated(address indexed fallbackOracle);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Sets or replaces price sources of assets\\n   * @param assets The addresses of the assets\\n   * @param sources The addresses of the price sources\\n   */\\n  function setAssetSources(address[] calldata assets, address[] calldata sources) external;\\n\\n  /**\\n   * @notice Sets the fallback oracle\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  function setFallbackOracle(address fallbackOracle) external;\\n\\n  /**\\n   * @notice Returns a list of prices from a list of assets addresses\\n   * @param assets The list of assets addresses\\n   * @return The prices of the given assets\\n   */\\n  function getAssetsPrices(address[] calldata assets) external view returns (uint256[] memory);\\n\\n  /**\\n   * @notice Returns the address of the source for an asset address\\n   * @param asset The address of the asset\\n   * @return The address of the source\\n   */\\n  function getSourceOfAsset(address asset) external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the fallback oracle\\n   * @return The address of the fallback oracle\\n   */\\n  function getFallbackOracle() external view returns (address);\\n}\\n\",\"keccak256\":\"0x15942c0df4ce9f50a9cf172c9ed0efa0abbf841cd8560fbd0da3d6a7dea69a96\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider"},"BASE_CURRENCY()":{"notice":"Returns the base currency address"},"BASE_CURRENCY_UNIT()":{"notice":"Returns the base currency unit"},"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"},"getAssetsPrices(address[])":{"notice":"Returns a list of prices from a list of assets addresses"},"getFallbackOracle()":{"notice":"Returns the address of the fallback oracle"},"getSourceOfAsset(address)":{"notice":"Returns the address of the source for an asset address"},"setAssetSources(address[],address[])":{"notice":"Sets or replaces price sources of assets"},"setFallbackOracle(address)":{"notice":"Sets the fallback oracle"}},"notice":"Defines the basic interface for the Aave Oracle","version":1}}},"contracts/interfaces/ICreditDelegationToken.sol":{"ICreditDelegationToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"BorrowAllowanceDelegated(address,address,address,uint256)":{"details":"Emitted on `approveDelegation` and `borrowAllowance","params":{"amount":"The amount being delegated","asset":"The address of the delegated asset","fromUser":"The address of the delegator","toUser":"The address of the delegatee"}}},"kind":"dev","methods":{"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}}},"title":"ICreditDelegationToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approveDelegation(address,uint256)":"c04a8a10","borrowAllowance(address,address)":"6bd76d24","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"BorrowAllowanceDelegated(address,address,address,uint256)\":{\"details\":\"Emitted on `approveDelegation` and `borrowAllowance\",\"params\":{\"amount\":\"The amount being delegated\",\"asset\":\"The address of the delegated asset\",\"fromUser\":\"The address of the delegator\",\"toUser\":\"The address of the delegatee\"}}},\"kind\":\"dev\",\"methods\":{\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}}},\"title\":\"ICreditDelegationToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"}},\"notice\":\"Defines the basic interface for a token supporting credit delegation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ICreditDelegationToken.sol\":\"ICreditDelegationToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"}},"notice":"Defines the basic interface for a token supporting credit delegation.","version":1}}},"contracts/interfaces/IDefaultInterestRateStrategy.sol":{"IDefaultInterestRateStrategy":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"params","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseStableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateExcessOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider contract"}},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":{"details":"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)","returns":{"_0":"The max excess stable to total debt ratio, expressed in ray."}},"MAX_EXCESS_USAGE_RATIO()":{"details":"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)","returns":{"_0":"The max excess usage ratio, expressed in ray."}},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":{"returns":{"_0":"The optimal stable to total debt ratio, expressed in ray."}},"OPTIMAL_USAGE_RATIO()":{"returns":{"_0":"The optimal usage ratio, expressed in ray."}},"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"params":{"params":"The parameters needed to calculate interest rates"},"returns":{"_0":"liquidityRate The liquidity rate expressed in rays","_1":"stableBorrowRate The stable borrow rate expressed in rays","_2":"variableBorrowRate The variable borrow rate expressed in rays"}},"getBaseStableBorrowRate()":{"returns":{"_0":"The base stable borrow rate, expressed in ray"}},"getBaseVariableBorrowRate()":{"returns":{"_0":"The base variable borrow rate, expressed in ray"}},"getMaxVariableBorrowRate()":{"returns":{"_0":"The maximum variable borrow rate, expressed in ray"}},"getStableRateExcessOffset()":{"details":"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","returns":{"_0":"The stable rate excess offset, expressed in ray"}},"getStableRateSlope1()":{"details":"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getStableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getVariableRateSlope1()":{"details":"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}},"getVariableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}}},"title":"IDefaultInterestRateStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"fe5fd698","MAX_EXCESS_USAGE_RATIO()":"a9c622f8","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"6fb92589","OPTIMAL_USAGE_RATIO()":"54c365c6","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"a5898709","getBaseStableBorrowRate()":"acd78686","getBaseVariableBorrowRate()":"34762ca5","getMaxVariableBorrowRate()":"80031e37","getStableRateExcessOffset()":"bc626908","getStableRateSlope1()":"d5cd7391","getStableRateSlope2()":"14e32da4","getVariableRateSlope1()":"0b3429a2","getVariableRateSlope2()":"f4202409"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"}],\"internalType\":\"struct DataTypes.CalculateInterestRatesParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseStableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateExcessOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"details\":\"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\",\"returns\":{\"_0\":\"The max excess stable to total debt ratio, expressed in ray.\"}},\"MAX_EXCESS_USAGE_RATIO()\":{\"details\":\"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\",\"returns\":{\"_0\":\"The max excess usage ratio, expressed in ray.\"}},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"returns\":{\"_0\":\"The optimal stable to total debt ratio, expressed in ray.\"}},\"OPTIMAL_USAGE_RATIO()\":{\"returns\":{\"_0\":\"The optimal usage ratio, expressed in ray.\"}},\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"params\":{\"params\":\"The parameters needed to calculate interest rates\"},\"returns\":{\"_0\":\"liquidityRate The liquidity rate expressed in rays\",\"_1\":\"stableBorrowRate The stable borrow rate expressed in rays\",\"_2\":\"variableBorrowRate The variable borrow rate expressed in rays\"}},\"getBaseStableBorrowRate()\":{\"returns\":{\"_0\":\"The base stable borrow rate, expressed in ray\"}},\"getBaseVariableBorrowRate()\":{\"returns\":{\"_0\":\"The base variable borrow rate, expressed in ray\"}},\"getMaxVariableBorrowRate()\":{\"returns\":{\"_0\":\"The maximum variable borrow rate, expressed in ray\"}},\"getStableRateExcessOffset()\":{\"details\":\"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"returns\":{\"_0\":\"The stable rate excess offset, expressed in ray\"}},\"getStableRateSlope1()\":{\"details\":\"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getStableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getVariableRateSlope1()\":{\"details\":\"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}},\"getVariableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}}},\"title\":\"IDefaultInterestRateStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address of the PoolAddressesProvider\"},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the excess stable debt ratio above the optimal.\"},\"MAX_EXCESS_USAGE_RATIO()\":{\"notice\":\"Returns the excess usage ratio above the optimal.\"},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the optimal stable to total debt ratio of the reserve.\"},\"OPTIMAL_USAGE_RATIO()\":{\"notice\":\"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\"},\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"notice\":\"Calculates the interest rates depending on the reserve's state and configurations\"},\"getBaseStableBorrowRate()\":{\"notice\":\"Returns the base stable borrow rate\"},\"getBaseVariableBorrowRate()\":{\"notice\":\"Returns the base variable borrow rate\"},\"getMaxVariableBorrowRate()\":{\"notice\":\"Returns the maximum variable borrow rate\"},\"getStableRateExcessOffset()\":{\"notice\":\"Returns the stable rate excess offset\"},\"getStableRateSlope1()\":{\"notice\":\"Returns the stable rate slope below optimal usage ratio\"},\"getStableRateSlope2()\":{\"notice\":\"Returns the stable rate slope above optimal usage ratio\"},\"getVariableRateSlope1()\":{\"notice\":\"Returns the variable rate slope below optimal usage ratio\"},\"getVariableRateSlope2()\":{\"notice\":\"Returns the variable rate slope above optimal usage ratio\"}},\"notice\":\"Defines the basic interface of the DefaultReserveInterestRateStrategy\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IDefaultInterestRateStrategy.sol\":\"IDefaultInterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IDefaultInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IDefaultInterestRateStrategy\\n * @author Aave\\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\\n */\\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\\n  /**\\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\\n   * @return The optimal usage ratio, expressed in ray.\\n   */\\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\\n   * @return The optimal stable to total debt ratio, expressed in ray.\\n   */\\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess usage ratio above the optimal.\\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\\n   * @return The max excess usage ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess stable debt ratio above the optimal.\\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\\n   * @return The max excess stable to total debt ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the variable rate slope below optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the variable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope below optimal usage ratio\\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate excess offset\\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n   * @return The stable rate excess offset, expressed in ray\\n   */\\n  function getStableRateExcessOffset() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base stable borrow rate\\n   * @return The base stable borrow rate, expressed in ray\\n   */\\n  function getBaseStableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base variable borrow rate\\n   * @return The base variable borrow rate, expressed in ray\\n   */\\n  function getBaseVariableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the maximum variable borrow rate\\n   * @return The maximum variable borrow rate, expressed in ray\\n   */\\n  function getMaxVariableBorrowRate() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address of the PoolAddressesProvider"},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the excess stable debt ratio above the optimal."},"MAX_EXCESS_USAGE_RATIO()":{"notice":"Returns the excess usage ratio above the optimal."},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the optimal stable to total debt ratio of the reserve."},"OPTIMAL_USAGE_RATIO()":{"notice":"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates."},"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"notice":"Calculates the interest rates depending on the reserve's state and configurations"},"getBaseStableBorrowRate()":{"notice":"Returns the base stable borrow rate"},"getBaseVariableBorrowRate()":{"notice":"Returns the base variable borrow rate"},"getMaxVariableBorrowRate()":{"notice":"Returns the maximum variable borrow rate"},"getStableRateExcessOffset()":{"notice":"Returns the stable rate excess offset"},"getStableRateSlope1()":{"notice":"Returns the stable rate slope below optimal usage ratio"},"getStableRateSlope2()":{"notice":"Returns the stable rate slope above optimal usage ratio"},"getVariableRateSlope1()":{"notice":"Returns the variable rate slope below optimal usage ratio"},"getVariableRateSlope2()":{"notice":"Returns the variable rate slope above optimal usage ratio"}},"notice":"Defines the basic interface of the DefaultReserveInterestRateStrategy","version":1}}},"contracts/interfaces/IDelegationToken.sol":{"IDelegationToken":{"abi":[{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"delegate(address)":{"params":{"delegatee":"The address of the delegatee"}}},"title":"IDelegationToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"delegate(address)":"5c19a95c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"delegate(address)\":{\"params\":{\"delegatee\":\"The address of the delegatee\"}}},\"title\":\"IDelegationToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"delegate(address)\":{\"notice\":\"Delegate voting power to a delegatee\"}},\"notice\":\"Implements an interface for tokens with delegation COMP/UNI compatible\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IDelegationToken.sol\":\"IDelegationToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IDelegationToken\\n * @author Aave\\n * @notice Implements an interface for tokens with delegation COMP/UNI compatible\\n */\\ninterface IDelegationToken {\\n  /**\\n   * @notice Delegate voting power to a delegatee\\n   * @param delegatee The address of the delegatee\\n   */\\n  function delegate(address delegatee) external;\\n}\\n\",\"keccak256\":\"0xefaf5afc40d517357085677322396a6864a28d9bdbd664643a7a4723a45e4427\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"delegate(address)":{"notice":"Delegate voting power to a delegatee"}},"notice":"Implements an interface for tokens with delegation COMP/UNI compatible","version":1}}},"contracts/interfaces/IERC20WithPermit.sol":{"IERC20WithPermit":{"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":"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":"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"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","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 `amount` 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 amount of tokens owned by `account`."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"title":"IERC20WithPermit","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":\"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\":\"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\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"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 `amount` 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 amount of tokens owned by `account`.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"title\":\"IERC20WithPermit\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"}},\"notice\":\"Interface for the permit function (EIP-2612)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IERC20WithPermit.sol\":\"IERC20WithPermit\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"}},"notice":"Interface for the permit function (EIP-2612)","version":1}}},"contracts/interfaces/IInitializableAToken.sol":{"IInitializableAToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"Initialized(address,address,address,address,uint8,string,string,bytes)":{"details":"Emitted when an aToken is initialized","params":{"aTokenDecimals":"The decimals of the underlying","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The address of the incentives controller for this aToken","params":"A set of encoded parameters for additional initialization","pool":"The address of the associated pool","treasury":"The address of the treasury","underlyingAsset":"The address of the underlying asset"}}},"kind":"dev","methods":{"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}}},"title":"IInitializableAToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"Initialized(address,address,address,address,uint8,string,string,bytes)\":{\"details\":\"Emitted when an aToken is initialized\",\"params\":{\"aTokenDecimals\":\"The decimals of the underlying\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The address of the incentives controller for this aToken\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The address of the associated pool\",\"treasury\":\"The address of the treasury\",\"underlyingAsset\":\"The address of the underlying asset\"}}},\"kind\":\"dev\",\"methods\":{\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}}},\"title\":\"IInitializableAToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"}},\"notice\":\"Interface for the initialize function on AToken\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IInitializableAToken.sol\":\"IInitializableAToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"}},"notice":"Interface for the initialize function on AToken","version":1}}},"contracts/interfaces/IInitializableDebtToken.sol":{"IInitializableDebtToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"Initialized(address,address,address,uint8,string,string,bytes)":{"details":"Emitted when a debt token is initialized","params":{"debtTokenDecimals":"The decimals of the debt token","debtTokenName":"The name of the debt token","debtTokenSymbol":"The symbol of the debt token","incentivesController":"The address of the incentives controller for this aToken","params":"A set of encoded parameters for additional initialization","pool":"The address of the associated pool","underlyingAsset":"The address of the underlying asset"}}},"kind":"dev","methods":{"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}}},"title":"IInitializableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"Initialized(address,address,address,uint8,string,string,bytes)\":{\"details\":\"Emitted when a debt token is initialized\",\"params\":{\"debtTokenDecimals\":\"The decimals of the debt token\",\"debtTokenName\":\"The name of the debt token\",\"debtTokenSymbol\":\"The symbol of the debt token\",\"incentivesController\":\"The address of the incentives controller for this aToken\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The address of the associated pool\",\"underlyingAsset\":\"The address of the underlying asset\"}}},\"kind\":\"dev\",\"methods\":{\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}}},\"title\":\"IInitializableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"}},\"notice\":\"Interface for the initialize function common between debt tokens\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IInitializableDebtToken.sol\":\"IInitializableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."}},"notice":"Interface for the initialize function common between debt tokens","version":1}}},"contracts/interfaces/IL2Pool.sol":{"IL2Pool":{"abi":[{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args1","type":"bytes32"},{"internalType":"bytes32","name":"args2","type":"bytes32"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"borrow(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the borrow function packed in one bytes32    88 bits       16 bits             8 bits                 128 bits       16 bits | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |"}},"liquidationCall(bytes32,bytes32)":{"details":"the shortenedDebtToCover is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max","params":{"args1":"part of the arguments for the liquidationCall function packed in one bytes32    64 bits      160 bits       16 bits         16 bits | 0-padding | user address | debtAssetId | collateralAssetId |","args2":"part of the arguments for the liquidationCall function packed in one bytes32    127 bits       1 bit             128 bits | 0-padding | receiveAToken | shortenedDebtToCover |"}},"rebalanceStableBorrowRate(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the rebalanceStableBorrowRate function packed in one bytes32    80 bits      160 bits     16 bits | 0-padding | user address | assetId |"}},"repay(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repay function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repayWithATokens function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(bytes32,bytes32,bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repayWithPermit function packed in one bytes32    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |","r":"The R parameter of ERC712 permit sig","s":"The S parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"setUserUseReserveAsCollateral(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the setUserUseReserveAsCollateral function packed in one bytes32    239 bits         1 bit       16 bits | 0-padding | useAsCollateral | assetId |"}},"supply(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the supply function packed in one bytes32    96 bits       16 bits         128 bits      16 bits | 0-padding | referralCode | shortenedAmount | assetId |"}},"supplyWithPermit(bytes32,bytes32,bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the supply function packed in one bytes32    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |","r":"The R parameter of ERC712 permit sig","s":"The S parameter of ERC712 permit sig"}},"swapBorrowRateMode(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the swapBorrowRateMode function packed in one bytes32    232 bits            8 bits             16 bits | 0-padding | shortenedInterestRateMode | assetId |"}},"withdraw(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the withdraw function packed in one bytes32    112 bits       128 bits      16 bits | 0-padding | shortenedAmount | assetId |"},"returns":{"_0":"The final amount withdrawn"}}},"title":"IL2Pool","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"borrow(bytes32)":"d5eed868","liquidationCall(bytes32,bytes32)":"fd21ecff","rebalanceStableBorrowRate(bytes32)":"427da177","repay(bytes32)":"563dd613","repayWithATokens(bytes32)":"dc7c0bff","repayWithPermit(bytes32,bytes32,bytes32)":"94b576de","setUserUseReserveAsCollateral(bytes32)":"4d013f03","supply(bytes32)":"f7a73840","supplyWithPermit(bytes32,bytes32,bytes32)":"680dd47c","swapBorrowRateMode(bytes32)":"1fe3c6f3","withdraw(bytes32)":"8e19899e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"args2\",\"type\":\"bytes32\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"borrow(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the borrow function packed in one bytes32    88 bits       16 bits             8 bits                 128 bits       16 bits | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |\"}},\"liquidationCall(bytes32,bytes32)\":{\"details\":\"the shortenedDebtToCover is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max\",\"params\":{\"args1\":\"part of the arguments for the liquidationCall function packed in one bytes32    64 bits      160 bits       16 bits         16 bits | 0-padding | user address | debtAssetId | collateralAssetId |\",\"args2\":\"part of the arguments for the liquidationCall function packed in one bytes32    127 bits       1 bit             128 bits | 0-padding | receiveAToken | shortenedDebtToCover |\"}},\"rebalanceStableBorrowRate(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the rebalanceStableBorrowRate function packed in one bytes32    80 bits      160 bits     16 bits | 0-padding | user address | assetId |\"}},\"repay(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repay function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repayWithATokens function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(bytes32,bytes32,bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repayWithPermit function packed in one bytes32    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |\",\"r\":\"The R parameter of ERC712 permit sig\",\"s\":\"The S parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"setUserUseReserveAsCollateral(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the setUserUseReserveAsCollateral function packed in one bytes32    239 bits         1 bit       16 bits | 0-padding | useAsCollateral | assetId |\"}},\"supply(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the supply function packed in one bytes32    96 bits       16 bits         128 bits      16 bits | 0-padding | referralCode | shortenedAmount | assetId |\"}},\"supplyWithPermit(bytes32,bytes32,bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the supply function packed in one bytes32    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |\",\"r\":\"The R parameter of ERC712 permit sig\",\"s\":\"The S parameter of ERC712 permit sig\"}},\"swapBorrowRateMode(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the swapBorrowRateMode function packed in one bytes32    232 bits            8 bits             16 bits | 0-padding | shortenedInterestRateMode | assetId |\"}},\"withdraw(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the withdraw function packed in one bytes32    112 bits       128 bits      16 bits | 0-padding | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"title\":\"IL2Pool\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"borrow(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller\"},\"liquidationCall(bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the liquidationCall function\"},\"rebalanceStableBorrowRate(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the rebalanceStableBorrowRate function\"},\"repay(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repay function, repaying on behalf of the caller\"},\"repayWithATokens(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repayWithATokens function\"},\"repayWithPermit(bytes32,bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller\"},\"setUserUseReserveAsCollateral(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the setUserUseReserveAsCollateral function\"},\"supply(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the supply function on behalf of the caller\"},\"supplyWithPermit(bytes32,bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller\"},\"swapBorrowRateMode(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the swapBorrowRateMode function\"},\"withdraw(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the withdraw function, withdrawing to the caller\"}},\"notice\":\"Defines the basic extension interface for an L2 Aave Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IL2Pool.sol\":\"IL2Pool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IL2Pool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IL2Pool\\n * @author Aave\\n * @notice Defines the basic extension interface for an L2 Aave Pool.\\n */\\ninterface IL2Pool {\\n  /**\\n   * @notice Calldata efficient wrapper of the supply function on behalf of the caller\\n   * @param args Arguments for the supply function packed in one bytes32\\n   *    96 bits       16 bits         128 bits      16 bits\\n   * | 0-padding | referralCode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function supply(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller\\n   * @param args Arguments for the supply function packed in one bytes32\\n   *    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits\\n   * | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @param r The R parameter of ERC712 permit sig\\n   * @param s The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the withdraw function, withdrawing to the caller\\n   * @param args Arguments for the withdraw function packed in one bytes32\\n   *    112 bits       128 bits      16 bits\\n   * | 0-padding | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller\\n   * @param args Arguments for the borrow function packed in one bytes32\\n   *    88 bits       16 bits             8 bits                 128 bits       16 bits\\n   * | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function borrow(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repay function, repaying on behalf of the caller\\n   * @param args Arguments for the repay function packed in one bytes32\\n   *    104 bits             8 bits               128 bits       16 bits\\n   * | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount repaid\\n   */\\n  function repay(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller\\n   * @param args Arguments for the repayWithPermit function packed in one bytes32\\n   *    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits\\n   * | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @param r The R parameter of ERC712 permit sig\\n   * @param s The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(bytes32 args, bytes32 r, bytes32 s) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repayWithATokens function\\n   * @param args Arguments for the repayWithATokens function packed in one bytes32\\n   *    104 bits             8 bits               128 bits       16 bits\\n   * | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the swapBorrowRateMode function\\n   * @param args Arguments for the swapBorrowRateMode function packed in one bytes32\\n   *    232 bits            8 bits             16 bits\\n   * | 0-padding | shortenedInterestRateMode | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function swapBorrowRateMode(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the rebalanceStableBorrowRate function\\n   * @param args Arguments for the rebalanceStableBorrowRate function packed in one bytes32\\n   *    80 bits      160 bits     16 bits\\n   * | 0-padding | user address | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function rebalanceStableBorrowRate(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the setUserUseReserveAsCollateral function\\n   * @param args Arguments for the setUserUseReserveAsCollateral function packed in one bytes32\\n   *    239 bits         1 bit       16 bits\\n   * | 0-padding | useAsCollateral | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function setUserUseReserveAsCollateral(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the liquidationCall function\\n   * @param args1 part of the arguments for the liquidationCall function packed in one bytes32\\n   *    64 bits      160 bits       16 bits         16 bits\\n   * | 0-padding | user address | debtAssetId | collateralAssetId |\\n   * @param args2 part of the arguments for the liquidationCall function packed in one bytes32\\n   *    127 bits       1 bit             128 bits\\n   * | 0-padding | receiveAToken | shortenedDebtToCover |\\n   * @dev the shortenedDebtToCover is cast to 256 bits at decode time,\\n   * if type(uint128).max the value will be expanded to type(uint256).max\\n   */\\n  function liquidationCall(bytes32 args1, bytes32 args2) external;\\n}\\n\",\"keccak256\":\"0xc61a7956f4de0e7cd5691e4798d83e7b7a3fa4a22689af250f0e3aa7533d8fc7\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"borrow(bytes32)":{"notice":"Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller"},"liquidationCall(bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the liquidationCall function"},"rebalanceStableBorrowRate(bytes32)":{"notice":"Calldata efficient wrapper of the rebalanceStableBorrowRate function"},"repay(bytes32)":{"notice":"Calldata efficient wrapper of the repay function, repaying on behalf of the caller"},"repayWithATokens(bytes32)":{"notice":"Calldata efficient wrapper of the repayWithATokens function"},"repayWithPermit(bytes32,bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller"},"setUserUseReserveAsCollateral(bytes32)":{"notice":"Calldata efficient wrapper of the setUserUseReserveAsCollateral function"},"supply(bytes32)":{"notice":"Calldata efficient wrapper of the supply function on behalf of the caller"},"supplyWithPermit(bytes32,bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller"},"swapBorrowRateMode(bytes32)":{"notice":"Calldata efficient wrapper of the swapBorrowRateMode function"},"withdraw(bytes32)":{"notice":"Calldata efficient wrapper of the withdraw function, withdrawing to the caller"}},"notice":"Defines the basic extension interface for an L2 Aave Pool.","version":1}}},"contracts/interfaces/IPool.sol":{"IPool":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"config","type":"tuple"}],"name":"configureEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"interestRateModes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoanSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"getEModeCategoryData","outputs":[{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"getReserveAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralBase","type":"uint256"},{"internalType":"uint256","name":"totalDebtBase","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsBase","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserEMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"resetIsolationModeTotalDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"setUserEMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bridgeProtocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"flashLoanPremiumTotal","type":"uint128"},{"internalType":"uint128","name":"flashLoanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"BackUnbacked(address,address,uint256,uint256)":{"details":"Emitted on backUnbacked()","params":{"amount":"The amount added as backing","backer":"The address paying for the backing","fee":"The amount paid in fees","reserve":"The address of the underlying asset of the reserve"}},"Borrow(address,address,address,uint256,uint8,uint256,uint16)":{"details":"Emitted on borrow() and flashLoan() when debt needs to be opened","params":{"amount":"The amount borrowed out","borrowRate":"The numeric rate at which the user has borrowed, expressed in ray","interestRateMode":"The rate mode: 1 for Stable, 2 for Variable","onBehalfOf":"The address that will be getting the debt","referralCode":"The referral code used","reserve":"The address of the underlying asset being borrowed","user":"The address of the user initiating the borrow(), receiving the funds on borrow() or just initiator of the transaction on flashLoan()"}},"FlashLoan(address,address,address,uint256,uint8,uint256,uint16)":{"details":"Emitted on flashLoan()","params":{"amount":"The amount flash borrowed","asset":"The address of the asset being flash borrowed","initiator":"The address initiating the flash loan","interestRateMode":"The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt","premium":"The fee flash borrowed","referralCode":"The referral code used","target":"The address of the flash loan receiver contract"}},"IsolationModeTotalDebtUpdated(address,uint256)":{"details":"Emitted on borrow(), repay() and liquidationCall() when using isolated assets","params":{"asset":"The address of the underlying asset of the reserve","totalDebt":"The total isolation mode debt for the reserve"}},"LiquidationCall(address,address,address,uint256,uint256,address,bool)":{"details":"Emitted when a borrower is liquidated.","params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","liquidatedCollateralAmount":"The amount of collateral received by the liquidator","liquidator":"The address of the liquidator","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"MintUnbacked(address,address,address,uint256,uint16)":{"details":"Emitted on mintUnbacked()","params":{"amount":"The amount of supplied assets","onBehalfOf":"The beneficiary of the supplied assets, receiving the aTokens","referralCode":"The referral code used","reserve":"The address of the underlying asset of the reserve","user":"The address initiating the supply"}},"MintedToTreasury(address,uint256)":{"details":"Emitted when the protocol treasury receives minted aTokens from the accrued interest.","params":{"amountMinted":"The amount minted to the treasury","reserve":"The address of the reserve"}},"RebalanceStableBorrowRate(address,address)":{"details":"Emitted on rebalanceStableBorrowRate()","params":{"reserve":"The address of the underlying asset of the reserve","user":"The address of the user for which the rebalance has been executed"}},"Repay(address,address,address,uint256,bool)":{"details":"Emitted on repay()","params":{"amount":"The amount repaid","repayer":"The address of the user initiating the repay(), providing the funds","reserve":"The address of the underlying asset of the reserve","useATokens":"True if the repayment is done using aTokens, `false` if done with underlying asset directly","user":"The beneficiary of the repayment, getting his debt reduced"}},"ReserveDataUpdated(address,uint256,uint256,uint256,uint256,uint256)":{"details":"Emitted when the state of a reserve is updated.","params":{"liquidityIndex":"The next liquidity index","liquidityRate":"The next liquidity rate","reserve":"The address of the underlying asset of the reserve","stableBorrowRate":"The next stable borrow rate","variableBorrowIndex":"The next variable borrow index","variableBorrowRate":"The next variable borrow rate"}},"ReserveUsedAsCollateralDisabled(address,address)":{"details":"Emitted on setUserUseReserveAsCollateral()","params":{"reserve":"The address of the underlying asset of the reserve","user":"The address of the user enabling the usage as collateral"}},"ReserveUsedAsCollateralEnabled(address,address)":{"details":"Emitted on setUserUseReserveAsCollateral()","params":{"reserve":"The address of the underlying asset of the reserve","user":"The address of the user enabling the usage as collateral"}},"Supply(address,address,address,uint256,uint16)":{"details":"Emitted on supply()","params":{"amount":"The amount supplied","onBehalfOf":"The beneficiary of the supply, receiving the aTokens","referralCode":"The referral code used","reserve":"The address of the underlying asset of the reserve","user":"The address initiating the supply"}},"SwapBorrowRateMode(address,address,uint8)":{"details":"Emitted on swapBorrowRateMode()","params":{"interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable","reserve":"The address of the underlying asset of the reserve","user":"The address of the user swapping his rate mode"}},"UserEModeSet(address,uint8)":{"details":"Emitted when the user selects a certain asset category for eMode","params":{"categoryId":"The category id","user":"The address of the user"}},"Withdraw(address,address,address,uint256)":{"details":"Emitted on withdraw()","params":{"amount":"The amount to be withdrawn","reserve":"The address of the underlying asset being withdrawn","to":"The address that will receive the underlying","user":"The address initiating the withdrawal, owner of aTokens"}}},"kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider"}},"BRIDGE_PROTOCOL_FEE()":{"returns":{"_0":"The bridge fee sent to the protocol treasury"}},"FLASHLOAN_PREMIUM_TOTAL()":{"returns":{"_0":"The total fee on flashloans"}},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"returns":{"_0":"The flashloan fee sent to the protocol treasury"}},"MAX_NUMBER_RESERVES()":{"returns":{"_0":"The maximum number of reserves supported"}},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"returns":{"_0":"The percentage of available liquidity to borrow, expressed in bps"}},"backUnbacked(address,uint256,uint256)":{"params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees"},"returns":{"_0":"The backed amount"}},"borrow(address,uint256,uint256,uint16,address)":{"params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"details":"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets","params":{"config":"The configuration of the category","id":"The id of the category"}},"deposit(address,uint256,address,uint16)":{"details":"Deprecated: Use the `supply` function instead","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"dropReserve(address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve"}},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"details":"Only callable by the overlying aToken of the `asset`","params":{"amount":"The amount being transferred/withdrawn","asset":"The address of the underlying asset of the aToken","balanceFromBefore":"The aToken balance of the `from` user before the transfer","balanceToBefore":"The aToken balance of the `to` user before the transfer","from":"The user from which the aTokens are transferred","to":"The user receiving the aTokens"}},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amounts":"The amounts of the assets being flash-borrowed","assets":"The addresses of the assets being flash-borrowed","interestRateModes":"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address","onBehalfOf":"The address  that will receive the debt in the case of using on `modes` 1 or 2","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amount":"The amount of the asset being flash-borrowed","asset":"The address of the asset being flash-borrowed","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"getConfiguration(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The configuration of the reserve"}},"getEModeCategoryData(uint8)":{"params":{"id":"The id of the category"},"returns":{"_0":"The configuration data of the category"}},"getReserveAddressById(uint16)":{"params":{"id":"The id of the reserve as stored in the DataTypes.ReserveData struct"},"returns":{"_0":"The address of the reserve associated with id"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The state and configuration data of the reserve"}},"getReserveNormalizedIncome(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve's normalized income"}},"getReserveNormalizedVariableDebt(address)":{"details":"WARNING: This function is intended to be used primarily by the protocol itself to get a \"dynamic\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve normalized variable debt"}},"getReservesList()":{"details":"It does not include dropped reserves","returns":{"_0":"The addresses of the underlying assets of the initialized reserves"}},"getUserAccountData(address)":{"params":{"user":"The address of the user"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"getUserConfiguration(address)":{"params":{"user":"The user address"},"returns":{"_0":"The configuration of the user"}},"getUserEMode(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The eMode id"}},"initReserve(address,address,address,address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"aTokenAddress":"The address of the aToken that will be assigned to the reserve","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy contract","stableDebtAddress":"The address of the StableDebtToken that will be assigned to the reserve","variableDebtAddress":"The address of the VariableDebtToken that will be assigned to the reserve"}},"liquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"mintToTreasury(address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed"}},"mintUnbacked(address,uint256,address,uint16)":{"params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"rebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"}},"repay(address,uint256,uint256,address)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(address,uint256,uint256)":{"details":"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"resetIsolationModeTotalDebt(address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt"}},"setConfiguration(address,(uint256))":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","configuration":"The new configuration bitmap"}},"setReserveInterestRateStrategyAddress(address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","rateStrategyAddress":"The address of the interest rate strategy contract"}},"setUserEMode(uint8)":{"params":{"categoryId":"The id of the category"}},"setUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset supplied","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"}},"supply(address,uint256,address,uint16)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"swapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"}},"updateBridgeProtocolFee(uint256)":{"params":{"bridgeProtocolFee":"The part of the premium sent to the protocol treasury"}},"updateFlashloanPremiums(uint128,uint128)":{"details":"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract","params":{"flashLoanPremiumToProtocol":"The part of the premium sent to the protocol treasury, expressed in bps","flashLoanPremiumTotal":"The total premium, expressed in bps"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn"}}},"title":"IPool","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BRIDGE_PROTOCOL_FEE()":"272d9072","FLASHLOAN_PREMIUM_TOTAL()":"074b2e43","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"6a99c036","MAX_NUMBER_RESERVES()":"f8119d51","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"e82fec2f","backUnbacked(address,uint256,uint256)":"d65dc7a1","borrow(address,uint256,uint256,uint16,address)":"a415bcad","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"d579ea7d","deposit(address,uint256,address,uint16)":"e8eda9df","dropReserve(address)":"63c9b860","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"d5ed3933","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"ab9c4b5d","flashLoanSimple(address,address,uint256,bytes,uint16)":"42b0b77c","getConfiguration(address)":"c44b11f7","getEModeCategoryData(uint8)":"6c6f6ae1","getReserveAddressById(uint16)":"52751797","getReserveData(address)":"35ea6a75","getReserveNormalizedIncome(address)":"d15e0053","getReserveNormalizedVariableDebt(address)":"386497fd","getReservesList()":"d1946dbc","getUserAccountData(address)":"bf92857c","getUserConfiguration(address)":"4417a583","getUserEMode(address)":"eddf1b79","initReserve(address,address,address,address,address)":"7a708e92","liquidationCall(address,address,address,uint256,bool)":"00a718a9","mintToTreasury(address[])":"9cd19996","mintUnbacked(address,uint256,address,uint16)":"69a933a5","rebalanceStableBorrowRate(address,address)":"cd112382","repay(address,uint256,uint256,address)":"573ade81","repayWithATokens(address,uint256,uint256)":"2dad97d4","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"ee3e210b","rescueTokens(address,address,uint256)":"cea9d26f","resetIsolationModeTotalDebt(address)":"e43e88a1","setConfiguration(address,(uint256))":"f51e435b","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setUserEMode(uint8)":"28530a47","setUserUseReserveAsCollateral(address,bool)":"5a3b74b9","supply(address,uint256,address,uint16)":"617ba037","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"02c205f0","swapBorrowRateMode(address,uint256)":"94ba89a2","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiums(uint128,uint128)":"bcb6e522","withdraw(address,uint256,address)":"69328dec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TOTAL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TO_PROTOCOL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUMBER_RESERVES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"configureEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"interestRateModes\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoanSimple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"}],\"name\":\"getEModeCategoryData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"getReserveAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentStableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"}],\"internalType\":\"struct DataTypes.ReserveData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserAccountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalCollateralBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebtBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableBorrowsBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.UserConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserEMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"resetIsolationModeTotalDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"setUserEMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"bridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumTotal\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiums\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"BackUnbacked(address,address,uint256,uint256)\":{\"details\":\"Emitted on backUnbacked()\",\"params\":{\"amount\":\"The amount added as backing\",\"backer\":\"The address paying for the backing\",\"fee\":\"The amount paid in fees\",\"reserve\":\"The address of the underlying asset of the reserve\"}},\"Borrow(address,address,address,uint256,uint8,uint256,uint16)\":{\"details\":\"Emitted on borrow() and flashLoan() when debt needs to be opened\",\"params\":{\"amount\":\"The amount borrowed out\",\"borrowRate\":\"The numeric rate at which the user has borrowed, expressed in ray\",\"interestRateMode\":\"The rate mode: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address that will be getting the debt\",\"referralCode\":\"The referral code used\",\"reserve\":\"The address of the underlying asset being borrowed\",\"user\":\"The address of the user initiating the borrow(), receiving the funds on borrow() or just initiator of the transaction on flashLoan()\"}},\"FlashLoan(address,address,address,uint256,uint8,uint256,uint16)\":{\"details\":\"Emitted on flashLoan()\",\"params\":{\"amount\":\"The amount flash borrowed\",\"asset\":\"The address of the asset being flash borrowed\",\"initiator\":\"The address initiating the flash loan\",\"interestRateMode\":\"The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\",\"premium\":\"The fee flash borrowed\",\"referralCode\":\"The referral code used\",\"target\":\"The address of the flash loan receiver contract\"}},\"IsolationModeTotalDebtUpdated(address,uint256)\":{\"details\":\"Emitted on borrow(), repay() and liquidationCall() when using isolated assets\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"totalDebt\":\"The total isolation mode debt for the reserve\"}},\"LiquidationCall(address,address,address,uint256,uint256,address,bool)\":{\"details\":\"Emitted when a borrower is liquidated.\",\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"liquidatedCollateralAmount\":\"The amount of collateral received by the liquidator\",\"liquidator\":\"The address of the liquidator\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"MintUnbacked(address,address,address,uint256,uint16)\":{\"details\":\"Emitted on mintUnbacked()\",\"params\":{\"amount\":\"The amount of supplied assets\",\"onBehalfOf\":\"The beneficiary of the supplied assets, receiving the aTokens\",\"referralCode\":\"The referral code used\",\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address initiating the supply\"}},\"MintedToTreasury(address,uint256)\":{\"details\":\"Emitted when the protocol treasury receives minted aTokens from the accrued interest.\",\"params\":{\"amountMinted\":\"The amount minted to the treasury\",\"reserve\":\"The address of the reserve\"}},\"RebalanceStableBorrowRate(address,address)\":{\"details\":\"Emitted on rebalanceStableBorrowRate()\",\"params\":{\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user for which the rebalance has been executed\"}},\"Repay(address,address,address,uint256,bool)\":{\"details\":\"Emitted on repay()\",\"params\":{\"amount\":\"The amount repaid\",\"repayer\":\"The address of the user initiating the repay(), providing the funds\",\"reserve\":\"The address of the underlying asset of the reserve\",\"useATokens\":\"True if the repayment is done using aTokens, `false` if done with underlying asset directly\",\"user\":\"The beneficiary of the repayment, getting his debt reduced\"}},\"ReserveDataUpdated(address,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when the state of a reserve is updated.\",\"params\":{\"liquidityIndex\":\"The next liquidity index\",\"liquidityRate\":\"The next liquidity rate\",\"reserve\":\"The address of the underlying asset of the reserve\",\"stableBorrowRate\":\"The next stable borrow rate\",\"variableBorrowIndex\":\"The next variable borrow index\",\"variableBorrowRate\":\"The next variable borrow rate\"}},\"ReserveUsedAsCollateralDisabled(address,address)\":{\"details\":\"Emitted on setUserUseReserveAsCollateral()\",\"params\":{\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user enabling the usage as collateral\"}},\"ReserveUsedAsCollateralEnabled(address,address)\":{\"details\":\"Emitted on setUserUseReserveAsCollateral()\",\"params\":{\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user enabling the usage as collateral\"}},\"Supply(address,address,address,uint256,uint16)\":{\"details\":\"Emitted on supply()\",\"params\":{\"amount\":\"The amount supplied\",\"onBehalfOf\":\"The beneficiary of the supply, receiving the aTokens\",\"referralCode\":\"The referral code used\",\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address initiating the supply\"}},\"SwapBorrowRateMode(address,address,uint8)\":{\"details\":\"Emitted on swapBorrowRateMode()\",\"params\":{\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\",\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user swapping his rate mode\"}},\"UserEModeSet(address,uint8)\":{\"details\":\"Emitted when the user selects a certain asset category for eMode\",\"params\":{\"categoryId\":\"The category id\",\"user\":\"The address of the user\"}},\"Withdraw(address,address,address,uint256)\":{\"details\":\"Emitted on withdraw()\",\"params\":{\"amount\":\"The amount to be withdrawn\",\"reserve\":\"The address of the underlying asset being withdrawn\",\"to\":\"The address that will receive the underlying\",\"user\":\"The address initiating the withdrawal, owner of aTokens\"}}},\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider\"}},\"BRIDGE_PROTOCOL_FEE()\":{\"returns\":{\"_0\":\"The bridge fee sent to the protocol treasury\"}},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"returns\":{\"_0\":\"The total fee on flashloans\"}},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"returns\":{\"_0\":\"The flashloan fee sent to the protocol treasury\"}},\"MAX_NUMBER_RESERVES()\":{\"returns\":{\"_0\":\"The maximum number of reserves supported\"}},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"returns\":{\"_0\":\"The percentage of available liquidity to borrow, expressed in bps\"}},\"backUnbacked(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees\"},\"returns\":{\"_0\":\"The backed amount\"}},\"borrow(address,uint256,uint256,uint16,address)\":{\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"details\":\"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets\",\"params\":{\"config\":\"The configuration of the category\",\"id\":\"The id of the category\"}},\"deposit(address,uint256,address,uint16)\":{\"details\":\"Deprecated: Use the `supply` function instead\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"dropReserve(address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Only callable by the overlying aToken of the `asset`\",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"asset\":\"The address of the underlying asset of the aToken\",\"balanceFromBefore\":\"The aToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The aToken balance of the `to` user before the transfer\",\"from\":\"The user from which the aTokens are transferred\",\"to\":\"The user receiving the aTokens\"}},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amounts\":\"The amounts of the assets being flash-borrowed\",\"assets\":\"The addresses of the assets being flash-borrowed\",\"interestRateModes\":\"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\",\"onBehalfOf\":\"The address  that will receive the debt in the case of using on `modes` 1 or 2\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amount\":\"The amount of the asset being flash-borrowed\",\"asset\":\"The address of the asset being flash-borrowed\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"getConfiguration(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve\"}},\"getEModeCategoryData(uint8)\":{\"params\":{\"id\":\"The id of the category\"},\"returns\":{\"_0\":\"The configuration data of the category\"}},\"getReserveAddressById(uint16)\":{\"params\":{\"id\":\"The id of the reserve as stored in the DataTypes.ReserveData struct\"},\"returns\":{\"_0\":\"The address of the reserve associated with id\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The state and configuration data of the reserve\"}},\"getReserveNormalizedIncome(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve's normalized income\"}},\"getReserveNormalizedVariableDebt(address)\":{\"details\":\"WARNING: This function is intended to be used primarily by the protocol itself to get a \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReservesList()\":{\"details\":\"It does not include dropped reserves\",\"returns\":{\"_0\":\"The addresses of the underlying assets of the initialized reserves\"}},\"getUserAccountData(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"getUserConfiguration(address)\":{\"params\":{\"user\":\"The user address\"},\"returns\":{\"_0\":\"The configuration of the user\"}},\"getUserEMode(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The eMode id\"}},\"initReserve(address,address,address,address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"aTokenAddress\":\"The address of the aToken that will be assigned to the reserve\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy contract\",\"stableDebtAddress\":\"The address of the StableDebtToken that will be assigned to the reserve\",\"variableDebtAddress\":\"The address of the VariableDebtToken that will be assigned to the reserve\"}},\"liquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"mintToTreasury(address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"rebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"}},\"repay(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(address,uint256,uint256)\":{\"details\":\"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"resetIsolationModeTotalDebt(address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\"}},\"setConfiguration(address,(uint256))\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"configuration\":\"The new configuration bitmap\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"rateStrategyAddress\":\"The address of the interest rate strategy contract\"}},\"setUserEMode(uint8)\":{\"params\":{\"categoryId\":\"The id of the category\"}},\"setUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset supplied\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"}},\"supply(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"swapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"bridgeProtocolFee\":\"The part of the premium sent to the protocol treasury\"}},\"updateFlashloanPremiums(uint128,uint128)\":{\"details\":\"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract\",\"params\":{\"flashLoanPremiumToProtocol\":\"The part of the premium sent to the protocol treasury, expressed in bps\",\"flashLoanPremiumTotal\":\"The total premium, expressed in bps\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"title\":\"IPool\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider connected to this contract\"},\"BRIDGE_PROTOCOL_FEE()\":{\"notice\":\"Returns the part of the bridge fees sent to protocol\"},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"notice\":\"Returns the total fee on flash loans\"},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"notice\":\"Returns the part of the flashloan fees sent to protocol\"},\"MAX_NUMBER_RESERVES()\":{\"notice\":\"Returns the maximum number of reserves supported to be listed in this Pool\"},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"notice\":\"Returns the percentage of available liquidity that can be borrowed at once at stable rate\"},\"backUnbacked(address,uint256,uint256)\":{\"notice\":\"Back the current unbacked underlying with `amount` and pay `fee`.\"},\"borrow(address,uint256,uint256,uint16,address)\":{\"notice\":\"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`\"},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"notice\":\"Configures a new category for the eMode.\"},\"deposit(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"dropReserve(address)\":{\"notice\":\"Drop a reserve\"},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Validates and finalizes an aToken transfer\"},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"getConfiguration(address)\":{\"notice\":\"Returns the configuration of the reserve\"},\"getEModeCategoryData(uint8)\":{\"notice\":\"Returns the data of an eMode category\"},\"getReserveAddressById(uint16)\":{\"notice\":\"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\"},\"getReserveData(address)\":{\"notice\":\"Returns the state and configuration of the reserve\"},\"getReserveNormalizedIncome(address)\":{\"notice\":\"Returns the normalized income of the reserve\"},\"getReserveNormalizedVariableDebt(address)\":{\"notice\":\"Returns the normalized variable debt per unit of asset\"},\"getReservesList()\":{\"notice\":\"Returns the list of the underlying assets of all the initialized reserves\"},\"getUserAccountData(address)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"getUserConfiguration(address)\":{\"notice\":\"Returns the configuration of the user across all the reserves\"},\"getUserEMode(address)\":{\"notice\":\"Returns the eMode the user is using\"},\"initReserve(address,address,address,address,address)\":{\"notice\":\"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy\"},\"liquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\"},\"mintToTreasury(address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"mintUnbacked(address,uint256,address,uint16)\":{\"notice\":\"Mints an `amount` of aTokens to the `onBehalfOf`\"},\"rebalanceStableBorrowRate(address,address)\":{\"notice\":\"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough\"},\"repay(address,uint256,uint256,address)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\"},\"repayWithATokens(address,uint256,uint256)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\"},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"resetIsolationModeTotalDebt(address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"},\"setConfiguration(address,(uint256))\":{\"notice\":\"Sets the configuration bitmap of the reserve as a whole\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Updates the address of the interest rate strategy contract\"},\"setUserEMode(uint8)\":{\"notice\":\"Allows a user to use the protocol in eMode\"},\"setUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Allows suppliers to enable/disable a specific supplied asset as collateral\"},\"supply(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"swapBorrowRateMode(address,uint256)\":{\"notice\":\"Allows a borrower to swap his debt between stable and variable mode, or vice versa\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the protocol fee on the bridging\"},\"updateFlashloanPremiums(uint128,uint128)\":{\"notice\":\"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury\"},\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"}},\"notice\":\"Defines the basic interface for an Aave Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPool.sol\":\"IPool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider connected to this contract"},"BRIDGE_PROTOCOL_FEE()":{"notice":"Returns the part of the bridge fees sent to protocol"},"FLASHLOAN_PREMIUM_TOTAL()":{"notice":"Returns the total fee on flash loans"},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"notice":"Returns the part of the flashloan fees sent to protocol"},"MAX_NUMBER_RESERVES()":{"notice":"Returns the maximum number of reserves supported to be listed in this Pool"},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"notice":"Returns the percentage of available liquidity that can be borrowed at once at stable rate"},"backUnbacked(address,uint256,uint256)":{"notice":"Back the current unbacked underlying with `amount` and pay `fee`."},"borrow(address,uint256,uint256,uint16,address)":{"notice":"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`"},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"notice":"Configures a new category for the eMode."},"deposit(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"dropReserve(address)":{"notice":"Drop a reserve"},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"notice":"Validates and finalizes an aToken transfer"},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"getConfiguration(address)":{"notice":"Returns the configuration of the reserve"},"getEModeCategoryData(uint8)":{"notice":"Returns the data of an eMode category"},"getReserveAddressById(uint16)":{"notice":"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct"},"getReserveData(address)":{"notice":"Returns the state and configuration of the reserve"},"getReserveNormalizedIncome(address)":{"notice":"Returns the normalized income of the reserve"},"getReserveNormalizedVariableDebt(address)":{"notice":"Returns the normalized variable debt per unit of asset"},"getReservesList()":{"notice":"Returns the list of the underlying assets of all the initialized reserves"},"getUserAccountData(address)":{"notice":"Returns the user account data across all the reserves"},"getUserConfiguration(address)":{"notice":"Returns the configuration of the user across all the reserves"},"getUserEMode(address)":{"notice":"Returns the eMode the user is using"},"initReserve(address,address,address,address,address)":{"notice":"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy"},"liquidationCall(address,address,address,uint256,bool)":{"notice":"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk"},"mintToTreasury(address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"mintUnbacked(address,uint256,address,uint16)":{"notice":"Mints an `amount` of aTokens to the `onBehalfOf`"},"rebalanceStableBorrowRate(address,address)":{"notice":"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough"},"repay(address,uint256,uint256,address)":{"notice":"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address"},"repayWithATokens(address,uint256,uint256)":{"notice":"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens"},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"notice":"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"resetIsolationModeTotalDebt(address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"},"setConfiguration(address,(uint256))":{"notice":"Sets the configuration bitmap of the reserve as a whole"},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Updates the address of the interest rate strategy contract"},"setUserEMode(uint8)":{"notice":"Allows a user to use the protocol in eMode"},"setUserUseReserveAsCollateral(address,bool)":{"notice":"Allows suppliers to enable/disable a specific supplied asset as collateral"},"supply(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"swapBorrowRateMode(address,uint256)":{"notice":"Allows a borrower to swap his debt between stable and variable mode, or vice versa"},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the protocol fee on the bridging"},"updateFlashloanPremiums(uint128,uint128)":{"notice":"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury"},"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"}},"notice":"Defines the basic interface for an Aave Pool.","version":1}}},"contracts/interfaces/IPoolAddressesProvider.sol":{"IPoolAddressesProvider":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ACLAdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ACLManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"AddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":false,"internalType":"address","name":"oldImplementationAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"AddressSetAsProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oldMarketId","type":"string"},{"indexed":true,"internalType":"string","name":"newMarketId","type":"string"}],"name":"MarketIdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolConfiguratorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolDataProviderUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleSentinelUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":true,"internalType":"address","name":"implementationAddress","type":"address"}],"name":"ProxyCreated","type":"event"},{"inputs":[],"name":"getACLAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getACLManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolConfigurator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolDataProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOracleSentinel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAclAdmin","type":"address"}],"name":"setACLAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAclManager","type":"address"}],"name":"setACLManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"setAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"setAddressAsProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newMarketId","type":"string"}],"name":"setMarketId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolConfiguratorImpl","type":"address"}],"name":"setPoolConfiguratorImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDataProvider","type":"address"}],"name":"setPoolDataProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolImpl","type":"address"}],"name":"setPoolImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceOracle","type":"address"}],"name":"setPriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceOracleSentinel","type":"address"}],"name":"setPriceOracleSentinel","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"ACLAdminUpdated(address,address)":{"details":"Emitted when the ACL admin is updated.","params":{"newAddress":"The new address of the ACLAdmin","oldAddress":"The old address of the ACLAdmin"}},"ACLManagerUpdated(address,address)":{"details":"Emitted when the ACL manager is updated.","params":{"newAddress":"The new address of the ACLManager","oldAddress":"The old address of the ACLManager"}},"AddressSet(bytes32,address,address)":{"details":"Emitted when a new non-proxied contract address is registered.","params":{"id":"The identifier of the contract","newAddress":"The address of the new contract","oldAddress":"The address of the old contract"}},"AddressSetAsProxy(bytes32,address,address,address)":{"details":"Emitted when the implementation of the proxy registered with id is updated","params":{"id":"The identifier of the contract","newImplementationAddress":"The address of the new implementation contract","oldImplementationAddress":"The address of the old implementation contract","proxyAddress":"The address of the proxy contract"}},"MarketIdSet(string,string)":{"details":"Emitted when the market identifier is updated.","params":{"newMarketId":"The new id of the market","oldMarketId":"The old id of the market"}},"PoolConfiguratorUpdated(address,address)":{"details":"Emitted when the pool configurator is updated.","params":{"newAddress":"The new address of the PoolConfigurator","oldAddress":"The old address of the PoolConfigurator"}},"PoolDataProviderUpdated(address,address)":{"details":"Emitted when the pool data provider is updated.","params":{"newAddress":"The new address of the PoolDataProvider","oldAddress":"The old address of the PoolDataProvider"}},"PoolUpdated(address,address)":{"details":"Emitted when the pool is updated.","params":{"newAddress":"The new address of the Pool","oldAddress":"The old address of the Pool"}},"PriceOracleSentinelUpdated(address,address)":{"details":"Emitted when the price oracle sentinel is updated.","params":{"newAddress":"The new address of the PriceOracleSentinel","oldAddress":"The old address of the PriceOracleSentinel"}},"PriceOracleUpdated(address,address)":{"details":"Emitted when the price oracle is updated.","params":{"newAddress":"The new address of the PriceOracle","oldAddress":"The old address of the PriceOracle"}},"ProxyCreated(bytes32,address,address)":{"details":"Emitted when a new proxy is created.","params":{"id":"The identifier of the proxy","implementationAddress":"The address of the implementation contract","proxyAddress":"The address of the created proxy contract"}}},"kind":"dev","methods":{"getACLAdmin()":{"returns":{"_0":"The address of the ACL admin"}},"getACLManager()":{"returns":{"_0":"The address of the ACLManager"}},"getAddress(bytes32)":{"details":"The returned address might be an EOA or a contract, potentially proxiedIt returns ZERO if there is no registered address with the given id","params":{"id":"The id"},"returns":{"_0":"The address of the registered for the specified id"}},"getMarketId()":{"returns":{"_0":"The market id"}},"getPool()":{"returns":{"_0":"The Pool proxy address"}},"getPoolConfigurator()":{"returns":{"_0":"The PoolConfigurator proxy address"}},"getPoolDataProvider()":{"returns":{"_0":"The address of the DataProvider"}},"getPriceOracle()":{"returns":{"_0":"The address of the PriceOracle"}},"getPriceOracleSentinel()":{"returns":{"_0":"The address of the PriceOracleSentinel"}},"setACLAdmin(address)":{"params":{"newAclAdmin":"The address of the new ACL admin"}},"setACLManager(address)":{"params":{"newAclManager":"The address of the new ACLManager"}},"setAddress(bytes32,address)":{"details":"IMPORTANT Use this function carefully, as it will do a hard replacement","params":{"id":"The id","newAddress":"The address to set"}},"setAddressAsProxy(bytes32,address)":{"details":"IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences","params":{"id":"The id","newImplementationAddress":"The address of the new implementation"}},"setMarketId(string)":{"details":"This can be used to create an onchain registry of PoolAddressesProviders to identify and validate multiple Aave markets.","params":{"newMarketId":"The market id"}},"setPoolConfiguratorImpl(address)":{"params":{"newPoolConfiguratorImpl":"The new PoolConfigurator implementation"}},"setPoolDataProvider(address)":{"params":{"newDataProvider":"The address of the new DataProvider"}},"setPoolImpl(address)":{"params":{"newPoolImpl":"The new Pool implementation"}},"setPriceOracle(address)":{"params":{"newPriceOracle":"The address of the new PriceOracle"}},"setPriceOracleSentinel(address)":{"params":{"newPriceOracleSentinel":"The address of the new PriceOracleSentinel"}}},"title":"IPoolAddressesProvider","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getACLAdmin()":"0e67178c","getACLManager()":"707cd716","getAddress(bytes32)":"21f8a721","getMarketId()":"568ef470","getPool()":"026b1d5f","getPoolConfigurator()":"631adfca","getPoolDataProvider()":"e860accb","getPriceOracle()":"fca513a8","getPriceOracleSentinel()":"5eb88d3d","setACLAdmin(address)":"76d84ffc","setACLManager(address)":"ed301ca9","setAddress(bytes32,address)":"ca446dd9","setAddressAsProxy(bytes32,address)":"5dcc528c","setMarketId(string)":"f67b1847","setPoolConfiguratorImpl(address)":"e4ca28b7","setPoolDataProvider(address)":"e44e9ed1","setPoolImpl(address)":"a1564406","setPriceOracle(address)":"530e784f","setPriceOracleSentinel(address)":"74944cec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ACLAdminUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ACLManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldImplementationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementationAddress\",\"type\":\"address\"}],\"name\":\"AddressSetAsProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"oldMarketId\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"MarketIdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolConfiguratorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolDataProviderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceOracleSentinelUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"}],\"name\":\"ProxyCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getACLAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getACLManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarketId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolConfigurator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolDataProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracleSentinel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAclAdmin\",\"type\":\"address\"}],\"name\":\"setACLAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAclManager\",\"type\":\"address\"}],\"name\":\"setACLManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newImplementationAddress\",\"type\":\"address\"}],\"name\":\"setAddressAsProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"setMarketId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolConfiguratorImpl\",\"type\":\"address\"}],\"name\":\"setPoolConfiguratorImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newDataProvider\",\"type\":\"address\"}],\"name\":\"setPoolDataProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolImpl\",\"type\":\"address\"}],\"name\":\"setPoolImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPriceOracle\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPriceOracleSentinel\",\"type\":\"address\"}],\"name\":\"setPriceOracleSentinel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"ACLAdminUpdated(address,address)\":{\"details\":\"Emitted when the ACL admin is updated.\",\"params\":{\"newAddress\":\"The new address of the ACLAdmin\",\"oldAddress\":\"The old address of the ACLAdmin\"}},\"ACLManagerUpdated(address,address)\":{\"details\":\"Emitted when the ACL manager is updated.\",\"params\":{\"newAddress\":\"The new address of the ACLManager\",\"oldAddress\":\"The old address of the ACLManager\"}},\"AddressSet(bytes32,address,address)\":{\"details\":\"Emitted when a new non-proxied contract address is registered.\",\"params\":{\"id\":\"The identifier of the contract\",\"newAddress\":\"The address of the new contract\",\"oldAddress\":\"The address of the old contract\"}},\"AddressSetAsProxy(bytes32,address,address,address)\":{\"details\":\"Emitted when the implementation of the proxy registered with id is updated\",\"params\":{\"id\":\"The identifier of the contract\",\"newImplementationAddress\":\"The address of the new implementation contract\",\"oldImplementationAddress\":\"The address of the old implementation contract\",\"proxyAddress\":\"The address of the proxy contract\"}},\"MarketIdSet(string,string)\":{\"details\":\"Emitted when the market identifier is updated.\",\"params\":{\"newMarketId\":\"The new id of the market\",\"oldMarketId\":\"The old id of the market\"}},\"PoolConfiguratorUpdated(address,address)\":{\"details\":\"Emitted when the pool configurator is updated.\",\"params\":{\"newAddress\":\"The new address of the PoolConfigurator\",\"oldAddress\":\"The old address of the PoolConfigurator\"}},\"PoolDataProviderUpdated(address,address)\":{\"details\":\"Emitted when the pool data provider is updated.\",\"params\":{\"newAddress\":\"The new address of the PoolDataProvider\",\"oldAddress\":\"The old address of the PoolDataProvider\"}},\"PoolUpdated(address,address)\":{\"details\":\"Emitted when the pool is updated.\",\"params\":{\"newAddress\":\"The new address of the Pool\",\"oldAddress\":\"The old address of the Pool\"}},\"PriceOracleSentinelUpdated(address,address)\":{\"details\":\"Emitted when the price oracle sentinel is updated.\",\"params\":{\"newAddress\":\"The new address of the PriceOracleSentinel\",\"oldAddress\":\"The old address of the PriceOracleSentinel\"}},\"PriceOracleUpdated(address,address)\":{\"details\":\"Emitted when the price oracle is updated.\",\"params\":{\"newAddress\":\"The new address of the PriceOracle\",\"oldAddress\":\"The old address of the PriceOracle\"}},\"ProxyCreated(bytes32,address,address)\":{\"details\":\"Emitted when a new proxy is created.\",\"params\":{\"id\":\"The identifier of the proxy\",\"implementationAddress\":\"The address of the implementation contract\",\"proxyAddress\":\"The address of the created proxy contract\"}}},\"kind\":\"dev\",\"methods\":{\"getACLAdmin()\":{\"returns\":{\"_0\":\"The address of the ACL admin\"}},\"getACLManager()\":{\"returns\":{\"_0\":\"The address of the ACLManager\"}},\"getAddress(bytes32)\":{\"details\":\"The returned address might be an EOA or a contract, potentially proxiedIt returns ZERO if there is no registered address with the given id\",\"params\":{\"id\":\"The id\"},\"returns\":{\"_0\":\"The address of the registered for the specified id\"}},\"getMarketId()\":{\"returns\":{\"_0\":\"The market id\"}},\"getPool()\":{\"returns\":{\"_0\":\"The Pool proxy address\"}},\"getPoolConfigurator()\":{\"returns\":{\"_0\":\"The PoolConfigurator proxy address\"}},\"getPoolDataProvider()\":{\"returns\":{\"_0\":\"The address of the DataProvider\"}},\"getPriceOracle()\":{\"returns\":{\"_0\":\"The address of the PriceOracle\"}},\"getPriceOracleSentinel()\":{\"returns\":{\"_0\":\"The address of the PriceOracleSentinel\"}},\"setACLAdmin(address)\":{\"params\":{\"newAclAdmin\":\"The address of the new ACL admin\"}},\"setACLManager(address)\":{\"params\":{\"newAclManager\":\"The address of the new ACLManager\"}},\"setAddress(bytes32,address)\":{\"details\":\"IMPORTANT Use this function carefully, as it will do a hard replacement\",\"params\":{\"id\":\"The id\",\"newAddress\":\"The address to set\"}},\"setAddressAsProxy(bytes32,address)\":{\"details\":\"IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences\",\"params\":{\"id\":\"The id\",\"newImplementationAddress\":\"The address of the new implementation\"}},\"setMarketId(string)\":{\"details\":\"This can be used to create an onchain registry of PoolAddressesProviders to identify and validate multiple Aave markets.\",\"params\":{\"newMarketId\":\"The market id\"}},\"setPoolConfiguratorImpl(address)\":{\"params\":{\"newPoolConfiguratorImpl\":\"The new PoolConfigurator implementation\"}},\"setPoolDataProvider(address)\":{\"params\":{\"newDataProvider\":\"The address of the new DataProvider\"}},\"setPoolImpl(address)\":{\"params\":{\"newPoolImpl\":\"The new Pool implementation\"}},\"setPriceOracle(address)\":{\"params\":{\"newPriceOracle\":\"The address of the new PriceOracle\"}},\"setPriceOracleSentinel(address)\":{\"params\":{\"newPriceOracleSentinel\":\"The address of the new PriceOracleSentinel\"}}},\"title\":\"IPoolAddressesProvider\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getACLAdmin()\":{\"notice\":\"Returns the address of the ACL admin.\"},\"getACLManager()\":{\"notice\":\"Returns the address of the ACL manager.\"},\"getAddress(bytes32)\":{\"notice\":\"Returns an address by its identifier.\"},\"getMarketId()\":{\"notice\":\"Returns the id of the Aave market to which this contract points to.\"},\"getPool()\":{\"notice\":\"Returns the address of the Pool proxy.\"},\"getPoolConfigurator()\":{\"notice\":\"Returns the address of the PoolConfigurator proxy.\"},\"getPoolDataProvider()\":{\"notice\":\"Returns the address of the data provider.\"},\"getPriceOracle()\":{\"notice\":\"Returns the address of the price oracle.\"},\"getPriceOracleSentinel()\":{\"notice\":\"Returns the address of the price oracle sentinel.\"},\"setACLAdmin(address)\":{\"notice\":\"Updates the address of the ACL admin.\"},\"setACLManager(address)\":{\"notice\":\"Updates the address of the ACL manager.\"},\"setAddress(bytes32,address)\":{\"notice\":\"Sets an address for an id replacing the address saved in the addresses map.\"},\"setAddressAsProxy(bytes32,address)\":{\"notice\":\"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `newImplementationAddress`.\"},\"setMarketId(string)\":{\"notice\":\"Associates an id with a specific PoolAddressesProvider.\"},\"setPoolConfiguratorImpl(address)\":{\"notice\":\"Updates the implementation of the PoolConfigurator, or creates a proxy setting the new `PoolConfigurator` implementation when the function is called for the first time.\"},\"setPoolDataProvider(address)\":{\"notice\":\"Updates the address of the data provider.\"},\"setPoolImpl(address)\":{\"notice\":\"Updates the implementation of the Pool, or creates a proxy setting the new `pool` implementation when the function is called for the first time.\"},\"setPriceOracle(address)\":{\"notice\":\"Updates the address of the price oracle.\"},\"setPriceOracleSentinel(address)\":{\"notice\":\"Updates the address of the price oracle sentinel.\"}},\"notice\":\"Defines the basic interface for a Pool Addresses Provider.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPoolAddressesProvider.sol\":\"IPoolAddressesProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getACLAdmin()":{"notice":"Returns the address of the ACL admin."},"getACLManager()":{"notice":"Returns the address of the ACL manager."},"getAddress(bytes32)":{"notice":"Returns an address by its identifier."},"getMarketId()":{"notice":"Returns the id of the Aave market to which this contract points to."},"getPool()":{"notice":"Returns the address of the Pool proxy."},"getPoolConfigurator()":{"notice":"Returns the address of the PoolConfigurator proxy."},"getPoolDataProvider()":{"notice":"Returns the address of the data provider."},"getPriceOracle()":{"notice":"Returns the address of the price oracle."},"getPriceOracleSentinel()":{"notice":"Returns the address of the price oracle sentinel."},"setACLAdmin(address)":{"notice":"Updates the address of the ACL admin."},"setACLManager(address)":{"notice":"Updates the address of the ACL manager."},"setAddress(bytes32,address)":{"notice":"Sets an address for an id replacing the address saved in the addresses map."},"setAddressAsProxy(bytes32,address)":{"notice":"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `newImplementationAddress`."},"setMarketId(string)":{"notice":"Associates an id with a specific PoolAddressesProvider."},"setPoolConfiguratorImpl(address)":{"notice":"Updates the implementation of the PoolConfigurator, or creates a proxy setting the new `PoolConfigurator` implementation when the function is called for the first time."},"setPoolDataProvider(address)":{"notice":"Updates the address of the data provider."},"setPoolImpl(address)":{"notice":"Updates the implementation of the Pool, or creates a proxy setting the new `pool` implementation when the function is called for the first time."},"setPriceOracle(address)":{"notice":"Updates the address of the price oracle."},"setPriceOracleSentinel(address)":{"notice":"Updates the address of the price oracle sentinel."}},"notice":"Defines the basic interface for a Pool Addresses Provider.","version":1}}},"contracts/interfaces/IPoolAddressesProviderRegistry.sol":{"IPoolAddressesProviderRegistry":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressesProvider","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"AddressesProviderRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressesProvider","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"AddressesProviderUnregistered","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getAddressesProviderAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressesProvider","type":"address"}],"name":"getAddressesProviderIdByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressesProvidersList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"registerAddressesProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"}],"name":"unregisterAddressesProvider","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"AddressesProviderRegistered(address,uint256)":{"details":"Emitted when a new AddressesProvider is registered.","params":{"addressesProvider":"The address of the registered PoolAddressesProvider","id":"The id of the registered PoolAddressesProvider"}},"AddressesProviderUnregistered(address,uint256)":{"details":"Emitted when an AddressesProvider is unregistered.","params":{"addressesProvider":"The address of the unregistered PoolAddressesProvider","id":"The id of the unregistered PoolAddressesProvider"}}},"kind":"dev","methods":{"getAddressesProviderAddressById(uint256)":{"params":{"id":"The id of the market"},"returns":{"_0":"The address of the PoolAddressesProvider with the given id or zero address if it is not registered"}},"getAddressesProviderIdByAddress(address)":{"params":{"addressesProvider":"The address of the PoolAddressesProvider"},"returns":{"_0":"The id of the PoolAddressesProvider or 0 if is not registered"}},"getAddressesProvidersList()":{"returns":{"_0":"The list of addresses providers"}},"registerAddressesProvider(address,uint256)":{"details":"The PoolAddressesProvider must not already be registered in the registryThe id must not be used by an already registered PoolAddressesProvider","params":{"id":"The id for the new PoolAddressesProvider, referring to the market it belongs to","provider":"The address of the new PoolAddressesProvider"}},"unregisterAddressesProvider(address)":{"params":{"provider":"The PoolAddressesProvider address"}}},"title":"IPoolAddressesProviderRegistry","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getAddressesProviderAddressById(uint256)":"57dc0566","getAddressesProviderIdByAddress(address)":"d0267be7","getAddressesProvidersList()":"365ccbbf","registerAddressesProvider(address,uint256)":"d258191e","unregisterAddressesProvider(address)":"0de26707"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AddressesProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AddressesProviderUnregistered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getAddressesProviderAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"}],\"name\":\"getAddressesProviderIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressesProvidersList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"registerAddressesProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"unregisterAddressesProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"AddressesProviderRegistered(address,uint256)\":{\"details\":\"Emitted when a new AddressesProvider is registered.\",\"params\":{\"addressesProvider\":\"The address of the registered PoolAddressesProvider\",\"id\":\"The id of the registered PoolAddressesProvider\"}},\"AddressesProviderUnregistered(address,uint256)\":{\"details\":\"Emitted when an AddressesProvider is unregistered.\",\"params\":{\"addressesProvider\":\"The address of the unregistered PoolAddressesProvider\",\"id\":\"The id of the unregistered PoolAddressesProvider\"}}},\"kind\":\"dev\",\"methods\":{\"getAddressesProviderAddressById(uint256)\":{\"params\":{\"id\":\"The id of the market\"},\"returns\":{\"_0\":\"The address of the PoolAddressesProvider with the given id or zero address if it is not registered\"}},\"getAddressesProviderIdByAddress(address)\":{\"params\":{\"addressesProvider\":\"The address of the PoolAddressesProvider\"},\"returns\":{\"_0\":\"The id of the PoolAddressesProvider or 0 if is not registered\"}},\"getAddressesProvidersList()\":{\"returns\":{\"_0\":\"The list of addresses providers\"}},\"registerAddressesProvider(address,uint256)\":{\"details\":\"The PoolAddressesProvider must not already be registered in the registryThe id must not be used by an already registered PoolAddressesProvider\",\"params\":{\"id\":\"The id for the new PoolAddressesProvider, referring to the market it belongs to\",\"provider\":\"The address of the new PoolAddressesProvider\"}},\"unregisterAddressesProvider(address)\":{\"params\":{\"provider\":\"The PoolAddressesProvider address\"}}},\"title\":\"IPoolAddressesProviderRegistry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAddressesProviderAddressById(uint256)\":{\"notice\":\"Returns the address of a registered PoolAddressesProvider\"},\"getAddressesProviderIdByAddress(address)\":{\"notice\":\"Returns the id of a registered PoolAddressesProvider\"},\"getAddressesProvidersList()\":{\"notice\":\"Returns the list of registered addresses providers\"},\"registerAddressesProvider(address,uint256)\":{\"notice\":\"Registers an addresses provider\"},\"unregisterAddressesProvider(address)\":{\"notice\":\"Removes an addresses provider from the list of registered addresses providers\"}},\"notice\":\"Defines the basic interface for an Aave Pool Addresses Provider Registry.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPoolAddressesProviderRegistry.sol\":\"IPoolAddressesProviderRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPoolAddressesProviderRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProviderRegistry\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool Addresses Provider Registry.\\n */\\ninterface IPoolAddressesProviderRegistry {\\n  /**\\n   * @dev Emitted when a new AddressesProvider is registered.\\n   * @param addressesProvider The address of the registered PoolAddressesProvider\\n   * @param id The id of the registered PoolAddressesProvider\\n   */\\n  event AddressesProviderRegistered(address indexed addressesProvider, uint256 indexed id);\\n\\n  /**\\n   * @dev Emitted when an AddressesProvider is unregistered.\\n   * @param addressesProvider The address of the unregistered PoolAddressesProvider\\n   * @param id The id of the unregistered PoolAddressesProvider\\n   */\\n  event AddressesProviderUnregistered(address indexed addressesProvider, uint256 indexed id);\\n\\n  /**\\n   * @notice Returns the list of registered addresses providers\\n   * @return The list of addresses providers\\n   */\\n  function getAddressesProvidersList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the id of a registered PoolAddressesProvider\\n   * @param addressesProvider The address of the PoolAddressesProvider\\n   * @return The id of the PoolAddressesProvider or 0 if is not registered\\n   */\\n  function getAddressesProviderIdByAddress(\\n    address addressesProvider\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of a registered PoolAddressesProvider\\n   * @param id The id of the market\\n   * @return The address of the PoolAddressesProvider with the given id or zero address if it is not registered\\n   */\\n  function getAddressesProviderAddressById(uint256 id) external view returns (address);\\n\\n  /**\\n   * @notice Registers an addresses provider\\n   * @dev The PoolAddressesProvider must not already be registered in the registry\\n   * @dev The id must not be used by an already registered PoolAddressesProvider\\n   * @param provider The address of the new PoolAddressesProvider\\n   * @param id The id for the new PoolAddressesProvider, referring to the market it belongs to\\n   */\\n  function registerAddressesProvider(address provider, uint256 id) external;\\n\\n  /**\\n   * @notice Removes an addresses provider from the list of registered addresses providers\\n   * @param provider The PoolAddressesProvider address\\n   */\\n  function unregisterAddressesProvider(address provider) external;\\n}\\n\",\"keccak256\":\"0x71ae9fcb634382141cce4c138230280f50b98fc47ba1d90cbc2d15ef8224fab1\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getAddressesProviderAddressById(uint256)":{"notice":"Returns the address of a registered PoolAddressesProvider"},"getAddressesProviderIdByAddress(address)":{"notice":"Returns the id of a registered PoolAddressesProvider"},"getAddressesProvidersList()":{"notice":"Returns the list of registered addresses providers"},"registerAddressesProvider(address,uint256)":{"notice":"Registers an addresses provider"},"unregisterAddressesProvider(address)":{"notice":"Removes an addresses provider from the list of registered addresses providers"}},"notice":"Defines the basic interface for an Aave Pool Addresses Provider Registry.","version":1}}},"contracts/interfaces/IPoolConfigurator.sol":{"IPoolConfigurator":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ATokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldBorrowCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"BorrowCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"borrowable","type":"bool"}],"name":"BorrowableInIsolationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBridgeProtocolFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"BridgeProtocolFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"CollateralConfigurationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldDebtCeiling","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"DebtCeilingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint8","name":"oldCategoryId","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"EModeAssetCategoryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"categoryId","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"indexed":false,"internalType":"address","name":"oracle","type":"address"},{"indexed":false,"internalType":"string","name":"label","type":"string"}],"name":"EModeCategoryAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumToProtocol","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"FlashloanPremiumToProtocolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumTotal","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"FlashloanPremiumTotalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"LiquidationProtocolFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"ReserveActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"}],"name":"ReserveDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldReserveFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"ReserveFactorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveFlashLoaning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"frozen","type":"bool"}],"name":"ReserveFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"aToken","type":"address"},{"indexed":false,"internalType":"address","name":"stableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"variableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"ReserveInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"oldStrategy","type":"address"},{"indexed":false,"internalType":"address","name":"newStrategy","type":"address"}],"name":"ReserveInterestRateStrategyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ReservePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveStableRateBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"oldState","type":"bool"},{"indexed":false,"internalType":"bool","name":"newState","type":"bool"}],"name":"SiloedBorrowingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"StableDebtTokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldSupplyCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"SupplyCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldUnbackedMintCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"UnbackedMintCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"VariableDebtTokenUpgraded","type":"event"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"configureReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"aTokenImpl","type":"address"},{"internalType":"address","name":"stableDebtTokenImpl","type":"address"},{"internalType":"address","name":"variableDebtTokenImpl","type":"address"},{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"string","name":"variableDebtTokenName","type":"string"},{"internalType":"string","name":"variableDebtTokenSymbol","type":"string"},{"internalType":"string","name":"stableDebtTokenName","type":"string"},{"internalType":"string","name":"stableDebtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.InitReserveInput[]","name":"input","type":"tuple[]"}],"name":"initReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"setAssetEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"setBorrowCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"borrowable","type":"bool"}],"name":"setBorrowableInIsolation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"setDebtCeiling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"},{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"string","name":"label","type":"string"}],"name":"setEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setLiquidationProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPoolPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setReserveActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveFlashLoaning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"freeze","type":"bool"}],"name":"setReserveFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"newRateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"paused","type":"bool"}],"name":"setReservePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveStableRateBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"siloed","type":"bool"}],"name":"setSiloedBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"setUnbackedMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateATokenInput","name":"input","type":"tuple"}],"name":"updateAToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiumToProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"updateFlashloanPremiumTotal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateStableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateVariableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"ATokenUpgraded(address,address,address)":{"details":"Emitted when an aToken implementation is upgraded.","params":{"asset":"The address of the underlying asset of the reserve","implementation":"The new aToken implementation","proxy":"The aToken proxy address"}},"BorrowCapChanged(address,uint256,uint256)":{"details":"Emitted when the borrow cap of a reserve is updated.","params":{"asset":"The address of the underlying asset of the reserve","newBorrowCap":"The new borrow cap","oldBorrowCap":"The old borrow cap"}},"BorrowableInIsolationChanged(address,bool)":{"details":"Emitted when the reserve is set as borrowable/non borrowable in isolation mode.","params":{"asset":"The address of the underlying asset of the reserve","borrowable":"True if the reserve is borrowable in isolation, false otherwise"}},"BridgeProtocolFeeUpdated(uint256,uint256)":{"details":"Emitted when the bridge protocol fee is updated.","params":{"newBridgeProtocolFee":"The new protocol fee, expressed in bps","oldBridgeProtocolFee":"The old protocol fee, expressed in bps"}},"CollateralConfigurationChanged(address,uint256,uint256,uint256)":{"details":"Emitted when the collateralization risk parameters for the specified asset are updated.","params":{"asset":"The address of the underlying asset of the reserve","liquidationBonus":"The bonus liquidators receive to liquidate this asset","liquidationThreshold":"The threshold at which loans using this asset as collateral will be considered undercollateralized","ltv":"The loan to value of the asset when used as collateral"}},"DebtCeilingChanged(address,uint256,uint256)":{"details":"Emitted when the debt ceiling of an asset is set.","params":{"asset":"The address of the underlying asset of the reserve","newDebtCeiling":"The new debt ceiling","oldDebtCeiling":"The old debt ceiling"}},"EModeAssetCategoryChanged(address,uint8,uint8)":{"details":"Emitted when the category of an asset in eMode is changed.","params":{"asset":"The address of the underlying asset of the reserve","newCategoryId":"The new eMode asset category","oldCategoryId":"The old eMode asset category"}},"EModeCategoryAdded(uint8,uint256,uint256,uint256,address,string)":{"details":"Emitted when a new eMode category is added.","params":{"categoryId":"The new eMode category id","label":"A human readable identifier for the category","liquidationBonus":"The liquidationBonus for the asset category in eMode","liquidationThreshold":"The liquidationThreshold for the asset category in eMode","ltv":"The ltv for the asset category in eMode","oracle":"The optional address of the price oracle specific for this category"}},"FlashloanPremiumToProtocolUpdated(uint128,uint128)":{"details":"Emitted when the part of the premium that goes to protocol is updated.","params":{"newFlashloanPremiumToProtocol":"The new premium, expressed in bps","oldFlashloanPremiumToProtocol":"The old premium, expressed in bps"}},"FlashloanPremiumTotalUpdated(uint128,uint128)":{"details":"Emitted when the total premium on flashloans is updated.","params":{"newFlashloanPremiumTotal":"The new premium, expressed in bps","oldFlashloanPremiumTotal":"The old premium, expressed in bps"}},"LiquidationProtocolFeeChanged(address,uint256,uint256)":{"details":"Emitted when the liquidation protocol fee of a reserve is updated.","params":{"asset":"The address of the underlying asset of the reserve","newFee":"The new liquidation protocol fee, expressed in bps","oldFee":"The old liquidation protocol fee, expressed in bps"}},"ReserveActive(address,bool)":{"details":"Emitted when a reserve is activated or deactivated","params":{"active":"True if reserve is active, false otherwise","asset":"The address of the underlying asset of the reserve"}},"ReserveBorrowing(address,bool)":{"details":"Emitted when borrowing is enabled or disabled on a reserve.","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if borrowing is enabled, false otherwise"}},"ReserveDropped(address)":{"details":"Emitted when a reserve is dropped.","params":{"asset":"The address of the underlying asset of the reserve"}},"ReserveFactorChanged(address,uint256,uint256)":{"details":"Emitted when a reserve factor is updated.","params":{"asset":"The address of the underlying asset of the reserve","newReserveFactor":"The new reserve factor, expressed in bps","oldReserveFactor":"The old reserve factor, expressed in bps"}},"ReserveFlashLoaning(address,bool)":{"details":"Emitted when flashloans are enabled or disabled on a reserve.","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if flashloans are enabled, false otherwise"}},"ReserveFrozen(address,bool)":{"details":"Emitted when a reserve is frozen or unfrozen","params":{"asset":"The address of the underlying asset of the reserve","frozen":"True if reserve is frozen, false otherwise"}},"ReserveInitialized(address,address,address,address,address)":{"details":"Emitted when a reserve is initialized.","params":{"aToken":"The address of the associated aToken contract","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy for the reserve","stableDebtToken":"The address of the associated stable rate debt token","variableDebtToken":"The address of the associated variable rate debt token"}},"ReserveInterestRateStrategyChanged(address,address,address)":{"details":"Emitted when a reserve interest strategy contract is updated.","params":{"asset":"The address of the underlying asset of the reserve","newStrategy":"The address of the new interest strategy contract","oldStrategy":"The address of the old interest strategy contract"}},"ReservePaused(address,bool)":{"details":"Emitted when a reserve is paused or unpaused","params":{"asset":"The address of the underlying asset of the reserve","paused":"True if reserve is paused, false otherwise"}},"ReserveStableRateBorrowing(address,bool)":{"details":"Emitted when stable rate borrowing is enabled or disabled on a reserve","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if stable rate borrowing is enabled, false otherwise"}},"SiloedBorrowingChanged(address,bool,bool)":{"details":"Emitted when the the siloed borrowing state for an asset is changed.","params":{"asset":"The address of the underlying asset of the reserve","newState":"The new siloed borrowing state","oldState":"The old siloed borrowing state"}},"StableDebtTokenUpgraded(address,address,address)":{"details":"Emitted when the implementation of a stable debt token is upgraded.","params":{"asset":"The address of the underlying asset of the reserve","implementation":"The new aToken implementation","proxy":"The stable debt token proxy address"}},"SupplyCapChanged(address,uint256,uint256)":{"details":"Emitted when the supply cap of a reserve is updated.","params":{"asset":"The address of the underlying asset of the reserve","newSupplyCap":"The new supply cap","oldSupplyCap":"The old supply cap"}},"UnbackedMintCapChanged(address,uint256,uint256)":{"details":"Emitted when the unbacked mint cap of a reserve is updated.","params":{"asset":"The address of the underlying asset of the reserve","newUnbackedMintCap":"The new unbacked mint cap","oldUnbackedMintCap":"The old unbacked mint cap"}},"VariableDebtTokenUpgraded(address,address,address)":{"details":"Emitted when the implementation of a variable debt token is upgraded.","params":{"asset":"The address of the underlying asset of the reserve","implementation":"The new aToken implementation","proxy":"The variable debt token proxy address"}}},"kind":"dev","methods":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":{"details":"All the values are expressed in bps. A value of 10000, results in 100.00%The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus","params":{"asset":"The address of the underlying asset of the reserve","liquidationBonus":"The bonus liquidators receive to liquidate this asset","liquidationThreshold":"The threshold at which loans using this asset as collateral will be considered undercollateralized","ltv":"The loan to value of the asset when used as collateral"}},"dropReserve(address)":{"params":{"asset":"The address of the reserve to drop"}},"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":{"params":{"input":"The array of initialization parameters"}},"setAssetEModeCategory(address,uint8)":{"params":{"asset":"The address of the underlying asset of the reserve","newCategoryId":"The new category id of the asset"}},"setBorrowCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newBorrowCap":"The new borrow cap of the reserve"}},"setBorrowableInIsolation(address,bool)":{"details":"When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed amount will be accumulated in the isolated collateral's total debt exposureOnly assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep consistency in the debt ceiling calculations","params":{"asset":"The address of the underlying asset of the reserve","borrowable":"True if the asset should be borrowable in isolation, false otherwise"}},"setDebtCeiling(address,uint256)":{"params":{"newDebtCeiling":"The new debt ceiling"}},"setEModeCategory(uint8,uint16,uint16,uint16,address,string)":{"details":"If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and overcollateralization of the users using this category.The new ltv and liquidation threshold must be greater than the base ltvs and liquidation thresholds of all assets within the eMode category","params":{"categoryId":"The id of the category to be configured","label":"A label identifying the category","liquidationBonus":"The liquidation bonus associated with the category","liquidationThreshold":"The liquidation threshold associated with the category","ltv":"The ltv associated with the category","oracle":"The oracle associated with the category"}},"setLiquidationProtocolFee(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newFee":"The new liquidation protocol fee of the reserve, expressed in bps"}},"setPoolPause(bool)":{"params":{"paused":"True if protocol needs to be paused, false otherwise"}},"setReserveActive(address,bool)":{"params":{"active":"True if the reserve needs to be active, false otherwise","asset":"The address of the underlying asset of the reserve"}},"setReserveBorrowing(address,bool)":{"details":"Can only be disabled (set to false) if stable borrowing is disabled","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if borrowing needs to be enabled, false otherwise"}},"setReserveFactor(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newReserveFactor":"The new reserve factor of the reserve"}},"setReserveFlashLoaning(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if flashloans need to be enabled, false otherwise"}},"setReserveFreeze(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","freeze":"True if the reserve needs to be frozen, false otherwise"}},"setReserveInterestRateStrategyAddress(address,address)":{"params":{"asset":"The address of the underlying asset of the reserve","newRateStrategyAddress":"The address of the new interest strategy contract"}},"setReservePause(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","paused":"True if pausing the reserve, false if unpausing"}},"setReserveStableRateBorrowing(address,bool)":{"details":"Can only be enabled (set to true) if borrowing is enabled","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if stable rate borrowing needs to be enabled, false otherwise"}},"setSiloedBorrowing(address,bool)":{"params":{"siloed":"The new siloed borrowing state"}},"setSupplyCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newSupplyCap":"The new supply cap of the reserve"}},"setUnbackedMintCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newUnbackedMintCap":"The new unbacked mint cap of the reserve"}},"updateAToken((address,address,address,string,string,address,bytes))":{"details":"Updates the aToken implementation for the reserve.","params":{"input":"The aToken update parameters"}},"updateBridgeProtocolFee(uint256)":{"params":{"newBridgeProtocolFee":"The part of the fee sent to the protocol treasury, expressed in bps"}},"updateFlashloanPremiumToProtocol(uint128)":{"details":"Expressed in bpsThe premium to protocol is calculated on the total flashloan premium","params":{"newFlashloanPremiumToProtocol":"The part of the flashloan premium sent to the protocol treasury"}},"updateFlashloanPremiumTotal(uint128)":{"details":"Expressed in bpsThe premium is calculated on the total amount borrowed","params":{"newFlashloanPremiumTotal":"The total flashloan premium"}},"updateStableDebtToken((address,address,string,string,address,bytes))":{"params":{"input":"The stableDebtToken update parameters"}},"updateVariableDebtToken((address,address,string,string,address,bytes))":{"params":{"input":"The variableDebtToken update parameters"}}},"title":"IPoolConfigurator","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":"7c4e560b","dropReserve(address)":"63c9b860","initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":"02fb45e6","setAssetEModeCategory(address,uint8)":"d4fe3f99","setBorrowCap(address,uint256)":"d14a0983","setBorrowableInIsolation(address,bool)":"38ae0cc3","setDebtCeiling(address,uint256)":"aeb4fcc1","setEModeCategory(uint8,uint16,uint16,uint16,address,string)":"c19d61e4","setLiquidationProtocolFee(address,uint256)":"26d2cec2","setPoolPause(bool)":"7641f3d9","setReserveActive(address,bool)":"b736aaeb","setReserveBorrowing(address,bool)":"682cf264","setReserveFactor(address,uint256)":"4b4e6753","setReserveFlashLoaning(address,bool)":"f213ef0e","setReserveFreeze(address,bool)":"96e957c4","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setReservePause(address,bool)":"48d9fba9","setReserveStableRateBorrowing(address,bool)":"8a751a60","setSiloedBorrowing(address,bool)":"a7fa83b7","setSupplyCap(address,uint256)":"571f03e5","setUnbackedMintCap(address,uint256)":"145f5892","updateAToken((address,address,address,string,string,address,bytes))":"bb01c37c","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiumToProtocol(uint128)":"1df970bd","updateFlashloanPremiumTotal(uint128)":"8a493676","updateStableDebtToken((address,address,string,string,address,bytes))":"7626cde3","updateVariableDebtToken((address,address,string,string,address,bytes))":"ad4e6432"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ATokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBorrowCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"BorrowCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"borrowable\",\"type\":\"bool\"}],\"name\":\"BorrowableInIsolationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBridgeProtocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"BridgeProtocolFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"CollateralConfigurationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDebtCeiling\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDebtCeiling\",\"type\":\"uint256\"}],\"name\":\"DebtCeilingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oldCategoryId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newCategoryId\",\"type\":\"uint8\"}],\"name\":\"EModeAssetCategoryChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"EModeCategoryAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldFlashloanPremiumToProtocol\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"FlashloanPremiumToProtocolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldFlashloanPremiumTotal\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumTotal\",\"type\":\"uint128\"}],\"name\":\"FlashloanPremiumTotalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"LiquidationProtocolFeeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"ReserveActive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveBorrowing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"ReserveDropped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactor\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactor\",\"type\":\"uint256\"}],\"name\":\"ReserveFactorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveFlashLoaning\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"frozen\",\"type\":\"bool\"}],\"name\":\"ReserveFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"variableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"ReserveInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldStrategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newStrategy\",\"type\":\"address\"}],\"name\":\"ReserveInterestRateStrategyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ReservePaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveStableRateBorrowing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldState\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newState\",\"type\":\"bool\"}],\"name\":\"SiloedBorrowingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"StableDebtTokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldSupplyCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"SupplyCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldUnbackedMintCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newUnbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"UnbackedMintCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"VariableDebtTokenUpgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"configureReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"aTokenImpl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"underlyingAssetDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.InitReserveInput[]\",\"name\":\"input\",\"type\":\"tuple[]\"}],\"name\":\"initReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"newCategoryId\",\"type\":\"uint8\"}],\"name\":\"setAssetEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"setBorrowCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"borrowable\",\"type\":\"bool\"}],\"name\":\"setBorrowableInIsolation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newDebtCeiling\",\"type\":\"uint256\"}],\"name\":\"setDebtCeiling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"setEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"setLiquidationProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setPoolPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"setReserveActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newReserveFactor\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveFlashLoaning\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"freeze\",\"type\":\"bool\"}],\"name\":\"setReserveFreeze\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setReservePause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveStableRateBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"siloed\",\"type\":\"bool\"}],\"name\":\"setSiloedBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"setSupplyCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newUnbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"setUnbackedMintCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateATokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateAToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiumToProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumTotal\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiumTotal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateDebtTokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateStableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateDebtTokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateVariableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"ATokenUpgraded(address,address,address)\":{\"details\":\"Emitted when an aToken implementation is upgraded.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"implementation\":\"The new aToken implementation\",\"proxy\":\"The aToken proxy address\"}},\"BorrowCapChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the borrow cap of a reserve is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newBorrowCap\":\"The new borrow cap\",\"oldBorrowCap\":\"The old borrow cap\"}},\"BorrowableInIsolationChanged(address,bool)\":{\"details\":\"Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"borrowable\":\"True if the reserve is borrowable in isolation, false otherwise\"}},\"BridgeProtocolFeeUpdated(uint256,uint256)\":{\"details\":\"Emitted when the bridge protocol fee is updated.\",\"params\":{\"newBridgeProtocolFee\":\"The new protocol fee, expressed in bps\",\"oldBridgeProtocolFee\":\"The old protocol fee, expressed in bps\"}},\"CollateralConfigurationChanged(address,uint256,uint256,uint256)\":{\"details\":\"Emitted when the collateralization risk parameters for the specified asset are updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"liquidationBonus\":\"The bonus liquidators receive to liquidate this asset\",\"liquidationThreshold\":\"The threshold at which loans using this asset as collateral will be considered undercollateralized\",\"ltv\":\"The loan to value of the asset when used as collateral\"}},\"DebtCeilingChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the debt ceiling of an asset is set.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newDebtCeiling\":\"The new debt ceiling\",\"oldDebtCeiling\":\"The old debt ceiling\"}},\"EModeAssetCategoryChanged(address,uint8,uint8)\":{\"details\":\"Emitted when the category of an asset in eMode is changed.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newCategoryId\":\"The new eMode asset category\",\"oldCategoryId\":\"The old eMode asset category\"}},\"EModeCategoryAdded(uint8,uint256,uint256,uint256,address,string)\":{\"details\":\"Emitted when a new eMode category is added.\",\"params\":{\"categoryId\":\"The new eMode category id\",\"label\":\"A human readable identifier for the category\",\"liquidationBonus\":\"The liquidationBonus for the asset category in eMode\",\"liquidationThreshold\":\"The liquidationThreshold for the asset category in eMode\",\"ltv\":\"The ltv for the asset category in eMode\",\"oracle\":\"The optional address of the price oracle specific for this category\"}},\"FlashloanPremiumToProtocolUpdated(uint128,uint128)\":{\"details\":\"Emitted when the part of the premium that goes to protocol is updated.\",\"params\":{\"newFlashloanPremiumToProtocol\":\"The new premium, expressed in bps\",\"oldFlashloanPremiumToProtocol\":\"The old premium, expressed in bps\"}},\"FlashloanPremiumTotalUpdated(uint128,uint128)\":{\"details\":\"Emitted when the total premium on flashloans is updated.\",\"params\":{\"newFlashloanPremiumTotal\":\"The new premium, expressed in bps\",\"oldFlashloanPremiumTotal\":\"The old premium, expressed in bps\"}},\"LiquidationProtocolFeeChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the liquidation protocol fee of a reserve is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newFee\":\"The new liquidation protocol fee, expressed in bps\",\"oldFee\":\"The old liquidation protocol fee, expressed in bps\"}},\"ReserveActive(address,bool)\":{\"details\":\"Emitted when a reserve is activated or deactivated\",\"params\":{\"active\":\"True if reserve is active, false otherwise\",\"asset\":\"The address of the underlying asset of the reserve\"}},\"ReserveBorrowing(address,bool)\":{\"details\":\"Emitted when borrowing is enabled or disabled on a reserve.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if borrowing is enabled, false otherwise\"}},\"ReserveDropped(address)\":{\"details\":\"Emitted when a reserve is dropped.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"ReserveFactorChanged(address,uint256,uint256)\":{\"details\":\"Emitted when a reserve factor is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newReserveFactor\":\"The new reserve factor, expressed in bps\",\"oldReserveFactor\":\"The old reserve factor, expressed in bps\"}},\"ReserveFlashLoaning(address,bool)\":{\"details\":\"Emitted when flashloans are enabled or disabled on a reserve.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if flashloans are enabled, false otherwise\"}},\"ReserveFrozen(address,bool)\":{\"details\":\"Emitted when a reserve is frozen or unfrozen\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"frozen\":\"True if reserve is frozen, false otherwise\"}},\"ReserveInitialized(address,address,address,address,address)\":{\"details\":\"Emitted when a reserve is initialized.\",\"params\":{\"aToken\":\"The address of the associated aToken contract\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy for the reserve\",\"stableDebtToken\":\"The address of the associated stable rate debt token\",\"variableDebtToken\":\"The address of the associated variable rate debt token\"}},\"ReserveInterestRateStrategyChanged(address,address,address)\":{\"details\":\"Emitted when a reserve interest strategy contract is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newStrategy\":\"The address of the new interest strategy contract\",\"oldStrategy\":\"The address of the old interest strategy contract\"}},\"ReservePaused(address,bool)\":{\"details\":\"Emitted when a reserve is paused or unpaused\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"paused\":\"True if reserve is paused, false otherwise\"}},\"ReserveStableRateBorrowing(address,bool)\":{\"details\":\"Emitted when stable rate borrowing is enabled or disabled on a reserve\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if stable rate borrowing is enabled, false otherwise\"}},\"SiloedBorrowingChanged(address,bool,bool)\":{\"details\":\"Emitted when the the siloed borrowing state for an asset is changed.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newState\":\"The new siloed borrowing state\",\"oldState\":\"The old siloed borrowing state\"}},\"StableDebtTokenUpgraded(address,address,address)\":{\"details\":\"Emitted when the implementation of a stable debt token is upgraded.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"implementation\":\"The new aToken implementation\",\"proxy\":\"The stable debt token proxy address\"}},\"SupplyCapChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the supply cap of a reserve is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newSupplyCap\":\"The new supply cap\",\"oldSupplyCap\":\"The old supply cap\"}},\"UnbackedMintCapChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the unbacked mint cap of a reserve is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newUnbackedMintCap\":\"The new unbacked mint cap\",\"oldUnbackedMintCap\":\"The old unbacked mint cap\"}},\"VariableDebtTokenUpgraded(address,address,address)\":{\"details\":\"Emitted when the implementation of a variable debt token is upgraded.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"implementation\":\"The new aToken implementation\",\"proxy\":\"The variable debt token proxy address\"}}},\"kind\":\"dev\",\"methods\":{\"configureReserveAsCollateral(address,uint256,uint256,uint256)\":{\"details\":\"All the values are expressed in bps. A value of 10000, results in 100.00%The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"liquidationBonus\":\"The bonus liquidators receive to liquidate this asset\",\"liquidationThreshold\":\"The threshold at which loans using this asset as collateral will be considered undercollateralized\",\"ltv\":\"The loan to value of the asset when used as collateral\"}},\"dropReserve(address)\":{\"params\":{\"asset\":\"The address of the reserve to drop\"}},\"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])\":{\"params\":{\"input\":\"The array of initialization parameters\"}},\"setAssetEModeCategory(address,uint8)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newCategoryId\":\"The new category id of the asset\"}},\"setBorrowCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newBorrowCap\":\"The new borrow cap of the reserve\"}},\"setBorrowableInIsolation(address,bool)\":{\"details\":\"When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed amount will be accumulated in the isolated collateral's total debt exposureOnly assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep consistency in the debt ceiling calculations\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"borrowable\":\"True if the asset should be borrowable in isolation, false otherwise\"}},\"setDebtCeiling(address,uint256)\":{\"params\":{\"newDebtCeiling\":\"The new debt ceiling\"}},\"setEModeCategory(uint8,uint16,uint16,uint16,address,string)\":{\"details\":\"If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and overcollateralization of the users using this category.The new ltv and liquidation threshold must be greater than the base ltvs and liquidation thresholds of all assets within the eMode category\",\"params\":{\"categoryId\":\"The id of the category to be configured\",\"label\":\"A label identifying the category\",\"liquidationBonus\":\"The liquidation bonus associated with the category\",\"liquidationThreshold\":\"The liquidation threshold associated with the category\",\"ltv\":\"The ltv associated with the category\",\"oracle\":\"The oracle associated with the category\"}},\"setLiquidationProtocolFee(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newFee\":\"The new liquidation protocol fee of the reserve, expressed in bps\"}},\"setPoolPause(bool)\":{\"params\":{\"paused\":\"True if protocol needs to be paused, false otherwise\"}},\"setReserveActive(address,bool)\":{\"params\":{\"active\":\"True if the reserve needs to be active, false otherwise\",\"asset\":\"The address of the underlying asset of the reserve\"}},\"setReserveBorrowing(address,bool)\":{\"details\":\"Can only be disabled (set to false) if stable borrowing is disabled\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if borrowing needs to be enabled, false otherwise\"}},\"setReserveFactor(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newReserveFactor\":\"The new reserve factor of the reserve\"}},\"setReserveFlashLoaning(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if flashloans need to be enabled, false otherwise\"}},\"setReserveFreeze(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"freeze\":\"True if the reserve needs to be frozen, false otherwise\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newRateStrategyAddress\":\"The address of the new interest strategy contract\"}},\"setReservePause(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"paused\":\"True if pausing the reserve, false if unpausing\"}},\"setReserveStableRateBorrowing(address,bool)\":{\"details\":\"Can only be enabled (set to true) if borrowing is enabled\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if stable rate borrowing needs to be enabled, false otherwise\"}},\"setSiloedBorrowing(address,bool)\":{\"params\":{\"siloed\":\"The new siloed borrowing state\"}},\"setSupplyCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newSupplyCap\":\"The new supply cap of the reserve\"}},\"setUnbackedMintCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newUnbackedMintCap\":\"The new unbacked mint cap of the reserve\"}},\"updateAToken((address,address,address,string,string,address,bytes))\":{\"details\":\"Updates the aToken implementation for the reserve.\",\"params\":{\"input\":\"The aToken update parameters\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"newBridgeProtocolFee\":\"The part of the fee sent to the protocol treasury, expressed in bps\"}},\"updateFlashloanPremiumToProtocol(uint128)\":{\"details\":\"Expressed in bpsThe premium to protocol is calculated on the total flashloan premium\",\"params\":{\"newFlashloanPremiumToProtocol\":\"The part of the flashloan premium sent to the protocol treasury\"}},\"updateFlashloanPremiumTotal(uint128)\":{\"details\":\"Expressed in bpsThe premium is calculated on the total amount borrowed\",\"params\":{\"newFlashloanPremiumTotal\":\"The total flashloan premium\"}},\"updateStableDebtToken((address,address,string,string,address,bytes))\":{\"params\":{\"input\":\"The stableDebtToken update parameters\"}},\"updateVariableDebtToken((address,address,string,string,address,bytes))\":{\"params\":{\"input\":\"The variableDebtToken update parameters\"}}},\"title\":\"IPoolConfigurator\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"configureReserveAsCollateral(address,uint256,uint256,uint256)\":{\"notice\":\"Configures the reserve collateralization parameters.\"},\"dropReserve(address)\":{\"notice\":\"Drops a reserve entirely.\"},\"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])\":{\"notice\":\"Initializes multiple reserves.\"},\"setAssetEModeCategory(address,uint8)\":{\"notice\":\"Assign an efficiency mode (eMode) category to asset.\"},\"setBorrowCap(address,uint256)\":{\"notice\":\"Updates the borrow cap of a reserve.\"},\"setBorrowableInIsolation(address,bool)\":{\"notice\":\"Sets the borrowable in isolation flag for the reserve.\"},\"setDebtCeiling(address,uint256)\":{\"notice\":\"Sets the debt ceiling for an asset.\"},\"setEModeCategory(uint8,uint16,uint16,uint16,address,string)\":{\"notice\":\"Adds a new efficiency mode (eMode) category.\"},\"setLiquidationProtocolFee(address,uint256)\":{\"notice\":\"Updates the liquidation protocol fee of reserve.\"},\"setPoolPause(bool)\":{\"notice\":\"Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions are suspended.\"},\"setReserveActive(address,bool)\":{\"notice\":\"Activate or deactivate a reserve\"},\"setReserveBorrowing(address,bool)\":{\"notice\":\"Configures borrowing on a reserve.\"},\"setReserveFactor(address,uint256)\":{\"notice\":\"Updates the reserve factor of a reserve.\"},\"setReserveFlashLoaning(address,bool)\":{\"notice\":\"Enable or disable flashloans on a reserve\"},\"setReserveFreeze(address,bool)\":{\"notice\":\"Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Sets the interest rate strategy of a reserve.\"},\"setReservePause(address,bool)\":{\"notice\":\"Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay, swap interest rate, liquidate, atoken transfers).\"},\"setReserveStableRateBorrowing(address,bool)\":{\"notice\":\"Enable or disable stable rate borrowing on a reserve.\"},\"setSiloedBorrowing(address,bool)\":{\"notice\":\"Sets siloed borrowing for an asset\"},\"setSupplyCap(address,uint256)\":{\"notice\":\"Updates the supply cap of a reserve.\"},\"setUnbackedMintCap(address,uint256)\":{\"notice\":\"Updates the unbacked mint cap of reserve.\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the bridge fee collected by the protocol reserves.\"},\"updateFlashloanPremiumToProtocol(uint128)\":{\"notice\":\"Updates the flash loan premium collected by protocol reserves\"},\"updateFlashloanPremiumTotal(uint128)\":{\"notice\":\"Updates the total flash loan premium. Total flash loan premium consists of two parts: - A part is sent to aToken holders as extra balance - A part is collected by the protocol reserves\"},\"updateStableDebtToken((address,address,string,string,address,bytes))\":{\"notice\":\"Updates the stable debt token implementation for the reserve.\"},\"updateVariableDebtToken((address,address,string,string,address,bytes))\":{\"notice\":\"Updates the variable debt token implementation for the asset.\"}},\"notice\":\"Defines the basic interface for a Pool configurator.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPoolConfigurator.sol\":\"IPoolConfigurator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title IPoolConfigurator\\n * @author Aave\\n * @notice Defines the basic interface for a Pool configurator.\\n */\\ninterface IPoolConfigurator {\\n  /**\\n   * @dev Emitted when a reserve is initialized.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aToken The address of the associated aToken contract\\n   * @param stableDebtToken The address of the associated stable rate debt token\\n   * @param variableDebtToken The address of the associated variable rate debt token\\n   * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve\\n   */\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when borrowing is enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing is enabled, false otherwise\\n   */\\n  event ReserveBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when flashloans are enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans are enabled, false otherwise\\n   */\\n  event ReserveFlashLoaning(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when the collateralization risk parameters for the specified asset are updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  event CollateralConfigurationChanged(\\n    address indexed asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  );\\n\\n  /**\\n   * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing is enabled, false otherwise\\n   */\\n  event ReserveStableRateBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when a reserve is activated or deactivated\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if reserve is active, false otherwise\\n   */\\n  event ReserveActive(address indexed asset, bool active);\\n\\n  /**\\n   * @dev Emitted when a reserve is frozen or unfrozen\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param frozen True if reserve is frozen, false otherwise\\n   */\\n  event ReserveFrozen(address indexed asset, bool frozen);\\n\\n  /**\\n   * @dev Emitted when a reserve is paused or unpaused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if reserve is paused, false otherwise\\n   */\\n  event ReservePaused(address indexed asset, bool paused);\\n\\n  /**\\n   * @dev Emitted when a reserve is dropped.\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  event ReserveDropped(address indexed asset);\\n\\n  /**\\n   * @dev Emitted when a reserve factor is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldReserveFactor The old reserve factor, expressed in bps\\n   * @param newReserveFactor The new reserve factor, expressed in bps\\n   */\\n  event ReserveFactorChanged(\\n    address indexed asset,\\n    uint256 oldReserveFactor,\\n    uint256 newReserveFactor\\n  );\\n\\n  /**\\n   * @dev Emitted when the borrow cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldBorrowCap The old borrow cap\\n   * @param newBorrowCap The new borrow cap\\n   */\\n  event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);\\n\\n  /**\\n   * @dev Emitted when the supply cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldSupplyCap The old supply cap\\n   * @param newSupplyCap The new supply cap\\n   */\\n  event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);\\n\\n  /**\\n   * @dev Emitted when the liquidation protocol fee of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldFee The old liquidation protocol fee, expressed in bps\\n   * @param newFee The new liquidation protocol fee, expressed in bps\\n   */\\n  event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);\\n\\n  /**\\n   * @dev Emitted when the unbacked mint cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldUnbackedMintCap The old unbacked mint cap\\n   * @param newUnbackedMintCap The new unbacked mint cap\\n   */\\n  event UnbackedMintCapChanged(\\n    address indexed asset,\\n    uint256 oldUnbackedMintCap,\\n    uint256 newUnbackedMintCap\\n  );\\n\\n  /**\\n   * @dev Emitted when the category of an asset in eMode is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldCategoryId The old eMode asset category\\n   * @param newCategoryId The new eMode asset category\\n   */\\n  event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);\\n\\n  /**\\n   * @dev Emitted when a new eMode category is added.\\n   * @param categoryId The new eMode category id\\n   * @param ltv The ltv for the asset category in eMode\\n   * @param liquidationThreshold The liquidationThreshold for the asset category in eMode\\n   * @param liquidationBonus The liquidationBonus for the asset category in eMode\\n   * @param oracle The optional address of the price oracle specific for this category\\n   * @param label A human readable identifier for the category\\n   */\\n  event EModeCategoryAdded(\\n    uint8 indexed categoryId,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus,\\n    address oracle,\\n    string label\\n  );\\n\\n  /**\\n   * @dev Emitted when a reserve interest strategy contract is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldStrategy The address of the old interest strategy contract\\n   * @param newStrategy The address of the new interest strategy contract\\n   */\\n  event ReserveInterestRateStrategyChanged(\\n    address indexed asset,\\n    address oldStrategy,\\n    address newStrategy\\n  );\\n\\n  /**\\n   * @dev Emitted when an aToken implementation is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The aToken proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a stable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The stable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a variable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The variable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the debt ceiling of an asset is set.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldDebtCeiling The old debt ceiling\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);\\n\\n  /**\\n   * @dev Emitted when the the siloed borrowing state for an asset is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldState The old siloed borrowing state\\n   * @param newState The new siloed borrowing state\\n   */\\n  event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);\\n\\n  /**\\n   * @dev Emitted when the bridge protocol fee is updated.\\n   * @param oldBridgeProtocolFee The old protocol fee, expressed in bps\\n   * @param newBridgeProtocolFee The new protocol fee, expressed in bps\\n   */\\n  event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);\\n\\n  /**\\n   * @dev Emitted when the total premium on flashloans is updated.\\n   * @param oldFlashloanPremiumTotal The old premium, expressed in bps\\n   * @param newFlashloanPremiumTotal The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumTotalUpdated(\\n    uint128 oldFlashloanPremiumTotal,\\n    uint128 newFlashloanPremiumTotal\\n  );\\n\\n  /**\\n   * @dev Emitted when the part of the premium that goes to protocol is updated.\\n   * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\\n   * @param newFlashloanPremiumToProtocol The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumToProtocolUpdated(\\n    uint128 oldFlashloanPremiumToProtocol,\\n    uint128 newFlashloanPremiumToProtocol\\n  );\\n\\n  /**\\n   * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the reserve is borrowable in isolation, false otherwise\\n   */\\n  event BorrowableInIsolationChanged(address asset, bool borrowable);\\n\\n  /**\\n   * @notice Initializes multiple reserves.\\n   * @param input The array of initialization parameters\\n   */\\n  function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;\\n\\n  /**\\n   * @dev Updates the aToken implementation for the reserve.\\n   * @param input The aToken update parameters\\n   */\\n  function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;\\n\\n  /**\\n   * @notice Updates the stable debt token implementation for the reserve.\\n   * @param input The stableDebtToken update parameters\\n   */\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Updates the variable debt token implementation for the asset.\\n   * @param input The variableDebtToken update parameters\\n   */\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Configures borrowing on a reserve.\\n   * @dev Can only be disabled (set to false) if stable borrowing is disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Configures the reserve collateralization parameters.\\n   * @dev All the values are expressed in bps. A value of 10000, results in 100.00%\\n   * @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external;\\n\\n  /**\\n   * @notice Enable or disable stable rate borrowing on a reserve.\\n   * @dev Can only be enabled (set to true) if borrowing is enabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveStableRateBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Enable or disable flashloans on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans need to be enabled, false otherwise\\n   */\\n  function setReserveFlashLoaning(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Activate or deactivate a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if the reserve needs to be active, false otherwise\\n   */\\n  function setReserveActive(address asset, bool active) external;\\n\\n  /**\\n   * @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\\n   * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param freeze True if the reserve needs to be frozen, false otherwise\\n   */\\n  function setReserveFreeze(address asset, bool freeze) external;\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\\n   * borrowed amount will be accumulated in the isolated collateral's total debt exposure\\n   * @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the asset should be borrowable in isolation, false otherwise\\n   */\\n  function setBorrowableInIsolation(address asset, bool borrowable) external;\\n\\n  /**\\n   * @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\\n   * swap interest rate, liquidate, atoken transfers).\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if pausing the reserve, false if unpausing\\n   */\\n  function setReservePause(address asset, bool paused) external;\\n\\n  /**\\n   * @notice Updates the reserve factor of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newReserveFactor The new reserve factor of the reserve\\n   */\\n  function setReserveFactor(address asset, uint256 newReserveFactor) external;\\n\\n  /**\\n   * @notice Sets the interest rate strategy of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newRateStrategyAddress The address of the new interest strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\\n   * are suspended.\\n   * @param paused True if protocol needs to be paused, false otherwise\\n   */\\n  function setPoolPause(bool paused) external;\\n\\n  /**\\n   * @notice Updates the borrow cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newBorrowCap The new borrow cap of the reserve\\n   */\\n  function setBorrowCap(address asset, uint256 newBorrowCap) external;\\n\\n  /**\\n   * @notice Updates the supply cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newSupplyCap The new supply cap of the reserve\\n   */\\n  function setSupplyCap(address asset, uint256 newSupplyCap) external;\\n\\n  /**\\n   * @notice Updates the liquidation protocol fee of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newFee The new liquidation protocol fee of the reserve, expressed in bps\\n   */\\n  function setLiquidationProtocolFee(address asset, uint256 newFee) external;\\n\\n  /**\\n   * @notice Updates the unbacked mint cap of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newUnbackedMintCap The new unbacked mint cap of the reserve\\n   */\\n  function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;\\n\\n  /**\\n   * @notice Assign an efficiency mode (eMode) category to asset.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newCategoryId The new category id of the asset\\n   */\\n  function setAssetEModeCategory(address asset, uint8 newCategoryId) external;\\n\\n  /**\\n   * @notice Adds a new efficiency mode (eMode) category.\\n   * @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\\n   * overcollateralization of the users using this category.\\n   * @dev The new ltv and liquidation threshold must be greater than the base\\n   * ltvs and liquidation thresholds of all assets within the eMode category\\n   * @param categoryId The id of the category to be configured\\n   * @param ltv The ltv associated with the category\\n   * @param liquidationThreshold The liquidation threshold associated with the category\\n   * @param liquidationBonus The liquidation bonus associated with the category\\n   * @param oracle The oracle associated with the category\\n   * @param label A label identifying the category\\n   */\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external;\\n\\n  /**\\n   * @notice Drops a reserve entirely.\\n   * @param asset The address of the reserve to drop\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the bridge fee collected by the protocol reserves.\\n   * @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps\\n   */\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates the total flash loan premium.\\n   * Total flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra balance\\n   * - A part is collected by the protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium is calculated on the total amount borrowed\\n   * @param newFlashloanPremiumTotal The total flashloan premium\\n   */\\n  function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;\\n\\n  /**\\n   * @notice Updates the flash loan premium collected by protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium to protocol is calculated on the total flashloan premium\\n   * @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury\\n   */\\n  function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;\\n\\n  /**\\n   * @notice Sets the debt ceiling for an asset.\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  function setDebtCeiling(address asset, uint256 newDebtCeiling) external;\\n\\n  /**\\n   * @notice Sets siloed borrowing for an asset\\n   * @param siloed The new siloed borrowing state\\n   */\\n  function setSiloedBorrowing(address asset, bool siloed) external;\\n}\\n\",\"keccak256\":\"0xd9083035ef01cdab5f60a04f817f3449814f37d5ade136a3d4734447ede04d71\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":{"notice":"Configures the reserve collateralization parameters."},"dropReserve(address)":{"notice":"Drops a reserve entirely."},"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":{"notice":"Initializes multiple reserves."},"setAssetEModeCategory(address,uint8)":{"notice":"Assign an efficiency mode (eMode) category to asset."},"setBorrowCap(address,uint256)":{"notice":"Updates the borrow cap of a reserve."},"setBorrowableInIsolation(address,bool)":{"notice":"Sets the borrowable in isolation flag for the reserve."},"setDebtCeiling(address,uint256)":{"notice":"Sets the debt ceiling for an asset."},"setEModeCategory(uint8,uint16,uint16,uint16,address,string)":{"notice":"Adds a new efficiency mode (eMode) category."},"setLiquidationProtocolFee(address,uint256)":{"notice":"Updates the liquidation protocol fee of reserve."},"setPoolPause(bool)":{"notice":"Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions are suspended."},"setReserveActive(address,bool)":{"notice":"Activate or deactivate a reserve"},"setReserveBorrowing(address,bool)":{"notice":"Configures borrowing on a reserve."},"setReserveFactor(address,uint256)":{"notice":"Updates the reserve factor of a reserve."},"setReserveFlashLoaning(address,bool)":{"notice":"Enable or disable flashloans on a reserve"},"setReserveFreeze(address,bool)":{"notice":"Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow or rate swap but allows repayments, liquidations, rate rebalances and withdrawals."},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Sets the interest rate strategy of a reserve."},"setReservePause(address,bool)":{"notice":"Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay, swap interest rate, liquidate, atoken transfers)."},"setReserveStableRateBorrowing(address,bool)":{"notice":"Enable or disable stable rate borrowing on a reserve."},"setSiloedBorrowing(address,bool)":{"notice":"Sets siloed borrowing for an asset"},"setSupplyCap(address,uint256)":{"notice":"Updates the supply cap of a reserve."},"setUnbackedMintCap(address,uint256)":{"notice":"Updates the unbacked mint cap of reserve."},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the bridge fee collected by the protocol reserves."},"updateFlashloanPremiumToProtocol(uint128)":{"notice":"Updates the flash loan premium collected by protocol reserves"},"updateFlashloanPremiumTotal(uint128)":{"notice":"Updates the total flash loan premium. Total flash loan premium consists of two parts: - A part is sent to aToken holders as extra balance - A part is collected by the protocol reserves"},"updateStableDebtToken((address,address,string,string,address,bytes))":{"notice":"Updates the stable debt token implementation for the reserve."},"updateVariableDebtToken((address,address,string,string,address,bytes))":{"notice":"Updates the variable debt token implementation for the asset."}},"notice":"Defines the basic interface for a Pool configurator.","version":1}}},"contracts/interfaces/IPoolDataProvider.sol":{"IPoolDataProvider":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getATokenTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllATokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"internalType":"struct IPoolDataProvider.TokenData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllReservesTokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"internalType":"struct IPoolDataProvider.TokenData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getDebtCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDebtCeilingDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getFlashLoanEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getInterestRateStrategyAddress","outputs":[{"internalType":"address","name":"irStrategyAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getLiquidationProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPaused","outputs":[{"internalType":"bool","name":"isPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveCaps","outputs":[{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveConfigurationData","outputs":[{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"stableBorrowRateEnabled","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isFrozen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"accruedToTreasuryScaled","type":"uint256"},{"internalType":"uint256","name":"totalAToken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveEModeCategory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveTokensAddresses","outputs":[{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSiloedBorrowing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getTotalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getUnbackedMintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReserveData","outputs":[{"internalType":"uint256","name":"currentATokenBalance","type":"uint256"},{"internalType":"uint256","name":"currentStableDebt","type":"uint256"},{"internalType":"uint256","name":"currentVariableDebt","type":"uint256"},{"internalType":"uint256","name":"principalStableDebt","type":"uint256"},{"internalType":"uint256","name":"scaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint40","name":"stableRateLastUpdated","type":"uint40"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address for the PoolAddressesProvider contract"}},"getATokenTotalSupply(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The total supply of the aToken"}},"getAllATokens()":{"returns":{"_0":"The list of ATokens, pairs of symbols and addresses"}},"getAllReservesTokens()":{"details":"Handling MKR and ETH in a different way since they do not have standard `symbol` functions.","returns":{"_0":"The list of reserves, pairs of symbols and addresses"}},"getDebtCeiling(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The debt ceiling of the reserve"}},"getDebtCeilingDecimals()":{"returns":{"_0":"The debt ceiling decimals"}},"getFlashLoanEnabled(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"True if FlashLoans are enabled, false otherwise"}},"getInterestRateStrategyAddress(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"irStrategyAddress":"The address of the Interest Rate strategy"}},"getLiquidationProtocolFee(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The protocol fee on liquidation"}},"getPaused(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"isPaused":"True if the pool is paused, false otherwise"}},"getReserveCaps(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"borrowCap":"The borrow cap of the reserve","supplyCap":"The supply cap of the reserve"}},"getReserveConfigurationData(address)":{"details":"Not returning borrow and supply caps for compatibility, nor pause flag","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"borrowingEnabled":"True if borrowing is enabled, false otherwise","decimals":"The number of decimals of the reserve","isActive":"True if it is active, false otherwise","isFrozen":"True if it is frozen, false otherwise","liquidationBonus":"The liquidationBonus of the reserve","liquidationThreshold":"The liquidationThreshold of the reserve","ltv":"The ltv of the reserve","reserveFactor":"The reserveFactor of the reserve","stableBorrowRateEnabled":"True if stable rate borrowing is enabled, false otherwise","usageAsCollateralEnabled":"True if the usage as collateral is enabled, false otherwise"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"accruedToTreasuryScaled":"The scaled amount of tokens accrued to treasury that is to be minted","averageStableBorrowRate":"The average stable borrow rate of the reserve","lastUpdateTimestamp":"The timestamp of the last update of the reserve","liquidityIndex":"The liquidity index of the reserve","liquidityRate":"The liquidity rate of the reserve","stableBorrowRate":"The stable borrow rate of the reserve","totalAToken":"The total supply of the aToken","totalStableDebt":"The total stable debt of the reserve","totalVariableDebt":"The total variable debt of the reserve","unbacked":"The amount of unbacked tokens","variableBorrowIndex":"The variable borrow index of the reserve","variableBorrowRate":"The variable borrow rate of the reserve"}},"getReserveEModeCategory(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The eMode id of the reserve"}},"getReserveTokensAddresses(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"aTokenAddress":"The AToken address of the reserve","stableDebtTokenAddress":"The StableDebtToken address of the reserve","variableDebtTokenAddress":"The VariableDebtToken address of the reserve"}},"getSiloedBorrowing(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"True if the asset is siloed for borrowing"}},"getTotalDebt(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The total debt for asset"}},"getUnbackedMintCap(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The unbacked mint cap of the reserve"}},"getUserReserveData(address,address)":{"params":{"asset":"The address of the underlying asset of the reserve","user":"The address of the user"},"returns":{"currentATokenBalance":"The current AToken balance of the user","currentStableDebt":"The current stable debt of the user","currentVariableDebt":"The current variable debt of the user","liquidityRate":"The liquidity rate of the reserve","principalStableDebt":"The principal stable debt of the user","scaledVariableDebt":"The scaled variable debt of the user","stableBorrowRate":"The stable borrow rate of the user","stableRateLastUpdated":"The timestamp of the last update of the user stable rate","usageAsCollateralEnabled":"True if the user is using the asset as collateral, false         otherwise"}}},"title":"IPoolDataProvider","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","getATokenTotalSupply(address)":"51460e25","getAllATokens()":"f561ae41","getAllReservesTokens()":"b316ff89","getDebtCeiling(address)":"3c798109","getDebtCeilingDecimals()":"69b169e1","getFlashLoanEnabled(address)":"d7ed3ef4","getInterestRateStrategyAddress(address)":"6744362a","getLiquidationProtocolFee(address)":"3cb8a622","getPaused(address)":"b55d9904","getReserveCaps(address)":"46fbe558","getReserveConfigurationData(address)":"3e150141","getReserveData(address)":"35ea6a75","getReserveEModeCategory(address)":"163a0f20","getReserveTokensAddresses(address)":"d2493b6c","getSiloedBorrowing(address)":"fcf40a62","getTotalDebt(address)":"4d44ac4f","getUnbackedMintCap(address)":"7ba1ae36","getUserReserveData(address,address)":"28dd2d01"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getATokenTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllATokens\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"internalType\":\"struct IPoolDataProvider.TokenData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllReservesTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"internalType\":\"struct IPoolDataProvider.TokenData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getDebtCeiling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDebtCeilingDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getFlashLoanEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getInterestRateStrategyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"irStrategyAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getLiquidationProtocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveConfigurationData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"stableBorrowRateEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isFrozen\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accruedToTreasuryScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveEModeCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveTokensAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getSiloedBorrowing\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getTotalDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getUnbackedMintCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserReserveData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentATokenBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"principalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"scaledVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"stableRateLastUpdated\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address for the PoolAddressesProvider contract\"}},\"getATokenTotalSupply(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The total supply of the aToken\"}},\"getAllATokens()\":{\"returns\":{\"_0\":\"The list of ATokens, pairs of symbols and addresses\"}},\"getAllReservesTokens()\":{\"details\":\"Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\",\"returns\":{\"_0\":\"The list of reserves, pairs of symbols and addresses\"}},\"getDebtCeiling(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The debt ceiling of the reserve\"}},\"getDebtCeilingDecimals()\":{\"returns\":{\"_0\":\"The debt ceiling decimals\"}},\"getFlashLoanEnabled(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"True if FlashLoans are enabled, false otherwise\"}},\"getInterestRateStrategyAddress(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"irStrategyAddress\":\"The address of the Interest Rate strategy\"}},\"getLiquidationProtocolFee(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The protocol fee on liquidation\"}},\"getPaused(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"isPaused\":\"True if the pool is paused, false otherwise\"}},\"getReserveCaps(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"borrowCap\":\"The borrow cap of the reserve\",\"supplyCap\":\"The supply cap of the reserve\"}},\"getReserveConfigurationData(address)\":{\"details\":\"Not returning borrow and supply caps for compatibility, nor pause flag\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"borrowingEnabled\":\"True if borrowing is enabled, false otherwise\",\"decimals\":\"The number of decimals of the reserve\",\"isActive\":\"True if it is active, false otherwise\",\"isFrozen\":\"True if it is frozen, false otherwise\",\"liquidationBonus\":\"The liquidationBonus of the reserve\",\"liquidationThreshold\":\"The liquidationThreshold of the reserve\",\"ltv\":\"The ltv of the reserve\",\"reserveFactor\":\"The reserveFactor of the reserve\",\"stableBorrowRateEnabled\":\"True if stable rate borrowing is enabled, false otherwise\",\"usageAsCollateralEnabled\":\"True if the usage as collateral is enabled, false otherwise\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"accruedToTreasuryScaled\":\"The scaled amount of tokens accrued to treasury that is to be minted\",\"averageStableBorrowRate\":\"The average stable borrow rate of the reserve\",\"lastUpdateTimestamp\":\"The timestamp of the last update of the reserve\",\"liquidityIndex\":\"The liquidity index of the reserve\",\"liquidityRate\":\"The liquidity rate of the reserve\",\"stableBorrowRate\":\"The stable borrow rate of the reserve\",\"totalAToken\":\"The total supply of the aToken\",\"totalStableDebt\":\"The total stable debt of the reserve\",\"totalVariableDebt\":\"The total variable debt of the reserve\",\"unbacked\":\"The amount of unbacked tokens\",\"variableBorrowIndex\":\"The variable borrow index of the reserve\",\"variableBorrowRate\":\"The variable borrow rate of the reserve\"}},\"getReserveEModeCategory(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The eMode id of the reserve\"}},\"getReserveTokensAddresses(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"aTokenAddress\":\"The AToken address of the reserve\",\"stableDebtTokenAddress\":\"The StableDebtToken address of the reserve\",\"variableDebtTokenAddress\":\"The VariableDebtToken address of the reserve\"}},\"getSiloedBorrowing(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"True if the asset is siloed for borrowing\"}},\"getTotalDebt(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The total debt for asset\"}},\"getUnbackedMintCap(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The unbacked mint cap of the reserve\"}},\"getUserReserveData(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user\"},\"returns\":{\"currentATokenBalance\":\"The current AToken balance of the user\",\"currentStableDebt\":\"The current stable debt of the user\",\"currentVariableDebt\":\"The current variable debt of the user\",\"liquidityRate\":\"The liquidity rate of the reserve\",\"principalStableDebt\":\"The principal stable debt of the user\",\"scaledVariableDebt\":\"The scaled variable debt of the user\",\"stableBorrowRate\":\"The stable borrow rate of the user\",\"stableRateLastUpdated\":\"The timestamp of the last update of the user stable rate\",\"usageAsCollateralEnabled\":\"True if the user is using the asset as collateral, false         otherwise\"}}},\"title\":\"IPoolDataProvider\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address for the PoolAddressesProvider contract.\"},\"getATokenTotalSupply(address)\":{\"notice\":\"Returns the total supply of aTokens for a given asset\"},\"getAllATokens()\":{\"notice\":\"Returns the list of the existing ATokens in the pool.\"},\"getAllReservesTokens()\":{\"notice\":\"Returns the list of the existing reserves in the pool.\"},\"getDebtCeiling(address)\":{\"notice\":\"Returns the debt ceiling of the reserve\"},\"getDebtCeilingDecimals()\":{\"notice\":\"Returns the debt ceiling decimals\"},\"getFlashLoanEnabled(address)\":{\"notice\":\"Returns whether the reserve has FlashLoans enabled or disabled\"},\"getInterestRateStrategyAddress(address)\":{\"notice\":\"Returns the address of the Interest Rate strategy\"},\"getLiquidationProtocolFee(address)\":{\"notice\":\"Returns the protocol fee on the liquidation bonus\"},\"getPaused(address)\":{\"notice\":\"Returns if the pool is paused\"},\"getReserveCaps(address)\":{\"notice\":\"Returns the caps parameters of the reserve\"},\"getReserveConfigurationData(address)\":{\"notice\":\"Returns the configuration data of the reserve\"},\"getReserveData(address)\":{\"notice\":\"Returns the reserve data\"},\"getReserveEModeCategory(address)\":{\"notice\":\"Returns the efficiency mode category of the reserve\"},\"getReserveTokensAddresses(address)\":{\"notice\":\"Returns the token addresses of the reserve\"},\"getSiloedBorrowing(address)\":{\"notice\":\"Returns the siloed borrowing flag\"},\"getTotalDebt(address)\":{\"notice\":\"Returns the total debt for a given asset\"},\"getUnbackedMintCap(address)\":{\"notice\":\"Returns the unbacked mint cap of the reserve\"},\"getUserReserveData(address,address)\":{\"notice\":\"Returns the user data in a reserve\"}},\"notice\":\"Defines the basic interface of a PoolDataProvider\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPoolDataProvider.sol\":\"IPoolDataProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address for the PoolAddressesProvider contract."},"getATokenTotalSupply(address)":{"notice":"Returns the total supply of aTokens for a given asset"},"getAllATokens()":{"notice":"Returns the list of the existing ATokens in the pool."},"getAllReservesTokens()":{"notice":"Returns the list of the existing reserves in the pool."},"getDebtCeiling(address)":{"notice":"Returns the debt ceiling of the reserve"},"getDebtCeilingDecimals()":{"notice":"Returns the debt ceiling decimals"},"getFlashLoanEnabled(address)":{"notice":"Returns whether the reserve has FlashLoans enabled or disabled"},"getInterestRateStrategyAddress(address)":{"notice":"Returns the address of the Interest Rate strategy"},"getLiquidationProtocolFee(address)":{"notice":"Returns the protocol fee on the liquidation bonus"},"getPaused(address)":{"notice":"Returns if the pool is paused"},"getReserveCaps(address)":{"notice":"Returns the caps parameters of the reserve"},"getReserveConfigurationData(address)":{"notice":"Returns the configuration data of the reserve"},"getReserveData(address)":{"notice":"Returns the reserve data"},"getReserveEModeCategory(address)":{"notice":"Returns the efficiency mode category of the reserve"},"getReserveTokensAddresses(address)":{"notice":"Returns the token addresses of the reserve"},"getSiloedBorrowing(address)":{"notice":"Returns the siloed borrowing flag"},"getTotalDebt(address)":{"notice":"Returns the total debt for a given asset"},"getUnbackedMintCap(address)":{"notice":"Returns the unbacked mint cap of the reserve"},"getUserReserveData(address,address)":{"notice":"Returns the user data in a reserve"}},"notice":"Defines the basic interface of a PoolDataProvider","version":1}}},"contracts/interfaces/IPriceOracle.sol":{"IPriceOracle":{"abi":[{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setAssetPrice","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}},"setAssetPrice(address,uint256)":{"params":{"asset":"The address of the asset","price":"The price of the asset"}}},"title":"IPriceOracle","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getAssetPrice(address)":"b3596f07","setAssetPrice(address,uint256)":"51323f72"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setAssetPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}},\"setAssetPrice(address,uint256)\":{\"params\":{\"asset\":\"The address of the asset\",\"price\":\"The price of the asset\"}}},\"title\":\"IPriceOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"},\"setAssetPrice(address,uint256)\":{\"notice\":\"Set the price of the asset\"}},\"notice\":\"Defines the basic interface for a Price oracle.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPriceOracle.sol\":\"IPriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracle\\n * @author Aave\\n * @notice Defines the basic interface for a Price oracle.\\n */\\ninterface IPriceOracle {\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Set the price of the asset\\n   * @param asset The address of the asset\\n   * @param price The price of the asset\\n   */\\n  function setAssetPrice(address asset, uint256 price) external;\\n}\\n\",\"keccak256\":\"0x672bcf328d4d811c1dea02b57580ea650f73121f98f39e7916ac70340bb234d2\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"},"setAssetPrice(address,uint256)":{"notice":"Set the price of the asset"}},"notice":"Defines the basic interface for a Price oracle.","version":1}}},"contracts/interfaces/IPriceOracleGetter.sol":{"IPriceOracleGetter":{"abi":[{"inputs":[],"name":"BASE_CURRENCY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY_UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"BASE_CURRENCY()":{"details":"Address 0x0 is reserved for USD as base currency.","returns":{"_0":"Returns the base currency address."}},"BASE_CURRENCY_UNIT()":{"details":"1 ether for ETH, 1e8 for USD.","returns":{"_0":"Returns the base currency unit."}},"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}}},"title":"IPriceOracleGetter","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"BASE_CURRENCY()":"e19f4700","BASE_CURRENCY_UNIT()":"8c89b64f","getAssetPrice(address)":"b3596f07"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BASE_CURRENCY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY_UNIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"BASE_CURRENCY()\":{\"details\":\"Address 0x0 is reserved for USD as base currency.\",\"returns\":{\"_0\":\"Returns the base currency address.\"}},\"BASE_CURRENCY_UNIT()\":{\"details\":\"1 ether for ETH, 1e8 for USD.\",\"returns\":{\"_0\":\"Returns the base currency unit.\"}},\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}}},\"title\":\"IPriceOracleGetter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BASE_CURRENCY()\":{\"notice\":\"Returns the base currency address\"},\"BASE_CURRENCY_UNIT()\":{\"notice\":\"Returns the base currency unit\"},\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"}},\"notice\":\"Interface for the Aave price oracle.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPriceOracleGetter.sol\":\"IPriceOracleGetter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"BASE_CURRENCY()":{"notice":"Returns the base currency address"},"BASE_CURRENCY_UNIT()":{"notice":"Returns the base currency unit"},"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"}},"notice":"Interface for the Aave price oracle.","version":1}}},"contracts/interfaces/IPriceOracleSentinel.sol":{"IPriceOracleSentinel":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newGracePeriod","type":"uint256"}],"name":"GracePeriodUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newSequencerOracle","type":"address"}],"name":"SequencerOracleUpdated","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSequencerOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBorrowAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidationAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGracePeriod","type":"uint256"}],"name":"setGracePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSequencerOracle","type":"address"}],"name":"setSequencerOracle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"GracePeriodUpdated(uint256)":{"details":"Emitted after the grace period is updated","params":{"newGracePeriod":"The new grace period value"}},"SequencerOracleUpdated(address)":{"details":"Emitted after the sequencer oracle is updated","params":{"newSequencerOracle":"The new sequencer oracle"}}},"kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider contract"}},"getGracePeriod()":{"returns":{"_0":"The duration of the grace period"}},"getSequencerOracle()":{"returns":{"_0":"The address of the sequencer oracle contract"}},"isBorrowAllowed()":{"details":"Operation not allowed when PriceOracle is down or grace period not passed.","returns":{"_0":"True if the `borrow` operation is allowed, false otherwise."}},"isLiquidationAllowed()":{"details":"Operation not allowed when PriceOracle is down or grace period not passed.","returns":{"_0":"True if the `liquidation` operation is allowed, false otherwise."}},"setGracePeriod(uint256)":{"params":{"newGracePeriod":"The value of the new grace period duration"}},"setSequencerOracle(address)":{"params":{"newSequencerOracle":"The address of the new Sequencer Oracle to use"}}},"title":"IPriceOracleSentinel","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","getGracePeriod()":"dbd18388","getSequencerOracle()":"12168dc2","isBorrowAllowed()":"49aa2e81","isLiquidationAllowed()":"7a5d20ea","setGracePeriod(uint256)":"f2f65960","setSequencerOracle(address)":"f0aef31c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newGracePeriod\",\"type\":\"uint256\"}],\"name\":\"GracePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerOracle\",\"type\":\"address\"}],\"name\":\"SequencerOracleUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGracePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSequencerOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBorrowAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLiquidationAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newGracePeriod\",\"type\":\"uint256\"}],\"name\":\"setGracePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newSequencerOracle\",\"type\":\"address\"}],\"name\":\"setSequencerOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"GracePeriodUpdated(uint256)\":{\"details\":\"Emitted after the grace period is updated\",\"params\":{\"newGracePeriod\":\"The new grace period value\"}},\"SequencerOracleUpdated(address)\":{\"details\":\"Emitted after the sequencer oracle is updated\",\"params\":{\"newSequencerOracle\":\"The new sequencer oracle\"}}},\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"getGracePeriod()\":{\"returns\":{\"_0\":\"The duration of the grace period\"}},\"getSequencerOracle()\":{\"returns\":{\"_0\":\"The address of the sequencer oracle contract\"}},\"isBorrowAllowed()\":{\"details\":\"Operation not allowed when PriceOracle is down or grace period not passed.\",\"returns\":{\"_0\":\"True if the `borrow` operation is allowed, false otherwise.\"}},\"isLiquidationAllowed()\":{\"details\":\"Operation not allowed when PriceOracle is down or grace period not passed.\",\"returns\":{\"_0\":\"True if the `liquidation` operation is allowed, false otherwise.\"}},\"setGracePeriod(uint256)\":{\"params\":{\"newGracePeriod\":\"The value of the new grace period duration\"}},\"setSequencerOracle(address)\":{\"params\":{\"newSequencerOracle\":\"The address of the new Sequencer Oracle to use\"}}},\"title\":\"IPriceOracleSentinel\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider\"},\"getGracePeriod()\":{\"notice\":\"Returns the grace period\"},\"getSequencerOracle()\":{\"notice\":\"Returns the SequencerOracle\"},\"isBorrowAllowed()\":{\"notice\":\"Returns true if the `borrow` operation is allowed.\"},\"isLiquidationAllowed()\":{\"notice\":\"Returns true if the `liquidation` operation is allowed.\"},\"setGracePeriod(uint256)\":{\"notice\":\"Updates the duration of the grace period\"},\"setSequencerOracle(address)\":{\"notice\":\"Updates the address of the sequencer oracle\"}},\"notice\":\"Defines the basic interface for the PriceOracleSentinel\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPriceOracleSentinel.sol\":\"IPriceOracleSentinel\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider"},"getGracePeriod()":{"notice":"Returns the grace period"},"getSequencerOracle()":{"notice":"Returns the SequencerOracle"},"isBorrowAllowed()":{"notice":"Returns true if the `borrow` operation is allowed."},"isLiquidationAllowed()":{"notice":"Returns true if the `liquidation` operation is allowed."},"setGracePeriod(uint256)":{"notice":"Updates the duration of the grace period"},"setSequencerOracle(address)":{"notice":"Updates the address of the sequencer oracle"}},"notice":"Defines the basic interface for the PriceOracleSentinel","version":1}}},"contracts/interfaces/IReserveInterestRateStrategy.sol":{"IReserveInterestRateStrategy":{"abi":[{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"params","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"params":{"params":"The parameters needed to calculate interest rates"},"returns":{"_0":"liquidityRate The liquidity rate expressed in rays","_1":"stableBorrowRate The stable borrow rate expressed in rays","_2":"variableBorrowRate The variable borrow rate expressed in rays"}}},"title":"IReserveInterestRateStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"a5898709"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"}],\"internalType\":\"struct DataTypes.CalculateInterestRatesParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"params\":{\"params\":\"The parameters needed to calculate interest rates\"},\"returns\":{\"_0\":\"liquidityRate The liquidity rate expressed in rays\",\"_1\":\"stableBorrowRate The stable borrow rate expressed in rays\",\"_2\":\"variableBorrowRate The variable borrow rate expressed in rays\"}}},\"title\":\"IReserveInterestRateStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"notice\":\"Calculates the interest rates depending on the reserve's state and configurations\"}},\"notice\":\"Interface for the calculation of the interest rates\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IReserveInterestRateStrategy.sol\":\"IReserveInterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"notice":"Calculates the interest rates depending on the reserve's state and configurations"}},"notice":"Interface for the calculation of the interest rates","version":1}}},"contracts/interfaces/IScaledBalanceToken.sol":{"IScaledBalanceToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","events":{"Burn(address,address,uint256,uint256,uint256)":{"details":"Emitted after the burn actionIf the burn function does not involve a transfer of the underlying asset, the target defaults to zero address","params":{"balanceIncrease":"The increase in scaled-up balance since the last action of 'from'","from":"The address from which the tokens will be burned","index":"The next liquidity index of the reserve","target":"The address that will receive the underlying, if any","value":"The scaled-up amount being burned (user entered amount - balance increase from interest)"}},"Mint(address,address,uint256,uint256,uint256)":{"details":"Emitted after the mint action","params":{"balanceIncrease":"The increase in scaled-up balance since the last action of 'onBehalfOf'","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted tokens","value":"The scaled-up amount being minted (based on user entered amount and balance increase from interest)"}}},"kind":"dev","methods":{"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}}},"title":"IScaledBalanceToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"Burn(address,address,uint256,uint256,uint256)\":{\"details\":\"Emitted after the burn actionIf the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\",\"params\":{\"balanceIncrease\":\"The increase in scaled-up balance since the last action of 'from'\",\"from\":\"The address from which the tokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"target\":\"The address that will receive the underlying, if any\",\"value\":\"The scaled-up amount being burned (user entered amount - balance increase from interest)\"}},\"Mint(address,address,uint256,uint256,uint256)\":{\"details\":\"Emitted after the mint action\",\"params\":{\"balanceIncrease\":\"The increase in scaled-up balance since the last action of 'onBehalfOf'\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted tokens\",\"value\":\"The scaled-up amount being minted (based on user entered amount and balance increase from interest)\"}}},\"kind\":\"dev\",\"methods\":{\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}}},\"title\":\"IScaledBalanceToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"}},\"notice\":\"Defines the basic interface for a scaled-balance token.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IScaledBalanceToken.sol\":\"IScaledBalanceToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"}},"notice":"Defines the basic interface for a scaled-balance token.","version":1}}},"contracts/interfaces/ISequencerOracle.sol":{"ISequencerOracle":{"abi":[{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"latestRoundData()":{"returns":{"answer":"The answer for the latest round: 0 if the sequencer is up, 1 if it is down.","answeredInRound":"The round ID of the round in which the answer was computed.","roundId":"The round ID from the aggregator for which the data was retrieved combined with a phase to ensure that round IDs get larger as time moves forward.","startedAt":"The timestamp when the round was started.","updatedAt":"The timestamp of the block in which the answer was updated on L1."}}},"title":"ISequencerOracle","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"latestRoundData()":"feaf968c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"latestRoundData()\":{\"returns\":{\"answer\":\"The answer for the latest round: 0 if the sequencer is up, 1 if it is down.\",\"answeredInRound\":\"The round ID of the round in which the answer was computed.\",\"roundId\":\"The round ID from the aggregator for which the data was retrieved combined with a phase to ensure that round IDs get larger as time moves forward.\",\"startedAt\":\"The timestamp when the round was started.\",\"updatedAt\":\"The timestamp of the block in which the answer was updated on L1.\"}}},\"title\":\"ISequencerOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"latestRoundData()\":{\"notice\":\"Returns the health status of the sequencer.\"}},\"notice\":\"Defines the basic interface for a Sequencer oracle.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ISequencerOracle.sol\":\"ISequencerOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ISequencerOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ISequencerOracle\\n * @author Aave\\n * @notice Defines the basic interface for a Sequencer oracle.\\n */\\ninterface ISequencerOracle {\\n  /**\\n   * @notice Returns the health status of the sequencer.\\n   * @return roundId The round ID from the aggregator for which the data was retrieved combined with a phase to ensure\\n   * that round IDs get larger as time moves forward.\\n   * @return answer The answer for the latest round: 0 if the sequencer is up, 1 if it is down.\\n   * @return startedAt The timestamp when the round was started.\\n   * @return updatedAt The timestamp of the block in which the answer was updated on L1.\\n   * @return answeredInRound The round ID of the round in which the answer was computed.\\n   */\\n  function latestRoundData()\\n    external\\n    view\\n    returns (\\n      uint80 roundId,\\n      int256 answer,\\n      uint256 startedAt,\\n      uint256 updatedAt,\\n      uint80 answeredInRound\\n    );\\n}\\n\",\"keccak256\":\"0x2b0cac1dc7d684eab009ada5e1f134f7c61c90d8802cf4ca948a35d6db6f9aba\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"latestRoundData()":{"notice":"Returns the health status of the sequencer."}},"notice":"Defines the basic interface for a Sequencer oracle.","version":1}}},"contracts/interfaces/IStableDebtToken.sol":{"IStableDebtToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Mint","type":"event"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAverageStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyAndAvgRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"principalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","details":"It does not inherit from IERC20 to save in code size","events":{"Burn(address,uint256,uint256,uint256,uint256,uint256)":{"details":"Emitted when new stable debt is burned","params":{"amount":"The amount being burned (user entered amount - balance increase from interest)","avgStableRate":"The next average stable rate after the burning","balanceIncrease":"The increase in balance since the last action of 'from'","currentBalance":"The balance of the user based on the previous balance and balance increase from interest","from":"The address from which the debt will be burned","newTotalSupply":"The next total supply of the stable debt token after the action"}},"Mint(address,address,uint256,uint256,uint256,uint256,uint256,uint256)":{"details":"Emitted when new stable debt is minted","params":{"amount":"The amount minted (user entered amount + balance increase from interest)","avgStableRate":"The next average stable rate after the minting","balanceIncrease":"The increase in balance since the last action of the user 'onBehalfOf'","currentBalance":"The balance of the user based on the previous balance and balance increase from interest","newRate":"The rate of the debt after the minting","newTotalSupply":"The next total supply of the stable debt token after the action","onBehalfOf":"The recipient of stable debt tokens","user":"The address of the user who triggered the minting"}}},"kind":"dev","methods":{"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"burn(address,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned","params":{"amount":"The amount of debt tokens getting burned","from":"The address from which the debt will be burned"},"returns":{"_0":"The total stable debt","_1":"The average stable borrow rate"}},"getAverageStableRate()":{"returns":{"_0":"The average stable rate"}},"getSupplyData()":{"returns":{"_0":"The principal","_1":"The total supply","_2":"The average stable rate","_3":"The timestamp of the last update"}},"getTotalSupplyAndAvgRate()":{"returns":{"_0":"The total supply","_1":"The average rate"}},"getTotalSupplyLastUpdated()":{"returns":{"_0":"The timestamp"}},"getUserLastUpdated(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The timestamp"}},"getUserStableRate(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The stable rate of the user"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt","params":{"amount":"The amount of debt tokens to mint","onBehalfOf":"The address receiving the debt tokens","rate":"The rate of the debt being minted","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if it is the first borrow, false otherwise","_1":"The total stable debt","_2":"The average stable borrow rate"}},"principalBalanceOf(address)":{"returns":{"_0":"The debt balance of the user since the last burn/mint action"}}},"title":"IStableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"UNDERLYING_ASSET_ADDRESS()":"b16a19de","burn(address,uint256)":"9dc29fac","getAverageStableRate()":"90f6fcf2","getSupplyData()":"79774338","getTotalSupplyAndAvgRate()":"f731e9be","getTotalSupplyLastUpdated()":"e7484890","getUserLastUpdated(address)":"79ce6b8c","getUserStableRate(address)":"e78c9b3b","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","principalBalanceOf(address)":"c634dfaa"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAverageStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyAndAvgRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"principalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"It does not inherit from IERC20 to save in code size\",\"events\":{\"Burn(address,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when new stable debt is burned\",\"params\":{\"amount\":\"The amount being burned (user entered amount - balance increase from interest)\",\"avgStableRate\":\"The next average stable rate after the burning\",\"balanceIncrease\":\"The increase in balance since the last action of 'from'\",\"currentBalance\":\"The balance of the user based on the previous balance and balance increase from interest\",\"from\":\"The address from which the debt will be burned\",\"newTotalSupply\":\"The next total supply of the stable debt token after the action\"}},\"Mint(address,address,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when new stable debt is minted\",\"params\":{\"amount\":\"The amount minted (user entered amount + balance increase from interest)\",\"avgStableRate\":\"The next average stable rate after the minting\",\"balanceIncrease\":\"The increase in balance since the last action of the user 'onBehalfOf'\",\"currentBalance\":\"The balance of the user based on the previous balance and balance increase from interest\",\"newRate\":\"The rate of the debt after the minting\",\"newTotalSupply\":\"The next total supply of the stable debt token after the action\",\"onBehalfOf\":\"The recipient of stable debt tokens\",\"user\":\"The address of the user who triggered the minting\"}}},\"kind\":\"dev\",\"methods\":{\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"burn(address,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned\",\"params\":{\"amount\":\"The amount of debt tokens getting burned\",\"from\":\"The address from which the debt will be burned\"},\"returns\":{\"_0\":\"The total stable debt\",\"_1\":\"The average stable borrow rate\"}},\"getAverageStableRate()\":{\"returns\":{\"_0\":\"The average stable rate\"}},\"getSupplyData()\":{\"returns\":{\"_0\":\"The principal\",\"_1\":\"The total supply\",\"_2\":\"The average stable rate\",\"_3\":\"The timestamp of the last update\"}},\"getTotalSupplyAndAvgRate()\":{\"returns\":{\"_0\":\"The total supply\",\"_1\":\"The average rate\"}},\"getTotalSupplyLastUpdated()\":{\"returns\":{\"_0\":\"The timestamp\"}},\"getUserLastUpdated(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The timestamp\"}},\"getUserStableRate(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The stable rate of the user\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt\",\"params\":{\"amount\":\"The amount of debt tokens to mint\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"rate\":\"The rate of the debt being minted\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if it is the first borrow, false otherwise\",\"_1\":\"The total stable debt\",\"_2\":\"The average stable borrow rate\"}},\"principalBalanceOf(address)\":{\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action\"}}},\"title\":\"IStableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\"},\"burn(address,uint256)\":{\"notice\":\"Burns debt of `user`\"},\"getAverageStableRate()\":{\"notice\":\"Returns the average rate of all the stable rate loans.\"},\"getSupplyData()\":{\"notice\":\"Returns the principal, the total supply, the average stable rate and the timestamp for the last update\"},\"getTotalSupplyAndAvgRate()\":{\"notice\":\"Returns the total supply and the average stable rate\"},\"getTotalSupplyLastUpdated()\":{\"notice\":\"Returns the timestamp of the last update of the total supply\"},\"getUserLastUpdated(address)\":{\"notice\":\"Returns the timestamp of the last update of the user\"},\"getUserStableRate(address)\":{\"notice\":\"Returns the stable rate of the user debt\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address.\"},\"principalBalanceOf(address)\":{\"notice\":\"Returns the principal debt balance of the user\"}},\"notice\":\"Defines the interface for the stable debt token\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IStableDebtToken.sol\":\"IStableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)"},"burn(address,uint256)":{"notice":"Burns debt of `user`"},"getAverageStableRate()":{"notice":"Returns the average rate of all the stable rate loans."},"getSupplyData()":{"notice":"Returns the principal, the total supply, the average stable rate and the timestamp for the last update"},"getTotalSupplyAndAvgRate()":{"notice":"Returns the total supply and the average stable rate"},"getTotalSupplyLastUpdated()":{"notice":"Returns the timestamp of the last update of the total supply"},"getUserLastUpdated(address)":{"notice":"Returns the timestamp of the last update of the user"},"getUserStableRate(address)":{"notice":"Returns the stable rate of the user debt"},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address."},"principalBalanceOf(address)":{"notice":"Returns the principal debt balance of the user"}},"notice":"Defines the interface for the stable debt token","version":1}}},"contracts/interfaces/IVariableDebtToken.sol":{"IVariableDebtToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","type":"event"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"burn(address,uint256,uint256)":{"details":"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount getting burned","from":"The address from which the debt will be burned","index":"The variable debt index of the reserve"},"returns":{"_0":"The scaled total debt of the reserve"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of debt being minted","index":"The variable debt index of the reserve","onBehalfOf":"The address receiving the debt tokens","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if the previous balance of the user is 0, false otherwise","_1":"The scaled total debt of the reserve"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}}},"title":"IVariableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"UNDERLYING_ASSET_ADDRESS()":"b16a19de","burn(address,uint256,uint256)":"f5298aca","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"burn(address,uint256,uint256)\":{\"details\":\"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount getting burned\",\"from\":\"The address from which the debt will be burned\",\"index\":\"The variable debt index of the reserve\"},\"returns\":{\"_0\":\"The scaled total debt of the reserve\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of debt being minted\",\"index\":\"The variable debt index of the reserve\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if the previous balance of the user is 0, false otherwise\",\"_1\":\"The scaled total debt of the reserve\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}}},\"title\":\"IVariableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\"},\"burn(address,uint256,uint256)\":{\"notice\":\"Burns user variable debt\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"}},\"notice\":\"Defines the basic interface for a variable debt token.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IVariableDebtToken.sol\":\"IVariableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)"},"burn(address,uint256,uint256)":{"notice":"Burns user variable debt"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"}},"notice":"Defines the basic interface for a variable debt token.","version":1}}},"contracts/misc/AaveOracle.sol":{"AaveOracle":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"},{"internalType":"address","name":"fallbackOracle","type":"address"},{"internalType":"address","name":"baseCurrency","type":"address"},{"internalType":"uint256","name":"baseCurrencyUnit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"source","type":"address"}],"name":"AssetSourceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"baseCurrency","type":"address"},{"indexed":false,"internalType":"uint256","name":"baseCurrencyUnit","type":"uint256"}],"name":"BaseCurrencySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fallbackOracle","type":"address"}],"name":"FallbackOracleUpdated","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY_UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"getAssetsPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFallbackOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSourceOfAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"}],"name":"setAssetSources","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fallbackOracle","type":"address"}],"name":"setFallbackOracle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"constructor":{"params":{"assets":"The addresses of the assets","baseCurrency":"The base currency used for the price quotes. If USD is used, base currency is 0x0","baseCurrencyUnit":"The unit of the base currency","fallbackOracle":"The address of the fallback oracle to use if the data of an        aggregator is not consistent","provider":"The address of the new PoolAddressesProvider","sources":"The address of the source of each asset"}},"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}},"getAssetsPrices(address[])":{"params":{"assets":"The list of assets addresses"},"returns":{"_0":"The prices of the given assets"}},"getFallbackOracle()":{"returns":{"_0":"The address of the fallback oracle"}},"getSourceOfAsset(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The address of the source"}},"setAssetSources(address[],address[])":{"params":{"assets":"The addresses of the assets","sources":"The addresses of the price sources"}},"setFallbackOracle(address)":{"params":{"fallbackOracle":"The address of the fallback oracle"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider contract","returns":{"_0":"The address of the PoolAddressesProvider contract"}},"BASE_CURRENCY":{"details":"Address 0x0 is reserved for USD as base currency.","return":"Returns the base currency address.","returns":{"_0":"Returns the base currency address."}},"BASE_CURRENCY_UNIT":{"details":"1 ether for ETH, 1e8 for USD.","return":"Returns the base currency unit.","returns":{"_0":"Returns the base currency unit."}}},"title":"AaveOracle","version":1},"evm":{"bytecode":{"functionDebugData":{"@_6474":{"entryPoint":null,"id":6474,"parameterSlots":6,"returnSlots":0},"@_setAssetsSources_6562":{"entryPoint":245,"id":6562,"parameterSlots":2,"returnSlots":0},"@_setFallbackOracle_6579":{"entryPoint":171,"id":6579,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":655,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_fromMemory":{"entryPoint":673,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptrt_addresst_addresst_uint256_fromMemory":{"entryPoint":846,"id":null,"parameterSlots":2,"returnSlots":6},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1026,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":1136,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":1114,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":633,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":608,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3733:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:124"},"nodeType":"YulFunctionCall","src":"149:12:124"},"nodeType":"YulExpressionStatement","src":"149:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:124"},"nodeType":"YulFunctionCall","src":"128:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:124"},"nodeType":"YulFunctionCall","src":"124:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:124"},"nodeType":"YulFunctionCall","src":"113:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:124"},"nodeType":"YulFunctionCall","src":"103:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:50:124"},"nodeType":"YulIf","src":"93:70:124"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:124","type":""}],"src":"14:155:124"},{"body":{"nodeType":"YulBlock","src":"206:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"223:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"230:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"235:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"226:3:124"},"nodeType":"YulFunctionCall","src":"226:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"216:6:124"},"nodeType":"YulFunctionCall","src":"216:31:124"},"nodeType":"YulExpressionStatement","src":"216:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"263:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"266:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"256:6:124"},"nodeType":"YulFunctionCall","src":"256:15:124"},"nodeType":"YulExpressionStatement","src":"256:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"287:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"290:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"280:6:124"},"nodeType":"YulFunctionCall","src":"280:15:124"},"nodeType":"YulExpressionStatement","src":"280:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"174:127:124"},{"body":{"nodeType":"YulBlock","src":"366:102:124","statements":[{"nodeType":"YulAssignment","src":"376:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"391:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"385:5:124"},"nodeType":"YulFunctionCall","src":"385:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"376:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"456:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"407:48:124"},"nodeType":"YulFunctionCall","src":"407:55:124"},"nodeType":"YulExpressionStatement","src":"407:55:124"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"345:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"356:5:124","type":""}],"src":"306:162:124"},{"body":{"nodeType":"YulBlock","src":"548:848:124","statements":[{"body":{"nodeType":"YulBlock","src":"597:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"606:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"609:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"599:6:124"},"nodeType":"YulFunctionCall","src":"599:12:124"},"nodeType":"YulExpressionStatement","src":"599:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"576:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"584:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"572:3:124"},"nodeType":"YulFunctionCall","src":"572:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"591:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"568:3:124"},"nodeType":"YulFunctionCall","src":"568:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"561:6:124"},"nodeType":"YulFunctionCall","src":"561:35:124"},"nodeType":"YulIf","src":"558:55:124"},{"nodeType":"YulVariableDeclaration","src":"622:23:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"638:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"632:5:124"},"nodeType":"YulFunctionCall","src":"632:13:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"626:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"654:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"664:4:124","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"658:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"677:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"695:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"699:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"691:3:124"},"nodeType":"YulFunctionCall","src":"691:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"703:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"687:3:124"},"nodeType":"YulFunctionCall","src":"687:18:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"681:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"728:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"730:16:124"},"nodeType":"YulFunctionCall","src":"730:18:124"},"nodeType":"YulExpressionStatement","src":"730:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"720:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"724:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"717:2:124"},"nodeType":"YulFunctionCall","src":"717:10:124"},"nodeType":"YulIf","src":"714:36:124"},{"nodeType":"YulVariableDeclaration","src":"759:20:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"773:1:124","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"776:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"769:3:124"},"nodeType":"YulFunctionCall","src":"769:10:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"763:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"788:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"808:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"802:5:124"},"nodeType":"YulFunctionCall","src":"802:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"792:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"820:56:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"842:6:124"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"858:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"862:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"854:3:124"},"nodeType":"YulFunctionCall","src":"854:11:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"871:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"867:3:124"},"nodeType":"YulFunctionCall","src":"867:7:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:25:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"838:3:124"},"nodeType":"YulFunctionCall","src":"838:38:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"824:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"935:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"937:16:124"},"nodeType":"YulFunctionCall","src":"937:18:124"},"nodeType":"YulExpressionStatement","src":"937:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"894:10:124"},{"name":"_3","nodeType":"YulIdentifier","src":"906:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"891:2:124"},"nodeType":"YulFunctionCall","src":"891:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"914:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"926:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"911:2:124"},"nodeType":"YulFunctionCall","src":"911:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"888:2:124"},"nodeType":"YulFunctionCall","src":"888:46:124"},"nodeType":"YulIf","src":"885:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"973:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"977:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"966:6:124"},"nodeType":"YulFunctionCall","src":"966:22:124"},"nodeType":"YulExpressionStatement","src":"966:22:124"},{"nodeType":"YulVariableDeclaration","src":"997:17:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1008:6:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1001:3:124","type":""}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1030:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1038:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1023:6:124"},"nodeType":"YulFunctionCall","src":"1023:18:124"},"nodeType":"YulExpressionStatement","src":"1023:18:124"},{"nodeType":"YulAssignment","src":"1050:22:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1061:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1069:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:124"},"nodeType":"YulFunctionCall","src":"1057:15:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1050:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"1081:38:124","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1103:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1111:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1099:3:124"},"nodeType":"YulFunctionCall","src":"1099:15:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1095:3:124"},"nodeType":"YulFunctionCall","src":"1095:24:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1085:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1147:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1159:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1149:6:124"},"nodeType":"YulFunctionCall","src":"1149:12:124"},"nodeType":"YulExpressionStatement","src":"1149:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"1134:6:124"},{"name":"end","nodeType":"YulIdentifier","src":"1142:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1131:2:124"},"nodeType":"YulFunctionCall","src":"1131:15:124"},"nodeType":"YulIf","src":"1128:35:124"},{"nodeType":"YulVariableDeclaration","src":"1172:26:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1187:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1195:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1183:3:124"},"nodeType":"YulFunctionCall","src":"1183:15:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"1176:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1263:103:124","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1284:3:124"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1319:3:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1289:29:124"},"nodeType":"YulFunctionCall","src":"1289:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1277:6:124"},"nodeType":"YulFunctionCall","src":"1277:47:124"},"nodeType":"YulExpressionStatement","src":"1277:47:124"},{"nodeType":"YulAssignment","src":"1337:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1348:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1353:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1344:3:124"},"nodeType":"YulFunctionCall","src":"1344:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1337:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1218:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"1223:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1215:2:124"},"nodeType":"YulFunctionCall","src":"1215:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1231:23:124","statements":[{"nodeType":"YulAssignment","src":"1233:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1244:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1249:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:124"},"nodeType":"YulFunctionCall","src":"1240:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"1233:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"1211:3:124","statements":[]},"src":"1207:159:124"},{"nodeType":"YulAssignment","src":"1375:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1384:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1375:5:124"}]}]},"name":"abi_decode_array_address_dyn_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"522:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"530:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"538:5:124","type":""}],"src":"473:923:124"},{"body":{"nodeType":"YulBlock","src":"1648:930:124","statements":[{"body":{"nodeType":"YulBlock","src":"1695:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1704:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1707:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1697:6:124"},"nodeType":"YulFunctionCall","src":"1697:12:124"},"nodeType":"YulExpressionStatement","src":"1697:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1669:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1678:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1665:3:124"},"nodeType":"YulFunctionCall","src":"1665:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1690:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1661:3:124"},"nodeType":"YulFunctionCall","src":"1661:33:124"},"nodeType":"YulIf","src":"1658:53:124"},{"nodeType":"YulVariableDeclaration","src":"1720:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1739:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1733:5:124"},"nodeType":"YulFunctionCall","src":"1733:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1724:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1807:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"1758:48:124"},"nodeType":"YulFunctionCall","src":"1758:55:124"},"nodeType":"YulExpressionStatement","src":"1758:55:124"},{"nodeType":"YulAssignment","src":"1822:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1832:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1822:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1846:39:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1870:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1881:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1866:3:124"},"nodeType":"YulFunctionCall","src":"1866:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1860:5:124"},"nodeType":"YulFunctionCall","src":"1860:25:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1850:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1894:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1912:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1916:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1908:3:124"},"nodeType":"YulFunctionCall","src":"1908:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1920:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1904:3:124"},"nodeType":"YulFunctionCall","src":"1904:18:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1898:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1949:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1958:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1961:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1951:6:124"},"nodeType":"YulFunctionCall","src":"1951:12:124"},"nodeType":"YulExpressionStatement","src":"1951:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1937:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1945:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1934:2:124"},"nodeType":"YulFunctionCall","src":"1934:14:124"},"nodeType":"YulIf","src":"1931:34:124"},{"nodeType":"YulAssignment","src":"1974:82:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2028:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"2039:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2024:3:124"},"nodeType":"YulFunctionCall","src":"2024:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2048:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_fromMemory","nodeType":"YulIdentifier","src":"1984:39:124"},"nodeType":"YulFunctionCall","src":"1984:72:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1974:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2065:41:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2091:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2102:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2087:3:124"},"nodeType":"YulFunctionCall","src":"2087:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2081:5:124"},"nodeType":"YulFunctionCall","src":"2081:25:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2069:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2135:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2144:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2147:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2137:6:124"},"nodeType":"YulFunctionCall","src":"2137:12:124"},"nodeType":"YulExpressionStatement","src":"2137:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"2121:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2131:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2118:2:124"},"nodeType":"YulFunctionCall","src":"2118:16:124"},"nodeType":"YulIf","src":"2115:36:124"},{"nodeType":"YulAssignment","src":"2160:84:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2214:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"2225:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2210:3:124"},"nodeType":"YulFunctionCall","src":"2210:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2236:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_fromMemory","nodeType":"YulIdentifier","src":"2170:39:124"},"nodeType":"YulFunctionCall","src":"2170:74:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2160:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2253:40:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2278:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2289:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2274:3:124"},"nodeType":"YulFunctionCall","src":"2274:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2268:5:124"},"nodeType":"YulFunctionCall","src":"2268:25:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2257:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2351:7:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"2302:48:124"},"nodeType":"YulFunctionCall","src":"2302:57:124"},"nodeType":"YulExpressionStatement","src":"2302:57:124"},{"nodeType":"YulAssignment","src":"2368:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2378:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2368:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2394:41:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2419:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2430:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2415:3:124"},"nodeType":"YulFunctionCall","src":"2415:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2409:5:124"},"nodeType":"YulFunctionCall","src":"2409:26:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"2398:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2493:7:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"2444:48:124"},"nodeType":"YulFunctionCall","src":"2444:57:124"},"nodeType":"YulExpressionStatement","src":"2444:57:124"},{"nodeType":"YulAssignment","src":"2510:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"2520:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2510:6:124"}]},{"nodeType":"YulAssignment","src":"2536:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2556:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2567:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2552:3:124"},"nodeType":"YulFunctionCall","src":"2552:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2546:5:124"},"nodeType":"YulFunctionCall","src":"2546:26:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2536:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptrt_addresst_addresst_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1574:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1585:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1597:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1605:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1613:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1621:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1629:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1637:6:124","type":""}],"src":"1401:1177:124"},{"body":{"nodeType":"YulBlock","src":"2684:76:124","statements":[{"nodeType":"YulAssignment","src":"2694:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2706:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2717:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2702:3:124"},"nodeType":"YulFunctionCall","src":"2702:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2694:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2736:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2747:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2729:6:124"},"nodeType":"YulFunctionCall","src":"2729:25:124"},"nodeType":"YulExpressionStatement","src":"2729:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2653:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2664:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2675:4:124","type":""}],"src":"2583:177:124"},{"body":{"nodeType":"YulBlock","src":"2886:476:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2896:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2906:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2900:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2924:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2935:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2917:6:124"},"nodeType":"YulFunctionCall","src":"2917:21:124"},"nodeType":"YulExpressionStatement","src":"2917:21:124"},{"nodeType":"YulVariableDeclaration","src":"2947:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2967:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2961:5:124"},"nodeType":"YulFunctionCall","src":"2961:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2951:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2994:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3005:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2990:3:124"},"nodeType":"YulFunctionCall","src":"2990:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"3010:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2983:6:124"},"nodeType":"YulFunctionCall","src":"2983:34:124"},"nodeType":"YulExpressionStatement","src":"2983:34:124"},{"nodeType":"YulVariableDeclaration","src":"3026:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3035:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3030:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3095:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3124:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"3135:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3120:3:124"},"nodeType":"YulFunctionCall","src":"3120:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"3139:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3116:3:124"},"nodeType":"YulFunctionCall","src":"3116:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3158:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"3166:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3154:3:124"},"nodeType":"YulFunctionCall","src":"3154:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3170:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3150:3:124"},"nodeType":"YulFunctionCall","src":"3150:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3144:5:124"},"nodeType":"YulFunctionCall","src":"3144:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3109:6:124"},"nodeType":"YulFunctionCall","src":"3109:66:124"},"nodeType":"YulExpressionStatement","src":"3109:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3056:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"3059:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3053:2:124"},"nodeType":"YulFunctionCall","src":"3053:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3067:19:124","statements":[{"nodeType":"YulAssignment","src":"3069:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3078:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3081:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3074:3:124"},"nodeType":"YulFunctionCall","src":"3074:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3069:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"3049:3:124","statements":[]},"src":"3045:140:124"},{"body":{"nodeType":"YulBlock","src":"3219:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3248:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"3259:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3244:3:124"},"nodeType":"YulFunctionCall","src":"3244:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"3268:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3240:3:124"},"nodeType":"YulFunctionCall","src":"3240:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"3273:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3233:6:124"},"nodeType":"YulFunctionCall","src":"3233:42:124"},"nodeType":"YulExpressionStatement","src":"3233:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3200:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"3203:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3197:2:124"},"nodeType":"YulFunctionCall","src":"3197:13:124"},"nodeType":"YulIf","src":"3194:91:124"},{"nodeType":"YulAssignment","src":"3294:62:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3310:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3329:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3337:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3325:3:124"},"nodeType":"YulFunctionCall","src":"3325:15:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3346:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3342:3:124"},"nodeType":"YulFunctionCall","src":"3342:7:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3321:3:124"},"nodeType":"YulFunctionCall","src":"3321:29:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3306:3:124"},"nodeType":"YulFunctionCall","src":"3306:45:124"},{"kind":"number","nodeType":"YulLiteral","src":"3353:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3302:3:124"},"nodeType":"YulFunctionCall","src":"3302:54:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3294:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2855:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2866:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2877:4:124","type":""}],"src":"2765:597:124"},{"body":{"nodeType":"YulBlock","src":"3399:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3416:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3423:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3428:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3419:3:124"},"nodeType":"YulFunctionCall","src":"3419:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3409:6:124"},"nodeType":"YulFunctionCall","src":"3409:31:124"},"nodeType":"YulExpressionStatement","src":"3409:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3456:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3459:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3449:6:124"},"nodeType":"YulFunctionCall","src":"3449:15:124"},"nodeType":"YulExpressionStatement","src":"3449:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3480:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3483:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3473:6:124"},"nodeType":"YulFunctionCall","src":"3473:15:124"},"nodeType":"YulExpressionStatement","src":"3473:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3367:127:124"},{"body":{"nodeType":"YulBlock","src":"3546:185:124","statements":[{"body":{"nodeType":"YulBlock","src":"3585:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3606:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3613:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3618:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3609:3:124"},"nodeType":"YulFunctionCall","src":"3609:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3599:6:124"},"nodeType":"YulFunctionCall","src":"3599:31:124"},"nodeType":"YulExpressionStatement","src":"3599:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3650:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3653:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3643:6:124"},"nodeType":"YulFunctionCall","src":"3643:15:124"},"nodeType":"YulExpressionStatement","src":"3643:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3678:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3681:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3671:6:124"},"nodeType":"YulFunctionCall","src":"3671:15:124"},"nodeType":"YulExpressionStatement","src":"3671:15:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3562:5:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3573:1:124","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3569:3:124"},"nodeType":"YulFunctionCall","src":"3569:6:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3559:2:124"},"nodeType":"YulFunctionCall","src":"3559:17:124"},"nodeType":"YulIf","src":"3556:140:124"},{"nodeType":"YulAssignment","src":"3705:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3716:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3723:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3712:3:124"},"nodeType":"YulFunctionCall","src":"3712:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"3705:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3528:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"3538:3:124","type":""}],"src":"3499:232:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IPoolAddressesProvider(value)\n    }\n    function abi_decode_array_address_dyn_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := 0x20\n        let _3 := sub(shl(64, 1), 1)\n        if gt(_1, _3) { panic_error_0x41() }\n        let _4 := shl(5, _1)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(_4, 63), not(31)))\n        if or(gt(newFreePtr, _3), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        mstore(memPtr, _1)\n        dst := add(memPtr, _2)\n        let srcEnd := add(add(offset, _4), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, abi_decode_address_fromMemory(src))\n            dst := add(dst, _2)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptrt_addresst_addresst_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value1 := abi_decode_array_address_dyn_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value2 := abi_decode_array_address_dyn_fromMemory(add(headStart, offset_1), dataEnd)\n        let value_1 := mload(add(headStart, 96))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        value3 := value_1\n        let value_2 := mload(add(headStart, 128))\n        validator_revert_contract_IPoolAddressesProvider(value_2)\n        value4 := value_2\n        value5 := mload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e06040523480156200001157600080fd5b506040516200122b3803806200122b83398101604081905262000034916200034e565b6001600160a01b0386166080526200004c83620000ab565b620000588585620000f5565b6001600160a01b03821660a081905260c08290526040518281527fe27c4c1372396a3d15a9922f74f9dfc7c72b1ad6d63868470787249c356454c19060200160405180910390a25050505050506200049a565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fce7a780d33665b1ea097af5f155e3821b809ecbaa839d3b33aa83ba28168cefb90600090a250565b8051825114604051806040016040528060028152602001611b9b60f11b815250906200013f5760405162461bcd60e51b815260040162000136919062000402565b60405180910390fd5b5060005b82518110156200025b578181815181106200016257620001626200045a565b60200260200101516000808584815181106200018257620001826200045a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818181518110620001e357620001e36200045a565b60200260200101516001600160a01b03168382815181106200020957620002096200045a565b60200260200101516001600160a01b03167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a380620002528162000470565b91505062000143565b505050565b6001600160a01b03811681146200027657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200029c8162000260565b919050565b600082601f830112620002b357600080fd5b815160206001600160401b0380831115620002d257620002d262000279565b8260051b604051601f19603f83011681018181108482111715620002fa57620002fa62000279565b6040529384528581018301938381019250878511156200031957600080fd5b83870191505b84821015620003435762000333826200028f565b835291830191908301906200031f565b979650505050505050565b60008060008060008060c087890312156200036857600080fd5b8651620003758162000260565b60208801519096506001600160401b03808211156200039357600080fd5b620003a18a838b01620002a1565b96506040890151915080821115620003b857600080fd5b50620003c789828a01620002a1565b9450506060870151620003da8162000260565b6080880151909350620003ed8162000260565b8092505060a087015190509295509295509295565b600060208083528351808285015260005b81811015620004315785810183015185820160400152820162000413565b8181111562000444576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200049357634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c051610d4d620004de6000396000818161013101526103a50152600081816101e5015261037a01526000818160ad01526105a30152610d4d6000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806392bf2be011610076578063abfd53101161005b578063abfd5310146101ba578063b3596f07146101cd578063e19f4700146101e057600080fd5b806392bf2be0146101615780639d23d9f21461019a57600080fd5b80630542975c146100a8578063170aee73146100f95780636210308c1461010e5780638c89b64f1461012c575b600080fd5b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010c610107366004610a33565b610207565b005b60015473ffffffffffffffffffffffffffffffffffffffff166100cf565b6101537f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100f0565b6100cf61016f366004610a33565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020541690565b6101ad6101a8366004610a9c565b61021b565b6040516100f09190610ade565b61010c6101c8366004610b22565b6102d0565b6101536101db366004610a33565b61034b565b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b61020f61059f565b610218816107d0565b50565b606060008267ffffffffffffffff81111561023857610238610b8e565b604051908082528060200260200182016040528015610261578160200160208202803683370190505b50905060005b838110156102c85761029985858381811061028457610284610bbd565b90506020020160208101906101db9190610a33565b8282815181106102ab576102ab610bbd565b6020908102919091010152806102c081610bec565b915050610267565b509392505050565b6102d861059f565b6103458484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061083f92505050565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8082166000818152602081905260408120549092908116917f000000000000000000000000000000000000000000000000000000000000000090911614156103ca57507f000000000000000000000000000000000000000000000000000000000000000092915050565b73ffffffffffffffffffffffffffffffffffffffff8116610480576001546040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063b3596f0790602401602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190610c4c565b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f19190610c4c565b90506000811315610503579392505050565b6001546040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063b3596f0790602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610c4c565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106309190610c65565b6040517f13ee32e000000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906313ee32e090602401602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c19190610c82565b8061075557506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015610731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190610c82565b6040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250906107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39190610ca4565b60405180910390fd5b5050565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fce7a780d33665b1ea097af5f155e3821b809ecbaa839d3b33aa83ba28168cefb90600090a250565b80518251146040518060400160405280600281526020017f3736000000000000000000000000000000000000000000000000000000000000815250906108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39190610ca4565b5060005b8251811015610a0c578181815181106108d1576108d1610bbd565b60200260200101516000808584815181106108ee576108ee610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081818151811061098057610980610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168382815181106109b0576109b0610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a380610a0481610bec565b9150506108b6565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461021857600080fd5b600060208284031215610a4557600080fd5b813561047981610a11565b60008083601f840112610a6257600080fd5b50813567ffffffffffffffff811115610a7a57600080fd5b6020830191508360208260051b8501011115610a9557600080fd5b9250929050565b60008060208385031215610aaf57600080fd5b823567ffffffffffffffff811115610ac657600080fd5b610ad285828601610a50565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015610b1657835183529284019291840191600101610afa565b50909695505050505050565b60008060008060408587031215610b3857600080fd5b843567ffffffffffffffff80821115610b5057600080fd5b610b5c88838901610a50565b90965094506020870135915080821115610b7557600080fd5b50610b8287828801610a50565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c45577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600060208284031215610c5e57600080fd5b5051919050565b600060208284031215610c7757600080fd5b815161047981610a11565b600060208284031215610c9457600080fd5b8151801515811461047957600080fd5b600060208083528351808285015260005b81811015610cd157858101830151858201604001528201610cb5565b81811115610ce3576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212206d11581d90e2c001849c900cb0a1bbec73d0959df8b4bbde17089057d8d95f5f64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x122B CODESIZE SUB DUP1 PUSH3 0x122B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x34E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x80 MSTORE PUSH3 0x4C DUP4 PUSH3 0xAB JUMP JUMPDEST PUSH3 0x58 DUP6 DUP6 PUSH3 0xF5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0xA0 DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 SWAP1 MSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xE27C4C1372396A3D15A9922F74F9DFC7C72B1AD6D63868470787249C356454C1 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP PUSH3 0x49A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCE7A780D33665B1EA097AF5F155E3821B809ECBAA839D3B33AA83BA28168CEFB SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B9B PUSH1 0xF1 SHL DUP2 MSTORE POP SWAP1 PUSH3 0x13F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x136 SWAP2 SWAP1 PUSH3 0x402 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0x25B JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x162 JUMPI PUSH3 0x162 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x182 JUMPI PUSH3 0x182 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x1E3 JUMPI PUSH3 0x1E3 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x209 JUMPI PUSH3 0x209 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x22C5B7B2D8561D39F7F210B6B326A1AA69F15311163082308AC4877DB6339DC1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH3 0x252 DUP2 PUSH3 0x470 JUMP JUMPDEST SWAP2 POP POP PUSH3 0x143 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x276 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 MLOAD PUSH3 0x29C DUP2 PUSH3 0x260 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP4 GT ISZERO PUSH3 0x2D2 JUMPI PUSH3 0x2D2 PUSH3 0x279 JUMP JUMPDEST DUP3 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH3 0x2FA JUMPI PUSH3 0x2FA PUSH3 0x279 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP4 DUP5 MSTORE DUP6 DUP2 ADD DUP4 ADD SWAP4 DUP4 DUP2 ADD SWAP3 POP DUP8 DUP6 GT ISZERO PUSH3 0x319 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP2 POP JUMPDEST DUP5 DUP3 LT ISZERO PUSH3 0x343 JUMPI PUSH3 0x333 DUP3 PUSH3 0x28F JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH3 0x31F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH3 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD PUSH3 0x375 DUP2 PUSH3 0x260 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3A1 DUP11 DUP4 DUP12 ADD PUSH3 0x2A1 JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x3B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x3C7 DUP10 DUP3 DUP11 ADD PUSH3 0x2A1 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 DUP8 ADD MLOAD PUSH3 0x3DA DUP2 PUSH3 0x260 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x3ED DUP2 PUSH3 0x260 JUMP JUMPDEST DUP1 SWAP3 POP POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x431 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH3 0x413 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH3 0x444 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH3 0x493 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0xD4D PUSH3 0x4DE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x131 ADD MSTORE PUSH2 0x3A5 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1E5 ADD MSTORE PUSH2 0x37A ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0xAD ADD MSTORE PUSH2 0x5A3 ADD MSTORE PUSH2 0xD4D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x92BF2BE0 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xABFD5310 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xABFD5310 EQ PUSH2 0x1BA JUMPI DUP1 PUSH4 0xB3596F07 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0xE19F4700 EQ PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x92BF2BE0 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0x9D23D9F2 EQ PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x170AEE73 EQ PUSH2 0xF9 JUMPI DUP1 PUSH4 0x6210308C EQ PUSH2 0x10E JUMPI DUP1 PUSH4 0x8C89B64F EQ PUSH2 0x12C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x10C PUSH2 0x107 CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x207 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCF JUMP JUMPDEST PUSH2 0x153 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF0 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x1AD PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xA9C JUMP JUMPDEST PUSH2 0x21B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF0 SWAP2 SWAP1 PUSH2 0xADE JUMP JUMPDEST PUSH2 0x10C PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB22 JUMP JUMPDEST PUSH2 0x2D0 JUMP JUMPDEST PUSH2 0x153 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x34B JUMP JUMPDEST PUSH2 0xCF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH2 0x59F JUMP JUMPDEST PUSH2 0x218 DUP2 PUSH2 0x7D0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x238 JUMPI PUSH2 0x238 PUSH2 0xB8E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x261 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C8 JUMPI PUSH2 0x299 DUP6 DUP6 DUP4 DUP2 DUP2 LT PUSH2 0x284 JUMPI PUSH2 0x284 PUSH2 0xBBD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1DB SWAP2 SWAP1 PUSH2 0xA33 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2AB JUMPI PUSH2 0x2AB PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP1 PUSH2 0x2C0 DUP2 PUSH2 0xBEC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x267 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2D8 PUSH2 0x59F JUMP JUMPDEST PUSH2 0x345 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP9 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP8 DUP3 MSTORE SWAP1 SWAP4 POP DUP8 SWAP3 POP DUP7 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x83F SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP3 SWAP1 DUP2 AND SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND EQ ISZERO PUSH2 0x3CA JUMPI POP PUSH32 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x480 JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x455 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x479 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F1 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT ISZERO PUSH2 0x503 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x597 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x60C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x630 SWAP2 SWAP1 PUSH2 0xC65 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x13EE32E000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x13EE32E0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x69D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6C1 SWAP2 SWAP1 PUSH2 0xC82 JUMP JUMPDEST DUP1 PUSH2 0x755 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x731 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x755 SWAP2 SWAP1 PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x7CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C3 SWAP2 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCE7A780D33665B1EA097AF5F155E3821B809ECBAA839D3B33AA83BA28168CEFB SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3736000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x8B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C3 SWAP2 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xA0C JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x8D1 JUMPI PUSH2 0x8D1 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8EE JUMPI PUSH2 0x8EE PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x980 JUMPI PUSH2 0x980 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9B0 JUMPI PUSH2 0x9B0 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x22C5B7B2D8561D39F7F210B6B326A1AA69F15311163082308AC4877DB6339DC1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH2 0xA04 DUP2 PUSH2 0xBEC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8B6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x479 DUP2 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xA62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xA95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAD2 DUP6 DUP3 DUP7 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB16 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xAFA JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB5C DUP9 DUP4 DUP10 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB82 DUP8 DUP3 DUP9 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xC45 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x479 DUP2 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCD1 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xCB5 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xCE3 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH14 0x11581D90E2C001849C900CB0A1BB 0xEC PUSH20 0xD0959DF8B4BBDE17089057D8D95F5F64736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"824:4242:54:-:0;;;1897:451;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2099:29:54;;;;2134:34;2153:14;2134:18;:34::i;:::-;2174;2192:6;2200:7;2174:17;:34::i;:::-;-1:-1:-1;;;;;2214:28:54;;;;;;2248:37;;;;2296:47;;2729:25:124;;;2296:47:54;;2717:2:124;2702:18;2296:47:54;;;;;;;1897:451;;;;;;824:4242;;3424:172;3491:15;:52;;-1:-1:-1;;;;;;3491:52:54;-1:-1:-1;;;;;3491:52:54;;;;;;;;3554:37;;;;-1:-1:-1;;3554:37:54;3424:172;:::o;2939:349::-;3057:7;:14;3040:6;:13;:31;3073:33;;;;;;;;;;;;;-1:-1:-1;;;3073:33:54;;;3032:75;;;;;-1:-1:-1;;;3032:75:54;;;;;;;;:::i;:::-;;;;;;;;;;3118:9;3113:171;3137:6;:13;3133:1;:17;3113:171;;;3212:7;3220:1;3212:10;;;;;;;;:::i;:::-;;;;;;;3165:13;:24;3179:6;3186:1;3179:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3165:24:54;-1:-1:-1;;;;;3165:24:54;;;;;;;;;;;;;:58;;;;;-1:-1:-1;;;;;3165:58:54;;;;;-1:-1:-1;;;;;3165:58:54;;;;;;3266:7;3274:1;3266:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3236:41:54;3255:6;3262:1;3255:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3236:41:54;;;;;;;;;;;3152:3;;;;:::i;:::-;;;;3113:171;;;;2939:349;;:::o;14:155:124:-;-1:-1:-1;;;;;113:31:124;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:127::-;235:10;230:3;226:20;223:1;216:31;266:4;263:1;256:15;290:4;287:1;280:15;306:162;385:13;;407:55;385:13;407:55;:::i;:::-;306:162;;;:::o;473:923::-;538:5;591:3;584:4;576:6;572:17;568:27;558:55;;609:1;606;599:12;558:55;632:13;;664:4;-1:-1:-1;;;;;717:10:124;;;714:36;;;730:18;;:::i;:::-;776:2;773:1;769:10;808:2;802:9;871:2;867:7;862:2;858;854:11;850:25;842:6;838:38;926:6;914:10;911:22;906:2;894:10;891:18;888:46;885:72;;;937:18;;:::i;:::-;973:2;966:22;1023:18;;;1099:15;;;1095:24;;;1057:15;;;;-1:-1:-1;1131:15:124;;;1128:35;;;1159:1;1156;1149:12;1128:35;1195:2;1187:6;1183:15;1172:26;;1207:159;1223:6;1218:3;1215:15;1207:159;;;1289:34;1319:3;1289:34;:::i;:::-;1277:47;;1344:12;;;;1240;;;;1207:159;;;1384:6;473:923;-1:-1:-1;;;;;;;473:923:124:o;1401:1177::-;1597:6;1605;1613;1621;1629;1637;1690:3;1678:9;1669:7;1665:23;1661:33;1658:53;;;1707:1;1704;1697:12;1658:53;1739:9;1733:16;1758:55;1807:5;1758:55;:::i;:::-;1881:2;1866:18;;1860:25;1832:5;;-1:-1:-1;;;;;;1934:14:124;;;1931:34;;;1961:1;1958;1951:12;1931:34;1984:72;2048:7;2039:6;2028:9;2024:22;1984:72;:::i;:::-;1974:82;;2102:2;2091:9;2087:18;2081:25;2065:41;;2131:2;2121:8;2118:16;2115:36;;;2147:1;2144;2137:12;2115:36;;2170:74;2236:7;2225:8;2214:9;2210:24;2170:74;:::i;:::-;2160:84;;;2289:2;2278:9;2274:18;2268:25;2302:57;2351:7;2302:57;:::i;:::-;2430:3;2415:19;;2409:26;2378:7;;-1:-1:-1;2444:57:124;2409:26;2444:57;:::i;:::-;2520:7;2510:17;;;2567:3;2556:9;2552:19;2546:26;2536:36;;1401:1177;;;;;;;;:::o;2765:597::-;2877:4;2906:2;2935;2924:9;2917:21;2967:6;2961:13;3010:6;3005:2;2994:9;2990:18;2983:34;3035:1;3045:140;3059:6;3056:1;3053:13;3045:140;;;3154:14;;;3150:23;;3144:30;3120:17;;;3139:2;3116:26;3109:66;3074:10;;3045:140;;;3203:6;3200:1;3197:13;3194:91;;;3273:1;3268:2;3259:6;3248:9;3244:22;3240:31;3233:42;3194:91;-1:-1:-1;3346:2:124;3325:15;-1:-1:-1;;3321:29:124;3306:45;;;;3353:2;3302:54;;2765:597;-1:-1:-1;;;2765:597:124:o;3367:127::-;3428:10;3423:3;3419:20;3416:1;3409:31;3459:4;3456:1;3449:15;3483:4;3480:1;3473:15;3499:232;3538:3;-1:-1:-1;;3559:17:124;;3556:140;;;3618:10;3613:3;3609:20;3606:1;3599:31;3653:4;3650:1;3643:15;3681:4;3678:1;3671:15;3556:140;-1:-1:-1;3723:1:124;3712:13;;3499:232::o;:::-;824:4242:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_6406":{"entryPoint":null,"id":6406,"parameterSlots":0,"returnSlots":0},"@BASE_CURRENCY_6417":{"entryPoint":null,"id":6417,"parameterSlots":0,"returnSlots":0},"@BASE_CURRENCY_UNIT_6420":{"entryPoint":null,"id":6420,"parameterSlots":0,"returnSlots":0},"@_onlyAssetListingOrPoolAdmins_6749":{"entryPoint":1439,"id":6749,"parameterSlots":0,"returnSlots":0},"@_setAssetsSources_6562":{"entryPoint":2111,"id":6562,"parameterSlots":2,"returnSlots":0},"@_setFallbackOracle_6579":{"entryPoint":2000,"id":6579,"parameterSlots":1,"returnSlots":0},"@getAssetPrice_6642":{"entryPoint":843,"id":6642,"parameterSlots":1,"returnSlots":1},"@getAssetsPrices_6691":{"entryPoint":539,"id":6691,"parameterSlots":2,"returnSlots":1},"@getFallbackOracle_6720":{"entryPoint":null,"id":6720,"parameterSlots":0,"returnSlots":1},"@getSourceOfAsset_6708":{"entryPoint":null,"id":6708,"parameterSlots":1,"returnSlots":1},"@setAssetSources_6493":{"entryPoint":720,"id":6493,"parameterSlots":4,"returnSlots":0},"@setFallbackOracle_6507":{"entryPoint":519,"id":6507,"parameterSlots":1,"returnSlots":0},"abi_decode_array_address_dyn_calldata":{"entryPoint":2640,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":2611,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":3173,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":2716,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr":{"entryPoint":2850,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":3202,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_int256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":3148,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":2782,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3236,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":3052,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":3005,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":2958,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":2577,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5634:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"321:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:124"},"nodeType":"YulFunctionCall","src":"410:12:124"},"nodeType":"YulExpressionStatement","src":"410:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"344:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"355:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"362:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"351:3:124"},"nodeType":"YulFunctionCall","src":"351:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"341:2:124"},"nodeType":"YulFunctionCall","src":"341:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"334:6:124"},"nodeType":"YulFunctionCall","src":"334:73:124"},"nodeType":"YulIf","src":"331:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"310:5:124","type":""}],"src":"276:154:124"},{"body":{"nodeType":"YulBlock","src":"505:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"551:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"560:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"563:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"553:6:124"},"nodeType":"YulFunctionCall","src":"553:12:124"},"nodeType":"YulExpressionStatement","src":"553:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"526:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"535:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"522:3:124"},"nodeType":"YulFunctionCall","src":"522:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"547:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"518:3:124"},"nodeType":"YulFunctionCall","src":"518:32:124"},"nodeType":"YulIf","src":"515:52:124"},{"nodeType":"YulVariableDeclaration","src":"576:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"602:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"589:12:124"},"nodeType":"YulFunctionCall","src":"589:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"580:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"646:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"621:24:124"},"nodeType":"YulFunctionCall","src":"621:31:124"},"nodeType":"YulExpressionStatement","src":"621:31:124"},{"nodeType":"YulAssignment","src":"661:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"671:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"661:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"471:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"482:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"494:6:124","type":""}],"src":"435:247:124"},{"body":{"nodeType":"YulBlock","src":"788:125:124","statements":[{"nodeType":"YulAssignment","src":"798:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"810:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"821:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"806:3:124"},"nodeType":"YulFunctionCall","src":"806:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"798:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"840:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"855:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"863:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"851:3:124"},"nodeType":"YulFunctionCall","src":"851:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:74:124"},"nodeType":"YulExpressionStatement","src":"833:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"757:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"768:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"779:4:124","type":""}],"src":"687:226:124"},{"body":{"nodeType":"YulBlock","src":"1019:76:124","statements":[{"nodeType":"YulAssignment","src":"1029:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1041:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1052:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1037:3:124"},"nodeType":"YulFunctionCall","src":"1037:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1029:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1071:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1082:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1064:6:124"},"nodeType":"YulFunctionCall","src":"1064:25:124"},"nodeType":"YulExpressionStatement","src":"1064:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"988:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"999:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1010:4:124","type":""}],"src":"918:177:124"},{"body":{"nodeType":"YulBlock","src":"1184:283:124","statements":[{"body":{"nodeType":"YulBlock","src":"1233:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1242:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1245:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1235:6:124"},"nodeType":"YulFunctionCall","src":"1235:12:124"},"nodeType":"YulExpressionStatement","src":"1235:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1212:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1220:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1208:3:124"},"nodeType":"YulFunctionCall","src":"1208:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"1227:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1204:3:124"},"nodeType":"YulFunctionCall","src":"1204:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1197:6:124"},"nodeType":"YulFunctionCall","src":"1197:35:124"},"nodeType":"YulIf","src":"1194:55:124"},{"nodeType":"YulAssignment","src":"1258:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1281:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1268:12:124"},"nodeType":"YulFunctionCall","src":"1268:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1258:6:124"}]},{"body":{"nodeType":"YulBlock","src":"1331:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1340:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1343:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1333:6:124"},"nodeType":"YulFunctionCall","src":"1333:12:124"},"nodeType":"YulExpressionStatement","src":"1333:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1303:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1311:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1300:2:124"},"nodeType":"YulFunctionCall","src":"1300:30:124"},"nodeType":"YulIf","src":"1297:50:124"},{"nodeType":"YulAssignment","src":"1356:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1372:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1380:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:124"},"nodeType":"YulFunctionCall","src":"1368:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"1356:8:124"}]},{"body":{"nodeType":"YulBlock","src":"1445:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1454:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1457:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1447:6:124"},"nodeType":"YulFunctionCall","src":"1447:12:124"},"nodeType":"YulExpressionStatement","src":"1447:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1408:6:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1420:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1423:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1416:3:124"},"nodeType":"YulFunctionCall","src":"1416:14:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1404:3:124"},"nodeType":"YulFunctionCall","src":"1404:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"1433:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1400:3:124"},"nodeType":"YulFunctionCall","src":"1400:38:124"},{"name":"end","nodeType":"YulIdentifier","src":"1440:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1397:2:124"},"nodeType":"YulFunctionCall","src":"1397:47:124"},"nodeType":"YulIf","src":"1394:67:124"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1147:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"1155:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"1163:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"1173:6:124","type":""}],"src":"1100:367:124"},{"body":{"nodeType":"YulBlock","src":"1577:332:124","statements":[{"body":{"nodeType":"YulBlock","src":"1623:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1632:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1635:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1625:6:124"},"nodeType":"YulFunctionCall","src":"1625:12:124"},"nodeType":"YulExpressionStatement","src":"1625:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1598:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1607:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1594:3:124"},"nodeType":"YulFunctionCall","src":"1594:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1619:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1590:3:124"},"nodeType":"YulFunctionCall","src":"1590:32:124"},"nodeType":"YulIf","src":"1587:52:124"},{"nodeType":"YulVariableDeclaration","src":"1648:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1675:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1662:12:124"},"nodeType":"YulFunctionCall","src":"1662:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1652:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1728:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1737:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1740:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1730:6:124"},"nodeType":"YulFunctionCall","src":"1730:12:124"},"nodeType":"YulExpressionStatement","src":"1730:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1700:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1708:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1697:2:124"},"nodeType":"YulFunctionCall","src":"1697:30:124"},"nodeType":"YulIf","src":"1694:50:124"},{"nodeType":"YulVariableDeclaration","src":"1753:96:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1821:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1832:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1817:3:124"},"nodeType":"YulFunctionCall","src":"1817:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1841:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"1779:37:124"},"nodeType":"YulFunctionCall","src":"1779:70:124"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"1757:8:124","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"1767:8:124","type":""}]},{"nodeType":"YulAssignment","src":"1858:18:124","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"1868:8:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1858:6:124"}]},{"nodeType":"YulAssignment","src":"1885:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1895:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1885:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1535:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1546:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1558:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1566:6:124","type":""}],"src":"1472:437:124"},{"body":{"nodeType":"YulBlock","src":"2065:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2075:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2085:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2079:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2096:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2114:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2125:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2110:3:124"},"nodeType":"YulFunctionCall","src":"2110:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"2100:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2144:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2155:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2137:6:124"},"nodeType":"YulFunctionCall","src":"2137:21:124"},"nodeType":"YulExpressionStatement","src":"2137:21:124"},{"nodeType":"YulVariableDeclaration","src":"2167:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"2178:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"2171:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2193:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2213:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2207:5:124"},"nodeType":"YulFunctionCall","src":"2207:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2197:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2236:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"2244:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2229:6:124"},"nodeType":"YulFunctionCall","src":"2229:22:124"},"nodeType":"YulExpressionStatement","src":"2229:22:124"},{"nodeType":"YulAssignment","src":"2260:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2271:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2282:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2267:3:124"},"nodeType":"YulFunctionCall","src":"2267:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2260:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"2294:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2312:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2320:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2308:3:124"},"nodeType":"YulFunctionCall","src":"2308:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"2298:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2332:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2341:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2336:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2400:120:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2421:3:124"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2432:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2426:5:124"},"nodeType":"YulFunctionCall","src":"2426:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2414:6:124"},"nodeType":"YulFunctionCall","src":"2414:26:124"},"nodeType":"YulExpressionStatement","src":"2414:26:124"},{"nodeType":"YulAssignment","src":"2453:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2464:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2469:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2460:3:124"},"nodeType":"YulFunctionCall","src":"2460:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2453:3:124"}]},{"nodeType":"YulAssignment","src":"2485:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2499:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2507:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2495:3:124"},"nodeType":"YulFunctionCall","src":"2495:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2485:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2362:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2365:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2359:2:124"},"nodeType":"YulFunctionCall","src":"2359:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2373:18:124","statements":[{"nodeType":"YulAssignment","src":"2375:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2384:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"2387:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2380:3:124"},"nodeType":"YulFunctionCall","src":"2380:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2375:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2355:3:124","statements":[]},"src":"2351:169:124"},{"nodeType":"YulAssignment","src":"2529:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"2537:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2529:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2034:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2045:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2056:4:124","type":""}],"src":"1914:632:124"},{"body":{"nodeType":"YulBlock","src":"2708:616:124","statements":[{"body":{"nodeType":"YulBlock","src":"2754:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2763:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2766:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2756:6:124"},"nodeType":"YulFunctionCall","src":"2756:12:124"},"nodeType":"YulExpressionStatement","src":"2756:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2729:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2738:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2725:3:124"},"nodeType":"YulFunctionCall","src":"2725:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2750:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2721:3:124"},"nodeType":"YulFunctionCall","src":"2721:32:124"},"nodeType":"YulIf","src":"2718:52:124"},{"nodeType":"YulVariableDeclaration","src":"2779:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2806:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2793:12:124"},"nodeType":"YulFunctionCall","src":"2793:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2783:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2825:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2835:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2829:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2880:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2889:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2892:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2882:6:124"},"nodeType":"YulFunctionCall","src":"2882:12:124"},"nodeType":"YulExpressionStatement","src":"2882:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2868:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2876:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2865:2:124"},"nodeType":"YulFunctionCall","src":"2865:14:124"},"nodeType":"YulIf","src":"2862:34:124"},{"nodeType":"YulVariableDeclaration","src":"2905:96:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2973:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"2984:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2969:3:124"},"nodeType":"YulFunctionCall","src":"2969:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2993:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"2931:37:124"},"nodeType":"YulFunctionCall","src":"2931:70:124"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"2909:8:124","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"2919:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3010:18:124","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3020:8:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3010:6:124"}]},{"nodeType":"YulAssignment","src":"3037:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3047:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3037:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3064:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3097:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3108:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3093:3:124"},"nodeType":"YulFunctionCall","src":"3093:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3080:12:124"},"nodeType":"YulFunctionCall","src":"3080:32:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3068:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3141:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3153:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3143:6:124"},"nodeType":"YulFunctionCall","src":"3143:12:124"},"nodeType":"YulExpressionStatement","src":"3143:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3127:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3137:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3124:2:124"},"nodeType":"YulFunctionCall","src":"3124:16:124"},"nodeType":"YulIf","src":"3121:36:124"},{"nodeType":"YulVariableDeclaration","src":"3166:98:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3245:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:124"},"nodeType":"YulFunctionCall","src":"3230:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3256:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"3192:37:124"},"nodeType":"YulFunctionCall","src":"3192:72:124"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"3170:8:124","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"3180:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3273:18:124","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"3283:8:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3273:6:124"}]},{"nodeType":"YulAssignment","src":"3300:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"3310:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3300:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2650:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2661:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2673:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2681:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2689:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2697:6:124","type":""}],"src":"2551:773:124"},{"body":{"nodeType":"YulBlock","src":"3361:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3378:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3381:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3371:6:124"},"nodeType":"YulFunctionCall","src":"3371:88:124"},"nodeType":"YulExpressionStatement","src":"3371:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3475:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3478:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3468:6:124"},"nodeType":"YulFunctionCall","src":"3468:15:124"},"nodeType":"YulExpressionStatement","src":"3468:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3499:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3502:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3492:6:124"},"nodeType":"YulFunctionCall","src":"3492:15:124"},"nodeType":"YulExpressionStatement","src":"3492:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"3329:184:124"},{"body":{"nodeType":"YulBlock","src":"3550:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3567:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3570:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3560:6:124"},"nodeType":"YulFunctionCall","src":"3560:88:124"},"nodeType":"YulExpressionStatement","src":"3560:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3664:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3667:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3657:6:124"},"nodeType":"YulFunctionCall","src":"3657:15:124"},"nodeType":"YulExpressionStatement","src":"3657:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3688:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3691:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3681:6:124"},"nodeType":"YulFunctionCall","src":"3681:15:124"},"nodeType":"YulExpressionStatement","src":"3681:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3518:184:124"},{"body":{"nodeType":"YulBlock","src":"3754:302:124","statements":[{"body":{"nodeType":"YulBlock","src":"3853:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3874:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3877:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3867:6:124"},"nodeType":"YulFunctionCall","src":"3867:88:124"},"nodeType":"YulExpressionStatement","src":"3867:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3975:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3978:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3968:6:124"},"nodeType":"YulFunctionCall","src":"3968:15:124"},"nodeType":"YulExpressionStatement","src":"3968:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4003:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4006:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3996:6:124"},"nodeType":"YulFunctionCall","src":"3996:15:124"},"nodeType":"YulExpressionStatement","src":"3996:15:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3770:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3777:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3767:2:124"},"nodeType":"YulFunctionCall","src":"3767:77:124"},"nodeType":"YulIf","src":"3764:257:124"},{"nodeType":"YulAssignment","src":"4030:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4041:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4048:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4037:3:124"},"nodeType":"YulFunctionCall","src":"4037:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"4030:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3736:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"3746:3:124","type":""}],"src":"3707:349:124"},{"body":{"nodeType":"YulBlock","src":"4142:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"4188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4190:6:124"},"nodeType":"YulFunctionCall","src":"4190:12:124"},"nodeType":"YulExpressionStatement","src":"4190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4163:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4172:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4159:3:124"},"nodeType":"YulFunctionCall","src":"4159:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4184:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4155:3:124"},"nodeType":"YulFunctionCall","src":"4155:32:124"},"nodeType":"YulIf","src":"4152:52:124"},{"nodeType":"YulAssignment","src":"4213:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4229:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4223:5:124"},"nodeType":"YulFunctionCall","src":"4223:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4213:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4108:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4119:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4131:6:124","type":""}],"src":"4061:184:124"},{"body":{"nodeType":"YulBlock","src":"4330:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"4376:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4385:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4388:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4378:6:124"},"nodeType":"YulFunctionCall","src":"4378:12:124"},"nodeType":"YulExpressionStatement","src":"4378:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4351:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4360:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4347:3:124"},"nodeType":"YulFunctionCall","src":"4347:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4372:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4343:3:124"},"nodeType":"YulFunctionCall","src":"4343:32:124"},"nodeType":"YulIf","src":"4340:52:124"},{"nodeType":"YulAssignment","src":"4401:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4417:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4411:5:124"},"nodeType":"YulFunctionCall","src":"4411:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4401:6:124"}]}]},"name":"abi_decode_tuple_t_int256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4296:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4307:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4319:6:124","type":""}],"src":"4250:183:124"},{"body":{"nodeType":"YulBlock","src":"4519:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"4565:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4574:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4577:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4567:6:124"},"nodeType":"YulFunctionCall","src":"4567:12:124"},"nodeType":"YulExpressionStatement","src":"4567:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4540:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4549:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4536:3:124"},"nodeType":"YulFunctionCall","src":"4536:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4561:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4532:3:124"},"nodeType":"YulFunctionCall","src":"4532:32:124"},"nodeType":"YulIf","src":"4529:52:124"},{"nodeType":"YulVariableDeclaration","src":"4590:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4609:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4603:5:124"},"nodeType":"YulFunctionCall","src":"4603:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4594:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4653:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4628:24:124"},"nodeType":"YulFunctionCall","src":"4628:31:124"},"nodeType":"YulExpressionStatement","src":"4628:31:124"},{"nodeType":"YulAssignment","src":"4668:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4678:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4668:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4485:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4496:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4508:6:124","type":""}],"src":"4438:251:124"},{"body":{"nodeType":"YulBlock","src":"4772:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"4818:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4827:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4830:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4820:6:124"},"nodeType":"YulFunctionCall","src":"4820:12:124"},"nodeType":"YulExpressionStatement","src":"4820:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4793:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4802:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4789:3:124"},"nodeType":"YulFunctionCall","src":"4789:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4814:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4785:3:124"},"nodeType":"YulFunctionCall","src":"4785:32:124"},"nodeType":"YulIf","src":"4782:52:124"},{"nodeType":"YulVariableDeclaration","src":"4843:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4862:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4856:5:124"},"nodeType":"YulFunctionCall","src":"4856:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4847:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4925:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4934:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4937:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4927:6:124"},"nodeType":"YulFunctionCall","src":"4927:12:124"},"nodeType":"YulExpressionStatement","src":"4927:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4894:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4915:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4908:6:124"},"nodeType":"YulFunctionCall","src":"4908:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4901:6:124"},"nodeType":"YulFunctionCall","src":"4901:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4891:2:124"},"nodeType":"YulFunctionCall","src":"4891:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4884:6:124"},"nodeType":"YulFunctionCall","src":"4884:40:124"},"nodeType":"YulIf","src":"4881:60:124"},{"nodeType":"YulAssignment","src":"4950:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4960:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4950:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4738:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4749:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4761:6:124","type":""}],"src":"4694:277:124"},{"body":{"nodeType":"YulBlock","src":"5097:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"5107:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5117:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5111:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5135:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5146:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5128:6:124"},"nodeType":"YulFunctionCall","src":"5128:21:124"},"nodeType":"YulExpressionStatement","src":"5128:21:124"},{"nodeType":"YulVariableDeclaration","src":"5158:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5178:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5172:5:124"},"nodeType":"YulFunctionCall","src":"5172:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5162:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5205:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5216:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5201:3:124"},"nodeType":"YulFunctionCall","src":"5201:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"5221:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5194:6:124"},"nodeType":"YulFunctionCall","src":"5194:34:124"},"nodeType":"YulExpressionStatement","src":"5194:34:124"},{"nodeType":"YulVariableDeclaration","src":"5237:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5246:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5241:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5306:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5335:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"5346:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5331:3:124"},"nodeType":"YulFunctionCall","src":"5331:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"5350:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5327:3:124"},"nodeType":"YulFunctionCall","src":"5327:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5369:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"5377:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5365:3:124"},"nodeType":"YulFunctionCall","src":"5365:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5381:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5361:3:124"},"nodeType":"YulFunctionCall","src":"5361:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5355:5:124"},"nodeType":"YulFunctionCall","src":"5355:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5320:6:124"},"nodeType":"YulFunctionCall","src":"5320:66:124"},"nodeType":"YulExpressionStatement","src":"5320:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5267:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"5270:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5264:2:124"},"nodeType":"YulFunctionCall","src":"5264:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5278:19:124","statements":[{"nodeType":"YulAssignment","src":"5280:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5289:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5292:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5285:3:124"},"nodeType":"YulFunctionCall","src":"5285:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5280:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"5260:3:124","statements":[]},"src":"5256:140:124"},{"body":{"nodeType":"YulBlock","src":"5430:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5459:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"5470:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5455:3:124"},"nodeType":"YulFunctionCall","src":"5455:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"5479:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5451:3:124"},"nodeType":"YulFunctionCall","src":"5451:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"5484:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5444:6:124"},"nodeType":"YulFunctionCall","src":"5444:42:124"},"nodeType":"YulExpressionStatement","src":"5444:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5411:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"5414:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5408:2:124"},"nodeType":"YulFunctionCall","src":"5408:13:124"},"nodeType":"YulIf","src":"5405:91:124"},{"nodeType":"YulAssignment","src":"5505:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5521:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"5540:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5548:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5536:3:124"},"nodeType":"YulFunctionCall","src":"5536:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"5553:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5532:3:124"},"nodeType":"YulFunctionCall","src":"5532:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5517:3:124"},"nodeType":"YulFunctionCall","src":"5517:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"5623:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5513:3:124"},"nodeType":"YulFunctionCall","src":"5513:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5505:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5066:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5077:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5088:4:124","type":""}],"src":"4976:656:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_int256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"6406":[{"length":32,"start":173},{"length":32,"start":1443}],"6417":[{"length":32,"start":485},{"length":32,"start":890}],"6420":[{"length":32,"start":305},{"length":32,"start":933}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a35760003560e01c806392bf2be011610076578063abfd53101161005b578063abfd5310146101ba578063b3596f07146101cd578063e19f4700146101e057600080fd5b806392bf2be0146101615780639d23d9f21461019a57600080fd5b80630542975c146100a8578063170aee73146100f95780636210308c1461010e5780638c89b64f1461012c575b600080fd5b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010c610107366004610a33565b610207565b005b60015473ffffffffffffffffffffffffffffffffffffffff166100cf565b6101537f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100f0565b6100cf61016f366004610a33565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020541690565b6101ad6101a8366004610a9c565b61021b565b6040516100f09190610ade565b61010c6101c8366004610b22565b6102d0565b6101536101db366004610a33565b61034b565b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b61020f61059f565b610218816107d0565b50565b606060008267ffffffffffffffff81111561023857610238610b8e565b604051908082528060200260200182016040528015610261578160200160208202803683370190505b50905060005b838110156102c85761029985858381811061028457610284610bbd565b90506020020160208101906101db9190610a33565b8282815181106102ab576102ab610bbd565b6020908102919091010152806102c081610bec565b915050610267565b509392505050565b6102d861059f565b6103458484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061083f92505050565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8082166000818152602081905260408120549092908116917f000000000000000000000000000000000000000000000000000000000000000090911614156103ca57507f000000000000000000000000000000000000000000000000000000000000000092915050565b73ffffffffffffffffffffffffffffffffffffffff8116610480576001546040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063b3596f0790602401602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190610c4c565b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f19190610c4c565b90506000811315610503579392505050565b6001546040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063b3596f0790602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610c4c565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106309190610c65565b6040517f13ee32e000000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906313ee32e090602401602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c19190610c82565b8061075557506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015610731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190610c82565b6040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250906107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39190610ca4565b60405180910390fd5b5050565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fce7a780d33665b1ea097af5f155e3821b809ecbaa839d3b33aa83ba28168cefb90600090a250565b80518251146040518060400160405280600281526020017f3736000000000000000000000000000000000000000000000000000000000000815250906108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39190610ca4565b5060005b8251811015610a0c578181815181106108d1576108d1610bbd565b60200260200101516000808584815181106108ee576108ee610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081818151811061098057610980610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168382815181106109b0576109b0610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a380610a0481610bec565b9150506108b6565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461021857600080fd5b600060208284031215610a4557600080fd5b813561047981610a11565b60008083601f840112610a6257600080fd5b50813567ffffffffffffffff811115610a7a57600080fd5b6020830191508360208260051b8501011115610a9557600080fd5b9250929050565b60008060208385031215610aaf57600080fd5b823567ffffffffffffffff811115610ac657600080fd5b610ad285828601610a50565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015610b1657835183529284019291840191600101610afa565b50909695505050505050565b60008060008060408587031215610b3857600080fd5b843567ffffffffffffffff80821115610b5057600080fd5b610b5c88838901610a50565b90965094506020870135915080821115610b7557600080fd5b50610b8287828801610a50565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c45577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600060208284031215610c5e57600080fd5b5051919050565b600060208284031215610c7757600080fd5b815161047981610a11565b600060208284031215610c9457600080fd5b8151801515811461047957600080fd5b600060208083528351808285015260005b81811015610cd157858101830151858201604001528201610cb5565b81811115610ce3576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212206d11581d90e2c001849c900cb0a1bbec73d0959df8b4bbde17089057d8d95f5f64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x92BF2BE0 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xABFD5310 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xABFD5310 EQ PUSH2 0x1BA JUMPI DUP1 PUSH4 0xB3596F07 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0xE19F4700 EQ PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x92BF2BE0 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0x9D23D9F2 EQ PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x170AEE73 EQ PUSH2 0xF9 JUMPI DUP1 PUSH4 0x6210308C EQ PUSH2 0x10E JUMPI DUP1 PUSH4 0x8C89B64F EQ PUSH2 0x12C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x10C PUSH2 0x107 CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x207 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCF JUMP JUMPDEST PUSH2 0x153 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF0 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x1AD PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xA9C JUMP JUMPDEST PUSH2 0x21B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF0 SWAP2 SWAP1 PUSH2 0xADE JUMP JUMPDEST PUSH2 0x10C PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB22 JUMP JUMPDEST PUSH2 0x2D0 JUMP JUMPDEST PUSH2 0x153 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x34B JUMP JUMPDEST PUSH2 0xCF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH2 0x59F JUMP JUMPDEST PUSH2 0x218 DUP2 PUSH2 0x7D0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x238 JUMPI PUSH2 0x238 PUSH2 0xB8E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x261 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C8 JUMPI PUSH2 0x299 DUP6 DUP6 DUP4 DUP2 DUP2 LT PUSH2 0x284 JUMPI PUSH2 0x284 PUSH2 0xBBD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1DB SWAP2 SWAP1 PUSH2 0xA33 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2AB JUMPI PUSH2 0x2AB PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP1 PUSH2 0x2C0 DUP2 PUSH2 0xBEC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x267 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2D8 PUSH2 0x59F JUMP JUMPDEST PUSH2 0x345 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP9 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP8 DUP3 MSTORE SWAP1 SWAP4 POP DUP8 SWAP3 POP DUP7 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x83F SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP3 SWAP1 DUP2 AND SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND EQ ISZERO PUSH2 0x3CA JUMPI POP PUSH32 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x480 JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x455 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x479 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F1 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT ISZERO PUSH2 0x503 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x597 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x60C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x630 SWAP2 SWAP1 PUSH2 0xC65 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x13EE32E000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x13EE32E0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x69D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6C1 SWAP2 SWAP1 PUSH2 0xC82 JUMP JUMPDEST DUP1 PUSH2 0x755 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x731 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x755 SWAP2 SWAP1 PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x7CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C3 SWAP2 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCE7A780D33665B1EA097AF5F155E3821B809ECBAA839D3B33AA83BA28168CEFB SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3736000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x8B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C3 SWAP2 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xA0C JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x8D1 JUMPI PUSH2 0x8D1 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8EE JUMPI PUSH2 0x8EE PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x980 JUMPI PUSH2 0x980 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9B0 JUMPI PUSH2 0x9B0 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x22C5B7B2D8561D39F7F210B6B326A1AA69F15311163082308AC4877DB6339DC1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH2 0xA04 DUP2 PUSH2 0xBEC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8B6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x479 DUP2 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xA62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xA95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAD2 DUP6 DUP3 DUP7 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB16 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xAFA JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB5C DUP9 DUP4 DUP10 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB82 DUP8 DUP3 DUP9 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xC45 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x479 DUP2 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCD1 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xCB5 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xCE3 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH14 0x11581D90E2C001849C900CB0A1BB 0xEC PUSH20 0xD0959DF8B4BBDE17089057D8D95F5F64736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"824:4242:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;863:58;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;863:58:54;;;;;;;;2600:151;;;;;;:::i;:::-;;:::i;:::-;;4659:103;4741:15;;;;4659:103;;1144:52;;;;;;;;1064:25:124;;;1052:2;1037:18;1144:52:54;918:177:124;4496:129:54;;;;;;:::i;:::-;4599:20;;;;4569:7;4599:20;;;;;;;;;;;;;4496:129;4168:294;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2382:184::-;;;;;;:::i;:::-;;:::i;3637:497::-;;;;;;:::i;:::-;;:::i;1093:47::-;;;;;2600:151;1346:31;:29;:31::i;:::-;2712:34:::1;2731:14;2712:18;:34::i;:::-;2600:151:::0;:::o;4168:294::-;4260:16;4284:23;4324:6;4310:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4310:28:54;;4284:54;;4349:9;4344:95;4364:17;;;4344:95;;;4408:24;4422:6;;4429:1;4422:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;4408:24::-;4396:6;4403:1;4396:9;;;;;;;;:::i;:::-;;;;;;;;;;:36;4383:3;;;;:::i;:::-;;;;4344:95;;;-1:-1:-1;4451:6:54;4168:294;-1:-1:-1;;;4168:294:54:o;2382:184::-;1346:31;:29;:31::i;:::-;2527:34:::1;2545:6;;2527:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;2527:34:54::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;2553:7:54;;-1:-1:-1;2553:7:54;;;;2527:34;::::1;::::0;2553:7;;2527:34;2553:7;2527:34;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;2527:17:54::1;::::0;-1:-1:-1;;;2527:34:54:i:1;:::-;2382:184:::0;;;;:::o;3637:497::-;3749:20;;;;3705:7;3749:20;;;;;;;;;;;3705:7;;3749:20;;;;3789:13;3780:22;;;;3776:354;;;-1:-1:-1;3819:18:54;;3637:497;-1:-1:-1;;3637:497:54:o;3776:354::-;3854:29;;;3850:280;;3900:15;;:36;;;;;:15;209:55:124;;;3900:36:54;;;191:74:124;3900:15:54;;;;:29;;164:18:124;;3900:36:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3893:43;3637:497;-1:-1:-1;;;3637:497:54:o;3850:280::-;3957:12;3972:6;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3957:36;;4013:1;4005:5;:9;4001:123;;;4041:5;3637:497;-1:-1:-1;;;3637:497:54:o;4001:123::-;4079:15;;:36;;;;;:15;209:55:124;;;4079:36:54;;;191:74:124;4079:15:54;;;;:29;;164:18:124;;4079:36:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4072:43;3637:497;-1:-1:-1;;;;3637:497:54:o;4766:298::-;4827:22;4864:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4920:42;;;;;4951:10;4920:42;;;191:74:124;4827:72:54;;-1:-1:-1;4920:30:54;;;;;;164:18:124;;4920:42:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;-1:-1:-1;4966:34:54;;;;;4989:10;4966:34;;;191:74:124;4966:22:54;;;;;;164:18:124;;4966:34:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5008:45;;;;;;;;;;;;;;;;;4905:154;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4821:243;4766:298::o;3424:172::-;3491:15;:52;;;;;;;;;;;;;3554:37;;;;-1:-1:-1;;3554:37:54;3424:172;:::o;2939:349::-;3057:7;:14;3040:6;:13;:31;3073:33;;;;;;;;;;;;;;;;;3032:75;;;;;;;;;;;;;;:::i;:::-;;3118:9;3113:171;3137:6;:13;3133:1;:17;3113:171;;;3212:7;3220:1;3212:10;;;;;;;;:::i;:::-;;;;;;;3165:13;:24;3179:6;3186:1;3179:9;;;;;;;;:::i;:::-;;;;;;;3165:24;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;3266:7;3274:1;3266:10;;;;;;;;:::i;:::-;;;;;;;3236:41;;3255:6;3262:1;3255:9;;;;;;;;:::i;:::-;;;;;;;3236:41;;;;;;;;;;;;3152:3;;;;:::i;:::-;;;;3113:171;;;;2939:349;;:::o;276:154:124:-;362:42;355:5;351:54;344:5;341:65;331:93;;420:1;417;410:12;435:247;494:6;547:2;535:9;526:7;522:23;518:32;515:52;;;563:1;560;553:12;515:52;602:9;589:23;621:31;646:5;621:31;:::i;1100:367::-;1163:8;1173:6;1227:3;1220:4;1212:6;1208:17;1204:27;1194:55;;1245:1;1242;1235:12;1194:55;-1:-1:-1;1268:20:124;;1311:18;1300:30;;1297:50;;;1343:1;1340;1333:12;1297:50;1380:4;1372:6;1368:17;1356:29;;1440:3;1433:4;1423:6;1420:1;1416:14;1408:6;1404:27;1400:38;1397:47;1394:67;;;1457:1;1454;1447:12;1394:67;1100:367;;;;;:::o;1472:437::-;1558:6;1566;1619:2;1607:9;1598:7;1594:23;1590:32;1587:52;;;1635:1;1632;1625:12;1587:52;1675:9;1662:23;1708:18;1700:6;1697:30;1694:50;;;1740:1;1737;1730:12;1694:50;1779:70;1841:7;1832:6;1821:9;1817:22;1779:70;:::i;:::-;1868:8;;1753:96;;-1:-1:-1;1472:437:124;-1:-1:-1;;;;1472:437:124:o;1914:632::-;2085:2;2137:21;;;2207:13;;2110:18;;;2229:22;;;2056:4;;2085:2;2308:15;;;;2282:2;2267:18;;;2056:4;2351:169;2365:6;2362:1;2359:13;2351:169;;;2426:13;;2414:26;;2495:15;;;;2460:12;;;;2387:1;2380:9;2351:169;;;-1:-1:-1;2537:3:124;;1914:632;-1:-1:-1;;;;;;1914:632:124:o;2551:773::-;2673:6;2681;2689;2697;2750:2;2738:9;2729:7;2725:23;2721:32;2718:52;;;2766:1;2763;2756:12;2718:52;2806:9;2793:23;2835:18;2876:2;2868:6;2865:14;2862:34;;;2892:1;2889;2882:12;2862:34;2931:70;2993:7;2984:6;2973:9;2969:22;2931:70;:::i;:::-;3020:8;;-1:-1:-1;2905:96:124;-1:-1:-1;3108:2:124;3093:18;;3080:32;;-1:-1:-1;3124:16:124;;;3121:36;;;3153:1;3150;3143:12;3121:36;;3192:72;3256:7;3245:8;3234:9;3230:24;3192:72;:::i;:::-;2551:773;;;;-1:-1:-1;3283:8:124;-1:-1:-1;;;;2551:773:124:o;3329:184::-;3381:77;3378:1;3371:88;3478:4;3475:1;3468:15;3502:4;3499:1;3492:15;3518:184;3570:77;3567:1;3560:88;3667:4;3664:1;3657:15;3691:4;3688:1;3681:15;3707:349;3746:3;3777:66;3770:5;3767:77;3764:257;;;3877:77;3874:1;3867:88;3978:4;3975:1;3968:15;4006:4;4003:1;3996:15;3764:257;-1:-1:-1;4048:1:124;4037:13;;3707:349::o;4061:184::-;4131:6;4184:2;4172:9;4163:7;4159:23;4155:32;4152:52;;;4200:1;4197;4190:12;4152:52;-1:-1:-1;4223:16:124;;4061:184;-1:-1:-1;4061:184:124:o;4438:251::-;4508:6;4561:2;4549:9;4540:7;4536:23;4532:32;4529:52;;;4577:1;4574;4567:12;4529:52;4609:9;4603:16;4628:31;4653:5;4628:31;:::i;4694:277::-;4761:6;4814:2;4802:9;4793:7;4789:23;4785:32;4782:52;;;4830:1;4827;4820:12;4782:52;4862:9;4856:16;4915:5;4908:13;4901:21;4894:5;4891:32;4881:60;;4937:1;4934;4927:12;4976:656;5088:4;5117:2;5146;5135:9;5128:21;5178:6;5172:13;5221:6;5216:2;5205:9;5201:18;5194:34;5246:1;5256:140;5270:6;5267:1;5264:13;5256:140;;;5365:14;;;5361:23;;5355:30;5331:17;;;5350:2;5327:26;5320:66;5285:10;;5256:140;;;5414:6;5411:1;5408:13;5405:91;;;5484:1;5479:2;5470:6;5459:9;5455:22;5451:31;5444:42;5405:91;-1:-1:-1;5548:2:124;5536:15;5553:66;5532:88;5517:104;;;;5623:2;5513:113;;4976:656;-1:-1:-1;;;4976:656:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"681000","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","BASE_CURRENCY()":"infinite","BASE_CURRENCY_UNIT()":"infinite","getAssetPrice(address)":"infinite","getAssetsPrices(address[])":"infinite","getFallbackOracle()":"2341","getSourceOfAsset(address)":"2540","setAssetSources(address[],address[])":"infinite","setFallbackOracle(address)":"infinite"},"internal":{"_onlyAssetListingOrPoolAdmins()":"infinite","_setAssetsSources(address[] memory,address[] memory)":"infinite","_setFallbackOracle(address)":"25399"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BASE_CURRENCY()":"e19f4700","BASE_CURRENCY_UNIT()":"8c89b64f","getAssetPrice(address)":"b3596f07","getAssetsPrices(address[])":"9d23d9f2","getFallbackOracle()":"6210308c","getSourceOfAsset(address)":"92bf2be0","setAssetSources(address[],address[])":"abfd5310","setFallbackOracle(address)":"170aee73"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"sources\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"baseCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrencyUnit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"AssetSourceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"baseCurrency\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseCurrencyUnit\",\"type\":\"uint256\"}],\"name\":\"BaseCurrencySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"}],\"name\":\"FallbackOracleUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY_UNIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"getAssetsPrices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFallbackOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getSourceOfAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"sources\",\"type\":\"address[]\"}],\"name\":\"setAssetSources\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"}],\"name\":\"setFallbackOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"assets\":\"The addresses of the assets\",\"baseCurrency\":\"The base currency used for the price quotes. If USD is used, base currency is 0x0\",\"baseCurrencyUnit\":\"The unit of the base currency\",\"fallbackOracle\":\"The address of the fallback oracle to use if the data of an        aggregator is not consistent\",\"provider\":\"The address of the new PoolAddressesProvider\",\"sources\":\"The address of the source of each asset\"}},\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}},\"getAssetsPrices(address[])\":{\"params\":{\"assets\":\"The list of assets addresses\"},\"returns\":{\"_0\":\"The prices of the given assets\"}},\"getFallbackOracle()\":{\"returns\":{\"_0\":\"The address of the fallback oracle\"}},\"getSourceOfAsset(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The address of the source\"}},\"setAssetSources(address[],address[])\":{\"params\":{\"assets\":\"The addresses of the assets\",\"sources\":\"The addresses of the price sources\"}},\"setFallbackOracle(address)\":{\"params\":{\"fallbackOracle\":\"The address of the fallback oracle\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"BASE_CURRENCY\":{\"details\":\"Address 0x0 is reserved for USD as base currency.\",\"return\":\"Returns the base currency address.\",\"returns\":{\"_0\":\"Returns the base currency address.\"}},\"BASE_CURRENCY_UNIT\":{\"details\":\"1 ether for ETH, 1e8 for USD.\",\"return\":\"Returns the base currency unit.\",\"returns\":{\"_0\":\"Returns the base currency unit.\"}}},\"title\":\"AaveOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider\"},\"BASE_CURRENCY()\":{\"notice\":\"Returns the base currency address\"},\"BASE_CURRENCY_UNIT()\":{\"notice\":\"Returns the base currency unit\"},\"constructor\":{\"notice\":\"Constructor\"},\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"},\"getAssetsPrices(address[])\":{\"notice\":\"Returns a list of prices from a list of assets addresses\"},\"getFallbackOracle()\":{\"notice\":\"Returns the address of the fallback oracle\"},\"getSourceOfAsset(address)\":{\"notice\":\"Returns the address of the source for an asset address\"},\"setAssetSources(address[],address[])\":{\"notice\":\"Sets or replaces price sources of assets\"},\"setFallbackOracle(address)\":{\"notice\":\"Sets the fallback oracle\"}},\"notice\":\"Contract to get asset prices, manage price sources and update the fallback oracle - Use of Chainlink Aggregators as first source of price - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle - Owned by the Aave governance\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/AaveOracle.sol\":\"AaveOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/chainlink/AggregatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Chainlink Contracts v0.8\\npragma solidity ^0.8.0;\\n\\ninterface AggregatorInterface {\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n  event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\\n}\\n\",\"keccak256\":\"0x07df0744d1a393c574d7ee11b75a1690a82f3136a79c76b933724872298bf718\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPriceOracleGetter} from './IPriceOracleGetter.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IAaveOracle\\n * @author Aave\\n * @notice Defines the basic interface for the Aave Oracle\\n */\\ninterface IAaveOracle is IPriceOracleGetter {\\n  /**\\n   * @dev Emitted after the base currency is set\\n   * @param baseCurrency The base currency of used for price quotes\\n   * @param baseCurrencyUnit The unit of the base currency\\n   */\\n  event BaseCurrencySet(address indexed baseCurrency, uint256 baseCurrencyUnit);\\n\\n  /**\\n   * @dev Emitted after the price source of an asset is updated\\n   * @param asset The address of the asset\\n   * @param source The price source of the asset\\n   */\\n  event AssetSourceUpdated(address indexed asset, address indexed source);\\n\\n  /**\\n   * @dev Emitted after the address of fallback oracle is updated\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  event FallbackOracleUpdated(address indexed fallbackOracle);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Sets or replaces price sources of assets\\n   * @param assets The addresses of the assets\\n   * @param sources The addresses of the price sources\\n   */\\n  function setAssetSources(address[] calldata assets, address[] calldata sources) external;\\n\\n  /**\\n   * @notice Sets the fallback oracle\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  function setFallbackOracle(address fallbackOracle) external;\\n\\n  /**\\n   * @notice Returns a list of prices from a list of assets addresses\\n   * @param assets The list of assets addresses\\n   * @return The prices of the given assets\\n   */\\n  function getAssetsPrices(address[] calldata assets) external view returns (uint256[] memory);\\n\\n  /**\\n   * @notice Returns the address of the source for an asset address\\n   * @param asset The address of the asset\\n   * @return The address of the source\\n   */\\n  function getSourceOfAsset(address asset) external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the fallback oracle\\n   * @return The address of the fallback oracle\\n   */\\n  function getFallbackOracle() external view returns (address);\\n}\\n\",\"keccak256\":\"0x15942c0df4ce9f50a9cf172c9ed0efa0abbf841cd8560fbd0da3d6a7dea69a96\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/misc/AaveOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {AggregatorInterface} from '../dependencies/chainlink/AggregatorInterface.sol';\\nimport {Errors} from '../protocol/libraries/helpers/Errors.sol';\\nimport {IACLManager} from '../interfaces/IACLManager.sol';\\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';\\nimport {IAaveOracle} from '../interfaces/IAaveOracle.sol';\\n\\n/**\\n * @title AaveOracle\\n * @author Aave\\n * @notice Contract to get asset prices, manage price sources and update the fallback oracle\\n * - Use of Chainlink Aggregators as first source of price\\n * - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle\\n * - Owned by the Aave governance\\n */\\ncontract AaveOracle is IAaveOracle {\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  // Map of asset price sources (asset => priceSource)\\n  mapping(address => AggregatorInterface) private assetsSources;\\n\\n  IPriceOracleGetter private _fallbackOracle;\\n  address public immutable override BASE_CURRENCY;\\n  uint256 public immutable override BASE_CURRENCY_UNIT;\\n\\n  /**\\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyAssetListingOrPoolAdmins() {\\n    _onlyAssetListingOrPoolAdmins();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Constructor\\n   * @param provider The address of the new PoolAddressesProvider\\n   * @param assets The addresses of the assets\\n   * @param sources The address of the source of each asset\\n   * @param fallbackOracle The address of the fallback oracle to use if the data of an\\n   *        aggregator is not consistent\\n   * @param baseCurrency The base currency used for the price quotes. If USD is used, base currency is 0x0\\n   * @param baseCurrencyUnit The unit of the base currency\\n   */\\n  constructor(\\n    IPoolAddressesProvider provider,\\n    address[] memory assets,\\n    address[] memory sources,\\n    address fallbackOracle,\\n    address baseCurrency,\\n    uint256 baseCurrencyUnit\\n  ) {\\n    ADDRESSES_PROVIDER = provider;\\n    _setFallbackOracle(fallbackOracle);\\n    _setAssetsSources(assets, sources);\\n    BASE_CURRENCY = baseCurrency;\\n    BASE_CURRENCY_UNIT = baseCurrencyUnit;\\n    emit BaseCurrencySet(baseCurrency, baseCurrencyUnit);\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function setAssetSources(\\n    address[] calldata assets,\\n    address[] calldata sources\\n  ) external override onlyAssetListingOrPoolAdmins {\\n    _setAssetsSources(assets, sources);\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function setFallbackOracle(\\n    address fallbackOracle\\n  ) external override onlyAssetListingOrPoolAdmins {\\n    _setFallbackOracle(fallbackOracle);\\n  }\\n\\n  /**\\n   * @notice Internal function to set the sources for each asset\\n   * @param assets The addresses of the assets\\n   * @param sources The address of the source of each asset\\n   */\\n  function _setAssetsSources(address[] memory assets, address[] memory sources) internal {\\n    require(assets.length == sources.length, Errors.INCONSISTENT_PARAMS_LENGTH);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      assetsSources[assets[i]] = AggregatorInterface(sources[i]);\\n      emit AssetSourceUpdated(assets[i], sources[i]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Internal function to set the fallback oracle\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  function _setFallbackOracle(address fallbackOracle) internal {\\n    _fallbackOracle = IPriceOracleGetter(fallbackOracle);\\n    emit FallbackOracleUpdated(fallbackOracle);\\n  }\\n\\n  /// @inheritdoc IPriceOracleGetter\\n  function getAssetPrice(address asset) public view override returns (uint256) {\\n    AggregatorInterface source = assetsSources[asset];\\n\\n    if (asset == BASE_CURRENCY) {\\n      return BASE_CURRENCY_UNIT;\\n    } else if (address(source) == address(0)) {\\n      return _fallbackOracle.getAssetPrice(asset);\\n    } else {\\n      int256 price = source.latestAnswer();\\n      if (price > 0) {\\n        return uint256(price);\\n      } else {\\n        return _fallbackOracle.getAssetPrice(asset);\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function getAssetsPrices(\\n    address[] calldata assets\\n  ) external view override returns (uint256[] memory) {\\n    uint256[] memory prices = new uint256[](assets.length);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      prices[i] = getAssetPrice(assets[i]);\\n    }\\n    return prices;\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function getSourceOfAsset(address asset) external view override returns (address) {\\n    return address(assetsSources[asset]);\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function getFallbackOracle() external view returns (address) {\\n    return address(_fallbackOracle);\\n  }\\n\\n  function _onlyAssetListingOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager());\\n    require(\\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0xf7c52e2169679c7da4016d15f5cf30c03c896f58f1ce7104c69b485cceac57af\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":6411,"contract":"contracts/misc/AaveOracle.sol:AaveOracle","label":"assetsSources","offset":0,"slot":"0","type":"t_mapping(t_address,t_contract(AggregatorInterface)47)"},{"astId":6414,"contract":"contracts/misc/AaveOracle.sol:AaveOracle","label":"_fallbackOracle","offset":0,"slot":"1","type":"t_contract(IPriceOracleGetter)6048"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(AggregatorInterface)47":{"encoding":"inplace","label":"contract AggregatorInterface","numberOfBytes":"20"},"t_contract(IPriceOracleGetter)6048":{"encoding":"inplace","label":"contract IPriceOracleGetter","numberOfBytes":"20"},"t_mapping(t_address,t_contract(AggregatorInterface)47)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract AggregatorInterface)","numberOfBytes":"32","value":"t_contract(AggregatorInterface)47"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider"},"BASE_CURRENCY()":{"notice":"Returns the base currency address"},"BASE_CURRENCY_UNIT()":{"notice":"Returns the base currency unit"},"constructor":{"notice":"Constructor"},"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"},"getAssetsPrices(address[])":{"notice":"Returns a list of prices from a list of assets addresses"},"getFallbackOracle()":{"notice":"Returns the address of the fallback oracle"},"getSourceOfAsset(address)":{"notice":"Returns the address of the source for an asset address"},"setAssetSources(address[],address[])":{"notice":"Sets or replaces price sources of assets"},"setFallbackOracle(address)":{"notice":"Sets the fallback oracle"}},"notice":"Contract to get asset prices, manage price sources and update the fallback oracle - Use of Chainlink Aggregators as first source of price - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle - Owned by the Aave governance","version":1}}},"contracts/misc/AaveProtocolDataProvider.sol":{"AaveProtocolDataProvider":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"addressesProvider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getATokenTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllATokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"internalType":"struct IPoolDataProvider.TokenData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllReservesTokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"internalType":"struct IPoolDataProvider.TokenData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getDebtCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDebtCeilingDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getFlashLoanEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getInterestRateStrategyAddress","outputs":[{"internalType":"address","name":"irStrategyAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getLiquidationProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPaused","outputs":[{"internalType":"bool","name":"isPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveCaps","outputs":[{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveConfigurationData","outputs":[{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"stableBorrowRateEnabled","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isFrozen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"accruedToTreasuryScaled","type":"uint256"},{"internalType":"uint256","name":"totalAToken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveEModeCategory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveTokensAddresses","outputs":[{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSiloedBorrowing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getTotalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getUnbackedMintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReserveData","outputs":[{"internalType":"uint256","name":"currentATokenBalance","type":"uint256"},{"internalType":"uint256","name":"currentStableDebt","type":"uint256"},{"internalType":"uint256","name":"currentVariableDebt","type":"uint256"},{"internalType":"uint256","name":"principalStableDebt","type":"uint256"},{"internalType":"uint256","name":"scaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint40","name":"stableRateLastUpdated","type":"uint40"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"constructor":{"params":{"addressesProvider":"The address of the PoolAddressesProvider contract"}},"getATokenTotalSupply(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The total supply of the aToken"}},"getAllATokens()":{"returns":{"_0":"The list of ATokens, pairs of symbols and addresses"}},"getAllReservesTokens()":{"details":"Handling MKR and ETH in a different way since they do not have standard `symbol` functions.","returns":{"_0":"The list of reserves, pairs of symbols and addresses"}},"getDebtCeiling(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The debt ceiling of the reserve"}},"getDebtCeilingDecimals()":{"returns":{"_0":"The debt ceiling decimals"}},"getFlashLoanEnabled(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"True if FlashLoans are enabled, false otherwise"}},"getInterestRateStrategyAddress(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"irStrategyAddress":"The address of the Interest Rate strategy"}},"getLiquidationProtocolFee(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The protocol fee on liquidation"}},"getPaused(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"isPaused":"True if the pool is paused, false otherwise"}},"getReserveCaps(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"borrowCap":"The borrow cap of the reserve","supplyCap":"The supply cap of the reserve"}},"getReserveConfigurationData(address)":{"details":"Not returning borrow and supply caps for compatibility, nor pause flag","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"borrowingEnabled":"True if borrowing is enabled, false otherwise","decimals":"The number of decimals of the reserve","isActive":"True if it is active, false otherwise","isFrozen":"True if it is frozen, false otherwise","liquidationBonus":"The liquidationBonus of the reserve","liquidationThreshold":"The liquidationThreshold of the reserve","ltv":"The ltv of the reserve","reserveFactor":"The reserveFactor of the reserve","stableBorrowRateEnabled":"True if stable rate borrowing is enabled, false otherwise","usageAsCollateralEnabled":"True if the usage as collateral is enabled, false otherwise"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"accruedToTreasuryScaled":"The scaled amount of tokens accrued to treasury that is to be minted","averageStableBorrowRate":"The average stable borrow rate of the reserve","lastUpdateTimestamp":"The timestamp of the last update of the reserve","liquidityIndex":"The liquidity index of the reserve","liquidityRate":"The liquidity rate of the reserve","stableBorrowRate":"The stable borrow rate of the reserve","totalAToken":"The total supply of the aToken","totalStableDebt":"The total stable debt of the reserve","totalVariableDebt":"The total variable debt of the reserve","unbacked":"The amount of unbacked tokens","variableBorrowIndex":"The variable borrow index of the reserve","variableBorrowRate":"The variable borrow rate of the reserve"}},"getReserveEModeCategory(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The eMode id of the reserve"}},"getReserveTokensAddresses(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"aTokenAddress":"The AToken address of the reserve","stableDebtTokenAddress":"The StableDebtToken address of the reserve","variableDebtTokenAddress":"The VariableDebtToken address of the reserve"}},"getSiloedBorrowing(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"True if the asset is siloed for borrowing"}},"getTotalDebt(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The total debt for asset"}},"getUnbackedMintCap(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The unbacked mint cap of the reserve"}},"getUserReserveData(address,address)":{"params":{"asset":"The address of the underlying asset of the reserve","user":"The address of the user"},"returns":{"currentATokenBalance":"The current AToken balance of the user","currentStableDebt":"The current stable debt of the user","currentVariableDebt":"The current variable debt of the user","liquidityRate":"The liquidity rate of the reserve","principalStableDebt":"The principal stable debt of the user","scaledVariableDebt":"The scaled variable debt of the user","stableBorrowRate":"The stable borrow rate of the user","stableRateLastUpdated":"The timestamp of the last update of the user stable rate","usageAsCollateralEnabled":"True if the user is using the asset as collateral, false         otherwise"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address for the PoolAddressesProvider contract","returns":{"_0":"The address for the PoolAddressesProvider contract"}}},"title":"AaveProtocolDataProvider","version":1},"evm":{"bytecode":{"functionDebugData":{"@_6808":{"entryPoint":null,"id":6808,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":70,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:124"},"nodeType":"YulFunctionCall","src":"174:12:124"},"nodeType":"YulExpressionStatement","src":"174:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:124"},"nodeType":"YulFunctionCall","src":"143:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:124"},"nodeType":"YulFunctionCall","src":"139:32:124"},"nodeType":"YulIf","src":"136:52:124"},{"nodeType":"YulVariableDeclaration","src":"197:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:124"},"nodeType":"YulFunctionCall","src":"291:12:124"},"nodeType":"YulExpressionStatement","src":"291:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:124"},"nodeType":"YulFunctionCall","src":"270:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:124"},"nodeType":"YulFunctionCall","src":"266:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:124"},"nodeType":"YulFunctionCall","src":"255:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:124"},"nodeType":"YulFunctionCall","src":"245:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:124"},"nodeType":"YulFunctionCall","src":"238:50:124"},"nodeType":"YulIf","src":"235:70:124"},{"nodeType":"YulAssignment","src":"314:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"src":"14:321:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a06040523480156200001157600080fd5b506040516200311338038062003113833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b608051613001620001126000396000818161015b015281816104580152818161059b015281816106c101528181610c70015281816110510152818161118b015281816112c801528181611463015281816115aa015281816117c30152818161195e01528181611a9101528181611bc40152818161203a015281816121b3015281816122f801528181612433015261277901526130016000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806351460e25116100cd578063b55d990411610081578063d7ed3ef411610066578063d7ed3ef414610425578063f561ae4114610438578063fcf40a621461044057600080fd5b8063b55d9904146103b8578063d2493b6c146103db57600080fd5b806369b169e1116100b257806369b169e1146103895780637ba1ae3614610390578063b316ff89146103a357600080fd5b806351460e25146103635780636744362a1461037657600080fd5b80633c798109116101245780633e150141116101095780633e150141146102c157806346fbe558146103285780634d44ac4f1461035057600080fd5b80633c7981091461029b5780633cb8a622146102ae57600080fd5b80630542975c14610156578063163a0f20146101a757806328dd2d01146101c857806335ea6a7514610228575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101ba6101b536600461295a565b610453565b60405190815260200161019e565b6101db6101d6366004612977565b61058a565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015264ffffffffff1660e083015215156101008201526101200161019e565b61023b61023636600461295a565b610c5a565b604080519c8d5260208d019b909b52998b019890985260608a0196909652608089019490945260a088019290925260c087015260e086015261010085015261012084015261014083015264ffffffffff166101608201526101800161019e565b6101ba6102a936600461295a565b61104a565b6101ba6102bc36600461295a565b611184565b6102d46102cf36600461295a565b6112b5565b604080519a8b5260208b01999099529789019690965260608801949094526080870192909252151560a0860152151560c0850152151560e0840152151561010083015215156101208201526101400161019e565b61033b61033636600461295a565b61145b565b6040805192835260208301919091520161019e565b6101ba61035e36600461295a565b6115a5565b6101ba61037136600461295a565b6117be565b61017d61038436600461295a565b611959565b60026101ba565b6101ba61039e36600461295a565b611a8a565b6103ab611bbe565b60405161019e9190612a2a565b6103cb6103c636600461295a565b612033565b604051901515815260200161019e565b6103ee6103e936600461295a565b6121ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292169181019190915260600161019e565b6103cb61043336600461295a565b6122f3565b6103ab61242d565b6103cb61044e36600461295a565b612772565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e59190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105779190612beb565b805190915060a81c60ff165b9392505050565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106289190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e8116600483015291909116906335ea6a75906024016101e060405180830381865afa158015610697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bb9190612c4e565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190612ae4565b6040517f4417a58300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529190911690634417a58390602401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190612beb565b6101008301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529293509116906370a0823190602401602060405180830381865afa158015610855573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108799190612d71565b6101408301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929d509116906370a0823190602401602060405180830381865afa1580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109129190612d71565b6101208301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929b509116906370a0823190602401602060405180830381865afa158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190612d71565b6101208301516040517fc634dfaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929c5091169063c634dfaa90602401602060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190612d71565b6101408301516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929a50911690631da24f3e90602401602060405180830381865afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610add9190612d71565b965081604001516fffffffffffffffffffffffffffffffff16945081610120015173ffffffffffffffffffffffffffffffffffffffff1663e78c9b3b8d6040518263ffffffff1660e01b8152600401610b52919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b939190612d71565b6101208301516040517f79ce6b8c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529298509116906379ce6b8c90602401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190612d8a565b9350610c498260e0015161ffff16826128a890919063ffffffff16565b925050509295985092959850929598565b60008060008060008060008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd9190612ae4565b73ffffffffffffffffffffffffffffffffffffffff166335ea6a758f6040518263ffffffff1660e01b8152600401610d51919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190612c4e565b9050806101a0015181610180015182610100015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e159190612d71565b83610120015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e899190612d71565b84610140015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190612d71565b856040015186608001518760a0015188610120015173ffffffffffffffffffffffffffffffffffffffff166390f6fcf26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190612d71565b89602001518a606001518b60c001518b6fffffffffffffffffffffffffffffffff169b508a6fffffffffffffffffffffffffffffffff169a50866fffffffffffffffffffffffffffffffff169650856fffffffffffffffffffffffffffffffff169550846fffffffffffffffffffffffffffffffff169450826fffffffffffffffffffffffffffffffff169250816fffffffffffffffffffffffffffffffff1691509c509c509c509c509c509c509c509c509c509c509c509c505091939597999b5091939597999b565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa15801561114c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111709190612beb565b5160d41c64ffffffffff1690565b92915050565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190612beb565b5160981c61ffff1690565b60008060008060008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113559190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152919091169063c44b11f790602401602060405180830381865afa1580156113c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e79190612beb565b5160ff603082901c169d61ffff8083169e50601083901c81169d50602083901c81169c50604083901c169a508c151599506704000000000000008216151598506708000000000000008216151597506701000000000000008216151596506702000000000000009091161515945092505050565b60008061159b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f09190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919091169063c44b11f790602401602060405180830381865afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115829190612beb565b51640fffffffff605082901c81169260749290921c1690565b9094909350915050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116379190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612c4e565b905080610140015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190612d71565b81610120015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190612d71565b6105839190612dd4565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118509190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190612c4e565b905080610100015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105839190612d71565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb9190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190612c4e565b61016001519392505050565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1e9190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb09190612beb565b5160b01c640fffffffff1690565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c519190612ae4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ca0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ce69190810190612dec565b90506000815167ffffffffffffffff811115611d0457611d04612b01565b604051908082528060200260200182016040528015611d4a57816020015b604080518082019091526060815260006020820152815260200190600190039081611d225790505b50905060005b825181101561202b57739f8f72aa9304c8b593d555f12ef6589cc3a579a273ffffffffffffffffffffffffffffffffffffffff16838281518110611d9657611d96612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611e555760405180604001604052806040518060400160405280600381526020017f4d4b5200000000000000000000000000000000000000000000000000000000008152508152602001848381518110611e1257611e12612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16815250828281518110611e4557611e45612e9e565b6020026020010181905250612019565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff16838281518110611e9257611e92612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611f0e5760405180604001604052806040518060400160405280600381526020017f45544800000000000000000000000000000000000000000000000000000000008152508152602001848381518110611e1257611e12612e9e565b6040518060400160405280848381518110611f2b57611f2b612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fc39190810190612ecd565b8152602001848381518110611fda57611fda612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681525082828151811061200d5761200d612e9e565b60200260200101819052505b8061202381612f7f565b915050611d50565b509392505050565b60006121a17f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c79190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190612beb565b51670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9695505050505050565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122409190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156122af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d39190612c4e565b610100810151610120820151610140909201519097919650945092505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa1580156123f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124179190612beb565b9050610583815167800000000000000016151590565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190612ae4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561250f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526125559190810190612dec565b90506000815167ffffffffffffffff81111561257357612573612b01565b6040519080825280602002602001820160405280156125b957816020015b6040805180820190915260608152600060208201528152602001906001900390816125915790505b50905060005b825181101561202b5760008473ffffffffffffffffffffffffffffffffffffffff166335ea6a758584815181106125f8576125f8612e9e565b60200260200101516040518263ffffffff1660e01b8152600401612638919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190612c4e565b9050604051806040016040528082610100015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156126d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261271d9190810190612ecd565b815260200182610100015173ffffffffffffffffffffffffffffffffffffffff1681525083838151811061275357612753612e9e565b602002602001018190525050808061276a90612f7f565b9150506125bf565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015612874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128989190612beb565b5167400000000000000016151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a9190612fb8565b60405180910390fd5b50509051600191821b82011c16151590565b73ffffffffffffffffffffffffffffffffffffffff8116811461295757600080fd5b50565b60006020828403121561296c57600080fd5b813561058381612935565b6000806040838503121561298a57600080fd5b823561299581612935565b915060208301356129a581612935565b809150509250929050565b60005b838110156129cb5781810151838201526020016129b3565b838111156129da576000848401525b50505050565b600081518084526129f88160208601602086016129b0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ac6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc089840301855281518051878552612a93888601826129e0565b9189015173ffffffffffffffffffffffffffffffffffffffff169489019490945294870194925090860190600101612a51565b509098975050505050505050565b8051612adf81612935565b919050565b600060208284031215612af657600080fd5b815161058381612935565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715612b5457612b54612b01565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ba157612ba1612b01565b604052919050565b600060208284031215612bbb57600080fd5b6040516020810181811067ffffffffffffffff82111715612bde57612bde612b01565b6040529151825250919050565b600060208284031215612bfd57600080fd5b6105838383612ba9565b80516fffffffffffffffffffffffffffffffff81168114612adf57600080fd5b805164ffffffffff81168114612adf57600080fd5b805161ffff81168114612adf57600080fd5b60006101e08284031215612c6157600080fd5b612c69612b30565b612c738484612ba9565b8152612c8160208401612c07565b6020820152612c9260408401612c07565b6040820152612ca360608401612c07565b6060820152612cb460808401612c07565b6080820152612cc560a08401612c07565b60a0820152612cd660c08401612c27565b60c0820152612ce760e08401612c3c565b60e0820152610100612cfa818501612ad4565b90820152610120612d0c848201612ad4565b90820152610140612d1e848201612ad4565b90820152610160612d30848201612ad4565b90820152610180612d42848201612c07565b908201526101a0612d54848201612c07565b908201526101c0612d66848201612c07565b908201529392505050565b600060208284031215612d8357600080fd5b5051919050565b600060208284031215612d9c57600080fd5b61058382612c27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612de757612de7612da5565b500190565b60006020808385031215612dff57600080fd5b825167ffffffffffffffff80821115612e1757600080fd5b818501915085601f830112612e2b57600080fd5b815181811115612e3d57612e3d612b01565b8060051b9150612e4e848301612b5a565b8181529183018401918481019088841115612e6857600080fd5b938501935b83851015612e925784519250612e8283612935565b8282529385019390850190612e6d565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612edf57600080fd5b815167ffffffffffffffff80821115612ef757600080fd5b818401915084601f830112612f0b57600080fd5b815181811115612f1d57612f1d612b01565b612f4e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612b5a565b9150808252856020828501011115612f6557600080fd5b612f768160208401602086016129b0565b50949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fb157612fb1612da5565b5060010190565b60208152600061058360208301846129e056fea26469706673582212209ccfa5d322ff917a315c4612a56debcb62e987fd510d65030e1acd9a1dc62a0964736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3113 CODESIZE SUB DUP1 PUSH3 0x3113 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x46 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x78 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x3001 PUSH3 0x112 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x15B ADD MSTORE DUP2 DUP2 PUSH2 0x458 ADD MSTORE DUP2 DUP2 PUSH2 0x59B ADD MSTORE DUP2 DUP2 PUSH2 0x6C1 ADD MSTORE DUP2 DUP2 PUSH2 0xC70 ADD MSTORE DUP2 DUP2 PUSH2 0x1051 ADD MSTORE DUP2 DUP2 PUSH2 0x118B ADD MSTORE DUP2 DUP2 PUSH2 0x12C8 ADD MSTORE DUP2 DUP2 PUSH2 0x1463 ADD MSTORE DUP2 DUP2 PUSH2 0x15AA ADD MSTORE DUP2 DUP2 PUSH2 0x17C3 ADD MSTORE DUP2 DUP2 PUSH2 0x195E ADD MSTORE DUP2 DUP2 PUSH2 0x1A91 ADD MSTORE DUP2 DUP2 PUSH2 0x1BC4 ADD MSTORE DUP2 DUP2 PUSH2 0x203A ADD MSTORE DUP2 DUP2 PUSH2 0x21B3 ADD MSTORE DUP2 DUP2 PUSH2 0x22F8 ADD MSTORE DUP2 DUP2 PUSH2 0x2433 ADD MSTORE PUSH2 0x2779 ADD MSTORE PUSH2 0x3001 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x151 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x51460E25 GT PUSH2 0xCD JUMPI DUP1 PUSH4 0xB55D9904 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xD7ED3EF4 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD7ED3EF4 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xF561AE41 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0xFCF40A62 EQ PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB55D9904 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD2493B6C EQ PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x69B169E1 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x69B169E1 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x7BA1AE36 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0xB316FF89 EQ PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51460E25 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x6744362A EQ PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3C798109 GT PUSH2 0x124 JUMPI DUP1 PUSH4 0x3E150141 GT PUSH2 0x109 JUMPI DUP1 PUSH4 0x3E150141 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0x46FBE558 EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x4D44AC4F EQ PUSH2 0x350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3C798109 EQ PUSH2 0x29B JUMPI DUP1 PUSH4 0x3CB8A622 EQ PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x163A0F20 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x28DD2D01 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x228 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x453 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1DB PUSH2 0x1D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2977 JUMP JUMPDEST PUSH2 0x58A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP10 DUP11 MSTORE PUSH1 0x20 DUP11 ADD SWAP9 SWAP1 SWAP9 MSTORE SWAP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0xE0 DUP4 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0x120 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x23B PUSH2 0x236 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP13 DUP14 MSTORE PUSH1 0x20 DUP14 ADD SWAP12 SWAP1 SWAP12 MSTORE SWAP10 DUP12 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x60 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x80 DUP10 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xA0 DUP9 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x140 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x180 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x2A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x104A JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x2BC CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1184 JUMP JUMPDEST PUSH2 0x2D4 PUSH2 0x2CF CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP11 DUP12 MSTORE PUSH1 0x20 DUP12 ADD SWAP10 SWAP1 SWAP10 MSTORE SWAP8 DUP10 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x60 DUP9 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x80 DUP8 ADD SWAP3 SWAP1 SWAP3 MSTORE ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE ISZERO ISZERO PUSH1 0xE0 DUP5 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE ISZERO ISZERO PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x140 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x33B PUSH2 0x336 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x145B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x35E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x15A5 JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x371 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x17BE JUMP JUMPDEST PUSH2 0x17D PUSH2 0x384 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1959 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x1BA JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x39E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1A8A JUMP JUMPDEST PUSH2 0x3AB PUSH2 0x1BBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x19E SWAP2 SWAP1 PUSH2 0x2A2A JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x2033 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x3E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x21AB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x433 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x22F3 JUMP JUMPDEST PUSH2 0x3AB PUSH2 0x242D JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x2772 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4E5 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x577 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xA8 SHR PUSH1 0xFF AND JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x604 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x628 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x697 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6BB SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74E SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4417A58300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4417A583 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7E0 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x855 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x879 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP14 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x912 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP12 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x987 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AB SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xC634DFAA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP13 POP SWAP2 AND SWAP1 PUSH4 0xC634DFAA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA44 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP11 POP SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xADD SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST SWAP7 POP DUP2 PUSH1 0x40 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP DUP2 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE78C9B3B DUP14 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB52 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB93 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x79CE6B8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP9 POP SWAP2 AND SWAP1 PUSH4 0x79CE6B8C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC2C SWAP2 SWAP1 PUSH2 0x2D8A JUMP JUMPDEST SWAP4 POP PUSH2 0xC49 DUP3 PUSH1 0xE0 ADD MLOAD PUSH2 0xFFFF AND DUP3 PUSH2 0x28A8 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCFD SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP16 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD51 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD93 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1A0 ADD MLOAD DUP2 PUSH2 0x180 ADD MLOAD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE15 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP4 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE89 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP5 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xED9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEFD SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP6 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x90F6FCF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF80 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP10 PUSH1 0x20 ADD MLOAD DUP11 PUSH1 0x60 ADD MLOAD DUP12 PUSH1 0xC0 ADD MLOAD DUP12 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP12 POP DUP11 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP11 POP DUP7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP7 POP DUP6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 POP DUP5 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP12 POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP12 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10DE SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x114C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1170 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1218 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1286 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AA SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0x98 SHR PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1331 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1355 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13E7 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xFF PUSH1 0x30 DUP3 SWAP1 SHR AND SWAP14 PUSH2 0xFFFF DUP1 DUP4 AND SWAP15 POP PUSH1 0x10 DUP4 SWAP1 SHR DUP2 AND SWAP14 POP PUSH1 0x20 DUP4 SWAP1 SHR DUP2 AND SWAP13 POP PUSH1 0x40 DUP4 SWAP1 SHR AND SWAP11 POP DUP13 ISZERO ISZERO SWAP10 POP PUSH8 0x400000000000000 DUP3 AND ISZERO ISZERO SWAP9 POP PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP8 POP PUSH8 0x100000000000000 DUP3 AND ISZERO ISZERO SWAP7 POP PUSH8 0x200000000000000 SWAP1 SWAP2 AND ISZERO ISZERO SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x159B PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14F0 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x155E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1582 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP3 PUSH1 0x74 SWAP3 SWAP1 SWAP3 SHR AND SWAP1 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1613 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1637 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16CA SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x171C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1740 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1790 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17B4 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x583 SWAP2 SWAP1 PUSH2 0x2DD4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1850 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E3 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1935 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x583 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19EB SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A7E SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x160 ADD MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B1E SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BB0 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C2D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C51 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1CE6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2DEC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D04 JUMPI PUSH2 0x1D04 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1D4A JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1D22 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x202B JUMPI PUSH20 0x9F8F72AA9304C8B593D555F12EF6589CC3A579A2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D96 JUMPI PUSH2 0x1D96 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E55 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D4B520000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E12 JUMPI PUSH2 0x1E12 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E45 JUMPI PUSH2 0x1E45 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0x2019 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E92 JUMPI PUSH2 0x1E92 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F0E JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4554480000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E12 JUMPI PUSH2 0x1E12 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1F2B JUMPI PUSH2 0x1F2B PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1FC3 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ECD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1FDA JUMPI PUSH2 0x1FDA PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x200D JUMPI PUSH2 0x200D PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP JUMPDEST DUP1 PUSH2 0x2023 DUP2 PUSH2 0x2F7F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1D50 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21A1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C7 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2135 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2159 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x221C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2240 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22D3 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP3 ADD MLOAD PUSH2 0x140 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP8 SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2361 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2385 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2417 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST SWAP1 POP PUSH2 0x583 DUP2 MLOAD PUSH8 0x8000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x249C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24C0 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x250F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2555 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2DEC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2573 JUMPI PUSH2 0x2573 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25B9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2591 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x202B JUMPI PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x25F8 JUMPI PUSH2 0x25F8 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2638 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2656 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x267A SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x271D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ECD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2753 JUMPI PUSH2 0x2753 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x276A SWAP1 PUSH2 0x2F7F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2806 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2874 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2898 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2923 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x291A SWAP2 SWAP1 PUSH2 0x2FB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2957 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x296C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x583 DUP2 PUSH2 0x2935 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2995 DUP2 PUSH2 0x2935 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x29A5 DUP2 PUSH2 0x2935 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29B3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x29DA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x29F8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29B0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2AC6 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP10 DUP5 SUB ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD DUP8 DUP6 MSTORE PUSH2 0x2A93 DUP9 DUP7 ADD DUP3 PUSH2 0x29E0 JUMP JUMPDEST SWAP2 DUP10 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 DUP10 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP5 DUP8 ADD SWAP5 SWAP3 POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2A51 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2ADF DUP2 PUSH2 0x2935 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x583 DUP2 PUSH2 0x2935 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2B54 JUMPI PUSH2 0x2B54 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2BA1 JUMPI PUSH2 0x2BA1 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2BDE JUMPI PUSH2 0x2BDE PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x583 DUP4 DUP4 PUSH2 0x2BA9 JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C69 PUSH2 0x2B30 JUMP JUMPDEST PUSH2 0x2C73 DUP5 DUP5 PUSH2 0x2BA9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2C81 PUSH1 0x20 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2C92 PUSH1 0x40 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2CA3 PUSH1 0x60 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2CB4 PUSH1 0x80 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2CC5 PUSH1 0xA0 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2CD6 PUSH1 0xC0 DUP5 ADD PUSH2 0x2C27 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2CE7 PUSH1 0xE0 DUP5 ADD PUSH2 0x2C3C JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2CFA DUP2 DUP6 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x2D0C DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x2D1E DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x2D30 DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2D42 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2D54 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2D66 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x583 DUP3 PUSH2 0x2C27 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2DE7 JUMPI PUSH2 0x2DE7 PUSH2 0x2DA5 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2E17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E3D JUMPI PUSH2 0x2E3D PUSH2 0x2B01 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x2E4E DUP5 DUP4 ADD PUSH2 0x2B5A JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x2E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x2E92 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x2E82 DUP4 PUSH2 0x2935 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2E6D JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2EDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2EF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2F1D JUMPI PUSH2 0x2F1D PUSH2 0x2B01 JUMP JUMPDEST PUSH2 0x2F4E PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x2B5A JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2F65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F76 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29B0 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2FB1 JUMPI PUSH2 0x2FB1 PUSH2 0x2DA5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x583 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x29E0 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 0xCF 0xA5 0xD3 0x22 SELFDESTRUCT SWAP2 PUSH27 0x315C4612A56DEBCB62E987FD510D65030E1ACD9A1DC62A0964736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"970:9398:55:-:0;;;1547:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1607:38:55;;;970:9398;;14:321:124;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:124;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:124:o;:::-;970:9398:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_6796":{"entryPoint":null,"id":6796,"parameterSlots":0,"returnSlots":0},"@getATokenTotalSupply_7364":{"entryPoint":6078,"id":7364,"parameterSlots":1,"returnSlots":1},"@getAllATokens_7002":{"entryPoint":9261,"id":7002,"parameterSlots":0,"returnSlots":1},"@getAllReservesTokens_6919":{"entryPoint":7102,"id":6919,"parameterSlots":0,"returnSlots":1},"@getCaps_14033":{"entryPoint":null,"id":14033,"parameterSlots":1,"returnSlots":2},"@getDebtCeilingDecimals_7245":{"entryPoint":null,"id":7245,"parameterSlots":0,"returnSlots":1},"@getDebtCeiling_13668":{"entryPoint":null,"id":13668,"parameterSlots":1,"returnSlots":1},"@getDebtCeiling_7234":{"entryPoint":4170,"id":7234,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_13824":{"entryPoint":null,"id":13824,"parameterSlots":1,"returnSlots":1},"@getFlags_13934":{"entryPoint":null,"id":13934,"parameterSlots":1,"returnSlots":5},"@getFlashLoanEnabled_13874":{"entryPoint":null,"id":13874,"parameterSlots":1,"returnSlots":1},"@getFlashLoanEnabled_7633":{"entryPoint":8947,"id":7633,"parameterSlots":1,"returnSlots":1},"@getInterestRateStrategyAddress_7605":{"entryPoint":6489,"id":7605,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_13720":{"entryPoint":null,"id":13720,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_7192":{"entryPoint":4484,"id":7192,"parameterSlots":1,"returnSlots":1},"@getParams_14000":{"entryPoint":null,"id":14000,"parameterSlots":1,"returnSlots":6},"@getPaused_7150":{"entryPoint":8243,"id":7150,"parameterSlots":1,"returnSlots":1},"@getReserveCaps_7126":{"entryPoint":5211,"id":7126,"parameterSlots":1,"returnSlots":2},"@getReserveConfigurationData_7071":{"entryPoint":4789,"id":7071,"parameterSlots":1,"returnSlots":10},"@getReserveData_7333":{"entryPoint":3162,"id":7333,"parameterSlots":1,"returnSlots":12},"@getReserveEModeCategory_7099":{"entryPoint":1107,"id":7099,"parameterSlots":1,"returnSlots":1},"@getReserveTokensAddresses_7577":{"entryPoint":8619,"id":7577,"parameterSlots":1,"returnSlots":3},"@getSiloedBorrowing_13360":{"entryPoint":null,"id":13360,"parameterSlots":1,"returnSlots":1},"@getSiloedBorrowing_7171":{"entryPoint":10098,"id":7171,"parameterSlots":1,"returnSlots":1},"@getTotalDebt_7402":{"entryPoint":5541,"id":7402,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_13772":{"entryPoint":null,"id":13772,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_7213":{"entryPoint":6794,"id":7213,"parameterSlots":1,"returnSlots":1},"@getUserReserveData_7541":{"entryPoint":1418,"id":7541,"parameterSlots":2,"returnSlots":9},"@isUsingAsCollateral_14260":{"entryPoint":10408,"id":14260,"parameterSlots":2,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":10964,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":11177,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":10586,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10980,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":10615,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory":{"entryPoint":11756,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptr_fromMemory":{"entryPoint":11981,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory":{"entryPoint":11243,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory":{"entryPoint":11342,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":11633,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint40_fromMemory":{"entryPoint":11658,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":11271,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":11324,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":11303,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":10720,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":10794,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12216,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":11,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":13,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":10,"returnSlots":1},"allocate_memory":{"entryPoint":11098,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_1859":{"entryPoint":11056,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":11732,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":10672,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":12159,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":11685,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":11934,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":11009,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":10549,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:14267:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"321:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:124"},"nodeType":"YulFunctionCall","src":"410:12:124"},"nodeType":"YulExpressionStatement","src":"410:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"344:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"355:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"362:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"351:3:124"},"nodeType":"YulFunctionCall","src":"351:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"341:2:124"},"nodeType":"YulFunctionCall","src":"341:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"334:6:124"},"nodeType":"YulFunctionCall","src":"334:73:124"},"nodeType":"YulIf","src":"331:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"310:5:124","type":""}],"src":"276:154:124"},{"body":{"nodeType":"YulBlock","src":"505:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"551:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"560:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"563:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"553:6:124"},"nodeType":"YulFunctionCall","src":"553:12:124"},"nodeType":"YulExpressionStatement","src":"553:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"526:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"535:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"522:3:124"},"nodeType":"YulFunctionCall","src":"522:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"547:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"518:3:124"},"nodeType":"YulFunctionCall","src":"518:32:124"},"nodeType":"YulIf","src":"515:52:124"},{"nodeType":"YulVariableDeclaration","src":"576:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"602:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"589:12:124"},"nodeType":"YulFunctionCall","src":"589:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"580:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"646:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"621:24:124"},"nodeType":"YulFunctionCall","src":"621:31:124"},"nodeType":"YulExpressionStatement","src":"621:31:124"},{"nodeType":"YulAssignment","src":"661:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"671:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"661:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"471:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"482:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"494:6:124","type":""}],"src":"435:247:124"},{"body":{"nodeType":"YulBlock","src":"788:76:124","statements":[{"nodeType":"YulAssignment","src":"798:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"810:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"821:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"806:3:124"},"nodeType":"YulFunctionCall","src":"806:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"798:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"840:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"851:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:25:124"},"nodeType":"YulExpressionStatement","src":"833:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"757:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"768:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"779:4:124","type":""}],"src":"687:177:124"},{"body":{"nodeType":"YulBlock","src":"956:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"1002:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1011:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1014:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1004:6:124"},"nodeType":"YulFunctionCall","src":"1004:12:124"},"nodeType":"YulExpressionStatement","src":"1004:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"977:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"986:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"973:3:124"},"nodeType":"YulFunctionCall","src":"973:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"998:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"969:3:124"},"nodeType":"YulFunctionCall","src":"969:32:124"},"nodeType":"YulIf","src":"966:52:124"},{"nodeType":"YulVariableDeclaration","src":"1027:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1053:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1040:12:124"},"nodeType":"YulFunctionCall","src":"1040:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1031:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1097:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1072:24:124"},"nodeType":"YulFunctionCall","src":"1072:31:124"},"nodeType":"YulExpressionStatement","src":"1072:31:124"},{"nodeType":"YulAssignment","src":"1112:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1122:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1112:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1136:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1164:3:124"},"nodeType":"YulFunctionCall","src":"1164:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1151:12:124"},"nodeType":"YulFunctionCall","src":"1151:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1140:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1217:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1192:24:124"},"nodeType":"YulFunctionCall","src":"1192:33:124"},"nodeType":"YulExpressionStatement","src":"1192:33:124"},{"nodeType":"YulAssignment","src":"1234:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1244:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1234:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"914:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"925:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"937:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"945:6:124","type":""}],"src":"869:388:124"},{"body":{"nodeType":"YulBlock","src":"1579:461:124","statements":[{"nodeType":"YulAssignment","src":"1589:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1601:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1612:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1597:3:124"},"nodeType":"YulFunctionCall","src":"1597:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1589:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1632:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1643:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1625:6:124"},"nodeType":"YulFunctionCall","src":"1625:25:124"},"nodeType":"YulExpressionStatement","src":"1625:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1670:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1681:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1666:3:124"},"nodeType":"YulFunctionCall","src":"1666:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1686:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1659:6:124"},"nodeType":"YulFunctionCall","src":"1659:34:124"},"nodeType":"YulExpressionStatement","src":"1659:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1724:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1709:3:124"},"nodeType":"YulFunctionCall","src":"1709:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"1729:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1702:6:124"},"nodeType":"YulFunctionCall","src":"1702:34:124"},"nodeType":"YulExpressionStatement","src":"1702:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1756:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1767:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1752:3:124"},"nodeType":"YulFunctionCall","src":"1752:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"1772:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1745:6:124"},"nodeType":"YulFunctionCall","src":"1745:34:124"},"nodeType":"YulExpressionStatement","src":"1745:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1799:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1810:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1795:3:124"},"nodeType":"YulFunctionCall","src":"1795:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"1816:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1788:6:124"},"nodeType":"YulFunctionCall","src":"1788:35:124"},"nodeType":"YulExpressionStatement","src":"1788:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1843:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1854:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1839:3:124"},"nodeType":"YulFunctionCall","src":"1839:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"1860:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1832:6:124"},"nodeType":"YulFunctionCall","src":"1832:35:124"},"nodeType":"YulExpressionStatement","src":"1832:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1887:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1898:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1883:3:124"},"nodeType":"YulFunctionCall","src":"1883:19:124"},{"name":"value6","nodeType":"YulIdentifier","src":"1904:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1876:6:124"},"nodeType":"YulFunctionCall","src":"1876:35:124"},"nodeType":"YulExpressionStatement","src":"1876:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1931:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1942:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1927:3:124"},"nodeType":"YulFunctionCall","src":"1927:19:124"},{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"1952:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1960:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1948:3:124"},"nodeType":"YulFunctionCall","src":"1948:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1920:6:124"},"nodeType":"YulFunctionCall","src":"1920:54:124"},"nodeType":"YulExpressionStatement","src":"1920:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1994:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2005:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1990:3:124"},"nodeType":"YulFunctionCall","src":"1990:19:124"},{"arguments":[{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"2025:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2018:6:124"},"nodeType":"YulFunctionCall","src":"2018:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2011:6:124"},"nodeType":"YulFunctionCall","src":"2011:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1983:6:124"},"nodeType":"YulFunctionCall","src":"1983:51:124"},"nodeType":"YulExpressionStatement","src":"1983:51:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1484:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"1495:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1503:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1511:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1519:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1527:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1535:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1543:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1551:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1559:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1570:4:124","type":""}],"src":"1262:778:124"},{"body":{"nodeType":"YulBlock","src":"2454:579:124","statements":[{"nodeType":"YulAssignment","src":"2464:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2476:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2487:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2472:3:124"},"nodeType":"YulFunctionCall","src":"2472:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2464:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2507:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2518:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2500:6:124"},"nodeType":"YulFunctionCall","src":"2500:25:124"},"nodeType":"YulExpressionStatement","src":"2500:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2545:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2556:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2541:3:124"},"nodeType":"YulFunctionCall","src":"2541:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2561:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2534:6:124"},"nodeType":"YulFunctionCall","src":"2534:34:124"},"nodeType":"YulExpressionStatement","src":"2534:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2599:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2584:3:124"},"nodeType":"YulFunctionCall","src":"2584:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"2604:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2577:6:124"},"nodeType":"YulFunctionCall","src":"2577:34:124"},"nodeType":"YulExpressionStatement","src":"2577:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2642:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2627:3:124"},"nodeType":"YulFunctionCall","src":"2627:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"2647:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2620:6:124"},"nodeType":"YulFunctionCall","src":"2620:34:124"},"nodeType":"YulExpressionStatement","src":"2620:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2674:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2685:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2670:3:124"},"nodeType":"YulFunctionCall","src":"2670:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"2691:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2663:6:124"},"nodeType":"YulFunctionCall","src":"2663:35:124"},"nodeType":"YulExpressionStatement","src":"2663:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2718:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2729:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2714:3:124"},"nodeType":"YulFunctionCall","src":"2714:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"2735:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2707:6:124"},"nodeType":"YulFunctionCall","src":"2707:35:124"},"nodeType":"YulExpressionStatement","src":"2707:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2762:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2773:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2758:3:124"},"nodeType":"YulFunctionCall","src":"2758:19:124"},{"name":"value6","nodeType":"YulIdentifier","src":"2779:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2751:6:124"},"nodeType":"YulFunctionCall","src":"2751:35:124"},"nodeType":"YulExpressionStatement","src":"2751:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2806:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2817:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2802:3:124"},"nodeType":"YulFunctionCall","src":"2802:19:124"},{"name":"value7","nodeType":"YulIdentifier","src":"2823:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2795:6:124"},"nodeType":"YulFunctionCall","src":"2795:35:124"},"nodeType":"YulExpressionStatement","src":"2795:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2850:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2861:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2846:3:124"},"nodeType":"YulFunctionCall","src":"2846:19:124"},{"name":"value8","nodeType":"YulIdentifier","src":"2867:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2839:6:124"},"nodeType":"YulFunctionCall","src":"2839:35:124"},"nodeType":"YulExpressionStatement","src":"2839:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2894:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2905:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2890:3:124"},"nodeType":"YulFunctionCall","src":"2890:19:124"},{"name":"value9","nodeType":"YulIdentifier","src":"2911:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2883:6:124"},"nodeType":"YulFunctionCall","src":"2883:35:124"},"nodeType":"YulExpressionStatement","src":"2883:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2938:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2949:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2934:3:124"},"nodeType":"YulFunctionCall","src":"2934:19:124"},{"name":"value10","nodeType":"YulIdentifier","src":"2955:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2927:6:124"},"nodeType":"YulFunctionCall","src":"2927:36:124"},"nodeType":"YulExpressionStatement","src":"2927:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2983:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2994:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2979:3:124"},"nodeType":"YulFunctionCall","src":"2979:19:124"},{"arguments":[{"name":"value11","nodeType":"YulIdentifier","src":"3004:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"3013:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3000:3:124"},"nodeType":"YulFunctionCall","src":"3000:26:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2972:6:124"},"nodeType":"YulFunctionCall","src":"2972:55:124"},"nodeType":"YulExpressionStatement","src":"2972:55:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2333:9:124","type":""},{"name":"value11","nodeType":"YulTypedName","src":"2344:7:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"2353:7:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"2362:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"2370:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"2378:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"2386:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2394:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2402:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2410:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2418:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2426:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2434:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2445:4:124","type":""}],"src":"2045:988:124"},{"body":{"nodeType":"YulBlock","src":"3361:550:124","statements":[{"nodeType":"YulAssignment","src":"3371:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3383:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3394:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3379:3:124"},"nodeType":"YulFunctionCall","src":"3379:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3371:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3414:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3425:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3407:6:124"},"nodeType":"YulFunctionCall","src":"3407:25:124"},"nodeType":"YulExpressionStatement","src":"3407:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3452:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3463:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3448:3:124"},"nodeType":"YulFunctionCall","src":"3448:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"3468:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3441:6:124"},"nodeType":"YulFunctionCall","src":"3441:34:124"},"nodeType":"YulExpressionStatement","src":"3441:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3495:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3506:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3491:3:124"},"nodeType":"YulFunctionCall","src":"3491:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"3511:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3484:6:124"},"nodeType":"YulFunctionCall","src":"3484:34:124"},"nodeType":"YulExpressionStatement","src":"3484:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3538:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3549:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3534:3:124"},"nodeType":"YulFunctionCall","src":"3534:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"3554:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3527:6:124"},"nodeType":"YulFunctionCall","src":"3527:34:124"},"nodeType":"YulExpressionStatement","src":"3527:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3581:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3592:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3577:3:124"},"nodeType":"YulFunctionCall","src":"3577:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"3598:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3570:6:124"},"nodeType":"YulFunctionCall","src":"3570:35:124"},"nodeType":"YulExpressionStatement","src":"3570:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3625:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3636:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3621:3:124"},"nodeType":"YulFunctionCall","src":"3621:19:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3649:6:124"},"nodeType":"YulFunctionCall","src":"3649:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3642:6:124"},"nodeType":"YulFunctionCall","src":"3642:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3614:6:124"},"nodeType":"YulFunctionCall","src":"3614:51:124"},"nodeType":"YulExpressionStatement","src":"3614:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3685:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3696:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3681:3:124"},"nodeType":"YulFunctionCall","src":"3681:19:124"},{"arguments":[{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"3716:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3709:6:124"},"nodeType":"YulFunctionCall","src":"3709:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3702:6:124"},"nodeType":"YulFunctionCall","src":"3702:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3674:6:124"},"nodeType":"YulFunctionCall","src":"3674:51:124"},"nodeType":"YulExpressionStatement","src":"3674:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3745:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3756:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3741:3:124"},"nodeType":"YulFunctionCall","src":"3741:19:124"},{"arguments":[{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"3776:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3769:6:124"},"nodeType":"YulFunctionCall","src":"3769:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3762:6:124"},"nodeType":"YulFunctionCall","src":"3762:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3734:6:124"},"nodeType":"YulFunctionCall","src":"3734:51:124"},"nodeType":"YulExpressionStatement","src":"3734:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3805:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3816:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3801:3:124"},"nodeType":"YulFunctionCall","src":"3801:19:124"},{"arguments":[{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"3836:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3829:6:124"},"nodeType":"YulFunctionCall","src":"3829:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3822:6:124"},"nodeType":"YulFunctionCall","src":"3822:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3794:6:124"},"nodeType":"YulFunctionCall","src":"3794:51:124"},"nodeType":"YulExpressionStatement","src":"3794:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:124"},"nodeType":"YulFunctionCall","src":"3861:19:124"},{"arguments":[{"arguments":[{"name":"value9","nodeType":"YulIdentifier","src":"3896:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3889:6:124"},"nodeType":"YulFunctionCall","src":"3889:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3882:6:124"},"nodeType":"YulFunctionCall","src":"3882:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3854:6:124"},"nodeType":"YulFunctionCall","src":"3854:51:124"},"nodeType":"YulExpressionStatement","src":"3854:51:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3258:9:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3269:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3277:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3285:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3293:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3301:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3309:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3317:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3325:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3333:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3341:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3352:4:124","type":""}],"src":"3038:873:124"},{"body":{"nodeType":"YulBlock","src":"4045:119:124","statements":[{"nodeType":"YulAssignment","src":"4055:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4067:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4078:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4063:3:124"},"nodeType":"YulFunctionCall","src":"4063:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4055:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4097:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"4108:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4090:6:124"},"nodeType":"YulFunctionCall","src":"4090:25:124"},"nodeType":"YulExpressionStatement","src":"4090:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4135:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4146:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4131:3:124"},"nodeType":"YulFunctionCall","src":"4131:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"4151:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4124:6:124"},"nodeType":"YulFunctionCall","src":"4124:34:124"},"nodeType":"YulExpressionStatement","src":"4124:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4006:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4017:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4025:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4036:4:124","type":""}],"src":"3916:248:124"},{"body":{"nodeType":"YulBlock","src":"4270:125:124","statements":[{"nodeType":"YulAssignment","src":"4280:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4292:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4303:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4288:3:124"},"nodeType":"YulFunctionCall","src":"4288:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4280:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4322:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4337:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4345:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4333:3:124"},"nodeType":"YulFunctionCall","src":"4333:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4315:6:124"},"nodeType":"YulFunctionCall","src":"4315:74:124"},"nodeType":"YulExpressionStatement","src":"4315:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4239:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4250:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4261:4:124","type":""}],"src":"4169:226:124"},{"body":{"nodeType":"YulBlock","src":"4453:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"4463:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4472:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4467:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4532:63:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4557:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"4562:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4553:3:124"},"nodeType":"YulFunctionCall","src":"4553:11:124"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4576:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"4581:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4572:3:124"},"nodeType":"YulFunctionCall","src":"4572:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4566:5:124"},"nodeType":"YulFunctionCall","src":"4566:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4546:6:124"},"nodeType":"YulFunctionCall","src":"4546:39:124"},"nodeType":"YulExpressionStatement","src":"4546:39:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4493:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"4496:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4490:2:124"},"nodeType":"YulFunctionCall","src":"4490:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4504:19:124","statements":[{"nodeType":"YulAssignment","src":"4506:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4515:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"4518:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4511:3:124"},"nodeType":"YulFunctionCall","src":"4511:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4506:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"4486:3:124","statements":[]},"src":"4482:113:124"},{"body":{"nodeType":"YulBlock","src":"4621:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4634:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"4639:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4630:3:124"},"nodeType":"YulFunctionCall","src":"4630:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"4648:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4623:6:124"},"nodeType":"YulFunctionCall","src":"4623:27:124"},"nodeType":"YulExpressionStatement","src":"4623:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4610:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"4613:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4607:2:124"},"nodeType":"YulFunctionCall","src":"4607:13:124"},"nodeType":"YulIf","src":"4604:48:124"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"4431:3:124","type":""},{"name":"dst","nodeType":"YulTypedName","src":"4436:3:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"4441:6:124","type":""}],"src":"4400:258:124"},{"body":{"nodeType":"YulBlock","src":"4713:267:124","statements":[{"nodeType":"YulVariableDeclaration","src":"4723:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4743:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4737:5:124"},"nodeType":"YulFunctionCall","src":"4737:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4727:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4765:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"4770:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4758:6:124"},"nodeType":"YulFunctionCall","src":"4758:19:124"},"nodeType":"YulExpressionStatement","src":"4758:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4812:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4819:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4808:3:124"},"nodeType":"YulFunctionCall","src":"4808:16:124"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4830:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"4835:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4826:3:124"},"nodeType":"YulFunctionCall","src":"4826:14:124"},{"name":"length","nodeType":"YulIdentifier","src":"4842:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"4786:21:124"},"nodeType":"YulFunctionCall","src":"4786:63:124"},"nodeType":"YulExpressionStatement","src":"4786:63:124"},{"nodeType":"YulAssignment","src":"4858:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4873:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4886:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4894:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4882:3:124"},"nodeType":"YulFunctionCall","src":"4882:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"4899:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4878:3:124"},"nodeType":"YulFunctionCall","src":"4878:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4869:3:124"},"nodeType":"YulFunctionCall","src":"4869:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"4969:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4865:3:124"},"nodeType":"YulFunctionCall","src":"4865:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4858:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4690:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4697:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4705:3:124","type":""}],"src":"4663:317:124"},{"body":{"nodeType":"YulBlock","src":"5190:967:124","statements":[{"nodeType":"YulVariableDeclaration","src":"5200:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5210:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5204:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5221:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5239:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5250:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5235:3:124"},"nodeType":"YulFunctionCall","src":"5235:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"5225:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5269:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5280:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5262:6:124"},"nodeType":"YulFunctionCall","src":"5262:21:124"},"nodeType":"YulExpressionStatement","src":"5262:21:124"},{"nodeType":"YulVariableDeclaration","src":"5292:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"5303:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"5296:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5318:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5338:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5332:5:124"},"nodeType":"YulFunctionCall","src":"5332:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5322:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"5361:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"5369:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5354:6:124"},"nodeType":"YulFunctionCall","src":"5354:22:124"},"nodeType":"YulExpressionStatement","src":"5354:22:124"},{"nodeType":"YulVariableDeclaration","src":"5385:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5395:2:124","type":"","value":"64"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5389:2:124","type":""}]},{"nodeType":"YulAssignment","src":"5406:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5417:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"5428:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5413:3:124"},"nodeType":"YulFunctionCall","src":"5413:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5406:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"5440:53:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5462:9:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5477:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"5480:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5473:3:124"},"nodeType":"YulFunctionCall","src":"5473:14:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5458:3:124"},"nodeType":"YulFunctionCall","src":"5458:30:124"},{"name":"_2","nodeType":"YulIdentifier","src":"5490:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5454:3:124"},"nodeType":"YulFunctionCall","src":"5454:39:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"5444:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5502:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5520:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5528:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5516:3:124"},"nodeType":"YulFunctionCall","src":"5516:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"5506:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5540:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5549:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5544:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5608:520:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5629:3:124"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"5642:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5650:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5638:3:124"},"nodeType":"YulFunctionCall","src":"5638:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"5662:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5634:3:124"},"nodeType":"YulFunctionCall","src":"5634:95:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5622:6:124"},"nodeType":"YulFunctionCall","src":"5622:108:124"},"nodeType":"YulExpressionStatement","src":"5622:108:124"},{"nodeType":"YulVariableDeclaration","src":"5743:23:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5759:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5753:5:124"},"nodeType":"YulFunctionCall","src":"5753:13:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5747:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5779:29:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5805:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5799:5:124"},"nodeType":"YulFunctionCall","src":"5799:9:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5783:12:124","type":""}]},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"5828:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"5836:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5821:6:124"},"nodeType":"YulFunctionCall","src":"5821:18:124"},"nodeType":"YulExpressionStatement","src":"5821:18:124"},{"nodeType":"YulVariableDeclaration","src":"5852:62:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5884:12:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"5902:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"5910:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5898:3:124"},"nodeType":"YulFunctionCall","src":"5898:15:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5866:17:124"},"nodeType":"YulFunctionCall","src":"5866:48:124"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"5856:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"5938:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5946:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5934:3:124"},"nodeType":"YulFunctionCall","src":"5934:15:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5965:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5969:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5961:3:124"},"nodeType":"YulFunctionCall","src":"5961:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5955:5:124"},"nodeType":"YulFunctionCall","src":"5955:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"5975:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5951:3:124"},"nodeType":"YulFunctionCall","src":"5951:67:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5927:6:124"},"nodeType":"YulFunctionCall","src":"5927:92:124"},"nodeType":"YulExpressionStatement","src":"5927:92:124"},{"nodeType":"YulAssignment","src":"6032:16:124","value":{"name":"tail_3","nodeType":"YulIdentifier","src":"6042:6:124"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6032:6:124"}]},{"nodeType":"YulAssignment","src":"6061:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6075:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6083:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6071:3:124"},"nodeType":"YulFunctionCall","src":"6071:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6061:6:124"}]},{"nodeType":"YulAssignment","src":"6099:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6110:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6115:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6106:3:124"},"nodeType":"YulFunctionCall","src":"6106:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6099:3:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5570:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"5573:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5567:2:124"},"nodeType":"YulFunctionCall","src":"5567:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5581:18:124","statements":[{"nodeType":"YulAssignment","src":"5583:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5592:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"5595:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5588:3:124"},"nodeType":"YulFunctionCall","src":"5588:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5583:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"5563:3:124","statements":[]},"src":"5559:569:124"},{"nodeType":"YulAssignment","src":"6137:14:124","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"6145:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6137:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5159:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5170:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5181:4:124","type":""}],"src":"4985:1172:124"},{"body":{"nodeType":"YulBlock","src":"6257:92:124","statements":[{"nodeType":"YulAssignment","src":"6267:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6279:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6290:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6275:3:124"},"nodeType":"YulFunctionCall","src":"6275:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6267:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6309:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6334:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6327:6:124"},"nodeType":"YulFunctionCall","src":"6327:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6320:6:124"},"nodeType":"YulFunctionCall","src":"6320:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6302:6:124"},"nodeType":"YulFunctionCall","src":"6302:41:124"},"nodeType":"YulExpressionStatement","src":"6302:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6226:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6237:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6248:4:124","type":""}],"src":"6162:187:124"},{"body":{"nodeType":"YulBlock","src":"6511:250:124","statements":[{"nodeType":"YulAssignment","src":"6521:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6533:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6544:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6529:3:124"},"nodeType":"YulFunctionCall","src":"6529:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6521:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"6556:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6566:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6560:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6624:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6639:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6647:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6635:3:124"},"nodeType":"YulFunctionCall","src":"6635:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6617:6:124"},"nodeType":"YulFunctionCall","src":"6617:34:124"},"nodeType":"YulExpressionStatement","src":"6617:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6671:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6682:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6667:3:124"},"nodeType":"YulFunctionCall","src":"6667:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6691:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6699:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6687:3:124"},"nodeType":"YulFunctionCall","src":"6687:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6660:6:124"},"nodeType":"YulFunctionCall","src":"6660:43:124"},"nodeType":"YulExpressionStatement","src":"6660:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6723:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6734:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6719:3:124"},"nodeType":"YulFunctionCall","src":"6719:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6743:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6751:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6739:3:124"},"nodeType":"YulFunctionCall","src":"6739:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6712:6:124"},"nodeType":"YulFunctionCall","src":"6712:43:124"},"nodeType":"YulExpressionStatement","src":"6712:43:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6464:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6475:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6483:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6491:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6502:4:124","type":""}],"src":"6354:407:124"},{"body":{"nodeType":"YulBlock","src":"6826:78:124","statements":[{"nodeType":"YulAssignment","src":"6836:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6851:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6845:5:124"},"nodeType":"YulFunctionCall","src":"6845:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6836:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6892:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6867:24:124"},"nodeType":"YulFunctionCall","src":"6867:31:124"},"nodeType":"YulExpressionStatement","src":"6867:31:124"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6805:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6816:5:124","type":""}],"src":"6766:138:124"},{"body":{"nodeType":"YulBlock","src":"6990:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"7036:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7045:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7048:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7038:6:124"},"nodeType":"YulFunctionCall","src":"7038:12:124"},"nodeType":"YulExpressionStatement","src":"7038:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7011:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7020:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7007:3:124"},"nodeType":"YulFunctionCall","src":"7007:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7032:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7003:3:124"},"nodeType":"YulFunctionCall","src":"7003:32:124"},"nodeType":"YulIf","src":"7000:52:124"},{"nodeType":"YulVariableDeclaration","src":"7061:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7080:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7074:5:124"},"nodeType":"YulFunctionCall","src":"7074:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7065:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7124:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7099:24:124"},"nodeType":"YulFunctionCall","src":"7099:31:124"},"nodeType":"YulExpressionStatement","src":"7099:31:124"},{"nodeType":"YulAssignment","src":"7139:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7149:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7139:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6956:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6967:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6979:6:124","type":""}],"src":"6909:251:124"},{"body":{"nodeType":"YulBlock","src":"7197:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7214:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7217:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7207:6:124"},"nodeType":"YulFunctionCall","src":"7207:88:124"},"nodeType":"YulExpressionStatement","src":"7207:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7311:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7314:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7304:6:124"},"nodeType":"YulFunctionCall","src":"7304:15:124"},"nodeType":"YulExpressionStatement","src":"7304:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7335:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7338:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7328:6:124"},"nodeType":"YulFunctionCall","src":"7328:15:124"},"nodeType":"YulExpressionStatement","src":"7328:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"7165:184:124"},{"body":{"nodeType":"YulBlock","src":"7400:206:124","statements":[{"nodeType":"YulAssignment","src":"7410:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7426:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7420:5:124"},"nodeType":"YulFunctionCall","src":"7420:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7410:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7438:34:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7460:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7468:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7456:3:124"},"nodeType":"YulFunctionCall","src":"7456:16:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7442:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7547:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7549:16:124"},"nodeType":"YulFunctionCall","src":"7549:18:124"},"nodeType":"YulExpressionStatement","src":"7549:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7490:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"7502:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7487:2:124"},"nodeType":"YulFunctionCall","src":"7487:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7526:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7538:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7523:2:124"},"nodeType":"YulFunctionCall","src":"7523:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7484:2:124"},"nodeType":"YulFunctionCall","src":"7484:62:124"},"nodeType":"YulIf","src":"7481:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7585:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7589:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7578:6:124"},"nodeType":"YulFunctionCall","src":"7578:22:124"},"nodeType":"YulExpressionStatement","src":"7578:22:124"}]},"name":"allocate_memory_1859","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7389:6:124","type":""}],"src":"7354:252:124"},{"body":{"nodeType":"YulBlock","src":"7656:289:124","statements":[{"nodeType":"YulAssignment","src":"7666:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7682:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7676:5:124"},"nodeType":"YulFunctionCall","src":"7676:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7666:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7694:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7716:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"7732:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"7738:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7728:3:124"},"nodeType":"YulFunctionCall","src":"7728:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"7743:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7724:3:124"},"nodeType":"YulFunctionCall","src":"7724:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7712:3:124"},"nodeType":"YulFunctionCall","src":"7712:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7698:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7886:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7888:16:124"},"nodeType":"YulFunctionCall","src":"7888:18:124"},"nodeType":"YulExpressionStatement","src":"7888:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7829:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"7841:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7826:2:124"},"nodeType":"YulFunctionCall","src":"7826:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7865:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7877:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7862:2:124"},"nodeType":"YulFunctionCall","src":"7862:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7823:2:124"},"nodeType":"YulFunctionCall","src":"7823:62:124"},"nodeType":"YulIf","src":"7820:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7924:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7928:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7917:6:124"},"nodeType":"YulFunctionCall","src":"7917:22:124"},"nodeType":"YulExpressionStatement","src":"7917:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"7636:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7645:6:124","type":""}],"src":"7611:334:124"},{"body":{"nodeType":"YulBlock","src":"8041:335:124","statements":[{"body":{"nodeType":"YulBlock","src":"8085:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8094:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8097:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8087:6:124"},"nodeType":"YulFunctionCall","src":"8087:12:124"},"nodeType":"YulExpressionStatement","src":"8087:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"8062:3:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8067:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8058:3:124"},"nodeType":"YulFunctionCall","src":"8058:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"8079:4:124","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8054:3:124"},"nodeType":"YulFunctionCall","src":"8054:30:124"},"nodeType":"YulIf","src":"8051:50:124"},{"nodeType":"YulVariableDeclaration","src":"8110:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8130:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8124:5:124"},"nodeType":"YulFunctionCall","src":"8124:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"8114:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8142:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8164:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8172:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8160:3:124"},"nodeType":"YulFunctionCall","src":"8160:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"8146:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8252:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"8254:16:124"},"nodeType":"YulFunctionCall","src":"8254:18:124"},"nodeType":"YulExpressionStatement","src":"8254:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8195:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"8207:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8192:2:124"},"nodeType":"YulFunctionCall","src":"8192:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8231:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"8243:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8228:2:124"},"nodeType":"YulFunctionCall","src":"8228:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"8189:2:124"},"nodeType":"YulFunctionCall","src":"8189:62:124"},"nodeType":"YulIf","src":"8186:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8290:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8294:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8283:6:124"},"nodeType":"YulFunctionCall","src":"8283:22:124"},"nodeType":"YulExpressionStatement","src":"8283:22:124"},{"nodeType":"YulAssignment","src":"8314:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"8323:6:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8314:5:124"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8345:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8359:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8353:5:124"},"nodeType":"YulFunctionCall","src":"8353:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8338:6:124"},"nodeType":"YulFunctionCall","src":"8338:32:124"},"nodeType":"YulExpressionStatement","src":"8338:32:124"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8012:9:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"8023:3:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8031:5:124","type":""}],"src":"7950:426:124"},{"body":{"nodeType":"YulBlock","src":"8504:159:124","statements":[{"body":{"nodeType":"YulBlock","src":"8550:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8559:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8562:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8552:6:124"},"nodeType":"YulFunctionCall","src":"8552:12:124"},"nodeType":"YulExpressionStatement","src":"8552:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8525:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8534:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8521:3:124"},"nodeType":"YulFunctionCall","src":"8521:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8546:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8517:3:124"},"nodeType":"YulFunctionCall","src":"8517:32:124"},"nodeType":"YulIf","src":"8514:52:124"},{"nodeType":"YulAssignment","src":"8575:82:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8638:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8649:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"8585:52:124"},"nodeType":"YulFunctionCall","src":"8585:72:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8575:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8470:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8481:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8493:6:124","type":""}],"src":"8381:282:124"},{"body":{"nodeType":"YulBlock","src":"8728:132:124","statements":[{"nodeType":"YulAssignment","src":"8738:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8753:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8747:5:124"},"nodeType":"YulFunctionCall","src":"8747:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8738:5:124"}]},{"body":{"nodeType":"YulBlock","src":"8838:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8847:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8850:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8840:6:124"},"nodeType":"YulFunctionCall","src":"8840:12:124"},"nodeType":"YulExpressionStatement","src":"8840:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8782:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8793:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8800:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8789:3:124"},"nodeType":"YulFunctionCall","src":"8789:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8779:2:124"},"nodeType":"YulFunctionCall","src":"8779:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8772:6:124"},"nodeType":"YulFunctionCall","src":"8772:65:124"},"nodeType":"YulIf","src":"8769:85:124"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8707:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8718:5:124","type":""}],"src":"8668:192:124"},{"body":{"nodeType":"YulBlock","src":"8924:110:124","statements":[{"nodeType":"YulAssignment","src":"8934:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8949:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8943:5:124"},"nodeType":"YulFunctionCall","src":"8943:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8934:5:124"}]},{"body":{"nodeType":"YulBlock","src":"9012:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9021:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9024:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9014:6:124"},"nodeType":"YulFunctionCall","src":"9014:12:124"},"nodeType":"YulExpressionStatement","src":"9014:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8978:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8989:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8996:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8985:3:124"},"nodeType":"YulFunctionCall","src":"8985:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8975:2:124"},"nodeType":"YulFunctionCall","src":"8975:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8968:6:124"},"nodeType":"YulFunctionCall","src":"8968:43:124"},"nodeType":"YulIf","src":"8965:63:124"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8903:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8914:5:124","type":""}],"src":"8865:169:124"},{"body":{"nodeType":"YulBlock","src":"9098:104:124","statements":[{"nodeType":"YulAssignment","src":"9108:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9123:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9117:5:124"},"nodeType":"YulFunctionCall","src":"9117:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9108:5:124"}]},{"body":{"nodeType":"YulBlock","src":"9180:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9189:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9192:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9182:6:124"},"nodeType":"YulFunctionCall","src":"9182:12:124"},"nodeType":"YulExpressionStatement","src":"9182:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9152:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9163:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9170:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9159:3:124"},"nodeType":"YulFunctionCall","src":"9159:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9149:2:124"},"nodeType":"YulFunctionCall","src":"9149:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9142:6:124"},"nodeType":"YulFunctionCall","src":"9142:37:124"},"nodeType":"YulIf","src":"9139:57:124"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9077:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9088:5:124","type":""}],"src":"9039:163:124"},{"body":{"nodeType":"YulBlock","src":"9318:1541:124","statements":[{"body":{"nodeType":"YulBlock","src":"9365:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9374:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9377:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9367:6:124"},"nodeType":"YulFunctionCall","src":"9367:12:124"},"nodeType":"YulExpressionStatement","src":"9367:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9339:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9348:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9335:3:124"},"nodeType":"YulFunctionCall","src":"9335:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9360:3:124","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9331:3:124"},"nodeType":"YulFunctionCall","src":"9331:33:124"},"nodeType":"YulIf","src":"9328:53:124"},{"nodeType":"YulVariableDeclaration","src":"9390:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_1859","nodeType":"YulIdentifier","src":"9403:20:124"},"nodeType":"YulFunctionCall","src":"9403:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9394:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9441:5:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9501:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9512:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"9448:52:124"},"nodeType":"YulFunctionCall","src":"9448:72:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9434:6:124"},"nodeType":"YulFunctionCall","src":"9434:87:124"},"nodeType":"YulExpressionStatement","src":"9434:87:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9541:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9548:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9537:3:124"},"nodeType":"YulFunctionCall","src":"9537:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9587:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9598:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9583:3:124"},"nodeType":"YulFunctionCall","src":"9583:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9553:29:124"},"nodeType":"YulFunctionCall","src":"9553:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9530:6:124"},"nodeType":"YulFunctionCall","src":"9530:73:124"},"nodeType":"YulExpressionStatement","src":"9530:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9623:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9630:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9619:3:124"},"nodeType":"YulFunctionCall","src":"9619:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9669:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9680:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9665:3:124"},"nodeType":"YulFunctionCall","src":"9665:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9635:29:124"},"nodeType":"YulFunctionCall","src":"9635:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9612:6:124"},"nodeType":"YulFunctionCall","src":"9612:73:124"},"nodeType":"YulExpressionStatement","src":"9612:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9705:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9712:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9701:3:124"},"nodeType":"YulFunctionCall","src":"9701:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9751:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9762:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9747:3:124"},"nodeType":"YulFunctionCall","src":"9747:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9717:29:124"},"nodeType":"YulFunctionCall","src":"9717:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9694:6:124"},"nodeType":"YulFunctionCall","src":"9694:73:124"},"nodeType":"YulExpressionStatement","src":"9694:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9787:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9794:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9783:3:124"},"nodeType":"YulFunctionCall","src":"9783:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9834:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9845:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9830:3:124"},"nodeType":"YulFunctionCall","src":"9830:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9800:29:124"},"nodeType":"YulFunctionCall","src":"9800:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9776:6:124"},"nodeType":"YulFunctionCall","src":"9776:75:124"},"nodeType":"YulExpressionStatement","src":"9776:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9871:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9878:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9867:3:124"},"nodeType":"YulFunctionCall","src":"9867:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9918:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9929:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9914:3:124"},"nodeType":"YulFunctionCall","src":"9914:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9884:29:124"},"nodeType":"YulFunctionCall","src":"9884:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9860:6:124"},"nodeType":"YulFunctionCall","src":"9860:75:124"},"nodeType":"YulExpressionStatement","src":"9860:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9955:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9962:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9951:3:124"},"nodeType":"YulFunctionCall","src":"9951:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10001:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10012:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9997:3:124"},"nodeType":"YulFunctionCall","src":"9997:19:124"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"9968:28:124"},"nodeType":"YulFunctionCall","src":"9968:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9944:6:124"},"nodeType":"YulFunctionCall","src":"9944:74:124"},"nodeType":"YulExpressionStatement","src":"9944:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10038:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"10045:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10034:3:124"},"nodeType":"YulFunctionCall","src":"10034:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10084:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10095:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10080:3:124"},"nodeType":"YulFunctionCall","src":"10080:19:124"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"10051:28:124"},"nodeType":"YulFunctionCall","src":"10051:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10027:6:124"},"nodeType":"YulFunctionCall","src":"10027:74:124"},"nodeType":"YulExpressionStatement","src":"10027:74:124"},{"nodeType":"YulVariableDeclaration","src":"10110:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10120:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10114:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10143:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10150:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10139:3:124"},"nodeType":"YulFunctionCall","src":"10139:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10189:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10200:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10185:3:124"},"nodeType":"YulFunctionCall","src":"10185:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10155:29:124"},"nodeType":"YulFunctionCall","src":"10155:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10132:6:124"},"nodeType":"YulFunctionCall","src":"10132:73:124"},"nodeType":"YulExpressionStatement","src":"10132:73:124"},{"nodeType":"YulVariableDeclaration","src":"10214:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10224:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10218:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10247:5:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10254:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10243:3:124"},"nodeType":"YulFunctionCall","src":"10243:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10293:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10304:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10289:3:124"},"nodeType":"YulFunctionCall","src":"10289:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10259:29:124"},"nodeType":"YulFunctionCall","src":"10259:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10236:6:124"},"nodeType":"YulFunctionCall","src":"10236:73:124"},"nodeType":"YulExpressionStatement","src":"10236:73:124"},{"nodeType":"YulVariableDeclaration","src":"10318:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10328:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"10322:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10351:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"10358:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10347:3:124"},"nodeType":"YulFunctionCall","src":"10347:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10397:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"10408:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10393:3:124"},"nodeType":"YulFunctionCall","src":"10393:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10363:29:124"},"nodeType":"YulFunctionCall","src":"10363:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10340:6:124"},"nodeType":"YulFunctionCall","src":"10340:73:124"},"nodeType":"YulExpressionStatement","src":"10340:73:124"},{"nodeType":"YulVariableDeclaration","src":"10422:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10432:3:124","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"10426:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10455:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"10462:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10451:3:124"},"nodeType":"YulFunctionCall","src":"10451:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10501:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"10512:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10497:3:124"},"nodeType":"YulFunctionCall","src":"10497:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10467:29:124"},"nodeType":"YulFunctionCall","src":"10467:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10444:6:124"},"nodeType":"YulFunctionCall","src":"10444:73:124"},"nodeType":"YulExpressionStatement","src":"10444:73:124"},{"nodeType":"YulVariableDeclaration","src":"10526:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10536:3:124","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"10530:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10559:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"10566:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10555:3:124"},"nodeType":"YulFunctionCall","src":"10555:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10605:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"10616:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10601:3:124"},"nodeType":"YulFunctionCall","src":"10601:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10571:29:124"},"nodeType":"YulFunctionCall","src":"10571:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10548:6:124"},"nodeType":"YulFunctionCall","src":"10548:73:124"},"nodeType":"YulExpressionStatement","src":"10548:73:124"},{"nodeType":"YulVariableDeclaration","src":"10630:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10640:3:124","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"10634:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10663:5:124"},{"name":"_6","nodeType":"YulIdentifier","src":"10670:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10659:3:124"},"nodeType":"YulFunctionCall","src":"10659:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10709:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"10720:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10705:3:124"},"nodeType":"YulFunctionCall","src":"10705:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10675:29:124"},"nodeType":"YulFunctionCall","src":"10675:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10652:6:124"},"nodeType":"YulFunctionCall","src":"10652:73:124"},"nodeType":"YulExpressionStatement","src":"10652:73:124"},{"nodeType":"YulVariableDeclaration","src":"10734:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10744:3:124","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"10738:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10767:5:124"},{"name":"_7","nodeType":"YulIdentifier","src":"10774:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10763:3:124"},"nodeType":"YulFunctionCall","src":"10763:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10813:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"10824:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10809:3:124"},"nodeType":"YulFunctionCall","src":"10809:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10779:29:124"},"nodeType":"YulFunctionCall","src":"10779:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10756:6:124"},"nodeType":"YulFunctionCall","src":"10756:73:124"},"nodeType":"YulExpressionStatement","src":"10756:73:124"},{"nodeType":"YulAssignment","src":"10838:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10848:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10838:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9284:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9295:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9307:6:124","type":""}],"src":"9207:1652:124"},{"body":{"nodeType":"YulBlock","src":"10984:159:124","statements":[{"body":{"nodeType":"YulBlock","src":"11030:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11039:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11042:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11032:6:124"},"nodeType":"YulFunctionCall","src":"11032:12:124"},"nodeType":"YulExpressionStatement","src":"11032:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11005:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11014:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11001:3:124"},"nodeType":"YulFunctionCall","src":"11001:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11026:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10997:3:124"},"nodeType":"YulFunctionCall","src":"10997:32:124"},"nodeType":"YulIf","src":"10994:52:124"},{"nodeType":"YulAssignment","src":"11055:82:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11118:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11129:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"11065:52:124"},"nodeType":"YulFunctionCall","src":"11065:72:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11055:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10950:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10961:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10973:6:124","type":""}],"src":"10864:279:124"},{"body":{"nodeType":"YulBlock","src":"11229:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"11275:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11284:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11287:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11277:6:124"},"nodeType":"YulFunctionCall","src":"11277:12:124"},"nodeType":"YulExpressionStatement","src":"11277:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11250:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11259:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11246:3:124"},"nodeType":"YulFunctionCall","src":"11246:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11271:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11242:3:124"},"nodeType":"YulFunctionCall","src":"11242:32:124"},"nodeType":"YulIf","src":"11239:52:124"},{"nodeType":"YulAssignment","src":"11300:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11316:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11310:5:124"},"nodeType":"YulFunctionCall","src":"11310:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11300:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11195:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11206:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11218:6:124","type":""}],"src":"11148:184:124"},{"body":{"nodeType":"YulBlock","src":"11417:126:124","statements":[{"body":{"nodeType":"YulBlock","src":"11463:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11472:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11475:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11465:6:124"},"nodeType":"YulFunctionCall","src":"11465:12:124"},"nodeType":"YulExpressionStatement","src":"11465:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11438:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11447:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11434:3:124"},"nodeType":"YulFunctionCall","src":"11434:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11459:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11430:3:124"},"nodeType":"YulFunctionCall","src":"11430:32:124"},"nodeType":"YulIf","src":"11427:52:124"},{"nodeType":"YulAssignment","src":"11488:49:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11527:9:124"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"11498:28:124"},"nodeType":"YulFunctionCall","src":"11498:39:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11488:6:124"}]}]},"name":"abi_decode_tuple_t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11383:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11394:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11406:6:124","type":""}],"src":"11337:206:124"},{"body":{"nodeType":"YulBlock","src":"11580:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11597:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11600:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11590:6:124"},"nodeType":"YulFunctionCall","src":"11590:88:124"},"nodeType":"YulExpressionStatement","src":"11590:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11694:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11697:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11687:6:124"},"nodeType":"YulFunctionCall","src":"11687:15:124"},"nodeType":"YulExpressionStatement","src":"11687:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11718:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11721:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11711:6:124"},"nodeType":"YulFunctionCall","src":"11711:15:124"},"nodeType":"YulExpressionStatement","src":"11711:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11548:184:124"},{"body":{"nodeType":"YulBlock","src":"11785:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"11812:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11814:16:124"},"nodeType":"YulFunctionCall","src":"11814:18:124"},"nodeType":"YulExpressionStatement","src":"11814:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11801:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11808:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11804:3:124"},"nodeType":"YulFunctionCall","src":"11804:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11798:2:124"},"nodeType":"YulFunctionCall","src":"11798:13:124"},"nodeType":"YulIf","src":"11795:39:124"},{"nodeType":"YulAssignment","src":"11843:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11854:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11857:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11850:3:124"},"nodeType":"YulFunctionCall","src":"11850:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11843:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11768:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11771:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11777:3:124","type":""}],"src":"11737:128:124"},{"body":{"nodeType":"YulBlock","src":"11976:905:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11986:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11996:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11990:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"12043:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12052:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12055:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12045:6:124"},"nodeType":"YulFunctionCall","src":"12045:12:124"},"nodeType":"YulExpressionStatement","src":"12045:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12018:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12027:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12014:3:124"},"nodeType":"YulFunctionCall","src":"12014:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12039:2:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12010:3:124"},"nodeType":"YulFunctionCall","src":"12010:32:124"},"nodeType":"YulIf","src":"12007:52:124"},{"nodeType":"YulVariableDeclaration","src":"12068:30:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12088:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12082:5:124"},"nodeType":"YulFunctionCall","src":"12082:16:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"12072:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12107:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12117:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"12111:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"12162:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12171:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12174:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12164:6:124"},"nodeType":"YulFunctionCall","src":"12164:12:124"},"nodeType":"YulExpressionStatement","src":"12164:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12150:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"12158:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12147:2:124"},"nodeType":"YulFunctionCall","src":"12147:14:124"},"nodeType":"YulIf","src":"12144:34:124"},{"nodeType":"YulVariableDeclaration","src":"12187:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12201:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"12212:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12197:3:124"},"nodeType":"YulFunctionCall","src":"12197:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"12191:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"12267:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12276:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12279:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12269:6:124"},"nodeType":"YulFunctionCall","src":"12269:12:124"},"nodeType":"YulExpressionStatement","src":"12269:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12246:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"12250:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12242:3:124"},"nodeType":"YulFunctionCall","src":"12242:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"12257:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12238:3:124"},"nodeType":"YulFunctionCall","src":"12238:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12231:6:124"},"nodeType":"YulFunctionCall","src":"12231:35:124"},"nodeType":"YulIf","src":"12228:55:124"},{"nodeType":"YulVariableDeclaration","src":"12292:19:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12308:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12302:5:124"},"nodeType":"YulFunctionCall","src":"12302:9:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"12296:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"12334:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"12336:16:124"},"nodeType":"YulFunctionCall","src":"12336:18:124"},"nodeType":"YulExpressionStatement","src":"12336:18:124"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12326:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"12330:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12323:2:124"},"nodeType":"YulFunctionCall","src":"12323:10:124"},"nodeType":"YulIf","src":"12320:36:124"},{"nodeType":"YulVariableDeclaration","src":"12365:20:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12379:1:124","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"12382:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12375:3:124"},"nodeType":"YulFunctionCall","src":"12375:10:124"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"12369:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12394:39:124","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"12425:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12429:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12421:3:124"},"nodeType":"YulFunctionCall","src":"12421:11:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"12405:15:124"},"nodeType":"YulFunctionCall","src":"12405:28:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"12398:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12442:16:124","value":{"name":"dst","nodeType":"YulIdentifier","src":"12455:3:124"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"12446:5:124","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12474:3:124"},{"name":"_4","nodeType":"YulIdentifier","src":"12479:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:124"},"nodeType":"YulFunctionCall","src":"12467:15:124"},"nodeType":"YulExpressionStatement","src":"12467:15:124"},{"nodeType":"YulAssignment","src":"12491:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12502:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12507:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12498:3:124"},"nodeType":"YulFunctionCall","src":"12498:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"12491:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"12519:34:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12541:2:124"},{"name":"_5","nodeType":"YulIdentifier","src":"12545:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12537:3:124"},"nodeType":"YulFunctionCall","src":"12537:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12550:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12533:3:124"},"nodeType":"YulFunctionCall","src":"12533:20:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"12523:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"12585:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12594:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12597:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12587:6:124"},"nodeType":"YulFunctionCall","src":"12587:12:124"},"nodeType":"YulExpressionStatement","src":"12587:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"12568:6:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"12576:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12565:2:124"},"nodeType":"YulFunctionCall","src":"12565:19:124"},"nodeType":"YulIf","src":"12562:39:124"},{"nodeType":"YulVariableDeclaration","src":"12610:22:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12625:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12629:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12621:3:124"},"nodeType":"YulFunctionCall","src":"12621:11:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"12614:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"12697:154:124","statements":[{"nodeType":"YulVariableDeclaration","src":"12711:23:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12730:3:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12724:5:124"},"nodeType":"YulFunctionCall","src":"12724:10:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12715:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12772:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12747:24:124"},"nodeType":"YulFunctionCall","src":"12747:31:124"},"nodeType":"YulExpressionStatement","src":"12747:31:124"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12798:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"12803:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12791:6:124"},"nodeType":"YulFunctionCall","src":"12791:18:124"},"nodeType":"YulExpressionStatement","src":"12791:18:124"},{"nodeType":"YulAssignment","src":"12822:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12833:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12838:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12829:3:124"},"nodeType":"YulFunctionCall","src":"12829:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"12822:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12652:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"12657:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12649:2:124"},"nodeType":"YulFunctionCall","src":"12649:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12665:23:124","statements":[{"nodeType":"YulAssignment","src":"12667:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12678:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12683:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12674:3:124"},"nodeType":"YulFunctionCall","src":"12674:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"12667:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"12645:3:124","statements":[]},"src":"12641:210:124"},{"nodeType":"YulAssignment","src":"12860:15:124","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"12870:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12860:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11942:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11953:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11965:6:124","type":""}],"src":"11870:1011:124"},{"body":{"nodeType":"YulBlock","src":"12918:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12935:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12938:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12928:6:124"},"nodeType":"YulFunctionCall","src":"12928:88:124"},"nodeType":"YulExpressionStatement","src":"12928:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13032:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"13035:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13025:6:124"},"nodeType":"YulFunctionCall","src":"13025:15:124"},"nodeType":"YulExpressionStatement","src":"13025:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13056:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13059:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13049:6:124"},"nodeType":"YulFunctionCall","src":"13049:15:124"},"nodeType":"YulExpressionStatement","src":"13049:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"12886:184:124"},{"body":{"nodeType":"YulBlock","src":"13166:674:124","statements":[{"body":{"nodeType":"YulBlock","src":"13212:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13221:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13224:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13214:6:124"},"nodeType":"YulFunctionCall","src":"13214:12:124"},"nodeType":"YulExpressionStatement","src":"13214:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13187:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13196:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13183:3:124"},"nodeType":"YulFunctionCall","src":"13183:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13208:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13179:3:124"},"nodeType":"YulFunctionCall","src":"13179:32:124"},"nodeType":"YulIf","src":"13176:52:124"},{"nodeType":"YulVariableDeclaration","src":"13237:30:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13257:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13251:5:124"},"nodeType":"YulFunctionCall","src":"13251:16:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"13241:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13276:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13286:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13280:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13331:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13340:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13343:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13333:6:124"},"nodeType":"YulFunctionCall","src":"13333:12:124"},"nodeType":"YulExpressionStatement","src":"13333:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13319:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13327:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13316:2:124"},"nodeType":"YulFunctionCall","src":"13316:14:124"},"nodeType":"YulIf","src":"13313:34:124"},{"nodeType":"YulVariableDeclaration","src":"13356:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13370:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"13381:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13366:3:124"},"nodeType":"YulFunctionCall","src":"13366:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13360:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13436:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13445:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13448:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13438:6:124"},"nodeType":"YulFunctionCall","src":"13438:12:124"},"nodeType":"YulExpressionStatement","src":"13438:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13415:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"13419:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13411:3:124"},"nodeType":"YulFunctionCall","src":"13411:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13426:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13407:3:124"},"nodeType":"YulFunctionCall","src":"13407:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13400:6:124"},"nodeType":"YulFunctionCall","src":"13400:35:124"},"nodeType":"YulIf","src":"13397:55:124"},{"nodeType":"YulVariableDeclaration","src":"13461:19:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13477:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13471:5:124"},"nodeType":"YulFunctionCall","src":"13471:9:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"13465:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13503:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13505:16:124"},"nodeType":"YulFunctionCall","src":"13505:18:124"},"nodeType":"YulExpressionStatement","src":"13505:18:124"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"13495:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13499:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13492:2:124"},"nodeType":"YulFunctionCall","src":"13492:10:124"},"nodeType":"YulIf","src":"13489:36:124"},{"nodeType":"YulVariableDeclaration","src":"13534:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"13575:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"13579:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13571:3:124"},"nodeType":"YulFunctionCall","src":"13571:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"13586:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13567:3:124"},"nodeType":"YulFunctionCall","src":"13567:86:124"},{"kind":"number","nodeType":"YulLiteral","src":"13655:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13563:3:124"},"nodeType":"YulFunctionCall","src":"13563:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"13547:15:124"},"nodeType":"YulFunctionCall","src":"13547:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"13538:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"13675:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"13682:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13668:6:124"},"nodeType":"YulFunctionCall","src":"13668:17:124"},"nodeType":"YulExpressionStatement","src":"13668:17:124"},{"body":{"nodeType":"YulBlock","src":"13731:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13740:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13743:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13733:6:124"},"nodeType":"YulFunctionCall","src":"13733:12:124"},"nodeType":"YulExpressionStatement","src":"13733:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13708:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"13712:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13704:3:124"},"nodeType":"YulFunctionCall","src":"13704:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"13717:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13700:3:124"},"nodeType":"YulFunctionCall","src":"13700:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13722:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13697:2:124"},"nodeType":"YulFunctionCall","src":"13697:33:124"},"nodeType":"YulIf","src":"13694:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13782:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"13786:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13778:3:124"},"nodeType":"YulFunctionCall","src":"13778:11:124"},{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"13795:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"13802:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13791:3:124"},"nodeType":"YulFunctionCall","src":"13791:14:124"},{"name":"_3","nodeType":"YulIdentifier","src":"13807:2:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"13756:21:124"},"nodeType":"YulFunctionCall","src":"13756:54:124"},"nodeType":"YulExpressionStatement","src":"13756:54:124"},{"nodeType":"YulAssignment","src":"13819:15:124","value":{"name":"array","nodeType":"YulIdentifier","src":"13829:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13819:6:124"}]}]},"name":"abi_decode_tuple_t_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13132:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13143:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13155:6:124","type":""}],"src":"13075:765:124"},{"body":{"nodeType":"YulBlock","src":"13892:148:124","statements":[{"body":{"nodeType":"YulBlock","src":"13983:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13985:16:124"},"nodeType":"YulFunctionCall","src":"13985:18:124"},"nodeType":"YulExpressionStatement","src":"13985:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13908:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"13915:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13905:2:124"},"nodeType":"YulFunctionCall","src":"13905:77:124"},"nodeType":"YulIf","src":"13902:103:124"},{"nodeType":"YulAssignment","src":"14014:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14025:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"14032:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14021:3:124"},"nodeType":"YulFunctionCall","src":"14021:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"14014:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"13874:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"13884:3:124","type":""}],"src":"13845:195:124"},{"body":{"nodeType":"YulBlock","src":"14166:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14194:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14176:6:124"},"nodeType":"YulFunctionCall","src":"14176:21:124"},"nodeType":"YulExpressionStatement","src":"14176:21:124"},{"nodeType":"YulAssignment","src":"14206:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14232:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14244:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14255:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14240:3:124"},"nodeType":"YulFunctionCall","src":"14240:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"14214:17:124"},"nodeType":"YulFunctionCall","src":"14214:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14206:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14135:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14146:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14157:4:124","type":""}],"src":"14045:220:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n        mstore(add(headStart, 224), and(value7, 0xffffffffff))\n        mstore(add(headStart, 256), iszero(iszero(value8)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed(headStart, value11, value10, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 384)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n        mstore(add(headStart, 224), value7)\n        mstore(add(headStart, 256), value8)\n        mstore(add(headStart, 288), value9)\n        mstore(add(headStart, 320), value10)\n        mstore(add(headStart, 352), and(value11, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed(headStart, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 320)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), iszero(iszero(value5)))\n        mstore(add(headStart, 192), iszero(iszero(value6)))\n        mstore(add(headStart, 224), iszero(iszero(value7)))\n        mstore(add(headStart, 256), iszero(iszero(value8)))\n        mstore(add(headStart, 288), iszero(iszero(value9)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_TokenData_$5790_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 64\n        pos := add(headStart, _2)\n        let tail_2 := add(add(headStart, shl(5, length)), _2)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n            let _3 := mload(srcPtr)\n            let memberValue0 := mload(_3)\n            mstore(tail_2, _2)\n            let tail_3 := abi_encode_string(memberValue0, add(tail_2, _2))\n            mstore(add(tail_2, _1), and(mload(add(_3, _1)), 0xffffffffffffffffffffffffffffffffffffffff))\n            tail_2 := tail_3\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        tail := tail_2\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_1859() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_1859()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_decode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint40_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint40_fromMemory(headStart)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := mload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := mload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_3, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32))\n        mstore(array, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(array, 32), _3)\n        value0 := array\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"6796":[{"length":32,"start":347},{"length":32,"start":1112},{"length":32,"start":1435},{"length":32,"start":1729},{"length":32,"start":3184},{"length":32,"start":4177},{"length":32,"start":4491},{"length":32,"start":4808},{"length":32,"start":5219},{"length":32,"start":5546},{"length":32,"start":6083},{"length":32,"start":6494},{"length":32,"start":6801},{"length":32,"start":7108},{"length":32,"start":8250},{"length":32,"start":8627},{"length":32,"start":8952},{"length":32,"start":9267},{"length":32,"start":10105}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101515760003560e01c806351460e25116100cd578063b55d990411610081578063d7ed3ef411610066578063d7ed3ef414610425578063f561ae4114610438578063fcf40a621461044057600080fd5b8063b55d9904146103b8578063d2493b6c146103db57600080fd5b806369b169e1116100b257806369b169e1146103895780637ba1ae3614610390578063b316ff89146103a357600080fd5b806351460e25146103635780636744362a1461037657600080fd5b80633c798109116101245780633e150141116101095780633e150141146102c157806346fbe558146103285780634d44ac4f1461035057600080fd5b80633c7981091461029b5780633cb8a622146102ae57600080fd5b80630542975c14610156578063163a0f20146101a757806328dd2d01146101c857806335ea6a7514610228575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101ba6101b536600461295a565b610453565b60405190815260200161019e565b6101db6101d6366004612977565b61058a565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015264ffffffffff1660e083015215156101008201526101200161019e565b61023b61023636600461295a565b610c5a565b604080519c8d5260208d019b909b52998b019890985260608a0196909652608089019490945260a088019290925260c087015260e086015261010085015261012084015261014083015264ffffffffff166101608201526101800161019e565b6101ba6102a936600461295a565b61104a565b6101ba6102bc36600461295a565b611184565b6102d46102cf36600461295a565b6112b5565b604080519a8b5260208b01999099529789019690965260608801949094526080870192909252151560a0860152151560c0850152151560e0840152151561010083015215156101208201526101400161019e565b61033b61033636600461295a565b61145b565b6040805192835260208301919091520161019e565b6101ba61035e36600461295a565b6115a5565b6101ba61037136600461295a565b6117be565b61017d61038436600461295a565b611959565b60026101ba565b6101ba61039e36600461295a565b611a8a565b6103ab611bbe565b60405161019e9190612a2a565b6103cb6103c636600461295a565b612033565b604051901515815260200161019e565b6103ee6103e936600461295a565b6121ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292169181019190915260600161019e565b6103cb61043336600461295a565b6122f3565b6103ab61242d565b6103cb61044e36600461295a565b612772565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e59190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105779190612beb565b805190915060a81c60ff165b9392505050565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106289190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e8116600483015291909116906335ea6a75906024016101e060405180830381865afa158015610697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bb9190612c4e565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190612ae4565b6040517f4417a58300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529190911690634417a58390602401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190612beb565b6101008301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529293509116906370a0823190602401602060405180830381865afa158015610855573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108799190612d71565b6101408301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929d509116906370a0823190602401602060405180830381865afa1580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109129190612d71565b6101208301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929b509116906370a0823190602401602060405180830381865afa158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190612d71565b6101208301516040517fc634dfaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929c5091169063c634dfaa90602401602060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190612d71565b6101408301516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929a50911690631da24f3e90602401602060405180830381865afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610add9190612d71565b965081604001516fffffffffffffffffffffffffffffffff16945081610120015173ffffffffffffffffffffffffffffffffffffffff1663e78c9b3b8d6040518263ffffffff1660e01b8152600401610b52919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b939190612d71565b6101208301516040517f79ce6b8c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529298509116906379ce6b8c90602401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190612d8a565b9350610c498260e0015161ffff16826128a890919063ffffffff16565b925050509295985092959850929598565b60008060008060008060008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd9190612ae4565b73ffffffffffffffffffffffffffffffffffffffff166335ea6a758f6040518263ffffffff1660e01b8152600401610d51919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190612c4e565b9050806101a0015181610180015182610100015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e159190612d71565b83610120015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e899190612d71565b84610140015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190612d71565b856040015186608001518760a0015188610120015173ffffffffffffffffffffffffffffffffffffffff166390f6fcf26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190612d71565b89602001518a606001518b60c001518b6fffffffffffffffffffffffffffffffff169b508a6fffffffffffffffffffffffffffffffff169a50866fffffffffffffffffffffffffffffffff169650856fffffffffffffffffffffffffffffffff169550846fffffffffffffffffffffffffffffffff169450826fffffffffffffffffffffffffffffffff169250816fffffffffffffffffffffffffffffffff1691509c509c509c509c509c509c509c509c509c509c509c509c505091939597999b5091939597999b565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa15801561114c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111709190612beb565b5160d41c64ffffffffff1690565b92915050565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190612beb565b5160981c61ffff1690565b60008060008060008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113559190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152919091169063c44b11f790602401602060405180830381865afa1580156113c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e79190612beb565b5160ff603082901c169d61ffff8083169e50601083901c81169d50602083901c81169c50604083901c169a508c151599506704000000000000008216151598506708000000000000008216151597506701000000000000008216151596506702000000000000009091161515945092505050565b60008061159b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f09190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919091169063c44b11f790602401602060405180830381865afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115829190612beb565b51640fffffffff605082901c81169260749290921c1690565b9094909350915050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116379190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612c4e565b905080610140015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190612d71565b81610120015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190612d71565b6105839190612dd4565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118509190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190612c4e565b905080610100015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105839190612d71565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb9190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190612c4e565b61016001519392505050565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1e9190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb09190612beb565b5160b01c640fffffffff1690565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c519190612ae4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ca0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ce69190810190612dec565b90506000815167ffffffffffffffff811115611d0457611d04612b01565b604051908082528060200260200182016040528015611d4a57816020015b604080518082019091526060815260006020820152815260200190600190039081611d225790505b50905060005b825181101561202b57739f8f72aa9304c8b593d555f12ef6589cc3a579a273ffffffffffffffffffffffffffffffffffffffff16838281518110611d9657611d96612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611e555760405180604001604052806040518060400160405280600381526020017f4d4b5200000000000000000000000000000000000000000000000000000000008152508152602001848381518110611e1257611e12612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16815250828281518110611e4557611e45612e9e565b6020026020010181905250612019565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff16838281518110611e9257611e92612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611f0e5760405180604001604052806040518060400160405280600381526020017f45544800000000000000000000000000000000000000000000000000000000008152508152602001848381518110611e1257611e12612e9e565b6040518060400160405280848381518110611f2b57611f2b612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fc39190810190612ecd565b8152602001848381518110611fda57611fda612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681525082828151811061200d5761200d612e9e565b60200260200101819052505b8061202381612f7f565b915050611d50565b509392505050565b60006121a17f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c79190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190612beb565b51670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9695505050505050565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122409190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156122af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d39190612c4e565b610100810151610120820151610140909201519097919650945092505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa1580156123f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124179190612beb565b9050610583815167800000000000000016151590565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190612ae4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561250f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526125559190810190612dec565b90506000815167ffffffffffffffff81111561257357612573612b01565b6040519080825280602002602001820160405280156125b957816020015b6040805180820190915260608152600060208201528152602001906001900390816125915790505b50905060005b825181101561202b5760008473ffffffffffffffffffffffffffffffffffffffff166335ea6a758584815181106125f8576125f8612e9e565b60200260200101516040518263ffffffff1660e01b8152600401612638919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190612c4e565b9050604051806040016040528082610100015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156126d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261271d9190810190612ecd565b815260200182610100015173ffffffffffffffffffffffffffffffffffffffff1681525083838151811061275357612753612e9e565b602002602001018190525050808061276a90612f7f565b9150506125bf565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015612874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128989190612beb565b5167400000000000000016151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a9190612fb8565b60405180910390fd5b50509051600191821b82011c16151590565b73ffffffffffffffffffffffffffffffffffffffff8116811461295757600080fd5b50565b60006020828403121561296c57600080fd5b813561058381612935565b6000806040838503121561298a57600080fd5b823561299581612935565b915060208301356129a581612935565b809150509250929050565b60005b838110156129cb5781810151838201526020016129b3565b838111156129da576000848401525b50505050565b600081518084526129f88160208601602086016129b0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ac6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc089840301855281518051878552612a93888601826129e0565b9189015173ffffffffffffffffffffffffffffffffffffffff169489019490945294870194925090860190600101612a51565b509098975050505050505050565b8051612adf81612935565b919050565b600060208284031215612af657600080fd5b815161058381612935565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715612b5457612b54612b01565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ba157612ba1612b01565b604052919050565b600060208284031215612bbb57600080fd5b6040516020810181811067ffffffffffffffff82111715612bde57612bde612b01565b6040529151825250919050565b600060208284031215612bfd57600080fd5b6105838383612ba9565b80516fffffffffffffffffffffffffffffffff81168114612adf57600080fd5b805164ffffffffff81168114612adf57600080fd5b805161ffff81168114612adf57600080fd5b60006101e08284031215612c6157600080fd5b612c69612b30565b612c738484612ba9565b8152612c8160208401612c07565b6020820152612c9260408401612c07565b6040820152612ca360608401612c07565b6060820152612cb460808401612c07565b6080820152612cc560a08401612c07565b60a0820152612cd660c08401612c27565b60c0820152612ce760e08401612c3c565b60e0820152610100612cfa818501612ad4565b90820152610120612d0c848201612ad4565b90820152610140612d1e848201612ad4565b90820152610160612d30848201612ad4565b90820152610180612d42848201612c07565b908201526101a0612d54848201612c07565b908201526101c0612d66848201612c07565b908201529392505050565b600060208284031215612d8357600080fd5b5051919050565b600060208284031215612d9c57600080fd5b61058382612c27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612de757612de7612da5565b500190565b60006020808385031215612dff57600080fd5b825167ffffffffffffffff80821115612e1757600080fd5b818501915085601f830112612e2b57600080fd5b815181811115612e3d57612e3d612b01565b8060051b9150612e4e848301612b5a565b8181529183018401918481019088841115612e6857600080fd5b938501935b83851015612e925784519250612e8283612935565b8282529385019390850190612e6d565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612edf57600080fd5b815167ffffffffffffffff80821115612ef757600080fd5b818401915084601f830112612f0b57600080fd5b815181811115612f1d57612f1d612b01565b612f4e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612b5a565b9150808252856020828501011115612f6557600080fd5b612f768160208401602086016129b0565b50949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fb157612fb1612da5565b5060010190565b60208152600061058360208301846129e056fea26469706673582212209ccfa5d322ff917a315c4612a56debcb62e987fd510d65030e1acd9a1dc62a0964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x151 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x51460E25 GT PUSH2 0xCD JUMPI DUP1 PUSH4 0xB55D9904 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xD7ED3EF4 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD7ED3EF4 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xF561AE41 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0xFCF40A62 EQ PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB55D9904 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD2493B6C EQ PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x69B169E1 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x69B169E1 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x7BA1AE36 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0xB316FF89 EQ PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51460E25 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x6744362A EQ PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3C798109 GT PUSH2 0x124 JUMPI DUP1 PUSH4 0x3E150141 GT PUSH2 0x109 JUMPI DUP1 PUSH4 0x3E150141 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0x46FBE558 EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x4D44AC4F EQ PUSH2 0x350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3C798109 EQ PUSH2 0x29B JUMPI DUP1 PUSH4 0x3CB8A622 EQ PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x163A0F20 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x28DD2D01 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x228 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x453 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1DB PUSH2 0x1D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2977 JUMP JUMPDEST PUSH2 0x58A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP10 DUP11 MSTORE PUSH1 0x20 DUP11 ADD SWAP9 SWAP1 SWAP9 MSTORE SWAP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0xE0 DUP4 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0x120 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x23B PUSH2 0x236 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP13 DUP14 MSTORE PUSH1 0x20 DUP14 ADD SWAP12 SWAP1 SWAP12 MSTORE SWAP10 DUP12 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x60 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x80 DUP10 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xA0 DUP9 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x140 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x180 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x2A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x104A JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x2BC CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1184 JUMP JUMPDEST PUSH2 0x2D4 PUSH2 0x2CF CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP11 DUP12 MSTORE PUSH1 0x20 DUP12 ADD SWAP10 SWAP1 SWAP10 MSTORE SWAP8 DUP10 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x60 DUP9 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x80 DUP8 ADD SWAP3 SWAP1 SWAP3 MSTORE ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE ISZERO ISZERO PUSH1 0xE0 DUP5 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE ISZERO ISZERO PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x140 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x33B PUSH2 0x336 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x145B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x35E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x15A5 JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x371 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x17BE JUMP JUMPDEST PUSH2 0x17D PUSH2 0x384 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1959 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x1BA JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x39E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1A8A JUMP JUMPDEST PUSH2 0x3AB PUSH2 0x1BBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x19E SWAP2 SWAP1 PUSH2 0x2A2A JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x2033 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x3E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x21AB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x433 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x22F3 JUMP JUMPDEST PUSH2 0x3AB PUSH2 0x242D JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x2772 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4E5 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x577 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xA8 SHR PUSH1 0xFF AND JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x604 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x628 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x697 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6BB SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74E SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4417A58300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4417A583 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7E0 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x855 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x879 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP14 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x912 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP12 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x987 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AB SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xC634DFAA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP13 POP SWAP2 AND SWAP1 PUSH4 0xC634DFAA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA44 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP11 POP SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xADD SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST SWAP7 POP DUP2 PUSH1 0x40 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP DUP2 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE78C9B3B DUP14 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB52 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB93 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x79CE6B8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP9 POP SWAP2 AND SWAP1 PUSH4 0x79CE6B8C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC2C SWAP2 SWAP1 PUSH2 0x2D8A JUMP JUMPDEST SWAP4 POP PUSH2 0xC49 DUP3 PUSH1 0xE0 ADD MLOAD PUSH2 0xFFFF AND DUP3 PUSH2 0x28A8 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCFD SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP16 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD51 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD93 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1A0 ADD MLOAD DUP2 PUSH2 0x180 ADD MLOAD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE15 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP4 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE89 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP5 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xED9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEFD SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP6 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x90F6FCF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF80 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP10 PUSH1 0x20 ADD MLOAD DUP11 PUSH1 0x60 ADD MLOAD DUP12 PUSH1 0xC0 ADD MLOAD DUP12 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP12 POP DUP11 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP11 POP DUP7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP7 POP DUP6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 POP DUP5 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP12 POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP12 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10DE SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x114C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1170 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1218 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1286 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AA SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0x98 SHR PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1331 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1355 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13E7 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xFF PUSH1 0x30 DUP3 SWAP1 SHR AND SWAP14 PUSH2 0xFFFF DUP1 DUP4 AND SWAP15 POP PUSH1 0x10 DUP4 SWAP1 SHR DUP2 AND SWAP14 POP PUSH1 0x20 DUP4 SWAP1 SHR DUP2 AND SWAP13 POP PUSH1 0x40 DUP4 SWAP1 SHR AND SWAP11 POP DUP13 ISZERO ISZERO SWAP10 POP PUSH8 0x400000000000000 DUP3 AND ISZERO ISZERO SWAP9 POP PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP8 POP PUSH8 0x100000000000000 DUP3 AND ISZERO ISZERO SWAP7 POP PUSH8 0x200000000000000 SWAP1 SWAP2 AND ISZERO ISZERO SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x159B PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14F0 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x155E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1582 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP3 PUSH1 0x74 SWAP3 SWAP1 SWAP3 SHR AND SWAP1 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1613 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1637 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16CA SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x171C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1740 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1790 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17B4 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x583 SWAP2 SWAP1 PUSH2 0x2DD4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1850 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E3 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1935 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x583 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19EB SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A7E SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x160 ADD MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B1E SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BB0 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C2D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C51 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1CE6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2DEC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D04 JUMPI PUSH2 0x1D04 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1D4A JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1D22 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x202B JUMPI PUSH20 0x9F8F72AA9304C8B593D555F12EF6589CC3A579A2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D96 JUMPI PUSH2 0x1D96 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E55 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D4B520000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E12 JUMPI PUSH2 0x1E12 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E45 JUMPI PUSH2 0x1E45 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0x2019 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E92 JUMPI PUSH2 0x1E92 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F0E JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4554480000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E12 JUMPI PUSH2 0x1E12 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1F2B JUMPI PUSH2 0x1F2B PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1FC3 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ECD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1FDA JUMPI PUSH2 0x1FDA PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x200D JUMPI PUSH2 0x200D PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP JUMPDEST DUP1 PUSH2 0x2023 DUP2 PUSH2 0x2F7F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1D50 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21A1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C7 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2135 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2159 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x221C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2240 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22D3 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP3 ADD MLOAD PUSH2 0x140 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP8 SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2361 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2385 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2417 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST SWAP1 POP PUSH2 0x583 DUP2 MLOAD PUSH8 0x8000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x249C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24C0 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x250F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2555 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2DEC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2573 JUMPI PUSH2 0x2573 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25B9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2591 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x202B JUMPI PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x25F8 JUMPI PUSH2 0x25F8 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2638 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2656 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x267A SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x271D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ECD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2753 JUMPI PUSH2 0x2753 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x276A SWAP1 PUSH2 0x2F7F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2806 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2874 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2898 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2923 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x291A SWAP2 SWAP1 PUSH2 0x2FB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2957 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x296C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x583 DUP2 PUSH2 0x2935 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2995 DUP2 PUSH2 0x2935 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x29A5 DUP2 PUSH2 0x2935 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29B3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x29DA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x29F8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29B0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2AC6 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP10 DUP5 SUB ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD DUP8 DUP6 MSTORE PUSH2 0x2A93 DUP9 DUP7 ADD DUP3 PUSH2 0x29E0 JUMP JUMPDEST SWAP2 DUP10 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 DUP10 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP5 DUP8 ADD SWAP5 SWAP3 POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2A51 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2ADF DUP2 PUSH2 0x2935 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x583 DUP2 PUSH2 0x2935 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2B54 JUMPI PUSH2 0x2B54 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2BA1 JUMPI PUSH2 0x2BA1 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2BDE JUMPI PUSH2 0x2BDE PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x583 DUP4 DUP4 PUSH2 0x2BA9 JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C69 PUSH2 0x2B30 JUMP JUMPDEST PUSH2 0x2C73 DUP5 DUP5 PUSH2 0x2BA9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2C81 PUSH1 0x20 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2C92 PUSH1 0x40 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2CA3 PUSH1 0x60 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2CB4 PUSH1 0x80 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2CC5 PUSH1 0xA0 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2CD6 PUSH1 0xC0 DUP5 ADD PUSH2 0x2C27 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2CE7 PUSH1 0xE0 DUP5 ADD PUSH2 0x2C3C JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2CFA DUP2 DUP6 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x2D0C DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x2D1E DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x2D30 DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2D42 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2D54 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2D66 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x583 DUP3 PUSH2 0x2C27 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2DE7 JUMPI PUSH2 0x2DE7 PUSH2 0x2DA5 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2E17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E3D JUMPI PUSH2 0x2E3D PUSH2 0x2B01 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x2E4E DUP5 DUP4 ADD PUSH2 0x2B5A JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x2E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x2E92 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x2E82 DUP4 PUSH2 0x2935 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2E6D JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2EDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2EF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2F1D JUMPI PUSH2 0x2F1D PUSH2 0x2B01 JUMP JUMPDEST PUSH2 0x2F4E PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x2B5A JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2F65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F76 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29B0 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2FB1 JUMPI PUSH2 0x2FB1 PUSH2 0x2DA5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x583 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x29E0 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 0xCF 0xA5 0xD3 0x22 SELFDESTRUCT SWAP2 PUSH27 0x315C4612A56DEBCB62E987FD510D65030E1ACD9A1DC62A0964736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"970:9398:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1367:58;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;1367:58:55;;;;;;;;3969:268;;;;;;:::i;:::-;;:::i;:::-;;;833:25:124;;;821:2;806:18;3969:268:55;687:177:124;7742:1480:55;;;;;;:::i;:::-;;:::i;:::-;;;;1625:25:124;;;1681:2;1666:18;;1659:34;;;;1709:18;;;1702:34;;;;1767:2;1752:18;;1745:34;;;;1810:3;1795:19;;1788:35;;;;1854:3;1839:19;;1832:35;1898:3;1883:19;;1876:35;1960:12;1948:25;1942:3;1927:19;;1920:54;2018:14;2011:22;2005:3;1990:19;;1983:51;1612:3;1597:19;7742:1480:55;1262:778:124;5828:1178:55;;;;;;:::i;:::-;;:::i;:::-;;;;2500:25:124;;;2556:2;2541:18;;2534:34;;;;2584:18;;;2577:34;;;;2642:2;2627:18;;2620:34;;;;2685:3;2670:19;;2663:35;;;;2729:3;2714:19;;2707:35;;;;2773:3;2758:19;;2751:35;2817:3;2802:19;;2795:35;2861:3;2846:19;;2839:35;2905:3;2890:19;;2883:35;2949:3;2934:19;;2927:36;3013:12;3000:26;2994:3;2979:19;;2972:55;2487:3;2472:19;5828:1178:55;2045:988:124;5439:174:55;;;;;;:::i;:::-;;:::i;4981:196::-;;;;;;:::i;:::-;;:::i;3123:806::-;;;;;;:::i;:::-;;:::i;:::-;;;;3407:25:124;;;3463:2;3448:18;;3441:34;;;;3491:18;;;3484:34;;;;3549:2;3534:18;;3527:34;;;;3592:3;3577:19;;3570:35;;;;3649:14;3642:22;3636:3;3621:19;;3614:51;3709:14;3702:22;3696:3;3681:19;;3674:51;3769:14;3762:22;3756:3;3741:19;;3734:51;3829:14;3822:22;3816:3;3801:19;;3794:51;3889:14;3882:22;3876:3;3861:19;;3854:51;3394:3;3379:19;3123:806:55;3038:873:124;4277:222:55;;;;;;:::i;:::-;;:::i;:::-;;;;4090:25:124;;;4146:2;4131:18;;4124:34;;;;4063:18;4277:222:55;3916:248:124;7355:347:55;;;;;;:::i;:::-;;:::i;7046:269::-;;;;;;:::i;:::-;;:::i;9769:292::-;;;;;;:::i;:::-;;:::i;5653:135::-;5235:1:88;5653:135:55;;5217:182;;;;;;:::i;:::-;;:::i;1690:776::-;;;:::i;:::-;;;;;;;:::i;4539:183::-;;;;;;:::i;:::-;;:::i;:::-;;;6327:14:124;;6320:22;6302:41;;6290:2;6275:18;4539:183:55;6162:187:124;9262:467:55;;;;;;:::i;:::-;;:::i;:::-;;;;6566:42:124;6635:15;;;6617:34;;6687:15;;;6682:2;6667:18;;6660:43;6739:15;;6719:18;;;6712:43;;;;6544:2;6529:18;9262:467:55;6354:407:124;10101:265:55;;;;;;:::i;:::-;;:::i;2506:577::-;;;:::i;4762:179::-;;;;;;:::i;:::-;;:::i;3969:268::-;4049:7;4064:54;4127:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4121:66;;;;;:59;209:55:124;;;4121:66:55;;;191:74:124;4121:59:55;;;;;;;164:18:124;;4121:66:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20324:9:88;;4064:123:55;;-1:-1:-1;4339:3:88;20323:71;;;4200:32:55;4193:39;3969:268;-1:-1:-1;;;3969:268:55:o;7742:1480::-;7866:28;7902:25;7935:27;7970;8005:26;8039:24;8071:21;8100:28;8136:29;8180:36;8225:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8219:69;;;;;:50;209:55:124;;;8219:69:55;;;191:74:124;8219:50:55;;;;;;;164:18:124;;8219:69:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8180:108;;8295:48;8352:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8346:69;;;;;:63;209:55:124;;;8346:69:55;;;191:74:124;8346:63:55;;;;;;;164:18:124;;8346:69:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8460:21;;;;8445:53;;;;;:47;209:55:124;;;8445:53:55;;;191:74:124;8295:120:55;;-1:-1:-1;8445:47:55;;;;;164:18:124;;8445:53:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8541:32;;;;8526:64;;;;;:58;209:55:124;;;8526:64:55;;;191:74:124;8422:76:55;;-1:-1:-1;8526:58:55;;;;;164:18:124;;8526:64:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8631:30;;;;8616:62;;;;;:56;209:55:124;;;8616:62:55;;;191:74:124;8504:86:55;;-1:-1:-1;8616:56:55;;;;;164:18:124;;8616:62:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8723:30;;;;8706:73;;;;;:67;209:55:124;;;8706:73:55;;;191:74:124;8596:82:55;;-1:-1:-1;8706:67:55;;;;;164:18:124;;8706:73:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8825:32;;;;8806:74;;;;;:68;209:55:124;;;8806:74:55;;;191::124;8684:95:55;;-1:-1:-1;8806:68:55;;;;;164:18:124;;8806:74:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8785:95;;8902:7;:28;;;8886:44;;;;8972:7;:30;;;8955:66;;;9022:4;8955:72;;;;;;;;;;;;;;221:42:124;209:55;;;;191:74;;179:2;164:18;;14:257;8955:72:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9074:30;;;;9057:85;;;;;:67;209:55:124;;;9057:85:55;;;191:74:124;8936:91:55;;-1:-1:-1;9057:67:55;;;;;164:18:124;;9057:85:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9033:109;;9175:42;9206:7;:10;;;9175:42;;:10;:30;;:42;;;;:::i;:::-;9148:69;;8174:1048;;7742:1480;;;;;;;;;;;:::o;5828:1178::-;5930:16;5954:31;5993:19;6020:23;6051:25;6084:21;6113:26;6147:24;6179:31;6218:22;6248:27;6283:26;6324:36;6369:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6363:50;;;6421:5;6363:69;;;;;;;;;;;;;;221:42:124;209:55;;;;191:74;;179:2;164:18;;14:257;6363:69:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6324:108;;6454:7;:16;;;6478:7;:25;;;6526:7;:21;;;6511:49;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6585:7;:30;;;6570:58;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6653:7;:32;;;6638:60;;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6708:7;:28;;;6744:7;:33;;;6785:7;:31;;;6841:7;:30;;;6824:69;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6903:7;:22;;;6933:7;:27;;;6968:7;:27;;;6439:562;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5828:1178;;;;;;;;;;;;;:::o;5439:174::-;5510:7;5532:76;5538:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5532:59;;;;;:52;209:55:124;;;5532:59:55;;;191:74:124;5532:52:55;;;;;;;164:18:124;;5532:59:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17634:9:88;4478:3;17633:67;;;;17509:196;5532:76:55;5525:83;5439:174;-1:-1:-1;;5439:174:55:o;4981:196::-;5063:7;5085:87;5091:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5085:59;;;;;:52;209:55:124;;;5085:59:55;;;191:74:124;5085:52:55;;;;;;;164:18:124;;5085:59:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18604:9:88;4270:3;18603:91;;;;18462:237;3123:806:55;3238:16;3262:11;3281:28;3317:24;3349:21;3378:29;3415:21;3444:28;3480:13;3501;3529:54;3592:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3586:66;;;;;:59;209:55:124;;;3586:66:55;;;191:74:124;3586:59:55;;;;;;;164:18:124;;3586:66:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22631:9:88;22869:67;3439:2;22869:67;;;;;22674:9;22662:21;;;;-1:-1:-1;3298:2:88;22691:85;;;;;;-1:-1:-1;3369:2:88;22784:77;;;;;;-1:-1:-1;4063:2:88;22944:71;;;;;-1:-1:-1;3899:25:55;;;;-1:-1:-1;21857:15:88;21845:27;;21844:34;;;-1:-1:-1;21899:22:88;21887:34;;21886:41;;;-1:-1:-1;21779:12:88;21767:24;;21766:31;;;-1:-1:-1;21818:12:88;21806:24;;;21805:31;;;-1:-1:-1;3123:806:55;-1:-1:-1;;;3123:806:55:o;4277:222::-;4356:17;4375;4425:69;4431:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4425:59;;;;;:52;209:55:124;;;4425:59:55;;;191:74:124;4425:52:55;;;;;;;164:18:124;;4425:59:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23476:9:88;23507:63;4127:2;23507:63;;;;;;4191:3;23578:63;;;;;;23337:315;4425:69:55;4400:94;;;;-1:-1:-1;4277:222:55;-1:-1:-1;;4277:222:55:o;7355:347::-;7424:7;7439:36;7484:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7478:69;;;;;:50;209:55:124;;;7478:69:55;;;191:74:124;7478:50:55;;;;;;;164:18:124;;7478:69:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7439:108;;7650:7;:32;;;7635:60;;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7581:7;:30;;;7566:58;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:131;;;;:::i;7046:269::-;7123:7;7138:36;7183:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7177:69;;;;;:50;209:55:124;;;7177:69:55;;;191:74:124;7177:50:55;;;;;;;164:18:124;;7177:69:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7138:108;;7274:7;:21;;;7259:49;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9769:292::-;9864:25;9897:36;9942:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9936:69;;;;;:50;209:55:124;;;9936:69:55;;;191:74:124;9936:50:55;;;;;;;164:18:124;;9936:69:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10020:35;;;;9769:292;-1:-1:-1;;;9769:292:55:o;5217:182::-;5292:7;5314:80;5320:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5314:59;;;;;:52;209:55:124;;;5314:59:55;;;191:74:124;5314:52:55;;;;;;;164:18:124;;5314:59:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19491:9:88;4411:3;19490:77;;;;19362:210;1690:776:55;1754:18;1780:10;1799:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1780:48;;1834:25;1862:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1834:50;;1890:33;1942:8;:15;1926:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1926:32:55;;;;;;;;;;;;;;;;1890:68;;1969:9;1964:471;1988:8;:15;1984:1;:19;1964:471;;;1215:42;2022:18;;:8;2031:1;2022:11;;;;;;;;:::i;:::-;;;;;;;:18;;;2018:134;;;2072:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2112:8;2121:1;2112:11;;;;;;;;:::i;:::-;;;;;;;2072:53;;;;;2052:14;2067:1;2052:17;;;;;;;;:::i;:::-;;;;;;:73;;;;2135:8;;2018:134;1284:42;2163:18;;:8;2172:1;2163:11;;;;;;;;:::i;:::-;;;;;;;:18;;;2159:134;;;2213:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2253:8;2262:1;2253:11;;;;;;;;:::i;2159:134::-;2320:108;;;;;;;;2363:8;2372:1;2363:11;;;;;;;;:::i;:::-;;;;;;;2348:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2320:108;;;;2408:8;2417:1;2408:11;;;;;;;;:::i;:::-;;;;;;;2320:108;;;;;2300:14;2315:1;2300:17;;;;;;;;:::i;:::-;;;;;;:128;;;;1964:471;2005:3;;;;:::i;:::-;;;;1964:471;;;-1:-1:-1;2447:14:55;1690:776;-1:-1:-1;;;1690:776:55:o;4539:183::-;4605:13;4647:70;4653:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4647:59;;;;;:52;209:55:124;;;4647:59:55;;;191:74:124;4647:52:55;;;;;;;164:18:124;;4647:59:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;4647:70:55;4626:91;4539:183;-1:-1:-1;;;;;;4539:183:55:o;9262:467::-;9375:21;9404:30;9442:32;9489:36;9534:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9528:69;;;;;:50;209:55:124;;;9528:69:55;;;191:74:124;9528:50:55;;;;;;;164:18:124;;9528:69:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9619:21;;;;9648:30;;;;9686:32;;;;;9619:21;;9648:30;;-1:-1:-1;9686:32:55;-1:-1:-1;9262:467:55;-1:-1:-1;;;9262:467:55:o;10101:265::-;10177:4;10189:54;10252:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10246:66;;;;;:59;209:55:124;;;10246:66:55;;;191:74:124;10246:59:55;;;;;;;164:18:124;;10246:66:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10189:123;;10326:35;:13;21149:9:88;21161:23;21149:35;21148:42;;;21022:173;2506:577:55;2563:18;2589:10;2608:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2589:48;;2643:25;2671:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2643:50;;2699:26;2744:8;:15;2728:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2728:32:55;;;;;;;;;;;;;;;;2699:61;;2771:9;2766:293;2790:8;:15;2786:1;:19;2766:293;;;2820:40;2863:4;:19;;;2883:8;2892:1;2883:11;;;;;;;;:::i;:::-;;;;;;;2863:32;;;;;;;;;;;;;;221:42:124;209:55;;;;191:74;;179:2;164:18;;14:257;2863:32:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2820:75;;2916:136;;;;;;;;2959:11;:25;;;2944:48;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2916:136;;;;3018:11;:25;;;2916:136;;;;;2903:7;2911:1;2903:10;;;;;;;;:::i;:::-;;;;;;:149;;;;2812:247;2807:3;;;;;:::i;:::-;;;;2766:293;;4762:179;4837:4;4856:80;4862:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4856:59;;;;;:52;209:55:124;;;4856:59:55;;;191:74:124;4856:52:55;;;;;;;164:18:124;;4856:59:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12837:9:88;12849:22;12837:34;12836:41;;;12711:171;3638:328:89;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:88;3806:54:89;;3798:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;3907:9:89;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;276:154:124:-;362:42;355:5;351:54;344:5;341:65;331:93;;420:1;417;410:12;331:93;276:154;:::o;435:247::-;494:6;547:2;535:9;526:7;522:23;518:32;515:52;;;563:1;560;553:12;515:52;602:9;589:23;621:31;646:5;621:31;:::i;869:388::-;937:6;945;998:2;986:9;977:7;973:23;969:32;966:52;;;1014:1;1011;1004:12;966:52;1053:9;1040:23;1072:31;1097:5;1072:31;:::i;:::-;1122:5;-1:-1:-1;1179:2:124;1164:18;;1151:32;1192:33;1151:32;1192:33;:::i;:::-;1244:7;1234:17;;;869:388;;;;;:::o;4400:258::-;4472:1;4482:113;4496:6;4493:1;4490:13;4482:113;;;4572:11;;;4566:18;4553:11;;;4546:39;4518:2;4511:10;4482:113;;;4613:6;4610:1;4607:13;4604:48;;;4648:1;4639:6;4634:3;4630:16;4623:27;4604:48;;4400:258;;;:::o;4663:317::-;4705:3;4743:5;4737:12;4770:6;4765:3;4758:19;4786:63;4842:6;4835:4;4830:3;4826:14;4819:4;4812:5;4808:16;4786:63;:::i;:::-;4894:2;4882:15;4899:66;4878:88;4869:98;;;;4969:4;4865:109;;4663:317;-1:-1:-1;;4663:317:124:o;4985:1172::-;5181:4;5210:2;5250;5239:9;5235:18;5280:2;5269:9;5262:21;5303:6;5338;5332:13;5369:6;5361;5354:22;5395:2;5385:12;;5428:2;5417:9;5413:18;5406:25;;5490:2;5480:6;5477:1;5473:14;5462:9;5458:30;5454:39;5528:2;5520:6;5516:15;5549:1;5559:569;5573:6;5570:1;5567:13;5559:569;;;5662:66;5650:9;5642:6;5638:22;5634:95;5629:3;5622:108;5759:6;5753:13;5805:2;5799:9;5836:2;5828:6;5821:18;5866:48;5910:2;5902:6;5898:15;5884:12;5866:48;:::i;:::-;5961:11;;;5955:18;5975:42;5951:67;5934:15;;;5927:92;;;;6106:12;;;;5852:62;-1:-1:-1;6071:15:124;;;;5595:1;5588:9;5559:569;;;-1:-1:-1;6145:6:124;;4985:1172;-1:-1:-1;;;;;;;;4985:1172:124:o;6766:138::-;6845:13;;6867:31;6845:13;6867:31;:::i;:::-;6766:138;;;:::o;6909:251::-;6979:6;7032:2;7020:9;7011:7;7007:23;7003:32;7000:52;;;7048:1;7045;7038:12;7000:52;7080:9;7074:16;7099:31;7124:5;7099:31;:::i;7165:184::-;7217:77;7214:1;7207:88;7314:4;7311:1;7304:15;7338:4;7335:1;7328:15;7354:252;7426:2;7420:9;7468:3;7456:16;;7502:18;7487:34;;7523:22;;;7484:62;7481:88;;;7549:18;;:::i;:::-;7585:2;7578:22;7354:252;:::o;7611:334::-;7682:2;7676:9;7738:2;7728:13;;7743:66;7724:86;7712:99;;7841:18;7826:34;;7862:22;;;7823:62;7820:88;;;7888:18;;:::i;:::-;7924:2;7917:22;7611:334;;-1:-1:-1;7611:334:124:o;7950:426::-;8031:5;8079:4;8067:9;8062:3;8058:19;8054:30;8051:50;;;8097:1;8094;8087:12;8051:50;8130:2;8124:9;8172:4;8164:6;8160:17;8243:6;8231:10;8228:22;8207:18;8195:10;8192:34;8189:62;8186:88;;;8254:18;;:::i;:::-;8290:2;8283:22;8353:16;;8338:32;;-1:-1:-1;8323:6:124;7950:426;-1:-1:-1;7950:426:124:o;8381:282::-;8493:6;8546:2;8534:9;8525:7;8521:23;8517:32;8514:52;;;8562:1;8559;8552:12;8514:52;8585:72;8649:7;8638:9;8585:72;:::i;8668:192::-;8747:13;;8800:34;8789:46;;8779:57;;8769:85;;8850:1;8847;8840:12;8865:169;8943:13;;8996:12;8985:24;;8975:35;;8965:63;;9024:1;9021;9014:12;9039:163;9117:13;;9170:6;9159:18;;9149:29;;9139:57;;9192:1;9189;9182:12;9207:1652;9307:6;9360:3;9348:9;9339:7;9335:23;9331:33;9328:53;;;9377:1;9374;9367:12;9328:53;9403:22;;:::i;:::-;9448:72;9512:7;9501:9;9448:72;:::i;:::-;9441:5;9434:87;9553:49;9598:2;9587:9;9583:18;9553:49;:::i;:::-;9548:2;9541:5;9537:14;9530:73;9635:49;9680:2;9669:9;9665:18;9635:49;:::i;:::-;9630:2;9623:5;9619:14;9612:73;9717:49;9762:2;9751:9;9747:18;9717:49;:::i;:::-;9712:2;9705:5;9701:14;9694:73;9800:50;9845:3;9834:9;9830:19;9800:50;:::i;:::-;9794:3;9787:5;9783:15;9776:75;9884:50;9929:3;9918:9;9914:19;9884:50;:::i;:::-;9878:3;9871:5;9867:15;9860:75;9968:49;10012:3;10001:9;9997:19;9968:49;:::i;:::-;9962:3;9955:5;9951:15;9944:74;10051:49;10095:3;10084:9;10080:19;10051:49;:::i;:::-;10045:3;10038:5;10034:15;10027:74;10120:3;10155:49;10200:2;10189:9;10185:18;10155:49;:::i;:::-;10139:14;;;10132:73;10224:3;10259:49;10289:18;;;10259:49;:::i;:::-;10243:14;;;10236:73;10328:3;10363:49;10393:18;;;10363:49;:::i;:::-;10347:14;;;10340:73;10432:3;10467:49;10497:18;;;10467:49;:::i;:::-;10451:14;;;10444:73;10536:3;10571:49;10601:18;;;10571:49;:::i;:::-;10555:14;;;10548:73;10640:3;10675:49;10705:18;;;10675:49;:::i;:::-;10659:14;;;10652:73;10744:3;10779:49;10809:18;;;10779:49;:::i;:::-;10763:14;;;10756:73;10767:5;9207:1652;-1:-1:-1;;;9207:1652:124:o;11148:184::-;11218:6;11271:2;11259:9;11250:7;11246:23;11242:32;11239:52;;;11287:1;11284;11277:12;11239:52;-1:-1:-1;11310:16:124;;11148:184;-1:-1:-1;11148:184:124:o;11337:206::-;11406:6;11459:2;11447:9;11438:7;11434:23;11430:32;11427:52;;;11475:1;11472;11465:12;11427:52;11498:39;11527:9;11498:39;:::i;11548:184::-;11600:77;11597:1;11590:88;11697:4;11694:1;11687:15;11721:4;11718:1;11711:15;11737:128;11777:3;11808:1;11804:6;11801:1;11798:13;11795:39;;;11814:18;;:::i;:::-;-1:-1:-1;11850:9:124;;11737:128::o;11870:1011::-;11965:6;11996:2;12039;12027:9;12018:7;12014:23;12010:32;12007:52;;;12055:1;12052;12045:12;12007:52;12088:9;12082:16;12117:18;12158:2;12150:6;12147:14;12144:34;;;12174:1;12171;12164:12;12144:34;12212:6;12201:9;12197:22;12187:32;;12257:7;12250:4;12246:2;12242:13;12238:27;12228:55;;12279:1;12276;12269:12;12228:55;12308:2;12302:9;12330:2;12326;12323:10;12320:36;;;12336:18;;:::i;:::-;12382:2;12379:1;12375:10;12365:20;;12405:28;12429:2;12425;12421:11;12405:28;:::i;:::-;12467:15;;;12537:11;;;12533:20;;;12498:12;;;;12565:19;;;12562:39;;;12597:1;12594;12587:12;12562:39;12621:11;;;;12641:210;12657:6;12652:3;12649:15;12641:210;;;12730:3;12724:10;12711:23;;12747:31;12772:5;12747:31;:::i;:::-;12791:18;;;12674:12;;;;12829;;;;12641:210;;;12870:5;11870:1011;-1:-1:-1;;;;;;;;11870:1011:124:o;12886:184::-;12938:77;12935:1;12928:88;13035:4;13032:1;13025:15;13059:4;13056:1;13049:15;13075:765;13155:6;13208:2;13196:9;13187:7;13183:23;13179:32;13176:52;;;13224:1;13221;13214:12;13176:52;13257:9;13251:16;13286:18;13327:2;13319:6;13316:14;13313:34;;;13343:1;13340;13333:12;13313:34;13381:6;13370:9;13366:22;13356:32;;13426:7;13419:4;13415:2;13411:13;13407:27;13397:55;;13448:1;13445;13438:12;13397:55;13477:2;13471:9;13499:2;13495;13492:10;13489:36;;;13505:18;;:::i;:::-;13547:112;13655:2;13586:66;13579:4;13575:2;13571:13;13567:86;13563:95;13547:112;:::i;:::-;13534:125;;13682:2;13675:5;13668:17;13722:7;13717:2;13712;13708;13704:11;13700:20;13697:33;13694:53;;;13743:1;13740;13733:12;13694:53;13756:54;13807:2;13802;13795:5;13791:14;13786:2;13782;13778:11;13756:54;:::i;:::-;-1:-1:-1;13829:5:124;13075:765;-1:-1:-1;;;;13075:765:124:o;13845:195::-;13884:3;13915:66;13908:5;13905:77;13902:103;;;13985:18;;:::i;:::-;-1:-1:-1;14032:1:124;14021:13;;13845:195::o;14045:220::-;14194:2;14183:9;14176:21;14157:4;14214:45;14255:2;14244:9;14240:18;14232:6;14214:45;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"2457800","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","getATokenTotalSupply(address)":"infinite","getAllATokens()":"infinite","getAllReservesTokens()":"infinite","getDebtCeiling(address)":"infinite","getDebtCeilingDecimals()":"237","getFlashLoanEnabled(address)":"infinite","getInterestRateStrategyAddress(address)":"infinite","getLiquidationProtocolFee(address)":"infinite","getPaused(address)":"infinite","getReserveCaps(address)":"infinite","getReserveConfigurationData(address)":"infinite","getReserveData(address)":"infinite","getReserveEModeCategory(address)":"infinite","getReserveTokensAddresses(address)":"infinite","getSiloedBorrowing(address)":"infinite","getTotalDebt(address)":"infinite","getUnbackedMintCap(address)":"infinite","getUserReserveData(address,address)":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","getATokenTotalSupply(address)":"51460e25","getAllATokens()":"f561ae41","getAllReservesTokens()":"b316ff89","getDebtCeiling(address)":"3c798109","getDebtCeilingDecimals()":"69b169e1","getFlashLoanEnabled(address)":"d7ed3ef4","getInterestRateStrategyAddress(address)":"6744362a","getLiquidationProtocolFee(address)":"3cb8a622","getPaused(address)":"b55d9904","getReserveCaps(address)":"46fbe558","getReserveConfigurationData(address)":"3e150141","getReserveData(address)":"35ea6a75","getReserveEModeCategory(address)":"163a0f20","getReserveTokensAddresses(address)":"d2493b6c","getSiloedBorrowing(address)":"fcf40a62","getTotalDebt(address)":"4d44ac4f","getUnbackedMintCap(address)":"7ba1ae36","getUserReserveData(address,address)":"28dd2d01"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"addressesProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getATokenTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllATokens\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"internalType\":\"struct IPoolDataProvider.TokenData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllReservesTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"internalType\":\"struct IPoolDataProvider.TokenData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getDebtCeiling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDebtCeilingDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getFlashLoanEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getInterestRateStrategyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"irStrategyAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getLiquidationProtocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveConfigurationData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"stableBorrowRateEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isFrozen\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accruedToTreasuryScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveEModeCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveTokensAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getSiloedBorrowing\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getTotalDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getUnbackedMintCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserReserveData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentATokenBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"principalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"scaledVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"stableRateLastUpdated\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"addressesProvider\":\"The address of the PoolAddressesProvider contract\"}},\"getATokenTotalSupply(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The total supply of the aToken\"}},\"getAllATokens()\":{\"returns\":{\"_0\":\"The list of ATokens, pairs of symbols and addresses\"}},\"getAllReservesTokens()\":{\"details\":\"Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\",\"returns\":{\"_0\":\"The list of reserves, pairs of symbols and addresses\"}},\"getDebtCeiling(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The debt ceiling of the reserve\"}},\"getDebtCeilingDecimals()\":{\"returns\":{\"_0\":\"The debt ceiling decimals\"}},\"getFlashLoanEnabled(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"True if FlashLoans are enabled, false otherwise\"}},\"getInterestRateStrategyAddress(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"irStrategyAddress\":\"The address of the Interest Rate strategy\"}},\"getLiquidationProtocolFee(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The protocol fee on liquidation\"}},\"getPaused(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"isPaused\":\"True if the pool is paused, false otherwise\"}},\"getReserveCaps(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"borrowCap\":\"The borrow cap of the reserve\",\"supplyCap\":\"The supply cap of the reserve\"}},\"getReserveConfigurationData(address)\":{\"details\":\"Not returning borrow and supply caps for compatibility, nor pause flag\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"borrowingEnabled\":\"True if borrowing is enabled, false otherwise\",\"decimals\":\"The number of decimals of the reserve\",\"isActive\":\"True if it is active, false otherwise\",\"isFrozen\":\"True if it is frozen, false otherwise\",\"liquidationBonus\":\"The liquidationBonus of the reserve\",\"liquidationThreshold\":\"The liquidationThreshold of the reserve\",\"ltv\":\"The ltv of the reserve\",\"reserveFactor\":\"The reserveFactor of the reserve\",\"stableBorrowRateEnabled\":\"True if stable rate borrowing is enabled, false otherwise\",\"usageAsCollateralEnabled\":\"True if the usage as collateral is enabled, false otherwise\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"accruedToTreasuryScaled\":\"The scaled amount of tokens accrued to treasury that is to be minted\",\"averageStableBorrowRate\":\"The average stable borrow rate of the reserve\",\"lastUpdateTimestamp\":\"The timestamp of the last update of the reserve\",\"liquidityIndex\":\"The liquidity index of the reserve\",\"liquidityRate\":\"The liquidity rate of the reserve\",\"stableBorrowRate\":\"The stable borrow rate of the reserve\",\"totalAToken\":\"The total supply of the aToken\",\"totalStableDebt\":\"The total stable debt of the reserve\",\"totalVariableDebt\":\"The total variable debt of the reserve\",\"unbacked\":\"The amount of unbacked tokens\",\"variableBorrowIndex\":\"The variable borrow index of the reserve\",\"variableBorrowRate\":\"The variable borrow rate of the reserve\"}},\"getReserveEModeCategory(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The eMode id of the reserve\"}},\"getReserveTokensAddresses(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"aTokenAddress\":\"The AToken address of the reserve\",\"stableDebtTokenAddress\":\"The StableDebtToken address of the reserve\",\"variableDebtTokenAddress\":\"The VariableDebtToken address of the reserve\"}},\"getSiloedBorrowing(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"True if the asset is siloed for borrowing\"}},\"getTotalDebt(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The total debt for asset\"}},\"getUnbackedMintCap(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The unbacked mint cap of the reserve\"}},\"getUserReserveData(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user\"},\"returns\":{\"currentATokenBalance\":\"The current AToken balance of the user\",\"currentStableDebt\":\"The current stable debt of the user\",\"currentVariableDebt\":\"The current variable debt of the user\",\"liquidityRate\":\"The liquidity rate of the reserve\",\"principalStableDebt\":\"The principal stable debt of the user\",\"scaledVariableDebt\":\"The scaled variable debt of the user\",\"stableBorrowRate\":\"The stable borrow rate of the user\",\"stableRateLastUpdated\":\"The timestamp of the last update of the user stable rate\",\"usageAsCollateralEnabled\":\"True if the user is using the asset as collateral, false         otherwise\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address for the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address for the PoolAddressesProvider contract\"}}},\"title\":\"AaveProtocolDataProvider\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address for the PoolAddressesProvider contract.\"},\"constructor\":{\"notice\":\"Constructor\"},\"getATokenTotalSupply(address)\":{\"notice\":\"Returns the total supply of aTokens for a given asset\"},\"getAllATokens()\":{\"notice\":\"Returns the list of the existing ATokens in the pool.\"},\"getAllReservesTokens()\":{\"notice\":\"Returns the list of the existing reserves in the pool.\"},\"getDebtCeiling(address)\":{\"notice\":\"Returns the debt ceiling of the reserve\"},\"getDebtCeilingDecimals()\":{\"notice\":\"Returns the debt ceiling decimals\"},\"getFlashLoanEnabled(address)\":{\"notice\":\"Returns whether the reserve has FlashLoans enabled or disabled\"},\"getInterestRateStrategyAddress(address)\":{\"notice\":\"Returns the address of the Interest Rate strategy\"},\"getLiquidationProtocolFee(address)\":{\"notice\":\"Returns the protocol fee on the liquidation bonus\"},\"getPaused(address)\":{\"notice\":\"Returns if the pool is paused\"},\"getReserveCaps(address)\":{\"notice\":\"Returns the caps parameters of the reserve\"},\"getReserveConfigurationData(address)\":{\"notice\":\"Returns the configuration data of the reserve\"},\"getReserveData(address)\":{\"notice\":\"Returns the reserve data\"},\"getReserveEModeCategory(address)\":{\"notice\":\"Returns the efficiency mode category of the reserve\"},\"getReserveTokensAddresses(address)\":{\"notice\":\"Returns the token addresses of the reserve\"},\"getSiloedBorrowing(address)\":{\"notice\":\"Returns the siloed borrowing flag\"},\"getTotalDebt(address)\":{\"notice\":\"Returns the total debt for a given asset\"},\"getUnbackedMintCap(address)\":{\"notice\":\"Returns the unbacked mint cap of the reserve\"},\"getUserReserveData(address,address)\":{\"notice\":\"Returns the user data in a reserve\"}},\"notice\":\"Peripheral contract to collect and pre-process information from the Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/AaveProtocolDataProvider.sol\":\"AaveProtocolDataProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/misc/AaveProtocolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\nimport {WadRayMath} from '../protocol/libraries/math/WadRayMath.sol';\\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\\nimport {IStableDebtToken} from '../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../interfaces/IVariableDebtToken.sol';\\nimport {IPool} from '../interfaces/IPool.sol';\\nimport {IPoolDataProvider} from '../interfaces/IPoolDataProvider.sol';\\n\\n/**\\n * @title AaveProtocolDataProvider\\n * @author Aave\\n * @notice Peripheral contract to collect and pre-process information from the Pool.\\n */\\ncontract AaveProtocolDataProvider is IPoolDataProvider {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n\\n  address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;\\n  address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  /// @inheritdoc IPoolDataProvider\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @notice Constructor\\n   * @param addressesProvider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider addressesProvider) {\\n    ADDRESSES_PROVIDER = addressesProvider;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getAllReservesTokens() external view override returns (TokenData[] memory) {\\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n    TokenData[] memory reservesTokens = new TokenData[](reserves.length);\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      if (reserves[i] == MKR) {\\n        reservesTokens[i] = TokenData({symbol: 'MKR', tokenAddress: reserves[i]});\\n        continue;\\n      }\\n      if (reserves[i] == ETH) {\\n        reservesTokens[i] = TokenData({symbol: 'ETH', tokenAddress: reserves[i]});\\n        continue;\\n      }\\n      reservesTokens[i] = TokenData({\\n        symbol: IERC20Detailed(reserves[i]).symbol(),\\n        tokenAddress: reserves[i]\\n      });\\n    }\\n    return reservesTokens;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getAllATokens() external view override returns (TokenData[] memory) {\\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n    TokenData[] memory aTokens = new TokenData[](reserves.length);\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveData memory reserveData = pool.getReserveData(reserves[i]);\\n      aTokens[i] = TokenData({\\n        symbol: IERC20Detailed(reserveData.aTokenAddress).symbol(),\\n        tokenAddress: reserveData.aTokenAddress\\n      });\\n    }\\n    return aTokens;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    )\\n  {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n\\n    (ltv, liquidationThreshold, liquidationBonus, decimals, reserveFactor, ) = configuration\\n      .getParams();\\n\\n    (isActive, isFrozen, borrowingEnabled, stableBorrowRateEnabled, ) = configuration.getFlags();\\n\\n    usageAsCollateralEnabled = liquidationThreshold != 0;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveEModeCategory(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n    return configuration.getEModeCategory();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveCaps(\\n    address asset\\n  ) external view override returns (uint256 borrowCap, uint256 supplyCap) {\\n    (borrowCap, supplyCap) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getCaps();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getPaused(address asset) external view override returns (bool isPaused) {\\n    (, , , , isPaused) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getFlags();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getSiloedBorrowing(address asset) external view override returns (bool) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getSiloedBorrowing();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getLiquidationProtocolFee(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getLiquidationProtocolFee();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getUnbackedMintCap(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getUnbackedMintCap();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getDebtCeiling(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getDebtCeiling();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getDebtCeilingDecimals() external pure override returns (uint256) {\\n    return ReserveConfiguration.DEBT_CEILING_DECIMALS;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (\\n      reserve.unbacked,\\n      reserve.accruedToTreasury,\\n      IERC20Detailed(reserve.aTokenAddress).totalSupply(),\\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply(),\\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply(),\\n      reserve.currentLiquidityRate,\\n      reserve.currentVariableBorrowRate,\\n      reserve.currentStableBorrowRate,\\n      IStableDebtToken(reserve.stableDebtTokenAddress).getAverageStableRate(),\\n      reserve.liquidityIndex,\\n      reserve.variableBorrowIndex,\\n      reserve.lastUpdateTimestamp\\n    );\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getATokenTotalSupply(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n    return IERC20Detailed(reserve.aTokenAddress).totalSupply();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getTotalDebt(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n    return\\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply() +\\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    DataTypes.UserConfigurationMap memory userConfig = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getUserConfiguration(user);\\n\\n    currentATokenBalance = IERC20Detailed(reserve.aTokenAddress).balanceOf(user);\\n    currentVariableDebt = IERC20Detailed(reserve.variableDebtTokenAddress).balanceOf(user);\\n    currentStableDebt = IERC20Detailed(reserve.stableDebtTokenAddress).balanceOf(user);\\n    principalStableDebt = IStableDebtToken(reserve.stableDebtTokenAddress).principalBalanceOf(user);\\n    scaledVariableDebt = IVariableDebtToken(reserve.variableDebtTokenAddress).scaledBalanceOf(user);\\n    liquidityRate = reserve.currentLiquidityRate;\\n    stableBorrowRate = IStableDebtToken(reserve.stableDebtTokenAddress).getUserStableRate(user);\\n    stableRateLastUpdated = IStableDebtToken(reserve.stableDebtTokenAddress).getUserLastUpdated(\\n      user\\n    );\\n    usageAsCollateralEnabled = userConfig.isUsingAsCollateral(reserve.id);\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (\\n      reserve.aTokenAddress,\\n      reserve.stableDebtTokenAddress,\\n      reserve.variableDebtTokenAddress\\n    );\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view override returns (address irStrategyAddress) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (reserve.interestRateStrategyAddress);\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getFlashLoanEnabled(address asset) external view override returns (bool) {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n\\n    return configuration.getFlashLoanEnabled();\\n  }\\n}\\n\",\"keccak256\":\"0x477ecaa5fb7c2f2aa938b00c9302ba1c448243af2073a9b9922a32de01e7c5fe\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address for the PoolAddressesProvider contract."},"constructor":{"notice":"Constructor"},"getATokenTotalSupply(address)":{"notice":"Returns the total supply of aTokens for a given asset"},"getAllATokens()":{"notice":"Returns the list of the existing ATokens in the pool."},"getAllReservesTokens()":{"notice":"Returns the list of the existing reserves in the pool."},"getDebtCeiling(address)":{"notice":"Returns the debt ceiling of the reserve"},"getDebtCeilingDecimals()":{"notice":"Returns the debt ceiling decimals"},"getFlashLoanEnabled(address)":{"notice":"Returns whether the reserve has FlashLoans enabled or disabled"},"getInterestRateStrategyAddress(address)":{"notice":"Returns the address of the Interest Rate strategy"},"getLiquidationProtocolFee(address)":{"notice":"Returns the protocol fee on the liquidation bonus"},"getPaused(address)":{"notice":"Returns if the pool is paused"},"getReserveCaps(address)":{"notice":"Returns the caps parameters of the reserve"},"getReserveConfigurationData(address)":{"notice":"Returns the configuration data of the reserve"},"getReserveData(address)":{"notice":"Returns the reserve data"},"getReserveEModeCategory(address)":{"notice":"Returns the efficiency mode category of the reserve"},"getReserveTokensAddresses(address)":{"notice":"Returns the token addresses of the reserve"},"getSiloedBorrowing(address)":{"notice":"Returns the siloed borrowing flag"},"getTotalDebt(address)":{"notice":"Returns the total debt for a given asset"},"getUnbackedMintCap(address)":{"notice":"Returns the unbacked mint cap of the reserve"},"getUserReserveData(address,address)":{"notice":"Returns the user data in a reserve"}},"notice":"Peripheral contract to collect and pre-process information from the Pool.","version":1}}},"contracts/misc/L2Encoder.sol":{"L2Encoder":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"encodeBorrowParams","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"encodeLiquidationCall","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"encodeRebalanceStableBorrowRate","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"encodeRepayParams","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"encodeRepayWithATokensParams","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"encodeRepayWithPermitParams","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"encodeSetUserUseReserveAsCollateral","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"encodeSupplyParams","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"encodeSupplyWithPermitParams","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"encodeSwapBorrowRateMode","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"encodeWithdrawParams","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"encodeBorrowParams(address,uint256,uint256,uint16)":{"details":"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf","params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"},"returns":{"_0":"compact representation of withdraw parameters"}},"encodeLiquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"},"returns":{"_0":"First half ot compact representation of liquidation call parameters","_1":"Second half ot compact representation of liquidation call parameters"}},"encodeRebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"},"returns":{"_0":"compact representation of rebalance stable borrow rate parameters"}},"encodeRepayParams(address,uint256,uint256)":{"details":"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `interestRateMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"compact representation of repay parameters"}},"encodeRepayWithATokensParams(address,uint256,uint256)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"compact representation of repay with aToken parameters"}},"encodeRepayWithPermitParams(address,uint256,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"compact representation of repayWithPermit parameters","_1":"The R parameter of ERC712 permit sig","_2":"The S parameter of ERC712 permit sig"}},"encodeSetUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset borrowed","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"},"returns":{"_0":"compact representation of set user use reserve as collateral parameters"}},"encodeSupplyParams(address,uint256,uint16)":{"details":"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","referralCode":"referralCode Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"},"returns":{"_0":"compact representation of supply parameters"}},"encodeSupplyWithPermitParams(address,uint256,uint16,uint256,uint8,bytes32,bytes32)":{"details":"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"referralCode Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"},"returns":{"_0":"compact representation of supplyWithPermit parameters","_1":"The R parameter of ERC712 permit sig","_2":"The S parameter of ERC712 permit sig"}},"encodeSwapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"},"returns":{"_0":"compact representation of swap borrow rate mode parameters"}},"encodeWithdrawParams(address,uint256)":{"details":"Without a to parameter as the compact calls to L2Pool will use msg.sender as to","params":{"amount":"The underlying amount to be withdrawn","asset":"The address of the underlying asset to withdraw"},"returns":{"_0":"compact representation of withdraw parameters"}}},"title":"L2Encoder","version":1},"evm":{"bytecode":{"functionDebugData":{"@_7661":{"entryPoint":null,"id":7661,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:320:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"109:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"155:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"164:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"167:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"157:6:124"},"nodeType":"YulFunctionCall","src":"157:12:124"},"nodeType":"YulExpressionStatement","src":"157:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"130:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"139:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"126:3:124"},"nodeType":"YulFunctionCall","src":"126:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"151:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"122:3:124"},"nodeType":"YulFunctionCall","src":"122:32:124"},"nodeType":"YulIf","src":"119:52:124"},{"nodeType":"YulVariableDeclaration","src":"180:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"199:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"193:5:124"},"nodeType":"YulFunctionCall","src":"193:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"184:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"272:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"281:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"284:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"274:6:124"},"nodeType":"YulFunctionCall","src":"274:12:124"},"nodeType":"YulExpressionStatement","src":"274:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"231:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"242:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"257:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"262:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"253:3:124"},"nodeType":"YulFunctionCall","src":"253:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"266:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"249:3:124"},"nodeType":"YulFunctionCall","src":"249:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"238:3:124"},"nodeType":"YulFunctionCall","src":"238:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"228:2:124"},"nodeType":"YulFunctionCall","src":"228:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"221:6:124"},"nodeType":"YulFunctionCall","src":"221:50:124"},"nodeType":"YulIf","src":"218:70:124"},{"nodeType":"YulAssignment","src":"297:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"307:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"297:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"75:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"86:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"98:6:124","type":""}],"src":"14:304:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b5060405161143138038061143183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516113606100d16000396000818161016b0152818161027e015281816103760152818161043f015281816105180152818161062e0152818161073c015281816107fc0152818161094101528181610a700152610b5501526113606000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806388d5185211610081578063b76398e41161005b578063b76398e414610200578063fc0eed8514610213578063fed63a931461022157600080fd5b806388d51852146101b25780638da7fb18146101da5780639d2ffc1b146101ed57600080fd5b80635cc7bc10116100b25780635cc7bc1014610125578063671a7fae146101385780637535d2461461016657600080fd5b80631a64acf2146100d95780631a8f6dee146100ff5780631fd3479714610112575b600080fd5b6100ec6100e7366004610e66565b610234565b6040519081526020015b60405180910390f35b6100ec61010d366004610eb0565b61032c565b6100ec610120366004610ee9565b6103f5565b6100ec610133366004610ee9565b6104ce565b61014b610146366004610f2b565b6105e0565b604080519384526020840192909252908201526060016100f6565b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f6565b6101c56101c0366004610fa9565b6106f0565b604080519283526020830191909152016100f6565b6100ec6101e836600461100d565b6108e2565b6100ec6101fb36600461100d565b6108f7565b6100ec61020e366004611042565b610a26565b6100ec61010d366004611084565b61014b61022f3660046110b9565b610b07565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa1580156102c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ea9190611207565b60e081015190915060006102fd87610c5d565b9050600061030a87610d08565b60109290921b60909290921b60989690961b9590950101019695505050505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa1580156103be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e29190611207565b60e00151601084901b0191505092915050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ab9190611207565b60e081015190915060006104be85610d08565b60101b9190910195945050505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105849190611207565b60e081015190915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85146105c3576105be85610c5d565b6104be565b5071ffffffffffffffffffffffffffffffff000001949350505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301526000918291829182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190611207565b60e081015190915060006106ad8c610c5d565b905060006106ba8b610d9b565b905060008a60c01b8260a01b018d60901b018360101b0184019050808a8a97509750975050505050509750975097945050505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091829182917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa9190611207565b60e08101516040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015292935090916000917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190611207565b60e081015190915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89146108a9576108a489610c5d565b6108bb565b6fffffffffffffffffffffffffffffffff5b60109290921b9390930160208a901b019550608087901b0193505050509550959350505050565b60006108ef8484846108f7565b949350505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190611207565b60e081015190915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86146109ec576109e786610c5d565b6109fe565b6fffffffffffffffffffffffffffffffff5b90506000610a0b86610d08565b60901b60109290921b91909101919091019695505050505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611207565b60e08101519091506000610aef86610c5d565b60101b609086901b0191909101925050509392505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301526000918291829182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190611207565b60e081015190915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c14610c0057610bfb8c610c5d565b610c12565b6fffffffffffffffffffffffffffffffff5b90506000610c1f8c610d08565b90506000610c2c8c610d9b565b60b89b909b1b60989b909b1b9a909a0160909190911b0160109190911b01019b959a50939850939650505050505050565b60006fffffffffffffffffffffffffffffffff821115610d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5090565b600060ff821115610d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203860448201527f20626974730000000000000000000000000000000000000000000000000000006064820152608401610cfb565b600063ffffffff821115610d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610cfb565b73ffffffffffffffffffffffffffffffffffffffff81168114610e5357600080fd5b50565b61ffff81168114610e5357600080fd5b60008060008060808587031215610e7c57600080fd5b8435610e8781610e31565b935060208501359250604085013591506060850135610ea581610e56565b939692955090935050565b60008060408385031215610ec357600080fd5b8235610ece81610e31565b91506020830135610ede81610e31565b809150509250929050565b60008060408385031215610efc57600080fd5b8235610f0781610e31565b946020939093013593505050565b803560ff81168114610f2657600080fd5b919050565b600080600080600080600060e0888a031215610f4657600080fd5b8735610f5181610e31565b9650602088013595506040880135610f6881610e56565b945060608801359350610f7d60808901610f15565b925060a0880135915060c0880135905092959891949750929550565b80358015158114610f2657600080fd5b600080600080600060a08688031215610fc157600080fd5b8535610fcc81610e31565b94506020860135610fdc81610e31565b93506040860135610fec81610e31565b92506060860135915061100160808701610f99565b90509295509295909350565b60008060006060848603121561102257600080fd5b833561102d81610e31565b95602085013595506040909401359392505050565b60008060006060848603121561105757600080fd5b833561106281610e31565b925060208401359150604084013561107981610e56565b809150509250925092565b6000806040838503121561109757600080fd5b82356110a281610e31565b91506110b060208401610f99565b90509250929050565b600080600080600080600060e0888a0312156110d457600080fd5b87356110df81610e31565b9650602088013595506040880135945060608801359350610f7d60808901610f15565b6040516101e0810167ffffffffffffffff8111828210171561114d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b60006020828403121561116557600080fd5b6040516020810181811067ffffffffffffffff821117156111af577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff81168114610f2657600080fd5b805164ffffffffff81168114610f2657600080fd5b8051610f2681610e56565b8051610f2681610e31565b60006101e0828403121561121a57600080fd5b611222611102565b61122c8484611153565b815261123a602084016111bc565b602082015261124b604084016111bc565b604082015261125c606084016111bc565b606082015261126d608084016111bc565b608082015261127e60a084016111bc565b60a082015261128f60c084016111dc565b60c08201526112a060e084016111f1565b60e08201526101006112b38185016111fc565b908201526101206112c58482016111fc565b908201526101406112d78482016111fc565b908201526101606112e98482016111fc565b908201526101806112fb8482016111bc565b908201526101a061130d8482016111bc565b908201526101c061131f8482016111bc565b90820152939250505056fea2646970667358221220861630d5bc961085663d177bc8abe3e2b1641586f3aa6108e59bd650169c8f7e64736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1431 CODESIZE SUB DUP1 PUSH2 0x1431 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x1360 PUSH2 0xD1 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x16B ADD MSTORE DUP2 DUP2 PUSH2 0x27E ADD MSTORE DUP2 DUP2 PUSH2 0x376 ADD MSTORE DUP2 DUP2 PUSH2 0x43F ADD MSTORE DUP2 DUP2 PUSH2 0x518 ADD MSTORE DUP2 DUP2 PUSH2 0x62E ADD MSTORE DUP2 DUP2 PUSH2 0x73C ADD MSTORE DUP2 DUP2 PUSH2 0x7FC ADD MSTORE DUP2 DUP2 PUSH2 0x941 ADD MSTORE DUP2 DUP2 PUSH2 0xA70 ADD MSTORE PUSH2 0xB55 ADD MSTORE PUSH2 0x1360 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x88D51852 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xB76398E4 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB76398E4 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0xFC0EED85 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0xFED63A93 EQ PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x88D51852 EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x8DA7FB18 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0x9D2FFC1B EQ PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5CC7BC10 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x5CC7BC10 EQ PUSH2 0x125 JUMPI DUP1 PUSH4 0x671A7FAE EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1A64ACF2 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x1A8F6DEE EQ PUSH2 0xFF JUMPI DUP1 PUSH4 0x1FD34797 EQ PUSH2 0x112 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEC PUSH2 0xE7 CALLDATASIZE PUSH1 0x4 PUSH2 0xE66 JUMP JUMPDEST PUSH2 0x234 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xEC PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0xEB0 JUMP JUMPDEST PUSH2 0x32C JUMP JUMPDEST PUSH2 0xEC PUSH2 0x120 CALLDATASIZE PUSH1 0x4 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x3F5 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x133 CALLDATASIZE PUSH1 0x4 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST PUSH2 0x14B PUSH2 0x146 CALLDATASIZE PUSH1 0x4 PUSH2 0xF2B JUMP JUMPDEST PUSH2 0x5E0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xF6 JUMP JUMPDEST PUSH2 0x18D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST PUSH2 0x1C5 PUSH2 0x1C0 CALLDATASIZE PUSH1 0x4 PUSH2 0xFA9 JUMP JUMPDEST PUSH2 0x6F0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0xF6 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x100D JUMP JUMPDEST PUSH2 0x8E2 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0x100D JUMP JUMPDEST PUSH2 0x8F7 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x20E CALLDATASIZE PUSH1 0x4 PUSH2 0x1042 JUMP JUMPDEST PUSH2 0xA26 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x22F CALLDATASIZE PUSH1 0x4 PUSH2 0x10B9 JUMP JUMPDEST PUSH2 0xB07 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EA SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH2 0x2FD DUP8 PUSH2 0xC5D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x30A DUP8 PUSH2 0xD08 JUMP JUMPDEST PUSH1 0x10 SWAP3 SWAP1 SWAP3 SHL PUSH1 0x90 SWAP3 SWAP1 SWAP3 SHL PUSH1 0x98 SWAP7 SWAP1 SWAP7 SHL SWAP6 SWAP1 SWAP6 ADD ADD ADD SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E2 SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 ADD MLOAD PUSH1 0x10 DUP5 SWAP1 SHL ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x487 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH2 0x4BE DUP6 PUSH2 0xD08 JUMP JUMPDEST PUSH1 0x10 SHL SWAP2 SWAP1 SWAP2 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x560 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x584 SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 EQ PUSH2 0x5C3 JUMPI PUSH2 0x5BE DUP6 PUSH2 0xC5D JUMP JUMPDEST PUSH2 0x4BE JUMP JUMPDEST POP PUSH18 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x676 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x69A SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH2 0x6AD DUP13 PUSH2 0xC5D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6BA DUP12 PUSH2 0xD9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP11 PUSH1 0xC0 SHL DUP3 PUSH1 0xA0 SHL ADD DUP14 PUSH1 0x90 SHL ADD DUP4 PUSH1 0x10 SHL ADD DUP5 ADD SWAP1 POP DUP1 DUP11 DUP11 SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x786 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7AA SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x846 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x86A SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 EQ PUSH2 0x8A9 JUMPI PUSH2 0x8A4 DUP10 PUSH2 0xC5D JUMP JUMPDEST PUSH2 0x8BB JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0x10 SWAP3 SWAP1 SWAP3 SHL SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 DUP11 SWAP1 SHL ADD SWAP6 POP PUSH1 0x80 DUP8 SWAP1 SHL ADD SWAP4 POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8EF DUP5 DUP5 DUP5 PUSH2 0x8F7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x989 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AD SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 EQ PUSH2 0x9EC JUMPI PUSH2 0x9E7 DUP7 PUSH2 0xC5D JUMP JUMPDEST PUSH2 0x9FE JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA0B DUP7 PUSH2 0xD08 JUMP JUMPDEST PUSH1 0x90 SHL PUSH1 0x10 SWAP3 SWAP1 SWAP3 SHL SWAP2 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 ADD SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xADC SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH2 0xAEF DUP7 PUSH2 0xC5D JUMP JUMPDEST PUSH1 0x10 SHL PUSH1 0x90 DUP7 SWAP1 SHL ADD SWAP2 SWAP1 SWAP2 ADD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB9D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBC1 SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 EQ PUSH2 0xC00 JUMPI PUSH2 0xBFB DUP13 PUSH2 0xC5D JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xC1F DUP13 PUSH2 0xD08 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xC2C DUP13 PUSH2 0xD9B JUMP JUMPDEST PUSH1 0xB8 SWAP12 SWAP1 SWAP12 SHL PUSH1 0x98 SWAP12 SWAP1 SWAP12 SHL SWAP11 SWAP1 SWAP11 ADD PUSH1 0x90 SWAP2 SWAP1 SWAP2 SHL ADD PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL ADD ADD SWAP12 SWAP6 SWAP11 POP SWAP4 SWAP9 POP SWAP4 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xD04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xD04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2038 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2062697473000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xCFB JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 GT ISZERO PUSH2 0xD04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2033 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3220626974730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xCFB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xE53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xE7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0xE87 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0xEA5 DUP2 PUSH2 0xE56 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xECE DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xEDE DUP2 PUSH2 0xE31 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xF07 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xF26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0xF51 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0xF68 DUP2 PUSH2 0xE56 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0xF7D PUSH1 0x80 DUP10 ADD PUSH2 0xF15 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xFC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xFCC DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xFDC DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0xFEC DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH2 0x1001 PUSH1 0x80 DUP8 ADD PUSH2 0xF99 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1022 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x102D DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1057 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1062 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1079 DUP2 PUSH2 0xE56 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1097 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x10A2 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP2 POP PUSH2 0x10B0 PUSH1 0x20 DUP5 ADD PUSH2 0xF99 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x10D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x10DF DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0xF7D PUSH1 0x80 DUP10 ADD PUSH2 0xF15 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x114D JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x11AF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xF26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xF26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xF26 DUP2 PUSH2 0xE56 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF26 DUP2 PUSH2 0xE31 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x121A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1222 PUSH2 0x1102 JUMP JUMPDEST PUSH2 0x122C DUP5 DUP5 PUSH2 0x1153 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x123A PUSH1 0x20 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x124B PUSH1 0x40 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x125C PUSH1 0x60 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x126D PUSH1 0x80 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x127E PUSH1 0xA0 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x128F PUSH1 0xC0 DUP5 ADD PUSH2 0x11DC JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x12A0 PUSH1 0xE0 DUP5 ADD PUSH2 0x11F1 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x12B3 DUP2 DUP6 ADD PUSH2 0x11FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x12C5 DUP5 DUP3 ADD PUSH2 0x11FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x12D7 DUP5 DUP3 ADD PUSH2 0x11FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x12E9 DUP5 DUP3 ADD PUSH2 0x11FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x12FB DUP5 DUP3 ADD PUSH2 0x11BC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x130D DUP5 DUP3 ADD PUSH2 0x11BC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x131F DUP5 DUP3 ADD PUSH2 0x11BC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 AND ADDRESS 0xD5 0xBC SWAP7 LT DUP6 PUSH7 0x3D177BC8ABE3E2 0xB1 PUSH5 0x1586F3AA61 ADDMOD 0xE5 SWAP12 0xD6 POP AND SWAP13 DUP16 PUSH31 0x64736F6C634300080A00330000000000000000000000000000000000000000 ","sourceMap":"484:12621:56:-:0;;;654:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;684:11:56;;;484:12621;;14:304:124;98:6;151:2;139:9;130:7;126:23;122:32;119:52;;;167:1;164;157:12;119:52;193:16;;-1:-1:-1;;;;;238:31:124;;228:42;;218:70;;284:1;281;274:12;218:70;307:5;14:304;-1:-1:-1;;;14:304:124:o;:::-;484:12621:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@POOL_7649":{"entryPoint":null,"id":7649,"parameterSlots":0,"returnSlots":0},"@encodeBorrowParams_7861":{"entryPoint":564,"id":7861,"parameterSlots":4,"returnSlots":1},"@encodeLiquidationCall_8200":{"entryPoint":1776,"id":8200,"parameterSlots":5,"returnSlots":2},"@encodeRebalanceStableBorrowRate_8089":{"entryPoint":812,"id":8089,"parameterSlots":2,"returnSlots":1},"@encodeRepayParams_7920":{"entryPoint":2295,"id":7920,"parameterSlots":3,"returnSlots":1},"@encodeRepayWithATokensParams_8019":{"entryPoint":2274,"id":8019,"parameterSlots":3,"returnSlots":1},"@encodeRepayWithPermitParams_8000":{"entryPoint":2823,"id":8000,"parameterSlots":7,"returnSlots":3},"@encodeSetUserUseReserveAsCollateral_8121":{"entryPoint":null,"id":8121,"parameterSlots":2,"returnSlots":1},"@encodeSupplyParams_7701":{"entryPoint":2598,"id":7701,"parameterSlots":3,"returnSlots":1},"@encodeSupplyWithPermitParams_7762":{"entryPoint":1504,"id":7762,"parameterSlots":7,"returnSlots":3},"@encodeSwapBorrowRateMode_8057":{"entryPoint":1013,"id":8057,"parameterSlots":2,"returnSlots":1},"@encodeWithdrawParams_7813":{"entryPoint":1230,"id":7813,"parameterSlots":2,"returnSlots":1},"@toUint128_1626":{"entryPoint":3165,"id":1626,"parameterSlots":1,"returnSlots":1},"@toUint32_1701":{"entryPoint":3483,"id":1701,"parameterSlots":1,"returnSlots":1},"@toUint8_1751":{"entryPoint":3336,"id":1751,"parameterSlots":1,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":4604,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool":{"entryPoint":3993,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":4435,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":3760,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool":{"entryPoint":4009,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_bool":{"entryPoint":4228,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":3817,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint16":{"entryPoint":4162,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_uint16t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":3883,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":4109,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16":{"entryPoint":3686,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":4281,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory":{"entryPoint":4615,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":4540,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":4593,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":4572,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":3861,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":4354,"id":null,"parameterSlots":0,"returnSlots":1},"validator_revert_address":{"entryPoint":3633,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint16":{"entryPoint":3670,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10855:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:124"},"nodeType":"YulFunctionCall","src":"148:12:124"},"nodeType":"YulExpressionStatement","src":"148:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:124"},"nodeType":"YulFunctionCall","src":"89:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:124"},"nodeType":"YulFunctionCall","src":"79:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:124"},"nodeType":"YulFunctionCall","src":"72:73:124"},"nodeType":"YulIf","src":"69:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:124","type":""}],"src":"14:154:124"},{"body":{"nodeType":"YulBlock","src":"217:73:124","statements":[{"body":{"nodeType":"YulBlock","src":"268:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"277:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"280:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"270:6:124"},"nodeType":"YulFunctionCall","src":"270:12:124"},"nodeType":"YulExpressionStatement","src":"270:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"240:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"251:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"258:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"247:3:124"},"nodeType":"YulFunctionCall","src":"247:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"237:2:124"},"nodeType":"YulFunctionCall","src":"237:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"230:6:124"},"nodeType":"YulFunctionCall","src":"230:37:124"},"nodeType":"YulIf","src":"227:57:124"}]},"name":"validator_revert_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"206:5:124","type":""}],"src":"173:117:124"},{"body":{"nodeType":"YulBlock","src":"415:403:124","statements":[{"body":{"nodeType":"YulBlock","src":"462:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"471:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"474:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"464:6:124"},"nodeType":"YulFunctionCall","src":"464:12:124"},"nodeType":"YulExpressionStatement","src":"464:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"436:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"445:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"432:3:124"},"nodeType":"YulFunctionCall","src":"432:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"457:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"428:3:124"},"nodeType":"YulFunctionCall","src":"428:33:124"},"nodeType":"YulIf","src":"425:53:124"},{"nodeType":"YulVariableDeclaration","src":"487:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"513:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"500:12:124"},"nodeType":"YulFunctionCall","src":"500:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"491:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"557:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"532:24:124"},"nodeType":"YulFunctionCall","src":"532:31:124"},"nodeType":"YulExpressionStatement","src":"532:31:124"},{"nodeType":"YulAssignment","src":"572:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"582:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"572:6:124"}]},{"nodeType":"YulAssignment","src":"596:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"623:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"634:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"619:3:124"},"nodeType":"YulFunctionCall","src":"619:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"606:12:124"},"nodeType":"YulFunctionCall","src":"606:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"596:6:124"}]},{"nodeType":"YulAssignment","src":"647:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"674:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"685:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"670:3:124"},"nodeType":"YulFunctionCall","src":"670:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"657:12:124"},"nodeType":"YulFunctionCall","src":"657:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"647:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"698:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"730:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"741:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"726:3:124"},"nodeType":"YulFunctionCall","src":"726:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"713:12:124"},"nodeType":"YulFunctionCall","src":"713:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"702:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"778:7:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"754:23:124"},"nodeType":"YulFunctionCall","src":"754:32:124"},"nodeType":"YulExpressionStatement","src":"754:32:124"},{"nodeType":"YulAssignment","src":"795:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"805:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"795:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"357:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"368:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"380:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"388:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"396:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"404:6:124","type":""}],"src":"295:523:124"},{"body":{"nodeType":"YulBlock","src":"924:76:124","statements":[{"nodeType":"YulAssignment","src":"934:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"946:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"957:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"942:3:124"},"nodeType":"YulFunctionCall","src":"942:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"934:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"976:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"987:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"969:6:124"},"nodeType":"YulFunctionCall","src":"969:25:124"},"nodeType":"YulExpressionStatement","src":"969:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"893:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"904:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"915:4:124","type":""}],"src":"823:177:124"},{"body":{"nodeType":"YulBlock","src":"1092:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"1138:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1147:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1150:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1140:6:124"},"nodeType":"YulFunctionCall","src":"1140:12:124"},"nodeType":"YulExpressionStatement","src":"1140:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1113:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1122:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1109:3:124"},"nodeType":"YulFunctionCall","src":"1109:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1134:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1105:3:124"},"nodeType":"YulFunctionCall","src":"1105:32:124"},"nodeType":"YulIf","src":"1102:52:124"},{"nodeType":"YulVariableDeclaration","src":"1163:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1189:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1176:12:124"},"nodeType":"YulFunctionCall","src":"1176:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1167:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1233:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1208:24:124"},"nodeType":"YulFunctionCall","src":"1208:31:124"},"nodeType":"YulExpressionStatement","src":"1208:31:124"},{"nodeType":"YulAssignment","src":"1248:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1258:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1248:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1272:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1304:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1315:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1300:3:124"},"nodeType":"YulFunctionCall","src":"1300:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1287:12:124"},"nodeType":"YulFunctionCall","src":"1287:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1276:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1353:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1328:24:124"},"nodeType":"YulFunctionCall","src":"1328:33:124"},"nodeType":"YulExpressionStatement","src":"1328:33:124"},{"nodeType":"YulAssignment","src":"1370:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1380:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1370:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1050:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1061:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1073:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1081:6:124","type":""}],"src":"1005:388:124"},{"body":{"nodeType":"YulBlock","src":"1485:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1531:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1540:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1543:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:12:124"},"nodeType":"YulExpressionStatement","src":"1533:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1506:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1515:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1502:3:124"},"nodeType":"YulFunctionCall","src":"1502:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1527:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1498:3:124"},"nodeType":"YulFunctionCall","src":"1498:32:124"},"nodeType":"YulIf","src":"1495:52:124"},{"nodeType":"YulVariableDeclaration","src":"1556:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1582:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1569:12:124"},"nodeType":"YulFunctionCall","src":"1569:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1560:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1626:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1601:24:124"},"nodeType":"YulFunctionCall","src":"1601:31:124"},"nodeType":"YulExpressionStatement","src":"1601:31:124"},{"nodeType":"YulAssignment","src":"1641:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1651:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1641:6:124"}]},{"nodeType":"YulAssignment","src":"1665:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1692:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1703:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1688:3:124"},"nodeType":"YulFunctionCall","src":"1688:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1675:12:124"},"nodeType":"YulFunctionCall","src":"1675:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1665:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1443:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1454:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1466:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1474:6:124","type":""}],"src":"1398:315:124"},{"body":{"nodeType":"YulBlock","src":"1765:109:124","statements":[{"nodeType":"YulAssignment","src":"1775:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1797:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1784:12:124"},"nodeType":"YulFunctionCall","src":"1784:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1775:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1852:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1861:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1864:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1854:6:124"},"nodeType":"YulFunctionCall","src":"1854:12:124"},"nodeType":"YulExpressionStatement","src":"1854:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1826:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1837:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1844:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1833:3:124"},"nodeType":"YulFunctionCall","src":"1833:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1823:2:124"},"nodeType":"YulFunctionCall","src":"1823:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1816:6:124"},"nodeType":"YulFunctionCall","src":"1816:35:124"},"nodeType":"YulIf","src":"1813:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1744:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1755:5:124","type":""}],"src":"1718:156:124"},{"body":{"nodeType":"YulBlock","src":"2048:563:124","statements":[{"body":{"nodeType":"YulBlock","src":"2095:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2104:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2107:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2097:6:124"},"nodeType":"YulFunctionCall","src":"2097:12:124"},"nodeType":"YulExpressionStatement","src":"2097:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2069:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2078:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2065:3:124"},"nodeType":"YulFunctionCall","src":"2065:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2090:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2061:3:124"},"nodeType":"YulFunctionCall","src":"2061:33:124"},"nodeType":"YulIf","src":"2058:53:124"},{"nodeType":"YulVariableDeclaration","src":"2120:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2146:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2133:12:124"},"nodeType":"YulFunctionCall","src":"2133:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2124:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2190:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2165:24:124"},"nodeType":"YulFunctionCall","src":"2165:31:124"},"nodeType":"YulExpressionStatement","src":"2165:31:124"},{"nodeType":"YulAssignment","src":"2205:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2215:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2205:6:124"}]},{"nodeType":"YulAssignment","src":"2229:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2256:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2267:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2252:3:124"},"nodeType":"YulFunctionCall","src":"2252:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2239:12:124"},"nodeType":"YulFunctionCall","src":"2239:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2229:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2280:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2312:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2323:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2308:3:124"},"nodeType":"YulFunctionCall","src":"2308:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2295:12:124"},"nodeType":"YulFunctionCall","src":"2295:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2284:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2360:7:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"2336:23:124"},"nodeType":"YulFunctionCall","src":"2336:32:124"},"nodeType":"YulExpressionStatement","src":"2336:32:124"},{"nodeType":"YulAssignment","src":"2377:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2387:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2377:6:124"}]},{"nodeType":"YulAssignment","src":"2403:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2430:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2441:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2426:3:124"},"nodeType":"YulFunctionCall","src":"2426:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2413:12:124"},"nodeType":"YulFunctionCall","src":"2413:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2403:6:124"}]},{"nodeType":"YulAssignment","src":"2454:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2485:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2496:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2481:3:124"},"nodeType":"YulFunctionCall","src":"2481:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2464:16:124"},"nodeType":"YulFunctionCall","src":"2464:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2454:6:124"}]},{"nodeType":"YulAssignment","src":"2510:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2537:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2548:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2533:3:124"},"nodeType":"YulFunctionCall","src":"2533:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2520:12:124"},"nodeType":"YulFunctionCall","src":"2520:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2510:6:124"}]},{"nodeType":"YulAssignment","src":"2562:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2589:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2600:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2585:3:124"},"nodeType":"YulFunctionCall","src":"2585:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2572:12:124"},"nodeType":"YulFunctionCall","src":"2572:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2562:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint16t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1966:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1977:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1989:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1997:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2005:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2013:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2021:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2029:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"2037:6:124","type":""}],"src":"1879:732:124"},{"body":{"nodeType":"YulBlock","src":"2773:162:124","statements":[{"nodeType":"YulAssignment","src":"2783:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2795:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2806:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2791:3:124"},"nodeType":"YulFunctionCall","src":"2791:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2783:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2825:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2836:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2818:6:124"},"nodeType":"YulFunctionCall","src":"2818:25:124"},"nodeType":"YulExpressionStatement","src":"2818:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2863:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2874:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2859:3:124"},"nodeType":"YulFunctionCall","src":"2859:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2879:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2852:6:124"},"nodeType":"YulFunctionCall","src":"2852:34:124"},"nodeType":"YulExpressionStatement","src":"2852:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2906:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2917:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2902:3:124"},"nodeType":"YulFunctionCall","src":"2902:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"2922:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2895:6:124"},"nodeType":"YulFunctionCall","src":"2895:34:124"},"nodeType":"YulExpressionStatement","src":"2895:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2726:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2737:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2745:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2753:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2764:4:124","type":""}],"src":"2616:319:124"},{"body":{"nodeType":"YulBlock","src":"3055:125:124","statements":[{"nodeType":"YulAssignment","src":"3065:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3077:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3088:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3073:3:124"},"nodeType":"YulFunctionCall","src":"3073:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3065:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3107:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3122:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3130:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3118:3:124"},"nodeType":"YulFunctionCall","src":"3118:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3100:6:124"},"nodeType":"YulFunctionCall","src":"3100:74:124"},"nodeType":"YulExpressionStatement","src":"3100:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3024:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3035:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3046:4:124","type":""}],"src":"2940:240:124"},{"body":{"nodeType":"YulBlock","src":"3231:114:124","statements":[{"nodeType":"YulAssignment","src":"3241:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3263:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3250:12:124"},"nodeType":"YulFunctionCall","src":"3250:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3241:5:124"}]},{"body":{"nodeType":"YulBlock","src":"3323:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3332:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3335:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3325:6:124"},"nodeType":"YulFunctionCall","src":"3325:12:124"},"nodeType":"YulExpressionStatement","src":"3325:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3292:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3313:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3306:6:124"},"nodeType":"YulFunctionCall","src":"3306:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3299:6:124"},"nodeType":"YulFunctionCall","src":"3299:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3289:2:124"},"nodeType":"YulFunctionCall","src":"3289:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3282:6:124"},"nodeType":"YulFunctionCall","src":"3282:40:124"},"nodeType":"YulIf","src":"3279:60:124"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3210:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3221:5:124","type":""}],"src":"3185:160:124"},{"body":{"nodeType":"YulBlock","src":"3485:532:124","statements":[{"body":{"nodeType":"YulBlock","src":"3532:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3541:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3544:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3534:6:124"},"nodeType":"YulFunctionCall","src":"3534:12:124"},"nodeType":"YulExpressionStatement","src":"3534:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3506:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3515:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3502:3:124"},"nodeType":"YulFunctionCall","src":"3502:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3527:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3498:3:124"},"nodeType":"YulFunctionCall","src":"3498:33:124"},"nodeType":"YulIf","src":"3495:53:124"},{"nodeType":"YulVariableDeclaration","src":"3557:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3583:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3570:12:124"},"nodeType":"YulFunctionCall","src":"3570:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3561:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3627:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3602:24:124"},"nodeType":"YulFunctionCall","src":"3602:31:124"},"nodeType":"YulExpressionStatement","src":"3602:31:124"},{"nodeType":"YulAssignment","src":"3642:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3652:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3642:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3666:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3698:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3709:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3694:3:124"},"nodeType":"YulFunctionCall","src":"3694:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3681:12:124"},"nodeType":"YulFunctionCall","src":"3681:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3670:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3747:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3722:24:124"},"nodeType":"YulFunctionCall","src":"3722:33:124"},"nodeType":"YulExpressionStatement","src":"3722:33:124"},{"nodeType":"YulAssignment","src":"3764:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3774:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3764:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3790:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3833:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3818:3:124"},"nodeType":"YulFunctionCall","src":"3818:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3805:12:124"},"nodeType":"YulFunctionCall","src":"3805:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"3794:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"3871:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3846:24:124"},"nodeType":"YulFunctionCall","src":"3846:33:124"},"nodeType":"YulExpressionStatement","src":"3846:33:124"},{"nodeType":"YulAssignment","src":"3888:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"3898:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3888:6:124"}]},{"nodeType":"YulAssignment","src":"3914:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3941:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3952:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3937:3:124"},"nodeType":"YulFunctionCall","src":"3937:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3924:12:124"},"nodeType":"YulFunctionCall","src":"3924:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3914:6:124"}]},{"nodeType":"YulAssignment","src":"3965:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3995:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4006:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3991:3:124"},"nodeType":"YulFunctionCall","src":"3991:19:124"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"3975:15:124"},"nodeType":"YulFunctionCall","src":"3975:36:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3965:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3419:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3430:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3442:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3450:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3458:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3466:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3474:6:124","type":""}],"src":"3350:667:124"},{"body":{"nodeType":"YulBlock","src":"4151:119:124","statements":[{"nodeType":"YulAssignment","src":"4161:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4173:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4184:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4169:3:124"},"nodeType":"YulFunctionCall","src":"4169:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4161:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4203:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"4214:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4196:6:124"},"nodeType":"YulFunctionCall","src":"4196:25:124"},"nodeType":"YulExpressionStatement","src":"4196:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4241:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4252:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4237:3:124"},"nodeType":"YulFunctionCall","src":"4237:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"4257:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4230:6:124"},"nodeType":"YulFunctionCall","src":"4230:34:124"},"nodeType":"YulExpressionStatement","src":"4230:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4112:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4123:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4131:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4142:4:124","type":""}],"src":"4022:248:124"},{"body":{"nodeType":"YulBlock","src":"4379:279:124","statements":[{"body":{"nodeType":"YulBlock","src":"4425:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4434:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4437:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4427:6:124"},"nodeType":"YulFunctionCall","src":"4427:12:124"},"nodeType":"YulExpressionStatement","src":"4427:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4400:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4409:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4396:3:124"},"nodeType":"YulFunctionCall","src":"4396:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4421:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4392:3:124"},"nodeType":"YulFunctionCall","src":"4392:32:124"},"nodeType":"YulIf","src":"4389:52:124"},{"nodeType":"YulVariableDeclaration","src":"4450:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4476:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4463:12:124"},"nodeType":"YulFunctionCall","src":"4463:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4454:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4520:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4495:24:124"},"nodeType":"YulFunctionCall","src":"4495:31:124"},"nodeType":"YulExpressionStatement","src":"4495:31:124"},{"nodeType":"YulAssignment","src":"4535:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4545:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4535:6:124"}]},{"nodeType":"YulAssignment","src":"4559:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4586:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4597:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4582:3:124"},"nodeType":"YulFunctionCall","src":"4582:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4569:12:124"},"nodeType":"YulFunctionCall","src":"4569:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4559:6:124"}]},{"nodeType":"YulAssignment","src":"4610:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4637:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4648:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4633:3:124"},"nodeType":"YulFunctionCall","src":"4633:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4620:12:124"},"nodeType":"YulFunctionCall","src":"4620:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4610:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4329:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4340:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4352:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4360:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4368:6:124","type":""}],"src":"4275:383:124"},{"body":{"nodeType":"YulBlock","src":"4766:351:124","statements":[{"body":{"nodeType":"YulBlock","src":"4812:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4821:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4824:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4814:6:124"},"nodeType":"YulFunctionCall","src":"4814:12:124"},"nodeType":"YulExpressionStatement","src":"4814:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4787:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4796:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4783:3:124"},"nodeType":"YulFunctionCall","src":"4783:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4808:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4779:3:124"},"nodeType":"YulFunctionCall","src":"4779:32:124"},"nodeType":"YulIf","src":"4776:52:124"},{"nodeType":"YulVariableDeclaration","src":"4837:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4863:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4850:12:124"},"nodeType":"YulFunctionCall","src":"4850:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4841:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4907:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4882:24:124"},"nodeType":"YulFunctionCall","src":"4882:31:124"},"nodeType":"YulExpressionStatement","src":"4882:31:124"},{"nodeType":"YulAssignment","src":"4922:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4932:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4922:6:124"}]},{"nodeType":"YulAssignment","src":"4946:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4973:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4984:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4969:3:124"},"nodeType":"YulFunctionCall","src":"4969:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4956:12:124"},"nodeType":"YulFunctionCall","src":"4956:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4946:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4997:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5029:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5040:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5025:3:124"},"nodeType":"YulFunctionCall","src":"5025:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5012:12:124"},"nodeType":"YulFunctionCall","src":"5012:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5001:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5077:7:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"5053:23:124"},"nodeType":"YulFunctionCall","src":"5053:32:124"},"nodeType":"YulExpressionStatement","src":"5053:32:124"},{"nodeType":"YulAssignment","src":"5094:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5104:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5094:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4716:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4727:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4739:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4747:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4755:6:124","type":""}],"src":"4663:454:124"},{"body":{"nodeType":"YulBlock","src":"5206:231:124","statements":[{"body":{"nodeType":"YulBlock","src":"5252:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5261:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5264:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5254:6:124"},"nodeType":"YulFunctionCall","src":"5254:12:124"},"nodeType":"YulExpressionStatement","src":"5254:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5227:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5236:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5223:3:124"},"nodeType":"YulFunctionCall","src":"5223:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5248:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5219:3:124"},"nodeType":"YulFunctionCall","src":"5219:32:124"},"nodeType":"YulIf","src":"5216:52:124"},{"nodeType":"YulVariableDeclaration","src":"5277:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5303:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5290:12:124"},"nodeType":"YulFunctionCall","src":"5290:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5281:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5347:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5322:24:124"},"nodeType":"YulFunctionCall","src":"5322:31:124"},"nodeType":"YulExpressionStatement","src":"5322:31:124"},{"nodeType":"YulAssignment","src":"5362:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5372:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5362:6:124"}]},{"nodeType":"YulAssignment","src":"5386:45:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5416:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5427:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5412:3:124"},"nodeType":"YulFunctionCall","src":"5412:18:124"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"5396:15:124"},"nodeType":"YulFunctionCall","src":"5396:35:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5386:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5164:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5175:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5187:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5195:6:124","type":""}],"src":"5122:315:124"},{"body":{"nodeType":"YulBlock","src":"5612:491:124","statements":[{"body":{"nodeType":"YulBlock","src":"5659:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5668:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5671:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5661:6:124"},"nodeType":"YulFunctionCall","src":"5661:12:124"},"nodeType":"YulExpressionStatement","src":"5661:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5633:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5642:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5629:3:124"},"nodeType":"YulFunctionCall","src":"5629:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5654:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5625:3:124"},"nodeType":"YulFunctionCall","src":"5625:33:124"},"nodeType":"YulIf","src":"5622:53:124"},{"nodeType":"YulVariableDeclaration","src":"5684:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5710:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5697:12:124"},"nodeType":"YulFunctionCall","src":"5697:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5688:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5754:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5729:24:124"},"nodeType":"YulFunctionCall","src":"5729:31:124"},"nodeType":"YulExpressionStatement","src":"5729:31:124"},{"nodeType":"YulAssignment","src":"5769:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5779:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5769:6:124"}]},{"nodeType":"YulAssignment","src":"5793:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5820:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5831:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5816:3:124"},"nodeType":"YulFunctionCall","src":"5816:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5803:12:124"},"nodeType":"YulFunctionCall","src":"5803:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5793:6:124"}]},{"nodeType":"YulAssignment","src":"5844:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5871:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5882:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5867:3:124"},"nodeType":"YulFunctionCall","src":"5867:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5854:12:124"},"nodeType":"YulFunctionCall","src":"5854:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5844:6:124"}]},{"nodeType":"YulAssignment","src":"5895:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5922:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5933:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5918:3:124"},"nodeType":"YulFunctionCall","src":"5918:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5905:12:124"},"nodeType":"YulFunctionCall","src":"5905:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5895:6:124"}]},{"nodeType":"YulAssignment","src":"5946:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5977:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5988:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5973:3:124"},"nodeType":"YulFunctionCall","src":"5973:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"5956:16:124"},"nodeType":"YulFunctionCall","src":"5956:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5946:6:124"}]},{"nodeType":"YulAssignment","src":"6002:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6029:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6040:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6025:3:124"},"nodeType":"YulFunctionCall","src":"6025:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6012:12:124"},"nodeType":"YulFunctionCall","src":"6012:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"6002:6:124"}]},{"nodeType":"YulAssignment","src":"6054:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6081:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6092:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6077:3:124"},"nodeType":"YulFunctionCall","src":"6077:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6064:12:124"},"nodeType":"YulFunctionCall","src":"6064:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"6054:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5530:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5541:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5553:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5561:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5569:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5577:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5585:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"5593:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"5601:6:124","type":""}],"src":"5442:661:124"},{"body":{"nodeType":"YulBlock","src":"6209:125:124","statements":[{"nodeType":"YulAssignment","src":"6219:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6231:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6242:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6227:3:124"},"nodeType":"YulFunctionCall","src":"6227:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6219:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6261:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6276:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6284:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6272:3:124"},"nodeType":"YulFunctionCall","src":"6272:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6254:6:124"},"nodeType":"YulFunctionCall","src":"6254:74:124"},"nodeType":"YulExpressionStatement","src":"6254:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6178:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6189:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6200:4:124","type":""}],"src":"6108:226:124"},{"body":{"nodeType":"YulBlock","src":"6380:360:124","statements":[{"nodeType":"YulAssignment","src":"6390:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6406:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6400:5:124"},"nodeType":"YulFunctionCall","src":"6400:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6390:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6418:34:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6440:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6448:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6436:3:124"},"nodeType":"YulFunctionCall","src":"6436:16:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6422:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6535:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6556:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6559:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6549:6:124"},"nodeType":"YulFunctionCall","src":"6549:88:124"},"nodeType":"YulExpressionStatement","src":"6549:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6657:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6660:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6650:6:124"},"nodeType":"YulFunctionCall","src":"6650:15:124"},"nodeType":"YulExpressionStatement","src":"6650:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6685:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6688:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6678:6:124"},"nodeType":"YulFunctionCall","src":"6678:15:124"},"nodeType":"YulExpressionStatement","src":"6678:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6470:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"6482:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6467:2:124"},"nodeType":"YulFunctionCall","src":"6467:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6506:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6518:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6503:2:124"},"nodeType":"YulFunctionCall","src":"6503:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6464:2:124"},"nodeType":"YulFunctionCall","src":"6464:62:124"},"nodeType":"YulIf","src":"6461:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6719:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6723:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6712:6:124"},"nodeType":"YulFunctionCall","src":"6712:22:124"},"nodeType":"YulExpressionStatement","src":"6712:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6369:6:124","type":""}],"src":"6339:401:124"},{"body":{"nodeType":"YulBlock","src":"6836:489:124","statements":[{"body":{"nodeType":"YulBlock","src":"6880:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6889:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6892:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6882:6:124"},"nodeType":"YulFunctionCall","src":"6882:12:124"},"nodeType":"YulExpressionStatement","src":"6882:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"6857:3:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6862:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6853:3:124"},"nodeType":"YulFunctionCall","src":"6853:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"6874:4:124","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6849:3:124"},"nodeType":"YulFunctionCall","src":"6849:30:124"},"nodeType":"YulIf","src":"6846:50:124"},{"nodeType":"YulVariableDeclaration","src":"6905:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6925:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6919:5:124"},"nodeType":"YulFunctionCall","src":"6919:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6909:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6937:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6959:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6967:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6955:3:124"},"nodeType":"YulFunctionCall","src":"6955:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6941:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7055:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7076:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7079:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7069:6:124"},"nodeType":"YulFunctionCall","src":"7069:88:124"},"nodeType":"YulExpressionStatement","src":"7069:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7177:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7180:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7170:6:124"},"nodeType":"YulFunctionCall","src":"7170:15:124"},"nodeType":"YulExpressionStatement","src":"7170:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7205:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7208:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7198:6:124"},"nodeType":"YulFunctionCall","src":"7198:15:124"},"nodeType":"YulExpressionStatement","src":"7198:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6990:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"7002:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6987:2:124"},"nodeType":"YulFunctionCall","src":"6987:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7026:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7038:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7023:2:124"},"nodeType":"YulFunctionCall","src":"7023:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6984:2:124"},"nodeType":"YulFunctionCall","src":"6984:62:124"},"nodeType":"YulIf","src":"6981:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7239:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7243:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7232:6:124"},"nodeType":"YulFunctionCall","src":"7232:22:124"},"nodeType":"YulExpressionStatement","src":"7232:22:124"},{"nodeType":"YulAssignment","src":"7263:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7272:6:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7263:5:124"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7294:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7308:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7302:5:124"},"nodeType":"YulFunctionCall","src":"7302:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7287:6:124"},"nodeType":"YulFunctionCall","src":"7287:32:124"},"nodeType":"YulExpressionStatement","src":"7287:32:124"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6807:9:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"6818:3:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6826:5:124","type":""}],"src":"6745:580:124"},{"body":{"nodeType":"YulBlock","src":"7390:132:124","statements":[{"nodeType":"YulAssignment","src":"7400:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7415:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7409:5:124"},"nodeType":"YulFunctionCall","src":"7409:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7400:5:124"}]},{"body":{"nodeType":"YulBlock","src":"7500:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7509:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7512:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7502:6:124"},"nodeType":"YulFunctionCall","src":"7502:12:124"},"nodeType":"YulExpressionStatement","src":"7502:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7444:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7455:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7462:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7451:3:124"},"nodeType":"YulFunctionCall","src":"7451:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7441:2:124"},"nodeType":"YulFunctionCall","src":"7441:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7434:6:124"},"nodeType":"YulFunctionCall","src":"7434:65:124"},"nodeType":"YulIf","src":"7431:85:124"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7369:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7380:5:124","type":""}],"src":"7330:192:124"},{"body":{"nodeType":"YulBlock","src":"7586:110:124","statements":[{"nodeType":"YulAssignment","src":"7596:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7611:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7605:5:124"},"nodeType":"YulFunctionCall","src":"7605:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7596:5:124"}]},{"body":{"nodeType":"YulBlock","src":"7674:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7683:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7686:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7676:6:124"},"nodeType":"YulFunctionCall","src":"7676:12:124"},"nodeType":"YulExpressionStatement","src":"7676:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7640:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7651:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7658:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7647:3:124"},"nodeType":"YulFunctionCall","src":"7647:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7637:2:124"},"nodeType":"YulFunctionCall","src":"7637:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7630:6:124"},"nodeType":"YulFunctionCall","src":"7630:43:124"},"nodeType":"YulIf","src":"7627:63:124"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7565:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7576:5:124","type":""}],"src":"7527:169:124"},{"body":{"nodeType":"YulBlock","src":"7760:77:124","statements":[{"nodeType":"YulAssignment","src":"7770:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7785:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7779:5:124"},"nodeType":"YulFunctionCall","src":"7779:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7770:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7825:5:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"7801:23:124"},"nodeType":"YulFunctionCall","src":"7801:30:124"},"nodeType":"YulExpressionStatement","src":"7801:30:124"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7739:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7750:5:124","type":""}],"src":"7701:136:124"},{"body":{"nodeType":"YulBlock","src":"7902:78:124","statements":[{"nodeType":"YulAssignment","src":"7912:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7927:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7921:5:124"},"nodeType":"YulFunctionCall","src":"7921:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7912:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7968:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7943:24:124"},"nodeType":"YulFunctionCall","src":"7943:31:124"},"nodeType":"YulExpressionStatement","src":"7943:31:124"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7881:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7892:5:124","type":""}],"src":"7842:138:124"},{"body":{"nodeType":"YulBlock","src":"8096:1536:124","statements":[{"body":{"nodeType":"YulBlock","src":"8143:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8152:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8155:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8145:6:124"},"nodeType":"YulFunctionCall","src":"8145:12:124"},"nodeType":"YulExpressionStatement","src":"8145:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8117:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8126:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8113:3:124"},"nodeType":"YulFunctionCall","src":"8113:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8138:3:124","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8109:3:124"},"nodeType":"YulFunctionCall","src":"8109:33:124"},"nodeType":"YulIf","src":"8106:53:124"},{"nodeType":"YulVariableDeclaration","src":"8168:30:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"8181:15:124"},"nodeType":"YulFunctionCall","src":"8181:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8172:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8214:5:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8274:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8285:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"8221:52:124"},"nodeType":"YulFunctionCall","src":"8221:72:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8207:6:124"},"nodeType":"YulFunctionCall","src":"8207:87:124"},"nodeType":"YulExpressionStatement","src":"8207:87:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8314:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8321:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8310:3:124"},"nodeType":"YulFunctionCall","src":"8310:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8360:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8371:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8356:3:124"},"nodeType":"YulFunctionCall","src":"8356:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"8326:29:124"},"nodeType":"YulFunctionCall","src":"8326:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8303:6:124"},"nodeType":"YulFunctionCall","src":"8303:73:124"},"nodeType":"YulExpressionStatement","src":"8303:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8396:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8403:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8392:3:124"},"nodeType":"YulFunctionCall","src":"8392:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8442:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8453:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8438:3:124"},"nodeType":"YulFunctionCall","src":"8438:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"8408:29:124"},"nodeType":"YulFunctionCall","src":"8408:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8385:6:124"},"nodeType":"YulFunctionCall","src":"8385:73:124"},"nodeType":"YulExpressionStatement","src":"8385:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8478:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8485:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8474:3:124"},"nodeType":"YulFunctionCall","src":"8474:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8524:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8535:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8520:3:124"},"nodeType":"YulFunctionCall","src":"8520:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"8490:29:124"},"nodeType":"YulFunctionCall","src":"8490:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8467:6:124"},"nodeType":"YulFunctionCall","src":"8467:73:124"},"nodeType":"YulExpressionStatement","src":"8467:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8560:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8567:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8556:3:124"},"nodeType":"YulFunctionCall","src":"8556:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8607:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8618:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8603:3:124"},"nodeType":"YulFunctionCall","src":"8603:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"8573:29:124"},"nodeType":"YulFunctionCall","src":"8573:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8549:6:124"},"nodeType":"YulFunctionCall","src":"8549:75:124"},"nodeType":"YulExpressionStatement","src":"8549:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8644:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8651:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8640:3:124"},"nodeType":"YulFunctionCall","src":"8640:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8691:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8702:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8687:3:124"},"nodeType":"YulFunctionCall","src":"8687:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"8657:29:124"},"nodeType":"YulFunctionCall","src":"8657:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8633:6:124"},"nodeType":"YulFunctionCall","src":"8633:75:124"},"nodeType":"YulExpressionStatement","src":"8633:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8728:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8735:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8724:3:124"},"nodeType":"YulFunctionCall","src":"8724:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8774:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8785:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8770:3:124"},"nodeType":"YulFunctionCall","src":"8770:19:124"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"8741:28:124"},"nodeType":"YulFunctionCall","src":"8741:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8717:6:124"},"nodeType":"YulFunctionCall","src":"8717:74:124"},"nodeType":"YulExpressionStatement","src":"8717:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8811:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8818:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8807:3:124"},"nodeType":"YulFunctionCall","src":"8807:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8857:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8868:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8853:3:124"},"nodeType":"YulFunctionCall","src":"8853:19:124"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"8824:28:124"},"nodeType":"YulFunctionCall","src":"8824:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8800:6:124"},"nodeType":"YulFunctionCall","src":"8800:74:124"},"nodeType":"YulExpressionStatement","src":"8800:74:124"},{"nodeType":"YulVariableDeclaration","src":"8883:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8893:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8887:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8916:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8923:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8912:3:124"},"nodeType":"YulFunctionCall","src":"8912:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8962:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8973:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8958:3:124"},"nodeType":"YulFunctionCall","src":"8958:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"8928:29:124"},"nodeType":"YulFunctionCall","src":"8928:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8905:6:124"},"nodeType":"YulFunctionCall","src":"8905:73:124"},"nodeType":"YulExpressionStatement","src":"8905:73:124"},{"nodeType":"YulVariableDeclaration","src":"8987:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8997:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8991:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9020:5:124"},{"name":"_2","nodeType":"YulIdentifier","src":"9027:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9016:3:124"},"nodeType":"YulFunctionCall","src":"9016:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9066:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"9077:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9062:3:124"},"nodeType":"YulFunctionCall","src":"9062:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"9032:29:124"},"nodeType":"YulFunctionCall","src":"9032:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9009:6:124"},"nodeType":"YulFunctionCall","src":"9009:73:124"},"nodeType":"YulExpressionStatement","src":"9009:73:124"},{"nodeType":"YulVariableDeclaration","src":"9091:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9101:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"9095:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9124:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"9131:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9120:3:124"},"nodeType":"YulFunctionCall","src":"9120:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9170:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"9181:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9166:3:124"},"nodeType":"YulFunctionCall","src":"9166:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"9136:29:124"},"nodeType":"YulFunctionCall","src":"9136:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9113:6:124"},"nodeType":"YulFunctionCall","src":"9113:73:124"},"nodeType":"YulExpressionStatement","src":"9113:73:124"},{"nodeType":"YulVariableDeclaration","src":"9195:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9205:3:124","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"9199:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9228:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"9235:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9224:3:124"},"nodeType":"YulFunctionCall","src":"9224:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9274:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"9285:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9270:3:124"},"nodeType":"YulFunctionCall","src":"9270:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"9240:29:124"},"nodeType":"YulFunctionCall","src":"9240:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9217:6:124"},"nodeType":"YulFunctionCall","src":"9217:73:124"},"nodeType":"YulExpressionStatement","src":"9217:73:124"},{"nodeType":"YulVariableDeclaration","src":"9299:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9309:3:124","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"9303:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9332:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"9339:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9328:3:124"},"nodeType":"YulFunctionCall","src":"9328:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9378:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"9389:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9374:3:124"},"nodeType":"YulFunctionCall","src":"9374:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9344:29:124"},"nodeType":"YulFunctionCall","src":"9344:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9321:6:124"},"nodeType":"YulFunctionCall","src":"9321:73:124"},"nodeType":"YulExpressionStatement","src":"9321:73:124"},{"nodeType":"YulVariableDeclaration","src":"9403:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9413:3:124","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"9407:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9436:5:124"},{"name":"_6","nodeType":"YulIdentifier","src":"9443:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9432:3:124"},"nodeType":"YulFunctionCall","src":"9432:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9482:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"9493:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9478:3:124"},"nodeType":"YulFunctionCall","src":"9478:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9448:29:124"},"nodeType":"YulFunctionCall","src":"9448:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9425:6:124"},"nodeType":"YulFunctionCall","src":"9425:73:124"},"nodeType":"YulExpressionStatement","src":"9425:73:124"},{"nodeType":"YulVariableDeclaration","src":"9507:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9517:3:124","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"9511:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9540:5:124"},{"name":"_7","nodeType":"YulIdentifier","src":"9547:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9536:3:124"},"nodeType":"YulFunctionCall","src":"9536:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9586:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"9597:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9582:3:124"},"nodeType":"YulFunctionCall","src":"9582:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9552:29:124"},"nodeType":"YulFunctionCall","src":"9552:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9529:6:124"},"nodeType":"YulFunctionCall","src":"9529:73:124"},"nodeType":"YulExpressionStatement","src":"9529:73:124"},{"nodeType":"YulAssignment","src":"9611:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9621:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9611:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8062:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8073:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8085:6:124","type":""}],"src":"7985:1647:124"},{"body":{"nodeType":"YulBlock","src":"9811:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9828:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9839:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9821:6:124"},"nodeType":"YulFunctionCall","src":"9821:21:124"},"nodeType":"YulExpressionStatement","src":"9821:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9862:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9873:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9858:3:124"},"nodeType":"YulFunctionCall","src":"9858:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"9878:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9851:6:124"},"nodeType":"YulFunctionCall","src":"9851:30:124"},"nodeType":"YulExpressionStatement","src":"9851:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9901:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9912:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9897:3:124"},"nodeType":"YulFunctionCall","src":"9897:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"9917:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9890:6:124"},"nodeType":"YulFunctionCall","src":"9890:62:124"},"nodeType":"YulExpressionStatement","src":"9890:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9972:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9983:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9968:3:124"},"nodeType":"YulFunctionCall","src":"9968:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"9988:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9961:6:124"},"nodeType":"YulFunctionCall","src":"9961:37:124"},"nodeType":"YulExpressionStatement","src":"9961:37:124"},{"nodeType":"YulAssignment","src":"10007:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10019:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10030:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10015:3:124"},"nodeType":"YulFunctionCall","src":"10015:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10007:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9788:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9802:4:124","type":""}],"src":"9637:403:124"},{"body":{"nodeType":"YulBlock","src":"10219:227:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10236:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10247:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10229:6:124"},"nodeType":"YulFunctionCall","src":"10229:21:124"},"nodeType":"YulExpressionStatement","src":"10229:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10270:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10281:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10266:3:124"},"nodeType":"YulFunctionCall","src":"10266:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"10286:2:124","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10259:6:124"},"nodeType":"YulFunctionCall","src":"10259:30:124"},"nodeType":"YulExpressionStatement","src":"10259:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10309:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10320:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10305:3:124"},"nodeType":"YulFunctionCall","src":"10305:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2038","kind":"string","nodeType":"YulLiteral","src":"10325:34:124","type":"","value":"SafeCast: value doesn't fit in 8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10298:6:124"},"nodeType":"YulFunctionCall","src":"10298:62:124"},"nodeType":"YulExpressionStatement","src":"10298:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10380:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10391:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10376:3:124"},"nodeType":"YulFunctionCall","src":"10376:18:124"},{"hexValue":"2062697473","kind":"string","nodeType":"YulLiteral","src":"10396:7:124","type":"","value":" bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10369:6:124"},"nodeType":"YulFunctionCall","src":"10369:35:124"},"nodeType":"YulExpressionStatement","src":"10369:35:124"},{"nodeType":"YulAssignment","src":"10413:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10425:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10436:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10421:3:124"},"nodeType":"YulFunctionCall","src":"10421:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10413:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10196:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10210:4:124","type":""}],"src":"10045:401:124"},{"body":{"nodeType":"YulBlock","src":"10625:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10642:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10653:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10635:6:124"},"nodeType":"YulFunctionCall","src":"10635:21:124"},"nodeType":"YulExpressionStatement","src":"10635:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10676:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10687:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10672:3:124"},"nodeType":"YulFunctionCall","src":"10672:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"10692:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10665:6:124"},"nodeType":"YulFunctionCall","src":"10665:30:124"},"nodeType":"YulExpressionStatement","src":"10665:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10715:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10726:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10711:3:124"},"nodeType":"YulFunctionCall","src":"10711:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2033","kind":"string","nodeType":"YulLiteral","src":"10731:34:124","type":"","value":"SafeCast: value doesn't fit in 3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10704:6:124"},"nodeType":"YulFunctionCall","src":"10704:62:124"},"nodeType":"YulExpressionStatement","src":"10704:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10786:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10797:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10782:3:124"},"nodeType":"YulFunctionCall","src":"10782:18:124"},{"hexValue":"322062697473","kind":"string","nodeType":"YulLiteral","src":"10802:8:124","type":"","value":"2 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10775:6:124"},"nodeType":"YulFunctionCall","src":"10775:36:124"},"nodeType":"YulExpressionStatement","src":"10775:36:124"},{"nodeType":"YulAssignment","src":"10820:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10832:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10843:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10828:3:124"},"nodeType":"YulFunctionCall","src":"10828:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10820:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10602:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10616:4:124","type":""}],"src":"10451:402:124"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function validator_revert_uint16(value)\n    {\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_uint16(value_1)\n        value3 := value_1\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint16t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_uint16(value_1)\n        value2 := value_1\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_bool(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint16(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_uint16(value_1)\n        value2 := value_1\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := abi_decode_bool(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_uint16(value)\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 8\")\n        mstore(add(headStart, 96), \" bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 3\")\n        mstore(add(headStart, 96), \"2 bits\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"7649":[{"length":32,"start":363},{"length":32,"start":638},{"length":32,"start":886},{"length":32,"start":1087},{"length":32,"start":1304},{"length":32,"start":1582},{"length":32,"start":1852},{"length":32,"start":2044},{"length":32,"start":2369},{"length":32,"start":2672},{"length":32,"start":2901}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100d45760003560e01c806388d5185211610081578063b76398e41161005b578063b76398e414610200578063fc0eed8514610213578063fed63a931461022157600080fd5b806388d51852146101b25780638da7fb18146101da5780639d2ffc1b146101ed57600080fd5b80635cc7bc10116100b25780635cc7bc1014610125578063671a7fae146101385780637535d2461461016657600080fd5b80631a64acf2146100d95780631a8f6dee146100ff5780631fd3479714610112575b600080fd5b6100ec6100e7366004610e66565b610234565b6040519081526020015b60405180910390f35b6100ec61010d366004610eb0565b61032c565b6100ec610120366004610ee9565b6103f5565b6100ec610133366004610ee9565b6104ce565b61014b610146366004610f2b565b6105e0565b604080519384526020840192909252908201526060016100f6565b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f6565b6101c56101c0366004610fa9565b6106f0565b604080519283526020830191909152016100f6565b6100ec6101e836600461100d565b6108e2565b6100ec6101fb36600461100d565b6108f7565b6100ec61020e366004611042565b610a26565b6100ec61010d366004611084565b61014b61022f3660046110b9565b610b07565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa1580156102c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ea9190611207565b60e081015190915060006102fd87610c5d565b9050600061030a87610d08565b60109290921b60909290921b60989690961b9590950101019695505050505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa1580156103be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e29190611207565b60e00151601084901b0191505092915050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ab9190611207565b60e081015190915060006104be85610d08565b60101b9190910195945050505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105849190611207565b60e081015190915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85146105c3576105be85610c5d565b6104be565b5071ffffffffffffffffffffffffffffffff000001949350505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301526000918291829182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190611207565b60e081015190915060006106ad8c610c5d565b905060006106ba8b610d9b565b905060008a60c01b8260a01b018d60901b018360101b0184019050808a8a97509750975050505050509750975097945050505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091829182917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa9190611207565b60e08101516040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015292935090916000917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190611207565b60e081015190915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89146108a9576108a489610c5d565b6108bb565b6fffffffffffffffffffffffffffffffff5b60109290921b9390930160208a901b019550608087901b0193505050509550959350505050565b60006108ef8484846108f7565b949350505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190611207565b60e081015190915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86146109ec576109e786610c5d565b6109fe565b6fffffffffffffffffffffffffffffffff5b90506000610a0b86610d08565b60901b60109290921b91909101919091019695505050505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611207565b60e08101519091506000610aef86610c5d565b60101b609086901b0191909101925050509392505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301526000918291829182917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190611207565b60e081015190915060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c14610c0057610bfb8c610c5d565b610c12565b6fffffffffffffffffffffffffffffffff5b90506000610c1f8c610d08565b90506000610c2c8c610d9b565b60b89b909b1b60989b909b1b9a909a0160909190911b0160109190911b01019b959a50939850939650505050505050565b60006fffffffffffffffffffffffffffffffff821115610d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5090565b600060ff821115610d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203860448201527f20626974730000000000000000000000000000000000000000000000000000006064820152608401610cfb565b600063ffffffff821115610d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610cfb565b73ffffffffffffffffffffffffffffffffffffffff81168114610e5357600080fd5b50565b61ffff81168114610e5357600080fd5b60008060008060808587031215610e7c57600080fd5b8435610e8781610e31565b935060208501359250604085013591506060850135610ea581610e56565b939692955090935050565b60008060408385031215610ec357600080fd5b8235610ece81610e31565b91506020830135610ede81610e31565b809150509250929050565b60008060408385031215610efc57600080fd5b8235610f0781610e31565b946020939093013593505050565b803560ff81168114610f2657600080fd5b919050565b600080600080600080600060e0888a031215610f4657600080fd5b8735610f5181610e31565b9650602088013595506040880135610f6881610e56565b945060608801359350610f7d60808901610f15565b925060a0880135915060c0880135905092959891949750929550565b80358015158114610f2657600080fd5b600080600080600060a08688031215610fc157600080fd5b8535610fcc81610e31565b94506020860135610fdc81610e31565b93506040860135610fec81610e31565b92506060860135915061100160808701610f99565b90509295509295909350565b60008060006060848603121561102257600080fd5b833561102d81610e31565b95602085013595506040909401359392505050565b60008060006060848603121561105757600080fd5b833561106281610e31565b925060208401359150604084013561107981610e56565b809150509250925092565b6000806040838503121561109757600080fd5b82356110a281610e31565b91506110b060208401610f99565b90509250929050565b600080600080600080600060e0888a0312156110d457600080fd5b87356110df81610e31565b9650602088013595506040880135945060608801359350610f7d60808901610f15565b6040516101e0810167ffffffffffffffff8111828210171561114d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b60006020828403121561116557600080fd5b6040516020810181811067ffffffffffffffff821117156111af577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff81168114610f2657600080fd5b805164ffffffffff81168114610f2657600080fd5b8051610f2681610e56565b8051610f2681610e31565b60006101e0828403121561121a57600080fd5b611222611102565b61122c8484611153565b815261123a602084016111bc565b602082015261124b604084016111bc565b604082015261125c606084016111bc565b606082015261126d608084016111bc565b608082015261127e60a084016111bc565b60a082015261128f60c084016111dc565b60c08201526112a060e084016111f1565b60e08201526101006112b38185016111fc565b908201526101206112c58482016111fc565b908201526101406112d78482016111fc565b908201526101606112e98482016111fc565b908201526101806112fb8482016111bc565b908201526101a061130d8482016111bc565b908201526101c061131f8482016111bc565b90820152939250505056fea2646970667358221220861630d5bc961085663d177bc8abe3e2b1641586f3aa6108e59bd650169c8f7e64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x88D51852 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xB76398E4 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB76398E4 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0xFC0EED85 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0xFED63A93 EQ PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x88D51852 EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x8DA7FB18 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0x9D2FFC1B EQ PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5CC7BC10 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x5CC7BC10 EQ PUSH2 0x125 JUMPI DUP1 PUSH4 0x671A7FAE EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1A64ACF2 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x1A8F6DEE EQ PUSH2 0xFF JUMPI DUP1 PUSH4 0x1FD34797 EQ PUSH2 0x112 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEC PUSH2 0xE7 CALLDATASIZE PUSH1 0x4 PUSH2 0xE66 JUMP JUMPDEST PUSH2 0x234 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xEC PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0xEB0 JUMP JUMPDEST PUSH2 0x32C JUMP JUMPDEST PUSH2 0xEC PUSH2 0x120 CALLDATASIZE PUSH1 0x4 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x3F5 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x133 CALLDATASIZE PUSH1 0x4 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST PUSH2 0x14B PUSH2 0x146 CALLDATASIZE PUSH1 0x4 PUSH2 0xF2B JUMP JUMPDEST PUSH2 0x5E0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xF6 JUMP JUMPDEST PUSH2 0x18D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST PUSH2 0x1C5 PUSH2 0x1C0 CALLDATASIZE PUSH1 0x4 PUSH2 0xFA9 JUMP JUMPDEST PUSH2 0x6F0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0xF6 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x100D JUMP JUMPDEST PUSH2 0x8E2 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0x100D JUMP JUMPDEST PUSH2 0x8F7 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x20E CALLDATASIZE PUSH1 0x4 PUSH2 0x1042 JUMP JUMPDEST PUSH2 0xA26 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x22F CALLDATASIZE PUSH1 0x4 PUSH2 0x10B9 JUMP JUMPDEST PUSH2 0xB07 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EA SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH2 0x2FD DUP8 PUSH2 0xC5D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x30A DUP8 PUSH2 0xD08 JUMP JUMPDEST PUSH1 0x10 SWAP3 SWAP1 SWAP3 SHL PUSH1 0x90 SWAP3 SWAP1 SWAP3 SHL PUSH1 0x98 SWAP7 SWAP1 SWAP7 SHL SWAP6 SWAP1 SWAP6 ADD ADD ADD SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E2 SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 ADD MLOAD PUSH1 0x10 DUP5 SWAP1 SHL ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x487 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH2 0x4BE DUP6 PUSH2 0xD08 JUMP JUMPDEST PUSH1 0x10 SHL SWAP2 SWAP1 SWAP2 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x560 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x584 SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 EQ PUSH2 0x5C3 JUMPI PUSH2 0x5BE DUP6 PUSH2 0xC5D JUMP JUMPDEST PUSH2 0x4BE JUMP JUMPDEST POP PUSH18 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x676 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x69A SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH2 0x6AD DUP13 PUSH2 0xC5D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6BA DUP12 PUSH2 0xD9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP11 PUSH1 0xC0 SHL DUP3 PUSH1 0xA0 SHL ADD DUP14 PUSH1 0x90 SHL ADD DUP4 PUSH1 0x10 SHL ADD DUP5 ADD SWAP1 POP DUP1 DUP11 DUP11 SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x786 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7AA SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x846 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x86A SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 EQ PUSH2 0x8A9 JUMPI PUSH2 0x8A4 DUP10 PUSH2 0xC5D JUMP JUMPDEST PUSH2 0x8BB JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0x10 SWAP3 SWAP1 SWAP3 SHL SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 DUP11 SWAP1 SHL ADD SWAP6 POP PUSH1 0x80 DUP8 SWAP1 SHL ADD SWAP4 POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8EF DUP5 DUP5 DUP5 PUSH2 0x8F7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x989 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AD SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 EQ PUSH2 0x9EC JUMPI PUSH2 0x9E7 DUP7 PUSH2 0xC5D JUMP JUMPDEST PUSH2 0x9FE JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA0B DUP7 PUSH2 0xD08 JUMP JUMPDEST PUSH1 0x90 SHL PUSH1 0x10 SWAP3 SWAP1 SWAP3 SHL SWAP2 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 ADD SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xADC SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH2 0xAEF DUP7 PUSH2 0xC5D JUMP JUMPDEST PUSH1 0x10 SHL PUSH1 0x90 DUP7 SWAP1 SHL ADD SWAP2 SWAP1 SWAP2 ADD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB9D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBC1 SWAP2 SWAP1 PUSH2 0x1207 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 EQ PUSH2 0xC00 JUMPI PUSH2 0xBFB DUP13 PUSH2 0xC5D JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xC1F DUP13 PUSH2 0xD08 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xC2C DUP13 PUSH2 0xD9B JUMP JUMPDEST PUSH1 0xB8 SWAP12 SWAP1 SWAP12 SHL PUSH1 0x98 SWAP12 SWAP1 SWAP12 SHL SWAP11 SWAP1 SWAP11 ADD PUSH1 0x90 SWAP2 SWAP1 SWAP2 SHL ADD PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL ADD ADD SWAP12 SWAP6 SWAP11 POP SWAP4 SWAP9 POP SWAP4 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xD04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xD04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2038 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2062697473000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xCFB JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 GT ISZERO PUSH2 0xD04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2033 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3220626974730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xCFB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xE53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xE7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0xE87 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0xEA5 DUP2 PUSH2 0xE56 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xECE DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xEDE DUP2 PUSH2 0xE31 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xF07 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xF26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0xF51 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0xF68 DUP2 PUSH2 0xE56 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0xF7D PUSH1 0x80 DUP10 ADD PUSH2 0xF15 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xFC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xFCC DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xFDC DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0xFEC DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH2 0x1001 PUSH1 0x80 DUP8 ADD PUSH2 0xF99 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1022 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x102D DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1057 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1062 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1079 DUP2 PUSH2 0xE56 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1097 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x10A2 DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP2 POP PUSH2 0x10B0 PUSH1 0x20 DUP5 ADD PUSH2 0xF99 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x10D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x10DF DUP2 PUSH2 0xE31 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0xF7D PUSH1 0x80 DUP10 ADD PUSH2 0xF15 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x114D JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x11AF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xF26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xF26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xF26 DUP2 PUSH2 0xE56 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF26 DUP2 PUSH2 0xE31 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x121A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1222 PUSH2 0x1102 JUMP JUMPDEST PUSH2 0x122C DUP5 DUP5 PUSH2 0x1153 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x123A PUSH1 0x20 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x124B PUSH1 0x40 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x125C PUSH1 0x60 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x126D PUSH1 0x80 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x127E PUSH1 0xA0 DUP5 ADD PUSH2 0x11BC JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x128F PUSH1 0xC0 DUP5 ADD PUSH2 0x11DC JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x12A0 PUSH1 0xE0 DUP5 ADD PUSH2 0x11F1 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x12B3 DUP2 DUP6 ADD PUSH2 0x11FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x12C5 DUP5 DUP3 ADD PUSH2 0x11FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x12D7 DUP5 DUP3 ADD PUSH2 0x11FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x12E9 DUP5 DUP3 ADD PUSH2 0x11FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x12FB DUP5 DUP3 ADD PUSH2 0x11BC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x130D DUP5 DUP3 ADD PUSH2 0x11BC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x131F DUP5 DUP3 ADD PUSH2 0x11BC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 AND ADDRESS 0xD5 0xBC SWAP7 LT DUP6 PUSH7 0x3D177BC8ABE3E2 0xB1 PUSH5 0x1586F3AA61 ADDMOD 0xE5 SWAP12 0xD6 POP AND SWAP13 DUP16 PUSH31 0x64736F6C634300080A00330000000000000000000000000000000000000000 ","sourceMap":"484:12621:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4869:609;;;;;;:::i;:::-;;:::i;:::-;;;969:25:124;;;957:2;942:18;4869:609:56;;;;;;;;10422:313;;;;;;:::i;:::-;;:::i;9682:404::-;;;;;;:::i;:::-;;:::i;3764:::-;;;;;;:::i;:::-;;:::i;2662:714::-;;;;;;:::i;:::-;;:::i;:::-;;;;2818:25:124;;;2874:2;2859:18;;2852:34;;;;2902:18;;;2895:34;2806:2;2791:18;2662:714:56;2616:319:124;537:27:56;;;;;;;;3130:42:124;3118:55;;;3100:74;;3088:2;3073:18;537:27:56;2940:240:124;12294:809:56;;;;;;:::i;:::-;;:::i;:::-;;;;4196:25:124;;;4252:2;4237:18;;4230:34;;;;4169:18;12294:809:56;4022:248:124;9087:211:56;;;;;;:::i;:::-;;:::i;6117:549::-;;;;;;:::i;:::-;;:::i;1292:418::-;;;;;;:::i;:::-;;:::i;11125:335::-;;;;;;:::i;7657:882::-;;;;;;:::i;:::-;;:::i;4869:609::-;5069:26;;;;;:19;3118:55:124;;;5069:26:56;;;3100:74:124;5018:7:56;;;;5069:4;:19;;;;3073:18:124;;5069:26:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5119:7;;;;5033:62;;-1:-1:-1;5102:14:56;5158:18;:6;:16;:18::i;:::-;5132:44;;5182:31;5216:26;:16;:24;:26::i;:::-;5338:2;5334:24;;;;5378:3;5374:35;;;;5415:3;5411:22;;;;5370:64;;;;5319:125;5289:163;;4869:609;-1:-1:-1;;;;;;4869:609:56:o;10422:313::-;10578:26;;;;;:19;3118:55:124;;;10578:26:56;;;3100:74:124;10527:7:56;;;;10578:4;:19;;;;3073:18:124;;10578:26:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10627:7;;;10699:2;10695:13;;;10682:27;;-1:-1:-1;;10422:313:56;;;;:::o;9682:404::-;9843:26;;;;;:19;3118:55:124;;;9843:26:56;;;3100:74:124;9792:7:56;;;;9843:4;:19;;;;3073:18:124;;9843:26:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9892:7;;;;9807:62;;-1:-1:-1;9875:14:56;9939:26;:16;:24;:26::i;:::-;10029:2;10025:34;10012:48;;;;;9682:404;-1:-1:-1;;;;;9682:404:56:o;3764:::-;3899:26;;;;;:19;3118:55:124;;;3899:26:56;;;3100:74:124;3848:7:56;;;;3899:4;:19;;;;3073:18:124;;3899:26:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3949:7;;;;3863:62;;-1:-1:-1;3932:14:56;3998:17;3988:27;;:68;;4038:18;:6;:16;:18::i;:::-;3988:68;;;-1:-1:-1;4117:24:56;4104:38;;3764:404;-1:-1:-1;;;;3764:404:56:o;2662:714::-;2943:26;;;;;:19;3118:55:124;;;2943:26:56;;;3100:74:124;2874:7:56;;;;;;;;2943:4;:19;;;;3073:18:124;;2943:26:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2993:7;;;;2907:62;;-1:-1:-1;2976:14:56;3032:18;:6;:16;:18::i;:::-;3006:44;;3056:24;3083:19;:8;:17;:19::i;:::-;3056:46;;3109:11;3301:7;3296:3;3292:17;3272;3267:3;3263:27;3259:51;3244:12;3239:3;3235:22;3231:80;3203:15;3199:2;3195:24;3180:141;3163:7;3150:179;3143:186;;3349:3;3354:7;3363;3341:30;;;;;;;;;;;2662:714;;;;;;;;;;;:::o;12294:809::-;12541:36;;;;;:19;3118:55:124;;;12541:36:56;;;3100:74:124;-1:-1:-1;;;;;;12541:4:56;:19;;;;;;3073:18:124;;12541:36:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12610:17;;;;12674:30;;;;;:19;3118:55:124;;;12674:30:56;;;3100:74:124;12610:17:56;;-1:-1:-1;12610:17:56;;12583:24;;12674:4;:19;;;;;;3073:18:124;;12674:30:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12731:11;;;;12634:70;;-1:-1:-1;12710:18:56;12795:17;12780:32;;:90;;12847:23;:11;:21;:23::i;:::-;12780:90;;;12821:17;12780:90;12970:2;12966:20;;;;12943:44;;;;12993:2;12989:13;;;12939:64;;-1:-1:-1;13048:3:56;13044:23;;;13018:50;;-1:-1:-1;;;;12294:809:56;;;;;;;;:::o;9087:211::-;9221:7;9243:50;9261:5;9268:6;9276:16;9243:17;:50::i;:::-;9236:57;9087:211;-1:-1:-1;;;;9087:211:56:o;6117:549::-;6289:26;;;;;:19;3118:55:124;;;6289:26:56;;;3100:74:124;6238:7:56;;;;6289:4;:19;;;;3073:18:124;;6289:26:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6339:7;;;;6253:62;;-1:-1:-1;6322:14:56;6388:17;6378:27;;:68;;6428:18;:6;:16;:18::i;:::-;6378:68;;;6408:17;6378:68;6352:94;;6452:31;6486:26;:16;:24;:26::i;:::-;6607:3;6603:35;6581:2;6577:24;;;;6573:66;;;;6560:80;;;;;;-1:-1:-1;;;;;;6117:549:56:o;1292:418::-;1462:26;;;;;:19;3118:55:124;;;1462:26:56;;;3100:74:124;1411:7:56;;;;1462:4;:19;;;;3073:18:124;;1462:26:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1512:7;;;;1426:62;;-1:-1:-1;1495:14:56;1551:18;:6;:16;:18::i;:::-;1638:2;1634:24;1664:3;1660:22;;;1630:53;1617:67;;;;;-1:-1:-1;;;1292:418:56;;;;;:::o;7657:882::-;7942:26;;;;;:19;3118:55:124;;;7942:26:56;;;3100:74:124;7873:7:56;;;;;;;;7942:4;:19;;;;3073:18:124;;7942:26:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7992:7;;;;7906:62;;-1:-1:-1;7975:14:56;8041:17;8031:27;;:68;;8081:18;:6;:16;:18::i;:::-;8031:68;;;8061:17;8031:68;8005:94;;8105:31;8139:26;:16;:24;:26::i;:::-;8105:60;;8171:24;8198:19;:8;:17;:19::i;:::-;8449:3;8445:17;;;;8420:3;8416:27;;;;8412:51;;;;8367:3;8363:35;;;;8346:129;8314:2;8310:24;;;;8295:190;8265:228;;8517:7;;-1:-1:-1;8526:7:56;;-1:-1:-1;8265:228:56;;-1:-1:-1;;;;;;;7657:882:56:o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;9839:2:124;1635:78:12;;;9821:21:124;9878:2;9858:18;;;9851:30;9917:34;9897:18;;;9890:62;9988:9;9968:18;;;9961:37;10015:19;;1635:78:12;;;;;;;;;-1:-1:-1;1734:5:12;1563:182::o;3775:172::-;3830:5;3860:15;3851:24;;;3843:74;;;;;;;10247:2:124;3843:74:12;;;10229:21:124;10286:2;10266:18;;;10259:30;10325:34;10305:18;;;10298:62;10396:7;10376:18;;;10369:35;10421:19;;3843:74:12;10045:401:124;2894:177:12;2950:6;2981:16;2972:25;;;2964:76;;;;;;;10653:2:124;2964:76:12;;;10635:21:124;10692:2;10672:18;;;10665:30;10731:34;10711:18;;;10704:62;10802:8;10782:18;;;10775:36;10828:19;;2964:76:12;10451:402:124;14:154;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:117::-;258:6;251:5;247:18;240:5;237:29;227:57;;280:1;277;270:12;295:523;380:6;388;396;404;457:3;445:9;436:7;432:23;428:33;425:53;;;474:1;471;464:12;425:53;513:9;500:23;532:31;557:5;532:31;:::i;:::-;582:5;-1:-1:-1;634:2:124;619:18;;606:32;;-1:-1:-1;685:2:124;670:18;;657:32;;-1:-1:-1;741:2:124;726:18;;713:32;754;713;754;:::i;:::-;295:523;;;;-1:-1:-1;295:523:124;;-1:-1:-1;;295:523:124:o;1005:388::-;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:52;;;1150:1;1147;1140:12;1102:52;1189:9;1176:23;1208:31;1233:5;1208:31;:::i;:::-;1258:5;-1:-1:-1;1315:2:124;1300:18;;1287:32;1328:33;1287:32;1328:33;:::i;:::-;1380:7;1370:17;;;1005:388;;;;;:::o;1398:315::-;1466:6;1474;1527:2;1515:9;1506:7;1502:23;1498:32;1495:52;;;1543:1;1540;1533:12;1495:52;1582:9;1569:23;1601:31;1626:5;1601:31;:::i;:::-;1651:5;1703:2;1688:18;;;;1675:32;;-1:-1:-1;;;1398:315:124:o;1718:156::-;1784:20;;1844:4;1833:16;;1823:27;;1813:55;;1864:1;1861;1854:12;1813:55;1718:156;;;:::o;1879:732::-;1989:6;1997;2005;2013;2021;2029;2037;2090:3;2078:9;2069:7;2065:23;2061:33;2058:53;;;2107:1;2104;2097:12;2058:53;2146:9;2133:23;2165:31;2190:5;2165:31;:::i;:::-;2215:5;-1:-1:-1;2267:2:124;2252:18;;2239:32;;-1:-1:-1;2323:2:124;2308:18;;2295:32;2336;2295;2336;:::i;:::-;2387:7;-1:-1:-1;2441:2:124;2426:18;;2413:32;;-1:-1:-1;2464:37:124;2496:3;2481:19;;2464:37;:::i;:::-;2454:47;;2548:3;2537:9;2533:19;2520:33;2510:43;;2600:3;2589:9;2585:19;2572:33;2562:43;;1879:732;;;;;;;;;;:::o;3185:160::-;3250:20;;3306:13;;3299:21;3289:32;;3279:60;;3335:1;3332;3325:12;3350:667;3442:6;3450;3458;3466;3474;3527:3;3515:9;3506:7;3502:23;3498:33;3495:53;;;3544:1;3541;3534:12;3495:53;3583:9;3570:23;3602:31;3627:5;3602:31;:::i;:::-;3652:5;-1:-1:-1;3709:2:124;3694:18;;3681:32;3722:33;3681:32;3722:33;:::i;:::-;3774:7;-1:-1:-1;3833:2:124;3818:18;;3805:32;3846:33;3805:32;3846:33;:::i;:::-;3898:7;-1:-1:-1;3952:2:124;3937:18;;3924:32;;-1:-1:-1;3975:36:124;4006:3;3991:19;;3975:36;:::i;:::-;3965:46;;3350:667;;;;;;;;:::o;4275:383::-;4352:6;4360;4368;4421:2;4409:9;4400:7;4396:23;4392:32;4389:52;;;4437:1;4434;4427:12;4389:52;4476:9;4463:23;4495:31;4520:5;4495:31;:::i;:::-;4545:5;4597:2;4582:18;;4569:32;;-1:-1:-1;4648:2:124;4633:18;;;4620:32;;4275:383;-1:-1:-1;;;4275:383:124:o;4663:454::-;4739:6;4747;4755;4808:2;4796:9;4787:7;4783:23;4779:32;4776:52;;;4824:1;4821;4814:12;4776:52;4863:9;4850:23;4882:31;4907:5;4882:31;:::i;:::-;4932:5;-1:-1:-1;4984:2:124;4969:18;;4956:32;;-1:-1:-1;5040:2:124;5025:18;;5012:32;5053;5012;5053;:::i;:::-;5104:7;5094:17;;;4663:454;;;;;:::o;5122:315::-;5187:6;5195;5248:2;5236:9;5227:7;5223:23;5219:32;5216:52;;;5264:1;5261;5254:12;5216:52;5303:9;5290:23;5322:31;5347:5;5322:31;:::i;:::-;5372:5;-1:-1:-1;5396:35:124;5427:2;5412:18;;5396:35;:::i;:::-;5386:45;;5122:315;;;;;:::o;5442:661::-;5553:6;5561;5569;5577;5585;5593;5601;5654:3;5642:9;5633:7;5629:23;5625:33;5622:53;;;5671:1;5668;5661:12;5622:53;5710:9;5697:23;5729:31;5754:5;5729:31;:::i;:::-;5779:5;-1:-1:-1;5831:2:124;5816:18;;5803:32;;-1:-1:-1;5882:2:124;5867:18;;5854:32;;-1:-1:-1;5933:2:124;5918:18;;5905:32;;-1:-1:-1;5956:37:124;5988:3;5973:19;;5956:37;:::i;6339:401::-;6406:2;6400:9;6448:3;6436:16;;6482:18;6467:34;;6503:22;;;6464:62;6461:242;;;6559:77;6556:1;6549:88;6660:4;6657:1;6650:15;6688:4;6685:1;6678:15;6461:242;6719:2;6712:22;6339:401;:::o;6745:580::-;6826:5;6874:4;6862:9;6857:3;6853:19;6849:30;6846:50;;;6892:1;6889;6882:12;6846:50;6925:2;6919:9;6967:4;6959:6;6955:17;7038:6;7026:10;7023:22;7002:18;6990:10;6987:34;6984:62;6981:242;;;7079:77;7076:1;7069:88;7180:4;7177:1;7170:15;7208:4;7205:1;7198:15;6981:242;7239:2;7232:22;7302:16;;7287:32;;-1:-1:-1;7272:6:124;6745:580;-1:-1:-1;6745:580:124:o;7330:192::-;7409:13;;7462:34;7451:46;;7441:57;;7431:85;;7512:1;7509;7502:12;7527:169;7605:13;;7658:12;7647:24;;7637:35;;7627:63;;7686:1;7683;7676:12;7701:136;7779:13;;7801:30;7779:13;7801:30;:::i;7842:138::-;7921:13;;7943:31;7921:13;7943:31;:::i;7985:1647::-;8085:6;8138:3;8126:9;8117:7;8113:23;8109:33;8106:53;;;8155:1;8152;8145:12;8106:53;8181:17;;:::i;:::-;8221:72;8285:7;8274:9;8221:72;:::i;:::-;8214:5;8207:87;8326:49;8371:2;8360:9;8356:18;8326:49;:::i;:::-;8321:2;8314:5;8310:14;8303:73;8408:49;8453:2;8442:9;8438:18;8408:49;:::i;:::-;8403:2;8396:5;8392:14;8385:73;8490:49;8535:2;8524:9;8520:18;8490:49;:::i;:::-;8485:2;8478:5;8474:14;8467:73;8573:50;8618:3;8607:9;8603:19;8573:50;:::i;:::-;8567:3;8560:5;8556:15;8549:75;8657:50;8702:3;8691:9;8687:19;8657:50;:::i;:::-;8651:3;8644:5;8640:15;8633:75;8741:49;8785:3;8774:9;8770:19;8741:49;:::i;:::-;8735:3;8728:5;8724:15;8717:74;8824:49;8868:3;8857:9;8853:19;8824:49;:::i;:::-;8818:3;8811:5;8807:15;8800:74;8893:3;8928:49;8973:2;8962:9;8958:18;8928:49;:::i;:::-;8912:14;;;8905:73;8997:3;9032:49;9062:18;;;9032:49;:::i;:::-;9016:14;;;9009:73;9101:3;9136:49;9166:18;;;9136:49;:::i;:::-;9120:14;;;9113:73;9205:3;9240:49;9270:18;;;9240:49;:::i;:::-;9224:14;;;9217:73;9309:3;9344:49;9374:18;;;9344:49;:::i;:::-;9328:14;;;9321:73;9413:3;9448:49;9478:18;;;9448:49;:::i;:::-;9432:14;;;9425:73;9517:3;9552:49;9582:18;;;9552:49;:::i;:::-;9536:14;;;9529:73;9540:5;7985:1647;-1:-1:-1;;;7985:1647:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"992000","executionCost":"infinite","totalCost":"infinite"},"external":{"POOL()":"infinite","encodeBorrowParams(address,uint256,uint256,uint16)":"infinite","encodeLiquidationCall(address,address,address,uint256,bool)":"infinite","encodeRebalanceStableBorrowRate(address,address)":"infinite","encodeRepayParams(address,uint256,uint256)":"infinite","encodeRepayWithATokensParams(address,uint256,uint256)":"infinite","encodeRepayWithPermitParams(address,uint256,uint256,uint256,uint8,bytes32,bytes32)":"infinite","encodeSetUserUseReserveAsCollateral(address,bool)":"infinite","encodeSupplyParams(address,uint256,uint16)":"infinite","encodeSupplyWithPermitParams(address,uint256,uint16,uint256,uint8,bytes32,bytes32)":"infinite","encodeSwapBorrowRateMode(address,uint256)":"infinite","encodeWithdrawParams(address,uint256)":"infinite"}},"methodIdentifiers":{"POOL()":"7535d246","encodeBorrowParams(address,uint256,uint256,uint16)":"1a64acf2","encodeLiquidationCall(address,address,address,uint256,bool)":"88d51852","encodeRebalanceStableBorrowRate(address,address)":"1a8f6dee","encodeRepayParams(address,uint256,uint256)":"9d2ffc1b","encodeRepayWithATokensParams(address,uint256,uint256)":"8da7fb18","encodeRepayWithPermitParams(address,uint256,uint256,uint256,uint8,bytes32,bytes32)":"fed63a93","encodeSetUserUseReserveAsCollateral(address,bool)":"fc0eed85","encodeSupplyParams(address,uint256,uint16)":"b76398e4","encodeSupplyWithPermitParams(address,uint256,uint16,uint256,uint8,bytes32,bytes32)":"671a7fae","encodeSwapBorrowRateMode(address,uint256)":"1fd34797","encodeWithdrawParams(address,uint256)":"5cc7bc10"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"encodeBorrowParams\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"encodeLiquidationCall\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"encodeRebalanceStableBorrowRate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"encodeRepayParams\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"encodeRepayWithATokensParams\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"encodeRepayWithPermitParams\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"encodeSetUserUseReserveAsCollateral\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"encodeSupplyParams\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"encodeSupplyWithPermitParams\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"encodeSwapBorrowRateMode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encodeWithdrawParams\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"encodeBorrowParams(address,uint256,uint256,uint16)\":{\"details\":\"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\",\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"},\"returns\":{\"_0\":\"compact representation of withdraw parameters\"}},\"encodeLiquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"},\"returns\":{\"_0\":\"First half ot compact representation of liquidation call parameters\",\"_1\":\"Second half ot compact representation of liquidation call parameters\"}},\"encodeRebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"},\"returns\":{\"_0\":\"compact representation of rebalance stable borrow rate parameters\"}},\"encodeRepayParams(address,uint256,uint256)\":{\"details\":\"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `interestRateMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"compact representation of repay parameters\"}},\"encodeRepayWithATokensParams(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"compact representation of repay with aToken parameters\"}},\"encodeRepayWithPermitParams(address,uint256,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"compact representation of repayWithPermit parameters\",\"_1\":\"The R parameter of ERC712 permit sig\",\"_2\":\"The S parameter of ERC712 permit sig\"}},\"encodeSetUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"},\"returns\":{\"_0\":\"compact representation of set user use reserve as collateral parameters\"}},\"encodeSupplyParams(address,uint256,uint16)\":{\"details\":\"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"referralCode\":\"referralCode Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"},\"returns\":{\"_0\":\"compact representation of supply parameters\"}},\"encodeSupplyWithPermitParams(address,uint256,uint16,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"referralCode Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"},\"returns\":{\"_0\":\"compact representation of supplyWithPermit parameters\",\"_1\":\"The R parameter of ERC712 permit sig\",\"_2\":\"The S parameter of ERC712 permit sig\"}},\"encodeSwapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"compact representation of swap borrow rate mode parameters\"}},\"encodeWithdrawParams(address,uint256)\":{\"details\":\"Without a to parameter as the compact calls to L2Pool will use msg.sender as to\",\"params\":{\"amount\":\"The underlying amount to be withdrawn\",\"asset\":\"The address of the underlying asset to withdraw\"},\"returns\":{\"_0\":\"compact representation of withdraw parameters\"}}},\"title\":\"L2Encoder\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"encodeBorrowParams(address,uint256,uint256,uint16)\":{\"notice\":\"Encodes borrow parameters from standard input to compact representation of 1 bytes32\"},\"encodeLiquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Encodes liquidation call parameters from standard input to compact representation of 2 bytes32\"},\"encodeRebalanceStableBorrowRate(address,address)\":{\"notice\":\"Encodes rebalance stable borrow rate parameters from standard input to compact representation of 1 bytes32\"},\"encodeRepayParams(address,uint256,uint256)\":{\"notice\":\"Encodes repay parameters from standard input to compact representation of 1 bytes32\"},\"encodeRepayWithATokensParams(address,uint256,uint256)\":{\"notice\":\"Encodes repay with aToken parameters from standard input to compact representation of 1 bytes32\"},\"encodeRepayWithPermitParams(address,uint256,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Encodes repayWithPermit parameters from standard input to compact representation of 3 bytes32\"},\"encodeSetUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Encodes set user use reserve as collateral parameters from standard input to compact representation of 1 bytes32\"},\"encodeSupplyParams(address,uint256,uint16)\":{\"notice\":\"Encodes supply parameters from standard input to compact representation of 1 bytes32\"},\"encodeSupplyWithPermitParams(address,uint256,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Encodes supplyWithPermit parameters from standard input to compact representation of 3 bytes32\"},\"encodeSwapBorrowRateMode(address,uint256)\":{\"notice\":\"Encodes swap borrow rate mode parameters from standard input to compact representation of 1 bytes32\"},\"encodeWithdrawParams(address,uint256)\":{\"notice\":\"Encodes withdraw parameters from standard input to compact representation of 1 bytes32\"}},\"notice\":\"Helper contract to encode calldata, used to optimize calldata size in L2Pool for transaction cost reduction only indented to help generate calldata for uses/frontends.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/L2Encoder.sol\":\"L2Encoder\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/misc/L2Encoder.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IPool} from '../interfaces/IPool.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title L2Encoder\\n * @author Aave\\n * @notice Helper contract to encode calldata, used to optimize calldata size in L2Pool for transaction cost reduction\\n * only indented to help generate calldata for uses/frontends.\\n */\\ncontract L2Encoder {\\n  using SafeCast for uint256;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(IPool pool) {\\n    POOL = pool;\\n  }\\n\\n  /**\\n   * @notice Encodes supply parameters from standard input to compact representation of 1 bytes32\\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param referralCode referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @return compact representation of supply parameters\\n   */\\n  function encodeSupplyParams(\\n    address asset,\\n    uint256 amount,\\n    uint16 referralCode\\n  ) external view returns (bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n\\n    uint16 assetId = data.id;\\n    uint128 shortenedAmount = amount.toUint128();\\n    bytes32 res;\\n\\n    assembly {\\n      res := add(assetId, add(shl(16, shortenedAmount), shl(144, referralCode)))\\n    }\\n    return res;\\n  }\\n\\n  /**\\n   * @notice Encodes supplyWithPermit parameters from standard input to compact representation of 3 bytes32\\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param referralCode referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return compact representation of supplyWithPermit parameters\\n   * @return The R parameter of ERC712 permit sig\\n   * @return The S parameter of ERC712 permit sig\\n   */\\n  function encodeSupplyWithPermitParams(\\n    address asset,\\n    uint256 amount,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external view returns (bytes32, bytes32, bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n\\n    uint16 assetId = data.id;\\n    uint128 shortenedAmount = amount.toUint128();\\n    uint32 shortenedDeadline = deadline.toUint32();\\n\\n    bytes32 res;\\n    assembly {\\n      res := add(\\n        assetId,\\n        add(\\n          shl(16, shortenedAmount),\\n          add(shl(144, referralCode), add(shl(160, shortenedDeadline), shl(192, permitV)))\\n        )\\n      )\\n    }\\n\\n    return (res, permitR, permitS);\\n  }\\n\\n  /**\\n   * @notice Encodes withdraw parameters from standard input to compact representation of 1 bytes32\\n   * @dev Without a to parameter as the compact calls to L2Pool will use msg.sender as to\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   * @return compact representation of withdraw parameters\\n   */\\n  function encodeWithdrawParams(address asset, uint256 amount) external view returns (bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n\\n    uint16 assetId = data.id;\\n    uint128 shortenedAmount = amount == type(uint256).max ? type(uint128).max : amount.toUint128();\\n\\n    bytes32 res;\\n    assembly {\\n      res := add(assetId, shl(16, shortenedAmount))\\n    }\\n    return res;\\n  }\\n\\n  /**\\n   * @notice Encodes borrow parameters from standard input to compact representation of 1 bytes32\\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @return compact representation of withdraw parameters\\n   */\\n  function encodeBorrowParams(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode\\n  ) external view returns (bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n\\n    uint16 assetId = data.id;\\n    uint128 shortenedAmount = amount.toUint128();\\n    uint8 shortenedInterestRateMode = interestRateMode.toUint8();\\n    bytes32 res;\\n    assembly {\\n      res := add(\\n        assetId,\\n        add(\\n          shl(16, shortenedAmount),\\n          add(shl(144, shortenedInterestRateMode), shl(152, referralCode))\\n        )\\n      )\\n    }\\n    return res;\\n  }\\n\\n  /**\\n   * @notice Encodes repay parameters from standard input to compact representation of 1 bytes32\\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `interestRateMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return compact representation of repay parameters\\n   */\\n  function encodeRepayParams(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public view returns (bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n\\n    uint16 assetId = data.id;\\n    uint128 shortenedAmount = amount == type(uint256).max ? type(uint128).max : amount.toUint128();\\n    uint8 shortenedInterestRateMode = interestRateMode.toUint8();\\n\\n    bytes32 res;\\n    assembly {\\n      res := add(assetId, add(shl(16, shortenedAmount), shl(144, shortenedInterestRateMode)))\\n    }\\n    return res;\\n  }\\n\\n  /**\\n   * @notice Encodes repayWithPermit parameters from standard input to compact representation of 3 bytes32\\n   * @dev Without an onBehalfOf parameter as the compact calls to L2Pool will use msg.sender as onBehalfOf\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return compact representation of repayWithPermit parameters\\n   * @return The R parameter of ERC712 permit sig\\n   * @return The S parameter of ERC712 permit sig\\n   */\\n  function encodeRepayWithPermitParams(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external view returns (bytes32, bytes32, bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n\\n    uint16 assetId = data.id;\\n    uint128 shortenedAmount = amount == type(uint256).max ? type(uint128).max : amount.toUint128();\\n    uint8 shortenedInterestRateMode = interestRateMode.toUint8();\\n    uint32 shortenedDeadline = deadline.toUint32();\\n\\n    bytes32 res;\\n    assembly {\\n      res := add(\\n        assetId,\\n        add(\\n          shl(16, shortenedAmount),\\n          add(\\n            shl(144, shortenedInterestRateMode),\\n            add(shl(152, shortenedDeadline), shl(184, permitV))\\n          )\\n        )\\n      )\\n    }\\n    return (res, permitR, permitS);\\n  }\\n\\n  /**\\n   * @notice Encodes repay with aToken parameters from standard input to compact representation of 1 bytes32\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return compact representation of repay with aToken parameters\\n   */\\n  function encodeRepayWithATokensParams(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external view returns (bytes32) {\\n    return encodeRepayParams(asset, amount, interestRateMode);\\n  }\\n\\n  /**\\n   * @notice Encodes swap borrow rate mode parameters from standard input to compact representation of 1 bytes32\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   * @return compact representation of swap borrow rate mode parameters\\n   */\\n  function encodeSwapBorrowRateMode(\\n    address asset,\\n    uint256 interestRateMode\\n  ) external view returns (bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n    uint16 assetId = data.id;\\n    uint8 shortenedInterestRateMode = interestRateMode.toUint8();\\n    bytes32 res;\\n    assembly {\\n      res := add(assetId, shl(16, shortenedInterestRateMode))\\n    }\\n    return res;\\n  }\\n\\n  /**\\n   * @notice Encodes rebalance stable borrow rate parameters from standard input to compact representation of 1 bytes32\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   * @return compact representation of rebalance stable borrow rate parameters\\n   */\\n  function encodeRebalanceStableBorrowRate(\\n    address asset,\\n    address user\\n  ) external view returns (bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n    uint16 assetId = data.id;\\n\\n    bytes32 res;\\n    assembly {\\n      res := add(assetId, shl(16, user))\\n    }\\n    return res;\\n  }\\n\\n  /**\\n   * @notice Encodes set user use reserve as collateral parameters from standard input to compact representation of 1 bytes32\\n   * @param asset The address of the underlying asset borrowed\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   * @return compact representation of set user use reserve as collateral parameters\\n   */\\n  function encodeSetUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) external view returns (bytes32) {\\n    DataTypes.ReserveData memory data = POOL.getReserveData(asset);\\n    uint16 assetId = data.id;\\n    bytes32 res;\\n    assembly {\\n      res := add(assetId, shl(16, useAsCollateral))\\n    }\\n    return res;\\n  }\\n\\n  /**\\n   * @notice Encodes liquidation call parameters from standard input to compact representation of 2 bytes32\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   * @return First half ot compact representation of liquidation call parameters\\n   * @return Second half ot compact representation of liquidation call parameters\\n   */\\n  function encodeLiquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external view returns (bytes32, bytes32) {\\n    DataTypes.ReserveData memory collateralData = POOL.getReserveData(collateralAsset);\\n    uint16 collateralAssetId = collateralData.id;\\n\\n    DataTypes.ReserveData memory debtData = POOL.getReserveData(debtAsset);\\n    uint16 debtAssetId = debtData.id;\\n\\n    uint128 shortenedDebtToCover = debtToCover == type(uint256).max\\n      ? type(uint128).max\\n      : debtToCover.toUint128();\\n\\n    bytes32 res1;\\n    bytes32 res2;\\n\\n    assembly {\\n      res1 := add(add(collateralAssetId, shl(16, debtAssetId)), shl(32, user))\\n      res2 := add(shortenedDebtToCover, shl(128, receiveAToken))\\n    }\\n    return (res1, res2);\\n  }\\n}\\n\",\"keccak256\":\"0xd793ff7fd0fe2651e453fe83e9955918e8c416bfc459710243871c2540eecf49\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"encodeBorrowParams(address,uint256,uint256,uint16)":{"notice":"Encodes borrow parameters from standard input to compact representation of 1 bytes32"},"encodeLiquidationCall(address,address,address,uint256,bool)":{"notice":"Encodes liquidation call parameters from standard input to compact representation of 2 bytes32"},"encodeRebalanceStableBorrowRate(address,address)":{"notice":"Encodes rebalance stable borrow rate parameters from standard input to compact representation of 1 bytes32"},"encodeRepayParams(address,uint256,uint256)":{"notice":"Encodes repay parameters from standard input to compact representation of 1 bytes32"},"encodeRepayWithATokensParams(address,uint256,uint256)":{"notice":"Encodes repay with aToken parameters from standard input to compact representation of 1 bytes32"},"encodeRepayWithPermitParams(address,uint256,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Encodes repayWithPermit parameters from standard input to compact representation of 3 bytes32"},"encodeSetUserUseReserveAsCollateral(address,bool)":{"notice":"Encodes set user use reserve as collateral parameters from standard input to compact representation of 1 bytes32"},"encodeSupplyParams(address,uint256,uint16)":{"notice":"Encodes supply parameters from standard input to compact representation of 1 bytes32"},"encodeSupplyWithPermitParams(address,uint256,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Encodes supplyWithPermit parameters from standard input to compact representation of 3 bytes32"},"encodeSwapBorrowRateMode(address,uint256)":{"notice":"Encodes swap borrow rate mode parameters from standard input to compact representation of 1 bytes32"},"encodeWithdrawParams(address,uint256)":{"notice":"Encodes withdraw parameters from standard input to compact representation of 1 bytes32"}},"notice":"Helper contract to encode calldata, used to optimize calldata size in L2Pool for transaction cost reduction only indented to help generate calldata for uses/frontends.","version":1}}},"contracts/misc/ZeroReserveInterestRateStrategy.sol":{"ZeroReserveInterestRateStrategy":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getBaseStableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getBaseVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaxVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStableRateExcessOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVariableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVariableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"author":"Aave","details":"It returns zero liquidity and borrow rate.","kind":"dev","methods":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"params":{"params":"The parameters needed to calculate interest rates"},"returns":{"_0":"liquidityRate The liquidity rate expressed in rays","_1":"stableBorrowRate The stable borrow rate expressed in rays","_2":"variableBorrowRate The variable borrow rate expressed in rays"}},"constructor":{"details":"Constructor.","params":{"provider":"The address of the PoolAddressesProvider contract"}},"getBaseStableBorrowRate()":{"returns":{"_0":"The base stable borrow rate, expressed in ray"}},"getBaseVariableBorrowRate()":{"returns":{"_0":"The base variable borrow rate, expressed in ray"}},"getMaxVariableBorrowRate()":{"returns":{"_0":"The maximum variable borrow rate, expressed in ray"}},"getStableRateExcessOffset()":{"details":"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","returns":{"_0":"The stable rate excess offset, expressed in ray"}},"getStableRateSlope1()":{"details":"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getStableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getVariableRateSlope1()":{"details":"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}},"getVariableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider contract","returns":{"_0":"The address of the PoolAddressesProvider contract"}},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO":{"details":"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)","return":"The max excess stable to total debt ratio, expressed in ray.","returns":{"_0":"The max excess stable to total debt ratio, expressed in ray."}},"MAX_EXCESS_USAGE_RATIO":{"details":"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)","return":"The max excess usage ratio, expressed in ray.","returns":{"_0":"The max excess usage ratio, expressed in ray."}},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO":{"return":"The optimal stable to total debt ratio, expressed in ray.","returns":{"_0":"The optimal stable to total debt ratio, expressed in ray."}},"OPTIMAL_USAGE_RATIO":{"return":"The optimal usage ratio, expressed in ray.","returns":{"_0":"The optimal usage ratio, expressed in ray."}}},"title":"ZeroReserveInterestRateStrategy contract","version":1},"evm":{"bytecode":{"functionDebugData":{"@_8266":{"entryPoint":null,"id":8266,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:124"},"nodeType":"YulFunctionCall","src":"174:12:124"},"nodeType":"YulExpressionStatement","src":"174:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:124"},"nodeType":"YulFunctionCall","src":"143:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:124"},"nodeType":"YulFunctionCall","src":"139:32:124"},"nodeType":"YulIf","src":"136:52:124"},{"nodeType":"YulVariableDeclaration","src":"197:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:124"},"nodeType":"YulFunctionCall","src":"291:12:124"},"nodeType":"YulExpressionStatement","src":"291:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:124"},"nodeType":"YulFunctionCall","src":"270:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:124"},"nodeType":"YulFunctionCall","src":"266:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:124"},"nodeType":"YulFunctionCall","src":"255:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:124"},"nodeType":"YulFunctionCall","src":"245:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:124"},"nodeType":"YulFunctionCall","src":"238:50:124"},"nodeType":"YulIf","src":"235:70:124"},{"nodeType":"YulAssignment","src":"314:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"src":"14:321:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b506040516103c23803806103c283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161033861008a600039600060f401526103386000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a58987091161008c578063bc62690811610066578063bc62690814610140578063d5cd739114610140578063f420240914610140578063fe5fd6981461015157600080fd5b8063a589870914610161578063a9c622f814610151578063acd786861461019457600080fd5b806334762ca5116100c857806334762ca51461014057806354c365c6146101515780636fb925891461015157806380031e371461015957600080fd5b80630542975c146100ef5780630b3429a21461014057806314e32da414610140575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b60005b604051908152602001610137565b610143600081565b61014361019c565b61017961016f36600461023e565b5060009081908190565b60408051938452602084019290925290820152606001610137565b6101436101b8565b6000806101a981806102c3565b6101b391906102c3565b905090565b60006101b381806102c3565b604051610120810167ffffffffffffffff8111828210171561020f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff8116811461023957600080fd5b919050565b6000610120828403121561025157600080fd5b6102596101c4565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c08201526102a560e08401610215565b60e08201526101006102b8818501610215565b908201529392505050565b600082198211156102fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea26469706673582212200a33995c44b95df6678fe8cc060c29647cfda7b6403d3df3ccbbe0922ad8df0464736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x3C2 CODESIZE SUB DUP1 PUSH2 0x3C2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x338 PUSH2 0x8A PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH1 0xF4 ADD MSTORE PUSH2 0x338 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA5898709 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xBC626908 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBC626908 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0xD5CD7391 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0xF4202409 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0xFE5FD698 EQ PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA5898709 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xA9C622F8 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0xACD78686 EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34762CA5 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x34762CA5 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x54C365C6 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x6FB92589 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x80031E37 EQ PUSH2 0x159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xB3429A2 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x14E32DA4 EQ PUSH2 0x140 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x116 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST PUSH2 0x143 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x19C JUMP JUMPDEST PUSH2 0x179 PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0x23E JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x137 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x1B8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1A9 DUP2 DUP1 PUSH2 0x2C3 JUMP JUMPDEST PUSH2 0x1B3 SWAP2 SWAP1 PUSH2 0x2C3 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B3 DUP2 DUP1 PUSH2 0x2C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x259 PUSH2 0x1C4 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2A5 PUSH1 0xE0 DUP5 ADD PUSH2 0x215 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2B8 DUP2 DUP6 ADD PUSH2 0x215 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2FD JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP CALLER SWAP10 0x5C DIFFICULTY 0xB9 0x5D 0xF6 PUSH8 0x8FE8CC060C29647C REVERT 0xA7 0xB6 BLOCKHASH RETURNDATASIZE RETURNDATASIZE RETURN 0xCC 0xBB 0xE0 SWAP3 0x2A 0xD8 0xDF DIV PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"598:3360:57:-:0;;;2324:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2375:29:57;;;598:3360;;14:321:124;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:124;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:124:o;:::-;598:3360:57;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_8233":{"entryPoint":null,"id":8233,"parameterSlots":0,"returnSlots":0},"@MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO_8230":{"entryPoint":null,"id":8230,"parameterSlots":0,"returnSlots":0},"@MAX_EXCESS_USAGE_RATIO_8226":{"entryPoint":null,"id":8226,"parameterSlots":0,"returnSlots":0},"@OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO_8222":{"entryPoint":null,"id":8222,"parameterSlots":0,"returnSlots":0},"@OPTIMAL_USAGE_RATIO_8218":{"entryPoint":null,"id":8218,"parameterSlots":0,"returnSlots":0},"@calculateInterestRates_8366":{"entryPoint":null,"id":8366,"parameterSlots":1,"returnSlots":3},"@getBaseStableBorrowRate_8322":{"entryPoint":440,"id":8322,"parameterSlots":0,"returnSlots":1},"@getBaseVariableBorrowRate_8332":{"entryPoint":null,"id":8332,"parameterSlots":0,"returnSlots":1},"@getMaxVariableBorrowRate_8346":{"entryPoint":412,"id":8346,"parameterSlots":0,"returnSlots":1},"@getStableRateExcessOffset_8311":{"entryPoint":null,"id":8311,"parameterSlots":0,"returnSlots":1},"@getStableRateSlope1_8293":{"entryPoint":null,"id":8293,"parameterSlots":0,"returnSlots":1},"@getStableRateSlope2_8302":{"entryPoint":null,"id":8302,"parameterSlots":0,"returnSlots":1},"@getVariableRateSlope1_8275":{"entryPoint":null,"id":8275,"parameterSlots":0,"returnSlots":1},"@getVariableRateSlope2_8284":{"entryPoint":null,"id":8284,"parameterSlots":0,"returnSlots":1},"abi_decode_address":{"entryPoint":533,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr":{"entryPoint":574,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"allocate_memory":{"entryPoint":452,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":707,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2536:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"377:76:124","statements":[{"nodeType":"YulAssignment","src":"387:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"399:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"410:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"395:3:124"},"nodeType":"YulFunctionCall","src":"395:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"387:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"429:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"440:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"422:6:124"},"nodeType":"YulFunctionCall","src":"422:25:124"},"nodeType":"YulExpressionStatement","src":"422:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"346:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"357:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"368:4:124","type":""}],"src":"276:177:124"},{"body":{"nodeType":"YulBlock","src":"499:360:124","statements":[{"nodeType":"YulAssignment","src":"509:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"525:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"519:5:124"},"nodeType":"YulFunctionCall","src":"519:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"509:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"537:34:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"559:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"567:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:124"},"nodeType":"YulFunctionCall","src":"555:16:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"541:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"654:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"675:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"678:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"668:6:124"},"nodeType":"YulFunctionCall","src":"668:88:124"},"nodeType":"YulExpressionStatement","src":"668:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"776:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"779:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"769:6:124"},"nodeType":"YulFunctionCall","src":"769:15:124"},"nodeType":"YulExpressionStatement","src":"769:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"804:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"807:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"797:6:124"},"nodeType":"YulFunctionCall","src":"797:15:124"},"nodeType":"YulExpressionStatement","src":"797:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"589:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"601:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"586:2:124"},"nodeType":"YulFunctionCall","src":"586:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"625:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"637:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"622:2:124"},"nodeType":"YulFunctionCall","src":"622:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"583:2:124"},"nodeType":"YulFunctionCall","src":"583:62:124"},"nodeType":"YulIf","src":"580:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"838:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"842:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"831:6:124"},"nodeType":"YulFunctionCall","src":"831:22:124"},"nodeType":"YulExpressionStatement","src":"831:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"488:6:124","type":""}],"src":"458:401:124"},{"body":{"nodeType":"YulBlock","src":"913:147:124","statements":[{"nodeType":"YulAssignment","src":"923:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"945:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"932:12:124"},"nodeType":"YulFunctionCall","src":"932:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"923:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1038:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1047:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1050:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1040:6:124"},"nodeType":"YulFunctionCall","src":"1040:12:124"},"nodeType":"YulExpressionStatement","src":"1040:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"974:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"985:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"992:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"981:3:124"},"nodeType":"YulFunctionCall","src":"981:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"971:2:124"},"nodeType":"YulFunctionCall","src":"971:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"964:6:124"},"nodeType":"YulFunctionCall","src":"964:73:124"},"nodeType":"YulIf","src":"961:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"892:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"903:5:124","type":""}],"src":"864:196:124"},{"body":{"nodeType":"YulBlock","src":"1182:741:124","statements":[{"body":{"nodeType":"YulBlock","src":"1229:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1238:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1241:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1231:6:124"},"nodeType":"YulFunctionCall","src":"1231:12:124"},"nodeType":"YulExpressionStatement","src":"1231:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1203:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1212:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1199:3:124"},"nodeType":"YulFunctionCall","src":"1199:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1224:3:124","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1195:3:124"},"nodeType":"YulFunctionCall","src":"1195:33:124"},"nodeType":"YulIf","src":"1192:53:124"},{"nodeType":"YulVariableDeclaration","src":"1254:30:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1267:15:124"},"nodeType":"YulFunctionCall","src":"1267:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1258:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1300:5:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1320:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1307:12:124"},"nodeType":"YulFunctionCall","src":"1307:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1293:6:124"},"nodeType":"YulFunctionCall","src":"1293:38:124"},"nodeType":"YulExpressionStatement","src":"1293:38:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1351:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1358:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1347:3:124"},"nodeType":"YulFunctionCall","src":"1347:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1380:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1391:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1376:3:124"},"nodeType":"YulFunctionCall","src":"1376:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1363:12:124"},"nodeType":"YulFunctionCall","src":"1363:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1340:6:124"},"nodeType":"YulFunctionCall","src":"1340:56:124"},"nodeType":"YulExpressionStatement","src":"1340:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1416:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1423:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1412:3:124"},"nodeType":"YulFunctionCall","src":"1412:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1445:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1456:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1441:3:124"},"nodeType":"YulFunctionCall","src":"1441:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1428:12:124"},"nodeType":"YulFunctionCall","src":"1428:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1405:6:124"},"nodeType":"YulFunctionCall","src":"1405:56:124"},"nodeType":"YulExpressionStatement","src":"1405:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1481:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1488:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1477:3:124"},"nodeType":"YulFunctionCall","src":"1477:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1493:12:124"},"nodeType":"YulFunctionCall","src":"1493:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1470:6:124"},"nodeType":"YulFunctionCall","src":"1470:56:124"},"nodeType":"YulExpressionStatement","src":"1470:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1546:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1553:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1542:3:124"},"nodeType":"YulFunctionCall","src":"1542:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1576:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1587:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1572:3:124"},"nodeType":"YulFunctionCall","src":"1572:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1559:12:124"},"nodeType":"YulFunctionCall","src":"1559:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1535:6:124"},"nodeType":"YulFunctionCall","src":"1535:58:124"},"nodeType":"YulExpressionStatement","src":"1535:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1613:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1620:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1609:3:124"},"nodeType":"YulFunctionCall","src":"1609:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1654:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1639:3:124"},"nodeType":"YulFunctionCall","src":"1639:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1626:12:124"},"nodeType":"YulFunctionCall","src":"1626:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1602:6:124"},"nodeType":"YulFunctionCall","src":"1602:58:124"},"nodeType":"YulExpressionStatement","src":"1602:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1680:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1687:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1676:3:124"},"nodeType":"YulFunctionCall","src":"1676:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1710:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1721:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1706:3:124"},"nodeType":"YulFunctionCall","src":"1706:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1693:12:124"},"nodeType":"YulFunctionCall","src":"1693:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1669:6:124"},"nodeType":"YulFunctionCall","src":"1669:58:124"},"nodeType":"YulExpressionStatement","src":"1669:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1747:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1754:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1743:3:124"},"nodeType":"YulFunctionCall","src":"1743:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1783:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1794:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1779:3:124"},"nodeType":"YulFunctionCall","src":"1779:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1760:18:124"},"nodeType":"YulFunctionCall","src":"1760:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1736:6:124"},"nodeType":"YulFunctionCall","src":"1736:64:124"},"nodeType":"YulExpressionStatement","src":"1736:64:124"},{"nodeType":"YulVariableDeclaration","src":"1809:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1819:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1813:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1842:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1849:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1838:3:124"},"nodeType":"YulFunctionCall","src":"1838:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1877:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1888:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1873:3:124"},"nodeType":"YulFunctionCall","src":"1873:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1854:18:124"},"nodeType":"YulFunctionCall","src":"1854:38:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1831:6:124"},"nodeType":"YulFunctionCall","src":"1831:62:124"},"nodeType":"YulExpressionStatement","src":"1831:62:124"},{"nodeType":"YulAssignment","src":"1902:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1912:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1902:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1148:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1159:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1171:6:124","type":""}],"src":"1065:858:124"},{"body":{"nodeType":"YulBlock","src":"2085:162:124","statements":[{"nodeType":"YulAssignment","src":"2095:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2107:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2118:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2103:3:124"},"nodeType":"YulFunctionCall","src":"2103:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2095:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2137:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2148:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2130:6:124"},"nodeType":"YulFunctionCall","src":"2130:25:124"},"nodeType":"YulExpressionStatement","src":"2130:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2175:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2186:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2171:3:124"},"nodeType":"YulFunctionCall","src":"2171:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2191:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2164:6:124"},"nodeType":"YulFunctionCall","src":"2164:34:124"},"nodeType":"YulExpressionStatement","src":"2164:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2218:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2229:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2214:3:124"},"nodeType":"YulFunctionCall","src":"2214:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"2234:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2207:6:124"},"nodeType":"YulFunctionCall","src":"2207:34:124"},"nodeType":"YulExpressionStatement","src":"2207:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2038:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2049:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2057:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2065:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2076:4:124","type":""}],"src":"1928:319:124"},{"body":{"nodeType":"YulBlock","src":"2300:234:124","statements":[{"body":{"nodeType":"YulBlock","src":"2335:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2356:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2359:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2349:6:124"},"nodeType":"YulFunctionCall","src":"2349:88:124"},"nodeType":"YulExpressionStatement","src":"2349:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2457:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2460:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2450:6:124"},"nodeType":"YulFunctionCall","src":"2450:15:124"},"nodeType":"YulExpressionStatement","src":"2450:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2485:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2488:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2478:6:124"},"nodeType":"YulFunctionCall","src":"2478:15:124"},"nodeType":"YulExpressionStatement","src":"2478:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2316:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2323:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2319:3:124"},"nodeType":"YulFunctionCall","src":"2319:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2313:2:124"},"nodeType":"YulFunctionCall","src":"2313:13:124"},"nodeType":"YulIf","src":"2310:193:124"},{"nodeType":"YulAssignment","src":"2512:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2523:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"2526:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2519:3:124"},"nodeType":"YulFunctionCall","src":"2519:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2512:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2283:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"2286:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2292:3:124","type":""}],"src":"2252:282:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 288)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, calldataload(headStart))\n        mstore(add(value, 32), calldataload(add(headStart, 32)))\n        mstore(add(value, 64), calldataload(add(headStart, 64)))\n        mstore(add(value, 96), calldataload(add(headStart, 96)))\n        mstore(add(value, 128), calldataload(add(headStart, 128)))\n        mstore(add(value, 160), calldataload(add(headStart, 160)))\n        mstore(add(value, 192), calldataload(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_address(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address(add(headStart, _1)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"8233":[{"length":32,"start":244}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a58987091161008c578063bc62690811610066578063bc62690814610140578063d5cd739114610140578063f420240914610140578063fe5fd6981461015157600080fd5b8063a589870914610161578063a9c622f814610151578063acd786861461019457600080fd5b806334762ca5116100c857806334762ca51461014057806354c365c6146101515780636fb925891461015157806380031e371461015957600080fd5b80630542975c146100ef5780630b3429a21461014057806314e32da414610140575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b60005b604051908152602001610137565b610143600081565b61014361019c565b61017961016f36600461023e565b5060009081908190565b60408051938452602084019290925290820152606001610137565b6101436101b8565b6000806101a981806102c3565b6101b391906102c3565b905090565b60006101b381806102c3565b604051610120810167ffffffffffffffff8111828210171561020f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff8116811461023957600080fd5b919050565b6000610120828403121561025157600080fd5b6102596101c4565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c08201526102a560e08401610215565b60e08201526101006102b8818501610215565b908201529392505050565b600082198211156102fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea26469706673582212200a33995c44b95df6678fe8cc060c29647cfda7b6403d3df3ccbbe0922ad8df0464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA5898709 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xBC626908 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBC626908 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0xD5CD7391 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0xF4202409 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0xFE5FD698 EQ PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA5898709 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xA9C622F8 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0xACD78686 EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34762CA5 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x34762CA5 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x54C365C6 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x6FB92589 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x80031E37 EQ PUSH2 0x159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xB3429A2 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x14E32DA4 EQ PUSH2 0x140 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x116 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST PUSH2 0x143 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x19C JUMP JUMPDEST PUSH2 0x179 PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0x23E JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x137 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x1B8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1A9 DUP2 DUP1 PUSH2 0x2C3 JUMP JUMPDEST PUSH2 0x1B3 SWAP2 SWAP1 PUSH2 0x2C3 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B3 DUP2 DUP1 PUSH2 0x2C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x259 PUSH2 0x1C4 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2A5 PUSH1 0xE0 DUP5 ADD PUSH2 0x215 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2B8 DUP2 DUP6 ADD PUSH2 0x215 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2FD JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP CALLER SWAP10 0x5C DIFFICULTY 0xB9 0x5D 0xF6 PUSH8 0x8FE8CC060C29647C REVERT 0xA7 0xB6 BLOCKHASH RETURNDATASIZE RETURNDATASIZE RETURN 0xCC 0xBB 0xE0 SWAP3 0x2A 0xD8 0xDF DIV PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"598:3360:57:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1107:58;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;1107:58:57;;;;;;;;2460:102;2516:7;2460:102;;;422:25:124;;;410:2;395:18;2460:102:57;276:177:124;722:47:57;;768:1;722:47;;3572:162;;;:::i;3785:171::-;;;;;;:::i;:::-;-1:-1:-1;3902:7:57;;;;;;3785:171;;;;;2130:25:124;;;2186:2;2171:18;;2164:34;;;;2214:18;;;2207:34;2118:2;2103:18;3785:171:57;1928:319:124;3225:126:57;;;:::i;3572:162::-;3640:7;;3662:45;3640:7;;3662:45;:::i;:::-;:67;;;;:::i;:::-;3655:74;;3572:162;:::o;3225:126::-;3281:7;3303:43;3281:7;;3303:43;:::i;458:401:124:-;525:2;519:9;567:3;555:16;;601:18;586:34;;622:22;;;583:62;580:242;;;678:77;675:1;668:88;779:4;776:1;769:15;807:4;804:1;797:15;580:242;838:2;831:22;458:401;:::o;864:196::-;932:20;;992:42;981:54;;971:65;;961:93;;1050:1;1047;1040:12;961:93;864:196;;;:::o;1065:858::-;1171:6;1224:3;1212:9;1203:7;1199:23;1195:33;1192:53;;;1241:1;1238;1231:12;1192:53;1267:17;;:::i;:::-;1320:9;1307:23;1300:5;1293:38;1391:2;1380:9;1376:18;1363:32;1358:2;1351:5;1347:14;1340:56;1456:2;1445:9;1441:18;1428:32;1423:2;1416:5;1412:14;1405:56;1521:2;1510:9;1506:18;1493:32;1488:2;1481:5;1477:14;1470:56;1587:3;1576:9;1572:19;1559:33;1553:3;1546:5;1542:15;1535:58;1654:3;1643:9;1639:19;1626:33;1620:3;1613:5;1609:15;1602:58;1721:3;1710:9;1706:19;1693:33;1687:3;1680:5;1676:15;1669:58;1760:39;1794:3;1783:9;1779:19;1760:39;:::i;:::-;1754:3;1747:5;1743:15;1736:64;1819:3;1854:38;1888:2;1877:9;1873:18;1854:38;:::i;:::-;1838:14;;;1831:62;1842:5;1065:858;-1:-1:-1;;;1065:858:124:o;2252:282::-;2292:3;2323:1;2319:6;2316:1;2313:13;2310:193;;;2359:77;2356:1;2349:88;2460:4;2457:1;2450:15;2488:4;2485:1;2478:15;2310:193;-1:-1:-1;2519:9:124;;2252:282::o"},"gasEstimates":{"creation":{"codeDepositCost":"164800","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"283","MAX_EXCESS_USAGE_RATIO()":"240","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"262","OPTIMAL_USAGE_RATIO()":"240","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"infinite","getBaseStableBorrowRate()":"349","getBaseVariableBorrowRate()":"204","getMaxVariableBorrowRate()":"infinite","getStableRateExcessOffset()":"203","getStableRateSlope1()":"225","getStableRateSlope2()":"249","getVariableRateSlope1()":"227","getVariableRateSlope2()":"247"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"fe5fd698","MAX_EXCESS_USAGE_RATIO()":"a9c622f8","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"6fb92589","OPTIMAL_USAGE_RATIO()":"54c365c6","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"a5898709","getBaseStableBorrowRate()":"acd78686","getBaseVariableBorrowRate()":"34762ca5","getMaxVariableBorrowRate()":"80031e37","getStableRateExcessOffset()":"bc626908","getStableRateSlope1()":"d5cd7391","getStableRateSlope2()":"14e32da4","getVariableRateSlope1()":"0b3429a2","getVariableRateSlope2()":"f4202409"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"}],\"internalType\":\"struct DataTypes.CalculateInterestRatesParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseStableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateExcessOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"It returns zero liquidity and borrow rate.\",\"kind\":\"dev\",\"methods\":{\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"params\":{\"params\":\"The parameters needed to calculate interest rates\"},\"returns\":{\"_0\":\"liquidityRate The liquidity rate expressed in rays\",\"_1\":\"stableBorrowRate The stable borrow rate expressed in rays\",\"_2\":\"variableBorrowRate The variable borrow rate expressed in rays\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider contract\"}},\"getBaseStableBorrowRate()\":{\"returns\":{\"_0\":\"The base stable borrow rate, expressed in ray\"}},\"getBaseVariableBorrowRate()\":{\"returns\":{\"_0\":\"The base variable borrow rate, expressed in ray\"}},\"getMaxVariableBorrowRate()\":{\"returns\":{\"_0\":\"The maximum variable borrow rate, expressed in ray\"}},\"getStableRateExcessOffset()\":{\"details\":\"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"returns\":{\"_0\":\"The stable rate excess offset, expressed in ray\"}},\"getStableRateSlope1()\":{\"details\":\"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getStableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getVariableRateSlope1()\":{\"details\":\"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}},\"getVariableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\":{\"details\":\"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\",\"return\":\"The max excess stable to total debt ratio, expressed in ray.\",\"returns\":{\"_0\":\"The max excess stable to total debt ratio, expressed in ray.\"}},\"MAX_EXCESS_USAGE_RATIO\":{\"details\":\"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\",\"return\":\"The max excess usage ratio, expressed in ray.\",\"returns\":{\"_0\":\"The max excess usage ratio, expressed in ray.\"}},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\":{\"return\":\"The optimal stable to total debt ratio, expressed in ray.\",\"returns\":{\"_0\":\"The optimal stable to total debt ratio, expressed in ray.\"}},\"OPTIMAL_USAGE_RATIO\":{\"return\":\"The optimal usage ratio, expressed in ray.\",\"returns\":{\"_0\":\"The optimal usage ratio, expressed in ray.\"}}},\"title\":\"ZeroReserveInterestRateStrategy contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address of the PoolAddressesProvider\"},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the excess stable debt ratio above the optimal.\"},\"MAX_EXCESS_USAGE_RATIO()\":{\"notice\":\"Returns the excess usage ratio above the optimal.\"},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the optimal stable to total debt ratio of the reserve.\"},\"OPTIMAL_USAGE_RATIO()\":{\"notice\":\"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\"},\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"notice\":\"Calculates the interest rates depending on the reserve's state and configurations\"},\"getBaseStableBorrowRate()\":{\"notice\":\"Returns the base stable borrow rate\"},\"getBaseVariableBorrowRate()\":{\"notice\":\"Returns the base variable borrow rate\"},\"getMaxVariableBorrowRate()\":{\"notice\":\"Returns the maximum variable borrow rate\"},\"getStableRateExcessOffset()\":{\"notice\":\"Returns the stable rate excess offset\"},\"getStableRateSlope1()\":{\"notice\":\"Returns the stable rate slope below optimal usage ratio\"},\"getStableRateSlope2()\":{\"notice\":\"Returns the stable rate slope above optimal usage ratio\"},\"getVariableRateSlope1()\":{\"notice\":\"Returns the variable rate slope below optimal usage ratio\"},\"getVariableRateSlope2()\":{\"notice\":\"Returns the variable rate slope above optimal usage ratio\"}},\"notice\":\"Interest Rate Strategy contract, with all parameters zeroed.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/ZeroReserveInterestRateStrategy.sol\":\"ZeroReserveInterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IDefaultInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IDefaultInterestRateStrategy\\n * @author Aave\\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\\n */\\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\\n  /**\\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\\n   * @return The optimal usage ratio, expressed in ray.\\n   */\\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\\n   * @return The optimal stable to total debt ratio, expressed in ray.\\n   */\\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess usage ratio above the optimal.\\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\\n   * @return The max excess usage ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess stable debt ratio above the optimal.\\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\\n   * @return The max excess stable to total debt ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the variable rate slope below optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the variable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope below optimal usage ratio\\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate excess offset\\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n   * @return The stable rate excess offset, expressed in ray\\n   */\\n  function getStableRateExcessOffset() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base stable borrow rate\\n   * @return The base stable borrow rate, expressed in ray\\n   */\\n  function getBaseStableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base variable borrow rate\\n   * @return The base variable borrow rate, expressed in ray\\n   */\\n  function getBaseVariableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the maximum variable borrow rate\\n   * @return The maximum variable borrow rate, expressed in ray\\n   */\\n  function getMaxVariableBorrowRate() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/misc/ZeroReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\nimport {IDefaultInterestRateStrategy} from '../interfaces/IDefaultInterestRateStrategy.sol';\\nimport {IReserveInterestRateStrategy} from '../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\\n\\n/**\\n * @title ZeroReserveInterestRateStrategy contract\\n * @author Aave\\n * @notice Interest Rate Strategy contract, with all parameters zeroed.\\n * @dev It returns zero liquidity and borrow rate.\\n */\\ncontract ZeroReserveInterestRateStrategy is IDefaultInterestRateStrategy {\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public constant OPTIMAL_USAGE_RATIO = 0;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public constant OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = 0;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public constant MAX_EXCESS_USAGE_RATIO = 0;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public constant MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = 0;\\n\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  // Base variable borrow rate when usage rate = 0. Expressed in ray\\n  uint256 internal constant _baseVariableBorrowRate = 0;\\n\\n  // Slope of the variable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal constant _variableRateSlope1 = 0;\\n\\n  // Slope of the variable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal constant _variableRateSlope2 = 0;\\n\\n  // Slope of the stable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal constant _stableRateSlope1 = 0;\\n\\n  // Slope of the stable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal constant _stableRateSlope2 = 0;\\n\\n  // Premium on top of `_variableRateSlope1` for base stable borrowing rate\\n  uint256 internal constant _baseStableRateOffset = 0;\\n\\n  // Additional premium applied to stable rate when stable debt surpass `OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO`\\n  uint256 internal constant _stableRateExcessOffset = 0;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getVariableRateSlope1() external pure returns (uint256) {\\n    return _variableRateSlope1;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getVariableRateSlope2() external pure returns (uint256) {\\n    return _variableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateSlope1() external pure returns (uint256) {\\n    return _stableRateSlope1;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateSlope2() external pure returns (uint256) {\\n    return _stableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateExcessOffset() external pure returns (uint256) {\\n    return _stableRateExcessOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getBaseStableBorrowRate() public pure returns (uint256) {\\n    return _variableRateSlope1 + _baseStableRateOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getBaseVariableBorrowRate() external pure override returns (uint256) {\\n    return _baseVariableBorrowRate;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getMaxVariableBorrowRate() external pure override returns (uint256) {\\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IReserveInterestRateStrategy\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory\\n  ) public pure override returns (uint256, uint256, uint256) {\\n    return (0, 0, 0);\\n  }\\n}\\n\",\"keccak256\":\"0x56b225fbed50049f10b579ff99c485ebf957f9922b4ca02df5081cb0d1d4ce3c\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address of the PoolAddressesProvider"},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the excess stable debt ratio above the optimal."},"MAX_EXCESS_USAGE_RATIO()":{"notice":"Returns the excess usage ratio above the optimal."},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the optimal stable to total debt ratio of the reserve."},"OPTIMAL_USAGE_RATIO()":{"notice":"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates."},"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"notice":"Calculates the interest rates depending on the reserve's state and configurations"},"getBaseStableBorrowRate()":{"notice":"Returns the base stable borrow rate"},"getBaseVariableBorrowRate()":{"notice":"Returns the base variable borrow rate"},"getMaxVariableBorrowRate()":{"notice":"Returns the maximum variable borrow rate"},"getStableRateExcessOffset()":{"notice":"Returns the stable rate excess offset"},"getStableRateSlope1()":{"notice":"Returns the stable rate slope below optimal usage ratio"},"getStableRateSlope2()":{"notice":"Returns the stable rate slope above optimal usage ratio"},"getVariableRateSlope1()":{"notice":"Returns the variable rate slope below optimal usage ratio"},"getVariableRateSlope2()":{"notice":"Returns the variable rate slope above optimal usage ratio"}},"notice":"Interest Rate Strategy contract, with all parameters zeroed.","version":1}}},"contracts/misc/interfaces/IWETH.sol":{"IWETH":{"abi":[{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","deposit()":"d0e30db0","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/interfaces/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/misc/interfaces/IWETH.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\ninterface IWETH {\\n  function deposit() external payable;\\n\\n  function withdraw(uint256) external;\\n\\n  function approve(address guy, uint256 wad) external returns (bool);\\n\\n  function transferFrom(address src, address dst, uint256 wad) external returns (bool);\\n}\\n\",\"keccak256\":\"0x77edc81addcbe1acef487437e6a4d83369d6f09fd40e6fdbdd967cc16a9fb94c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/flashloan/MockFlashLoanReceiver.sol":{"MockFlashLoanReceiver":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"_assets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_premiums","type":"uint256[]"}],"name":"ExecutedWithFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"_assets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_premiums","type":"uint256[]"}],"name":"ExecutedWithSuccess","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"premiums","type":"uint256[]"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAmountToApprove","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToApprove","type":"uint256"}],"name":"setAmountToApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailExecutionTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setSimulateEOA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"simulateEOA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_3551":{"entryPoint":null,"id":3551,"parameterSlots":1,"returnSlots":0},"@_8454":{"entryPoint":null,"id":8454,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":216,"id":null,"parameterSlots":2,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":192,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:762:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:124"},"nodeType":"YulFunctionCall","src":"149:12:124"},"nodeType":"YulExpressionStatement","src":"149:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:124"},"nodeType":"YulFunctionCall","src":"128:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:124"},"nodeType":"YulFunctionCall","src":"124:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:124"},"nodeType":"YulFunctionCall","src":"113:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:124"},"nodeType":"YulFunctionCall","src":"103:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:50:124"},"nodeType":"YulIf","src":"93:70:124"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:124","type":""}],"src":"14:155:124"},{"body":{"nodeType":"YulBlock","src":"286:194:124","statements":[{"body":{"nodeType":"YulBlock","src":"332:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"341:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"344:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"334:6:124"},"nodeType":"YulFunctionCall","src":"334:12:124"},"nodeType":"YulExpressionStatement","src":"334:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"307:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"303:3:124"},"nodeType":"YulFunctionCall","src":"303:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"299:3:124"},"nodeType":"YulFunctionCall","src":"299:32:124"},"nodeType":"YulIf","src":"296:52:124"},{"nodeType":"YulVariableDeclaration","src":"357:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"376:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"370:5:124"},"nodeType":"YulFunctionCall","src":"370:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"361:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"444:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"395:48:124"},"nodeType":"YulFunctionCall","src":"395:55:124"},"nodeType":"YulExpressionStatement","src":"395:55:124"},{"nodeType":"YulAssignment","src":"459:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"469:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"459:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:124","type":""}],"src":"174:306:124"},{"body":{"nodeType":"YulBlock","src":"566:194:124","statements":[{"body":{"nodeType":"YulBlock","src":"612:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"621:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"624:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"614:6:124"},"nodeType":"YulFunctionCall","src":"614:12:124"},"nodeType":"YulExpressionStatement","src":"614:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"587:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"596:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"583:3:124"},"nodeType":"YulFunctionCall","src":"583:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"579:3:124"},"nodeType":"YulFunctionCall","src":"579:32:124"},"nodeType":"YulIf","src":"576:52:124"},{"nodeType":"YulVariableDeclaration","src":"637:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"656:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"650:5:124"},"nodeType":"YulFunctionCall","src":"650:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"641:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"724:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"675:48:124"},"nodeType":"YulFunctionCall","src":"675:55:124"},"nodeType":"YulExpressionStatement","src":"675:55:124"},{"nodeType":"YulAssignment","src":"739:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"749:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"739:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"543:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"555:6:124","type":""}],"src":"485:275:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c060405234801561001057600080fd5b50604051610bf3380380610bf383398101604081905261002f916100d8565b80806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ac91906100d8565b6001600160a01b031660a052506100fc9050565b6001600160a01b03811681146100d557600080fd5b50565b6000602082840312156100ea57600080fd5b81516100f5816100c0565b9392505050565b60805160a051610acc6101276000396000818161014c01526104ec0152600060920152610acc6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637535d2461161005b5780637535d24614610147578063920f5c841461016e578063bf443f8514610181578063e9a6a25b1461019457600080fd5b80630542975c1461008d578063388f70f1146100de5780634444f3311461011f5780635e76bba314610136575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011d6100ec3660046105d9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b005b60025460ff165b60405190151581526020016100d5565b6001546040519081526020016100d5565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b61012661017c3660046107c1565b6101d3565b61011d61018f3660046108db565b600155565b61011d6101a23660046105d9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000805460ff1615610227577f9972b212e52913783072b960dd41527ae8b6e609d017b64039758dda0ce412788686866040516102129392919061092f565b60405180910390a15060025460ff16156105bf565b60005b865181101561057f576000878281518110610247576102476109b1565b60200260200101519050878281518110610263576102636109b1565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156102d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fd91906109e0565b87838151811061030f5761030f6109b1565b60200260200101511115610383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c69642062616c616e636520666f722074686520636f6e7472616374604482015260640160405180910390fd5b6000600154600014156103d3578683815181106103a2576103a26109b1565b60200260200101518884815181106103bc576103bc6109b1565b60200260200101516103ce9190610a28565b6103d7565b6001545b90508173ffffffffffffffffffffffffffffffffffffffff166340c10f1930898681518110610408576104086109b1565b60200260200101516040518363ffffffff1660e01b815260040161044e92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190610a40565b508883815181106104a4576104a46109b1565b60209081029190910101516040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105699190610a40565b505050808061057790610a5d565b91505061022a565b507fbd6b6bfac59612765a81cc4fdee74ab4859671fa14a562056f9eea438735a78a8686866040516105b39392919061092f565b60405180910390a15060015b95945050505050565b80151581146105d657600080fd5b50565b6000602082840312156105eb57600080fd5b81356105f6816105c8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610673576106736105fd565b604052919050565b600067ffffffffffffffff821115610695576106956105fd565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c357600080fd5b919050565b600082601f8301126106d957600080fd5b813560206106ee6106e98361067b565b61062c565b82815260059290921b8401810191818101908684111561070d57600080fd5b8286015b848110156107285780358352918301918301610711565b509695505050505050565b600082601f83011261074457600080fd5b813567ffffffffffffffff81111561075e5761075e6105fd565b61078f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161062c565b8181528460208386010111156107a457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156107d957600080fd5b853567ffffffffffffffff808211156107f157600080fd5b818801915088601f83011261080557600080fd5b813560206108156106e98361067b565b82815260059290921b8401810191818101908c84111561083457600080fd5b948201945b838610156108595761084a8661069f565b82529482019490820190610839565b9950508901359250508082111561086f57600080fd5b61087b89838a016106c8565b9550604088013591508082111561089157600080fd5b61089d89838a016106c8565b94506108ab6060890161069f565b935060808801359150808211156108c157600080fd5b506108ce88828901610733565b9150509295509295909350565b6000602082840312156108ed57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561092457815187529582019590820190600101610908565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561097e57815173ffffffffffffffffffffffffffffffffffffffff168452928401929084019060010161094c565b5050508381038285015261099281876108f4565b91505082810360408401526109a781856108f4565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156109f257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610a3b57610a3b6109f9565b500190565b600060208284031215610a5257600080fd5b81516105f6816105c8565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610a8f57610a8f6109f9565b506001019056fea26469706673582212209116bfc944f2af2669ad6b5ae1e9a4eb56fb6efcead6ee567057ccfdf5c2c9fb64736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xBF3 CODESIZE SUB DUP1 PUSH2 0xBF3 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xD8 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAC SWAP2 SWAP1 PUSH2 0xD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH2 0xFC SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xF5 DUP2 PUSH2 0xC0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0xACC PUSH2 0x127 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14C ADD MSTORE PUSH2 0x4EC ADD MSTORE PUSH1 0x0 PUSH1 0x92 ADD MSTORE PUSH2 0xACC PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7535D246 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x920F5C84 EQ PUSH2 0x16E JUMPI DUP1 PUSH4 0xBF443F85 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xE9A6A25B EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x388F70F1 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x4444F331 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x5E76BBA3 EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x126 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x7C1 JUMP JUMPDEST PUSH2 0x1D3 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x18F CALLDATASIZE PUSH1 0x4 PUSH2 0x8DB JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH2 0x11D PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x227 JUMPI PUSH32 0x9972B212E52913783072B960DD41527AE8B6E609D017B64039758DDA0CE41278 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x212 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x92F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x2 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5BF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x247 JUMPI PUSH2 0x247 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x263 JUMPI PUSH2 0x263 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FD SWAP2 SWAP1 PUSH2 0x9E0 JUMP JUMPDEST DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x30F JUMPI PUSH2 0x30F PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x383 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642062616C616E636520666F722074686520636F6E7472616374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x3D3 JUMPI DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3A2 JUMPI PUSH2 0x3A2 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3BC JUMPI PUSH2 0x3BC PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3CE SWAP2 SWAP1 PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 ADDRESS DUP10 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x408 JUMPI PUSH2 0x408 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x44E SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x46D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x491 SWAP2 SWAP1 PUSH2 0xA40 JUMP JUMPDEST POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A4 JUMPI PUSH2 0x4A4 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x545 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x569 SWAP2 SWAP1 PUSH2 0xA40 JUMP JUMPDEST POP POP POP DUP1 DUP1 PUSH2 0x577 SWAP1 PUSH2 0xA5D JUMP JUMPDEST SWAP2 POP POP PUSH2 0x22A JUMP JUMPDEST POP PUSH32 0xBD6B6BFAC59612765A81CC4FDEE74AB4859671FA14A562056F9EEA438735A78A DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x5B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x92F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5F6 DUP2 PUSH2 0x5C8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x673 JUMPI PUSH2 0x673 PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x695 JUMPI PUSH2 0x695 PUSH2 0x5FD JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x6EE PUSH2 0x6E9 DUP4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x62C JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x728 JUMPI DUP1 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x711 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x744 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x75E JUMPI PUSH2 0x75E PUSH2 0x5FD JUMP JUMPDEST PUSH2 0x78F PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x62C JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x7A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x815 PUSH2 0x6E9 DUP4 PUSH2 0x67B JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP13 DUP5 GT ISZERO PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 DUP3 ADD SWAP5 JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0x859 JUMPI PUSH2 0x84A DUP7 PUSH2 0x69F JUMP JUMPDEST DUP3 MSTORE SWAP5 DUP3 ADD SWAP5 SWAP1 DUP3 ADD SWAP1 PUSH2 0x839 JUMP JUMPDEST SWAP10 POP POP DUP10 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0x86F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x87B DUP10 DUP4 DUP11 ADD PUSH2 0x6C8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x89D DUP10 DUP4 DUP11 ADD PUSH2 0x6C8 JUMP JUMPDEST SWAP5 POP PUSH2 0x8AB PUSH1 0x60 DUP10 ADD PUSH2 0x69F JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8CE DUP9 DUP3 DUP10 ADD PUSH2 0x733 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x924 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x908 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP5 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 DUP3 DUP9 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x97E JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x94C JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x992 DUP2 DUP8 PUSH2 0x8F4 JUMP JUMPDEST SWAP2 POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x9A7 DUP2 DUP6 PUSH2 0x8F4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xA3B JUMPI PUSH2 0xA3B PUSH2 0x9F9 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x5F6 DUP2 PUSH2 0x5C8 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xA8F JUMPI PUSH2 0xA8F PUSH2 0x9F9 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 AND 0xBF 0xC9 DIFFICULTY CALLCODE 0xAF 0x26 PUSH10 0xAD6B5AE1E9A4EB56FB6E 0xFC 0xEA 0xD6 0xEE JUMP PUSH17 0x57CCFDF5C2C9FB64736F6C634300080A00 CALLER ","sourceMap":"454:1974:59:-:0;;;825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;892:8;643::26;-1:-1:-1;;;;;622:29:26;;;-1:-1:-1;;;;;622:29:26;;;;;670:8;-1:-1:-1;;;;;670:16:26;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;657:32:26;;;-1:-1:-1;454:1974:59;;-1:-1:-1;454:1974:59;14:155:124;-1:-1:-1;;;;;113:31:124;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:306::-;275:6;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;376:9;370:16;395:55;444:5;395:55;:::i;:::-;469:5;174:306;-1:-1:-1;;;174:306:124:o;485:275::-;454:1974:59;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_3528":{"entryPoint":null,"id":3528,"parameterSlots":0,"returnSlots":0},"@POOL_3532":{"entryPoint":null,"id":3532,"parameterSlots":0,"returnSlots":0},"@executeOperation_8622":{"entryPoint":467,"id":8622,"parameterSlots":5,"returnSlots":1},"@getAmountToApprove_8492":{"entryPoint":null,"id":8492,"parameterSlots":0,"returnSlots":1},"@setAmountToApprove_8474":{"entryPoint":null,"id":8474,"parameterSlots":1,"returnSlots":0},"@setFailExecutionTransfer_8464":{"entryPoint":null,"id":8464,"parameterSlots":1,"returnSlots":0},"@setSimulateEOA_8484":{"entryPoint":null,"id":8484,"parameterSlots":1,"returnSlots":0},"@simulateEOA_8500":{"entryPoint":null,"id":8500,"parameterSlots":0,"returnSlots":1},"abi_decode_address":{"entryPoint":1695,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":1736,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes":{"entryPoint":1843,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_addresst_bytes_memory_ptr":{"entryPoint":1985,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool":{"entryPoint":1497,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":2624,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":2267,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":2528,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":2292,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":2351,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1580,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":1659,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2600,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":2653,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":2553,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":2481,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":1533,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":1480,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:8824:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"318:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"372:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"381:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"384:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"374:6:124"},"nodeType":"YulFunctionCall","src":"374:12:124"},"nodeType":"YulExpressionStatement","src":"374:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"341:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"362:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"355:6:124"},"nodeType":"YulFunctionCall","src":"355:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"348:6:124"},"nodeType":"YulFunctionCall","src":"348:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"338:2:124"},"nodeType":"YulFunctionCall","src":"338:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"331:6:124"},"nodeType":"YulFunctionCall","src":"331:40:124"},"nodeType":"YulIf","src":"328:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"307:5:124","type":""}],"src":"276:118:124"},{"body":{"nodeType":"YulBlock","src":"466:174:124","statements":[{"body":{"nodeType":"YulBlock","src":"512:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"521:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"524:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"514:6:124"},"nodeType":"YulFunctionCall","src":"514:12:124"},"nodeType":"YulExpressionStatement","src":"514:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"487:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"496:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"483:3:124"},"nodeType":"YulFunctionCall","src":"483:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"508:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"479:3:124"},"nodeType":"YulFunctionCall","src":"479:32:124"},"nodeType":"YulIf","src":"476:52:124"},{"nodeType":"YulVariableDeclaration","src":"537:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"563:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"550:12:124"},"nodeType":"YulFunctionCall","src":"550:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"541:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"604:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"582:21:124"},"nodeType":"YulFunctionCall","src":"582:28:124"},"nodeType":"YulExpressionStatement","src":"582:28:124"},{"nodeType":"YulAssignment","src":"619:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"629:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"619:6:124"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"432:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"443:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"455:6:124","type":""}],"src":"399:241:124"},{"body":{"nodeType":"YulBlock","src":"740:92:124","statements":[{"nodeType":"YulAssignment","src":"750:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"762:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"773:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"758:3:124"},"nodeType":"YulFunctionCall","src":"758:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"750:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"792:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"817:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:124"},"nodeType":"YulFunctionCall","src":"810:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"803:6:124"},"nodeType":"YulFunctionCall","src":"803:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"785:6:124"},"nodeType":"YulFunctionCall","src":"785:41:124"},"nodeType":"YulExpressionStatement","src":"785:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"709:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"720:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"731:4:124","type":""}],"src":"645:187:124"},{"body":{"nodeType":"YulBlock","src":"938:76:124","statements":[{"nodeType":"YulAssignment","src":"948:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"960:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"971:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"956:3:124"},"nodeType":"YulFunctionCall","src":"956:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"948:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"990:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1001:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"983:6:124"},"nodeType":"YulFunctionCall","src":"983:25:124"},"nodeType":"YulExpressionStatement","src":"983:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"907:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"918:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"929:4:124","type":""}],"src":"837:177:124"},{"body":{"nodeType":"YulBlock","src":"1134:125:124","statements":[{"nodeType":"YulAssignment","src":"1144:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1156:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1167:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1152:3:124"},"nodeType":"YulFunctionCall","src":"1152:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1144:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1186:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1201:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1209:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1197:3:124"},"nodeType":"YulFunctionCall","src":"1197:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1179:6:124"},"nodeType":"YulFunctionCall","src":"1179:74:124"},"nodeType":"YulExpressionStatement","src":"1179:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1103:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1114:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1125:4:124","type":""}],"src":"1019:240:124"},{"body":{"nodeType":"YulBlock","src":"1296:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1313:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1316:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1306:6:124"},"nodeType":"YulFunctionCall","src":"1306:88:124"},"nodeType":"YulExpressionStatement","src":"1306:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1410:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1413:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1403:6:124"},"nodeType":"YulFunctionCall","src":"1403:15:124"},"nodeType":"YulExpressionStatement","src":"1403:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1434:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1437:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1427:6:124"},"nodeType":"YulFunctionCall","src":"1427:15:124"},"nodeType":"YulExpressionStatement","src":"1427:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1264:184:124"},{"body":{"nodeType":"YulBlock","src":"1498:289:124","statements":[{"nodeType":"YulAssignment","src":"1508:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1524:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1518:5:124"},"nodeType":"YulFunctionCall","src":"1518:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1508:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1536:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1558:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1574:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"1580:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1570:3:124"},"nodeType":"YulFunctionCall","src":"1570:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"1585:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1566:3:124"},"nodeType":"YulFunctionCall","src":"1566:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1554:3:124"},"nodeType":"YulFunctionCall","src":"1554:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1540:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1728:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1730:16:124"},"nodeType":"YulFunctionCall","src":"1730:18:124"},"nodeType":"YulExpressionStatement","src":"1730:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1671:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1683:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1668:2:124"},"nodeType":"YulFunctionCall","src":"1668:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1707:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1719:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1704:2:124"},"nodeType":"YulFunctionCall","src":"1704:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1665:2:124"},"nodeType":"YulFunctionCall","src":"1665:62:124"},"nodeType":"YulIf","src":"1662:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1766:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1770:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1759:6:124"},"nodeType":"YulFunctionCall","src":"1759:22:124"},"nodeType":"YulExpressionStatement","src":"1759:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1478:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1487:6:124","type":""}],"src":"1453:334:124"},{"body":{"nodeType":"YulBlock","src":"1861:114:124","statements":[{"body":{"nodeType":"YulBlock","src":"1905:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1907:16:124"},"nodeType":"YulFunctionCall","src":"1907:18:124"},"nodeType":"YulExpressionStatement","src":"1907:18:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1877:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1885:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1874:2:124"},"nodeType":"YulFunctionCall","src":"1874:30:124"},"nodeType":"YulIf","src":"1871:56:124"},{"nodeType":"YulAssignment","src":"1936:33:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1952:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1955:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1948:3:124"},"nodeType":"YulFunctionCall","src":"1948:14:124"},{"kind":"number","nodeType":"YulLiteral","src":"1964:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1944:3:124"},"nodeType":"YulFunctionCall","src":"1944:25:124"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1936:4:124"}]}]},"name":"array_allocation_size_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"1841:6:124","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"1852:4:124","type":""}],"src":"1792:183:124"},{"body":{"nodeType":"YulBlock","src":"2029:147:124","statements":[{"nodeType":"YulAssignment","src":"2039:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2061:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2048:12:124"},"nodeType":"YulFunctionCall","src":"2048:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2039:5:124"}]},{"body":{"nodeType":"YulBlock","src":"2154:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2163:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2166:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2156:6:124"},"nodeType":"YulFunctionCall","src":"2156:12:124"},"nodeType":"YulExpressionStatement","src":"2156:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2090:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2101:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2108:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2097:3:124"},"nodeType":"YulFunctionCall","src":"2097:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2087:2:124"},"nodeType":"YulFunctionCall","src":"2087:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2080:6:124"},"nodeType":"YulFunctionCall","src":"2080:73:124"},"nodeType":"YulIf","src":"2077:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2008:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2019:5:124","type":""}],"src":"1980:196:124"},{"body":{"nodeType":"YulBlock","src":"2245:598:124","statements":[{"body":{"nodeType":"YulBlock","src":"2294:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2303:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2306:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2296:6:124"},"nodeType":"YulFunctionCall","src":"2296:12:124"},"nodeType":"YulExpressionStatement","src":"2296:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2273:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2281:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2269:3:124"},"nodeType":"YulFunctionCall","src":"2269:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"2288:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2265:3:124"},"nodeType":"YulFunctionCall","src":"2265:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2258:6:124"},"nodeType":"YulFunctionCall","src":"2258:35:124"},"nodeType":"YulIf","src":"2255:55:124"},{"nodeType":"YulVariableDeclaration","src":"2319:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2342:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2329:12:124"},"nodeType":"YulFunctionCall","src":"2329:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2323:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2358:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2368:4:124","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2362:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2381:71:124","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2448:2:124"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nodeType":"YulIdentifier","src":"2408:39:124"},"nodeType":"YulFunctionCall","src":"2408:43:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2392:15:124"},"nodeType":"YulFunctionCall","src":"2392:60:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"2385:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2461:16:124","value":{"name":"dst","nodeType":"YulIdentifier","src":"2474:3:124"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"2465:5:124","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2493:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2498:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2486:6:124"},"nodeType":"YulFunctionCall","src":"2486:15:124"},"nodeType":"YulExpressionStatement","src":"2486:15:124"},{"nodeType":"YulAssignment","src":"2510:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2521:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2526:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2517:3:124"},"nodeType":"YulFunctionCall","src":"2517:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2510:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"2538:46:124","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2560:6:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2572:1:124","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"2575:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2568:3:124"},"nodeType":"YulFunctionCall","src":"2568:10:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2556:3:124"},"nodeType":"YulFunctionCall","src":"2556:23:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2581:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2552:3:124"},"nodeType":"YulFunctionCall","src":"2552:32:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"2542:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2612:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2621:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2624:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2614:6:124"},"nodeType":"YulFunctionCall","src":"2614:12:124"},"nodeType":"YulExpressionStatement","src":"2614:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2599:6:124"},{"name":"end","nodeType":"YulIdentifier","src":"2607:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2596:2:124"},"nodeType":"YulFunctionCall","src":"2596:15:124"},"nodeType":"YulIf","src":"2593:35:124"},{"nodeType":"YulVariableDeclaration","src":"2637:26:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2652:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2660:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2648:3:124"},"nodeType":"YulFunctionCall","src":"2648:15:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2641:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2728:86:124","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2749:3:124"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2767:3:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2754:12:124"},"nodeType":"YulFunctionCall","src":"2754:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2742:6:124"},"nodeType":"YulFunctionCall","src":"2742:30:124"},"nodeType":"YulExpressionStatement","src":"2742:30:124"},{"nodeType":"YulAssignment","src":"2785:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2796:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2801:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2792:3:124"},"nodeType":"YulFunctionCall","src":"2792:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2785:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2683:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2688:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2680:2:124"},"nodeType":"YulFunctionCall","src":"2680:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2696:23:124","statements":[{"nodeType":"YulAssignment","src":"2698:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2709:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2714:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2705:3:124"},"nodeType":"YulFunctionCall","src":"2705:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2698:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2676:3:124","statements":[]},"src":"2672:142:124"},{"nodeType":"YulAssignment","src":"2823:14:124","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2832:5:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2823:5:124"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2219:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2227:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2235:5:124","type":""}],"src":"2181:662:124"},{"body":{"nodeType":"YulBlock","src":"2900:537:124","statements":[{"body":{"nodeType":"YulBlock","src":"2949:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2958:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2961:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2951:6:124"},"nodeType":"YulFunctionCall","src":"2951:12:124"},"nodeType":"YulExpressionStatement","src":"2951:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2928:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2936:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2924:3:124"},"nodeType":"YulFunctionCall","src":"2924:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"2943:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2920:3:124"},"nodeType":"YulFunctionCall","src":"2920:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2913:6:124"},"nodeType":"YulFunctionCall","src":"2913:35:124"},"nodeType":"YulIf","src":"2910:55:124"},{"nodeType":"YulVariableDeclaration","src":"2974:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2997:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2984:12:124"},"nodeType":"YulFunctionCall","src":"2984:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2978:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3043:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3045:16:124"},"nodeType":"YulFunctionCall","src":"3045:18:124"},"nodeType":"YulExpressionStatement","src":"3045:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3019:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3023:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3016:2:124"},"nodeType":"YulFunctionCall","src":"3016:26:124"},"nodeType":"YulIf","src":"3013:52:124"},{"nodeType":"YulVariableDeclaration","src":"3074:129:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3117:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3121:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3113:3:124"},"nodeType":"YulFunctionCall","src":"3113:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"3128:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3109:3:124"},"nodeType":"YulFunctionCall","src":"3109:86:124"},{"kind":"number","nodeType":"YulLiteral","src":"3197:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3105:3:124"},"nodeType":"YulFunctionCall","src":"3105:97:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3089:15:124"},"nodeType":"YulFunctionCall","src":"3089:114:124"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"3078:7:124","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3219:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3228:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3212:6:124"},"nodeType":"YulFunctionCall","src":"3212:19:124"},"nodeType":"YulExpressionStatement","src":"3212:19:124"},{"body":{"nodeType":"YulBlock","src":"3279:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3288:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3291:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3281:6:124"},"nodeType":"YulFunctionCall","src":"3281:12:124"},"nodeType":"YulExpressionStatement","src":"3281:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3254:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3262:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3250:3:124"},"nodeType":"YulFunctionCall","src":"3250:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"3267:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3246:3:124"},"nodeType":"YulFunctionCall","src":"3246:26:124"},{"name":"end","nodeType":"YulIdentifier","src":"3274:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3243:2:124"},"nodeType":"YulFunctionCall","src":"3243:35:124"},"nodeType":"YulIf","src":"3240:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3321:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"3330:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3317:3:124"},"nodeType":"YulFunctionCall","src":"3317:18:124"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3341:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3349:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3337:3:124"},"nodeType":"YulFunctionCall","src":"3337:17:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3356:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3304:12:124"},"nodeType":"YulFunctionCall","src":"3304:55:124"},"nodeType":"YulExpressionStatement","src":"3304:55:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3383:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3392:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3379:3:124"},"nodeType":"YulFunctionCall","src":"3379:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"3397:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3375:3:124"},"nodeType":"YulFunctionCall","src":"3375:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"3404:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3368:6:124"},"nodeType":"YulFunctionCall","src":"3368:38:124"},"nodeType":"YulExpressionStatement","src":"3368:38:124"},{"nodeType":"YulAssignment","src":"3415:16:124","value":{"name":"array_1","nodeType":"YulIdentifier","src":"3424:7:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3415:5:124"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2874:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2882:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2890:5:124","type":""}],"src":"2848:589:124"},{"body":{"nodeType":"YulBlock","src":"3664:1424:124","statements":[{"body":{"nodeType":"YulBlock","src":"3711:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3720:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3723:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3713:6:124"},"nodeType":"YulFunctionCall","src":"3713:12:124"},"nodeType":"YulExpressionStatement","src":"3713:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3685:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3694:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3681:3:124"},"nodeType":"YulFunctionCall","src":"3681:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3706:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3677:3:124"},"nodeType":"YulFunctionCall","src":"3677:33:124"},"nodeType":"YulIf","src":"3674:53:124"},{"nodeType":"YulVariableDeclaration","src":"3736:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3763:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3750:12:124"},"nodeType":"YulFunctionCall","src":"3750:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3740:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3782:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3792:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3786:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3837:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3846:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3849:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3839:6:124"},"nodeType":"YulFunctionCall","src":"3839:12:124"},"nodeType":"YulExpressionStatement","src":"3839:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3825:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3833:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3822:2:124"},"nodeType":"YulFunctionCall","src":"3822:14:124"},"nodeType":"YulIf","src":"3819:34:124"},{"nodeType":"YulVariableDeclaration","src":"3862:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3876:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"3887:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3872:3:124"},"nodeType":"YulFunctionCall","src":"3872:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3866:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3942:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3951:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3954:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3944:6:124"},"nodeType":"YulFunctionCall","src":"3944:12:124"},"nodeType":"YulExpressionStatement","src":"3944:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3921:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3925:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3917:3:124"},"nodeType":"YulFunctionCall","src":"3917:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3932:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3913:3:124"},"nodeType":"YulFunctionCall","src":"3913:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3906:6:124"},"nodeType":"YulFunctionCall","src":"3906:35:124"},"nodeType":"YulIf","src":"3903:55:124"},{"nodeType":"YulVariableDeclaration","src":"3967:26:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3990:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3977:12:124"},"nodeType":"YulFunctionCall","src":"3977:16:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3971:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4002:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4012:4:124","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"4006:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4025:71:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4092:2:124"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nodeType":"YulIdentifier","src":"4052:39:124"},"nodeType":"YulFunctionCall","src":"4052:43:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4036:15:124"},"nodeType":"YulFunctionCall","src":"4036:60:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4029:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4105:16:124","value":{"name":"dst","nodeType":"YulIdentifier","src":"4118:3:124"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"4109:5:124","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4137:3:124"},{"name":"_3","nodeType":"YulIdentifier","src":"4142:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4130:6:124"},"nodeType":"YulFunctionCall","src":"4130:15:124"},"nodeType":"YulExpressionStatement","src":"4130:15:124"},{"nodeType":"YulAssignment","src":"4154:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4165:3:124"},{"name":"_4","nodeType":"YulIdentifier","src":"4170:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4161:3:124"},"nodeType":"YulFunctionCall","src":"4161:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4154:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"4182:42:124","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4204:2:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4212:1:124","type":"","value":"5"},{"name":"_3","nodeType":"YulIdentifier","src":"4215:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4208:3:124"},"nodeType":"YulFunctionCall","src":"4208:10:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4200:3:124"},"nodeType":"YulFunctionCall","src":"4200:19:124"},{"name":"_4","nodeType":"YulIdentifier","src":"4221:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4196:3:124"},"nodeType":"YulFunctionCall","src":"4196:28:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"4186:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4256:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4265:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4268:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4258:6:124"},"nodeType":"YulFunctionCall","src":"4258:12:124"},"nodeType":"YulExpressionStatement","src":"4258:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"4239:6:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4247:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4236:2:124"},"nodeType":"YulFunctionCall","src":"4236:19:124"},"nodeType":"YulIf","src":"4233:39:124"},{"nodeType":"YulVariableDeclaration","src":"4281:22:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4296:2:124"},{"name":"_4","nodeType":"YulIdentifier","src":"4300:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4292:3:124"},"nodeType":"YulFunctionCall","src":"4292:11:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4285:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4368:92:124","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4389:3:124"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4413:3:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4394:18:124"},"nodeType":"YulFunctionCall","src":"4394:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4382:6:124"},"nodeType":"YulFunctionCall","src":"4382:36:124"},"nodeType":"YulExpressionStatement","src":"4382:36:124"},{"nodeType":"YulAssignment","src":"4431:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4442:3:124"},{"name":"_4","nodeType":"YulIdentifier","src":"4447:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4438:3:124"},"nodeType":"YulFunctionCall","src":"4438:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4431:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4323:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4328:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4320:2:124"},"nodeType":"YulFunctionCall","src":"4320:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4336:23:124","statements":[{"nodeType":"YulAssignment","src":"4338:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4349:3:124"},{"name":"_4","nodeType":"YulIdentifier","src":"4354:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4345:3:124"},"nodeType":"YulFunctionCall","src":"4345:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4338:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"4316:3:124","statements":[]},"src":"4312:148:124"},{"nodeType":"YulAssignment","src":"4469:15:124","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"4479:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4469:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4493:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4526:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"4537:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4522:3:124"},"nodeType":"YulFunctionCall","src":"4522:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4509:12:124"},"nodeType":"YulFunctionCall","src":"4509:32:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"4497:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4570:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4579:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4582:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4572:6:124"},"nodeType":"YulFunctionCall","src":"4572:12:124"},"nodeType":"YulExpressionStatement","src":"4572:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"4556:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4566:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4553:2:124"},"nodeType":"YulFunctionCall","src":"4553:16:124"},"nodeType":"YulIf","src":"4550:36:124"},{"nodeType":"YulAssignment","src":"4595:73:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4638:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"4649:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4634:3:124"},"nodeType":"YulFunctionCall","src":"4634:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4660:7:124"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"4605:28:124"},"nodeType":"YulFunctionCall","src":"4605:63:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4595:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4677:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4710:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4721:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4706:3:124"},"nodeType":"YulFunctionCall","src":"4706:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4693:12:124"},"nodeType":"YulFunctionCall","src":"4693:32:124"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"4681:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4754:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4763:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4766:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4756:6:124"},"nodeType":"YulFunctionCall","src":"4756:12:124"},"nodeType":"YulExpressionStatement","src":"4756:12:124"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"4740:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4750:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4737:2:124"},"nodeType":"YulFunctionCall","src":"4737:16:124"},"nodeType":"YulIf","src":"4734:36:124"},{"nodeType":"YulAssignment","src":"4779:73:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4822:9:124"},{"name":"offset_2","nodeType":"YulIdentifier","src":"4833:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4818:3:124"},"nodeType":"YulFunctionCall","src":"4818:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4844:7:124"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"4789:28:124"},"nodeType":"YulFunctionCall","src":"4789:63:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4779:6:124"}]},{"nodeType":"YulAssignment","src":"4861:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4894:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4905:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4890:3:124"},"nodeType":"YulFunctionCall","src":"4890:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4871:18:124"},"nodeType":"YulFunctionCall","src":"4871:38:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4861:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4918:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4951:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4962:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4947:3:124"},"nodeType":"YulFunctionCall","src":"4947:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4934:12:124"},"nodeType":"YulFunctionCall","src":"4934:33:124"},"variables":[{"name":"offset_3","nodeType":"YulTypedName","src":"4922:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4996:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5005:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5008:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4998:6:124"},"nodeType":"YulFunctionCall","src":"4998:12:124"},"nodeType":"YulExpressionStatement","src":"4998:12:124"}]},"condition":{"arguments":[{"name":"offset_3","nodeType":"YulIdentifier","src":"4982:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4992:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4979:2:124"},"nodeType":"YulFunctionCall","src":"4979:16:124"},"nodeType":"YulIf","src":"4976:36:124"},{"nodeType":"YulAssignment","src":"5021:61:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5052:9:124"},{"name":"offset_3","nodeType":"YulIdentifier","src":"5063:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5048:3:124"},"nodeType":"YulFunctionCall","src":"5048:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5074:7:124"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5031:16:124"},"nodeType":"YulFunctionCall","src":"5031:51:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5021:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3598:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3609:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3621:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3629:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3637:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3645:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3653:6:124","type":""}],"src":"3442:1646:124"},{"body":{"nodeType":"YulBlock","src":"5163:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"5209:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5218:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5221:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5211:6:124"},"nodeType":"YulFunctionCall","src":"5211:12:124"},"nodeType":"YulExpressionStatement","src":"5211:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5184:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5193:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5180:3:124"},"nodeType":"YulFunctionCall","src":"5180:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5205:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5176:3:124"},"nodeType":"YulFunctionCall","src":"5176:32:124"},"nodeType":"YulIf","src":"5173:52:124"},{"nodeType":"YulAssignment","src":"5234:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5244:12:124"},"nodeType":"YulFunctionCall","src":"5244:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5234:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5129:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5140:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5152:6:124","type":""}],"src":"5093:180:124"},{"body":{"nodeType":"YulBlock","src":"5339:374:124","statements":[{"nodeType":"YulVariableDeclaration","src":"5349:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5369:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5363:5:124"},"nodeType":"YulFunctionCall","src":"5363:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5353:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5391:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"5396:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5384:6:124"},"nodeType":"YulFunctionCall","src":"5384:19:124"},"nodeType":"YulExpressionStatement","src":"5384:19:124"},{"nodeType":"YulVariableDeclaration","src":"5412:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5422:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5416:2:124","type":""}]},{"nodeType":"YulAssignment","src":"5435:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5446:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5451:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5442:3:124"},"nodeType":"YulFunctionCall","src":"5442:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5435:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"5463:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5481:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5488:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5477:3:124"},"nodeType":"YulFunctionCall","src":"5477:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"5467:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5500:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5509:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5504:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5568:120:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5589:3:124"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5600:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5594:5:124"},"nodeType":"YulFunctionCall","src":"5594:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5582:6:124"},"nodeType":"YulFunctionCall","src":"5582:26:124"},"nodeType":"YulExpressionStatement","src":"5582:26:124"},{"nodeType":"YulAssignment","src":"5621:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5632:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5637:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5628:3:124"},"nodeType":"YulFunctionCall","src":"5628:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5621:3:124"}]},{"nodeType":"YulAssignment","src":"5653:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5667:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5675:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5663:3:124"},"nodeType":"YulFunctionCall","src":"5663:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5653:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5530:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"5533:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5527:2:124"},"nodeType":"YulFunctionCall","src":"5527:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5541:18:124","statements":[{"nodeType":"YulAssignment","src":"5543:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5552:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"5555:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5548:3:124"},"nodeType":"YulFunctionCall","src":"5548:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5543:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"5523:3:124","statements":[]},"src":"5519:169:124"},{"nodeType":"YulAssignment","src":"5697:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"5704:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5697:3:124"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5316:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5323:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5331:3:124","type":""}],"src":"5278:435:124"},{"body":{"nodeType":"YulBlock","src":"6025:753:124","statements":[{"nodeType":"YulVariableDeclaration","src":"6035:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6053:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6064:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6049:3:124"},"nodeType":"YulFunctionCall","src":"6049:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"6039:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6083:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6094:2:124","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6076:6:124"},"nodeType":"YulFunctionCall","src":"6076:21:124"},"nodeType":"YulExpressionStatement","src":"6076:21:124"},{"nodeType":"YulVariableDeclaration","src":"6106:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"6117:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"6110:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6132:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6152:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6146:5:124"},"nodeType":"YulFunctionCall","src":"6146:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6136:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6175:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"6183:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6168:6:124"},"nodeType":"YulFunctionCall","src":"6168:22:124"},"nodeType":"YulExpressionStatement","src":"6168:22:124"},{"nodeType":"YulAssignment","src":"6199:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6210:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6221:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6206:3:124"},"nodeType":"YulFunctionCall","src":"6206:19:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6199:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"6234:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6244:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6238:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6257:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6275:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6283:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6271:3:124"},"nodeType":"YulFunctionCall","src":"6271:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"6261:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6295:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6304:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6299:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6363:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6384:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6399:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6393:5:124"},"nodeType":"YulFunctionCall","src":"6393:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"6408:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6389:3:124"},"nodeType":"YulFunctionCall","src":"6389:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6377:6:124"},"nodeType":"YulFunctionCall","src":"6377:75:124"},"nodeType":"YulExpressionStatement","src":"6377:75:124"},{"nodeType":"YulAssignment","src":"6465:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6476:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6481:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6472:3:124"},"nodeType":"YulFunctionCall","src":"6472:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6465:3:124"}]},{"nodeType":"YulAssignment","src":"6497:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6511:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6519:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6507:3:124"},"nodeType":"YulFunctionCall","src":"6507:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6497:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6325:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"6328:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6322:2:124"},"nodeType":"YulFunctionCall","src":"6322:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6336:18:124","statements":[{"nodeType":"YulAssignment","src":"6338:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6347:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"6350:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6343:3:124"},"nodeType":"YulFunctionCall","src":"6343:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6338:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"6318:3:124","statements":[]},"src":"6314:218:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6552:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6563:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6548:3:124"},"nodeType":"YulFunctionCall","src":"6548:18:124"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6572:3:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6577:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6568:3:124"},"nodeType":"YulFunctionCall","src":"6568:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6541:6:124"},"nodeType":"YulFunctionCall","src":"6541:47:124"},"nodeType":"YulExpressionStatement","src":"6541:47:124"},{"nodeType":"YulVariableDeclaration","src":"6597:55:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6640:6:124"},{"name":"pos","nodeType":"YulIdentifier","src":"6648:3:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"6611:28:124"},"nodeType":"YulFunctionCall","src":"6611:41:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"6601:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6672:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6683:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6668:3:124"},"nodeType":"YulFunctionCall","src":"6668:18:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6692:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6700:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6688:3:124"},"nodeType":"YulFunctionCall","src":"6688:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6661:6:124"},"nodeType":"YulFunctionCall","src":"6661:50:124"},"nodeType":"YulExpressionStatement","src":"6661:50:124"},{"nodeType":"YulAssignment","src":"6720:52:124","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6757:6:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"6765:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"6728:28:124"},"nodeType":"YulFunctionCall","src":"6728:44:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6720:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5978:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5989:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5997:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6005:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6016:4:124","type":""}],"src":"5718:1060:124"},{"body":{"nodeType":"YulBlock","src":"6815:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6832:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6835:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6825:6:124"},"nodeType":"YulFunctionCall","src":"6825:88:124"},"nodeType":"YulExpressionStatement","src":"6825:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6929:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6932:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6922:6:124"},"nodeType":"YulFunctionCall","src":"6922:15:124"},"nodeType":"YulExpressionStatement","src":"6922:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6953:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6956:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6946:6:124"},"nodeType":"YulFunctionCall","src":"6946:15:124"},"nodeType":"YulExpressionStatement","src":"6946:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"6783:184:124"},{"body":{"nodeType":"YulBlock","src":"7073:125:124","statements":[{"nodeType":"YulAssignment","src":"7083:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7095:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7106:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7091:3:124"},"nodeType":"YulFunctionCall","src":"7091:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7083:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7125:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7140:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7148:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7136:3:124"},"nodeType":"YulFunctionCall","src":"7136:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7118:6:124"},"nodeType":"YulFunctionCall","src":"7118:74:124"},"nodeType":"YulExpressionStatement","src":"7118:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7042:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7053:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7064:4:124","type":""}],"src":"6972:226:124"},{"body":{"nodeType":"YulBlock","src":"7284:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"7330:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7339:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7342:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7332:6:124"},"nodeType":"YulFunctionCall","src":"7332:12:124"},"nodeType":"YulExpressionStatement","src":"7332:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7305:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7314:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7301:3:124"},"nodeType":"YulFunctionCall","src":"7301:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7326:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7297:3:124"},"nodeType":"YulFunctionCall","src":"7297:32:124"},"nodeType":"YulIf","src":"7294:52:124"},{"nodeType":"YulAssignment","src":"7355:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7371:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7365:5:124"},"nodeType":"YulFunctionCall","src":"7365:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7355:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7250:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7261:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7273:6:124","type":""}],"src":"7203:184:124"},{"body":{"nodeType":"YulBlock","src":"7566:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7583:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7594:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7576:6:124"},"nodeType":"YulFunctionCall","src":"7576:21:124"},"nodeType":"YulExpressionStatement","src":"7576:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7617:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7628:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7613:3:124"},"nodeType":"YulFunctionCall","src":"7613:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"7633:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7606:6:124"},"nodeType":"YulFunctionCall","src":"7606:30:124"},"nodeType":"YulExpressionStatement","src":"7606:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7656:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7667:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7652:3:124"},"nodeType":"YulFunctionCall","src":"7652:18:124"},{"hexValue":"496e76616c69642062616c616e636520666f722074686520636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"7672:34:124","type":"","value":"Invalid balance for the contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7645:6:124"},"nodeType":"YulFunctionCall","src":"7645:62:124"},"nodeType":"YulExpressionStatement","src":"7645:62:124"},{"nodeType":"YulAssignment","src":"7716:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7728:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7739:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7724:3:124"},"nodeType":"YulFunctionCall","src":"7724:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7716:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7543:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7557:4:124","type":""}],"src":"7392:356:124"},{"body":{"nodeType":"YulBlock","src":"7785:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7802:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7805:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7795:6:124"},"nodeType":"YulFunctionCall","src":"7795:88:124"},"nodeType":"YulExpressionStatement","src":"7795:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7899:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7902:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7892:6:124"},"nodeType":"YulFunctionCall","src":"7892:15:124"},"nodeType":"YulExpressionStatement","src":"7892:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7923:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7926:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7916:6:124"},"nodeType":"YulFunctionCall","src":"7916:15:124"},"nodeType":"YulExpressionStatement","src":"7916:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7753:184:124"},{"body":{"nodeType":"YulBlock","src":"7990:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"8017:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8019:16:124"},"nodeType":"YulFunctionCall","src":"8019:18:124"},"nodeType":"YulExpressionStatement","src":"8019:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8006:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"8013:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"8009:3:124"},"nodeType":"YulFunctionCall","src":"8009:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8003:2:124"},"nodeType":"YulFunctionCall","src":"8003:13:124"},"nodeType":"YulIf","src":"8000:39:124"},{"nodeType":"YulAssignment","src":"8048:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8059:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"8062:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8055:3:124"},"nodeType":"YulFunctionCall","src":"8055:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"8048:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7973:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"7976:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7982:3:124","type":""}],"src":"7942:128:124"},{"body":{"nodeType":"YulBlock","src":"8204:168:124","statements":[{"nodeType":"YulAssignment","src":"8214:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8226:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8237:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8222:3:124"},"nodeType":"YulFunctionCall","src":"8222:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8214:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8256:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8271:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8279:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8267:3:124"},"nodeType":"YulFunctionCall","src":"8267:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8249:6:124"},"nodeType":"YulFunctionCall","src":"8249:74:124"},"nodeType":"YulExpressionStatement","src":"8249:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8343:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8354:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8339:3:124"},"nodeType":"YulFunctionCall","src":"8339:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"8359:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8332:6:124"},"nodeType":"YulFunctionCall","src":"8332:34:124"},"nodeType":"YulExpressionStatement","src":"8332:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8165:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8176:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8184:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8195:4:124","type":""}],"src":"8075:297:124"},{"body":{"nodeType":"YulBlock","src":"8455:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"8501:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8510:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8513:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8503:6:124"},"nodeType":"YulFunctionCall","src":"8503:12:124"},"nodeType":"YulExpressionStatement","src":"8503:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8476:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8485:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8472:3:124"},"nodeType":"YulFunctionCall","src":"8472:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8497:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8468:3:124"},"nodeType":"YulFunctionCall","src":"8468:32:124"},"nodeType":"YulIf","src":"8465:52:124"},{"nodeType":"YulVariableDeclaration","src":"8526:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8545:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8539:5:124"},"nodeType":"YulFunctionCall","src":"8539:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8530:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8586:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"8564:21:124"},"nodeType":"YulFunctionCall","src":"8564:28:124"},"nodeType":"YulExpressionStatement","src":"8564:28:124"},{"nodeType":"YulAssignment","src":"8601:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"8611:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8601:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8421:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8432:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8444:6:124","type":""}],"src":"8377:245:124"},{"body":{"nodeType":"YulBlock","src":"8674:148:124","statements":[{"body":{"nodeType":"YulBlock","src":"8765:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8767:16:124"},"nodeType":"YulFunctionCall","src":"8767:18:124"},"nodeType":"YulExpressionStatement","src":"8767:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8690:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8697:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8687:2:124"},"nodeType":"YulFunctionCall","src":"8687:77:124"},"nodeType":"YulIf","src":"8684:103:124"},{"nodeType":"YulAssignment","src":"8796:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8807:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8814:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8803:3:124"},"nodeType":"YulFunctionCall","src":"8803:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8796:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8656:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8666:3:124","type":""}],"src":"8627:195:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_address_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        let _4 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _4)\n        let srcEnd := add(add(_2, shl(5, _3)), _4)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, _4)\n        for { } lt(src, srcEnd) { src := add(src, _4) }\n        {\n            mstore(dst, abi_decode_address(src))\n            dst := add(dst, _4)\n        }\n        value0 := dst_1\n        let offset_1 := calldataload(add(headStart, _4))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 64))\n        if gt(offset_2, _1) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset_2), dataEnd)\n        value3 := abi_decode_address(add(headStart, 96))\n        let offset_3 := calldataload(add(headStart, 128))\n        if gt(offset_3, _1) { revert(0, 0) }\n        value4 := abi_decode_bytes(add(headStart, offset_3), dataEnd)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 96)\n        mstore(headStart, 96)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 128)\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        mstore(add(headStart, _1), sub(pos, headStart))\n        let tail_2 := abi_encode_array_uint256_dyn(value1, pos)\n        mstore(add(headStart, 64), sub(tail_2, headStart))\n        tail := abi_encode_array_uint256_dyn(value2, tail_2)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Invalid balance for the contract\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"3528":[{"length":32,"start":146}],"3532":[{"length":32,"start":332},{"length":32,"start":1260}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c80637535d2461161005b5780637535d24614610147578063920f5c841461016e578063bf443f8514610181578063e9a6a25b1461019457600080fd5b80630542975c1461008d578063388f70f1146100de5780634444f3311461011f5780635e76bba314610136575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011d6100ec3660046105d9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b005b60025460ff165b60405190151581526020016100d5565b6001546040519081526020016100d5565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b61012661017c3660046107c1565b6101d3565b61011d61018f3660046108db565b600155565b61011d6101a23660046105d9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000805460ff1615610227577f9972b212e52913783072b960dd41527ae8b6e609d017b64039758dda0ce412788686866040516102129392919061092f565b60405180910390a15060025460ff16156105bf565b60005b865181101561057f576000878281518110610247576102476109b1565b60200260200101519050878281518110610263576102636109b1565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156102d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fd91906109e0565b87838151811061030f5761030f6109b1565b60200260200101511115610383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c69642062616c616e636520666f722074686520636f6e7472616374604482015260640160405180910390fd5b6000600154600014156103d3578683815181106103a2576103a26109b1565b60200260200101518884815181106103bc576103bc6109b1565b60200260200101516103ce9190610a28565b6103d7565b6001545b90508173ffffffffffffffffffffffffffffffffffffffff166340c10f1930898681518110610408576104086109b1565b60200260200101516040518363ffffffff1660e01b815260040161044e92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190610a40565b508883815181106104a4576104a46109b1565b60209081029190910101516040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105699190610a40565b505050808061057790610a5d565b91505061022a565b507fbd6b6bfac59612765a81cc4fdee74ab4859671fa14a562056f9eea438735a78a8686866040516105b39392919061092f565b60405180910390a15060015b95945050505050565b80151581146105d657600080fd5b50565b6000602082840312156105eb57600080fd5b81356105f6816105c8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610673576106736105fd565b604052919050565b600067ffffffffffffffff821115610695576106956105fd565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c357600080fd5b919050565b600082601f8301126106d957600080fd5b813560206106ee6106e98361067b565b61062c565b82815260059290921b8401810191818101908684111561070d57600080fd5b8286015b848110156107285780358352918301918301610711565b509695505050505050565b600082601f83011261074457600080fd5b813567ffffffffffffffff81111561075e5761075e6105fd565b61078f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161062c565b8181528460208386010111156107a457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156107d957600080fd5b853567ffffffffffffffff808211156107f157600080fd5b818801915088601f83011261080557600080fd5b813560206108156106e98361067b565b82815260059290921b8401810191818101908c84111561083457600080fd5b948201945b838610156108595761084a8661069f565b82529482019490820190610839565b9950508901359250508082111561086f57600080fd5b61087b89838a016106c8565b9550604088013591508082111561089157600080fd5b61089d89838a016106c8565b94506108ab6060890161069f565b935060808801359150808211156108c157600080fd5b506108ce88828901610733565b9150509295509295909350565b6000602082840312156108ed57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561092457815187529582019590820190600101610908565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561097e57815173ffffffffffffffffffffffffffffffffffffffff168452928401929084019060010161094c565b5050508381038285015261099281876108f4565b91505082810360408401526109a781856108f4565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156109f257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610a3b57610a3b6109f9565b500190565b600060208284031215610a5257600080fd5b81516105f6816105c8565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610a8f57610a8f6109f9565b506001019056fea26469706673582212209116bfc944f2af2669ad6b5ae1e9a4eb56fb6efcead6ee567057ccfdf5c2c9fb64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7535D246 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x920F5C84 EQ PUSH2 0x16E JUMPI DUP1 PUSH4 0xBF443F85 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xE9A6A25B EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x388F70F1 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x4444F331 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x5E76BBA3 EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x126 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x7C1 JUMP JUMPDEST PUSH2 0x1D3 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x18F CALLDATASIZE PUSH1 0x4 PUSH2 0x8DB JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH2 0x11D PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x227 JUMPI PUSH32 0x9972B212E52913783072B960DD41527AE8B6E609D017B64039758DDA0CE41278 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x212 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x92F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x2 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5BF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x247 JUMPI PUSH2 0x247 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x263 JUMPI PUSH2 0x263 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FD SWAP2 SWAP1 PUSH2 0x9E0 JUMP JUMPDEST DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x30F JUMPI PUSH2 0x30F PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x383 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642062616C616E636520666F722074686520636F6E7472616374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x3D3 JUMPI DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3A2 JUMPI PUSH2 0x3A2 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3BC JUMPI PUSH2 0x3BC PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3CE SWAP2 SWAP1 PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 ADDRESS DUP10 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x408 JUMPI PUSH2 0x408 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x44E SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x46D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x491 SWAP2 SWAP1 PUSH2 0xA40 JUMP JUMPDEST POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A4 JUMPI PUSH2 0x4A4 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x545 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x569 SWAP2 SWAP1 PUSH2 0xA40 JUMP JUMPDEST POP POP POP DUP1 DUP1 PUSH2 0x577 SWAP1 PUSH2 0xA5D JUMP JUMPDEST SWAP2 POP POP PUSH2 0x22A JUMP JUMPDEST POP PUSH32 0xBD6B6BFAC59612765A81CC4FDEE74AB4859671FA14A562056F9EEA438735A78A DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x5B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x92F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5F6 DUP2 PUSH2 0x5C8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x673 JUMPI PUSH2 0x673 PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x695 JUMPI PUSH2 0x695 PUSH2 0x5FD JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x6EE PUSH2 0x6E9 DUP4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x62C JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x728 JUMPI DUP1 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x711 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x744 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x75E JUMPI PUSH2 0x75E PUSH2 0x5FD JUMP JUMPDEST PUSH2 0x78F PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x62C JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x7A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x815 PUSH2 0x6E9 DUP4 PUSH2 0x67B JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP13 DUP5 GT ISZERO PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 DUP3 ADD SWAP5 JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0x859 JUMPI PUSH2 0x84A DUP7 PUSH2 0x69F JUMP JUMPDEST DUP3 MSTORE SWAP5 DUP3 ADD SWAP5 SWAP1 DUP3 ADD SWAP1 PUSH2 0x839 JUMP JUMPDEST SWAP10 POP POP DUP10 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0x86F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x87B DUP10 DUP4 DUP11 ADD PUSH2 0x6C8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x89D DUP10 DUP4 DUP11 ADD PUSH2 0x6C8 JUMP JUMPDEST SWAP5 POP PUSH2 0x8AB PUSH1 0x60 DUP10 ADD PUSH2 0x69F JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8CE DUP9 DUP3 DUP10 ADD PUSH2 0x733 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x924 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x908 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP5 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 DUP3 DUP9 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x97E JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x94C JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x992 DUP2 DUP8 PUSH2 0x8F4 JUMP JUMPDEST SWAP2 POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x9A7 DUP2 DUP6 PUSH2 0x8F4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xA3B JUMPI PUSH2 0xA3B PUSH2 0x9F9 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x5F6 DUP2 PUSH2 0x5C8 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xA8F JUMPI PUSH2 0xA8F PUSH2 0x9F9 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 AND 0xBF 0xC9 DIFFICULTY CALLCODE 0xAF 0x26 PUSH10 0xAD6B5AE1E9A4EB56FB6E 0xFC 0xEA 0xD6 0xEE JUMP PUSH17 0x57CCFDF5C2C9FB64736F6C634300080A00 CALLER ","sourceMap":"454:1974:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;459:67:26;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;459:67:26;;;;;;;;908:84:59;;;;;;:::i;:::-;966:14;:21;;;;;;;;;;;;;908:84;;;1279:80;1342:12;;;;1279:80;;;810:14:124;;803:22;785:41;;773:2;758:18;1279:80:59;645:187:124;1181:94:59;1254:16;;1181:94;;983:25:124;;;971:2;956:18;1181:94:59;837:177:124;530:36:26;;;;;1363:1063:59;;;;;;:::i;:::-;;:::i;996:105::-;;;;;;:::i;:::-;1062:16;:34;996:105;1105:72;;;;;;:::i;:::-;1153:12;:19;;;;;;;;;;;;;1105:72;1363:1063;1562:4;1578:14;;;;1574:111;;;1607:43;1624:6;1632:7;1641:8;1607:43;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;1666:12:59;;;;1665:13;1658:20;;1574:111;1696:9;1691:655;1715:6;:13;1711:1;:17;1691:655;;;1793:19;1829:6;1836:1;1829:9;;;;;;;;:::i;:::-;;;;;;;1793:46;;1939:6;1946:1;1939:9;;;;;;;;:::i;:::-;;;;;;;;;;;1932:42;;;;;1968:4;1932:42;;;191:74:124;1932:27:59;;;;;;;164:18:124;;1932:42:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1918:7;1926:1;1918:10;;;;;;;;:::i;:::-;;;;;;;:56;;1901:125;;;;;;;7594:2:124;1901:125:59;;;7576:21:124;;;7613:18;;;7606:30;7672:34;7652:18;;;7645:62;7724:18;;1901:125:59;;;;;;;;2035:22;2061:16;;2081:1;2061:21;;2060:85;;2134:8;2143:1;2134:11;;;;;;;;:::i;:::-;;;;;;;2121:7;2129:1;2121:10;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;2060:85;;;2094:16;;2060:85;2035:110;;2236:5;:10;;;2255:4;2262:8;2271:1;2262:11;;;;;;;;:::i;:::-;;;;;;;2236:38;;;;;;;;;;;;;;;8279:42:124;8267:55;;;;8249:74;;8354:2;8339:18;;8332:34;8237:2;8222:18;;8075:297;2236:38:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2290:6;2297:1;2290:9;;;;;;;;:::i;:::-;;;;;;;;;;;2283:56;;;;;:25;2317:4;8267:55:124;;2283:56:59;;;8249:74:124;8339:18;;;8332:34;;;2283:25:59;;;;;;8222:18:124;;2283:56:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1735:611;;1730:3;;;;;:::i;:::-;;;;1691:655;;;;2357:46;2377:6;2385:7;2394:8;2357:46;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;2417:4:59;1363:1063;;;;;;;;:::o;276:118:124:-;362:5;355:13;348:21;341:5;338:32;328:60;;384:1;381;374:12;328:60;276:118;:::o;399:241::-;455:6;508:2;496:9;487:7;483:23;479:32;476:52;;;524:1;521;514:12;476:52;563:9;550:23;582:28;604:5;582:28;:::i;:::-;629:5;399:241;-1:-1:-1;;;399:241:124:o;1264:184::-;1316:77;1313:1;1306:88;1413:4;1410:1;1403:15;1437:4;1434:1;1427:15;1453:334;1524:2;1518:9;1580:2;1570:13;;1585:66;1566:86;1554:99;;1683:18;1668:34;;1704:22;;;1665:62;1662:88;;;1730:18;;:::i;:::-;1766:2;1759:22;1453:334;;-1:-1:-1;1453:334:124:o;1792:183::-;1852:4;1885:18;1877:6;1874:30;1871:56;;;1907:18;;:::i;:::-;-1:-1:-1;1952:1:124;1948:14;1964:4;1944:25;;1792:183::o;1980:196::-;2048:20;;2108:42;2097:54;;2087:65;;2077:93;;2166:1;2163;2156:12;2077:93;1980:196;;;:::o;2181:662::-;2235:5;2288:3;2281:4;2273:6;2269:17;2265:27;2255:55;;2306:1;2303;2296:12;2255:55;2342:6;2329:20;2368:4;2392:60;2408:43;2448:2;2408:43;:::i;:::-;2392:60;:::i;:::-;2486:15;;;2572:1;2568:10;;;;2556:23;;2552:32;;;2517:12;;;;2596:15;;;2593:35;;;2624:1;2621;2614:12;2593:35;2660:2;2652:6;2648:15;2672:142;2688:6;2683:3;2680:15;2672:142;;;2754:17;;2742:30;;2792:12;;;;2705;;2672:142;;;-1:-1:-1;2832:5:124;2181:662;-1:-1:-1;;;;;;2181:662:124:o;2848:589::-;2890:5;2943:3;2936:4;2928:6;2924:17;2920:27;2910:55;;2961:1;2958;2951:12;2910:55;2997:6;2984:20;3023:18;3019:2;3016:26;3013:52;;;3045:18;;:::i;:::-;3089:114;3197:4;3128:66;3121:4;3117:2;3113:13;3109:86;3105:97;3089:114;:::i;:::-;3228:2;3219:7;3212:19;3274:3;3267:4;3262:2;3254:6;3250:15;3246:26;3243:35;3240:55;;;3291:1;3288;3281:12;3240:55;3356:2;3349:4;3341:6;3337:17;3330:4;3321:7;3317:18;3304:55;3404:1;3379:16;;;3397:4;3375:27;3368:38;;;;3383:7;2848:589;-1:-1:-1;;;2848:589:124:o;3442:1646::-;3621:6;3629;3637;3645;3653;3706:3;3694:9;3685:7;3681:23;3677:33;3674:53;;;3723:1;3720;3713:12;3674:53;3763:9;3750:23;3792:18;3833:2;3825:6;3822:14;3819:34;;;3849:1;3846;3839:12;3819:34;3887:6;3876:9;3872:22;3862:32;;3932:7;3925:4;3921:2;3917:13;3913:27;3903:55;;3954:1;3951;3944:12;3903:55;3990:2;3977:16;4012:4;4036:60;4052:43;4092:2;4052:43;:::i;4036:60::-;4130:15;;;4212:1;4208:10;;;;4200:19;;4196:28;;;4161:12;;;;4236:19;;;4233:39;;;4268:1;4265;4258:12;4233:39;4292:11;;;;4312:148;4328:6;4323:3;4320:15;4312:148;;;4394:23;4413:3;4394:23;:::i;:::-;4382:36;;4345:12;;;;4438;;;;4312:148;;;4479:5;-1:-1:-1;;4522:18:124;;4509:32;;-1:-1:-1;;4553:16:124;;;4550:36;;;4582:1;4579;4572:12;4550:36;4605:63;4660:7;4649:8;4638:9;4634:24;4605:63;:::i;:::-;4595:73;;4721:2;4710:9;4706:18;4693:32;4677:48;;4750:2;4740:8;4737:16;4734:36;;;4766:1;4763;4756:12;4734:36;4789:63;4844:7;4833:8;4822:9;4818:24;4789:63;:::i;:::-;4779:73;;4871:38;4905:2;4894:9;4890:18;4871:38;:::i;:::-;4861:48;;4962:3;4951:9;4947:19;4934:33;4918:49;;4992:2;4982:8;4979:16;4976:36;;;5008:1;5005;4998:12;4976:36;;5031:51;5074:7;5063:8;5052:9;5048:24;5031:51;:::i;:::-;5021:61;;;3442:1646;;;;;;;;:::o;5093:180::-;5152:6;5205:2;5193:9;5184:7;5180:23;5176:32;5173:52;;;5221:1;5218;5211:12;5173:52;-1:-1:-1;5244:23:124;;5093:180;-1:-1:-1;5093:180:124:o;5278:435::-;5331:3;5369:5;5363:12;5396:6;5391:3;5384:19;5422:4;5451:2;5446:3;5442:12;5435:19;;5488:2;5481:5;5477:14;5509:1;5519:169;5533:6;5530:1;5527:13;5519:169;;;5594:13;;5582:26;;5628:12;;;;5663:15;;;;5555:1;5548:9;5519:169;;;-1:-1:-1;5704:3:124;;5278:435;-1:-1:-1;;;;;5278:435:124:o;5718:1060::-;6064:2;6076:21;;;6146:13;;6049:18;;;6168:22;;;6016:4;;6244;;6221:3;6206:19;;;6271:15;;;6016:4;6314:218;6328:6;6325:1;6322:13;6314:218;;;6393:13;;6408:42;6389:62;6377:75;;6472:12;;;;6507:15;;;;6350:1;6343:9;6314:218;;;6318:3;;;6577:9;6572:3;6568:19;6563:2;6552:9;6548:18;6541:47;6611:41;6648:3;6640:6;6611:41;:::i;:::-;6597:55;;;6700:9;6692:6;6688:22;6683:2;6672:9;6668:18;6661:50;6728:44;6765:6;6757;6728:44;:::i;:::-;6720:52;5718:1060;-1:-1:-1;;;;;;5718:1060:124:o;6783:184::-;6835:77;6832:1;6825:88;6932:4;6929:1;6922:15;6956:4;6953:1;6946:15;7203:184;7273:6;7326:2;7314:9;7305:7;7301:23;7297:32;7294:52;;;7342:1;7339;7332:12;7294:52;-1:-1:-1;7365:16:124;;7203:184;-1:-1:-1;7203:184:124:o;7753:::-;7805:77;7802:1;7795:88;7902:4;7899:1;7892:15;7926:4;7923:1;7916:15;7942:128;7982:3;8013:1;8009:6;8006:1;8003:13;8000:39;;;8019:18;;:::i;:::-;-1:-1:-1;8055:9:124;;7942:128::o;8377:245::-;8444:6;8497:2;8485:9;8476:7;8472:23;8468:32;8465:52;;;8513:1;8510;8503:12;8465:52;8545:9;8539:16;8564:28;8586:5;8564:28;:::i;8627:195::-;8666:3;8697:66;8690:5;8687:77;8684:103;;;8767:18;;:::i;:::-;-1:-1:-1;8814:1:124;8803:13;;8627:195::o"},"gasEstimates":{"creation":{"codeDepositCost":"552800","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","POOL()":"infinite","executeOperation(address[],uint256[],uint256[],address,bytes)":"infinite","getAmountToApprove()":"2347","setAmountToApprove(uint256)":"22356","setFailExecutionTransfer(bool)":"24531","setSimulateEOA(bool)":"24574","simulateEOA()":"2338"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address[],uint256[],uint256[],address,bytes)":"920f5c84","getAmountToApprove()":"5e76bba3","setAmountToApprove(uint256)":"bf443f85","setFailExecutionTransfer(bool)":"388f70f1","setSimulateEOA(bool)":"e9a6a25b","simulateEOA()":"4444f331"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_premiums\",\"type\":\"uint256[]\"}],\"name\":\"ExecutedWithFail\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_premiums\",\"type\":\"uint256[]\"}],\"name\":\"ExecutedWithSuccess\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"premiums\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAmountToApprove\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToApprove\",\"type\":\"uint256\"}],\"name\":\"setAmountToApprove\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailExecutionTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"setSimulateEOA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"simulateEOA\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/flashloan/MockFlashLoanReceiver.sol\":\"MockFlashLoanReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.sol';\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\n\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n\\n  /**\\n   * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n   * a default value of 18.\\n   *\\n   * To select a different value for {decimals}, use {_setupDecimals}.\\n   *\\n   * All three of these values are immutable: they can only be set once during\\n   * construction.\\n   */\\n  constructor(string memory name, string memory symbol) {\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = 18;\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n   * called.\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `recipient` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n    _transfer(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) public view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20};\\n   *\\n   * Requirements:\\n   * - `sender` and `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) public virtual override returns (bool) {\\n    _transfer(sender, recipient, amount);\\n    _approve(\\n      sender,\\n      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   * - `spender` must have allowance for the caller of at least\\n   * `subtractedValue`.\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');\\n    _balances[recipient] = _balances[recipient].add(amount);\\n    emit Transfer(sender, recipient, amount);\\n  }\\n\\n  /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: mint to the zero address');\\n\\n    _beforeTokenTransfer(address(0), account, amount);\\n\\n    _totalSupply = _totalSupply.add(amount);\\n    _balances[account] = _balances[account].add(amount);\\n    emit Transfer(address(0), account, amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `amount` tokens from `account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `account` cannot be the zero address.\\n   * - `account` must have at least `amount` tokens.\\n   */\\n  function _burn(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');\\n    _totalSupply = _totalSupply.sub(amount);\\n    emit Transfer(account, address(0), amount);\\n  }\\n\\n  /**\\n   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\\n   *\\n   * This is internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `owner` cannot be the zero address.\\n   * - `spender` cannot be the zero address.\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev Sets {decimals} to a value other than the default one of 18.\\n   *\\n   * WARNING: This function should only be called from the constructor. Most\\n   * applications that interact with token contracts will not expect\\n   * {decimals} to ever change, and may work incorrectly if it does.\\n   */\\n  function _setupDecimals(uint8 decimals_) internal {\\n    _decimals = decimals_;\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * will be to transferred to `to`.\\n   * - when `from` is zero, `amount` tokens will be minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/base/FlashLoanReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanReceiver} from '../interfaces/IFlashLoanReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanReceiverBase is IFlashLoanReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0xe32679c5957b705034b3b03a84103b9c6ca137d12de656e5eead2c404bc9a382\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/flashloan/MockFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {FlashLoanReceiverBase} from '../../flashloan/base/FlashLoanReceiverBase.sol';\\nimport {MintableERC20} from '../tokens/MintableERC20.sol';\\n\\ncontract MockFlashLoanReceiver is FlashLoanReceiverBase {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  event ExecutedWithFail(address[] _assets, uint256[] _amounts, uint256[] _premiums);\\n  event ExecutedWithSuccess(address[] _assets, uint256[] _amounts, uint256[] _premiums);\\n\\n  bool internal _failExecution;\\n  uint256 internal _amountToApprove;\\n  bool internal _simulateEOA;\\n\\n  constructor(IPoolAddressesProvider provider) FlashLoanReceiverBase(provider) {}\\n\\n  function setFailExecutionTransfer(bool fail) public {\\n    _failExecution = fail;\\n  }\\n\\n  function setAmountToApprove(uint256 amountToApprove) public {\\n    _amountToApprove = amountToApprove;\\n  }\\n\\n  function setSimulateEOA(bool flag) public {\\n    _simulateEOA = flag;\\n  }\\n\\n  function getAmountToApprove() public view returns (uint256) {\\n    return _amountToApprove;\\n  }\\n\\n  function simulateEOA() public view returns (bool) {\\n    return _simulateEOA;\\n  }\\n\\n  function executeOperation(\\n    address[] memory assets,\\n    uint256[] memory amounts,\\n    uint256[] memory premiums,\\n    address, // initiator\\n    bytes memory // params\\n  ) public override returns (bool) {\\n    if (_failExecution) {\\n      emit ExecutedWithFail(assets, amounts, premiums);\\n      return !_simulateEOA;\\n    }\\n\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      //mint to this contract the specific amount\\n      MintableERC20 token = MintableERC20(assets[i]);\\n\\n      //check the contract has the specified balance\\n      require(\\n        amounts[i] <= IERC20(assets[i]).balanceOf(address(this)),\\n        'Invalid balance for the contract'\\n      );\\n\\n      uint256 amountToReturn = (_amountToApprove != 0)\\n        ? _amountToApprove\\n        : amounts[i] + premiums[i];\\n      //execution does not fail - mint tokens and return them to the _destination\\n\\n      token.mint(address(this), premiums[i]);\\n\\n      IERC20(assets[i]).approve(address(POOL), amountToReturn);\\n    }\\n\\n    emit ExecutedWithSuccess(assets, amounts, premiums);\\n\\n    return true;\\n  }\\n}\\n\",\"keccak256\":\"0x77a105a161df0198d49a35631780bc9dff01ec5ca8d9f4d2eb552ae5858db93b\",\"license\":\"BUSL-1.1\"},\"contracts/mocks/tokens/MintableERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title ERC20Mintable\\n * @dev ERC20 minting logic\\n */\\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n}\\n\",\"keccak256\":\"0x8306245c732faf6038ba650428edda23197ee5977be4cd2a1e5e73263acca6b7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8440,"contract":"contracts/mocks/flashloan/MockFlashLoanReceiver.sol:MockFlashLoanReceiver","label":"_failExecution","offset":0,"slot":"0","type":"t_bool"},{"astId":8442,"contract":"contracts/mocks/flashloan/MockFlashLoanReceiver.sol:MockFlashLoanReceiver","label":"_amountToApprove","offset":0,"slot":"1","type":"t_uint256"},{"astId":8444,"contract":"contracts/mocks/flashloan/MockFlashLoanReceiver.sol:MockFlashLoanReceiver","label":"_simulateEOA","offset":0,"slot":"2","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol":{"MockFlashLoanSimpleReceiver":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"}],"name":"ExecutedWithFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"}],"name":"ExecutedWithSuccess","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAmountToApprove","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToApprove","type":"uint256"}],"name":"setAmountToApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailExecutionTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setSimulateEOA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"simulateEOA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_3590":{"entryPoint":null,"id":3590,"parameterSlots":1,"returnSlots":0},"@_8680":{"entryPoint":null,"id":8680,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":216,"id":null,"parameterSlots":2,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":192,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:762:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:124"},"nodeType":"YulFunctionCall","src":"149:12:124"},"nodeType":"YulExpressionStatement","src":"149:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:124"},"nodeType":"YulFunctionCall","src":"128:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:124"},"nodeType":"YulFunctionCall","src":"124:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:124"},"nodeType":"YulFunctionCall","src":"113:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:124"},"nodeType":"YulFunctionCall","src":"103:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:50:124"},"nodeType":"YulIf","src":"93:70:124"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:124","type":""}],"src":"14:155:124"},{"body":{"nodeType":"YulBlock","src":"286:194:124","statements":[{"body":{"nodeType":"YulBlock","src":"332:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"341:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"344:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"334:6:124"},"nodeType":"YulFunctionCall","src":"334:12:124"},"nodeType":"YulExpressionStatement","src":"334:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"307:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"303:3:124"},"nodeType":"YulFunctionCall","src":"303:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"299:3:124"},"nodeType":"YulFunctionCall","src":"299:32:124"},"nodeType":"YulIf","src":"296:52:124"},{"nodeType":"YulVariableDeclaration","src":"357:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"376:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"370:5:124"},"nodeType":"YulFunctionCall","src":"370:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"361:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"444:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"395:48:124"},"nodeType":"YulFunctionCall","src":"395:55:124"},"nodeType":"YulExpressionStatement","src":"395:55:124"},{"nodeType":"YulAssignment","src":"459:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"469:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"459:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:124","type":""}],"src":"174:306:124"},{"body":{"nodeType":"YulBlock","src":"566:194:124","statements":[{"body":{"nodeType":"YulBlock","src":"612:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"621:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"624:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"614:6:124"},"nodeType":"YulFunctionCall","src":"614:12:124"},"nodeType":"YulExpressionStatement","src":"614:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"587:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"596:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"583:3:124"},"nodeType":"YulFunctionCall","src":"583:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"579:3:124"},"nodeType":"YulFunctionCall","src":"579:32:124"},"nodeType":"YulIf","src":"576:52:124"},{"nodeType":"YulVariableDeclaration","src":"637:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"656:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"650:5:124"},"nodeType":"YulFunctionCall","src":"650:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"641:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"724:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"675:48:124"},"nodeType":"YulFunctionCall","src":"675:55:124"},"nodeType":"YulExpressionStatement","src":"675:55:124"},{"nodeType":"YulAssignment","src":"739:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"749:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"739:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"543:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"555:6:124","type":""}],"src":"485:275:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c060405234801561001057600080fd5b5060405161087338038061087383398101604081905261002f916100d8565b80806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ac91906100d8565b6001600160a01b031660a052506100fc9050565b6001600160a01b03811681146100d557600080fd5b50565b6000602082840312156100ea57600080fd5b81516100f5816100c0565b9392505050565b60805160a05161074c61012760003960008181610163015261043c015260006092015261074c6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80635e76bba31161005b5780635e76bba31461014d5780637535d2461461015e578063bf443f8514610185578063e9a6a25b1461019857600080fd5b80630542975c1461008d5780631b11d0ff146100de578063388f70f1146101015780634444f33114610142575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100f16100ec36600461058e565b6101d7565b60405190151581526020016100d5565b61014061010f3660046106a3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b005b60025460ff166100f1565b6001546040519081526020016100d5565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6101406101933660046106c7565b600155565b6101406101a63660046106a3565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000805460ff1615610247576040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018790529081018590527f816f6a6bc084e1996be1a831afa1af30763d0501b6b43b9e1922a11f347366d79060600160405180910390a15060025460ff1615610517565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152869073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d791906106e0565b861115610344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c69642062616c616e636520666f722074686520636f6e7472616374604482015260640160405180910390fd5b6000600154600014156103605761035b8787610520565b610364565b6001545b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905290915073ffffffffffffffffffffffffffffffffffffffff8316906340c10f19906044016020604051808303816000875af11580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe91906106f9565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905289169063095ea7b3906044016020604051808303816000875af1158015610494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b891906106f9565b506040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018990529081018790527f7d94e9d0c906b8d7b2b52a581b9e9ba728aa6f8cd8532bd87243d193f47401be9060600160405180910390a16001925050505b95945050505050565b8082018281101561053057600080fd5b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461055a57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080600060a086880312156105a657600080fd5b6105af86610536565b945060208601359350604086013592506105cb60608701610536565b9150608086013567ffffffffffffffff808211156105e857600080fd5b818801915088601f8301126105fc57600080fd5b81358181111561060e5761060e61055f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156106545761065461055f565b816040528281528b602084870101111561066d57600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b80151581146106a057600080fd5b50565b6000602082840312156106b557600080fd5b81356106c081610692565b9392505050565b6000602082840312156106d957600080fd5b5035919050565b6000602082840312156106f257600080fd5b5051919050565b60006020828403121561070b57600080fd5b81516106c08161069256fea2646970667358221220bc7485ffb04ceea8e9fb30aa95f79f1689e3249af5e62aaf795c869dcd80761264736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x873 CODESIZE SUB DUP1 PUSH2 0x873 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xD8 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAC SWAP2 SWAP1 PUSH2 0xD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH2 0xFC SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xF5 DUP2 PUSH2 0xC0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x74C PUSH2 0x127 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x163 ADD MSTORE PUSH2 0x43C ADD MSTORE PUSH1 0x0 PUSH1 0x92 ADD MSTORE PUSH2 0x74C PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5E76BBA3 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5E76BBA3 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0xBF443F85 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xE9A6A25B EQ PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x388F70F1 EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x4444F331 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF1 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0x58E JUMP JUMPDEST PUSH2 0x1D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH2 0x140 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x6A3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x140 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0x6C7 JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH2 0x140 PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x6A3 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x247 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH32 0x816F6A6BC084E1996BE1A831AFA1AF30763D0501B6B43B9E1922A11F347366D7 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x2 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x517 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D7 SWAP2 SWAP1 PUSH2 0x6E0 JUMP JUMPDEST DUP7 GT ISZERO PUSH2 0x344 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642062616C616E636520666F722074686520636F6E7472616374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x360 JUMPI PUSH2 0x35B DUP8 DUP8 PUSH2 0x520 JUMP JUMPDEST PUSH2 0x364 JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3FE SWAP2 SWAP1 PUSH2 0x6F9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP10 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x494 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B8 SWAP2 SWAP1 PUSH2 0x6F9 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH32 0x7D94E9D0C906B8D7B2B52A581B9E9BA728AA6F8CD8532BD87243D193F47401BE SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x55A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5AF DUP7 PUSH2 0x536 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x5CB PUSH1 0x60 DUP8 ADD PUSH2 0x536 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x60E JUMPI PUSH2 0x60E PUSH2 0x55F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x654 JUMPI PUSH2 0x654 PUSH2 0x55F JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP12 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x6A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6C0 DUP2 PUSH2 0x692 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x70B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x6C0 DUP2 PUSH2 0x692 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC PUSH21 0x85FFB04CEEA8E9FB30AA95F79F1689E3249AF5E62A 0xAF PUSH26 0x5C869DCD80761264736F6C634300080A00330000000000000000 ","sourceMap":"628:1825:60:-:0;;;1017:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1090:8;673::27;-1:-1:-1;;;;;652:29:27;;;-1:-1:-1;;;;;652:29:27;;;;;700:8;-1:-1:-1;;;;;700:16:27;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;687:32:27;;;-1:-1:-1;628:1825:60;;-1:-1:-1;628:1825:60;14:155:124;-1:-1:-1;;;;;113:31:124;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:306::-;275:6;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;376:9;370:16;395:55;444:5;395:55;:::i;:::-;469:5;174:306;-1:-1:-1;;;174:306:124:o;485:275::-;628:1825:60;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_3567":{"entryPoint":null,"id":3567,"parameterSlots":0,"returnSlots":0},"@POOL_3571":{"entryPoint":null,"id":3571,"parameterSlots":0,"returnSlots":0},"@add_2216":{"entryPoint":1312,"id":2216,"parameterSlots":2,"returnSlots":1},"@executeOperation_8819":{"entryPoint":471,"id":8819,"parameterSlots":5,"returnSlots":1},"@getAmountToApprove_8718":{"entryPoint":null,"id":8718,"parameterSlots":0,"returnSlots":1},"@setAmountToApprove_8700":{"entryPoint":null,"id":8700,"parameterSlots":1,"returnSlots":0},"@setFailExecutionTransfer_8690":{"entryPoint":null,"id":8690,"parameterSlots":1,"returnSlots":0},"@setSimulateEOA_8710":{"entryPoint":null,"id":8710,"parameterSlots":1,"returnSlots":0},"@simulateEOA_8726":{"entryPoint":null,"id":8726,"parameterSlots":0,"returnSlots":1},"abi_decode_address":{"entryPoint":1334,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_memory_ptr":{"entryPoint":1422,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool":{"entryPoint":1699,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":1785,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":1735,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":1760,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":1375,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":1682,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4813:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"325:147:124","statements":[{"nodeType":"YulAssignment","src":"335:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"357:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"344:12:124"},"nodeType":"YulFunctionCall","src":"344:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"335:5:124"}]},{"body":{"nodeType":"YulBlock","src":"450:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"459:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"462:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"452:6:124"},"nodeType":"YulFunctionCall","src":"452:12:124"},"nodeType":"YulExpressionStatement","src":"452:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"386:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"397:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"404:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"393:3:124"},"nodeType":"YulFunctionCall","src":"393:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"383:2:124"},"nodeType":"YulFunctionCall","src":"383:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"376:6:124"},"nodeType":"YulFunctionCall","src":"376:73:124"},"nodeType":"YulIf","src":"373:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"304:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"315:5:124","type":""}],"src":"276:196:124"},{"body":{"nodeType":"YulBlock","src":"509:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"526:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"529:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"519:6:124"},"nodeType":"YulFunctionCall","src":"519:88:124"},"nodeType":"YulExpressionStatement","src":"519:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"623:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"626:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"616:6:124"},"nodeType":"YulFunctionCall","src":"616:15:124"},"nodeType":"YulExpressionStatement","src":"616:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"647:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"650:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"640:6:124"},"nodeType":"YulFunctionCall","src":"640:15:124"},"nodeType":"YulExpressionStatement","src":"640:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"477:184:124"},{"body":{"nodeType":"YulBlock","src":"813:1119:124","statements":[{"body":{"nodeType":"YulBlock","src":"860:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"869:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"872:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"862:6:124"},"nodeType":"YulFunctionCall","src":"862:12:124"},"nodeType":"YulExpressionStatement","src":"862:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"834:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"843:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"830:3:124"},"nodeType":"YulFunctionCall","src":"830:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"855:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"826:3:124"},"nodeType":"YulFunctionCall","src":"826:33:124"},"nodeType":"YulIf","src":"823:53:124"},{"nodeType":"YulAssignment","src":"885:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"914:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"895:18:124"},"nodeType":"YulFunctionCall","src":"895:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"885:6:124"}]},{"nodeType":"YulAssignment","src":"933:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"960:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"971:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"956:3:124"},"nodeType":"YulFunctionCall","src":"956:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"943:12:124"},"nodeType":"YulFunctionCall","src":"943:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"933:6:124"}]},{"nodeType":"YulAssignment","src":"984:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1011:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1022:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1007:3:124"},"nodeType":"YulFunctionCall","src":"1007:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"994:12:124"},"nodeType":"YulFunctionCall","src":"994:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"984:6:124"}]},{"nodeType":"YulAssignment","src":"1035:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1068:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1079:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1064:3:124"},"nodeType":"YulFunctionCall","src":"1064:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1045:18:124"},"nodeType":"YulFunctionCall","src":"1045:38:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1035:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1092:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1123:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1134:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1119:3:124"},"nodeType":"YulFunctionCall","src":"1119:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1106:12:124"},"nodeType":"YulFunctionCall","src":"1106:33:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1096:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1148:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1158:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1152:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1203:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1212:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1205:6:124"},"nodeType":"YulFunctionCall","src":"1205:12:124"},"nodeType":"YulExpressionStatement","src":"1205:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1191:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1199:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1188:2:124"},"nodeType":"YulFunctionCall","src":"1188:14:124"},"nodeType":"YulIf","src":"1185:34:124"},{"nodeType":"YulVariableDeclaration","src":"1228:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1242:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1253:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1238:3:124"},"nodeType":"YulFunctionCall","src":"1238:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1232:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1308:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1317:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1320:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1310:6:124"},"nodeType":"YulFunctionCall","src":"1310:12:124"},"nodeType":"YulExpressionStatement","src":"1310:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1287:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1291:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1283:3:124"},"nodeType":"YulFunctionCall","src":"1283:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1298:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1279:3:124"},"nodeType":"YulFunctionCall","src":"1279:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1272:6:124"},"nodeType":"YulFunctionCall","src":"1272:35:124"},"nodeType":"YulIf","src":"1269:55:124"},{"nodeType":"YulVariableDeclaration","src":"1333:26:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1356:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1343:12:124"},"nodeType":"YulFunctionCall","src":"1343:16:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1337:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1382:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1384:16:124"},"nodeType":"YulFunctionCall","src":"1384:18:124"},"nodeType":"YulExpressionStatement","src":"1384:18:124"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1374:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1378:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1371:2:124"},"nodeType":"YulFunctionCall","src":"1371:10:124"},"nodeType":"YulIf","src":"1368:36:124"},{"nodeType":"YulVariableDeclaration","src":"1413:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1423:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1417:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1498:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1518:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1512:5:124"},"nodeType":"YulFunctionCall","src":"1512:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1502:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1530:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1552:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1576:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1580:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1572:3:124"},"nodeType":"YulFunctionCall","src":"1572:13:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1587:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1568:3:124"},"nodeType":"YulFunctionCall","src":"1568:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"1592:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1564:3:124"},"nodeType":"YulFunctionCall","src":"1564:31:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1597:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1560:3:124"},"nodeType":"YulFunctionCall","src":"1560:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1548:3:124"},"nodeType":"YulFunctionCall","src":"1548:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1534:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1660:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1662:16:124"},"nodeType":"YulFunctionCall","src":"1662:18:124"},"nodeType":"YulExpressionStatement","src":"1662:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1619:10:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1631:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1616:2:124"},"nodeType":"YulFunctionCall","src":"1616:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1639:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1651:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1636:2:124"},"nodeType":"YulFunctionCall","src":"1636:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1613:2:124"},"nodeType":"YulFunctionCall","src":"1613:46:124"},"nodeType":"YulIf","src":"1610:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1698:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1702:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1691:6:124"},"nodeType":"YulFunctionCall","src":"1691:22:124"},"nodeType":"YulExpressionStatement","src":"1691:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1729:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1737:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1722:6:124"},"nodeType":"YulFunctionCall","src":"1722:18:124"},"nodeType":"YulExpressionStatement","src":"1722:18:124"},{"body":{"nodeType":"YulBlock","src":"1786:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1795:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1798:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1788:6:124"},"nodeType":"YulFunctionCall","src":"1788:12:124"},"nodeType":"YulExpressionStatement","src":"1788:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1763:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1767:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1759:3:124"},"nodeType":"YulFunctionCall","src":"1759:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"1772:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1755:3:124"},"nodeType":"YulFunctionCall","src":"1755:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1777:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1752:2:124"},"nodeType":"YulFunctionCall","src":"1752:33:124"},"nodeType":"YulIf","src":"1749:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1828:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1836:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1824:3:124"},"nodeType":"YulFunctionCall","src":"1824:15:124"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1845:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1849:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1841:3:124"},"nodeType":"YulFunctionCall","src":"1841:11:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1854:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1811:12:124"},"nodeType":"YulFunctionCall","src":"1811:46:124"},"nodeType":"YulExpressionStatement","src":"1811:46:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1881:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1889:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1877:3:124"},"nodeType":"YulFunctionCall","src":"1877:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"1894:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1873:3:124"},"nodeType":"YulFunctionCall","src":"1873:24:124"},{"kind":"number","nodeType":"YulLiteral","src":"1899:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1866:6:124"},"nodeType":"YulFunctionCall","src":"1866:35:124"},"nodeType":"YulExpressionStatement","src":"1866:35:124"},{"nodeType":"YulAssignment","src":"1910:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1920:6:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1910:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"747:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"758:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"770:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"778:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"786:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"794:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"802:6:124","type":""}],"src":"666:1266:124"},{"body":{"nodeType":"YulBlock","src":"2032:92:124","statements":[{"nodeType":"YulAssignment","src":"2042:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2054:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2065:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2050:3:124"},"nodeType":"YulFunctionCall","src":"2050:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2042:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2084:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2109:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2102:6:124"},"nodeType":"YulFunctionCall","src":"2102:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2095:6:124"},"nodeType":"YulFunctionCall","src":"2095:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2077:6:124"},"nodeType":"YulFunctionCall","src":"2077:41:124"},"nodeType":"YulExpressionStatement","src":"2077:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2001:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2012:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2023:4:124","type":""}],"src":"1937:187:124"},{"body":{"nodeType":"YulBlock","src":"2171:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"2225:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2234:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2237:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2227:6:124"},"nodeType":"YulFunctionCall","src":"2227:12:124"},"nodeType":"YulExpressionStatement","src":"2227:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2194:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2215:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2208:6:124"},"nodeType":"YulFunctionCall","src":"2208:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2201:6:124"},"nodeType":"YulFunctionCall","src":"2201:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2191:2:124"},"nodeType":"YulFunctionCall","src":"2191:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2184:6:124"},"nodeType":"YulFunctionCall","src":"2184:40:124"},"nodeType":"YulIf","src":"2181:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2160:5:124","type":""}],"src":"2129:118:124"},{"body":{"nodeType":"YulBlock","src":"2319:174:124","statements":[{"body":{"nodeType":"YulBlock","src":"2365:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2374:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2377:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2367:6:124"},"nodeType":"YulFunctionCall","src":"2367:12:124"},"nodeType":"YulExpressionStatement","src":"2367:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2340:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2349:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2336:3:124"},"nodeType":"YulFunctionCall","src":"2336:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2361:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2332:3:124"},"nodeType":"YulFunctionCall","src":"2332:32:124"},"nodeType":"YulIf","src":"2329:52:124"},{"nodeType":"YulVariableDeclaration","src":"2390:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2416:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2403:12:124"},"nodeType":"YulFunctionCall","src":"2403:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2394:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2457:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"2435:21:124"},"nodeType":"YulFunctionCall","src":"2435:28:124"},"nodeType":"YulExpressionStatement","src":"2435:28:124"},{"nodeType":"YulAssignment","src":"2472:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2482:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2472:6:124"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2285:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2296:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2308:6:124","type":""}],"src":"2252:241:124"},{"body":{"nodeType":"YulBlock","src":"2599:76:124","statements":[{"nodeType":"YulAssignment","src":"2609:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2621:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2632:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2617:3:124"},"nodeType":"YulFunctionCall","src":"2617:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2609:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2651:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2662:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2644:6:124"},"nodeType":"YulFunctionCall","src":"2644:25:124"},"nodeType":"YulExpressionStatement","src":"2644:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2568:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2579:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2590:4:124","type":""}],"src":"2498:177:124"},{"body":{"nodeType":"YulBlock","src":"2795:125:124","statements":[{"nodeType":"YulAssignment","src":"2805:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2817:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2828:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2813:3:124"},"nodeType":"YulFunctionCall","src":"2813:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2805:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2847:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2862:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2870:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2858:3:124"},"nodeType":"YulFunctionCall","src":"2858:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2840:6:124"},"nodeType":"YulFunctionCall","src":"2840:74:124"},"nodeType":"YulExpressionStatement","src":"2840:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2764:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2775:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2786:4:124","type":""}],"src":"2680:240:124"},{"body":{"nodeType":"YulBlock","src":"2995:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"3041:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3050:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3053:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3043:6:124"},"nodeType":"YulFunctionCall","src":"3043:12:124"},"nodeType":"YulExpressionStatement","src":"3043:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3016:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3025:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3012:3:124"},"nodeType":"YulFunctionCall","src":"3012:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3037:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3008:3:124"},"nodeType":"YulFunctionCall","src":"3008:32:124"},"nodeType":"YulIf","src":"3005:52:124"},{"nodeType":"YulAssignment","src":"3066:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3089:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3076:12:124"},"nodeType":"YulFunctionCall","src":"3076:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3066:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2961:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2972:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2984:6:124","type":""}],"src":"2925:180:124"},{"body":{"nodeType":"YulBlock","src":"3267:211:124","statements":[{"nodeType":"YulAssignment","src":"3277:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3289:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3300:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3285:3:124"},"nodeType":"YulFunctionCall","src":"3285:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3277:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3319:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3334:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3342:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3330:3:124"},"nodeType":"YulFunctionCall","src":"3330:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3312:6:124"},"nodeType":"YulFunctionCall","src":"3312:74:124"},"nodeType":"YulExpressionStatement","src":"3312:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3417:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3402:3:124"},"nodeType":"YulFunctionCall","src":"3402:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"3422:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3395:6:124"},"nodeType":"YulFunctionCall","src":"3395:34:124"},"nodeType":"YulExpressionStatement","src":"3395:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3449:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3460:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3445:3:124"},"nodeType":"YulFunctionCall","src":"3445:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"3465:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3438:6:124"},"nodeType":"YulFunctionCall","src":"3438:34:124"},"nodeType":"YulExpressionStatement","src":"3438:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3220:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3231:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3239:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3247:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3258:4:124","type":""}],"src":"3110:368:124"},{"body":{"nodeType":"YulBlock","src":"3584:125:124","statements":[{"nodeType":"YulAssignment","src":"3594:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3606:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3617:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3602:3:124"},"nodeType":"YulFunctionCall","src":"3602:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3594:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3636:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3651:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3659:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3647:3:124"},"nodeType":"YulFunctionCall","src":"3647:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3629:6:124"},"nodeType":"YulFunctionCall","src":"3629:74:124"},"nodeType":"YulExpressionStatement","src":"3629:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3553:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3564:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3575:4:124","type":""}],"src":"3483:226:124"},{"body":{"nodeType":"YulBlock","src":"3795:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"3841:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3850:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3853:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3843:6:124"},"nodeType":"YulFunctionCall","src":"3843:12:124"},"nodeType":"YulExpressionStatement","src":"3843:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3816:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3825:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3812:3:124"},"nodeType":"YulFunctionCall","src":"3812:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3837:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3808:3:124"},"nodeType":"YulFunctionCall","src":"3808:32:124"},"nodeType":"YulIf","src":"3805:52:124"},{"nodeType":"YulAssignment","src":"3866:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3882:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3876:5:124"},"nodeType":"YulFunctionCall","src":"3876:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3866:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3761:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3772:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3784:6:124","type":""}],"src":"3714:184:124"},{"body":{"nodeType":"YulBlock","src":"4077:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4094:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4105:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4087:6:124"},"nodeType":"YulFunctionCall","src":"4087:21:124"},"nodeType":"YulExpressionStatement","src":"4087:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4128:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4139:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4124:3:124"},"nodeType":"YulFunctionCall","src":"4124:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4144:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4117:6:124"},"nodeType":"YulFunctionCall","src":"4117:30:124"},"nodeType":"YulExpressionStatement","src":"4117:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4167:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4178:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4163:3:124"},"nodeType":"YulFunctionCall","src":"4163:18:124"},{"hexValue":"496e76616c69642062616c616e636520666f722074686520636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"4183:34:124","type":"","value":"Invalid balance for the contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4156:6:124"},"nodeType":"YulFunctionCall","src":"4156:62:124"},"nodeType":"YulExpressionStatement","src":"4156:62:124"},{"nodeType":"YulAssignment","src":"4227:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4239:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4250:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4235:3:124"},"nodeType":"YulFunctionCall","src":"4235:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4227:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4054:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4068:4:124","type":""}],"src":"3903:356:124"},{"body":{"nodeType":"YulBlock","src":"4393:168:124","statements":[{"nodeType":"YulAssignment","src":"4403:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4415:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4426:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4411:3:124"},"nodeType":"YulFunctionCall","src":"4411:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4403:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4445:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4460:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4468:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4456:3:124"},"nodeType":"YulFunctionCall","src":"4456:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4438:6:124"},"nodeType":"YulFunctionCall","src":"4438:74:124"},"nodeType":"YulExpressionStatement","src":"4438:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4532:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4543:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4528:3:124"},"nodeType":"YulFunctionCall","src":"4528:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"4548:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4521:6:124"},"nodeType":"YulFunctionCall","src":"4521:34:124"},"nodeType":"YulExpressionStatement","src":"4521:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4354:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4365:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4373:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4384:4:124","type":""}],"src":"4264:297:124"},{"body":{"nodeType":"YulBlock","src":"4644:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"4690:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4699:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4702:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4692:6:124"},"nodeType":"YulFunctionCall","src":"4692:12:124"},"nodeType":"YulExpressionStatement","src":"4692:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4665:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4674:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4661:3:124"},"nodeType":"YulFunctionCall","src":"4661:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4686:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4657:3:124"},"nodeType":"YulFunctionCall","src":"4657:32:124"},"nodeType":"YulIf","src":"4654:52:124"},{"nodeType":"YulVariableDeclaration","src":"4715:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4734:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4728:5:124"},"nodeType":"YulFunctionCall","src":"4728:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4719:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4775:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"4753:21:124"},"nodeType":"YulFunctionCall","src":"4753:28:124"},"nodeType":"YulExpressionStatement","src":"4753:28:124"},{"nodeType":"YulAssignment","src":"4790:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4800:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4790:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4610:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4621:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4633:6:124","type":""}],"src":"4566:245:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value4 := memPtr\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Invalid balance for the contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"3567":[{"length":32,"start":146}],"3571":[{"length":32,"start":355},{"length":32,"start":1084}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c80635e76bba31161005b5780635e76bba31461014d5780637535d2461461015e578063bf443f8514610185578063e9a6a25b1461019857600080fd5b80630542975c1461008d5780631b11d0ff146100de578063388f70f1146101015780634444f33114610142575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100f16100ec36600461058e565b6101d7565b60405190151581526020016100d5565b61014061010f3660046106a3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b005b60025460ff166100f1565b6001546040519081526020016100d5565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6101406101933660046106c7565b600155565b6101406101a63660046106a3565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000805460ff1615610247576040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018790529081018590527f816f6a6bc084e1996be1a831afa1af30763d0501b6b43b9e1922a11f347366d79060600160405180910390a15060025460ff1615610517565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152869073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d791906106e0565b861115610344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c69642062616c616e636520666f722074686520636f6e7472616374604482015260640160405180910390fd5b6000600154600014156103605761035b8787610520565b610364565b6001545b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905290915073ffffffffffffffffffffffffffffffffffffffff8316906340c10f19906044016020604051808303816000875af11580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe91906106f9565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905289169063095ea7b3906044016020604051808303816000875af1158015610494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b891906106f9565b506040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018990529081018790527f7d94e9d0c906b8d7b2b52a581b9e9ba728aa6f8cd8532bd87243d193f47401be9060600160405180910390a16001925050505b95945050505050565b8082018281101561053057600080fd5b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461055a57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080600060a086880312156105a657600080fd5b6105af86610536565b945060208601359350604086013592506105cb60608701610536565b9150608086013567ffffffffffffffff808211156105e857600080fd5b818801915088601f8301126105fc57600080fd5b81358181111561060e5761060e61055f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156106545761065461055f565b816040528281528b602084870101111561066d57600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b80151581146106a057600080fd5b50565b6000602082840312156106b557600080fd5b81356106c081610692565b9392505050565b6000602082840312156106d957600080fd5b5035919050565b6000602082840312156106f257600080fd5b5051919050565b60006020828403121561070b57600080fd5b81516106c08161069256fea2646970667358221220bc7485ffb04ceea8e9fb30aa95f79f1689e3249af5e62aaf795c869dcd80761264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5E76BBA3 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5E76BBA3 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0xBF443F85 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xE9A6A25B EQ PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x388F70F1 EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x4444F331 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF1 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0x58E JUMP JUMPDEST PUSH2 0x1D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH2 0x140 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x6A3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x140 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0x6C7 JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH2 0x140 PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x6A3 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x247 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH32 0x816F6A6BC084E1996BE1A831AFA1AF30763D0501B6B43B9E1922A11F347366D7 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x2 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x517 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D7 SWAP2 SWAP1 PUSH2 0x6E0 JUMP JUMPDEST DUP7 GT ISZERO PUSH2 0x344 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642062616C616E636520666F722074686520636F6E7472616374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x360 JUMPI PUSH2 0x35B DUP8 DUP8 PUSH2 0x520 JUMP JUMPDEST PUSH2 0x364 JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3FE SWAP2 SWAP1 PUSH2 0x6F9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP10 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x494 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B8 SWAP2 SWAP1 PUSH2 0x6F9 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH32 0x7D94E9D0C906B8D7B2B52A581B9E9BA728AA6F8CD8532BD87243D193F47401BE SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x55A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5AF DUP7 PUSH2 0x536 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x5CB PUSH1 0x60 DUP8 ADD PUSH2 0x536 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x60E JUMPI PUSH2 0x60E PUSH2 0x55F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x654 JUMPI PUSH2 0x654 PUSH2 0x55F JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP12 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x6A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6C0 DUP2 PUSH2 0x692 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x70B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x6C0 DUP2 PUSH2 0x692 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC PUSH21 0x85FFB04CEEA8E9FB30AA95F79F1689E3249AF5E62A 0xAF PUSH26 0x5C869DCD80761264736F6C634300080A00330000000000000000 ","sourceMap":"628:1825:60:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;489:67:27;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;489:67:27;;;;;;;;1561:890:60;;;;;;:::i;:::-;;:::i;:::-;;;2102:14:124;;2095:22;2077:41;;2065:2;2050:18;1561:890:60;1937:187:124;1106:84:60;;;;;;:::i;:::-;1164:14;:21;;;;;;;;;;;;;1106:84;;;1477:80;1540:12;;;;1477:80;;1379:94;1452:16;;1379:94;;2644:25:124;;;2632:2;2617:18;1379:94:60;2498:177:124;560:36:27;;;;;1194:105:60;;;;;;:::i;:::-;1260:16;:34;1194:105;1303:72;;;;;;:::i;:::-;1351:12;:19;;;;;;;;;;;;;1303:72;1561:890;1730:4;1746:14;;;;1742:108;;;1775:40;;;3342:42:124;3330:55;;3312:74;;3417:2;3402:18;;3395:34;;;3445:18;;;3438:34;;;1775:40:60;;3300:2:124;3285:18;1775:40:60;;;;;;;-1:-1:-1;1831:12:60;;;;1830:13;1823:20;;1742:108;2022:38;;;;;2054:4;2022:38;;;191:74:124;1940:5:60;;2022:23;;;;;;164:18:124;;2022:38:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2012:6;:48;;2004:93;;;;;;;4105:2:124;2004:93:60;;;4087:21:124;;;4124:18;;;4117:30;4183:34;4163:18;;;4156:62;4235:18;;2004:93:60;;;;;;;;2104:22;2130:16;;2150:1;2130:21;;2129:64;;2174:19;:6;2185:7;2174:10;:19::i;:::-;2129:64;;;2155:16;;2129:64;2280:34;;;;;2299:4;2280:34;;;4438:74:124;4528:18;;;4521:34;;;2104:89:60;;-1:-1:-1;2280:10:60;;;;;;4411:18:124;;2280:34:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2321:52:60;;;;;:21;2351:4;4456:55:124;;2321:52:60;;;4438:74:124;4528:18;;;4521:34;;;2321:21:60;;;;;4411:18:124;;2321:52:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2385:43:60;;;3342:42:124;3330:55;;3312:74;;3417:2;3402:18;;3395:34;;;3445:18;;;3438:34;;;2385:43:60;;3300:2:124;3285:18;2385:43:60;;;;;;;2442:4;2435:11;;;;1561:890;;;;;;;;:::o;410:129:14:-;516:5;;;511:16;;;;503:25;;;;;;410:129;;;;:::o;276:196:124:-;344:20;;404:42;393:54;;383:65;;373:93;;462:1;459;452:12;373:93;276:196;;;:::o;477:184::-;529:77;526:1;519:88;626:4;623:1;616:15;650:4;647:1;640:15;666:1266;770:6;778;786;794;802;855:3;843:9;834:7;830:23;826:33;823:53;;;872:1;869;862:12;823:53;895:29;914:9;895:29;:::i;:::-;885:39;;971:2;960:9;956:18;943:32;933:42;;1022:2;1011:9;1007:18;994:32;984:42;;1045:38;1079:2;1068:9;1064:18;1045:38;:::i;:::-;1035:48;;1134:3;1123:9;1119:19;1106:33;1158:18;1199:2;1191:6;1188:14;1185:34;;;1215:1;1212;1205:12;1185:34;1253:6;1242:9;1238:22;1228:32;;1298:7;1291:4;1287:2;1283:13;1279:27;1269:55;;1320:1;1317;1310:12;1269:55;1356:2;1343:16;1378:2;1374;1371:10;1368:36;;;1384:18;;:::i;:::-;1518:2;1512:9;1580:4;1572:13;;1423:66;1568:22;;;1592:2;1564:31;1560:40;1548:53;;;1616:18;;;1636:22;;;1613:46;1610:72;;;1662:18;;:::i;:::-;1702:10;1698:2;1691:22;1737:2;1729:6;1722:18;1777:7;1772:2;1767;1763;1759:11;1755:20;1752:33;1749:53;;;1798:1;1795;1788:12;1749:53;1854:2;1849;1845;1841:11;1836:2;1828:6;1824:15;1811:46;1899:1;1894:2;1889;1881:6;1877:15;1873:24;1866:35;1920:6;1910:16;;;;;;;666:1266;;;;;;;;:::o;2129:118::-;2215:5;2208:13;2201:21;2194:5;2191:32;2181:60;;2237:1;2234;2227:12;2181:60;2129:118;:::o;2252:241::-;2308:6;2361:2;2349:9;2340:7;2336:23;2332:32;2329:52;;;2377:1;2374;2367:12;2329:52;2416:9;2403:23;2435:28;2457:5;2435:28;:::i;:::-;2482:5;2252:241;-1:-1:-1;;;2252:241:124:o;2925:180::-;2984:6;3037:2;3025:9;3016:7;3012:23;3008:32;3005:52;;;3053:1;3050;3043:12;3005:52;-1:-1:-1;3076:23:124;;2925:180;-1:-1:-1;2925:180:124:o;3714:184::-;3784:6;3837:2;3825:9;3816:7;3812:23;3808:32;3805:52;;;3853:1;3850;3843:12;3805:52;-1:-1:-1;3876:16:124;;3714:184;-1:-1:-1;3714:184:124:o;4566:245::-;4633:6;4686:2;4674:9;4665:7;4661:23;4657:32;4654:52;;;4702:1;4699;4692:12;4654:52;4734:9;4728:16;4753:28;4775:5;4753:28;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"373600","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","POOL()":"infinite","executeOperation(address,uint256,uint256,address,bytes)":"infinite","getAmountToApprove()":"2280","setAmountToApprove(uint256)":"22356","setFailExecutionTransfer(bool)":"24553","setSimulateEOA(bool)":"24574","simulateEOA()":"2371"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff","getAmountToApprove()":"5e76bba3","setAmountToApprove(uint256)":"bf443f85","setFailExecutionTransfer(bool)":"388f70f1","setSimulateEOA(bool)":"e9a6a25b","simulateEOA()":"4444f331"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"}],\"name\":\"ExecutedWithFail\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"}],\"name\":\"ExecutedWithSuccess\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAmountToApprove\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToApprove\",\"type\":\"uint256\"}],\"name\":\"setAmountToApprove\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailExecutionTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"setSimulateEOA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"simulateEOA\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol\":\"MockFlashLoanSimpleReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.sol';\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\n\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n\\n  /**\\n   * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n   * a default value of 18.\\n   *\\n   * To select a different value for {decimals}, use {_setupDecimals}.\\n   *\\n   * All three of these values are immutable: they can only be set once during\\n   * construction.\\n   */\\n  constructor(string memory name, string memory symbol) {\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = 18;\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n   * called.\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `recipient` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n    _transfer(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) public view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20};\\n   *\\n   * Requirements:\\n   * - `sender` and `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) public virtual override returns (bool) {\\n    _transfer(sender, recipient, amount);\\n    _approve(\\n      sender,\\n      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   * - `spender` must have allowance for the caller of at least\\n   * `subtractedValue`.\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');\\n    _balances[recipient] = _balances[recipient].add(amount);\\n    emit Transfer(sender, recipient, amount);\\n  }\\n\\n  /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: mint to the zero address');\\n\\n    _beforeTokenTransfer(address(0), account, amount);\\n\\n    _totalSupply = _totalSupply.add(amount);\\n    _balances[account] = _balances[account].add(amount);\\n    emit Transfer(address(0), account, amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `amount` tokens from `account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `account` cannot be the zero address.\\n   * - `account` must have at least `amount` tokens.\\n   */\\n  function _burn(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');\\n    _totalSupply = _totalSupply.sub(amount);\\n    emit Transfer(account, address(0), amount);\\n  }\\n\\n  /**\\n   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\\n   *\\n   * This is internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `owner` cannot be the zero address.\\n   * - `spender` cannot be the zero address.\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev Sets {decimals} to a value other than the default one of 18.\\n   *\\n   * WARNING: This function should only be called from the constructor. Most\\n   * applications that interact with token contracts will not expect\\n   * {decimals} to ever change, and may work incorrectly if it does.\\n   */\\n  function _setupDecimals(uint8 decimals_) internal {\\n    _decimals = decimals_;\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * will be to transferred to `to`.\\n   * - when `from` is zero, `amount` tokens will be minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {FlashLoanSimpleReceiverBase} from '../../flashloan/base/FlashLoanSimpleReceiverBase.sol';\\nimport {MintableERC20} from '../tokens/MintableERC20.sol';\\n\\ncontract MockFlashLoanSimpleReceiver is FlashLoanSimpleReceiverBase {\\n  using GPv2SafeERC20 for IERC20;\\n  using SafeMath for uint256;\\n\\n  event ExecutedWithFail(address asset, uint256 amount, uint256 premium);\\n  event ExecutedWithSuccess(address asset, uint256 amount, uint256 premium);\\n\\n  bool internal _failExecution;\\n  uint256 internal _amountToApprove;\\n  bool internal _simulateEOA;\\n\\n  constructor(IPoolAddressesProvider provider) FlashLoanSimpleReceiverBase(provider) {}\\n\\n  function setFailExecutionTransfer(bool fail) public {\\n    _failExecution = fail;\\n  }\\n\\n  function setAmountToApprove(uint256 amountToApprove) public {\\n    _amountToApprove = amountToApprove;\\n  }\\n\\n  function setSimulateEOA(bool flag) public {\\n    _simulateEOA = flag;\\n  }\\n\\n  function getAmountToApprove() public view returns (uint256) {\\n    return _amountToApprove;\\n  }\\n\\n  function simulateEOA() public view returns (bool) {\\n    return _simulateEOA;\\n  }\\n\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address, // initiator\\n    bytes memory // params\\n  ) public override returns (bool) {\\n    if (_failExecution) {\\n      emit ExecutedWithFail(asset, amount, premium);\\n      return !_simulateEOA;\\n    }\\n\\n    //mint to this contract the specific amount\\n    MintableERC20 token = MintableERC20(asset);\\n\\n    //check the contract has the specified balance\\n    require(amount <= IERC20(asset).balanceOf(address(this)), 'Invalid balance for the contract');\\n\\n    uint256 amountToReturn = (_amountToApprove != 0) ? _amountToApprove : amount.add(premium);\\n    //execution does not fail - mint tokens and return them to the _destination\\n\\n    token.mint(address(this), premium);\\n\\n    IERC20(asset).approve(address(POOL), amountToReturn);\\n\\n    emit ExecutedWithSuccess(asset, amount, premium);\\n\\n    return true;\\n  }\\n}\\n\",\"keccak256\":\"0x42f4009452ff5d9de40485506f4035d771b344909e3fd562abde09ca249e186a\",\"license\":\"BUSL-1.1\"},\"contracts/mocks/tokens/MintableERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title ERC20Mintable\\n * @dev ERC20 minting logic\\n */\\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n}\\n\",\"keccak256\":\"0x8306245c732faf6038ba650428edda23197ee5977be4cd2a1e5e73263acca6b7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8666,"contract":"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol:MockFlashLoanSimpleReceiver","label":"_failExecution","offset":0,"slot":"0","type":"t_bool"},{"astId":8668,"contract":"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol:MockFlashLoanSimpleReceiver","label":"_amountToApprove","offset":0,"slot":"1","type":"t_uint256"},{"astId":8670,"contract":"contracts/mocks/flashloan/MockSimpleFlashLoanReceiver.sol:MockFlashLoanSimpleReceiver","label":"_simulateEOA","offset":0,"slot":"2","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/helpers/MockIncentivesController.sol":{"MockIncentivesController":{"abi":[{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"handleAction","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060c18061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806331873e2e14602d575b600080fd5b603d6038366004603f565b505050565b005b600080600060608486031215605357600080fd5b833573ffffffffffffffffffffffffffffffffffffffff81168114607657600080fd5b9560208501359550604090940135939250505056fea2646970667358221220c8aea5b2f0f79d20c8d43eb83844f385685a0dd278834d37cd56f47a0c05b3e564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xC1 DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x31873E2E EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3D PUSH1 0x38 CALLDATASIZE PUSH1 0x4 PUSH1 0x3F JUMP JUMPDEST POP POP POP JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH1 0x53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0x76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xAE 0xA5 0xB2 CREATE 0xF7 SWAP14 KECCAK256 0xC8 0xD4 RETURNDATACOPY 0xB8 CODESIZE DIFFICULTY RETURN DUP6 PUSH9 0x5A0DD278834D37CD56 DELEGATECALL PUSH27 0xC05B3E564736F6C634300080A0033000000000000000000000000 ","sourceMap":"153:138:61:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@handleAction_8837":{"entryPoint":null,"id":8837,"parameterSlots":3,"returnSlots":0},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":63,"id":null,"parameterSlots":2,"returnSlots":3}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:461:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"118:341:124","statements":[{"body":{"nodeType":"YulBlock","src":"164:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"173:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"176:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"166:6:124"},"nodeType":"YulFunctionCall","src":"166:12:124"},"nodeType":"YulExpressionStatement","src":"166:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"139:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"148:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"135:3:124"},"nodeType":"YulFunctionCall","src":"135:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"160:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:32:124"},"nodeType":"YulIf","src":"128:52:124"},{"nodeType":"YulVariableDeclaration","src":"189:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"215:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"202:12:124"},"nodeType":"YulFunctionCall","src":"202:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"193:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"311:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"320:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"323:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"313:6:124"},"nodeType":"YulFunctionCall","src":"313:12:124"},"nodeType":"YulExpressionStatement","src":"313:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"247:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"258:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"265:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"254:3:124"},"nodeType":"YulFunctionCall","src":"254:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"244:2:124"},"nodeType":"YulFunctionCall","src":"244:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"237:6:124"},"nodeType":"YulFunctionCall","src":"237:73:124"},"nodeType":"YulIf","src":"234:93:124"},{"nodeType":"YulAssignment","src":"336:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"346:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"336:6:124"}]},{"nodeType":"YulAssignment","src":"360:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"387:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"398:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"383:3:124"},"nodeType":"YulFunctionCall","src":"383:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"370:12:124"},"nodeType":"YulFunctionCall","src":"370:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"360:6:124"}]},{"nodeType":"YulAssignment","src":"411:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"438:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"449:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"421:12:124"},"nodeType":"YulFunctionCall","src":"421:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"411:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"68:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"79:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"91:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"99:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"107:6:124","type":""}],"src":"14:445:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c806331873e2e14602d575b600080fd5b603d6038366004603f565b505050565b005b600080600060608486031215605357600080fd5b833573ffffffffffffffffffffffffffffffffffffffff81168114607657600080fd5b9560208501359550604090940135939250505056fea2646970667358221220c8aea5b2f0f79d20c8d43eb83844f385685a0dd278834d37cd56f47a0c05b3e564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x31873E2E EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3D PUSH1 0x38 CALLDATASIZE PUSH1 0x4 PUSH1 0x3F JUMP JUMPDEST POP POP POP JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH1 0x53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0x76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xAE 0xA5 0xB2 CREATE 0xF7 SWAP14 KECCAK256 0xC8 0xD4 RETURNDATACOPY 0xB8 CODESIZE DIFFICULTY RETURN DUP6 PUSH9 0x5A0DD278834D37CD56 DELEGATECALL PUSH27 0xC05B3E564736F6C634300080A0033000000000000000000000000 ","sourceMap":"153:138:61:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;220:69;;;;;;:::i;:::-;;;;;;;14:445:124;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;215:9;202:23;265:42;258:5;254:54;247:5;244:65;234:93;;323:1;320;313:12;234:93;346:5;398:2;383:18;;370:32;;-1:-1:-1;449:2:124;434:18;;;421:32;;14:445;-1:-1:-1;;;14:445:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"38600","executionCost":"93","totalCost":"38693"},"external":{"handleAction(address,uint256,uint256)":"268"}},"methodIdentifiers":{"handleAction(address,uint256,uint256)":"31873e2e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"handleAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/helpers/MockIncentivesController.sol\":\"MockIncentivesController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/helpers/MockIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\n\\ncontract MockIncentivesController is IAaveIncentivesController {\\n  function handleAction(address, uint256, uint256) external override {}\\n}\\n\",\"keccak256\":\"0x83ba24ca12e1e42eb1ad6ef9b0f914a9ce849ab7653241dced3454254e9c73ab\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/helpers/MockL2Pool.sol":{"MockL2Pool":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"category","type":"tuple"}],"name":"configureEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"interestRateModes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoanSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"getEModeCategoryData","outputs":[{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"getReserveAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralBase","type":"uint256"},{"internalType":"uint256","name":"totalDebtBase","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsBase","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserEMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args1","type":"bytes32"},{"internalType":"bytes32","name":"args2","type":"bytes32"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"resetIsolationModeTotalDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"setUserEMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"flashLoanPremiumTotal","type":"uint128"},{"internalType":"uint128","name":"flashLoanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"BRIDGE_PROTOCOL_FEE()":{"returns":{"_0":"The bridge fee sent to the protocol treasury"}},"FLASHLOAN_PREMIUM_TOTAL()":{"returns":{"_0":"The total fee on flashloans"}},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"returns":{"_0":"The flashloan fee sent to the protocol treasury"}},"MAX_NUMBER_RESERVES()":{"returns":{"_0":"The maximum number of reserves supported"}},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"returns":{"_0":"The percentage of available liquidity to borrow, expressed in bps"}},"backUnbacked(address,uint256,uint256)":{"params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees"},"returns":{"_0":"The backed amount"}},"borrow(address,uint256,uint256,uint16,address)":{"params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"borrow(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the borrow function packed in one bytes32    88 bits       16 bits             8 bits                 128 bits       16 bits | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |"}},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"details":"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets","params":{"config":"The configuration of the category","id":"The id of the category"}},"deposit(address,uint256,address,uint16)":{"details":"Deprecated: maintained for compatibility purposes","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"dropReserve(address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve"}},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"details":"Only callable by the overlying aToken of the `asset`","params":{"amount":"The amount being transferred/withdrawn","asset":"The address of the underlying asset of the aToken","balanceFromBefore":"The aToken balance of the `from` user before the transfer","balanceToBefore":"The aToken balance of the `to` user before the transfer","from":"The user from which the aTokens are transferred","to":"The user receiving the aTokens"}},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amounts":"The amounts of the assets being flash-borrowed","assets":"The addresses of the assets being flash-borrowed","interestRateModes":"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address","onBehalfOf":"The address  that will receive the debt in the case of using on `modes` 1 or 2","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amount":"The amount of the asset being flash-borrowed","asset":"The address of the asset being flash-borrowed","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"getConfiguration(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The configuration of the reserve"}},"getEModeCategoryData(uint8)":{"params":{"id":"The id of the category"},"returns":{"_0":"The configuration data of the category"}},"getReserveAddressById(uint16)":{"params":{"id":"The id of the reserve as stored in the DataTypes.ReserveData struct"},"returns":{"_0":"The address of the reserve associated with id"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The state and configuration data of the reserve"}},"getReserveNormalizedIncome(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve's normalized income"}},"getReserveNormalizedVariableDebt(address)":{"details":"WARNING: This function is intended to be used primarily by the protocol itself to get a \"dynamic\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve normalized variable debt"}},"getReservesList()":{"details":"It does not include dropped reserves","returns":{"_0":"The addresses of the underlying assets of the initialized reserves"}},"getUserAccountData(address)":{"params":{"user":"The address of the user"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"getUserConfiguration(address)":{"params":{"user":"The user address"},"returns":{"_0":"The configuration of the user"}},"getUserEMode(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The eMode id"}},"initReserve(address,address,address,address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"aTokenAddress":"The address of the aToken that will be assigned to the reserve","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy contract","stableDebtAddress":"The address of the StableDebtToken that will be assigned to the reserve","variableDebtAddress":"The address of the VariableDebtToken that will be assigned to the reserve"}},"initialize(address)":{"details":"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations","params":{"provider":"The address of the PoolAddressesProvider"}},"liquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"liquidationCall(bytes32,bytes32)":{"details":"the shortenedDebtToCover is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max","params":{"args1":"part of the arguments for the liquidationCall function packed in one bytes32    64 bits      160 bits       16 bits         16 bits | 0-padding | user address | debtAssetId | collateralAssetId |","args2":"part of the arguments for the liquidationCall function packed in one bytes32    127 bits       1 bit             128 bits | 0-padding | receiveAToken | shortenedDebtToCover |"}},"mintToTreasury(address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed"}},"mintUnbacked(address,uint256,address,uint16)":{"params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"rebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"}},"rebalanceStableBorrowRate(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the rebalanceStableBorrowRate function packed in one bytes32    80 bits      160 bits     16 bits | 0-padding | user address | assetId |"}},"repay(address,uint256,uint256,address)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed"},"returns":{"_0":"The final amount repaid"}},"repay(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repay function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(address,uint256,uint256)":{"details":"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repayWithATokens function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(bytes32,bytes32,bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repayWithPermit function packed in one bytes32    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |","r":"The R parameter of ERC712 permit sig","s":"The S parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"resetIsolationModeTotalDebt(address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt"}},"setConfiguration(address,(uint256))":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","configuration":"The new configuration bitmap"}},"setReserveInterestRateStrategyAddress(address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","rateStrategyAddress":"The address of the interest rate strategy contract"}},"setUserEMode(uint8)":{"params":{"categoryId":"The id of the category"}},"setUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset supplied","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"}},"setUserUseReserveAsCollateral(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the setUserUseReserveAsCollateral function packed in one bytes32    239 bits         1 bit       16 bits | 0-padding | useAsCollateral | assetId |"}},"supply(address,uint256,address,uint16)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supply(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the supply function packed in one bytes32    96 bits       16 bits         128 bits      16 bits | 0-padding | referralCode | shortenedAmount | assetId |"}},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supplyWithPermit(bytes32,bytes32,bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the supply function packed in one bytes32    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |","r":"The R parameter of ERC712 permit sig","s":"The S parameter of ERC712 permit sig"}},"swapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"}},"swapBorrowRateMode(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the swapBorrowRateMode function packed in one bytes32    232 bits            8 bits             16 bits | 0-padding | shortenedInterestRateMode | assetId |"}},"updateBridgeProtocolFee(uint256)":{"params":{"bridgeProtocolFee":"The part of the premium sent to the protocol treasury"}},"updateFlashloanPremiums(uint128,uint128)":{"details":"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract","params":{"flashLoanPremiumToProtocol":"The part of the premium sent to the protocol treasury, expressed in bps","flashLoanPremiumTotal":"The total premium, expressed in bps"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn"}},"withdraw(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the withdraw function packed in one bytes32    112 bits       128 bits      16 bits | 0-padding | shortenedAmount | assetId |"},"returns":{"_0":"The final amount withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_24811":{"entryPoint":null,"id":24811,"parameterSlots":1,"returnSlots":0},"@_25291":{"entryPoint":null,"id":25291,"parameterSlots":1,"returnSlots":0},"@_8865":{"entryPoint":null,"id":8865,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":74,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:124"},"nodeType":"YulFunctionCall","src":"174:12:124"},"nodeType":"YulExpressionStatement","src":"174:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:124"},"nodeType":"YulFunctionCall","src":"143:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:124"},"nodeType":"YulFunctionCall","src":"139:32:124"},"nodeType":"YulIf","src":"136:52:124"},{"nodeType":"YulVariableDeclaration","src":"197:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:124"},"nodeType":"YulFunctionCall","src":"291:12:124"},"nodeType":"YulExpressionStatement","src":"291:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:124"},"nodeType":"YulFunctionCall","src":"270:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:124"},"nodeType":"YulFunctionCall","src":"266:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:124"},"nodeType":"YulFunctionCall","src":"255:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:124"},"nodeType":"YulFunctionCall","src":"245:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:124"},"nodeType":"YulFunctionCall","src":"238:50:124"},"nodeType":"YulIf","src":"235:70:124"},{"nodeType":"YulAssignment","src":"314:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"src":"14:321:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":5123},{"length":20,"start":6055},{"length":20,"start":8861},{"length":20,"start":9024},{"length":20,"start":11951},{"length":20,"start":14311}]},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7966},{"length":20,"start":13776}]},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4642}]},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5850},{"length":20,"start":10605}]},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":3048}]},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":7205},{"length":20,"start":8324},{"length":20,"start":8977},{"length":20,"start":10914},{"length":20,"start":12076},{"length":20,"start":13927}]},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":4026},{"length":20,"start":6389},{"length":20,"start":7031},{"length":20,"start":7288},{"length":20,"start":13045}]}},"object":"60a0604052600080553480156200001557600080fd5b5060405162005c6e38038062005c6e83398101604081905262000038916200004a565b6001600160a01b03166080526200007c565b6000602082840312156200005d57600080fd5b81516001600160a01b03811681146200007557600080fd5b9392505050565b608051615b74620000fa600039600081816103cf01528181610b9801528181610c8a015281816111ae0152818161186d01528181611c40015281816123b301528181612484015281816126d7015281816129d201528181612c33015281816132a9015281816139c501528181613cbe0152613f0b0152615b746000f3fe608060405234801561001057600080fd5b50600436106103825760003560e01c80637a708e92116101de578063d1946dbc1161010f578063e82fec2f116100ad578063f51e435b1161007c578063f51e435b14610aa4578063f7a7384014610ab7578063f8119d5114610aca578063fd21ecff14610ad957600080fd5b8063e82fec2f14610a46578063e8eda9df1461079f578063eddf1b7914610a58578063ee3e210b14610a9157600080fd5b8063d5eed868116100e9578063d5eed868146109fa578063d65dc7a114610a0d578063dc7c0bff14610a20578063e43e88a114610a3357600080fd5b8063d1946dbc146109bf578063d579ea7d146109d4578063d5ed3933146109e757600080fd5b8063bcb6e5221161017c578063c4d66de811610156578063c4d66de814610973578063cd11238214610986578063cea9d26f14610999578063d15e0053146109ac57600080fd5b8063bcb6e522146108d1578063bf92857c146108e4578063c44b11f71461092457600080fd5b806394ba89a2116101b857806394ba89a2146108855780639cd1999614610898578063a415bcad146108ab578063ab9c4b5d146108be57600080fd5b80637a708e921461084c5780638e19899e1461085f57806394b576de1461087257600080fd5b806342b0b77c116102b8578063617ba0371161025657806369328dec1161023057806369328dec146107d857806369a933a5146107eb5780636a99c036146107fe5780636c6f6ae11461082c57600080fd5b8063617ba0371461079f57806363c9b860146107b2578063680dd47c146107c557600080fd5b80635275179711610292578063527517971461072c578063563dd61314610766578063573ade81146107795780635a3b74b91461078c57600080fd5b806342b0b77c146106a85780634417a583146106bb5780634d013f031461071957600080fd5b8063272d9072116103255780633036b439116102ff5780633036b439146104a157806335ea6a75146104b4578063386497fd14610682578063427da1771461069557600080fd5b8063272d90721461047357806328530a471461047b5780632dad97d41461048e57600080fd5b80630542975c116103615780630542975c146103ca578063074b2e43146104165780631d2118f91461044d5780631fe3c6f31461046057600080fd5b8062a718a9146103875780630148170e1461039c57806302c205f0146103b7575b600080fd5b61039a61039536600461449f565b610aec565b005b6103a4600181565b6040519081526020015b60405180910390f35b61039a6103c536600461452a565b610d67565b6103f17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ae565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016103ae565b61039a61045b3660046145a9565b610f17565b61039a61046e3660046145e2565b611105565b6039546103a4565b61039a6104893660046145fb565b611126565b6103a461049c366004614616565b611305565b61039a6104af3660046145e2565b611449565b6106756104c236600461464b565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091525073ffffffffffffffffffffffffffffffffffffffff90811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103ae9190614668565b6103a461069036600461464b565b611456565b61039a6106a33660046145e2565b61148a565b61039a6106b6366004614827565b6114c7565b61070a6106c936600461464b565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260358352819020815192830190915254815290565b604051905181526020016103ae565b61039a6107273660046145e2565b611641565b6103f161073a3660046148a9565b61ffff1660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6103a46107743660046145e2565b61167d565b6103a46107873660046148c4565b6116a9565b61039a61079a36600461490e565b6117f9565b61039a6107ad36600461493c565b6119ce565b61039a6107c036600461464b565b611ad1565b61039a6107d336600461498d565b611b4d565b6103a46107e63660046149b9565b611b7a565b61039a6107f936600461493c565b611d99565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661042c565b61083f61083a3660046145fb565b611e46565b6040516103ae9190614a66565b61039a61085a366004614ac9565b611f80565b6103a461086d3660046145e2565b61210c565b6103a461088036600461498d565b612133565b61039a610893366004614b2c565b61216e565b61039a6108a6366004614b9d565b6121ef565b61039a6108b9366004614bdf565b612244565b61039a6108cc366004614c1e565b61252a565b61039a6108df366004614d38565b6128e3565b6108f76108f236600461464b565b61291a565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016103ae565b61070a61093236600461464b565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260348352819020815192830190915254815290565b61039a61098136600461464b565b612b49565b61039a6109943660046145a9565b612d4e565b61039a6109a7366004614d6b565b612dd7565b6103a46109ba36600461464b565b612e84565b6109c7612eb2565b6040516103ae9190614dac565b61039a6109e2366004614ead565b612fee565b61039a6109f5366004614fe5565b61315a565b61039a610a083660046145e2565b6133e1565b6103a4610a1b366004614616565b613458565b6103a4610a2e3660046145e2565b6134f8565b61039a610a4136600461464b565b61351a565b603b5467ffffffffffffffff166103a4565b6103a4610a6636600461464b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205460ff1690565b6103a4610a9f36600461504a565b61358f565b61039a610ab2366004615090565b61376a565b61039a610ac53660046145e2565b61392b565b604051608081526020016103ae565b61039a610ae73660046150ef565b613981565b73__$f598c634f2d943205ac23f707b80075cbb$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c259190615111565b73ffffffffffffffffffffffffffffffffffffffff90811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf79190615111565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d3095949392919061512e565b60006040518083038186803b158015610d4857600080fd5b505af4158015610d5c573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e401600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff86811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e40160006040518083038186803b158015610ef557600080fd5b505af4158015610f09573d6000803e3d6000fd5b505050505050505050505050565b610f1f6139ac565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061104057506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906110ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600080611113603684613ada565b91509150611121828261216e565b505050565b73__$e4b9550ff526a295e1233dea02821b9004$__635d5dc3136034603660376038603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b9190615111565b73ffffffffffffffffffffffffffffffffffffffff1681526020018960ff168152506040518763ffffffff1660e01b81526004016112d29695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a08501529182015173ffffffffffffffffffffffffffffffffffffffff1660c0840152015160ff1660e08201526101000190565b60006040518083038186803b1580156112ea57600080fd5b505af41580156112fe573d6000803e3d6000fd5b5050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018860028111156113a3576113a3615222565b60028111156113b4576113b4615222565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526113fe949392919060040161528c565b602060405180830381865af415801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906152ff565b90505b9392505050565b6114516139ac565b603955565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061148490613b14565b92915050565b61ffff811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff90811690601083901c166111218282612d4e565b60006040518060e001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116604080870191909152911660609094019390935273ffffffffffffffffffffffffffffffffffffffff8a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__9163a1fe0e8d91611608918590600401615318565b60006040518083038186803b15801561162057600080fd5b505af4158015611634573d6000803e3d6000fd5b5050505050505050505050565b61ffff811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff16601082901c60011661112182826117f9565b60008060008061168e603686613ba4565b9250925092506116a0838383336116a9565b95945050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561174757611747615222565b600281111561175857611758615222565b815273ffffffffffffffffffffffffffffffffffffffff891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526117b8949392919060040161528c565b602060405180830381865af41580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a091906152ff565b73__$db79717e66442ee197e8271d032a066e34$__63bf697a26603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208787603b60089054906101000a900461ffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa9190615111565b336000908152603860205260409081902054905160e08b901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019990995260248901979097526044880195909552606487019390935273ffffffffffffffffffffffffffffffffffffffff9182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b1580156119b257600080fd5b505af41580156119c6573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e4015b60006040518083038186803b158015611ab357600080fd5b505af4158015611ac7573d6000803e3d6000fd5b5050505050505050565b611ad96139ac565b6040517f9cf57023000000000000000000000000000000000000000000000000000000008152603460048201526036602482015273ffffffffffffffffffffffffffffffffffffffff8216604482015273__$563c746fa3df0f1858d85f6ef4258864be$__90639cf57023906064016112d2565b6000806000806000611b60603689613c32565b94509450945094509450611ac78585338686868d8d610d67565b600073__$db79717e66442ee197e8271d032a066e34$__63186dea44603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd9190615111565b73ffffffffffffffffffffffffffffffffffffffff9081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a0015116610124820152610144016113fe565b611da1613cbc565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$b06080f092f400a43662c3f835a4d9baa8$__90630413c86f9060e401611a9b565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff8082168352620100008204811694830194909452640100000000810490931693810193909352660100000000000090910473ffffffffffffffffffffffffffffffffffffffff166060830152600181018054608084019190611ef7906153a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f23906153a3565b8015611f705780601f10611f4557610100808354040283529160200191611f70565b820191906000526020600020905b815481529060010190602001808311611f5357829003601f168201915b5050505050815250509050919050565b611f886139ac565b73__$563c746fa3df0f1858d85f6ef4258864be$__6369fc1bdf603460366040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff16815260200161205f608090565b61ffff168152506040518463ffffffff1660e01b8152600401612084939291906153f1565b602060405180830381865af41580156120a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c59190615481565b156112fe57603b805468010000000000000000900461ffff169060086120ea836154cd565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b600080600061211c603685613e49565b9150915061212b828233611b7a565b949350505050565b60008060008060008061214760368a613ec9565b945094509450945094506121618585853386868e8e61358f565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603460209081526040808320338452603590925290912073__$c3724b8d563dc83a94e797176cddecb3b9$__9163eac4d70391858560028111156121d0576121d0615222565b6040518563ffffffff1660e01b815260040161199a94939291906154ef565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$563c746fa3df0f1858d85f6ef4258864be$__906348c2ca8c9061199a9060349086908690600401615526565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f9603460366037603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a600281111561231b5761231b615222565b600281111561232c5761232c615222565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a09093019273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa1580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f9190615111565b73ffffffffffffffffffffffffffffffffffffffff90811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa1580156124cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f19190615111565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d3095949392919061558b565b6000604051806101c001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a085015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa15801561276a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278e9190615111565b6040517ffa50f29700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063fa50f29790602401602060405180830381865afa1580156127fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281e9190615481565b1515905273ffffffffffffffffffffffffffffffffffffffff86166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__91632e7263ea916128a591603491603691603791908890600401615734565b60006040518083038186803b1580156128bd57600080fd5b505af41580156128d1573d6000803e3d6000fd5b50505050505050505050505050505050565b6128eb6139ac565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$563c746fa3df0f1858d85f6ef4258864be$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa158015612a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3c9190615111565b73ffffffffffffffffffffffffffffffffffffffff90811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af4158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3591906158da565b949c939b5091995097509550909350915050565b60015460039060ff1680612b5c5750303b155b80612b68575060005481115b612bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610fa1565b60015460ff16158015612c3157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525090612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c4179055801561112157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$c3724b8d563dc83a94e797176cddecb3b9$__90636973f7449060640161199a565b612ddf613f09565b6040517f87b322b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044810182905273__$563c746fa3df0f1858d85f6ef4258864be$__906387b322b29060640160006040518083038186803b158015612e6757600080fd5b505af4158015612e7b573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061148490614096565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff811115612ee457612ee4614e06565b604051908082528060200260200182016040528015612f0d578160200160208202803683370190505b50905060005b83811015612fe45760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612fc45760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1682612f758584615924565b81518110612f8557612f8561593b565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fd2565b82612fce8161596a565b9350505b80612fdc8161596a565b915050612f13565b5091038152919050565b612ff66139ac565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316613065576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5060ff8216600090815260376020908152604091829020835181548386015194860151606087015173ffffffffffffffffffffffffffffffffffffffff166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169290941691909117919091179490941617929092178255608083015180518493926112fe9260018501929101906143c6565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260346020908152604091829020600401548251808401909352600283527f31310000000000000000000000000000000000000000000000000000000000009183019190915290911633146131f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5073__$db79717e66442ee197e8271d032a066e34$__638a5dadd160346036603760356040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133369190615111565b73ffffffffffffffffffffffffffffffffffffffff90811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526133a99594939291906004016159a3565b60006040518083038186803b1580156133c157600080fd5b505af41580156133d5573d6000803e3d6000fd5b50505050505050505050565b60008060008061344360368661ffff818116600090815260209390935260409092205473ffffffffffffffffffffffffffffffffffffffff16926fffffffffffffffffffffffffffffffff601083901c169260ff609084901c169260981c1690565b93509350935093506112fe8484848433612244565b6000613462613cbc565b73ffffffffffffffffffffffffffffffffffffffff84166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$b06080f092f400a43662c3f835a4d9baa8$__90638e7432489060a4016113fe565b600080600080613509603686613ba4565b9250925092506116a0838383611305565b6135226139ac565b6040517f1e3b41450000000000000000000000000000000000000000000000000000000081526034600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015273__$563c746fa3df0f1858d85f6ef4258864be$__90631e3b4145906044016112d2565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905260009073ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e401600060405180830381600087803b15801561362457600080fd5b505af1158015613638573d6000803e3d6000fd5b5050505060006040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561367d5761367d615222565b600281111561368e5761368e615222565b815273ffffffffffffffffffffffffffffffffffffffff89166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$c3724b8d563dc83a94e797176cddecb3b9$__916340e95de69161371b91603491603691879060040161528c565b602060405180830381865af4158015613738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375c91906152ff565b9a9950505050505050505050565b6137726139ac565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166137f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061388a57506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906138f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5073ffffffffffffffffffffffffffffffffffffffff821660009081526034602052604090208135815581905b50505050565b61ffff81811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690601083901c6fffffffffffffffffffffffffffffffff1690609084901c16613925838333846119ce565b60008060008060006139956036888861411a565b94509450945094509450612e7b8585858585610aec565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a529190615111565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b50565b61ffff811660009081526020839052604090205473ffffffffffffffffffffffffffffffffffffffff16601082901c60ff165b9250929050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613b5a575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154611442906fffffffffffffffffffffffffffffffff80821691613b989170010000000000000000000000000000000090910416846141de565b906141eb565b50919050565b6000808061ffff84166fffffffffffffffffffffffffffffffff601086901c81169060ff609088901c1690821415613bfa577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505b61ffff90921660009081526020889052604090205473ffffffffffffffffffffffffffffffffffffffff169450925090509250925092565b60008080808060a086901c63ffffffff1660c087901c60ff16828080613ca48c8c61ffff81811660009081526020849052604090205473ffffffffffffffffffffffffffffffffffffffff1690601083901c6fffffffffffffffffffffffffffffffff1690609084901c169250925092565b919e909d50909b509499509297509295505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4b9190615111565b6040517f726600ce00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063726600ce90602401602060405180830381865afa158015613db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ddb9190615481565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b60008061ffff83166fffffffffffffffffffffffffffffffff601085901c811690811415613e9457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b61ffff91909116600090815260209590955260409094205473ffffffffffffffffffffffffffffffffffffffff169492505050565b600080600080600080600080600080613ee28c8c613ba4565b919e909d50909b609881901c63ffffffff169b5060b81c60ff169950975050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f989190615111565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690637be53ca190602401602060405180830381865afa158015614004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140289190615481565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b6003810154600090700100000000000000000000000000000000900464ffffffffff16428114156140dc575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154611442906fffffffffffffffffffffffffffffffff80821691613b98917001000000000000000000000000000000009091041684614242565b60008080808061ffff87811690601089901c16602089901c73ffffffffffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff8981169060808b901c60011690821415614191577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505b61ffff948516600090815260209d909d526040808e2054949095168d5293909b205473ffffffffffffffffffffffffffffffffffffffff9283169c92169a90995097509095509350505050565b600061144283834261427f565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761422057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60008061425664ffffffffff841642615924565b6142609085615a7f565b6301e133809004905061212b816b033b2e3c9fd0803ce8000000615aeb565b60008061429364ffffffffff851684615924565b9050806142af576b033b2e3c9fd0803ce8000000915050611442565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116142e55760006142ea565b600285035b925066038882915c40006142fe8a806141eb565b8161430b5761430b615abc565b0491506301e1338061431d838b6141eb565b8161432a5761432a615abc565b04905060008261433a8688615a7f565b6143449190615a7f565b60029004905060008285614358888a615a7f565b6143629190615a7f565b61436c9190615a7f565b60069004905080826301e133806143838a8f615a7f565b61438d9190615b03565b6143a3906b033b2e3c9fd0803ce8000000615aeb565b6143ad9190615aeb565b6143b79190615aeb565b9b9a5050505050505050505050565b8280546143d2906153a3565b90600052602060002090601f0160209004810192826143f4576000855561443a565b82601f1061440d57805160ff191683800117855561443a565b8280016001018555821561443a579182015b8281111561443a57825182559160200191906001019061441f565b5061444692915061444a565b5090565b5b80821115614446576000815560010161444b565b73ffffffffffffffffffffffffffffffffffffffff81168114613ad757600080fd5b803561448c8161445f565b919050565b8015158114613ad757600080fd5b600080600080600060a086880312156144b757600080fd5b85356144c28161445f565b945060208601356144d28161445f565b935060408601356144e28161445f565b92506060860135915060808601356144f981614491565b809150509295509295909350565b803561ffff8116811461448c57600080fd5b803560ff8116811461448c57600080fd5b600080600080600080600080610100898b03121561454757600080fd5b88356145528161445f565b97506020890135965060408901356145698161445f565b955061457760608a01614507565b94506080890135935061458c60a08a01614519565b925060c0890135915060e089013590509295985092959890939650565b600080604083850312156145bc57600080fd5b82356145c78161445f565b915060208301356145d78161445f565b809150509250929050565b6000602082840312156145f457600080fd5b5035919050565b60006020828403121561460d57600080fd5b61144282614519565b60008060006060848603121561462b57600080fd5b83356146368161445f565b95602085013595506040909401359392505050565b60006020828403121561465d57600080fd5b81356114428161445f565b81515181526101e08101602083015161469560208401826fffffffffffffffffffffffffffffffff169052565b5060408301516146b960408401826fffffffffffffffffffffffffffffffff169052565b5060608301516146dd60608401826fffffffffffffffffffffffffffffffff169052565b50608083015161470160808401826fffffffffffffffffffffffffffffffff169052565b5060a083015161472560a08401826fffffffffffffffffffffffffffffffff169052565b5060c083015161473e60c084018264ffffffffff169052565b5060e083015161475460e084018261ffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f8401126147f757600080fd5b50813567ffffffffffffffff81111561480f57600080fd5b602083019150836020828501011115613b0d57600080fd5b60008060008060008060a0878903121561484057600080fd5b863561484b8161445f565b9550602087013561485b8161445f565b945060408701359350606087013567ffffffffffffffff81111561487e57600080fd5b61488a89828a016147e5565b909450925061489d905060808801614507565b90509295509295509295565b6000602082840312156148bb57600080fd5b61144282614507565b600080600080608085870312156148da57600080fd5b84356148e58161445f565b9350602085013592506040850135915060608501356149038161445f565b939692955090935050565b6000806040838503121561492157600080fd5b823561492c8161445f565b915060208301356145d781614491565b6000806000806080858703121561495257600080fd5b843561495d8161445f565b93506020850135925060408501356149748161445f565b915061498260608601614507565b905092959194509250565b6000806000606084860312156149a257600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156149ce57600080fd5b83356149d98161445f565b92506020840135915060408401356149f08161445f565b809150509250925092565b6000815180845260005b81811015614a2157602081850181015186830182015201614a05565b81811115614a33576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff8084511660208401528060208501511660408401528060408501511660608401525073ffffffffffffffffffffffffffffffffffffffff6060840151166080830152608083015160a08084015261212b60c08401826149fb565b600080600080600060a08688031215614ae157600080fd5b8535614aec8161445f565b94506020860135614afc8161445f565b93506040860135614b0c8161445f565b92506060860135614b1c8161445f565b915060808601356144f98161445f565b60008060408385031215614b3f57600080fd5b8235614b4a8161445f565b946020939093013593505050565b60008083601f840112614b6a57600080fd5b50813567ffffffffffffffff811115614b8257600080fd5b6020830191508360208260051b8501011115613b0d57600080fd5b60008060208385031215614bb057600080fd5b823567ffffffffffffffff811115614bc757600080fd5b614bd385828601614b58565b90969095509350505050565b600080600080600060a08688031215614bf757600080fd5b8535614c028161445f565b94506020860135935060408601359250614b1c60608701614507565b600080600080600080600080600080600060e08c8e031215614c3f57600080fd5b614c488c614481565b9a5067ffffffffffffffff8060208e01351115614c6457600080fd5b614c748e60208f01358f01614b58565b909b50995060408d0135811015614c8a57600080fd5b614c9a8e60408f01358f01614b58565b909950975060608d0135811015614cb057600080fd5b614cc08e60608f01358f01614b58565b9097509550614cd160808e01614481565b94508060a08e01351115614ce457600080fd5b50614cf58d60a08e01358e016147e5565b9093509150614d0660c08d01614507565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff8116811461448c57600080fd5b60008060408385031215614d4b57600080fd5b614d5483614d18565b9150614d6260208401614d18565b90509250929050565b600080600060608486031215614d8057600080fd5b8335614d8b8161445f565b92506020840135614d9b8161445f565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b81811015614dfa57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614dc8565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715614e5857614e58614e06565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ea557614ea5614e06565b604052919050565b60008060408385031215614ec057600080fd5b614ec983614519565b915060208084013567ffffffffffffffff80821115614ee757600080fd5b9085019060a08288031215614efb57600080fd5b614f03614e35565b614f0c83614507565b8152614f19848401614507565b84820152614f2960408401614507565b60408201526060830135614f3c8161445f565b6060820152608083013582811115614f5357600080fd5b80840193505087601f840112614f6857600080fd5b823582811115614f7a57614f7a614e06565b614faa857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614e5e565b92508083528885828601011115614fc057600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c08789031215614ffe57600080fd5b86356150098161445f565b955060208701356150198161445f565b945060408701356150298161445f565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b03121561506757600080fd5b88356150728161445f565b9750602089013596506040890135955060608901356145778161445f565b60008082840360408112156150a457600080fd5b83356150af8161445f565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156150e157600080fd5b506020830190509250929050565b6000806040838503121561510257600080fd5b50508035926020909101359150565b60006020828403121561512357600080fd5b81516114428161445f565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a0830152604083015173ffffffffffffffffffffffffffffffffffffffff80821660c08501528060608601511660e0850152505060808301516101006151b68185018373ffffffffffffffffffffffffffffffffffffffff169052565b60a0850151151561012085015260c085015173ffffffffffffffffffffffffffffffffffffffff90811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b60208152600061144260208301846149fb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110615288577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006101008201905085825284602083015283604083015273ffffffffffffffffffffffffffffffffffffffff8084511660608401526020840151608084015260408401516152de60a0850182615251565b5060608401511660c0830152608090920151151560e0909101529392505050565b60006020828403121561531157600080fd5b5051919050565b82815260406020820152600073ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401525060408301516080830152606083015160e060a08401526153736101208401826149fb565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c908216806153b757607f821691505b60208210811415613b9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006101208201905084825283602083015273ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a083015161546760e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b60006020828403121561549357600080fd5b815161144281614491565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818114156154e5576154e561549e565b6001019392505050565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff83166040820152608081016116a06060830184615251565b83815260406020808301829052908201839052600090849060608401835b8681101561557f5783356155578161445f565b73ffffffffffffffffffffffffffffffffffffffff1682529282019290820190600101615544565b50979650505050505050565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e0830152608083015161010061562781850183615251565b60a085015191506101206156408186018461ffff169052565b60c086015192506101406156578187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e08501529050615204565b600081518084526020808501945080840160005b838110156156f957815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016156c7565b509495945050505050565b600081518084526020808501945080840160005b838110156156f957815187529582019590820190600101615718565b85815284602082015283604082015282606082015260a0608082015261577360a08201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516101c08060c08501526157916102608501836156b3565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e08701526157cd8483615704565b9350606087015191506101008187860301818801526157ec8584615704565b9450608088015192506101206158198189018573ffffffffffffffffffffffffffffffffffffffff169052565b60a089015193506101408389880301818a015261583687866149fb565b965060c08a015194506101609350615853848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b015196506158ad6102008b018873ffffffffffffffffffffffffffffffffffffffff169052565b8a015160ff81166102208b015295506158c4915050565b870151801515610240880152925061557f915050565b60008060008060008060c087890312156158f357600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000828210156159365761593661549e565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561599c5761599c61549e565b5060010190565b60006101a08201905086825285602083015284604083015283606083015273ffffffffffffffffffffffffffffffffffffffff8084511660808401528060208501511660a0840152506040830151615a1360c084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e08501519150615a6b61016085018373ffffffffffffffffffffffffffffffffffffffff169052565b84015160ff81166101808501529050615204565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615ab757615ab761549e565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008219821115615afe57615afe61549e565b500190565b600082615b39577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea264697066735822122049177e7143d337b3e7f04027b3b94d6b6b4c178c039df6770c104796eeaf2f7b64736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5C6E CODESIZE SUB DUP1 PUSH3 0x5C6E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x7C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x5B74 PUSH3 0xFA PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x3CF ADD MSTORE DUP2 DUP2 PUSH2 0xB98 ADD MSTORE DUP2 DUP2 PUSH2 0xC8A ADD MSTORE DUP2 DUP2 PUSH2 0x11AE ADD MSTORE DUP2 DUP2 PUSH2 0x186D ADD MSTORE DUP2 DUP2 PUSH2 0x1C40 ADD MSTORE DUP2 DUP2 PUSH2 0x23B3 ADD MSTORE DUP2 DUP2 PUSH2 0x2484 ADD MSTORE DUP2 DUP2 PUSH2 0x26D7 ADD MSTORE DUP2 DUP2 PUSH2 0x29D2 ADD MSTORE DUP2 DUP2 PUSH2 0x2C33 ADD MSTORE DUP2 DUP2 PUSH2 0x32A9 ADD MSTORE DUP2 DUP2 PUSH2 0x39C5 ADD MSTORE DUP2 DUP2 PUSH2 0x3CBE ADD MSTORE PUSH2 0x3F0B ADD MSTORE PUSH2 0x5B74 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x382 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A708E92 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0xD1946DBC GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xF51E435B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0xAA4 JUMPI DUP1 PUSH4 0xF7A73840 EQ PUSH2 0xAB7 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0xACA JUMPI DUP1 PUSH4 0xFD21ECFF EQ PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0xA46 JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0xA58 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0xA91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5EED868 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xD5EED868 EQ PUSH2 0x9FA JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xA0D JUMPI DUP1 PUSH4 0xDC7C0BFF EQ PUSH2 0xA20 JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0xA33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9BF JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x9D4 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0x9E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x973 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x986 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x9AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x8E4 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x924 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x94BA89A2 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x885 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x898 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x8AB JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x84C JUMPI DUP1 PUSH4 0x8E19899E EQ PUSH2 0x85F JUMPI DUP1 PUSH4 0x94B576DE EQ PUSH2 0x872 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42B0B77C GT PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x617BA037 GT PUSH2 0x256 JUMPI DUP1 PUSH4 0x69328DEC GT PUSH2 0x230 JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x7D8 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x7EB JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x7FE JUMPI DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x617BA037 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x7B2 JUMPI DUP1 PUSH4 0x680DD47C EQ PUSH2 0x7C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x292 JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x72C JUMPI DUP1 PUSH4 0x563DD613 EQ PUSH2 0x766 JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x6BB JUMPI DUP1 PUSH4 0x4D013F03 EQ PUSH2 0x719 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x272D9072 GT PUSH2 0x325 JUMPI DUP1 PUSH4 0x3036B439 GT PUSH2 0x2FF JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x4B4 JUMPI DUP1 PUSH4 0x386497FD EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0x427DA177 EQ PUSH2 0x695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x272D9072 EQ PUSH2 0x473 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C GT PUSH2 0x361 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x3CA JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x44D JUMPI DUP1 PUSH4 0x1FE3C6F3 EQ PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x3B7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x39A PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x449F JUMP JUMPDEST PUSH2 0xAEC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3A4 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x39A PUSH2 0x3C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x452A JUMP JUMPDEST PUSH2 0xD67 JUMP JUMPDEST PUSH2 0x3F1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x45B CALLDATASIZE PUSH1 0x4 PUSH2 0x45A9 JUMP JUMPDEST PUSH2 0xF17 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x46E CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x1105 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x3A4 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0x45FB JUMP JUMPDEST PUSH2 0x1126 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x4616 JUMP JUMPDEST PUSH2 0x1305 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x4AF CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x1449 JUMP JUMPDEST PUSH2 0x675 PUSH2 0x4C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4668 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x690 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x1456 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x6A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x148A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x6B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4827 JUMP JUMPDEST PUSH2 0x14C7 JUMP JUMPDEST PUSH2 0x70A PUSH2 0x6C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x727 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x3F1 PUSH2 0x73A CALLDATASIZE PUSH1 0x4 PUSH2 0x48A9 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x167D JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x787 CALLDATASIZE PUSH1 0x4 PUSH2 0x48C4 JUMP JUMPDEST PUSH2 0x16A9 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x490E JUMP JUMPDEST PUSH2 0x17F9 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7AD CALLDATASIZE PUSH1 0x4 PUSH2 0x493C JUMP JUMPDEST PUSH2 0x19CE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x1AD1 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x498D JUMP JUMPDEST PUSH2 0x1B4D JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x7E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x49B9 JUMP JUMPDEST PUSH2 0x1B7A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x493C JUMP JUMPDEST PUSH2 0x1D99 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x42C JUMP JUMPDEST PUSH2 0x83F PUSH2 0x83A CALLDATASIZE PUSH1 0x4 PUSH2 0x45FB JUMP JUMPDEST PUSH2 0x1E46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4A66 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x85A CALLDATASIZE PUSH1 0x4 PUSH2 0x4AC9 JUMP JUMPDEST PUSH2 0x1F80 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x86D CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x210C JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x880 CALLDATASIZE PUSH1 0x4 PUSH2 0x498D JUMP JUMPDEST PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x893 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B2C JUMP JUMPDEST PUSH2 0x216E JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B9D JUMP JUMPDEST PUSH2 0x21EF JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BDF JUMP JUMPDEST PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1E JUMP JUMPDEST PUSH2 0x252A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4D38 JUMP JUMPDEST PUSH2 0x28E3 JUMP JUMPDEST PUSH2 0x8F7 PUSH2 0x8F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x291A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x70A PUSH2 0x932 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x981 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x2B49 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x994 CALLDATASIZE PUSH1 0x4 PUSH2 0x45A9 JUMP JUMPDEST PUSH2 0x2D4E JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D6B JUMP JUMPDEST PUSH2 0x2DD7 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x2E84 JUMP JUMPDEST PUSH2 0x9C7 PUSH2 0x2EB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4DAC JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4EAD JUMP JUMPDEST PUSH2 0x2FEE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x315A JUMP JUMPDEST PUSH2 0x39A PUSH2 0xA08 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x33E1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA1B CALLDATASIZE PUSH1 0x4 PUSH2 0x4616 JUMP JUMPDEST PUSH2 0x3458 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA2E CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x34F8 JUMP JUMPDEST PUSH2 0x39A PUSH2 0xA41 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x351A JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x3A4 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA66 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA9F CALLDATASIZE PUSH1 0x4 PUSH2 0x504A JUMP JUMPDEST PUSH2 0x358F JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAB2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5090 JUMP JUMPDEST PUSH2 0x376A JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x392B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAE7 CALLDATASIZE PUSH1 0x4 PUSH2 0x50EF JUMP JUMPDEST PUSH2 0x3981 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC25 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCF7 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD30 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x512E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xF09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xF1F PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xFAA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x1040 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1113 PUSH1 0x36 DUP5 PUSH2 0x3ADA JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1121 DUP3 DUP3 PUSH2 0x216E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1217 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x123B SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12D2 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x12FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13A3 JUMPI PUSH2 0x13A3 PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13B4 JUMPI PUSH2 0x13B4 PUSH2 0x5222 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x13FE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x528C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x141B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x143F SWAP2 SWAP1 PUSH2 0x52FF JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1451 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1484 SWAP1 PUSH2 0x3B14 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR AND PUSH2 0x1121 DUP3 DUP3 PUSH2 0x2D4E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x1608 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5318 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1620 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1634 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x10 DUP3 SWAP1 SHR PUSH1 0x1 AND PUSH2 0x1121 DUP3 DUP3 PUSH2 0x17F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x168E PUSH1 0x36 DUP7 PUSH2 0x3BA4 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16A0 DUP4 DUP4 DUP4 CALLER PUSH2 0x16A9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1747 JUMPI PUSH2 0x1747 PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1758 JUMPI PUSH2 0x1758 PUSH2 0x5222 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x17B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x528C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16A0 SWAP2 SWAP1 PUSH2 0x52FF JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18FA SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x19C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1AC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1AD9 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9CF5702300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x9CF57023 SWAP1 PUSH1 0x64 ADD PUSH2 0x12D2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B60 PUSH1 0x36 DUP10 PUSH2 0x3C32 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x1AC7 DUP6 DUP6 CALLER DUP7 DUP7 DUP7 DUP14 DUP14 PUSH2 0xD67 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CCD SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x13FE JUMP JUMPDEST PUSH2 0x1DA1 PUSH2 0x3CBC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1A9B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1EF7 SWAP1 PUSH2 0x53A3 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1F23 SWAP1 PUSH2 0x53A3 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1F70 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F45 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1F70 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F53 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F88 PUSH2 0x39AC JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x205F PUSH1 0x80 SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2084 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53F1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C5 SWAP2 SWAP1 PUSH2 0x5481 JUMP JUMPDEST ISZERO PUSH2 0x12FE JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x20EA DUP4 PUSH2 0x54CD JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x211C PUSH1 0x36 DUP6 PUSH2 0x3E49 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x212B DUP3 DUP3 CALLER PUSH2 0x1B7A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2147 PUSH1 0x36 DUP11 PUSH2 0x3EC9 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x2161 DUP6 DUP6 DUP6 CALLER DUP7 DUP7 DUP15 DUP15 PUSH2 0x358F JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21D0 JUMPI PUSH2 0x21D0 PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x199A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x54EF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x199A SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5526 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x231B JUMPI PUSH2 0x231B PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x232C JUMPI PUSH2 0x232C PUSH2 0x5222 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x241F SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24F1 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD30 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x558B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x276A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x278E SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x281E SWAP2 SWAP1 PUSH2 0x5481 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x28A5 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5734 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x28D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x28EB PUSH2 0x39AC JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A3C SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2B11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B35 SWAP2 SWAP1 PUSH2 0x58DA JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x2B5C JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x2B68 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2BF4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xFA1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2C31 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CEE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1121 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x199A JUMP JUMPDEST PUSH2 0x2DDF PUSH2 0x3F09 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2E7B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1484 SWAP1 PUSH2 0x4096 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2EE4 JUMPI PUSH2 0x2EE4 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2F0D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FE4 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2FC4 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH2 0x2F75 DUP6 DUP5 PUSH2 0x5924 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2F85 JUMPI PUSH2 0x2F85 PUSH2 0x593B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2FD2 JUMP JUMPDEST DUP3 PUSH2 0x2FCE DUP2 PUSH2 0x596A JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2FDC DUP2 PUSH2 0x596A JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2F13 JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2FF6 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x3065 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x12FE SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x43C6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x31F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3312 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3336 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x33A9 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x59A3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x33C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x33D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3443 PUSH1 0x36 DUP7 PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP4 SWAP1 SHR AND SWAP3 PUSH1 0xFF PUSH1 0x90 DUP5 SWAP1 SHR AND SWAP3 PUSH1 0x98 SHR AND SWAP1 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x12FE DUP5 DUP5 DUP5 DUP5 CALLER PUSH2 0x2244 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3462 PUSH2 0x3CBC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x13FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3509 PUSH1 0x36 DUP7 PUSH2 0x3BA4 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16A0 DUP4 DUP4 DUP4 PUSH2 0x1305 JUMP JUMPDEST PUSH2 0x3522 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x12D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3638 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x367D JUMPI PUSH2 0x367D PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x368E JUMPI PUSH2 0x368E PUSH2 0x5222 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x371B SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x528C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3738 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x375C SWAP2 SWAP1 PUSH2 0x52FF JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3772 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x37F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x388A JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x38F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 CALLDATALOAD DUP2 SSTORE DUP2 SWAP1 JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x90 DUP5 SWAP1 SHR AND PUSH2 0x3925 DUP4 DUP4 CALLER DUP5 PUSH2 0x19CE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3995 PUSH1 0x36 DUP9 DUP9 PUSH2 0x411A JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x2E7B DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0xAEC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A52 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x10 DUP3 SWAP1 SHR PUSH1 0xFF AND JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3B5A JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x1442 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x3B98 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x41DE JUMP JUMPDEST SWAP1 PUSH2 0x41EB JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xFFFF DUP5 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP7 SWAP1 SHR DUP2 AND SWAP1 PUSH1 0xFF PUSH1 0x90 DUP9 SWAP1 SHR AND SWAP1 DUP3 EQ ISZERO PUSH2 0x3BFA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP JUMPDEST PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP SWAP3 POP SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH1 0xA0 DUP7 SWAP1 SHR PUSH4 0xFFFFFFFF AND PUSH1 0xC0 DUP8 SWAP1 SHR PUSH1 0xFF AND DUP3 DUP1 DUP1 PUSH2 0x3CA4 DUP13 DUP13 PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x90 DUP5 SWAP1 SHR AND SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP2 SWAP15 SWAP1 SWAP14 POP SWAP1 SWAP12 POP SWAP5 SWAP10 POP SWAP3 SWAP8 POP SWAP3 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D4B SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3DB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3DDB SWAP2 SWAP1 PUSH2 0x5481 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFFFF DUP4 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND SWAP1 DUP2 EQ ISZERO PUSH2 0x3E94 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 SWAP1 SWAP5 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3EE2 DUP13 DUP13 PUSH2 0x3BA4 JUMP JUMPDEST SWAP2 SWAP15 SWAP1 SWAP14 POP SWAP1 SWAP12 PUSH1 0x98 DUP2 SWAP1 SHR PUSH4 0xFFFFFFFF AND SWAP12 POP PUSH1 0xB8 SHR PUSH1 0xFF AND SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F74 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3F98 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4004 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4028 SWAP2 SWAP1 PUSH2 0x5481 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x40DC JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x1442 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x3B98 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x4242 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH2 0xFFFF DUP8 DUP2 AND SWAP1 PUSH1 0x10 DUP10 SWAP1 SHR AND PUSH1 0x20 DUP10 SWAP1 SHR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND SWAP1 PUSH1 0x80 DUP12 SWAP1 SHR PUSH1 0x1 AND SWAP1 DUP3 EQ ISZERO PUSH2 0x4191 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP JUMPDEST PUSH2 0xFFFF SWAP5 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP14 SWAP1 SWAP14 MSTORE PUSH1 0x40 DUP1 DUP15 KECCAK256 SLOAD SWAP5 SWAP1 SWAP6 AND DUP14 MSTORE SWAP4 SWAP1 SWAP12 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP13 SWAP3 AND SWAP11 SWAP1 SWAP10 POP SWAP8 POP SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1442 DUP4 DUP4 TIMESTAMP PUSH2 0x427F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4256 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5924 JUMP JUMPDEST PUSH2 0x4260 SWAP1 DUP6 PUSH2 0x5A7F JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x212B DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5AEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4293 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5924 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x42AF JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1442 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x42E5 JUMPI PUSH1 0x0 PUSH2 0x42EA JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x42FE DUP11 DUP1 PUSH2 0x41EB JUMP JUMPDEST DUP2 PUSH2 0x430B JUMPI PUSH2 0x430B PUSH2 0x5ABC JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x431D DUP4 DUP12 PUSH2 0x41EB JUMP JUMPDEST DUP2 PUSH2 0x432A JUMPI PUSH2 0x432A PUSH2 0x5ABC JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x433A DUP7 DUP9 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x4344 SWAP2 SWAP1 PUSH2 0x5A7F JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x4358 DUP9 DUP11 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x4362 SWAP2 SWAP1 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x436C SWAP2 SWAP1 PUSH2 0x5A7F JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x4383 DUP11 DUP16 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x438D SWAP2 SWAP1 PUSH2 0x5B03 JUMP JUMPDEST PUSH2 0x43A3 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5AEB JUMP JUMPDEST PUSH2 0x43AD SWAP2 SWAP1 PUSH2 0x5AEB JUMP JUMPDEST PUSH2 0x43B7 SWAP2 SWAP1 PUSH2 0x5AEB JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x43D2 SWAP1 PUSH2 0x53A3 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x43F4 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x443A JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x440D JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x443A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x443A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x443A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x441F JUMP JUMPDEST POP PUSH2 0x4446 SWAP3 SWAP2 POP PUSH2 0x444A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x4446 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x444B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x448C DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x44B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x44C2 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x44D2 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x44E2 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x44F9 DUP2 PUSH2 0x4491 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x448C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x448C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4552 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x4569 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 POP PUSH2 0x4577 PUSH1 0x60 DUP11 ADD PUSH2 0x4507 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x458C PUSH1 0xA0 DUP11 ADD PUSH2 0x4519 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x45C7 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x45D7 DUP2 PUSH2 0x445F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x45F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x460D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1442 DUP3 PUSH2 0x4519 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x462B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4636 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x465D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1442 DUP2 PUSH2 0x445F JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x4695 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x46B9 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x46DD PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x4701 PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4725 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x473E PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x4754 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x47F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x480F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3B0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4840 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x484B DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x485B DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x487E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x488A DUP10 DUP3 DUP11 ADD PUSH2 0x47E5 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x489D SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x4507 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x48BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1442 DUP3 PUSH2 0x4507 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x48DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x48E5 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4903 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4921 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x492C DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x45D7 DUP2 PUSH2 0x4491 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4952 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x495D DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4974 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 POP PUSH2 0x4982 PUSH1 0x60 DUP7 ADD PUSH2 0x4507 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x49A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x49CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x49D9 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x49F0 DUP2 PUSH2 0x445F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4A21 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x4A05 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x4A33 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x212B PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x49FB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4AE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4AEC DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4AFC DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4B0C DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4B1C DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x44F9 DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4B4A DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4B6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3B0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4BB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4BC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4BD3 DUP6 DUP3 DUP7 ADD PUSH2 0x4B58 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4C02 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4B1C PUSH1 0x60 DUP8 ADD PUSH2 0x4507 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x4C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C48 DUP13 PUSH2 0x4481 JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4C64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C74 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B58 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4C8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C9A DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B58 JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4CC0 DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B58 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x4CD1 PUSH1 0x80 DUP15 ADD PUSH2 0x4481 JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4CE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4CF5 DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x47E5 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x4D06 PUSH1 0xC0 DUP14 ADD PUSH2 0x4507 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x448C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4D54 DUP4 PUSH2 0x4D18 JUMP JUMPDEST SWAP2 POP PUSH2 0x4D62 PUSH1 0x20 DUP5 ADD PUSH2 0x4D18 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4D80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4D8B DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4D9B DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4DFA JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4DC8 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4E58 JUMPI PUSH2 0x4E58 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4EA5 JUMPI PUSH2 0x4EA5 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4EC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EC9 DUP4 PUSH2 0x4519 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4EE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x4EFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F03 PUSH2 0x4E35 JUMP JUMPDEST PUSH2 0x4F0C DUP4 PUSH2 0x4507 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4F19 DUP5 DUP5 ADD PUSH2 0x4507 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x4F29 PUSH1 0x40 DUP5 ADD PUSH2 0x4507 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x4F3C DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4F53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4F68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4F7A JUMPI PUSH2 0x4F7A PUSH2 0x4E06 JUMP JUMPDEST PUSH2 0x4FAA DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x4E5E JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x4FC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4FFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x5009 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x5019 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x5029 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x5067 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x5072 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x4577 DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x50A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x50AF DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x50E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5102 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1442 DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x51B6 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1442 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x49FB JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x5288 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x52DE PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x5251 JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x5373 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x49FB JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x53B7 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x3B9E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x5467 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1442 DUP2 PUSH2 0x4491 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x54E5 JUMPI PUSH2 0x54E5 PUSH2 0x549E JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x16A0 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x5251 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x557F JUMPI DUP4 CALLDATALOAD PUSH2 0x5557 DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5544 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x5627 DUP2 DUP6 ADD DUP4 PUSH2 0x5251 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x5640 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x5657 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x5204 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x56F9 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x56C7 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x56F9 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5718 JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x5773 PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x5791 PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x56B3 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x57CD DUP5 DUP4 PUSH2 0x5704 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x57EC DUP6 DUP5 PUSH2 0x5704 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x5819 DUP2 DUP10 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x5836 DUP8 DUP7 PUSH2 0x49FB JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x5853 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x58AD PUSH2 0x200 DUP12 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x58C4 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x557F SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x58F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5936 JUMPI PUSH2 0x5936 PUSH2 0x549E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x599C JUMPI PUSH2 0x599C PUSH2 0x549E JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5A13 PUSH1 0xC0 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x5A6B PUSH2 0x160 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x5204 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5AB7 JUMPI PUSH2 0x5AB7 PUSH2 0x549E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5AFE JUMPI PUSH2 0x5AFE PUSH2 0x549E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5B39 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x49 OR PUSH31 0x7143D337B3E7F04027B3B94D6B6B4C178C039DF6770C104796EEAF2F7B6473 PUSH16 0x6C634300080A00330000000000000000 ","sourceMap":"202:189:62:-:0;;;928:1:87;886:43;;325:64:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3321:29:112;;;202:189:62;;14:321:124;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:124;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:124:o;:::-;202:189:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_25195":{"entryPoint":null,"id":25195,"parameterSlots":0,"returnSlots":0},"@BRIDGE_PROTOCOL_FEE_26159":{"entryPoint":null,"id":26159,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TOTAL_26169":{"entryPoint":null,"id":26169,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TO_PROTOCOL_26179":{"entryPoint":null,"id":26179,"parameterSlots":0,"returnSlots":1},"@MAX_NUMBER_RESERVES_26190":{"entryPoint":null,"id":26190,"parameterSlots":0,"returnSlots":1},"@MAX_STABLE_RATE_BORROW_SIZE_PERCENT_26149":{"entryPoint":null,"id":26149,"parameterSlots":0,"returnSlots":1},"@POOL_REVISION_25192":{"entryPoint":null,"id":25192,"parameterSlots":0,"returnSlots":0},"@_onlyBridge_25270":{"entryPoint":15548,"id":25270,"parameterSlots":0,"returnSlots":0},"@_onlyPoolAdmin_25252":{"entryPoint":16137,"id":25252,"parameterSlots":0,"returnSlots":0},"@_onlyPoolConfigurator_25234":{"entryPoint":14764,"id":25234,"parameterSlots":0,"returnSlots":0},"@backUnbacked_25370":{"entryPoint":13400,"id":25370,"parameterSlots":3,"returnSlots":1},"@borrow_24937":{"entryPoint":13281,"id":24937,"parameterSlots":1,"returnSlots":0},"@borrow_25548":{"entryPoint":8772,"id":25548,"parameterSlots":5,"returnSlots":0},"@calculateCompoundedInterest_23673":{"entryPoint":17023,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":16862,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":16962,"id":23550,"parameterSlots":2,"returnSlots":1},"@configureEModeCategory_26458":{"entryPoint":12270,"id":26458,"parameterSlots":2,"returnSlots":0},"@decodeBorrowParams_16265":{"entryPoint":null,"id":16265,"parameterSlots":2,"returnSlots":4},"@decodeLiquidationCallParams_16513":{"entryPoint":16666,"id":16513,"parameterSlots":3,"returnSlots":5},"@decodeRebalanceStableBorrowRateParams_16418":{"entryPoint":null,"id":16418,"parameterSlots":2,"returnSlots":2},"@decodeRepayParams_16316":{"entryPoint":15268,"id":16316,"parameterSlots":2,"returnSlots":3},"@decodeRepayWithPermitParams_16362":{"entryPoint":16073,"id":16362,"parameterSlots":2,"returnSlots":5},"@decodeSetUserUseReserveAsCollateralParams_16446":{"entryPoint":null,"id":16446,"parameterSlots":2,"returnSlots":2},"@decodeSupplyParams_16134":{"entryPoint":null,"id":16134,"parameterSlots":2,"returnSlots":3},"@decodeSupplyWithPermitParams_16180":{"entryPoint":15410,"id":16180,"parameterSlots":2,"returnSlots":5},"@decodeSwapBorrowRateModeParams_16390":{"entryPoint":15066,"id":16390,"parameterSlots":2,"returnSlots":2},"@decodeWithdrawParams_16225":{"entryPoint":15945,"id":16225,"parameterSlots":2,"returnSlots":2},"@deposit_26586":{"entryPoint":null,"id":26586,"parameterSlots":4,"returnSlots":0},"@dropReserve_26302":{"entryPoint":6865,"id":26302,"parameterSlots":1,"returnSlots":0},"@finalizeTransfer_26245":{"entryPoint":12634,"id":26245,"parameterSlots":6,"returnSlots":0},"@flashLoanSimple_25924":{"entryPoint":5319,"id":25924,"parameterSlots":6,"returnSlots":0},"@flashLoan_25883":{"entryPoint":9514,"id":25883,"parameterSlots":11,"returnSlots":0},"@getConfiguration_26012":{"entryPoint":null,"id":26012,"parameterSlots":1,"returnSlots":1},"@getEModeCategoryData_26473":{"entryPoint":7750,"id":26473,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_20345":{"entryPoint":15124,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":16534,"id":20309,"parameterSlots":1,"returnSlots":1},"@getReserveAddressById_26139":{"entryPoint":null,"id":26139,"parameterSlots":1,"returnSlots":1},"@getReserveData_25955":{"entryPoint":null,"id":25955,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedIncome_26043":{"entryPoint":11908,"id":26043,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedVariableDebt_26059":{"entryPoint":5206,"id":26059,"parameterSlots":1,"returnSlots":1},"@getReservesList_26126":{"entryPoint":11954,"id":26126,"parameterSlots":0,"returnSlots":1},"@getRevision_8855":{"entryPoint":null,"id":8855,"parameterSlots":0,"returnSlots":1},"@getUserAccountData_25996":{"entryPoint":10522,"id":25996,"parameterSlots":1,"returnSlots":6},"@getUserConfiguration_26027":{"entryPoint":null,"id":26027,"parameterSlots":1,"returnSlots":1},"@getUserEMode_26516":{"entryPoint":null,"id":26516,"parameterSlots":1,"returnSlots":1},"@initReserve_26284":{"entryPoint":8064,"id":26284,"parameterSlots":5,"returnSlots":0},"@initialize_25313":{"entryPoint":11081,"id":25313,"parameterSlots":1,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@liquidationCall_25141":{"entryPoint":14721,"id":25141,"parameterSlots":2,"returnSlots":0},"@liquidationCall_25812":{"entryPoint":2796,"id":25812,"parameterSlots":5,"returnSlots":0},"@mintToTreasury_25940":{"entryPoint":8687,"id":25940,"parameterSlots":2,"returnSlots":0},"@mintUnbacked_25343":{"entryPoint":7577,"id":25343,"parameterSlots":4,"returnSlots":0},"@rayMul_23780":{"entryPoint":16875,"id":23780,"parameterSlots":2,"returnSlots":1},"@rebalanceStableBorrowRate_25083":{"entryPoint":5258,"id":25083,"parameterSlots":1,"returnSlots":0},"@rebalanceStableBorrowRate_25737":{"entryPoint":11598,"id":25737,"parameterSlots":2,"returnSlots":0},"@repayWithATokens_25037":{"entryPoint":13560,"id":25037,"parameterSlots":1,"returnSlots":1},"@repayWithATokens_25690":{"entryPoint":4869,"id":25690,"parameterSlots":3,"returnSlots":1},"@repayWithPermit_25009":{"entryPoint":8499,"id":25009,"parameterSlots":3,"returnSlots":1},"@repayWithPermit_25654":{"entryPoint":13711,"id":25654,"parameterSlots":8,"returnSlots":1},"@repay_24967":{"entryPoint":5757,"id":24967,"parameterSlots":1,"returnSlots":1},"@repay_25584":{"entryPoint":5801,"id":25584,"parameterSlots":4,"returnSlots":1},"@rescueTokens_26555":{"entryPoint":11735,"id":26555,"parameterSlots":3,"returnSlots":0},"@resetIsolationModeTotalDebt_26533":{"entryPoint":13594,"id":26533,"parameterSlots":1,"returnSlots":0},"@setConfiguration_26397":{"entryPoint":14186,"id":26397,"parameterSlots":2,"returnSlots":0},"@setReserveInterestRateStrategyAddress_26349":{"entryPoint":3863,"id":26349,"parameterSlots":2,"returnSlots":0},"@setUserEMode_26502":{"entryPoint":4390,"id":26502,"parameterSlots":1,"returnSlots":0},"@setUserUseReserveAsCollateral_25106":{"entryPoint":5697,"id":25106,"parameterSlots":1,"returnSlots":0},"@setUserUseReserveAsCollateral_25769":{"entryPoint":6137,"id":25769,"parameterSlots":2,"returnSlots":0},"@supplyWithPermit_24879":{"entryPoint":6989,"id":24879,"parameterSlots":3,"returnSlots":0},"@supplyWithPermit_25457":{"entryPoint":3431,"id":25457,"parameterSlots":8,"returnSlots":0},"@supply_24839":{"entryPoint":14635,"id":24839,"parameterSlots":1,"returnSlots":0},"@supply_25401":{"entryPoint":6606,"id":25401,"parameterSlots":4,"returnSlots":0},"@swapBorrowRateMode_25060":{"entryPoint":4357,"id":25060,"parameterSlots":1,"returnSlots":0},"@swapBorrowRateMode_25717":{"entryPoint":8558,"id":25717,"parameterSlots":2,"returnSlots":0},"@updateBridgeProtocolFee_26411":{"entryPoint":5193,"id":26411,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiums_26431":{"entryPoint":10467,"id":26431,"parameterSlots":2,"returnSlots":0},"@withdraw_24906":{"entryPoint":8460,"id":24906,"parameterSlots":1,"returnSlots":1},"@withdraw_25496":{"entryPoint":7034,"id":25496,"parameterSlots":3,"returnSlots":1},"abi_decode_address":{"entryPoint":17537,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":19288,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_calldata":{"entryPoint":18405,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":17995,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":20753,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":17833,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address":{"entryPoint":19145,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool":{"entryPoint":17567,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256":{"entryPoint":20453,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":19819,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16":{"entryPoint":18471,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16":{"entryPoint":19486,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_addresst_bool":{"entryPoint":18702,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr":{"entryPoint":20624,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":19244,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_address":{"entryPoint":18873,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16":{"entryPoint":18748,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":17706,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":17942,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_uint256t_address":{"entryPoint":18628,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":20554,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address":{"entryPoint":19423,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":19357,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":21633,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":17890,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_bytes32":{"entryPoint":20719,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32t_bytes32t_bytes32":{"entryPoint":18829,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128t_uint128":{"entryPoint":19768,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint16":{"entryPoint":18601,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":21247,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":22746,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint8":{"entryPoint":17915,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr":{"entryPoint":20141,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint128":{"entryPoint":19736,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16":{"entryPoint":17671,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":17689,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn":{"entryPoint":22195,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":22276,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_InterestRateMode":{"entryPoint":21073,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":18939,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ReserveConfigurationMap":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":19884,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed":{"entryPoint":21798,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed":{"entryPoint":20782,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed":{"entryPoint":22947,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed":{"entryPoint":21899,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed":{"entryPoint":22324,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed":{"entryPoint":21489,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed":{"entryPoint":21132,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":21007,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed":{"entryPoint":19046,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed":{"entryPoint":18024,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed":{"entryPoint":21272,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":21743,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_uint128":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":20062,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_5657":{"entryPoint":20021,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":23275,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":23299,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":23167,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":22820,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":21411,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint16":{"entryPoint":21709,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":22890,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":21662,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":23228,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":21026,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":22843,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":19974,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_revert_address":{"entryPoint":17503,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":17553,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:51039:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:124"},"nodeType":"YulFunctionCall","src":"148:12:124"},"nodeType":"YulExpressionStatement","src":"148:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:124"},"nodeType":"YulFunctionCall","src":"89:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:124"},"nodeType":"YulFunctionCall","src":"79:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:124"},"nodeType":"YulFunctionCall","src":"72:73:124"},"nodeType":"YulIf","src":"69:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:124","type":""}],"src":"14:154:124"},{"body":{"nodeType":"YulBlock","src":"222:85:124","statements":[{"nodeType":"YulAssignment","src":"232:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"254:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:124"},"nodeType":"YulFunctionCall","src":"241:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"295:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"270:24:124"},"nodeType":"YulFunctionCall","src":"270:31:124"},"nodeType":"YulExpressionStatement","src":"270:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"201:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"212:5:124","type":""}],"src":"173:134:124"},{"body":{"nodeType":"YulBlock","src":"354:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:124"},"nodeType":"YulFunctionCall","src":"410:12:124"},"nodeType":"YulExpressionStatement","src":"410:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"377:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"398:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"391:6:124"},"nodeType":"YulFunctionCall","src":"391:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"384:6:124"},"nodeType":"YulFunctionCall","src":"384:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"374:2:124"},"nodeType":"YulFunctionCall","src":"374:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"367:6:124"},"nodeType":"YulFunctionCall","src":"367:40:124"},"nodeType":"YulIf","src":"364:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"343:5:124","type":""}],"src":"312:118:124"},{"body":{"nodeType":"YulBlock","src":"570:599:124","statements":[{"body":{"nodeType":"YulBlock","src":"617:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"626:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"629:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"619:6:124"},"nodeType":"YulFunctionCall","src":"619:12:124"},"nodeType":"YulExpressionStatement","src":"619:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"591:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"600:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"587:3:124"},"nodeType":"YulFunctionCall","src":"587:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"612:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"583:3:124"},"nodeType":"YulFunctionCall","src":"583:33:124"},"nodeType":"YulIf","src":"580:53:124"},{"nodeType":"YulVariableDeclaration","src":"642:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"668:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"655:12:124"},"nodeType":"YulFunctionCall","src":"655:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"646:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"687:24:124"},"nodeType":"YulFunctionCall","src":"687:31:124"},"nodeType":"YulExpressionStatement","src":"687:31:124"},{"nodeType":"YulAssignment","src":"727:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"737:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"727:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"751:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"783:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"794:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"779:3:124"},"nodeType":"YulFunctionCall","src":"779:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"766:12:124"},"nodeType":"YulFunctionCall","src":"766:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"755:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"832:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"807:24:124"},"nodeType":"YulFunctionCall","src":"807:33:124"},"nodeType":"YulExpressionStatement","src":"807:33:124"},{"nodeType":"YulAssignment","src":"849:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"859:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"849:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"875:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"907:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"918:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"903:3:124"},"nodeType":"YulFunctionCall","src":"903:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"890:12:124"},"nodeType":"YulFunctionCall","src":"890:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"879:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"956:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"931:24:124"},"nodeType":"YulFunctionCall","src":"931:33:124"},"nodeType":"YulExpressionStatement","src":"931:33:124"},{"nodeType":"YulAssignment","src":"973:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"983:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"973:6:124"}]},{"nodeType":"YulAssignment","src":"999:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1026:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1022:3:124"},"nodeType":"YulFunctionCall","src":"1022:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1009:12:124"},"nodeType":"YulFunctionCall","src":"1009:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"999:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1050:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1082:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1093:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1078:3:124"},"nodeType":"YulFunctionCall","src":"1078:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1065:12:124"},"nodeType":"YulFunctionCall","src":"1065:33:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"1054:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"1129:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1107:21:124"},"nodeType":"YulFunctionCall","src":"1107:30:124"},"nodeType":"YulExpressionStatement","src":"1107:30:124"},{"nodeType":"YulAssignment","src":"1146:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"1156:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1146:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"504:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"515:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"527:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"535:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"543:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"551:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"559:6:124","type":""}],"src":"435:734:124"},{"body":{"nodeType":"YulBlock","src":"1275:76:124","statements":[{"nodeType":"YulAssignment","src":"1285:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1297:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1293:3:124"},"nodeType":"YulFunctionCall","src":"1293:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1285:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1327:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1338:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:124"},"nodeType":"YulFunctionCall","src":"1320:25:124"},"nodeType":"YulExpressionStatement","src":"1320:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1244:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1255:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1266:4:124","type":""}],"src":"1174:177:124"},{"body":{"nodeType":"YulBlock","src":"1404:111:124","statements":[{"nodeType":"YulAssignment","src":"1414:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1436:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1423:12:124"},"nodeType":"YulFunctionCall","src":"1423:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1414:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1493:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1502:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1505:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1495:6:124"},"nodeType":"YulFunctionCall","src":"1495:12:124"},"nodeType":"YulExpressionStatement","src":"1495:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1476:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1483:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1472:3:124"},"nodeType":"YulFunctionCall","src":"1472:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1462:2:124"},"nodeType":"YulFunctionCall","src":"1462:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1455:6:124"},"nodeType":"YulFunctionCall","src":"1455:37:124"},"nodeType":"YulIf","src":"1452:57:124"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1383:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1394:5:124","type":""}],"src":"1356:159:124"},{"body":{"nodeType":"YulBlock","src":"1567:109:124","statements":[{"nodeType":"YulAssignment","src":"1577:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1599:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1586:12:124"},"nodeType":"YulFunctionCall","src":"1586:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1577:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1654:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1663:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1666:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1656:6:124"},"nodeType":"YulFunctionCall","src":"1656:12:124"},"nodeType":"YulExpressionStatement","src":"1656:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1628:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1639:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1646:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1635:3:124"},"nodeType":"YulFunctionCall","src":"1635:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1625:2:124"},"nodeType":"YulFunctionCall","src":"1625:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1618:6:124"},"nodeType":"YulFunctionCall","src":"1618:35:124"},"nodeType":"YulIf","src":"1615:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1546:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1557:5:124","type":""}],"src":"1520:156:124"},{"body":{"nodeType":"YulBlock","src":"1867:621:124","statements":[{"body":{"nodeType":"YulBlock","src":"1914:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1916:6:124"},"nodeType":"YulFunctionCall","src":"1916:12:124"},"nodeType":"YulExpressionStatement","src":"1916:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1888:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1897:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1884:3:124"},"nodeType":"YulFunctionCall","src":"1884:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1909:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1880:3:124"},"nodeType":"YulFunctionCall","src":"1880:33:124"},"nodeType":"YulIf","src":"1877:53:124"},{"nodeType":"YulVariableDeclaration","src":"1939:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1965:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1952:12:124"},"nodeType":"YulFunctionCall","src":"1952:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1943:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2009:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1984:24:124"},"nodeType":"YulFunctionCall","src":"1984:31:124"},"nodeType":"YulExpressionStatement","src":"1984:31:124"},{"nodeType":"YulAssignment","src":"2024:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2034:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2024:6:124"}]},{"nodeType":"YulAssignment","src":"2048:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2086:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2071:3:124"},"nodeType":"YulFunctionCall","src":"2071:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2058:12:124"},"nodeType":"YulFunctionCall","src":"2058:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2048:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2099:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2131:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2142:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2127:3:124"},"nodeType":"YulFunctionCall","src":"2127:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2114:12:124"},"nodeType":"YulFunctionCall","src":"2114:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2103:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2180:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2155:24:124"},"nodeType":"YulFunctionCall","src":"2155:33:124"},"nodeType":"YulExpressionStatement","src":"2155:33:124"},{"nodeType":"YulAssignment","src":"2197:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2207:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2197:6:124"}]},{"nodeType":"YulAssignment","src":"2223:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2255:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2266:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2251:3:124"},"nodeType":"YulFunctionCall","src":"2251:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"2233:17:124"},"nodeType":"YulFunctionCall","src":"2233:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2223:6:124"}]},{"nodeType":"YulAssignment","src":"2279:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2306:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2317:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2302:3:124"},"nodeType":"YulFunctionCall","src":"2302:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2289:12:124"},"nodeType":"YulFunctionCall","src":"2289:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2279:6:124"}]},{"nodeType":"YulAssignment","src":"2331:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2373:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2358:3:124"},"nodeType":"YulFunctionCall","src":"2358:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2341:16:124"},"nodeType":"YulFunctionCall","src":"2341:37:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2331:6:124"}]},{"nodeType":"YulAssignment","src":"2387:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2414:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2425:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2410:3:124"},"nodeType":"YulFunctionCall","src":"2410:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2397:12:124"},"nodeType":"YulFunctionCall","src":"2397:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2387:6:124"}]},{"nodeType":"YulAssignment","src":"2439:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2477:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:124"},"nodeType":"YulFunctionCall","src":"2462:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2449:12:124"},"nodeType":"YulFunctionCall","src":"2449:33:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"2439:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1788:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1800:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1808:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1816:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1824:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1832:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1840:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1848:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1856:6:124","type":""}],"src":"1681:807:124"},{"body":{"nodeType":"YulBlock","src":"2625:125:124","statements":[{"nodeType":"YulAssignment","src":"2635:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2647:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:124"},"nodeType":"YulFunctionCall","src":"2643:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2635:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2677:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2692:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2700:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2688:3:124"},"nodeType":"YulFunctionCall","src":"2688:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2670:6:124"},"nodeType":"YulFunctionCall","src":"2670:74:124"},"nodeType":"YulExpressionStatement","src":"2670:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2594:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2605:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2616:4:124","type":""}],"src":"2493:257:124"},{"body":{"nodeType":"YulBlock","src":"2799:75:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2816:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2825:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2832:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2821:3:124"},"nodeType":"YulFunctionCall","src":"2821:46:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2809:6:124"},"nodeType":"YulFunctionCall","src":"2809:59:124"},"nodeType":"YulExpressionStatement","src":"2809:59:124"}]},"name":"abi_encode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2783:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2790:3:124","type":""}],"src":"2755:119:124"},{"body":{"nodeType":"YulBlock","src":"2980:117:124","statements":[{"nodeType":"YulAssignment","src":"2990:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3002:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3013:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2998:3:124"},"nodeType":"YulFunctionCall","src":"2998:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2990:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3032:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3047:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3055:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3043:3:124"},"nodeType":"YulFunctionCall","src":"3043:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3025:6:124"},"nodeType":"YulFunctionCall","src":"3025:66:124"},"nodeType":"YulExpressionStatement","src":"3025:66:124"}]},"name":"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2949:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2960:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2971:4:124","type":""}],"src":"2879:218:124"},{"body":{"nodeType":"YulBlock","src":"3189:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"3235:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3244:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3247:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3237:6:124"},"nodeType":"YulFunctionCall","src":"3237:12:124"},"nodeType":"YulExpressionStatement","src":"3237:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3210:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3219:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3206:3:124"},"nodeType":"YulFunctionCall","src":"3206:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3231:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3202:3:124"},"nodeType":"YulFunctionCall","src":"3202:32:124"},"nodeType":"YulIf","src":"3199:52:124"},{"nodeType":"YulVariableDeclaration","src":"3260:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3273:12:124"},"nodeType":"YulFunctionCall","src":"3273:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3264:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3330:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3305:24:124"},"nodeType":"YulFunctionCall","src":"3305:31:124"},"nodeType":"YulExpressionStatement","src":"3305:31:124"},{"nodeType":"YulAssignment","src":"3345:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3355:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3345:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3369:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3412:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3397:3:124"},"nodeType":"YulFunctionCall","src":"3397:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3384:12:124"},"nodeType":"YulFunctionCall","src":"3384:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3373:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3450:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3425:24:124"},"nodeType":"YulFunctionCall","src":"3425:33:124"},"nodeType":"YulExpressionStatement","src":"3425:33:124"},{"nodeType":"YulAssignment","src":"3467:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3477:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3467:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3147:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3158:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3170:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3178:6:124","type":""}],"src":"3102:388:124"},{"body":{"nodeType":"YulBlock","src":"3565:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"3611:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3620:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3623:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3613:6:124"},"nodeType":"YulFunctionCall","src":"3613:12:124"},"nodeType":"YulExpressionStatement","src":"3613:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3586:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3595:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3582:3:124"},"nodeType":"YulFunctionCall","src":"3582:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3607:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3578:3:124"},"nodeType":"YulFunctionCall","src":"3578:32:124"},"nodeType":"YulIf","src":"3575:52:124"},{"nodeType":"YulAssignment","src":"3636:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3659:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3646:12:124"},"nodeType":"YulFunctionCall","src":"3646:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3636:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3531:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3542:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3554:6:124","type":""}],"src":"3495:180:124"},{"body":{"nodeType":"YulBlock","src":"3748:114:124","statements":[{"body":{"nodeType":"YulBlock","src":"3794:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3803:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3806:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3796:6:124"},"nodeType":"YulFunctionCall","src":"3796:12:124"},"nodeType":"YulExpressionStatement","src":"3796:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3769:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3778:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3765:3:124"},"nodeType":"YulFunctionCall","src":"3765:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3790:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3761:3:124"},"nodeType":"YulFunctionCall","src":"3761:32:124"},"nodeType":"YulIf","src":"3758:52:124"},{"nodeType":"YulAssignment","src":"3819:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3846:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3829:16:124"},"nodeType":"YulFunctionCall","src":"3829:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3819:6:124"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3714:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3725:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3737:6:124","type":""}],"src":"3680:182:124"},{"body":{"nodeType":"YulBlock","src":"3971:279:124","statements":[{"body":{"nodeType":"YulBlock","src":"4017:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4026:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4029:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4019:6:124"},"nodeType":"YulFunctionCall","src":"4019:12:124"},"nodeType":"YulExpressionStatement","src":"4019:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3992:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4001:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3988:3:124"},"nodeType":"YulFunctionCall","src":"3988:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4013:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3984:3:124"},"nodeType":"YulFunctionCall","src":"3984:32:124"},"nodeType":"YulIf","src":"3981:52:124"},{"nodeType":"YulVariableDeclaration","src":"4042:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4068:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4055:12:124"},"nodeType":"YulFunctionCall","src":"4055:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4046:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4112:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4087:24:124"},"nodeType":"YulFunctionCall","src":"4087:31:124"},"nodeType":"YulExpressionStatement","src":"4087:31:124"},{"nodeType":"YulAssignment","src":"4127:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4137:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4127:6:124"}]},{"nodeType":"YulAssignment","src":"4151:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4178:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4189:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4174:3:124"},"nodeType":"YulFunctionCall","src":"4174:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4161:12:124"},"nodeType":"YulFunctionCall","src":"4161:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4151:6:124"}]},{"nodeType":"YulAssignment","src":"4202:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4229:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4240:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4225:3:124"},"nodeType":"YulFunctionCall","src":"4225:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4212:12:124"},"nodeType":"YulFunctionCall","src":"4212:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4202:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3921:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3932:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3944:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3952:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3960:6:124","type":""}],"src":"3867:383:124"},{"body":{"nodeType":"YulBlock","src":"4325:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"4371:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4380:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4383:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4373:6:124"},"nodeType":"YulFunctionCall","src":"4373:12:124"},"nodeType":"YulExpressionStatement","src":"4373:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4346:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4355:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4342:3:124"},"nodeType":"YulFunctionCall","src":"4342:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4367:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4338:3:124"},"nodeType":"YulFunctionCall","src":"4338:32:124"},"nodeType":"YulIf","src":"4335:52:124"},{"nodeType":"YulAssignment","src":"4396:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4419:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4406:12:124"},"nodeType":"YulFunctionCall","src":"4406:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4396:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4291:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4302:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4314:6:124","type":""}],"src":"4255:180:124"},{"body":{"nodeType":"YulBlock","src":"4510:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"4556:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4565:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4568:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4558:6:124"},"nodeType":"YulFunctionCall","src":"4558:12:124"},"nodeType":"YulExpressionStatement","src":"4558:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4531:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4540:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4527:3:124"},"nodeType":"YulFunctionCall","src":"4527:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4552:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4523:3:124"},"nodeType":"YulFunctionCall","src":"4523:32:124"},"nodeType":"YulIf","src":"4520:52:124"},{"nodeType":"YulVariableDeclaration","src":"4581:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4607:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4594:12:124"},"nodeType":"YulFunctionCall","src":"4594:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4585:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4651:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4626:24:124"},"nodeType":"YulFunctionCall","src":"4626:31:124"},"nodeType":"YulExpressionStatement","src":"4626:31:124"},{"nodeType":"YulAssignment","src":"4666:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4676:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4666:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4476:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4487:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4499:6:124","type":""}],"src":"4440:247:124"},{"body":{"nodeType":"YulBlock","src":"4759:29:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4768:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4779:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4773:5:124"},"nodeType":"YulFunctionCall","src":"4773:12:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4761:6:124"},"nodeType":"YulFunctionCall","src":"4761:25:124"},"nodeType":"YulExpressionStatement","src":"4761:25:124"}]},"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4743:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4750:3:124","type":""}],"src":"4692:96:124"},{"body":{"nodeType":"YulBlock","src":"4836:53:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4853:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4862:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4869:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4858:3:124"},"nodeType":"YulFunctionCall","src":"4858:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4846:6:124"},"nodeType":"YulFunctionCall","src":"4846:37:124"},"nodeType":"YulExpressionStatement","src":"4846:37:124"}]},"name":"abi_encode_uint40","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4820:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4827:3:124","type":""}],"src":"4793:96:124"},{"body":{"nodeType":"YulBlock","src":"4937:47:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4954:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4963:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4970:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4959:3:124"},"nodeType":"YulFunctionCall","src":"4959:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4947:6:124"},"nodeType":"YulFunctionCall","src":"4947:31:124"},"nodeType":"YulExpressionStatement","src":"4947:31:124"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4921:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4928:3:124","type":""}],"src":"4894:90:124"},{"body":{"nodeType":"YulBlock","src":"5033:83:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5050:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5059:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5066:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5055:3:124"},"nodeType":"YulFunctionCall","src":"5055:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5043:6:124"},"nodeType":"YulFunctionCall","src":"5043:67:124"},"nodeType":"YulExpressionStatement","src":"5043:67:124"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5017:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5024:3:124","type":""}],"src":"4989:127:124"},{"body":{"nodeType":"YulBlock","src":"5282:1948:124","statements":[{"nodeType":"YulAssignment","src":"5292:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5304:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5315:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5300:3:124"},"nodeType":"YulFunctionCall","src":"5300:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5292:4:124"}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5376:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5370:5:124"},"nodeType":"YulFunctionCall","src":"5370:13:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5385:9:124"}],"functionName":{"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulIdentifier","src":"5328:41:124"},"nodeType":"YulFunctionCall","src":"5328:67:124"},"nodeType":"YulExpressionStatement","src":"5328:67:124"},{"nodeType":"YulVariableDeclaration","src":"5404:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5434:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5442:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5430:3:124"},"nodeType":"YulFunctionCall","src":"5430:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5424:5:124"},"nodeType":"YulFunctionCall","src":"5424:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5408:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5476:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5494:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5505:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5490:3:124"},"nodeType":"YulFunctionCall","src":"5490:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5457:18:124"},"nodeType":"YulFunctionCall","src":"5457:54:124"},"nodeType":"YulExpressionStatement","src":"5457:54:124"},{"nodeType":"YulVariableDeclaration","src":"5520:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5552:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5560:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5548:3:124"},"nodeType":"YulFunctionCall","src":"5548:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5542:5:124"},"nodeType":"YulFunctionCall","src":"5542:24:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"5524:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"5594:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5614:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5625:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5610:3:124"},"nodeType":"YulFunctionCall","src":"5610:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5575:18:124"},"nodeType":"YulFunctionCall","src":"5575:56:124"},"nodeType":"YulExpressionStatement","src":"5575:56:124"},{"nodeType":"YulVariableDeclaration","src":"5640:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5672:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5680:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5668:3:124"},"nodeType":"YulFunctionCall","src":"5668:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5662:5:124"},"nodeType":"YulFunctionCall","src":"5662:24:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"5644:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"5714:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5734:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5745:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5730:3:124"},"nodeType":"YulFunctionCall","src":"5730:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5695:18:124"},"nodeType":"YulFunctionCall","src":"5695:56:124"},"nodeType":"YulExpressionStatement","src":"5695:56:124"},{"nodeType":"YulVariableDeclaration","src":"5760:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5792:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5800:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5788:3:124"},"nodeType":"YulFunctionCall","src":"5788:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5782:5:124"},"nodeType":"YulFunctionCall","src":"5782:24:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"5764:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"5834:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5854:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5865:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5850:3:124"},"nodeType":"YulFunctionCall","src":"5850:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5815:18:124"},"nodeType":"YulFunctionCall","src":"5815:56:124"},"nodeType":"YulExpressionStatement","src":"5815:56:124"},{"nodeType":"YulVariableDeclaration","src":"5880:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5912:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5920:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5908:3:124"},"nodeType":"YulFunctionCall","src":"5908:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5902:5:124"},"nodeType":"YulFunctionCall","src":"5902:24:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"5884:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"5954:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5974:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5985:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5970:3:124"},"nodeType":"YulFunctionCall","src":"5970:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5935:18:124"},"nodeType":"YulFunctionCall","src":"5935:56:124"},"nodeType":"YulExpressionStatement","src":"5935:56:124"},{"nodeType":"YulVariableDeclaration","src":"6000:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6032:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6040:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6028:3:124"},"nodeType":"YulFunctionCall","src":"6028:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6022:5:124"},"nodeType":"YulFunctionCall","src":"6022:24:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"6004:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"6073:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6093:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6104:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6089:3:124"},"nodeType":"YulFunctionCall","src":"6089:20:124"}],"functionName":{"name":"abi_encode_uint40","nodeType":"YulIdentifier","src":"6055:17:124"},"nodeType":"YulFunctionCall","src":"6055:55:124"},"nodeType":"YulExpressionStatement","src":"6055:55:124"},{"nodeType":"YulVariableDeclaration","src":"6119:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6151:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6159:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6147:3:124"},"nodeType":"YulFunctionCall","src":"6147:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6141:5:124"},"nodeType":"YulFunctionCall","src":"6141:24:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"6123:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"6192:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6212:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6223:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6208:3:124"},"nodeType":"YulFunctionCall","src":"6208:20:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"6174:17:124"},"nodeType":"YulFunctionCall","src":"6174:55:124"},"nodeType":"YulExpressionStatement","src":"6174:55:124"},{"nodeType":"YulVariableDeclaration","src":"6238:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6248:6:124","type":"","value":"0x0100"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6242:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6263:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6295:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6291:3:124"},"nodeType":"YulFunctionCall","src":"6291:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6285:5:124"},"nodeType":"YulFunctionCall","src":"6285:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"6267:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"6335:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6355:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6366:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6351:3:124"},"nodeType":"YulFunctionCall","src":"6351:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6316:18:124"},"nodeType":"YulFunctionCall","src":"6316:54:124"},"nodeType":"YulExpressionStatement","src":"6316:54:124"},{"nodeType":"YulVariableDeclaration","src":"6379:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6389:6:124","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6383:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6404:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6436:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6444:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6432:3:124"},"nodeType":"YulFunctionCall","src":"6432:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6426:5:124"},"nodeType":"YulFunctionCall","src":"6426:22:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"6408:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"6476:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6496:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6507:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6492:3:124"},"nodeType":"YulFunctionCall","src":"6492:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6457:18:124"},"nodeType":"YulFunctionCall","src":"6457:54:124"},"nodeType":"YulExpressionStatement","src":"6457:54:124"},{"nodeType":"YulVariableDeclaration","src":"6520:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6530:6:124","type":"","value":"0x0140"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6524:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6545:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6577:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6585:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6573:3:124"},"nodeType":"YulFunctionCall","src":"6573:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6567:5:124"},"nodeType":"YulFunctionCall","src":"6567:22:124"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"6549:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"6617:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6637:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6648:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6633:3:124"},"nodeType":"YulFunctionCall","src":"6633:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6598:18:124"},"nodeType":"YulFunctionCall","src":"6598:54:124"},"nodeType":"YulExpressionStatement","src":"6598:54:124"},{"nodeType":"YulVariableDeclaration","src":"6661:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6671:6:124","type":"","value":"0x0160"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6665:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6686:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6719:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6727:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6715:3:124"},"nodeType":"YulFunctionCall","src":"6715:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6709:5:124"},"nodeType":"YulFunctionCall","src":"6709:22:124"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"6690:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"6759:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6780:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6791:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6776:3:124"},"nodeType":"YulFunctionCall","src":"6776:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6740:18:124"},"nodeType":"YulFunctionCall","src":"6740:55:124"},"nodeType":"YulExpressionStatement","src":"6740:55:124"},{"nodeType":"YulVariableDeclaration","src":"6804:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6814:6:124","type":"","value":"0x0180"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6808:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6829:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6862:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6870:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6858:3:124"},"nodeType":"YulFunctionCall","src":"6858:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6852:5:124"},"nodeType":"YulFunctionCall","src":"6852:22:124"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"6833:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"6902:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6923:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6934:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6919:3:124"},"nodeType":"YulFunctionCall","src":"6919:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6883:18:124"},"nodeType":"YulFunctionCall","src":"6883:55:124"},"nodeType":"YulExpressionStatement","src":"6883:55:124"},{"nodeType":"YulVariableDeclaration","src":"6947:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6957:6:124","type":"","value":"0x01a0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6951:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6972:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7005:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"7013:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7001:3:124"},"nodeType":"YulFunctionCall","src":"7001:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6995:5:124"},"nodeType":"YulFunctionCall","src":"6995:22:124"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"6976:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"7045:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7066:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"7077:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7062:3:124"},"nodeType":"YulFunctionCall","src":"7062:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"7026:18:124"},"nodeType":"YulFunctionCall","src":"7026:55:124"},"nodeType":"YulExpressionStatement","src":"7026:55:124"},{"nodeType":"YulVariableDeclaration","src":"7090:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7100:6:124","type":"","value":"0x01c0"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"7094:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7115:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7148:6:124"},{"name":"_7","nodeType":"YulIdentifier","src":"7156:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7144:3:124"},"nodeType":"YulFunctionCall","src":"7144:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7138:5:124"},"nodeType":"YulFunctionCall","src":"7138:22:124"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"7119:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"7188:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7209:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"7220:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7205:3:124"},"nodeType":"YulFunctionCall","src":"7205:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"7169:18:124"},"nodeType":"YulFunctionCall","src":"7169:55:124"},"nodeType":"YulExpressionStatement","src":"7169:55:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5251:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5262:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5273:4:124","type":""}],"src":"5121:2109:124"},{"body":{"nodeType":"YulBlock","src":"7307:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"7356:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7365:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7368:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7358:6:124"},"nodeType":"YulFunctionCall","src":"7358:12:124"},"nodeType":"YulExpressionStatement","src":"7358:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7335:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7343:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7331:3:124"},"nodeType":"YulFunctionCall","src":"7331:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7350:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7327:3:124"},"nodeType":"YulFunctionCall","src":"7327:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7320:6:124"},"nodeType":"YulFunctionCall","src":"7320:35:124"},"nodeType":"YulIf","src":"7317:55:124"},{"nodeType":"YulAssignment","src":"7381:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7404:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7391:12:124"},"nodeType":"YulFunctionCall","src":"7391:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7381:6:124"}]},{"body":{"nodeType":"YulBlock","src":"7454:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7463:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7466:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7456:6:124"},"nodeType":"YulFunctionCall","src":"7456:12:124"},"nodeType":"YulExpressionStatement","src":"7456:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7426:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7434:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7423:2:124"},"nodeType":"YulFunctionCall","src":"7423:30:124"},"nodeType":"YulIf","src":"7420:50:124"},{"nodeType":"YulAssignment","src":"7479:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7495:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7503:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7491:3:124"},"nodeType":"YulFunctionCall","src":"7491:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7479:8:124"}]},{"body":{"nodeType":"YulBlock","src":"7560:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7569:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7572:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7562:6:124"},"nodeType":"YulFunctionCall","src":"7562:12:124"},"nodeType":"YulExpressionStatement","src":"7562:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7531:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"7539:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7527:3:124"},"nodeType":"YulFunctionCall","src":"7527:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"7548:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7523:3:124"},"nodeType":"YulFunctionCall","src":"7523:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"7555:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7520:2:124"},"nodeType":"YulFunctionCall","src":"7520:39:124"},"nodeType":"YulIf","src":"7517:59:124"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7270:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7278:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7286:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7296:6:124","type":""}],"src":"7235:347:124"},{"body":{"nodeType":"YulBlock","src":"7743:671:124","statements":[{"body":{"nodeType":"YulBlock","src":"7790:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7799:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7802:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7792:6:124"},"nodeType":"YulFunctionCall","src":"7792:12:124"},"nodeType":"YulExpressionStatement","src":"7792:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7764:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7773:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7760:3:124"},"nodeType":"YulFunctionCall","src":"7760:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7785:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7756:3:124"},"nodeType":"YulFunctionCall","src":"7756:33:124"},"nodeType":"YulIf","src":"7753:53:124"},{"nodeType":"YulVariableDeclaration","src":"7815:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7841:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7828:12:124"},"nodeType":"YulFunctionCall","src":"7828:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7819:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7885:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7860:24:124"},"nodeType":"YulFunctionCall","src":"7860:31:124"},"nodeType":"YulExpressionStatement","src":"7860:31:124"},{"nodeType":"YulAssignment","src":"7900:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7910:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7900:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7924:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7956:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7967:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7952:3:124"},"nodeType":"YulFunctionCall","src":"7952:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7939:12:124"},"nodeType":"YulFunctionCall","src":"7939:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7928:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8005:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7980:24:124"},"nodeType":"YulFunctionCall","src":"7980:33:124"},"nodeType":"YulExpressionStatement","src":"7980:33:124"},{"nodeType":"YulAssignment","src":"8022:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8032:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8022:6:124"}]},{"nodeType":"YulAssignment","src":"8048:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8086:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8071:3:124"},"nodeType":"YulFunctionCall","src":"8071:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8058:12:124"},"nodeType":"YulFunctionCall","src":"8058:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8048:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8099:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8130:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8141:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8126:3:124"},"nodeType":"YulFunctionCall","src":"8126:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8113:12:124"},"nodeType":"YulFunctionCall","src":"8113:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8103:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8190:6:124"},"nodeType":"YulFunctionCall","src":"8190:12:124"},"nodeType":"YulExpressionStatement","src":"8190:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8160:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8168:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8157:2:124"},"nodeType":"YulFunctionCall","src":"8157:30:124"},"nodeType":"YulIf","src":"8154:50:124"},{"nodeType":"YulVariableDeclaration","src":"8213:84:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8269:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"8280:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8265:3:124"},"nodeType":"YulFunctionCall","src":"8265:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8289:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8239:25:124"},"nodeType":"YulFunctionCall","src":"8239:58:124"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"8217:8:124","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"8227:8:124","type":""}]},{"nodeType":"YulAssignment","src":"8306:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"8316:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8306:6:124"}]},{"nodeType":"YulAssignment","src":"8333:18:124","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"8343:8:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8333:6:124"}]},{"nodeType":"YulAssignment","src":"8360:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8392:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8403:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8388:3:124"},"nodeType":"YulFunctionCall","src":"8388:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8370:17:124"},"nodeType":"YulFunctionCall","src":"8370:38:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8360:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7669:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7680:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7692:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7700:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7708:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7716:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7724:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7732:6:124","type":""}],"src":"7587:827:124"},{"body":{"nodeType":"YulBlock","src":"8598:83:124","statements":[{"nodeType":"YulAssignment","src":"8608:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8620:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8631:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8616:3:124"},"nodeType":"YulFunctionCall","src":"8616:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8608:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8650:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8667:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8661:5:124"},"nodeType":"YulFunctionCall","src":"8661:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8643:6:124"},"nodeType":"YulFunctionCall","src":"8643:32:124"},"nodeType":"YulExpressionStatement","src":"8643:32:124"}]},"name":"abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8567:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8578:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8589:4:124","type":""}],"src":"8419:262:124"},{"body":{"nodeType":"YulBlock","src":"8755:115:124","statements":[{"body":{"nodeType":"YulBlock","src":"8801:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8810:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8813:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8803:6:124"},"nodeType":"YulFunctionCall","src":"8803:12:124"},"nodeType":"YulExpressionStatement","src":"8803:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8776:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8785:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8772:3:124"},"nodeType":"YulFunctionCall","src":"8772:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8797:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8768:3:124"},"nodeType":"YulFunctionCall","src":"8768:32:124"},"nodeType":"YulIf","src":"8765:52:124"},{"nodeType":"YulAssignment","src":"8826:38:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8854:9:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8836:17:124"},"nodeType":"YulFunctionCall","src":"8836:28:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8826:6:124"}]}]},"name":"abi_decode_tuple_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8721:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8732:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8744:6:124","type":""}],"src":"8686:184:124"},{"body":{"nodeType":"YulBlock","src":"8976:125:124","statements":[{"nodeType":"YulAssignment","src":"8986:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8998:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9009:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8994:3:124"},"nodeType":"YulFunctionCall","src":"8994:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8986:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9028:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9043:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9051:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9039:3:124"},"nodeType":"YulFunctionCall","src":"9039:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9021:6:124"},"nodeType":"YulFunctionCall","src":"9021:74:124"},"nodeType":"YulExpressionStatement","src":"9021:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8945:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8956:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8967:4:124","type":""}],"src":"8875:226:124"},{"body":{"nodeType":"YulBlock","src":"9227:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"9274:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9283:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9286:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9276:6:124"},"nodeType":"YulFunctionCall","src":"9276:12:124"},"nodeType":"YulExpressionStatement","src":"9276:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9248:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9257:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9244:3:124"},"nodeType":"YulFunctionCall","src":"9244:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9269:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9240:3:124"},"nodeType":"YulFunctionCall","src":"9240:33:124"},"nodeType":"YulIf","src":"9237:53:124"},{"nodeType":"YulVariableDeclaration","src":"9299:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9325:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9312:12:124"},"nodeType":"YulFunctionCall","src":"9312:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9303:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9369:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9344:24:124"},"nodeType":"YulFunctionCall","src":"9344:31:124"},"nodeType":"YulExpressionStatement","src":"9344:31:124"},{"nodeType":"YulAssignment","src":"9384:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9394:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9384:6:124"}]},{"nodeType":"YulAssignment","src":"9408:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9446:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9431:3:124"},"nodeType":"YulFunctionCall","src":"9431:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9418:12:124"},"nodeType":"YulFunctionCall","src":"9418:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9408:6:124"}]},{"nodeType":"YulAssignment","src":"9459:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9486:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9497:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9482:3:124"},"nodeType":"YulFunctionCall","src":"9482:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9469:12:124"},"nodeType":"YulFunctionCall","src":"9469:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9459:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9510:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9542:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9553:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9538:3:124"},"nodeType":"YulFunctionCall","src":"9538:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9525:12:124"},"nodeType":"YulFunctionCall","src":"9525:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9514:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9591:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9566:24:124"},"nodeType":"YulFunctionCall","src":"9566:33:124"},"nodeType":"YulExpressionStatement","src":"9566:33:124"},{"nodeType":"YulAssignment","src":"9608:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9618:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9608:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9169:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9180:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9192:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9200:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9208:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9216:6:124","type":""}],"src":"9106:525:124"},{"body":{"nodeType":"YulBlock","src":"9720:298:124","statements":[{"body":{"nodeType":"YulBlock","src":"9766:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9775:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9778:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9768:6:124"},"nodeType":"YulFunctionCall","src":"9768:12:124"},"nodeType":"YulExpressionStatement","src":"9768:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9741:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9750:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9737:3:124"},"nodeType":"YulFunctionCall","src":"9737:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9762:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9733:3:124"},"nodeType":"YulFunctionCall","src":"9733:32:124"},"nodeType":"YulIf","src":"9730:52:124"},{"nodeType":"YulVariableDeclaration","src":"9791:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9817:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9804:12:124"},"nodeType":"YulFunctionCall","src":"9804:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9795:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9861:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9836:24:124"},"nodeType":"YulFunctionCall","src":"9836:31:124"},"nodeType":"YulExpressionStatement","src":"9836:31:124"},{"nodeType":"YulAssignment","src":"9876:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9886:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9876:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9900:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9932:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9943:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9928:3:124"},"nodeType":"YulFunctionCall","src":"9928:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9915:12:124"},"nodeType":"YulFunctionCall","src":"9915:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9904:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9978:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"9956:21:124"},"nodeType":"YulFunctionCall","src":"9956:30:124"},"nodeType":"YulExpressionStatement","src":"9956:30:124"},{"nodeType":"YulAssignment","src":"9995:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10005:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9995:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9678:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9689:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9701:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9709:6:124","type":""}],"src":"9636:382:124"},{"body":{"nodeType":"YulBlock","src":"10143:409:124","statements":[{"body":{"nodeType":"YulBlock","src":"10190:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10199:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10202:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10192:6:124"},"nodeType":"YulFunctionCall","src":"10192:12:124"},"nodeType":"YulExpressionStatement","src":"10192:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10164:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10173:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10160:3:124"},"nodeType":"YulFunctionCall","src":"10160:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10185:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10156:3:124"},"nodeType":"YulFunctionCall","src":"10156:33:124"},"nodeType":"YulIf","src":"10153:53:124"},{"nodeType":"YulVariableDeclaration","src":"10215:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10241:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10228:12:124"},"nodeType":"YulFunctionCall","src":"10228:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10219:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10285:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10260:24:124"},"nodeType":"YulFunctionCall","src":"10260:31:124"},"nodeType":"YulExpressionStatement","src":"10260:31:124"},{"nodeType":"YulAssignment","src":"10300:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10310:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10300:6:124"}]},{"nodeType":"YulAssignment","src":"10324:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10351:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10362:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10347:3:124"},"nodeType":"YulFunctionCall","src":"10347:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10334:12:124"},"nodeType":"YulFunctionCall","src":"10334:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10324:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"10375:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10407:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10418:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10403:3:124"},"nodeType":"YulFunctionCall","src":"10403:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10390:12:124"},"nodeType":"YulFunctionCall","src":"10390:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10379:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10456:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10431:24:124"},"nodeType":"YulFunctionCall","src":"10431:33:124"},"nodeType":"YulExpressionStatement","src":"10431:33:124"},{"nodeType":"YulAssignment","src":"10473:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10483:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10473:6:124"}]},{"nodeType":"YulAssignment","src":"10499:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10531:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10542:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10527:3:124"},"nodeType":"YulFunctionCall","src":"10527:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"10509:17:124"},"nodeType":"YulFunctionCall","src":"10509:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"10499:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10085:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10096:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10108:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10116:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10124:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10132:6:124","type":""}],"src":"10023:529:124"},{"body":{"nodeType":"YulBlock","src":"10661:212:124","statements":[{"body":{"nodeType":"YulBlock","src":"10707:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10716:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10719:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10709:6:124"},"nodeType":"YulFunctionCall","src":"10709:12:124"},"nodeType":"YulExpressionStatement","src":"10709:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10682:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10691:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10678:3:124"},"nodeType":"YulFunctionCall","src":"10678:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10703:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10674:3:124"},"nodeType":"YulFunctionCall","src":"10674:32:124"},"nodeType":"YulIf","src":"10671:52:124"},{"nodeType":"YulAssignment","src":"10732:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10755:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10742:12:124"},"nodeType":"YulFunctionCall","src":"10742:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10732:6:124"}]},{"nodeType":"YulAssignment","src":"10774:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10801:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10812:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10797:3:124"},"nodeType":"YulFunctionCall","src":"10797:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10784:12:124"},"nodeType":"YulFunctionCall","src":"10784:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10774:6:124"}]},{"nodeType":"YulAssignment","src":"10825:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10852:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10863:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10848:3:124"},"nodeType":"YulFunctionCall","src":"10848:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10835:12:124"},"nodeType":"YulFunctionCall","src":"10835:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10825:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10611:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10622:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10634:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10642:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10650:6:124","type":""}],"src":"10557:316:124"},{"body":{"nodeType":"YulBlock","src":"10982:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"11028:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11037:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11040:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11030:6:124"},"nodeType":"YulFunctionCall","src":"11030:12:124"},"nodeType":"YulExpressionStatement","src":"11030:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11003:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11012:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10999:3:124"},"nodeType":"YulFunctionCall","src":"10999:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11024:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10995:3:124"},"nodeType":"YulFunctionCall","src":"10995:32:124"},"nodeType":"YulIf","src":"10992:52:124"},{"nodeType":"YulVariableDeclaration","src":"11053:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11079:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11066:12:124"},"nodeType":"YulFunctionCall","src":"11066:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11057:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11123:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11098:24:124"},"nodeType":"YulFunctionCall","src":"11098:31:124"},"nodeType":"YulExpressionStatement","src":"11098:31:124"},{"nodeType":"YulAssignment","src":"11138:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11148:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11138:6:124"}]},{"nodeType":"YulAssignment","src":"11162:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11189:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11200:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11185:3:124"},"nodeType":"YulFunctionCall","src":"11185:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11172:12:124"},"nodeType":"YulFunctionCall","src":"11172:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"11162:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"11213:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11245:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11256:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11241:3:124"},"nodeType":"YulFunctionCall","src":"11241:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11228:12:124"},"nodeType":"YulFunctionCall","src":"11228:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"11217:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"11294:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11269:24:124"},"nodeType":"YulFunctionCall","src":"11269:33:124"},"nodeType":"YulExpressionStatement","src":"11269:33:124"},{"nodeType":"YulAssignment","src":"11311:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"11321:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"11311:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10932:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10943:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10955:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10963:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10971:6:124","type":""}],"src":"10878:456:124"},{"body":{"nodeType":"YulBlock","src":"11389:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11399:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11419:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11413:5:124"},"nodeType":"YulFunctionCall","src":"11413:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"11403:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11441:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"11446:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11434:6:124"},"nodeType":"YulFunctionCall","src":"11434:19:124"},"nodeType":"YulExpressionStatement","src":"11434:19:124"},{"nodeType":"YulVariableDeclaration","src":"11462:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11471:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"11466:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11533:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11547:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11557:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11551:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11589:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"11594:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11585:3:124"},"nodeType":"YulFunctionCall","src":"11585:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11598:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11581:3:124"},"nodeType":"YulFunctionCall","src":"11581:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11617:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"11624:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11613:3:124"},"nodeType":"YulFunctionCall","src":"11613:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11628:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11609:3:124"},"nodeType":"YulFunctionCall","src":"11609:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11603:5:124"},"nodeType":"YulFunctionCall","src":"11603:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11574:6:124"},"nodeType":"YulFunctionCall","src":"11574:59:124"},"nodeType":"YulExpressionStatement","src":"11574:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11492:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"11495:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11489:2:124"},"nodeType":"YulFunctionCall","src":"11489:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"11503:21:124","statements":[{"nodeType":"YulAssignment","src":"11505:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11514:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"11517:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11510:3:124"},"nodeType":"YulFunctionCall","src":"11510:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11505:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"11485:3:124","statements":[]},"src":"11481:162:124"},{"body":{"nodeType":"YulBlock","src":"11677:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11706:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"11711:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11702:3:124"},"nodeType":"YulFunctionCall","src":"11702:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"11720:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11698:3:124"},"nodeType":"YulFunctionCall","src":"11698:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"11727:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11691:6:124"},"nodeType":"YulFunctionCall","src":"11691:38:124"},"nodeType":"YulExpressionStatement","src":"11691:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11658:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"11661:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11655:2:124"},"nodeType":"YulFunctionCall","src":"11655:13:124"},"nodeType":"YulIf","src":"11652:87:124"},{"nodeType":"YulAssignment","src":"11748:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11763:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11776:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11784:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11772:3:124"},"nodeType":"YulFunctionCall","src":"11772:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"11789:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11768:3:124"},"nodeType":"YulFunctionCall","src":"11768:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11759:3:124"},"nodeType":"YulFunctionCall","src":"11759:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"11859:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11755:3:124"},"nodeType":"YulFunctionCall","src":"11755:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11748:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11366:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"11373:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"11381:3:124","type":""}],"src":"11339:531:124"},{"body":{"nodeType":"YulBlock","src":"12040:530:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12057:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12068:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12050:6:124"},"nodeType":"YulFunctionCall","src":"12050:21:124"},"nodeType":"YulExpressionStatement","src":"12050:21:124"},{"nodeType":"YulVariableDeclaration","src":"12080:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12090:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12084:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12116:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12127:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12112:3:124"},"nodeType":"YulFunctionCall","src":"12112:18:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12142:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12136:5:124"},"nodeType":"YulFunctionCall","src":"12136:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12151:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12132:3:124"},"nodeType":"YulFunctionCall","src":"12132:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12105:6:124"},"nodeType":"YulFunctionCall","src":"12105:50:124"},"nodeType":"YulExpressionStatement","src":"12105:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12175:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12186:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12171:3:124"},"nodeType":"YulFunctionCall","src":"12171:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12205:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12213:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12201:3:124"},"nodeType":"YulFunctionCall","src":"12201:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12195:5:124"},"nodeType":"YulFunctionCall","src":"12195:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12219:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12191:3:124"},"nodeType":"YulFunctionCall","src":"12191:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12164:6:124"},"nodeType":"YulFunctionCall","src":"12164:59:124"},"nodeType":"YulExpressionStatement","src":"12164:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12243:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12254:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12239:3:124"},"nodeType":"YulFunctionCall","src":"12239:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12273:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12281:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12269:3:124"},"nodeType":"YulFunctionCall","src":"12269:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12263:5:124"},"nodeType":"YulFunctionCall","src":"12263:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12287:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12259:3:124"},"nodeType":"YulFunctionCall","src":"12259:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12232:6:124"},"nodeType":"YulFunctionCall","src":"12232:59:124"},"nodeType":"YulExpressionStatement","src":"12232:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12311:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12322:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12307:3:124"},"nodeType":"YulFunctionCall","src":"12307:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12342:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12350:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12338:3:124"},"nodeType":"YulFunctionCall","src":"12338:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12332:5:124"},"nodeType":"YulFunctionCall","src":"12332:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"12356:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12328:3:124"},"nodeType":"YulFunctionCall","src":"12328:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12300:6:124"},"nodeType":"YulFunctionCall","src":"12300:100:124"},"nodeType":"YulExpressionStatement","src":"12300:100:124"},{"nodeType":"YulVariableDeclaration","src":"12409:43:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12439:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12447:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12435:3:124"},"nodeType":"YulFunctionCall","src":"12435:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12429:5:124"},"nodeType":"YulFunctionCall","src":"12429:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"12413:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12472:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12483:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12468:3:124"},"nodeType":"YulFunctionCall","src":"12468:20:124"},{"kind":"number","nodeType":"YulLiteral","src":"12490:4:124","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12461:6:124"},"nodeType":"YulFunctionCall","src":"12461:34:124"},"nodeType":"YulExpressionStatement","src":"12461:34:124"},{"nodeType":"YulAssignment","src":"12504:60:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"12530:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12548:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12559:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12544:3:124"},"nodeType":"YulFunctionCall","src":"12544:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12512:17:124"},"nodeType":"YulFunctionCall","src":"12512:52:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12504:4:124"}]}]},"name":"abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12009:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12020:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12031:4:124","type":""}],"src":"11875:695:124"},{"body":{"nodeType":"YulBlock","src":"12713:675:124","statements":[{"body":{"nodeType":"YulBlock","src":"12760:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12769:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12772:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12762:6:124"},"nodeType":"YulFunctionCall","src":"12762:12:124"},"nodeType":"YulExpressionStatement","src":"12762:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12734:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12743:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12730:3:124"},"nodeType":"YulFunctionCall","src":"12730:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"12755:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12726:3:124"},"nodeType":"YulFunctionCall","src":"12726:33:124"},"nodeType":"YulIf","src":"12723:53:124"},{"nodeType":"YulVariableDeclaration","src":"12785:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12811:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12798:12:124"},"nodeType":"YulFunctionCall","src":"12798:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12789:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12855:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12830:24:124"},"nodeType":"YulFunctionCall","src":"12830:31:124"},"nodeType":"YulExpressionStatement","src":"12830:31:124"},{"nodeType":"YulAssignment","src":"12870:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"12880:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12870:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12894:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12926:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12937:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12922:3:124"},"nodeType":"YulFunctionCall","src":"12922:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12909:12:124"},"nodeType":"YulFunctionCall","src":"12909:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12898:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12975:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12950:24:124"},"nodeType":"YulFunctionCall","src":"12950:33:124"},"nodeType":"YulExpressionStatement","src":"12950:33:124"},{"nodeType":"YulAssignment","src":"12992:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"13002:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"12992:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13018:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13050:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13061:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13046:3:124"},"nodeType":"YulFunctionCall","src":"13046:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13033:12:124"},"nodeType":"YulFunctionCall","src":"13033:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"13022:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"13099:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13074:24:124"},"nodeType":"YulFunctionCall","src":"13074:33:124"},"nodeType":"YulExpressionStatement","src":"13074:33:124"},{"nodeType":"YulAssignment","src":"13116:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"13126:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"13116:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13142:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13185:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13170:3:124"},"nodeType":"YulFunctionCall","src":"13170:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13157:12:124"},"nodeType":"YulFunctionCall","src":"13157:32:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"13146:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"13223:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13198:24:124"},"nodeType":"YulFunctionCall","src":"13198:33:124"},"nodeType":"YulExpressionStatement","src":"13198:33:124"},{"nodeType":"YulAssignment","src":"13240:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"13250:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"13240:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13266:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13298:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13309:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13294:3:124"},"nodeType":"YulFunctionCall","src":"13294:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13281:12:124"},"nodeType":"YulFunctionCall","src":"13281:33:124"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"13270:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"13348:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13323:24:124"},"nodeType":"YulFunctionCall","src":"13323:33:124"},"nodeType":"YulExpressionStatement","src":"13323:33:124"},{"nodeType":"YulAssignment","src":"13365:17:124","value":{"name":"value_4","nodeType":"YulIdentifier","src":"13375:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"13365:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12647:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12658:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12670:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12678:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12686:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12694:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12702:6:124","type":""}],"src":"12575:813:124"},{"body":{"nodeType":"YulBlock","src":"13480:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"13526:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13535:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13538:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13528:6:124"},"nodeType":"YulFunctionCall","src":"13528:12:124"},"nodeType":"YulExpressionStatement","src":"13528:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13501:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13510:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13497:3:124"},"nodeType":"YulFunctionCall","src":"13497:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13522:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13493:3:124"},"nodeType":"YulFunctionCall","src":"13493:32:124"},"nodeType":"YulIf","src":"13490:52:124"},{"nodeType":"YulVariableDeclaration","src":"13551:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13577:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13564:12:124"},"nodeType":"YulFunctionCall","src":"13564:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13555:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13621:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13596:24:124"},"nodeType":"YulFunctionCall","src":"13596:31:124"},"nodeType":"YulExpressionStatement","src":"13596:31:124"},{"nodeType":"YulAssignment","src":"13636:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13646:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13636:6:124"}]},{"nodeType":"YulAssignment","src":"13660:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13687:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13698:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13683:3:124"},"nodeType":"YulFunctionCall","src":"13683:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13670:12:124"},"nodeType":"YulFunctionCall","src":"13670:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13660:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13438:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13449:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13461:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13469:6:124","type":""}],"src":"13393:315:124"},{"body":{"nodeType":"YulBlock","src":"13797:283:124","statements":[{"body":{"nodeType":"YulBlock","src":"13846:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13855:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13858:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13848:6:124"},"nodeType":"YulFunctionCall","src":"13848:12:124"},"nodeType":"YulExpressionStatement","src":"13848:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13825:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13833:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13821:3:124"},"nodeType":"YulFunctionCall","src":"13821:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"13840:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13817:3:124"},"nodeType":"YulFunctionCall","src":"13817:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13810:6:124"},"nodeType":"YulFunctionCall","src":"13810:35:124"},"nodeType":"YulIf","src":"13807:55:124"},{"nodeType":"YulAssignment","src":"13871:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13894:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13881:12:124"},"nodeType":"YulFunctionCall","src":"13881:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"13871:6:124"}]},{"body":{"nodeType":"YulBlock","src":"13944:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13953:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13956:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13946:6:124"},"nodeType":"YulFunctionCall","src":"13946:12:124"},"nodeType":"YulExpressionStatement","src":"13946:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13916:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13924:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13913:2:124"},"nodeType":"YulFunctionCall","src":"13913:30:124"},"nodeType":"YulIf","src":"13910:50:124"},{"nodeType":"YulAssignment","src":"13969:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13985:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13993:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13981:3:124"},"nodeType":"YulFunctionCall","src":"13981:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"13969:8:124"}]},{"body":{"nodeType":"YulBlock","src":"14058:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14067:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14070:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14060:6:124"},"nodeType":"YulFunctionCall","src":"14060:12:124"},"nodeType":"YulExpressionStatement","src":"14060:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"14021:6:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14033:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"14036:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14029:3:124"},"nodeType":"YulFunctionCall","src":"14029:14:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14017:3:124"},"nodeType":"YulFunctionCall","src":"14017:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"14046:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14013:3:124"},"nodeType":"YulFunctionCall","src":"14013:38:124"},{"name":"end","nodeType":"YulIdentifier","src":"14053:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14010:2:124"},"nodeType":"YulFunctionCall","src":"14010:47:124"},"nodeType":"YulIf","src":"14007:67:124"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13760:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"13768:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"13776:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"13786:6:124","type":""}],"src":"13713:367:124"},{"body":{"nodeType":"YulBlock","src":"14190:332:124","statements":[{"body":{"nodeType":"YulBlock","src":"14236:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14245:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14248:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14238:6:124"},"nodeType":"YulFunctionCall","src":"14238:12:124"},"nodeType":"YulExpressionStatement","src":"14238:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14211:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14220:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14207:3:124"},"nodeType":"YulFunctionCall","src":"14207:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14232:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14203:3:124"},"nodeType":"YulFunctionCall","src":"14203:32:124"},"nodeType":"YulIf","src":"14200:52:124"},{"nodeType":"YulVariableDeclaration","src":"14261:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14288:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14275:12:124"},"nodeType":"YulFunctionCall","src":"14275:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"14265:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"14341:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14350:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14353:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14343:6:124"},"nodeType":"YulFunctionCall","src":"14343:12:124"},"nodeType":"YulExpressionStatement","src":"14343:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"14313:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14321:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14310:2:124"},"nodeType":"YulFunctionCall","src":"14310:30:124"},"nodeType":"YulIf","src":"14307:50:124"},{"nodeType":"YulVariableDeclaration","src":"14366:96:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14434:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"14445:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14430:3:124"},"nodeType":"YulFunctionCall","src":"14430:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14454:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"14392:37:124"},"nodeType":"YulFunctionCall","src":"14392:70:124"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"14370:8:124","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"14380:8:124","type":""}]},{"nodeType":"YulAssignment","src":"14471:18:124","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"14481:8:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14471:6:124"}]},{"nodeType":"YulAssignment","src":"14498:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"14508:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14498:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14148:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14159:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14171:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14179:6:124","type":""}],"src":"14085:437:124"},{"body":{"nodeType":"YulBlock","src":"14664:461:124","statements":[{"body":{"nodeType":"YulBlock","src":"14711:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14720:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14723:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14713:6:124"},"nodeType":"YulFunctionCall","src":"14713:12:124"},"nodeType":"YulExpressionStatement","src":"14713:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14685:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14694:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14681:3:124"},"nodeType":"YulFunctionCall","src":"14681:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14706:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14677:3:124"},"nodeType":"YulFunctionCall","src":"14677:33:124"},"nodeType":"YulIf","src":"14674:53:124"},{"nodeType":"YulVariableDeclaration","src":"14736:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14762:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14749:12:124"},"nodeType":"YulFunctionCall","src":"14749:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14740:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14806:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14781:24:124"},"nodeType":"YulFunctionCall","src":"14781:31:124"},"nodeType":"YulExpressionStatement","src":"14781:31:124"},{"nodeType":"YulAssignment","src":"14821:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14831:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14821:6:124"}]},{"nodeType":"YulAssignment","src":"14845:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14883:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14868:3:124"},"nodeType":"YulFunctionCall","src":"14868:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14855:12:124"},"nodeType":"YulFunctionCall","src":"14855:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14845:6:124"}]},{"nodeType":"YulAssignment","src":"14896:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14923:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14934:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14919:3:124"},"nodeType":"YulFunctionCall","src":"14919:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14906:12:124"},"nodeType":"YulFunctionCall","src":"14906:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"14896:6:124"}]},{"nodeType":"YulAssignment","src":"14947:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14979:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14990:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14975:3:124"},"nodeType":"YulFunctionCall","src":"14975:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"14957:17:124"},"nodeType":"YulFunctionCall","src":"14957:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"14947:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"15003:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15035:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15046:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15031:3:124"},"nodeType":"YulFunctionCall","src":"15031:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15018:12:124"},"nodeType":"YulFunctionCall","src":"15018:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"15007:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"15085:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"15060:24:124"},"nodeType":"YulFunctionCall","src":"15060:33:124"},"nodeType":"YulExpressionStatement","src":"15060:33:124"},{"nodeType":"YulAssignment","src":"15102:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"15112:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"15102:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14598:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14609:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14621:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14629:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14637:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14645:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14653:6:124","type":""}],"src":"14527:598:124"},{"body":{"nodeType":"YulBlock","src":"15426:1276:124","statements":[{"body":{"nodeType":"YulBlock","src":"15473:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15482:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15485:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15475:6:124"},"nodeType":"YulFunctionCall","src":"15475:12:124"},"nodeType":"YulExpressionStatement","src":"15475:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15447:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"15456:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15443:3:124"},"nodeType":"YulFunctionCall","src":"15443:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"15468:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15439:3:124"},"nodeType":"YulFunctionCall","src":"15439:33:124"},"nodeType":"YulIf","src":"15436:53:124"},{"nodeType":"YulAssignment","src":"15498:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15527:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15508:18:124"},"nodeType":"YulFunctionCall","src":"15508:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15498:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"15546:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15556:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15550:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15627:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15636:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15639:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15629:6:124"},"nodeType":"YulFunctionCall","src":"15629:12:124"},"nodeType":"YulExpressionStatement","src":"15629:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15606:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15617:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15602:3:124"},"nodeType":"YulFunctionCall","src":"15602:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15589:12:124"},"nodeType":"YulFunctionCall","src":"15589:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15623:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15586:2:124"},"nodeType":"YulFunctionCall","src":"15586:40:124"},"nodeType":"YulIf","src":"15583:60:124"},{"nodeType":"YulVariableDeclaration","src":"15652:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15720:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15748:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15759:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15744:3:124"},"nodeType":"YulFunctionCall","src":"15744:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15731:12:124"},"nodeType":"YulFunctionCall","src":"15731:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15716:3:124"},"nodeType":"YulFunctionCall","src":"15716:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15766:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15678:37:124"},"nodeType":"YulFunctionCall","src":"15678:96:124"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"15656:8:124","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"15666:8:124","type":""}]},{"nodeType":"YulAssignment","src":"15783:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"15793:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"15783:6:124"}]},{"nodeType":"YulAssignment","src":"15810:18:124","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"15820:8:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"15810:6:124"}]},{"body":{"nodeType":"YulBlock","src":"15881:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15890:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15893:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15883:6:124"},"nodeType":"YulFunctionCall","src":"15883:12:124"},"nodeType":"YulExpressionStatement","src":"15883:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15860:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15871:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15856:3:124"},"nodeType":"YulFunctionCall","src":"15856:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15843:12:124"},"nodeType":"YulFunctionCall","src":"15843:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15877:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15840:2:124"},"nodeType":"YulFunctionCall","src":"15840:40:124"},"nodeType":"YulIf","src":"15837:60:124"},{"nodeType":"YulVariableDeclaration","src":"15906:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15974:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16002:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16013:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15998:3:124"},"nodeType":"YulFunctionCall","src":"15998:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15985:12:124"},"nodeType":"YulFunctionCall","src":"15985:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15970:3:124"},"nodeType":"YulFunctionCall","src":"15970:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16020:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15932:37:124"},"nodeType":"YulFunctionCall","src":"15932:96:124"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"15910:8:124","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"15920:8:124","type":""}]},{"nodeType":"YulAssignment","src":"16037:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"16047:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"16037:6:124"}]},{"nodeType":"YulAssignment","src":"16064:18:124","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"16074:8:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"16064:6:124"}]},{"body":{"nodeType":"YulBlock","src":"16135:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16144:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16147:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16137:6:124"},"nodeType":"YulFunctionCall","src":"16137:12:124"},"nodeType":"YulExpressionStatement","src":"16137:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16114:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16125:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16110:3:124"},"nodeType":"YulFunctionCall","src":"16110:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16097:12:124"},"nodeType":"YulFunctionCall","src":"16097:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16131:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16094:2:124"},"nodeType":"YulFunctionCall","src":"16094:40:124"},"nodeType":"YulIf","src":"16091:60:124"},{"nodeType":"YulVariableDeclaration","src":"16160:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16228:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16256:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16267:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16252:3:124"},"nodeType":"YulFunctionCall","src":"16252:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16239:12:124"},"nodeType":"YulFunctionCall","src":"16239:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16224:3:124"},"nodeType":"YulFunctionCall","src":"16224:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16274:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"16186:37:124"},"nodeType":"YulFunctionCall","src":"16186:96:124"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"16164:8:124","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"16174:8:124","type":""}]},{"nodeType":"YulAssignment","src":"16291:18:124","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"16301:8:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"16291:6:124"}]},{"nodeType":"YulAssignment","src":"16318:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"16328:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"16318:6:124"}]},{"nodeType":"YulAssignment","src":"16345:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16378:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16389:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16374:3:124"},"nodeType":"YulFunctionCall","src":"16374:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"16355:18:124"},"nodeType":"YulFunctionCall","src":"16355:39:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"16345:6:124"}]},{"body":{"nodeType":"YulBlock","src":"16448:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16457:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16460:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16450:6:124"},"nodeType":"YulFunctionCall","src":"16450:12:124"},"nodeType":"YulExpressionStatement","src":"16450:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16426:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16437:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16422:3:124"},"nodeType":"YulFunctionCall","src":"16422:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16409:12:124"},"nodeType":"YulFunctionCall","src":"16409:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16444:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16406:2:124"},"nodeType":"YulFunctionCall","src":"16406:41:124"},"nodeType":"YulIf","src":"16403:61:124"},{"nodeType":"YulVariableDeclaration","src":"16473:111:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16529:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16557:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16568:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16553:3:124"},"nodeType":"YulFunctionCall","src":"16553:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16540:12:124"},"nodeType":"YulFunctionCall","src":"16540:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16525:3:124"},"nodeType":"YulFunctionCall","src":"16525:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16576:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"16499:25:124"},"nodeType":"YulFunctionCall","src":"16499:85:124"},"variables":[{"name":"value8_1","nodeType":"YulTypedName","src":"16477:8:124","type":""},{"name":"value9_1","nodeType":"YulTypedName","src":"16487:8:124","type":""}]},{"nodeType":"YulAssignment","src":"16593:18:124","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"16603:8:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"16593:6:124"}]},{"nodeType":"YulAssignment","src":"16620:18:124","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"16630:8:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"16620:6:124"}]},{"nodeType":"YulAssignment","src":"16647:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16680:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16691:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16676:3:124"},"nodeType":"YulFunctionCall","src":"16676:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"16658:17:124"},"nodeType":"YulFunctionCall","src":"16658:38:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"16647:7:124"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15311:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15322:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15334:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15342:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15350:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15358:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15366:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"15374:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"15382:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"15390:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"15398:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"15406:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"15414:7:124","type":""}],"src":"15130:1572:124"},{"body":{"nodeType":"YulBlock","src":"16756:139:124","statements":[{"nodeType":"YulAssignment","src":"16766:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"16788:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16775:12:124"},"nodeType":"YulFunctionCall","src":"16775:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16766:5:124"}]},{"body":{"nodeType":"YulBlock","src":"16873:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16882:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16885:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16875:6:124"},"nodeType":"YulFunctionCall","src":"16875:12:124"},"nodeType":"YulExpressionStatement","src":"16875:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16817:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16828:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16835:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16824:3:124"},"nodeType":"YulFunctionCall","src":"16824:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16814:2:124"},"nodeType":"YulFunctionCall","src":"16814:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16807:6:124"},"nodeType":"YulFunctionCall","src":"16807:65:124"},"nodeType":"YulIf","src":"16804:85:124"}]},"name":"abi_decode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"16735:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16746:5:124","type":""}],"src":"16707:188:124"},{"body":{"nodeType":"YulBlock","src":"16987:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"17033:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17042:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17045:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17035:6:124"},"nodeType":"YulFunctionCall","src":"17035:12:124"},"nodeType":"YulExpressionStatement","src":"17035:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17008:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"17017:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17004:3:124"},"nodeType":"YulFunctionCall","src":"17004:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"17029:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17000:3:124"},"nodeType":"YulFunctionCall","src":"17000:32:124"},"nodeType":"YulIf","src":"16997:52:124"},{"nodeType":"YulAssignment","src":"17058:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17087:9:124"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"17068:18:124"},"nodeType":"YulFunctionCall","src":"17068:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17058:6:124"}]},{"nodeType":"YulAssignment","src":"17106:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17139:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17150:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17135:3:124"},"nodeType":"YulFunctionCall","src":"17135:18:124"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"17116:18:124"},"nodeType":"YulFunctionCall","src":"17116:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"17106:6:124"}]}]},"name":"abi_decode_tuple_t_uint128t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16945:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16956:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16968:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16976:6:124","type":""}],"src":"16900:260:124"},{"body":{"nodeType":"YulBlock","src":"17406:294:124","statements":[{"nodeType":"YulAssignment","src":"17416:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17428:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17439:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17424:3:124"},"nodeType":"YulFunctionCall","src":"17424:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17416:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17459:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"17470:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17452:6:124"},"nodeType":"YulFunctionCall","src":"17452:25:124"},"nodeType":"YulExpressionStatement","src":"17452:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17497:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17508:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17493:3:124"},"nodeType":"YulFunctionCall","src":"17493:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"17513:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17486:6:124"},"nodeType":"YulFunctionCall","src":"17486:34:124"},"nodeType":"YulExpressionStatement","src":"17486:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17540:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17551:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17536:3:124"},"nodeType":"YulFunctionCall","src":"17536:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"17556:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17529:6:124"},"nodeType":"YulFunctionCall","src":"17529:34:124"},"nodeType":"YulExpressionStatement","src":"17529:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17583:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17594:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17579:3:124"},"nodeType":"YulFunctionCall","src":"17579:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"17599:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17572:6:124"},"nodeType":"YulFunctionCall","src":"17572:34:124"},"nodeType":"YulExpressionStatement","src":"17572:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17626:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17637:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17622:3:124"},"nodeType":"YulFunctionCall","src":"17622:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"17643:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17615:6:124"},"nodeType":"YulFunctionCall","src":"17615:35:124"},"nodeType":"YulExpressionStatement","src":"17615:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17670:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17681:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17666:3:124"},"nodeType":"YulFunctionCall","src":"17666:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"17687:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17659:6:124"},"nodeType":"YulFunctionCall","src":"17659:35:124"},"nodeType":"YulExpressionStatement","src":"17659:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17335:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"17346:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"17354:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"17362:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17370:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17378:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17386:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17397:4:124","type":""}],"src":"17165:535:124"},{"body":{"nodeType":"YulBlock","src":"17890:83:124","statements":[{"nodeType":"YulAssignment","src":"17900:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17912:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17923:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17908:3:124"},"nodeType":"YulFunctionCall","src":"17908:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17900:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17942:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17959:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17953:5:124"},"nodeType":"YulFunctionCall","src":"17953:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17935:6:124"},"nodeType":"YulFunctionCall","src":"17935:32:124"},"nodeType":"YulExpressionStatement","src":"17935:32:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17859:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17870:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17881:4:124","type":""}],"src":"17705:268:124"},{"body":{"nodeType":"YulBlock","src":"18079:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"18125:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18134:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18137:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18127:6:124"},"nodeType":"YulFunctionCall","src":"18127:12:124"},"nodeType":"YulExpressionStatement","src":"18127:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18100:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"18109:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18096:3:124"},"nodeType":"YulFunctionCall","src":"18096:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"18121:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18092:3:124"},"nodeType":"YulFunctionCall","src":"18092:32:124"},"nodeType":"YulIf","src":"18089:52:124"},{"nodeType":"YulVariableDeclaration","src":"18150:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18176:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18163:12:124"},"nodeType":"YulFunctionCall","src":"18163:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"18154:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18220:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18195:24:124"},"nodeType":"YulFunctionCall","src":"18195:31:124"},"nodeType":"YulExpressionStatement","src":"18195:31:124"},{"nodeType":"YulAssignment","src":"18235:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"18245:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18235:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18045:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18056:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18068:6:124","type":""}],"src":"17978:278:124"},{"body":{"nodeType":"YulBlock","src":"18365:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"18411:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18420:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18423:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18413:6:124"},"nodeType":"YulFunctionCall","src":"18413:12:124"},"nodeType":"YulExpressionStatement","src":"18413:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18386:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"18395:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18382:3:124"},"nodeType":"YulFunctionCall","src":"18382:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"18407:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18378:3:124"},"nodeType":"YulFunctionCall","src":"18378:32:124"},"nodeType":"YulIf","src":"18375:52:124"},{"nodeType":"YulVariableDeclaration","src":"18436:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18462:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18449:12:124"},"nodeType":"YulFunctionCall","src":"18449:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"18440:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18506:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18481:24:124"},"nodeType":"YulFunctionCall","src":"18481:31:124"},"nodeType":"YulExpressionStatement","src":"18481:31:124"},{"nodeType":"YulAssignment","src":"18521:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"18531:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18521:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"18545:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18577:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18588:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18573:3:124"},"nodeType":"YulFunctionCall","src":"18573:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18560:12:124"},"nodeType":"YulFunctionCall","src":"18560:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"18549:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"18626:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18601:24:124"},"nodeType":"YulFunctionCall","src":"18601:33:124"},"nodeType":"YulExpressionStatement","src":"18601:33:124"},{"nodeType":"YulAssignment","src":"18643:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"18653:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"18643:6:124"}]},{"nodeType":"YulAssignment","src":"18669:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18696:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18707:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18692:3:124"},"nodeType":"YulFunctionCall","src":"18692:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18679:12:124"},"nodeType":"YulFunctionCall","src":"18679:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"18669:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18315:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18326:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18338:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18346:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18354:6:124","type":""}],"src":"18261:456:124"},{"body":{"nodeType":"YulBlock","src":"18873:530:124","statements":[{"nodeType":"YulVariableDeclaration","src":"18883:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18893:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18887:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18904:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18922:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18933:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18918:3:124"},"nodeType":"YulFunctionCall","src":"18918:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"18908:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18952:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18963:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18945:6:124"},"nodeType":"YulFunctionCall","src":"18945:21:124"},"nodeType":"YulExpressionStatement","src":"18945:21:124"},{"nodeType":"YulVariableDeclaration","src":"18975:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"18986:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"18979:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19001:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19021:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19015:5:124"},"nodeType":"YulFunctionCall","src":"19015:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"19005:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"19044:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"19052:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19037:6:124"},"nodeType":"YulFunctionCall","src":"19037:22:124"},"nodeType":"YulExpressionStatement","src":"19037:22:124"},{"nodeType":"YulAssignment","src":"19068:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19079:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19090:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19075:3:124"},"nodeType":"YulFunctionCall","src":"19075:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"19068:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"19102:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19120:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19128:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19116:3:124"},"nodeType":"YulFunctionCall","src":"19116:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"19106:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19140:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"19149:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"19144:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"19208:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"19229:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"19244:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19238:5:124"},"nodeType":"YulFunctionCall","src":"19238:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"19253:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19234:3:124"},"nodeType":"YulFunctionCall","src":"19234:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19222:6:124"},"nodeType":"YulFunctionCall","src":"19222:75:124"},"nodeType":"YulExpressionStatement","src":"19222:75:124"},{"nodeType":"YulAssignment","src":"19310:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"19321:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19326:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19317:3:124"},"nodeType":"YulFunctionCall","src":"19317:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"19310:3:124"}]},{"nodeType":"YulAssignment","src":"19342:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"19356:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19364:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19352:3:124"},"nodeType":"YulFunctionCall","src":"19352:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"19342:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19170:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"19173:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19167:2:124"},"nodeType":"YulFunctionCall","src":"19167:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"19181:18:124","statements":[{"nodeType":"YulAssignment","src":"19183:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19192:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"19195:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19188:3:124"},"nodeType":"YulFunctionCall","src":"19188:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"19183:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"19163:3:124","statements":[]},"src":"19159:218:124"},{"nodeType":"YulAssignment","src":"19386:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"19394:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19386:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18842:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18853:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18864:4:124","type":""}],"src":"18722:681:124"},{"body":{"nodeType":"YulBlock","src":"19440:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19457:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19460:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19450:6:124"},"nodeType":"YulFunctionCall","src":"19450:88:124"},"nodeType":"YulExpressionStatement","src":"19450:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19554:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19557:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19547:6:124"},"nodeType":"YulFunctionCall","src":"19547:15:124"},"nodeType":"YulExpressionStatement","src":"19547:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19578:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19581:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19571:6:124"},"nodeType":"YulFunctionCall","src":"19571:15:124"},"nodeType":"YulExpressionStatement","src":"19571:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"19408:184:124"},{"body":{"nodeType":"YulBlock","src":"19643:207:124","statements":[{"nodeType":"YulAssignment","src":"19653:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19669:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19663:5:124"},"nodeType":"YulFunctionCall","src":"19663:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19653:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19681:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19703:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"19711:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19699:3:124"},"nodeType":"YulFunctionCall","src":"19699:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19685:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"19791:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19793:16:124"},"nodeType":"YulFunctionCall","src":"19793:18:124"},"nodeType":"YulExpressionStatement","src":"19793:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19734:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"19746:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19731:2:124"},"nodeType":"YulFunctionCall","src":"19731:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19770:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19782:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19767:2:124"},"nodeType":"YulFunctionCall","src":"19767:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19728:2:124"},"nodeType":"YulFunctionCall","src":"19728:62:124"},"nodeType":"YulIf","src":"19725:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19829:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19833:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19822:6:124"},"nodeType":"YulFunctionCall","src":"19822:22:124"},"nodeType":"YulExpressionStatement","src":"19822:22:124"}]},"name":"allocate_memory_5657","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19632:6:124","type":""}],"src":"19597:253:124"},{"body":{"nodeType":"YulBlock","src":"19900:289:124","statements":[{"nodeType":"YulAssignment","src":"19910:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19926:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19920:5:124"},"nodeType":"YulFunctionCall","src":"19920:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19910:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19938:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19960:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"19976:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"19982:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19972:3:124"},"nodeType":"YulFunctionCall","src":"19972:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"19987:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19968:3:124"},"nodeType":"YulFunctionCall","src":"19968:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19956:3:124"},"nodeType":"YulFunctionCall","src":"19956:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19942:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20130:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"20132:16:124"},"nodeType":"YulFunctionCall","src":"20132:18:124"},"nodeType":"YulExpressionStatement","src":"20132:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"20073:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"20085:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20070:2:124"},"nodeType":"YulFunctionCall","src":"20070:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"20109:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"20121:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20106:2:124"},"nodeType":"YulFunctionCall","src":"20106:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"20067:2:124"},"nodeType":"YulFunctionCall","src":"20067:62:124"},"nodeType":"YulIf","src":"20064:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20168:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"20172:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20161:6:124"},"nodeType":"YulFunctionCall","src":"20161:22:124"},"nodeType":"YulExpressionStatement","src":"20161:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"19880:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19889:6:124","type":""}],"src":"19855:334:124"},{"body":{"nodeType":"YulBlock","src":"20311:1371:124","statements":[{"body":{"nodeType":"YulBlock","src":"20357:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20366:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20369:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20359:6:124"},"nodeType":"YulFunctionCall","src":"20359:12:124"},"nodeType":"YulExpressionStatement","src":"20359:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20332:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"20341:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20328:3:124"},"nodeType":"YulFunctionCall","src":"20328:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"20353:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20324:3:124"},"nodeType":"YulFunctionCall","src":"20324:32:124"},"nodeType":"YulIf","src":"20321:52:124"},{"nodeType":"YulAssignment","src":"20382:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20409:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"20392:16:124"},"nodeType":"YulFunctionCall","src":"20392:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"20382:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"20428:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"20438:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20432:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20449:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20480:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20491:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20476:3:124"},"nodeType":"YulFunctionCall","src":"20476:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20463:12:124"},"nodeType":"YulFunctionCall","src":"20463:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"20453:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20504:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"20514:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"20508:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20559:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20568:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20571:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20561:6:124"},"nodeType":"YulFunctionCall","src":"20561:12:124"},"nodeType":"YulExpressionStatement","src":"20561:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20547:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20555:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20544:2:124"},"nodeType":"YulFunctionCall","src":"20544:14:124"},"nodeType":"YulIf","src":"20541:34:124"},{"nodeType":"YulVariableDeclaration","src":"20584:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20598:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"20609:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20594:3:124"},"nodeType":"YulFunctionCall","src":"20594:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"20588:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20658:6:124"},"nodeType":"YulFunctionCall","src":"20658:12:124"},"nodeType":"YulExpressionStatement","src":"20658:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20636:7:124"},{"name":"_3","nodeType":"YulIdentifier","src":"20645:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20632:3:124"},"nodeType":"YulFunctionCall","src":"20632:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"20650:4:124","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20628:3:124"},"nodeType":"YulFunctionCall","src":"20628:27:124"},"nodeType":"YulIf","src":"20625:47:124"},{"nodeType":"YulVariableDeclaration","src":"20681:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_5657","nodeType":"YulIdentifier","src":"20694:20:124"},"nodeType":"YulFunctionCall","src":"20694:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"20685:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20732:5:124"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20757:2:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20739:17:124"},"nodeType":"YulFunctionCall","src":"20739:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20725:6:124"},"nodeType":"YulFunctionCall","src":"20725:36:124"},"nodeType":"YulExpressionStatement","src":"20725:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20781:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20788:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20777:3:124"},"nodeType":"YulFunctionCall","src":"20777:14:124"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20815:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20819:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20811:3:124"},"nodeType":"YulFunctionCall","src":"20811:11:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20793:17:124"},"nodeType":"YulFunctionCall","src":"20793:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20770:6:124"},"nodeType":"YulFunctionCall","src":"20770:54:124"},"nodeType":"YulExpressionStatement","src":"20770:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20844:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"20851:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20840:3:124"},"nodeType":"YulFunctionCall","src":"20840:14:124"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20878:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20882:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20874:3:124"},"nodeType":"YulFunctionCall","src":"20874:11:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20856:17:124"},"nodeType":"YulFunctionCall","src":"20856:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20833:6:124"},"nodeType":"YulFunctionCall","src":"20833:54:124"},"nodeType":"YulExpressionStatement","src":"20833:54:124"},{"nodeType":"YulVariableDeclaration","src":"20896:40:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20928:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20932:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20924:3:124"},"nodeType":"YulFunctionCall","src":"20924:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20911:12:124"},"nodeType":"YulFunctionCall","src":"20911:25:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"20900:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20970:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20945:24:124"},"nodeType":"YulFunctionCall","src":"20945:33:124"},"nodeType":"YulExpressionStatement","src":"20945:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20998:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"21005:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20994:3:124"},"nodeType":"YulFunctionCall","src":"20994:14:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"21010:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20987:6:124"},"nodeType":"YulFunctionCall","src":"20987:31:124"},"nodeType":"YulExpressionStatement","src":"20987:31:124"},{"nodeType":"YulVariableDeclaration","src":"21027:42:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21060:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"21064:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21056:3:124"},"nodeType":"YulFunctionCall","src":"21056:12:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21043:12:124"},"nodeType":"YulFunctionCall","src":"21043:26:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"21031:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21098:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21107:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21110:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21100:6:124"},"nodeType":"YulFunctionCall","src":"21100:12:124"},"nodeType":"YulExpressionStatement","src":"21100:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"21084:8:124"},{"name":"_2","nodeType":"YulIdentifier","src":"21094:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21081:2:124"},"nodeType":"YulFunctionCall","src":"21081:16:124"},"nodeType":"YulIf","src":"21078:36:124"},{"nodeType":"YulVariableDeclaration","src":"21123:27:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21137:2:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"21141:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21133:3:124"},"nodeType":"YulFunctionCall","src":"21133:17:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"21127:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21198:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21207:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21210:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21200:6:124"},"nodeType":"YulFunctionCall","src":"21200:12:124"},"nodeType":"YulExpressionStatement","src":"21200:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21177:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"21181:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21173:3:124"},"nodeType":"YulFunctionCall","src":"21173:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21188:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21169:3:124"},"nodeType":"YulFunctionCall","src":"21169:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21162:6:124"},"nodeType":"YulFunctionCall","src":"21162:35:124"},"nodeType":"YulIf","src":"21159:55:124"},{"nodeType":"YulVariableDeclaration","src":"21223:26:124","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21246:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21233:12:124"},"nodeType":"YulFunctionCall","src":"21233:16:124"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"21227:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21272:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"21274:16:124"},"nodeType":"YulFunctionCall","src":"21274:18:124"},"nodeType":"YulExpressionStatement","src":"21274:18:124"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"21264:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"21268:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21261:2:124"},"nodeType":"YulFunctionCall","src":"21261:10:124"},"nodeType":"YulIf","src":"21258:36:124"},{"nodeType":"YulVariableDeclaration","src":"21303:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"21344:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"21348:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21340:3:124"},"nodeType":"YulFunctionCall","src":"21340:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"21355:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21336:3:124"},"nodeType":"YulFunctionCall","src":"21336:86:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21424:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21332:3:124"},"nodeType":"YulFunctionCall","src":"21332:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"21316:15:124"},"nodeType":"YulFunctionCall","src":"21316:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"21307:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21444:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21451:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21437:6:124"},"nodeType":"YulFunctionCall","src":"21437:17:124"},"nodeType":"YulExpressionStatement","src":"21437:17:124"},{"body":{"nodeType":"YulBlock","src":"21500:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21509:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21512:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21502:6:124"},"nodeType":"YulFunctionCall","src":"21502:12:124"},"nodeType":"YulExpressionStatement","src":"21502:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21477:2:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21481:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21473:3:124"},"nodeType":"YulFunctionCall","src":"21473:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21486:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21469:3:124"},"nodeType":"YulFunctionCall","src":"21469:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21491:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21466:2:124"},"nodeType":"YulFunctionCall","src":"21466:33:124"},"nodeType":"YulIf","src":"21463:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21542:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21549:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21538:3:124"},"nodeType":"YulFunctionCall","src":"21538:14:124"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21558:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21562:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21554:3:124"},"nodeType":"YulFunctionCall","src":"21554:11:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21567:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"21525:12:124"},"nodeType":"YulFunctionCall","src":"21525:45:124"},"nodeType":"YulExpressionStatement","src":"21525:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21594:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21601:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21590:3:124"},"nodeType":"YulFunctionCall","src":"21590:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21606:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21586:3:124"},"nodeType":"YulFunctionCall","src":"21586:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"21611:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21579:6:124"},"nodeType":"YulFunctionCall","src":"21579:34:124"},"nodeType":"YulExpressionStatement","src":"21579:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21633:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"21640:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21629:3:124"},"nodeType":"YulFunctionCall","src":"21629:15:124"},{"name":"array","nodeType":"YulIdentifier","src":"21646:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21622:6:124"},"nodeType":"YulFunctionCall","src":"21622:30:124"},"nodeType":"YulExpressionStatement","src":"21622:30:124"},{"nodeType":"YulAssignment","src":"21661:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"21671:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21661:6:124"}]}]},"name":"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20269:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"20280:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"20292:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20300:6:124","type":""}],"src":"20194:1488:124"},{"body":{"nodeType":"YulBlock","src":"21842:581:124","statements":[{"body":{"nodeType":"YulBlock","src":"21889:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21898:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21901:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21891:6:124"},"nodeType":"YulFunctionCall","src":"21891:12:124"},"nodeType":"YulExpressionStatement","src":"21891:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21863:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"21872:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21859:3:124"},"nodeType":"YulFunctionCall","src":"21859:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"21884:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21855:3:124"},"nodeType":"YulFunctionCall","src":"21855:33:124"},"nodeType":"YulIf","src":"21852:53:124"},{"nodeType":"YulVariableDeclaration","src":"21914:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21940:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21927:12:124"},"nodeType":"YulFunctionCall","src":"21927:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"21918:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21984:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21959:24:124"},"nodeType":"YulFunctionCall","src":"21959:31:124"},"nodeType":"YulExpressionStatement","src":"21959:31:124"},{"nodeType":"YulAssignment","src":"21999:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"22009:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21999:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"22023:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22055:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22066:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22051:3:124"},"nodeType":"YulFunctionCall","src":"22051:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22038:12:124"},"nodeType":"YulFunctionCall","src":"22038:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22027:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22104:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22079:24:124"},"nodeType":"YulFunctionCall","src":"22079:33:124"},"nodeType":"YulExpressionStatement","src":"22079:33:124"},{"nodeType":"YulAssignment","src":"22121:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"22131:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"22121:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"22147:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22179:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22190:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22175:3:124"},"nodeType":"YulFunctionCall","src":"22175:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22162:12:124"},"nodeType":"YulFunctionCall","src":"22162:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"22151:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"22228:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22203:24:124"},"nodeType":"YulFunctionCall","src":"22203:33:124"},"nodeType":"YulExpressionStatement","src":"22203:33:124"},{"nodeType":"YulAssignment","src":"22245:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"22255:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"22245:6:124"}]},{"nodeType":"YulAssignment","src":"22271:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22298:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22309:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22294:3:124"},"nodeType":"YulFunctionCall","src":"22294:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22281:12:124"},"nodeType":"YulFunctionCall","src":"22281:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"22271:6:124"}]},{"nodeType":"YulAssignment","src":"22322:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22349:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22360:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22345:3:124"},"nodeType":"YulFunctionCall","src":"22345:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22332:12:124"},"nodeType":"YulFunctionCall","src":"22332:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"22322:6:124"}]},{"nodeType":"YulAssignment","src":"22374:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22412:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22397:3:124"},"nodeType":"YulFunctionCall","src":"22397:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22384:12:124"},"nodeType":"YulFunctionCall","src":"22384:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"22374:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21768:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21779:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21791:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21799:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21807:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21815:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21823:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21831:6:124","type":""}],"src":"21687:736:124"},{"body":{"nodeType":"YulBlock","src":"22615:616:124","statements":[{"body":{"nodeType":"YulBlock","src":"22662:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22671:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22674:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22664:6:124"},"nodeType":"YulFunctionCall","src":"22664:12:124"},"nodeType":"YulExpressionStatement","src":"22664:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22636:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"22645:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22632:3:124"},"nodeType":"YulFunctionCall","src":"22632:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"22657:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22628:3:124"},"nodeType":"YulFunctionCall","src":"22628:33:124"},"nodeType":"YulIf","src":"22625:53:124"},{"nodeType":"YulVariableDeclaration","src":"22687:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22713:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22700:12:124"},"nodeType":"YulFunctionCall","src":"22700:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22691:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22757:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22732:24:124"},"nodeType":"YulFunctionCall","src":"22732:31:124"},"nodeType":"YulExpressionStatement","src":"22732:31:124"},{"nodeType":"YulAssignment","src":"22772:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"22782:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22772:6:124"}]},{"nodeType":"YulAssignment","src":"22796:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22823:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22834:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22819:3:124"},"nodeType":"YulFunctionCall","src":"22819:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22806:12:124"},"nodeType":"YulFunctionCall","src":"22806:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"22796:6:124"}]},{"nodeType":"YulAssignment","src":"22847:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22874:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22885:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22870:3:124"},"nodeType":"YulFunctionCall","src":"22870:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22857:12:124"},"nodeType":"YulFunctionCall","src":"22857:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"22847:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"22898:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22930:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22941:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22926:3:124"},"nodeType":"YulFunctionCall","src":"22926:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22913:12:124"},"nodeType":"YulFunctionCall","src":"22913:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22902:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22979:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22954:24:124"},"nodeType":"YulFunctionCall","src":"22954:33:124"},"nodeType":"YulExpressionStatement","src":"22954:33:124"},{"nodeType":"YulAssignment","src":"22996:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"23006:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"22996:6:124"}]},{"nodeType":"YulAssignment","src":"23022:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23049:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23060:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23045:3:124"},"nodeType":"YulFunctionCall","src":"23045:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23032:12:124"},"nodeType":"YulFunctionCall","src":"23032:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"23022:6:124"}]},{"nodeType":"YulAssignment","src":"23074:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23105:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23116:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23101:3:124"},"nodeType":"YulFunctionCall","src":"23101:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"23084:16:124"},"nodeType":"YulFunctionCall","src":"23084:37:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"23074:6:124"}]},{"nodeType":"YulAssignment","src":"23130:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23157:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23168:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23153:3:124"},"nodeType":"YulFunctionCall","src":"23153:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23140:12:124"},"nodeType":"YulFunctionCall","src":"23140:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"23130:6:124"}]},{"nodeType":"YulAssignment","src":"23182:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23209:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23220:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23205:3:124"},"nodeType":"YulFunctionCall","src":"23205:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23192:12:124"},"nodeType":"YulFunctionCall","src":"23192:33:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"23182:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22525:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22536:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22548:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22556:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22564:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22572:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22580:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22588:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"22596:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"22604:6:124","type":""}],"src":"22428:803:124"},{"body":{"nodeType":"YulBlock","src":"23367:348:124","statements":[{"nodeType":"YulVariableDeclaration","src":"23377:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23391:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"23400:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23387:3:124"},"nodeType":"YulFunctionCall","src":"23387:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"23381:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"23434:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23443:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23446:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23436:6:124"},"nodeType":"YulFunctionCall","src":"23436:12:124"},"nodeType":"YulExpressionStatement","src":"23436:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"23426:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"23430:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23422:3:124"},"nodeType":"YulFunctionCall","src":"23422:11:124"},"nodeType":"YulIf","src":"23419:31:124"},{"nodeType":"YulVariableDeclaration","src":"23459:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23485:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23472:12:124"},"nodeType":"YulFunctionCall","src":"23472:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23463:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23529:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"23504:24:124"},"nodeType":"YulFunctionCall","src":"23504:31:124"},"nodeType":"YulExpressionStatement","src":"23504:31:124"},{"nodeType":"YulAssignment","src":"23544:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"23554:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23544:6:124"}]},{"body":{"nodeType":"YulBlock","src":"23656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23658:6:124"},"nodeType":"YulFunctionCall","src":"23658:12:124"},"nodeType":"YulExpressionStatement","src":"23658:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"23579:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"23583:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23575:3:124"},"nodeType":"YulFunctionCall","src":"23575:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"23652:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23571:3:124"},"nodeType":"YulFunctionCall","src":"23571:84:124"},"nodeType":"YulIf","src":"23568:104:124"},{"nodeType":"YulAssignment","src":"23681:28:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23695:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23706:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23691:3:124"},"nodeType":"YulFunctionCall","src":"23691:18:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"23681:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23325:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23336:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23348:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23356:6:124","type":""}],"src":"23236:479:124"},{"body":{"nodeType":"YulBlock","src":"23819:89:124","statements":[{"nodeType":"YulAssignment","src":"23829:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23841:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23852:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23837:3:124"},"nodeType":"YulFunctionCall","src":"23837:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23829:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23871:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23886:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"23894:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23882:3:124"},"nodeType":"YulFunctionCall","src":"23882:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23864:6:124"},"nodeType":"YulFunctionCall","src":"23864:38:124"},"nodeType":"YulExpressionStatement","src":"23864:38:124"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23788:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23799:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23810:4:124","type":""}],"src":"23720:188:124"},{"body":{"nodeType":"YulBlock","src":"24000:161:124","statements":[{"body":{"nodeType":"YulBlock","src":"24046:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24055:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24058:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"24048:6:124"},"nodeType":"YulFunctionCall","src":"24048:12:124"},"nodeType":"YulExpressionStatement","src":"24048:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"24021:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"24030:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24017:3:124"},"nodeType":"YulFunctionCall","src":"24017:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"24042:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"24013:3:124"},"nodeType":"YulFunctionCall","src":"24013:32:124"},"nodeType":"YulIf","src":"24010:52:124"},{"nodeType":"YulAssignment","src":"24071:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24094:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"24081:12:124"},"nodeType":"YulFunctionCall","src":"24081:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"24071:6:124"}]},{"nodeType":"YulAssignment","src":"24113:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24140:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24151:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24136:3:124"},"nodeType":"YulFunctionCall","src":"24136:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"24123:12:124"},"nodeType":"YulFunctionCall","src":"24123:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"24113:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23958:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23969:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23981:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23989:6:124","type":""}],"src":"23913:248:124"},{"body":{"nodeType":"YulBlock","src":"24247:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"24293:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24302:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24305:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"24295:6:124"},"nodeType":"YulFunctionCall","src":"24295:12:124"},"nodeType":"YulExpressionStatement","src":"24295:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"24268:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"24277:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24264:3:124"},"nodeType":"YulFunctionCall","src":"24264:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"24289:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"24260:3:124"},"nodeType":"YulFunctionCall","src":"24260:32:124"},"nodeType":"YulIf","src":"24257:52:124"},{"nodeType":"YulVariableDeclaration","src":"24318:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24337:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24331:5:124"},"nodeType":"YulFunctionCall","src":"24331:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"24322:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"24381:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"24356:24:124"},"nodeType":"YulFunctionCall","src":"24356:31:124"},"nodeType":"YulExpressionStatement","src":"24356:31:124"},{"nodeType":"YulAssignment","src":"24396:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"24406:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"24396:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24213:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"24224:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"24236:6:124","type":""}],"src":"24166:251:124"},{"body":{"nodeType":"YulBlock","src":"24463:50:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"24480:3:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"24499:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24492:6:124"},"nodeType":"YulFunctionCall","src":"24492:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24485:6:124"},"nodeType":"YulFunctionCall","src":"24485:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24473:6:124"},"nodeType":"YulFunctionCall","src":"24473:34:124"},"nodeType":"YulExpressionStatement","src":"24473:34:124"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"24447:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"24454:3:124","type":""}],"src":"24422:91:124"},{"body":{"nodeType":"YulBlock","src":"24560:33:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"24569:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"24578:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"24585:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24574:3:124"},"nodeType":"YulFunctionCall","src":"24574:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24562:6:124"},"nodeType":"YulFunctionCall","src":"24562:29:124"},"nodeType":"YulExpressionStatement","src":"24562:29:124"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"24544:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"24551:3:124","type":""}],"src":"24518:75:124"},{"body":{"nodeType":"YulBlock","src":"25103:1162:124","statements":[{"nodeType":"YulAssignment","src":"25113:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25125:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25136:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25121:3:124"},"nodeType":"YulFunctionCall","src":"25121:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25113:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25156:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"25167:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25149:6:124"},"nodeType":"YulFunctionCall","src":"25149:25:124"},"nodeType":"YulExpressionStatement","src":"25149:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25194:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25205:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25190:3:124"},"nodeType":"YulFunctionCall","src":"25190:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"25210:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25183:6:124"},"nodeType":"YulFunctionCall","src":"25183:34:124"},"nodeType":"YulExpressionStatement","src":"25183:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25237:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25248:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25233:3:124"},"nodeType":"YulFunctionCall","src":"25233:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"25253:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25226:6:124"},"nodeType":"YulFunctionCall","src":"25226:34:124"},"nodeType":"YulExpressionStatement","src":"25226:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25280:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25291:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25276:3:124"},"nodeType":"YulFunctionCall","src":"25276:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"25296:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25269:6:124"},"nodeType":"YulFunctionCall","src":"25269:34:124"},"nodeType":"YulExpressionStatement","src":"25269:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25323:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25334:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25319:3:124"},"nodeType":"YulFunctionCall","src":"25319:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25346:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25340:5:124"},"nodeType":"YulFunctionCall","src":"25340:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25312:6:124"},"nodeType":"YulFunctionCall","src":"25312:42:124"},"nodeType":"YulExpressionStatement","src":"25312:42:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25374:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25385:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25370:3:124"},"nodeType":"YulFunctionCall","src":"25370:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25401:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25409:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25397:3:124"},"nodeType":"YulFunctionCall","src":"25397:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25391:5:124"},"nodeType":"YulFunctionCall","src":"25391:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25363:6:124"},"nodeType":"YulFunctionCall","src":"25363:51:124"},"nodeType":"YulExpressionStatement","src":"25363:51:124"},{"nodeType":"YulVariableDeclaration","src":"25423:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25453:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25461:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25449:3:124"},"nodeType":"YulFunctionCall","src":"25449:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25443:5:124"},"nodeType":"YulFunctionCall","src":"25443:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"25427:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"25474:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"25484:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25478:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25546:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25557:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25542:3:124"},"nodeType":"YulFunctionCall","src":"25542:19:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"25567:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25581:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25563:3:124"},"nodeType":"YulFunctionCall","src":"25563:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25535:6:124"},"nodeType":"YulFunctionCall","src":"25535:50:124"},"nodeType":"YulExpressionStatement","src":"25535:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25605:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25616:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25601:3:124"},"nodeType":"YulFunctionCall","src":"25601:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25636:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25644:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25632:3:124"},"nodeType":"YulFunctionCall","src":"25632:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25626:5:124"},"nodeType":"YulFunctionCall","src":"25626:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25650:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25622:3:124"},"nodeType":"YulFunctionCall","src":"25622:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25594:6:124"},"nodeType":"YulFunctionCall","src":"25594:60:124"},"nodeType":"YulExpressionStatement","src":"25594:60:124"},{"nodeType":"YulVariableDeclaration","src":"25663:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25695:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25703:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25691:3:124"},"nodeType":"YulFunctionCall","src":"25691:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25685:5:124"},"nodeType":"YulFunctionCall","src":"25685:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"25667:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"25717:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"25727:3:124","type":"","value":"256"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"25721:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"25758:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25778:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"25789:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25774:3:124"},"nodeType":"YulFunctionCall","src":"25774:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25739:18:124"},"nodeType":"YulFunctionCall","src":"25739:54:124"},"nodeType":"YulExpressionStatement","src":"25739:54:124"},{"nodeType":"YulVariableDeclaration","src":"25802:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25834:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25842:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25830:3:124"},"nodeType":"YulFunctionCall","src":"25830:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25824:5:124"},"nodeType":"YulFunctionCall","src":"25824:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"25806:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"25872:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25892:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25903:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25888:3:124"},"nodeType":"YulFunctionCall","src":"25888:19:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"25856:15:124"},"nodeType":"YulFunctionCall","src":"25856:52:124"},"nodeType":"YulExpressionStatement","src":"25856:52:124"},{"nodeType":"YulVariableDeclaration","src":"25917:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25949:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25957:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25945:3:124"},"nodeType":"YulFunctionCall","src":"25945:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25939:5:124"},"nodeType":"YulFunctionCall","src":"25939:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"25921:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"25990:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26010:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26021:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26006:3:124"},"nodeType":"YulFunctionCall","src":"26006:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25971:18:124"},"nodeType":"YulFunctionCall","src":"25971:55:124"},"nodeType":"YulExpressionStatement","src":"25971:55:124"},{"nodeType":"YulVariableDeclaration","src":"26035:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26067:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26075:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26063:3:124"},"nodeType":"YulFunctionCall","src":"26063:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26057:5:124"},"nodeType":"YulFunctionCall","src":"26057:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"26039:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"26106:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26126:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26137:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26122:3:124"},"nodeType":"YulFunctionCall","src":"26122:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"26089:16:124"},"nodeType":"YulFunctionCall","src":"26089:53:124"},"nodeType":"YulExpressionStatement","src":"26089:53:124"},{"nodeType":"YulVariableDeclaration","src":"26151:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26183:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"26191:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26179:3:124"},"nodeType":"YulFunctionCall","src":"26179:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26173:5:124"},"nodeType":"YulFunctionCall","src":"26173:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"26155:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"26223:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26243:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26254:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26239:3:124"},"nodeType":"YulFunctionCall","src":"26239:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"26204:18:124"},"nodeType":"YulFunctionCall","src":"26204:55:124"},"nodeType":"YulExpressionStatement","src":"26204:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25040:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"25051:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25059:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25067:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25075:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25083:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25094:4:124","type":""}],"src":"24598:1667:124"},{"body":{"nodeType":"YulBlock","src":"26535:428:124","statements":[{"nodeType":"YulAssignment","src":"26545:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26557:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26568:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26553:3:124"},"nodeType":"YulFunctionCall","src":"26553:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26545:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"26581:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"26591:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26585:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26649:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26664:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"26672:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26660:3:124"},"nodeType":"YulFunctionCall","src":"26660:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26642:6:124"},"nodeType":"YulFunctionCall","src":"26642:34:124"},"nodeType":"YulExpressionStatement","src":"26642:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26696:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26707:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26692:3:124"},"nodeType":"YulFunctionCall","src":"26692:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"26716:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"26724:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26712:3:124"},"nodeType":"YulFunctionCall","src":"26712:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26685:6:124"},"nodeType":"YulFunctionCall","src":"26685:43:124"},"nodeType":"YulExpressionStatement","src":"26685:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26748:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26759:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26744:3:124"},"nodeType":"YulFunctionCall","src":"26744:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"26764:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26737:6:124"},"nodeType":"YulFunctionCall","src":"26737:34:124"},"nodeType":"YulExpressionStatement","src":"26737:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26791:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26802:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26787:3:124"},"nodeType":"YulFunctionCall","src":"26787:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"26807:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26780:6:124"},"nodeType":"YulFunctionCall","src":"26780:34:124"},"nodeType":"YulExpressionStatement","src":"26780:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26834:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26845:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26830:3:124"},"nodeType":"YulFunctionCall","src":"26830:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26855:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26863:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26851:3:124"},"nodeType":"YulFunctionCall","src":"26851:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26823:6:124"},"nodeType":"YulFunctionCall","src":"26823:46:124"},"nodeType":"YulExpressionStatement","src":"26823:46:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26889:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26900:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26885:3:124"},"nodeType":"YulFunctionCall","src":"26885:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"26906:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26878:6:124"},"nodeType":"YulFunctionCall","src":"26878:35:124"},"nodeType":"YulExpressionStatement","src":"26878:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26933:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26944:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26929:3:124"},"nodeType":"YulFunctionCall","src":"26929:19:124"},{"name":"value6","nodeType":"YulIdentifier","src":"26950:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26922:6:124"},"nodeType":"YulFunctionCall","src":"26922:35:124"},"nodeType":"YulExpressionStatement","src":"26922:35:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26456:9:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"26467:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"26475:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"26483:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26491:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26499:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26507:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26515:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26526:4:124","type":""}],"src":"26270:693:124"},{"body":{"nodeType":"YulBlock","src":"27350:485:124","statements":[{"nodeType":"YulAssignment","src":"27360:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27372:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27383:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27368:3:124"},"nodeType":"YulFunctionCall","src":"27368:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27360:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27403:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"27414:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27396:6:124"},"nodeType":"YulFunctionCall","src":"27396:25:124"},"nodeType":"YulExpressionStatement","src":"27396:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27441:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27452:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27437:3:124"},"nodeType":"YulFunctionCall","src":"27437:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"27457:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27430:6:124"},"nodeType":"YulFunctionCall","src":"27430:34:124"},"nodeType":"YulExpressionStatement","src":"27430:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27484:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27495:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27480:3:124"},"nodeType":"YulFunctionCall","src":"27480:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"27500:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27473:6:124"},"nodeType":"YulFunctionCall","src":"27473:34:124"},"nodeType":"YulExpressionStatement","src":"27473:34:124"},{"nodeType":"YulVariableDeclaration","src":"27516:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"27526:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"27520:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27599:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27584:3:124"},"nodeType":"YulFunctionCall","src":"27584:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27614:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27608:5:124"},"nodeType":"YulFunctionCall","src":"27608:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"27623:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27604:3:124"},"nodeType":"YulFunctionCall","src":"27604:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27577:6:124"},"nodeType":"YulFunctionCall","src":"27577:50:124"},"nodeType":"YulExpressionStatement","src":"27577:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27647:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27658:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27643:3:124"},"nodeType":"YulFunctionCall","src":"27643:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27674:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"27682:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27670:3:124"},"nodeType":"YulFunctionCall","src":"27670:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27664:5:124"},"nodeType":"YulFunctionCall","src":"27664:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27636:6:124"},"nodeType":"YulFunctionCall","src":"27636:51:124"},"nodeType":"YulExpressionStatement","src":"27636:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27707:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27718:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27703:3:124"},"nodeType":"YulFunctionCall","src":"27703:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27738:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"27746:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27734:3:124"},"nodeType":"YulFunctionCall","src":"27734:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27728:5:124"},"nodeType":"YulFunctionCall","src":"27728:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"27752:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27724:3:124"},"nodeType":"YulFunctionCall","src":"27724:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27696:6:124"},"nodeType":"YulFunctionCall","src":"27696:60:124"},"nodeType":"YulExpressionStatement","src":"27696:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27776:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27787:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27772:3:124"},"nodeType":"YulFunctionCall","src":"27772:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27807:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"27815:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27803:3:124"},"nodeType":"YulFunctionCall","src":"27803:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27797:5:124"},"nodeType":"YulFunctionCall","src":"27797:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"27821:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27793:3:124"},"nodeType":"YulFunctionCall","src":"27793:35:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27765:6:124"},"nodeType":"YulFunctionCall","src":"27765:64:124"},"nodeType":"YulExpressionStatement","src":"27765:64:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27295:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"27306:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"27314:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"27322:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27330:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27341:4:124","type":""}],"src":"26968:867:124"},{"body":{"nodeType":"YulBlock","src":"27961:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27978:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27989:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27971:6:124"},"nodeType":"YulFunctionCall","src":"27971:21:124"},"nodeType":"YulExpressionStatement","src":"27971:21:124"},{"nodeType":"YulAssignment","src":"28001:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28027:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28039:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28050:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28035:3:124"},"nodeType":"YulFunctionCall","src":"28035:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"28009:17:124"},"nodeType":"YulFunctionCall","src":"28009:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28001:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27930:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27941:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27952:4:124","type":""}],"src":"27840:220:124"},{"body":{"nodeType":"YulBlock","src":"28590:481:124","statements":[{"nodeType":"YulAssignment","src":"28600:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28612:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28623:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28608:3:124"},"nodeType":"YulFunctionCall","src":"28608:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28600:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28643:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"28654:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28636:6:124"},"nodeType":"YulFunctionCall","src":"28636:25:124"},"nodeType":"YulExpressionStatement","src":"28636:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28681:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28692:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28677:3:124"},"nodeType":"YulFunctionCall","src":"28677:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"28697:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28670:6:124"},"nodeType":"YulFunctionCall","src":"28670:34:124"},"nodeType":"YulExpressionStatement","src":"28670:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28724:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28735:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28720:3:124"},"nodeType":"YulFunctionCall","src":"28720:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"28740:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28713:6:124"},"nodeType":"YulFunctionCall","src":"28713:34:124"},"nodeType":"YulExpressionStatement","src":"28713:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28767:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28778:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28763:3:124"},"nodeType":"YulFunctionCall","src":"28763:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"28783:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28756:6:124"},"nodeType":"YulFunctionCall","src":"28756:34:124"},"nodeType":"YulExpressionStatement","src":"28756:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28810:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28821:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28806:3:124"},"nodeType":"YulFunctionCall","src":"28806:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"28827:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28799:6:124"},"nodeType":"YulFunctionCall","src":"28799:35:124"},"nodeType":"YulExpressionStatement","src":"28799:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28854:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28865:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28850:3:124"},"nodeType":"YulFunctionCall","src":"28850:19:124"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28877:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28871:5:124"},"nodeType":"YulFunctionCall","src":"28871:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28843:6:124"},"nodeType":"YulFunctionCall","src":"28843:42:124"},"nodeType":"YulExpressionStatement","src":"28843:42:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28905:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28916:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28901:3:124"},"nodeType":"YulFunctionCall","src":"28901:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28936:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"28944:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28932:3:124"},"nodeType":"YulFunctionCall","src":"28932:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28926:5:124"},"nodeType":"YulFunctionCall","src":"28926:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"28950:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28922:3:124"},"nodeType":"YulFunctionCall","src":"28922:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28894:6:124"},"nodeType":"YulFunctionCall","src":"28894:100:124"},"nodeType":"YulExpressionStatement","src":"28894:100:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29014:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29025:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29010:3:124"},"nodeType":"YulFunctionCall","src":"29010:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"29045:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29053:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29041:3:124"},"nodeType":"YulFunctionCall","src":"29041:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29035:5:124"},"nodeType":"YulFunctionCall","src":"29035:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"29059:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29031:3:124"},"nodeType":"YulFunctionCall","src":"29031:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29003:6:124"},"nodeType":"YulFunctionCall","src":"29003:62:124"},"nodeType":"YulExpressionStatement","src":"29003:62:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"28519:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"28530:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"28538:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"28546:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"28554:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"28562:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"28570:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"28581:4:124","type":""}],"src":"28065:1006:124"},{"body":{"nodeType":"YulBlock","src":"29108:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29125:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29128:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29118:6:124"},"nodeType":"YulFunctionCall","src":"29118:88:124"},"nodeType":"YulExpressionStatement","src":"29118:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29222:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"29225:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29215:6:124"},"nodeType":"YulFunctionCall","src":"29215:15:124"},"nodeType":"YulExpressionStatement","src":"29215:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29246:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29249:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29239:6:124"},"nodeType":"YulFunctionCall","src":"29239:15:124"},"nodeType":"YulExpressionStatement","src":"29239:15:124"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"29076:184:124"},{"body":{"nodeType":"YulBlock","src":"29323:243:124","statements":[{"body":{"nodeType":"YulBlock","src":"29365:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29386:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29389:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29379:6:124"},"nodeType":"YulFunctionCall","src":"29379:88:124"},"nodeType":"YulExpressionStatement","src":"29379:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29487:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"29490:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29480:6:124"},"nodeType":"YulFunctionCall","src":"29480:15:124"},"nodeType":"YulExpressionStatement","src":"29480:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29515:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29518:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29508:6:124"},"nodeType":"YulFunctionCall","src":"29508:15:124"},"nodeType":"YulExpressionStatement","src":"29508:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"29346:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"29353:1:124","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"29343:2:124"},"nodeType":"YulFunctionCall","src":"29343:12:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29336:6:124"},"nodeType":"YulFunctionCall","src":"29336:20:124"},"nodeType":"YulIf","src":"29333:200:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"29549:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"29554:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29542:6:124"},"nodeType":"YulFunctionCall","src":"29542:18:124"},"nodeType":"YulExpressionStatement","src":"29542:18:124"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"29307:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"29314:3:124","type":""}],"src":"29265:301:124"},{"body":{"nodeType":"YulBlock","src":"29951:616:124","statements":[{"nodeType":"YulAssignment","src":"29961:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29973:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29984:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29969:3:124"},"nodeType":"YulFunctionCall","src":"29969:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29961:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30004:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"30015:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29997:6:124"},"nodeType":"YulFunctionCall","src":"29997:25:124"},"nodeType":"YulExpressionStatement","src":"29997:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30053:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30038:3:124"},"nodeType":"YulFunctionCall","src":"30038:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"30058:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30031:6:124"},"nodeType":"YulFunctionCall","src":"30031:34:124"},"nodeType":"YulExpressionStatement","src":"30031:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30085:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30096:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30081:3:124"},"nodeType":"YulFunctionCall","src":"30081:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"30101:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30074:6:124"},"nodeType":"YulFunctionCall","src":"30074:34:124"},"nodeType":"YulExpressionStatement","src":"30074:34:124"},{"nodeType":"YulVariableDeclaration","src":"30117:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"30127:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"30121:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30189:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30200:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30185:3:124"},"nodeType":"YulFunctionCall","src":"30185:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30215:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30209:5:124"},"nodeType":"YulFunctionCall","src":"30209:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"30224:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30205:3:124"},"nodeType":"YulFunctionCall","src":"30205:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30178:6:124"},"nodeType":"YulFunctionCall","src":"30178:50:124"},"nodeType":"YulExpressionStatement","src":"30178:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30248:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30259:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30244:3:124"},"nodeType":"YulFunctionCall","src":"30244:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30275:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30283:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30271:3:124"},"nodeType":"YulFunctionCall","src":"30271:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30265:5:124"},"nodeType":"YulFunctionCall","src":"30265:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30237:6:124"},"nodeType":"YulFunctionCall","src":"30237:51:124"},"nodeType":"YulExpressionStatement","src":"30237:51:124"},{"nodeType":"YulVariableDeclaration","src":"30297:42:124","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30327:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30335:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30323:3:124"},"nodeType":"YulFunctionCall","src":"30323:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30317:5:124"},"nodeType":"YulFunctionCall","src":"30317:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"30301:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"30381:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30399:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30410:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30395:3:124"},"nodeType":"YulFunctionCall","src":"30395:19:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"30348:32:124"},"nodeType":"YulFunctionCall","src":"30348:67:124"},"nodeType":"YulExpressionStatement","src":"30348:67:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30446:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30431:3:124"},"nodeType":"YulFunctionCall","src":"30431:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30466:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30474:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30462:3:124"},"nodeType":"YulFunctionCall","src":"30462:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30456:5:124"},"nodeType":"YulFunctionCall","src":"30456:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"30480:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30452:3:124"},"nodeType":"YulFunctionCall","src":"30452:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30424:6:124"},"nodeType":"YulFunctionCall","src":"30424:60:124"},"nodeType":"YulExpressionStatement","src":"30424:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30504:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30515:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30500:3:124"},"nodeType":"YulFunctionCall","src":"30500:19:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30545:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30553:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30541:3:124"},"nodeType":"YulFunctionCall","src":"30541:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30535:5:124"},"nodeType":"YulFunctionCall","src":"30535:23:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30528:6:124"},"nodeType":"YulFunctionCall","src":"30528:31:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30521:6:124"},"nodeType":"YulFunctionCall","src":"30521:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30493:6:124"},"nodeType":"YulFunctionCall","src":"30493:68:124"},"nodeType":"YulExpressionStatement","src":"30493:68:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29896:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29907:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29915:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29923:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29931:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29942:4:124","type":""}],"src":"29571:996:124"},{"body":{"nodeType":"YulBlock","src":"30653:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"30699:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30708:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30711:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"30701:6:124"},"nodeType":"YulFunctionCall","src":"30701:12:124"},"nodeType":"YulExpressionStatement","src":"30701:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"30674:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"30683:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30670:3:124"},"nodeType":"YulFunctionCall","src":"30670:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"30695:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"30666:3:124"},"nodeType":"YulFunctionCall","src":"30666:32:124"},"nodeType":"YulIf","src":"30663:52:124"},{"nodeType":"YulAssignment","src":"30724:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30740:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30734:5:124"},"nodeType":"YulFunctionCall","src":"30734:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"30724:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30619:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"30630:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"30642:6:124","type":""}],"src":"30572:184:124"},{"body":{"nodeType":"YulBlock","src":"31005:716:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31022:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"31033:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31015:6:124"},"nodeType":"YulFunctionCall","src":"31015:25:124"},"nodeType":"YulExpressionStatement","src":"31015:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31060:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31071:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31056:3:124"},"nodeType":"YulFunctionCall","src":"31056:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"31076:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31049:6:124"},"nodeType":"YulFunctionCall","src":"31049:30:124"},"nodeType":"YulExpressionStatement","src":"31049:30:124"},{"nodeType":"YulVariableDeclaration","src":"31088:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"31098:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"31092:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31160:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31171:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31156:3:124"},"nodeType":"YulFunctionCall","src":"31156:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31186:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31180:5:124"},"nodeType":"YulFunctionCall","src":"31180:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"31195:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31176:3:124"},"nodeType":"YulFunctionCall","src":"31176:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31149:6:124"},"nodeType":"YulFunctionCall","src":"31149:50:124"},"nodeType":"YulExpressionStatement","src":"31149:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31219:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31230:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31215:3:124"},"nodeType":"YulFunctionCall","src":"31215:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31249:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31257:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31245:3:124"},"nodeType":"YulFunctionCall","src":"31245:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31239:5:124"},"nodeType":"YulFunctionCall","src":"31239:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"31263:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31235:3:124"},"nodeType":"YulFunctionCall","src":"31235:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31208:6:124"},"nodeType":"YulFunctionCall","src":"31208:59:124"},"nodeType":"YulExpressionStatement","src":"31208:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31287:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31298:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31283:3:124"},"nodeType":"YulFunctionCall","src":"31283:19:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31314:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31322:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31310:3:124"},"nodeType":"YulFunctionCall","src":"31310:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31304:5:124"},"nodeType":"YulFunctionCall","src":"31304:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31276:6:124"},"nodeType":"YulFunctionCall","src":"31276:51:124"},"nodeType":"YulExpressionStatement","src":"31276:51:124"},{"nodeType":"YulVariableDeclaration","src":"31336:42:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31366:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31374:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31362:3:124"},"nodeType":"YulFunctionCall","src":"31362:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31356:5:124"},"nodeType":"YulFunctionCall","src":"31356:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"31340:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31398:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31409:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31394:3:124"},"nodeType":"YulFunctionCall","src":"31394:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"31415:4:124","type":"","value":"0xe0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31387:6:124"},"nodeType":"YulFunctionCall","src":"31387:33:124"},"nodeType":"YulExpressionStatement","src":"31387:33:124"},{"nodeType":"YulVariableDeclaration","src":"31429:66:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"31461:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31479:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31490:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31475:3:124"},"nodeType":"YulFunctionCall","src":"31475:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"31443:17:124"},"nodeType":"YulFunctionCall","src":"31443:52:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"31433:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31515:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31526:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31511:3:124"},"nodeType":"YulFunctionCall","src":"31511:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31546:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31554:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31542:3:124"},"nodeType":"YulFunctionCall","src":"31542:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31536:5:124"},"nodeType":"YulFunctionCall","src":"31536:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"31561:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31532:3:124"},"nodeType":"YulFunctionCall","src":"31532:36:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31504:6:124"},"nodeType":"YulFunctionCall","src":"31504:65:124"},"nodeType":"YulExpressionStatement","src":"31504:65:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31589:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31600:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31585:3:124"},"nodeType":"YulFunctionCall","src":"31585:20:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31617:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31625:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31613:3:124"},"nodeType":"YulFunctionCall","src":"31613:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31607:5:124"},"nodeType":"YulFunctionCall","src":"31607:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31578:6:124"},"nodeType":"YulFunctionCall","src":"31578:53:124"},"nodeType":"YulExpressionStatement","src":"31578:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31651:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31662:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31647:3:124"},"nodeType":"YulFunctionCall","src":"31647:19:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31678:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31686:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31674:3:124"},"nodeType":"YulFunctionCall","src":"31674:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31668:5:124"},"nodeType":"YulFunctionCall","src":"31668:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31640:6:124"},"nodeType":"YulFunctionCall","src":"31640:52:124"},"nodeType":"YulExpressionStatement","src":"31640:52:124"},{"nodeType":"YulAssignment","src":"31701:14:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"31709:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31701:4:124"}]}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30966:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"30977:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"30985:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30996:4:124","type":""}],"src":"30761:960:124"},{"body":{"nodeType":"YulBlock","src":"32213:545:124","statements":[{"nodeType":"YulAssignment","src":"32223:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32235:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32246:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32231:3:124"},"nodeType":"YulFunctionCall","src":"32231:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32223:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32266:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"32277:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32259:6:124"},"nodeType":"YulFunctionCall","src":"32259:25:124"},"nodeType":"YulExpressionStatement","src":"32259:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32304:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32315:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32300:3:124"},"nodeType":"YulFunctionCall","src":"32300:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"32320:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32293:6:124"},"nodeType":"YulFunctionCall","src":"32293:34:124"},"nodeType":"YulExpressionStatement","src":"32293:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32347:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32358:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32343:3:124"},"nodeType":"YulFunctionCall","src":"32343:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"32363:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32336:6:124"},"nodeType":"YulFunctionCall","src":"32336:34:124"},"nodeType":"YulExpressionStatement","src":"32336:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32390:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32401:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32386:3:124"},"nodeType":"YulFunctionCall","src":"32386:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"32406:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32379:6:124"},"nodeType":"YulFunctionCall","src":"32379:34:124"},"nodeType":"YulExpressionStatement","src":"32379:34:124"},{"nodeType":"YulVariableDeclaration","src":"32422:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"32432:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"32426:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32494:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32505:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32490:3:124"},"nodeType":"YulFunctionCall","src":"32490:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32515:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"32523:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32511:3:124"},"nodeType":"YulFunctionCall","src":"32511:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32483:6:124"},"nodeType":"YulFunctionCall","src":"32483:44:124"},"nodeType":"YulExpressionStatement","src":"32483:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32547:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32558:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32543:3:124"},"nodeType":"YulFunctionCall","src":"32543:19:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"32578:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"32571:6:124"},"nodeType":"YulFunctionCall","src":"32571:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"32564:6:124"},"nodeType":"YulFunctionCall","src":"32564:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32536:6:124"},"nodeType":"YulFunctionCall","src":"32536:51:124"},"nodeType":"YulExpressionStatement","src":"32536:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32607:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32618:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32603:3:124"},"nodeType":"YulFunctionCall","src":"32603:19:124"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"32628:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"32636:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32624:3:124"},"nodeType":"YulFunctionCall","src":"32624:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32596:6:124"},"nodeType":"YulFunctionCall","src":"32596:48:124"},"nodeType":"YulExpressionStatement","src":"32596:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32664:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32675:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32660:3:124"},"nodeType":"YulFunctionCall","src":"32660:19:124"},{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"32685:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"32693:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32681:3:124"},"nodeType":"YulFunctionCall","src":"32681:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32653:6:124"},"nodeType":"YulFunctionCall","src":"32653:44:124"},"nodeType":"YulExpressionStatement","src":"32653:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32717:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32728:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32713:3:124"},"nodeType":"YulFunctionCall","src":"32713:19:124"},{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"32738:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"32746:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32734:3:124"},"nodeType":"YulFunctionCall","src":"32734:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32706:6:124"},"nodeType":"YulFunctionCall","src":"32706:46:124"},"nodeType":"YulExpressionStatement","src":"32706:46:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32118:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"32129:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"32137:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"32145:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"32153:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"32161:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"32169:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32177:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32185:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32193:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32204:4:124","type":""}],"src":"31726:1032:124"},{"body":{"nodeType":"YulBlock","src":"33005:211:124","statements":[{"nodeType":"YulAssignment","src":"33015:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33027:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33038:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33023:3:124"},"nodeType":"YulFunctionCall","src":"33023:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33015:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33057:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"33068:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33050:6:124"},"nodeType":"YulFunctionCall","src":"33050:25:124"},"nodeType":"YulExpressionStatement","src":"33050:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33095:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33106:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33091:3:124"},"nodeType":"YulFunctionCall","src":"33091:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"33111:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33084:6:124"},"nodeType":"YulFunctionCall","src":"33084:34:124"},"nodeType":"YulExpressionStatement","src":"33084:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33138:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33149:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33134:3:124"},"nodeType":"YulFunctionCall","src":"33134:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"33158:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33166:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33154:3:124"},"nodeType":"YulFunctionCall","src":"33154:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33127:6:124"},"nodeType":"YulFunctionCall","src":"33127:83:124"},"nodeType":"YulExpressionStatement","src":"33127:83:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32958:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32969:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32977:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32985:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32996:4:124","type":""}],"src":"32763:453:124"},{"body":{"nodeType":"YulBlock","src":"33687:658:124","statements":[{"nodeType":"YulAssignment","src":"33697:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33709:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33720:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33705:3:124"},"nodeType":"YulFunctionCall","src":"33705:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33697:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33740:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"33751:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33733:6:124"},"nodeType":"YulFunctionCall","src":"33733:25:124"},"nodeType":"YulExpressionStatement","src":"33733:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33778:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33789:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33774:3:124"},"nodeType":"YulFunctionCall","src":"33774:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"33794:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33767:6:124"},"nodeType":"YulFunctionCall","src":"33767:34:124"},"nodeType":"YulExpressionStatement","src":"33767:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33821:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33832:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33817:3:124"},"nodeType":"YulFunctionCall","src":"33817:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"33837:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33810:6:124"},"nodeType":"YulFunctionCall","src":"33810:34:124"},"nodeType":"YulExpressionStatement","src":"33810:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33864:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33875:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33860:3:124"},"nodeType":"YulFunctionCall","src":"33860:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"33880:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33853:6:124"},"nodeType":"YulFunctionCall","src":"33853:34:124"},"nodeType":"YulExpressionStatement","src":"33853:34:124"},{"nodeType":"YulVariableDeclaration","src":"33896:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"33906:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"33900:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33968:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33979:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33964:3:124"},"nodeType":"YulFunctionCall","src":"33964:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33995:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33989:5:124"},"nodeType":"YulFunctionCall","src":"33989:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34004:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33985:3:124"},"nodeType":"YulFunctionCall","src":"33985:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33957:6:124"},"nodeType":"YulFunctionCall","src":"33957:51:124"},"nodeType":"YulExpressionStatement","src":"33957:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34028:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34039:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34024:3:124"},"nodeType":"YulFunctionCall","src":"34024:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34055:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34063:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34051:3:124"},"nodeType":"YulFunctionCall","src":"34051:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34045:5:124"},"nodeType":"YulFunctionCall","src":"34045:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34017:6:124"},"nodeType":"YulFunctionCall","src":"34017:51:124"},"nodeType":"YulExpressionStatement","src":"34017:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34088:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34099:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34084:3:124"},"nodeType":"YulFunctionCall","src":"34084:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34119:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34127:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34115:3:124"},"nodeType":"YulFunctionCall","src":"34115:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34109:5:124"},"nodeType":"YulFunctionCall","src":"34109:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34133:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34105:3:124"},"nodeType":"YulFunctionCall","src":"34105:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34077:6:124"},"nodeType":"YulFunctionCall","src":"34077:60:124"},"nodeType":"YulExpressionStatement","src":"34077:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34157:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34168:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34153:3:124"},"nodeType":"YulFunctionCall","src":"34153:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34184:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34192:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34180:3:124"},"nodeType":"YulFunctionCall","src":"34180:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34174:5:124"},"nodeType":"YulFunctionCall","src":"34174:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34146:6:124"},"nodeType":"YulFunctionCall","src":"34146:51:124"},"nodeType":"YulExpressionStatement","src":"34146:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34217:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34228:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34213:3:124"},"nodeType":"YulFunctionCall","src":"34213:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34248:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34256:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34244:3:124"},"nodeType":"YulFunctionCall","src":"34244:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34238:5:124"},"nodeType":"YulFunctionCall","src":"34238:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34263:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34234:3:124"},"nodeType":"YulFunctionCall","src":"34234:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34206:6:124"},"nodeType":"YulFunctionCall","src":"34206:61:124"},"nodeType":"YulExpressionStatement","src":"34206:61:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34287:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34298:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34283:3:124"},"nodeType":"YulFunctionCall","src":"34283:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34318:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34326:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34314:3:124"},"nodeType":"YulFunctionCall","src":"34314:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34308:5:124"},"nodeType":"YulFunctionCall","src":"34308:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"34333:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34304:3:124"},"nodeType":"YulFunctionCall","src":"34304:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34276:6:124"},"nodeType":"YulFunctionCall","src":"34276:63:124"},"nodeType":"YulExpressionStatement","src":"34276:63:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33624:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"33635:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"33643:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"33651:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"33659:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"33667:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33678:4:124","type":""}],"src":"33221:1124:124"},{"body":{"nodeType":"YulBlock","src":"34738:430:124","statements":[{"nodeType":"YulAssignment","src":"34748:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34760:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34771:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34756:3:124"},"nodeType":"YulFunctionCall","src":"34756:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"34748:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34791:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"34802:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34784:6:124"},"nodeType":"YulFunctionCall","src":"34784:25:124"},"nodeType":"YulExpressionStatement","src":"34784:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34829:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34840:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34825:3:124"},"nodeType":"YulFunctionCall","src":"34825:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"34845:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34818:6:124"},"nodeType":"YulFunctionCall","src":"34818:34:124"},"nodeType":"YulExpressionStatement","src":"34818:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34883:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34868:3:124"},"nodeType":"YulFunctionCall","src":"34868:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"34888:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34861:6:124"},"nodeType":"YulFunctionCall","src":"34861:34:124"},"nodeType":"YulExpressionStatement","src":"34861:34:124"},{"nodeType":"YulVariableDeclaration","src":"34904:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"34914:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"34908:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34976:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34987:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34972:3:124"},"nodeType":"YulFunctionCall","src":"34972:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"34996:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35004:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34992:3:124"},"nodeType":"YulFunctionCall","src":"34992:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34965:6:124"},"nodeType":"YulFunctionCall","src":"34965:43:124"},"nodeType":"YulExpressionStatement","src":"34965:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35028:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35039:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35024:3:124"},"nodeType":"YulFunctionCall","src":"35024:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"35045:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35017:6:124"},"nodeType":"YulFunctionCall","src":"35017:35:124"},"nodeType":"YulExpressionStatement","src":"35017:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35072:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35083:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35068:3:124"},"nodeType":"YulFunctionCall","src":"35068:19:124"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"35093:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35101:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35089:3:124"},"nodeType":"YulFunctionCall","src":"35089:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35061:6:124"},"nodeType":"YulFunctionCall","src":"35061:44:124"},"nodeType":"YulExpressionStatement","src":"35061:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35125:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35136:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35121:3:124"},"nodeType":"YulFunctionCall","src":"35121:19:124"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"35146:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35154:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35142:3:124"},"nodeType":"YulFunctionCall","src":"35142:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35114:6:124"},"nodeType":"YulFunctionCall","src":"35114:48:124"},"nodeType":"YulExpressionStatement","src":"35114:48:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"34659:9:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"34670:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"34678:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"34686:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"34694:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"34702:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"34710:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"34718:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"34729:4:124","type":""}],"src":"34350:818:124"},{"body":{"nodeType":"YulBlock","src":"35228:382:124","statements":[{"nodeType":"YulAssignment","src":"35238:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35252:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"35255:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"35248:3:124"},"nodeType":"YulFunctionCall","src":"35248:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"35238:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"35269:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35299:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"35305:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35295:3:124"},"nodeType":"YulFunctionCall","src":"35295:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"35273:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"35346:31:124","statements":[{"nodeType":"YulAssignment","src":"35348:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"35362:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35370:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35358:3:124"},"nodeType":"YulFunctionCall","src":"35358:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"35348:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"35326:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"35319:6:124"},"nodeType":"YulFunctionCall","src":"35319:26:124"},"nodeType":"YulIf","src":"35316:61:124"},{"body":{"nodeType":"YulBlock","src":"35436:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35457:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35460:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35450:6:124"},"nodeType":"YulFunctionCall","src":"35450:88:124"},"nodeType":"YulExpressionStatement","src":"35450:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35558:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"35561:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35551:6:124"},"nodeType":"YulFunctionCall","src":"35551:15:124"},"nodeType":"YulExpressionStatement","src":"35551:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35586:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35589:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"35579:6:124"},"nodeType":"YulFunctionCall","src":"35579:15:124"},"nodeType":"YulExpressionStatement","src":"35579:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"35392:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"35415:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35423:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"35412:2:124"},"nodeType":"YulFunctionCall","src":"35412:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"35389:2:124"},"nodeType":"YulFunctionCall","src":"35389:38:124"},"nodeType":"YulIf","src":"35386:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"35208:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"35217:6:124","type":""}],"src":"35173:437:124"},{"body":{"nodeType":"YulBlock","src":"35929:746:124","statements":[{"nodeType":"YulAssignment","src":"35939:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35951:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35962:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35947:3:124"},"nodeType":"YulFunctionCall","src":"35947:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"35939:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35982:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"35993:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35975:6:124"},"nodeType":"YulFunctionCall","src":"35975:25:124"},"nodeType":"YulExpressionStatement","src":"35975:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36020:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36031:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36016:3:124"},"nodeType":"YulFunctionCall","src":"36016:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"36036:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36009:6:124"},"nodeType":"YulFunctionCall","src":"36009:34:124"},"nodeType":"YulExpressionStatement","src":"36009:34:124"},{"nodeType":"YulVariableDeclaration","src":"36052:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"36062:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"36056:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36124:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36135:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36120:3:124"},"nodeType":"YulFunctionCall","src":"36120:18:124"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36150:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36144:5:124"},"nodeType":"YulFunctionCall","src":"36144:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36159:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36140:3:124"},"nodeType":"YulFunctionCall","src":"36140:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36113:6:124"},"nodeType":"YulFunctionCall","src":"36113:50:124"},"nodeType":"YulExpressionStatement","src":"36113:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36194:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36179:3:124"},"nodeType":"YulFunctionCall","src":"36179:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36221:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36209:3:124"},"nodeType":"YulFunctionCall","src":"36209:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36203:5:124"},"nodeType":"YulFunctionCall","src":"36203:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36227:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36199:3:124"},"nodeType":"YulFunctionCall","src":"36199:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36172:6:124"},"nodeType":"YulFunctionCall","src":"36172:59:124"},"nodeType":"YulExpressionStatement","src":"36172:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36251:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36262:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36247:3:124"},"nodeType":"YulFunctionCall","src":"36247:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36282:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36290:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36278:3:124"},"nodeType":"YulFunctionCall","src":"36278:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36272:5:124"},"nodeType":"YulFunctionCall","src":"36272:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36296:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36268:3:124"},"nodeType":"YulFunctionCall","src":"36268:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36240:6:124"},"nodeType":"YulFunctionCall","src":"36240:60:124"},"nodeType":"YulExpressionStatement","src":"36240:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36320:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36331:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36316:3:124"},"nodeType":"YulFunctionCall","src":"36316:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36351:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36359:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36347:3:124"},"nodeType":"YulFunctionCall","src":"36347:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36341:5:124"},"nodeType":"YulFunctionCall","src":"36341:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36365:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36337:3:124"},"nodeType":"YulFunctionCall","src":"36337:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36309:6:124"},"nodeType":"YulFunctionCall","src":"36309:60:124"},"nodeType":"YulExpressionStatement","src":"36309:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36389:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36400:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36385:3:124"},"nodeType":"YulFunctionCall","src":"36385:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36420:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36428:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36416:3:124"},"nodeType":"YulFunctionCall","src":"36416:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36410:5:124"},"nodeType":"YulFunctionCall","src":"36410:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36435:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36406:3:124"},"nodeType":"YulFunctionCall","src":"36406:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36378:6:124"},"nodeType":"YulFunctionCall","src":"36378:61:124"},"nodeType":"YulExpressionStatement","src":"36378:61:124"},{"nodeType":"YulVariableDeclaration","src":"36448:43:124","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36478:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36486:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36474:3:124"},"nodeType":"YulFunctionCall","src":"36474:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36468:5:124"},"nodeType":"YulFunctionCall","src":"36468:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"36452:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"36518:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36536:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36547:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36532:3:124"},"nodeType":"YulFunctionCall","src":"36532:19:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"36500:17:124"},"nodeType":"YulFunctionCall","src":"36500:52:124"},"nodeType":"YulExpressionStatement","src":"36500:52:124"},{"nodeType":"YulVariableDeclaration","src":"36561:45:124","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36593:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36601:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36589:3:124"},"nodeType":"YulFunctionCall","src":"36589:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36583:5:124"},"nodeType":"YulFunctionCall","src":"36583:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"36565:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"36633:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36653:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36664:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36649:3:124"},"nodeType":"YulFunctionCall","src":"36649:19:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"36615:17:124"},"nodeType":"YulFunctionCall","src":"36615:54:124"},"nodeType":"YulExpressionStatement","src":"36615:54:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35882:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"35893:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"35901:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"35909:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"35920:4:124","type":""}],"src":"35615:1060:124"},{"body":{"nodeType":"YulBlock","src":"36758:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"36804:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36813:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36816:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"36806:6:124"},"nodeType":"YulFunctionCall","src":"36806:12:124"},"nodeType":"YulExpressionStatement","src":"36806:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"36779:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"36788:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36775:3:124"},"nodeType":"YulFunctionCall","src":"36775:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"36800:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"36771:3:124"},"nodeType":"YulFunctionCall","src":"36771:32:124"},"nodeType":"YulIf","src":"36768:52:124"},{"nodeType":"YulVariableDeclaration","src":"36829:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36848:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36842:5:124"},"nodeType":"YulFunctionCall","src":"36842:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"36833:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"36889:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"36867:21:124"},"nodeType":"YulFunctionCall","src":"36867:28:124"},"nodeType":"YulExpressionStatement","src":"36867:28:124"},{"nodeType":"YulAssignment","src":"36904:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"36914:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"36904:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36724:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"36735:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"36747:6:124","type":""}],"src":"36680:245:124"},{"body":{"nodeType":"YulBlock","src":"36962:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36979:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36982:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36972:6:124"},"nodeType":"YulFunctionCall","src":"36972:88:124"},"nodeType":"YulExpressionStatement","src":"36972:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37076:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"37079:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37069:6:124"},"nodeType":"YulFunctionCall","src":"37069:15:124"},"nodeType":"YulExpressionStatement","src":"37069:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37100:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"37103:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"37093:6:124"},"nodeType":"YulFunctionCall","src":"37093:15:124"},"nodeType":"YulExpressionStatement","src":"37093:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"36930:184:124"},{"body":{"nodeType":"YulBlock","src":"37165:151:124","statements":[{"nodeType":"YulVariableDeclaration","src":"37175:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"37185:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"37179:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"37200:29:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37219:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37226:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37215:3:124"},"nodeType":"YulFunctionCall","src":"37215:14:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"37204:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"37257:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"37259:16:124"},"nodeType":"YulFunctionCall","src":"37259:18:124"},"nodeType":"YulExpressionStatement","src":"37259:18:124"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"37244:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37253:2:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"37241:2:124"},"nodeType":"YulFunctionCall","src":"37241:15:124"},"nodeType":"YulIf","src":"37238:41:124"},{"nodeType":"YulAssignment","src":"37288:22:124","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"37299:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"37308:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37295:3:124"},"nodeType":"YulFunctionCall","src":"37295:15:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"37288:3:124"}]}]},"name":"increment_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"37147:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"37157:3:124","type":""}],"src":"37119:197:124"},{"body":{"nodeType":"YulBlock","src":"37597:281:124","statements":[{"nodeType":"YulAssignment","src":"37607:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37619:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37630:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37615:3:124"},"nodeType":"YulFunctionCall","src":"37615:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37607:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37650:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"37661:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37643:6:124"},"nodeType":"YulFunctionCall","src":"37643:25:124"},"nodeType":"YulExpressionStatement","src":"37643:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37699:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37684:3:124"},"nodeType":"YulFunctionCall","src":"37684:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"37704:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37677:6:124"},"nodeType":"YulFunctionCall","src":"37677:34:124"},"nodeType":"YulExpressionStatement","src":"37677:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37731:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37742:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37727:3:124"},"nodeType":"YulFunctionCall","src":"37727:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"37751:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"37759:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37747:3:124"},"nodeType":"YulFunctionCall","src":"37747:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37720:6:124"},"nodeType":"YulFunctionCall","src":"37720:83:124"},"nodeType":"YulExpressionStatement","src":"37720:83:124"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"37845:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37857:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37868:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37853:3:124"},"nodeType":"YulFunctionCall","src":"37853:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"37812:32:124"},"nodeType":"YulFunctionCall","src":"37812:60:124"},"nodeType":"YulExpressionStatement","src":"37812:60:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37542:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"37553:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"37561:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"37569:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"37577:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37588:4:124","type":""}],"src":"37321:557:124"},{"body":{"nodeType":"YulBlock","src":"38132:610:124","statements":[{"nodeType":"YulVariableDeclaration","src":"38142:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38160:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38171:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38156:3:124"},"nodeType":"YulFunctionCall","src":"38156:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"38146:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38190:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"38201:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38183:6:124"},"nodeType":"YulFunctionCall","src":"38183:25:124"},"nodeType":"YulExpressionStatement","src":"38183:25:124"},{"nodeType":"YulVariableDeclaration","src":"38217:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"38227:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"38221:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38249:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"38260:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38245:3:124"},"nodeType":"YulFunctionCall","src":"38245:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"38265:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38238:6:124"},"nodeType":"YulFunctionCall","src":"38238:30:124"},"nodeType":"YulExpressionStatement","src":"38238:30:124"},{"nodeType":"YulVariableDeclaration","src":"38277:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"38288:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"38281:3:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"38310:6:124"},{"name":"value2","nodeType":"YulIdentifier","src":"38318:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38303:6:124"},"nodeType":"YulFunctionCall","src":"38303:22:124"},"nodeType":"YulExpressionStatement","src":"38303:22:124"},{"nodeType":"YulAssignment","src":"38334:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38345:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38356:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38341:3:124"},"nodeType":"YulFunctionCall","src":"38341:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"38334:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"38368:20:124","value":{"name":"value1","nodeType":"YulIdentifier","src":"38382:6:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"38372:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"38397:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"38406:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"38401:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"38465:251:124","statements":[{"nodeType":"YulVariableDeclaration","src":"38479:33:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"38505:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"38492:12:124"},"nodeType":"YulFunctionCall","src":"38492:20:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"38483:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"38550:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"38525:24:124"},"nodeType":"YulFunctionCall","src":"38525:31:124"},"nodeType":"YulExpressionStatement","src":"38525:31:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"38576:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"38585:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"38592:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"38581:3:124"},"nodeType":"YulFunctionCall","src":"38581:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38569:6:124"},"nodeType":"YulFunctionCall","src":"38569:67:124"},"nodeType":"YulExpressionStatement","src":"38569:67:124"},{"nodeType":"YulAssignment","src":"38649:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"38660:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"38665:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38656:3:124"},"nodeType":"YulFunctionCall","src":"38656:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"38649:3:124"}]},{"nodeType":"YulAssignment","src":"38681:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"38695:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"38703:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38691:3:124"},"nodeType":"YulFunctionCall","src":"38691:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"38681:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"38427:1:124"},{"name":"value2","nodeType":"YulIdentifier","src":"38430:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"38424:2:124"},"nodeType":"YulFunctionCall","src":"38424:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"38438:18:124","statements":[{"nodeType":"YulAssignment","src":"38440:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"38449:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"38452:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38445:3:124"},"nodeType":"YulFunctionCall","src":"38445:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"38440:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"38420:3:124","statements":[]},"src":"38416:300:124"},{"nodeType":"YulAssignment","src":"38725:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"38733:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"38725:4:124"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"38085:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"38096:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"38104:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"38112:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"38123:4:124","type":""}],"src":"37883:859:124"},{"body":{"nodeType":"YulBlock","src":"39209:1498:124","statements":[{"nodeType":"YulAssignment","src":"39219:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39231:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39242:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39227:3:124"},"nodeType":"YulFunctionCall","src":"39227:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"39219:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39262:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"39273:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39255:6:124"},"nodeType":"YulFunctionCall","src":"39255:25:124"},"nodeType":"YulExpressionStatement","src":"39255:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39300:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39311:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39296:3:124"},"nodeType":"YulFunctionCall","src":"39296:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"39316:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39289:6:124"},"nodeType":"YulFunctionCall","src":"39289:34:124"},"nodeType":"YulExpressionStatement","src":"39289:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39343:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39354:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39339:3:124"},"nodeType":"YulFunctionCall","src":"39339:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"39359:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39332:6:124"},"nodeType":"YulFunctionCall","src":"39332:34:124"},"nodeType":"YulExpressionStatement","src":"39332:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39386:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39397:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39382:3:124"},"nodeType":"YulFunctionCall","src":"39382:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"39402:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39375:6:124"},"nodeType":"YulFunctionCall","src":"39375:34:124"},"nodeType":"YulExpressionStatement","src":"39375:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39443:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39437:5:124"},"nodeType":"YulFunctionCall","src":"39437:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39456:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39467:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39452:3:124"},"nodeType":"YulFunctionCall","src":"39452:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39418:18:124"},"nodeType":"YulFunctionCall","src":"39418:54:124"},"nodeType":"YulExpressionStatement","src":"39418:54:124"},{"nodeType":"YulVariableDeclaration","src":"39481:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39511:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39519:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39507:3:124"},"nodeType":"YulFunctionCall","src":"39507:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39501:5:124"},"nodeType":"YulFunctionCall","src":"39501:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"39485:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"39551:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39569:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39580:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39565:3:124"},"nodeType":"YulFunctionCall","src":"39565:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39532:18:124"},"nodeType":"YulFunctionCall","src":"39532:53:124"},"nodeType":"YulExpressionStatement","src":"39532:53:124"},{"nodeType":"YulVariableDeclaration","src":"39594:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39626:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39634:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39622:3:124"},"nodeType":"YulFunctionCall","src":"39622:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39616:5:124"},"nodeType":"YulFunctionCall","src":"39616:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"39598:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"39666:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39686:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39697:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39682:3:124"},"nodeType":"YulFunctionCall","src":"39682:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39647:18:124"},"nodeType":"YulFunctionCall","src":"39647:55:124"},"nodeType":"YulExpressionStatement","src":"39647:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39722:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39733:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39718:3:124"},"nodeType":"YulFunctionCall","src":"39718:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39749:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39757:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39745:3:124"},"nodeType":"YulFunctionCall","src":"39745:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39739:5:124"},"nodeType":"YulFunctionCall","src":"39739:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39711:6:124"},"nodeType":"YulFunctionCall","src":"39711:51:124"},"nodeType":"YulExpressionStatement","src":"39711:51:124"},{"nodeType":"YulVariableDeclaration","src":"39771:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39803:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39811:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39799:3:124"},"nodeType":"YulFunctionCall","src":"39799:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39793:5:124"},"nodeType":"YulFunctionCall","src":"39793:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"39775:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39825:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39835:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"39829:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"39880:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39900:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39911:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39896:3:124"},"nodeType":"YulFunctionCall","src":"39896:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"39847:32:124"},"nodeType":"YulFunctionCall","src":"39847:68:124"},"nodeType":"YulExpressionStatement","src":"39847:68:124"},{"nodeType":"YulVariableDeclaration","src":"39924:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39956:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39964:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39952:3:124"},"nodeType":"YulFunctionCall","src":"39952:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39946:5:124"},"nodeType":"YulFunctionCall","src":"39946:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"39928:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39978:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39988:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"39982:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"40018:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40038:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"40049:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40034:3:124"},"nodeType":"YulFunctionCall","src":"40034:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"40000:17:124"},"nodeType":"YulFunctionCall","src":"40000:53:124"},"nodeType":"YulExpressionStatement","src":"40000:53:124"},{"nodeType":"YulVariableDeclaration","src":"40062:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40094:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"40102:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40090:3:124"},"nodeType":"YulFunctionCall","src":"40090:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40084:5:124"},"nodeType":"YulFunctionCall","src":"40084:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"40066:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40116:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40126:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"40120:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"40154:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40174:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"40185:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40170:3:124"},"nodeType":"YulFunctionCall","src":"40170:18:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"40138:15:124"},"nodeType":"YulFunctionCall","src":"40138:51:124"},"nodeType":"YulExpressionStatement","src":"40138:51:124"},{"nodeType":"YulVariableDeclaration","src":"40198:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40218:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"40226:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40214:3:124"},"nodeType":"YulFunctionCall","src":"40214:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40208:5:124"},"nodeType":"YulFunctionCall","src":"40208:23:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"40202:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40240:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40250:3:124","type":"","value":"352"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"40244:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40273:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"40284:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40269:3:124"},"nodeType":"YulFunctionCall","src":"40269:18:124"},{"name":"_4","nodeType":"YulIdentifier","src":"40289:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40262:6:124"},"nodeType":"YulFunctionCall","src":"40262:30:124"},"nodeType":"YulExpressionStatement","src":"40262:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40312:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40323:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40308:3:124"},"nodeType":"YulFunctionCall","src":"40308:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40339:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40347:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40335:3:124"},"nodeType":"YulFunctionCall","src":"40335:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40329:5:124"},"nodeType":"YulFunctionCall","src":"40329:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40301:6:124"},"nodeType":"YulFunctionCall","src":"40301:51:124"},"nodeType":"YulExpressionStatement","src":"40301:51:124"},{"nodeType":"YulVariableDeclaration","src":"40361:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40393:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"40401:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40389:3:124"},"nodeType":"YulFunctionCall","src":"40389:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40383:5:124"},"nodeType":"YulFunctionCall","src":"40383:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"40365:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"40433:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40453:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40464:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40449:3:124"},"nodeType":"YulFunctionCall","src":"40449:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"40414:18:124"},"nodeType":"YulFunctionCall","src":"40414:55:124"},"nodeType":"YulExpressionStatement","src":"40414:55:124"},{"nodeType":"YulVariableDeclaration","src":"40478:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40510:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"40518:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40506:3:124"},"nodeType":"YulFunctionCall","src":"40506:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40500:5:124"},"nodeType":"YulFunctionCall","src":"40500:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"40482:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"40548:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40568:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40579:3:124","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40564:3:124"},"nodeType":"YulFunctionCall","src":"40564:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"40531:16:124"},"nodeType":"YulFunctionCall","src":"40531:53:124"},"nodeType":"YulExpressionStatement","src":"40531:53:124"},{"nodeType":"YulVariableDeclaration","src":"40593:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40625:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"40633:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40621:3:124"},"nodeType":"YulFunctionCall","src":"40621:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40615:5:124"},"nodeType":"YulFunctionCall","src":"40615:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"40597:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"40665:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40685:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40696:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40681:3:124"},"nodeType":"YulFunctionCall","src":"40681:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"40646:18:124"},"nodeType":"YulFunctionCall","src":"40646:55:124"},"nodeType":"YulExpressionStatement","src":"40646:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"39146:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"39157:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"39165:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"39173:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"39181:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"39189:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"39200:4:124","type":""}],"src":"38747:1960:124"},{"body":{"nodeType":"YulBlock","src":"40773:423:124","statements":[{"nodeType":"YulVariableDeclaration","src":"40783:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40803:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40797:5:124"},"nodeType":"YulFunctionCall","src":"40797:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"40787:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40825:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"40830:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40818:6:124"},"nodeType":"YulFunctionCall","src":"40818:19:124"},"nodeType":"YulExpressionStatement","src":"40818:19:124"},{"nodeType":"YulVariableDeclaration","src":"40846:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40856:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"40850:2:124","type":""}]},{"nodeType":"YulAssignment","src":"40869:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40880:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40885:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40876:3:124"},"nodeType":"YulFunctionCall","src":"40876:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40869:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"40897:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40915:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40922:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40911:3:124"},"nodeType":"YulFunctionCall","src":"40911:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"40901:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40934:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40943:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"40938:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"41002:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41023:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41038:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41032:5:124"},"nodeType":"YulFunctionCall","src":"41032:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"41047:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"41028:3:124"},"nodeType":"YulFunctionCall","src":"41028:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41016:6:124"},"nodeType":"YulFunctionCall","src":"41016:75:124"},"nodeType":"YulExpressionStatement","src":"41016:75:124"},{"nodeType":"YulAssignment","src":"41104:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41115:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41120:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41111:3:124"},"nodeType":"YulFunctionCall","src":"41111:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"41104:3:124"}]},{"nodeType":"YulAssignment","src":"41136:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41150:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41158:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41146:3:124"},"nodeType":"YulFunctionCall","src":"41146:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41136:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40964:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"40967:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"40961:2:124"},"nodeType":"YulFunctionCall","src":"40961:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"40975:18:124","statements":[{"nodeType":"YulAssignment","src":"40977:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40986:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"40989:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40982:3:124"},"nodeType":"YulFunctionCall","src":"40982:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"40977:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"40957:3:124","statements":[]},"src":"40953:218:124"},{"nodeType":"YulAssignment","src":"41180:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"41187:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"41180:3:124"}]}]},"name":"abi_encode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"40750:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"40757:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"40765:3:124","type":""}],"src":"40712:484:124"},{"body":{"nodeType":"YulBlock","src":"41262:374:124","statements":[{"nodeType":"YulVariableDeclaration","src":"41272:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"41292:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41286:5:124"},"nodeType":"YulFunctionCall","src":"41286:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"41276:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41314:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"41319:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41307:6:124"},"nodeType":"YulFunctionCall","src":"41307:19:124"},"nodeType":"YulExpressionStatement","src":"41307:19:124"},{"nodeType":"YulVariableDeclaration","src":"41335:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41345:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"41339:2:124","type":""}]},{"nodeType":"YulAssignment","src":"41358:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41369:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41374:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41365:3:124"},"nodeType":"YulFunctionCall","src":"41365:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"41358:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"41386:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"41404:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41411:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41400:3:124"},"nodeType":"YulFunctionCall","src":"41400:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"41390:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41423:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41432:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"41427:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"41491:120:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41512:3:124"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41523:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41517:5:124"},"nodeType":"YulFunctionCall","src":"41517:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41505:6:124"},"nodeType":"YulFunctionCall","src":"41505:26:124"},"nodeType":"YulExpressionStatement","src":"41505:26:124"},{"nodeType":"YulAssignment","src":"41544:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41555:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41560:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41551:3:124"},"nodeType":"YulFunctionCall","src":"41551:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"41544:3:124"}]},{"nodeType":"YulAssignment","src":"41576:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41590:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41598:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41586:3:124"},"nodeType":"YulFunctionCall","src":"41586:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41576:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"41453:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"41456:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"41450:2:124"},"nodeType":"YulFunctionCall","src":"41450:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"41464:18:124","statements":[{"nodeType":"YulAssignment","src":"41466:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"41475:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"41478:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41471:3:124"},"nodeType":"YulFunctionCall","src":"41471:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"41466:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"41446:3:124","statements":[]},"src":"41442:169:124"},{"nodeType":"YulAssignment","src":"41620:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"41627:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"41620:3:124"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41239:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"41246:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"41254:3:124","type":""}],"src":"41201:435:124"},{"body":{"nodeType":"YulBlock","src":"42095:2157:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42112:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"42123:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42105:6:124"},"nodeType":"YulFunctionCall","src":"42105:25:124"},"nodeType":"YulExpressionStatement","src":"42105:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42150:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42161:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42146:3:124"},"nodeType":"YulFunctionCall","src":"42146:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"42166:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42139:6:124"},"nodeType":"YulFunctionCall","src":"42139:34:124"},"nodeType":"YulExpressionStatement","src":"42139:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42193:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42204:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42189:3:124"},"nodeType":"YulFunctionCall","src":"42189:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"42209:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42182:6:124"},"nodeType":"YulFunctionCall","src":"42182:34:124"},"nodeType":"YulExpressionStatement","src":"42182:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42236:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42247:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42232:3:124"},"nodeType":"YulFunctionCall","src":"42232:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"42252:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42225:6:124"},"nodeType":"YulFunctionCall","src":"42225:34:124"},"nodeType":"YulExpressionStatement","src":"42225:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42279:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42290:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42275:3:124"},"nodeType":"YulFunctionCall","src":"42275:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"42296:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42268:6:124"},"nodeType":"YulFunctionCall","src":"42268:32:124"},"nodeType":"YulExpressionStatement","src":"42268:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42334:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42328:5:124"},"nodeType":"YulFunctionCall","src":"42328:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42347:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42358:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42343:3:124"},"nodeType":"YulFunctionCall","src":"42343:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"42309:18:124"},"nodeType":"YulFunctionCall","src":"42309:54:124"},"nodeType":"YulExpressionStatement","src":"42309:54:124"},{"nodeType":"YulVariableDeclaration","src":"42372:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42402:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42410:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42398:3:124"},"nodeType":"YulFunctionCall","src":"42398:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42392:5:124"},"nodeType":"YulFunctionCall","src":"42392:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"42376:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42423:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42433:6:124","type":"","value":"0x01c0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"42427:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42459:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42470:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42455:3:124"},"nodeType":"YulFunctionCall","src":"42455:19:124"},{"name":"_1","nodeType":"YulIdentifier","src":"42476:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42448:6:124"},"nodeType":"YulFunctionCall","src":"42448:31:124"},"nodeType":"YulExpressionStatement","src":"42448:31:124"},{"nodeType":"YulVariableDeclaration","src":"42488:77:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"42531:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42549:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42560:3:124","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42545:3:124"},"nodeType":"YulFunctionCall","src":"42545:19:124"}],"functionName":{"name":"abi_encode_array_address_dyn","nodeType":"YulIdentifier","src":"42502:28:124"},"nodeType":"YulFunctionCall","src":"42502:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"42492:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42574:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42606:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42614:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42602:3:124"},"nodeType":"YulFunctionCall","src":"42602:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42596:5:124"},"nodeType":"YulFunctionCall","src":"42596:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"42578:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42627:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42637:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"42631:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42723:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42734:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42719:3:124"},"nodeType":"YulFunctionCall","src":"42719:19:124"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"42748:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"42756:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42744:3:124"},"nodeType":"YulFunctionCall","src":"42744:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"42768:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42740:3:124"},"nodeType":"YulFunctionCall","src":"42740:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42712:6:124"},"nodeType":"YulFunctionCall","src":"42712:60:124"},"nodeType":"YulExpressionStatement","src":"42712:60:124"},{"nodeType":"YulVariableDeclaration","src":"42781:66:124","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"42824:14:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"42840:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"42795:28:124"},"nodeType":"YulFunctionCall","src":"42795:52:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"42785:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42856:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42888:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42896:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42884:3:124"},"nodeType":"YulFunctionCall","src":"42884:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42878:5:124"},"nodeType":"YulFunctionCall","src":"42878:22:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"42860:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42909:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42919:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"42913:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42942:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"42953:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42938:3:124"},"nodeType":"YulFunctionCall","src":"42938:18:124"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"42966:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"42974:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42962:3:124"},"nodeType":"YulFunctionCall","src":"42962:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"42986:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42958:3:124"},"nodeType":"YulFunctionCall","src":"42958:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42931:6:124"},"nodeType":"YulFunctionCall","src":"42931:59:124"},"nodeType":"YulExpressionStatement","src":"42931:59:124"},{"nodeType":"YulVariableDeclaration","src":"42999:66:124","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"43042:14:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"43058:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"43013:28:124"},"nodeType":"YulFunctionCall","src":"43013:52:124"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"43003:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43074:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43106:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43114:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43102:3:124"},"nodeType":"YulFunctionCall","src":"43102:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43096:5:124"},"nodeType":"YulFunctionCall","src":"43096:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"43078:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43128:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43138:3:124","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"43132:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"43169:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43189:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"43200:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43185:3:124"},"nodeType":"YulFunctionCall","src":"43185:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"43150:18:124"},"nodeType":"YulFunctionCall","src":"43150:54:124"},"nodeType":"YulExpressionStatement","src":"43150:54:124"},{"nodeType":"YulVariableDeclaration","src":"43213:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43245:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43253:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43241:3:124"},"nodeType":"YulFunctionCall","src":"43241:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43235:5:124"},"nodeType":"YulFunctionCall","src":"43235:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"43217:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43267:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43277:3:124","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"43271:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43300:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"43311:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43296:3:124"},"nodeType":"YulFunctionCall","src":"43296:18:124"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"43324:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"43332:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"43320:3:124"},"nodeType":"YulFunctionCall","src":"43320:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"43344:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43316:3:124"},"nodeType":"YulFunctionCall","src":"43316:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43289:6:124"},"nodeType":"YulFunctionCall","src":"43289:59:124"},"nodeType":"YulExpressionStatement","src":"43289:59:124"},{"nodeType":"YulVariableDeclaration","src":"43357:55:124","value":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"43389:14:124"},{"name":"tail_3","nodeType":"YulIdentifier","src":"43405:6:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"43371:17:124"},"nodeType":"YulFunctionCall","src":"43371:41:124"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"43361:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43421:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43453:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43461:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43449:3:124"},"nodeType":"YulFunctionCall","src":"43449:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43443:5:124"},"nodeType":"YulFunctionCall","src":"43443:23:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"43425:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43475:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43485:3:124","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"43479:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"43515:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43535:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"43546:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43531:3:124"},"nodeType":"YulFunctionCall","src":"43531:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"43497:17:124"},"nodeType":"YulFunctionCall","src":"43497:53:124"},"nodeType":"YulExpressionStatement","src":"43497:53:124"},{"nodeType":"YulVariableDeclaration","src":"43559:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43579:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43587:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43575:3:124"},"nodeType":"YulFunctionCall","src":"43575:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43569:5:124"},"nodeType":"YulFunctionCall","src":"43569:23:124"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"43563:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43601:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43611:3:124","type":"","value":"384"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"43605:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43634:9:124"},{"name":"_8","nodeType":"YulIdentifier","src":"43645:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43630:3:124"},"nodeType":"YulFunctionCall","src":"43630:18:124"},{"name":"_7","nodeType":"YulIdentifier","src":"43650:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43623:6:124"},"nodeType":"YulFunctionCall","src":"43623:30:124"},"nodeType":"YulExpressionStatement","src":"43623:30:124"},{"nodeType":"YulVariableDeclaration","src":"43662:32:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43682:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"43690:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43678:3:124"},"nodeType":"YulFunctionCall","src":"43678:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43672:5:124"},"nodeType":"YulFunctionCall","src":"43672:22:124"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"43666:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43703:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43714:3:124","type":"","value":"416"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"43707:3:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43737:9:124"},{"name":"_10","nodeType":"YulIdentifier","src":"43748:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43733:3:124"},"nodeType":"YulFunctionCall","src":"43733:19:124"},{"name":"_9","nodeType":"YulIdentifier","src":"43754:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43726:6:124"},"nodeType":"YulFunctionCall","src":"43726:31:124"},"nodeType":"YulExpressionStatement","src":"43726:31:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43777:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"43788:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43773:3:124"},"nodeType":"YulFunctionCall","src":"43773:18:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43803:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"43811:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43799:3:124"},"nodeType":"YulFunctionCall","src":"43799:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43793:5:124"},"nodeType":"YulFunctionCall","src":"43793:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43766:6:124"},"nodeType":"YulFunctionCall","src":"43766:50:124"},"nodeType":"YulExpressionStatement","src":"43766:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43836:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43847:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43832:3:124"},"nodeType":"YulFunctionCall","src":"43832:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43863:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"43871:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43859:3:124"},"nodeType":"YulFunctionCall","src":"43859:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43853:5:124"},"nodeType":"YulFunctionCall","src":"43853:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43825:6:124"},"nodeType":"YulFunctionCall","src":"43825:51:124"},"nodeType":"YulExpressionStatement","src":"43825:51:124"},{"nodeType":"YulVariableDeclaration","src":"43885:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43917:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"43925:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43913:3:124"},"nodeType":"YulFunctionCall","src":"43913:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43907:5:124"},"nodeType":"YulFunctionCall","src":"43907:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"43889:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"43957:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43977:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43988:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43973:3:124"},"nodeType":"YulFunctionCall","src":"43973:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"43938:18:124"},"nodeType":"YulFunctionCall","src":"43938:55:124"},"nodeType":"YulExpressionStatement","src":"43938:55:124"},{"nodeType":"YulVariableDeclaration","src":"44002:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"44034:6:124"},{"name":"_8","nodeType":"YulIdentifier","src":"44042:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44030:3:124"},"nodeType":"YulFunctionCall","src":"44030:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44024:5:124"},"nodeType":"YulFunctionCall","src":"44024:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"44006:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"44072:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44092:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44103:3:124","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44088:3:124"},"nodeType":"YulFunctionCall","src":"44088:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"44055:16:124"},"nodeType":"YulFunctionCall","src":"44055:53:124"},"nodeType":"YulExpressionStatement","src":"44055:53:124"},{"nodeType":"YulVariableDeclaration","src":"44117:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"44149:6:124"},{"name":"_10","nodeType":"YulIdentifier","src":"44157:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44145:3:124"},"nodeType":"YulFunctionCall","src":"44145:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44139:5:124"},"nodeType":"YulFunctionCall","src":"44139:23:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"44121:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"44187:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44207:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44218:3:124","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44203:3:124"},"nodeType":"YulFunctionCall","src":"44203:19:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"44171:15:124"},"nodeType":"YulFunctionCall","src":"44171:52:124"},"nodeType":"YulExpressionStatement","src":"44171:52:124"},{"nodeType":"YulAssignment","src":"44232:14:124","value":{"name":"tail_4","nodeType":"YulIdentifier","src":"44240:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"44232:4:124"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"42032:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"42043:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"42051:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"42059:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"42067:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"42075:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"42086:4:124","type":""}],"src":"41641:2611:124"},{"body":{"nodeType":"YulBlock","src":"44677:592:124","statements":[{"nodeType":"YulAssignment","src":"44687:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44699:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44710:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44695:3:124"},"nodeType":"YulFunctionCall","src":"44695:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"44687:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44730:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"44741:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44723:6:124"},"nodeType":"YulFunctionCall","src":"44723:25:124"},"nodeType":"YulExpressionStatement","src":"44723:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44768:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44779:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44764:3:124"},"nodeType":"YulFunctionCall","src":"44764:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"44784:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44757:6:124"},"nodeType":"YulFunctionCall","src":"44757:34:124"},"nodeType":"YulExpressionStatement","src":"44757:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44822:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44807:3:124"},"nodeType":"YulFunctionCall","src":"44807:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"44827:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44800:6:124"},"nodeType":"YulFunctionCall","src":"44800:34:124"},"nodeType":"YulExpressionStatement","src":"44800:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44854:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44865:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44850:3:124"},"nodeType":"YulFunctionCall","src":"44850:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44882:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44876:5:124"},"nodeType":"YulFunctionCall","src":"44876:13:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44870:5:124"},"nodeType":"YulFunctionCall","src":"44870:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44843:6:124"},"nodeType":"YulFunctionCall","src":"44843:48:124"},"nodeType":"YulExpressionStatement","src":"44843:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44911:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44922:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44907:3:124"},"nodeType":"YulFunctionCall","src":"44907:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44938:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44946:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44934:3:124"},"nodeType":"YulFunctionCall","src":"44934:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44928:5:124"},"nodeType":"YulFunctionCall","src":"44928:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44900:6:124"},"nodeType":"YulFunctionCall","src":"44900:51:124"},"nodeType":"YulExpressionStatement","src":"44900:51:124"},{"nodeType":"YulVariableDeclaration","src":"44960:42:124","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44990:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44998:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44986:3:124"},"nodeType":"YulFunctionCall","src":"44986:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44980:5:124"},"nodeType":"YulFunctionCall","src":"44980:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"44964:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"45011:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"45021:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"45015:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45083:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45094:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45079:3:124"},"nodeType":"YulFunctionCall","src":"45079:19:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"45104:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45118:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45100:3:124"},"nodeType":"YulFunctionCall","src":"45100:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45072:6:124"},"nodeType":"YulFunctionCall","src":"45072:50:124"},"nodeType":"YulExpressionStatement","src":"45072:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45142:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45153:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45138:3:124"},"nodeType":"YulFunctionCall","src":"45138:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"45173:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"45181:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45169:3:124"},"nodeType":"YulFunctionCall","src":"45169:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45163:5:124"},"nodeType":"YulFunctionCall","src":"45163:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45187:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45159:3:124"},"nodeType":"YulFunctionCall","src":"45159:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45131:6:124"},"nodeType":"YulFunctionCall","src":"45131:60:124"},"nodeType":"YulExpressionStatement","src":"45131:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45211:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45222:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45207:3:124"},"nodeType":"YulFunctionCall","src":"45207:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"45242:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"45250:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45238:3:124"},"nodeType":"YulFunctionCall","src":"45238:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45232:5:124"},"nodeType":"YulFunctionCall","src":"45232:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"45257:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45228:3:124"},"nodeType":"YulFunctionCall","src":"45228:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45200:6:124"},"nodeType":"YulFunctionCall","src":"45200:63:124"},"nodeType":"YulExpressionStatement","src":"45200:63:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"44622:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"44633:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"44641:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"44649:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"44657:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"44668:4:124","type":""}],"src":"44257:1012:124"},{"body":{"nodeType":"YulBlock","src":"45440:326:124","statements":[{"body":{"nodeType":"YulBlock","src":"45487:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"45496:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"45499:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"45489:6:124"},"nodeType":"YulFunctionCall","src":"45489:12:124"},"nodeType":"YulExpressionStatement","src":"45489:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"45461:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"45470:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"45457:3:124"},"nodeType":"YulFunctionCall","src":"45457:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"45482:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"45453:3:124"},"nodeType":"YulFunctionCall","src":"45453:33:124"},"nodeType":"YulIf","src":"45450:53:124"},{"nodeType":"YulAssignment","src":"45512:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45528:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45522:5:124"},"nodeType":"YulFunctionCall","src":"45522:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"45512:6:124"}]},{"nodeType":"YulAssignment","src":"45547:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45567:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45578:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45563:3:124"},"nodeType":"YulFunctionCall","src":"45563:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45557:5:124"},"nodeType":"YulFunctionCall","src":"45557:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"45547:6:124"}]},{"nodeType":"YulAssignment","src":"45591:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45611:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45622:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45607:3:124"},"nodeType":"YulFunctionCall","src":"45607:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45601:5:124"},"nodeType":"YulFunctionCall","src":"45601:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"45591:6:124"}]},{"nodeType":"YulAssignment","src":"45635:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45655:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45666:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45651:3:124"},"nodeType":"YulFunctionCall","src":"45651:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45645:5:124"},"nodeType":"YulFunctionCall","src":"45645:25:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"45635:6:124"}]},{"nodeType":"YulAssignment","src":"45679:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45699:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45710:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45695:3:124"},"nodeType":"YulFunctionCall","src":"45695:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45689:5:124"},"nodeType":"YulFunctionCall","src":"45689:26:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"45679:6:124"}]},{"nodeType":"YulAssignment","src":"45724:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45744:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45755:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45740:3:124"},"nodeType":"YulFunctionCall","src":"45740:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45734:5:124"},"nodeType":"YulFunctionCall","src":"45734:26:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"45724:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45366:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"45377:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"45389:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"45397:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45405:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"45413:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"45421:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"45429:6:124","type":""}],"src":"45274:492:124"},{"body":{"nodeType":"YulBlock","src":"45945:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45962:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45973:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45955:6:124"},"nodeType":"YulFunctionCall","src":"45955:21:124"},"nodeType":"YulExpressionStatement","src":"45955:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45996:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46007:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45992:3:124"},"nodeType":"YulFunctionCall","src":"45992:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"46012:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45985:6:124"},"nodeType":"YulFunctionCall","src":"45985:30:124"},"nodeType":"YulExpressionStatement","src":"45985:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46035:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46046:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46031:3:124"},"nodeType":"YulFunctionCall","src":"46031:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"46051:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46024:6:124"},"nodeType":"YulFunctionCall","src":"46024:62:124"},"nodeType":"YulExpressionStatement","src":"46024:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46106:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46117:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46102:3:124"},"nodeType":"YulFunctionCall","src":"46102:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"46122:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46095:6:124"},"nodeType":"YulFunctionCall","src":"46095:44:124"},"nodeType":"YulExpressionStatement","src":"46095:44:124"},{"nodeType":"YulAssignment","src":"46148:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46160:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46171:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46156:3:124"},"nodeType":"YulFunctionCall","src":"46156:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46148:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45922:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45936:4:124","type":""}],"src":"45771:410:124"},{"body":{"nodeType":"YulBlock","src":"46378:241:124","statements":[{"nodeType":"YulAssignment","src":"46388:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46400:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46411:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46396:3:124"},"nodeType":"YulFunctionCall","src":"46396:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46388:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46430:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"46441:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46423:6:124"},"nodeType":"YulFunctionCall","src":"46423:25:124"},"nodeType":"YulExpressionStatement","src":"46423:25:124"},{"nodeType":"YulVariableDeclaration","src":"46457:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"46467:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"46461:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46529:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46540:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46525:3:124"},"nodeType":"YulFunctionCall","src":"46525:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"46549:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46557:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46545:3:124"},"nodeType":"YulFunctionCall","src":"46545:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46518:6:124"},"nodeType":"YulFunctionCall","src":"46518:43:124"},"nodeType":"YulExpressionStatement","src":"46518:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46581:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46592:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46577:3:124"},"nodeType":"YulFunctionCall","src":"46577:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"46601:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46609:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46597:3:124"},"nodeType":"YulFunctionCall","src":"46597:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46570:6:124"},"nodeType":"YulFunctionCall","src":"46570:43:124"},"nodeType":"YulExpressionStatement","src":"46570:43:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"46331:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"46342:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"46350:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"46358:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"46369:4:124","type":""}],"src":"46186:433:124"},{"body":{"nodeType":"YulBlock","src":"46789:241:124","statements":[{"nodeType":"YulAssignment","src":"46799:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46822:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46807:3:124"},"nodeType":"YulFunctionCall","src":"46807:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46799:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"46834:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"46844:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"46838:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46902:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"46917:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46925:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46913:3:124"},"nodeType":"YulFunctionCall","src":"46913:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46895:6:124"},"nodeType":"YulFunctionCall","src":"46895:34:124"},"nodeType":"YulExpressionStatement","src":"46895:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46949:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46960:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46945:3:124"},"nodeType":"YulFunctionCall","src":"46945:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"46969:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46977:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46965:3:124"},"nodeType":"YulFunctionCall","src":"46965:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46938:6:124"},"nodeType":"YulFunctionCall","src":"46938:43:124"},"nodeType":"YulExpressionStatement","src":"46938:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47001:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47012:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46997:3:124"},"nodeType":"YulFunctionCall","src":"46997:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"47017:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46990:6:124"},"nodeType":"YulFunctionCall","src":"46990:34:124"},"nodeType":"YulExpressionStatement","src":"46990:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"46742:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"46753:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"46761:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"46769:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"46780:4:124","type":""}],"src":"46624:406:124"},{"body":{"nodeType":"YulBlock","src":"47084:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"47106:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"47108:16:124"},"nodeType":"YulFunctionCall","src":"47108:18:124"},"nodeType":"YulExpressionStatement","src":"47108:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"47100:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"47103:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"47097:2:124"},"nodeType":"YulFunctionCall","src":"47097:8:124"},"nodeType":"YulIf","src":"47094:34:124"},{"nodeType":"YulAssignment","src":"47137:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"47149:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"47152:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"47145:3:124"},"nodeType":"YulFunctionCall","src":"47145:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"47137:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"47066:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"47069:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"47075:4:124","type":""}],"src":"47035:125:124"},{"body":{"nodeType":"YulBlock","src":"47197:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"47214:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"47217:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47207:6:124"},"nodeType":"YulFunctionCall","src":"47207:88:124"},"nodeType":"YulExpressionStatement","src":"47207:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"47311:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"47314:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47304:6:124"},"nodeType":"YulFunctionCall","src":"47304:15:124"},"nodeType":"YulExpressionStatement","src":"47304:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"47335:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"47338:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"47328:6:124"},"nodeType":"YulFunctionCall","src":"47328:15:124"},"nodeType":"YulExpressionStatement","src":"47328:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"47165:184:124"},{"body":{"nodeType":"YulBlock","src":"47401:148:124","statements":[{"body":{"nodeType":"YulBlock","src":"47492:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"47494:16:124"},"nodeType":"YulFunctionCall","src":"47494:18:124"},"nodeType":"YulExpressionStatement","src":"47494:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"47417:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"47424:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"47414:2:124"},"nodeType":"YulFunctionCall","src":"47414:77:124"},"nodeType":"YulIf","src":"47411:103:124"},{"nodeType":"YulAssignment","src":"47523:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"47534:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"47541:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47530:3:124"},"nodeType":"YulFunctionCall","src":"47530:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"47523:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"47383:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"47393:3:124","type":""}],"src":"47354:195:124"},{"body":{"nodeType":"YulBlock","src":"48047:1027:124","statements":[{"nodeType":"YulAssignment","src":"48057:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48069:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48080:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48065:3:124"},"nodeType":"YulFunctionCall","src":"48065:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"48057:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48100:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"48111:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48093:6:124"},"nodeType":"YulFunctionCall","src":"48093:25:124"},"nodeType":"YulExpressionStatement","src":"48093:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48138:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48149:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48134:3:124"},"nodeType":"YulFunctionCall","src":"48134:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"48154:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48127:6:124"},"nodeType":"YulFunctionCall","src":"48127:34:124"},"nodeType":"YulExpressionStatement","src":"48127:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48181:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48192:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48177:3:124"},"nodeType":"YulFunctionCall","src":"48177:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"48197:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48170:6:124"},"nodeType":"YulFunctionCall","src":"48170:34:124"},"nodeType":"YulExpressionStatement","src":"48170:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48224:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48235:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48220:3:124"},"nodeType":"YulFunctionCall","src":"48220:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"48240:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48213:6:124"},"nodeType":"YulFunctionCall","src":"48213:34:124"},"nodeType":"YulExpressionStatement","src":"48213:34:124"},{"nodeType":"YulVariableDeclaration","src":"48256:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"48266:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"48260:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48328:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48339:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48324:3:124"},"nodeType":"YulFunctionCall","src":"48324:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48355:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48349:5:124"},"nodeType":"YulFunctionCall","src":"48349:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"48364:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48345:3:124"},"nodeType":"YulFunctionCall","src":"48345:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48317:6:124"},"nodeType":"YulFunctionCall","src":"48317:51:124"},"nodeType":"YulExpressionStatement","src":"48317:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48388:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48399:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48384:3:124"},"nodeType":"YulFunctionCall","src":"48384:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48419:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48427:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48415:3:124"},"nodeType":"YulFunctionCall","src":"48415:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48409:5:124"},"nodeType":"YulFunctionCall","src":"48409:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"48433:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48405:3:124"},"nodeType":"YulFunctionCall","src":"48405:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48377:6:124"},"nodeType":"YulFunctionCall","src":"48377:60:124"},"nodeType":"YulExpressionStatement","src":"48377:60:124"},{"nodeType":"YulVariableDeclaration","src":"48446:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48476:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48484:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48472:3:124"},"nodeType":"YulFunctionCall","src":"48472:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48466:5:124"},"nodeType":"YulFunctionCall","src":"48466:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"48450:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"48516:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48534:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48545:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48530:3:124"},"nodeType":"YulFunctionCall","src":"48530:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"48497:18:124"},"nodeType":"YulFunctionCall","src":"48497:53:124"},"nodeType":"YulExpressionStatement","src":"48497:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48570:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48581:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48566:3:124"},"nodeType":"YulFunctionCall","src":"48566:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48597:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48605:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48593:3:124"},"nodeType":"YulFunctionCall","src":"48593:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48587:5:124"},"nodeType":"YulFunctionCall","src":"48587:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48559:6:124"},"nodeType":"YulFunctionCall","src":"48559:51:124"},"nodeType":"YulExpressionStatement","src":"48559:51:124"},{"nodeType":"YulVariableDeclaration","src":"48619:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48639:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48647:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48635:3:124"},"nodeType":"YulFunctionCall","src":"48635:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48629:5:124"},"nodeType":"YulFunctionCall","src":"48629:23:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"48623:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"48661:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"48671:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"48665:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48694:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"48705:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48690:3:124"},"nodeType":"YulFunctionCall","src":"48690:18:124"},{"name":"_2","nodeType":"YulIdentifier","src":"48710:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48683:6:124"},"nodeType":"YulFunctionCall","src":"48683:30:124"},"nodeType":"YulExpressionStatement","src":"48683:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48733:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48744:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48729:3:124"},"nodeType":"YulFunctionCall","src":"48729:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48760:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48768:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48756:3:124"},"nodeType":"YulFunctionCall","src":"48756:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48750:5:124"},"nodeType":"YulFunctionCall","src":"48750:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48722:6:124"},"nodeType":"YulFunctionCall","src":"48722:52:124"},"nodeType":"YulExpressionStatement","src":"48722:52:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48794:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48805:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48790:3:124"},"nodeType":"YulFunctionCall","src":"48790:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48821:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48829:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48817:3:124"},"nodeType":"YulFunctionCall","src":"48817:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48811:5:124"},"nodeType":"YulFunctionCall","src":"48811:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48783:6:124"},"nodeType":"YulFunctionCall","src":"48783:52:124"},"nodeType":"YulExpressionStatement","src":"48783:52:124"},{"nodeType":"YulVariableDeclaration","src":"48844:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48876:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48884:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48872:3:124"},"nodeType":"YulFunctionCall","src":"48872:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48866:5:124"},"nodeType":"YulFunctionCall","src":"48866:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"48848:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"48917:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48937:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48948:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48933:3:124"},"nodeType":"YulFunctionCall","src":"48933:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"48898:18:124"},"nodeType":"YulFunctionCall","src":"48898:55:124"},"nodeType":"YulExpressionStatement","src":"48898:55:124"},{"nodeType":"YulVariableDeclaration","src":"48962:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48994:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"49002:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48990:3:124"},"nodeType":"YulFunctionCall","src":"48990:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48984:5:124"},"nodeType":"YulFunctionCall","src":"48984:22:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"48966:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"49032:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49052:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49063:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49048:3:124"},"nodeType":"YulFunctionCall","src":"49048:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"49015:16:124"},"nodeType":"YulFunctionCall","src":"49015:53:124"},"nodeType":"YulExpressionStatement","src":"49015:53:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"47984:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"47995:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"48003:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"48011:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"48019:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"48027:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"48038:4:124","type":""}],"src":"47554:1520:124"},{"body":{"nodeType":"YulBlock","src":"49327:299:124","statements":[{"nodeType":"YulAssignment","src":"49337:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49349:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49360:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49345:3:124"},"nodeType":"YulFunctionCall","src":"49345:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"49337:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49380:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"49391:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49373:6:124"},"nodeType":"YulFunctionCall","src":"49373:25:124"},"nodeType":"YulExpressionStatement","src":"49373:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49418:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49429:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49414:3:124"},"nodeType":"YulFunctionCall","src":"49414:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"49438:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"49446:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49434:3:124"},"nodeType":"YulFunctionCall","src":"49434:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49407:6:124"},"nodeType":"YulFunctionCall","src":"49407:83:124"},"nodeType":"YulExpressionStatement","src":"49407:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49521:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49506:3:124"},"nodeType":"YulFunctionCall","src":"49506:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"49526:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49499:6:124"},"nodeType":"YulFunctionCall","src":"49499:34:124"},"nodeType":"YulExpressionStatement","src":"49499:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49553:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49564:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49549:3:124"},"nodeType":"YulFunctionCall","src":"49549:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"49569:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49542:6:124"},"nodeType":"YulFunctionCall","src":"49542:34:124"},"nodeType":"YulExpressionStatement","src":"49542:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49596:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49607:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49592:3:124"},"nodeType":"YulFunctionCall","src":"49592:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"49613:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49585:6:124"},"nodeType":"YulFunctionCall","src":"49585:35:124"},"nodeType":"YulExpressionStatement","src":"49585:35:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49264:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"49275:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"49283:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"49291:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"49299:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"49307:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"49318:4:124","type":""}],"src":"49079:547:124"},{"body":{"nodeType":"YulBlock","src":"49820:168:124","statements":[{"nodeType":"YulAssignment","src":"49830:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49842:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49853:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49838:3:124"},"nodeType":"YulFunctionCall","src":"49838:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"49830:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49872:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"49883:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49865:6:124"},"nodeType":"YulFunctionCall","src":"49865:25:124"},"nodeType":"YulExpressionStatement","src":"49865:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49910:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49921:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49906:3:124"},"nodeType":"YulFunctionCall","src":"49906:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"49930:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"49938:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49926:3:124"},"nodeType":"YulFunctionCall","src":"49926:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49899:6:124"},"nodeType":"YulFunctionCall","src":"49899:83:124"},"nodeType":"YulExpressionStatement","src":"49899:83:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49781:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"49792:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"49800:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"49811:4:124","type":""}],"src":"49631:357:124"},{"body":{"nodeType":"YulBlock","src":"50154:49:124","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"50171:4:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"50190:5:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"50177:12:124"},"nodeType":"YulFunctionCall","src":"50177:19:124"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"50164:6:124"},"nodeType":"YulFunctionCall","src":"50164:33:124"},"nodeType":"YulExpressionStatement","src":"50164:33:124"}]},"name":"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"50137:4:124","type":""},{"name":"value","nodeType":"YulTypedName","src":"50143:5:124","type":""}],"src":"49993:210:124"},{"body":{"nodeType":"YulBlock","src":"50260:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"50379:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"50381:16:124"},"nodeType":"YulFunctionCall","src":"50381:18:124"},"nodeType":"YulExpressionStatement","src":"50381:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50291:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"50284:6:124"},"nodeType":"YulFunctionCall","src":"50284:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"50277:6:124"},"nodeType":"YulFunctionCall","src":"50277:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"50299:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50306:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"50374:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"50302:3:124"},"nodeType":"YulFunctionCall","src":"50302:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"50296:2:124"},"nodeType":"YulFunctionCall","src":"50296:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"50273:3:124"},"nodeType":"YulFunctionCall","src":"50273:105:124"},"nodeType":"YulIf","src":"50270:131:124"},{"nodeType":"YulAssignment","src":"50410:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50425:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"50428:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"50421:3:124"},"nodeType":"YulFunctionCall","src":"50421:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"50410:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"50239:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"50242:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"50248:7:124","type":""}],"src":"50208:228:124"},{"body":{"nodeType":"YulBlock","src":"50473:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50490:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50493:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50483:6:124"},"nodeType":"YulFunctionCall","src":"50483:88:124"},"nodeType":"YulExpressionStatement","src":"50483:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50587:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"50590:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50580:6:124"},"nodeType":"YulFunctionCall","src":"50580:15:124"},"nodeType":"YulExpressionStatement","src":"50580:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50611:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50614:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"50604:6:124"},"nodeType":"YulFunctionCall","src":"50604:15:124"},"nodeType":"YulExpressionStatement","src":"50604:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"50441:184:124"},{"body":{"nodeType":"YulBlock","src":"50678:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"50705:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"50707:16:124"},"nodeType":"YulFunctionCall","src":"50707:18:124"},"nodeType":"YulExpressionStatement","src":"50707:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50694:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"50701:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"50697:3:124"},"nodeType":"YulFunctionCall","src":"50697:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"50691:2:124"},"nodeType":"YulFunctionCall","src":"50691:13:124"},"nodeType":"YulIf","src":"50688:39:124"},{"nodeType":"YulAssignment","src":"50736:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50747:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"50750:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"50743:3:124"},"nodeType":"YulFunctionCall","src":"50743:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"50736:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"50661:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"50664:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"50670:3:124","type":""}],"src":"50630:128:124"},{"body":{"nodeType":"YulBlock","src":"50809:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"50840:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50861:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50864:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50854:6:124"},"nodeType":"YulFunctionCall","src":"50854:88:124"},"nodeType":"YulExpressionStatement","src":"50854:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50962:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"50965:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50955:6:124"},"nodeType":"YulFunctionCall","src":"50955:15:124"},"nodeType":"YulExpressionStatement","src":"50955:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50990:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50993:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"50983:6:124"},"nodeType":"YulFunctionCall","src":"50983:15:124"},"nodeType":"YulExpressionStatement","src":"50983:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"50829:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"50822:6:124"},"nodeType":"YulFunctionCall","src":"50822:9:124"},"nodeType":"YulIf","src":"50819:189:124"},{"nodeType":"YulAssignment","src":"51017:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"51026:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"51029:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"51022:3:124"},"nodeType":"YulFunctionCall","src":"51022:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"51017:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"50794:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"50797:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"50803:1:124","type":""}],"src":"50763:274:124"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_bool(value_3)\n        value4 := value_3\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint128(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_struct_ReserveConfigurationMap(value, pos)\n    { mstore(pos, mload(value)) }\n    function abi_encode_uint40(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffff))\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 480)\n        abi_encode_struct_ReserveConfigurationMap(mload(value0), headStart)\n        let memberValue0 := mload(add(value0, 0x20))\n        abi_encode_uint128(memberValue0, add(headStart, 0x20))\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_uint128(memberValue0_1, add(headStart, 0x40))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_uint128(memberValue0_2, add(headStart, 0x60))\n        let memberValue0_3 := mload(add(value0, 0x80))\n        abi_encode_uint128(memberValue0_3, add(headStart, 0x80))\n        let memberValue0_4 := mload(add(value0, 0xa0))\n        abi_encode_uint128(memberValue0_4, add(headStart, 0xa0))\n        let memberValue0_5 := mload(add(value0, 0xc0))\n        abi_encode_uint40(memberValue0_5, add(headStart, 0xc0))\n        let memberValue0_6 := mload(add(value0, 0xe0))\n        abi_encode_uint16(memberValue0_6, add(headStart, 0xe0))\n        let _1 := 0x0100\n        let memberValue0_7 := mload(add(value0, _1))\n        abi_encode_address(memberValue0_7, add(headStart, _1))\n        let _2 := 0x0120\n        let memberValue0_8 := mload(add(value0, _2))\n        abi_encode_address(memberValue0_8, add(headStart, _2))\n        let _3 := 0x0140\n        let memberValue0_9 := mload(add(value0, _3))\n        abi_encode_address(memberValue0_9, add(headStart, _3))\n        let _4 := 0x0160\n        let memberValue0_10 := mload(add(value0, _4))\n        abi_encode_address(memberValue0_10, add(headStart, _4))\n        let _5 := 0x0180\n        let memberValue0_11 := mload(add(value0, _5))\n        abi_encode_uint128(memberValue0_11, add(headStart, _5))\n        let _6 := 0x01a0\n        let memberValue0_12 := mload(add(value0, _6))\n        abi_encode_uint128(memberValue0_12, add(headStart, _6))\n        let _7 := 0x01c0\n        let memberValue0_13 := mload(add(value0, _7))\n        abi_encode_uint128(memberValue0_13, add(headStart, _7))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := abi_decode_uint16(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint16(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let _1 := 0xffff\n        mstore(add(headStart, 32), and(mload(value0), _1))\n        mstore(add(headStart, 64), and(mload(add(value0, 32)), _1))\n        mstore(add(headStart, 96), and(mload(add(value0, 64)), _1))\n        mstore(add(headStart, 128), and(mload(add(value0, 96)), 0xffffffffffffffffffffffffffffffffffffffff))\n        let memberValue0 := mload(add(value0, 128))\n        mstore(add(headStart, 0xa0), 0xa0)\n        tail := abi_encode_string(memberValue0, add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        let value_3 := calldataload(add(headStart, 96))\n        validator_revert_address(value_3)\n        value3 := value_3\n        let value_4 := calldataload(add(headStart, 128))\n        validator_revert_address(value_4)\n        value4 := value_4\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_uint16(add(headStart, 96))\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        value4 := value_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 32)), _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 32))), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        if gt(calldataload(add(headStart, 64)), _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 64))), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        if gt(calldataload(add(headStart, 96)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 96))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        value7 := abi_decode_address(add(headStart, 128))\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value8_1, value9_1 := abi_decode_bytes_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value8 := value8_1\n        value9 := value9_1\n        value10 := abi_decode_uint16(add(headStart, 192))\n    }\n    function abi_decode_uint128(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint128t_uint128(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint128(headStart)\n        value1 := abi_decode_uint128(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_5657() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if slt(sub(dataEnd, _3), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_5657()\n        mstore(value, abi_decode_uint16(_3))\n        mstore(add(value, _1), abi_decode_uint16(add(_3, _1)))\n        mstore(add(value, 64), abi_decode_uint16(add(_3, 64)))\n        let value_1 := calldataload(add(_3, 96))\n        validator_revert_address(value_1)\n        mstore(add(value, 96), value_1)\n        let offset_1 := calldataload(add(_3, 128))\n        if gt(offset_1, _2) { revert(0, 0) }\n        let _4 := add(_3, offset_1)\n        if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n        let _5 := calldataload(_4)\n        if gt(_5, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_5, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _5)\n        if gt(add(add(_4, _5), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_4, _1), _5)\n        mstore(add(add(array, _5), _1), 0)\n        mstore(add(value, 128), array)\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32) { revert(0, 0) }\n        value1 := add(headStart, 32)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), mload(value4))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        let memberValue0 := mload(add(value4, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 192), and(memberValue0, _1))\n        mstore(add(headStart, 224), and(mload(add(value4, 96)), _1))\n        let memberValue0_1 := mload(add(value4, 128))\n        let _2 := 256\n        abi_encode_address(memberValue0_1, add(headStart, _2))\n        let memberValue0_2 := mload(add(value4, 160))\n        abi_encode_bool(memberValue0_2, add(headStart, 288))\n        let memberValue0_3 := mload(add(value4, 192))\n        abi_encode_address(memberValue0_3, add(headStart, 320))\n        let memberValue0_4 := mload(add(value4, 224))\n        abi_encode_uint8(memberValue0_4, add(headStart, 352))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        mstore(add(headStart, 160), and(mload(add(value3, 64)), _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), 0xffff))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), mload(value5))\n        mstore(add(headStart, 192), and(mload(add(value5, 32)), 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 224), and(mload(add(value5, 64)), 0xff))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        abi_encode_enum_InterestRateMode(memberValue0, add(headStart, 160))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), iszero(iszero(mload(add(value3, 128)))))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value1), _1))\n        mstore(add(headStart, 96), and(mload(add(value1, 32)), _1))\n        mstore(add(headStart, 128), mload(add(value1, 64)))\n        let memberValue0 := mload(add(value1, 96))\n        mstore(add(headStart, 160), 0xe0)\n        let tail_1 := abi_encode_string(memberValue0, add(headStart, 288))\n        mstore(add(headStart, 192), and(mload(add(value1, 128)), 0xffff))\n        mstore(add(headStart, 0xe0), mload(add(value1, 160)))\n        mstore(add(headStart, 256), mload(add(value1, 192)))\n        tail := tail_1\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(value4, _1))\n        mstore(add(headStart, 160), iszero(iszero(value5)))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n        mstore(add(headStart, 224), and(value7, _1))\n        mstore(add(headStart, 256), and(value8, 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 320)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        mstore(add(headStart, 192), and(mload(add(value4, 64)), _1))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        mstore(add(headStart, 256), and(mload(add(value4, 128)), _1))\n        mstore(add(headStart, 288), and(mload(add(value4, 160)), 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), and(value5, _1))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value2), _1))\n        mstore(add(headStart, 96), and(mload(add(value2, 32)), _1))\n        mstore(add(headStart, 128), and(mload(add(value2, 64)), _1))\n        mstore(add(headStart, 160), and(mload(add(value2, 96)), _1))\n        mstore(add(headStart, 192), and(mload(add(value2, 128)), _1))\n        let memberValue0 := mload(add(value2, 160))\n        abi_encode_uint16(memberValue0, add(headStart, 224))\n        let memberValue0_1 := mload(add(value2, 192))\n        abi_encode_uint16(memberValue0_1, add(headStart, 256))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint16(value) -> ret\n    {\n        let _1 := 0xffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        abi_encode_enum_InterestRateMode(value3, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        mstore(tail_1, value2)\n        pos := add(headStart, 96)\n        let srcPtr := value1\n        let i := 0\n        for { } lt(i, value2) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_address(value)\n            mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 512)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        abi_encode_address(mload(value4), add(headStart, 128))\n        let memberValue0 := mload(add(value4, 32))\n        abi_encode_address(memberValue0, add(headStart, 160))\n        let memberValue0_1 := mload(add(value4, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let memberValue0_2 := mload(add(value4, 128))\n        let _1 := 256\n        abi_encode_enum_InterestRateMode(memberValue0_2, add(headStart, _1))\n        let memberValue0_3 := mload(add(value4, 160))\n        let _2 := 288\n        abi_encode_uint16(memberValue0_3, add(headStart, _2))\n        let memberValue0_4 := mload(add(value4, 192))\n        let _3 := 320\n        abi_encode_bool(memberValue0_4, add(headStart, _3))\n        let _4 := mload(add(value4, 224))\n        let _5 := 352\n        mstore(add(headStart, _5), _4)\n        mstore(add(headStart, 384), mload(add(value4, _1)))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 416))\n        let memberValue0_6 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_6, add(headStart, 448))\n        let memberValue0_7 := mload(add(value4, _5))\n        abi_encode_address(memberValue0_7, add(headStart, 480))\n    }\n    function abi_encode_array_address_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 160)\n        abi_encode_address(mload(value4), add(headStart, 160))\n        let memberValue0 := mload(add(value4, 32))\n        let _1 := 0x01c0\n        mstore(add(headStart, 192), _1)\n        let tail_1 := abi_encode_array_address_dyn(memberValue0, add(headStart, 608))\n        let memberValue0_1 := mload(add(value4, 64))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60\n        mstore(add(headStart, 224), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_array_uint256_dyn(memberValue0_1, tail_1)\n        let memberValue0_2 := mload(add(value4, 96))\n        let _3 := 256\n        mstore(add(headStart, _3), add(sub(tail_2, headStart), _2))\n        let tail_3 := abi_encode_array_uint256_dyn(memberValue0_2, tail_2)\n        let memberValue0_3 := mload(add(value4, 128))\n        let _4 := 288\n        abi_encode_address(memberValue0_3, add(headStart, _4))\n        let memberValue0_4 := mload(add(value4, 160))\n        let _5 := 320\n        mstore(add(headStart, _5), add(sub(tail_3, headStart), _2))\n        let tail_4 := abi_encode_string(memberValue0_4, tail_3)\n        let memberValue0_5 := mload(add(value4, 192))\n        let _6 := 352\n        abi_encode_uint16(memberValue0_5, add(headStart, _6))\n        let _7 := mload(add(value4, 224))\n        let _8 := 384\n        mstore(add(headStart, _8), _7)\n        let _9 := mload(add(value4, _3))\n        let _10 := 416\n        mstore(add(headStart, _10), _9)\n        mstore(add(headStart, _1), mload(add(value4, _4)))\n        mstore(add(headStart, 480), mload(add(value4, _5)))\n        let memberValue0_6 := mload(add(value4, _6))\n        abi_encode_address(memberValue0_6, add(headStart, 512))\n        let memberValue0_7 := mload(add(value4, _8))\n        abi_encode_uint8(memberValue0_7, add(headStart, 544))\n        let memberValue0_8 := mload(add(value4, _10))\n        abi_encode_bool(memberValue0_8, add(headStart, 576))\n        tail := tail_4\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), mload(mload(value3)))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 160), and(memberValue0, _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), and(mload(add(value3, 128)), 0xff))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), and(mload(add(value4, 32)), _1))\n        let memberValue0 := mload(add(value4, 64))\n        abi_encode_address(memberValue0, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let _2 := mload(add(value4, 128))\n        let _3 := 256\n        mstore(add(headStart, _3), _2)\n        mstore(add(headStart, 288), mload(add(value4, 160)))\n        mstore(add(headStart, 320), mload(add(value4, 192)))\n        let memberValue0_1 := mload(add(value4, 224))\n        abi_encode_address(memberValue0_1, add(headStart, 352))\n        let memberValue0_2 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_2, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage(slot, value)\n    {\n        sstore(slot, calldataload(value))\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"25195":[{"length":32,"start":975},{"length":32,"start":2968},{"length":32,"start":3210},{"length":32,"start":4526},{"length":32,"start":6253},{"length":32,"start":7232},{"length":32,"start":9139},{"length":32,"start":9348},{"length":32,"start":9943},{"length":32,"start":10706},{"length":32,"start":11315},{"length":32,"start":12969},{"length":32,"start":14789},{"length":32,"start":15550},{"length":32,"start":16139}]},"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4873},{"length":20,"start":5805},{"length":20,"start":8611},{"length":20,"start":8774},{"length":20,"start":11701},{"length":20,"start":14061}]},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7716},{"length":20,"start":13526}]},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4392}]},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5600},{"length":20,"start":10355}]},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":2798}]},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":6955},{"length":20,"start":8074},{"length":20,"start":8727},{"length":20,"start":10664},{"length":20,"start":11826},{"length":20,"start":13677}]},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3776},{"length":20,"start":6139},{"length":20,"start":6781},{"length":20,"start":7038},{"length":20,"start":12795}]}},"object":"608060405234801561001057600080fd5b50600436106103825760003560e01c80637a708e92116101de578063d1946dbc1161010f578063e82fec2f116100ad578063f51e435b1161007c578063f51e435b14610aa4578063f7a7384014610ab7578063f8119d5114610aca578063fd21ecff14610ad957600080fd5b8063e82fec2f14610a46578063e8eda9df1461079f578063eddf1b7914610a58578063ee3e210b14610a9157600080fd5b8063d5eed868116100e9578063d5eed868146109fa578063d65dc7a114610a0d578063dc7c0bff14610a20578063e43e88a114610a3357600080fd5b8063d1946dbc146109bf578063d579ea7d146109d4578063d5ed3933146109e757600080fd5b8063bcb6e5221161017c578063c4d66de811610156578063c4d66de814610973578063cd11238214610986578063cea9d26f14610999578063d15e0053146109ac57600080fd5b8063bcb6e522146108d1578063bf92857c146108e4578063c44b11f71461092457600080fd5b806394ba89a2116101b857806394ba89a2146108855780639cd1999614610898578063a415bcad146108ab578063ab9c4b5d146108be57600080fd5b80637a708e921461084c5780638e19899e1461085f57806394b576de1461087257600080fd5b806342b0b77c116102b8578063617ba0371161025657806369328dec1161023057806369328dec146107d857806369a933a5146107eb5780636a99c036146107fe5780636c6f6ae11461082c57600080fd5b8063617ba0371461079f57806363c9b860146107b2578063680dd47c146107c557600080fd5b80635275179711610292578063527517971461072c578063563dd61314610766578063573ade81146107795780635a3b74b91461078c57600080fd5b806342b0b77c146106a85780634417a583146106bb5780634d013f031461071957600080fd5b8063272d9072116103255780633036b439116102ff5780633036b439146104a157806335ea6a75146104b4578063386497fd14610682578063427da1771461069557600080fd5b8063272d90721461047357806328530a471461047b5780632dad97d41461048e57600080fd5b80630542975c116103615780630542975c146103ca578063074b2e43146104165780631d2118f91461044d5780631fe3c6f31461046057600080fd5b8062a718a9146103875780630148170e1461039c57806302c205f0146103b7575b600080fd5b61039a61039536600461449f565b610aec565b005b6103a4600181565b6040519081526020015b60405180910390f35b61039a6103c536600461452a565b610d67565b6103f17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ae565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016103ae565b61039a61045b3660046145a9565b610f17565b61039a61046e3660046145e2565b611105565b6039546103a4565b61039a6104893660046145fb565b611126565b6103a461049c366004614616565b611305565b61039a6104af3660046145e2565b611449565b6106756104c236600461464b565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091525073ffffffffffffffffffffffffffffffffffffffff90811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103ae9190614668565b6103a461069036600461464b565b611456565b61039a6106a33660046145e2565b61148a565b61039a6106b6366004614827565b6114c7565b61070a6106c936600461464b565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260358352819020815192830190915254815290565b604051905181526020016103ae565b61039a6107273660046145e2565b611641565b6103f161073a3660046148a9565b61ffff1660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6103a46107743660046145e2565b61167d565b6103a46107873660046148c4565b6116a9565b61039a61079a36600461490e565b6117f9565b61039a6107ad36600461493c565b6119ce565b61039a6107c036600461464b565b611ad1565b61039a6107d336600461498d565b611b4d565b6103a46107e63660046149b9565b611b7a565b61039a6107f936600461493c565b611d99565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661042c565b61083f61083a3660046145fb565b611e46565b6040516103ae9190614a66565b61039a61085a366004614ac9565b611f80565b6103a461086d3660046145e2565b61210c565b6103a461088036600461498d565b612133565b61039a610893366004614b2c565b61216e565b61039a6108a6366004614b9d565b6121ef565b61039a6108b9366004614bdf565b612244565b61039a6108cc366004614c1e565b61252a565b61039a6108df366004614d38565b6128e3565b6108f76108f236600461464b565b61291a565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016103ae565b61070a61093236600461464b565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260348352819020815192830190915254815290565b61039a61098136600461464b565b612b49565b61039a6109943660046145a9565b612d4e565b61039a6109a7366004614d6b565b612dd7565b6103a46109ba36600461464b565b612e84565b6109c7612eb2565b6040516103ae9190614dac565b61039a6109e2366004614ead565b612fee565b61039a6109f5366004614fe5565b61315a565b61039a610a083660046145e2565b6133e1565b6103a4610a1b366004614616565b613458565b6103a4610a2e3660046145e2565b6134f8565b61039a610a4136600461464b565b61351a565b603b5467ffffffffffffffff166103a4565b6103a4610a6636600461464b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205460ff1690565b6103a4610a9f36600461504a565b61358f565b61039a610ab2366004615090565b61376a565b61039a610ac53660046145e2565b61392b565b604051608081526020016103ae565b61039a610ae73660046150ef565b613981565b73__$f598c634f2d943205ac23f707b80075cbb$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c259190615111565b73ffffffffffffffffffffffffffffffffffffffff90811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf79190615111565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d3095949392919061512e565b60006040518083038186803b158015610d4857600080fd5b505af4158015610d5c573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e401600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff86811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e40160006040518083038186803b158015610ef557600080fd5b505af4158015610f09573d6000803e3d6000fd5b505050505050505050505050565b610f1f6139ac565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061104057506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906110ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600080611113603684613ada565b91509150611121828261216e565b505050565b73__$e4b9550ff526a295e1233dea02821b9004$__635d5dc3136034603660376038603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b9190615111565b73ffffffffffffffffffffffffffffffffffffffff1681526020018960ff168152506040518763ffffffff1660e01b81526004016112d29695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a08501529182015173ffffffffffffffffffffffffffffffffffffffff1660c0840152015160ff1660e08201526101000190565b60006040518083038186803b1580156112ea57600080fd5b505af41580156112fe573d6000803e3d6000fd5b5050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018860028111156113a3576113a3615222565b60028111156113b4576113b4615222565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526113fe949392919060040161528c565b602060405180830381865af415801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906152ff565b90505b9392505050565b6114516139ac565b603955565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061148490613b14565b92915050565b61ffff811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff90811690601083901c166111218282612d4e565b60006040518060e001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116604080870191909152911660609094019390935273ffffffffffffffffffffffffffffffffffffffff8a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__9163a1fe0e8d91611608918590600401615318565b60006040518083038186803b15801561162057600080fd5b505af4158015611634573d6000803e3d6000fd5b5050505050505050505050565b61ffff811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff16601082901c60011661112182826117f9565b60008060008061168e603686613ba4565b9250925092506116a0838383336116a9565b95945050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561174757611747615222565b600281111561175857611758615222565b815273ffffffffffffffffffffffffffffffffffffffff891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526117b8949392919060040161528c565b602060405180830381865af41580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a091906152ff565b73__$db79717e66442ee197e8271d032a066e34$__63bf697a26603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208787603b60089054906101000a900461ffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa9190615111565b336000908152603860205260409081902054905160e08b901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019990995260248901979097526044880195909552606487019390935273ffffffffffffffffffffffffffffffffffffffff9182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b1580156119b257600080fd5b505af41580156119c6573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e4015b60006040518083038186803b158015611ab357600080fd5b505af4158015611ac7573d6000803e3d6000fd5b5050505050505050565b611ad96139ac565b6040517f9cf57023000000000000000000000000000000000000000000000000000000008152603460048201526036602482015273ffffffffffffffffffffffffffffffffffffffff8216604482015273__$563c746fa3df0f1858d85f6ef4258864be$__90639cf57023906064016112d2565b6000806000806000611b60603689613c32565b94509450945094509450611ac78585338686868d8d610d67565b600073__$db79717e66442ee197e8271d032a066e34$__63186dea44603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd9190615111565b73ffffffffffffffffffffffffffffffffffffffff9081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a0015116610124820152610144016113fe565b611da1613cbc565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$b06080f092f400a43662c3f835a4d9baa8$__90630413c86f9060e401611a9b565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff8082168352620100008204811694830194909452640100000000810490931693810193909352660100000000000090910473ffffffffffffffffffffffffffffffffffffffff166060830152600181018054608084019190611ef7906153a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f23906153a3565b8015611f705780601f10611f4557610100808354040283529160200191611f70565b820191906000526020600020905b815481529060010190602001808311611f5357829003601f168201915b5050505050815250509050919050565b611f886139ac565b73__$563c746fa3df0f1858d85f6ef4258864be$__6369fc1bdf603460366040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff16815260200161205f608090565b61ffff168152506040518463ffffffff1660e01b8152600401612084939291906153f1565b602060405180830381865af41580156120a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c59190615481565b156112fe57603b805468010000000000000000900461ffff169060086120ea836154cd565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b600080600061211c603685613e49565b9150915061212b828233611b7a565b949350505050565b60008060008060008061214760368a613ec9565b945094509450945094506121618585853386868e8e61358f565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603460209081526040808320338452603590925290912073__$c3724b8d563dc83a94e797176cddecb3b9$__9163eac4d70391858560028111156121d0576121d0615222565b6040518563ffffffff1660e01b815260040161199a94939291906154ef565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$563c746fa3df0f1858d85f6ef4258864be$__906348c2ca8c9061199a9060349086908690600401615526565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f9603460366037603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a600281111561231b5761231b615222565b600281111561232c5761232c615222565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a09093019273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa1580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f9190615111565b73ffffffffffffffffffffffffffffffffffffffff90811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa1580156124cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f19190615111565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d3095949392919061558b565b6000604051806101c001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a085015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa15801561276a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278e9190615111565b6040517ffa50f29700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063fa50f29790602401602060405180830381865afa1580156127fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281e9190615481565b1515905273ffffffffffffffffffffffffffffffffffffffff86166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__91632e7263ea916128a591603491603691603791908890600401615734565b60006040518083038186803b1580156128bd57600080fd5b505af41580156128d1573d6000803e3d6000fd5b50505050505050505050505050505050565b6128eb6139ac565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$563c746fa3df0f1858d85f6ef4258864be$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa158015612a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3c9190615111565b73ffffffffffffffffffffffffffffffffffffffff90811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af4158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3591906158da565b949c939b5091995097509550909350915050565b60015460039060ff1680612b5c5750303b155b80612b68575060005481115b612bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610fa1565b60015460ff16158015612c3157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525090612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c4179055801561112157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$c3724b8d563dc83a94e797176cddecb3b9$__90636973f7449060640161199a565b612ddf613f09565b6040517f87b322b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044810182905273__$563c746fa3df0f1858d85f6ef4258864be$__906387b322b29060640160006040518083038186803b158015612e6757600080fd5b505af4158015612e7b573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061148490614096565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff811115612ee457612ee4614e06565b604051908082528060200260200182016040528015612f0d578160200160208202803683370190505b50905060005b83811015612fe45760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612fc45760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1682612f758584615924565b81518110612f8557612f8561593b565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fd2565b82612fce8161596a565b9350505b80612fdc8161596a565b915050612f13565b5091038152919050565b612ff66139ac565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316613065576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5060ff8216600090815260376020908152604091829020835181548386015194860151606087015173ffffffffffffffffffffffffffffffffffffffff166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169290941691909117919091179490941617929092178255608083015180518493926112fe9260018501929101906143c6565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260346020908152604091829020600401548251808401909352600283527f31310000000000000000000000000000000000000000000000000000000000009183019190915290911633146131f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5073__$db79717e66442ee197e8271d032a066e34$__638a5dadd160346036603760356040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133369190615111565b73ffffffffffffffffffffffffffffffffffffffff90811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526133a99594939291906004016159a3565b60006040518083038186803b1580156133c157600080fd5b505af41580156133d5573d6000803e3d6000fd5b50505050505050505050565b60008060008061344360368661ffff818116600090815260209390935260409092205473ffffffffffffffffffffffffffffffffffffffff16926fffffffffffffffffffffffffffffffff601083901c169260ff609084901c169260981c1690565b93509350935093506112fe8484848433612244565b6000613462613cbc565b73ffffffffffffffffffffffffffffffffffffffff84166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$b06080f092f400a43662c3f835a4d9baa8$__90638e7432489060a4016113fe565b600080600080613509603686613ba4565b9250925092506116a0838383611305565b6135226139ac565b6040517f1e3b41450000000000000000000000000000000000000000000000000000000081526034600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015273__$563c746fa3df0f1858d85f6ef4258864be$__90631e3b4145906044016112d2565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905260009073ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e401600060405180830381600087803b15801561362457600080fd5b505af1158015613638573d6000803e3d6000fd5b5050505060006040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561367d5761367d615222565b600281111561368e5761368e615222565b815273ffffffffffffffffffffffffffffffffffffffff89166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$c3724b8d563dc83a94e797176cddecb3b9$__916340e95de69161371b91603491603691879060040161528c565b602060405180830381865af4158015613738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375c91906152ff565b9a9950505050505050505050565b6137726139ac565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166137f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061388a57506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906138f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b5073ffffffffffffffffffffffffffffffffffffffff821660009081526034602052604090208135815581905b50505050565b61ffff81811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690601083901c6fffffffffffffffffffffffffffffffff1690609084901c16613925838333846119ce565b60008060008060006139956036888861411a565b94509450945094509450612e7b8585858585610aec565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a529190615111565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b50565b61ffff811660009081526020839052604090205473ffffffffffffffffffffffffffffffffffffffff16601082901c60ff165b9250929050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613b5a575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154611442906fffffffffffffffffffffffffffffffff80821691613b989170010000000000000000000000000000000090910416846141de565b906141eb565b50919050565b6000808061ffff84166fffffffffffffffffffffffffffffffff601086901c81169060ff609088901c1690821415613bfa577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505b61ffff90921660009081526020889052604090205473ffffffffffffffffffffffffffffffffffffffff169450925090509250925092565b60008080808060a086901c63ffffffff1660c087901c60ff16828080613ca48c8c61ffff81811660009081526020849052604090205473ffffffffffffffffffffffffffffffffffffffff1690601083901c6fffffffffffffffffffffffffffffffff1690609084901c169250925092565b919e909d50909b509499509297509295505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4b9190615111565b6040517f726600ce00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063726600ce90602401602060405180830381865afa158015613db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ddb9190615481565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b60008061ffff83166fffffffffffffffffffffffffffffffff601085901c811690811415613e9457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b61ffff91909116600090815260209590955260409094205473ffffffffffffffffffffffffffffffffffffffff169492505050565b600080600080600080600080600080613ee28c8c613ba4565b919e909d50909b609881901c63ffffffff169b5060b81c60ff169950975050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f989190615111565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690637be53ca190602401602060405180830381865afa158015614004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140289190615481565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520f565b6003810154600090700100000000000000000000000000000000900464ffffffffff16428114156140dc575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154611442906fffffffffffffffffffffffffffffffff80821691613b98917001000000000000000000000000000000009091041684614242565b60008080808061ffff87811690601089901c16602089901c73ffffffffffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff8981169060808b901c60011690821415614191577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505b61ffff948516600090815260209d909d526040808e2054949095168d5293909b205473ffffffffffffffffffffffffffffffffffffffff9283169c92169a90995097509095509350505050565b600061144283834261427f565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761422057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60008061425664ffffffffff841642615924565b6142609085615a7f565b6301e133809004905061212b816b033b2e3c9fd0803ce8000000615aeb565b60008061429364ffffffffff851684615924565b9050806142af576b033b2e3c9fd0803ce8000000915050611442565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116142e55760006142ea565b600285035b925066038882915c40006142fe8a806141eb565b8161430b5761430b615abc565b0491506301e1338061431d838b6141eb565b8161432a5761432a615abc565b04905060008261433a8688615a7f565b6143449190615a7f565b60029004905060008285614358888a615a7f565b6143629190615a7f565b61436c9190615a7f565b60069004905080826301e133806143838a8f615a7f565b61438d9190615b03565b6143a3906b033b2e3c9fd0803ce8000000615aeb565b6143ad9190615aeb565b6143b79190615aeb565b9b9a5050505050505050505050565b8280546143d2906153a3565b90600052602060002090601f0160209004810192826143f4576000855561443a565b82601f1061440d57805160ff191683800117855561443a565b8280016001018555821561443a579182015b8281111561443a57825182559160200191906001019061441f565b5061444692915061444a565b5090565b5b80821115614446576000815560010161444b565b73ffffffffffffffffffffffffffffffffffffffff81168114613ad757600080fd5b803561448c8161445f565b919050565b8015158114613ad757600080fd5b600080600080600060a086880312156144b757600080fd5b85356144c28161445f565b945060208601356144d28161445f565b935060408601356144e28161445f565b92506060860135915060808601356144f981614491565b809150509295509295909350565b803561ffff8116811461448c57600080fd5b803560ff8116811461448c57600080fd5b600080600080600080600080610100898b03121561454757600080fd5b88356145528161445f565b97506020890135965060408901356145698161445f565b955061457760608a01614507565b94506080890135935061458c60a08a01614519565b925060c0890135915060e089013590509295985092959890939650565b600080604083850312156145bc57600080fd5b82356145c78161445f565b915060208301356145d78161445f565b809150509250929050565b6000602082840312156145f457600080fd5b5035919050565b60006020828403121561460d57600080fd5b61144282614519565b60008060006060848603121561462b57600080fd5b83356146368161445f565b95602085013595506040909401359392505050565b60006020828403121561465d57600080fd5b81356114428161445f565b81515181526101e08101602083015161469560208401826fffffffffffffffffffffffffffffffff169052565b5060408301516146b960408401826fffffffffffffffffffffffffffffffff169052565b5060608301516146dd60608401826fffffffffffffffffffffffffffffffff169052565b50608083015161470160808401826fffffffffffffffffffffffffffffffff169052565b5060a083015161472560a08401826fffffffffffffffffffffffffffffffff169052565b5060c083015161473e60c084018264ffffffffff169052565b5060e083015161475460e084018261ffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f8401126147f757600080fd5b50813567ffffffffffffffff81111561480f57600080fd5b602083019150836020828501011115613b0d57600080fd5b60008060008060008060a0878903121561484057600080fd5b863561484b8161445f565b9550602087013561485b8161445f565b945060408701359350606087013567ffffffffffffffff81111561487e57600080fd5b61488a89828a016147e5565b909450925061489d905060808801614507565b90509295509295509295565b6000602082840312156148bb57600080fd5b61144282614507565b600080600080608085870312156148da57600080fd5b84356148e58161445f565b9350602085013592506040850135915060608501356149038161445f565b939692955090935050565b6000806040838503121561492157600080fd5b823561492c8161445f565b915060208301356145d781614491565b6000806000806080858703121561495257600080fd5b843561495d8161445f565b93506020850135925060408501356149748161445f565b915061498260608601614507565b905092959194509250565b6000806000606084860312156149a257600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156149ce57600080fd5b83356149d98161445f565b92506020840135915060408401356149f08161445f565b809150509250925092565b6000815180845260005b81811015614a2157602081850181015186830182015201614a05565b81811115614a33576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff8084511660208401528060208501511660408401528060408501511660608401525073ffffffffffffffffffffffffffffffffffffffff6060840151166080830152608083015160a08084015261212b60c08401826149fb565b600080600080600060a08688031215614ae157600080fd5b8535614aec8161445f565b94506020860135614afc8161445f565b93506040860135614b0c8161445f565b92506060860135614b1c8161445f565b915060808601356144f98161445f565b60008060408385031215614b3f57600080fd5b8235614b4a8161445f565b946020939093013593505050565b60008083601f840112614b6a57600080fd5b50813567ffffffffffffffff811115614b8257600080fd5b6020830191508360208260051b8501011115613b0d57600080fd5b60008060208385031215614bb057600080fd5b823567ffffffffffffffff811115614bc757600080fd5b614bd385828601614b58565b90969095509350505050565b600080600080600060a08688031215614bf757600080fd5b8535614c028161445f565b94506020860135935060408601359250614b1c60608701614507565b600080600080600080600080600080600060e08c8e031215614c3f57600080fd5b614c488c614481565b9a5067ffffffffffffffff8060208e01351115614c6457600080fd5b614c748e60208f01358f01614b58565b909b50995060408d0135811015614c8a57600080fd5b614c9a8e60408f01358f01614b58565b909950975060608d0135811015614cb057600080fd5b614cc08e60608f01358f01614b58565b9097509550614cd160808e01614481565b94508060a08e01351115614ce457600080fd5b50614cf58d60a08e01358e016147e5565b9093509150614d0660c08d01614507565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff8116811461448c57600080fd5b60008060408385031215614d4b57600080fd5b614d5483614d18565b9150614d6260208401614d18565b90509250929050565b600080600060608486031215614d8057600080fd5b8335614d8b8161445f565b92506020840135614d9b8161445f565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b81811015614dfa57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614dc8565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715614e5857614e58614e06565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ea557614ea5614e06565b604052919050565b60008060408385031215614ec057600080fd5b614ec983614519565b915060208084013567ffffffffffffffff80821115614ee757600080fd5b9085019060a08288031215614efb57600080fd5b614f03614e35565b614f0c83614507565b8152614f19848401614507565b84820152614f2960408401614507565b60408201526060830135614f3c8161445f565b6060820152608083013582811115614f5357600080fd5b80840193505087601f840112614f6857600080fd5b823582811115614f7a57614f7a614e06565b614faa857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614e5e565b92508083528885828601011115614fc057600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c08789031215614ffe57600080fd5b86356150098161445f565b955060208701356150198161445f565b945060408701356150298161445f565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b03121561506757600080fd5b88356150728161445f565b9750602089013596506040890135955060608901356145778161445f565b60008082840360408112156150a457600080fd5b83356150af8161445f565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156150e157600080fd5b506020830190509250929050565b6000806040838503121561510257600080fd5b50508035926020909101359150565b60006020828403121561512357600080fd5b81516114428161445f565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a0830152604083015173ffffffffffffffffffffffffffffffffffffffff80821660c08501528060608601511660e0850152505060808301516101006151b68185018373ffffffffffffffffffffffffffffffffffffffff169052565b60a0850151151561012085015260c085015173ffffffffffffffffffffffffffffffffffffffff90811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b60208152600061144260208301846149fb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110615288577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006101008201905085825284602083015283604083015273ffffffffffffffffffffffffffffffffffffffff8084511660608401526020840151608084015260408401516152de60a0850182615251565b5060608401511660c0830152608090920151151560e0909101529392505050565b60006020828403121561531157600080fd5b5051919050565b82815260406020820152600073ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401525060408301516080830152606083015160e060a08401526153736101208401826149fb565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c908216806153b757607f821691505b60208210811415613b9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006101208201905084825283602083015273ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a083015161546760e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b60006020828403121561549357600080fd5b815161144281614491565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818114156154e5576154e561549e565b6001019392505050565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff83166040820152608081016116a06060830184615251565b83815260406020808301829052908201839052600090849060608401835b8681101561557f5783356155578161445f565b73ffffffffffffffffffffffffffffffffffffffff1682529282019290820190600101615544565b50979650505050505050565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e0830152608083015161010061562781850183615251565b60a085015191506101206156408186018461ffff169052565b60c086015192506101406156578187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e08501529050615204565b600081518084526020808501945080840160005b838110156156f957815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016156c7565b509495945050505050565b600081518084526020808501945080840160005b838110156156f957815187529582019590820190600101615718565b85815284602082015283604082015282606082015260a0608082015261577360a08201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516101c08060c08501526157916102608501836156b3565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e08701526157cd8483615704565b9350606087015191506101008187860301818801526157ec8584615704565b9450608088015192506101206158198189018573ffffffffffffffffffffffffffffffffffffffff169052565b60a089015193506101408389880301818a015261583687866149fb565b965060c08a015194506101609350615853848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b015196506158ad6102008b018873ffffffffffffffffffffffffffffffffffffffff169052565b8a015160ff81166102208b015295506158c4915050565b870151801515610240880152925061557f915050565b60008060008060008060c087890312156158f357600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000828210156159365761593661549e565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561599c5761599c61549e565b5060010190565b60006101a08201905086825285602083015284604083015283606083015273ffffffffffffffffffffffffffffffffffffffff8084511660808401528060208501511660a0840152506040830151615a1360c084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e08501519150615a6b61016085018373ffffffffffffffffffffffffffffffffffffffff169052565b84015160ff81166101808501529050615204565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615ab757615ab761549e565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008219821115615afe57615afe61549e565b500190565b600082615b39577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea264697066735822122049177e7143d337b3e7f04027b3b94d6b6b4c178c039df6770c104796eeaf2f7b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x382 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A708E92 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0xD1946DBC GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xF51E435B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0xAA4 JUMPI DUP1 PUSH4 0xF7A73840 EQ PUSH2 0xAB7 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0xACA JUMPI DUP1 PUSH4 0xFD21ECFF EQ PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0xA46 JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0xA58 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0xA91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5EED868 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xD5EED868 EQ PUSH2 0x9FA JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xA0D JUMPI DUP1 PUSH4 0xDC7C0BFF EQ PUSH2 0xA20 JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0xA33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9BF JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x9D4 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0x9E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x973 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x986 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x9AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x8E4 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x924 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x94BA89A2 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x885 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x898 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x8AB JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x84C JUMPI DUP1 PUSH4 0x8E19899E EQ PUSH2 0x85F JUMPI DUP1 PUSH4 0x94B576DE EQ PUSH2 0x872 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42B0B77C GT PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x617BA037 GT PUSH2 0x256 JUMPI DUP1 PUSH4 0x69328DEC GT PUSH2 0x230 JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x7D8 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x7EB JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x7FE JUMPI DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x617BA037 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x7B2 JUMPI DUP1 PUSH4 0x680DD47C EQ PUSH2 0x7C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x292 JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x72C JUMPI DUP1 PUSH4 0x563DD613 EQ PUSH2 0x766 JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x6BB JUMPI DUP1 PUSH4 0x4D013F03 EQ PUSH2 0x719 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x272D9072 GT PUSH2 0x325 JUMPI DUP1 PUSH4 0x3036B439 GT PUSH2 0x2FF JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x4B4 JUMPI DUP1 PUSH4 0x386497FD EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0x427DA177 EQ PUSH2 0x695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x272D9072 EQ PUSH2 0x473 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C GT PUSH2 0x361 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x3CA JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x44D JUMPI DUP1 PUSH4 0x1FE3C6F3 EQ PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x3B7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x39A PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x449F JUMP JUMPDEST PUSH2 0xAEC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3A4 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x39A PUSH2 0x3C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x452A JUMP JUMPDEST PUSH2 0xD67 JUMP JUMPDEST PUSH2 0x3F1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x45B CALLDATASIZE PUSH1 0x4 PUSH2 0x45A9 JUMP JUMPDEST PUSH2 0xF17 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x46E CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x1105 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x3A4 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0x45FB JUMP JUMPDEST PUSH2 0x1126 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x4616 JUMP JUMPDEST PUSH2 0x1305 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x4AF CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x1449 JUMP JUMPDEST PUSH2 0x675 PUSH2 0x4C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4668 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x690 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x1456 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x6A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x148A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x6B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4827 JUMP JUMPDEST PUSH2 0x14C7 JUMP JUMPDEST PUSH2 0x70A PUSH2 0x6C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x727 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x3F1 PUSH2 0x73A CALLDATASIZE PUSH1 0x4 PUSH2 0x48A9 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x167D JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x787 CALLDATASIZE PUSH1 0x4 PUSH2 0x48C4 JUMP JUMPDEST PUSH2 0x16A9 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x490E JUMP JUMPDEST PUSH2 0x17F9 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7AD CALLDATASIZE PUSH1 0x4 PUSH2 0x493C JUMP JUMPDEST PUSH2 0x19CE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x1AD1 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x498D JUMP JUMPDEST PUSH2 0x1B4D JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x7E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x49B9 JUMP JUMPDEST PUSH2 0x1B7A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x493C JUMP JUMPDEST PUSH2 0x1D99 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x42C JUMP JUMPDEST PUSH2 0x83F PUSH2 0x83A CALLDATASIZE PUSH1 0x4 PUSH2 0x45FB JUMP JUMPDEST PUSH2 0x1E46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4A66 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x85A CALLDATASIZE PUSH1 0x4 PUSH2 0x4AC9 JUMP JUMPDEST PUSH2 0x1F80 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x86D CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x210C JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x880 CALLDATASIZE PUSH1 0x4 PUSH2 0x498D JUMP JUMPDEST PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x893 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B2C JUMP JUMPDEST PUSH2 0x216E JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B9D JUMP JUMPDEST PUSH2 0x21EF JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BDF JUMP JUMPDEST PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1E JUMP JUMPDEST PUSH2 0x252A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4D38 JUMP JUMPDEST PUSH2 0x28E3 JUMP JUMPDEST PUSH2 0x8F7 PUSH2 0x8F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x291A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x70A PUSH2 0x932 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x981 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x2B49 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x994 CALLDATASIZE PUSH1 0x4 PUSH2 0x45A9 JUMP JUMPDEST PUSH2 0x2D4E JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D6B JUMP JUMPDEST PUSH2 0x2DD7 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x2E84 JUMP JUMPDEST PUSH2 0x9C7 PUSH2 0x2EB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4DAC JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4EAD JUMP JUMPDEST PUSH2 0x2FEE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x315A JUMP JUMPDEST PUSH2 0x39A PUSH2 0xA08 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x33E1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA1B CALLDATASIZE PUSH1 0x4 PUSH2 0x4616 JUMP JUMPDEST PUSH2 0x3458 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA2E CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x34F8 JUMP JUMPDEST PUSH2 0x39A PUSH2 0xA41 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH2 0x351A JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x3A4 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA66 CALLDATASIZE PUSH1 0x4 PUSH2 0x464B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA9F CALLDATASIZE PUSH1 0x4 PUSH2 0x504A JUMP JUMPDEST PUSH2 0x358F JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAB2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5090 JUMP JUMPDEST PUSH2 0x376A JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E2 JUMP JUMPDEST PUSH2 0x392B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAE7 CALLDATASIZE PUSH1 0x4 PUSH2 0x50EF JUMP JUMPDEST PUSH2 0x3981 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC25 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCF7 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD30 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x512E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xF09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xF1F PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xFAA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x1040 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1113 PUSH1 0x36 DUP5 PUSH2 0x3ADA JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1121 DUP3 DUP3 PUSH2 0x216E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1217 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x123B SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12D2 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x12FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13A3 JUMPI PUSH2 0x13A3 PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13B4 JUMPI PUSH2 0x13B4 PUSH2 0x5222 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x13FE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x528C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x141B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x143F SWAP2 SWAP1 PUSH2 0x52FF JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1451 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1484 SWAP1 PUSH2 0x3B14 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR AND PUSH2 0x1121 DUP3 DUP3 PUSH2 0x2D4E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x1608 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5318 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1620 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1634 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x10 DUP3 SWAP1 SHR PUSH1 0x1 AND PUSH2 0x1121 DUP3 DUP3 PUSH2 0x17F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x168E PUSH1 0x36 DUP7 PUSH2 0x3BA4 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16A0 DUP4 DUP4 DUP4 CALLER PUSH2 0x16A9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1747 JUMPI PUSH2 0x1747 PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1758 JUMPI PUSH2 0x1758 PUSH2 0x5222 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x17B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x528C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16A0 SWAP2 SWAP1 PUSH2 0x52FF JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18FA SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x19C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1AC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1AD9 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9CF5702300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x9CF57023 SWAP1 PUSH1 0x64 ADD PUSH2 0x12D2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B60 PUSH1 0x36 DUP10 PUSH2 0x3C32 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x1AC7 DUP6 DUP6 CALLER DUP7 DUP7 DUP7 DUP14 DUP14 PUSH2 0xD67 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CCD SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x13FE JUMP JUMPDEST PUSH2 0x1DA1 PUSH2 0x3CBC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1A9B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1EF7 SWAP1 PUSH2 0x53A3 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1F23 SWAP1 PUSH2 0x53A3 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1F70 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F45 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1F70 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F53 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F88 PUSH2 0x39AC JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x205F PUSH1 0x80 SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2084 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53F1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C5 SWAP2 SWAP1 PUSH2 0x5481 JUMP JUMPDEST ISZERO PUSH2 0x12FE JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x20EA DUP4 PUSH2 0x54CD JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x211C PUSH1 0x36 DUP6 PUSH2 0x3E49 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x212B DUP3 DUP3 CALLER PUSH2 0x1B7A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2147 PUSH1 0x36 DUP11 PUSH2 0x3EC9 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x2161 DUP6 DUP6 DUP6 CALLER DUP7 DUP7 DUP15 DUP15 PUSH2 0x358F JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21D0 JUMPI PUSH2 0x21D0 PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x199A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x54EF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x199A SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5526 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x231B JUMPI PUSH2 0x231B PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x232C JUMPI PUSH2 0x232C PUSH2 0x5222 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x241F SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24F1 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD30 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x558B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x276A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x278E SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x281E SWAP2 SWAP1 PUSH2 0x5481 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x28A5 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5734 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x28D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x28EB PUSH2 0x39AC JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A3C SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2B11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B35 SWAP2 SWAP1 PUSH2 0x58DA JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x2B5C JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x2B68 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2BF4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xFA1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2C31 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CEE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1121 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x199A JUMP JUMPDEST PUSH2 0x2DDF PUSH2 0x3F09 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2E7B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1484 SWAP1 PUSH2 0x4096 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2EE4 JUMPI PUSH2 0x2EE4 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2F0D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FE4 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2FC4 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH2 0x2F75 DUP6 DUP5 PUSH2 0x5924 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2F85 JUMPI PUSH2 0x2F85 PUSH2 0x593B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2FD2 JUMP JUMPDEST DUP3 PUSH2 0x2FCE DUP2 PUSH2 0x596A JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2FDC DUP2 PUSH2 0x596A JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2F13 JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2FF6 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x3065 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x12FE SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x43C6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x31F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3312 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3336 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x33A9 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x59A3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x33C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x33D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3443 PUSH1 0x36 DUP7 PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP4 SWAP1 SHR AND SWAP3 PUSH1 0xFF PUSH1 0x90 DUP5 SWAP1 SHR AND SWAP3 PUSH1 0x98 SHR AND SWAP1 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x12FE DUP5 DUP5 DUP5 DUP5 CALLER PUSH2 0x2244 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3462 PUSH2 0x3CBC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x13FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3509 PUSH1 0x36 DUP7 PUSH2 0x3BA4 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16A0 DUP4 DUP4 DUP4 PUSH2 0x1305 JUMP JUMPDEST PUSH2 0x3522 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x12D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3638 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x367D JUMPI PUSH2 0x367D PUSH2 0x5222 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x368E JUMPI PUSH2 0x368E PUSH2 0x5222 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x371B SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x528C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3738 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x375C SWAP2 SWAP1 PUSH2 0x52FF JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3772 PUSH2 0x39AC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x37F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x388A JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x38F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 CALLDATALOAD DUP2 SSTORE DUP2 SWAP1 JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x90 DUP5 SWAP1 SHR AND PUSH2 0x3925 DUP4 DUP4 CALLER DUP5 PUSH2 0x19CE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3995 PUSH1 0x36 DUP9 DUP9 PUSH2 0x411A JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x2E7B DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0xAEC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A52 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x10 DUP3 SWAP1 SHR PUSH1 0xFF AND JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3B5A JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x1442 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x3B98 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x41DE JUMP JUMPDEST SWAP1 PUSH2 0x41EB JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xFFFF DUP5 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP7 SWAP1 SHR DUP2 AND SWAP1 PUSH1 0xFF PUSH1 0x90 DUP9 SWAP1 SHR AND SWAP1 DUP3 EQ ISZERO PUSH2 0x3BFA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP JUMPDEST PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP SWAP3 POP SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH1 0xA0 DUP7 SWAP1 SHR PUSH4 0xFFFFFFFF AND PUSH1 0xC0 DUP8 SWAP1 SHR PUSH1 0xFF AND DUP3 DUP1 DUP1 PUSH2 0x3CA4 DUP13 DUP13 PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x90 DUP5 SWAP1 SHR AND SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP2 SWAP15 SWAP1 SWAP14 POP SWAP1 SWAP12 POP SWAP5 SWAP10 POP SWAP3 SWAP8 POP SWAP3 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D4B SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3DB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3DDB SWAP2 SWAP1 PUSH2 0x5481 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFFFF DUP4 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND SWAP1 DUP2 EQ ISZERO PUSH2 0x3E94 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 SWAP1 SWAP5 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3EE2 DUP13 DUP13 PUSH2 0x3BA4 JUMP JUMPDEST SWAP2 SWAP15 SWAP1 SWAP14 POP SWAP1 SWAP12 PUSH1 0x98 DUP2 SWAP1 SHR PUSH4 0xFFFFFFFF AND SWAP12 POP PUSH1 0xB8 SHR PUSH1 0xFF AND SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F74 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3F98 SWAP2 SWAP1 PUSH2 0x5111 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4004 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4028 SWAP2 SWAP1 PUSH2 0x5481 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x40DC JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x1442 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x3B98 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x4242 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH2 0xFFFF DUP8 DUP2 AND SWAP1 PUSH1 0x10 DUP10 SWAP1 SHR AND PUSH1 0x20 DUP10 SWAP1 SHR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND SWAP1 PUSH1 0x80 DUP12 SWAP1 SHR PUSH1 0x1 AND SWAP1 DUP3 EQ ISZERO PUSH2 0x4191 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP JUMPDEST PUSH2 0xFFFF SWAP5 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP14 SWAP1 SWAP14 MSTORE PUSH1 0x40 DUP1 DUP15 KECCAK256 SLOAD SWAP5 SWAP1 SWAP6 AND DUP14 MSTORE SWAP4 SWAP1 SWAP12 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP13 SWAP3 AND SWAP11 SWAP1 SWAP10 POP SWAP8 POP SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1442 DUP4 DUP4 TIMESTAMP PUSH2 0x427F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4256 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5924 JUMP JUMPDEST PUSH2 0x4260 SWAP1 DUP6 PUSH2 0x5A7F JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x212B DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5AEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4293 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5924 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x42AF JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1442 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x42E5 JUMPI PUSH1 0x0 PUSH2 0x42EA JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x42FE DUP11 DUP1 PUSH2 0x41EB JUMP JUMPDEST DUP2 PUSH2 0x430B JUMPI PUSH2 0x430B PUSH2 0x5ABC JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x431D DUP4 DUP12 PUSH2 0x41EB JUMP JUMPDEST DUP2 PUSH2 0x432A JUMPI PUSH2 0x432A PUSH2 0x5ABC JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x433A DUP7 DUP9 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x4344 SWAP2 SWAP1 PUSH2 0x5A7F JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x4358 DUP9 DUP11 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x4362 SWAP2 SWAP1 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x436C SWAP2 SWAP1 PUSH2 0x5A7F JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x4383 DUP11 DUP16 PUSH2 0x5A7F JUMP JUMPDEST PUSH2 0x438D SWAP2 SWAP1 PUSH2 0x5B03 JUMP JUMPDEST PUSH2 0x43A3 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5AEB JUMP JUMPDEST PUSH2 0x43AD SWAP2 SWAP1 PUSH2 0x5AEB JUMP JUMPDEST PUSH2 0x43B7 SWAP2 SWAP1 PUSH2 0x5AEB JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x43D2 SWAP1 PUSH2 0x53A3 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x43F4 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x443A JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x440D JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x443A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x443A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x443A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x441F JUMP JUMPDEST POP PUSH2 0x4446 SWAP3 SWAP2 POP PUSH2 0x444A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x4446 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x444B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x448C DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x44B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x44C2 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x44D2 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x44E2 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x44F9 DUP2 PUSH2 0x4491 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x448C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x448C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4552 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x4569 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 POP PUSH2 0x4577 PUSH1 0x60 DUP11 ADD PUSH2 0x4507 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x458C PUSH1 0xA0 DUP11 ADD PUSH2 0x4519 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x45C7 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x45D7 DUP2 PUSH2 0x445F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x45F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x460D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1442 DUP3 PUSH2 0x4519 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x462B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4636 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x465D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1442 DUP2 PUSH2 0x445F JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x4695 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x46B9 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x46DD PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x4701 PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4725 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x473E PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x4754 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x47F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x480F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3B0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4840 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x484B DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x485B DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x487E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x488A DUP10 DUP3 DUP11 ADD PUSH2 0x47E5 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x489D SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x4507 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x48BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1442 DUP3 PUSH2 0x4507 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x48DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x48E5 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4903 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4921 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x492C DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x45D7 DUP2 PUSH2 0x4491 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4952 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x495D DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4974 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 POP PUSH2 0x4982 PUSH1 0x60 DUP7 ADD PUSH2 0x4507 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x49A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x49CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x49D9 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x49F0 DUP2 PUSH2 0x445F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4A21 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x4A05 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x4A33 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x212B PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x49FB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4AE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4AEC DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4AFC DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4B0C DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4B1C DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x44F9 DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4B4A DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4B6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3B0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4BB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4BC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4BD3 DUP6 DUP3 DUP7 ADD PUSH2 0x4B58 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4C02 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4B1C PUSH1 0x60 DUP8 ADD PUSH2 0x4507 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x4C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C48 DUP13 PUSH2 0x4481 JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4C64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C74 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B58 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4C8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C9A DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B58 JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4CC0 DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B58 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x4CD1 PUSH1 0x80 DUP15 ADD PUSH2 0x4481 JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4CE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4CF5 DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x47E5 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x4D06 PUSH1 0xC0 DUP14 ADD PUSH2 0x4507 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x448C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4D54 DUP4 PUSH2 0x4D18 JUMP JUMPDEST SWAP2 POP PUSH2 0x4D62 PUSH1 0x20 DUP5 ADD PUSH2 0x4D18 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4D80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4D8B DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4D9B DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4DFA JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4DC8 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4E58 JUMPI PUSH2 0x4E58 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4EA5 JUMPI PUSH2 0x4EA5 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4EC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EC9 DUP4 PUSH2 0x4519 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4EE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x4EFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F03 PUSH2 0x4E35 JUMP JUMPDEST PUSH2 0x4F0C DUP4 PUSH2 0x4507 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4F19 DUP5 DUP5 ADD PUSH2 0x4507 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x4F29 PUSH1 0x40 DUP5 ADD PUSH2 0x4507 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x4F3C DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4F53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4F68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4F7A JUMPI PUSH2 0x4F7A PUSH2 0x4E06 JUMP JUMPDEST PUSH2 0x4FAA DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x4E5E JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x4FC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4FFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x5009 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x5019 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x5029 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x5067 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x5072 DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x4577 DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x50A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x50AF DUP2 PUSH2 0x445F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x50E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5102 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1442 DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x51B6 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1442 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x49FB JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x5288 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x52DE PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x5251 JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x5373 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x49FB JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x53B7 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x3B9E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x5467 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1442 DUP2 PUSH2 0x4491 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x54E5 JUMPI PUSH2 0x54E5 PUSH2 0x549E JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x16A0 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x5251 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x557F JUMPI DUP4 CALLDATALOAD PUSH2 0x5557 DUP2 PUSH2 0x445F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5544 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x5627 DUP2 DUP6 ADD DUP4 PUSH2 0x5251 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x5640 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x5657 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x5204 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x56F9 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x56C7 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x56F9 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5718 JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x5773 PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x5791 PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x56B3 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x57CD DUP5 DUP4 PUSH2 0x5704 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x57EC DUP6 DUP5 PUSH2 0x5704 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x5819 DUP2 DUP10 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x5836 DUP8 DUP7 PUSH2 0x49FB JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x5853 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x58AD PUSH2 0x200 DUP12 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x58C4 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x557F SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x58F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5936 JUMPI PUSH2 0x5936 PUSH2 0x549E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x599C JUMPI PUSH2 0x599C PUSH2 0x549E JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5A13 PUSH1 0xC0 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x5A6B PUSH2 0x160 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x5204 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5AB7 JUMPI PUSH2 0x5AB7 PUSH2 0x549E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5AFE JUMPI PUSH2 0x5AFE PUSH2 0x549E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5B39 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x49 OR PUSH31 0x7143D337B3E7F04027B3B94D6B6B4C178C039DF6770C104796EEAF2F7B6473 PUSH16 0x6C634300080A00330000000000000000 ","sourceMap":"202:189:62:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755:112;;;;;;:::i;:::-;;:::i;:::-;;1941:43;;1981:3;1941:43;;;;;1320:25:124;;;1308:2;1293:18;1941:43:112;;;;;;;;5034:654;;;;;;:::i;:::-;;:::i;1988:58::-;;;;;;;;2700:42:124;2688:55;;;2670:74;;2658:2;2643:18;1988:58:112;2493:257:124;15738:122:112;15833:22;;;;15738:122;;;3055:34:124;3043:47;;;3025:66;;3013:2;2998:18;15738:122:112;2879:218:124;17958:385:112;;;;;;:::i;:::-;;:::i;2973:247:111:-;;;;;;:::i;:::-;;:::i;15596:114:112:-;15687:18;;15596:114;;19799:411;;;;;;:::i;:::-;;:::i;8616:509::-;;;;;;:::i;:::-;;:::i;18772:152::-;;;;;;:::i;:::-;;:::i;12875:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13005:16:112;;;;;;;;:9;:16;;;;;;;;;12998:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;12875:151;;;;;;;;:::i;14397:168::-;;;;;;:::i;:::-;;:::i;3250:244:111:-;;;;;;:::i;:::-;;:::i;12077:604:112:-;;;;;;:::i;:::-;;:::i;14010:167::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;14154:18:112;;;;;;;:12;:18;;;;;14147:25;;;;;;;;;;;;14010:167;;;;8661:13:124;;8643:32;;8631:2;8616:18;14010:167:112;8419:262:124;3524:275:111;;;;;;:::i;:::-;;:::i;15288:109:112:-;;;;;;:::i;:::-;15375:17;;15353:7;15375:17;;;:13;:17;;;;;;;;;15288:109;1947:270:111;;;;;;:::i;:::-;;:::i;7220:523:112:-;;;;;;:::i;:::-;;:::i;9651:404::-;;;;;;:::i;:::-;;:::i;4601:405::-;;;;;;:::i;:::-;;:::i;17775:155::-;;;;;;:::i;:::-;;:::i;1042:326:111:-;;;;;;:::i;:::-;;:::i;5716:559:112:-;;;;;;:::i;:::-;;:::i;3961:334::-;;;;;;:::i;:::-;;:::i;15888:133::-;15989:27;;;;;;;15888:133;;19613:158;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17013:734::-;;;;;;:::i;:::-;;:::i;1398:217:111:-;;;;;;:::i;:::-;;:::i;2247:386::-;;;;;;:::i;:::-;;:::i;9153:268:112:-;;;;;;:::i;:::-;;:::i;12709:138::-;;;;;;:::i;:::-;;:::i;6303:889::-;;;;;;:::i;:::-;;:::i;10866:1183::-;;;;;;:::i;:::-;;:::i;18952:278::-;;;;;;:::i;:::-;;:::i;13054:721::-;;;;;;:::i;:::-;;:::i;:::-;;;;17452:25:124;;;17508:2;17493:18;;17486:34;;;;17536:18;;;17529:34;;;;17594:2;17579:18;;17572:34;17637:3;17622:19;;17615:35;17681:3;17666:19;;17659:35;17439:3;17424:19;13054:721:112;17165:535:124;13803:179:112;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;13947:16:112;;;;;;;:9;:16;;;;;13940:37;;;;;;;;;;;;13803:179;3720:213;;;;;;:::i;:::-;;:::i;9449:174::-;;;;;;:::i;:::-;;:::i;20602:180::-;;;;;;:::i;:::-;;:::i;14205:164::-;;;;;;:::i;:::-;;:::i;14593:667::-;;;:::i;:::-;;;;;;;:::i;19258:327::-;;;;;;:::i;:::-;;:::i;16211:774::-;;;;;;:::i;:::-;;:::i;1645:272:111:-;;;;;;:::i;:::-;;:::i;4323:250:112:-;;;;;;:::i;:::-;;:::i;2663:280:111:-;;;;;;:::i;:::-;;:::i;20394:180:112:-;;;;;;:::i;:::-;;:::i;15425:143::-;15532:31;;;;15425:143;;20238:128;;;;;;:::i;:::-;20336:25;;20314:7;20336:25;;;:19;:25;;;;;;;;;20238:128;7771:817;;;;;;:::i;:::-;;:::i;18371:373::-;;;;;;:::i;:::-;;:::i;773:239:111:-;;;;;;:::i;:::-;;:::i;16049:134:112:-;;;5284:3:88;23864:38:124;;23852:2;23837:18;16049:134:112;23720:188:124;3829:375:111;;;;;;:::i;:::-;;:::i;10083:755:112:-;10261:16;:39;10308:9;10325:13;10346:12;10366:16;10390:437;;;;;;;;10454:14;;;;;;;;;;;10390:437;;;;;;10491:11;10390:437;;;;10529:15;10390:437;;;;;;10565:9;10390:437;;;;;;10590:4;10390:437;;;;;;10619:13;10390:437;;;;;;10655:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:437;;;;;;10719:25;;;;;;;:19;10390:437;10719:25;;;;;;;;;;;10390:437;;;;10775:43;;;;;;;10390:437;;;;;10775:18;:41;;;;;;:43;;;;;10390:437;10775:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:437;;;;;10261:572;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755;;;;;:::o;5034:654::-;5265:150;;;;;5303:10;5265:150;;;26642:34:124;5329:4:112;26692:18:124;;;26685:43;26744:18;;;26737:34;;;26787:18;;;26780:34;;;26863:4;26851:17;;26830:19;;;26823:46;26885:19;;;26878:35;;;26929:19;;;26922:35;;;5265:30:112;;;;;;26553:19:124;;5265:150:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;5492:24:112;;;;;;;;:12;:24;;;;;;;;;5524:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5421:262;;;;;5454:9;5421:262;;;27396:25:124;5471:13:112;27437:18:124;;;27430:34;27480:18;;;27473:34;;;;27608:13;;27604:22;;27584:18;;;27577:50;27664:22;27643:19;;;27636:51;27728:22;;27724:31;;;27703:19;;;27696:60;27797:22;27793:35;;;27772:19;;;27765:64;5421:11:112;;:25;;27368:19:124;;5421:262:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:654;;;;;;;;:::o;17958:385::-;2178:23;:21;:23::i;:::-;18143:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;18122:19:::1;::::0;::::1;18114:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;18187:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18215:16:112::1;::::0;;:13:::1;:16;::::0;;;:25:::1;::::0;;::::1;:16:::0;::::1;:25;18187:53;18242:23;;;;;;;;;;;;;;;;::::0;18179:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18272:16:112::1;::::0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:44:::1;;:66:::0;;;::::1;::::0;;;::::1;;::::0;;17958:385::o;2973:247:111:-;3040:13;3055:24;3083:83;3135:13;3156:4;3083:44;:83::i;:::-;3039:127;;;;3172:43;3191:5;3198:16;3172:18;:43::i;:::-;3033:187;;2973:247;:::o;19799:411:112:-;19871:10;:30;19909:9;19926:13;19947:16;19971:19;19998:12;:24;20011:10;19998:24;;;;;;;;;;;;;;;20030:169;;;;;;;;20091:14;;;;;;;;;;;20030:169;;;;;;20123:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20030:169;;;;;;20180:10;20030:169;;;;;19871:334;;;;;;;;;;;;;;;;;;;28636:25:124;;;28692:2;28677:18;;;28670:34;;;;28735:2;28720:18;;;28713:34;;;;28778:2;28763:18;;28756:34;;;;28821:3;28806:19;;28799:35;28871:13;;28865:3;28850:19;;28843:42;28932:15;;;28926:22;28950:42;28922:71;28916:3;28901:19;;28894:100;29041:15;29035:22;29059:4;29031:33;29025:3;29010:19;;29003:62;28623:3;28608:19;;28065:1006;19871:334:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19799:411;:::o;8616:509::-;8748:7;8776:11;:24;8810:9;8829:13;8852:12;:24;8865:10;8852:24;;;;;;;;;;;;;;;8886:226;;;;;;;;8934:5;8886:226;;;;;;8959:6;8886:226;;;;9022:16;8995:44;;;;;;;;:::i;:::-;8886:226;;;;;;;;:::i;:::-;;;9063:10;8886:226;;;;9097:4;8886:226;;;;;8776:344;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8763:357;;8616:509;;;;;;:::o;18772:152::-;2178:23;:21;:23::i;:::-;18887:18:::1;:32:::0;18772:152::o;14397:168::-;14524:16;;;14502:7;14524:16;;;:9;:16;;;;;:36;;:34;:36::i;:::-;14517:43;14397:168;-1:-1:-1;;14397:168:112:o;3250:244:111:-;6796:6:94;6786:17;;3324:13:111;6899:21:94;;;3414:13:111;6899:21:94;;;;;;6837:42;6899:21;;;;6826:2;6822:13;;;6818:62;3451:38:111;6899:21:94;6818:62;3451:25:111;:38::i;12077:604:112:-;12256:50;12309:293;;;;;;;;12366:15;12309:293;;;;;;12396:5;12309:293;;;;;;12417:6;12309:293;;;;12439:6;;12309:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12309:293:112;;;-1:-1:-1;;;12309:293:112;;;;;;;;;;;12515:27;;;;;;;;12309:293;;;;;;;;12573:22;;12309:293;;;;;;;;12646:16;;;;;:9;:16;;;;;12608:68;;;;;12256:346;;-1:-1:-1;12608:14:112;;:37;;:68;;12256:346;;12608:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12250:431;12077:604;;;;;;:::o;3524:275:111:-;7548:6:94;7538:17;;3602:13:111;7623:21:94;;;3704:13:111;7623:21:94;;;;;;;;7589:2;7585:13;;;7600:3;7581:23;3741:53:111;7623:21:94;7581:23;3741:29:111;:53::i;1947:270::-;2003:7;2019:13;2034:14;2050:24;2078:70;2117:13;2138:4;2078:31;:70::i;:::-;2018:130;;;;;;2162:50;2168:5;2175:6;2183:16;2201:10;2162:5;:50::i;:::-;2155:57;1947:270;-1:-1:-1;;;;;1947:270:111:o;7220:523:112:-;7365:7;7393:11;:24;7427:9;7446:13;7469:12;:24;7482:10;7469:24;;;;;;;;;;;;;;;7503:227;;;;;;;;7551:5;7503:227;;;;;;7576:6;7503:227;;;;7639:16;7612:44;;;;;;;;:::i;:::-;7503:227;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;7503:227:112;;;;;7393:345;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9651:404::-;9769:11;:41;9818:9;9835:13;9856:16;9880:12;:24;9893:10;9880:24;;;;;;;;;;;;;;;9912:5;9925:15;9948:14;;;;;;;;;;;9970:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10033:10;10013:31;;;;:19;:31;;;;;;;;9769:281;;;;;;;;;;;;;32259:25:124;;;;32300:18;;;32293:34;;;;32343:18;;;32336:34;;;;32386:18;;;32379:34;;;;32432:42;32511:15;;;32490:19;;;32483:44;32571:14;32564:22;32543:19;;;32536:51;32636:6;32624:19;;;32603;;;32596:48;32681:15;32660:19;;;32653:44;10013:31:112;;32713:19:124;;;32706:46;32231:19;;9769:281:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9651:404;;:::o;4601:405::-;4810:24;;;;;;;;:12;:24;;;;;;;;;4842:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:262;;;;;4772:9;4739:262;;;27396:25:124;4789:13:112;27437:18:124;;;27430:34;27480:18;;;27473:34;;;;27608:13;;27604:22;;27584:18;;;27577:50;27664:22;27643:19;;;27636:51;27728:22;;27724:31;;;27703:19;;;27696:60;27797:22;27793:35;;;27772:19;;;27765:64;4739:11:112;;:25;;27368:19:124;;4739:262:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:405;;;;:::o;17775:155::-;2178:23;:21;:23::i;:::-;17864:61:::1;::::0;;;;17893:9:::1;17864:61;::::0;::::1;33050:25:124::0;17904:13:112::1;33091:18:124::0;;;33084:34;33166:42;33154:55;;33134:18;;;33127:83;17864:9:112::1;::::0;:28:::1;::::0;33023:18:124;;17864:61:112::1;32763:453:124::0;1042:326:111;1129:13;1144:14;1160:19;1181:16;1199:7;1210:70;1260:13;1275:4;1210:49;:70::i;:::-;1128:152;;;;;;;;;;1287:76;1304:5;1311:6;1319:10;1331:12;1345:8;1355:1;1358;1361;1287:16;:76::i;5716:559:112:-;5826:7;5854:11;:27;5891:9;5910:13;5933:16;5959:12;:24;5972:10;5959:24;;;;;;;;;;;;;;;5993:269;;;;;;;;6044:5;5993:269;;;;;;6069:6;5993:269;;;;6091:2;5993:269;;;;;;6120:14;;;;;;;;;;;5993:269;;;;;;6154:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5993:269;;;;;;6240:10;6220:31;;;;:19;5993:269;6220:31;;;;;;;;;;;;;5993:269;;;;;;;5854:416;;;;;;;;;;;;;33733:25:124;;;;33774:18;;;33767:34;;;;33817:18;;;33810:34;;;;33860:18;;;33853:34;;;;33989:13;;33985:22;;33964:19;;;33957:51;34051:15;;;34045:22;34024:19;;;34017:51;34115:15;;;34109:22;34105:31;;34084:19;;;34077:60;33875:2;34180:15;;34174:22;34153:19;;;34146:51;33979:3;34244:16;;34238:23;34234:32;34213:19;;;34206:61;34039:3;34314:16;34308:23;34304:34;34283:19;;;34276:63;33705:19;;5854:416:112;33221:1124:124;3961:334:112;2468:13;:11;:13::i;:::-;4195:24:::1;::::0;;::::1;;::::0;;;:12:::1;:24;::::0;;;;;;4118:172;;;;;4157:9:::1;4118:172;::::0;::::1;34784:25:124::0;4174:13:112::1;34825:18:124::0;;;34818:34;34868:18;;;34861:34;;;;34992:15;;;34972:18;;;34965:43;35024:19;;;35017:35;;;35068:19;;;35061:44;35154:6;35142:19;;35121;;;35114:48;4118:11:112::1;::::0;:31:::1;::::0;34756:19:124;;4118:172:112::1;34350:818:124::0;19613:158:112;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19746:20:112;;;;;;;:16;:20;;;;;;;;;19739:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19613:158;;;:::o;17013:734::-;2178:23;:21;:23::i;:::-;17253:9:::1;:28;17291:9;17310:13;17333:364;;;;;;;;17380:5;17333:364;;;;;;17412:13;17333:364;;;;;;17456:17;17333:364;;;;;;17506:19;17333:364;;;;;;17566:27;17333:364;;;;;;17620:14;;;;;;;;;;;17333:364;;;;;;17665:21;5284:3:88::0;;16049:134:112;17665:21:::1;17333:364;;;;::::0;17253:452:::1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17242:501;;;17720:14;:16:::0;;;;::::1;;;::::0;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;17013:734:::0;;;;;:::o;1398:217:111:-;1457:7;1473:13;1488:14;1506:55;1541:13;1556:4;1506:34;:55::i;:::-;1472:89;;;;1575:35;1584:5;1591:6;1599:10;1575:8;:35::i;:::-;1568:42;1398:217;-1:-1:-1;;;;1398:217:111:o;2247:386::-;2335:7;2358:13;2379:14;2401:24;2433:16;2457:7;2473:62;2515:13;2530:4;2473:41;:62::i;:::-;2350:185;;;;;;;;;;2549:79;2565:5;2572:6;2580:16;2598:10;2610:8;2620:1;2623;2626;2549:15;:79::i;:::-;2542:86;2247:386;-1:-1:-1;;;;;;;;;2247:386:111:o;9153:268:112:-;9297:16;;;;;;;:9;:16;;;;;;;;9334:10;9321:24;;:12;:24;;;;;;9252:11;;:37;;9307:5;9393:16;9366:44;;;;;;;;:::i;:::-;9252:164;;;;;;;;;;;;;;;;;;:::i;12709:138::-;12792:50;;;;;:9;;:31;;:50;;12824:9;;12835:6;;;;12792:50;;;:::i;6303:889::-;6471:11;:25;6504:9;6521:13;6542:16;6566:12;:24;6579:10;6566:24;;;;;;;;;;;;;;;6598:583;;;;;;;;6645:5;6598:583;;;;;;6666:10;6598:583;;;;;;6698:10;6598:583;;;;;;6726:6;6598:583;;;;6787:16;6760:44;;;;;;;;:::i;:::-;6598:583;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;6869:4;6598:583;;;;;;;;6915:31;;;;;6598:583;;;;6971:14;;;;;;6598:583;;;;7003:35;;;;;;;6598:583;;;;;7003:33;:18;:33;;;;:35;;;;;6598:583;;7003:35;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6598:583;;;;;;7067:31;;;;;;;:19;6598:583;7067:31;;;;;;;;;;;6598:583;;;;7129:43;;;;;;;6598:583;;;;;7129:18;:41;;;;;;:43;;;;;6598:583;7129:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6598:583;;;;;6471:716;;;;;;;;;;;;;;;;;;;:::i;10866:1183::-;11129:44;11176:711;;;;;;;;11227:15;11176:711;;;;;;11258:6;;11176:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;11281:7;;;;;;11176:711;;;11281:7;;11176:711;11281:7;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;11315:17;;;;;;11176:711;;;11315:17;;11176:711;11315:17;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11378:6;;;;;;11176:711;;11378:6;;;;11176:711;;;;;;;;-1:-1:-1;11176:711:112;;;-1:-1:-1;;;11176:711:112;;;;;;;;;;;;11454:27;;;;;;;;11176:711;;;;;;;;11512:22;;11176:711;;;;11574:31;;;;;11176:711;;;;11628:14;;;;;;11176:711;;;;;11677:18;11176:711;;;;;;;;11723:31;;;;;:19;:31;;;;;;;;;11176:711;;;;11801:34;;;;;;;11454:27;11176:711;;;;11801:32;;:34;;;;;11176:711;11801:34;;;;;;11176:711;11801:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11789:91;;;;;11862:10;11789:91;;;2670:74:124;11789:63:112;;;;;;;;2643:18:124;;11789:91:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11176:711;;;;11995:24;;;;;;;:12;:24;;;;;;;11894:150;;;;;11129:758;;-1:-1:-1;11894:14:112;;:31;;:150;;11933:9;;11950:13;;11971:16;;11995:24;11129:758;;11894:150;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11123:926;10866:1183;;;;;;;;;;;:::o;18952:278::-;2178:23;:21;:23::i;:::-;19117:46:::1;19169:56:::0;;::::1;::::0;::::1;19117:46:::0;::::1;19169:56;19117:22;19169:56:::0;18952:278::o;13054:721::-;13494:268;;;13559:18;;;;13171:27;13559:18;;;:12;:18;;;;;;;13494:268;;;;;;;;;;;;;;13604:14;;;;;;;13494:268;;;;;;;;;;;13660:35;;;;;;;13171:27;;;;;;;;;;;;13381:9;;:35;;13426:9;;13445:13;;13468:16;;-1:-1:-1;13494:268:112;;;13660:18;:33;;;;:35;;;;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13494:268;;;;;;13726:25;;;;;;;:19;13494:268;13726:25;;;;;;;;;;;;;13494:268;;;;;;;13381:389;;;;;;;;;;;;;44723:25:124;;;;44764:18;;;44757:34;;;;44807:18;;;44800:34;;;;44876:13;;44870:20;44850:18;;;44843:48;44934:15;;;44928:22;44907:19;;;44900:51;44986:15;;;44980:22;45100:21;;45079:19;;;45072:50;44865:2;45169:15;;45163:22;45159:31;;;45138:19;;;45131:60;44922:3;45238:16;;;45232:23;45228:34;45207:19;;;45200:63;44695:19;;13381:389:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13368:402;;;;-1:-1:-1;13368:402:112;;-1:-1:-1;13368:402:112;-1:-1:-1;13368:402:112;-1:-1:-1;13368:402:112;;-1:-1:-1;13054:721:112;-1:-1:-1;;13054:721:112:o;3720:213::-;1217:12:87;;313:3:62;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;45973:2:124;1202:146:87;;;45955:21:124;46012:2;45992:18;;;45985:30;46051:34;46031:18;;;46024:62;46122:16;46102:18;;;46095:44;46156:19;;1202:146:87;45771:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;3828:18:112::1;3816:30;;:8;:30;;;3848:33;;;;;;;;;;;;;;;;::::0;3808:74:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3888:31:112::1;:40:::0;;;::::1;3922:6;3888:40;::::0;;1506:55:87;;;;1534:12;:20;;;;;;1158:407;;3720:213:112;:::o;9449:174::-;9588:16;;;;;;;;:9;:16;;;;;;;9543:75;;;;;;;;46423:25:124;;;;46525:18;;;46518:43;;;;46597:15;;;46577:18;;;46570:43;9543:11:112;;:44;;46396:18:124;;9543:75:112;46186:433:124;20602:180:112;2330:16;:14;:16::i;:::-;20729:48:::1;::::0;;;;46844:42:124;46913:15;;;20729:48:112::1;::::0;::::1;46895:34:124::0;46965:15;;46945:18;;;46938:43;46997:18;;;46990:34;;;20729:9:112::1;::::0;:29:::1;::::0;46807:18:124;;20729:48:112::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20602:180:::0;;;:::o;14205:164::-;14326:16;;;14304:7;14326:16;;;:9;:16;;;;;:38;;:36;:38::i;14593:667::-;14712:14;;14660:16;;14712:14;;;;;14684:25;;14712:14;14802:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14802:32:112;;14770:64;;14846:9;14841:221;14865:17;14861:1;:21;14841:221;;;14929:1;14901:16;;;:13;:16;;;;;;:30;:16;:30;14897:159;;14984:16;;;;:13;:16;;;;;;;;14943:12;14956:24;14960:20;14998:1;14956:24;:::i;:::-;14943:38;;;;;;;;:::i;:::-;;;;;;:57;;;;;;;;;;;14897:159;;;15025:22;;;;:::i;:::-;;;;14897:159;14884:3;;;;:::i;:::-;;;;14841:221;;;-1:-1:-1;15180:44:112;;15159:66;;15166:12;14593:667;-1:-1:-1;14593:667:112:o;19258:327::-;2178:23;:21;:23::i;:::-;19512:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;19503:7:::1;::::0;::::1;19495:48;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19549:20:112::1;::::0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;;;;:31;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19572:8;;19549:20;:31:::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;16211:774::-:0;16428:16;;;;;;;;:9;:16;;;;;;;;;:30;;;16460:24;;;;;;;;;;;;;;;;;;;;;16428:30;16414:10;:44;16406:79;;;;;;;;;;;;;:::i;:::-;;16491:11;:35;16534:9;16551:13;16572:16;16596:12;16616:358;;;;;;;;16666:5;16616:358;;;;;;16687:4;16616:358;;;;;;16705:2;16616:358;;;;;;16725:6;16616:358;;;;16760:17;16616:358;;;;16804:15;16616:358;;;;16844:14;;;;;;;;;;;16616:358;;;;;;16876:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16616:358;;;;;;16940:25;;;;;;:19;16616:358;16940:25;;;;;;;;;;;16616:358;;;;;;16491:489;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16211:774;;;;;;:::o;1645:272:111:-;1700:13;1715:14;1731:24;1757:19;1780:60;1820:13;1835:4;3345:6:94;3335:17;;;3170:7;3545:21;;;;;;;;;;;;;;;;3388:34;3377:2;3373:13;;;3369:54;;3470:4;3458:3;3454:14;;;3450:25;;3506:3;3502:14;3498:27;;3043:569;1780:60:111;1699:141;;;;;;;;1847:65;1854:5;1861:6;1869:16;1887:12;1901:10;1847:6;:65::i;4323:250:112:-;4451:7;2468:13;:11;:13::i;:::-;4511:16:::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;4549:18:::1;::::0;4479:89;;;;;::::1;::::0;::::1;49373:25:124::0;;;;49414:18;;;49407:83;;;;49506:18;;;49499:34;;;49549:18;;;49542:34;;;49592:19;;;49585:35;4479:11:112::1;::::0;:31:::1;::::0;49345:19:124;;4479:89:112::1;49079:547:124::0;2663:280:111;2730:7;2746:13;2761:14;2777:24;2805:70;2844:13;2865:4;2805:31;:70::i;:::-;2745:130;;;;;;2889:49;2906:5;2913:6;2921:16;2889;:49::i;20394:180:112:-;2178:23;:21;:23::i;:::-;20507:62:::1;::::0;;;;20552:9:::1;20507:62;::::0;::::1;49865:25:124::0;49938:42;49926:55;;49906:18;;;49899:83;20507:9:112::1;::::0;:44:::1;::::0;49838:18:124;;20507:62:112::1;49631:357:124::0;7771:817:112;8032:166;;;;;8072:10;8032:166;;;26642:34:124;8100:4:112;26692:18:124;;;26685:43;26744:18;;;26737:34;;;26787:18;;;26780:34;;;26863:4;26851:17;;26830:19;;;26823:46;26885:19;;;26878:35;;;26929:19;;;26922:35;;;8009:7:112;;8032:30;;;;;;26553:19:124;;8032:166:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8218:42;8263:215;;;;;;;;8309:5;8263:215;;;;;;8332:6;8263:215;;;;8393:16;8366:44;;;;;;;;:::i;:::-;8263:215;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;8263:215:112;;;;;;;8544:24;;;:12;:24;;;;;8493:84;;;;;8218:260;;-1:-1:-1;8493:11:112;;:24;;:84;;8518:9;;8529:13;;8218:260;;8493:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8486:91;7771:817;-1:-1:-1;;;;;;;;;;7771:817:112:o;18371:373::-;2178:23;:21;:23::i;:::-;18564:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;18543:19:::1;::::0;::::1;18535:59;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18608:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18636:16:112::1;::::0;;:13:::1;:16;::::0;;;:25:::1;::::0;;::::1;:16:::0;::::1;:25;18608:53;18663:23;;;;;;;;;;;;;;;;::::0;18600:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18693:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;50177:19:124;;50164:33;;18726:13:112;;18693:46:::1;-1:-1:-1::0;;;;18371:373:112:o;773:239:111:-;819:6:94;809:17;;;828:13:111;966:21:94;;;922:13:111;966:21:94;;;;;;;;;851:2;847:13;;;862:34;843:54;;928:3;924:14;;;920:27;960:47:111;966:21:94;843:54;982:10:111;920:27:94;960:6:111;:47::i;3829:375::-;3916:23;3947:17;3972:12;3992:19;4019:18;4046:70;4088:13;4103:5;4110;4046:41;:70::i;:::-;3908:208;;;;;;;;;;4122:77;4138:15;4155:9;4166:4;4172:11;4185:13;4122:15;:77::i;2497:184:112:-;2617:10;2573:54;;:18;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;2635:35;;;;;;;;;;;;;;;;;2558:118;;;;;;;;;;;;;;:::i;:::-;;2497:184::o;5841:375:94:-;6093:6;6083:17;;5980:7;6171:21;;;;;;;;;;;;;6135:2;6131:13;;;6146:4;6127:24;5841:375;;;;;;:::o;2809:545:102:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;:::-;:90;;:139::i;3005:345::-;2915:439;2809:545;;;:::o;3954:551:94:-;4080:7;;;4222:6;4212:17;;4265:34;4254:2;4250:13;;;4246:54;;;4347:4;4335:3;4331:14;;;4327:25;;4368:27;;4364:74;;;4414:17;4405:26;;4364:74;4452:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;4475:6:94;-1:-1:-1;4483:16:94;-1:-1:-1;3954:551:94;;;;;:::o;1445:501::-;1582:7;;;;;1709:3;1705:14;;;1721:10;1701:31;1758:3;1754:14;;;1770:4;1750:25;1582:7;;;1841:38;1860:12;1714:4;819:6;809:17;;;683:7;966:21;;;;;;;;;;;;;;851:2;847:13;;;862:34;843:54;;928:3;924:14;;;920:27;556:459;;;;;;1841:38;1786:93;;;;-1:-1:-1;1786:93:94;;-1:-1:-1;1923:8:94;;-1:-1:-1;1933:7:94;;-1:-1:-1;1445:501:94;;-1:-1:-1;;;;;;1445:501:94:o;2876:177:112:-;2954:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2942:68;;;;;2999:10;2942:68;;;2670:74:124;2942:56:112;;;;;;;;2643:18:124;;2942:68:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3018:24;;;;;;;;;;;;;;;;;2927:121;;;;;;;;;;;;;;:::i;2226:442:94:-;2355:7;;2457:6;2447:17;;2500:34;2489:2;2485:13;;;2481:54;;;2550:27;;2546:74;;;-1:-1:-1;2596:17:94;2546:74;2633:21;;;;;;;;;;;;;;;;;;;;;;2226:442;-1:-1:-1;;;2226:442:94:o;4973:528::-;5109:7;5118;5127;5136;5145:5;5158:16;5180:13;5201;5216:14;5232:24;5260:55;5285:12;5305:4;5260:17;:55::i;:::-;5200:115;;;;-1:-1:-1;5200:115:94;;5359:3;5355:14;;;5371:10;5351:31;;-1:-1:-1;5408:3:94;5404:14;5420:4;5400:25;;-1:-1:-1;5200:115:94;-1:-1:-1;;;;;;;;4973:528:94:o;2685:187:112:-;2766:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2754:71;;;;;2814:10;2754:71;;;2670:74:124;2754:59:112;;;;;;;;2643:18:124;;2754:71:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2833:28;;;;;;;;;;;;;;;;;2739:128;;;;;;;;;;;;;;:::i;1895:528:102:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;8224:871:94:-;8380:7;;;;;8599:6;8588:18;;;;8636:2;8632:14;;;8628:27;8678:2;8674:14;;;8690:42;8670:63;8767:34;8756:46;;;;8834:3;8830:15;;;8847:3;8826:25;;8867:32;;8863:84;;;8923:17;8909:31;;8863:84;8968:31;;;;;;;;;;;;;;;;;;9007:25;;;;;;;;;;;8968:31;;;;;9007:25;;;9040:4;;-1:-1:-1;9007:25:94;-1:-1:-1;9007:25:94;;-1:-1:-1;8224:871:94;-1:-1:-1;;;;8224:871:94:o;3142:212:105:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;1780:972::-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:154:124;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:134;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:118::-;398:5;391:13;384:21;377:5;374:32;364:60;;420:1;417;410:12;435:734;527:6;535;543;551;559;612:3;600:9;591:7;587:23;583:33;580:53;;;629:1;626;619:12;580:53;668:9;655:23;687:31;712:5;687:31;:::i;:::-;737:5;-1:-1:-1;794:2:124;779:18;;766:32;807:33;766:32;807:33;:::i;:::-;859:7;-1:-1:-1;918:2:124;903:18;;890:32;931:33;890:32;931:33;:::i;:::-;983:7;-1:-1:-1;1037:2:124;1022:18;;1009:32;;-1:-1:-1;1093:3:124;1078:19;;1065:33;1107:30;1065:33;1107:30;:::i;:::-;1156:7;1146:17;;;435:734;;;;;;;;:::o;1356:159::-;1423:20;;1483:6;1472:18;;1462:29;;1452:57;;1505:1;1502;1495:12;1520:156;1586:20;;1646:4;1635:16;;1625:27;;1615:55;;1666:1;1663;1656:12;1681:807;1800:6;1808;1816;1824;1832;1840;1848;1856;1909:3;1897:9;1888:7;1884:23;1880:33;1877:53;;;1926:1;1923;1916:12;1877:53;1965:9;1952:23;1984:31;2009:5;1984:31;:::i;:::-;2034:5;-1:-1:-1;2086:2:124;2071:18;;2058:32;;-1:-1:-1;2142:2:124;2127:18;;2114:32;2155:33;2114:32;2155:33;:::i;:::-;2207:7;-1:-1:-1;2233:37:124;2266:2;2251:18;;2233:37;:::i;:::-;2223:47;;2317:3;2306:9;2302:19;2289:33;2279:43;;2341:37;2373:3;2362:9;2358:19;2341:37;:::i;:::-;2331:47;;2425:3;2414:9;2410:19;2397:33;2387:43;;2477:3;2466:9;2462:19;2449:33;2439:43;;1681:807;;;;;;;;;;;:::o;3102:388::-;3170:6;3178;3231:2;3219:9;3210:7;3206:23;3202:32;3199:52;;;3247:1;3244;3237:12;3199:52;3286:9;3273:23;3305:31;3330:5;3305:31;:::i;:::-;3355:5;-1:-1:-1;3412:2:124;3397:18;;3384:32;3425:33;3384:32;3425:33;:::i;:::-;3477:7;3467:17;;;3102:388;;;;;:::o;3495:180::-;3554:6;3607:2;3595:9;3586:7;3582:23;3578:32;3575:52;;;3623:1;3620;3613:12;3575:52;-1:-1:-1;3646:23:124;;3495:180;-1:-1:-1;3495:180:124:o;3680:182::-;3737:6;3790:2;3778:9;3769:7;3765:23;3761:32;3758:52;;;3806:1;3803;3796:12;3758:52;3829:27;3846:9;3829:27;:::i;3867:383::-;3944:6;3952;3960;4013:2;4001:9;3992:7;3988:23;3984:32;3981:52;;;4029:1;4026;4019:12;3981:52;4068:9;4055:23;4087:31;4112:5;4087:31;:::i;:::-;4137:5;4189:2;4174:18;;4161:32;;-1:-1:-1;4240:2:124;4225:18;;;4212:32;;3867:383;-1:-1:-1;;;3867:383:124:o;4440:247::-;4499:6;4552:2;4540:9;4531:7;4527:23;4523:32;4520:52;;;4568:1;4565;4558:12;4520:52;4607:9;4594:23;4626:31;4651:5;4626:31;:::i;5121:2109::-;5370:13;;4773:12;4761:25;;5315:3;5300:19;;5442:4;5434:6;5430:17;5424:24;5457:54;5505:4;5494:9;5490:20;5476:12;2832:34;2821:46;2809:59;;2755:119;5457:54;;5560:4;5552:6;5548:17;5542:24;5575:56;5625:4;5614:9;5610:20;5594:14;2832:34;2821:46;2809:59;;2755:119;5575:56;;5680:4;5672:6;5668:17;5662:24;5695:56;5745:4;5734:9;5730:20;5714:14;2832:34;2821:46;2809:59;;2755:119;5695:56;;5800:4;5792:6;5788:17;5782:24;5815:56;5865:4;5854:9;5850:20;5834:14;2832:34;2821:46;2809:59;;2755:119;5815:56;;5920:4;5912:6;5908:17;5902:24;5935:56;5985:4;5974:9;5970:20;5954:14;2832:34;2821:46;2809:59;;2755:119;5935:56;;6040:4;6032:6;6028:17;6022:24;6055:55;6104:4;6093:9;6089:20;6073:14;4869:12;4858:24;4846:37;;4793:96;6055:55;;6159:4;6151:6;6147:17;6141:24;6174:55;6223:4;6212:9;6208:20;6192:14;4970:6;4959:18;4947:31;;4894:90;6174:55;-1:-1:-1;6248:6:124;6291:15;;;6285:22;5066:42;5055:54;;;6351:18;;;5043:67;;;;6389:6;6432:15;;;6426:22;5055:54;;6492:18;;;5043:67;6530:6;6573:15;;;6567:22;5055:54;;6633:18;;;5043:67;6671:6;6715:15;;;6709:22;5055:54;;;6776:18;;;5043:67;6814:6;6858:15;;;6852:22;2832:34;2821:46;;;6919:18;;;2809:59;;;;6957:6;7001:15;;;6995:22;2821:46;;7062:18;;;2809:59;7100:6;7144:15;;;7138:22;2821:46;7205:18;;;;2809:59;;;;5121:2109;:::o;7235:347::-;7286:8;7296:6;7350:3;7343:4;7335:6;7331:17;7327:27;7317:55;;7368:1;7365;7358:12;7317:55;-1:-1:-1;7391:20:124;;7434:18;7423:30;;7420:50;;;7466:1;7463;7456:12;7420:50;7503:4;7495:6;7491:17;7479:29;;7555:3;7548:4;7539:6;7531;7527:19;7523:30;7520:39;7517:59;;;7572:1;7569;7562:12;7587:827;7692:6;7700;7708;7716;7724;7732;7785:3;7773:9;7764:7;7760:23;7756:33;7753:53;;;7802:1;7799;7792:12;7753:53;7841:9;7828:23;7860:31;7885:5;7860:31;:::i;:::-;7910:5;-1:-1:-1;7967:2:124;7952:18;;7939:32;7980:33;7939:32;7980:33;:::i;:::-;8032:7;-1:-1:-1;8086:2:124;8071:18;;8058:32;;-1:-1:-1;8141:2:124;8126:18;;8113:32;8168:18;8157:30;;8154:50;;;8200:1;8197;8190:12;8154:50;8239:58;8289:7;8280:6;8269:9;8265:22;8239:58;:::i;:::-;8316:8;;-1:-1:-1;8213:84:124;-1:-1:-1;8370:38:124;;-1:-1:-1;8403:3:124;8388:19;;8370:38;:::i;:::-;8360:48;;7587:827;;;;;;;;:::o;8686:184::-;8744:6;8797:2;8785:9;8776:7;8772:23;8768:32;8765:52;;;8813:1;8810;8803:12;8765:52;8836:28;8854:9;8836:28;:::i;9106:525::-;9192:6;9200;9208;9216;9269:3;9257:9;9248:7;9244:23;9240:33;9237:53;;;9286:1;9283;9276:12;9237:53;9325:9;9312:23;9344:31;9369:5;9344:31;:::i;:::-;9394:5;-1:-1:-1;9446:2:124;9431:18;;9418:32;;-1:-1:-1;9497:2:124;9482:18;;9469:32;;-1:-1:-1;9553:2:124;9538:18;;9525:32;9566:33;9525:32;9566:33;:::i;:::-;9106:525;;;;-1:-1:-1;9106:525:124;;-1:-1:-1;;9106:525:124:o;9636:382::-;9701:6;9709;9762:2;9750:9;9741:7;9737:23;9733:32;9730:52;;;9778:1;9775;9768:12;9730:52;9817:9;9804:23;9836:31;9861:5;9836:31;:::i;:::-;9886:5;-1:-1:-1;9943:2:124;9928:18;;9915:32;9956:30;9915:32;9956:30;:::i;10023:529::-;10108:6;10116;10124;10132;10185:3;10173:9;10164:7;10160:23;10156:33;10153:53;;;10202:1;10199;10192:12;10153:53;10241:9;10228:23;10260:31;10285:5;10260:31;:::i;:::-;10310:5;-1:-1:-1;10362:2:124;10347:18;;10334:32;;-1:-1:-1;10418:2:124;10403:18;;10390:32;10431:33;10390:32;10431:33;:::i;:::-;10483:7;-1:-1:-1;10509:37:124;10542:2;10527:18;;10509:37;:::i;:::-;10499:47;;10023:529;;;;;;;:::o;10557:316::-;10634:6;10642;10650;10703:2;10691:9;10682:7;10678:23;10674:32;10671:52;;;10719:1;10716;10709:12;10671:52;-1:-1:-1;;10742:23:124;;;10812:2;10797:18;;10784:32;;-1:-1:-1;10863:2:124;10848:18;;;10835:32;;10557:316;-1:-1:-1;10557:316:124:o;10878:456::-;10955:6;10963;10971;11024:2;11012:9;11003:7;10999:23;10995:32;10992:52;;;11040:1;11037;11030:12;10992:52;11079:9;11066:23;11098:31;11123:5;11098:31;:::i;:::-;11148:5;-1:-1:-1;11200:2:124;11185:18;;11172:32;;-1:-1:-1;11256:2:124;11241:18;;11228:32;11269:33;11228:32;11269:33;:::i;:::-;11321:7;11311:17;;;10878:456;;;;;:::o;11339:531::-;11381:3;11419:5;11413:12;11446:6;11441:3;11434:19;11471:1;11481:162;11495:6;11492:1;11489:13;11481:162;;;11557:4;11613:13;;;11609:22;;11603:29;11585:11;;;11581:20;;11574:59;11510:12;11481:162;;;11661:6;11658:1;11655:13;11652:87;;;11727:1;11720:4;11711:6;11706:3;11702:16;11698:27;11691:38;11652:87;-1:-1:-1;11784:2:124;11772:15;11789:66;11768:88;11759:98;;;;11859:4;11755:109;;11339:531;-1:-1:-1;;11339:531:124:o;11875:695::-;12068:2;12057:9;12050:21;12031:4;12090:6;12151:2;12142:6;12136:13;12132:22;12127:2;12116:9;12112:18;12105:50;12219:2;12213;12205:6;12201:15;12195:22;12191:31;12186:2;12175:9;12171:18;12164:59;12287:2;12281;12273:6;12269:15;12263:22;12259:31;12254:2;12243:9;12239:18;12232:59;;12356:42;12350:2;12342:6;12338:15;12332:22;12328:71;12322:3;12311:9;12307:19;12300:100;12447:3;12439:6;12435:16;12429:23;12490:4;12483;12472:9;12468:20;12461:34;12512:52;12559:3;12548:9;12544:19;12530:12;12512:52;:::i;12575:813::-;12670:6;12678;12686;12694;12702;12755:3;12743:9;12734:7;12730:23;12726:33;12723:53;;;12772:1;12769;12762:12;12723:53;12811:9;12798:23;12830:31;12855:5;12830:31;:::i;:::-;12880:5;-1:-1:-1;12937:2:124;12922:18;;12909:32;12950:33;12909:32;12950:33;:::i;:::-;13002:7;-1:-1:-1;13061:2:124;13046:18;;13033:32;13074:33;13033:32;13074:33;:::i;:::-;13126:7;-1:-1:-1;13185:2:124;13170:18;;13157:32;13198:33;13157:32;13198:33;:::i;:::-;13250:7;-1:-1:-1;13309:3:124;13294:19;;13281:33;13323;13281;13323;:::i;13393:315::-;13461:6;13469;13522:2;13510:9;13501:7;13497:23;13493:32;13490:52;;;13538:1;13535;13528:12;13490:52;13577:9;13564:23;13596:31;13621:5;13596:31;:::i;:::-;13646:5;13698:2;13683:18;;;;13670:32;;-1:-1:-1;;;13393:315:124:o;13713:367::-;13776:8;13786:6;13840:3;13833:4;13825:6;13821:17;13817:27;13807:55;;13858:1;13855;13848:12;13807:55;-1:-1:-1;13881:20:124;;13924:18;13913:30;;13910:50;;;13956:1;13953;13946:12;13910:50;13993:4;13985:6;13981:17;13969:29;;14053:3;14046:4;14036:6;14033:1;14029:14;14021:6;14017:27;14013:38;14010:47;14007:67;;;14070:1;14067;14060:12;14085:437;14171:6;14179;14232:2;14220:9;14211:7;14207:23;14203:32;14200:52;;;14248:1;14245;14238:12;14200:52;14288:9;14275:23;14321:18;14313:6;14310:30;14307:50;;;14353:1;14350;14343:12;14307:50;14392:70;14454:7;14445:6;14434:9;14430:22;14392:70;:::i;:::-;14481:8;;14366:96;;-1:-1:-1;14085:437:124;-1:-1:-1;;;;14085:437:124:o;14527:598::-;14621:6;14629;14637;14645;14653;14706:3;14694:9;14685:7;14681:23;14677:33;14674:53;;;14723:1;14720;14713:12;14674:53;14762:9;14749:23;14781:31;14806:5;14781:31;:::i;:::-;14831:5;-1:-1:-1;14883:2:124;14868:18;;14855:32;;-1:-1:-1;14934:2:124;14919:18;;14906:32;;-1:-1:-1;14957:37:124;14990:2;14975:18;;14957:37;:::i;15130:1572::-;15334:6;15342;15350;15358;15366;15374;15382;15390;15398;15406;15414:7;15468:3;15456:9;15447:7;15443:23;15439:33;15436:53;;;15485:1;15482;15475:12;15436:53;15508:29;15527:9;15508:29;:::i;:::-;15498:39;;15556:18;15623:2;15617;15606:9;15602:18;15589:32;15586:40;15583:60;;;15639:1;15636;15629:12;15583:60;15678:96;15766:7;15759:2;15748:9;15744:18;15731:32;15720:9;15716:48;15678:96;:::i;:::-;15793:8;;-1:-1:-1;15820:8:124;-1:-1:-1;15871:2:124;15856:18;;15843:32;15840:40;-1:-1:-1;15837:60:124;;;15893:1;15890;15883:12;15837:60;15932:96;16020:7;16013:2;16002:9;15998:18;15985:32;15974:9;15970:48;15932:96;:::i;:::-;16047:8;;-1:-1:-1;16074:8:124;-1:-1:-1;16125:2:124;16110:18;;16097:32;16094:40;-1:-1:-1;16091:60:124;;;16147:1;16144;16137:12;16091:60;16186:96;16274:7;16267:2;16256:9;16252:18;16239:32;16228:9;16224:48;16186:96;:::i;:::-;16301:8;;-1:-1:-1;16328:8:124;-1:-1:-1;16355:39:124;16389:3;16374:19;;16355:39;:::i;:::-;16345:49;;16444:2;16437:3;16426:9;16422:19;16409:33;16406:41;16403:61;;;16460:1;16457;16450:12;16403:61;;16499:85;16576:7;16568:3;16557:9;16553:19;16540:33;16529:9;16525:49;16499:85;:::i;:::-;16603:8;;-1:-1:-1;16630:8:124;-1:-1:-1;16658:38:124;16691:3;16676:19;;16658:38;:::i;:::-;16647:49;;15130:1572;;;;;;;;;;;;;;:::o;16707:188::-;16775:20;;16835:34;16824:46;;16814:57;;16804:85;;16885:1;16882;16875:12;16900:260;16968:6;16976;17029:2;17017:9;17008:7;17004:23;17000:32;16997:52;;;17045:1;17042;17035:12;16997:52;17068:29;17087:9;17068:29;:::i;:::-;17058:39;;17116:38;17150:2;17139:9;17135:18;17116:38;:::i;:::-;17106:48;;16900:260;;;;;:::o;18261:456::-;18338:6;18346;18354;18407:2;18395:9;18386:7;18382:23;18378:32;18375:52;;;18423:1;18420;18413:12;18375:52;18462:9;18449:23;18481:31;18506:5;18481:31;:::i;:::-;18531:5;-1:-1:-1;18588:2:124;18573:18;;18560:32;18601:33;18560:32;18601:33;:::i;:::-;18261:456;;18653:7;;-1:-1:-1;;;18707:2:124;18692:18;;;;18679:32;;18261:456::o;18722:681::-;18893:2;18945:21;;;19015:13;;18918:18;;;19037:22;;;18864:4;;18893:2;19116:15;;;;19090:2;19075:18;;;18864:4;19159:218;19173:6;19170:1;19167:13;19159:218;;;19238:13;;19253:42;19234:62;19222:75;;19352:15;;;;19317:12;;;;19195:1;19188:9;19159:218;;;-1:-1:-1;19394:3:124;;18722:681;-1:-1:-1;;;;;;18722:681:124:o;19408:184::-;19460:77;19457:1;19450:88;19557:4;19554:1;19547:15;19581:4;19578:1;19571:15;19597:253;19669:2;19663:9;19711:4;19699:17;;19746:18;19731:34;;19767:22;;;19728:62;19725:88;;;19793:18;;:::i;:::-;19829:2;19822:22;19597:253;:::o;19855:334::-;19926:2;19920:9;19982:2;19972:13;;19987:66;19968:86;19956:99;;20085:18;20070:34;;20106:22;;;20067:62;20064:88;;;20132:18;;:::i;:::-;20168:2;20161:22;19855:334;;-1:-1:-1;19855:334:124:o;20194:1488::-;20292:6;20300;20353:2;20341:9;20332:7;20328:23;20324:32;20321:52;;;20369:1;20366;20359:12;20321:52;20392:27;20409:9;20392:27;:::i;:::-;20382:37;;20438:2;20491;20480:9;20476:18;20463:32;20514:18;20555:2;20547:6;20544:14;20541:34;;;20571:1;20568;20561:12;20541:34;20594:22;;;;20650:4;20632:16;;;20628:27;20625:47;;;20668:1;20665;20658:12;20625:47;20694:22;;:::i;:::-;20739:21;20757:2;20739:21;:::i;:::-;20732:5;20725:36;20793:30;20819:2;20815;20811:11;20793:30;:::i;:::-;20788:2;20781:5;20777:14;20770:54;20856:30;20882:2;20878;20874:11;20856:30;:::i;:::-;20851:2;20844:5;20840:14;20833:54;20932:2;20928;20924:11;20911:25;20945:33;20970:7;20945:33;:::i;:::-;21005:2;20994:14;;20987:31;21064:3;21056:12;;21043:26;21081:16;;;21078:36;;;21110:1;21107;21100:12;21078:36;21141:8;21137:2;21133:17;21123:27;;;21188:7;21181:4;21177:2;21173:13;21169:27;21159:55;;21210:1;21207;21200:12;21159:55;21246:2;21233:16;21268:2;21264;21261:10;21258:36;;;21274:18;;:::i;:::-;21316:112;21424:2;21355:66;21348:4;21344:2;21340:13;21336:86;21332:95;21316:112;:::i;:::-;21303:125;;21451:2;21444:5;21437:17;21491:7;21486:2;21481;21477;21473:11;21469:20;21466:33;21463:53;;;21512:1;21509;21502:12;21463:53;21567:2;21562;21558;21554:11;21549:2;21542:5;21538:14;21525:45;21611:1;21606:2;21601;21594:5;21590:14;21586:23;21579:34;;21646:5;21640:3;21633:5;21629:15;21622:30;21671:5;21661:15;;;;;;20194:1488;;;;;:::o;21687:736::-;21791:6;21799;21807;21815;21823;21831;21884:3;21872:9;21863:7;21859:23;21855:33;21852:53;;;21901:1;21898;21891:12;21852:53;21940:9;21927:23;21959:31;21984:5;21959:31;:::i;:::-;22009:5;-1:-1:-1;22066:2:124;22051:18;;22038:32;22079:33;22038:32;22079:33;:::i;:::-;22131:7;-1:-1:-1;22190:2:124;22175:18;;22162:32;22203:33;22162:32;22203:33;:::i;:::-;21687:736;;;;-1:-1:-1;22255:7:124;;22309:2;22294:18;;22281:32;;-1:-1:-1;22360:3:124;22345:19;;22332:33;;22412:3;22397:19;;;22384:33;;-1:-1:-1;21687:736:124;-1:-1:-1;;21687:736:124:o;22428:803::-;22548:6;22556;22564;22572;22580;22588;22596;22604;22657:3;22645:9;22636:7;22632:23;22628:33;22625:53;;;22674:1;22671;22664:12;22625:53;22713:9;22700:23;22732:31;22757:5;22732:31;:::i;:::-;22782:5;-1:-1:-1;22834:2:124;22819:18;;22806:32;;-1:-1:-1;22885:2:124;22870:18;;22857:32;;-1:-1:-1;22941:2:124;22926:18;;22913:32;22954:33;22913:32;22954:33;:::i;23236:479::-;23348:6;23356;23400:9;23391:7;23387:23;23430:2;23426;23422:11;23419:31;;;23446:1;23443;23436:12;23419:31;23485:9;23472:23;23504:31;23529:5;23504:31;:::i;:::-;23554:5;-1:-1:-1;23652:2:124;23583:66;23575:75;;23571:84;23568:104;;;23668:1;23665;23658:12;23568:104;;23706:2;23695:9;23691:18;23681:28;;23236:479;;;;;:::o;23913:248::-;23981:6;23989;24042:2;24030:9;24021:7;24017:23;24013:32;24010:52;;;24058:1;24055;24048:12;24010:52;-1:-1:-1;;24081:23:124;;;24151:2;24136:18;;;24123:32;;-1:-1:-1;23913:248:124:o;24166:251::-;24236:6;24289:2;24277:9;24268:7;24264:23;24260:32;24257:52;;;24305:1;24302;24295:12;24257:52;24337:9;24331:16;24356:31;24381:5;24356:31;:::i;24598:1667::-;25094:4;25136:3;25125:9;25121:19;25113:27;;25167:6;25156:9;25149:25;25210:6;25205:2;25194:9;25190:18;25183:34;25253:6;25248:2;25237:9;25233:18;25226:34;25296:6;25291:2;25280:9;25276:18;25269:34;25346:6;25340:13;25334:3;25323:9;25319:19;25312:42;25409:2;25401:6;25397:15;25391:22;25385:3;25374:9;25370:19;25363:51;25461:2;25453:6;25449:15;25443:22;25484:42;25581:2;25567:12;25563:21;25557:3;25546:9;25542:19;25535:50;25650:2;25644;25636:6;25632:15;25626:22;25622:31;25616:3;25605:9;25601:19;25594:60;;;25703:3;25695:6;25691:16;25685:23;25727:3;25739:54;25789:2;25778:9;25774:18;25758:14;5066:42;5055:54;5043:67;;4989:127;25739:54;25842:3;25830:16;;25824:23;24492:13;24485:21;25903:3;25888:19;;24473:34;25957:3;25945:16;;25939:23;5066:42;5055:54;;;26021:3;26006:19;;5043:67;26075:3;26063:16;;26057:23;24585:4;24574:16;26137:3;26122:19;;24562:29;26179:15;;;26173:22;5055:54;;;26254:3;26239:19;;5043:67;26173:22;-1:-1:-1;26204:55:124;;24598:1667;;;;;;;;:::o;27840:220::-;27989:2;27978:9;27971:21;27952:4;28009:45;28050:2;28039:9;28035:18;28027:6;28009:45;:::i;29076:184::-;29128:77;29125:1;29118:88;29225:4;29222:1;29215:15;29249:4;29246:1;29239:15;29265:301;29353:1;29346:5;29343:12;29333:200;;29389:77;29386:1;29379:88;29490:4;29487:1;29480:15;29518:4;29515:1;29508:15;29333:200;29542:18;;29265:301::o;29571:996::-;29942:4;29984:3;29973:9;29969:19;29961:27;;30015:6;30004:9;29997:25;30058:6;30053:2;30042:9;30038:18;30031:34;30101:6;30096:2;30085:9;30081:18;30074:34;30127:42;30224:2;30215:6;30209:13;30205:22;30200:2;30189:9;30185:18;30178:50;30283:2;30275:6;30271:15;30265:22;30259:3;30248:9;30244:19;30237:51;30335:2;30327:6;30323:15;30317:22;30348:67;30410:3;30399:9;30395:19;30381:12;30348:67;:::i;:::-;-1:-1:-1;30474:2:124;30462:15;;30456:22;30452:31;30446:3;30431:19;;30424:60;30553:3;30541:16;;;30535:23;30528:31;30521:39;30515:3;30500:19;;;30493:68;29571:996;;-1:-1:-1;;;29571:996:124:o;30572:184::-;30642:6;30695:2;30683:9;30674:7;30670:23;30666:32;30663:52;;;30711:1;30708;30701:12;30663:52;-1:-1:-1;30734:16:124;;30572:184;-1:-1:-1;30572:184:124:o;30761:960::-;31033:6;31022:9;31015:25;31076:2;31071;31060:9;31056:18;31049:30;30996:4;31098:42;31195:2;31186:6;31180:13;31176:22;31171:2;31160:9;31156:18;31149:50;31263:2;31257;31249:6;31245:15;31239:22;31235:31;31230:2;31219:9;31215:18;31208:59;;31322:2;31314:6;31310:15;31304:22;31298:3;31287:9;31283:19;31276:51;31374:2;31366:6;31362:15;31356:22;31415:4;31409:3;31398:9;31394:19;31387:33;31443:52;31490:3;31479:9;31475:19;31461:12;31443:52;:::i;:::-;31429:66;;31561:6;31554:3;31546:6;31542:16;31536:23;31532:36;31526:3;31515:9;31511:19;31504:65;31625:3;31617:6;31613:16;31607:23;31600:4;31589:9;31585:20;31578:53;31686:3;31678:6;31674:16;31668:23;31662:3;31651:9;31647:19;31640:52;31709:6;31701:14;;;30761:960;;;;;:::o;35173:437::-;35252:1;35248:12;;;;35295;;;35316:61;;35370:4;35362:6;35358:17;35348:27;;35316:61;35423:2;35415:6;35412:14;35392:18;35389:38;35386:218;;;35460:77;35457:1;35450:88;35561:4;35558:1;35551:15;35589:4;35586:1;35579:15;35615:1060;35920:4;35962:3;35951:9;35947:19;35939:27;;35993:6;35982:9;35975:25;36036:6;36031:2;36020:9;36016:18;36009:34;36062:42;36159:2;36150:6;36144:13;36140:22;36135:2;36124:9;36120:18;36113:50;36227:2;36221;36213:6;36209:15;36203:22;36199:31;36194:2;36183:9;36179:18;36172:59;36296:2;36290;36282:6;36278:15;36272:22;36268:31;36262:3;36251:9;36247:19;36240:60;36365:2;36359;36351:6;36347:15;36341:22;36337:31;36331:3;36320:9;36316:19;36309:60;36435:2;36428:3;36420:6;36416:16;36410:23;36406:32;36400:3;36389:9;36385:19;36378:61;;36486:3;36478:6;36474:16;36468:23;36500:52;36547:3;36536:9;36532:19;36518:12;4970:6;4959:18;4947:31;;4894:90;36500:52;-1:-1:-1;36601:3:124;36589:16;;36583:23;4970:6;4959:18;;36664:3;36649:19;;4947:31;36615:54;35615:1060;;;;;;:::o;36680:245::-;36747:6;36800:2;36788:9;36779:7;36775:23;36771:32;36768:52;;;36816:1;36813;36806:12;36768:52;36848:9;36842:16;36867:28;36889:5;36867:28;:::i;36930:184::-;36982:77;36979:1;36972:88;37079:4;37076:1;37069:15;37103:4;37100:1;37093:15;37119:197;37157:3;37185:6;37226:2;37219:5;37215:14;37253:2;37244:7;37241:15;37238:41;;;37259:18;;:::i;:::-;37308:1;37295:15;;37119:197;-1:-1:-1;;;37119:197:124:o;37321:557::-;37643:25;;;37699:2;37684:18;;37677:34;;;37759:42;37747:55;;37742:2;37727:18;;37720:83;37630:3;37615:19;;37812:60;37868:2;37853:18;;37845:6;37812:60;:::i;37883:859::-;38183:25;;;38171:2;38227;38245:18;;;38238:30;;;38156:18;;;38303:22;;;38123:4;;38382:6;;38356:2;38341:18;;38123:4;38416:300;38430:6;38427:1;38424:13;38416:300;;;38505:6;38492:20;38525:31;38550:5;38525:31;:::i;:::-;38592:42;38581:54;38569:67;;38691:15;;;;38656:12;;;;38452:1;38445:9;38416:300;;;-1:-1:-1;38733:3:124;37883:859;-1:-1:-1;;;;;;;37883:859:124:o;38747:1960::-;39255:25;;;39311:2;39296:18;;39289:34;;;39354:2;39339:18;;39332:34;;;39397:2;39382:18;;39375:34;;;39437:13;;5066:42;5055:54;39467:3;39452:19;;5043:67;39242:3;39227:19;;39519:2;39507:15;;39501:22;5066:42;5055:54;;39580:3;39565:19;;5043:67;-1:-1:-1;39634:2:124;39622:15;;39616:22;5066:42;5055:54;;39697:3;39682:19;;5043:67;39647:55;39757:2;39749:6;39745:15;39739:22;39733:3;39722:9;39718:19;39711:51;39811:3;39803:6;39799:16;39793:23;39835:3;39847:68;39911:2;39900:9;39896:18;39880:14;39847:68;:::i;:::-;39964:3;39956:6;39952:16;39946:23;39924:45;;39988:3;40000:53;40049:2;40038:9;40034:18;40018:14;4970:6;4959:18;4947:31;;4894:90;40000:53;40102:3;40094:6;40090:16;40084:23;40062:45;;40126:3;40138:51;40185:2;40174:9;40170:18;40154:14;24492:13;24485:21;24473:34;;24422:91;40138:51;40226:3;40214:16;;40208:23;40250:3;40269:18;;;40262:30;;;;40335:15;;;40329:22;40323:3;40308:19;;40301:51;40389:15;;;40383:22;5066:42;5055:54;;;40464:3;40449:19;;5043:67;40506:15;;;40500:22;24585:4;24574:16;40579:3;40564:19;;24562:29;40621:15;;;40615:22;5055:54;;;40696:3;40681:19;;5043:67;40615:22;-1:-1:-1;40646:55:124;4989:127;40712:484;40765:3;40803:5;40797:12;40830:6;40825:3;40818:19;40856:4;40885:2;40880:3;40876:12;40869:19;;40922:2;40915:5;40911:14;40943:1;40953:218;40967:6;40964:1;40961:13;40953:218;;;41032:13;;41047:42;41028:62;41016:75;;41111:12;;;;41146:15;;;;40989:1;40982:9;40953:218;;;-1:-1:-1;41187:3:124;;40712:484;-1:-1:-1;;;;;40712:484:124:o;41201:435::-;41254:3;41292:5;41286:12;41319:6;41314:3;41307:19;41345:4;41374:2;41369:3;41365:12;41358:19;;41411:2;41404:5;41400:14;41432:1;41442:169;41456:6;41453:1;41450:13;41442:169;;;41517:13;;41505:26;;41551:12;;;;41586:15;;;;41478:1;41471:9;41442:169;;41641:2611;42123:6;42112:9;42105:25;42166:6;42161:2;42150:9;42146:18;42139:34;42209:6;42204:2;42193:9;42189:18;42182:34;42252:6;42247:2;42236:9;42232:18;42225:34;42296:3;42290;42279:9;42275:19;42268:32;42309:54;42358:3;42347:9;42343:19;42334:6;42328:13;5066:42;5055:54;5043:67;;4989:127;42309:54;42086:4;42410:2;42402:6;42398:15;42392:22;42433:6;42476:2;42470:3;42459:9;42455:19;42448:31;42502:63;42560:3;42549:9;42545:19;42531:12;42502:63;:::i;:::-;42488:77;;42614:2;42606:6;42602:15;42596:22;42637:66;42768:2;42756:9;42748:6;42744:22;42740:31;42734:3;42723:9;42719:19;42712:60;42795:52;42840:6;42824:14;42795:52;:::i;:::-;42781:66;;42896:2;42888:6;42884:15;42878:22;42856:44;;42919:3;42986:2;42974:9;42966:6;42962:22;42958:31;42953:2;42942:9;42938:18;42931:59;43013:52;43058:6;43042:14;43013:52;:::i;:::-;42999:66;;43114:3;43106:6;43102:16;43096:23;43074:45;;43138:3;43150:54;43200:2;43189:9;43185:18;43169:14;5066:42;5055:54;5043:67;;4989:127;43150:54;43253:3;43245:6;43241:16;43235:23;43213:45;;43277:3;43344:2;43332:9;43324:6;43320:22;43316:31;43311:2;43300:9;43296:18;43289:59;43371:41;43405:6;43389:14;43371:41;:::i;:::-;43357:55;;43461:3;43453:6;43449:16;43443:23;43421:45;;43485:3;43475:13;;43497:53;43546:2;43535:9;43531:18;43515:14;4970:6;4959:18;4947:31;;4894:90;43497:53;43587:3;43579:6;43575:16;43569:23;43559:33;;43611:3;43650:2;43645;43634:9;43630:18;43623:30;43690:2;43682:6;43678:15;43672:22;43662:32;;43714:3;43703:14;;43754:2;43748:3;43737:9;43733:19;43726:31;43811:2;43803:6;43799:15;43793:22;43788:2;43777:9;43773:18;43766:50;43871:2;43863:6;43859:15;43853:22;43847:3;43836:9;43832:19;43825:51;43925:2;43917:6;43913:15;43907:22;43885:44;;43938:55;43988:3;43977:9;43973:19;43957:14;5066:42;5055:54;5043:67;;4989:127;43938:55;44030:15;;44024:22;24585:4;24574:16;;44103:3;44088:19;;24562:29;44024:22;-1:-1:-1;44055:53:124;;-1:-1:-1;;24518:75:124;44055:53;44145:16;;44139:23;24492:13;;24485:21;44218:3;44203:19;;24473:34;44139:23;-1:-1:-1;44171:52:124;;-1:-1:-1;;24422:91:124;45274:492;45389:6;45397;45405;45413;45421;45429;45482:3;45470:9;45461:7;45457:23;45453:33;45450:53;;;45499:1;45496;45489:12;45450:53;45528:9;45522:16;45512:26;;45578:2;45567:9;45563:18;45557:25;45547:35;;45622:2;45611:9;45607:18;45601:25;45591:35;;45666:2;45655:9;45651:18;45645:25;45635:35;;45710:3;45699:9;45695:19;45689:26;45679:36;;45755:3;45744:9;45740:19;45734:26;45724:36;;45274:492;;;;;;;;:::o;47035:125::-;47075:4;47103:1;47100;47097:8;47094:34;;;47108:18;;:::i;:::-;-1:-1:-1;47145:9:124;;47035:125::o;47165:184::-;47217:77;47214:1;47207:88;47314:4;47311:1;47304:15;47338:4;47335:1;47328:15;47354:195;47393:3;47424:66;47417:5;47414:77;47411:103;;;47494:18;;:::i;:::-;-1:-1:-1;47541:1:124;47530:13;;47354:195::o;47554:1520::-;48038:4;48080:3;48069:9;48065:19;48057:27;;48111:6;48100:9;48093:25;48154:6;48149:2;48138:9;48134:18;48127:34;48197:6;48192:2;48181:9;48177:18;48170:34;48240:6;48235:2;48224:9;48220:18;48213:34;48266:42;48364:2;48355:6;48349:13;48345:22;48339:3;48328:9;48324:19;48317:51;48433:2;48427;48419:6;48415:15;48409:22;48405:31;48399:3;48388:9;48384:19;48377:60;;48484:2;48476:6;48472:15;48466:22;48497:53;48545:3;48534:9;48530:19;48516:12;5066:42;5055:54;5043:67;;4989:127;48497:53;;48605:2;48597:6;48593:15;48587:22;48581:3;48570:9;48566:19;48559:51;48647:3;48639:6;48635:16;48629:23;48671:3;48710:2;48705;48694:9;48690:18;48683:30;48768:3;48760:6;48756:16;48750:23;48744:3;48733:9;48729:19;48722:52;48829:3;48821:6;48817:16;48811:23;48805:3;48794:9;48790:19;48783:52;48884:3;48876:6;48872:16;48866:23;48844:45;;48898:55;48948:3;48937:9;48933:19;48917:14;5066:42;5055:54;5043:67;;4989:127;48898:55;48990:15;;48984:22;24585:4;24574:16;;49063:3;49048:19;;24562:29;48984:22;-1:-1:-1;49015:53:124;24518:75;50208:228;50248:7;50374:1;50306:66;50302:74;50299:1;50296:81;50291:1;50284:9;50277:17;50273:105;50270:131;;;50381:18;;:::i;:::-;-1:-1:-1;50421:9:124;;50208:228::o;50441:184::-;50493:77;50490:1;50483:88;50590:4;50587:1;50580:15;50614:4;50611:1;50604:15;50630:128;50670:3;50701:1;50697:6;50694:1;50691:13;50688:39;;;50707:18;;:::i;:::-;-1:-1:-1;50743:9:124;;50630:128::o;50763:274::-;50803:1;50829;50819:189;;50864:77;50861:1;50854:88;50965:4;50962:1;50955:15;50993:4;50990:1;50983:15;50819:189;-1:-1:-1;51022:9:124;;50763:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"4682400","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","BRIDGE_PROTOCOL_FEE()":"2350","FLASHLOAN_PREMIUM_TOTAL()":"2387","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"2429","MAX_NUMBER_RESERVES()":"287","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"2354","POOL_REVISION()":"276","backUnbacked(address,uint256,uint256)":"infinite","borrow(address,uint256,uint256,uint16,address)":"infinite","borrow(bytes32)":"infinite","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"infinite","deposit(address,uint256,address,uint16)":"infinite","dropReserve(address)":"infinite","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"infinite","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"infinite","flashLoanSimple(address,address,uint256,bytes,uint16)":"infinite","getConfiguration(address)":"2703","getEModeCategoryData(uint8)":"infinite","getReserveAddressById(uint16)":"2596","getReserveData(address)":"23100","getReserveNormalizedIncome(address)":"infinite","getReserveNormalizedVariableDebt(address)":"infinite","getReservesList()":"infinite","getUserAccountData(address)":"infinite","getUserConfiguration(address)":"2682","getUserEMode(address)":"2613","initReserve(address,address,address,address,address)":"infinite","initialize(address)":"infinite","liquidationCall(address,address,address,uint256,bool)":"infinite","liquidationCall(bytes32,bytes32)":"infinite","mintToTreasury(address[])":"infinite","mintUnbacked(address,uint256,address,uint16)":"infinite","rebalanceStableBorrowRate(address,address)":"infinite","rebalanceStableBorrowRate(bytes32)":"infinite","repay(address,uint256,uint256,address)":"infinite","repay(bytes32)":"infinite","repayWithATokens(address,uint256,uint256)":"infinite","repayWithATokens(bytes32)":"infinite","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"infinite","repayWithPermit(bytes32,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","resetIsolationModeTotalDebt(address)":"infinite","setConfiguration(address,(uint256))":"infinite","setReserveInterestRateStrategyAddress(address,address)":"infinite","setUserEMode(uint8)":"infinite","setUserUseReserveAsCollateral(address,bool)":"infinite","setUserUseReserveAsCollateral(bytes32)":"infinite","supply(address,uint256,address,uint16)":"infinite","supply(bytes32)":"infinite","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"infinite","supplyWithPermit(bytes32,bytes32,bytes32)":"infinite","swapBorrowRateMode(address,uint256)":"infinite","swapBorrowRateMode(bytes32)":"infinite","updateBridgeProtocolFee(uint256)":"infinite","updateFlashloanPremiums(uint128,uint128)":"infinite","withdraw(address,uint256,address)":"infinite","withdraw(bytes32)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BRIDGE_PROTOCOL_FEE()":"272d9072","FLASHLOAN_PREMIUM_TOTAL()":"074b2e43","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"6a99c036","MAX_NUMBER_RESERVES()":"f8119d51","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"e82fec2f","POOL_REVISION()":"0148170e","backUnbacked(address,uint256,uint256)":"d65dc7a1","borrow(address,uint256,uint256,uint16,address)":"a415bcad","borrow(bytes32)":"d5eed868","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"d579ea7d","deposit(address,uint256,address,uint16)":"e8eda9df","dropReserve(address)":"63c9b860","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"d5ed3933","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"ab9c4b5d","flashLoanSimple(address,address,uint256,bytes,uint16)":"42b0b77c","getConfiguration(address)":"c44b11f7","getEModeCategoryData(uint8)":"6c6f6ae1","getReserveAddressById(uint16)":"52751797","getReserveData(address)":"35ea6a75","getReserveNormalizedIncome(address)":"d15e0053","getReserveNormalizedVariableDebt(address)":"386497fd","getReservesList()":"d1946dbc","getUserAccountData(address)":"bf92857c","getUserConfiguration(address)":"4417a583","getUserEMode(address)":"eddf1b79","initReserve(address,address,address,address,address)":"7a708e92","initialize(address)":"c4d66de8","liquidationCall(address,address,address,uint256,bool)":"00a718a9","liquidationCall(bytes32,bytes32)":"fd21ecff","mintToTreasury(address[])":"9cd19996","mintUnbacked(address,uint256,address,uint16)":"69a933a5","rebalanceStableBorrowRate(address,address)":"cd112382","rebalanceStableBorrowRate(bytes32)":"427da177","repay(address,uint256,uint256,address)":"573ade81","repay(bytes32)":"563dd613","repayWithATokens(address,uint256,uint256)":"2dad97d4","repayWithATokens(bytes32)":"dc7c0bff","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"ee3e210b","repayWithPermit(bytes32,bytes32,bytes32)":"94b576de","rescueTokens(address,address,uint256)":"cea9d26f","resetIsolationModeTotalDebt(address)":"e43e88a1","setConfiguration(address,(uint256))":"f51e435b","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setUserEMode(uint8)":"28530a47","setUserUseReserveAsCollateral(address,bool)":"5a3b74b9","setUserUseReserveAsCollateral(bytes32)":"4d013f03","supply(address,uint256,address,uint16)":"617ba037","supply(bytes32)":"f7a73840","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"02c205f0","supplyWithPermit(bytes32,bytes32,bytes32)":"680dd47c","swapBorrowRateMode(address,uint256)":"94ba89a2","swapBorrowRateMode(bytes32)":"1fe3c6f3","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiums(uint128,uint128)":"bcb6e522","withdraw(address,uint256,address)":"69328dec","withdraw(bytes32)":"8e19899e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TOTAL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TO_PROTOCOL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUMBER_RESERVES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"category\",\"type\":\"tuple\"}],\"name\":\"configureEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"interestRateModes\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoanSimple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"}],\"name\":\"getEModeCategoryData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"getReserveAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentStableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"}],\"internalType\":\"struct DataTypes.ReserveData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserAccountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalCollateralBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebtBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableBorrowsBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.UserConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserEMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"args2\",\"type\":\"bytes32\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"resetIsolationModeTotalDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"setUserEMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumTotal\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiums\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"BRIDGE_PROTOCOL_FEE()\":{\"returns\":{\"_0\":\"The bridge fee sent to the protocol treasury\"}},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"returns\":{\"_0\":\"The total fee on flashloans\"}},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"returns\":{\"_0\":\"The flashloan fee sent to the protocol treasury\"}},\"MAX_NUMBER_RESERVES()\":{\"returns\":{\"_0\":\"The maximum number of reserves supported\"}},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"returns\":{\"_0\":\"The percentage of available liquidity to borrow, expressed in bps\"}},\"backUnbacked(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees\"},\"returns\":{\"_0\":\"The backed amount\"}},\"borrow(address,uint256,uint256,uint16,address)\":{\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"borrow(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the borrow function packed in one bytes32    88 bits       16 bits             8 bits                 128 bits       16 bits | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |\"}},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"details\":\"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets\",\"params\":{\"config\":\"The configuration of the category\",\"id\":\"The id of the category\"}},\"deposit(address,uint256,address,uint16)\":{\"details\":\"Deprecated: maintained for compatibility purposes\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"dropReserve(address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Only callable by the overlying aToken of the `asset`\",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"asset\":\"The address of the underlying asset of the aToken\",\"balanceFromBefore\":\"The aToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The aToken balance of the `to` user before the transfer\",\"from\":\"The user from which the aTokens are transferred\",\"to\":\"The user receiving the aTokens\"}},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amounts\":\"The amounts of the assets being flash-borrowed\",\"assets\":\"The addresses of the assets being flash-borrowed\",\"interestRateModes\":\"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\",\"onBehalfOf\":\"The address  that will receive the debt in the case of using on `modes` 1 or 2\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amount\":\"The amount of the asset being flash-borrowed\",\"asset\":\"The address of the asset being flash-borrowed\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"getConfiguration(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve\"}},\"getEModeCategoryData(uint8)\":{\"params\":{\"id\":\"The id of the category\"},\"returns\":{\"_0\":\"The configuration data of the category\"}},\"getReserveAddressById(uint16)\":{\"params\":{\"id\":\"The id of the reserve as stored in the DataTypes.ReserveData struct\"},\"returns\":{\"_0\":\"The address of the reserve associated with id\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The state and configuration data of the reserve\"}},\"getReserveNormalizedIncome(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve's normalized income\"}},\"getReserveNormalizedVariableDebt(address)\":{\"details\":\"WARNING: This function is intended to be used primarily by the protocol itself to get a \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReservesList()\":{\"details\":\"It does not include dropped reserves\",\"returns\":{\"_0\":\"The addresses of the underlying assets of the initialized reserves\"}},\"getUserAccountData(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"getUserConfiguration(address)\":{\"params\":{\"user\":\"The user address\"},\"returns\":{\"_0\":\"The configuration of the user\"}},\"getUserEMode(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The eMode id\"}},\"initReserve(address,address,address,address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"aTokenAddress\":\"The address of the aToken that will be assigned to the reserve\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy contract\",\"stableDebtAddress\":\"The address of the StableDebtToken that will be assigned to the reserve\",\"variableDebtAddress\":\"The address of the VariableDebtToken that will be assigned to the reserve\"}},\"initialize(address)\":{\"details\":\"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider\"}},\"liquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"liquidationCall(bytes32,bytes32)\":{\"details\":\"the shortenedDebtToCover is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max\",\"params\":{\"args1\":\"part of the arguments for the liquidationCall function packed in one bytes32    64 bits      160 bits       16 bits         16 bits | 0-padding | user address | debtAssetId | collateralAssetId |\",\"args2\":\"part of the arguments for the liquidationCall function packed in one bytes32    127 bits       1 bit             128 bits | 0-padding | receiveAToken | shortenedDebtToCover |\"}},\"mintToTreasury(address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"rebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"}},\"rebalanceStableBorrowRate(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the rebalanceStableBorrowRate function packed in one bytes32    80 bits      160 bits     16 bits | 0-padding | user address | assetId |\"}},\"repay(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repay(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repay function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(address,uint256,uint256)\":{\"details\":\"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repayWithATokens function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(bytes32,bytes32,bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repayWithPermit function packed in one bytes32    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |\",\"r\":\"The R parameter of ERC712 permit sig\",\"s\":\"The S parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"resetIsolationModeTotalDebt(address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\"}},\"setConfiguration(address,(uint256))\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"configuration\":\"The new configuration bitmap\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"rateStrategyAddress\":\"The address of the interest rate strategy contract\"}},\"setUserEMode(uint8)\":{\"params\":{\"categoryId\":\"The id of the category\"}},\"setUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset supplied\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"}},\"setUserUseReserveAsCollateral(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the setUserUseReserveAsCollateral function packed in one bytes32    239 bits         1 bit       16 bits | 0-padding | useAsCollateral | assetId |\"}},\"supply(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supply(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the supply function packed in one bytes32    96 bits       16 bits         128 bits      16 bits | 0-padding | referralCode | shortenedAmount | assetId |\"}},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supplyWithPermit(bytes32,bytes32,bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the supply function packed in one bytes32    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |\",\"r\":\"The R parameter of ERC712 permit sig\",\"s\":\"The S parameter of ERC712 permit sig\"}},\"swapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"}},\"swapBorrowRateMode(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the swapBorrowRateMode function packed in one bytes32    232 bits            8 bits             16 bits | 0-padding | shortenedInterestRateMode | assetId |\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"bridgeProtocolFee\":\"The part of the premium sent to the protocol treasury\"}},\"updateFlashloanPremiums(uint128,uint128)\":{\"details\":\"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract\",\"params\":{\"flashLoanPremiumToProtocol\":\"The part of the premium sent to the protocol treasury, expressed in bps\",\"flashLoanPremiumTotal\":\"The total premium, expressed in bps\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}},\"withdraw(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the withdraw function packed in one bytes32    112 bits       128 bits      16 bits | 0-padding | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider connected to this contract\"},\"BRIDGE_PROTOCOL_FEE()\":{\"notice\":\"Returns the part of the bridge fees sent to protocol\"},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"notice\":\"Returns the total fee on flash loans\"},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"notice\":\"Returns the part of the flashloan fees sent to protocol\"},\"MAX_NUMBER_RESERVES()\":{\"notice\":\"Returns the maximum number of reserves supported to be listed in this Pool\"},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"notice\":\"Returns the percentage of available liquidity that can be borrowed at once at stable rate\"},\"backUnbacked(address,uint256,uint256)\":{\"notice\":\"Back the current unbacked underlying with `amount` and pay `fee`.\"},\"borrow(address,uint256,uint256,uint16,address)\":{\"notice\":\"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`\"},\"borrow(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller\"},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"notice\":\"Configures a new category for the eMode.\"},\"deposit(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"dropReserve(address)\":{\"notice\":\"Drop a reserve\"},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Validates and finalizes an aToken transfer\"},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"getConfiguration(address)\":{\"notice\":\"Returns the configuration of the reserve\"},\"getEModeCategoryData(uint8)\":{\"notice\":\"Returns the data of an eMode category\"},\"getReserveAddressById(uint16)\":{\"notice\":\"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\"},\"getReserveData(address)\":{\"notice\":\"Returns the state and configuration of the reserve\"},\"getReserveNormalizedIncome(address)\":{\"notice\":\"Returns the normalized income of the reserve\"},\"getReserveNormalizedVariableDebt(address)\":{\"notice\":\"Returns the normalized variable debt per unit of asset\"},\"getReservesList()\":{\"notice\":\"Returns the list of the underlying assets of all the initialized reserves\"},\"getUserAccountData(address)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"getUserConfiguration(address)\":{\"notice\":\"Returns the configuration of the user across all the reserves\"},\"getUserEMode(address)\":{\"notice\":\"Returns the eMode the user is using\"},\"initReserve(address,address,address,address,address)\":{\"notice\":\"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy\"},\"initialize(address)\":{\"notice\":\"Initializes the Pool.\"},\"liquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\"},\"liquidationCall(bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the liquidationCall function\"},\"mintToTreasury(address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"mintUnbacked(address,uint256,address,uint16)\":{\"notice\":\"Mints an `amount` of aTokens to the `onBehalfOf`\"},\"rebalanceStableBorrowRate(address,address)\":{\"notice\":\"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough\"},\"rebalanceStableBorrowRate(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the rebalanceStableBorrowRate function\"},\"repay(address,uint256,uint256,address)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\"},\"repay(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repay function, repaying on behalf of the caller\"},\"repayWithATokens(address,uint256,uint256)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\"},\"repayWithATokens(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repayWithATokens function\"},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"repayWithPermit(bytes32,bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"resetIsolationModeTotalDebt(address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"},\"setConfiguration(address,(uint256))\":{\"notice\":\"Sets the configuration bitmap of the reserve as a whole\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Updates the address of the interest rate strategy contract\"},\"setUserEMode(uint8)\":{\"notice\":\"Allows a user to use the protocol in eMode\"},\"setUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Allows suppliers to enable/disable a specific supplied asset as collateral\"},\"setUserUseReserveAsCollateral(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the setUserUseReserveAsCollateral function\"},\"supply(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"supply(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the supply function on behalf of the caller\"},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"supplyWithPermit(bytes32,bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller\"},\"swapBorrowRateMode(address,uint256)\":{\"notice\":\"Allows a borrower to swap his debt between stable and variable mode, or vice versa\"},\"swapBorrowRateMode(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the swapBorrowRateMode function\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the protocol fee on the bridging\"},\"updateFlashloanPremiums(uint128,uint128)\":{\"notice\":\"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury\"},\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"},\"withdraw(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the withdraw function, withdrawing to the caller\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/helpers/MockL2Pool.sol\":\"MockL2Pool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IL2Pool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IL2Pool\\n * @author Aave\\n * @notice Defines the basic extension interface for an L2 Aave Pool.\\n */\\ninterface IL2Pool {\\n  /**\\n   * @notice Calldata efficient wrapper of the supply function on behalf of the caller\\n   * @param args Arguments for the supply function packed in one bytes32\\n   *    96 bits       16 bits         128 bits      16 bits\\n   * | 0-padding | referralCode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function supply(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller\\n   * @param args Arguments for the supply function packed in one bytes32\\n   *    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits\\n   * | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @param r The R parameter of ERC712 permit sig\\n   * @param s The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the withdraw function, withdrawing to the caller\\n   * @param args Arguments for the withdraw function packed in one bytes32\\n   *    112 bits       128 bits      16 bits\\n   * | 0-padding | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller\\n   * @param args Arguments for the borrow function packed in one bytes32\\n   *    88 bits       16 bits             8 bits                 128 bits       16 bits\\n   * | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function borrow(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repay function, repaying on behalf of the caller\\n   * @param args Arguments for the repay function packed in one bytes32\\n   *    104 bits             8 bits               128 bits       16 bits\\n   * | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount repaid\\n   */\\n  function repay(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller\\n   * @param args Arguments for the repayWithPermit function packed in one bytes32\\n   *    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits\\n   * | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @param r The R parameter of ERC712 permit sig\\n   * @param s The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(bytes32 args, bytes32 r, bytes32 s) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repayWithATokens function\\n   * @param args Arguments for the repayWithATokens function packed in one bytes32\\n   *    104 bits             8 bits               128 bits       16 bits\\n   * | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the swapBorrowRateMode function\\n   * @param args Arguments for the swapBorrowRateMode function packed in one bytes32\\n   *    232 bits            8 bits             16 bits\\n   * | 0-padding | shortenedInterestRateMode | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function swapBorrowRateMode(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the rebalanceStableBorrowRate function\\n   * @param args Arguments for the rebalanceStableBorrowRate function packed in one bytes32\\n   *    80 bits      160 bits     16 bits\\n   * | 0-padding | user address | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function rebalanceStableBorrowRate(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the setUserUseReserveAsCollateral function\\n   * @param args Arguments for the setUserUseReserveAsCollateral function packed in one bytes32\\n   *    239 bits         1 bit       16 bits\\n   * | 0-padding | useAsCollateral | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function setUserUseReserveAsCollateral(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the liquidationCall function\\n   * @param args1 part of the arguments for the liquidationCall function packed in one bytes32\\n   *    64 bits      160 bits       16 bits         16 bits\\n   * | 0-padding | user address | debtAssetId | collateralAssetId |\\n   * @param args2 part of the arguments for the liquidationCall function packed in one bytes32\\n   *    127 bits       1 bit             128 bits\\n   * | 0-padding | receiveAToken | shortenedDebtToCover |\\n   * @dev the shortenedDebtToCover is cast to 256 bits at decode time,\\n   * if type(uint128).max the value will be expanded to type(uint256).max\\n   */\\n  function liquidationCall(bytes32 args1, bytes32 args2) external;\\n}\\n\",\"keccak256\":\"0xc61a7956f4de0e7cd5691e4798d83e7b7a3fa4a22689af250f0e3aa7533d8fc7\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/helpers/MockL2Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {L2Pool} from '../../protocol/pool/L2Pool.sol';\\n\\ncontract MockL2Pool is L2Pool {\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n\\n  constructor(IPoolAddressesProvider provider) L2Pool(provider) {}\\n}\\n\",\"keccak256\":\"0x4bf89213d0312aa1c0a7b76a76d2e141faff51e0f6cf2bd15eb68d92fd9ad6f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/CalldataLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title CalldataLogic library\\n * @author Aave\\n * @notice Library to decode calldata, used to optimize calldata size in L2Pool for transaction cost reduction\\n */\\nlibrary CalldataLogic {\\n  /**\\n   * @notice Decodes compressed supply params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed supply params\\n   * @return The address of the underlying reserve\\n   * @return The amount to supply\\n   * @return The referralCode\\n   */\\n  function decodeSupplyParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint16) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint16 referralCode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      referralCode := and(shr(144, args), 0xFFFF)\\n    }\\n    return (reservesList[assetId], amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed supply params to standard params along with permit params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed supply with permit params\\n   * @return The address of the underlying reserve\\n   * @return The amount to supply\\n   * @return The referralCode\\n   * @return The deadline of the permit\\n   * @return The V value of the permit signature\\n   */\\n  function decodeSupplyWithPermitParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint16, uint256, uint8) {\\n    uint256 deadline;\\n    uint8 permitV;\\n\\n    assembly {\\n      deadline := and(shr(160, args), 0xFFFFFFFF)\\n      permitV := and(shr(192, args), 0xFF)\\n    }\\n    (address asset, uint256 amount, uint16 referralCode) = decodeSupplyParams(reservesList, args);\\n\\n    return (asset, amount, referralCode, deadline, permitV);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed withdraw params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed withdraw params\\n   * @return The address of the underlying reserve\\n   * @return The amount to withdraw\\n   */\\n  function decodeWithdrawParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256) {\\n    uint16 assetId;\\n    uint256 amount;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n    }\\n    if (amount == type(uint128).max) {\\n      amount = type(uint256).max;\\n    }\\n    return (reservesList[assetId], amount);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed borrow params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed borrow params\\n   * @return The address of the underlying reserve\\n   * @return The amount to borrow\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   * @return The referralCode\\n   */\\n  function decodeBorrowParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256, uint16) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint256 interestRateMode;\\n    uint16 referralCode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      interestRateMode := and(shr(144, args), 0xFF)\\n      referralCode := and(shr(152, args), 0xFFFF)\\n    }\\n\\n    return (reservesList[assetId], amount, interestRateMode, referralCode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed repay params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed repay params\\n   * @return The address of the underlying reserve\\n   * @return The amount to repay\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   */\\n  function decodeRepayParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint256 interestRateMode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      interestRateMode := and(shr(144, args), 0xFF)\\n    }\\n\\n    if (amount == type(uint128).max) {\\n      amount = type(uint256).max;\\n    }\\n\\n    return (reservesList[assetId], amount, interestRateMode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed repay params to standard params along with permit params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed repay with permit params\\n   * @return The address of the underlying reserve\\n   * @return The amount to repay\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   * @return The deadline of the permit\\n   * @return The V value of the permit signature\\n   */\\n  function decodeRepayWithPermitParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256, uint256, uint8) {\\n    uint256 deadline;\\n    uint8 permitV;\\n\\n    (address asset, uint256 amount, uint256 interestRateMode) = decodeRepayParams(\\n      reservesList,\\n      args\\n    );\\n\\n    assembly {\\n      deadline := and(shr(152, args), 0xFFFFFFFF)\\n      permitV := and(shr(184, args), 0xFF)\\n    }\\n\\n    return (asset, amount, interestRateMode, deadline, permitV);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed swap borrow rate mode params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed swap borrow rate mode params\\n   * @return The address of the underlying reserve\\n   * @return The interest rate mode, 1 for stable 2 for variable debt\\n   */\\n  function decodeSwapBorrowRateModeParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256) {\\n    uint16 assetId;\\n    uint256 interestRateMode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      interestRateMode := and(shr(16, args), 0xFF)\\n    }\\n\\n    return (reservesList[assetId], interestRateMode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed rebalance stable borrow rate params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed rabalance stable borrow rate params\\n   * @return The address of the underlying reserve\\n   * @return The address of the user to rebalance\\n   */\\n  function decodeRebalanceStableBorrowRateParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, address) {\\n    uint16 assetId;\\n    address user;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      user := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n    }\\n    return (reservesList[assetId], user);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed set user use reserve as collateral params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed set user use reserve as collateral params\\n   * @return The address of the underlying reserve\\n   * @return True if to set using as collateral, false otherwise\\n   */\\n  function decodeSetUserUseReserveAsCollateralParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, bool) {\\n    uint16 assetId;\\n    bool useAsCollateral;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      useAsCollateral := and(shr(16, args), 0x1)\\n    }\\n    return (reservesList[assetId], useAsCollateral);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed liquidation call params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args1 The first half of packed liquidation call params\\n   * @param args2 The second half of the packed liquidation call params\\n   * @return The address of the underlying collateral asset\\n   * @return The address of the underlying debt asset\\n   * @return The address of the user to liquidate\\n   * @return The amount of debt to cover\\n   * @return True if receiving aTokens, false otherwise\\n   */\\n  function decodeLiquidationCallParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args1,\\n    bytes32 args2\\n  ) internal view returns (address, address, address, uint256, bool) {\\n    uint16 collateralAssetId;\\n    uint16 debtAssetId;\\n    address user;\\n    uint256 debtToCover;\\n    bool receiveAToken;\\n\\n    assembly {\\n      collateralAssetId := and(args1, 0xFFFF)\\n      debtAssetId := and(shr(16, args1), 0xFFFF)\\n      user := and(shr(32, args1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n\\n      debtToCover := and(args2, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      receiveAToken := and(shr(128, args2), 0x1)\\n    }\\n\\n    if (debtToCover == type(uint128).max) {\\n      debtToCover = type(uint256).max;\\n    }\\n\\n    return (\\n      reservesList[collateralAssetId],\\n      reservesList[debtAssetId],\\n      user,\\n      debtToCover,\\n      receiveAToken\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x9c12dfdab51ccb9f9c00489d0a06e67e2adcbcb7eef98e4585af62060f2d60b5\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/L2Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Pool} from './Pool.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IL2Pool} from '../../interfaces/IL2Pool.sol';\\nimport {CalldataLogic} from '../libraries/logic/CalldataLogic.sol';\\n\\n/**\\n * @title L2Pool\\n * @author Aave\\n * @notice Calldata optimized extension of the Pool contract allowing users to pass compact calldata representation\\n * to reduce transaction costs on rollups.\\n */\\ncontract L2Pool is Pool, IL2Pool {\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) Pool(provider) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function supply(bytes32 args) external override {\\n    (address asset, uint256 amount, uint16 referralCode) = CalldataLogic.decodeSupplyParams(\\n      _reservesList,\\n      args\\n    );\\n\\n    supply(asset, amount, msg.sender, referralCode);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external override {\\n    (address asset, uint256 amount, uint16 referralCode, uint256 deadline, uint8 v) = CalldataLogic\\n      .decodeSupplyWithPermitParams(_reservesList, args);\\n\\n    supplyWithPermit(asset, amount, msg.sender, referralCode, deadline, v, r, s);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function withdraw(bytes32 args) external override returns (uint256) {\\n    (address asset, uint256 amount) = CalldataLogic.decodeWithdrawParams(_reservesList, args);\\n\\n    return withdraw(asset, amount, msg.sender);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function borrow(bytes32 args) external override {\\n    (address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode) = CalldataLogic\\n      .decodeBorrowParams(_reservesList, args);\\n\\n    borrow(asset, amount, interestRateMode, referralCode, msg.sender);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function repay(bytes32 args) external override returns (uint256) {\\n    (address asset, uint256 amount, uint256 interestRateMode) = CalldataLogic.decodeRepayParams(\\n      _reservesList,\\n      args\\n    );\\n\\n    return repay(asset, amount, interestRateMode, msg.sender);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function repayWithPermit(bytes32 args, bytes32 r, bytes32 s) external override returns (uint256) {\\n    (\\n      address asset,\\n      uint256 amount,\\n      uint256 interestRateMode,\\n      uint256 deadline,\\n      uint8 v\\n    ) = CalldataLogic.decodeRepayWithPermitParams(_reservesList, args);\\n\\n    return repayWithPermit(asset, amount, interestRateMode, msg.sender, deadline, v, r, s);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function repayWithATokens(bytes32 args) external override returns (uint256) {\\n    (address asset, uint256 amount, uint256 interestRateMode) = CalldataLogic.decodeRepayParams(\\n      _reservesList,\\n      args\\n    );\\n\\n    return repayWithATokens(asset, amount, interestRateMode);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function swapBorrowRateMode(bytes32 args) external override {\\n    (address asset, uint256 interestRateMode) = CalldataLogic.decodeSwapBorrowRateModeParams(\\n      _reservesList,\\n      args\\n    );\\n    swapBorrowRateMode(asset, interestRateMode);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function rebalanceStableBorrowRate(bytes32 args) external override {\\n    (address asset, address user) = CalldataLogic.decodeRebalanceStableBorrowRateParams(\\n      _reservesList,\\n      args\\n    );\\n    rebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function setUserUseReserveAsCollateral(bytes32 args) external override {\\n    (address asset, bool useAsCollateral) = CalldataLogic.decodeSetUserUseReserveAsCollateralParams(\\n      _reservesList,\\n      args\\n    );\\n    setUserUseReserveAsCollateral(asset, useAsCollateral);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function liquidationCall(bytes32 args1, bytes32 args2) external override {\\n    (\\n      address collateralAsset,\\n      address debtAsset,\\n      address user,\\n      uint256 debtToCover,\\n      bool receiveAToken\\n    ) = CalldataLogic.decodeLiquidationCallParams(_reservesList, args1, args2);\\n    liquidationCall(collateralAsset, debtAsset, user, debtToCover, receiveAToken);\\n  }\\n}\\n\",\"keccak256\":\"0x4f1742363bf75a7471b889f1877bff9fcdfdc1002adf1399842f388cb2093114\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {PoolStorage} from './PoolStorage.sol';\\n\\n/**\\n * @title Pool contract\\n * @author Aave\\n * @notice Main point of interaction with an Aave protocol's market\\n * - Users can:\\n *   # Supply\\n *   # Withdraw\\n *   # Borrow\\n *   # Repay\\n *   # Swap their loans between variable and stable rate\\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\\n *   # Liquidate positions\\n *   # Execute Flash Loans\\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\\n *   PoolAddressesProvider\\n */\\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\\n  using ReserveLogic for DataTypes.ReserveData;\\n\\n  uint256 public constant POOL_REVISION = 0x1;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Only pool configurator can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolConfigurator() {\\n    _onlyPoolConfigurator();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only bridge can call functions marked by this modifier.\\n   */\\n  modifier onlyBridge() {\\n    _onlyBridge();\\n    _;\\n  }\\n\\n  function _onlyPoolConfigurator() internal view virtual {\\n    require(\\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\\n    );\\n  }\\n\\n  function _onlyPoolAdmin() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyBridge() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\\n      Errors.CALLER_NOT_BRIDGE\\n    );\\n  }\\n\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return POOL_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /**\\n   * @notice Initializes the Pool.\\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\\n   * PoolAddressesProvider of the market.\\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\\n    _maxStableRateBorrowSizePercent = 0.25e4;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override onlyBridge {\\n    BridgeLogic.executeMintUnbacked(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      asset,\\n      amount,\\n      onBehalfOf,\\n      referralCode\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external virtual override onlyBridge returns (uint256) {\\n    return\\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supply(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) public virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override {\\n    IERC20WithPermit(asset).permit(\\n      msg.sender,\\n      address(this),\\n      amount,\\n      deadline,\\n      permitV,\\n      permitR,\\n      permitS\\n    );\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) public virtual override returns (uint256) {\\n    return\\n      SupplyLogic.executeWithdraw(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteWithdrawParams({\\n          asset: asset,\\n          amount: amount,\\n          to: to,\\n          reservesCount: _reservesCount,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[msg.sender]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) public virtual override {\\n    BorrowLogic.executeBorrow(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteBorrowParams({\\n        asset: asset,\\n        user: msg.sender,\\n        onBehalfOf: onBehalfOf,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        referralCode: referralCode,\\n        releaseUnderlying: true,\\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[onBehalfOf],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: onBehalfOf,\\n          useATokens: false\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override returns (uint256) {\\n    {\\n      IERC20WithPermit(asset).permit(\\n        msg.sender,\\n        address(this),\\n        amount,\\n        deadline,\\n        permitV,\\n        permitR,\\n        permitS\\n      );\\n    }\\n    {\\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\\n        asset: asset,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        onBehalfOf: onBehalfOf,\\n        useATokens: false\\n      });\\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: msg.sender,\\n          useATokens: true\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\\n    BorrowLogic.executeSwapBorrowRateMode(\\n      _reserves[asset],\\n      _usersConfig[msg.sender],\\n      asset,\\n      DataTypes.InterestRateMode(interestRateMode)\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) public virtual override {\\n    SupplyLogic.executeUseReserveAsCollateral(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[msg.sender],\\n      asset,\\n      useAsCollateral,\\n      _reservesCount,\\n      ADDRESSES_PROVIDER.getPriceOracle(),\\n      _usersEModeCategory[msg.sender]\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) public virtual override {\\n    LiquidationLogic.executeLiquidationCall(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig,\\n      _eModeCategories,\\n      DataTypes.ExecuteLiquidationCallParams({\\n        reservesCount: _reservesCount,\\n        debtToCover: debtToCover,\\n        collateralAsset: collateralAsset,\\n        debtAsset: debtAsset,\\n        user: user,\\n        receiveAToken: receiveAToken,\\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[user],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\\n      receiverAddress: receiverAddress,\\n      assets: assets,\\n      amounts: amounts,\\n      interestRateModes: interestRateModes,\\n      onBehalfOf: onBehalfOf,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n      reservesCount: _reservesCount,\\n      addressesProvider: address(ADDRESSES_PROVIDER),\\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\\n        msg.sender\\n      )\\n    });\\n\\n    FlashLoanLogic.executeFlashLoan(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      flashParams\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\\n      receiverAddress: receiverAddress,\\n      asset: asset,\\n      amount: amount,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\\n    });\\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintToTreasury(address[] calldata assets) external virtual override {\\n    PoolLogic.executeMintToTreasury(_reserves, assets);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveData(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\\n    return _reserves[asset];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    virtual\\n    override\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    return\\n      PoolLogic.executeGetUserAccountData(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: _usersConfig[user],\\n          reservesCount: _reservesCount,\\n          user: user,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[user]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getConfiguration(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\\n    return _reserves[asset].configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserConfiguration(\\n    address user\\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\\n    return _usersConfig[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedIncome(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedIncome();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedVariableDebt(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedDebt();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReservesList() external view virtual override returns (address[] memory) {\\n    uint256 reservesListCount = _reservesCount;\\n    uint256 droppedReservesCount = 0;\\n    address[] memory reservesList = new address[](reservesListCount);\\n\\n    for (uint256 i = 0; i < reservesListCount; i++) {\\n      if (_reservesList[i] != address(0)) {\\n        reservesList[i - droppedReservesCount] = _reservesList[i];\\n      } else {\\n        droppedReservesCount++;\\n      }\\n    }\\n\\n    // Reduces the length of the reserves array by `droppedReservesCount`\\n    assembly {\\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\\n    }\\n    return reservesList;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveAddressById(uint16 id) external view returns (address) {\\n    return _reservesList[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\\n    return _maxStableRateBorrowSizePercent;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\\n    return _bridgeProtocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumTotal;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external virtual override {\\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\\n    SupplyLogic.executeFinalizeTransfer(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig,\\n      DataTypes.FinalizeTransferParams({\\n        asset: asset,\\n        from: from,\\n        to: to,\\n        amount: amount,\\n        balanceFromBefore: balanceFromBefore,\\n        balanceToBefore: balanceToBefore,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        fromEModeCategory: _usersEModeCategory[from]\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    if (\\n      PoolLogic.executeInitReserve(\\n        _reserves,\\n        _reservesList,\\n        DataTypes.InitReserveParams({\\n          asset: asset,\\n          aTokenAddress: aTokenAddress,\\n          stableDebtAddress: stableDebtAddress,\\n          variableDebtAddress: variableDebtAddress,\\n          interestRateStrategyAddress: interestRateStrategyAddress,\\n          reservesCount: _reservesCount,\\n          maxNumberReserves: MAX_NUMBER_RESERVES()\\n        })\\n      )\\n    ) {\\n      _reservesCount++;\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].configuration = configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateBridgeProtocolFee(\\n    uint256 protocolFee\\n  ) external virtual override onlyPoolConfigurator {\\n    _bridgeProtocolFee = protocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external virtual override onlyPoolConfigurator {\\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function configureEModeCategory(\\n    uint8 id,\\n    DataTypes.EModeCategory memory category\\n  ) external virtual override onlyPoolConfigurator {\\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\\n    _eModeCategories[id] = category;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getEModeCategoryData(\\n    uint8 id\\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\\n    return _eModeCategories[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserEMode(uint8 categoryId) external virtual override {\\n    EModeLogic.executeSetUserEMode(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersEModeCategory,\\n      _usersConfig[msg.sender],\\n      DataTypes.ExecuteSetUserEModeParams({\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        categoryId: categoryId\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserEMode(address user) external view virtual override returns (uint256) {\\n    return _usersEModeCategory[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function resetIsolationModeTotalDebt(\\n    address asset\\n  ) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rescueTokens(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external virtual override onlyPoolAdmin {\\n    PoolLogic.executeRescueTokens(token, to, amount);\\n  }\\n\\n  /// @inheritdoc IPool\\n  /// @dev Deprecated: maintained for compatibility purposes\\n  function deposit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x3eeaa96fc9df64e0f7e85e48849549957d528ed005ebce43de9c277d662b1d37\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":28257,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_reserves","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(ReserveData)23909_storage)"},{"astId":28262,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_usersConfig","offset":0,"slot":"53","type":"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)"},{"astId":28266,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_reservesList","offset":0,"slot":"54","type":"t_mapping(t_uint256,t_address)"},{"astId":28271,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_eModeCategories","offset":0,"slot":"55","type":"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)"},{"astId":28275,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_usersEModeCategory","offset":0,"slot":"56","type":"t_mapping(t_address,t_uint8)"},{"astId":28277,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_bridgeProtocolFee","offset":0,"slot":"57","type":"t_uint256"},{"astId":28279,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_flashLoanPremiumTotal","offset":0,"slot":"58","type":"t_uint128"},{"astId":28281,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_flashLoanPremiumToProtocol","offset":16,"slot":"58","type":"t_uint128"},{"astId":28283,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_maxStableRateBorrowSizePercent","offset":0,"slot":"59","type":"t_uint64"},{"astId":28285,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"_reservesCount","offset":8,"slot":"59","type":"t_uint16"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_struct(ReserveData)23909_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.ReserveData)","numberOfBytes":"32","value":"t_struct(ReserveData)23909_storage"},"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.UserConfigurationMap)","numberOfBytes":"32","value":"t_struct(UserConfigurationMap)23916_storage"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)":{"encoding":"mapping","key":"t_uint8","label":"mapping(uint8 => struct DataTypes.EModeCategory)","numberOfBytes":"32","value":"t_struct(EModeCategory)23927_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(EModeCategory)23927_storage":{"encoding":"inplace","label":"struct DataTypes.EModeCategory","members":[{"astId":23918,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"ltv","offset":0,"slot":"0","type":"t_uint16"},{"astId":23920,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"liquidationThreshold","offset":2,"slot":"0","type":"t_uint16"},{"astId":23922,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"liquidationBonus","offset":4,"slot":"0","type":"t_uint16"},{"astId":23924,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"priceSource","offset":6,"slot":"0","type":"t_address"},{"astId":23926,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"label","offset":0,"slot":"1","type":"t_string_storage"}],"numberOfBytes":"64"},"t_struct(ReserveConfigurationMap)23912_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":23911,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_struct(ReserveData)23909_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveData","members":[{"astId":23880,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)23912_storage"},{"astId":23882,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"liquidityIndex","offset":0,"slot":"1","type":"t_uint128"},{"astId":23884,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"currentLiquidityRate","offset":16,"slot":"1","type":"t_uint128"},{"astId":23886,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"variableBorrowIndex","offset":0,"slot":"2","type":"t_uint128"},{"astId":23888,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"currentVariableBorrowRate","offset":16,"slot":"2","type":"t_uint128"},{"astId":23890,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"currentStableBorrowRate","offset":0,"slot":"3","type":"t_uint128"},{"astId":23892,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"lastUpdateTimestamp","offset":16,"slot":"3","type":"t_uint40"},{"astId":23894,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"id","offset":21,"slot":"3","type":"t_uint16"},{"astId":23896,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"aTokenAddress","offset":0,"slot":"4","type":"t_address"},{"astId":23898,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"stableDebtTokenAddress","offset":0,"slot":"5","type":"t_address"},{"astId":23900,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"variableDebtTokenAddress","offset":0,"slot":"6","type":"t_address"},{"astId":23902,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"interestRateStrategyAddress","offset":0,"slot":"7","type":"t_address"},{"astId":23904,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"accruedToTreasury","offset":0,"slot":"8","type":"t_uint128"},{"astId":23906,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"unbacked","offset":16,"slot":"8","type":"t_uint128"},{"astId":23908,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"isolationModeTotalDebt","offset":0,"slot":"9","type":"t_uint128"}],"numberOfBytes":"320"},"t_struct(UserConfigurationMap)23916_storage":{"encoding":"inplace","label":"struct DataTypes.UserConfigurationMap","members":[{"astId":23915,"contract":"contracts/mocks/helpers/MockL2Pool.sol:MockL2Pool","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider connected to this contract"},"BRIDGE_PROTOCOL_FEE()":{"notice":"Returns the part of the bridge fees sent to protocol"},"FLASHLOAN_PREMIUM_TOTAL()":{"notice":"Returns the total fee on flash loans"},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"notice":"Returns the part of the flashloan fees sent to protocol"},"MAX_NUMBER_RESERVES()":{"notice":"Returns the maximum number of reserves supported to be listed in this Pool"},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"notice":"Returns the percentage of available liquidity that can be borrowed at once at stable rate"},"backUnbacked(address,uint256,uint256)":{"notice":"Back the current unbacked underlying with `amount` and pay `fee`."},"borrow(address,uint256,uint256,uint16,address)":{"notice":"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`"},"borrow(bytes32)":{"notice":"Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller"},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"notice":"Configures a new category for the eMode."},"deposit(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"dropReserve(address)":{"notice":"Drop a reserve"},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"notice":"Validates and finalizes an aToken transfer"},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"getConfiguration(address)":{"notice":"Returns the configuration of the reserve"},"getEModeCategoryData(uint8)":{"notice":"Returns the data of an eMode category"},"getReserveAddressById(uint16)":{"notice":"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct"},"getReserveData(address)":{"notice":"Returns the state and configuration of the reserve"},"getReserveNormalizedIncome(address)":{"notice":"Returns the normalized income of the reserve"},"getReserveNormalizedVariableDebt(address)":{"notice":"Returns the normalized variable debt per unit of asset"},"getReservesList()":{"notice":"Returns the list of the underlying assets of all the initialized reserves"},"getUserAccountData(address)":{"notice":"Returns the user account data across all the reserves"},"getUserConfiguration(address)":{"notice":"Returns the configuration of the user across all the reserves"},"getUserEMode(address)":{"notice":"Returns the eMode the user is using"},"initReserve(address,address,address,address,address)":{"notice":"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy"},"initialize(address)":{"notice":"Initializes the Pool."},"liquidationCall(address,address,address,uint256,bool)":{"notice":"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk"},"liquidationCall(bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the liquidationCall function"},"mintToTreasury(address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"mintUnbacked(address,uint256,address,uint16)":{"notice":"Mints an `amount` of aTokens to the `onBehalfOf`"},"rebalanceStableBorrowRate(address,address)":{"notice":"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough"},"rebalanceStableBorrowRate(bytes32)":{"notice":"Calldata efficient wrapper of the rebalanceStableBorrowRate function"},"repay(address,uint256,uint256,address)":{"notice":"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address"},"repay(bytes32)":{"notice":"Calldata efficient wrapper of the repay function, repaying on behalf of the caller"},"repayWithATokens(address,uint256,uint256)":{"notice":"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens"},"repayWithATokens(bytes32)":{"notice":"Calldata efficient wrapper of the repayWithATokens function"},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"notice":"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"repayWithPermit(bytes32,bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"resetIsolationModeTotalDebt(address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"},"setConfiguration(address,(uint256))":{"notice":"Sets the configuration bitmap of the reserve as a whole"},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Updates the address of the interest rate strategy contract"},"setUserEMode(uint8)":{"notice":"Allows a user to use the protocol in eMode"},"setUserUseReserveAsCollateral(address,bool)":{"notice":"Allows suppliers to enable/disable a specific supplied asset as collateral"},"setUserUseReserveAsCollateral(bytes32)":{"notice":"Calldata efficient wrapper of the setUserUseReserveAsCollateral function"},"supply(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"supply(bytes32)":{"notice":"Calldata efficient wrapper of the supply function on behalf of the caller"},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"supplyWithPermit(bytes32,bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller"},"swapBorrowRateMode(address,uint256)":{"notice":"Allows a borrower to swap his debt between stable and variable mode, or vice versa"},"swapBorrowRateMode(bytes32)":{"notice":"Calldata efficient wrapper of the swapBorrowRateMode function"},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the protocol fee on the bridging"},"updateFlashloanPremiums(uint128,uint128)":{"notice":"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury"},"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"},"withdraw(bytes32)":{"notice":"Calldata efficient wrapper of the withdraw function, withdrawing to the caller"}},"version":1}}},"contracts/mocks/helpers/MockPeripheryContract.sol":{"MockPeripheryContractV1":{"abi":[{"inputs":[],"name":"getManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506101cd806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063cd6dc68714610046578063d0ebdbe7146100a1578063d5009584146100f6575b600080fd5b61009f61005436600461014b565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9390931692909217909155600155565b005b61009f6100af366004610175565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b803573ffffffffffffffffffffffffffffffffffffffff8116811461014657600080fd5b919050565b6000806040838503121561015e57600080fd5b61016783610122565b946020939093013593505050565b60006020828403121561018757600080fd5b61019082610122565b939250505056fea2646970667358221220eca9b28a5e720f2c23a76466bcf567d4f865fd67b02882a6a2647eb86f0006b364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CD DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCD6DC687 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xD0EBDBE7 EQ PUSH2 0xA1 JUMPI DUP1 PUSH4 0xD5009584 EQ PUSH2 0xF6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9F PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x14B JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0xAF CALLDATASIZE PUSH1 0x4 PUSH2 0x175 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x15E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x167 DUP4 PUSH2 0x122 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x187 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x190 DUP3 PUSH2 0x122 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEC 0xA9 0xB2 DUP11 0x5E PUSH19 0xF2C23A76466BCF567D4F865FD67B02882A6A2 PUSH5 0x7EB86F0006 0xB3 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"62:373:63:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@getManager_8896":{"entryPoint":null,"id":8896,"parameterSlots":0,"returnSlots":1},"@initialize_8888":{"entryPoint":null,"id":8888,"parameterSlots":2,"returnSlots":0},"@setManager_8906":{"entryPoint":null,"id":8906,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":290,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":373,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":331,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:893:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"302:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"348:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"357:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"360:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"350:6:124"},"nodeType":"YulFunctionCall","src":"350:12:124"},"nodeType":"YulExpressionStatement","src":"350:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"323:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"319:3:124"},"nodeType":"YulFunctionCall","src":"319:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"344:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"315:3:124"},"nodeType":"YulFunctionCall","src":"315:32:124"},"nodeType":"YulIf","src":"312:52:124"},{"nodeType":"YulAssignment","src":"373:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"402:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"383:18:124"},"nodeType":"YulFunctionCall","src":"383:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"373:6:124"}]},{"nodeType":"YulAssignment","src":"421:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"448:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"444:3:124"},"nodeType":"YulFunctionCall","src":"444:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"431:12:124"},"nodeType":"YulFunctionCall","src":"431:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"421:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"260:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"271:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"283:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"291:6:124","type":""}],"src":"215:254:124"},{"body":{"nodeType":"YulBlock","src":"544:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"590:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"599:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"602:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"592:6:124"},"nodeType":"YulFunctionCall","src":"592:12:124"},"nodeType":"YulExpressionStatement","src":"592:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"565:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"574:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"561:3:124"},"nodeType":"YulFunctionCall","src":"561:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"557:3:124"},"nodeType":"YulFunctionCall","src":"557:32:124"},"nodeType":"YulIf","src":"554:52:124"},{"nodeType":"YulAssignment","src":"615:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"644:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"625:18:124"},"nodeType":"YulFunctionCall","src":"625:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"615:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"510:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"521:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"533:6:124","type":""}],"src":"474:186:124"},{"body":{"nodeType":"YulBlock","src":"766:125:124","statements":[{"nodeType":"YulAssignment","src":"776:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"788:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"799:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"784:3:124"},"nodeType":"YulFunctionCall","src":"784:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"776:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"818:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"833:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"841:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"829:3:124"},"nodeType":"YulFunctionCall","src":"829:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"811:6:124"},"nodeType":"YulFunctionCall","src":"811:74:124"},"nodeType":"YulExpressionStatement","src":"811:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"735:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"746:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"757:4:124","type":""}],"src":"665:226:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c8063cd6dc68714610046578063d0ebdbe7146100a1578063d5009584146100f6575b600080fd5b61009f61005436600461014b565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9390931692909217909155600155565b005b61009f6100af366004610175565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b803573ffffffffffffffffffffffffffffffffffffffff8116811461014657600080fd5b919050565b6000806040838503121561015e57600080fd5b61016783610122565b946020939093013593505050565b60006020828403121561018757600080fd5b61019082610122565b939250505056fea2646970667358221220eca9b28a5e720f2c23a76466bcf567d4f865fd67b02882a6a2647eb86f0006b364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCD6DC687 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xD0EBDBE7 EQ PUSH2 0xA1 JUMPI DUP1 PUSH4 0xD5009584 EQ PUSH2 0xF6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9F PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x14B JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0xAF CALLDATASIZE PUSH1 0x4 PUSH2 0x175 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x15E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x167 DUP4 PUSH2 0x122 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x187 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x190 DUP3 PUSH2 0x122 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEC 0xA9 0xB2 DUP11 0x5E PUSH19 0xF2C23A76466BCF567D4F865FD67B02882A6A2 PUSH5 0x7EB86F0006 0xB3 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"62:373:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;154:110;;;;;;:::i;:::-;221:8;:18;;;;;;;;;;;;;;;;-1:-1:-1;245:14:63;154:110;;;352:81;;;;;;:::i;:::-;407:8;:21;;;;;;;;;;;;;;;352:81;268:80;313:7;335:8;268:80;;;335:8;;;;811:74:124;;268:80:63;;;;;799:2:124;268:80:63;;;14:196:124;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:254::-;283:6;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;383:29;402:9;383:29;:::i;:::-;373:39;459:2;444:18;;;;431:32;;-1:-1:-1;;;215:254:124:o;474:186::-;533:6;586:2;574:9;565:7;561:23;557:32;554:52;;;602:1;599;592:12;554:52;625:29;644:9;625:29;:::i;:::-;615:39;474:186;-1:-1:-1;;;474:186:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"92200","executionCost":"141","totalCost":"92341"},"external":{"getManager()":"2302","initialize(address,uint256)":"46625","setManager(address)":"24520"}},"methodIdentifiers":{"getManager()":"d5009584","initialize(address,uint256)":"cd6dc687","setManager(address)":"d0ebdbe7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"setManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/helpers/MockPeripheryContract.sol\":\"MockPeripheryContractV1\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/helpers/MockPeripheryContract.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\ncontract MockPeripheryContractV1 {\\n  address private _manager;\\n  uint256 private _value;\\n\\n  function initialize(address manager, uint256 value) external {\\n    _manager = manager;\\n    _value = value;\\n  }\\n\\n  function getManager() external view returns (address) {\\n    return _manager;\\n  }\\n\\n  function setManager(address newManager) external {\\n    _manager = newManager;\\n  }\\n}\\n\\ncontract MockPeripheryContractV2 {\\n  address private _manager;\\n  uint256 private _value;\\n  address private _addressesProvider;\\n\\n  function initialize(address addressesProvider) external {\\n    _addressesProvider = addressesProvider;\\n  }\\n\\n  function getManager() external view returns (address) {\\n    return _manager;\\n  }\\n\\n  function setManager(address newManager) external {\\n    _manager = newManager;\\n  }\\n\\n  function getAddressesProvider() external view returns (address) {\\n    return _addressesProvider;\\n  }\\n}\\n\",\"keccak256\":\"0x7e1c464e28d8b90532171aea49e8cf9e39fbbdadc6b446af34e41641d6506a08\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8870,"contract":"contracts/mocks/helpers/MockPeripheryContract.sol:MockPeripheryContractV1","label":"_manager","offset":0,"slot":"0","type":"t_address"},{"astId":8872,"contract":"contracts/mocks/helpers/MockPeripheryContract.sol:MockPeripheryContractV1","label":"_value","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockPeripheryContractV2":{"abi":[{"inputs":[],"name":"getAddressesProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressesProvider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506101d1806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063c4d66de814610051578063d0ebdbe7146100a8578063d5009584146100fd578063fe65acfe14610140575b600080fd5b6100a661005f36600461015e565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a66100b636600461015e565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60025473ffffffffffffffffffffffffffffffffffffffff16610117565b60006020828403121561017057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461019457600080fd5b939250505056fea2646970667358221220f1063d23fa5f3b700d275675cad2c521fb67e6b3fa4835e7c332bd2ff882d69564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D1 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xD0EBDBE7 EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0xD5009584 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0xFE65ACFE EQ PUSH2 0x140 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA6 PUSH2 0xB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x117 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALL MOD RETURNDATASIZE 0x23 STATICCALL 0x5F EXTCODESIZE PUSH17 0xD275675CAD2C521FB67E6B3FA4835E7C3 ORIGIN 0xBD 0x2F 0xF8 DUP3 0xD6 SWAP6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"437:510:63:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@getAddressesProvider_8949":{"entryPoint":null,"id":8949,"parameterSlots":0,"returnSlots":1},"@getManager_8931":{"entryPoint":null,"id":8931,"parameterSlots":0,"returnSlots":1},"@initialize_8923":{"entryPoint":null,"id":8923,"parameterSlots":1,"returnSlots":0},"@setManager_8941":{"entryPoint":null,"id":8941,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":350,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:556:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:239:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:124"},"nodeType":"YulFunctionCall","src":"101:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:124"},"nodeType":"YulFunctionCall","src":"97:32:124"},"nodeType":"YulIf","src":"94:52:124"},{"nodeType":"YulVariableDeclaration","src":"155:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"168:12:124"},"nodeType":"YulFunctionCall","src":"168:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"159:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"277:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"286:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"289:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"279:6:124"},"nodeType":"YulFunctionCall","src":"279:12:124"},"nodeType":"YulExpressionStatement","src":"279:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"213:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"224:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"231:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"220:3:124"},"nodeType":"YulFunctionCall","src":"220:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"210:2:124"},"nodeType":"YulFunctionCall","src":"210:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"203:6:124"},"nodeType":"YulFunctionCall","src":"203:73:124"},"nodeType":"YulIf","src":"200:93:124"},{"nodeType":"YulAssignment","src":"302:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"312:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"302:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:124","type":""}],"src":"14:309:124"},{"body":{"nodeType":"YulBlock","src":"429:125:124","statements":[{"nodeType":"YulAssignment","src":"439:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"451:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"462:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"439:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"481:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"496:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"504:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"492:3:124"},"nodeType":"YulFunctionCall","src":"492:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"474:6:124"},"nodeType":"YulFunctionCall","src":"474:74:124"},"nodeType":"YulExpressionStatement","src":"474:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"398:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"409:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"420:4:124","type":""}],"src":"328:226:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063c4d66de814610051578063d0ebdbe7146100a8578063d5009584146100fd578063fe65acfe14610140575b600080fd5b6100a661005f36600461015e565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a66100b636600461015e565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60025473ffffffffffffffffffffffffffffffffffffffff16610117565b60006020828403121561017057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461019457600080fd5b939250505056fea2646970667358221220f1063d23fa5f3b700d275675cad2c521fb67e6b3fa4835e7c332bd2ff882d69564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xD0EBDBE7 EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0xD5009584 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0xFE65ACFE EQ PUSH2 0x140 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA6 PUSH2 0xB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x117 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALL MOD RETURNDATASIZE 0x23 STATICCALL 0x5F EXTCODESIZE PUSH17 0xD275675CAD2C521FB67E6B3FA4835E7C3 ORIGIN 0xBD 0x2F 0xF8 DUP3 0xD6 SWAP6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"437:510:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;567:105;;;;;;:::i;:::-;629:18;:38;;;;;;;;;;;;;;;567:105;;;760:81;;;;;;:::i;:::-;815:8;:21;;;;;;;;;;;;;;;760:81;676:80;721:7;743:8;;;676:80;;;504:42:124;492:55;;;474:74;;462:2;447:18;676:80:63;;;;;;;845:100;922:18;;;;845:100;;14:309:124;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;231:42;224:5;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"93000","executionCost":"141","totalCost":"93141"},"external":{"getAddressesProvider()":"2339","getManager()":"2306","initialize(address)":"24463","setManager(address)":"24485"}},"methodIdentifiers":{"getAddressesProvider()":"fe65acfe","getManager()":"d5009584","initialize(address)":"c4d66de8","setManager(address)":"d0ebdbe7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getAddressesProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"setManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/helpers/MockPeripheryContract.sol\":\"MockPeripheryContractV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/helpers/MockPeripheryContract.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\ncontract MockPeripheryContractV1 {\\n  address private _manager;\\n  uint256 private _value;\\n\\n  function initialize(address manager, uint256 value) external {\\n    _manager = manager;\\n    _value = value;\\n  }\\n\\n  function getManager() external view returns (address) {\\n    return _manager;\\n  }\\n\\n  function setManager(address newManager) external {\\n    _manager = newManager;\\n  }\\n}\\n\\ncontract MockPeripheryContractV2 {\\n  address private _manager;\\n  uint256 private _value;\\n  address private _addressesProvider;\\n\\n  function initialize(address addressesProvider) external {\\n    _addressesProvider = addressesProvider;\\n  }\\n\\n  function getManager() external view returns (address) {\\n    return _manager;\\n  }\\n\\n  function setManager(address newManager) external {\\n    _manager = newManager;\\n  }\\n\\n  function getAddressesProvider() external view returns (address) {\\n    return _addressesProvider;\\n  }\\n}\\n\",\"keccak256\":\"0x7e1c464e28d8b90532171aea49e8cf9e39fbbdadc6b446af34e41641d6506a08\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8909,"contract":"contracts/mocks/helpers/MockPeripheryContract.sol:MockPeripheryContractV2","label":"_manager","offset":0,"slot":"0","type":"t_address"},{"astId":8911,"contract":"contracts/mocks/helpers/MockPeripheryContract.sol:MockPeripheryContractV2","label":"_value","offset":0,"slot":"1","type":"t_uint256"},{"astId":8913,"contract":"contracts/mocks/helpers/MockPeripheryContract.sol:MockPeripheryContractV2","label":"_addressesProvider","offset":0,"slot":"2","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/helpers/MockPool.sol":{"MockPool":{"abi":[{"inputs":[{"internalType":"address","name":"reserve","type":"address"}],"name":"addReserveToReservesList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506103b2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063c4d66de814610046578063d1946dbc1461009d578063e636a4f4146100bb575b600080fd5b61009b610054366004610227565b606480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a5610140565b6040516100b29190610264565b60405180910390f35b61009b6100c9366004610227565b606580546001810182556000919091527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c70180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460609060009067ffffffffffffffff811115610161576101616102be565b60405190808252806020026020018201604052801561018a578160200160208202803683370190505b50905060005b60655481101561022157606581815481106101ad576101ad6102ed565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106101ea576101ea6102ed565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152806102198161031c565b915050610190565b50919050565b60006020828403121561023957600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461025d57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156102b257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610280565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610375577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220c5452da3ab36cc11ed1a02a9c52cf35987001395534a3cd81e4bd00c1c95285364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B2 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xE636A4F4 EQ PUSH2 0xBB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9B PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x64 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA5 PUSH2 0x140 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB2 SWAP2 SWAP1 PUSH2 0x264 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9B PUSH2 0xC9 CALLDATASIZE PUSH1 0x4 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8FF97419363FFD7000167F130EF7168FBEA05FAF9251824CA5043F113CC6A7C7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x161 JUMPI PUSH2 0x161 PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x18A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x65 SLOAD DUP2 LT ISZERO PUSH2 0x221 JUMPI PUSH1 0x65 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1AD JUMPI PUSH2 0x1AD PUSH2 0x2ED JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EA JUMPI PUSH2 0x1EA PUSH2 0x2ED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x219 DUP2 PUSH2 0x31C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x190 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x280 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x375 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC5 GASLIMIT 0x2D LOG3 0xAB CALLDATASIZE 0xCC GT 0xED BYTE MUL 0xA9 0xC5 0x2C RETURN MSIZE DUP8 STOP SGT SWAP6 MSTORE8 0x4A EXTCODECOPY 0xD8 0x1E 0x4B 0xD0 0xC SHR SWAP6 0x28 MSTORE8 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"147:651:64:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@addReserveToReservesList_8985":{"entryPoint":null,"id":8985,"parameterSlots":1,"returnSlots":0},"@getReservesList_9026":{"entryPoint":320,"id":9026,"parameterSlots":0,"returnSlots":1},"@initialize_8973":{"entryPoint":null,"id":8973,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":551,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":612,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":796,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":749,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":702,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1743:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:239:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:124"},"nodeType":"YulFunctionCall","src":"101:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:124"},"nodeType":"YulFunctionCall","src":"97:32:124"},"nodeType":"YulIf","src":"94:52:124"},{"nodeType":"YulVariableDeclaration","src":"155:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"168:12:124"},"nodeType":"YulFunctionCall","src":"168:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"159:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"277:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"286:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"289:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"279:6:124"},"nodeType":"YulFunctionCall","src":"279:12:124"},"nodeType":"YulExpressionStatement","src":"279:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"213:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"224:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"231:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"220:3:124"},"nodeType":"YulFunctionCall","src":"220:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"210:2:124"},"nodeType":"YulFunctionCall","src":"210:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"203:6:124"},"nodeType":"YulFunctionCall","src":"203:73:124"},"nodeType":"YulIf","src":"200:93:124"},{"nodeType":"YulAssignment","src":"302:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"312:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"302:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:124","type":""}],"src":"14:309:124"},{"body":{"nodeType":"YulBlock","src":"479:530:124","statements":[{"nodeType":"YulVariableDeclaration","src":"489:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"499:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"493:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"510:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"528:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"539:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"524:3:124"},"nodeType":"YulFunctionCall","src":"524:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"514:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"558:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"569:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"551:6:124"},"nodeType":"YulFunctionCall","src":"551:21:124"},"nodeType":"YulExpressionStatement","src":"551:21:124"},{"nodeType":"YulVariableDeclaration","src":"581:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"592:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"585:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"607:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"627:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"621:5:124"},"nodeType":"YulFunctionCall","src":"621:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"611:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"650:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"658:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"643:6:124"},"nodeType":"YulFunctionCall","src":"643:22:124"},"nodeType":"YulExpressionStatement","src":"643:22:124"},{"nodeType":"YulAssignment","src":"674:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"685:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"696:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"681:3:124"},"nodeType":"YulFunctionCall","src":"681:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"674:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"708:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"726:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"734:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"722:3:124"},"nodeType":"YulFunctionCall","src":"722:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"712:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"746:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"755:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"750:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"814:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"835:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"850:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"844:5:124"},"nodeType":"YulFunctionCall","src":"844:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"859:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"840:3:124"},"nodeType":"YulFunctionCall","src":"840:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"828:6:124"},"nodeType":"YulFunctionCall","src":"828:75:124"},"nodeType":"YulExpressionStatement","src":"828:75:124"},{"nodeType":"YulAssignment","src":"916:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"927:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"932:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"923:3:124"},"nodeType":"YulFunctionCall","src":"923:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"916:3:124"}]},{"nodeType":"YulAssignment","src":"948:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"962:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"970:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"958:3:124"},"nodeType":"YulFunctionCall","src":"958:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"948:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"776:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"779:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"773:2:124"},"nodeType":"YulFunctionCall","src":"773:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"787:18:124","statements":[{"nodeType":"YulAssignment","src":"789:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"798:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"801:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"794:3:124"},"nodeType":"YulFunctionCall","src":"794:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"789:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"769:3:124","statements":[]},"src":"765:218:124"},{"nodeType":"YulAssignment","src":"992:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"1000:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"992:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"448:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"459:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"470:4:124","type":""}],"src":"328:681:124"},{"body":{"nodeType":"YulBlock","src":"1046:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1063:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1066:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1056:6:124"},"nodeType":"YulFunctionCall","src":"1056:88:124"},"nodeType":"YulExpressionStatement","src":"1056:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1160:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1163:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1153:6:124"},"nodeType":"YulFunctionCall","src":"1153:15:124"},"nodeType":"YulExpressionStatement","src":"1153:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1184:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1187:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1177:6:124"},"nodeType":"YulFunctionCall","src":"1177:15:124"},"nodeType":"YulExpressionStatement","src":"1177:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1014:184:124"},{"body":{"nodeType":"YulBlock","src":"1235:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1252:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1255:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1245:6:124"},"nodeType":"YulFunctionCall","src":"1245:88:124"},"nodeType":"YulExpressionStatement","src":"1245:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1349:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1352:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:124"},"nodeType":"YulFunctionCall","src":"1342:15:124"},"nodeType":"YulExpressionStatement","src":"1342:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1373:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1376:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1366:6:124"},"nodeType":"YulFunctionCall","src":"1366:15:124"},"nodeType":"YulExpressionStatement","src":"1366:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"1203:184:124"},{"body":{"nodeType":"YulBlock","src":"1439:302:124","statements":[{"body":{"nodeType":"YulBlock","src":"1538:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1559:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1562:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1552:6:124"},"nodeType":"YulFunctionCall","src":"1552:88:124"},"nodeType":"YulExpressionStatement","src":"1552:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1660:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1663:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1653:6:124"},"nodeType":"YulFunctionCall","src":"1653:15:124"},"nodeType":"YulExpressionStatement","src":"1653:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1688:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1691:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1681:6:124"},"nodeType":"YulFunctionCall","src":"1681:15:124"},"nodeType":"YulExpressionStatement","src":"1681:15:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1455:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1462:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1452:2:124"},"nodeType":"YulFunctionCall","src":"1452:77:124"},"nodeType":"YulIf","src":"1449:257:124"},{"nodeType":"YulAssignment","src":"1715:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1726:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1733:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1722:3:124"},"nodeType":"YulFunctionCall","src":"1722:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"1715:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1421:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"1431:3:124","type":""}],"src":"1392:349:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c8063c4d66de814610046578063d1946dbc1461009d578063e636a4f4146100bb575b600080fd5b61009b610054366004610227565b606480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a5610140565b6040516100b29190610264565b60405180910390f35b61009b6100c9366004610227565b606580546001810182556000919091527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c70180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460609060009067ffffffffffffffff811115610161576101616102be565b60405190808252806020026020018201604052801561018a578160200160208202803683370190505b50905060005b60655481101561022157606581815481106101ad576101ad6102ed565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106101ea576101ea6102ed565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152806102198161031c565b915050610190565b50919050565b60006020828403121561023957600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461025d57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156102b257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610280565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610375577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220c5452da3ab36cc11ed1a02a9c52cf35987001395534a3cd81e4bd00c1c95285364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xE636A4F4 EQ PUSH2 0xBB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9B PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x64 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA5 PUSH2 0x140 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB2 SWAP2 SWAP1 PUSH2 0x264 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9B PUSH2 0xC9 CALLDATASIZE PUSH1 0x4 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8FF97419363FFD7000167F130EF7168FBEA05FAF9251824CA5043F113CC6A7C7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x161 JUMPI PUSH2 0x161 PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x18A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x65 SLOAD DUP2 LT ISZERO PUSH2 0x221 JUMPI PUSH1 0x65 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1AD JUMPI PUSH2 0x1AD PUSH2 0x2ED JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EA JUMPI PUSH2 0x1EA PUSH2 0x2ED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x219 DUP2 PUSH2 0x31C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x190 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x280 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x375 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC5 GASLIMIT 0x2D LOG3 0xAB CALLDATASIZE 0xCC GT 0xED BYTE MUL 0xA9 0xC5 0x2C RETURN MSIZE DUP8 STOP SGT SWAP6 MSTORE8 0x4A EXTCODECOPY 0xD8 0x1E 0x4B 0xD0 0xC SHR SWAP6 0x28 MSTORE8 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"147:651:64:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;335:87;;;;;;:::i;:::-;388:18;:29;;;;;;;;;;;;;;;335:87;;;527:269;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;426:97;;;;;;:::i;:::-;492:12;:26;;;;;;;-1:-1:-1;492:26:64;;;;;;;;;;;;;;;;;;;;;426:97;527:269;647:12;:19;577:16;;601:29;;633:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;633:34:64;;601:66;;678:9;673:94;693:12;:19;689:23;;673:94;;;745:12;758:1;745:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;727:12;740:1;727:15;;;;;;;;:::i;:::-;:33;;;;:15;;;;;;;;;;;:33;714:3;;;;:::i;:::-;;;;673:94;;;-1:-1:-1;779:12:64;527:269;-1:-1:-1;527:269:64:o;14:309:124:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;231:42;224:5;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:124:o;328:681::-;499:2;551:21;;;621:13;;524:18;;;643:22;;;470:4;;499:2;722:15;;;;696:2;681:18;;;470:4;765:218;779:6;776:1;773:13;765:218;;;844:13;;859:42;840:62;828:75;;958:15;;;;923:12;;;;801:1;794:9;765:218;;;-1:-1:-1;1000:3:124;;328:681;-1:-1:-1;;;;;;328:681:124:o;1014:184::-;1066:77;1063:1;1056:88;1163:4;1160:1;1153:15;1187:4;1184:1;1177:15;1203:184;1255:77;1252:1;1245:88;1352:4;1349:1;1342:15;1376:4;1373:1;1366:15;1392:349;1431:3;1462:66;1455:5;1452:77;1449:257;;;1562:77;1559:1;1552:88;1663:4;1660:1;1653:15;1691:4;1688:1;1681:15;1449:257;-1:-1:-1;1733:1:124;1722:13;;1392:349::o"},"gasEstimates":{"creation":{"codeDepositCost":"189200","executionCost":"232","totalCost":"189432"},"external":{"addReserveToReservesList(address)":"48743","getReservesList()":"infinite","initialize(address)":"24463"}},"methodIdentifiers":{"addReserveToReservesList(address)":"e636a4f4","getReservesList()":"d1946dbc","initialize(address)":"c4d66de8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"}],\"name\":\"addReserveToReservesList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/helpers/MockPool.sol\":\"MockPool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/helpers/MockPool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\n\\ncontract MockPool {\\n  // Reserved storage space to avoid layout collisions.\\n  uint256[100] private ______gap;\\n\\n  address internal _addressesProvider;\\n  address[] internal _reserveList;\\n\\n  function initialize(address provider) external {\\n    _addressesProvider = provider;\\n  }\\n\\n  function addReserveToReservesList(address reserve) external {\\n    _reserveList.push(reserve);\\n  }\\n\\n  function getReservesList() external view returns (address[] memory) {\\n    address[] memory reservesList = new address[](_reserveList.length);\\n    for (uint256 i; i < _reserveList.length; i++) {\\n      reservesList[i] = _reserveList[i];\\n    }\\n    return reservesList;\\n  }\\n}\\n\\nimport {Pool} from '../../protocol/pool/Pool.sol';\\n\\ncontract MockPoolInherited is Pool {\\n  uint16 internal _maxNumberOfReserves = 128;\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n\\n  constructor(IPoolAddressesProvider provider) Pool(provider) {}\\n\\n  function setMaxNumberOfReserves(uint16 newMaxNumberOfReserves) public {\\n    _maxNumberOfReserves = newMaxNumberOfReserves;\\n  }\\n\\n  function MAX_NUMBER_RESERVES() public view override returns (uint16) {\\n    return _maxNumberOfReserves;\\n  }\\n\\n  function dropReserve(address asset) external override {\\n    _reservesList[_reserves[asset].id] = address(0);\\n    delete _reserves[asset];\\n  }\\n}\\n\",\"keccak256\":\"0xf599e8aef73562f6b6c79ffb6ac5edcb898756a10baabfac3693f483fdf689e6\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {PoolStorage} from './PoolStorage.sol';\\n\\n/**\\n * @title Pool contract\\n * @author Aave\\n * @notice Main point of interaction with an Aave protocol's market\\n * - Users can:\\n *   # Supply\\n *   # Withdraw\\n *   # Borrow\\n *   # Repay\\n *   # Swap their loans between variable and stable rate\\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\\n *   # Liquidate positions\\n *   # Execute Flash Loans\\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\\n *   PoolAddressesProvider\\n */\\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\\n  using ReserveLogic for DataTypes.ReserveData;\\n\\n  uint256 public constant POOL_REVISION = 0x1;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Only pool configurator can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolConfigurator() {\\n    _onlyPoolConfigurator();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only bridge can call functions marked by this modifier.\\n   */\\n  modifier onlyBridge() {\\n    _onlyBridge();\\n    _;\\n  }\\n\\n  function _onlyPoolConfigurator() internal view virtual {\\n    require(\\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\\n    );\\n  }\\n\\n  function _onlyPoolAdmin() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyBridge() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\\n      Errors.CALLER_NOT_BRIDGE\\n    );\\n  }\\n\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return POOL_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /**\\n   * @notice Initializes the Pool.\\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\\n   * PoolAddressesProvider of the market.\\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\\n    _maxStableRateBorrowSizePercent = 0.25e4;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override onlyBridge {\\n    BridgeLogic.executeMintUnbacked(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      asset,\\n      amount,\\n      onBehalfOf,\\n      referralCode\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external virtual override onlyBridge returns (uint256) {\\n    return\\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supply(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) public virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override {\\n    IERC20WithPermit(asset).permit(\\n      msg.sender,\\n      address(this),\\n      amount,\\n      deadline,\\n      permitV,\\n      permitR,\\n      permitS\\n    );\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) public virtual override returns (uint256) {\\n    return\\n      SupplyLogic.executeWithdraw(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteWithdrawParams({\\n          asset: asset,\\n          amount: amount,\\n          to: to,\\n          reservesCount: _reservesCount,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[msg.sender]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) public virtual override {\\n    BorrowLogic.executeBorrow(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteBorrowParams({\\n        asset: asset,\\n        user: msg.sender,\\n        onBehalfOf: onBehalfOf,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        referralCode: referralCode,\\n        releaseUnderlying: true,\\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[onBehalfOf],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: onBehalfOf,\\n          useATokens: false\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override returns (uint256) {\\n    {\\n      IERC20WithPermit(asset).permit(\\n        msg.sender,\\n        address(this),\\n        amount,\\n        deadline,\\n        permitV,\\n        permitR,\\n        permitS\\n      );\\n    }\\n    {\\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\\n        asset: asset,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        onBehalfOf: onBehalfOf,\\n        useATokens: false\\n      });\\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: msg.sender,\\n          useATokens: true\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\\n    BorrowLogic.executeSwapBorrowRateMode(\\n      _reserves[asset],\\n      _usersConfig[msg.sender],\\n      asset,\\n      DataTypes.InterestRateMode(interestRateMode)\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) public virtual override {\\n    SupplyLogic.executeUseReserveAsCollateral(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[msg.sender],\\n      asset,\\n      useAsCollateral,\\n      _reservesCount,\\n      ADDRESSES_PROVIDER.getPriceOracle(),\\n      _usersEModeCategory[msg.sender]\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) public virtual override {\\n    LiquidationLogic.executeLiquidationCall(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig,\\n      _eModeCategories,\\n      DataTypes.ExecuteLiquidationCallParams({\\n        reservesCount: _reservesCount,\\n        debtToCover: debtToCover,\\n        collateralAsset: collateralAsset,\\n        debtAsset: debtAsset,\\n        user: user,\\n        receiveAToken: receiveAToken,\\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[user],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\\n      receiverAddress: receiverAddress,\\n      assets: assets,\\n      amounts: amounts,\\n      interestRateModes: interestRateModes,\\n      onBehalfOf: onBehalfOf,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n      reservesCount: _reservesCount,\\n      addressesProvider: address(ADDRESSES_PROVIDER),\\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\\n        msg.sender\\n      )\\n    });\\n\\n    FlashLoanLogic.executeFlashLoan(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      flashParams\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\\n      receiverAddress: receiverAddress,\\n      asset: asset,\\n      amount: amount,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\\n    });\\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintToTreasury(address[] calldata assets) external virtual override {\\n    PoolLogic.executeMintToTreasury(_reserves, assets);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveData(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\\n    return _reserves[asset];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    virtual\\n    override\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    return\\n      PoolLogic.executeGetUserAccountData(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: _usersConfig[user],\\n          reservesCount: _reservesCount,\\n          user: user,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[user]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getConfiguration(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\\n    return _reserves[asset].configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserConfiguration(\\n    address user\\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\\n    return _usersConfig[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedIncome(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedIncome();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedVariableDebt(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedDebt();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReservesList() external view virtual override returns (address[] memory) {\\n    uint256 reservesListCount = _reservesCount;\\n    uint256 droppedReservesCount = 0;\\n    address[] memory reservesList = new address[](reservesListCount);\\n\\n    for (uint256 i = 0; i < reservesListCount; i++) {\\n      if (_reservesList[i] != address(0)) {\\n        reservesList[i - droppedReservesCount] = _reservesList[i];\\n      } else {\\n        droppedReservesCount++;\\n      }\\n    }\\n\\n    // Reduces the length of the reserves array by `droppedReservesCount`\\n    assembly {\\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\\n    }\\n    return reservesList;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveAddressById(uint16 id) external view returns (address) {\\n    return _reservesList[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\\n    return _maxStableRateBorrowSizePercent;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\\n    return _bridgeProtocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumTotal;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external virtual override {\\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\\n    SupplyLogic.executeFinalizeTransfer(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig,\\n      DataTypes.FinalizeTransferParams({\\n        asset: asset,\\n        from: from,\\n        to: to,\\n        amount: amount,\\n        balanceFromBefore: balanceFromBefore,\\n        balanceToBefore: balanceToBefore,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        fromEModeCategory: _usersEModeCategory[from]\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    if (\\n      PoolLogic.executeInitReserve(\\n        _reserves,\\n        _reservesList,\\n        DataTypes.InitReserveParams({\\n          asset: asset,\\n          aTokenAddress: aTokenAddress,\\n          stableDebtAddress: stableDebtAddress,\\n          variableDebtAddress: variableDebtAddress,\\n          interestRateStrategyAddress: interestRateStrategyAddress,\\n          reservesCount: _reservesCount,\\n          maxNumberReserves: MAX_NUMBER_RESERVES()\\n        })\\n      )\\n    ) {\\n      _reservesCount++;\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].configuration = configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateBridgeProtocolFee(\\n    uint256 protocolFee\\n  ) external virtual override onlyPoolConfigurator {\\n    _bridgeProtocolFee = protocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external virtual override onlyPoolConfigurator {\\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function configureEModeCategory(\\n    uint8 id,\\n    DataTypes.EModeCategory memory category\\n  ) external virtual override onlyPoolConfigurator {\\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\\n    _eModeCategories[id] = category;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getEModeCategoryData(\\n    uint8 id\\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\\n    return _eModeCategories[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserEMode(uint8 categoryId) external virtual override {\\n    EModeLogic.executeSetUserEMode(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersEModeCategory,\\n      _usersConfig[msg.sender],\\n      DataTypes.ExecuteSetUserEModeParams({\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        categoryId: categoryId\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserEMode(address user) external view virtual override returns (uint256) {\\n    return _usersEModeCategory[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function resetIsolationModeTotalDebt(\\n    address asset\\n  ) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rescueTokens(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external virtual override onlyPoolAdmin {\\n    PoolLogic.executeRescueTokens(token, to, amount);\\n  }\\n\\n  /// @inheritdoc IPool\\n  /// @dev Deprecated: maintained for compatibility purposes\\n  function deposit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x3eeaa96fc9df64e0f7e85e48849549957d528ed005ebce43de9c277d662b1d37\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8958,"contract":"contracts/mocks/helpers/MockPool.sol:MockPool","label":"______gap","offset":0,"slot":"0","type":"t_array(t_uint256)100_storage"},{"astId":8960,"contract":"contracts/mocks/helpers/MockPool.sol:MockPool","label":"_addressesProvider","offset":0,"slot":"100","type":"t_address"},{"astId":8963,"contract":"contracts/mocks/helpers/MockPool.sol:MockPool","label":"_reserveList","offset":0,"slot":"101","type":"t_array(t_address)dyn_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_uint256)100_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[100]","numberOfBytes":"3200"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockPoolInherited":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"category","type":"tuple"}],"name":"configureEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"interestRateModes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoanSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"getEModeCategoryData","outputs":[{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"getReserveAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralBase","type":"uint256"},{"internalType":"uint256","name":"totalDebtBase","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsBase","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserEMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"resetIsolationModeTotalDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newMaxNumberOfReserves","type":"uint16"}],"name":"setMaxNumberOfReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"setUserEMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"flashLoanPremiumTotal","type":"uint128"},{"internalType":"uint128","name":"flashLoanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"BRIDGE_PROTOCOL_FEE()":{"returns":{"_0":"The bridge fee sent to the protocol treasury"}},"FLASHLOAN_PREMIUM_TOTAL()":{"returns":{"_0":"The total fee on flashloans"}},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"returns":{"_0":"The flashloan fee sent to the protocol treasury"}},"MAX_NUMBER_RESERVES()":{"returns":{"_0":"The maximum number of reserves supported"}},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"returns":{"_0":"The percentage of available liquidity to borrow, expressed in bps"}},"backUnbacked(address,uint256,uint256)":{"params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees"},"returns":{"_0":"The backed amount"}},"borrow(address,uint256,uint256,uint16,address)":{"params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"details":"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets","params":{"config":"The configuration of the category","id":"The id of the category"}},"deposit(address,uint256,address,uint16)":{"details":"Deprecated: maintained for compatibility purposes","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"dropReserve(address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve"}},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"details":"Only callable by the overlying aToken of the `asset`","params":{"amount":"The amount being transferred/withdrawn","asset":"The address of the underlying asset of the aToken","balanceFromBefore":"The aToken balance of the `from` user before the transfer","balanceToBefore":"The aToken balance of the `to` user before the transfer","from":"The user from which the aTokens are transferred","to":"The user receiving the aTokens"}},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amounts":"The amounts of the assets being flash-borrowed","assets":"The addresses of the assets being flash-borrowed","interestRateModes":"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address","onBehalfOf":"The address  that will receive the debt in the case of using on `modes` 1 or 2","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amount":"The amount of the asset being flash-borrowed","asset":"The address of the asset being flash-borrowed","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"getConfiguration(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The configuration of the reserve"}},"getEModeCategoryData(uint8)":{"params":{"id":"The id of the category"},"returns":{"_0":"The configuration data of the category"}},"getReserveAddressById(uint16)":{"params":{"id":"The id of the reserve as stored in the DataTypes.ReserveData struct"},"returns":{"_0":"The address of the reserve associated with id"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The state and configuration data of the reserve"}},"getReserveNormalizedIncome(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve's normalized income"}},"getReserveNormalizedVariableDebt(address)":{"details":"WARNING: This function is intended to be used primarily by the protocol itself to get a \"dynamic\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve normalized variable debt"}},"getReservesList()":{"details":"It does not include dropped reserves","returns":{"_0":"The addresses of the underlying assets of the initialized reserves"}},"getUserAccountData(address)":{"params":{"user":"The address of the user"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"getUserConfiguration(address)":{"params":{"user":"The user address"},"returns":{"_0":"The configuration of the user"}},"getUserEMode(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The eMode id"}},"initReserve(address,address,address,address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"aTokenAddress":"The address of the aToken that will be assigned to the reserve","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy contract","stableDebtAddress":"The address of the StableDebtToken that will be assigned to the reserve","variableDebtAddress":"The address of the VariableDebtToken that will be assigned to the reserve"}},"initialize(address)":{"details":"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations","params":{"provider":"The address of the PoolAddressesProvider"}},"liquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"mintToTreasury(address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed"}},"mintUnbacked(address,uint256,address,uint16)":{"params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"rebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"}},"repay(address,uint256,uint256,address)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(address,uint256,uint256)":{"details":"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"resetIsolationModeTotalDebt(address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt"}},"setConfiguration(address,(uint256))":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","configuration":"The new configuration bitmap"}},"setReserveInterestRateStrategyAddress(address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","rateStrategyAddress":"The address of the interest rate strategy contract"}},"setUserEMode(uint8)":{"params":{"categoryId":"The id of the category"}},"setUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset supplied","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"}},"supply(address,uint256,address,uint16)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"swapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"}},"updateBridgeProtocolFee(uint256)":{"params":{"bridgeProtocolFee":"The part of the premium sent to the protocol treasury"}},"updateFlashloanPremiums(uint128,uint128)":{"details":"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract","params":{"flashLoanPremiumToProtocol":"The part of the premium sent to the protocol treasury, expressed in bps","flashLoanPremiumTotal":"The total premium, expressed in bps"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_25291":{"entryPoint":null,"id":25291,"parameterSlots":1,"returnSlots":0},"@_9053":{"entryPoint":null,"id":9053,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":101,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:124"},"nodeType":"YulFunctionCall","src":"174:12:124"},"nodeType":"YulExpressionStatement","src":"174:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:124"},"nodeType":"YulFunctionCall","src":"143:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:124"},"nodeType":"YulFunctionCall","src":"139:32:124"},"nodeType":"YulIf","src":"136:52:124"},{"nodeType":"YulVariableDeclaration","src":"197:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:124"},"nodeType":"YulFunctionCall","src":"291:12:124"},"nodeType":"YulExpressionStatement","src":"291:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:124"},"nodeType":"YulFunctionCall","src":"270:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:124"},"nodeType":"YulFunctionCall","src":"266:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:124"},"nodeType":"YulFunctionCall","src":"255:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:124"},"nodeType":"YulFunctionCall","src":"245:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:124"},"nodeType":"YulFunctionCall","src":"238:50:124"},"nodeType":"YulIf","src":"235:70:124"},{"nodeType":"YulAssignment","src":"314:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"src":"14:321:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":5175},{"length":20,"start":5942},{"length":20,"start":8510},{"length":20,"start":8673},{"length":20,"start":11601},{"length":20,"start":13808}]},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7693},{"length":20,"start":13307}]},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4694}]},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5841},{"length":20,"start":10254}]},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":3133}]},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":8051},{"length":20,"start":8626},{"length":20,"start":10563},{"length":20,"start":11726},{"length":20,"start":13424}]},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":4111},{"length":20,"start":6285},{"length":20,"start":6927},{"length":20,"start":7015},{"length":20,"start":12695}]}},"object":"60a060405260008055603b805461ffff60501b19166a80000000000000000000001790553480156200003057600080fd5b50604051620056dc380380620056dc833981016040819052620000539162000065565b6001600160a01b031660805262000097565b6000602082840312156200007857600080fd5b81516001600160a01b03811681146200009057600080fd5b9392505050565b6080516155c7620001156000396000818161036101528181610bd201528181610cc4015281816111c7015281816117ea01528181611b14015281816122390152818161230a0152818161255d0152818161285801528181612ab9015281816131300152818161372d015281816138d40152613a6101526155c76000f3fe608060405234801561001057600080fd5b50600436106103145760003560e01c80636c6f6ae1116101a7578063d15e0053116100ee578063e82fec2f11610097578063ee3e210b11610071578063ee3e210b14610ad8578063f51e435b14610aeb578063f8119d5114610afe57600080fd5b8063e82fec2f14610a8d578063e8eda9df14610736578063eddf1b7914610a9f57600080fd5b8063d5ed3933116100c8578063d5ed393314610a54578063d65dc7a114610a67578063e43e88a114610a7a57600080fd5b8063d15e005314610a19578063d1946dbc14610a2c578063d579ea7d14610a4157600080fd5b8063bcb6e52211610150578063c4d66de81161012a578063c4d66de8146109e0578063cd112382146109f3578063cea9d26f14610a0657600080fd5b8063bcb6e5221461093e578063bf92857c14610951578063c44b11f71461099157600080fd5b80639cd19996116101815780639cd1999614610905578063a415bcad14610918578063ab9c4b5d1461092b57600080fd5b80636c6f6ae1146108bf5780637a708e92146108df57806394ba89a2146108f257600080fd5b8063386497fd1161026b5780635a3b74b91161021457806369328dec116101ee57806369328dec1461086b57806369a933a51461087e5780636a99c0361461089157600080fd5b80635a3b74b914610723578063617ba0371461073657806363c9b8601461074957600080fd5b806352751797116102455780635275179714610685578063573ade81146106bf57806357c68dc4146106d257600080fd5b8063386497fd1461060157806342b0b77c146106145780634417a5831461062757600080fd5b80631d2118f9116102cd5780632dad97d4116102a75780632dad97d41461040d5780633036b4391461042057806335ea6a751461043357600080fd5b80631d2118f9146103df578063272d9072146103f257806328530a47146103fa57600080fd5b806302c205f0116102fe57806302c205f0146103495780630542975c1461035c578063074b2e43146103a857600080fd5b8062a718a9146103195780630148170e1461032e575b600080fd5b61032c610327366004613f39565b610b26565b005b610336600181565b6040519081526020015b60405180910390f35b61032c610357366004613fc4565b610da1565b6103837f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610340565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff9091168152602001610340565b61032c6103ed366004614043565b610f51565b603954610336565b61032c61040836600461407c565b61113f565b61033661041b366004614097565b61131e565b61032c61042e3660046140cc565b611462565b6105f46104413660046140e5565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091525073ffffffffffffffffffffffffffffffffffffffff90811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103409190614102565b61033661060f3660046140e5565b61146f565b61032c6106223660046142c8565b6114a3565b6106766106353660046140e5565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260358352819020815192830190915254815290565b60405190518152602001610340565b61038361069336600461434a565b61ffff1660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6103366106cd366004614365565b61161d565b61032c6106e036600461434a565b603b805461ffff9092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055565b61032c6107313660046143af565b611776565b61032c6107443660046143dd565b61194b565b61032c6107573660046140e5565b73ffffffffffffffffffffffffffffffffffffffff1660008181526034602081815260408084206003810180547501000000000000000000000000000000000000000000900461ffff1686526036845291852080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915595855292909152828255600182018390556002820183905580547fffffffffffffffffff0000000000000000000000000000000000000000000000169055600481018054841690556005810180548416905560068101805484169055600781018054909316909255600882015560090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055565b61033661087936600461442e565b611a4e565b61032c61088c3660046143dd565b611c6d565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166103be565b6108d26108cd36600461407c565b611d1a565b60405161034091906144db565b61032c6108ed36600461453e565b611e54565b61032c6109003660046145a1565b611ff4565b61032c610913366004614612565b612075565b61032c610926366004614654565b6120ca565b61032c610939366004614693565b6123b0565b61032c61094c3660046147ad565b612769565b61096461095f3660046140e5565b6127a0565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610340565b61067661099f3660046140e5565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260348352819020815192830190915254815290565b61032c6109ee3660046140e5565b6129cf565b61032c610a01366004614043565b612bd5565b61032c610a143660046147e0565b612c5e565b610336610a273660046140e5565b612d0b565b610a34612d39565b6040516103409190614821565b61032c610a4f366004614922565b612e75565b61032c610a62366004614a5a565b612fe1565b610336610a75366004614097565b613268565b61032c610a883660046140e5565b613308565b603b5467ffffffffffffffff16610336565b610336610aad3660046140e5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205460ff1690565b610336610ae6366004614abf565b61337d565b61032c610af9366004614b05565b613558565b603b546a0100000000000000000000900461ffff1660405161ffff9091168152602001610340565b73__$f598c634f2d943205ac23f707b80075cbb$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f9190614b64565b73ffffffffffffffffffffffffffffffffffffffff90811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d319190614b64565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d6a959493929190614b81565b60006040518083038186803b158015610d8257600080fd5b505af4158015610d96573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e401600060405180830381600087803b158015610e3357600080fd5b505af1158015610e47573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff86811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e40160006040518083038186803b158015610f2f57600080fd5b505af4158015610f43573d6000803e3d6000fd5b505050505050505050505050565b610f59613714565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061107a57506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906110e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73__$e4b9550ff526a295e1233dea02821b9004$__635d5dc3136034603660376038603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190614b64565b73ffffffffffffffffffffffffffffffffffffffff1681526020018960ff168152506040518763ffffffff1660e01b81526004016112eb9695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a08501529182015173ffffffffffffffffffffffffffffffffffffffff1660c0840152015160ff1660e08201526101000190565b60006040518083038186803b15801561130357600080fd5b505af4158015611317573d6000803e3d6000fd5b5050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018860028111156113bc576113bc614c75565b60028111156113cd576113cd614c75565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526114179493929190600401614cdf565b602060405180830381865af4158015611434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114589190614d52565b90505b9392505050565b61146a613714565b603955565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061149d90613842565b92915050565b60006040518060e001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116604080870191909152911660609094019390935273ffffffffffffffffffffffffffffffffffffffff8a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__9163a1fe0e8d916115e4918590600401614d6b565b60006040518083038186803b1580156115fc57600080fd5b505af4158015611610573d6000803e3d6000fd5b5050505050505050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018960028111156116bb576116bb614c75565b60028111156116cc576116cc614c75565b815273ffffffffffffffffffffffffffffffffffffffff891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815261172c9493929190600401614cdf565b602060405180830381865af4158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190614d52565b95945050505050565b73__$db79717e66442ee197e8271d032a066e34$__63bf697a26603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208787603b60089054906101000a900461ffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118779190614b64565b336000908152603860205260409081902054905160e08b901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019990995260248901979097526044880195909552606487019390935273ffffffffffffffffffffffffffffffffffffffff9182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b15801561192f57600080fd5b505af4158015611943573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e4015b60006040518083038186803b158015611a3057600080fd5b505af4158015611a44573d6000803e3d6000fd5b5050505050505050565b600073__$db79717e66442ee197e8271d032a066e34$__63186dea44603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba19190614b64565b73ffffffffffffffffffffffffffffffffffffffff9081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a001511661012482015261014401611417565b611c756138d2565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$b06080f092f400a43662c3f835a4d9baa8$__90630413c86f9060e401611a18565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff8082168352620100008204811694830194909452640100000000810490931693810193909352660100000000000090910473ffffffffffffffffffffffffffffffffffffffff166060830152600181018054608084019190611dcb90614df6565b80601f0160208091040260200160405190810160405280929190818152602001828054611df790614df6565b8015611e445780601f10611e1957610100808354040283529160200191611e44565b820191906000526020600020905b815481529060010190602001808311611e2757829003601f168201915b5050505050815250509050919050565b611e5c613714565b73__$563c746fa3df0f1858d85f6ef4258864be$__6369fc1bdf603460366040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff168152602001611f47603b5461ffff6a01000000000000000000009091041690565b61ffff168152506040518463ffffffff1660e01b8152600401611f6c93929190614e44565b602060405180830381865af4158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad9190614ed4565b1561131757603b805468010000000000000000900461ffff16906008611fd283614f20565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603460209081526040808320338452603590925290912073__$c3724b8d563dc83a94e797176cddecb3b9$__9163eac4d703918585600281111561205657612056614c75565b6040518563ffffffff1660e01b81526004016119179493929190614f42565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$563c746fa3df0f1858d85f6ef4258864be$__906348c2ca8c906119179060349086908690600401614f79565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f9603460366037603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a60028111156121a1576121a1614c75565b60028111156121b2576121b2614c75565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a09093019273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614b64565b73ffffffffffffffffffffffffffffffffffffffff90811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015612353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123779190614b64565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d6a959493929190614fde565b6000604051806101c001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a085015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614b64565b6040517ffa50f29700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063fa50f29790602401602060405180830381865afa158015612680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a49190614ed4565b1515905273ffffffffffffffffffffffffffffffffffffffff86166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__91632e7263ea9161272b91603491603691603791908890600401615187565b60006040518083038186803b15801561274357600080fd5b505af4158015612757573d6000803e3d6000fd5b50505050505050505050505050505050565b612771613714565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$563c746fa3df0f1858d85f6ef4258864be$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa15801561289e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c29190614b64565b73ffffffffffffffffffffffffffffffffffffffff90811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af4158015612997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bb919061532d565b949c939b5091995097509550909350915050565b60015460039060ff16806129e25750303b155b806129ee575060005481115b612a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610fdb565b60015460ff16158015612ab757600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525090612b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c41790558015612bd057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$c3724b8d563dc83a94e797176cddecb3b9$__90636973f74490606401611917565b612c66613a5f565b6040517f87b322b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044810182905273__$563c746fa3df0f1858d85f6ef4258864be$__906387b322b29060640160006040518083038186803b158015612cee57600080fd5b505af4158015612d02573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061149d90613bec565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff811115612d6b57612d6b61487b565b604051908082528060200260200182016040528015612d94578160200160208202803683370190505b50905060005b83811015612e6b5760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612e4b5760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1682612dfc8584615377565b81518110612e0c57612e0c61538e565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e59565b82612e55816153bd565b9350505b80612e63816153bd565b915050612d9a565b5091038152919050565b612e7d613714565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316612eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5060ff8216600090815260376020908152604091829020835181548386015194860151606087015173ffffffffffffffffffffffffffffffffffffffff166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416929094169190911791909117949094161792909217825560808301518051849392611317926001850192910190613e60565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260346020908152604091829020600401548251808401909352600283527f313100000000000000000000000000000000000000000000000000000000000091830191909152909116331461307f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5073__$db79717e66442ee197e8271d032a066e34$__638a5dadd160346036603760356040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bd9190614b64565b73ffffffffffffffffffffffffffffffffffffffff90811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526132309594939291906004016153f6565b60006040518083038186803b15801561324857600080fd5b505af415801561325c573d6000803e3d6000fd5b50505050505050505050565b60006132726138d2565b73ffffffffffffffffffffffffffffffffffffffff84166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$b06080f092f400a43662c3f835a4d9baa8$__90638e7432489060a401611417565b613310613714565b6040517f1e3b41450000000000000000000000000000000000000000000000000000000081526034600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015273__$563c746fa3df0f1858d85f6ef4258864be$__90631e3b4145906044016112eb565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905260009073ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e401600060405180830381600087803b15801561341257600080fd5b505af1158015613426573d6000803e3d6000fd5b5050505060006040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561346b5761346b614c75565b600281111561347c5761347c614c75565b815273ffffffffffffffffffffffffffffffffffffffff89166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$c3724b8d563dc83a94e797176cddecb3b9$__916340e95de691613509916034916036918790600401614cdf565b602060405180830381865af4158015613526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061354a9190614d52565b9a9950505050505050505050565b613560613714565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166135e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061367857506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906136e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5073ffffffffffffffffffffffffffffffffffffffff91909116600090815260346020526040902090359055565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ba9190614b64565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f31300000000000000000000000000000000000000000000000000000000000008152509061383f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b50565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613888575050600201546fffffffffffffffffffffffffffffffff1690565b600283015461145b906fffffffffffffffffffffffffffffffff808216916138c6917001000000000000000000000000000000009091041684613c70565b90613c7d565b50919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561393d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139619190614b64565b6040517f726600ce00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063726600ce90602401602060405180830381865afa1580156139cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f19190614ed4565b6040518060400160405280600181526020017f36000000000000000000000000000000000000000000000000000000000000008152509061383f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aee9190614b64565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690637be53ca190602401602060405180830381865afa158015613b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7e9190614ed4565b6040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152509061383f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613c32575050600101546fffffffffffffffffffffffffffffffff1690565b600183015461145b906fffffffffffffffffffffffffffffffff808216916138c6917001000000000000000000000000000000009091041684613cd4565b600061145b838342613d19565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517613cb257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080613ce864ffffffffff841642615377565b613cf290856154d2565b6301e1338090049050613d11816b033b2e3c9fd0803ce800000061553e565b949350505050565b600080613d2d64ffffffffff851684615377565b905080613d49576b033b2e3c9fd0803ce800000091505061145b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511613d7f576000613d84565b600285035b925066038882915c4000613d988a80613c7d565b81613da557613da561550f565b0491506301e13380613db7838b613c7d565b81613dc457613dc461550f565b049050600082613dd486886154d2565b613dde91906154d2565b60029004905060008285613df2888a6154d2565b613dfc91906154d2565b613e0691906154d2565b60069004905080826301e13380613e1d8a8f6154d2565b613e279190615556565b613e3d906b033b2e3c9fd0803ce800000061553e565b613e47919061553e565b613e51919061553e565b9b9a5050505050505050505050565b828054613e6c90614df6565b90600052602060002090601f016020900481019282613e8e5760008555613ed4565b82601f10613ea757805160ff1916838001178555613ed4565b82800160010185558215613ed4579182015b82811115613ed4578251825591602001919060010190613eb9565b50613ee0929150613ee4565b5090565b5b80821115613ee05760008155600101613ee5565b73ffffffffffffffffffffffffffffffffffffffff8116811461383f57600080fd5b8035613f2681613ef9565b919050565b801515811461383f57600080fd5b600080600080600060a08688031215613f5157600080fd5b8535613f5c81613ef9565b94506020860135613f6c81613ef9565b93506040860135613f7c81613ef9565b9250606086013591506080860135613f9381613f2b565b809150509295509295909350565b803561ffff81168114613f2657600080fd5b803560ff81168114613f2657600080fd5b600080600080600080600080610100898b031215613fe157600080fd5b8835613fec81613ef9565b975060208901359650604089013561400381613ef9565b955061401160608a01613fa1565b94506080890135935061402660a08a01613fb3565b925060c0890135915060e089013590509295985092959890939650565b6000806040838503121561405657600080fd5b823561406181613ef9565b9150602083013561407181613ef9565b809150509250929050565b60006020828403121561408e57600080fd5b61145b82613fb3565b6000806000606084860312156140ac57600080fd5b83356140b781613ef9565b95602085013595506040909401359392505050565b6000602082840312156140de57600080fd5b5035919050565b6000602082840312156140f757600080fd5b813561145b81613ef9565b81515181526101e08101602083015161412f60208401826fffffffffffffffffffffffffffffffff169052565b50604083015161415360408401826fffffffffffffffffffffffffffffffff169052565b50606083015161417760608401826fffffffffffffffffffffffffffffffff169052565b50608083015161419b60808401826fffffffffffffffffffffffffffffffff169052565b5060a08301516141bf60a08401826fffffffffffffffffffffffffffffffff169052565b5060c08301516141d860c084018264ffffffffff169052565b5060e08301516141ee60e084018261ffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f84011261429157600080fd5b50813567ffffffffffffffff8111156142a957600080fd5b6020830191508360208285010111156142c157600080fd5b9250929050565b60008060008060008060a087890312156142e157600080fd5b86356142ec81613ef9565b955060208701356142fc81613ef9565b945060408701359350606087013567ffffffffffffffff81111561431f57600080fd5b61432b89828a0161427f565b909450925061433e905060808801613fa1565b90509295509295509295565b60006020828403121561435c57600080fd5b61145b82613fa1565b6000806000806080858703121561437b57600080fd5b843561438681613ef9565b9350602085013592506040850135915060608501356143a481613ef9565b939692955090935050565b600080604083850312156143c257600080fd5b82356143cd81613ef9565b9150602083013561407181613f2b565b600080600080608085870312156143f357600080fd5b84356143fe81613ef9565b935060208501359250604085013561441581613ef9565b915061442360608601613fa1565b905092959194509250565b60008060006060848603121561444357600080fd5b833561444e81613ef9565b925060208401359150604084013561446581613ef9565b809150509250925092565b6000815180845260005b818110156144965760208185018101518683018201520161447a565b818111156144a8576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff8084511660208401528060208501511660408401528060408501511660608401525073ffffffffffffffffffffffffffffffffffffffff6060840151166080830152608083015160a080840152613d1160c0840182614470565b600080600080600060a0868803121561455657600080fd5b853561456181613ef9565b9450602086013561457181613ef9565b9350604086013561458181613ef9565b9250606086013561459181613ef9565b91506080860135613f9381613ef9565b600080604083850312156145b457600080fd5b82356145bf81613ef9565b946020939093013593505050565b60008083601f8401126145df57600080fd5b50813567ffffffffffffffff8111156145f757600080fd5b6020830191508360208260051b85010111156142c157600080fd5b6000806020838503121561462557600080fd5b823567ffffffffffffffff81111561463c57600080fd5b614648858286016145cd565b90969095509350505050565b600080600080600060a0868803121561466c57600080fd5b853561467781613ef9565b9450602086013593506040860135925061459160608701613fa1565b600080600080600080600080600080600060e08c8e0312156146b457600080fd5b6146bd8c613f1b565b9a5067ffffffffffffffff8060208e013511156146d957600080fd5b6146e98e60208f01358f016145cd565b909b50995060408d01358110156146ff57600080fd5b61470f8e60408f01358f016145cd565b909950975060608d013581101561472557600080fd5b6147358e60608f01358f016145cd565b909750955061474660808e01613f1b565b94508060a08e0135111561475957600080fd5b5061476a8d60a08e01358e0161427f565b909350915061477b60c08d01613fa1565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff81168114613f2657600080fd5b600080604083850312156147c057600080fd5b6147c98361478d565b91506147d76020840161478d565b90509250929050565b6000806000606084860312156147f557600080fd5b833561480081613ef9565b9250602084013561481081613ef9565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561486f57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161483d565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156148cd576148cd61487b565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561491a5761491a61487b565b604052919050565b6000806040838503121561493557600080fd5b61493e83613fb3565b915060208084013567ffffffffffffffff8082111561495c57600080fd5b9085019060a0828803121561497057600080fd5b6149786148aa565b61498183613fa1565b815261498e848401613fa1565b8482015261499e60408401613fa1565b604082015260608301356149b181613ef9565b60608201526080830135828111156149c857600080fd5b80840193505087601f8401126149dd57600080fd5b8235828111156149ef576149ef61487b565b614a1f857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016148d3565b92508083528885828601011115614a3557600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c08789031215614a7357600080fd5b8635614a7e81613ef9565b95506020870135614a8e81613ef9565b94506040870135614a9e81613ef9565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b031215614adc57600080fd5b8835614ae781613ef9565b97506020890135965060408901359550606089013561401181613ef9565b6000808284036040811215614b1957600080fd5b8335614b2481613ef9565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215614b5657600080fd5b506020830190509250929050565b600060208284031215614b7657600080fd5b815161145b81613ef9565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a0830152604083015173ffffffffffffffffffffffffffffffffffffffff80821660c08501528060608601511660e085015250506080830151610100614c098185018373ffffffffffffffffffffffffffffffffffffffff169052565b60a0850151151561012085015260c085015173ffffffffffffffffffffffffffffffffffffffff90811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b60208152600061145b6020830184614470565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614cdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006101008201905085825284602083015283604083015273ffffffffffffffffffffffffffffffffffffffff808451166060840152602084015160808401526040840151614d3160a0850182614ca4565b5060608401511660c0830152608090920151151560e0909101529392505050565b600060208284031215614d6457600080fd5b5051919050565b82815260406020820152600073ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401525060408301516080830152606083015160e060a0840152614dc6610120840182614470565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c90821680614e0a57607f821691505b602082108114156138cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006101208201905084825283602083015273ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a0830151614eba60e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b600060208284031215614ee657600080fd5b815161145b81613f2b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff80831681811415614f3857614f38614ef1565b6001019392505050565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff831660408201526080810161176d6060830184614ca4565b83815260406020808301829052908201839052600090849060608401835b86811015614fd2578335614faa81613ef9565b73ffffffffffffffffffffffffffffffffffffffff1682529282019290820190600101614f97565b50979650505050505050565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e0830152608083015161010061507a81850183614ca4565b60a085015191506101206150938186018461ffff169052565b60c086015192506101406150aa8187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e08501529050614c57565b600081518084526020808501945080840160005b8381101561514c57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161511a565b509495945050505050565b600081518084526020808501945080840160005b8381101561514c5781518752958201959082019060010161516b565b85815284602082015283604082015282606082015260a060808201526151c660a08201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516101c08060c08501526151e4610260850183615106565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e08701526152208483615157565b93506060870151915061010081878603018188015261523f8584615157565b94506080880151925061012061526c8189018573ffffffffffffffffffffffffffffffffffffffff169052565b60a089015193506101408389880301818a01526152898786614470565b965060c08a0151945061016093506152a6848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b015196506153006102008b018873ffffffffffffffffffffffffffffffffffffffff169052565b8a015160ff81166102208b01529550615317915050565b8701518015156102408801529250614fd2915050565b60008060008060008060c0878903121561534657600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008282101561538957615389614ef1565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153ef576153ef614ef1565b5060010190565b60006101a08201905086825285602083015284604083015283606083015273ffffffffffffffffffffffffffffffffffffffff8084511660808401528060208501511660a084015250604083015161546660c084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e085015191506154be61016085018373ffffffffffffffffffffffffffffffffffffffff169052565b84015160ff81166101808501529050614c57565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550a5761550a614ef1565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000821982111561555157615551614ef1565b500190565b60008261558c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205fd7f295292baebc1c9db4ed6520d269495fbc821e20ec0c9e748a8f54f37f9c64736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE PUSH1 0x3B DUP1 SLOAD PUSH2 0xFFFF PUSH1 0x50 SHL NOT AND PUSH11 0x8000000000000000000000 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x56DC CODESIZE SUB DUP1 PUSH3 0x56DC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x53 SWAP2 PUSH3 0x65 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x97 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x55C7 PUSH3 0x115 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x361 ADD MSTORE DUP2 DUP2 PUSH2 0xBD2 ADD MSTORE DUP2 DUP2 PUSH2 0xCC4 ADD MSTORE DUP2 DUP2 PUSH2 0x11C7 ADD MSTORE DUP2 DUP2 PUSH2 0x17EA ADD MSTORE DUP2 DUP2 PUSH2 0x1B14 ADD MSTORE DUP2 DUP2 PUSH2 0x2239 ADD MSTORE DUP2 DUP2 PUSH2 0x230A ADD MSTORE DUP2 DUP2 PUSH2 0x255D ADD MSTORE DUP2 DUP2 PUSH2 0x2858 ADD MSTORE DUP2 DUP2 PUSH2 0x2AB9 ADD MSTORE DUP2 DUP2 PUSH2 0x3130 ADD MSTORE DUP2 DUP2 PUSH2 0x372D ADD MSTORE DUP2 DUP2 PUSH2 0x38D4 ADD MSTORE PUSH2 0x3A61 ADD MSTORE PUSH2 0x55C7 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x314 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6C6F6AE1 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0xD15E0053 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEE3E210B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0xAD8 JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0xAEB JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0xAFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0xA8D JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0xA9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5ED3933 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0xA54 JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xA67 JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0xA7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD15E0053 EQ PUSH2 0xA19 JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0xA2C JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0xA41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x9E0 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x9F3 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0xA06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x951 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x991 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CD19996 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x905 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x918 JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x92B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x8BF JUMPI DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x8DF JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x5A3B74B9 GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x69328DEC GT PUSH2 0x1EE JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x86B JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x87E JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x723 JUMPI DUP1 PUSH4 0x617BA037 EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x245 JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x685 JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x6BF JUMPI DUP1 PUSH4 0x57C68DC4 EQ PUSH2 0x6D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD EQ PUSH2 0x601 JUMPI DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x614 JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x627 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 GT PUSH2 0x2CD JUMPI DUP1 PUSH4 0x2DAD97D4 GT PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x3DF JUMPI DUP1 PUSH4 0x272D9072 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C205F0 GT PUSH2 0x2FE JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x3A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x32E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x32C PUSH2 0x327 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F39 JUMP JUMPDEST PUSH2 0xB26 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x336 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x32C PUSH2 0x357 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC4 JUMP JUMPDEST PUSH2 0xDA1 JUMP JUMPDEST PUSH2 0x383 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x3ED CALLDATASIZE PUSH1 0x4 PUSH2 0x4043 JUMP JUMPDEST PUSH2 0xF51 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x336 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x408 CALLDATASIZE PUSH1 0x4 PUSH2 0x407C JUMP JUMPDEST PUSH2 0x113F JUMP JUMPDEST PUSH2 0x336 PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x131E JUMP JUMPDEST PUSH2 0x32C PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x40CC JUMP JUMPDEST PUSH2 0x1462 JUMP JUMPDEST PUSH2 0x5F4 PUSH2 0x441 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x4102 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x60F CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x146F JUMP JUMPDEST PUSH2 0x32C PUSH2 0x622 CALLDATASIZE PUSH1 0x4 PUSH2 0x42C8 JUMP JUMPDEST PUSH2 0x14A3 JUMP JUMPDEST PUSH2 0x676 PUSH2 0x635 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x383 PUSH2 0x693 CALLDATASIZE PUSH1 0x4 PUSH2 0x434A JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x6CD CALLDATASIZE PUSH1 0x4 PUSH2 0x4365 JUMP JUMPDEST PUSH2 0x161D JUMP JUMPDEST PUSH2 0x32C PUSH2 0x6E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x434A JUMP JUMPDEST PUSH1 0x3B DUP1 SLOAD PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH11 0x100000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x32C PUSH2 0x731 CALLDATASIZE PUSH1 0x4 PUSH2 0x43AF JUMP JUMPDEST PUSH2 0x1776 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x744 CALLDATASIZE PUSH1 0x4 PUSH2 0x43DD JUMP JUMPDEST PUSH2 0x194B JUMP JUMPDEST PUSH2 0x32C PUSH2 0x757 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP7 MSTORE PUSH1 0x36 DUP5 MSTORE SWAP2 DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP6 DUP6 MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP3 DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP3 ADD DUP4 SWAP1 SSTORE DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x7 DUP2 ADD DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP3 SSTORE PUSH1 0x8 DUP3 ADD SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x336 PUSH2 0x879 CALLDATASIZE PUSH1 0x4 PUSH2 0x442E JUMP JUMPDEST PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0x32C PUSH2 0x88C CALLDATASIZE PUSH1 0x4 PUSH2 0x43DD JUMP JUMPDEST PUSH2 0x1C6D JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3BE JUMP JUMPDEST PUSH2 0x8D2 PUSH2 0x8CD CALLDATASIZE PUSH1 0x4 PUSH2 0x407C JUMP JUMPDEST PUSH2 0x1D1A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x44DB JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8ED CALLDATASIZE PUSH1 0x4 PUSH2 0x453E JUMP JUMPDEST PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x900 CALLDATASIZE PUSH1 0x4 PUSH2 0x45A1 JUMP JUMPDEST PUSH2 0x1FF4 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x913 CALLDATASIZE PUSH1 0x4 PUSH2 0x4612 JUMP JUMPDEST PUSH2 0x2075 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x926 CALLDATASIZE PUSH1 0x4 PUSH2 0x4654 JUMP JUMPDEST PUSH2 0x20CA JUMP JUMPDEST PUSH2 0x32C PUSH2 0x939 CALLDATASIZE PUSH1 0x4 PUSH2 0x4693 JUMP JUMPDEST PUSH2 0x23B0 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x94C CALLDATASIZE PUSH1 0x4 PUSH2 0x47AD JUMP JUMPDEST PUSH2 0x2769 JUMP JUMPDEST PUSH2 0x964 PUSH2 0x95F CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x676 PUSH2 0x99F CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x9EE CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x29CF JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA01 CALLDATASIZE PUSH1 0x4 PUSH2 0x4043 JUMP JUMPDEST PUSH2 0x2BD5 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA14 CALLDATASIZE PUSH1 0x4 PUSH2 0x47E0 JUMP JUMPDEST PUSH2 0x2C5E JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA27 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x2D0B JUMP JUMPDEST PUSH2 0xA34 PUSH2 0x2D39 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x4821 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA4F CALLDATASIZE PUSH1 0x4 PUSH2 0x4922 JUMP JUMPDEST PUSH2 0x2E75 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA62 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5A JUMP JUMPDEST PUSH2 0x2FE1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA75 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x3268 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA88 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x3308 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x336 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xAAD CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xAE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4ABF JUMP JUMPDEST PUSH2 0x337D JUMP JUMPDEST PUSH2 0x32C PUSH2 0xAF9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B05 JUMP JUMPDEST PUSH2 0x3558 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH11 0x100000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC3B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC5F SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD31 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD6A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4B81 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD96 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE47 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xF43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xF59 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xFE4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x107A JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1230 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1254 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12EB SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1317 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13BC JUMPI PUSH2 0x13BC PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13CD JUMPI PUSH2 0x13CD PUSH2 0x4C75 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1417 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CDF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1434 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1458 SWAP2 SWAP1 PUSH2 0x4D52 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x146A PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x149D SWAP1 PUSH2 0x3842 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x15E4 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D6B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1610 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x16BB JUMPI PUSH2 0x16BB PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x16CC JUMPI PUSH2 0x16CC PUSH2 0x4C75 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x172C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CDF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1749 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x176D SWAP2 SWAP1 PUSH2 0x4D52 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1853 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1877 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x192F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1943 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1A44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BA1 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x1417 JUMP JUMPDEST PUSH2 0x1C75 PUSH2 0x38D2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1A18 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1DCB SWAP1 PUSH2 0x4DF6 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DF7 SWAP1 PUSH2 0x4DF6 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1E44 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1E19 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1E44 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1E27 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1E5C PUSH2 0x3714 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F47 PUSH1 0x3B SLOAD PUSH2 0xFFFF PUSH11 0x100000000000000000000 SWAP1 SWAP2 DIV AND SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F6C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4E44 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1F89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FAD SWAP2 SWAP1 PUSH2 0x4ED4 JUMP JUMPDEST ISZERO PUSH2 0x1317 JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x1FD2 DUP4 PUSH2 0x4F20 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2056 JUMPI PUSH2 0x2056 PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1917 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4F42 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x1917 SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4F79 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21A1 JUMPI PUSH2 0x21A1 PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21B2 JUMPI PUSH2 0x21B2 PUSH2 0x4C75 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2281 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22A5 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2353 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2377 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD6A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4FDE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2614 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2680 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26A4 SWAP2 SWAP1 PUSH2 0x4ED4 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x272B SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5187 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2757 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2771 PUSH2 0x3714 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x289E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28C2 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2997 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29BB SWAP2 SWAP1 PUSH2 0x532D JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x29E2 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x29EE JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2A7A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xFDB JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2AB7 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2B74 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2BD0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x1917 JUMP JUMPDEST PUSH2 0x2C66 PUSH2 0x3A5F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2D02 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x149D SWAP1 PUSH2 0x3BEC JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D6B JUMPI PUSH2 0x2D6B PUSH2 0x487B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2D94 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2E6B JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2E4B JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH2 0x2DFC DUP6 DUP5 PUSH2 0x5377 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2E0C JUMPI PUSH2 0x2E0C PUSH2 0x538E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2E59 JUMP JUMPDEST DUP3 PUSH2 0x2E55 DUP2 PUSH2 0x53BD JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2E63 DUP2 PUSH2 0x53BD JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2D9A JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2E7D PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x2EEC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x1317 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x3E60 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x307F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3199 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31BD SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x3230 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x53F6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x325C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3272 PUSH2 0x38D2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1417 JUMP JUMPDEST PUSH2 0x3310 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x12EB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3426 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x346B JUMPI PUSH2 0x346B PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x347C JUMPI PUSH2 0x347C PUSH2 0x4C75 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x3509 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CDF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3526 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x354A SWAP2 SWAP1 PUSH2 0x4D52 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3560 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x35E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x3678 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x36E6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 CALLDATALOAD SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3796 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x37BA SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x383F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3888 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x145B SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x38C6 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3C70 JUMP JUMPDEST SWAP1 PUSH2 0x3C7D JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x393D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3961 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39F1 SWAP2 SWAP1 PUSH2 0x4ED4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x383F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3ACA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AEE SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B7E SWAP2 SWAP1 PUSH2 0x4ED4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x383F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3C32 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x145B SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x38C6 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3CD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x145B DUP4 DUP4 TIMESTAMP PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3CE8 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5377 JUMP JUMPDEST PUSH2 0x3CF2 SWAP1 DUP6 PUSH2 0x54D2 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x3D11 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x553E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3D2D PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5377 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3D49 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x145B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x3D7F JUMPI PUSH1 0x0 PUSH2 0x3D84 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3D98 DUP11 DUP1 PUSH2 0x3C7D JUMP JUMPDEST DUP2 PUSH2 0x3DA5 JUMPI PUSH2 0x3DA5 PUSH2 0x550F JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3DB7 DUP4 DUP12 PUSH2 0x3C7D JUMP JUMPDEST DUP2 PUSH2 0x3DC4 JUMPI PUSH2 0x3DC4 PUSH2 0x550F JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x3DD4 DUP7 DUP9 PUSH2 0x54D2 JUMP JUMPDEST PUSH2 0x3DDE SWAP2 SWAP1 PUSH2 0x54D2 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x3DF2 DUP9 DUP11 PUSH2 0x54D2 JUMP JUMPDEST PUSH2 0x3DFC SWAP2 SWAP1 PUSH2 0x54D2 JUMP JUMPDEST PUSH2 0x3E06 SWAP2 SWAP1 PUSH2 0x54D2 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x3E1D DUP11 DUP16 PUSH2 0x54D2 JUMP JUMPDEST PUSH2 0x3E27 SWAP2 SWAP1 PUSH2 0x5556 JUMP JUMPDEST PUSH2 0x3E3D SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x553E JUMP JUMPDEST PUSH2 0x3E47 SWAP2 SWAP1 PUSH2 0x553E JUMP JUMPDEST PUSH2 0x3E51 SWAP2 SWAP1 PUSH2 0x553E JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x3E6C SWAP1 PUSH2 0x4DF6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x3E8E JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3ED4 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3EA7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3ED4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3ED4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3ED4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3EB9 JUMP JUMPDEST POP PUSH2 0x3EE0 SWAP3 SWAP2 POP PUSH2 0x3EE4 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x3EE0 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3EE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x383F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3F26 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x383F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3F51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3F5C DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3F6C DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3F7C DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3F93 DUP2 PUSH2 0x3F2B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3F26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3F26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3FE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3FEC DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x4003 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 POP PUSH2 0x4011 PUSH1 0x60 DUP11 ADD PUSH2 0x3FA1 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x4026 PUSH1 0xA0 DUP11 ADD PUSH2 0x3FB3 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4056 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4061 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4071 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x408E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x145B DUP3 PUSH2 0x3FB3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x40AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x40B7 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x145B DUP2 PUSH2 0x3EF9 JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x412F PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4153 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x4177 PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x419B PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x41BF PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x41D8 PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x41EE PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x42A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x42C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x42E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x42EC DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x42FC DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x431F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x432B DUP10 DUP3 DUP11 ADD PUSH2 0x427F JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x433E SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x3FA1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x435C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x145B DUP3 PUSH2 0x3FA1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x437B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4386 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x43A4 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x43C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x43CD DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4071 DUP2 PUSH2 0x3F2B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x43F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x43FE DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4415 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 POP PUSH2 0x4423 PUSH1 0x60 DUP7 ADD PUSH2 0x3FA1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x444E DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x4465 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4496 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x447A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x44A8 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x3D11 PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x4470 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4561 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4571 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4581 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4591 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3F93 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x45BF DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x45DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x45F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x42C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4625 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x463C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4648 DUP6 DUP3 DUP7 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x466C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4677 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4591 PUSH1 0x60 DUP8 ADD PUSH2 0x3FA1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x46B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46BD DUP13 PUSH2 0x3F1B JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x46D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46E9 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x46FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x470F DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4725 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4735 DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x4746 PUSH1 0x80 DUP15 ADD PUSH2 0x3F1B JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x476A DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x427F JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x477B PUSH1 0xC0 DUP14 ADD PUSH2 0x3FA1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3F26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x47C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x47C9 DUP4 PUSH2 0x478D JUMP JUMPDEST SWAP2 POP PUSH2 0x47D7 PUSH1 0x20 DUP5 ADD PUSH2 0x478D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x47F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4800 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4810 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x486F JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x483D JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x48CD JUMPI PUSH2 0x48CD PUSH2 0x487B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x491A JUMPI PUSH2 0x491A PUSH2 0x487B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4935 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x493E DUP4 PUSH2 0x3FB3 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x495C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x4970 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4978 PUSH2 0x48AA JUMP JUMPDEST PUSH2 0x4981 DUP4 PUSH2 0x3FA1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x498E DUP5 DUP5 ADD PUSH2 0x3FA1 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x499E PUSH1 0x40 DUP5 ADD PUSH2 0x3FA1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x49B1 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x49C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x49DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x49EF JUMPI PUSH2 0x49EF PUSH2 0x487B JUMP JUMPDEST PUSH2 0x4A1F DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x48D3 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x4A35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4A73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x4A7E DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x4A8E DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x4A9E DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4ADC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4AE7 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x4011 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x4B19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4B24 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x4B56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x145B DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4C09 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x145B PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4470 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x4CDB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x4D31 PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x4CA4 JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x4DC6 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x4470 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x4E0A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x38CC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4EBA PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4EE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x145B DUP2 PUSH2 0x3F2B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4F38 JUMPI PUSH2 0x4F38 PUSH2 0x4EF1 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x176D PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4CA4 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x4FD2 JUMPI DUP4 CALLDATALOAD PUSH2 0x4FAA DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4F97 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x507A DUP2 DUP6 ADD DUP4 PUSH2 0x4CA4 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x5093 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x50AA DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x4C57 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x514C JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x511A JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x514C JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x516B JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x51C6 PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x51E4 PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x5106 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x5220 DUP5 DUP4 PUSH2 0x5157 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x523F DUP6 DUP5 PUSH2 0x5157 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x526C DUP2 DUP10 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x5289 DUP8 DUP7 PUSH2 0x4470 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x52A6 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x5300 PUSH2 0x200 DUP12 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x5317 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x4FD2 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x5346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5389 JUMPI PUSH2 0x5389 PUSH2 0x4EF1 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x53EF JUMPI PUSH2 0x53EF PUSH2 0x4EF1 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5466 PUSH1 0xC0 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x54BE PUSH2 0x160 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x4C57 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x550A JUMPI PUSH2 0x550A PUSH2 0x4EF1 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5551 JUMPI PUSH2 0x5551 PUSH2 0x4EF1 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x558C JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F 0xD7 CALLCODE SWAP6 0x29 0x2B 0xAE 0xBC SHR SWAP14 0xB4 0xED PUSH6 0x20D269495FBC DUP3 0x1E KECCAK256 0xEC 0xC SWAP15 PUSH21 0x8A8F54F37F9C64736F6C634300080A003300000000 ","sourceMap":"852:625:64:-:0;;;928:1:87;886:43;;891:42:64;;;-1:-1:-1;;;;891:42:64;;;;;1027:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3321:29:112;;;852:625:64;;14:321:124;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:124;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:124:o;:::-;852:625:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_25195":{"entryPoint":null,"id":25195,"parameterSlots":0,"returnSlots":0},"@BRIDGE_PROTOCOL_FEE_26159":{"entryPoint":null,"id":26159,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TOTAL_26169":{"entryPoint":null,"id":26169,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TO_PROTOCOL_26179":{"entryPoint":null,"id":26179,"parameterSlots":0,"returnSlots":1},"@MAX_NUMBER_RESERVES_9072":{"entryPoint":null,"id":9072,"parameterSlots":0,"returnSlots":1},"@MAX_STABLE_RATE_BORROW_SIZE_PERCENT_26149":{"entryPoint":null,"id":26149,"parameterSlots":0,"returnSlots":1},"@POOL_REVISION_25192":{"entryPoint":null,"id":25192,"parameterSlots":0,"returnSlots":0},"@_onlyBridge_25270":{"entryPoint":14546,"id":25270,"parameterSlots":0,"returnSlots":0},"@_onlyPoolAdmin_25252":{"entryPoint":14943,"id":25252,"parameterSlots":0,"returnSlots":0},"@_onlyPoolConfigurator_25234":{"entryPoint":14100,"id":25234,"parameterSlots":0,"returnSlots":0},"@backUnbacked_25370":{"entryPoint":12904,"id":25370,"parameterSlots":3,"returnSlots":1},"@borrow_25548":{"entryPoint":8394,"id":25548,"parameterSlots":5,"returnSlots":0},"@calculateCompoundedInterest_23673":{"entryPoint":15641,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":15472,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":15572,"id":23550,"parameterSlots":2,"returnSlots":1},"@configureEModeCategory_26458":{"entryPoint":11893,"id":26458,"parameterSlots":2,"returnSlots":0},"@deposit_26586":{"entryPoint":null,"id":26586,"parameterSlots":4,"returnSlots":0},"@dropReserve_9096":{"entryPoint":null,"id":9096,"parameterSlots":1,"returnSlots":0},"@finalizeTransfer_26245":{"entryPoint":12257,"id":26245,"parameterSlots":6,"returnSlots":0},"@flashLoanSimple_25924":{"entryPoint":5283,"id":25924,"parameterSlots":6,"returnSlots":0},"@flashLoan_25883":{"entryPoint":9136,"id":25883,"parameterSlots":11,"returnSlots":0},"@getConfiguration_26012":{"entryPoint":null,"id":26012,"parameterSlots":1,"returnSlots":1},"@getEModeCategoryData_26473":{"entryPoint":7450,"id":26473,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_20345":{"entryPoint":14402,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":15340,"id":20309,"parameterSlots":1,"returnSlots":1},"@getReserveAddressById_26139":{"entryPoint":null,"id":26139,"parameterSlots":1,"returnSlots":1},"@getReserveData_25955":{"entryPoint":null,"id":25955,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedIncome_26043":{"entryPoint":11531,"id":26043,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedVariableDebt_26059":{"entryPoint":5231,"id":26059,"parameterSlots":1,"returnSlots":1},"@getReservesList_26126":{"entryPoint":11577,"id":26126,"parameterSlots":0,"returnSlots":1},"@getRevision_9043":{"entryPoint":null,"id":9043,"parameterSlots":0,"returnSlots":1},"@getUserAccountData_25996":{"entryPoint":10144,"id":25996,"parameterSlots":1,"returnSlots":6},"@getUserConfiguration_26027":{"entryPoint":null,"id":26027,"parameterSlots":1,"returnSlots":1},"@getUserEMode_26516":{"entryPoint":null,"id":26516,"parameterSlots":1,"returnSlots":1},"@initReserve_26284":{"entryPoint":7764,"id":26284,"parameterSlots":5,"returnSlots":0},"@initialize_25313":{"entryPoint":10703,"id":25313,"parameterSlots":1,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@liquidationCall_25812":{"entryPoint":2854,"id":25812,"parameterSlots":5,"returnSlots":0},"@mintToTreasury_25940":{"entryPoint":8309,"id":25940,"parameterSlots":2,"returnSlots":0},"@mintUnbacked_25343":{"entryPoint":7277,"id":25343,"parameterSlots":4,"returnSlots":0},"@rayMul_23780":{"entryPoint":15485,"id":23780,"parameterSlots":2,"returnSlots":1},"@rebalanceStableBorrowRate_25737":{"entryPoint":11221,"id":25737,"parameterSlots":2,"returnSlots":0},"@repayWithATokens_25690":{"entryPoint":4894,"id":25690,"parameterSlots":3,"returnSlots":1},"@repayWithPermit_25654":{"entryPoint":13181,"id":25654,"parameterSlots":8,"returnSlots":1},"@repay_25584":{"entryPoint":5661,"id":25584,"parameterSlots":4,"returnSlots":1},"@rescueTokens_26555":{"entryPoint":11358,"id":26555,"parameterSlots":3,"returnSlots":0},"@resetIsolationModeTotalDebt_26533":{"entryPoint":13064,"id":26533,"parameterSlots":1,"returnSlots":0},"@setConfiguration_26397":{"entryPoint":13656,"id":26397,"parameterSlots":2,"returnSlots":0},"@setMaxNumberOfReserves_9063":{"entryPoint":null,"id":9063,"parameterSlots":1,"returnSlots":0},"@setReserveInterestRateStrategyAddress_26349":{"entryPoint":3921,"id":26349,"parameterSlots":2,"returnSlots":0},"@setUserEMode_26502":{"entryPoint":4415,"id":26502,"parameterSlots":1,"returnSlots":0},"@setUserUseReserveAsCollateral_25769":{"entryPoint":6006,"id":25769,"parameterSlots":2,"returnSlots":0},"@supplyWithPermit_25457":{"entryPoint":3489,"id":25457,"parameterSlots":8,"returnSlots":0},"@supply_25401":{"entryPoint":6475,"id":25401,"parameterSlots":4,"returnSlots":0},"@swapBorrowRateMode_25717":{"entryPoint":8180,"id":25717,"parameterSlots":2,"returnSlots":0},"@updateBridgeProtocolFee_26411":{"entryPoint":5218,"id":26411,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiums_26431":{"entryPoint":10089,"id":26431,"parameterSlots":2,"returnSlots":0},"@withdraw_25496":{"entryPoint":6734,"id":25496,"parameterSlots":3,"returnSlots":1},"abi_decode_address":{"entryPoint":16155,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":17869,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_calldata":{"entryPoint":17023,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":16613,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":19300,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":16451,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address":{"entryPoint":17726,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool":{"entryPoint":16185,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256":{"entryPoint":19034,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":18400,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16":{"entryPoint":17096,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16":{"entryPoint":18067,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_addresst_bool":{"entryPoint":17327,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr":{"entryPoint":19205,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":17825,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_address":{"entryPoint":17454,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16":{"entryPoint":17373,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":16324,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":16535,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_uint256t_address":{"entryPoint":17253,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":19135,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address":{"entryPoint":18004,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":17938,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":20180,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128t_uint128":{"entryPoint":18349,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint16":{"entryPoint":17226,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":16588,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":19794,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":21293,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint8":{"entryPoint":16508,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr":{"entryPoint":18722,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint128":{"entryPoint":18317,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16":{"entryPoint":16289,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":16307,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn":{"entryPoint":20742,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":20823,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_InterestRateMode":{"entryPoint":19620,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":17520,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ReserveConfigurationMap":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":18465,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed":{"entryPoint":20345,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed":{"entryPoint":19329,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed":{"entryPoint":21494,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed":{"entryPoint":20446,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed":{"entryPoint":20871,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed":{"entryPoint":20036,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed":{"entryPoint":19679,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19554,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed":{"entryPoint":17627,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed":{"entryPoint":16642,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed":{"entryPoint":19819,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":20290,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_uint128":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":18643,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_5567":{"entryPoint":18602,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":21822,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":21846,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":21714,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":21367,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":19958,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint16":{"entryPoint":20256,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":21437,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":20209,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":21775,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":19573,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":21390,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":18555,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_revert_address":{"entryPoint":16121,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":16171,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:49822:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:124"},"nodeType":"YulFunctionCall","src":"148:12:124"},"nodeType":"YulExpressionStatement","src":"148:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:124"},"nodeType":"YulFunctionCall","src":"89:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:124"},"nodeType":"YulFunctionCall","src":"79:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:124"},"nodeType":"YulFunctionCall","src":"72:73:124"},"nodeType":"YulIf","src":"69:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:124","type":""}],"src":"14:154:124"},{"body":{"nodeType":"YulBlock","src":"222:85:124","statements":[{"nodeType":"YulAssignment","src":"232:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"254:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:124"},"nodeType":"YulFunctionCall","src":"241:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"295:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"270:24:124"},"nodeType":"YulFunctionCall","src":"270:31:124"},"nodeType":"YulExpressionStatement","src":"270:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"201:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"212:5:124","type":""}],"src":"173:134:124"},{"body":{"nodeType":"YulBlock","src":"354:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:124"},"nodeType":"YulFunctionCall","src":"410:12:124"},"nodeType":"YulExpressionStatement","src":"410:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"377:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"398:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"391:6:124"},"nodeType":"YulFunctionCall","src":"391:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"384:6:124"},"nodeType":"YulFunctionCall","src":"384:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"374:2:124"},"nodeType":"YulFunctionCall","src":"374:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"367:6:124"},"nodeType":"YulFunctionCall","src":"367:40:124"},"nodeType":"YulIf","src":"364:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"343:5:124","type":""}],"src":"312:118:124"},{"body":{"nodeType":"YulBlock","src":"570:599:124","statements":[{"body":{"nodeType":"YulBlock","src":"617:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"626:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"629:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"619:6:124"},"nodeType":"YulFunctionCall","src":"619:12:124"},"nodeType":"YulExpressionStatement","src":"619:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"591:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"600:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"587:3:124"},"nodeType":"YulFunctionCall","src":"587:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"612:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"583:3:124"},"nodeType":"YulFunctionCall","src":"583:33:124"},"nodeType":"YulIf","src":"580:53:124"},{"nodeType":"YulVariableDeclaration","src":"642:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"668:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"655:12:124"},"nodeType":"YulFunctionCall","src":"655:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"646:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"687:24:124"},"nodeType":"YulFunctionCall","src":"687:31:124"},"nodeType":"YulExpressionStatement","src":"687:31:124"},{"nodeType":"YulAssignment","src":"727:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"737:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"727:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"751:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"783:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"794:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"779:3:124"},"nodeType":"YulFunctionCall","src":"779:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"766:12:124"},"nodeType":"YulFunctionCall","src":"766:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"755:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"832:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"807:24:124"},"nodeType":"YulFunctionCall","src":"807:33:124"},"nodeType":"YulExpressionStatement","src":"807:33:124"},{"nodeType":"YulAssignment","src":"849:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"859:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"849:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"875:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"907:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"918:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"903:3:124"},"nodeType":"YulFunctionCall","src":"903:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"890:12:124"},"nodeType":"YulFunctionCall","src":"890:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"879:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"956:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"931:24:124"},"nodeType":"YulFunctionCall","src":"931:33:124"},"nodeType":"YulExpressionStatement","src":"931:33:124"},{"nodeType":"YulAssignment","src":"973:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"983:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"973:6:124"}]},{"nodeType":"YulAssignment","src":"999:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1026:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1022:3:124"},"nodeType":"YulFunctionCall","src":"1022:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1009:12:124"},"nodeType":"YulFunctionCall","src":"1009:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"999:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1050:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1082:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1093:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1078:3:124"},"nodeType":"YulFunctionCall","src":"1078:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1065:12:124"},"nodeType":"YulFunctionCall","src":"1065:33:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"1054:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"1129:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1107:21:124"},"nodeType":"YulFunctionCall","src":"1107:30:124"},"nodeType":"YulExpressionStatement","src":"1107:30:124"},{"nodeType":"YulAssignment","src":"1146:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"1156:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1146:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"504:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"515:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"527:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"535:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"543:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"551:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"559:6:124","type":""}],"src":"435:734:124"},{"body":{"nodeType":"YulBlock","src":"1275:76:124","statements":[{"nodeType":"YulAssignment","src":"1285:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1297:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1293:3:124"},"nodeType":"YulFunctionCall","src":"1293:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1285:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1327:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1338:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:124"},"nodeType":"YulFunctionCall","src":"1320:25:124"},"nodeType":"YulExpressionStatement","src":"1320:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1244:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1255:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1266:4:124","type":""}],"src":"1174:177:124"},{"body":{"nodeType":"YulBlock","src":"1404:111:124","statements":[{"nodeType":"YulAssignment","src":"1414:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1436:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1423:12:124"},"nodeType":"YulFunctionCall","src":"1423:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1414:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1493:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1502:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1505:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1495:6:124"},"nodeType":"YulFunctionCall","src":"1495:12:124"},"nodeType":"YulExpressionStatement","src":"1495:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1476:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1483:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1472:3:124"},"nodeType":"YulFunctionCall","src":"1472:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1462:2:124"},"nodeType":"YulFunctionCall","src":"1462:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1455:6:124"},"nodeType":"YulFunctionCall","src":"1455:37:124"},"nodeType":"YulIf","src":"1452:57:124"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1383:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1394:5:124","type":""}],"src":"1356:159:124"},{"body":{"nodeType":"YulBlock","src":"1567:109:124","statements":[{"nodeType":"YulAssignment","src":"1577:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1599:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1586:12:124"},"nodeType":"YulFunctionCall","src":"1586:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1577:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1654:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1663:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1666:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1656:6:124"},"nodeType":"YulFunctionCall","src":"1656:12:124"},"nodeType":"YulExpressionStatement","src":"1656:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1628:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1639:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1646:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1635:3:124"},"nodeType":"YulFunctionCall","src":"1635:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1625:2:124"},"nodeType":"YulFunctionCall","src":"1625:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1618:6:124"},"nodeType":"YulFunctionCall","src":"1618:35:124"},"nodeType":"YulIf","src":"1615:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1546:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1557:5:124","type":""}],"src":"1520:156:124"},{"body":{"nodeType":"YulBlock","src":"1867:621:124","statements":[{"body":{"nodeType":"YulBlock","src":"1914:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1916:6:124"},"nodeType":"YulFunctionCall","src":"1916:12:124"},"nodeType":"YulExpressionStatement","src":"1916:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1888:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1897:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1884:3:124"},"nodeType":"YulFunctionCall","src":"1884:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1909:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1880:3:124"},"nodeType":"YulFunctionCall","src":"1880:33:124"},"nodeType":"YulIf","src":"1877:53:124"},{"nodeType":"YulVariableDeclaration","src":"1939:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1965:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1952:12:124"},"nodeType":"YulFunctionCall","src":"1952:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1943:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2009:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1984:24:124"},"nodeType":"YulFunctionCall","src":"1984:31:124"},"nodeType":"YulExpressionStatement","src":"1984:31:124"},{"nodeType":"YulAssignment","src":"2024:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2034:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2024:6:124"}]},{"nodeType":"YulAssignment","src":"2048:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2086:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2071:3:124"},"nodeType":"YulFunctionCall","src":"2071:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2058:12:124"},"nodeType":"YulFunctionCall","src":"2058:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2048:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2099:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2131:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2142:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2127:3:124"},"nodeType":"YulFunctionCall","src":"2127:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2114:12:124"},"nodeType":"YulFunctionCall","src":"2114:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2103:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2180:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2155:24:124"},"nodeType":"YulFunctionCall","src":"2155:33:124"},"nodeType":"YulExpressionStatement","src":"2155:33:124"},{"nodeType":"YulAssignment","src":"2197:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2207:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2197:6:124"}]},{"nodeType":"YulAssignment","src":"2223:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2255:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2266:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2251:3:124"},"nodeType":"YulFunctionCall","src":"2251:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"2233:17:124"},"nodeType":"YulFunctionCall","src":"2233:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2223:6:124"}]},{"nodeType":"YulAssignment","src":"2279:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2306:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2317:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2302:3:124"},"nodeType":"YulFunctionCall","src":"2302:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2289:12:124"},"nodeType":"YulFunctionCall","src":"2289:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2279:6:124"}]},{"nodeType":"YulAssignment","src":"2331:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2373:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2358:3:124"},"nodeType":"YulFunctionCall","src":"2358:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2341:16:124"},"nodeType":"YulFunctionCall","src":"2341:37:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2331:6:124"}]},{"nodeType":"YulAssignment","src":"2387:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2414:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2425:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2410:3:124"},"nodeType":"YulFunctionCall","src":"2410:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2397:12:124"},"nodeType":"YulFunctionCall","src":"2397:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2387:6:124"}]},{"nodeType":"YulAssignment","src":"2439:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2477:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:124"},"nodeType":"YulFunctionCall","src":"2462:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2449:12:124"},"nodeType":"YulFunctionCall","src":"2449:33:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"2439:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1788:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1800:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1808:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1816:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1824:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1832:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1840:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1848:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1856:6:124","type":""}],"src":"1681:807:124"},{"body":{"nodeType":"YulBlock","src":"2625:125:124","statements":[{"nodeType":"YulAssignment","src":"2635:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2647:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:124"},"nodeType":"YulFunctionCall","src":"2643:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2635:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2677:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2692:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2700:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2688:3:124"},"nodeType":"YulFunctionCall","src":"2688:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2670:6:124"},"nodeType":"YulFunctionCall","src":"2670:74:124"},"nodeType":"YulExpressionStatement","src":"2670:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2594:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2605:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2616:4:124","type":""}],"src":"2493:257:124"},{"body":{"nodeType":"YulBlock","src":"2799:75:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2816:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2825:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2832:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2821:3:124"},"nodeType":"YulFunctionCall","src":"2821:46:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2809:6:124"},"nodeType":"YulFunctionCall","src":"2809:59:124"},"nodeType":"YulExpressionStatement","src":"2809:59:124"}]},"name":"abi_encode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2783:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2790:3:124","type":""}],"src":"2755:119:124"},{"body":{"nodeType":"YulBlock","src":"2980:117:124","statements":[{"nodeType":"YulAssignment","src":"2990:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3002:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3013:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2998:3:124"},"nodeType":"YulFunctionCall","src":"2998:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2990:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3032:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3047:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3055:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3043:3:124"},"nodeType":"YulFunctionCall","src":"3043:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3025:6:124"},"nodeType":"YulFunctionCall","src":"3025:66:124"},"nodeType":"YulExpressionStatement","src":"3025:66:124"}]},"name":"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2949:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2960:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2971:4:124","type":""}],"src":"2879:218:124"},{"body":{"nodeType":"YulBlock","src":"3189:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"3235:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3244:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3247:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3237:6:124"},"nodeType":"YulFunctionCall","src":"3237:12:124"},"nodeType":"YulExpressionStatement","src":"3237:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3210:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3219:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3206:3:124"},"nodeType":"YulFunctionCall","src":"3206:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3231:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3202:3:124"},"nodeType":"YulFunctionCall","src":"3202:32:124"},"nodeType":"YulIf","src":"3199:52:124"},{"nodeType":"YulVariableDeclaration","src":"3260:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3273:12:124"},"nodeType":"YulFunctionCall","src":"3273:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3264:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3330:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3305:24:124"},"nodeType":"YulFunctionCall","src":"3305:31:124"},"nodeType":"YulExpressionStatement","src":"3305:31:124"},{"nodeType":"YulAssignment","src":"3345:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3355:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3345:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3369:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3412:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3397:3:124"},"nodeType":"YulFunctionCall","src":"3397:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3384:12:124"},"nodeType":"YulFunctionCall","src":"3384:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3373:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3450:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3425:24:124"},"nodeType":"YulFunctionCall","src":"3425:33:124"},"nodeType":"YulExpressionStatement","src":"3425:33:124"},{"nodeType":"YulAssignment","src":"3467:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3477:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3467:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3147:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3158:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3170:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3178:6:124","type":""}],"src":"3102:388:124"},{"body":{"nodeType":"YulBlock","src":"3563:114:124","statements":[{"body":{"nodeType":"YulBlock","src":"3609:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3618:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3621:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3611:6:124"},"nodeType":"YulFunctionCall","src":"3611:12:124"},"nodeType":"YulExpressionStatement","src":"3611:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3584:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3593:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3580:3:124"},"nodeType":"YulFunctionCall","src":"3580:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3605:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3576:3:124"},"nodeType":"YulFunctionCall","src":"3576:32:124"},"nodeType":"YulIf","src":"3573:52:124"},{"nodeType":"YulAssignment","src":"3634:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3661:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3644:16:124"},"nodeType":"YulFunctionCall","src":"3644:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3634:6:124"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3529:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3540:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3552:6:124","type":""}],"src":"3495:182:124"},{"body":{"nodeType":"YulBlock","src":"3786:279:124","statements":[{"body":{"nodeType":"YulBlock","src":"3832:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3841:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3844:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3834:6:124"},"nodeType":"YulFunctionCall","src":"3834:12:124"},"nodeType":"YulExpressionStatement","src":"3834:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3807:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3816:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3803:3:124"},"nodeType":"YulFunctionCall","src":"3803:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3828:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3799:3:124"},"nodeType":"YulFunctionCall","src":"3799:32:124"},"nodeType":"YulIf","src":"3796:52:124"},{"nodeType":"YulVariableDeclaration","src":"3857:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3883:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3870:12:124"},"nodeType":"YulFunctionCall","src":"3870:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3861:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3927:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3902:24:124"},"nodeType":"YulFunctionCall","src":"3902:31:124"},"nodeType":"YulExpressionStatement","src":"3902:31:124"},{"nodeType":"YulAssignment","src":"3942:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3952:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3942:6:124"}]},{"nodeType":"YulAssignment","src":"3966:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3993:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4004:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3989:3:124"},"nodeType":"YulFunctionCall","src":"3989:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3976:12:124"},"nodeType":"YulFunctionCall","src":"3976:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3966:6:124"}]},{"nodeType":"YulAssignment","src":"4017:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4044:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4055:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4040:3:124"},"nodeType":"YulFunctionCall","src":"4040:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4027:12:124"},"nodeType":"YulFunctionCall","src":"4027:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4017:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3736:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3747:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3759:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3767:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3775:6:124","type":""}],"src":"3682:383:124"},{"body":{"nodeType":"YulBlock","src":"4140:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"4186:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4195:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4198:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4188:6:124"},"nodeType":"YulFunctionCall","src":"4188:12:124"},"nodeType":"YulExpressionStatement","src":"4188:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4161:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4157:3:124"},"nodeType":"YulFunctionCall","src":"4157:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4182:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4153:3:124"},"nodeType":"YulFunctionCall","src":"4153:32:124"},"nodeType":"YulIf","src":"4150:52:124"},{"nodeType":"YulAssignment","src":"4211:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4234:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4221:12:124"},"nodeType":"YulFunctionCall","src":"4221:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4211:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4106:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4117:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4129:6:124","type":""}],"src":"4070:180:124"},{"body":{"nodeType":"YulBlock","src":"4325:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"4371:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4380:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4383:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4373:6:124"},"nodeType":"YulFunctionCall","src":"4373:12:124"},"nodeType":"YulExpressionStatement","src":"4373:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4346:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4355:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4342:3:124"},"nodeType":"YulFunctionCall","src":"4342:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4367:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4338:3:124"},"nodeType":"YulFunctionCall","src":"4338:32:124"},"nodeType":"YulIf","src":"4335:52:124"},{"nodeType":"YulVariableDeclaration","src":"4396:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4422:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4409:12:124"},"nodeType":"YulFunctionCall","src":"4409:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4400:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4466:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4441:24:124"},"nodeType":"YulFunctionCall","src":"4441:31:124"},"nodeType":"YulExpressionStatement","src":"4441:31:124"},{"nodeType":"YulAssignment","src":"4481:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4491:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4481:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4291:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4302:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4314:6:124","type":""}],"src":"4255:247:124"},{"body":{"nodeType":"YulBlock","src":"4574:29:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4583:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4594:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4588:5:124"},"nodeType":"YulFunctionCall","src":"4588:12:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4576:6:124"},"nodeType":"YulFunctionCall","src":"4576:25:124"},"nodeType":"YulExpressionStatement","src":"4576:25:124"}]},"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4558:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4565:3:124","type":""}],"src":"4507:96:124"},{"body":{"nodeType":"YulBlock","src":"4651:53:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4668:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4677:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4684:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4673:3:124"},"nodeType":"YulFunctionCall","src":"4673:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4661:6:124"},"nodeType":"YulFunctionCall","src":"4661:37:124"},"nodeType":"YulExpressionStatement","src":"4661:37:124"}]},"name":"abi_encode_uint40","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4635:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4642:3:124","type":""}],"src":"4608:96:124"},{"body":{"nodeType":"YulBlock","src":"4752:47:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4769:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4778:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4785:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4774:3:124"},"nodeType":"YulFunctionCall","src":"4774:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4762:6:124"},"nodeType":"YulFunctionCall","src":"4762:31:124"},"nodeType":"YulExpressionStatement","src":"4762:31:124"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4736:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4743:3:124","type":""}],"src":"4709:90:124"},{"body":{"nodeType":"YulBlock","src":"4848:83:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4865:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4874:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4881:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4870:3:124"},"nodeType":"YulFunctionCall","src":"4870:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4858:6:124"},"nodeType":"YulFunctionCall","src":"4858:67:124"},"nodeType":"YulExpressionStatement","src":"4858:67:124"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4832:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4839:3:124","type":""}],"src":"4804:127:124"},{"body":{"nodeType":"YulBlock","src":"5097:1948:124","statements":[{"nodeType":"YulAssignment","src":"5107:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5119:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5130:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5115:3:124"},"nodeType":"YulFunctionCall","src":"5115:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5107:4:124"}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5191:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5185:5:124"},"nodeType":"YulFunctionCall","src":"5185:13:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5200:9:124"}],"functionName":{"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulIdentifier","src":"5143:41:124"},"nodeType":"YulFunctionCall","src":"5143:67:124"},"nodeType":"YulExpressionStatement","src":"5143:67:124"},{"nodeType":"YulVariableDeclaration","src":"5219:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5249:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5257:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5245:3:124"},"nodeType":"YulFunctionCall","src":"5245:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5239:5:124"},"nodeType":"YulFunctionCall","src":"5239:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5223:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5291:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5309:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5320:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5305:3:124"},"nodeType":"YulFunctionCall","src":"5305:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5272:18:124"},"nodeType":"YulFunctionCall","src":"5272:54:124"},"nodeType":"YulExpressionStatement","src":"5272:54:124"},{"nodeType":"YulVariableDeclaration","src":"5335:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5367:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5375:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5363:3:124"},"nodeType":"YulFunctionCall","src":"5363:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5357:5:124"},"nodeType":"YulFunctionCall","src":"5357:24:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"5339:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"5409:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5429:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5440:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5425:3:124"},"nodeType":"YulFunctionCall","src":"5425:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5390:18:124"},"nodeType":"YulFunctionCall","src":"5390:56:124"},"nodeType":"YulExpressionStatement","src":"5390:56:124"},{"nodeType":"YulVariableDeclaration","src":"5455:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5487:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5495:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5483:3:124"},"nodeType":"YulFunctionCall","src":"5483:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5477:5:124"},"nodeType":"YulFunctionCall","src":"5477:24:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"5459:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"5529:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5549:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5560:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5545:3:124"},"nodeType":"YulFunctionCall","src":"5545:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5510:18:124"},"nodeType":"YulFunctionCall","src":"5510:56:124"},"nodeType":"YulExpressionStatement","src":"5510:56:124"},{"nodeType":"YulVariableDeclaration","src":"5575:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5607:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5615:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5603:3:124"},"nodeType":"YulFunctionCall","src":"5603:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5597:5:124"},"nodeType":"YulFunctionCall","src":"5597:24:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"5579:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"5649:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5669:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5680:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5665:3:124"},"nodeType":"YulFunctionCall","src":"5665:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5630:18:124"},"nodeType":"YulFunctionCall","src":"5630:56:124"},"nodeType":"YulExpressionStatement","src":"5630:56:124"},{"nodeType":"YulVariableDeclaration","src":"5695:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5727:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5735:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5723:3:124"},"nodeType":"YulFunctionCall","src":"5723:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5717:5:124"},"nodeType":"YulFunctionCall","src":"5717:24:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"5699:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"5769:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5789:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5800:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5785:3:124"},"nodeType":"YulFunctionCall","src":"5785:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5750:18:124"},"nodeType":"YulFunctionCall","src":"5750:56:124"},"nodeType":"YulExpressionStatement","src":"5750:56:124"},{"nodeType":"YulVariableDeclaration","src":"5815:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5847:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5855:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5843:3:124"},"nodeType":"YulFunctionCall","src":"5843:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5837:5:124"},"nodeType":"YulFunctionCall","src":"5837:24:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"5819:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"5888:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5908:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5919:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5904:3:124"},"nodeType":"YulFunctionCall","src":"5904:20:124"}],"functionName":{"name":"abi_encode_uint40","nodeType":"YulIdentifier","src":"5870:17:124"},"nodeType":"YulFunctionCall","src":"5870:55:124"},"nodeType":"YulExpressionStatement","src":"5870:55:124"},{"nodeType":"YulVariableDeclaration","src":"5934:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5966:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5974:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5962:3:124"},"nodeType":"YulFunctionCall","src":"5962:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5956:5:124"},"nodeType":"YulFunctionCall","src":"5956:24:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"5938:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"6007:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6027:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6038:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6023:3:124"},"nodeType":"YulFunctionCall","src":"6023:20:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"5989:17:124"},"nodeType":"YulFunctionCall","src":"5989:55:124"},"nodeType":"YulExpressionStatement","src":"5989:55:124"},{"nodeType":"YulVariableDeclaration","src":"6053:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6063:6:124","type":"","value":"0x0100"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6057:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6078:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6110:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6118:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6106:3:124"},"nodeType":"YulFunctionCall","src":"6106:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6100:5:124"},"nodeType":"YulFunctionCall","src":"6100:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"6082:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"6150:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6170:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6181:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6166:3:124"},"nodeType":"YulFunctionCall","src":"6166:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6131:18:124"},"nodeType":"YulFunctionCall","src":"6131:54:124"},"nodeType":"YulExpressionStatement","src":"6131:54:124"},{"nodeType":"YulVariableDeclaration","src":"6194:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6204:6:124","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6198:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6219:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6259:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6247:3:124"},"nodeType":"YulFunctionCall","src":"6247:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6241:5:124"},"nodeType":"YulFunctionCall","src":"6241:22:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"6223:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"6291:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6311:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6322:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6307:3:124"},"nodeType":"YulFunctionCall","src":"6307:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6272:18:124"},"nodeType":"YulFunctionCall","src":"6272:54:124"},"nodeType":"YulExpressionStatement","src":"6272:54:124"},{"nodeType":"YulVariableDeclaration","src":"6335:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6345:6:124","type":"","value":"0x0140"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6339:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6360:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6392:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6400:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6388:3:124"},"nodeType":"YulFunctionCall","src":"6388:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6382:5:124"},"nodeType":"YulFunctionCall","src":"6382:22:124"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"6364:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"6432:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6452:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6463:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6448:3:124"},"nodeType":"YulFunctionCall","src":"6448:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6413:18:124"},"nodeType":"YulFunctionCall","src":"6413:54:124"},"nodeType":"YulExpressionStatement","src":"6413:54:124"},{"nodeType":"YulVariableDeclaration","src":"6476:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6486:6:124","type":"","value":"0x0160"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6480:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6501:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6534:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6542:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6530:3:124"},"nodeType":"YulFunctionCall","src":"6530:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6524:5:124"},"nodeType":"YulFunctionCall","src":"6524:22:124"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"6505:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"6574:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6595:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6606:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6591:3:124"},"nodeType":"YulFunctionCall","src":"6591:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6555:18:124"},"nodeType":"YulFunctionCall","src":"6555:55:124"},"nodeType":"YulExpressionStatement","src":"6555:55:124"},{"nodeType":"YulVariableDeclaration","src":"6619:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6629:6:124","type":"","value":"0x0180"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6623:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6644:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6677:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6685:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6673:3:124"},"nodeType":"YulFunctionCall","src":"6673:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6667:5:124"},"nodeType":"YulFunctionCall","src":"6667:22:124"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"6648:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"6717:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6738:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6749:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6734:3:124"},"nodeType":"YulFunctionCall","src":"6734:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6698:18:124"},"nodeType":"YulFunctionCall","src":"6698:55:124"},"nodeType":"YulExpressionStatement","src":"6698:55:124"},{"nodeType":"YulVariableDeclaration","src":"6762:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6772:6:124","type":"","value":"0x01a0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6766:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6787:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6820:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"6828:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6816:3:124"},"nodeType":"YulFunctionCall","src":"6816:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6810:5:124"},"nodeType":"YulFunctionCall","src":"6810:22:124"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"6791:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"6860:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6881:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"6892:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6877:3:124"},"nodeType":"YulFunctionCall","src":"6877:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6841:18:124"},"nodeType":"YulFunctionCall","src":"6841:55:124"},"nodeType":"YulExpressionStatement","src":"6841:55:124"},{"nodeType":"YulVariableDeclaration","src":"6905:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6915:6:124","type":"","value":"0x01c0"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"6909:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6930:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6963:6:124"},{"name":"_7","nodeType":"YulIdentifier","src":"6971:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6959:3:124"},"nodeType":"YulFunctionCall","src":"6959:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6953:5:124"},"nodeType":"YulFunctionCall","src":"6953:22:124"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"6934:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"7003:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7024:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"7035:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7020:3:124"},"nodeType":"YulFunctionCall","src":"7020:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6984:18:124"},"nodeType":"YulFunctionCall","src":"6984:55:124"},"nodeType":"YulExpressionStatement","src":"6984:55:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5066:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5077:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5088:4:124","type":""}],"src":"4936:2109:124"},{"body":{"nodeType":"YulBlock","src":"7122:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"7171:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7180:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7183:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7173:6:124"},"nodeType":"YulFunctionCall","src":"7173:12:124"},"nodeType":"YulExpressionStatement","src":"7173:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7150:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7158:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7146:3:124"},"nodeType":"YulFunctionCall","src":"7146:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7165:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7142:3:124"},"nodeType":"YulFunctionCall","src":"7142:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7135:6:124"},"nodeType":"YulFunctionCall","src":"7135:35:124"},"nodeType":"YulIf","src":"7132:55:124"},{"nodeType":"YulAssignment","src":"7196:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7219:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7206:12:124"},"nodeType":"YulFunctionCall","src":"7206:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7196:6:124"}]},{"body":{"nodeType":"YulBlock","src":"7269:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7278:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7281:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7271:6:124"},"nodeType":"YulFunctionCall","src":"7271:12:124"},"nodeType":"YulExpressionStatement","src":"7271:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7241:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7249:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7238:2:124"},"nodeType":"YulFunctionCall","src":"7238:30:124"},"nodeType":"YulIf","src":"7235:50:124"},{"nodeType":"YulAssignment","src":"7294:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7310:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7318:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7306:3:124"},"nodeType":"YulFunctionCall","src":"7306:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7294:8:124"}]},{"body":{"nodeType":"YulBlock","src":"7375:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7384:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7387:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7377:6:124"},"nodeType":"YulFunctionCall","src":"7377:12:124"},"nodeType":"YulExpressionStatement","src":"7377:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7346:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"7354:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7342:3:124"},"nodeType":"YulFunctionCall","src":"7342:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"7363:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7338:3:124"},"nodeType":"YulFunctionCall","src":"7338:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"7370:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7335:2:124"},"nodeType":"YulFunctionCall","src":"7335:39:124"},"nodeType":"YulIf","src":"7332:59:124"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7085:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7093:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7101:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7111:6:124","type":""}],"src":"7050:347:124"},{"body":{"nodeType":"YulBlock","src":"7558:671:124","statements":[{"body":{"nodeType":"YulBlock","src":"7605:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7614:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7617:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7607:6:124"},"nodeType":"YulFunctionCall","src":"7607:12:124"},"nodeType":"YulExpressionStatement","src":"7607:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7579:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7588:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7575:3:124"},"nodeType":"YulFunctionCall","src":"7575:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7600:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7571:3:124"},"nodeType":"YulFunctionCall","src":"7571:33:124"},"nodeType":"YulIf","src":"7568:53:124"},{"nodeType":"YulVariableDeclaration","src":"7630:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7656:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7643:12:124"},"nodeType":"YulFunctionCall","src":"7643:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7634:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7700:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7675:24:124"},"nodeType":"YulFunctionCall","src":"7675:31:124"},"nodeType":"YulExpressionStatement","src":"7675:31:124"},{"nodeType":"YulAssignment","src":"7715:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7725:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7715:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7739:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7771:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7782:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7767:3:124"},"nodeType":"YulFunctionCall","src":"7767:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7754:12:124"},"nodeType":"YulFunctionCall","src":"7754:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7743:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7820:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7795:24:124"},"nodeType":"YulFunctionCall","src":"7795:33:124"},"nodeType":"YulExpressionStatement","src":"7795:33:124"},{"nodeType":"YulAssignment","src":"7837:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7847:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7837:6:124"}]},{"nodeType":"YulAssignment","src":"7863:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7890:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7901:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7886:3:124"},"nodeType":"YulFunctionCall","src":"7886:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7873:12:124"},"nodeType":"YulFunctionCall","src":"7873:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7863:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7914:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7945:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7956:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7941:3:124"},"nodeType":"YulFunctionCall","src":"7941:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7928:12:124"},"nodeType":"YulFunctionCall","src":"7928:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"7918:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8003:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8012:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8015:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8005:6:124"},"nodeType":"YulFunctionCall","src":"8005:12:124"},"nodeType":"YulExpressionStatement","src":"8005:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7975:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7983:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7972:2:124"},"nodeType":"YulFunctionCall","src":"7972:30:124"},"nodeType":"YulIf","src":"7969:50:124"},{"nodeType":"YulVariableDeclaration","src":"8028:84:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8084:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"8095:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8080:3:124"},"nodeType":"YulFunctionCall","src":"8080:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8104:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8054:25:124"},"nodeType":"YulFunctionCall","src":"8054:58:124"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"8032:8:124","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"8042:8:124","type":""}]},{"nodeType":"YulAssignment","src":"8121:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"8131:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8121:6:124"}]},{"nodeType":"YulAssignment","src":"8148:18:124","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"8158:8:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8148:6:124"}]},{"nodeType":"YulAssignment","src":"8175:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8207:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8218:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8203:3:124"},"nodeType":"YulFunctionCall","src":"8203:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8185:17:124"},"nodeType":"YulFunctionCall","src":"8185:38:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8175:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7484:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7495:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7507:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7515:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7523:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7531:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7539:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7547:6:124","type":""}],"src":"7402:827:124"},{"body":{"nodeType":"YulBlock","src":"8413:83:124","statements":[{"nodeType":"YulAssignment","src":"8423:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8446:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8431:3:124"},"nodeType":"YulFunctionCall","src":"8431:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8423:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8465:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8482:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8476:5:124"},"nodeType":"YulFunctionCall","src":"8476:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8458:6:124"},"nodeType":"YulFunctionCall","src":"8458:32:124"},"nodeType":"YulExpressionStatement","src":"8458:32:124"}]},"name":"abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8382:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8393:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8404:4:124","type":""}],"src":"8234:262:124"},{"body":{"nodeType":"YulBlock","src":"8570:115:124","statements":[{"body":{"nodeType":"YulBlock","src":"8616:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8625:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8628:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8618:6:124"},"nodeType":"YulFunctionCall","src":"8618:12:124"},"nodeType":"YulExpressionStatement","src":"8618:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8591:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8600:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8587:3:124"},"nodeType":"YulFunctionCall","src":"8587:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8612:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8583:3:124"},"nodeType":"YulFunctionCall","src":"8583:32:124"},"nodeType":"YulIf","src":"8580:52:124"},{"nodeType":"YulAssignment","src":"8641:38:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8669:9:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8651:17:124"},"nodeType":"YulFunctionCall","src":"8651:28:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8641:6:124"}]}]},"name":"abi_decode_tuple_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8536:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8547:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8559:6:124","type":""}],"src":"8501:184:124"},{"body":{"nodeType":"YulBlock","src":"8791:125:124","statements":[{"nodeType":"YulAssignment","src":"8801:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8813:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8824:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8809:3:124"},"nodeType":"YulFunctionCall","src":"8809:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8801:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8843:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8858:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8866:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8854:3:124"},"nodeType":"YulFunctionCall","src":"8854:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8836:6:124"},"nodeType":"YulFunctionCall","src":"8836:74:124"},"nodeType":"YulExpressionStatement","src":"8836:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8760:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8771:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8782:4:124","type":""}],"src":"8690:226:124"},{"body":{"nodeType":"YulBlock","src":"9042:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"9089:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9098:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9101:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9091:6:124"},"nodeType":"YulFunctionCall","src":"9091:12:124"},"nodeType":"YulExpressionStatement","src":"9091:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9063:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9072:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9059:3:124"},"nodeType":"YulFunctionCall","src":"9059:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9084:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9055:3:124"},"nodeType":"YulFunctionCall","src":"9055:33:124"},"nodeType":"YulIf","src":"9052:53:124"},{"nodeType":"YulVariableDeclaration","src":"9114:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9140:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9127:12:124"},"nodeType":"YulFunctionCall","src":"9127:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9118:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9184:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9159:24:124"},"nodeType":"YulFunctionCall","src":"9159:31:124"},"nodeType":"YulExpressionStatement","src":"9159:31:124"},{"nodeType":"YulAssignment","src":"9199:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9209:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9199:6:124"}]},{"nodeType":"YulAssignment","src":"9223:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9250:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9261:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9246:3:124"},"nodeType":"YulFunctionCall","src":"9246:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9233:12:124"},"nodeType":"YulFunctionCall","src":"9233:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9223:6:124"}]},{"nodeType":"YulAssignment","src":"9274:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9301:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9312:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9297:3:124"},"nodeType":"YulFunctionCall","src":"9297:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9284:12:124"},"nodeType":"YulFunctionCall","src":"9284:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9274:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9325:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9357:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9368:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9353:3:124"},"nodeType":"YulFunctionCall","src":"9353:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9340:12:124"},"nodeType":"YulFunctionCall","src":"9340:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9329:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9406:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9381:24:124"},"nodeType":"YulFunctionCall","src":"9381:33:124"},"nodeType":"YulExpressionStatement","src":"9381:33:124"},{"nodeType":"YulAssignment","src":"9423:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9433:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9423:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8995:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9007:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9015:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9023:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9031:6:124","type":""}],"src":"8921:525:124"},{"body":{"nodeType":"YulBlock","src":"9535:298:124","statements":[{"body":{"nodeType":"YulBlock","src":"9581:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9590:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9593:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9583:6:124"},"nodeType":"YulFunctionCall","src":"9583:12:124"},"nodeType":"YulExpressionStatement","src":"9583:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9556:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9565:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9552:3:124"},"nodeType":"YulFunctionCall","src":"9552:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9577:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9548:3:124"},"nodeType":"YulFunctionCall","src":"9548:32:124"},"nodeType":"YulIf","src":"9545:52:124"},{"nodeType":"YulVariableDeclaration","src":"9606:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9632:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9619:12:124"},"nodeType":"YulFunctionCall","src":"9619:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9610:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9676:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9651:24:124"},"nodeType":"YulFunctionCall","src":"9651:31:124"},"nodeType":"YulExpressionStatement","src":"9651:31:124"},{"nodeType":"YulAssignment","src":"9691:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9701:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9691:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9715:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9747:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9758:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9743:3:124"},"nodeType":"YulFunctionCall","src":"9743:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9730:12:124"},"nodeType":"YulFunctionCall","src":"9730:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9719:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9793:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"9771:21:124"},"nodeType":"YulFunctionCall","src":"9771:30:124"},"nodeType":"YulExpressionStatement","src":"9771:30:124"},{"nodeType":"YulAssignment","src":"9810:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9820:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9810:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9493:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9504:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9516:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9524:6:124","type":""}],"src":"9451:382:124"},{"body":{"nodeType":"YulBlock","src":"9958:409:124","statements":[{"body":{"nodeType":"YulBlock","src":"10005:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10014:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10017:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10007:6:124"},"nodeType":"YulFunctionCall","src":"10007:12:124"},"nodeType":"YulExpressionStatement","src":"10007:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9979:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9988:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9975:3:124"},"nodeType":"YulFunctionCall","src":"9975:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10000:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9971:3:124"},"nodeType":"YulFunctionCall","src":"9971:33:124"},"nodeType":"YulIf","src":"9968:53:124"},{"nodeType":"YulVariableDeclaration","src":"10030:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10056:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10043:12:124"},"nodeType":"YulFunctionCall","src":"10043:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10034:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10100:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10075:24:124"},"nodeType":"YulFunctionCall","src":"10075:31:124"},"nodeType":"YulExpressionStatement","src":"10075:31:124"},{"nodeType":"YulAssignment","src":"10115:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10125:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10115:6:124"}]},{"nodeType":"YulAssignment","src":"10139:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10166:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10177:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10162:3:124"},"nodeType":"YulFunctionCall","src":"10162:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10149:12:124"},"nodeType":"YulFunctionCall","src":"10149:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10139:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"10190:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10222:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10233:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10218:3:124"},"nodeType":"YulFunctionCall","src":"10218:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10205:12:124"},"nodeType":"YulFunctionCall","src":"10205:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10194:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10271:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10246:24:124"},"nodeType":"YulFunctionCall","src":"10246:33:124"},"nodeType":"YulExpressionStatement","src":"10246:33:124"},{"nodeType":"YulAssignment","src":"10288:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10298:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10288:6:124"}]},{"nodeType":"YulAssignment","src":"10314:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10346:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10357:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10342:3:124"},"nodeType":"YulFunctionCall","src":"10342:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"10324:17:124"},"nodeType":"YulFunctionCall","src":"10324:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"10314:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9900:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9911:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9923:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9931:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9939:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9947:6:124","type":""}],"src":"9838:529:124"},{"body":{"nodeType":"YulBlock","src":"10476:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"10522:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10531:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10534:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10524:6:124"},"nodeType":"YulFunctionCall","src":"10524:12:124"},"nodeType":"YulExpressionStatement","src":"10524:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10497:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10506:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10493:3:124"},"nodeType":"YulFunctionCall","src":"10493:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10518:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10489:3:124"},"nodeType":"YulFunctionCall","src":"10489:32:124"},"nodeType":"YulIf","src":"10486:52:124"},{"nodeType":"YulVariableDeclaration","src":"10547:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10573:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10560:12:124"},"nodeType":"YulFunctionCall","src":"10560:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10551:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10617:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10592:24:124"},"nodeType":"YulFunctionCall","src":"10592:31:124"},"nodeType":"YulExpressionStatement","src":"10592:31:124"},{"nodeType":"YulAssignment","src":"10632:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10642:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10632:6:124"}]},{"nodeType":"YulAssignment","src":"10656:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10683:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10694:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10679:3:124"},"nodeType":"YulFunctionCall","src":"10679:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10666:12:124"},"nodeType":"YulFunctionCall","src":"10666:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10656:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"10707:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10739:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10750:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10735:3:124"},"nodeType":"YulFunctionCall","src":"10735:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10722:12:124"},"nodeType":"YulFunctionCall","src":"10722:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10711:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10788:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10763:24:124"},"nodeType":"YulFunctionCall","src":"10763:33:124"},"nodeType":"YulExpressionStatement","src":"10763:33:124"},{"nodeType":"YulAssignment","src":"10805:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10815:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10805:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10426:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10437:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10449:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10457:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10465:6:124","type":""}],"src":"10372:456:124"},{"body":{"nodeType":"YulBlock","src":"10883:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"10893:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10913:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10907:5:124"},"nodeType":"YulFunctionCall","src":"10907:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10897:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10935:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"10940:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10928:6:124"},"nodeType":"YulFunctionCall","src":"10928:19:124"},"nodeType":"YulExpressionStatement","src":"10928:19:124"},{"nodeType":"YulVariableDeclaration","src":"10956:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10965:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10960:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11027:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11041:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11051:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11045:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11083:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"11088:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11079:3:124"},"nodeType":"YulFunctionCall","src":"11079:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11092:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11075:3:124"},"nodeType":"YulFunctionCall","src":"11075:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11111:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"11118:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11107:3:124"},"nodeType":"YulFunctionCall","src":"11107:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11122:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11103:3:124"},"nodeType":"YulFunctionCall","src":"11103:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11097:5:124"},"nodeType":"YulFunctionCall","src":"11097:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11068:6:124"},"nodeType":"YulFunctionCall","src":"11068:59:124"},"nodeType":"YulExpressionStatement","src":"11068:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10986:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"10989:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10983:2:124"},"nodeType":"YulFunctionCall","src":"10983:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10997:21:124","statements":[{"nodeType":"YulAssignment","src":"10999:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11008:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"11011:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11004:3:124"},"nodeType":"YulFunctionCall","src":"11004:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10999:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"10979:3:124","statements":[]},"src":"10975:162:124"},{"body":{"nodeType":"YulBlock","src":"11171:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11200:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"11205:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11196:3:124"},"nodeType":"YulFunctionCall","src":"11196:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"11214:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11192:3:124"},"nodeType":"YulFunctionCall","src":"11192:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"11221:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11185:6:124"},"nodeType":"YulFunctionCall","src":"11185:38:124"},"nodeType":"YulExpressionStatement","src":"11185:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11152:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"11155:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11149:2:124"},"nodeType":"YulFunctionCall","src":"11149:13:124"},"nodeType":"YulIf","src":"11146:87:124"},{"nodeType":"YulAssignment","src":"11242:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11257:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11270:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11278:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11266:3:124"},"nodeType":"YulFunctionCall","src":"11266:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"11283:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11262:3:124"},"nodeType":"YulFunctionCall","src":"11262:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11253:3:124"},"nodeType":"YulFunctionCall","src":"11253:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"11353:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11249:3:124"},"nodeType":"YulFunctionCall","src":"11249:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11242:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10860:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10867:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10875:3:124","type":""}],"src":"10833:531:124"},{"body":{"nodeType":"YulBlock","src":"11534:530:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11551:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11562:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11544:6:124"},"nodeType":"YulFunctionCall","src":"11544:21:124"},"nodeType":"YulExpressionStatement","src":"11544:21:124"},{"nodeType":"YulVariableDeclaration","src":"11574:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11584:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11578:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11610:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11621:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11606:3:124"},"nodeType":"YulFunctionCall","src":"11606:18:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11636:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11630:5:124"},"nodeType":"YulFunctionCall","src":"11630:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11645:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11626:3:124"},"nodeType":"YulFunctionCall","src":"11626:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11599:6:124"},"nodeType":"YulFunctionCall","src":"11599:50:124"},"nodeType":"YulExpressionStatement","src":"11599:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11669:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11680:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11665:3:124"},"nodeType":"YulFunctionCall","src":"11665:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11699:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11707:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11695:3:124"},"nodeType":"YulFunctionCall","src":"11695:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11689:5:124"},"nodeType":"YulFunctionCall","src":"11689:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11713:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11685:3:124"},"nodeType":"YulFunctionCall","src":"11685:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11658:6:124"},"nodeType":"YulFunctionCall","src":"11658:59:124"},"nodeType":"YulExpressionStatement","src":"11658:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11737:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11748:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11733:3:124"},"nodeType":"YulFunctionCall","src":"11733:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11767:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11775:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11763:3:124"},"nodeType":"YulFunctionCall","src":"11763:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11757:5:124"},"nodeType":"YulFunctionCall","src":"11757:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11781:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11753:3:124"},"nodeType":"YulFunctionCall","src":"11753:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11726:6:124"},"nodeType":"YulFunctionCall","src":"11726:59:124"},"nodeType":"YulExpressionStatement","src":"11726:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11805:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11816:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11801:3:124"},"nodeType":"YulFunctionCall","src":"11801:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11836:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11844:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11832:3:124"},"nodeType":"YulFunctionCall","src":"11832:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11826:5:124"},"nodeType":"YulFunctionCall","src":"11826:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"11850:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11822:3:124"},"nodeType":"YulFunctionCall","src":"11822:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11794:6:124"},"nodeType":"YulFunctionCall","src":"11794:100:124"},"nodeType":"YulExpressionStatement","src":"11794:100:124"},{"nodeType":"YulVariableDeclaration","src":"11903:43:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11933:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11941:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11929:3:124"},"nodeType":"YulFunctionCall","src":"11929:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11923:5:124"},"nodeType":"YulFunctionCall","src":"11923:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"11907:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11966:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11977:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11962:3:124"},"nodeType":"YulFunctionCall","src":"11962:20:124"},{"kind":"number","nodeType":"YulLiteral","src":"11984:4:124","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11955:6:124"},"nodeType":"YulFunctionCall","src":"11955:34:124"},"nodeType":"YulExpressionStatement","src":"11955:34:124"},{"nodeType":"YulAssignment","src":"11998:60:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"12024:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:124"},"nodeType":"YulFunctionCall","src":"12038:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12006:17:124"},"nodeType":"YulFunctionCall","src":"12006:52:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11998:4:124"}]}]},"name":"abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11503:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11514:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11525:4:124","type":""}],"src":"11369:695:124"},{"body":{"nodeType":"YulBlock","src":"12207:675:124","statements":[{"body":{"nodeType":"YulBlock","src":"12254:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12263:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12266:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12256:6:124"},"nodeType":"YulFunctionCall","src":"12256:12:124"},"nodeType":"YulExpressionStatement","src":"12256:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12228:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12237:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12224:3:124"},"nodeType":"YulFunctionCall","src":"12224:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"12249:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12220:3:124"},"nodeType":"YulFunctionCall","src":"12220:33:124"},"nodeType":"YulIf","src":"12217:53:124"},{"nodeType":"YulVariableDeclaration","src":"12279:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12305:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12292:12:124"},"nodeType":"YulFunctionCall","src":"12292:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12283:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12349:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12324:24:124"},"nodeType":"YulFunctionCall","src":"12324:31:124"},"nodeType":"YulExpressionStatement","src":"12324:31:124"},{"nodeType":"YulAssignment","src":"12364:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"12374:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12364:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12388:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12420:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12431:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12416:3:124"},"nodeType":"YulFunctionCall","src":"12416:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12403:12:124"},"nodeType":"YulFunctionCall","src":"12403:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12392:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12469:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12444:24:124"},"nodeType":"YulFunctionCall","src":"12444:33:124"},"nodeType":"YulExpressionStatement","src":"12444:33:124"},{"nodeType":"YulAssignment","src":"12486:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"12496:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"12486:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12512:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12544:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12555:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12540:3:124"},"nodeType":"YulFunctionCall","src":"12540:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12527:12:124"},"nodeType":"YulFunctionCall","src":"12527:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"12516:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"12593:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12568:24:124"},"nodeType":"YulFunctionCall","src":"12568:33:124"},"nodeType":"YulExpressionStatement","src":"12568:33:124"},{"nodeType":"YulAssignment","src":"12610:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"12620:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"12610:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12636:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12668:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12679:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12664:3:124"},"nodeType":"YulFunctionCall","src":"12664:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12651:12:124"},"nodeType":"YulFunctionCall","src":"12651:32:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"12640:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"12717:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12692:24:124"},"nodeType":"YulFunctionCall","src":"12692:33:124"},"nodeType":"YulExpressionStatement","src":"12692:33:124"},{"nodeType":"YulAssignment","src":"12734:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"12744:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"12734:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12760:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12792:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12803:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12788:3:124"},"nodeType":"YulFunctionCall","src":"12788:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12775:12:124"},"nodeType":"YulFunctionCall","src":"12775:33:124"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"12764:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"12842:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12817:24:124"},"nodeType":"YulFunctionCall","src":"12817:33:124"},"nodeType":"YulExpressionStatement","src":"12817:33:124"},{"nodeType":"YulAssignment","src":"12859:17:124","value":{"name":"value_4","nodeType":"YulIdentifier","src":"12869:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"12859:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12141:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12152:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12164:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12172:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12180:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12188:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12196:6:124","type":""}],"src":"12069:813:124"},{"body":{"nodeType":"YulBlock","src":"12974:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"13020:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13029:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13032:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13022:6:124"},"nodeType":"YulFunctionCall","src":"13022:12:124"},"nodeType":"YulExpressionStatement","src":"13022:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12995:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13004:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12991:3:124"},"nodeType":"YulFunctionCall","src":"12991:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13016:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12987:3:124"},"nodeType":"YulFunctionCall","src":"12987:32:124"},"nodeType":"YulIf","src":"12984:52:124"},{"nodeType":"YulVariableDeclaration","src":"13045:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13071:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13058:12:124"},"nodeType":"YulFunctionCall","src":"13058:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13049:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13115:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13090:24:124"},"nodeType":"YulFunctionCall","src":"13090:31:124"},"nodeType":"YulExpressionStatement","src":"13090:31:124"},{"nodeType":"YulAssignment","src":"13130:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13140:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13130:6:124"}]},{"nodeType":"YulAssignment","src":"13154:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13181:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13192:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13177:3:124"},"nodeType":"YulFunctionCall","src":"13177:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13164:12:124"},"nodeType":"YulFunctionCall","src":"13164:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13154:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12932:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12943:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12955:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12963:6:124","type":""}],"src":"12887:315:124"},{"body":{"nodeType":"YulBlock","src":"13291:283:124","statements":[{"body":{"nodeType":"YulBlock","src":"13340:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13349:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13352:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13342:6:124"},"nodeType":"YulFunctionCall","src":"13342:12:124"},"nodeType":"YulExpressionStatement","src":"13342:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13319:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13327:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13315:3:124"},"nodeType":"YulFunctionCall","src":"13315:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"13334:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13311:3:124"},"nodeType":"YulFunctionCall","src":"13311:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13304:6:124"},"nodeType":"YulFunctionCall","src":"13304:35:124"},"nodeType":"YulIf","src":"13301:55:124"},{"nodeType":"YulAssignment","src":"13365:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13388:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13375:12:124"},"nodeType":"YulFunctionCall","src":"13375:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"13365:6:124"}]},{"body":{"nodeType":"YulBlock","src":"13438:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13447:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13450:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13440:6:124"},"nodeType":"YulFunctionCall","src":"13440:12:124"},"nodeType":"YulExpressionStatement","src":"13440:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13410:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13418:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13407:2:124"},"nodeType":"YulFunctionCall","src":"13407:30:124"},"nodeType":"YulIf","src":"13404:50:124"},{"nodeType":"YulAssignment","src":"13463:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13479:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13487:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13475:3:124"},"nodeType":"YulFunctionCall","src":"13475:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"13463:8:124"}]},{"body":{"nodeType":"YulBlock","src":"13552:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13561:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13564:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13554:6:124"},"nodeType":"YulFunctionCall","src":"13554:12:124"},"nodeType":"YulExpressionStatement","src":"13554:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13515:6:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13527:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"13530:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13523:3:124"},"nodeType":"YulFunctionCall","src":"13523:14:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13511:3:124"},"nodeType":"YulFunctionCall","src":"13511:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"13540:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13507:3:124"},"nodeType":"YulFunctionCall","src":"13507:38:124"},{"name":"end","nodeType":"YulIdentifier","src":"13547:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13504:2:124"},"nodeType":"YulFunctionCall","src":"13504:47:124"},"nodeType":"YulIf","src":"13501:67:124"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13254:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"13262:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"13270:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"13280:6:124","type":""}],"src":"13207:367:124"},{"body":{"nodeType":"YulBlock","src":"13684:332:124","statements":[{"body":{"nodeType":"YulBlock","src":"13730:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13739:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13742:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13732:6:124"},"nodeType":"YulFunctionCall","src":"13732:12:124"},"nodeType":"YulExpressionStatement","src":"13732:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13705:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13714:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13701:3:124"},"nodeType":"YulFunctionCall","src":"13701:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13697:3:124"},"nodeType":"YulFunctionCall","src":"13697:32:124"},"nodeType":"YulIf","src":"13694:52:124"},{"nodeType":"YulVariableDeclaration","src":"13755:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13782:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13769:12:124"},"nodeType":"YulFunctionCall","src":"13769:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"13759:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13835:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13844:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13847:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13837:6:124"},"nodeType":"YulFunctionCall","src":"13837:12:124"},"nodeType":"YulExpressionStatement","src":"13837:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13807:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13815:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13804:2:124"},"nodeType":"YulFunctionCall","src":"13804:30:124"},"nodeType":"YulIf","src":"13801:50:124"},{"nodeType":"YulVariableDeclaration","src":"13860:96:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13928:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"13939:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13924:3:124"},"nodeType":"YulFunctionCall","src":"13924:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13948:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"13886:37:124"},"nodeType":"YulFunctionCall","src":"13886:70:124"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"13864:8:124","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"13874:8:124","type":""}]},{"nodeType":"YulAssignment","src":"13965:18:124","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"13975:8:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13965:6:124"}]},{"nodeType":"YulAssignment","src":"13992:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"14002:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13992:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13642:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13653:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13665:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13673:6:124","type":""}],"src":"13579:437:124"},{"body":{"nodeType":"YulBlock","src":"14158:461:124","statements":[{"body":{"nodeType":"YulBlock","src":"14205:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14214:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14217:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14207:6:124"},"nodeType":"YulFunctionCall","src":"14207:12:124"},"nodeType":"YulExpressionStatement","src":"14207:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14179:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14188:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14175:3:124"},"nodeType":"YulFunctionCall","src":"14175:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14200:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14171:3:124"},"nodeType":"YulFunctionCall","src":"14171:33:124"},"nodeType":"YulIf","src":"14168:53:124"},{"nodeType":"YulVariableDeclaration","src":"14230:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14256:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14243:12:124"},"nodeType":"YulFunctionCall","src":"14243:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14234:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14300:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14275:24:124"},"nodeType":"YulFunctionCall","src":"14275:31:124"},"nodeType":"YulExpressionStatement","src":"14275:31:124"},{"nodeType":"YulAssignment","src":"14315:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14325:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14315:6:124"}]},{"nodeType":"YulAssignment","src":"14339:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14366:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14377:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14362:3:124"},"nodeType":"YulFunctionCall","src":"14362:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14349:12:124"},"nodeType":"YulFunctionCall","src":"14349:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14339:6:124"}]},{"nodeType":"YulAssignment","src":"14390:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14417:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14428:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14413:3:124"},"nodeType":"YulFunctionCall","src":"14413:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14400:12:124"},"nodeType":"YulFunctionCall","src":"14400:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"14390:6:124"}]},{"nodeType":"YulAssignment","src":"14441:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14473:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14484:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14469:3:124"},"nodeType":"YulFunctionCall","src":"14469:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"14451:17:124"},"nodeType":"YulFunctionCall","src":"14451:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"14441:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"14497:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14529:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14540:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14525:3:124"},"nodeType":"YulFunctionCall","src":"14525:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14512:12:124"},"nodeType":"YulFunctionCall","src":"14512:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"14501:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14579:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14554:24:124"},"nodeType":"YulFunctionCall","src":"14554:33:124"},"nodeType":"YulExpressionStatement","src":"14554:33:124"},{"nodeType":"YulAssignment","src":"14596:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"14606:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"14596:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14092:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14103:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14115:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14123:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14131:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14139:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14147:6:124","type":""}],"src":"14021:598:124"},{"body":{"nodeType":"YulBlock","src":"14920:1276:124","statements":[{"body":{"nodeType":"YulBlock","src":"14967:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14976:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14979:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14969:6:124"},"nodeType":"YulFunctionCall","src":"14969:12:124"},"nodeType":"YulExpressionStatement","src":"14969:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14941:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14950:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14937:3:124"},"nodeType":"YulFunctionCall","src":"14937:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14962:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14933:3:124"},"nodeType":"YulFunctionCall","src":"14933:33:124"},"nodeType":"YulIf","src":"14930:53:124"},{"nodeType":"YulAssignment","src":"14992:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15021:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15002:18:124"},"nodeType":"YulFunctionCall","src":"15002:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14992:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"15040:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15050:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15044:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15121:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15130:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15133:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15123:6:124"},"nodeType":"YulFunctionCall","src":"15123:12:124"},"nodeType":"YulExpressionStatement","src":"15123:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15100:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15111:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15096:3:124"},"nodeType":"YulFunctionCall","src":"15096:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15083:12:124"},"nodeType":"YulFunctionCall","src":"15083:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15117:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15080:2:124"},"nodeType":"YulFunctionCall","src":"15080:40:124"},"nodeType":"YulIf","src":"15077:60:124"},{"nodeType":"YulVariableDeclaration","src":"15146:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15214:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15242:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15253:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15238:3:124"},"nodeType":"YulFunctionCall","src":"15238:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15225:12:124"},"nodeType":"YulFunctionCall","src":"15225:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15210:3:124"},"nodeType":"YulFunctionCall","src":"15210:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15260:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15172:37:124"},"nodeType":"YulFunctionCall","src":"15172:96:124"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"15150:8:124","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"15160:8:124","type":""}]},{"nodeType":"YulAssignment","src":"15277:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"15287:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"15277:6:124"}]},{"nodeType":"YulAssignment","src":"15304:18:124","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"15314:8:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"15304:6:124"}]},{"body":{"nodeType":"YulBlock","src":"15375:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15384:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15387:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15377:6:124"},"nodeType":"YulFunctionCall","src":"15377:12:124"},"nodeType":"YulExpressionStatement","src":"15377:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15354:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15365:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15350:3:124"},"nodeType":"YulFunctionCall","src":"15350:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15337:12:124"},"nodeType":"YulFunctionCall","src":"15337:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15371:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15334:2:124"},"nodeType":"YulFunctionCall","src":"15334:40:124"},"nodeType":"YulIf","src":"15331:60:124"},{"nodeType":"YulVariableDeclaration","src":"15400:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15468:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15496:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15507:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15492:3:124"},"nodeType":"YulFunctionCall","src":"15492:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15479:12:124"},"nodeType":"YulFunctionCall","src":"15479:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15464:3:124"},"nodeType":"YulFunctionCall","src":"15464:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15514:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15426:37:124"},"nodeType":"YulFunctionCall","src":"15426:96:124"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"15404:8:124","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"15414:8:124","type":""}]},{"nodeType":"YulAssignment","src":"15531:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"15541:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"15531:6:124"}]},{"nodeType":"YulAssignment","src":"15558:18:124","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"15568:8:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"15558:6:124"}]},{"body":{"nodeType":"YulBlock","src":"15629:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15638:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15641:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15631:6:124"},"nodeType":"YulFunctionCall","src":"15631:12:124"},"nodeType":"YulExpressionStatement","src":"15631:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15608:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15619:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15604:3:124"},"nodeType":"YulFunctionCall","src":"15604:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15591:12:124"},"nodeType":"YulFunctionCall","src":"15591:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15625:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15588:2:124"},"nodeType":"YulFunctionCall","src":"15588:40:124"},"nodeType":"YulIf","src":"15585:60:124"},{"nodeType":"YulVariableDeclaration","src":"15654:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15722:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15750:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15761:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15746:3:124"},"nodeType":"YulFunctionCall","src":"15746:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15733:12:124"},"nodeType":"YulFunctionCall","src":"15733:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15718:3:124"},"nodeType":"YulFunctionCall","src":"15718:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15768:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15680:37:124"},"nodeType":"YulFunctionCall","src":"15680:96:124"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"15658:8:124","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"15668:8:124","type":""}]},{"nodeType":"YulAssignment","src":"15785:18:124","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"15795:8:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"15785:6:124"}]},{"nodeType":"YulAssignment","src":"15812:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"15822:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"15812:6:124"}]},{"nodeType":"YulAssignment","src":"15839:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15883:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15868:3:124"},"nodeType":"YulFunctionCall","src":"15868:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15849:18:124"},"nodeType":"YulFunctionCall","src":"15849:39:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"15839:6:124"}]},{"body":{"nodeType":"YulBlock","src":"15942:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15951:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15954:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15944:6:124"},"nodeType":"YulFunctionCall","src":"15944:12:124"},"nodeType":"YulExpressionStatement","src":"15944:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15920:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15931:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15916:3:124"},"nodeType":"YulFunctionCall","src":"15916:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15903:12:124"},"nodeType":"YulFunctionCall","src":"15903:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15938:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15900:2:124"},"nodeType":"YulFunctionCall","src":"15900:41:124"},"nodeType":"YulIf","src":"15897:61:124"},{"nodeType":"YulVariableDeclaration","src":"15967:111:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16023:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16062:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16047:3:124"},"nodeType":"YulFunctionCall","src":"16047:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16034:12:124"},"nodeType":"YulFunctionCall","src":"16034:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16019:3:124"},"nodeType":"YulFunctionCall","src":"16019:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16070:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"15993:25:124"},"nodeType":"YulFunctionCall","src":"15993:85:124"},"variables":[{"name":"value8_1","nodeType":"YulTypedName","src":"15971:8:124","type":""},{"name":"value9_1","nodeType":"YulTypedName","src":"15981:8:124","type":""}]},{"nodeType":"YulAssignment","src":"16087:18:124","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"16097:8:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"16087:6:124"}]},{"nodeType":"YulAssignment","src":"16114:18:124","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"16124:8:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"16114:6:124"}]},{"nodeType":"YulAssignment","src":"16141:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16185:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16170:3:124"},"nodeType":"YulFunctionCall","src":"16170:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"16152:17:124"},"nodeType":"YulFunctionCall","src":"16152:38:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"16141:7:124"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14805:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14816:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14828:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14836:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14844:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14852:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14860:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14868:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"14876:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"14884:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"14892:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"14900:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"14908:7:124","type":""}],"src":"14624:1572:124"},{"body":{"nodeType":"YulBlock","src":"16250:139:124","statements":[{"nodeType":"YulAssignment","src":"16260:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"16282:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16269:12:124"},"nodeType":"YulFunctionCall","src":"16269:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16260:5:124"}]},{"body":{"nodeType":"YulBlock","src":"16367:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16376:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16379:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16369:6:124"},"nodeType":"YulFunctionCall","src":"16369:12:124"},"nodeType":"YulExpressionStatement","src":"16369:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16311:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16322:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16329:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16318:3:124"},"nodeType":"YulFunctionCall","src":"16318:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16308:2:124"},"nodeType":"YulFunctionCall","src":"16308:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16301:6:124"},"nodeType":"YulFunctionCall","src":"16301:65:124"},"nodeType":"YulIf","src":"16298:85:124"}]},"name":"abi_decode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"16229:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16240:5:124","type":""}],"src":"16201:188:124"},{"body":{"nodeType":"YulBlock","src":"16481:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"16527:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16536:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16539:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16529:6:124"},"nodeType":"YulFunctionCall","src":"16529:12:124"},"nodeType":"YulExpressionStatement","src":"16529:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16502:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"16511:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16498:3:124"},"nodeType":"YulFunctionCall","src":"16498:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"16523:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16494:3:124"},"nodeType":"YulFunctionCall","src":"16494:32:124"},"nodeType":"YulIf","src":"16491:52:124"},{"nodeType":"YulAssignment","src":"16552:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16581:9:124"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"16562:18:124"},"nodeType":"YulFunctionCall","src":"16562:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16552:6:124"}]},{"nodeType":"YulAssignment","src":"16600:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16633:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16644:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16629:3:124"},"nodeType":"YulFunctionCall","src":"16629:18:124"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"16610:18:124"},"nodeType":"YulFunctionCall","src":"16610:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"16600:6:124"}]}]},"name":"abi_decode_tuple_t_uint128t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16439:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16450:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16462:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16470:6:124","type":""}],"src":"16394:260:124"},{"body":{"nodeType":"YulBlock","src":"16900:294:124","statements":[{"nodeType":"YulAssignment","src":"16910:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16922:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16933:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16918:3:124"},"nodeType":"YulFunctionCall","src":"16918:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16910:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16953:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"16964:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16946:6:124"},"nodeType":"YulFunctionCall","src":"16946:25:124"},"nodeType":"YulExpressionStatement","src":"16946:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16991:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17002:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16987:3:124"},"nodeType":"YulFunctionCall","src":"16987:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"17007:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16980:6:124"},"nodeType":"YulFunctionCall","src":"16980:34:124"},"nodeType":"YulExpressionStatement","src":"16980:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17034:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17045:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17030:3:124"},"nodeType":"YulFunctionCall","src":"17030:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"17050:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17023:6:124"},"nodeType":"YulFunctionCall","src":"17023:34:124"},"nodeType":"YulExpressionStatement","src":"17023:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17077:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17088:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17073:3:124"},"nodeType":"YulFunctionCall","src":"17073:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"17093:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17066:6:124"},"nodeType":"YulFunctionCall","src":"17066:34:124"},"nodeType":"YulExpressionStatement","src":"17066:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17120:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17131:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17116:3:124"},"nodeType":"YulFunctionCall","src":"17116:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"17137:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17109:6:124"},"nodeType":"YulFunctionCall","src":"17109:35:124"},"nodeType":"YulExpressionStatement","src":"17109:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17164:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17175:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17160:3:124"},"nodeType":"YulFunctionCall","src":"17160:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"17181:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17153:6:124"},"nodeType":"YulFunctionCall","src":"17153:35:124"},"nodeType":"YulExpressionStatement","src":"17153:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16829:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"16840:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"16848:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16856:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16864:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16872:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16880:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16891:4:124","type":""}],"src":"16659:535:124"},{"body":{"nodeType":"YulBlock","src":"17384:83:124","statements":[{"nodeType":"YulAssignment","src":"17394:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17417:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17402:3:124"},"nodeType":"YulFunctionCall","src":"17402:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17394:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17436:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17453:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17447:5:124"},"nodeType":"YulFunctionCall","src":"17447:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17429:6:124"},"nodeType":"YulFunctionCall","src":"17429:32:124"},"nodeType":"YulExpressionStatement","src":"17429:32:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17353:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17364:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17375:4:124","type":""}],"src":"17199:268:124"},{"body":{"nodeType":"YulBlock","src":"17573:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"17619:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17628:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17631:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17621:6:124"},"nodeType":"YulFunctionCall","src":"17621:12:124"},"nodeType":"YulExpressionStatement","src":"17621:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17594:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"17603:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17590:3:124"},"nodeType":"YulFunctionCall","src":"17590:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"17615:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17586:3:124"},"nodeType":"YulFunctionCall","src":"17586:32:124"},"nodeType":"YulIf","src":"17583:52:124"},{"nodeType":"YulVariableDeclaration","src":"17644:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17670:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17657:12:124"},"nodeType":"YulFunctionCall","src":"17657:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17648:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17714:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"17689:24:124"},"nodeType":"YulFunctionCall","src":"17689:31:124"},"nodeType":"YulExpressionStatement","src":"17689:31:124"},{"nodeType":"YulAssignment","src":"17729:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"17739:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17729:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17539:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17550:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17562:6:124","type":""}],"src":"17472:278:124"},{"body":{"nodeType":"YulBlock","src":"17859:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"17905:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17914:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17917:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17907:6:124"},"nodeType":"YulFunctionCall","src":"17907:12:124"},"nodeType":"YulExpressionStatement","src":"17907:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17880:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"17889:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17876:3:124"},"nodeType":"YulFunctionCall","src":"17876:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"17901:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17872:3:124"},"nodeType":"YulFunctionCall","src":"17872:32:124"},"nodeType":"YulIf","src":"17869:52:124"},{"nodeType":"YulVariableDeclaration","src":"17930:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17956:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17943:12:124"},"nodeType":"YulFunctionCall","src":"17943:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17934:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18000:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"17975:24:124"},"nodeType":"YulFunctionCall","src":"17975:31:124"},"nodeType":"YulExpressionStatement","src":"17975:31:124"},{"nodeType":"YulAssignment","src":"18015:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"18025:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18015:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"18039:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18071:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18082:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18067:3:124"},"nodeType":"YulFunctionCall","src":"18067:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18054:12:124"},"nodeType":"YulFunctionCall","src":"18054:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"18043:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"18120:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18095:24:124"},"nodeType":"YulFunctionCall","src":"18095:33:124"},"nodeType":"YulExpressionStatement","src":"18095:33:124"},{"nodeType":"YulAssignment","src":"18137:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"18147:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"18137:6:124"}]},{"nodeType":"YulAssignment","src":"18163:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18190:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18201:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18186:3:124"},"nodeType":"YulFunctionCall","src":"18186:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18173:12:124"},"nodeType":"YulFunctionCall","src":"18173:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"18163:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17809:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17820:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17832:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17840:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17848:6:124","type":""}],"src":"17755:456:124"},{"body":{"nodeType":"YulBlock","src":"18367:530:124","statements":[{"nodeType":"YulVariableDeclaration","src":"18377:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18387:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18381:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18398:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18416:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18427:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18412:3:124"},"nodeType":"YulFunctionCall","src":"18412:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"18402:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18446:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18457:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18439:6:124"},"nodeType":"YulFunctionCall","src":"18439:21:124"},"nodeType":"YulExpressionStatement","src":"18439:21:124"},{"nodeType":"YulVariableDeclaration","src":"18469:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"18480:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"18473:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18495:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18515:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18509:5:124"},"nodeType":"YulFunctionCall","src":"18509:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"18499:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"18538:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"18546:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18531:6:124"},"nodeType":"YulFunctionCall","src":"18531:22:124"},"nodeType":"YulExpressionStatement","src":"18531:22:124"},{"nodeType":"YulAssignment","src":"18562:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18573:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18584:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18569:3:124"},"nodeType":"YulFunctionCall","src":"18569:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18562:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"18596:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18614:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18622:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18610:3:124"},"nodeType":"YulFunctionCall","src":"18610:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"18600:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18634:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18643:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"18638:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"18702:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18723:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18738:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18732:5:124"},"nodeType":"YulFunctionCall","src":"18732:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"18747:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18728:3:124"},"nodeType":"YulFunctionCall","src":"18728:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18716:6:124"},"nodeType":"YulFunctionCall","src":"18716:75:124"},"nodeType":"YulExpressionStatement","src":"18716:75:124"},{"nodeType":"YulAssignment","src":"18804:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18815:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18820:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18811:3:124"},"nodeType":"YulFunctionCall","src":"18811:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18804:3:124"}]},{"nodeType":"YulAssignment","src":"18836:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18850:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18858:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18846:3:124"},"nodeType":"YulFunctionCall","src":"18846:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18836:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18664:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"18667:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18661:2:124"},"nodeType":"YulFunctionCall","src":"18661:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"18675:18:124","statements":[{"nodeType":"YulAssignment","src":"18677:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18686:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"18689:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18682:3:124"},"nodeType":"YulFunctionCall","src":"18682:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"18677:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"18657:3:124","statements":[]},"src":"18653:218:124"},{"nodeType":"YulAssignment","src":"18880:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"18888:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18880:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18336:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18347:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18358:4:124","type":""}],"src":"18216:681:124"},{"body":{"nodeType":"YulBlock","src":"18934:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18951:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18954:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18944:6:124"},"nodeType":"YulFunctionCall","src":"18944:88:124"},"nodeType":"YulExpressionStatement","src":"18944:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19048:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19051:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19041:6:124"},"nodeType":"YulFunctionCall","src":"19041:15:124"},"nodeType":"YulExpressionStatement","src":"19041:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19072:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19075:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19065:6:124"},"nodeType":"YulFunctionCall","src":"19065:15:124"},"nodeType":"YulExpressionStatement","src":"19065:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"18902:184:124"},{"body":{"nodeType":"YulBlock","src":"19137:207:124","statements":[{"nodeType":"YulAssignment","src":"19147:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19163:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19157:5:124"},"nodeType":"YulFunctionCall","src":"19157:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19147:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19175:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19197:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"19205:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19193:3:124"},"nodeType":"YulFunctionCall","src":"19193:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19179:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"19285:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19287:16:124"},"nodeType":"YulFunctionCall","src":"19287:18:124"},"nodeType":"YulExpressionStatement","src":"19287:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19228:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"19240:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19225:2:124"},"nodeType":"YulFunctionCall","src":"19225:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19264:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19276:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19261:2:124"},"nodeType":"YulFunctionCall","src":"19261:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19222:2:124"},"nodeType":"YulFunctionCall","src":"19222:62:124"},"nodeType":"YulIf","src":"19219:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19323:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19327:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19316:6:124"},"nodeType":"YulFunctionCall","src":"19316:22:124"},"nodeType":"YulExpressionStatement","src":"19316:22:124"}]},"name":"allocate_memory_5567","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19126:6:124","type":""}],"src":"19091:253:124"},{"body":{"nodeType":"YulBlock","src":"19394:289:124","statements":[{"nodeType":"YulAssignment","src":"19404:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19420:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19414:5:124"},"nodeType":"YulFunctionCall","src":"19414:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19404:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19432:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19454:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"19470:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"19476:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19466:3:124"},"nodeType":"YulFunctionCall","src":"19466:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"19481:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19462:3:124"},"nodeType":"YulFunctionCall","src":"19462:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19450:3:124"},"nodeType":"YulFunctionCall","src":"19450:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19436:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"19624:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19626:16:124"},"nodeType":"YulFunctionCall","src":"19626:18:124"},"nodeType":"YulExpressionStatement","src":"19626:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19567:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"19579:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19564:2:124"},"nodeType":"YulFunctionCall","src":"19564:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19603:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19615:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19600:2:124"},"nodeType":"YulFunctionCall","src":"19600:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19561:2:124"},"nodeType":"YulFunctionCall","src":"19561:62:124"},"nodeType":"YulIf","src":"19558:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19662:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19666:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19655:6:124"},"nodeType":"YulFunctionCall","src":"19655:22:124"},"nodeType":"YulExpressionStatement","src":"19655:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"19374:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19383:6:124","type":""}],"src":"19349:334:124"},{"body":{"nodeType":"YulBlock","src":"19805:1371:124","statements":[{"body":{"nodeType":"YulBlock","src":"19851:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19860:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19863:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19853:6:124"},"nodeType":"YulFunctionCall","src":"19853:12:124"},"nodeType":"YulExpressionStatement","src":"19853:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19826:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"19835:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19822:3:124"},"nodeType":"YulFunctionCall","src":"19822:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"19847:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19818:3:124"},"nodeType":"YulFunctionCall","src":"19818:32:124"},"nodeType":"YulIf","src":"19815:52:124"},{"nodeType":"YulAssignment","src":"19876:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19903:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"19886:16:124"},"nodeType":"YulFunctionCall","src":"19886:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19876:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19922:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"19932:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19926:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19943:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19974:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19985:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19970:3:124"},"nodeType":"YulFunctionCall","src":"19970:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"19957:12:124"},"nodeType":"YulFunctionCall","src":"19957:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"19947:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19998:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"20008:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"20002:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20053:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20062:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20065:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20055:6:124"},"nodeType":"YulFunctionCall","src":"20055:12:124"},"nodeType":"YulExpressionStatement","src":"20055:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20041:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20049:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20038:2:124"},"nodeType":"YulFunctionCall","src":"20038:14:124"},"nodeType":"YulIf","src":"20035:34:124"},{"nodeType":"YulVariableDeclaration","src":"20078:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20092:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"20103:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20088:3:124"},"nodeType":"YulFunctionCall","src":"20088:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"20082:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20150:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20159:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20162:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20152:6:124"},"nodeType":"YulFunctionCall","src":"20152:12:124"},"nodeType":"YulExpressionStatement","src":"20152:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20130:7:124"},{"name":"_3","nodeType":"YulIdentifier","src":"20139:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20126:3:124"},"nodeType":"YulFunctionCall","src":"20126:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"20144:4:124","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20122:3:124"},"nodeType":"YulFunctionCall","src":"20122:27:124"},"nodeType":"YulIf","src":"20119:47:124"},{"nodeType":"YulVariableDeclaration","src":"20175:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_5567","nodeType":"YulIdentifier","src":"20188:20:124"},"nodeType":"YulFunctionCall","src":"20188:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"20179:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20226:5:124"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20251:2:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20233:17:124"},"nodeType":"YulFunctionCall","src":"20233:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20219:6:124"},"nodeType":"YulFunctionCall","src":"20219:36:124"},"nodeType":"YulExpressionStatement","src":"20219:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20275:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20282:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20271:3:124"},"nodeType":"YulFunctionCall","src":"20271:14:124"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20309:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20313:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20305:3:124"},"nodeType":"YulFunctionCall","src":"20305:11:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20287:17:124"},"nodeType":"YulFunctionCall","src":"20287:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20264:6:124"},"nodeType":"YulFunctionCall","src":"20264:54:124"},"nodeType":"YulExpressionStatement","src":"20264:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20338:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"20345:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20334:3:124"},"nodeType":"YulFunctionCall","src":"20334:14:124"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20372:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20376:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20368:3:124"},"nodeType":"YulFunctionCall","src":"20368:11:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20350:17:124"},"nodeType":"YulFunctionCall","src":"20350:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20327:6:124"},"nodeType":"YulFunctionCall","src":"20327:54:124"},"nodeType":"YulExpressionStatement","src":"20327:54:124"},{"nodeType":"YulVariableDeclaration","src":"20390:40:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20422:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20426:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20418:3:124"},"nodeType":"YulFunctionCall","src":"20418:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20405:12:124"},"nodeType":"YulFunctionCall","src":"20405:25:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"20394:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20464:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20439:24:124"},"nodeType":"YulFunctionCall","src":"20439:33:124"},"nodeType":"YulExpressionStatement","src":"20439:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20492:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"20499:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20488:3:124"},"nodeType":"YulFunctionCall","src":"20488:14:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"20504:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20481:6:124"},"nodeType":"YulFunctionCall","src":"20481:31:124"},"nodeType":"YulExpressionStatement","src":"20481:31:124"},{"nodeType":"YulVariableDeclaration","src":"20521:42:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20554:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20558:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20550:3:124"},"nodeType":"YulFunctionCall","src":"20550:12:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20537:12:124"},"nodeType":"YulFunctionCall","src":"20537:26:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"20525:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20594:6:124"},"nodeType":"YulFunctionCall","src":"20594:12:124"},"nodeType":"YulExpressionStatement","src":"20594:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"20578:8:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20588:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20575:2:124"},"nodeType":"YulFunctionCall","src":"20575:16:124"},"nodeType":"YulIf","src":"20572:36:124"},{"nodeType":"YulVariableDeclaration","src":"20617:27:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20631:2:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"20635:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20627:3:124"},"nodeType":"YulFunctionCall","src":"20627:17:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"20621:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20692:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20701:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20704:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20694:6:124"},"nodeType":"YulFunctionCall","src":"20694:12:124"},"nodeType":"YulExpressionStatement","src":"20694:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20671:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20675:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20667:3:124"},"nodeType":"YulFunctionCall","src":"20667:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20682:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20663:3:124"},"nodeType":"YulFunctionCall","src":"20663:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20656:6:124"},"nodeType":"YulFunctionCall","src":"20656:35:124"},"nodeType":"YulIf","src":"20653:55:124"},{"nodeType":"YulVariableDeclaration","src":"20717:26:124","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20740:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20727:12:124"},"nodeType":"YulFunctionCall","src":"20727:16:124"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"20721:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20766:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"20768:16:124"},"nodeType":"YulFunctionCall","src":"20768:18:124"},"nodeType":"YulExpressionStatement","src":"20768:18:124"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"20758:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20762:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20755:2:124"},"nodeType":"YulFunctionCall","src":"20755:10:124"},"nodeType":"YulIf","src":"20752:36:124"},{"nodeType":"YulVariableDeclaration","src":"20797:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"20838:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20842:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20834:3:124"},"nodeType":"YulFunctionCall","src":"20834:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"20849:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20830:3:124"},"nodeType":"YulFunctionCall","src":"20830:86:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20918:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20826:3:124"},"nodeType":"YulFunctionCall","src":"20826:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"20810:15:124"},"nodeType":"YulFunctionCall","src":"20810:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"20801:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"20938:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"20945:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20931:6:124"},"nodeType":"YulFunctionCall","src":"20931:17:124"},"nodeType":"YulExpressionStatement","src":"20931:17:124"},{"body":{"nodeType":"YulBlock","src":"20994:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21003:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21006:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20996:6:124"},"nodeType":"YulFunctionCall","src":"20996:12:124"},"nodeType":"YulExpressionStatement","src":"20996:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20971:2:124"},{"name":"_5","nodeType":"YulIdentifier","src":"20975:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20967:3:124"},"nodeType":"YulFunctionCall","src":"20967:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20980:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20963:3:124"},"nodeType":"YulFunctionCall","src":"20963:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20985:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20960:2:124"},"nodeType":"YulFunctionCall","src":"20960:33:124"},"nodeType":"YulIf","src":"20957:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21036:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21043:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21032:3:124"},"nodeType":"YulFunctionCall","src":"21032:14:124"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21052:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21056:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21048:3:124"},"nodeType":"YulFunctionCall","src":"21048:11:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21061:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"21019:12:124"},"nodeType":"YulFunctionCall","src":"21019:45:124"},"nodeType":"YulExpressionStatement","src":"21019:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21088:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21095:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21084:3:124"},"nodeType":"YulFunctionCall","src":"21084:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21100:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21080:3:124"},"nodeType":"YulFunctionCall","src":"21080:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"21105:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21073:6:124"},"nodeType":"YulFunctionCall","src":"21073:34:124"},"nodeType":"YulExpressionStatement","src":"21073:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21127:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"21134:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21123:3:124"},"nodeType":"YulFunctionCall","src":"21123:15:124"},{"name":"array","nodeType":"YulIdentifier","src":"21140:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21116:6:124"},"nodeType":"YulFunctionCall","src":"21116:30:124"},"nodeType":"YulExpressionStatement","src":"21116:30:124"},{"nodeType":"YulAssignment","src":"21155:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"21165:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21155:6:124"}]}]},"name":"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19763:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"19774:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"19786:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19794:6:124","type":""}],"src":"19688:1488:124"},{"body":{"nodeType":"YulBlock","src":"21336:581:124","statements":[{"body":{"nodeType":"YulBlock","src":"21383:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21392:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21395:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21385:6:124"},"nodeType":"YulFunctionCall","src":"21385:12:124"},"nodeType":"YulExpressionStatement","src":"21385:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21357:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"21366:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21353:3:124"},"nodeType":"YulFunctionCall","src":"21353:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"21378:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21349:3:124"},"nodeType":"YulFunctionCall","src":"21349:33:124"},"nodeType":"YulIf","src":"21346:53:124"},{"nodeType":"YulVariableDeclaration","src":"21408:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21434:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21421:12:124"},"nodeType":"YulFunctionCall","src":"21421:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"21412:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21478:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21453:24:124"},"nodeType":"YulFunctionCall","src":"21453:31:124"},"nodeType":"YulExpressionStatement","src":"21453:31:124"},{"nodeType":"YulAssignment","src":"21493:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"21503:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21493:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"21517:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21549:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21560:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21545:3:124"},"nodeType":"YulFunctionCall","src":"21545:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21532:12:124"},"nodeType":"YulFunctionCall","src":"21532:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"21521:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"21598:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21573:24:124"},"nodeType":"YulFunctionCall","src":"21573:33:124"},"nodeType":"YulExpressionStatement","src":"21573:33:124"},{"nodeType":"YulAssignment","src":"21615:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"21625:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21615:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"21641:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21673:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21684:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21669:3:124"},"nodeType":"YulFunctionCall","src":"21669:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21656:12:124"},"nodeType":"YulFunctionCall","src":"21656:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"21645:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"21722:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21697:24:124"},"nodeType":"YulFunctionCall","src":"21697:33:124"},"nodeType":"YulExpressionStatement","src":"21697:33:124"},{"nodeType":"YulAssignment","src":"21739:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"21749:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"21739:6:124"}]},{"nodeType":"YulAssignment","src":"21765:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21792:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21803:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21788:3:124"},"nodeType":"YulFunctionCall","src":"21788:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21775:12:124"},"nodeType":"YulFunctionCall","src":"21775:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"21765:6:124"}]},{"nodeType":"YulAssignment","src":"21816:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21843:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21854:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21839:3:124"},"nodeType":"YulFunctionCall","src":"21839:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21826:12:124"},"nodeType":"YulFunctionCall","src":"21826:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"21816:6:124"}]},{"nodeType":"YulAssignment","src":"21868:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21906:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21891:3:124"},"nodeType":"YulFunctionCall","src":"21891:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21878:12:124"},"nodeType":"YulFunctionCall","src":"21878:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"21868:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21262:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21273:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21285:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21293:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21301:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21309:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21317:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21325:6:124","type":""}],"src":"21181:736:124"},{"body":{"nodeType":"YulBlock","src":"22109:616:124","statements":[{"body":{"nodeType":"YulBlock","src":"22156:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22165:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22168:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22158:6:124"},"nodeType":"YulFunctionCall","src":"22158:12:124"},"nodeType":"YulExpressionStatement","src":"22158:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22130:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"22139:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22126:3:124"},"nodeType":"YulFunctionCall","src":"22126:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"22151:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22122:3:124"},"nodeType":"YulFunctionCall","src":"22122:33:124"},"nodeType":"YulIf","src":"22119:53:124"},{"nodeType":"YulVariableDeclaration","src":"22181:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22207:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22194:12:124"},"nodeType":"YulFunctionCall","src":"22194:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22185:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22251:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22226:24:124"},"nodeType":"YulFunctionCall","src":"22226:31:124"},"nodeType":"YulExpressionStatement","src":"22226:31:124"},{"nodeType":"YulAssignment","src":"22266:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"22276:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22266:6:124"}]},{"nodeType":"YulAssignment","src":"22290:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22317:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22328:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22313:3:124"},"nodeType":"YulFunctionCall","src":"22313:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22300:12:124"},"nodeType":"YulFunctionCall","src":"22300:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"22290:6:124"}]},{"nodeType":"YulAssignment","src":"22341:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22368:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22379:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22364:3:124"},"nodeType":"YulFunctionCall","src":"22364:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22351:12:124"},"nodeType":"YulFunctionCall","src":"22351:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"22341:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"22392:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22424:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22435:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22420:3:124"},"nodeType":"YulFunctionCall","src":"22420:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22407:12:124"},"nodeType":"YulFunctionCall","src":"22407:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22396:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22473:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22448:24:124"},"nodeType":"YulFunctionCall","src":"22448:33:124"},"nodeType":"YulExpressionStatement","src":"22448:33:124"},{"nodeType":"YulAssignment","src":"22490:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"22500:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"22490:6:124"}]},{"nodeType":"YulAssignment","src":"22516:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22543:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22554:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22539:3:124"},"nodeType":"YulFunctionCall","src":"22539:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22526:12:124"},"nodeType":"YulFunctionCall","src":"22526:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"22516:6:124"}]},{"nodeType":"YulAssignment","src":"22568:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22599:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22610:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22595:3:124"},"nodeType":"YulFunctionCall","src":"22595:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"22578:16:124"},"nodeType":"YulFunctionCall","src":"22578:37:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"22568:6:124"}]},{"nodeType":"YulAssignment","src":"22624:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22651:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22662:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22647:3:124"},"nodeType":"YulFunctionCall","src":"22647:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22634:12:124"},"nodeType":"YulFunctionCall","src":"22634:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"22624:6:124"}]},{"nodeType":"YulAssignment","src":"22676:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22703:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22714:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22699:3:124"},"nodeType":"YulFunctionCall","src":"22699:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22686:12:124"},"nodeType":"YulFunctionCall","src":"22686:33:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"22676:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22019:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22030:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22042:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22050:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22058:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22066:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22074:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22082:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"22090:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"22098:6:124","type":""}],"src":"21922:803:124"},{"body":{"nodeType":"YulBlock","src":"22861:348:124","statements":[{"nodeType":"YulVariableDeclaration","src":"22871:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22885:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"22894:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22881:3:124"},"nodeType":"YulFunctionCall","src":"22881:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22875:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"22928:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22937:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22940:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22930:6:124"},"nodeType":"YulFunctionCall","src":"22930:12:124"},"nodeType":"YulExpressionStatement","src":"22930:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"22920:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"22924:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22916:3:124"},"nodeType":"YulFunctionCall","src":"22916:11:124"},"nodeType":"YulIf","src":"22913:31:124"},{"nodeType":"YulVariableDeclaration","src":"22953:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22979:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22966:12:124"},"nodeType":"YulFunctionCall","src":"22966:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22957:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23023:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22998:24:124"},"nodeType":"YulFunctionCall","src":"22998:31:124"},"nodeType":"YulExpressionStatement","src":"22998:31:124"},{"nodeType":"YulAssignment","src":"23038:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"23048:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23038:6:124"}]},{"body":{"nodeType":"YulBlock","src":"23150:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23159:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23162:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23152:6:124"},"nodeType":"YulFunctionCall","src":"23152:12:124"},"nodeType":"YulExpressionStatement","src":"23152:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"23073:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"23077:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23069:3:124"},"nodeType":"YulFunctionCall","src":"23069:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"23146:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23065:3:124"},"nodeType":"YulFunctionCall","src":"23065:84:124"},"nodeType":"YulIf","src":"23062:104:124"},{"nodeType":"YulAssignment","src":"23175:28:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23189:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23200:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23185:3:124"},"nodeType":"YulFunctionCall","src":"23185:18:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"23175:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22819:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22830:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22842:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22850:6:124","type":""}],"src":"22730:479:124"},{"body":{"nodeType":"YulBlock","src":"23313:89:124","statements":[{"nodeType":"YulAssignment","src":"23323:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23335:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23346:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23331:3:124"},"nodeType":"YulFunctionCall","src":"23331:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23323:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23365:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23380:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"23388:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23376:3:124"},"nodeType":"YulFunctionCall","src":"23376:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23358:6:124"},"nodeType":"YulFunctionCall","src":"23358:38:124"},"nodeType":"YulExpressionStatement","src":"23358:38:124"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23282:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23293:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23304:4:124","type":""}],"src":"23214:188:124"},{"body":{"nodeType":"YulBlock","src":"23488:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"23534:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23543:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23546:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23536:6:124"},"nodeType":"YulFunctionCall","src":"23536:12:124"},"nodeType":"YulExpressionStatement","src":"23536:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23509:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"23518:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23505:3:124"},"nodeType":"YulFunctionCall","src":"23505:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"23530:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23501:3:124"},"nodeType":"YulFunctionCall","src":"23501:32:124"},"nodeType":"YulIf","src":"23498:52:124"},{"nodeType":"YulVariableDeclaration","src":"23559:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23578:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23572:5:124"},"nodeType":"YulFunctionCall","src":"23572:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23563:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23622:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"23597:24:124"},"nodeType":"YulFunctionCall","src":"23597:31:124"},"nodeType":"YulExpressionStatement","src":"23597:31:124"},{"nodeType":"YulAssignment","src":"23637:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"23647:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23637:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23454:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23465:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23477:6:124","type":""}],"src":"23407:251:124"},{"body":{"nodeType":"YulBlock","src":"23704:50:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"23721:3:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23740:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23733:6:124"},"nodeType":"YulFunctionCall","src":"23733:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23726:6:124"},"nodeType":"YulFunctionCall","src":"23726:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23714:6:124"},"nodeType":"YulFunctionCall","src":"23714:34:124"},"nodeType":"YulExpressionStatement","src":"23714:34:124"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23688:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"23695:3:124","type":""}],"src":"23663:91:124"},{"body":{"nodeType":"YulBlock","src":"23801:33:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"23810:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23819:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"23826:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23815:3:124"},"nodeType":"YulFunctionCall","src":"23815:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23803:6:124"},"nodeType":"YulFunctionCall","src":"23803:29:124"},"nodeType":"YulExpressionStatement","src":"23803:29:124"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23785:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"23792:3:124","type":""}],"src":"23759:75:124"},{"body":{"nodeType":"YulBlock","src":"24344:1162:124","statements":[{"nodeType":"YulAssignment","src":"24354:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24366:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24377:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24362:3:124"},"nodeType":"YulFunctionCall","src":"24362:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24354:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24397:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"24408:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24390:6:124"},"nodeType":"YulFunctionCall","src":"24390:25:124"},"nodeType":"YulExpressionStatement","src":"24390:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24446:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24431:3:124"},"nodeType":"YulFunctionCall","src":"24431:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"24451:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24424:6:124"},"nodeType":"YulFunctionCall","src":"24424:34:124"},"nodeType":"YulExpressionStatement","src":"24424:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24478:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24489:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24474:3:124"},"nodeType":"YulFunctionCall","src":"24474:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"24494:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24467:6:124"},"nodeType":"YulFunctionCall","src":"24467:34:124"},"nodeType":"YulExpressionStatement","src":"24467:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24521:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24532:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24517:3:124"},"nodeType":"YulFunctionCall","src":"24517:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"24537:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24510:6:124"},"nodeType":"YulFunctionCall","src":"24510:34:124"},"nodeType":"YulExpressionStatement","src":"24510:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24564:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24575:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24560:3:124"},"nodeType":"YulFunctionCall","src":"24560:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24587:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24581:5:124"},"nodeType":"YulFunctionCall","src":"24581:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24553:6:124"},"nodeType":"YulFunctionCall","src":"24553:42:124"},"nodeType":"YulExpressionStatement","src":"24553:42:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24615:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24626:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24611:3:124"},"nodeType":"YulFunctionCall","src":"24611:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24642:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24650:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24638:3:124"},"nodeType":"YulFunctionCall","src":"24638:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24632:5:124"},"nodeType":"YulFunctionCall","src":"24632:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24604:6:124"},"nodeType":"YulFunctionCall","src":"24604:51:124"},"nodeType":"YulExpressionStatement","src":"24604:51:124"},{"nodeType":"YulVariableDeclaration","src":"24664:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24694:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24702:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24690:3:124"},"nodeType":"YulFunctionCall","src":"24690:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24684:5:124"},"nodeType":"YulFunctionCall","src":"24684:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"24668:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24715:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"24725:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24719:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24787:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24798:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24783:3:124"},"nodeType":"YulFunctionCall","src":"24783:19:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"24808:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"24822:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24804:3:124"},"nodeType":"YulFunctionCall","src":"24804:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24776:6:124"},"nodeType":"YulFunctionCall","src":"24776:50:124"},"nodeType":"YulExpressionStatement","src":"24776:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24846:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24857:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24842:3:124"},"nodeType":"YulFunctionCall","src":"24842:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24877:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24885:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24873:3:124"},"nodeType":"YulFunctionCall","src":"24873:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24867:5:124"},"nodeType":"YulFunctionCall","src":"24867:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"24891:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24863:3:124"},"nodeType":"YulFunctionCall","src":"24863:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24835:6:124"},"nodeType":"YulFunctionCall","src":"24835:60:124"},"nodeType":"YulExpressionStatement","src":"24835:60:124"},{"nodeType":"YulVariableDeclaration","src":"24904:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24936:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24944:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24932:3:124"},"nodeType":"YulFunctionCall","src":"24932:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24926:5:124"},"nodeType":"YulFunctionCall","src":"24926:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"24908:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24958:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"24968:3:124","type":"","value":"256"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"24962:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"24999:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25019:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"25030:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25015:3:124"},"nodeType":"YulFunctionCall","src":"25015:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"24980:18:124"},"nodeType":"YulFunctionCall","src":"24980:54:124"},"nodeType":"YulExpressionStatement","src":"24980:54:124"},{"nodeType":"YulVariableDeclaration","src":"25043:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25075:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25083:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25071:3:124"},"nodeType":"YulFunctionCall","src":"25071:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25065:5:124"},"nodeType":"YulFunctionCall","src":"25065:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"25047:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"25113:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25133:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25144:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25129:3:124"},"nodeType":"YulFunctionCall","src":"25129:19:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"25097:15:124"},"nodeType":"YulFunctionCall","src":"25097:52:124"},"nodeType":"YulExpressionStatement","src":"25097:52:124"},{"nodeType":"YulVariableDeclaration","src":"25158:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25190:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25198:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25186:3:124"},"nodeType":"YulFunctionCall","src":"25186:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25180:5:124"},"nodeType":"YulFunctionCall","src":"25180:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"25162:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"25231:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25251:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25262:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25247:3:124"},"nodeType":"YulFunctionCall","src":"25247:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25212:18:124"},"nodeType":"YulFunctionCall","src":"25212:55:124"},"nodeType":"YulExpressionStatement","src":"25212:55:124"},{"nodeType":"YulVariableDeclaration","src":"25276:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25308:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25316:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25304:3:124"},"nodeType":"YulFunctionCall","src":"25304:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25298:5:124"},"nodeType":"YulFunctionCall","src":"25298:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"25280:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"25347:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25378:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25363:3:124"},"nodeType":"YulFunctionCall","src":"25363:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"25330:16:124"},"nodeType":"YulFunctionCall","src":"25330:53:124"},"nodeType":"YulExpressionStatement","src":"25330:53:124"},{"nodeType":"YulVariableDeclaration","src":"25392:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25424:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"25432:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25420:3:124"},"nodeType":"YulFunctionCall","src":"25420:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25414:5:124"},"nodeType":"YulFunctionCall","src":"25414:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"25396:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"25464:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25484:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25495:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25480:3:124"},"nodeType":"YulFunctionCall","src":"25480:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25445:18:124"},"nodeType":"YulFunctionCall","src":"25445:55:124"},"nodeType":"YulExpressionStatement","src":"25445:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24281:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"24292:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"24300:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24308:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24316:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24324:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24335:4:124","type":""}],"src":"23839:1667:124"},{"body":{"nodeType":"YulBlock","src":"25776:428:124","statements":[{"nodeType":"YulAssignment","src":"25786:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25798:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25809:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25794:3:124"},"nodeType":"YulFunctionCall","src":"25794:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25786:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"25822:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"25832:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25826:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25890:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25905:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25913:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25901:3:124"},"nodeType":"YulFunctionCall","src":"25901:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25883:6:124"},"nodeType":"YulFunctionCall","src":"25883:34:124"},"nodeType":"YulExpressionStatement","src":"25883:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25937:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25948:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25933:3:124"},"nodeType":"YulFunctionCall","src":"25933:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25957:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25965:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25953:3:124"},"nodeType":"YulFunctionCall","src":"25953:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25926:6:124"},"nodeType":"YulFunctionCall","src":"25926:43:124"},"nodeType":"YulExpressionStatement","src":"25926:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25989:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26000:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25985:3:124"},"nodeType":"YulFunctionCall","src":"25985:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"26005:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25978:6:124"},"nodeType":"YulFunctionCall","src":"25978:34:124"},"nodeType":"YulExpressionStatement","src":"25978:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26032:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26043:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26028:3:124"},"nodeType":"YulFunctionCall","src":"26028:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"26048:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26021:6:124"},"nodeType":"YulFunctionCall","src":"26021:34:124"},"nodeType":"YulExpressionStatement","src":"26021:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26086:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26071:3:124"},"nodeType":"YulFunctionCall","src":"26071:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26096:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26104:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26092:3:124"},"nodeType":"YulFunctionCall","src":"26092:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26064:6:124"},"nodeType":"YulFunctionCall","src":"26064:46:124"},"nodeType":"YulExpressionStatement","src":"26064:46:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26130:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26141:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26126:3:124"},"nodeType":"YulFunctionCall","src":"26126:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"26147:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26119:6:124"},"nodeType":"YulFunctionCall","src":"26119:35:124"},"nodeType":"YulExpressionStatement","src":"26119:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26185:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26170:3:124"},"nodeType":"YulFunctionCall","src":"26170:19:124"},{"name":"value6","nodeType":"YulIdentifier","src":"26191:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26163:6:124"},"nodeType":"YulFunctionCall","src":"26163:35:124"},"nodeType":"YulExpressionStatement","src":"26163:35:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25697:9:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"25708:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"25716:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"25724:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25732:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25740:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25748:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25756:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25767:4:124","type":""}],"src":"25511:693:124"},{"body":{"nodeType":"YulBlock","src":"26591:485:124","statements":[{"nodeType":"YulAssignment","src":"26601:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26613:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26624:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26609:3:124"},"nodeType":"YulFunctionCall","src":"26609:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26601:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26644:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"26655:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26637:6:124"},"nodeType":"YulFunctionCall","src":"26637:25:124"},"nodeType":"YulExpressionStatement","src":"26637:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26682:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26693:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26678:3:124"},"nodeType":"YulFunctionCall","src":"26678:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"26698:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26671:6:124"},"nodeType":"YulFunctionCall","src":"26671:34:124"},"nodeType":"YulExpressionStatement","src":"26671:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26725:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26736:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26721:3:124"},"nodeType":"YulFunctionCall","src":"26721:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"26741:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26714:6:124"},"nodeType":"YulFunctionCall","src":"26714:34:124"},"nodeType":"YulExpressionStatement","src":"26714:34:124"},{"nodeType":"YulVariableDeclaration","src":"26757:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"26767:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26761:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26829:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26840:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26825:3:124"},"nodeType":"YulFunctionCall","src":"26825:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26855:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26849:5:124"},"nodeType":"YulFunctionCall","src":"26849:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"26864:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26845:3:124"},"nodeType":"YulFunctionCall","src":"26845:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26818:6:124"},"nodeType":"YulFunctionCall","src":"26818:50:124"},"nodeType":"YulExpressionStatement","src":"26818:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26888:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26899:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26884:3:124"},"nodeType":"YulFunctionCall","src":"26884:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26915:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26923:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26911:3:124"},"nodeType":"YulFunctionCall","src":"26911:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26905:5:124"},"nodeType":"YulFunctionCall","src":"26905:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26877:6:124"},"nodeType":"YulFunctionCall","src":"26877:51:124"},"nodeType":"YulExpressionStatement","src":"26877:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26948:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26959:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26944:3:124"},"nodeType":"YulFunctionCall","src":"26944:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26979:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26987:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26975:3:124"},"nodeType":"YulFunctionCall","src":"26975:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26969:5:124"},"nodeType":"YulFunctionCall","src":"26969:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"26993:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26965:3:124"},"nodeType":"YulFunctionCall","src":"26965:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26937:6:124"},"nodeType":"YulFunctionCall","src":"26937:60:124"},"nodeType":"YulExpressionStatement","src":"26937:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27017:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27028:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27013:3:124"},"nodeType":"YulFunctionCall","src":"27013:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27048:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"27056:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27044:3:124"},"nodeType":"YulFunctionCall","src":"27044:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27038:5:124"},"nodeType":"YulFunctionCall","src":"27038:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"27062:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27034:3:124"},"nodeType":"YulFunctionCall","src":"27034:35:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27006:6:124"},"nodeType":"YulFunctionCall","src":"27006:64:124"},"nodeType":"YulExpressionStatement","src":"27006:64:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26536:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26547:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26555:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26563:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26571:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26582:4:124","type":""}],"src":"26209:867:124"},{"body":{"nodeType":"YulBlock","src":"27202:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27219:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27230:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27212:6:124"},"nodeType":"YulFunctionCall","src":"27212:21:124"},"nodeType":"YulExpressionStatement","src":"27212:21:124"},{"nodeType":"YulAssignment","src":"27242:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27268:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27280:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27291:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27276:3:124"},"nodeType":"YulFunctionCall","src":"27276:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"27250:17:124"},"nodeType":"YulFunctionCall","src":"27250:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27242:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27171:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27182:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27193:4:124","type":""}],"src":"27081:220:124"},{"body":{"nodeType":"YulBlock","src":"27831:481:124","statements":[{"nodeType":"YulAssignment","src":"27841:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27853:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27864:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27849:3:124"},"nodeType":"YulFunctionCall","src":"27849:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27841:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27884:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"27895:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27877:6:124"},"nodeType":"YulFunctionCall","src":"27877:25:124"},"nodeType":"YulExpressionStatement","src":"27877:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27922:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27933:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27918:3:124"},"nodeType":"YulFunctionCall","src":"27918:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"27938:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27911:6:124"},"nodeType":"YulFunctionCall","src":"27911:34:124"},"nodeType":"YulExpressionStatement","src":"27911:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27965:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27976:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27961:3:124"},"nodeType":"YulFunctionCall","src":"27961:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"27981:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27954:6:124"},"nodeType":"YulFunctionCall","src":"27954:34:124"},"nodeType":"YulExpressionStatement","src":"27954:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28008:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28019:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28004:3:124"},"nodeType":"YulFunctionCall","src":"28004:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"28024:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27997:6:124"},"nodeType":"YulFunctionCall","src":"27997:34:124"},"nodeType":"YulExpressionStatement","src":"27997:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28062:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28047:3:124"},"nodeType":"YulFunctionCall","src":"28047:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"28068:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28040:6:124"},"nodeType":"YulFunctionCall","src":"28040:35:124"},"nodeType":"YulExpressionStatement","src":"28040:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28095:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28106:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28091:3:124"},"nodeType":"YulFunctionCall","src":"28091:19:124"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28118:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28112:5:124"},"nodeType":"YulFunctionCall","src":"28112:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28084:6:124"},"nodeType":"YulFunctionCall","src":"28084:42:124"},"nodeType":"YulExpressionStatement","src":"28084:42:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28146:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28157:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28142:3:124"},"nodeType":"YulFunctionCall","src":"28142:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28177:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"28185:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28173:3:124"},"nodeType":"YulFunctionCall","src":"28173:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28167:5:124"},"nodeType":"YulFunctionCall","src":"28167:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"28191:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28163:3:124"},"nodeType":"YulFunctionCall","src":"28163:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28135:6:124"},"nodeType":"YulFunctionCall","src":"28135:100:124"},"nodeType":"YulExpressionStatement","src":"28135:100:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28255:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28266:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28251:3:124"},"nodeType":"YulFunctionCall","src":"28251:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28286:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"28294:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28282:3:124"},"nodeType":"YulFunctionCall","src":"28282:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28276:5:124"},"nodeType":"YulFunctionCall","src":"28276:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"28300:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28272:3:124"},"nodeType":"YulFunctionCall","src":"28272:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28244:6:124"},"nodeType":"YulFunctionCall","src":"28244:62:124"},"nodeType":"YulExpressionStatement","src":"28244:62:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27760:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"27771:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"27779:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"27787:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"27795:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"27803:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27811:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27822:4:124","type":""}],"src":"27306:1006:124"},{"body":{"nodeType":"YulBlock","src":"28349:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28366:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28369:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28359:6:124"},"nodeType":"YulFunctionCall","src":"28359:88:124"},"nodeType":"YulExpressionStatement","src":"28359:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28463:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"28466:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28456:6:124"},"nodeType":"YulFunctionCall","src":"28456:15:124"},"nodeType":"YulExpressionStatement","src":"28456:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28487:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28490:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28480:6:124"},"nodeType":"YulFunctionCall","src":"28480:15:124"},"nodeType":"YulExpressionStatement","src":"28480:15:124"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"28317:184:124"},{"body":{"nodeType":"YulBlock","src":"28564:243:124","statements":[{"body":{"nodeType":"YulBlock","src":"28606:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28627:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28630:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28620:6:124"},"nodeType":"YulFunctionCall","src":"28620:88:124"},"nodeType":"YulExpressionStatement","src":"28620:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28728:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"28731:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28721:6:124"},"nodeType":"YulFunctionCall","src":"28721:15:124"},"nodeType":"YulExpressionStatement","src":"28721:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28756:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28759:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28749:6:124"},"nodeType":"YulFunctionCall","src":"28749:15:124"},"nodeType":"YulExpressionStatement","src":"28749:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28587:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"28594:1:124","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"28584:2:124"},"nodeType":"YulFunctionCall","src":"28584:12:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28577:6:124"},"nodeType":"YulFunctionCall","src":"28577:20:124"},"nodeType":"YulIf","src":"28574:200:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28790:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"28795:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28783:6:124"},"nodeType":"YulFunctionCall","src":"28783:18:124"},"nodeType":"YulExpressionStatement","src":"28783:18:124"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"28548:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"28555:3:124","type":""}],"src":"28506:301:124"},{"body":{"nodeType":"YulBlock","src":"29192:616:124","statements":[{"nodeType":"YulAssignment","src":"29202:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29214:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29225:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29210:3:124"},"nodeType":"YulFunctionCall","src":"29210:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29202:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29245:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"29256:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29238:6:124"},"nodeType":"YulFunctionCall","src":"29238:25:124"},"nodeType":"YulExpressionStatement","src":"29238:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29283:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29294:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29279:3:124"},"nodeType":"YulFunctionCall","src":"29279:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"29299:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29272:6:124"},"nodeType":"YulFunctionCall","src":"29272:34:124"},"nodeType":"YulExpressionStatement","src":"29272:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29326:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29337:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29322:3:124"},"nodeType":"YulFunctionCall","src":"29322:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"29342:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29315:6:124"},"nodeType":"YulFunctionCall","src":"29315:34:124"},"nodeType":"YulExpressionStatement","src":"29315:34:124"},{"nodeType":"YulVariableDeclaration","src":"29358:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"29368:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"29362:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29430:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29441:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29426:3:124"},"nodeType":"YulFunctionCall","src":"29426:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29456:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29450:5:124"},"nodeType":"YulFunctionCall","src":"29450:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"29465:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29446:3:124"},"nodeType":"YulFunctionCall","src":"29446:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29419:6:124"},"nodeType":"YulFunctionCall","src":"29419:50:124"},"nodeType":"YulExpressionStatement","src":"29419:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29489:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29500:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29485:3:124"},"nodeType":"YulFunctionCall","src":"29485:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29516:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29524:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29512:3:124"},"nodeType":"YulFunctionCall","src":"29512:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29506:5:124"},"nodeType":"YulFunctionCall","src":"29506:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29478:6:124"},"nodeType":"YulFunctionCall","src":"29478:51:124"},"nodeType":"YulExpressionStatement","src":"29478:51:124"},{"nodeType":"YulVariableDeclaration","src":"29538:42:124","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29568:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29576:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29564:3:124"},"nodeType":"YulFunctionCall","src":"29564:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29558:5:124"},"nodeType":"YulFunctionCall","src":"29558:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"29542:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"29622:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29651:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29636:3:124"},"nodeType":"YulFunctionCall","src":"29636:19:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"29589:32:124"},"nodeType":"YulFunctionCall","src":"29589:67:124"},"nodeType":"YulExpressionStatement","src":"29589:67:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29676:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29687:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29672:3:124"},"nodeType":"YulFunctionCall","src":"29672:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29707:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29715:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29703:3:124"},"nodeType":"YulFunctionCall","src":"29703:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29697:5:124"},"nodeType":"YulFunctionCall","src":"29697:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"29721:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29693:3:124"},"nodeType":"YulFunctionCall","src":"29693:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29665:6:124"},"nodeType":"YulFunctionCall","src":"29665:60:124"},"nodeType":"YulExpressionStatement","src":"29665:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29745:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29756:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29741:3:124"},"nodeType":"YulFunctionCall","src":"29741:19:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29786:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29794:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29782:3:124"},"nodeType":"YulFunctionCall","src":"29782:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29776:5:124"},"nodeType":"YulFunctionCall","src":"29776:23:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29769:6:124"},"nodeType":"YulFunctionCall","src":"29769:31:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29762:6:124"},"nodeType":"YulFunctionCall","src":"29762:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29734:6:124"},"nodeType":"YulFunctionCall","src":"29734:68:124"},"nodeType":"YulExpressionStatement","src":"29734:68:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29137:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29148:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29156:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29164:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29172:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29183:4:124","type":""}],"src":"28812:996:124"},{"body":{"nodeType":"YulBlock","src":"29894:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"29940:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29949:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29952:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29942:6:124"},"nodeType":"YulFunctionCall","src":"29942:12:124"},"nodeType":"YulExpressionStatement","src":"29942:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29915:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"29924:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29911:3:124"},"nodeType":"YulFunctionCall","src":"29911:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"29936:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29907:3:124"},"nodeType":"YulFunctionCall","src":"29907:32:124"},"nodeType":"YulIf","src":"29904:52:124"},{"nodeType":"YulAssignment","src":"29965:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29981:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29975:5:124"},"nodeType":"YulFunctionCall","src":"29975:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"29965:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29860:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"29871:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"29883:6:124","type":""}],"src":"29813:184:124"},{"body":{"nodeType":"YulBlock","src":"30246:716:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30263:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"30274:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30256:6:124"},"nodeType":"YulFunctionCall","src":"30256:25:124"},"nodeType":"YulExpressionStatement","src":"30256:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30301:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30312:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30297:3:124"},"nodeType":"YulFunctionCall","src":"30297:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"30317:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30290:6:124"},"nodeType":"YulFunctionCall","src":"30290:30:124"},"nodeType":"YulExpressionStatement","src":"30290:30:124"},{"nodeType":"YulVariableDeclaration","src":"30329:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"30339:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"30333:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30412:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30397:3:124"},"nodeType":"YulFunctionCall","src":"30397:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30427:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30421:5:124"},"nodeType":"YulFunctionCall","src":"30421:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"30436:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30417:3:124"},"nodeType":"YulFunctionCall","src":"30417:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30390:6:124"},"nodeType":"YulFunctionCall","src":"30390:50:124"},"nodeType":"YulExpressionStatement","src":"30390:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30460:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30471:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30456:3:124"},"nodeType":"YulFunctionCall","src":"30456:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30490:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30498:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30486:3:124"},"nodeType":"YulFunctionCall","src":"30486:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30480:5:124"},"nodeType":"YulFunctionCall","src":"30480:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"30504:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30476:3:124"},"nodeType":"YulFunctionCall","src":"30476:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30449:6:124"},"nodeType":"YulFunctionCall","src":"30449:59:124"},"nodeType":"YulExpressionStatement","src":"30449:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30528:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30539:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30524:3:124"},"nodeType":"YulFunctionCall","src":"30524:19:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30555:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30563:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30551:3:124"},"nodeType":"YulFunctionCall","src":"30551:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30545:5:124"},"nodeType":"YulFunctionCall","src":"30545:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30517:6:124"},"nodeType":"YulFunctionCall","src":"30517:51:124"},"nodeType":"YulExpressionStatement","src":"30517:51:124"},{"nodeType":"YulVariableDeclaration","src":"30577:42:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30607:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30615:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30603:3:124"},"nodeType":"YulFunctionCall","src":"30603:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30597:5:124"},"nodeType":"YulFunctionCall","src":"30597:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"30581:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30639:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30650:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30635:3:124"},"nodeType":"YulFunctionCall","src":"30635:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"30656:4:124","type":"","value":"0xe0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30628:6:124"},"nodeType":"YulFunctionCall","src":"30628:33:124"},"nodeType":"YulExpressionStatement","src":"30628:33:124"},{"nodeType":"YulVariableDeclaration","src":"30670:66:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"30702:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30720:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30731:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30716:3:124"},"nodeType":"YulFunctionCall","src":"30716:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"30684:17:124"},"nodeType":"YulFunctionCall","src":"30684:52:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"30674:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30756:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30767:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30752:3:124"},"nodeType":"YulFunctionCall","src":"30752:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30787:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30795:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30783:3:124"},"nodeType":"YulFunctionCall","src":"30783:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30777:5:124"},"nodeType":"YulFunctionCall","src":"30777:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"30802:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30773:3:124"},"nodeType":"YulFunctionCall","src":"30773:36:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30745:6:124"},"nodeType":"YulFunctionCall","src":"30745:65:124"},"nodeType":"YulExpressionStatement","src":"30745:65:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30830:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30841:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30826:3:124"},"nodeType":"YulFunctionCall","src":"30826:20:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30858:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30866:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30854:3:124"},"nodeType":"YulFunctionCall","src":"30854:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30848:5:124"},"nodeType":"YulFunctionCall","src":"30848:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30819:6:124"},"nodeType":"YulFunctionCall","src":"30819:53:124"},"nodeType":"YulExpressionStatement","src":"30819:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30892:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30903:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30888:3:124"},"nodeType":"YulFunctionCall","src":"30888:19:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30919:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30927:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30915:3:124"},"nodeType":"YulFunctionCall","src":"30915:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30909:5:124"},"nodeType":"YulFunctionCall","src":"30909:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30881:6:124"},"nodeType":"YulFunctionCall","src":"30881:52:124"},"nodeType":"YulExpressionStatement","src":"30881:52:124"},{"nodeType":"YulAssignment","src":"30942:14:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"30950:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30942:4:124"}]}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30207:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"30218:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"30226:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30237:4:124","type":""}],"src":"30002:960:124"},{"body":{"nodeType":"YulBlock","src":"31454:545:124","statements":[{"nodeType":"YulAssignment","src":"31464:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31476:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31487:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31472:3:124"},"nodeType":"YulFunctionCall","src":"31472:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31464:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31507:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"31518:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31500:6:124"},"nodeType":"YulFunctionCall","src":"31500:25:124"},"nodeType":"YulExpressionStatement","src":"31500:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31545:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31556:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31541:3:124"},"nodeType":"YulFunctionCall","src":"31541:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"31561:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31534:6:124"},"nodeType":"YulFunctionCall","src":"31534:34:124"},"nodeType":"YulExpressionStatement","src":"31534:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31599:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31584:3:124"},"nodeType":"YulFunctionCall","src":"31584:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"31604:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31577:6:124"},"nodeType":"YulFunctionCall","src":"31577:34:124"},"nodeType":"YulExpressionStatement","src":"31577:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31642:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31627:3:124"},"nodeType":"YulFunctionCall","src":"31627:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"31647:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31620:6:124"},"nodeType":"YulFunctionCall","src":"31620:34:124"},"nodeType":"YulExpressionStatement","src":"31620:34:124"},{"nodeType":"YulVariableDeclaration","src":"31663:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"31673:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"31667:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31735:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31746:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31731:3:124"},"nodeType":"YulFunctionCall","src":"31731:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"31756:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"31764:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31752:3:124"},"nodeType":"YulFunctionCall","src":"31752:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31724:6:124"},"nodeType":"YulFunctionCall","src":"31724:44:124"},"nodeType":"YulExpressionStatement","src":"31724:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31788:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31799:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31784:3:124"},"nodeType":"YulFunctionCall","src":"31784:19:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"31819:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31812:6:124"},"nodeType":"YulFunctionCall","src":"31812:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31805:6:124"},"nodeType":"YulFunctionCall","src":"31805:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31777:6:124"},"nodeType":"YulFunctionCall","src":"31777:51:124"},"nodeType":"YulExpressionStatement","src":"31777:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31848:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31859:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31844:3:124"},"nodeType":"YulFunctionCall","src":"31844:19:124"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"31869:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31877:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31865:3:124"},"nodeType":"YulFunctionCall","src":"31865:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31837:6:124"},"nodeType":"YulFunctionCall","src":"31837:48:124"},"nodeType":"YulExpressionStatement","src":"31837:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31905:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31916:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31901:3:124"},"nodeType":"YulFunctionCall","src":"31901:19:124"},{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"31926:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"31934:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31922:3:124"},"nodeType":"YulFunctionCall","src":"31922:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31894:6:124"},"nodeType":"YulFunctionCall","src":"31894:44:124"},"nodeType":"YulExpressionStatement","src":"31894:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31958:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31969:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31954:3:124"},"nodeType":"YulFunctionCall","src":"31954:19:124"},{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"31979:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31987:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31975:3:124"},"nodeType":"YulFunctionCall","src":"31975:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31947:6:124"},"nodeType":"YulFunctionCall","src":"31947:46:124"},"nodeType":"YulExpressionStatement","src":"31947:46:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"31359:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"31370:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"31378:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"31386:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"31394:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"31402:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"31410:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"31418:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"31426:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"31434:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"31445:4:124","type":""}],"src":"30967:1032:124"},{"body":{"nodeType":"YulBlock","src":"32470:658:124","statements":[{"nodeType":"YulAssignment","src":"32480:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32492:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32503:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32488:3:124"},"nodeType":"YulFunctionCall","src":"32488:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32480:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32523:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"32534:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32516:6:124"},"nodeType":"YulFunctionCall","src":"32516:25:124"},"nodeType":"YulExpressionStatement","src":"32516:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32561:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32572:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32557:3:124"},"nodeType":"YulFunctionCall","src":"32557:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"32577:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32550:6:124"},"nodeType":"YulFunctionCall","src":"32550:34:124"},"nodeType":"YulExpressionStatement","src":"32550:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32604:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32615:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32600:3:124"},"nodeType":"YulFunctionCall","src":"32600:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"32620:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32593:6:124"},"nodeType":"YulFunctionCall","src":"32593:34:124"},"nodeType":"YulExpressionStatement","src":"32593:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32647:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32658:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32643:3:124"},"nodeType":"YulFunctionCall","src":"32643:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"32663:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32636:6:124"},"nodeType":"YulFunctionCall","src":"32636:34:124"},"nodeType":"YulExpressionStatement","src":"32636:34:124"},{"nodeType":"YulVariableDeclaration","src":"32679:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"32689:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"32683:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32751:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32762:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32747:3:124"},"nodeType":"YulFunctionCall","src":"32747:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32778:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"32772:5:124"},"nodeType":"YulFunctionCall","src":"32772:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"32787:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32768:3:124"},"nodeType":"YulFunctionCall","src":"32768:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32740:6:124"},"nodeType":"YulFunctionCall","src":"32740:51:124"},"nodeType":"YulExpressionStatement","src":"32740:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32822:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32807:3:124"},"nodeType":"YulFunctionCall","src":"32807:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32838:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"32846:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32834:3:124"},"nodeType":"YulFunctionCall","src":"32834:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"32828:5:124"},"nodeType":"YulFunctionCall","src":"32828:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32800:6:124"},"nodeType":"YulFunctionCall","src":"32800:51:124"},"nodeType":"YulExpressionStatement","src":"32800:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32871:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32882:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32867:3:124"},"nodeType":"YulFunctionCall","src":"32867:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32902:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"32910:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32898:3:124"},"nodeType":"YulFunctionCall","src":"32898:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"32892:5:124"},"nodeType":"YulFunctionCall","src":"32892:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"32916:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32888:3:124"},"nodeType":"YulFunctionCall","src":"32888:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32860:6:124"},"nodeType":"YulFunctionCall","src":"32860:60:124"},"nodeType":"YulExpressionStatement","src":"32860:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32940:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32951:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32936:3:124"},"nodeType":"YulFunctionCall","src":"32936:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32967:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"32975:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32963:3:124"},"nodeType":"YulFunctionCall","src":"32963:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"32957:5:124"},"nodeType":"YulFunctionCall","src":"32957:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32929:6:124"},"nodeType":"YulFunctionCall","src":"32929:51:124"},"nodeType":"YulExpressionStatement","src":"32929:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33000:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33011:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32996:3:124"},"nodeType":"YulFunctionCall","src":"32996:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33031:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33039:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33027:3:124"},"nodeType":"YulFunctionCall","src":"33027:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33021:5:124"},"nodeType":"YulFunctionCall","src":"33021:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"33046:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33017:3:124"},"nodeType":"YulFunctionCall","src":"33017:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32989:6:124"},"nodeType":"YulFunctionCall","src":"32989:61:124"},"nodeType":"YulExpressionStatement","src":"32989:61:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33070:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33081:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33066:3:124"},"nodeType":"YulFunctionCall","src":"33066:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33101:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33109:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33097:3:124"},"nodeType":"YulFunctionCall","src":"33097:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33091:5:124"},"nodeType":"YulFunctionCall","src":"33091:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"33116:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33087:3:124"},"nodeType":"YulFunctionCall","src":"33087:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33059:6:124"},"nodeType":"YulFunctionCall","src":"33059:63:124"},"nodeType":"YulExpressionStatement","src":"33059:63:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32407:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"32418:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"32426:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32434:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32442:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32450:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32461:4:124","type":""}],"src":"32004:1124:124"},{"body":{"nodeType":"YulBlock","src":"33521:430:124","statements":[{"nodeType":"YulAssignment","src":"33531:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33543:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33554:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33539:3:124"},"nodeType":"YulFunctionCall","src":"33539:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33531:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33574:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"33585:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33567:6:124"},"nodeType":"YulFunctionCall","src":"33567:25:124"},"nodeType":"YulExpressionStatement","src":"33567:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33612:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33623:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33608:3:124"},"nodeType":"YulFunctionCall","src":"33608:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"33628:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33601:6:124"},"nodeType":"YulFunctionCall","src":"33601:34:124"},"nodeType":"YulExpressionStatement","src":"33601:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33655:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33666:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33651:3:124"},"nodeType":"YulFunctionCall","src":"33651:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"33671:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33644:6:124"},"nodeType":"YulFunctionCall","src":"33644:34:124"},"nodeType":"YulExpressionStatement","src":"33644:34:124"},{"nodeType":"YulVariableDeclaration","src":"33687:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"33697:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"33691:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33759:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33770:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33755:3:124"},"nodeType":"YulFunctionCall","src":"33755:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"33779:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"33787:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33775:3:124"},"nodeType":"YulFunctionCall","src":"33775:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33748:6:124"},"nodeType":"YulFunctionCall","src":"33748:43:124"},"nodeType":"YulExpressionStatement","src":"33748:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33822:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33807:3:124"},"nodeType":"YulFunctionCall","src":"33807:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"33828:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33800:6:124"},"nodeType":"YulFunctionCall","src":"33800:35:124"},"nodeType":"YulExpressionStatement","src":"33800:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33855:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33866:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33851:3:124"},"nodeType":"YulFunctionCall","src":"33851:19:124"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"33876:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"33884:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33872:3:124"},"nodeType":"YulFunctionCall","src":"33872:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33844:6:124"},"nodeType":"YulFunctionCall","src":"33844:44:124"},"nodeType":"YulExpressionStatement","src":"33844:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33908:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33919:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33904:3:124"},"nodeType":"YulFunctionCall","src":"33904:19:124"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"33929:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33937:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33925:3:124"},"nodeType":"YulFunctionCall","src":"33925:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33897:6:124"},"nodeType":"YulFunctionCall","src":"33897:48:124"},"nodeType":"YulExpressionStatement","src":"33897:48:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33442:9:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"33453:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"33461:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"33469:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"33477:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"33485:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"33493:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"33501:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33512:4:124","type":""}],"src":"33133:818:124"},{"body":{"nodeType":"YulBlock","src":"34011:382:124","statements":[{"nodeType":"YulAssignment","src":"34021:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34035:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"34038:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"34031:3:124"},"nodeType":"YulFunctionCall","src":"34031:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"34021:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"34052:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34082:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"34088:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34078:3:124"},"nodeType":"YulFunctionCall","src":"34078:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"34056:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"34129:31:124","statements":[{"nodeType":"YulAssignment","src":"34131:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"34145:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34153:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34141:3:124"},"nodeType":"YulFunctionCall","src":"34141:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"34131:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"34109:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"34102:6:124"},"nodeType":"YulFunctionCall","src":"34102:26:124"},"nodeType":"YulIf","src":"34099:61:124"},{"body":{"nodeType":"YulBlock","src":"34219:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34240:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34243:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34233:6:124"},"nodeType":"YulFunctionCall","src":"34233:88:124"},"nodeType":"YulExpressionStatement","src":"34233:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34341:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"34344:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34334:6:124"},"nodeType":"YulFunctionCall","src":"34334:15:124"},"nodeType":"YulExpressionStatement","src":"34334:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34369:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34372:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"34362:6:124"},"nodeType":"YulFunctionCall","src":"34362:15:124"},"nodeType":"YulExpressionStatement","src":"34362:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"34175:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"34198:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34206:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"34195:2:124"},"nodeType":"YulFunctionCall","src":"34195:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"34172:2:124"},"nodeType":"YulFunctionCall","src":"34172:38:124"},"nodeType":"YulIf","src":"34169:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"33991:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"34000:6:124","type":""}],"src":"33956:437:124"},{"body":{"nodeType":"YulBlock","src":"34712:746:124","statements":[{"nodeType":"YulAssignment","src":"34722:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34734:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34745:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34730:3:124"},"nodeType":"YulFunctionCall","src":"34730:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"34722:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34765:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"34776:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34758:6:124"},"nodeType":"YulFunctionCall","src":"34758:25:124"},"nodeType":"YulExpressionStatement","src":"34758:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34803:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34814:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34799:3:124"},"nodeType":"YulFunctionCall","src":"34799:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"34819:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34792:6:124"},"nodeType":"YulFunctionCall","src":"34792:34:124"},"nodeType":"YulExpressionStatement","src":"34792:34:124"},{"nodeType":"YulVariableDeclaration","src":"34835:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"34845:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"34839:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34907:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34918:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34903:3:124"},"nodeType":"YulFunctionCall","src":"34903:18:124"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"34933:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34927:5:124"},"nodeType":"YulFunctionCall","src":"34927:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34942:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34923:3:124"},"nodeType":"YulFunctionCall","src":"34923:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34896:6:124"},"nodeType":"YulFunctionCall","src":"34896:50:124"},"nodeType":"YulExpressionStatement","src":"34896:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34966:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34977:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34962:3:124"},"nodeType":"YulFunctionCall","src":"34962:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"34996:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35004:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34992:3:124"},"nodeType":"YulFunctionCall","src":"34992:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34986:5:124"},"nodeType":"YulFunctionCall","src":"34986:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35010:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34982:3:124"},"nodeType":"YulFunctionCall","src":"34982:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34955:6:124"},"nodeType":"YulFunctionCall","src":"34955:59:124"},"nodeType":"YulExpressionStatement","src":"34955:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35034:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35045:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35030:3:124"},"nodeType":"YulFunctionCall","src":"35030:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35065:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35073:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35061:3:124"},"nodeType":"YulFunctionCall","src":"35061:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35055:5:124"},"nodeType":"YulFunctionCall","src":"35055:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35079:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35051:3:124"},"nodeType":"YulFunctionCall","src":"35051:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35023:6:124"},"nodeType":"YulFunctionCall","src":"35023:60:124"},"nodeType":"YulExpressionStatement","src":"35023:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35103:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35114:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35099:3:124"},"nodeType":"YulFunctionCall","src":"35099:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35134:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35142:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35130:3:124"},"nodeType":"YulFunctionCall","src":"35130:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35124:5:124"},"nodeType":"YulFunctionCall","src":"35124:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35148:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35120:3:124"},"nodeType":"YulFunctionCall","src":"35120:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35092:6:124"},"nodeType":"YulFunctionCall","src":"35092:60:124"},"nodeType":"YulExpressionStatement","src":"35092:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35172:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35183:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35168:3:124"},"nodeType":"YulFunctionCall","src":"35168:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35203:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35211:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35199:3:124"},"nodeType":"YulFunctionCall","src":"35199:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35193:5:124"},"nodeType":"YulFunctionCall","src":"35193:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35218:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35189:3:124"},"nodeType":"YulFunctionCall","src":"35189:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35161:6:124"},"nodeType":"YulFunctionCall","src":"35161:61:124"},"nodeType":"YulExpressionStatement","src":"35161:61:124"},{"nodeType":"YulVariableDeclaration","src":"35231:43:124","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35261:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35269:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35257:3:124"},"nodeType":"YulFunctionCall","src":"35257:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35251:5:124"},"nodeType":"YulFunctionCall","src":"35251:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"35235:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"35301:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35319:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35330:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35315:3:124"},"nodeType":"YulFunctionCall","src":"35315:19:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"35283:17:124"},"nodeType":"YulFunctionCall","src":"35283:52:124"},"nodeType":"YulExpressionStatement","src":"35283:52:124"},{"nodeType":"YulVariableDeclaration","src":"35344:45:124","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35376:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35384:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35372:3:124"},"nodeType":"YulFunctionCall","src":"35372:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35366:5:124"},"nodeType":"YulFunctionCall","src":"35366:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"35348:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"35416:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35436:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35447:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35432:3:124"},"nodeType":"YulFunctionCall","src":"35432:19:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"35398:17:124"},"nodeType":"YulFunctionCall","src":"35398:54:124"},"nodeType":"YulExpressionStatement","src":"35398:54:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"34665:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"34676:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"34684:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"34692:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"34703:4:124","type":""}],"src":"34398:1060:124"},{"body":{"nodeType":"YulBlock","src":"35541:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"35587:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35596:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35599:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"35589:6:124"},"nodeType":"YulFunctionCall","src":"35589:12:124"},"nodeType":"YulExpressionStatement","src":"35589:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"35562:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"35571:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35558:3:124"},"nodeType":"YulFunctionCall","src":"35558:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"35583:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"35554:3:124"},"nodeType":"YulFunctionCall","src":"35554:32:124"},"nodeType":"YulIf","src":"35551:52:124"},{"nodeType":"YulVariableDeclaration","src":"35612:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35631:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35625:5:124"},"nodeType":"YulFunctionCall","src":"35625:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"35616:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"35672:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"35650:21:124"},"nodeType":"YulFunctionCall","src":"35650:28:124"},"nodeType":"YulExpressionStatement","src":"35650:28:124"},{"nodeType":"YulAssignment","src":"35687:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"35697:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"35687:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35507:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"35518:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"35530:6:124","type":""}],"src":"35463:245:124"},{"body":{"nodeType":"YulBlock","src":"35745:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35762:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35765:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35755:6:124"},"nodeType":"YulFunctionCall","src":"35755:88:124"},"nodeType":"YulExpressionStatement","src":"35755:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35859:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"35862:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35852:6:124"},"nodeType":"YulFunctionCall","src":"35852:15:124"},"nodeType":"YulExpressionStatement","src":"35852:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35883:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35886:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"35876:6:124"},"nodeType":"YulFunctionCall","src":"35876:15:124"},"nodeType":"YulExpressionStatement","src":"35876:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"35713:184:124"},{"body":{"nodeType":"YulBlock","src":"35948:151:124","statements":[{"nodeType":"YulVariableDeclaration","src":"35958:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"35968:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"35962:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"35983:29:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"36002:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36009:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35998:3:124"},"nodeType":"YulFunctionCall","src":"35998:14:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"35987:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"36040:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"36042:16:124"},"nodeType":"YulFunctionCall","src":"36042:18:124"},"nodeType":"YulExpressionStatement","src":"36042:18:124"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"36027:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36036:2:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"36024:2:124"},"nodeType":"YulFunctionCall","src":"36024:15:124"},"nodeType":"YulIf","src":"36021:41:124"},{"nodeType":"YulAssignment","src":"36071:22:124","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"36082:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"36091:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36078:3:124"},"nodeType":"YulFunctionCall","src":"36078:15:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"36071:3:124"}]}]},"name":"increment_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"35930:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"35940:3:124","type":""}],"src":"35902:197:124"},{"body":{"nodeType":"YulBlock","src":"36380:281:124","statements":[{"nodeType":"YulAssignment","src":"36390:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36402:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36413:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36398:3:124"},"nodeType":"YulFunctionCall","src":"36398:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"36390:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36433:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"36444:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36426:6:124"},"nodeType":"YulFunctionCall","src":"36426:25:124"},"nodeType":"YulExpressionStatement","src":"36426:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36471:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36482:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36467:3:124"},"nodeType":"YulFunctionCall","src":"36467:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"36487:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36460:6:124"},"nodeType":"YulFunctionCall","src":"36460:34:124"},"nodeType":"YulExpressionStatement","src":"36460:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36514:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36525:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36510:3:124"},"nodeType":"YulFunctionCall","src":"36510:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36534:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36542:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36530:3:124"},"nodeType":"YulFunctionCall","src":"36530:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36503:6:124"},"nodeType":"YulFunctionCall","src":"36503:83:124"},"nodeType":"YulExpressionStatement","src":"36503:83:124"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"36628:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36651:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36636:3:124"},"nodeType":"YulFunctionCall","src":"36636:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"36595:32:124"},"nodeType":"YulFunctionCall","src":"36595:60:124"},"nodeType":"YulExpressionStatement","src":"36595:60:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36325:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"36336:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"36344:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"36352:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"36360:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36371:4:124","type":""}],"src":"36104:557:124"},{"body":{"nodeType":"YulBlock","src":"36915:610:124","statements":[{"nodeType":"YulVariableDeclaration","src":"36925:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36943:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36954:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36939:3:124"},"nodeType":"YulFunctionCall","src":"36939:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"36929:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36973:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"36984:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36966:6:124"},"nodeType":"YulFunctionCall","src":"36966:25:124"},"nodeType":"YulExpressionStatement","src":"36966:25:124"},{"nodeType":"YulVariableDeclaration","src":"37000:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"37010:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"37004:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37032:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37043:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37028:3:124"},"nodeType":"YulFunctionCall","src":"37028:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"37048:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37021:6:124"},"nodeType":"YulFunctionCall","src":"37021:30:124"},"nodeType":"YulExpressionStatement","src":"37021:30:124"},{"nodeType":"YulVariableDeclaration","src":"37060:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"37071:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"37064:3:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"37093:6:124"},{"name":"value2","nodeType":"YulIdentifier","src":"37101:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37086:6:124"},"nodeType":"YulFunctionCall","src":"37086:22:124"},"nodeType":"YulExpressionStatement","src":"37086:22:124"},{"nodeType":"YulAssignment","src":"37117:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37128:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37139:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37124:3:124"},"nodeType":"YulFunctionCall","src":"37124:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"37117:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"37151:20:124","value":{"name":"value1","nodeType":"YulIdentifier","src":"37165:6:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"37155:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"37180:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"37189:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"37184:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"37248:251:124","statements":[{"nodeType":"YulVariableDeclaration","src":"37262:33:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37288:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"37275:12:124"},"nodeType":"YulFunctionCall","src":"37275:20:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"37266:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37333:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"37308:24:124"},"nodeType":"YulFunctionCall","src":"37308:31:124"},"nodeType":"YulExpressionStatement","src":"37308:31:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"37359:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37368:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"37375:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37364:3:124"},"nodeType":"YulFunctionCall","src":"37364:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37352:6:124"},"nodeType":"YulFunctionCall","src":"37352:67:124"},"nodeType":"YulExpressionStatement","src":"37352:67:124"},{"nodeType":"YulAssignment","src":"37432:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"37443:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37448:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37439:3:124"},"nodeType":"YulFunctionCall","src":"37439:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"37432:3:124"}]},{"nodeType":"YulAssignment","src":"37464:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37478:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37486:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37474:3:124"},"nodeType":"YulFunctionCall","src":"37474:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37464:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"37210:1:124"},{"name":"value2","nodeType":"YulIdentifier","src":"37213:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"37207:2:124"},"nodeType":"YulFunctionCall","src":"37207:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"37221:18:124","statements":[{"nodeType":"YulAssignment","src":"37223:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"37232:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"37235:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37228:3:124"},"nodeType":"YulFunctionCall","src":"37228:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"37223:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"37203:3:124","statements":[]},"src":"37199:300:124"},{"nodeType":"YulAssignment","src":"37508:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"37516:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37508:4:124"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36868:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"36879:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"36887:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"36895:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36906:4:124","type":""}],"src":"36666:859:124"},{"body":{"nodeType":"YulBlock","src":"37992:1498:124","statements":[{"nodeType":"YulAssignment","src":"38002:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38014:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38025:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38010:3:124"},"nodeType":"YulFunctionCall","src":"38010:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"38002:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38045:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"38056:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38038:6:124"},"nodeType":"YulFunctionCall","src":"38038:25:124"},"nodeType":"YulExpressionStatement","src":"38038:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38083:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38094:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38079:3:124"},"nodeType":"YulFunctionCall","src":"38079:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"38099:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38072:6:124"},"nodeType":"YulFunctionCall","src":"38072:34:124"},"nodeType":"YulExpressionStatement","src":"38072:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38126:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38137:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38122:3:124"},"nodeType":"YulFunctionCall","src":"38122:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"38142:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38115:6:124"},"nodeType":"YulFunctionCall","src":"38115:34:124"},"nodeType":"YulExpressionStatement","src":"38115:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38169:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38180:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38165:3:124"},"nodeType":"YulFunctionCall","src":"38165:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"38185:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38158:6:124"},"nodeType":"YulFunctionCall","src":"38158:34:124"},"nodeType":"YulExpressionStatement","src":"38158:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38226:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38220:5:124"},"nodeType":"YulFunctionCall","src":"38220:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38239:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38250:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38235:3:124"},"nodeType":"YulFunctionCall","src":"38235:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38201:18:124"},"nodeType":"YulFunctionCall","src":"38201:54:124"},"nodeType":"YulExpressionStatement","src":"38201:54:124"},{"nodeType":"YulVariableDeclaration","src":"38264:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38294:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38302:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38290:3:124"},"nodeType":"YulFunctionCall","src":"38290:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38284:5:124"},"nodeType":"YulFunctionCall","src":"38284:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"38268:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"38334:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38352:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38363:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38348:3:124"},"nodeType":"YulFunctionCall","src":"38348:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38315:18:124"},"nodeType":"YulFunctionCall","src":"38315:53:124"},"nodeType":"YulExpressionStatement","src":"38315:53:124"},{"nodeType":"YulVariableDeclaration","src":"38377:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38409:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38417:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38405:3:124"},"nodeType":"YulFunctionCall","src":"38405:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38399:5:124"},"nodeType":"YulFunctionCall","src":"38399:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"38381:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"38449:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38469:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38480:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38465:3:124"},"nodeType":"YulFunctionCall","src":"38465:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38430:18:124"},"nodeType":"YulFunctionCall","src":"38430:55:124"},"nodeType":"YulExpressionStatement","src":"38430:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38505:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38516:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38501:3:124"},"nodeType":"YulFunctionCall","src":"38501:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38532:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38540:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38528:3:124"},"nodeType":"YulFunctionCall","src":"38528:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38522:5:124"},"nodeType":"YulFunctionCall","src":"38522:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38494:6:124"},"nodeType":"YulFunctionCall","src":"38494:51:124"},"nodeType":"YulExpressionStatement","src":"38494:51:124"},{"nodeType":"YulVariableDeclaration","src":"38554:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38586:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38594:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38582:3:124"},"nodeType":"YulFunctionCall","src":"38582:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38576:5:124"},"nodeType":"YulFunctionCall","src":"38576:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"38558:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"38608:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"38618:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"38612:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"38663:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38683:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"38694:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38679:3:124"},"nodeType":"YulFunctionCall","src":"38679:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"38630:32:124"},"nodeType":"YulFunctionCall","src":"38630:68:124"},"nodeType":"YulExpressionStatement","src":"38630:68:124"},{"nodeType":"YulVariableDeclaration","src":"38707:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38739:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38747:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38735:3:124"},"nodeType":"YulFunctionCall","src":"38735:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38729:5:124"},"nodeType":"YulFunctionCall","src":"38729:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"38711:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"38761:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"38771:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"38765:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"38801:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38821:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"38832:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38817:3:124"},"nodeType":"YulFunctionCall","src":"38817:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"38783:17:124"},"nodeType":"YulFunctionCall","src":"38783:53:124"},"nodeType":"YulExpressionStatement","src":"38783:53:124"},{"nodeType":"YulVariableDeclaration","src":"38845:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38877:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38885:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38873:3:124"},"nodeType":"YulFunctionCall","src":"38873:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38867:5:124"},"nodeType":"YulFunctionCall","src":"38867:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"38849:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"38899:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"38909:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"38903:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"38937:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38957:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"38968:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38953:3:124"},"nodeType":"YulFunctionCall","src":"38953:18:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"38921:15:124"},"nodeType":"YulFunctionCall","src":"38921:51:124"},"nodeType":"YulExpressionStatement","src":"38921:51:124"},{"nodeType":"YulVariableDeclaration","src":"38981:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39001:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39009:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38997:3:124"},"nodeType":"YulFunctionCall","src":"38997:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38991:5:124"},"nodeType":"YulFunctionCall","src":"38991:23:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"38985:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39023:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39033:3:124","type":"","value":"352"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"39027:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39056:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"39067:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39052:3:124"},"nodeType":"YulFunctionCall","src":"39052:18:124"},{"name":"_4","nodeType":"YulIdentifier","src":"39072:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39045:6:124"},"nodeType":"YulFunctionCall","src":"39045:30:124"},"nodeType":"YulExpressionStatement","src":"39045:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39095:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39106:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39091:3:124"},"nodeType":"YulFunctionCall","src":"39091:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39122:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39130:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39118:3:124"},"nodeType":"YulFunctionCall","src":"39118:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39112:5:124"},"nodeType":"YulFunctionCall","src":"39112:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39084:6:124"},"nodeType":"YulFunctionCall","src":"39084:51:124"},"nodeType":"YulExpressionStatement","src":"39084:51:124"},{"nodeType":"YulVariableDeclaration","src":"39144:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39176:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"39184:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39172:3:124"},"nodeType":"YulFunctionCall","src":"39172:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39166:5:124"},"nodeType":"YulFunctionCall","src":"39166:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"39148:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"39216:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39236:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39247:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39232:3:124"},"nodeType":"YulFunctionCall","src":"39232:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39197:18:124"},"nodeType":"YulFunctionCall","src":"39197:55:124"},"nodeType":"YulExpressionStatement","src":"39197:55:124"},{"nodeType":"YulVariableDeclaration","src":"39261:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39293:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"39301:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39289:3:124"},"nodeType":"YulFunctionCall","src":"39289:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39283:5:124"},"nodeType":"YulFunctionCall","src":"39283:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"39265:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"39331:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39351:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39362:3:124","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39347:3:124"},"nodeType":"YulFunctionCall","src":"39347:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"39314:16:124"},"nodeType":"YulFunctionCall","src":"39314:53:124"},"nodeType":"YulExpressionStatement","src":"39314:53:124"},{"nodeType":"YulVariableDeclaration","src":"39376:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39408:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"39416:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39404:3:124"},"nodeType":"YulFunctionCall","src":"39404:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39398:5:124"},"nodeType":"YulFunctionCall","src":"39398:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"39380:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"39448:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39468:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39479:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39464:3:124"},"nodeType":"YulFunctionCall","src":"39464:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39429:18:124"},"nodeType":"YulFunctionCall","src":"39429:55:124"},"nodeType":"YulExpressionStatement","src":"39429:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37929:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"37940:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"37948:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"37956:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"37964:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"37972:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37983:4:124","type":""}],"src":"37530:1960:124"},{"body":{"nodeType":"YulBlock","src":"39556:423:124","statements":[{"nodeType":"YulVariableDeclaration","src":"39566:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"39586:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39580:5:124"},"nodeType":"YulFunctionCall","src":"39580:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"39570:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"39608:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"39613:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39601:6:124"},"nodeType":"YulFunctionCall","src":"39601:19:124"},"nodeType":"YulExpressionStatement","src":"39601:19:124"},{"nodeType":"YulVariableDeclaration","src":"39629:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39639:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"39633:2:124","type":""}]},{"nodeType":"YulAssignment","src":"39652:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"39663:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39668:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39659:3:124"},"nodeType":"YulFunctionCall","src":"39659:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"39652:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"39680:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"39698:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39705:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39694:3:124"},"nodeType":"YulFunctionCall","src":"39694:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"39684:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39717:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39726:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"39721:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"39785:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"39806:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"39821:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39815:5:124"},"nodeType":"YulFunctionCall","src":"39815:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"39830:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"39811:3:124"},"nodeType":"YulFunctionCall","src":"39811:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39799:6:124"},"nodeType":"YulFunctionCall","src":"39799:75:124"},"nodeType":"YulExpressionStatement","src":"39799:75:124"},{"nodeType":"YulAssignment","src":"39887:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"39898:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39903:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39894:3:124"},"nodeType":"YulFunctionCall","src":"39894:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"39887:3:124"}]},{"nodeType":"YulAssignment","src":"39919:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"39933:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39941:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39929:3:124"},"nodeType":"YulFunctionCall","src":"39929:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"39919:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"39747:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"39750:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"39744:2:124"},"nodeType":"YulFunctionCall","src":"39744:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"39758:18:124","statements":[{"nodeType":"YulAssignment","src":"39760:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"39769:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"39772:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39765:3:124"},"nodeType":"YulFunctionCall","src":"39765:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"39760:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"39740:3:124","statements":[]},"src":"39736:218:124"},{"nodeType":"YulAssignment","src":"39963:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"39970:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"39963:3:124"}]}]},"name":"abi_encode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"39533:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"39540:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"39548:3:124","type":""}],"src":"39495:484:124"},{"body":{"nodeType":"YulBlock","src":"40045:374:124","statements":[{"nodeType":"YulVariableDeclaration","src":"40055:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40075:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40069:5:124"},"nodeType":"YulFunctionCall","src":"40069:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"40059:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40097:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"40102:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40090:6:124"},"nodeType":"YulFunctionCall","src":"40090:19:124"},"nodeType":"YulExpressionStatement","src":"40090:19:124"},{"nodeType":"YulVariableDeclaration","src":"40118:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40128:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"40122:2:124","type":""}]},{"nodeType":"YulAssignment","src":"40141:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40152:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40157:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40148:3:124"},"nodeType":"YulFunctionCall","src":"40148:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40141:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"40169:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40187:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40194:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40183:3:124"},"nodeType":"YulFunctionCall","src":"40183:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"40173:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40206:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40215:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"40210:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"40274:120:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40295:3:124"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40306:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40300:5:124"},"nodeType":"YulFunctionCall","src":"40300:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40288:6:124"},"nodeType":"YulFunctionCall","src":"40288:26:124"},"nodeType":"YulExpressionStatement","src":"40288:26:124"},{"nodeType":"YulAssignment","src":"40327:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40338:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40343:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40334:3:124"},"nodeType":"YulFunctionCall","src":"40334:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40327:3:124"}]},{"nodeType":"YulAssignment","src":"40359:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40373:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40381:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40369:3:124"},"nodeType":"YulFunctionCall","src":"40369:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40359:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40236:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"40239:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"40233:2:124"},"nodeType":"YulFunctionCall","src":"40233:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"40247:18:124","statements":[{"nodeType":"YulAssignment","src":"40249:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40258:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"40261:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40254:3:124"},"nodeType":"YulFunctionCall","src":"40254:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"40249:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"40229:3:124","statements":[]},"src":"40225:169:124"},{"nodeType":"YulAssignment","src":"40403:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"40410:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"40403:3:124"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"40022:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"40029:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"40037:3:124","type":""}],"src":"39984:435:124"},{"body":{"nodeType":"YulBlock","src":"40878:2157:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40895:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"40906:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40888:6:124"},"nodeType":"YulFunctionCall","src":"40888:25:124"},"nodeType":"YulExpressionStatement","src":"40888:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40933:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40944:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40929:3:124"},"nodeType":"YulFunctionCall","src":"40929:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"40949:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40922:6:124"},"nodeType":"YulFunctionCall","src":"40922:34:124"},"nodeType":"YulExpressionStatement","src":"40922:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40976:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40987:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40972:3:124"},"nodeType":"YulFunctionCall","src":"40972:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"40992:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40965:6:124"},"nodeType":"YulFunctionCall","src":"40965:34:124"},"nodeType":"YulExpressionStatement","src":"40965:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41019:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41030:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41015:3:124"},"nodeType":"YulFunctionCall","src":"41015:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"41035:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41008:6:124"},"nodeType":"YulFunctionCall","src":"41008:34:124"},"nodeType":"YulExpressionStatement","src":"41008:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41062:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41073:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41058:3:124"},"nodeType":"YulFunctionCall","src":"41058:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"41079:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41051:6:124"},"nodeType":"YulFunctionCall","src":"41051:32:124"},"nodeType":"YulExpressionStatement","src":"41051:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41117:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41111:5:124"},"nodeType":"YulFunctionCall","src":"41111:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41130:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41141:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41126:3:124"},"nodeType":"YulFunctionCall","src":"41126:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"41092:18:124"},"nodeType":"YulFunctionCall","src":"41092:54:124"},"nodeType":"YulExpressionStatement","src":"41092:54:124"},{"nodeType":"YulVariableDeclaration","src":"41155:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41185:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"41193:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41181:3:124"},"nodeType":"YulFunctionCall","src":"41181:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41175:5:124"},"nodeType":"YulFunctionCall","src":"41175:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"41159:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41206:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41216:6:124","type":"","value":"0x01c0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"41210:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41242:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41253:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41238:3:124"},"nodeType":"YulFunctionCall","src":"41238:19:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41259:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41231:6:124"},"nodeType":"YulFunctionCall","src":"41231:31:124"},"nodeType":"YulExpressionStatement","src":"41231:31:124"},{"nodeType":"YulVariableDeclaration","src":"41271:77:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"41314:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41332:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41343:3:124","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41328:3:124"},"nodeType":"YulFunctionCall","src":"41328:19:124"}],"functionName":{"name":"abi_encode_array_address_dyn","nodeType":"YulIdentifier","src":"41285:28:124"},"nodeType":"YulFunctionCall","src":"41285:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"41275:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41357:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41389:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"41397:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41385:3:124"},"nodeType":"YulFunctionCall","src":"41385:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41379:5:124"},"nodeType":"YulFunctionCall","src":"41379:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"41361:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41410:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41420:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"41414:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41506:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41517:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41502:3:124"},"nodeType":"YulFunctionCall","src":"41502:19:124"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"41531:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"41539:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"41527:3:124"},"nodeType":"YulFunctionCall","src":"41527:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"41551:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41523:3:124"},"nodeType":"YulFunctionCall","src":"41523:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41495:6:124"},"nodeType":"YulFunctionCall","src":"41495:60:124"},"nodeType":"YulExpressionStatement","src":"41495:60:124"},{"nodeType":"YulVariableDeclaration","src":"41564:66:124","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"41607:14:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"41623:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"41578:28:124"},"nodeType":"YulFunctionCall","src":"41578:52:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"41568:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41639:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41671:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"41679:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41667:3:124"},"nodeType":"YulFunctionCall","src":"41667:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41661:5:124"},"nodeType":"YulFunctionCall","src":"41661:22:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"41643:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41692:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41702:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"41696:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41725:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"41736:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41721:3:124"},"nodeType":"YulFunctionCall","src":"41721:18:124"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"41749:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"41757:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"41745:3:124"},"nodeType":"YulFunctionCall","src":"41745:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"41769:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41741:3:124"},"nodeType":"YulFunctionCall","src":"41741:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41714:6:124"},"nodeType":"YulFunctionCall","src":"41714:59:124"},"nodeType":"YulExpressionStatement","src":"41714:59:124"},{"nodeType":"YulVariableDeclaration","src":"41782:66:124","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"41825:14:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"41841:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"41796:28:124"},"nodeType":"YulFunctionCall","src":"41796:52:124"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"41786:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41857:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41889:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"41897:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41885:3:124"},"nodeType":"YulFunctionCall","src":"41885:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41879:5:124"},"nodeType":"YulFunctionCall","src":"41879:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"41861:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41911:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41921:3:124","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"41915:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"41952:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41972:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"41983:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41968:3:124"},"nodeType":"YulFunctionCall","src":"41968:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"41933:18:124"},"nodeType":"YulFunctionCall","src":"41933:54:124"},"nodeType":"YulExpressionStatement","src":"41933:54:124"},{"nodeType":"YulVariableDeclaration","src":"41996:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42028:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42036:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42024:3:124"},"nodeType":"YulFunctionCall","src":"42024:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42018:5:124"},"nodeType":"YulFunctionCall","src":"42018:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"42000:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42050:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42060:3:124","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"42054:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42083:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"42094:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42079:3:124"},"nodeType":"YulFunctionCall","src":"42079:18:124"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"42107:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"42115:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42103:3:124"},"nodeType":"YulFunctionCall","src":"42103:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"42127:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42099:3:124"},"nodeType":"YulFunctionCall","src":"42099:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42072:6:124"},"nodeType":"YulFunctionCall","src":"42072:59:124"},"nodeType":"YulExpressionStatement","src":"42072:59:124"},{"nodeType":"YulVariableDeclaration","src":"42140:55:124","value":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"42172:14:124"},{"name":"tail_3","nodeType":"YulIdentifier","src":"42188:6:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"42154:17:124"},"nodeType":"YulFunctionCall","src":"42154:41:124"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"42144:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42204:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42236:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42244:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42232:3:124"},"nodeType":"YulFunctionCall","src":"42232:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42226:5:124"},"nodeType":"YulFunctionCall","src":"42226:23:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"42208:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42258:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42268:3:124","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"42262:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"42298:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42318:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"42329:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42314:3:124"},"nodeType":"YulFunctionCall","src":"42314:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"42280:17:124"},"nodeType":"YulFunctionCall","src":"42280:53:124"},"nodeType":"YulExpressionStatement","src":"42280:53:124"},{"nodeType":"YulVariableDeclaration","src":"42342:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42362:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42370:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42358:3:124"},"nodeType":"YulFunctionCall","src":"42358:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42352:5:124"},"nodeType":"YulFunctionCall","src":"42352:23:124"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"42346:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42384:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42394:3:124","type":"","value":"384"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"42388:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42417:9:124"},{"name":"_8","nodeType":"YulIdentifier","src":"42428:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42413:3:124"},"nodeType":"YulFunctionCall","src":"42413:18:124"},{"name":"_7","nodeType":"YulIdentifier","src":"42433:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42406:6:124"},"nodeType":"YulFunctionCall","src":"42406:30:124"},"nodeType":"YulExpressionStatement","src":"42406:30:124"},{"nodeType":"YulVariableDeclaration","src":"42445:32:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42465:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"42473:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42461:3:124"},"nodeType":"YulFunctionCall","src":"42461:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42455:5:124"},"nodeType":"YulFunctionCall","src":"42455:22:124"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"42449:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42486:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42497:3:124","type":"","value":"416"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"42490:3:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42520:9:124"},{"name":"_10","nodeType":"YulIdentifier","src":"42531:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42516:3:124"},"nodeType":"YulFunctionCall","src":"42516:19:124"},{"name":"_9","nodeType":"YulIdentifier","src":"42537:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42509:6:124"},"nodeType":"YulFunctionCall","src":"42509:31:124"},"nodeType":"YulExpressionStatement","src":"42509:31:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42560:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"42571:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42556:3:124"},"nodeType":"YulFunctionCall","src":"42556:18:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42586:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"42594:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42582:3:124"},"nodeType":"YulFunctionCall","src":"42582:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42576:5:124"},"nodeType":"YulFunctionCall","src":"42576:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42549:6:124"},"nodeType":"YulFunctionCall","src":"42549:50:124"},"nodeType":"YulExpressionStatement","src":"42549:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42619:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42630:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42615:3:124"},"nodeType":"YulFunctionCall","src":"42615:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42646:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"42654:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42642:3:124"},"nodeType":"YulFunctionCall","src":"42642:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42636:5:124"},"nodeType":"YulFunctionCall","src":"42636:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42608:6:124"},"nodeType":"YulFunctionCall","src":"42608:51:124"},"nodeType":"YulExpressionStatement","src":"42608:51:124"},{"nodeType":"YulVariableDeclaration","src":"42668:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42700:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"42708:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42696:3:124"},"nodeType":"YulFunctionCall","src":"42696:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42690:5:124"},"nodeType":"YulFunctionCall","src":"42690:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"42672:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"42740:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42760:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42771:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42756:3:124"},"nodeType":"YulFunctionCall","src":"42756:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"42721:18:124"},"nodeType":"YulFunctionCall","src":"42721:55:124"},"nodeType":"YulExpressionStatement","src":"42721:55:124"},{"nodeType":"YulVariableDeclaration","src":"42785:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42817:6:124"},{"name":"_8","nodeType":"YulIdentifier","src":"42825:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42813:3:124"},"nodeType":"YulFunctionCall","src":"42813:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42807:5:124"},"nodeType":"YulFunctionCall","src":"42807:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"42789:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"42855:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42875:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42886:3:124","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42871:3:124"},"nodeType":"YulFunctionCall","src":"42871:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"42838:16:124"},"nodeType":"YulFunctionCall","src":"42838:53:124"},"nodeType":"YulExpressionStatement","src":"42838:53:124"},{"nodeType":"YulVariableDeclaration","src":"42900:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42932:6:124"},{"name":"_10","nodeType":"YulIdentifier","src":"42940:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42928:3:124"},"nodeType":"YulFunctionCall","src":"42928:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42922:5:124"},"nodeType":"YulFunctionCall","src":"42922:23:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"42904:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"42970:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42990:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43001:3:124","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42986:3:124"},"nodeType":"YulFunctionCall","src":"42986:19:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"42954:15:124"},"nodeType":"YulFunctionCall","src":"42954:52:124"},"nodeType":"YulExpressionStatement","src":"42954:52:124"},{"nodeType":"YulAssignment","src":"43015:14:124","value":{"name":"tail_4","nodeType":"YulIdentifier","src":"43023:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"43015:4:124"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"40815:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"40826:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"40834:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"40842:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"40850:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"40858:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"40869:4:124","type":""}],"src":"40424:2611:124"},{"body":{"nodeType":"YulBlock","src":"43460:592:124","statements":[{"nodeType":"YulAssignment","src":"43470:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43482:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43493:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43478:3:124"},"nodeType":"YulFunctionCall","src":"43478:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"43470:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43513:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"43524:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43506:6:124"},"nodeType":"YulFunctionCall","src":"43506:25:124"},"nodeType":"YulExpressionStatement","src":"43506:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43551:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43562:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43547:3:124"},"nodeType":"YulFunctionCall","src":"43547:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"43567:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43540:6:124"},"nodeType":"YulFunctionCall","src":"43540:34:124"},"nodeType":"YulExpressionStatement","src":"43540:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43594:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43605:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43590:3:124"},"nodeType":"YulFunctionCall","src":"43590:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"43610:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43583:6:124"},"nodeType":"YulFunctionCall","src":"43583:34:124"},"nodeType":"YulExpressionStatement","src":"43583:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43637:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43648:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43633:3:124"},"nodeType":"YulFunctionCall","src":"43633:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"43665:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43659:5:124"},"nodeType":"YulFunctionCall","src":"43659:13:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43653:5:124"},"nodeType":"YulFunctionCall","src":"43653:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43626:6:124"},"nodeType":"YulFunctionCall","src":"43626:48:124"},"nodeType":"YulExpressionStatement","src":"43626:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43694:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43705:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43690:3:124"},"nodeType":"YulFunctionCall","src":"43690:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"43721:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43729:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43717:3:124"},"nodeType":"YulFunctionCall","src":"43717:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43711:5:124"},"nodeType":"YulFunctionCall","src":"43711:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43683:6:124"},"nodeType":"YulFunctionCall","src":"43683:51:124"},"nodeType":"YulExpressionStatement","src":"43683:51:124"},{"nodeType":"YulVariableDeclaration","src":"43743:42:124","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"43773:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43781:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43769:3:124"},"nodeType":"YulFunctionCall","src":"43769:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43763:5:124"},"nodeType":"YulFunctionCall","src":"43763:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"43747:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43794:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43804:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"43798:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43866:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43877:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43862:3:124"},"nodeType":"YulFunctionCall","src":"43862:19:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"43887:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"43901:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"43883:3:124"},"nodeType":"YulFunctionCall","src":"43883:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43855:6:124"},"nodeType":"YulFunctionCall","src":"43855:50:124"},"nodeType":"YulExpressionStatement","src":"43855:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43925:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43936:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43921:3:124"},"nodeType":"YulFunctionCall","src":"43921:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"43956:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43964:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43952:3:124"},"nodeType":"YulFunctionCall","src":"43952:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43946:5:124"},"nodeType":"YulFunctionCall","src":"43946:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"43970:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"43942:3:124"},"nodeType":"YulFunctionCall","src":"43942:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43914:6:124"},"nodeType":"YulFunctionCall","src":"43914:60:124"},"nodeType":"YulExpressionStatement","src":"43914:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43994:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44005:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43990:3:124"},"nodeType":"YulFunctionCall","src":"43990:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44025:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44033:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44021:3:124"},"nodeType":"YulFunctionCall","src":"44021:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44015:5:124"},"nodeType":"YulFunctionCall","src":"44015:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"44040:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"44011:3:124"},"nodeType":"YulFunctionCall","src":"44011:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43983:6:124"},"nodeType":"YulFunctionCall","src":"43983:63:124"},"nodeType":"YulExpressionStatement","src":"43983:63:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"43405:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"43416:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"43424:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"43432:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"43440:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"43451:4:124","type":""}],"src":"43040:1012:124"},{"body":{"nodeType":"YulBlock","src":"44223:326:124","statements":[{"body":{"nodeType":"YulBlock","src":"44270:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"44279:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"44282:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"44272:6:124"},"nodeType":"YulFunctionCall","src":"44272:12:124"},"nodeType":"YulExpressionStatement","src":"44272:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"44244:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"44253:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"44240:3:124"},"nodeType":"YulFunctionCall","src":"44240:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"44265:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"44236:3:124"},"nodeType":"YulFunctionCall","src":"44236:33:124"},"nodeType":"YulIf","src":"44233:53:124"},{"nodeType":"YulAssignment","src":"44295:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44311:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44305:5:124"},"nodeType":"YulFunctionCall","src":"44305:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"44295:6:124"}]},{"nodeType":"YulAssignment","src":"44330:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44350:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44361:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44346:3:124"},"nodeType":"YulFunctionCall","src":"44346:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44340:5:124"},"nodeType":"YulFunctionCall","src":"44340:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"44330:6:124"}]},{"nodeType":"YulAssignment","src":"44374:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44394:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44405:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44390:3:124"},"nodeType":"YulFunctionCall","src":"44390:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44384:5:124"},"nodeType":"YulFunctionCall","src":"44384:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"44374:6:124"}]},{"nodeType":"YulAssignment","src":"44418:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44438:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44449:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44434:3:124"},"nodeType":"YulFunctionCall","src":"44434:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44428:5:124"},"nodeType":"YulFunctionCall","src":"44428:25:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"44418:6:124"}]},{"nodeType":"YulAssignment","src":"44462:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44482:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44493:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44478:3:124"},"nodeType":"YulFunctionCall","src":"44478:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44472:5:124"},"nodeType":"YulFunctionCall","src":"44472:26:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"44462:6:124"}]},{"nodeType":"YulAssignment","src":"44507:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44527:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44538:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44523:3:124"},"nodeType":"YulFunctionCall","src":"44523:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44517:5:124"},"nodeType":"YulFunctionCall","src":"44517:26:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"44507:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"44149:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"44160:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"44172:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"44180:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"44188:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"44196:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"44204:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"44212:6:124","type":""}],"src":"44057:492:124"},{"body":{"nodeType":"YulBlock","src":"44728:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44745:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44756:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44738:6:124"},"nodeType":"YulFunctionCall","src":"44738:21:124"},"nodeType":"YulExpressionStatement","src":"44738:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44779:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44790:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44775:3:124"},"nodeType":"YulFunctionCall","src":"44775:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"44795:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44768:6:124"},"nodeType":"YulFunctionCall","src":"44768:30:124"},"nodeType":"YulExpressionStatement","src":"44768:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44818:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44829:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44814:3:124"},"nodeType":"YulFunctionCall","src":"44814:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"44834:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44807:6:124"},"nodeType":"YulFunctionCall","src":"44807:62:124"},"nodeType":"YulExpressionStatement","src":"44807:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44889:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44900:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44885:3:124"},"nodeType":"YulFunctionCall","src":"44885:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"44905:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44878:6:124"},"nodeType":"YulFunctionCall","src":"44878:44:124"},"nodeType":"YulExpressionStatement","src":"44878:44:124"},{"nodeType":"YulAssignment","src":"44931:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44943:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44954:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44939:3:124"},"nodeType":"YulFunctionCall","src":"44939:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"44931:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"44705:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"44719:4:124","type":""}],"src":"44554:410:124"},{"body":{"nodeType":"YulBlock","src":"45161:241:124","statements":[{"nodeType":"YulAssignment","src":"45171:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45194:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45179:3:124"},"nodeType":"YulFunctionCall","src":"45179:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"45171:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45213:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"45224:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45206:6:124"},"nodeType":"YulFunctionCall","src":"45206:25:124"},"nodeType":"YulExpressionStatement","src":"45206:25:124"},{"nodeType":"YulVariableDeclaration","src":"45240:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"45250:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"45244:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45312:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45323:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45308:3:124"},"nodeType":"YulFunctionCall","src":"45308:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"45332:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45340:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45328:3:124"},"nodeType":"YulFunctionCall","src":"45328:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45301:6:124"},"nodeType":"YulFunctionCall","src":"45301:43:124"},"nodeType":"YulExpressionStatement","src":"45301:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45364:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45375:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45360:3:124"},"nodeType":"YulFunctionCall","src":"45360:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"45384:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45392:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45380:3:124"},"nodeType":"YulFunctionCall","src":"45380:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45353:6:124"},"nodeType":"YulFunctionCall","src":"45353:43:124"},"nodeType":"YulExpressionStatement","src":"45353:43:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45114:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45125:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"45133:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"45141:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45152:4:124","type":""}],"src":"44969:433:124"},{"body":{"nodeType":"YulBlock","src":"45572:241:124","statements":[{"nodeType":"YulAssignment","src":"45582:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45594:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45605:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45590:3:124"},"nodeType":"YulFunctionCall","src":"45590:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"45582:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"45617:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"45627:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"45621:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45685:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"45700:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45708:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45696:3:124"},"nodeType":"YulFunctionCall","src":"45696:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45678:6:124"},"nodeType":"YulFunctionCall","src":"45678:34:124"},"nodeType":"YulExpressionStatement","src":"45678:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45732:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45743:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45728:3:124"},"nodeType":"YulFunctionCall","src":"45728:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"45752:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45760:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45748:3:124"},"nodeType":"YulFunctionCall","src":"45748:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45721:6:124"},"nodeType":"YulFunctionCall","src":"45721:43:124"},"nodeType":"YulExpressionStatement","src":"45721:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45784:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45795:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45780:3:124"},"nodeType":"YulFunctionCall","src":"45780:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"45800:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45773:6:124"},"nodeType":"YulFunctionCall","src":"45773:34:124"},"nodeType":"YulExpressionStatement","src":"45773:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45525:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45536:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"45544:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"45552:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45563:4:124","type":""}],"src":"45407:406:124"},{"body":{"nodeType":"YulBlock","src":"45867:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"45889:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"45891:16:124"},"nodeType":"YulFunctionCall","src":"45891:18:124"},"nodeType":"YulExpressionStatement","src":"45891:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"45883:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"45886:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"45880:2:124"},"nodeType":"YulFunctionCall","src":"45880:8:124"},"nodeType":"YulIf","src":"45877:34:124"},{"nodeType":"YulAssignment","src":"45920:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"45932:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"45935:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"45928:3:124"},"nodeType":"YulFunctionCall","src":"45928:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"45920:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"45849:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"45852:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"45858:4:124","type":""}],"src":"45818:125:124"},{"body":{"nodeType":"YulBlock","src":"45980:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"45997:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"46000:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45990:6:124"},"nodeType":"YulFunctionCall","src":"45990:88:124"},"nodeType":"YulExpressionStatement","src":"45990:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46094:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"46097:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46087:6:124"},"nodeType":"YulFunctionCall","src":"46087:15:124"},"nodeType":"YulExpressionStatement","src":"46087:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46118:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"46121:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"46111:6:124"},"nodeType":"YulFunctionCall","src":"46111:15:124"},"nodeType":"YulExpressionStatement","src":"46111:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"45948:184:124"},{"body":{"nodeType":"YulBlock","src":"46184:148:124","statements":[{"body":{"nodeType":"YulBlock","src":"46275:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"46277:16:124"},"nodeType":"YulFunctionCall","src":"46277:18:124"},"nodeType":"YulExpressionStatement","src":"46277:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"46200:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"46207:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"46197:2:124"},"nodeType":"YulFunctionCall","src":"46197:77:124"},"nodeType":"YulIf","src":"46194:103:124"},{"nodeType":"YulAssignment","src":"46306:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"46317:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"46324:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46313:3:124"},"nodeType":"YulFunctionCall","src":"46313:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"46306:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"46166:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"46176:3:124","type":""}],"src":"46137:195:124"},{"body":{"nodeType":"YulBlock","src":"46830:1027:124","statements":[{"nodeType":"YulAssignment","src":"46840:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46852:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46863:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46848:3:124"},"nodeType":"YulFunctionCall","src":"46848:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46840:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46883:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"46894:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46876:6:124"},"nodeType":"YulFunctionCall","src":"46876:25:124"},"nodeType":"YulExpressionStatement","src":"46876:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46921:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46932:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46917:3:124"},"nodeType":"YulFunctionCall","src":"46917:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"46937:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46910:6:124"},"nodeType":"YulFunctionCall","src":"46910:34:124"},"nodeType":"YulExpressionStatement","src":"46910:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46964:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46975:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46960:3:124"},"nodeType":"YulFunctionCall","src":"46960:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"46980:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46953:6:124"},"nodeType":"YulFunctionCall","src":"46953:34:124"},"nodeType":"YulExpressionStatement","src":"46953:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47007:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47018:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47003:3:124"},"nodeType":"YulFunctionCall","src":"47003:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"47023:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46996:6:124"},"nodeType":"YulFunctionCall","src":"46996:34:124"},"nodeType":"YulExpressionStatement","src":"46996:34:124"},{"nodeType":"YulVariableDeclaration","src":"47039:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"47049:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"47043:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47111:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47122:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47107:3:124"},"nodeType":"YulFunctionCall","src":"47107:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47138:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47132:5:124"},"nodeType":"YulFunctionCall","src":"47132:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"47147:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"47128:3:124"},"nodeType":"YulFunctionCall","src":"47128:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47100:6:124"},"nodeType":"YulFunctionCall","src":"47100:51:124"},"nodeType":"YulExpressionStatement","src":"47100:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47171:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47182:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47167:3:124"},"nodeType":"YulFunctionCall","src":"47167:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47202:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47210:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47198:3:124"},"nodeType":"YulFunctionCall","src":"47198:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47192:5:124"},"nodeType":"YulFunctionCall","src":"47192:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"47216:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"47188:3:124"},"nodeType":"YulFunctionCall","src":"47188:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47160:6:124"},"nodeType":"YulFunctionCall","src":"47160:60:124"},"nodeType":"YulExpressionStatement","src":"47160:60:124"},{"nodeType":"YulVariableDeclaration","src":"47229:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47259:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47267:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47255:3:124"},"nodeType":"YulFunctionCall","src":"47255:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47249:5:124"},"nodeType":"YulFunctionCall","src":"47249:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"47233:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"47299:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47317:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47328:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47313:3:124"},"nodeType":"YulFunctionCall","src":"47313:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"47280:18:124"},"nodeType":"YulFunctionCall","src":"47280:53:124"},"nodeType":"YulExpressionStatement","src":"47280:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47353:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47364:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47349:3:124"},"nodeType":"YulFunctionCall","src":"47349:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47380:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47388:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47376:3:124"},"nodeType":"YulFunctionCall","src":"47376:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47370:5:124"},"nodeType":"YulFunctionCall","src":"47370:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47342:6:124"},"nodeType":"YulFunctionCall","src":"47342:51:124"},"nodeType":"YulExpressionStatement","src":"47342:51:124"},{"nodeType":"YulVariableDeclaration","src":"47402:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47422:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47430:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47418:3:124"},"nodeType":"YulFunctionCall","src":"47418:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47412:5:124"},"nodeType":"YulFunctionCall","src":"47412:23:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"47406:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"47444:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"47454:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"47448:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47477:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"47488:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47473:3:124"},"nodeType":"YulFunctionCall","src":"47473:18:124"},{"name":"_2","nodeType":"YulIdentifier","src":"47493:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47466:6:124"},"nodeType":"YulFunctionCall","src":"47466:30:124"},"nodeType":"YulExpressionStatement","src":"47466:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47516:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47527:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47512:3:124"},"nodeType":"YulFunctionCall","src":"47512:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47543:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47551:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47539:3:124"},"nodeType":"YulFunctionCall","src":"47539:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47533:5:124"},"nodeType":"YulFunctionCall","src":"47533:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47505:6:124"},"nodeType":"YulFunctionCall","src":"47505:52:124"},"nodeType":"YulExpressionStatement","src":"47505:52:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47577:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47588:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47573:3:124"},"nodeType":"YulFunctionCall","src":"47573:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47604:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47612:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47600:3:124"},"nodeType":"YulFunctionCall","src":"47600:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47594:5:124"},"nodeType":"YulFunctionCall","src":"47594:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47566:6:124"},"nodeType":"YulFunctionCall","src":"47566:52:124"},"nodeType":"YulExpressionStatement","src":"47566:52:124"},{"nodeType":"YulVariableDeclaration","src":"47627:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47659:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47667:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47655:3:124"},"nodeType":"YulFunctionCall","src":"47655:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47649:5:124"},"nodeType":"YulFunctionCall","src":"47649:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"47631:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"47700:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47720:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47731:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47716:3:124"},"nodeType":"YulFunctionCall","src":"47716:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"47681:18:124"},"nodeType":"YulFunctionCall","src":"47681:55:124"},"nodeType":"YulExpressionStatement","src":"47681:55:124"},{"nodeType":"YulVariableDeclaration","src":"47745:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47777:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"47785:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47773:3:124"},"nodeType":"YulFunctionCall","src":"47773:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47767:5:124"},"nodeType":"YulFunctionCall","src":"47767:22:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"47749:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"47815:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47835:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47846:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47831:3:124"},"nodeType":"YulFunctionCall","src":"47831:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"47798:16:124"},"nodeType":"YulFunctionCall","src":"47798:53:124"},"nodeType":"YulExpressionStatement","src":"47798:53:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"46767:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"46778:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"46786:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"46794:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"46802:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"46810:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"46821:4:124","type":""}],"src":"46337:1520:124"},{"body":{"nodeType":"YulBlock","src":"48110:299:124","statements":[{"nodeType":"YulAssignment","src":"48120:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48132:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48143:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48128:3:124"},"nodeType":"YulFunctionCall","src":"48128:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"48120:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48163:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"48174:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48156:6:124"},"nodeType":"YulFunctionCall","src":"48156:25:124"},"nodeType":"YulExpressionStatement","src":"48156:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48201:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48212:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48197:3:124"},"nodeType":"YulFunctionCall","src":"48197:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"48221:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48229:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48217:3:124"},"nodeType":"YulFunctionCall","src":"48217:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48190:6:124"},"nodeType":"YulFunctionCall","src":"48190:83:124"},"nodeType":"YulExpressionStatement","src":"48190:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48293:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48304:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48289:3:124"},"nodeType":"YulFunctionCall","src":"48289:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"48309:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48282:6:124"},"nodeType":"YulFunctionCall","src":"48282:34:124"},"nodeType":"YulExpressionStatement","src":"48282:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48336:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48347:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48332:3:124"},"nodeType":"YulFunctionCall","src":"48332:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"48352:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48325:6:124"},"nodeType":"YulFunctionCall","src":"48325:34:124"},"nodeType":"YulExpressionStatement","src":"48325:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48379:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48390:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48375:3:124"},"nodeType":"YulFunctionCall","src":"48375:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"48396:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48368:6:124"},"nodeType":"YulFunctionCall","src":"48368:35:124"},"nodeType":"YulExpressionStatement","src":"48368:35:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"48047:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"48058:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"48066:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"48074:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"48082:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"48090:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"48101:4:124","type":""}],"src":"47862:547:124"},{"body":{"nodeType":"YulBlock","src":"48603:168:124","statements":[{"nodeType":"YulAssignment","src":"48613:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48625:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48636:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48621:3:124"},"nodeType":"YulFunctionCall","src":"48621:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"48613:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48655:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"48666:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48648:6:124"},"nodeType":"YulFunctionCall","src":"48648:25:124"},"nodeType":"YulExpressionStatement","src":"48648:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48693:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48704:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48689:3:124"},"nodeType":"YulFunctionCall","src":"48689:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"48713:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48721:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48709:3:124"},"nodeType":"YulFunctionCall","src":"48709:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48682:6:124"},"nodeType":"YulFunctionCall","src":"48682:83:124"},"nodeType":"YulExpressionStatement","src":"48682:83:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"48564:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"48575:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"48583:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"48594:4:124","type":""}],"src":"48414:357:124"},{"body":{"nodeType":"YulBlock","src":"48937:49:124","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"48954:4:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"48973:5:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"48960:12:124"},"nodeType":"YulFunctionCall","src":"48960:19:124"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"48947:6:124"},"nodeType":"YulFunctionCall","src":"48947:33:124"},"nodeType":"YulExpressionStatement","src":"48947:33:124"}]},"name":"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"48920:4:124","type":""},{"name":"value","nodeType":"YulTypedName","src":"48926:5:124","type":""}],"src":"48776:210:124"},{"body":{"nodeType":"YulBlock","src":"49043:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"49162:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"49164:16:124"},"nodeType":"YulFunctionCall","src":"49164:18:124"},"nodeType":"YulExpressionStatement","src":"49164:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49074:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49067:6:124"},"nodeType":"YulFunctionCall","src":"49067:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49060:6:124"},"nodeType":"YulFunctionCall","src":"49060:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49082:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49089:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"49157:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"49085:3:124"},"nodeType":"YulFunctionCall","src":"49085:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"49079:2:124"},"nodeType":"YulFunctionCall","src":"49079:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49056:3:124"},"nodeType":"YulFunctionCall","src":"49056:105:124"},"nodeType":"YulIf","src":"49053:131:124"},{"nodeType":"YulAssignment","src":"49193:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49208:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"49211:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"49204:3:124"},"nodeType":"YulFunctionCall","src":"49204:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"49193:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49022:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"49025:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"49031:7:124","type":""}],"src":"48991:228:124"},{"body":{"nodeType":"YulBlock","src":"49256:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49273:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49276:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49266:6:124"},"nodeType":"YulFunctionCall","src":"49266:88:124"},"nodeType":"YulExpressionStatement","src":"49266:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49370:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"49373:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49363:6:124"},"nodeType":"YulFunctionCall","src":"49363:15:124"},"nodeType":"YulExpressionStatement","src":"49363:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49394:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49397:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"49387:6:124"},"nodeType":"YulFunctionCall","src":"49387:15:124"},"nodeType":"YulExpressionStatement","src":"49387:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"49224:184:124"},{"body":{"nodeType":"YulBlock","src":"49461:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"49488:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"49490:16:124"},"nodeType":"YulFunctionCall","src":"49490:18:124"},"nodeType":"YulExpressionStatement","src":"49490:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49477:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49484:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"49480:3:124"},"nodeType":"YulFunctionCall","src":"49480:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"49474:2:124"},"nodeType":"YulFunctionCall","src":"49474:13:124"},"nodeType":"YulIf","src":"49471:39:124"},{"nodeType":"YulAssignment","src":"49519:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49530:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"49533:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49526:3:124"},"nodeType":"YulFunctionCall","src":"49526:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"49519:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49444:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"49447:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"49453:3:124","type":""}],"src":"49413:128:124"},{"body":{"nodeType":"YulBlock","src":"49592:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"49623:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49644:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49647:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49637:6:124"},"nodeType":"YulFunctionCall","src":"49637:88:124"},"nodeType":"YulExpressionStatement","src":"49637:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49745:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"49748:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49738:6:124"},"nodeType":"YulFunctionCall","src":"49738:15:124"},"nodeType":"YulExpressionStatement","src":"49738:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49773:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49776:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"49766:6:124"},"nodeType":"YulFunctionCall","src":"49766:15:124"},"nodeType":"YulExpressionStatement","src":"49766:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49612:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49605:6:124"},"nodeType":"YulFunctionCall","src":"49605:9:124"},"nodeType":"YulIf","src":"49602:189:124"},{"nodeType":"YulAssignment","src":"49800:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49809:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"49812:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"49805:3:124"},"nodeType":"YulFunctionCall","src":"49805:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"49800:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49577:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"49580:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"49586:1:124","type":""}],"src":"49546:274:124"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_bool(value_3)\n        value4 := value_3\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint128(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_struct_ReserveConfigurationMap(value, pos)\n    { mstore(pos, mload(value)) }\n    function abi_encode_uint40(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffff))\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 480)\n        abi_encode_struct_ReserveConfigurationMap(mload(value0), headStart)\n        let memberValue0 := mload(add(value0, 0x20))\n        abi_encode_uint128(memberValue0, add(headStart, 0x20))\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_uint128(memberValue0_1, add(headStart, 0x40))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_uint128(memberValue0_2, add(headStart, 0x60))\n        let memberValue0_3 := mload(add(value0, 0x80))\n        abi_encode_uint128(memberValue0_3, add(headStart, 0x80))\n        let memberValue0_4 := mload(add(value0, 0xa0))\n        abi_encode_uint128(memberValue0_4, add(headStart, 0xa0))\n        let memberValue0_5 := mload(add(value0, 0xc0))\n        abi_encode_uint40(memberValue0_5, add(headStart, 0xc0))\n        let memberValue0_6 := mload(add(value0, 0xe0))\n        abi_encode_uint16(memberValue0_6, add(headStart, 0xe0))\n        let _1 := 0x0100\n        let memberValue0_7 := mload(add(value0, _1))\n        abi_encode_address(memberValue0_7, add(headStart, _1))\n        let _2 := 0x0120\n        let memberValue0_8 := mload(add(value0, _2))\n        abi_encode_address(memberValue0_8, add(headStart, _2))\n        let _3 := 0x0140\n        let memberValue0_9 := mload(add(value0, _3))\n        abi_encode_address(memberValue0_9, add(headStart, _3))\n        let _4 := 0x0160\n        let memberValue0_10 := mload(add(value0, _4))\n        abi_encode_address(memberValue0_10, add(headStart, _4))\n        let _5 := 0x0180\n        let memberValue0_11 := mload(add(value0, _5))\n        abi_encode_uint128(memberValue0_11, add(headStart, _5))\n        let _6 := 0x01a0\n        let memberValue0_12 := mload(add(value0, _6))\n        abi_encode_uint128(memberValue0_12, add(headStart, _6))\n        let _7 := 0x01c0\n        let memberValue0_13 := mload(add(value0, _7))\n        abi_encode_uint128(memberValue0_13, add(headStart, _7))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := abi_decode_uint16(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint16(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let _1 := 0xffff\n        mstore(add(headStart, 32), and(mload(value0), _1))\n        mstore(add(headStart, 64), and(mload(add(value0, 32)), _1))\n        mstore(add(headStart, 96), and(mload(add(value0, 64)), _1))\n        mstore(add(headStart, 128), and(mload(add(value0, 96)), 0xffffffffffffffffffffffffffffffffffffffff))\n        let memberValue0 := mload(add(value0, 128))\n        mstore(add(headStart, 0xa0), 0xa0)\n        tail := abi_encode_string(memberValue0, add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        let value_3 := calldataload(add(headStart, 96))\n        validator_revert_address(value_3)\n        value3 := value_3\n        let value_4 := calldataload(add(headStart, 128))\n        validator_revert_address(value_4)\n        value4 := value_4\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_uint16(add(headStart, 96))\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        value4 := value_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 32)), _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 32))), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        if gt(calldataload(add(headStart, 64)), _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 64))), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        if gt(calldataload(add(headStart, 96)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 96))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        value7 := abi_decode_address(add(headStart, 128))\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value8_1, value9_1 := abi_decode_bytes_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value8 := value8_1\n        value9 := value9_1\n        value10 := abi_decode_uint16(add(headStart, 192))\n    }\n    function abi_decode_uint128(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint128t_uint128(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint128(headStart)\n        value1 := abi_decode_uint128(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_5567() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if slt(sub(dataEnd, _3), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_5567()\n        mstore(value, abi_decode_uint16(_3))\n        mstore(add(value, _1), abi_decode_uint16(add(_3, _1)))\n        mstore(add(value, 64), abi_decode_uint16(add(_3, 64)))\n        let value_1 := calldataload(add(_3, 96))\n        validator_revert_address(value_1)\n        mstore(add(value, 96), value_1)\n        let offset_1 := calldataload(add(_3, 128))\n        if gt(offset_1, _2) { revert(0, 0) }\n        let _4 := add(_3, offset_1)\n        if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n        let _5 := calldataload(_4)\n        if gt(_5, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_5, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _5)\n        if gt(add(add(_4, _5), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_4, _1), _5)\n        mstore(add(add(array, _5), _1), 0)\n        mstore(add(value, 128), array)\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32) { revert(0, 0) }\n        value1 := add(headStart, 32)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), mload(value4))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        let memberValue0 := mload(add(value4, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 192), and(memberValue0, _1))\n        mstore(add(headStart, 224), and(mload(add(value4, 96)), _1))\n        let memberValue0_1 := mload(add(value4, 128))\n        let _2 := 256\n        abi_encode_address(memberValue0_1, add(headStart, _2))\n        let memberValue0_2 := mload(add(value4, 160))\n        abi_encode_bool(memberValue0_2, add(headStart, 288))\n        let memberValue0_3 := mload(add(value4, 192))\n        abi_encode_address(memberValue0_3, add(headStart, 320))\n        let memberValue0_4 := mload(add(value4, 224))\n        abi_encode_uint8(memberValue0_4, add(headStart, 352))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        mstore(add(headStart, 160), and(mload(add(value3, 64)), _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), 0xffff))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), mload(value5))\n        mstore(add(headStart, 192), and(mload(add(value5, 32)), 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 224), and(mload(add(value5, 64)), 0xff))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        abi_encode_enum_InterestRateMode(memberValue0, add(headStart, 160))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), iszero(iszero(mload(add(value3, 128)))))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value1), _1))\n        mstore(add(headStart, 96), and(mload(add(value1, 32)), _1))\n        mstore(add(headStart, 128), mload(add(value1, 64)))\n        let memberValue0 := mload(add(value1, 96))\n        mstore(add(headStart, 160), 0xe0)\n        let tail_1 := abi_encode_string(memberValue0, add(headStart, 288))\n        mstore(add(headStart, 192), and(mload(add(value1, 128)), 0xffff))\n        mstore(add(headStart, 0xe0), mload(add(value1, 160)))\n        mstore(add(headStart, 256), mload(add(value1, 192)))\n        tail := tail_1\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(value4, _1))\n        mstore(add(headStart, 160), iszero(iszero(value5)))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n        mstore(add(headStart, 224), and(value7, _1))\n        mstore(add(headStart, 256), and(value8, 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 320)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        mstore(add(headStart, 192), and(mload(add(value4, 64)), _1))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        mstore(add(headStart, 256), and(mload(add(value4, 128)), _1))\n        mstore(add(headStart, 288), and(mload(add(value4, 160)), 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), and(value5, _1))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value2), _1))\n        mstore(add(headStart, 96), and(mload(add(value2, 32)), _1))\n        mstore(add(headStart, 128), and(mload(add(value2, 64)), _1))\n        mstore(add(headStart, 160), and(mload(add(value2, 96)), _1))\n        mstore(add(headStart, 192), and(mload(add(value2, 128)), _1))\n        let memberValue0 := mload(add(value2, 160))\n        abi_encode_uint16(memberValue0, add(headStart, 224))\n        let memberValue0_1 := mload(add(value2, 192))\n        abi_encode_uint16(memberValue0_1, add(headStart, 256))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint16(value) -> ret\n    {\n        let _1 := 0xffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        abi_encode_enum_InterestRateMode(value3, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        mstore(tail_1, value2)\n        pos := add(headStart, 96)\n        let srcPtr := value1\n        let i := 0\n        for { } lt(i, value2) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_address(value)\n            mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 512)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        abi_encode_address(mload(value4), add(headStart, 128))\n        let memberValue0 := mload(add(value4, 32))\n        abi_encode_address(memberValue0, add(headStart, 160))\n        let memberValue0_1 := mload(add(value4, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let memberValue0_2 := mload(add(value4, 128))\n        let _1 := 256\n        abi_encode_enum_InterestRateMode(memberValue0_2, add(headStart, _1))\n        let memberValue0_3 := mload(add(value4, 160))\n        let _2 := 288\n        abi_encode_uint16(memberValue0_3, add(headStart, _2))\n        let memberValue0_4 := mload(add(value4, 192))\n        let _3 := 320\n        abi_encode_bool(memberValue0_4, add(headStart, _3))\n        let _4 := mload(add(value4, 224))\n        let _5 := 352\n        mstore(add(headStart, _5), _4)\n        mstore(add(headStart, 384), mload(add(value4, _1)))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 416))\n        let memberValue0_6 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_6, add(headStart, 448))\n        let memberValue0_7 := mload(add(value4, _5))\n        abi_encode_address(memberValue0_7, add(headStart, 480))\n    }\n    function abi_encode_array_address_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 160)\n        abi_encode_address(mload(value4), add(headStart, 160))\n        let memberValue0 := mload(add(value4, 32))\n        let _1 := 0x01c0\n        mstore(add(headStart, 192), _1)\n        let tail_1 := abi_encode_array_address_dyn(memberValue0, add(headStart, 608))\n        let memberValue0_1 := mload(add(value4, 64))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60\n        mstore(add(headStart, 224), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_array_uint256_dyn(memberValue0_1, tail_1)\n        let memberValue0_2 := mload(add(value4, 96))\n        let _3 := 256\n        mstore(add(headStart, _3), add(sub(tail_2, headStart), _2))\n        let tail_3 := abi_encode_array_uint256_dyn(memberValue0_2, tail_2)\n        let memberValue0_3 := mload(add(value4, 128))\n        let _4 := 288\n        abi_encode_address(memberValue0_3, add(headStart, _4))\n        let memberValue0_4 := mload(add(value4, 160))\n        let _5 := 320\n        mstore(add(headStart, _5), add(sub(tail_3, headStart), _2))\n        let tail_4 := abi_encode_string(memberValue0_4, tail_3)\n        let memberValue0_5 := mload(add(value4, 192))\n        let _6 := 352\n        abi_encode_uint16(memberValue0_5, add(headStart, _6))\n        let _7 := mload(add(value4, 224))\n        let _8 := 384\n        mstore(add(headStart, _8), _7)\n        let _9 := mload(add(value4, _3))\n        let _10 := 416\n        mstore(add(headStart, _10), _9)\n        mstore(add(headStart, _1), mload(add(value4, _4)))\n        mstore(add(headStart, 480), mload(add(value4, _5)))\n        let memberValue0_6 := mload(add(value4, _6))\n        abi_encode_address(memberValue0_6, add(headStart, 512))\n        let memberValue0_7 := mload(add(value4, _8))\n        abi_encode_uint8(memberValue0_7, add(headStart, 544))\n        let memberValue0_8 := mload(add(value4, _10))\n        abi_encode_bool(memberValue0_8, add(headStart, 576))\n        tail := tail_4\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), mload(mload(value3)))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 160), and(memberValue0, _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), and(mload(add(value3, 128)), 0xff))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), and(mload(add(value4, 32)), _1))\n        let memberValue0 := mload(add(value4, 64))\n        abi_encode_address(memberValue0, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let _2 := mload(add(value4, 128))\n        let _3 := 256\n        mstore(add(headStart, _3), _2)\n        mstore(add(headStart, 288), mload(add(value4, 160)))\n        mstore(add(headStart, 320), mload(add(value4, 192)))\n        let memberValue0_1 := mload(add(value4, 224))\n        abi_encode_address(memberValue0_1, add(headStart, 352))\n        let memberValue0_2 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_2, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage(slot, value)\n    {\n        sstore(slot, calldataload(value))\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"25195":[{"length":32,"start":865},{"length":32,"start":3026},{"length":32,"start":3268},{"length":32,"start":4551},{"length":32,"start":6122},{"length":32,"start":6932},{"length":32,"start":8761},{"length":32,"start":8970},{"length":32,"start":9565},{"length":32,"start":10328},{"length":32,"start":10937},{"length":32,"start":12592},{"length":32,"start":14125},{"length":32,"start":14548},{"length":32,"start":14945}]},"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4898},{"length":20,"start":5665},{"length":20,"start":8233},{"length":20,"start":8396},{"length":20,"start":11324},{"length":20,"start":13531}]},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7416},{"length":20,"start":13030}]},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4417}]},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5564},{"length":20,"start":9977}]},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":2856}]},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":7774},{"length":20,"start":8349},{"length":20,"start":10286},{"length":20,"start":11449},{"length":20,"start":13147}]},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3834},{"length":20,"start":6008},{"length":20,"start":6650},{"length":20,"start":6738},{"length":20,"start":12418}]}},"object":"608060405234801561001057600080fd5b50600436106103145760003560e01c80636c6f6ae1116101a7578063d15e0053116100ee578063e82fec2f11610097578063ee3e210b11610071578063ee3e210b14610ad8578063f51e435b14610aeb578063f8119d5114610afe57600080fd5b8063e82fec2f14610a8d578063e8eda9df14610736578063eddf1b7914610a9f57600080fd5b8063d5ed3933116100c8578063d5ed393314610a54578063d65dc7a114610a67578063e43e88a114610a7a57600080fd5b8063d15e005314610a19578063d1946dbc14610a2c578063d579ea7d14610a4157600080fd5b8063bcb6e52211610150578063c4d66de81161012a578063c4d66de8146109e0578063cd112382146109f3578063cea9d26f14610a0657600080fd5b8063bcb6e5221461093e578063bf92857c14610951578063c44b11f71461099157600080fd5b80639cd19996116101815780639cd1999614610905578063a415bcad14610918578063ab9c4b5d1461092b57600080fd5b80636c6f6ae1146108bf5780637a708e92146108df57806394ba89a2146108f257600080fd5b8063386497fd1161026b5780635a3b74b91161021457806369328dec116101ee57806369328dec1461086b57806369a933a51461087e5780636a99c0361461089157600080fd5b80635a3b74b914610723578063617ba0371461073657806363c9b8601461074957600080fd5b806352751797116102455780635275179714610685578063573ade81146106bf57806357c68dc4146106d257600080fd5b8063386497fd1461060157806342b0b77c146106145780634417a5831461062757600080fd5b80631d2118f9116102cd5780632dad97d4116102a75780632dad97d41461040d5780633036b4391461042057806335ea6a751461043357600080fd5b80631d2118f9146103df578063272d9072146103f257806328530a47146103fa57600080fd5b806302c205f0116102fe57806302c205f0146103495780630542975c1461035c578063074b2e43146103a857600080fd5b8062a718a9146103195780630148170e1461032e575b600080fd5b61032c610327366004613f39565b610b26565b005b610336600181565b6040519081526020015b60405180910390f35b61032c610357366004613fc4565b610da1565b6103837f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610340565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff9091168152602001610340565b61032c6103ed366004614043565b610f51565b603954610336565b61032c61040836600461407c565b61113f565b61033661041b366004614097565b61131e565b61032c61042e3660046140cc565b611462565b6105f46104413660046140e5565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091525073ffffffffffffffffffffffffffffffffffffffff90811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103409190614102565b61033661060f3660046140e5565b61146f565b61032c6106223660046142c8565b6114a3565b6106766106353660046140e5565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260358352819020815192830190915254815290565b60405190518152602001610340565b61038361069336600461434a565b61ffff1660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6103366106cd366004614365565b61161d565b61032c6106e036600461434a565b603b805461ffff9092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055565b61032c6107313660046143af565b611776565b61032c6107443660046143dd565b61194b565b61032c6107573660046140e5565b73ffffffffffffffffffffffffffffffffffffffff1660008181526034602081815260408084206003810180547501000000000000000000000000000000000000000000900461ffff1686526036845291852080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915595855292909152828255600182018390556002820183905580547fffffffffffffffffff0000000000000000000000000000000000000000000000169055600481018054841690556005810180548416905560068101805484169055600781018054909316909255600882015560090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055565b61033661087936600461442e565b611a4e565b61032c61088c3660046143dd565b611c6d565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166103be565b6108d26108cd36600461407c565b611d1a565b60405161034091906144db565b61032c6108ed36600461453e565b611e54565b61032c6109003660046145a1565b611ff4565b61032c610913366004614612565b612075565b61032c610926366004614654565b6120ca565b61032c610939366004614693565b6123b0565b61032c61094c3660046147ad565b612769565b61096461095f3660046140e5565b6127a0565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610340565b61067661099f3660046140e5565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260348352819020815192830190915254815290565b61032c6109ee3660046140e5565b6129cf565b61032c610a01366004614043565b612bd5565b61032c610a143660046147e0565b612c5e565b610336610a273660046140e5565b612d0b565b610a34612d39565b6040516103409190614821565b61032c610a4f366004614922565b612e75565b61032c610a62366004614a5a565b612fe1565b610336610a75366004614097565b613268565b61032c610a883660046140e5565b613308565b603b5467ffffffffffffffff16610336565b610336610aad3660046140e5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205460ff1690565b610336610ae6366004614abf565b61337d565b61032c610af9366004614b05565b613558565b603b546a0100000000000000000000900461ffff1660405161ffff9091168152602001610340565b73__$f598c634f2d943205ac23f707b80075cbb$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f9190614b64565b73ffffffffffffffffffffffffffffffffffffffff90811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d319190614b64565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d6a959493929190614b81565b60006040518083038186803b158015610d8257600080fd5b505af4158015610d96573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e401600060405180830381600087803b158015610e3357600080fd5b505af1158015610e47573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff86811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e40160006040518083038186803b158015610f2f57600080fd5b505af4158015610f43573d6000803e3d6000fd5b505050505050505050505050565b610f59613714565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061107a57506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906110e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73__$e4b9550ff526a295e1233dea02821b9004$__635d5dc3136034603660376038603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190614b64565b73ffffffffffffffffffffffffffffffffffffffff1681526020018960ff168152506040518763ffffffff1660e01b81526004016112eb9695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a08501529182015173ffffffffffffffffffffffffffffffffffffffff1660c0840152015160ff1660e08201526101000190565b60006040518083038186803b15801561130357600080fd5b505af4158015611317573d6000803e3d6000fd5b5050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018860028111156113bc576113bc614c75565b60028111156113cd576113cd614c75565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526114179493929190600401614cdf565b602060405180830381865af4158015611434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114589190614d52565b90505b9392505050565b61146a613714565b603955565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061149d90613842565b92915050565b60006040518060e001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116604080870191909152911660609094019390935273ffffffffffffffffffffffffffffffffffffffff8a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__9163a1fe0e8d916115e4918590600401614d6b565b60006040518083038186803b1580156115fc57600080fd5b505af4158015611610573d6000803e3d6000fd5b5050505050505050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018960028111156116bb576116bb614c75565b60028111156116cc576116cc614c75565b815273ffffffffffffffffffffffffffffffffffffffff891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815261172c9493929190600401614cdf565b602060405180830381865af4158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190614d52565b95945050505050565b73__$db79717e66442ee197e8271d032a066e34$__63bf697a26603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208787603b60089054906101000a900461ffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118779190614b64565b336000908152603860205260409081902054905160e08b901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019990995260248901979097526044880195909552606487019390935273ffffffffffffffffffffffffffffffffffffffff9182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b15801561192f57600080fd5b505af4158015611943573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e4015b60006040518083038186803b158015611a3057600080fd5b505af4158015611a44573d6000803e3d6000fd5b5050505050505050565b600073__$db79717e66442ee197e8271d032a066e34$__63186dea44603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba19190614b64565b73ffffffffffffffffffffffffffffffffffffffff9081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a001511661012482015261014401611417565b611c756138d2565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$b06080f092f400a43662c3f835a4d9baa8$__90630413c86f9060e401611a18565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff8082168352620100008204811694830194909452640100000000810490931693810193909352660100000000000090910473ffffffffffffffffffffffffffffffffffffffff166060830152600181018054608084019190611dcb90614df6565b80601f0160208091040260200160405190810160405280929190818152602001828054611df790614df6565b8015611e445780601f10611e1957610100808354040283529160200191611e44565b820191906000526020600020905b815481529060010190602001808311611e2757829003601f168201915b5050505050815250509050919050565b611e5c613714565b73__$563c746fa3df0f1858d85f6ef4258864be$__6369fc1bdf603460366040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff168152602001611f47603b5461ffff6a01000000000000000000009091041690565b61ffff168152506040518463ffffffff1660e01b8152600401611f6c93929190614e44565b602060405180830381865af4158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad9190614ed4565b1561131757603b805468010000000000000000900461ffff16906008611fd283614f20565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603460209081526040808320338452603590925290912073__$c3724b8d563dc83a94e797176cddecb3b9$__9163eac4d703918585600281111561205657612056614c75565b6040518563ffffffff1660e01b81526004016119179493929190614f42565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$563c746fa3df0f1858d85f6ef4258864be$__906348c2ca8c906119179060349086908690600401614f79565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f9603460366037603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a60028111156121a1576121a1614c75565b60028111156121b2576121b2614c75565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a09093019273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614b64565b73ffffffffffffffffffffffffffffffffffffffff90811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015612353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123779190614b64565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d6a959493929190614fde565b6000604051806101c001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a085015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614b64565b6040517ffa50f29700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063fa50f29790602401602060405180830381865afa158015612680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a49190614ed4565b1515905273ffffffffffffffffffffffffffffffffffffffff86166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__91632e7263ea9161272b91603491603691603791908890600401615187565b60006040518083038186803b15801561274357600080fd5b505af4158015612757573d6000803e3d6000fd5b50505050505050505050505050505050565b612771613714565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$563c746fa3df0f1858d85f6ef4258864be$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa15801561289e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c29190614b64565b73ffffffffffffffffffffffffffffffffffffffff90811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af4158015612997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bb919061532d565b949c939b5091995097509550909350915050565b60015460039060ff16806129e25750303b155b806129ee575060005481115b612a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610fdb565b60015460ff16158015612ab757600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525090612b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c41790558015612bd057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$c3724b8d563dc83a94e797176cddecb3b9$__90636973f74490606401611917565b612c66613a5f565b6040517f87b322b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044810182905273__$563c746fa3df0f1858d85f6ef4258864be$__906387b322b29060640160006040518083038186803b158015612cee57600080fd5b505af4158015612d02573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061149d90613bec565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff811115612d6b57612d6b61487b565b604051908082528060200260200182016040528015612d94578160200160208202803683370190505b50905060005b83811015612e6b5760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612e4b5760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1682612dfc8584615377565b81518110612e0c57612e0c61538e565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e59565b82612e55816153bd565b9350505b80612e63816153bd565b915050612d9a565b5091038152919050565b612e7d613714565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316612eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5060ff8216600090815260376020908152604091829020835181548386015194860151606087015173ffffffffffffffffffffffffffffffffffffffff166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416929094169190911791909117949094161792909217825560808301518051849392611317926001850192910190613e60565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260346020908152604091829020600401548251808401909352600283527f313100000000000000000000000000000000000000000000000000000000000091830191909152909116331461307f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5073__$db79717e66442ee197e8271d032a066e34$__638a5dadd160346036603760356040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bd9190614b64565b73ffffffffffffffffffffffffffffffffffffffff90811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526132309594939291906004016153f6565b60006040518083038186803b15801561324857600080fd5b505af415801561325c573d6000803e3d6000fd5b50505050505050505050565b60006132726138d2565b73ffffffffffffffffffffffffffffffffffffffff84166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$b06080f092f400a43662c3f835a4d9baa8$__90638e7432489060a401611417565b613310613714565b6040517f1e3b41450000000000000000000000000000000000000000000000000000000081526034600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015273__$563c746fa3df0f1858d85f6ef4258864be$__90631e3b4145906044016112eb565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905260009073ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e401600060405180830381600087803b15801561341257600080fd5b505af1158015613426573d6000803e3d6000fd5b5050505060006040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561346b5761346b614c75565b600281111561347c5761347c614c75565b815273ffffffffffffffffffffffffffffffffffffffff89166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$c3724b8d563dc83a94e797176cddecb3b9$__916340e95de691613509916034916036918790600401614cdf565b602060405180830381865af4158015613526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061354a9190614d52565b9a9950505050505050505050565b613560613714565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166135e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061367857506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906136e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b5073ffffffffffffffffffffffffffffffffffffffff91909116600090815260346020526040902090359055565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ba9190614b64565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f31300000000000000000000000000000000000000000000000000000000000008152509061383f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b50565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613888575050600201546fffffffffffffffffffffffffffffffff1690565b600283015461145b906fffffffffffffffffffffffffffffffff808216916138c6917001000000000000000000000000000000009091041684613c70565b90613c7d565b50919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561393d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139619190614b64565b6040517f726600ce00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063726600ce90602401602060405180830381865afa1580156139cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f19190614ed4565b6040518060400160405280600181526020017f36000000000000000000000000000000000000000000000000000000000000008152509061383f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aee9190614b64565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690637be53ca190602401602060405180830381865afa158015613b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7e9190614ed4565b6040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152509061383f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb9190614c62565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613c32575050600101546fffffffffffffffffffffffffffffffff1690565b600183015461145b906fffffffffffffffffffffffffffffffff808216916138c6917001000000000000000000000000000000009091041684613cd4565b600061145b838342613d19565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517613cb257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080613ce864ffffffffff841642615377565b613cf290856154d2565b6301e1338090049050613d11816b033b2e3c9fd0803ce800000061553e565b949350505050565b600080613d2d64ffffffffff851684615377565b905080613d49576b033b2e3c9fd0803ce800000091505061145b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511613d7f576000613d84565b600285035b925066038882915c4000613d988a80613c7d565b81613da557613da561550f565b0491506301e13380613db7838b613c7d565b81613dc457613dc461550f565b049050600082613dd486886154d2565b613dde91906154d2565b60029004905060008285613df2888a6154d2565b613dfc91906154d2565b613e0691906154d2565b60069004905080826301e13380613e1d8a8f6154d2565b613e279190615556565b613e3d906b033b2e3c9fd0803ce800000061553e565b613e47919061553e565b613e51919061553e565b9b9a5050505050505050505050565b828054613e6c90614df6565b90600052602060002090601f016020900481019282613e8e5760008555613ed4565b82601f10613ea757805160ff1916838001178555613ed4565b82800160010185558215613ed4579182015b82811115613ed4578251825591602001919060010190613eb9565b50613ee0929150613ee4565b5090565b5b80821115613ee05760008155600101613ee5565b73ffffffffffffffffffffffffffffffffffffffff8116811461383f57600080fd5b8035613f2681613ef9565b919050565b801515811461383f57600080fd5b600080600080600060a08688031215613f5157600080fd5b8535613f5c81613ef9565b94506020860135613f6c81613ef9565b93506040860135613f7c81613ef9565b9250606086013591506080860135613f9381613f2b565b809150509295509295909350565b803561ffff81168114613f2657600080fd5b803560ff81168114613f2657600080fd5b600080600080600080600080610100898b031215613fe157600080fd5b8835613fec81613ef9565b975060208901359650604089013561400381613ef9565b955061401160608a01613fa1565b94506080890135935061402660a08a01613fb3565b925060c0890135915060e089013590509295985092959890939650565b6000806040838503121561405657600080fd5b823561406181613ef9565b9150602083013561407181613ef9565b809150509250929050565b60006020828403121561408e57600080fd5b61145b82613fb3565b6000806000606084860312156140ac57600080fd5b83356140b781613ef9565b95602085013595506040909401359392505050565b6000602082840312156140de57600080fd5b5035919050565b6000602082840312156140f757600080fd5b813561145b81613ef9565b81515181526101e08101602083015161412f60208401826fffffffffffffffffffffffffffffffff169052565b50604083015161415360408401826fffffffffffffffffffffffffffffffff169052565b50606083015161417760608401826fffffffffffffffffffffffffffffffff169052565b50608083015161419b60808401826fffffffffffffffffffffffffffffffff169052565b5060a08301516141bf60a08401826fffffffffffffffffffffffffffffffff169052565b5060c08301516141d860c084018264ffffffffff169052565b5060e08301516141ee60e084018261ffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f84011261429157600080fd5b50813567ffffffffffffffff8111156142a957600080fd5b6020830191508360208285010111156142c157600080fd5b9250929050565b60008060008060008060a087890312156142e157600080fd5b86356142ec81613ef9565b955060208701356142fc81613ef9565b945060408701359350606087013567ffffffffffffffff81111561431f57600080fd5b61432b89828a0161427f565b909450925061433e905060808801613fa1565b90509295509295509295565b60006020828403121561435c57600080fd5b61145b82613fa1565b6000806000806080858703121561437b57600080fd5b843561438681613ef9565b9350602085013592506040850135915060608501356143a481613ef9565b939692955090935050565b600080604083850312156143c257600080fd5b82356143cd81613ef9565b9150602083013561407181613f2b565b600080600080608085870312156143f357600080fd5b84356143fe81613ef9565b935060208501359250604085013561441581613ef9565b915061442360608601613fa1565b905092959194509250565b60008060006060848603121561444357600080fd5b833561444e81613ef9565b925060208401359150604084013561446581613ef9565b809150509250925092565b6000815180845260005b818110156144965760208185018101518683018201520161447a565b818111156144a8576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff8084511660208401528060208501511660408401528060408501511660608401525073ffffffffffffffffffffffffffffffffffffffff6060840151166080830152608083015160a080840152613d1160c0840182614470565b600080600080600060a0868803121561455657600080fd5b853561456181613ef9565b9450602086013561457181613ef9565b9350604086013561458181613ef9565b9250606086013561459181613ef9565b91506080860135613f9381613ef9565b600080604083850312156145b457600080fd5b82356145bf81613ef9565b946020939093013593505050565b60008083601f8401126145df57600080fd5b50813567ffffffffffffffff8111156145f757600080fd5b6020830191508360208260051b85010111156142c157600080fd5b6000806020838503121561462557600080fd5b823567ffffffffffffffff81111561463c57600080fd5b614648858286016145cd565b90969095509350505050565b600080600080600060a0868803121561466c57600080fd5b853561467781613ef9565b9450602086013593506040860135925061459160608701613fa1565b600080600080600080600080600080600060e08c8e0312156146b457600080fd5b6146bd8c613f1b565b9a5067ffffffffffffffff8060208e013511156146d957600080fd5b6146e98e60208f01358f016145cd565b909b50995060408d01358110156146ff57600080fd5b61470f8e60408f01358f016145cd565b909950975060608d013581101561472557600080fd5b6147358e60608f01358f016145cd565b909750955061474660808e01613f1b565b94508060a08e0135111561475957600080fd5b5061476a8d60a08e01358e0161427f565b909350915061477b60c08d01613fa1565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff81168114613f2657600080fd5b600080604083850312156147c057600080fd5b6147c98361478d565b91506147d76020840161478d565b90509250929050565b6000806000606084860312156147f557600080fd5b833561480081613ef9565b9250602084013561481081613ef9565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561486f57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161483d565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156148cd576148cd61487b565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561491a5761491a61487b565b604052919050565b6000806040838503121561493557600080fd5b61493e83613fb3565b915060208084013567ffffffffffffffff8082111561495c57600080fd5b9085019060a0828803121561497057600080fd5b6149786148aa565b61498183613fa1565b815261498e848401613fa1565b8482015261499e60408401613fa1565b604082015260608301356149b181613ef9565b60608201526080830135828111156149c857600080fd5b80840193505087601f8401126149dd57600080fd5b8235828111156149ef576149ef61487b565b614a1f857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016148d3565b92508083528885828601011115614a3557600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c08789031215614a7357600080fd5b8635614a7e81613ef9565b95506020870135614a8e81613ef9565b94506040870135614a9e81613ef9565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b031215614adc57600080fd5b8835614ae781613ef9565b97506020890135965060408901359550606089013561401181613ef9565b6000808284036040811215614b1957600080fd5b8335614b2481613ef9565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215614b5657600080fd5b506020830190509250929050565b600060208284031215614b7657600080fd5b815161145b81613ef9565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a0830152604083015173ffffffffffffffffffffffffffffffffffffffff80821660c08501528060608601511660e085015250506080830151610100614c098185018373ffffffffffffffffffffffffffffffffffffffff169052565b60a0850151151561012085015260c085015173ffffffffffffffffffffffffffffffffffffffff90811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b60208152600061145b6020830184614470565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614cdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006101008201905085825284602083015283604083015273ffffffffffffffffffffffffffffffffffffffff808451166060840152602084015160808401526040840151614d3160a0850182614ca4565b5060608401511660c0830152608090920151151560e0909101529392505050565b600060208284031215614d6457600080fd5b5051919050565b82815260406020820152600073ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401525060408301516080830152606083015160e060a0840152614dc6610120840182614470565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c90821680614e0a57607f821691505b602082108114156138cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006101208201905084825283602083015273ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a0830151614eba60e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b600060208284031215614ee657600080fd5b815161145b81613f2b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff80831681811415614f3857614f38614ef1565b6001019392505050565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff831660408201526080810161176d6060830184614ca4565b83815260406020808301829052908201839052600090849060608401835b86811015614fd2578335614faa81613ef9565b73ffffffffffffffffffffffffffffffffffffffff1682529282019290820190600101614f97565b50979650505050505050565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e0830152608083015161010061507a81850183614ca4565b60a085015191506101206150938186018461ffff169052565b60c086015192506101406150aa8187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e08501529050614c57565b600081518084526020808501945080840160005b8381101561514c57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161511a565b509495945050505050565b600081518084526020808501945080840160005b8381101561514c5781518752958201959082019060010161516b565b85815284602082015283604082015282606082015260a060808201526151c660a08201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516101c08060c08501526151e4610260850183615106565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e08701526152208483615157565b93506060870151915061010081878603018188015261523f8584615157565b94506080880151925061012061526c8189018573ffffffffffffffffffffffffffffffffffffffff169052565b60a089015193506101408389880301818a01526152898786614470565b965060c08a0151945061016093506152a6848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b015196506153006102008b018873ffffffffffffffffffffffffffffffffffffffff169052565b8a015160ff81166102208b01529550615317915050565b8701518015156102408801529250614fd2915050565b60008060008060008060c0878903121561534657600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008282101561538957615389614ef1565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153ef576153ef614ef1565b5060010190565b60006101a08201905086825285602083015284604083015283606083015273ffffffffffffffffffffffffffffffffffffffff8084511660808401528060208501511660a084015250604083015161546660c084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e085015191506154be61016085018373ffffffffffffffffffffffffffffffffffffffff169052565b84015160ff81166101808501529050614c57565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550a5761550a614ef1565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000821982111561555157615551614ef1565b500190565b60008261558c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205fd7f295292baebc1c9db4ed6520d269495fbc821e20ec0c9e748a8f54f37f9c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x314 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6C6F6AE1 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0xD15E0053 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEE3E210B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0xAD8 JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0xAEB JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0xAFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0xA8D JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0xA9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5ED3933 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0xA54 JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xA67 JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0xA7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD15E0053 EQ PUSH2 0xA19 JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0xA2C JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0xA41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x9E0 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x9F3 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0xA06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x951 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x991 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CD19996 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x905 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x918 JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x92B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x8BF JUMPI DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x8DF JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x5A3B74B9 GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x69328DEC GT PUSH2 0x1EE JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x86B JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x87E JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x723 JUMPI DUP1 PUSH4 0x617BA037 EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x245 JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x685 JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x6BF JUMPI DUP1 PUSH4 0x57C68DC4 EQ PUSH2 0x6D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD EQ PUSH2 0x601 JUMPI DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x614 JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x627 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 GT PUSH2 0x2CD JUMPI DUP1 PUSH4 0x2DAD97D4 GT PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x3DF JUMPI DUP1 PUSH4 0x272D9072 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C205F0 GT PUSH2 0x2FE JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x3A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x32E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x32C PUSH2 0x327 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F39 JUMP JUMPDEST PUSH2 0xB26 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x336 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x32C PUSH2 0x357 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC4 JUMP JUMPDEST PUSH2 0xDA1 JUMP JUMPDEST PUSH2 0x383 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x3ED CALLDATASIZE PUSH1 0x4 PUSH2 0x4043 JUMP JUMPDEST PUSH2 0xF51 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x336 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x408 CALLDATASIZE PUSH1 0x4 PUSH2 0x407C JUMP JUMPDEST PUSH2 0x113F JUMP JUMPDEST PUSH2 0x336 PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x131E JUMP JUMPDEST PUSH2 0x32C PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x40CC JUMP JUMPDEST PUSH2 0x1462 JUMP JUMPDEST PUSH2 0x5F4 PUSH2 0x441 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x4102 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x60F CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x146F JUMP JUMPDEST PUSH2 0x32C PUSH2 0x622 CALLDATASIZE PUSH1 0x4 PUSH2 0x42C8 JUMP JUMPDEST PUSH2 0x14A3 JUMP JUMPDEST PUSH2 0x676 PUSH2 0x635 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x383 PUSH2 0x693 CALLDATASIZE PUSH1 0x4 PUSH2 0x434A JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x6CD CALLDATASIZE PUSH1 0x4 PUSH2 0x4365 JUMP JUMPDEST PUSH2 0x161D JUMP JUMPDEST PUSH2 0x32C PUSH2 0x6E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x434A JUMP JUMPDEST PUSH1 0x3B DUP1 SLOAD PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH11 0x100000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x32C PUSH2 0x731 CALLDATASIZE PUSH1 0x4 PUSH2 0x43AF JUMP JUMPDEST PUSH2 0x1776 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x744 CALLDATASIZE PUSH1 0x4 PUSH2 0x43DD JUMP JUMPDEST PUSH2 0x194B JUMP JUMPDEST PUSH2 0x32C PUSH2 0x757 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP7 MSTORE PUSH1 0x36 DUP5 MSTORE SWAP2 DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP6 DUP6 MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP3 DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP3 ADD DUP4 SWAP1 SSTORE DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x7 DUP2 ADD DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP3 SSTORE PUSH1 0x8 DUP3 ADD SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x336 PUSH2 0x879 CALLDATASIZE PUSH1 0x4 PUSH2 0x442E JUMP JUMPDEST PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0x32C PUSH2 0x88C CALLDATASIZE PUSH1 0x4 PUSH2 0x43DD JUMP JUMPDEST PUSH2 0x1C6D JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3BE JUMP JUMPDEST PUSH2 0x8D2 PUSH2 0x8CD CALLDATASIZE PUSH1 0x4 PUSH2 0x407C JUMP JUMPDEST PUSH2 0x1D1A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x44DB JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8ED CALLDATASIZE PUSH1 0x4 PUSH2 0x453E JUMP JUMPDEST PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x900 CALLDATASIZE PUSH1 0x4 PUSH2 0x45A1 JUMP JUMPDEST PUSH2 0x1FF4 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x913 CALLDATASIZE PUSH1 0x4 PUSH2 0x4612 JUMP JUMPDEST PUSH2 0x2075 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x926 CALLDATASIZE PUSH1 0x4 PUSH2 0x4654 JUMP JUMPDEST PUSH2 0x20CA JUMP JUMPDEST PUSH2 0x32C PUSH2 0x939 CALLDATASIZE PUSH1 0x4 PUSH2 0x4693 JUMP JUMPDEST PUSH2 0x23B0 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x94C CALLDATASIZE PUSH1 0x4 PUSH2 0x47AD JUMP JUMPDEST PUSH2 0x2769 JUMP JUMPDEST PUSH2 0x964 PUSH2 0x95F CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x676 PUSH2 0x99F CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x9EE CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x29CF JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA01 CALLDATASIZE PUSH1 0x4 PUSH2 0x4043 JUMP JUMPDEST PUSH2 0x2BD5 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA14 CALLDATASIZE PUSH1 0x4 PUSH2 0x47E0 JUMP JUMPDEST PUSH2 0x2C5E JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA27 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x2D0B JUMP JUMPDEST PUSH2 0xA34 PUSH2 0x2D39 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x4821 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA4F CALLDATASIZE PUSH1 0x4 PUSH2 0x4922 JUMP JUMPDEST PUSH2 0x2E75 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA62 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5A JUMP JUMPDEST PUSH2 0x2FE1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA75 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x3268 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA88 CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x3308 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x336 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xAAD CALLDATASIZE PUSH1 0x4 PUSH2 0x40E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xAE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4ABF JUMP JUMPDEST PUSH2 0x337D JUMP JUMPDEST PUSH2 0x32C PUSH2 0xAF9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B05 JUMP JUMPDEST PUSH2 0x3558 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH11 0x100000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC3B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC5F SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD31 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD6A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4B81 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD96 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE47 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xF43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xF59 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xFE4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x107A JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1230 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1254 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12EB SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1317 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13BC JUMPI PUSH2 0x13BC PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13CD JUMPI PUSH2 0x13CD PUSH2 0x4C75 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1417 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CDF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1434 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1458 SWAP2 SWAP1 PUSH2 0x4D52 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x146A PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x149D SWAP1 PUSH2 0x3842 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x15E4 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D6B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1610 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x16BB JUMPI PUSH2 0x16BB PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x16CC JUMPI PUSH2 0x16CC PUSH2 0x4C75 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x172C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CDF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1749 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x176D SWAP2 SWAP1 PUSH2 0x4D52 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1853 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1877 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x192F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1943 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1A44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BA1 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x1417 JUMP JUMPDEST PUSH2 0x1C75 PUSH2 0x38D2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1A18 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1DCB SWAP1 PUSH2 0x4DF6 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DF7 SWAP1 PUSH2 0x4DF6 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1E44 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1E19 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1E44 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1E27 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1E5C PUSH2 0x3714 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F47 PUSH1 0x3B SLOAD PUSH2 0xFFFF PUSH11 0x100000000000000000000 SWAP1 SWAP2 DIV AND SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F6C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4E44 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1F89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FAD SWAP2 SWAP1 PUSH2 0x4ED4 JUMP JUMPDEST ISZERO PUSH2 0x1317 JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x1FD2 DUP4 PUSH2 0x4F20 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2056 JUMPI PUSH2 0x2056 PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1917 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4F42 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x1917 SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4F79 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21A1 JUMPI PUSH2 0x21A1 PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21B2 JUMPI PUSH2 0x21B2 PUSH2 0x4C75 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2281 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22A5 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2353 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2377 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD6A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4FDE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2614 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2680 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26A4 SWAP2 SWAP1 PUSH2 0x4ED4 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x272B SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5187 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2757 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2771 PUSH2 0x3714 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x289E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28C2 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2997 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29BB SWAP2 SWAP1 PUSH2 0x532D JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x29E2 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x29EE JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2A7A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xFDB JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2AB7 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2B74 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2BD0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x1917 JUMP JUMPDEST PUSH2 0x2C66 PUSH2 0x3A5F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2D02 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x149D SWAP1 PUSH2 0x3BEC JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D6B JUMPI PUSH2 0x2D6B PUSH2 0x487B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2D94 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2E6B JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2E4B JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH2 0x2DFC DUP6 DUP5 PUSH2 0x5377 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2E0C JUMPI PUSH2 0x2E0C PUSH2 0x538E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2E59 JUMP JUMPDEST DUP3 PUSH2 0x2E55 DUP2 PUSH2 0x53BD JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2E63 DUP2 PUSH2 0x53BD JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2D9A JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2E7D PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x2EEC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x1317 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x3E60 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x307F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3199 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31BD SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x3230 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x53F6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x325C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3272 PUSH2 0x38D2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1417 JUMP JUMPDEST PUSH2 0x3310 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x12EB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3426 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x346B JUMPI PUSH2 0x346B PUSH2 0x4C75 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x347C JUMPI PUSH2 0x347C PUSH2 0x4C75 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x3509 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CDF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3526 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x354A SWAP2 SWAP1 PUSH2 0x4D52 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3560 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x35E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x3678 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x36E6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 CALLDATALOAD SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3796 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x37BA SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x383F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3888 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x145B SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x38C6 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3C70 JUMP JUMPDEST SWAP1 PUSH2 0x3C7D JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x393D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3961 SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39F1 SWAP2 SWAP1 PUSH2 0x4ED4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x383F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3ACA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AEE SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B7E SWAP2 SWAP1 PUSH2 0x4ED4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x383F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFDB SWAP2 SWAP1 PUSH2 0x4C62 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3C32 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x145B SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x38C6 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3CD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x145B DUP4 DUP4 TIMESTAMP PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3CE8 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5377 JUMP JUMPDEST PUSH2 0x3CF2 SWAP1 DUP6 PUSH2 0x54D2 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x3D11 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x553E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3D2D PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5377 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3D49 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x145B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x3D7F JUMPI PUSH1 0x0 PUSH2 0x3D84 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3D98 DUP11 DUP1 PUSH2 0x3C7D JUMP JUMPDEST DUP2 PUSH2 0x3DA5 JUMPI PUSH2 0x3DA5 PUSH2 0x550F JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3DB7 DUP4 DUP12 PUSH2 0x3C7D JUMP JUMPDEST DUP2 PUSH2 0x3DC4 JUMPI PUSH2 0x3DC4 PUSH2 0x550F JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x3DD4 DUP7 DUP9 PUSH2 0x54D2 JUMP JUMPDEST PUSH2 0x3DDE SWAP2 SWAP1 PUSH2 0x54D2 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x3DF2 DUP9 DUP11 PUSH2 0x54D2 JUMP JUMPDEST PUSH2 0x3DFC SWAP2 SWAP1 PUSH2 0x54D2 JUMP JUMPDEST PUSH2 0x3E06 SWAP2 SWAP1 PUSH2 0x54D2 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x3E1D DUP11 DUP16 PUSH2 0x54D2 JUMP JUMPDEST PUSH2 0x3E27 SWAP2 SWAP1 PUSH2 0x5556 JUMP JUMPDEST PUSH2 0x3E3D SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x553E JUMP JUMPDEST PUSH2 0x3E47 SWAP2 SWAP1 PUSH2 0x553E JUMP JUMPDEST PUSH2 0x3E51 SWAP2 SWAP1 PUSH2 0x553E JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x3E6C SWAP1 PUSH2 0x4DF6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x3E8E JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3ED4 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3EA7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3ED4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3ED4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3ED4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3EB9 JUMP JUMPDEST POP PUSH2 0x3EE0 SWAP3 SWAP2 POP PUSH2 0x3EE4 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x3EE0 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3EE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x383F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3F26 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x383F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3F51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3F5C DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3F6C DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3F7C DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3F93 DUP2 PUSH2 0x3F2B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3F26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3F26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3FE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3FEC DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x4003 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 POP PUSH2 0x4011 PUSH1 0x60 DUP11 ADD PUSH2 0x3FA1 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x4026 PUSH1 0xA0 DUP11 ADD PUSH2 0x3FB3 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4056 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4061 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4071 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x408E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x145B DUP3 PUSH2 0x3FB3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x40AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x40B7 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x145B DUP2 PUSH2 0x3EF9 JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x412F PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4153 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x4177 PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x419B PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x41BF PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x41D8 PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x41EE PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x42A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x42C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x42E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x42EC DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x42FC DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x431F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x432B DUP10 DUP3 DUP11 ADD PUSH2 0x427F JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x433E SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x3FA1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x435C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x145B DUP3 PUSH2 0x3FA1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x437B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4386 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x43A4 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x43C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x43CD DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4071 DUP2 PUSH2 0x3F2B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x43F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x43FE DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4415 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 POP PUSH2 0x4423 PUSH1 0x60 DUP7 ADD PUSH2 0x3FA1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x444E DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x4465 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4496 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x447A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x44A8 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x3D11 PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x4470 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4561 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4571 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4581 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4591 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3F93 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x45BF DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x45DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x45F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x42C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4625 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x463C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4648 DUP6 DUP3 DUP7 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x466C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4677 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4591 PUSH1 0x60 DUP8 ADD PUSH2 0x3FA1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x46B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46BD DUP13 PUSH2 0x3F1B JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x46D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46E9 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x46FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x470F DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4725 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4735 DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x4746 PUSH1 0x80 DUP15 ADD PUSH2 0x3F1B JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x476A DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x427F JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x477B PUSH1 0xC0 DUP14 ADD PUSH2 0x3FA1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3F26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x47C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x47C9 DUP4 PUSH2 0x478D JUMP JUMPDEST SWAP2 POP PUSH2 0x47D7 PUSH1 0x20 DUP5 ADD PUSH2 0x478D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x47F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4800 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4810 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x486F JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x483D JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x48CD JUMPI PUSH2 0x48CD PUSH2 0x487B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x491A JUMPI PUSH2 0x491A PUSH2 0x487B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4935 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x493E DUP4 PUSH2 0x3FB3 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x495C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x4970 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4978 PUSH2 0x48AA JUMP JUMPDEST PUSH2 0x4981 DUP4 PUSH2 0x3FA1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x498E DUP5 DUP5 ADD PUSH2 0x3FA1 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x499E PUSH1 0x40 DUP5 ADD PUSH2 0x3FA1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x49B1 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x49C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x49DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x49EF JUMPI PUSH2 0x49EF PUSH2 0x487B JUMP JUMPDEST PUSH2 0x4A1F DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x48D3 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x4A35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4A73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x4A7E DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x4A8E DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x4A9E DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4ADC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4AE7 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x4011 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x4B19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4B24 DUP2 PUSH2 0x3EF9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x4B56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x145B DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4C09 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x145B PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4470 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x4CDB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x4D31 PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x4CA4 JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x4DC6 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x4470 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x4E0A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x38CC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4EBA PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4EE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x145B DUP2 PUSH2 0x3F2B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4F38 JUMPI PUSH2 0x4F38 PUSH2 0x4EF1 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x176D PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4CA4 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x4FD2 JUMPI DUP4 CALLDATALOAD PUSH2 0x4FAA DUP2 PUSH2 0x3EF9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4F97 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x507A DUP2 DUP6 ADD DUP4 PUSH2 0x4CA4 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x5093 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x50AA DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x4C57 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x514C JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x511A JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x514C JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x516B JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x51C6 PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x51E4 PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x5106 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x5220 DUP5 DUP4 PUSH2 0x5157 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x523F DUP6 DUP5 PUSH2 0x5157 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x526C DUP2 DUP10 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x5289 DUP8 DUP7 PUSH2 0x4470 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x52A6 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x5300 PUSH2 0x200 DUP12 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x5317 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x4FD2 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x5346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5389 JUMPI PUSH2 0x5389 PUSH2 0x4EF1 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x53EF JUMPI PUSH2 0x53EF PUSH2 0x4EF1 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5466 PUSH1 0xC0 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x54BE PUSH2 0x160 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x4C57 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x550A JUMPI PUSH2 0x550A PUSH2 0x4EF1 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5551 JUMPI PUSH2 0x5551 PUSH2 0x4EF1 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x558C JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F 0xD7 CALLCODE SWAP6 0x29 0x2B 0xAE 0xBC SHR SWAP14 0xB4 0xED PUSH6 0x20D269495FBC DUP3 0x1E KECCAK256 0xEC 0xC SWAP15 PUSH21 0x8A8F54F37F9C64736F6C634300080A003300000000 ","sourceMap":"852:625:64:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755:112;;;;;;:::i;:::-;;:::i;:::-;;1941:43;;1981:3;1941:43;;;;;1320:25:124;;;1308:2;1293:18;1941:43:112;;;;;;;;5034:654;;;;;;:::i;:::-;;:::i;1988:58::-;;;;;;;;2700:42:124;2688:55;;;2670:74;;2658:2;2643:18;1988:58:112;2493:257:124;15738:122:112;15833:22;;;;15738:122;;;3055:34:124;3043:47;;;3025:66;;3013:2;2998:18;15738:122:112;2879:218:124;17958:385:112;;;;;;:::i;:::-;;:::i;15596:114::-;15687:18;;15596:114;;19799:411;;;;;;:::i;:::-;;:::i;8616:509::-;;;;;;:::i;:::-;;:::i;18772:152::-;;;;;;:::i;:::-;;:::i;12875:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13005:16:112;;;;;;;;:9;:16;;;;;;;;;12998:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;12875:151;;;;;;;;:::i;14397:168::-;;;;;;:::i;:::-;;:::i;12077:604::-;;;;;;:::i;:::-;;:::i;14010:167::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;14154:18:112;;;;;;;:12;:18;;;;;14147:25;;;;;;;;;;;;14010:167;;;;8476:13:124;;8458:32;;8446:2;8431:18;14010:167:112;8234:262:124;15288:109:112;;;;;;:::i;:::-;15375:17;;15353:7;15375:17;;;:13;:17;;;;;;;;;15288:109;7220:523;;;;;;:::i;:::-;;:::i;1093:126:64:-;;;;;;:::i;:::-;1169:20;:45;;;;;;;;;;;;;;;;;;1093:126;9651:404:112;;;;;;:::i;:::-;;:::i;4601:405::-;;;;;;:::i;:::-;;:::i;1334:141:64:-;;;;;;:::i;:::-;1408:16;;1439:1;1408:16;;;:9;:16;;;;;;;;:19;;;;;;;;;;1394:34;;:13;:34;;;;;:47;;;;;;;;;1454:16;;;;;;;1447:23;;;-1:-1:-1;1447:23:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1334:141;5716:559:112;;;;;;:::i;:::-;;:::i;3961:334::-;;;;;;:::i;:::-;;:::i;15888:133::-;15989:27;;;;;;;15888:133;;19613:158;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17013:734::-;;;;;;:::i;:::-;;:::i;9153:268::-;;;;;;:::i;:::-;;:::i;12709:138::-;;;;;;:::i;:::-;;:::i;6303:889::-;;;;;;:::i;:::-;;:::i;10866:1183::-;;;;;;:::i;:::-;;:::i;18952:278::-;;;;;;:::i;:::-;;:::i;13054:721::-;;;;;;:::i;:::-;;:::i;:::-;;;;16946:25:124;;;17002:2;16987:18;;16980:34;;;;17030:18;;;17023:34;;;;17088:2;17073:18;;17066:34;17131:3;17116:19;;17109:35;17175:3;17160:19;;17153:35;16933:3;16918:19;13054:721:112;16659:535:124;13803:179:112;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;13947:16:112;;;;;;;:9;:16;;;;;13940:37;;;;;;;;;;;;13803:179;3720:213;;;;;;:::i;:::-;;:::i;9449:174::-;;;;;;:::i;:::-;;:::i;20602:180::-;;;;;;:::i;:::-;;:::i;14205:164::-;;;;;;:::i;:::-;;:::i;14593:667::-;;;:::i;:::-;;;;;;;:::i;19258:327::-;;;;;;:::i;:::-;;:::i;16211:774::-;;;;;;:::i;:::-;;:::i;4323:250::-;;;;;;:::i;:::-;;:::i;20394:180::-;;;;;;:::i;:::-;;:::i;15425:143::-;15532:31;;;;15425:143;;20238:128;;;;;;:::i;:::-;20336:25;;20314:7;20336:25;;;:19;:25;;;;;;;;;20238:128;7771:817;;;;;;:::i;:::-;;:::i;18371:373::-;;;;;;:::i;:::-;;:::i;1223:107:64:-;1305:20;;;;;;;1223:107;;23388:6:124;23376:19;;;23358:38;;23346:2;23331:18;1223:107:64;23214:188:124;10083:755:112;10261:16;:39;10308:9;10325:13;10346:12;10366:16;10390:437;;;;;;;;10454:14;;;;;;;;;;;10390:437;;;;;;10491:11;10390:437;;;;10529:15;10390:437;;;;;;10565:9;10390:437;;;;;;10590:4;10390:437;;;;;;10619:13;10390:437;;;;;;10655:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:437;;;;;;10719:25;;;;;;;:19;10390:437;10719:25;;;;;;;;;;;10390:437;;;;10775:43;;;;;;;10390:437;;;;;10775:18;:41;;;;;;:43;;;;;10390:437;10775:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:437;;;;;10261:572;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755;;;;;:::o;5034:654::-;5265:150;;;;;5303:10;5265:150;;;25883:34:124;5329:4:112;25933:18:124;;;25926:43;25985:18;;;25978:34;;;26028:18;;;26021:34;;;26104:4;26092:17;;26071:19;;;26064:46;26126:19;;;26119:35;;;26170:19;;;26163:35;;;5265:30:112;;;;;;25794:19:124;;5265:150:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;5492:24:112;;;;;;;;:12;:24;;;;;;;;;5524:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5421:262;;;;;5454:9;5421:262;;;26637:25:124;5471:13:112;26678:18:124;;;26671:34;26721:18;;;26714:34;;;;26849:13;;26845:22;;26825:18;;;26818:50;26905:22;26884:19;;;26877:51;26969:22;;26965:31;;;26944:19;;;26937:60;27038:22;27034:35;;;27013:19;;;27006:64;5421:11:112;;:25;;26609:19:124;;5421:262:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:654;;;;;;;;:::o;17958:385::-;2178:23;:21;:23::i;:::-;18143:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;18122:19:::1;::::0;::::1;18114:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;18187:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18215:16:112::1;::::0;;:13:::1;:16;::::0;;;:25:::1;::::0;;::::1;:16:::0;::::1;:25;18187:53;18242:23;;;;;;;;;;;;;;;;::::0;18179:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18272:16:112::1;::::0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:44:::1;;:66:::0;;;::::1;::::0;;;::::1;;::::0;;17958:385::o;19799:411::-;19871:10;:30;19909:9;19926:13;19947:16;19971:19;19998:12;:24;20011:10;19998:24;;;;;;;;;;;;;;;20030:169;;;;;;;;20091:14;;;;;;;;;;;20030:169;;;;;;20123:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20030:169;;;;;;20180:10;20030:169;;;;;19871:334;;;;;;;;;;;;;;;;;;;27877:25:124;;;27933:2;27918:18;;;27911:34;;;;27976:2;27961:18;;;27954:34;;;;28019:2;28004:18;;27997:34;;;;28062:3;28047:19;;28040:35;28112:13;;28106:3;28091:19;;28084:42;28173:15;;;28167:22;28191:42;28163:71;28157:3;28142:19;;28135:100;28282:15;28276:22;28300:4;28272:33;28266:3;28251:19;;28244:62;27864:3;27849:19;;27306:1006;19871:334:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19799:411;:::o;8616:509::-;8748:7;8776:11;:24;8810:9;8829:13;8852:12;:24;8865:10;8852:24;;;;;;;;;;;;;;;8886:226;;;;;;;;8934:5;8886:226;;;;;;8959:6;8886:226;;;;9022:16;8995:44;;;;;;;;:::i;:::-;8886:226;;;;;;;;:::i;:::-;;;9063:10;8886:226;;;;9097:4;8886:226;;;;;8776:344;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8763:357;;8616:509;;;;;;:::o;18772:152::-;2178:23;:21;:23::i;:::-;18887:18:::1;:32:::0;18772:152::o;14397:168::-;14524:16;;;14502:7;14524:16;;;:9;:16;;;;;:36;;:34;:36::i;:::-;14517:43;14397:168;-1:-1:-1;;14397:168:112:o;12077:604::-;12256:50;12309:293;;;;;;;;12366:15;12309:293;;;;;;12396:5;12309:293;;;;;;12417:6;12309:293;;;;12439:6;;12309:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12309:293:112;;;-1:-1:-1;;;12309:293:112;;;;;;;;;;;12515:27;;;;;;;;12309:293;;;;;;;;12573:22;;12309:293;;;;;;;;12646:16;;;;;:9;:16;;;;;12608:68;;;;;12256:346;;-1:-1:-1;12608:14:112;;:37;;:68;;12256:346;;12608:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12250:431;12077:604;;;;;;:::o;7220:523::-;7365:7;7393:11;:24;7427:9;7446:13;7469:12;:24;7482:10;7469:24;;;;;;;;;;;;;;;7503:227;;;;;;;;7551:5;7503:227;;;;;;7576:6;7503:227;;;;7639:16;7612:44;;;;;;;;:::i;:::-;7503:227;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;7503:227:112;;;;;7393:345;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7380:358;7220:523;-1:-1:-1;;;;;7220:523:112:o;9651:404::-;9769:11;:41;9818:9;9835:13;9856:16;9880:12;:24;9893:10;9880:24;;;;;;;;;;;;;;;9912:5;9925:15;9948:14;;;;;;;;;;;9970:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10033:10;10013:31;;;;:19;:31;;;;;;;;9769:281;;;;;;;;;;;;;31500:25:124;;;;31541:18;;;31534:34;;;;31584:18;;;31577:34;;;;31627:18;;;31620:34;;;;31673:42;31752:15;;;31731:19;;;31724:44;31812:14;31805:22;31784:19;;;31777:51;31877:6;31865:19;;;31844;;;31837:48;31922:15;31901:19;;;31894:44;10013:31:112;;31954:19:124;;;31947:46;31472:19;;9769:281:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9651:404;;:::o;4601:405::-;4810:24;;;;;;;;:12;:24;;;;;;;;;4842:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:262;;;;;4772:9;4739:262;;;26637:25:124;4789:13:112;26678:18:124;;;26671:34;26721:18;;;26714:34;;;;26849:13;;26845:22;;26825:18;;;26818:50;26905:22;26884:19;;;26877:51;26969:22;;26965:31;;;26944:19;;;26937:60;27038:22;27034:35;;;27013:19;;;27006:64;4739:11:112;;:25;;26609:19:124;;4739:262:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:405;;;;:::o;5716:559::-;5826:7;5854:11;:27;5891:9;5910:13;5933:16;5959:12;:24;5972:10;5959:24;;;;;;;;;;;;;;;5993:269;;;;;;;;6044:5;5993:269;;;;;;6069:6;5993:269;;;;6091:2;5993:269;;;;;;6120:14;;;;;;;;;;;5993:269;;;;;;6154:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5993:269;;;;;;6240:10;6220:31;;;;:19;5993:269;6220:31;;;;;;;;;;;;;5993:269;;;;;;;5854:416;;;;;;;;;;;;;32516:25:124;;;;32557:18;;;32550:34;;;;32600:18;;;32593:34;;;;32643:18;;;32636:34;;;;32772:13;;32768:22;;32747:19;;;32740:51;32834:15;;;32828:22;32807:19;;;32800:51;32898:15;;;32892:22;32888:31;;32867:19;;;32860:60;32658:2;32963:15;;32957:22;32936:19;;;32929:51;32762:3;33027:16;;33021:23;33017:32;32996:19;;;32989:61;32822:3;33097:16;33091:23;33087:34;33066:19;;;33059:63;32488:19;;5854:416:112;32004:1124:124;3961:334:112;2468:13;:11;:13::i;:::-;4195:24:::1;::::0;;::::1;;::::0;;;:12:::1;:24;::::0;;;;;;4118:172;;;;;4157:9:::1;4118:172;::::0;::::1;33567:25:124::0;4174:13:112::1;33608:18:124::0;;;33601:34;33651:18;;;33644:34;;;;33775:15;;;33755:18;;;33748:43;33807:19;;;33800:35;;;33851:19;;;33844:44;33937:6;33925:19;;33904;;;33897:48;4118:11:112::1;::::0;:31:::1;::::0;33539:19:124;;4118:172:112::1;33133:818:124::0;19613:158:112;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19746:20:112;;;;;;;:16;:20;;;;;;;;;19739:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19613:158;;;:::o;17013:734::-;2178:23;:21;:23::i;:::-;17253:9:::1;:28;17291:9;17310:13;17333:364;;;;;;;;17380:5;17333:364;;;;;;17412:13;17333:364;;;;;;17456:17;17333:364;;;;;;17506:19;17333:364;;;;;;17566:27;17333:364;;;;;;17620:14;;;;;;;;;;;17333:364;;;;;;17665:21;1305:20:64::0;;;;;;;;;1223:107;17665:21:112::1;17333:364;;;;::::0;17253:452:::1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17242:501;;;17720:14;:16:::0;;;;::::1;;;::::0;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;17013:734:::0;;;;;:::o;9153:268::-;9297:16;;;;;;;:9;:16;;;;;;;;9334:10;9321:24;;:12;:24;;;;;;9252:11;;:37;;9307:5;9393:16;9366:44;;;;;;;;:::i;:::-;9252:164;;;;;;;;;;;;;;;;;;:::i;12709:138::-;12792:50;;;;;:9;;:31;;:50;;12824:9;;12835:6;;;;12792:50;;;:::i;6303:889::-;6471:11;:25;6504:9;6521:13;6542:16;6566:12;:24;6579:10;6566:24;;;;;;;;;;;;;;;6598:583;;;;;;;;6645:5;6598:583;;;;;;6666:10;6598:583;;;;;;6698:10;6598:583;;;;;;6726:6;6598:583;;;;6787:16;6760:44;;;;;;;;:::i;:::-;6598:583;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;6869:4;6598:583;;;;;;;;6915:31;;;;;6598:583;;;;6971:14;;;;;;6598:583;;;;7003:35;;;;;;;6598:583;;;;;7003:33;:18;:33;;;;:35;;;;;6598:583;;7003:35;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6598:583;;;;;;7067:31;;;;;;;:19;6598:583;7067:31;;;;;;;;;;;6598:583;;;;7129:43;;;;;;;6598:583;;;;;7129:18;:41;;;;;;:43;;;;;6598:583;7129:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6598:583;;;;;6471:716;;;;;;;;;;;;;;;;;;;:::i;10866:1183::-;11129:44;11176:711;;;;;;;;11227:15;11176:711;;;;;;11258:6;;11176:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;11281:7;;;;;;11176:711;;;11281:7;;11176:711;11281:7;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;11315:17;;;;;;11176:711;;;11315:17;;11176:711;11315:17;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11378:6;;;;;;11176:711;;11378:6;;;;11176:711;;;;;;;;-1:-1:-1;11176:711:112;;;-1:-1:-1;;;11176:711:112;;;;;;;;;;;;11454:27;;;;;;;;11176:711;;;;;;;;11512:22;;11176:711;;;;11574:31;;;;;11176:711;;;;11628:14;;;;;;11176:711;;;;;11677:18;11176:711;;;;;;;;11723:31;;;;;:19;:31;;;;;;;;;11176:711;;;;11801:34;;;;;;;11454:27;11176:711;;;;11801:32;;:34;;;;;11176:711;11801:34;;;;;;11176:711;11801:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11789:91;;;;;11862:10;11789:91;;;2670:74:124;11789:63:112;;;;;;;;2643:18:124;;11789:91:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11176:711;;;;11995:24;;;;;;;:12;:24;;;;;;;11894:150;;;;;11129:758;;-1:-1:-1;11894:14:112;;:31;;:150;;11933:9;;11950:13;;11971:16;;11995:24;11129:758;;11894:150;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11123:926;10866:1183;;;;;;;;;;;:::o;18952:278::-;2178:23;:21;:23::i;:::-;19117:46:::1;19169:56:::0;;::::1;::::0;::::1;19117:46:::0;::::1;19169:56;19117:22;19169:56:::0;18952:278::o;13054:721::-;13494:268;;;13559:18;;;;13171:27;13559:18;;;:12;:18;;;;;;;13494:268;;;;;;;;;;;;;;13604:14;;;;;;;13494:268;;;;;;;;;;;13660:35;;;;;;;13171:27;;;;;;;;;;;;13381:9;;:35;;13426:9;;13445:13;;13468:16;;-1:-1:-1;13494:268:112;;;13660:18;:33;;;;:35;;;;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13494:268;;;;;;13726:25;;;;;;;:19;13494:268;13726:25;;;;;;;;;;;;;13494:268;;;;;;;13381:389;;;;;;;;;;;;;43506:25:124;;;;43547:18;;;43540:34;;;;43590:18;;;43583:34;;;;43659:13;;43653:20;43633:18;;;43626:48;43717:15;;;43711:22;43690:19;;;43683:51;43769:15;;;43763:22;43883:21;;43862:19;;;43855:50;43648:2;43952:15;;43946:22;43942:31;;;43921:19;;;43914:60;43705:3;44021:16;;;44015:23;44011:34;43990:19;;;43983:63;43478:19;;13381:389:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13368:402;;;;-1:-1:-1;13368:402:112;;-1:-1:-1;13368:402:112;-1:-1:-1;13368:402:112;-1:-1:-1;13368:402:112;;-1:-1:-1;13054:721:112;-1:-1:-1;;13054:721:112:o;3720:213::-;1217:12:87;;1015:3:64;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;44756:2:124;1202:146:87;;;44738:21:124;44795:2;44775:18;;;44768:30;44834:34;44814:18;;;44807:62;44905:16;44885:18;;;44878:44;44939:19;;1202:146:87;44554:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;3828:18:112::1;3816:30;;:8;:30;;;3848:33;;;;;;;;;;;;;;;;::::0;3808:74:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3888:31:112::1;:40:::0;;;::::1;3922:6;3888:40;::::0;;1506:55:87;;;;1534:12;:20;;;;;;1506:55;1158:407;;3720:213:112;:::o;9449:174::-;9588:16;;;;;;;;:9;:16;;;;;;;9543:75;;;;;;;;45206:25:124;;;;45308:18;;;45301:43;;;;45380:15;;;45360:18;;;45353:43;9543:11:112;;:44;;45179:18:124;;9543:75:112;44969:433:124;20602:180:112;2330:16;:14;:16::i;:::-;20729:48:::1;::::0;;;;45627:42:124;45696:15;;;20729:48:112::1;::::0;::::1;45678:34:124::0;45748:15;;45728:18;;;45721:43;45780:18;;;45773:34;;;20729:9:112::1;::::0;:29:::1;::::0;45590:18:124;;20729:48:112::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20602:180:::0;;;:::o;14205:164::-;14326:16;;;14304:7;14326:16;;;:9;:16;;;;;:38;;:36;:38::i;14593:667::-;14712:14;;14660:16;;14712:14;;;;;14684:25;;14712:14;14802:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14802:32:112;;14770:64;;14846:9;14841:221;14865:17;14861:1;:21;14841:221;;;14929:1;14901:16;;;:13;:16;;;;;;:30;:16;:30;14897:159;;14984:16;;;;:13;:16;;;;;;;;14943:12;14956:24;14960:20;14998:1;14956:24;:::i;:::-;14943:38;;;;;;;;:::i;:::-;;;;;;:57;;;;;;;;;;;14897:159;;;15025:22;;;;:::i;:::-;;;;14897:159;14884:3;;;;:::i;:::-;;;;14841:221;;;-1:-1:-1;15180:44:112;;15159:66;;15166:12;14593:667;-1:-1:-1;14593:667:112:o;19258:327::-;2178:23;:21;:23::i;:::-;19512:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;19503:7:::1;::::0;::::1;19495:48;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19549:20:112::1;::::0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;;;;:31;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19572:8;;19549:20;:31:::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;16211:774::-:0;16428:16;;;;;;;;:9;:16;;;;;;;;;:30;;;16460:24;;;;;;;;;;;;;;;;;;;;;16428:30;16414:10;:44;16406:79;;;;;;;;;;;;;:::i;:::-;;16491:11;:35;16534:9;16551:13;16572:16;16596:12;16616:358;;;;;;;;16666:5;16616:358;;;;;;16687:4;16616:358;;;;;;16705:2;16616:358;;;;;;16725:6;16616:358;;;;16760:17;16616:358;;;;16804:15;16616:358;;;;16844:14;;;;;;;;;;;16616:358;;;;;;16876:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16616:358;;;;;;16940:25;;;;;;:19;16616:358;16940:25;;;;;;;;;;;16616:358;;;;;;16491:489;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16211:774;;;;;;:::o;4323:250::-;4451:7;2468:13;:11;:13::i;:::-;4511:16:::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;4549:18:::1;::::0;4479:89;;;;;::::1;::::0;::::1;48156:25:124::0;;;;48197:18;;;48190:83;;;;48289:18;;;48282:34;;;48332:18;;;48325:34;;;48375:19;;;48368:35;4479:11:112::1;::::0;:31:::1;::::0;48128:19:124;;4479:89:112::1;47862:547:124::0;20394:180:112;2178:23;:21;:23::i;:::-;20507:62:::1;::::0;;;;20552:9:::1;20507:62;::::0;::::1;48648:25:124::0;48721:42;48709:55;;48689:18;;;48682:83;20507:9:112::1;::::0;:44:::1;::::0;48621:18:124;;20507:62:112::1;48414:357:124::0;7771:817:112;8032:166;;;;;8072:10;8032:166;;;25883:34:124;8100:4:112;25933:18:124;;;25926:43;25985:18;;;25978:34;;;26028:18;;;26021:34;;;26104:4;26092:17;;26071:19;;;26064:46;26126:19;;;26119:35;;;26170:19;;;26163:35;;;8009:7:112;;8032:30;;;;;;25794:19:124;;8032:166:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8218:42;8263:215;;;;;;;;8309:5;8263:215;;;;;;8332:6;8263:215;;;;8393:16;8366:44;;;;;;;;:::i;:::-;8263:215;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;8263:215:112;;;;;;;8544:24;;;:12;:24;;;;;8493:84;;;;;8218:260;;-1:-1:-1;8493:11:112;;:24;;:84;;8518:9;;8529:13;;8218:260;;8493:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8486:91;7771:817;-1:-1:-1;;;;;;;;;;7771:817:112:o;18371:373::-;2178:23;:21;:23::i;:::-;18564:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;18543:19:::1;::::0;::::1;18535:59;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18608:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18636:16:112::1;::::0;;:13:::1;:16;::::0;;;:25:::1;::::0;;::::1;:16:::0;::::1;:25;18608:53;18663:23;;;;;;;;;;;;;;;;::::0;18600:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18693:16:112::1;::::0;;;::::1;;::::0;;;:9:::1;:16;::::0;;;;48960:19:124;;48947:33;;18371:373:112:o;2497:184::-;2617:10;2573:54;;:18;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;2635:35;;;;;;;;;;;;;;;;;2558:118;;;;;;;;;;;;;;:::i;:::-;;2497:184::o;2809:545:102:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;:::-;:90;;:139::i;3005:345::-;2915:439;2809:545;;;:::o;2876:177:112:-;2954:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2942:68;;;;;2999:10;2942:68;;;2670:74:124;2942:56:112;;;;;;;;2643:18:124;;2942:68:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3018:24;;;;;;;;;;;;;;;;;2927:121;;;;;;;;;;;;;;:::i;2685:187::-;2766:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2754:71;;;;;2814:10;2754:71;;;2670:74:124;2754:59:112;;;;;;;;2643:18:124;;2754:71:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2833:28;;;;;;;;;;;;;;;;;2739:128;;;;;;;;;;;;;;:::i;1895:528:102:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;3142:212:105:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:105:o;1780:972::-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:154:124;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:134;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:118::-;398:5;391:13;384:21;377:5;374:32;364:60;;420:1;417;410:12;435:734;527:6;535;543;551;559;612:3;600:9;591:7;587:23;583:33;580:53;;;629:1;626;619:12;580:53;668:9;655:23;687:31;712:5;687:31;:::i;:::-;737:5;-1:-1:-1;794:2:124;779:18;;766:32;807:33;766:32;807:33;:::i;:::-;859:7;-1:-1:-1;918:2:124;903:18;;890:32;931:33;890:32;931:33;:::i;:::-;983:7;-1:-1:-1;1037:2:124;1022:18;;1009:32;;-1:-1:-1;1093:3:124;1078:19;;1065:33;1107:30;1065:33;1107:30;:::i;:::-;1156:7;1146:17;;;435:734;;;;;;;;:::o;1356:159::-;1423:20;;1483:6;1472:18;;1462:29;;1452:57;;1505:1;1502;1495:12;1520:156;1586:20;;1646:4;1635:16;;1625:27;;1615:55;;1666:1;1663;1656:12;1681:807;1800:6;1808;1816;1824;1832;1840;1848;1856;1909:3;1897:9;1888:7;1884:23;1880:33;1877:53;;;1926:1;1923;1916:12;1877:53;1965:9;1952:23;1984:31;2009:5;1984:31;:::i;:::-;2034:5;-1:-1:-1;2086:2:124;2071:18;;2058:32;;-1:-1:-1;2142:2:124;2127:18;;2114:32;2155:33;2114:32;2155:33;:::i;:::-;2207:7;-1:-1:-1;2233:37:124;2266:2;2251:18;;2233:37;:::i;:::-;2223:47;;2317:3;2306:9;2302:19;2289:33;2279:43;;2341:37;2373:3;2362:9;2358:19;2341:37;:::i;:::-;2331:47;;2425:3;2414:9;2410:19;2397:33;2387:43;;2477:3;2466:9;2462:19;2449:33;2439:43;;1681:807;;;;;;;;;;;:::o;3102:388::-;3170:6;3178;3231:2;3219:9;3210:7;3206:23;3202:32;3199:52;;;3247:1;3244;3237:12;3199:52;3286:9;3273:23;3305:31;3330:5;3305:31;:::i;:::-;3355:5;-1:-1:-1;3412:2:124;3397:18;;3384:32;3425:33;3384:32;3425:33;:::i;:::-;3477:7;3467:17;;;3102:388;;;;;:::o;3495:182::-;3552:6;3605:2;3593:9;3584:7;3580:23;3576:32;3573:52;;;3621:1;3618;3611:12;3573:52;3644:27;3661:9;3644:27;:::i;3682:383::-;3759:6;3767;3775;3828:2;3816:9;3807:7;3803:23;3799:32;3796:52;;;3844:1;3841;3834:12;3796:52;3883:9;3870:23;3902:31;3927:5;3902:31;:::i;:::-;3952:5;4004:2;3989:18;;3976:32;;-1:-1:-1;4055:2:124;4040:18;;;4027:32;;3682:383;-1:-1:-1;;;3682:383:124:o;4070:180::-;4129:6;4182:2;4170:9;4161:7;4157:23;4153:32;4150:52;;;4198:1;4195;4188:12;4150:52;-1:-1:-1;4221:23:124;;4070:180;-1:-1:-1;4070:180:124:o;4255:247::-;4314:6;4367:2;4355:9;4346:7;4342:23;4338:32;4335:52;;;4383:1;4380;4373:12;4335:52;4422:9;4409:23;4441:31;4466:5;4441:31;:::i;4936:2109::-;5185:13;;4588:12;4576:25;;5130:3;5115:19;;5257:4;5249:6;5245:17;5239:24;5272:54;5320:4;5309:9;5305:20;5291:12;2832:34;2821:46;2809:59;;2755:119;5272:54;;5375:4;5367:6;5363:17;5357:24;5390:56;5440:4;5429:9;5425:20;5409:14;2832:34;2821:46;2809:59;;2755:119;5390:56;;5495:4;5487:6;5483:17;5477:24;5510:56;5560:4;5549:9;5545:20;5529:14;2832:34;2821:46;2809:59;;2755:119;5510:56;;5615:4;5607:6;5603:17;5597:24;5630:56;5680:4;5669:9;5665:20;5649:14;2832:34;2821:46;2809:59;;2755:119;5630:56;;5735:4;5727:6;5723:17;5717:24;5750:56;5800:4;5789:9;5785:20;5769:14;2832:34;2821:46;2809:59;;2755:119;5750:56;;5855:4;5847:6;5843:17;5837:24;5870:55;5919:4;5908:9;5904:20;5888:14;4684:12;4673:24;4661:37;;4608:96;5870:55;;5974:4;5966:6;5962:17;5956:24;5989:55;6038:4;6027:9;6023:20;6007:14;4785:6;4774:18;4762:31;;4709:90;5989:55;-1:-1:-1;6063:6:124;6106:15;;;6100:22;4881:42;4870:54;;;6166:18;;;4858:67;;;;6204:6;6247:15;;;6241:22;4870:54;;6307:18;;;4858:67;6345:6;6388:15;;;6382:22;4870:54;;6448:18;;;4858:67;6486:6;6530:15;;;6524:22;4870:54;;;6591:18;;;4858:67;6629:6;6673:15;;;6667:22;2832:34;2821:46;;;6734:18;;;2809:59;;;;6772:6;6816:15;;;6810:22;2821:46;;6877:18;;;2809:59;6915:6;6959:15;;;6953:22;2821:46;7020:18;;;;2809:59;;;;4936:2109;:::o;7050:347::-;7101:8;7111:6;7165:3;7158:4;7150:6;7146:17;7142:27;7132:55;;7183:1;7180;7173:12;7132:55;-1:-1:-1;7206:20:124;;7249:18;7238:30;;7235:50;;;7281:1;7278;7271:12;7235:50;7318:4;7310:6;7306:17;7294:29;;7370:3;7363:4;7354:6;7346;7342:19;7338:30;7335:39;7332:59;;;7387:1;7384;7377:12;7332:59;7050:347;;;;;:::o;7402:827::-;7507:6;7515;7523;7531;7539;7547;7600:3;7588:9;7579:7;7575:23;7571:33;7568:53;;;7617:1;7614;7607:12;7568:53;7656:9;7643:23;7675:31;7700:5;7675:31;:::i;:::-;7725:5;-1:-1:-1;7782:2:124;7767:18;;7754:32;7795:33;7754:32;7795:33;:::i;:::-;7847:7;-1:-1:-1;7901:2:124;7886:18;;7873:32;;-1:-1:-1;7956:2:124;7941:18;;7928:32;7983:18;7972:30;;7969:50;;;8015:1;8012;8005:12;7969:50;8054:58;8104:7;8095:6;8084:9;8080:22;8054:58;:::i;:::-;8131:8;;-1:-1:-1;8028:84:124;-1:-1:-1;8185:38:124;;-1:-1:-1;8218:3:124;8203:19;;8185:38;:::i;:::-;8175:48;;7402:827;;;;;;;;:::o;8501:184::-;8559:6;8612:2;8600:9;8591:7;8587:23;8583:32;8580:52;;;8628:1;8625;8618:12;8580:52;8651:28;8669:9;8651:28;:::i;8921:525::-;9007:6;9015;9023;9031;9084:3;9072:9;9063:7;9059:23;9055:33;9052:53;;;9101:1;9098;9091:12;9052:53;9140:9;9127:23;9159:31;9184:5;9159:31;:::i;:::-;9209:5;-1:-1:-1;9261:2:124;9246:18;;9233:32;;-1:-1:-1;9312:2:124;9297:18;;9284:32;;-1:-1:-1;9368:2:124;9353:18;;9340:32;9381:33;9340:32;9381:33;:::i;:::-;8921:525;;;;-1:-1:-1;8921:525:124;;-1:-1:-1;;8921:525:124:o;9451:382::-;9516:6;9524;9577:2;9565:9;9556:7;9552:23;9548:32;9545:52;;;9593:1;9590;9583:12;9545:52;9632:9;9619:23;9651:31;9676:5;9651:31;:::i;:::-;9701:5;-1:-1:-1;9758:2:124;9743:18;;9730:32;9771:30;9730:32;9771:30;:::i;9838:529::-;9923:6;9931;9939;9947;10000:3;9988:9;9979:7;9975:23;9971:33;9968:53;;;10017:1;10014;10007:12;9968:53;10056:9;10043:23;10075:31;10100:5;10075:31;:::i;:::-;10125:5;-1:-1:-1;10177:2:124;10162:18;;10149:32;;-1:-1:-1;10233:2:124;10218:18;;10205:32;10246:33;10205:32;10246:33;:::i;:::-;10298:7;-1:-1:-1;10324:37:124;10357:2;10342:18;;10324:37;:::i;:::-;10314:47;;9838:529;;;;;;;:::o;10372:456::-;10449:6;10457;10465;10518:2;10506:9;10497:7;10493:23;10489:32;10486:52;;;10534:1;10531;10524:12;10486:52;10573:9;10560:23;10592:31;10617:5;10592:31;:::i;:::-;10642:5;-1:-1:-1;10694:2:124;10679:18;;10666:32;;-1:-1:-1;10750:2:124;10735:18;;10722:32;10763:33;10722:32;10763:33;:::i;:::-;10815:7;10805:17;;;10372:456;;;;;:::o;10833:531::-;10875:3;10913:5;10907:12;10940:6;10935:3;10928:19;10965:1;10975:162;10989:6;10986:1;10983:13;10975:162;;;11051:4;11107:13;;;11103:22;;11097:29;11079:11;;;11075:20;;11068:59;11004:12;10975:162;;;11155:6;11152:1;11149:13;11146:87;;;11221:1;11214:4;11205:6;11200:3;11196:16;11192:27;11185:38;11146:87;-1:-1:-1;11278:2:124;11266:15;11283:66;11262:88;11253:98;;;;11353:4;11249:109;;10833:531;-1:-1:-1;;10833:531:124:o;11369:695::-;11562:2;11551:9;11544:21;11525:4;11584:6;11645:2;11636:6;11630:13;11626:22;11621:2;11610:9;11606:18;11599:50;11713:2;11707;11699:6;11695:15;11689:22;11685:31;11680:2;11669:9;11665:18;11658:59;11781:2;11775;11767:6;11763:15;11757:22;11753:31;11748:2;11737:9;11733:18;11726:59;;11850:42;11844:2;11836:6;11832:15;11826:22;11822:71;11816:3;11805:9;11801:19;11794:100;11941:3;11933:6;11929:16;11923:23;11984:4;11977;11966:9;11962:20;11955:34;12006:52;12053:3;12042:9;12038:19;12024:12;12006:52;:::i;12069:813::-;12164:6;12172;12180;12188;12196;12249:3;12237:9;12228:7;12224:23;12220:33;12217:53;;;12266:1;12263;12256:12;12217:53;12305:9;12292:23;12324:31;12349:5;12324:31;:::i;:::-;12374:5;-1:-1:-1;12431:2:124;12416:18;;12403:32;12444:33;12403:32;12444:33;:::i;:::-;12496:7;-1:-1:-1;12555:2:124;12540:18;;12527:32;12568:33;12527:32;12568:33;:::i;:::-;12620:7;-1:-1:-1;12679:2:124;12664:18;;12651:32;12692:33;12651:32;12692:33;:::i;:::-;12744:7;-1:-1:-1;12803:3:124;12788:19;;12775:33;12817;12775;12817;:::i;12887:315::-;12955:6;12963;13016:2;13004:9;12995:7;12991:23;12987:32;12984:52;;;13032:1;13029;13022:12;12984:52;13071:9;13058:23;13090:31;13115:5;13090:31;:::i;:::-;13140:5;13192:2;13177:18;;;;13164:32;;-1:-1:-1;;;12887:315:124:o;13207:367::-;13270:8;13280:6;13334:3;13327:4;13319:6;13315:17;13311:27;13301:55;;13352:1;13349;13342:12;13301:55;-1:-1:-1;13375:20:124;;13418:18;13407:30;;13404:50;;;13450:1;13447;13440:12;13404:50;13487:4;13479:6;13475:17;13463:29;;13547:3;13540:4;13530:6;13527:1;13523:14;13515:6;13511:27;13507:38;13504:47;13501:67;;;13564:1;13561;13554:12;13579:437;13665:6;13673;13726:2;13714:9;13705:7;13701:23;13697:32;13694:52;;;13742:1;13739;13732:12;13694:52;13782:9;13769:23;13815:18;13807:6;13804:30;13801:50;;;13847:1;13844;13837:12;13801:50;13886:70;13948:7;13939:6;13928:9;13924:22;13886:70;:::i;:::-;13975:8;;13860:96;;-1:-1:-1;13579:437:124;-1:-1:-1;;;;13579:437:124:o;14021:598::-;14115:6;14123;14131;14139;14147;14200:3;14188:9;14179:7;14175:23;14171:33;14168:53;;;14217:1;14214;14207:12;14168:53;14256:9;14243:23;14275:31;14300:5;14275:31;:::i;:::-;14325:5;-1:-1:-1;14377:2:124;14362:18;;14349:32;;-1:-1:-1;14428:2:124;14413:18;;14400:32;;-1:-1:-1;14451:37:124;14484:2;14469:18;;14451:37;:::i;14624:1572::-;14828:6;14836;14844;14852;14860;14868;14876;14884;14892;14900;14908:7;14962:3;14950:9;14941:7;14937:23;14933:33;14930:53;;;14979:1;14976;14969:12;14930:53;15002:29;15021:9;15002:29;:::i;:::-;14992:39;;15050:18;15117:2;15111;15100:9;15096:18;15083:32;15080:40;15077:60;;;15133:1;15130;15123:12;15077:60;15172:96;15260:7;15253:2;15242:9;15238:18;15225:32;15214:9;15210:48;15172:96;:::i;:::-;15287:8;;-1:-1:-1;15314:8:124;-1:-1:-1;15365:2:124;15350:18;;15337:32;15334:40;-1:-1:-1;15331:60:124;;;15387:1;15384;15377:12;15331:60;15426:96;15514:7;15507:2;15496:9;15492:18;15479:32;15468:9;15464:48;15426:96;:::i;:::-;15541:8;;-1:-1:-1;15568:8:124;-1:-1:-1;15619:2:124;15604:18;;15591:32;15588:40;-1:-1:-1;15585:60:124;;;15641:1;15638;15631:12;15585:60;15680:96;15768:7;15761:2;15750:9;15746:18;15733:32;15722:9;15718:48;15680:96;:::i;:::-;15795:8;;-1:-1:-1;15822:8:124;-1:-1:-1;15849:39:124;15883:3;15868:19;;15849:39;:::i;:::-;15839:49;;15938:2;15931:3;15920:9;15916:19;15903:33;15900:41;15897:61;;;15954:1;15951;15944:12;15897:61;;15993:85;16070:7;16062:3;16051:9;16047:19;16034:33;16023:9;16019:49;15993:85;:::i;:::-;16097:8;;-1:-1:-1;16124:8:124;-1:-1:-1;16152:38:124;16185:3;16170:19;;16152:38;:::i;:::-;16141:49;;14624:1572;;;;;;;;;;;;;;:::o;16201:188::-;16269:20;;16329:34;16318:46;;16308:57;;16298:85;;16379:1;16376;16369:12;16394:260;16462:6;16470;16523:2;16511:9;16502:7;16498:23;16494:32;16491:52;;;16539:1;16536;16529:12;16491:52;16562:29;16581:9;16562:29;:::i;:::-;16552:39;;16610:38;16644:2;16633:9;16629:18;16610:38;:::i;:::-;16600:48;;16394:260;;;;;:::o;17755:456::-;17832:6;17840;17848;17901:2;17889:9;17880:7;17876:23;17872:32;17869:52;;;17917:1;17914;17907:12;17869:52;17956:9;17943:23;17975:31;18000:5;17975:31;:::i;:::-;18025:5;-1:-1:-1;18082:2:124;18067:18;;18054:32;18095:33;18054:32;18095:33;:::i;:::-;17755:456;;18147:7;;-1:-1:-1;;;18201:2:124;18186:18;;;;18173:32;;17755:456::o;18216:681::-;18387:2;18439:21;;;18509:13;;18412:18;;;18531:22;;;18358:4;;18387:2;18610:15;;;;18584:2;18569:18;;;18358:4;18653:218;18667:6;18664:1;18661:13;18653:218;;;18732:13;;18747:42;18728:62;18716:75;;18846:15;;;;18811:12;;;;18689:1;18682:9;18653:218;;;-1:-1:-1;18888:3:124;;18216:681;-1:-1:-1;;;;;;18216:681:124:o;18902:184::-;18954:77;18951:1;18944:88;19051:4;19048:1;19041:15;19075:4;19072:1;19065:15;19091:253;19163:2;19157:9;19205:4;19193:17;;19240:18;19225:34;;19261:22;;;19222:62;19219:88;;;19287:18;;:::i;:::-;19323:2;19316:22;19091:253;:::o;19349:334::-;19420:2;19414:9;19476:2;19466:13;;19481:66;19462:86;19450:99;;19579:18;19564:34;;19600:22;;;19561:62;19558:88;;;19626:18;;:::i;:::-;19662:2;19655:22;19349:334;;-1:-1:-1;19349:334:124:o;19688:1488::-;19786:6;19794;19847:2;19835:9;19826:7;19822:23;19818:32;19815:52;;;19863:1;19860;19853:12;19815:52;19886:27;19903:9;19886:27;:::i;:::-;19876:37;;19932:2;19985;19974:9;19970:18;19957:32;20008:18;20049:2;20041:6;20038:14;20035:34;;;20065:1;20062;20055:12;20035:34;20088:22;;;;20144:4;20126:16;;;20122:27;20119:47;;;20162:1;20159;20152:12;20119:47;20188:22;;:::i;:::-;20233:21;20251:2;20233:21;:::i;:::-;20226:5;20219:36;20287:30;20313:2;20309;20305:11;20287:30;:::i;:::-;20282:2;20275:5;20271:14;20264:54;20350:30;20376:2;20372;20368:11;20350:30;:::i;:::-;20345:2;20338:5;20334:14;20327:54;20426:2;20422;20418:11;20405:25;20439:33;20464:7;20439:33;:::i;:::-;20499:2;20488:14;;20481:31;20558:3;20550:12;;20537:26;20575:16;;;20572:36;;;20604:1;20601;20594:12;20572:36;20635:8;20631:2;20627:17;20617:27;;;20682:7;20675:4;20671:2;20667:13;20663:27;20653:55;;20704:1;20701;20694:12;20653:55;20740:2;20727:16;20762:2;20758;20755:10;20752:36;;;20768:18;;:::i;:::-;20810:112;20918:2;20849:66;20842:4;20838:2;20834:13;20830:86;20826:95;20810:112;:::i;:::-;20797:125;;20945:2;20938:5;20931:17;20985:7;20980:2;20975;20971;20967:11;20963:20;20960:33;20957:53;;;21006:1;21003;20996:12;20957:53;21061:2;21056;21052;21048:11;21043:2;21036:5;21032:14;21019:45;21105:1;21100:2;21095;21088:5;21084:14;21080:23;21073:34;;21140:5;21134:3;21127:5;21123:15;21116:30;21165:5;21155:15;;;;;;19688:1488;;;;;:::o;21181:736::-;21285:6;21293;21301;21309;21317;21325;21378:3;21366:9;21357:7;21353:23;21349:33;21346:53;;;21395:1;21392;21385:12;21346:53;21434:9;21421:23;21453:31;21478:5;21453:31;:::i;:::-;21503:5;-1:-1:-1;21560:2:124;21545:18;;21532:32;21573:33;21532:32;21573:33;:::i;:::-;21625:7;-1:-1:-1;21684:2:124;21669:18;;21656:32;21697:33;21656:32;21697:33;:::i;:::-;21181:736;;;;-1:-1:-1;21749:7:124;;21803:2;21788:18;;21775:32;;-1:-1:-1;21854:3:124;21839:19;;21826:33;;21906:3;21891:19;;;21878:33;;-1:-1:-1;21181:736:124;-1:-1:-1;;21181:736:124:o;21922:803::-;22042:6;22050;22058;22066;22074;22082;22090;22098;22151:3;22139:9;22130:7;22126:23;22122:33;22119:53;;;22168:1;22165;22158:12;22119:53;22207:9;22194:23;22226:31;22251:5;22226:31;:::i;:::-;22276:5;-1:-1:-1;22328:2:124;22313:18;;22300:32;;-1:-1:-1;22379:2:124;22364:18;;22351:32;;-1:-1:-1;22435:2:124;22420:18;;22407:32;22448:33;22407:32;22448:33;:::i;22730:479::-;22842:6;22850;22894:9;22885:7;22881:23;22924:2;22920;22916:11;22913:31;;;22940:1;22937;22930:12;22913:31;22979:9;22966:23;22998:31;23023:5;22998:31;:::i;:::-;23048:5;-1:-1:-1;23146:2:124;23077:66;23069:75;;23065:84;23062:104;;;23162:1;23159;23152:12;23062:104;;23200:2;23189:9;23185:18;23175:28;;22730:479;;;;;:::o;23407:251::-;23477:6;23530:2;23518:9;23509:7;23505:23;23501:32;23498:52;;;23546:1;23543;23536:12;23498:52;23578:9;23572:16;23597:31;23622:5;23597:31;:::i;23839:1667::-;24335:4;24377:3;24366:9;24362:19;24354:27;;24408:6;24397:9;24390:25;24451:6;24446:2;24435:9;24431:18;24424:34;24494:6;24489:2;24478:9;24474:18;24467:34;24537:6;24532:2;24521:9;24517:18;24510:34;24587:6;24581:13;24575:3;24564:9;24560:19;24553:42;24650:2;24642:6;24638:15;24632:22;24626:3;24615:9;24611:19;24604:51;24702:2;24694:6;24690:15;24684:22;24725:42;24822:2;24808:12;24804:21;24798:3;24787:9;24783:19;24776:50;24891:2;24885;24877:6;24873:15;24867:22;24863:31;24857:3;24846:9;24842:19;24835:60;;;24944:3;24936:6;24932:16;24926:23;24968:3;24980:54;25030:2;25019:9;25015:18;24999:14;4881:42;4870:54;4858:67;;4804:127;24980:54;25083:3;25071:16;;25065:23;23733:13;23726:21;25144:3;25129:19;;23714:34;25198:3;25186:16;;25180:23;4881:42;4870:54;;;25262:3;25247:19;;4858:67;25316:3;25304:16;;25298:23;23826:4;23815:16;25378:3;25363:19;;23803:29;25420:15;;;25414:22;4870:54;;;25495:3;25480:19;;4858:67;25414:22;-1:-1:-1;25445:55:124;;23839:1667;;;;;;;;:::o;27081:220::-;27230:2;27219:9;27212:21;27193:4;27250:45;27291:2;27280:9;27276:18;27268:6;27250:45;:::i;28317:184::-;28369:77;28366:1;28359:88;28466:4;28463:1;28456:15;28490:4;28487:1;28480:15;28506:301;28594:1;28587:5;28584:12;28574:200;;28630:77;28627:1;28620:88;28731:4;28728:1;28721:15;28759:4;28756:1;28749:15;28574:200;28783:18;;28506:301::o;28812:996::-;29183:4;29225:3;29214:9;29210:19;29202:27;;29256:6;29245:9;29238:25;29299:6;29294:2;29283:9;29279:18;29272:34;29342:6;29337:2;29326:9;29322:18;29315:34;29368:42;29465:2;29456:6;29450:13;29446:22;29441:2;29430:9;29426:18;29419:50;29524:2;29516:6;29512:15;29506:22;29500:3;29489:9;29485:19;29478:51;29576:2;29568:6;29564:15;29558:22;29589:67;29651:3;29640:9;29636:19;29622:12;29589:67;:::i;:::-;-1:-1:-1;29715:2:124;29703:15;;29697:22;29693:31;29687:3;29672:19;;29665:60;29794:3;29782:16;;;29776:23;29769:31;29762:39;29756:3;29741:19;;;29734:68;28812:996;;-1:-1:-1;;;28812:996:124:o;29813:184::-;29883:6;29936:2;29924:9;29915:7;29911:23;29907:32;29904:52;;;29952:1;29949;29942:12;29904:52;-1:-1:-1;29975:16:124;;29813:184;-1:-1:-1;29813:184:124:o;30002:960::-;30274:6;30263:9;30256:25;30317:2;30312;30301:9;30297:18;30290:30;30237:4;30339:42;30436:2;30427:6;30421:13;30417:22;30412:2;30401:9;30397:18;30390:50;30504:2;30498;30490:6;30486:15;30480:22;30476:31;30471:2;30460:9;30456:18;30449:59;;30563:2;30555:6;30551:15;30545:22;30539:3;30528:9;30524:19;30517:51;30615:2;30607:6;30603:15;30597:22;30656:4;30650:3;30639:9;30635:19;30628:33;30684:52;30731:3;30720:9;30716:19;30702:12;30684:52;:::i;:::-;30670:66;;30802:6;30795:3;30787:6;30783:16;30777:23;30773:36;30767:3;30756:9;30752:19;30745:65;30866:3;30858:6;30854:16;30848:23;30841:4;30830:9;30826:20;30819:53;30927:3;30919:6;30915:16;30909:23;30903:3;30892:9;30888:19;30881:52;30950:6;30942:14;;;30002:960;;;;;:::o;33956:437::-;34035:1;34031:12;;;;34078;;;34099:61;;34153:4;34145:6;34141:17;34131:27;;34099:61;34206:2;34198:6;34195:14;34175:18;34172:38;34169:218;;;34243:77;34240:1;34233:88;34344:4;34341:1;34334:15;34372:4;34369:1;34362:15;34398:1060;34703:4;34745:3;34734:9;34730:19;34722:27;;34776:6;34765:9;34758:25;34819:6;34814:2;34803:9;34799:18;34792:34;34845:42;34942:2;34933:6;34927:13;34923:22;34918:2;34907:9;34903:18;34896:50;35010:2;35004;34996:6;34992:15;34986:22;34982:31;34977:2;34966:9;34962:18;34955:59;35079:2;35073;35065:6;35061:15;35055:22;35051:31;35045:3;35034:9;35030:19;35023:60;35148:2;35142;35134:6;35130:15;35124:22;35120:31;35114:3;35103:9;35099:19;35092:60;35218:2;35211:3;35203:6;35199:16;35193:23;35189:32;35183:3;35172:9;35168:19;35161:61;;35269:3;35261:6;35257:16;35251:23;35283:52;35330:3;35319:9;35315:19;35301:12;4785:6;4774:18;4762:31;;4709:90;35283:52;-1:-1:-1;35384:3:124;35372:16;;35366:23;4785:6;4774:18;;35447:3;35432:19;;4762:31;35398:54;34398:1060;;;;;;:::o;35463:245::-;35530:6;35583:2;35571:9;35562:7;35558:23;35554:32;35551:52;;;35599:1;35596;35589:12;35551:52;35631:9;35625:16;35650:28;35672:5;35650:28;:::i;35713:184::-;35765:77;35762:1;35755:88;35862:4;35859:1;35852:15;35886:4;35883:1;35876:15;35902:197;35940:3;35968:6;36009:2;36002:5;35998:14;36036:2;36027:7;36024:15;36021:41;;;36042:18;;:::i;:::-;36091:1;36078:15;;35902:197;-1:-1:-1;;;35902:197:124:o;36104:557::-;36426:25;;;36482:2;36467:18;;36460:34;;;36542:42;36530:55;;36525:2;36510:18;;36503:83;36413:3;36398:19;;36595:60;36651:2;36636:18;;36628:6;36595:60;:::i;36666:859::-;36966:25;;;36954:2;37010;37028:18;;;37021:30;;;36939:18;;;37086:22;;;36906:4;;37165:6;;37139:2;37124:18;;36906:4;37199:300;37213:6;37210:1;37207:13;37199:300;;;37288:6;37275:20;37308:31;37333:5;37308:31;:::i;:::-;37375:42;37364:54;37352:67;;37474:15;;;;37439:12;;;;37235:1;37228:9;37199:300;;;-1:-1:-1;37516:3:124;36666:859;-1:-1:-1;;;;;;;36666:859:124:o;37530:1960::-;38038:25;;;38094:2;38079:18;;38072:34;;;38137:2;38122:18;;38115:34;;;38180:2;38165:18;;38158:34;;;38220:13;;4881:42;4870:54;38250:3;38235:19;;4858:67;38025:3;38010:19;;38302:2;38290:15;;38284:22;4881:42;4870:54;;38363:3;38348:19;;4858:67;-1:-1:-1;38417:2:124;38405:15;;38399:22;4881:42;4870:54;;38480:3;38465:19;;4858:67;38430:55;38540:2;38532:6;38528:15;38522:22;38516:3;38505:9;38501:19;38494:51;38594:3;38586:6;38582:16;38576:23;38618:3;38630:68;38694:2;38683:9;38679:18;38663:14;38630:68;:::i;:::-;38747:3;38739:6;38735:16;38729:23;38707:45;;38771:3;38783:53;38832:2;38821:9;38817:18;38801:14;4785:6;4774:18;4762:31;;4709:90;38783:53;38885:3;38877:6;38873:16;38867:23;38845:45;;38909:3;38921:51;38968:2;38957:9;38953:18;38937:14;23733:13;23726:21;23714:34;;23663:91;38921:51;39009:3;38997:16;;38991:23;39033:3;39052:18;;;39045:30;;;;39118:15;;;39112:22;39106:3;39091:19;;39084:51;39172:15;;;39166:22;4881:42;4870:54;;;39247:3;39232:19;;4858:67;39289:15;;;39283:22;23826:4;23815:16;39362:3;39347:19;;23803:29;39404:15;;;39398:22;4870:54;;;39479:3;39464:19;;4858:67;39398:22;-1:-1:-1;39429:55:124;4804:127;39495:484;39548:3;39586:5;39580:12;39613:6;39608:3;39601:19;39639:4;39668:2;39663:3;39659:12;39652:19;;39705:2;39698:5;39694:14;39726:1;39736:218;39750:6;39747:1;39744:13;39736:218;;;39815:13;;39830:42;39811:62;39799:75;;39894:12;;;;39929:15;;;;39772:1;39765:9;39736:218;;;-1:-1:-1;39970:3:124;;39495:484;-1:-1:-1;;;;;39495:484:124:o;39984:435::-;40037:3;40075:5;40069:12;40102:6;40097:3;40090:19;40128:4;40157:2;40152:3;40148:12;40141:19;;40194:2;40187:5;40183:14;40215:1;40225:169;40239:6;40236:1;40233:13;40225:169;;;40300:13;;40288:26;;40334:12;;;;40369:15;;;;40261:1;40254:9;40225:169;;40424:2611;40906:6;40895:9;40888:25;40949:6;40944:2;40933:9;40929:18;40922:34;40992:6;40987:2;40976:9;40972:18;40965:34;41035:6;41030:2;41019:9;41015:18;41008:34;41079:3;41073;41062:9;41058:19;41051:32;41092:54;41141:3;41130:9;41126:19;41117:6;41111:13;4881:42;4870:54;4858:67;;4804:127;41092:54;40869:4;41193:2;41185:6;41181:15;41175:22;41216:6;41259:2;41253:3;41242:9;41238:19;41231:31;41285:63;41343:3;41332:9;41328:19;41314:12;41285:63;:::i;:::-;41271:77;;41397:2;41389:6;41385:15;41379:22;41420:66;41551:2;41539:9;41531:6;41527:22;41523:31;41517:3;41506:9;41502:19;41495:60;41578:52;41623:6;41607:14;41578:52;:::i;:::-;41564:66;;41679:2;41671:6;41667:15;41661:22;41639:44;;41702:3;41769:2;41757:9;41749:6;41745:22;41741:31;41736:2;41725:9;41721:18;41714:59;41796:52;41841:6;41825:14;41796:52;:::i;:::-;41782:66;;41897:3;41889:6;41885:16;41879:23;41857:45;;41921:3;41933:54;41983:2;41972:9;41968:18;41952:14;4881:42;4870:54;4858:67;;4804:127;41933:54;42036:3;42028:6;42024:16;42018:23;41996:45;;42060:3;42127:2;42115:9;42107:6;42103:22;42099:31;42094:2;42083:9;42079:18;42072:59;42154:41;42188:6;42172:14;42154:41;:::i;:::-;42140:55;;42244:3;42236:6;42232:16;42226:23;42204:45;;42268:3;42258:13;;42280:53;42329:2;42318:9;42314:18;42298:14;4785:6;4774:18;4762:31;;4709:90;42280:53;42370:3;42362:6;42358:16;42352:23;42342:33;;42394:3;42433:2;42428;42417:9;42413:18;42406:30;42473:2;42465:6;42461:15;42455:22;42445:32;;42497:3;42486:14;;42537:2;42531:3;42520:9;42516:19;42509:31;42594:2;42586:6;42582:15;42576:22;42571:2;42560:9;42556:18;42549:50;42654:2;42646:6;42642:15;42636:22;42630:3;42619:9;42615:19;42608:51;42708:2;42700:6;42696:15;42690:22;42668:44;;42721:55;42771:3;42760:9;42756:19;42740:14;4881:42;4870:54;4858:67;;4804:127;42721:55;42813:15;;42807:22;23826:4;23815:16;;42886:3;42871:19;;23803:29;42807:22;-1:-1:-1;42838:53:124;;-1:-1:-1;;23759:75:124;42838:53;42928:16;;42922:23;23733:13;;23726:21;43001:3;42986:19;;23714:34;42922:23;-1:-1:-1;42954:52:124;;-1:-1:-1;;23663:91:124;44057:492;44172:6;44180;44188;44196;44204;44212;44265:3;44253:9;44244:7;44240:23;44236:33;44233:53;;;44282:1;44279;44272:12;44233:53;44311:9;44305:16;44295:26;;44361:2;44350:9;44346:18;44340:25;44330:35;;44405:2;44394:9;44390:18;44384:25;44374:35;;44449:2;44438:9;44434:18;44428:25;44418:35;;44493:3;44482:9;44478:19;44472:26;44462:36;;44538:3;44527:9;44523:19;44517:26;44507:36;;44057:492;;;;;;;;:::o;45818:125::-;45858:4;45886:1;45883;45880:8;45877:34;;;45891:18;;:::i;:::-;-1:-1:-1;45928:9:124;;45818:125::o;45948:184::-;46000:77;45997:1;45990:88;46097:4;46094:1;46087:15;46121:4;46118:1;46111:15;46137:195;46176:3;46207:66;46200:5;46197:77;46194:103;;;46277:18;;:::i;:::-;-1:-1:-1;46324:1:124;46313:13;;46137:195::o;46337:1520::-;46821:4;46863:3;46852:9;46848:19;46840:27;;46894:6;46883:9;46876:25;46937:6;46932:2;46921:9;46917:18;46910:34;46980:6;46975:2;46964:9;46960:18;46953:34;47023:6;47018:2;47007:9;47003:18;46996:34;47049:42;47147:2;47138:6;47132:13;47128:22;47122:3;47111:9;47107:19;47100:51;47216:2;47210;47202:6;47198:15;47192:22;47188:31;47182:3;47171:9;47167:19;47160:60;;47267:2;47259:6;47255:15;47249:22;47280:53;47328:3;47317:9;47313:19;47299:12;4881:42;4870:54;4858:67;;4804:127;47280:53;;47388:2;47380:6;47376:15;47370:22;47364:3;47353:9;47349:19;47342:51;47430:3;47422:6;47418:16;47412:23;47454:3;47493:2;47488;47477:9;47473:18;47466:30;47551:3;47543:6;47539:16;47533:23;47527:3;47516:9;47512:19;47505:52;47612:3;47604:6;47600:16;47594:23;47588:3;47577:9;47573:19;47566:52;47667:3;47659:6;47655:16;47649:23;47627:45;;47681:55;47731:3;47720:9;47716:19;47700:14;4881:42;4870:54;4858:67;;4804:127;47681:55;47773:15;;47767:22;23826:4;23815:16;;47846:3;47831:19;;23803:29;47767:22;-1:-1:-1;47798:53:124;23759:75;48991:228;49031:7;49157:1;49089:66;49085:74;49082:1;49079:81;49074:1;49067:9;49060:17;49056:105;49053:131;;;49164:18;;:::i;:::-;-1:-1:-1;49204:9:124;;48991:228::o;49224:184::-;49276:77;49273:1;49266:88;49373:4;49370:1;49363:15;49397:4;49394:1;49387:15;49413:128;49453:3;49484:1;49480:6;49477:1;49474:13;49471:39;;;49490:18;;:::i;:::-;-1:-1:-1;49526:9:124;;49413:128::o;49546:274::-;49586:1;49612;49602:189;;49647:77;49644:1;49637:88;49748:4;49745:1;49738:15;49776:4;49773:1;49766:15;49602:189;-1:-1:-1;49805:9:124;;49546:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"4391800","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","BRIDGE_PROTOCOL_FEE()":"2372","FLASHLOAN_PREMIUM_TOTAL()":"2409","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"2429","MAX_NUMBER_RESERVES()":"2416","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"2354","POOL_REVISION()":"276","backUnbacked(address,uint256,uint256)":"infinite","borrow(address,uint256,uint256,uint16,address)":"infinite","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"infinite","deposit(address,uint256,address,uint16)":"infinite","dropReserve(address)":"192267","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"infinite","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"infinite","flashLoanSimple(address,address,uint256,bytes,uint16)":"infinite","getConfiguration(address)":"2703","getEModeCategoryData(uint8)":"infinite","getReserveAddressById(uint16)":"2596","getReserveData(address)":"23122","getReserveNormalizedIncome(address)":"infinite","getReserveNormalizedVariableDebt(address)":"infinite","getReservesList()":"infinite","getUserAccountData(address)":"infinite","getUserConfiguration(address)":"2704","getUserEMode(address)":"2613","initReserve(address,address,address,address,address)":"infinite","initialize(address)":"infinite","liquidationCall(address,address,address,uint256,bool)":"infinite","mintToTreasury(address[])":"infinite","mintUnbacked(address,uint256,address,uint16)":"infinite","rebalanceStableBorrowRate(address,address)":"infinite","repay(address,uint256,uint256,address)":"infinite","repayWithATokens(address,uint256,uint256)":"infinite","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","resetIsolationModeTotalDebt(address)":"infinite","setConfiguration(address,(uint256))":"infinite","setMaxNumberOfReserves(uint16)":"24643","setReserveInterestRateStrategyAddress(address,address)":"infinite","setUserEMode(uint8)":"infinite","setUserUseReserveAsCollateral(address,bool)":"infinite","supply(address,uint256,address,uint16)":"infinite","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"infinite","swapBorrowRateMode(address,uint256)":"infinite","updateBridgeProtocolFee(uint256)":"infinite","updateFlashloanPremiums(uint128,uint128)":"infinite","withdraw(address,uint256,address)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BRIDGE_PROTOCOL_FEE()":"272d9072","FLASHLOAN_PREMIUM_TOTAL()":"074b2e43","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"6a99c036","MAX_NUMBER_RESERVES()":"f8119d51","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"e82fec2f","POOL_REVISION()":"0148170e","backUnbacked(address,uint256,uint256)":"d65dc7a1","borrow(address,uint256,uint256,uint16,address)":"a415bcad","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"d579ea7d","deposit(address,uint256,address,uint16)":"e8eda9df","dropReserve(address)":"63c9b860","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"d5ed3933","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"ab9c4b5d","flashLoanSimple(address,address,uint256,bytes,uint16)":"42b0b77c","getConfiguration(address)":"c44b11f7","getEModeCategoryData(uint8)":"6c6f6ae1","getReserveAddressById(uint16)":"52751797","getReserveData(address)":"35ea6a75","getReserveNormalizedIncome(address)":"d15e0053","getReserveNormalizedVariableDebt(address)":"386497fd","getReservesList()":"d1946dbc","getUserAccountData(address)":"bf92857c","getUserConfiguration(address)":"4417a583","getUserEMode(address)":"eddf1b79","initReserve(address,address,address,address,address)":"7a708e92","initialize(address)":"c4d66de8","liquidationCall(address,address,address,uint256,bool)":"00a718a9","mintToTreasury(address[])":"9cd19996","mintUnbacked(address,uint256,address,uint16)":"69a933a5","rebalanceStableBorrowRate(address,address)":"cd112382","repay(address,uint256,uint256,address)":"573ade81","repayWithATokens(address,uint256,uint256)":"2dad97d4","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"ee3e210b","rescueTokens(address,address,uint256)":"cea9d26f","resetIsolationModeTotalDebt(address)":"e43e88a1","setConfiguration(address,(uint256))":"f51e435b","setMaxNumberOfReserves(uint16)":"57c68dc4","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setUserEMode(uint8)":"28530a47","setUserUseReserveAsCollateral(address,bool)":"5a3b74b9","supply(address,uint256,address,uint16)":"617ba037","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"02c205f0","swapBorrowRateMode(address,uint256)":"94ba89a2","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiums(uint128,uint128)":"bcb6e522","withdraw(address,uint256,address)":"69328dec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TOTAL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TO_PROTOCOL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUMBER_RESERVES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"category\",\"type\":\"tuple\"}],\"name\":\"configureEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"interestRateModes\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoanSimple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"}],\"name\":\"getEModeCategoryData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"getReserveAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentStableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"}],\"internalType\":\"struct DataTypes.ReserveData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserAccountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalCollateralBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebtBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableBorrowsBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.UserConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserEMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"resetIsolationModeTotalDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newMaxNumberOfReserves\",\"type\":\"uint16\"}],\"name\":\"setMaxNumberOfReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"setUserEMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumTotal\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiums\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"BRIDGE_PROTOCOL_FEE()\":{\"returns\":{\"_0\":\"The bridge fee sent to the protocol treasury\"}},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"returns\":{\"_0\":\"The total fee on flashloans\"}},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"returns\":{\"_0\":\"The flashloan fee sent to the protocol treasury\"}},\"MAX_NUMBER_RESERVES()\":{\"returns\":{\"_0\":\"The maximum number of reserves supported\"}},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"returns\":{\"_0\":\"The percentage of available liquidity to borrow, expressed in bps\"}},\"backUnbacked(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees\"},\"returns\":{\"_0\":\"The backed amount\"}},\"borrow(address,uint256,uint256,uint16,address)\":{\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"details\":\"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets\",\"params\":{\"config\":\"The configuration of the category\",\"id\":\"The id of the category\"}},\"deposit(address,uint256,address,uint16)\":{\"details\":\"Deprecated: maintained for compatibility purposes\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"dropReserve(address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Only callable by the overlying aToken of the `asset`\",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"asset\":\"The address of the underlying asset of the aToken\",\"balanceFromBefore\":\"The aToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The aToken balance of the `to` user before the transfer\",\"from\":\"The user from which the aTokens are transferred\",\"to\":\"The user receiving the aTokens\"}},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amounts\":\"The amounts of the assets being flash-borrowed\",\"assets\":\"The addresses of the assets being flash-borrowed\",\"interestRateModes\":\"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\",\"onBehalfOf\":\"The address  that will receive the debt in the case of using on `modes` 1 or 2\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amount\":\"The amount of the asset being flash-borrowed\",\"asset\":\"The address of the asset being flash-borrowed\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"getConfiguration(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve\"}},\"getEModeCategoryData(uint8)\":{\"params\":{\"id\":\"The id of the category\"},\"returns\":{\"_0\":\"The configuration data of the category\"}},\"getReserveAddressById(uint16)\":{\"params\":{\"id\":\"The id of the reserve as stored in the DataTypes.ReserveData struct\"},\"returns\":{\"_0\":\"The address of the reserve associated with id\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The state and configuration data of the reserve\"}},\"getReserveNormalizedIncome(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve's normalized income\"}},\"getReserveNormalizedVariableDebt(address)\":{\"details\":\"WARNING: This function is intended to be used primarily by the protocol itself to get a \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReservesList()\":{\"details\":\"It does not include dropped reserves\",\"returns\":{\"_0\":\"The addresses of the underlying assets of the initialized reserves\"}},\"getUserAccountData(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"getUserConfiguration(address)\":{\"params\":{\"user\":\"The user address\"},\"returns\":{\"_0\":\"The configuration of the user\"}},\"getUserEMode(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The eMode id\"}},\"initReserve(address,address,address,address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"aTokenAddress\":\"The address of the aToken that will be assigned to the reserve\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy contract\",\"stableDebtAddress\":\"The address of the StableDebtToken that will be assigned to the reserve\",\"variableDebtAddress\":\"The address of the VariableDebtToken that will be assigned to the reserve\"}},\"initialize(address)\":{\"details\":\"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider\"}},\"liquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"mintToTreasury(address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"rebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"}},\"repay(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(address,uint256,uint256)\":{\"details\":\"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"resetIsolationModeTotalDebt(address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\"}},\"setConfiguration(address,(uint256))\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"configuration\":\"The new configuration bitmap\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"rateStrategyAddress\":\"The address of the interest rate strategy contract\"}},\"setUserEMode(uint8)\":{\"params\":{\"categoryId\":\"The id of the category\"}},\"setUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset supplied\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"}},\"supply(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"swapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"bridgeProtocolFee\":\"The part of the premium sent to the protocol treasury\"}},\"updateFlashloanPremiums(uint128,uint128)\":{\"details\":\"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract\",\"params\":{\"flashLoanPremiumToProtocol\":\"The part of the premium sent to the protocol treasury, expressed in bps\",\"flashLoanPremiumTotal\":\"The total premium, expressed in bps\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider connected to this contract\"},\"BRIDGE_PROTOCOL_FEE()\":{\"notice\":\"Returns the part of the bridge fees sent to protocol\"},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"notice\":\"Returns the total fee on flash loans\"},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"notice\":\"Returns the part of the flashloan fees sent to protocol\"},\"MAX_NUMBER_RESERVES()\":{\"notice\":\"Returns the maximum number of reserves supported to be listed in this Pool\"},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"notice\":\"Returns the percentage of available liquidity that can be borrowed at once at stable rate\"},\"backUnbacked(address,uint256,uint256)\":{\"notice\":\"Back the current unbacked underlying with `amount` and pay `fee`.\"},\"borrow(address,uint256,uint256,uint16,address)\":{\"notice\":\"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`\"},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"notice\":\"Configures a new category for the eMode.\"},\"deposit(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"dropReserve(address)\":{\"notice\":\"Drop a reserve\"},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Validates and finalizes an aToken transfer\"},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"getConfiguration(address)\":{\"notice\":\"Returns the configuration of the reserve\"},\"getEModeCategoryData(uint8)\":{\"notice\":\"Returns the data of an eMode category\"},\"getReserveAddressById(uint16)\":{\"notice\":\"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\"},\"getReserveData(address)\":{\"notice\":\"Returns the state and configuration of the reserve\"},\"getReserveNormalizedIncome(address)\":{\"notice\":\"Returns the normalized income of the reserve\"},\"getReserveNormalizedVariableDebt(address)\":{\"notice\":\"Returns the normalized variable debt per unit of asset\"},\"getReservesList()\":{\"notice\":\"Returns the list of the underlying assets of all the initialized reserves\"},\"getUserAccountData(address)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"getUserConfiguration(address)\":{\"notice\":\"Returns the configuration of the user across all the reserves\"},\"getUserEMode(address)\":{\"notice\":\"Returns the eMode the user is using\"},\"initReserve(address,address,address,address,address)\":{\"notice\":\"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy\"},\"initialize(address)\":{\"notice\":\"Initializes the Pool.\"},\"liquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\"},\"mintToTreasury(address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"mintUnbacked(address,uint256,address,uint16)\":{\"notice\":\"Mints an `amount` of aTokens to the `onBehalfOf`\"},\"rebalanceStableBorrowRate(address,address)\":{\"notice\":\"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough\"},\"repay(address,uint256,uint256,address)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\"},\"repayWithATokens(address,uint256,uint256)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\"},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"resetIsolationModeTotalDebt(address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"},\"setConfiguration(address,(uint256))\":{\"notice\":\"Sets the configuration bitmap of the reserve as a whole\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Updates the address of the interest rate strategy contract\"},\"setUserEMode(uint8)\":{\"notice\":\"Allows a user to use the protocol in eMode\"},\"setUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Allows suppliers to enable/disable a specific supplied asset as collateral\"},\"supply(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"swapBorrowRateMode(address,uint256)\":{\"notice\":\"Allows a borrower to swap his debt between stable and variable mode, or vice versa\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the protocol fee on the bridging\"},\"updateFlashloanPremiums(uint128,uint128)\":{\"notice\":\"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury\"},\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/helpers/MockPool.sol\":\"MockPoolInherited\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/helpers/MockPool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\n\\ncontract MockPool {\\n  // Reserved storage space to avoid layout collisions.\\n  uint256[100] private ______gap;\\n\\n  address internal _addressesProvider;\\n  address[] internal _reserveList;\\n\\n  function initialize(address provider) external {\\n    _addressesProvider = provider;\\n  }\\n\\n  function addReserveToReservesList(address reserve) external {\\n    _reserveList.push(reserve);\\n  }\\n\\n  function getReservesList() external view returns (address[] memory) {\\n    address[] memory reservesList = new address[](_reserveList.length);\\n    for (uint256 i; i < _reserveList.length; i++) {\\n      reservesList[i] = _reserveList[i];\\n    }\\n    return reservesList;\\n  }\\n}\\n\\nimport {Pool} from '../../protocol/pool/Pool.sol';\\n\\ncontract MockPoolInherited is Pool {\\n  uint16 internal _maxNumberOfReserves = 128;\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n\\n  constructor(IPoolAddressesProvider provider) Pool(provider) {}\\n\\n  function setMaxNumberOfReserves(uint16 newMaxNumberOfReserves) public {\\n    _maxNumberOfReserves = newMaxNumberOfReserves;\\n  }\\n\\n  function MAX_NUMBER_RESERVES() public view override returns (uint16) {\\n    return _maxNumberOfReserves;\\n  }\\n\\n  function dropReserve(address asset) external override {\\n    _reservesList[_reserves[asset].id] = address(0);\\n    delete _reserves[asset];\\n  }\\n}\\n\",\"keccak256\":\"0xf599e8aef73562f6b6c79ffb6ac5edcb898756a10baabfac3693f483fdf689e6\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {PoolStorage} from './PoolStorage.sol';\\n\\n/**\\n * @title Pool contract\\n * @author Aave\\n * @notice Main point of interaction with an Aave protocol's market\\n * - Users can:\\n *   # Supply\\n *   # Withdraw\\n *   # Borrow\\n *   # Repay\\n *   # Swap their loans between variable and stable rate\\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\\n *   # Liquidate positions\\n *   # Execute Flash Loans\\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\\n *   PoolAddressesProvider\\n */\\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\\n  using ReserveLogic for DataTypes.ReserveData;\\n\\n  uint256 public constant POOL_REVISION = 0x1;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Only pool configurator can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolConfigurator() {\\n    _onlyPoolConfigurator();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only bridge can call functions marked by this modifier.\\n   */\\n  modifier onlyBridge() {\\n    _onlyBridge();\\n    _;\\n  }\\n\\n  function _onlyPoolConfigurator() internal view virtual {\\n    require(\\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\\n    );\\n  }\\n\\n  function _onlyPoolAdmin() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyBridge() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\\n      Errors.CALLER_NOT_BRIDGE\\n    );\\n  }\\n\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return POOL_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /**\\n   * @notice Initializes the Pool.\\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\\n   * PoolAddressesProvider of the market.\\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\\n    _maxStableRateBorrowSizePercent = 0.25e4;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override onlyBridge {\\n    BridgeLogic.executeMintUnbacked(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      asset,\\n      amount,\\n      onBehalfOf,\\n      referralCode\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external virtual override onlyBridge returns (uint256) {\\n    return\\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supply(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) public virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override {\\n    IERC20WithPermit(asset).permit(\\n      msg.sender,\\n      address(this),\\n      amount,\\n      deadline,\\n      permitV,\\n      permitR,\\n      permitS\\n    );\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) public virtual override returns (uint256) {\\n    return\\n      SupplyLogic.executeWithdraw(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteWithdrawParams({\\n          asset: asset,\\n          amount: amount,\\n          to: to,\\n          reservesCount: _reservesCount,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[msg.sender]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) public virtual override {\\n    BorrowLogic.executeBorrow(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteBorrowParams({\\n        asset: asset,\\n        user: msg.sender,\\n        onBehalfOf: onBehalfOf,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        referralCode: referralCode,\\n        releaseUnderlying: true,\\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[onBehalfOf],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: onBehalfOf,\\n          useATokens: false\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override returns (uint256) {\\n    {\\n      IERC20WithPermit(asset).permit(\\n        msg.sender,\\n        address(this),\\n        amount,\\n        deadline,\\n        permitV,\\n        permitR,\\n        permitS\\n      );\\n    }\\n    {\\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\\n        asset: asset,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        onBehalfOf: onBehalfOf,\\n        useATokens: false\\n      });\\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: msg.sender,\\n          useATokens: true\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\\n    BorrowLogic.executeSwapBorrowRateMode(\\n      _reserves[asset],\\n      _usersConfig[msg.sender],\\n      asset,\\n      DataTypes.InterestRateMode(interestRateMode)\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) public virtual override {\\n    SupplyLogic.executeUseReserveAsCollateral(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[msg.sender],\\n      asset,\\n      useAsCollateral,\\n      _reservesCount,\\n      ADDRESSES_PROVIDER.getPriceOracle(),\\n      _usersEModeCategory[msg.sender]\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) public virtual override {\\n    LiquidationLogic.executeLiquidationCall(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig,\\n      _eModeCategories,\\n      DataTypes.ExecuteLiquidationCallParams({\\n        reservesCount: _reservesCount,\\n        debtToCover: debtToCover,\\n        collateralAsset: collateralAsset,\\n        debtAsset: debtAsset,\\n        user: user,\\n        receiveAToken: receiveAToken,\\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[user],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\\n      receiverAddress: receiverAddress,\\n      assets: assets,\\n      amounts: amounts,\\n      interestRateModes: interestRateModes,\\n      onBehalfOf: onBehalfOf,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n      reservesCount: _reservesCount,\\n      addressesProvider: address(ADDRESSES_PROVIDER),\\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\\n        msg.sender\\n      )\\n    });\\n\\n    FlashLoanLogic.executeFlashLoan(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      flashParams\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\\n      receiverAddress: receiverAddress,\\n      asset: asset,\\n      amount: amount,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\\n    });\\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintToTreasury(address[] calldata assets) external virtual override {\\n    PoolLogic.executeMintToTreasury(_reserves, assets);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveData(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\\n    return _reserves[asset];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    virtual\\n    override\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    return\\n      PoolLogic.executeGetUserAccountData(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: _usersConfig[user],\\n          reservesCount: _reservesCount,\\n          user: user,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[user]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getConfiguration(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\\n    return _reserves[asset].configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserConfiguration(\\n    address user\\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\\n    return _usersConfig[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedIncome(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedIncome();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedVariableDebt(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedDebt();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReservesList() external view virtual override returns (address[] memory) {\\n    uint256 reservesListCount = _reservesCount;\\n    uint256 droppedReservesCount = 0;\\n    address[] memory reservesList = new address[](reservesListCount);\\n\\n    for (uint256 i = 0; i < reservesListCount; i++) {\\n      if (_reservesList[i] != address(0)) {\\n        reservesList[i - droppedReservesCount] = _reservesList[i];\\n      } else {\\n        droppedReservesCount++;\\n      }\\n    }\\n\\n    // Reduces the length of the reserves array by `droppedReservesCount`\\n    assembly {\\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\\n    }\\n    return reservesList;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveAddressById(uint16 id) external view returns (address) {\\n    return _reservesList[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\\n    return _maxStableRateBorrowSizePercent;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\\n    return _bridgeProtocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumTotal;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external virtual override {\\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\\n    SupplyLogic.executeFinalizeTransfer(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig,\\n      DataTypes.FinalizeTransferParams({\\n        asset: asset,\\n        from: from,\\n        to: to,\\n        amount: amount,\\n        balanceFromBefore: balanceFromBefore,\\n        balanceToBefore: balanceToBefore,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        fromEModeCategory: _usersEModeCategory[from]\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    if (\\n      PoolLogic.executeInitReserve(\\n        _reserves,\\n        _reservesList,\\n        DataTypes.InitReserveParams({\\n          asset: asset,\\n          aTokenAddress: aTokenAddress,\\n          stableDebtAddress: stableDebtAddress,\\n          variableDebtAddress: variableDebtAddress,\\n          interestRateStrategyAddress: interestRateStrategyAddress,\\n          reservesCount: _reservesCount,\\n          maxNumberReserves: MAX_NUMBER_RESERVES()\\n        })\\n      )\\n    ) {\\n      _reservesCount++;\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].configuration = configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateBridgeProtocolFee(\\n    uint256 protocolFee\\n  ) external virtual override onlyPoolConfigurator {\\n    _bridgeProtocolFee = protocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external virtual override onlyPoolConfigurator {\\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function configureEModeCategory(\\n    uint8 id,\\n    DataTypes.EModeCategory memory category\\n  ) external virtual override onlyPoolConfigurator {\\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\\n    _eModeCategories[id] = category;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getEModeCategoryData(\\n    uint8 id\\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\\n    return _eModeCategories[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserEMode(uint8 categoryId) external virtual override {\\n    EModeLogic.executeSetUserEMode(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersEModeCategory,\\n      _usersConfig[msg.sender],\\n      DataTypes.ExecuteSetUserEModeParams({\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        categoryId: categoryId\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserEMode(address user) external view virtual override returns (uint256) {\\n    return _usersEModeCategory[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function resetIsolationModeTotalDebt(\\n    address asset\\n  ) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rescueTokens(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external virtual override onlyPoolAdmin {\\n    PoolLogic.executeRescueTokens(token, to, amount);\\n  }\\n\\n  /// @inheritdoc IPool\\n  /// @dev Deprecated: maintained for compatibility purposes\\n  function deposit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x3eeaa96fc9df64e0f7e85e48849549957d528ed005ebce43de9c277d662b1d37\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":28257,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_reserves","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(ReserveData)23909_storage)"},{"astId":28262,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_usersConfig","offset":0,"slot":"53","type":"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)"},{"astId":28266,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_reservesList","offset":0,"slot":"54","type":"t_mapping(t_uint256,t_address)"},{"astId":28271,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_eModeCategories","offset":0,"slot":"55","type":"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)"},{"astId":28275,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_usersEModeCategory","offset":0,"slot":"56","type":"t_mapping(t_address,t_uint8)"},{"astId":28277,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_bridgeProtocolFee","offset":0,"slot":"57","type":"t_uint256"},{"astId":28279,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_flashLoanPremiumTotal","offset":0,"slot":"58","type":"t_uint128"},{"astId":28281,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_flashLoanPremiumToProtocol","offset":16,"slot":"58","type":"t_uint128"},{"astId":28283,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_maxStableRateBorrowSizePercent","offset":0,"slot":"59","type":"t_uint64"},{"astId":28285,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_reservesCount","offset":8,"slot":"59","type":"t_uint16"},{"astId":9034,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_maxNumberOfReserves","offset":10,"slot":"59","type":"t_uint16"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_struct(ReserveData)23909_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.ReserveData)","numberOfBytes":"32","value":"t_struct(ReserveData)23909_storage"},"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.UserConfigurationMap)","numberOfBytes":"32","value":"t_struct(UserConfigurationMap)23916_storage"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)":{"encoding":"mapping","key":"t_uint8","label":"mapping(uint8 => struct DataTypes.EModeCategory)","numberOfBytes":"32","value":"t_struct(EModeCategory)23927_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(EModeCategory)23927_storage":{"encoding":"inplace","label":"struct DataTypes.EModeCategory","members":[{"astId":23918,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"ltv","offset":0,"slot":"0","type":"t_uint16"},{"astId":23920,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"liquidationThreshold","offset":2,"slot":"0","type":"t_uint16"},{"astId":23922,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"liquidationBonus","offset":4,"slot":"0","type":"t_uint16"},{"astId":23924,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"priceSource","offset":6,"slot":"0","type":"t_address"},{"astId":23926,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"label","offset":0,"slot":"1","type":"t_string_storage"}],"numberOfBytes":"64"},"t_struct(ReserveConfigurationMap)23912_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":23911,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_struct(ReserveData)23909_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveData","members":[{"astId":23880,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)23912_storage"},{"astId":23882,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"liquidityIndex","offset":0,"slot":"1","type":"t_uint128"},{"astId":23884,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"currentLiquidityRate","offset":16,"slot":"1","type":"t_uint128"},{"astId":23886,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"variableBorrowIndex","offset":0,"slot":"2","type":"t_uint128"},{"astId":23888,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"currentVariableBorrowRate","offset":16,"slot":"2","type":"t_uint128"},{"astId":23890,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"currentStableBorrowRate","offset":0,"slot":"3","type":"t_uint128"},{"astId":23892,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"lastUpdateTimestamp","offset":16,"slot":"3","type":"t_uint40"},{"astId":23894,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"id","offset":21,"slot":"3","type":"t_uint16"},{"astId":23896,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"aTokenAddress","offset":0,"slot":"4","type":"t_address"},{"astId":23898,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"stableDebtTokenAddress","offset":0,"slot":"5","type":"t_address"},{"astId":23900,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"variableDebtTokenAddress","offset":0,"slot":"6","type":"t_address"},{"astId":23902,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"interestRateStrategyAddress","offset":0,"slot":"7","type":"t_address"},{"astId":23904,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"accruedToTreasury","offset":0,"slot":"8","type":"t_uint128"},{"astId":23906,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"unbacked","offset":16,"slot":"8","type":"t_uint128"},{"astId":23908,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"isolationModeTotalDebt","offset":0,"slot":"9","type":"t_uint128"}],"numberOfBytes":"320"},"t_struct(UserConfigurationMap)23916_storage":{"encoding":"inplace","label":"struct DataTypes.UserConfigurationMap","members":[{"astId":23915,"contract":"contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider connected to this contract"},"BRIDGE_PROTOCOL_FEE()":{"notice":"Returns the part of the bridge fees sent to protocol"},"FLASHLOAN_PREMIUM_TOTAL()":{"notice":"Returns the total fee on flash loans"},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"notice":"Returns the part of the flashloan fees sent to protocol"},"MAX_NUMBER_RESERVES()":{"notice":"Returns the maximum number of reserves supported to be listed in this Pool"},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"notice":"Returns the percentage of available liquidity that can be borrowed at once at stable rate"},"backUnbacked(address,uint256,uint256)":{"notice":"Back the current unbacked underlying with `amount` and pay `fee`."},"borrow(address,uint256,uint256,uint16,address)":{"notice":"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`"},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"notice":"Configures a new category for the eMode."},"deposit(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"dropReserve(address)":{"notice":"Drop a reserve"},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"notice":"Validates and finalizes an aToken transfer"},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"getConfiguration(address)":{"notice":"Returns the configuration of the reserve"},"getEModeCategoryData(uint8)":{"notice":"Returns the data of an eMode category"},"getReserveAddressById(uint16)":{"notice":"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct"},"getReserveData(address)":{"notice":"Returns the state and configuration of the reserve"},"getReserveNormalizedIncome(address)":{"notice":"Returns the normalized income of the reserve"},"getReserveNormalizedVariableDebt(address)":{"notice":"Returns the normalized variable debt per unit of asset"},"getReservesList()":{"notice":"Returns the list of the underlying assets of all the initialized reserves"},"getUserAccountData(address)":{"notice":"Returns the user account data across all the reserves"},"getUserConfiguration(address)":{"notice":"Returns the configuration of the user across all the reserves"},"getUserEMode(address)":{"notice":"Returns the eMode the user is using"},"initReserve(address,address,address,address,address)":{"notice":"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy"},"initialize(address)":{"notice":"Initializes the Pool."},"liquidationCall(address,address,address,uint256,bool)":{"notice":"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk"},"mintToTreasury(address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"mintUnbacked(address,uint256,address,uint16)":{"notice":"Mints an `amount` of aTokens to the `onBehalfOf`"},"rebalanceStableBorrowRate(address,address)":{"notice":"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough"},"repay(address,uint256,uint256,address)":{"notice":"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address"},"repayWithATokens(address,uint256,uint256)":{"notice":"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens"},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"notice":"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"resetIsolationModeTotalDebt(address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"},"setConfiguration(address,(uint256))":{"notice":"Sets the configuration bitmap of the reserve as a whole"},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Updates the address of the interest rate strategy contract"},"setUserEMode(uint8)":{"notice":"Allows a user to use the protocol in eMode"},"setUserUseReserveAsCollateral(address,bool)":{"notice":"Allows suppliers to enable/disable a specific supplied asset as collateral"},"supply(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"swapBorrowRateMode(address,uint256)":{"notice":"Allows a borrower to swap his debt between stable and variable mode, or vice versa"},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the protocol fee on the bridging"},"updateFlashloanPremiums(uint128,uint128)":{"notice":"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury"},"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"}},"version":1}}},"contracts/mocks/helpers/MockReserveConfiguration.sol":{"MockReserveConfiguration":{"abi":[{"inputs":[],"name":"configuration","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBorrowCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBorrowingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEModeCategory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFlags","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFlashLoanEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidationBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidationProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidationThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLtv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserveFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateBorrowingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnbackedMintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"borrowCap","type":"uint256"}],"name":"setBorrowCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBorrowingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"decimals","type":"uint256"}],"name":"setDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"categoryId","type":"uint256"}],"name":"setEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFlashLoanEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"frozen","type":"bool"}],"name":"setFrozen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"setLiquidationBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidationProtocolFee","type":"uint256"}],"name":"setLiquidationProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setLiquidationThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ltv","type":"uint256"}],"name":"setLtv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserveFactor","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setStableRateBorrowingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"unbackedMintCap","type":"uint256"}],"name":"setUnbackedMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50611032806100206000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638c8885c81161010f578063c37bdcec116100a2578063ead8aa0211610071578063ead8aa0214610524578063f0141d8414610545578063f1514a1a14610562578063fa573d071461057557600080fd5b8063c37bdcec146104ad578063d0b0c816146104cb578063d1c11f18146104de578063e08a28a31461050157600080fd5b8063a55102f7116100de578063a55102f714610453578063a620063514610466578063aede7b7614610479578063b6a3f59a1461049a57600080fd5b80638c8885c8146103e157806392dfb2fb146103f45780639d706d3114610407578063a37e52e31461044057600080fd5b80636c70bee9116101875780637495b353116101565780637495b3531461036157806379750bc4146103905780637e932d32146103b35780638145bd2e146103c657600080fd5b80636c70bee9146102f75780636cc7149d14610301578063717186d11461033b57806371cb13321461034e57600080fd5b80634ae9b8bc116101c35780634ae9b8bc1461026a57806359aa9e72146102885780635e615a6b146102a65780635f558e53146102db57600080fd5b80631c446983146101f5578063203618141461020a57806328842d4f1461023a578063356f235c1461024d575b600080fd5b610208610203366004610f47565b610588565b005b60408051602081019091526000549081905260741c640fffffffff165b6040519081526020015b60405180910390f35b610208610248366004610f47565b6105a9565b60408051602081019091526000549081905260a81c60ff16610227565b60408051602081019091526000549081905260101c61ffff16610227565b60408051602080820190925260005490819052901c61ffff16610227565b6102ae6105c3565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610231565b6040805160208101825260005490819052901c61ffff16610227565b6000546102279081565b61030961062c565b60408051951515865293151560208601529115159284019290925290151560608301521515608082015260a001610231565b610208610349366004610f47565b6106a7565b61020861035c366004610f60565b6106c1565b6040805160208101909152600054908190526702000000000000001615155b6040519015158152602001610231565b604080516020810190915260005490819052670400000000000000161515610380565b6102086103c1366004610f60565b6106db565b60408051602081019091526000549081905261ffff16610227565b6102086103ef366004610f47565b6106f5565b610208610402366004610f47565b61070f565b604080516020810190915260005490819052640fffffffff605082901c81169160741c1660408051928352602083019190915201610231565b61020861044e366004610f47565b610729565b610208610461366004610f60565b610743565b610208610474366004610f47565b61075d565b60408051602081019091526000549081905260501c640fffffffff16610227565b6102086104a8366004610f47565b610777565b60408051602081019091526000549081905260981c61ffff16610227565b6102086104d9366004610f47565b610791565b604080516020810190915260005490819052678000000000000000161515610380565b604080516020810190915260005490819052670800000000000000161515610380565b60408051602081019091526000549081905260b01c640fffffffff16610227565b60408051602081019091526000549081905260301c60ff16610227565b610208610570366004610f60565b6107ab565b610208610583366004610f47565b6107c5565b604080516020810190915260005481526105a281836107df565b5160005550565b604080516020810190915260005481526105a28183610889565b60008060008060008061061960006040518060200160405290816000820154815250505161ffff80821692601083901c821692602081901c831692603082901c60ff90811693604084901c9092169260a81c1690565b949b939a50919850965094509092509050565b6000806000806000610696600060405180602001604052908160008201548152505051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b945094509450945094509091929394565b604080516020810190915260005481526105a2818361092a565b604080516020810190915260005481526105a281836109ce565b604080516020810190915260005481526105a28183610a13565b604080516020810190915260005481526105a28183610a58565b604080516020810190915260005481526105a28183610af8565b604080516020810190915260005481526105a28183610b9c565b604080516020810190915260005481526105a28183610c37565b604080516020810190915260005481526105a28183610c7c565b604080516020810190915260005481526105a28183610d1d565b604080516020810190915260005481526105a28183610dc1565b604080516020810190915260005481526105a28183610e62565b604080516020810190915260005481526105a28183610ea7565b60408051808201909152600281527f3637000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b60405180910390fd5b5081517fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1660409190911b179052565b60408051808201909152600281527f3635000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1660209190911b179052565b60408051808201909152600281527f36380000000000000000000000000000000000000000000000000000000000006020820152640fffffffff82111561099e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517ffffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffff1660509190911b179052565b603b816109dc5760006109df565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff1660ff9190911690911b1790915250565b603981610a21576000610a24565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3636000000000000000000000000000000000000000000000000000000000000602082015260ff821115610ac8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff1660309190911b179052565b60408051808201909152600281527f37320000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115610b6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517ffffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b179052565b60408051808201909152600281527f3633000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610c0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016179052565b603f81610c45576000610c48565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3730000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff1660989190911b179052565b60408051808201909152600281527f36390000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115610d91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff1660749190911b179052565b60408051808201909152600281527f3634000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610e32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1660109190911b179052565b603a81610e70576000610e73565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3731000000000000000000000000000000000000000000000000000000000000602082015260ff821115610f17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1660a89190911b179052565b600060208284031215610f5957600080fd5b5035919050565b600060208284031215610f7257600080fd5b81358015158114610f8257600080fd5b9392505050565b600060208083528351808285015260005b81811015610fb657858101830151858201604001528201610f9a565b81811115610fc8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea2646970667358221220b5fd776750efbbb841ac0667f0fc2b68d55698bc19d9bd2be8819c175122f57564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1032 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1F0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C8885C8 GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xC37BDCEC GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xEAD8AA02 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEAD8AA02 EQ PUSH2 0x524 JUMPI DUP1 PUSH4 0xF0141D84 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xF1514A1A EQ PUSH2 0x562 JUMPI DUP1 PUSH4 0xFA573D07 EQ PUSH2 0x575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC37BDCEC EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xD0B0C816 EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xD1C11F18 EQ PUSH2 0x4DE JUMPI DUP1 PUSH4 0xE08A28A3 EQ PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA55102F7 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA55102F7 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xA6200635 EQ PUSH2 0x466 JUMPI DUP1 PUSH4 0xAEDE7B76 EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xB6A3F59A EQ PUSH2 0x49A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8C8885C8 EQ PUSH2 0x3E1 JUMPI DUP1 PUSH4 0x92DFB2FB EQ PUSH2 0x3F4 JUMPI DUP1 PUSH4 0x9D706D31 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0xA37E52E3 EQ PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C70BEE9 GT PUSH2 0x187 JUMPI DUP1 PUSH4 0x7495B353 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0x7495B353 EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0x79750BC4 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0x7E932D32 EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0x8145BD2E EQ PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C70BEE9 EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0x6CC7149D EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x717186D1 EQ PUSH2 0x33B JUMPI DUP1 PUSH4 0x71CB1332 EQ PUSH2 0x34E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4AE9B8BC GT PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x4AE9B8BC EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0x59AA9E72 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0x5E615A6B EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x5F558E53 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1C446983 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x20361814 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x28842D4F EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0x356F235C EQ PUSH2 0x24D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x208 PUSH2 0x203 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x588 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x208 PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x5A9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xA8 SHR PUSH1 0xFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x10 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x5C3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x227 SWAP1 DUP2 JUMP JUMPDEST PUSH2 0x309 PUSH2 0x62C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 ISZERO ISZERO DUP7 MSTORE SWAP4 ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE SWAP2 ISZERO ISZERO SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x60 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x231 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x6A7 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x35C CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x200000000000000 AND ISZERO ISZERO JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x400000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x3C1 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x3EF CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x6F5 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x402 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x70F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP2 PUSH1 0x74 SHR AND PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x231 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x729 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x743 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x75D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x4A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x791 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x8000000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x800000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x570 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x7AB JUMP JUMPDEST PUSH2 0x208 PUSH2 0x583 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x7C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x7DF JUMP JUMPDEST MLOAD PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x889 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x619 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP MLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP3 PUSH1 0x10 DUP4 SWAP1 SHR DUP3 AND SWAP3 PUSH1 0x20 DUP2 SWAP1 SHR DUP4 AND SWAP3 PUSH1 0x30 DUP3 SWAP1 SHR PUSH1 0xFF SWAP1 DUP2 AND SWAP4 PUSH1 0x40 DUP5 SWAP1 SHR SWAP1 SWAP3 AND SWAP3 PUSH1 0xA8 SHR AND SWAP1 JUMP JUMPDEST SWAP5 SWAP12 SWAP4 SWAP11 POP SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x696 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x92A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x9CE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xA13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xA58 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xAF8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xB9C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xC37 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xD1D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xDC1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xE62 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xEA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF AND PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x8FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF AND PUSH1 0x20 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x99E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF AND PUSH1 0x50 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3B DUP2 PUSH2 0x9DC JUMPI PUSH1 0x0 PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0xA21 JUMPI PUSH1 0x0 PUSH2 0xA24 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xAC8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF AND PUSH1 0x30 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0xB6C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xB0 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xC0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3F DUP2 PUSH2 0xC45 JUMPI PUSH1 0x0 PUSH2 0xC48 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xCED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x98 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0xD91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x74 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xE32 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF AND PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3A DUP2 PUSH2 0xE70 JUMPI PUSH1 0x0 PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xF17 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFB6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xF9A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xFC8 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 REVERT PUSH24 0x6750EFBBB841AC0667F0FC2B68D55698BC19D9BD2BE8819C OR MLOAD 0x22 CREATE2 PUSH22 0x64736F6C634300080A00330000000000000000000000 ","sourceMap":"237:4967:65:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@configuration_9110":{"entryPoint":null,"id":9110,"parameterSlots":0,"returnSlots":0},"@getBorrowCap_13564":{"entryPoint":null,"id":13564,"parameterSlots":1,"returnSlots":1},"@getBorrowCap_9407":{"entryPoint":null,"id":9407,"parameterSlots":0,"returnSlots":1},"@getBorrowingEnabled_13410":{"entryPoint":null,"id":13410,"parameterSlots":1,"returnSlots":1},"@getBorrowingEnabled_9308":{"entryPoint":null,"id":9308,"parameterSlots":0,"returnSlots":1},"@getCaps_14033":{"entryPoint":null,"id":14033,"parameterSlots":1,"returnSlots":2},"@getCaps_9622":{"entryPoint":null,"id":9622,"parameterSlots":0,"returnSlots":2},"@getDecimals_13110":{"entryPoint":null,"id":13110,"parameterSlots":1,"returnSlots":1},"@getDecimals_9242":{"entryPoint":null,"id":9242,"parameterSlots":0,"returnSlots":1},"@getEModeCategory_13824":{"entryPoint":null,"id":13824,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_9417":{"entryPoint":null,"id":9417,"parameterSlots":0,"returnSlots":1},"@getFlags_13934":{"entryPoint":null,"id":13934,"parameterSlots":1,"returnSlots":5},"@getFlags_9590":{"entryPoint":1580,"id":9590,"parameterSlots":0,"returnSlots":5},"@getFlashLoanEnabled_13874":{"entryPoint":null,"id":13874,"parameterSlots":1,"returnSlots":1},"@getFlashLoanEnabled_9473":{"entryPoint":null,"id":9473,"parameterSlots":0,"returnSlots":1},"@getFrozen_13210":{"entryPoint":null,"id":13210,"parameterSlots":1,"returnSlots":1},"@getFrozen_9275":{"entryPoint":null,"id":9275,"parameterSlots":0,"returnSlots":1},"@getLiquidationBonus_13058":{"entryPoint":null,"id":13058,"parameterSlots":1,"returnSlots":1},"@getLiquidationBonus_9176":{"entryPoint":null,"id":9176,"parameterSlots":0,"returnSlots":1},"@getLiquidationProtocolFee_13720":{"entryPoint":null,"id":13720,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_9539":{"entryPoint":null,"id":9539,"parameterSlots":0,"returnSlots":1},"@getLiquidationThreshold_13006":{"entryPoint":null,"id":13006,"parameterSlots":1,"returnSlots":1},"@getLiquidationThreshold_9209":{"entryPoint":null,"id":9209,"parameterSlots":0,"returnSlots":1},"@getLtv_12954":{"entryPoint":null,"id":12954,"parameterSlots":1,"returnSlots":1},"@getLtv_9143":{"entryPoint":null,"id":9143,"parameterSlots":0,"returnSlots":1},"@getParams_14000":{"entryPoint":null,"id":14000,"parameterSlots":1,"returnSlots":6},"@getParams_9610":{"entryPoint":1475,"id":9610,"parameterSlots":0,"returnSlots":6},"@getReserveFactor_13512":{"entryPoint":null,"id":13512,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_9374":{"entryPoint":null,"id":9374,"parameterSlots":0,"returnSlots":1},"@getStableRateBorrowingEnabled_13460":{"entryPoint":null,"id":13460,"parameterSlots":1,"returnSlots":1},"@getStableRateBorrowingEnabled_9341":{"entryPoint":null,"id":9341,"parameterSlots":0,"returnSlots":1},"@getSupplyCap_13616":{"entryPoint":null,"id":13616,"parameterSlots":1,"returnSlots":1},"@getSupplyCap_9506":{"entryPoint":null,"id":9506,"parameterSlots":0,"returnSlots":1},"@getUnbackedMintCap_13772":{"entryPoint":null,"id":13772,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_9572":{"entryPoint":null,"id":9572,"parameterSlots":0,"returnSlots":1},"@setBorrowCap_13545":{"entryPoint":2346,"id":13545,"parameterSlots":2,"returnSlots":0},"@setBorrowCap_9397":{"entryPoint":1703,"id":9397,"parameterSlots":1,"returnSlots":0},"@setBorrowingEnabled_13391":{"entryPoint":3682,"id":13391,"parameterSlots":2,"returnSlots":0},"@setBorrowingEnabled_9298":{"entryPoint":1963,"id":9298,"parameterSlots":1,"returnSlots":0},"@setDecimals_13091":{"entryPoint":2648,"id":13091,"parameterSlots":2,"returnSlots":0},"@setDecimals_9232":{"entryPoint":1781,"id":9232,"parameterSlots":1,"returnSlots":0},"@setEModeCategory_13805":{"entryPoint":3751,"id":13805,"parameterSlots":2,"returnSlots":0},"@setEModeCategory_9440":{"entryPoint":1989,"id":9440,"parameterSlots":1,"returnSlots":0},"@setFlashLoanEnabled_13855":{"entryPoint":3127,"id":13855,"parameterSlots":2,"returnSlots":0},"@setFlashLoanEnabled_9463":{"entryPoint":1859,"id":9463,"parameterSlots":1,"returnSlots":0},"@setFrozen_13191":{"entryPoint":2579,"id":13191,"parameterSlots":2,"returnSlots":0},"@setFrozen_9265":{"entryPoint":1755,"id":9265,"parameterSlots":1,"returnSlots":0},"@setLiquidationBonus_13039":{"entryPoint":2185,"id":13039,"parameterSlots":2,"returnSlots":0},"@setLiquidationBonus_9166":{"entryPoint":1449,"id":9166,"parameterSlots":1,"returnSlots":0},"@setLiquidationProtocolFee_13701":{"entryPoint":3196,"id":13701,"parameterSlots":2,"returnSlots":0},"@setLiquidationProtocolFee_9529":{"entryPoint":1885,"id":9529,"parameterSlots":1,"returnSlots":0},"@setLiquidationThreshold_12987":{"entryPoint":3521,"id":12987,"parameterSlots":2,"returnSlots":0},"@setLiquidationThreshold_9199":{"entryPoint":1937,"id":9199,"parameterSlots":1,"returnSlots":0},"@setLtv_12938":{"entryPoint":2972,"id":12938,"parameterSlots":2,"returnSlots":0},"@setLtv_9133":{"entryPoint":1833,"id":9133,"parameterSlots":1,"returnSlots":0},"@setReserveFactor_13493":{"entryPoint":2015,"id":13493,"parameterSlots":2,"returnSlots":0},"@setReserveFactor_9364":{"entryPoint":1416,"id":9364,"parameterSlots":1,"returnSlots":0},"@setStableRateBorrowingEnabled_13441":{"entryPoint":2510,"id":13441,"parameterSlots":2,"returnSlots":0},"@setStableRateBorrowingEnabled_9331":{"entryPoint":1729,"id":9331,"parameterSlots":1,"returnSlots":0},"@setSupplyCap_13597":{"entryPoint":3357,"id":13597,"parameterSlots":2,"returnSlots":0},"@setSupplyCap_9496":{"entryPoint":1911,"id":9496,"parameterSlots":1,"returnSlots":0},"@setUnbackedMintCap_13753":{"entryPoint":2808,"id":13753,"parameterSlots":2,"returnSlots":0},"@setUnbackedMintCap_9562":{"entryPoint":1807,"id":9562,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_bool":{"entryPoint":3936,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":3911,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3977,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2820:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:124"},"nodeType":"YulFunctionCall","src":"101:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:124"},"nodeType":"YulFunctionCall","src":"97:32:124"},"nodeType":"YulIf","src":"94:52:124"},{"nodeType":"YulAssignment","src":"155:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"178:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"165:12:124"},"nodeType":"YulFunctionCall","src":"165:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"155:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:124","type":""}],"src":"14:180:124"},{"body":{"nodeType":"YulBlock","src":"300:76:124","statements":[{"nodeType":"YulAssignment","src":"310:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"322:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"333:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:124"},"nodeType":"YulFunctionCall","src":"318:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"310:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"352:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"363:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"345:6:124"},"nodeType":"YulFunctionCall","src":"345:25:124"},"nodeType":"YulExpressionStatement","src":"345:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"269:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"280:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"291:4:124","type":""}],"src":"199:177:124"},{"body":{"nodeType":"YulBlock","src":"622:294:124","statements":[{"nodeType":"YulAssignment","src":"632:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"644:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"655:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"640:3:124"},"nodeType":"YulFunctionCall","src":"640:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"632:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"675:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"686:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"668:6:124"},"nodeType":"YulFunctionCall","src":"668:25:124"},"nodeType":"YulExpressionStatement","src":"668:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"713:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"724:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"709:3:124"},"nodeType":"YulFunctionCall","src":"709:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"729:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"702:6:124"},"nodeType":"YulFunctionCall","src":"702:34:124"},"nodeType":"YulExpressionStatement","src":"702:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"756:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"767:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"752:3:124"},"nodeType":"YulFunctionCall","src":"752:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"772:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"745:6:124"},"nodeType":"YulFunctionCall","src":"745:34:124"},"nodeType":"YulExpressionStatement","src":"745:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"799:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"810:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"795:3:124"},"nodeType":"YulFunctionCall","src":"795:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"815:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"788:6:124"},"nodeType":"YulFunctionCall","src":"788:34:124"},"nodeType":"YulExpressionStatement","src":"788:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"842:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"853:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"838:3:124"},"nodeType":"YulFunctionCall","src":"838:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"859:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"831:6:124"},"nodeType":"YulFunctionCall","src":"831:35:124"},"nodeType":"YulExpressionStatement","src":"831:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"886:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"897:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"882:3:124"},"nodeType":"YulFunctionCall","src":"882:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"903:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"875:6:124"},"nodeType":"YulFunctionCall","src":"875:35:124"},"nodeType":"YulExpressionStatement","src":"875:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"551:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"562:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"570:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"578:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"586:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"594:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"602:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"613:4:124","type":""}],"src":"381:535:124"},{"body":{"nodeType":"YulBlock","src":"1104:330:124","statements":[{"nodeType":"YulAssignment","src":"1114:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1126:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1137:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1122:3:124"},"nodeType":"YulFunctionCall","src":"1122:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1114:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1157:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1182:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1175:6:124"},"nodeType":"YulFunctionCall","src":"1175:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1168:6:124"},"nodeType":"YulFunctionCall","src":"1168:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1150:6:124"},"nodeType":"YulFunctionCall","src":"1150:41:124"},"nodeType":"YulExpressionStatement","src":"1150:41:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1211:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1222:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1207:3:124"},"nodeType":"YulFunctionCall","src":"1207:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1241:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1234:6:124"},"nodeType":"YulFunctionCall","src":"1234:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1227:6:124"},"nodeType":"YulFunctionCall","src":"1227:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1200:6:124"},"nodeType":"YulFunctionCall","src":"1200:50:124"},"nodeType":"YulExpressionStatement","src":"1200:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1270:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1281:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1266:3:124"},"nodeType":"YulFunctionCall","src":"1266:18:124"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"1300:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:124"},"nodeType":"YulFunctionCall","src":"1293:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1286:6:124"},"nodeType":"YulFunctionCall","src":"1286:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1259:6:124"},"nodeType":"YulFunctionCall","src":"1259:50:124"},"nodeType":"YulExpressionStatement","src":"1259:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1329:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1340:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1325:3:124"},"nodeType":"YulFunctionCall","src":"1325:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"1359:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1352:6:124"},"nodeType":"YulFunctionCall","src":"1352:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1345:6:124"},"nodeType":"YulFunctionCall","src":"1345:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1318:6:124"},"nodeType":"YulFunctionCall","src":"1318:50:124"},"nodeType":"YulExpressionStatement","src":"1318:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1388:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1399:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1384:3:124"},"nodeType":"YulFunctionCall","src":"1384:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"1419:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1412:6:124"},"nodeType":"YulFunctionCall","src":"1412:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1405:6:124"},"nodeType":"YulFunctionCall","src":"1405:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1377:6:124"},"nodeType":"YulFunctionCall","src":"1377:51:124"},"nodeType":"YulExpressionStatement","src":"1377:51:124"}]},"name":"abi_encode_tuple_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1041:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1052:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1060:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1068:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1076:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1084:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1095:4:124","type":""}],"src":"921:513:124"},{"body":{"nodeType":"YulBlock","src":"1506:206:124","statements":[{"body":{"nodeType":"YulBlock","src":"1552:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1561:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1564:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1554:6:124"},"nodeType":"YulFunctionCall","src":"1554:12:124"},"nodeType":"YulExpressionStatement","src":"1554:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1527:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1536:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1523:3:124"},"nodeType":"YulFunctionCall","src":"1523:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1548:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1519:3:124"},"nodeType":"YulFunctionCall","src":"1519:32:124"},"nodeType":"YulIf","src":"1516:52:124"},{"nodeType":"YulVariableDeclaration","src":"1577:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1603:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1590:12:124"},"nodeType":"YulFunctionCall","src":"1590:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1581:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1666:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1675:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1678:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1668:6:124"},"nodeType":"YulFunctionCall","src":"1668:12:124"},"nodeType":"YulExpressionStatement","src":"1668:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1635:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1656:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1649:6:124"},"nodeType":"YulFunctionCall","src":"1649:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1642:6:124"},"nodeType":"YulFunctionCall","src":"1642:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1632:2:124"},"nodeType":"YulFunctionCall","src":"1632:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1625:6:124"},"nodeType":"YulFunctionCall","src":"1625:40:124"},"nodeType":"YulIf","src":"1622:60:124"},{"nodeType":"YulAssignment","src":"1691:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1701:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1691:6:124"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1472:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1483:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1495:6:124","type":""}],"src":"1439:273:124"},{"body":{"nodeType":"YulBlock","src":"1812:92:124","statements":[{"nodeType":"YulAssignment","src":"1822:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1834:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1845:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1830:3:124"},"nodeType":"YulFunctionCall","src":"1830:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1822:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1864:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1889:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1882:6:124"},"nodeType":"YulFunctionCall","src":"1882:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1875:6:124"},"nodeType":"YulFunctionCall","src":"1875:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1857:6:124"},"nodeType":"YulFunctionCall","src":"1857:41:124"},"nodeType":"YulExpressionStatement","src":"1857:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1781:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1792:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1803:4:124","type":""}],"src":"1717:187:124"},{"body":{"nodeType":"YulBlock","src":"2038:119:124","statements":[{"nodeType":"YulAssignment","src":"2048:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2060:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2071:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2056:3:124"},"nodeType":"YulFunctionCall","src":"2056:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2048:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2090:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2101:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2083:6:124"},"nodeType":"YulFunctionCall","src":"2083:25:124"},"nodeType":"YulExpressionStatement","src":"2083:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2128:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2139:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2124:3:124"},"nodeType":"YulFunctionCall","src":"2124:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2144:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2117:6:124"},"nodeType":"YulFunctionCall","src":"2117:34:124"},"nodeType":"YulExpressionStatement","src":"2117:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1999:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2010:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2018:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2029:4:124","type":""}],"src":"1909:248:124"},{"body":{"nodeType":"YulBlock","src":"2283:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2293:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2303:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2297:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2321:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2332:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2314:6:124"},"nodeType":"YulFunctionCall","src":"2314:21:124"},"nodeType":"YulExpressionStatement","src":"2314:21:124"},{"nodeType":"YulVariableDeclaration","src":"2344:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2364:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2358:5:124"},"nodeType":"YulFunctionCall","src":"2358:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2348:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2391:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2402:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2387:3:124"},"nodeType":"YulFunctionCall","src":"2387:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"2407:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2380:6:124"},"nodeType":"YulFunctionCall","src":"2380:34:124"},"nodeType":"YulExpressionStatement","src":"2380:34:124"},{"nodeType":"YulVariableDeclaration","src":"2423:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2432:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2427:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2492:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2521:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"2532:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2517:3:124"},"nodeType":"YulFunctionCall","src":"2517:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"2536:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2513:3:124"},"nodeType":"YulFunctionCall","src":"2513:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2555:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"2563:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2551:3:124"},"nodeType":"YulFunctionCall","src":"2551:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2567:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2547:3:124"},"nodeType":"YulFunctionCall","src":"2547:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2541:5:124"},"nodeType":"YulFunctionCall","src":"2541:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2506:6:124"},"nodeType":"YulFunctionCall","src":"2506:66:124"},"nodeType":"YulExpressionStatement","src":"2506:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2453:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2456:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2450:2:124"},"nodeType":"YulFunctionCall","src":"2450:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2464:19:124","statements":[{"nodeType":"YulAssignment","src":"2466:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2475:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2478:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2471:3:124"},"nodeType":"YulFunctionCall","src":"2471:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2466:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2446:3:124","statements":[]},"src":"2442:140:124"},{"body":{"nodeType":"YulBlock","src":"2616:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2645:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"2656:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2641:3:124"},"nodeType":"YulFunctionCall","src":"2641:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"2665:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2637:3:124"},"nodeType":"YulFunctionCall","src":"2637:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"2670:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2630:6:124"},"nodeType":"YulFunctionCall","src":"2630:42:124"},"nodeType":"YulExpressionStatement","src":"2630:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2597:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2600:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2594:2:124"},"nodeType":"YulFunctionCall","src":"2594:13:124"},"nodeType":"YulIf","src":"2591:91:124"},{"nodeType":"YulAssignment","src":"2691:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2707:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2726:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2734:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:124"},"nodeType":"YulFunctionCall","src":"2722:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"2739:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2718:3:124"},"nodeType":"YulFunctionCall","src":"2718:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2703:3:124"},"nodeType":"YulFunctionCall","src":"2703:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"2809:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2699:3:124"},"nodeType":"YulFunctionCall","src":"2699:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2691:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2252:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2263:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2274:4:124","type":""}],"src":"2162:656:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), iszero(iszero(value2)))\n        mstore(add(headStart, 96), iszero(iszero(value3)))\n        mstore(add(headStart, 128), iszero(iszero(value4)))\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101f05760003560e01c80638c8885c81161010f578063c37bdcec116100a2578063ead8aa0211610071578063ead8aa0214610524578063f0141d8414610545578063f1514a1a14610562578063fa573d071461057557600080fd5b8063c37bdcec146104ad578063d0b0c816146104cb578063d1c11f18146104de578063e08a28a31461050157600080fd5b8063a55102f7116100de578063a55102f714610453578063a620063514610466578063aede7b7614610479578063b6a3f59a1461049a57600080fd5b80638c8885c8146103e157806392dfb2fb146103f45780639d706d3114610407578063a37e52e31461044057600080fd5b80636c70bee9116101875780637495b353116101565780637495b3531461036157806379750bc4146103905780637e932d32146103b35780638145bd2e146103c657600080fd5b80636c70bee9146102f75780636cc7149d14610301578063717186d11461033b57806371cb13321461034e57600080fd5b80634ae9b8bc116101c35780634ae9b8bc1461026a57806359aa9e72146102885780635e615a6b146102a65780635f558e53146102db57600080fd5b80631c446983146101f5578063203618141461020a57806328842d4f1461023a578063356f235c1461024d575b600080fd5b610208610203366004610f47565b610588565b005b60408051602081019091526000549081905260741c640fffffffff165b6040519081526020015b60405180910390f35b610208610248366004610f47565b6105a9565b60408051602081019091526000549081905260a81c60ff16610227565b60408051602081019091526000549081905260101c61ffff16610227565b60408051602080820190925260005490819052901c61ffff16610227565b6102ae6105c3565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610231565b6040805160208101825260005490819052901c61ffff16610227565b6000546102279081565b61030961062c565b60408051951515865293151560208601529115159284019290925290151560608301521515608082015260a001610231565b610208610349366004610f47565b6106a7565b61020861035c366004610f60565b6106c1565b6040805160208101909152600054908190526702000000000000001615155b6040519015158152602001610231565b604080516020810190915260005490819052670400000000000000161515610380565b6102086103c1366004610f60565b6106db565b60408051602081019091526000549081905261ffff16610227565b6102086103ef366004610f47565b6106f5565b610208610402366004610f47565b61070f565b604080516020810190915260005490819052640fffffffff605082901c81169160741c1660408051928352602083019190915201610231565b61020861044e366004610f47565b610729565b610208610461366004610f60565b610743565b610208610474366004610f47565b61075d565b60408051602081019091526000549081905260501c640fffffffff16610227565b6102086104a8366004610f47565b610777565b60408051602081019091526000549081905260981c61ffff16610227565b6102086104d9366004610f47565b610791565b604080516020810190915260005490819052678000000000000000161515610380565b604080516020810190915260005490819052670800000000000000161515610380565b60408051602081019091526000549081905260b01c640fffffffff16610227565b60408051602081019091526000549081905260301c60ff16610227565b610208610570366004610f60565b6107ab565b610208610583366004610f47565b6107c5565b604080516020810190915260005481526105a281836107df565b5160005550565b604080516020810190915260005481526105a28183610889565b60008060008060008061061960006040518060200160405290816000820154815250505161ffff80821692601083901c821692602081901c831692603082901c60ff90811693604084901c9092169260a81c1690565b949b939a50919850965094509092509050565b6000806000806000610696600060405180602001604052908160008201548152505051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b945094509450945094509091929394565b604080516020810190915260005481526105a2818361092a565b604080516020810190915260005481526105a281836109ce565b604080516020810190915260005481526105a28183610a13565b604080516020810190915260005481526105a28183610a58565b604080516020810190915260005481526105a28183610af8565b604080516020810190915260005481526105a28183610b9c565b604080516020810190915260005481526105a28183610c37565b604080516020810190915260005481526105a28183610c7c565b604080516020810190915260005481526105a28183610d1d565b604080516020810190915260005481526105a28183610dc1565b604080516020810190915260005481526105a28183610e62565b604080516020810190915260005481526105a28183610ea7565b60408051808201909152600281527f3637000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b60405180910390fd5b5081517fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1660409190911b179052565b60408051808201909152600281527f3635000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1660209190911b179052565b60408051808201909152600281527f36380000000000000000000000000000000000000000000000000000000000006020820152640fffffffff82111561099e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517ffffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffff1660509190911b179052565b603b816109dc5760006109df565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff1660ff9190911690911b1790915250565b603981610a21576000610a24565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3636000000000000000000000000000000000000000000000000000000000000602082015260ff821115610ac8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff1660309190911b179052565b60408051808201909152600281527f37320000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115610b6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517ffffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b179052565b60408051808201909152600281527f3633000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610c0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016179052565b603f81610c45576000610c48565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3730000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff1660989190911b179052565b60408051808201909152600281527f36390000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115610d91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff1660749190911b179052565b60408051808201909152600281527f3634000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610e32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1660109190911b179052565b603a81610e70576000610e73565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3731000000000000000000000000000000000000000000000000000000000000602082015260ff821115610f17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1660a89190911b179052565b600060208284031215610f5957600080fd5b5035919050565b600060208284031215610f7257600080fd5b81358015158114610f8257600080fd5b9392505050565b600060208083528351808285015260005b81811015610fb657858101830151858201604001528201610f9a565b81811115610fc8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea2646970667358221220b5fd776750efbbb841ac0667f0fc2b68d55698bc19d9bd2be8819c175122f57564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1F0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C8885C8 GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xC37BDCEC GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xEAD8AA02 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEAD8AA02 EQ PUSH2 0x524 JUMPI DUP1 PUSH4 0xF0141D84 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xF1514A1A EQ PUSH2 0x562 JUMPI DUP1 PUSH4 0xFA573D07 EQ PUSH2 0x575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC37BDCEC EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xD0B0C816 EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xD1C11F18 EQ PUSH2 0x4DE JUMPI DUP1 PUSH4 0xE08A28A3 EQ PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA55102F7 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA55102F7 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xA6200635 EQ PUSH2 0x466 JUMPI DUP1 PUSH4 0xAEDE7B76 EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xB6A3F59A EQ PUSH2 0x49A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8C8885C8 EQ PUSH2 0x3E1 JUMPI DUP1 PUSH4 0x92DFB2FB EQ PUSH2 0x3F4 JUMPI DUP1 PUSH4 0x9D706D31 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0xA37E52E3 EQ PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C70BEE9 GT PUSH2 0x187 JUMPI DUP1 PUSH4 0x7495B353 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0x7495B353 EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0x79750BC4 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0x7E932D32 EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0x8145BD2E EQ PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C70BEE9 EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0x6CC7149D EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x717186D1 EQ PUSH2 0x33B JUMPI DUP1 PUSH4 0x71CB1332 EQ PUSH2 0x34E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4AE9B8BC GT PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x4AE9B8BC EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0x59AA9E72 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0x5E615A6B EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x5F558E53 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1C446983 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x20361814 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x28842D4F EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0x356F235C EQ PUSH2 0x24D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x208 PUSH2 0x203 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x588 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x208 PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x5A9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xA8 SHR PUSH1 0xFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x10 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x5C3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x227 SWAP1 DUP2 JUMP JUMPDEST PUSH2 0x309 PUSH2 0x62C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 ISZERO ISZERO DUP7 MSTORE SWAP4 ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE SWAP2 ISZERO ISZERO SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x60 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x231 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x6A7 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x35C CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x200000000000000 AND ISZERO ISZERO JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x400000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x3C1 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x3EF CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x6F5 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x402 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x70F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP2 PUSH1 0x74 SHR AND PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x231 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x729 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x743 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x75D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x4A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x791 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x8000000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x800000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x570 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x7AB JUMP JUMPDEST PUSH2 0x208 PUSH2 0x583 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x7C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x7DF JUMP JUMPDEST MLOAD PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x889 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x619 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP MLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP3 PUSH1 0x10 DUP4 SWAP1 SHR DUP3 AND SWAP3 PUSH1 0x20 DUP2 SWAP1 SHR DUP4 AND SWAP3 PUSH1 0x30 DUP3 SWAP1 SHR PUSH1 0xFF SWAP1 DUP2 AND SWAP4 PUSH1 0x40 DUP5 SWAP1 SHR SWAP1 SWAP3 AND SWAP3 PUSH1 0xA8 SHR AND SWAP1 JUMP JUMPDEST SWAP5 SWAP12 SWAP4 SWAP11 POP SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x696 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x92A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x9CE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xA13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xA58 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xAF8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xB9C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xC37 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xD1D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xDC1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xE62 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xEA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF AND PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x8FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF AND PUSH1 0x20 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x99E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF AND PUSH1 0x50 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3B DUP2 PUSH2 0x9DC JUMPI PUSH1 0x0 PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0xA21 JUMPI PUSH1 0x0 PUSH2 0xA24 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xAC8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF AND PUSH1 0x30 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0xB6C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xB0 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xC0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3F DUP2 PUSH2 0xC45 JUMPI PUSH1 0x0 PUSH2 0xC48 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xCED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x98 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0xD91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x74 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xE32 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF AND PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3A DUP2 PUSH2 0xE70 JUMPI PUSH1 0x0 PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xF17 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFB6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xF9A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xFC8 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 REVERT PUSH24 0x6750EFBBB841AC0667F0FC2B68D55698BC19D9BD2BE8819C OR MLOAD 0x22 CREATE2 PUSH22 0x64736F6C634300080A00330000000000000000000000 ","sourceMap":"237:4967:65:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2563:204;;;;;;:::i;:::-;;:::i;:::-;;4007:102;4076:26;;;;;;;;;-1:-1:-1;4076:26:65;;;;;4191:3:88;16761:63;;;4007:102:65;;;345:25:124;;;333:2;318:18;4007:102:65;;;;;;;;665:194;;;;;;:::i;:::-;;:::i;3183:110::-;3256:30;;;;;;;;;-1:-1:-1;3256:30:65;;;;;4339:3:88;20323:71;;;3183:110:65;4007:102;1197:124;1277:37;;;;;;;;;-1:-1:-1;1277:37:65;;;;;3298:2:88;6706:85;;;1197:124:65;4007:102;863:116;939:33;;;;;;;;;;-1:-1:-1;939:33:65;;;;;7548:77:88;;;;863:116:65;4007:102;4942:155;;;:::i;:::-;;;;668:25:124;;;724:2;709:18;;702:34;;;;752:18;;;745:34;;;;810:2;795:18;;788:34;853:3;838:19;;831:35;897:3;882:19;;875:35;655:3;640:19;4942:155:65;381:535:124;2771:110:65;2844:30;;;;;;;;-1:-1:-1;2844:30:65;;;;;15237:71:88;;;;2771:110:65;4007:102;344:54;;;;;;;4823:115;;;:::i;:::-;;;;1175:14:124;;1168:22;1150:41;;1234:14;;1227:22;1222:2;1207:18;;1200:50;1293:14;;1286:22;1266:18;;;1259:50;;;;1352:14;;1345:22;1340:2;1325:18;;1318:50;1412:14;1405:22;1399:3;1384:19;;1377:51;1137:3;1122:19;4823:115:65;921:513:124;2885:188:65;;;;;;:::i;:::-;;:::i;2207:215::-;;;;;;:::i;:::-;;:::i;1794:93::-;1857:23;;;;;;;;;-1:-1:-1;1857:23:65;;;;;9698:12:88;9686:24;9685:31;;1794:93:65;;;1882:14:124;;1875:22;1857:41;;1845:2;1830:18;1794:93:65;1717:187:124;2090:113:65;2163:33;;;;;;;;;-1:-1:-1;2163:33:65;;;;;13610:15:88;13598:27;13597:34;;2090:113:65;4007:102;1617:173;;;;;;:::i;:::-;;:::i;571:90::-;634:20;;;;;;;;;-1:-1:-1;634:20:65;;;;;5884:9:88;5872:21;571:90:65;4007:102;1325:184;;;;;;:::i;:::-;;:::i;4489:212::-;;;;;;:::i;:::-;;:::i;5101:101::-;5174:21;;;;;;;;;-1:-1:-1;5174:21:65;;;;;23507:63:88;4127:2;23507:63;;;;;;4191:3;23578:63;;5101:101:65;;;2083:25:124;;;2139:2;2124:18;;2117:34;;;;2056:18;5101:101:65;1909:248:124;403:164:65;;;;;;:::i;:::-;;:::i;3499:195::-;;;;;;:::i;:::-;;:::i;4113:240::-;;;;;;:::i;:::-;;:::i;3077:102::-;3146:26;;;;;;;;;-1:-1:-1;3146:26:65;;;;;4127:2:88;16003:63;;;3077:102:65;4007;3815:188;;;;;;:::i;:::-;;:::i;4357:128::-;4439:39;;;;;;;;;-1:-1:-1;4439:39:65;;;;;4270:3:88;18603:91;;;4357:128:65;4007:102;983:210;;;;;;:::i;:::-;;:::i;3698:113::-;3771:33;;;;;;;;;-1:-1:-1;3771:33:65;;;;;21161:23:88;21149:35;21148:42;;3698:113:65;4007:102;2426:133;2509:43;;;;;;;;;-1:-1:-1;2509:43:65;;;;;14446:22:88;14434:34;14433:41;;2426:133:65;4007:102;4705:114;4780:32;;;;;;;;;-1:-1:-1;4780:32:65;;;;;4411:3:88;19490:77;;;4705:114:65;4007:102;1513:100;1581:25;;;;;;;;;-1:-1:-1;1581:25:65;;;;;3439:2:88;8367:67;;;1513:100:65;4007:102;1891:195;;;;;;:::i;:::-;;:::i;3297:198::-;;;;;;:::i;:::-;;:::i;2563:204::-;2627:63;;;;;;;;;:47;:63;;;2696:38;2627:63;2720:13;2696:23;:38::i;:::-;2740:22;:13;:22;-1:-1:-1;2563:204:65:o;665:194::-;724:63;;;;;;;;;:47;:63;;;793:33;724:63;820:5;793:26;:33::i;4942:155::-;4998:7;5007;5016;5025;5034;5043;5067:25;:13;:23;;;;;;;;;;;;;;;;;22631:9:88;22674;22662:21;;;;3298:2;22691:85;;;;;;3369:2;22784:77;;;;;;3439:2;22869:67;;;;;;;;4063:2;22944:71;;;;;;;4339:3;23023:71;;;22454:651;5067:25:65;5060:32;;;;-1:-1:-1;5060:32:65;;-1:-1:-1;5060:32:65;-1:-1:-1;5060:32:65;-1:-1:-1;5060:32:65;;-1:-1:-1;4942:155:65;-1:-1:-1;4942:155:65:o;4823:115::-;4866:4;4872;4878;4884;4890;4909:24;:13;:22;;;;;;;;;;;;;;;;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;4909:24:65;4902:31;;;;;;;;;;4823:115;;;;;:::o;2885:188::-;2941:63;;;;;;;;;:47;:63;;;3010:30;2941:63;3030:9;3010:19;:30::i;2207:215::-;2275:63;;;;;;;;;:47;:63;;;2344:45;2275:63;2381:7;2344:36;:45::i;1617:173::-;1664:63;;;;;;;;;:47;:63;;;1733:24;1664:63;1750:6;1733:16;:24::i;1325:184::-;1379:63;;;;;;;;;:47;:63;;;1448:28;1379:63;1467:8;1448:18;:28::i;4489:212::-;4557:63;;;;;;;;;:47;:63;;;4626:42;4557:63;4652:15;4626:25;:42::i;403:164::-;447:63;;;;;;;;;:47;:63;;;516:18;447:63;530:3;516:13;:18::i;3499:195::-;3557:63;;;;;;;;;:47;:63;;;3626:35;3557:63;3653:7;3626:26;:35::i;4113:240::-;4195:63;;;;;;;;;:47;:63;;;4264:56;4195:63;4297:22;4264:32;:56::i;3815:188::-;3871:63;;;;;;;;;:47;:63;;;3940:30;3871:63;3960:9;3940:19;:30::i;983:210::-;1050:63;;;;;;;;;:47;:63;;;1119:41;1050:63;1150:9;1119:30;:41::i;1891:195::-;1949:63;;;;;;;;;:47;:63;;;2018:35;1949:63;2045:7;2018:26;:35::i;3297:198::-;3358:63;;;;;;;;;:47;:63;;;3427:35;3358:63;3451:10;3427:23;:35::i;14635:333:88:-;14814:29;;;;;;;;;;;;;;;;;4778:5;14771:41;;;14763:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;14870:9:88;;2165:66;14870:31;4063:2;14912:50;;;;14869:94;14851:112;;14635:333::o;6954:316::-;7123:24;;;;;;;;;;;;;;;;;4662:5;7085:36;;;7077:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7174:9:88;;685:66;7174:34;3369:2;7219:45;;;;7173:92;7155:110;;6954:316::o;15457:289::-;15620:25;;;;;;;;;;;;;;;;;4836:11;15585:33;;;15577:69;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15666:9:88;;2313:66;15666:27;4127:2;15698:42;;;;15665:76;15653:88;;15457:289::o;13856:272::-;3714:2;14059:7;:15;;14073:1;14059:15;;;14069:1;14059:15;14007:9;;1425:66;14007:33;14051:24;;;;;:71;;;14006:117;13988:135;;;-1:-1:-1;13856:272:88:o;9225:213::-;3565:2;9385:6;:14;;9398:1;9385:14;;;9394:1;9385:14;9343:9;;1129:66;9343:23;9377;;;;;:55;;;9342:91;9324:109;;;-1:-1:-1;9225:213:88:o;7793:285::-;7951:23;;;;;;;;;;;;;;;;;4718:3;7919:30;;;7911:64;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7995:9:88;;833:66;7995:25;3439:2;8025:47;;;;7994:79;7982:91;;7793:285::o;18863:353::-;19051:32;;;;;;;;;;;;;;;;;5103:11;19003:46;;;18995:89;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19110:9:88;;2905:66;19110:34;4411:3;19155:55;;;;19109:102;19091:120;;18863:353::o;5426:197::-;5552:18;;;;;;;;;;;;;;;;;4528:5;5530:20;;;5522:49;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5591:9:88;;389:66;5591:20;5590:28;5578:40;;5426:197::o;20596:274::-;3995:2;20799:16;:24;;20822:1;20799:24;;;20818:1;20799:24;20746:9;;2017:66;20746:34;20791:33;;;;;:73;;;20745:120;20727:138;;;-1:-1:-1;20596:274:88:o;17890:427::-;18119:39;;;;;;;;;;;;;;;;;4978:5;18051:60;;;18036:128;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18190:9:88;;2609:66;18190:41;4270:3;18242:69;;;;18189:123;18171:141;;17890:427::o;16215:289::-;16378:25;;;;;;;;;;;;;;;;;4900:11;16343:33;;;16335:69;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16424:9:88;;2461:66;16424:27;4191:3;16456:42;;;;16423:76;16411:88;;16215:289::o;6068:348::-;6253:28;;;;;;;;;;;;;;;;;4597:5;6207:44;;;6199:83;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6308:9:88;;537:66;6308:38;3298:2;6357:53;;;;6307:104;6289:122;;6068:348::o;13078:248::-;3636:2;13264:7;:15;;13278:1;13264:15;;;13274:1;13264:15;13219:9;;1277:66;13219:26;13256:24;;;;;:64;;;13218:103;13200:121;;;-1:-1:-1;13078:248:88:o;19746:306::-;19915:29;;;;;;;;;;;;;;;;;5040:3;19877:36;;;19869:76;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19965:9:88;;2757:66;19965:31;4339:3;20001:45;;;;19964:83;19952:95;;19746:306::o;14:180:124:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:124;;14:180;-1:-1:-1;14:180:124:o;1439:273::-;1495:6;1548:2;1536:9;1527:7;1523:23;1519:32;1516:52;;;1564:1;1561;1554:12;1516:52;1603:9;1590:23;1656:5;1649:13;1642:21;1635:5;1632:32;1622:60;;1678:1;1675;1668:12;1622:60;1701:5;1439:273;-1:-1:-1;;;1439:273:124:o;2162:656::-;2274:4;2303:2;2332;2321:9;2314:21;2364:6;2358:13;2407:6;2402:2;2391:9;2387:18;2380:34;2432:1;2442:140;2456:6;2453:1;2450:13;2442:140;;;2551:14;;;2547:23;;2541:30;2517:17;;;2536:2;2513:26;2506:66;2471:10;;2442:140;;;2600:6;2597:1;2594:13;2591:91;;;2670:1;2665:2;2656:6;2645:9;2641:22;2637:31;2630:42;2591:91;-1:-1:-1;2734:2:124;2722:15;2739:66;2718:88;2703:104;;;;2809:2;2699:113;;2162:656;-1:-1:-1;;;2162:656:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"829200","executionCost":"864","totalCost":"830064"},"external":{"configuration()":"2333","getBorrowCap()":"2424","getBorrowingEnabled()":"2419","getCaps()":"2469","getDecimals()":"2401","getEModeCategory()":"2448","getFlags()":"2689","getFlashLoanEnabled()":"2441","getFrozen()":"2386","getLiquidationBonus()":"2406","getLiquidationProtocolFee()":"2380","getLiquidationThreshold()":"2381","getLtv()":"2440","getParams()":"2737","getReserveFactor()":"2444","getStableRateBorrowingEnabled()":"2463","getSupplyCap()":"2393","getUnbackedMintCap()":"2379","setBorrowCap(uint256)":"infinite","setBorrowingEnabled(bool)":"24707","setDecimals(uint256)":"infinite","setEModeCategory(uint256)":"infinite","setFlashLoanEnabled(bool)":"24664","setFrozen(bool)":"24708","setLiquidationBonus(uint256)":"infinite","setLiquidationProtocolFee(uint256)":"infinite","setLiquidationThreshold(uint256)":"infinite","setLtv(uint256)":"infinite","setReserveFactor(uint256)":"infinite","setStableRateBorrowingEnabled(bool)":"24731","setSupplyCap(uint256)":"infinite","setUnbackedMintCap(uint256)":"infinite"}},"methodIdentifiers":{"configuration()":"6c70bee9","getBorrowCap()":"aede7b76","getBorrowingEnabled()":"79750bc4","getCaps()":"9d706d31","getDecimals()":"f0141d84","getEModeCategory()":"356f235c","getFlags()":"6cc7149d","getFlashLoanEnabled()":"d1c11f18","getFrozen()":"7495b353","getLiquidationBonus()":"59aa9e72","getLiquidationProtocolFee()":"c37bdcec","getLiquidationThreshold()":"4ae9b8bc","getLtv()":"8145bd2e","getParams()":"5e615a6b","getReserveFactor()":"5f558e53","getStableRateBorrowingEnabled()":"e08a28a3","getSupplyCap()":"20361814","getUnbackedMintCap()":"ead8aa02","setBorrowCap(uint256)":"717186d1","setBorrowingEnabled(bool)":"f1514a1a","setDecimals(uint256)":"8c8885c8","setEModeCategory(uint256)":"fa573d07","setFlashLoanEnabled(bool)":"a55102f7","setFrozen(bool)":"7e932d32","setLiquidationBonus(uint256)":"28842d4f","setLiquidationProtocolFee(uint256)":"a6200635","setLiquidationThreshold(uint256)":"d0b0c816","setLtv(uint256)":"a37e52e3","setReserveFactor(uint256)":"1c446983","setStableRateBorrowingEnabled(bool)":"71cb1332","setSupplyCap(uint256)":"b6a3f59a","setUnbackedMintCap(uint256)":"92dfb2fb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"configuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBorrowCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBorrowingEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEModeCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFlags\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFlashLoanEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidationBonus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidationProtocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidationThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLtv\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserveFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateBorrowingEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbackedMintCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"}],\"name\":\"setBorrowCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setBorrowingEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"setDecimals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryId\",\"type\":\"uint256\"}],\"name\":\"setEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setFlashLoanEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"frozen\",\"type\":\"bool\"}],\"name\":\"setFrozen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"bonus\",\"type\":\"uint256\"}],\"name\":\"setLiquidationBonus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidationProtocolFee\",\"type\":\"uint256\"}],\"name\":\"setLiquidationProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"setLiquidationThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"}],\"name\":\"setLtv\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setStableRateBorrowingEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"}],\"name\":\"setSupplyCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"unbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"setUnbackedMintCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/helpers/MockReserveConfiguration.sol\":\"MockReserveConfiguration\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/helpers/MockReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ReserveConfiguration} from '../../protocol/libraries/configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '../../protocol/libraries/types/DataTypes.sol';\\n\\ncontract MockReserveConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  DataTypes.ReserveConfigurationMap public configuration;\\n\\n  function setLtv(uint256 ltv) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setLtv(ltv);\\n    configuration = config;\\n  }\\n\\n  function getLtv() external view returns (uint256) {\\n    return configuration.getLtv();\\n  }\\n\\n  function setLiquidationBonus(uint256 bonus) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setLiquidationBonus(bonus);\\n    configuration = config;\\n  }\\n\\n  function getLiquidationBonus() external view returns (uint256) {\\n    return configuration.getLiquidationBonus();\\n  }\\n\\n  function setLiquidationThreshold(uint256 threshold) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setLiquidationThreshold(threshold);\\n    configuration = config;\\n  }\\n\\n  function getLiquidationThreshold() external view returns (uint256) {\\n    return configuration.getLiquidationThreshold();\\n  }\\n\\n  function setDecimals(uint256 decimals) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setDecimals(decimals);\\n    configuration = config;\\n  }\\n\\n  function getDecimals() external view returns (uint256) {\\n    return configuration.getDecimals();\\n  }\\n\\n  function setFrozen(bool frozen) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setFrozen(frozen);\\n    configuration = config;\\n  }\\n\\n  function getFrozen() external view returns (bool) {\\n    return configuration.getFrozen();\\n  }\\n\\n  function setBorrowingEnabled(bool enabled) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setBorrowingEnabled(enabled);\\n    configuration = config;\\n  }\\n\\n  function getBorrowingEnabled() external view returns (bool) {\\n    return configuration.getBorrowingEnabled();\\n  }\\n\\n  function setStableRateBorrowingEnabled(bool enabled) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setStableRateBorrowingEnabled(enabled);\\n    configuration = config;\\n  }\\n\\n  function getStableRateBorrowingEnabled() external view returns (bool) {\\n    return configuration.getStableRateBorrowingEnabled();\\n  }\\n\\n  function setReserveFactor(uint256 reserveFactor) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setReserveFactor(reserveFactor);\\n    configuration = config;\\n  }\\n\\n  function getReserveFactor() external view returns (uint256) {\\n    return configuration.getReserveFactor();\\n  }\\n\\n  function setBorrowCap(uint256 borrowCap) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setBorrowCap(borrowCap);\\n    configuration = config;\\n  }\\n\\n  function getBorrowCap() external view returns (uint256) {\\n    return configuration.getBorrowCap();\\n  }\\n\\n  function getEModeCategory() external view returns (uint256) {\\n    return configuration.getEModeCategory();\\n  }\\n\\n  function setEModeCategory(uint256 categoryId) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setEModeCategory(categoryId);\\n    configuration = config;\\n  }\\n\\n  function setFlashLoanEnabled(bool enabled) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setFlashLoanEnabled(enabled);\\n    configuration = config;\\n  }\\n\\n  function getFlashLoanEnabled() external view returns (bool) {\\n    return configuration.getFlashLoanEnabled();\\n  }\\n\\n  function setSupplyCap(uint256 supplyCap) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setSupplyCap(supplyCap);\\n    configuration = config;\\n  }\\n\\n  function getSupplyCap() external view returns (uint256) {\\n    return configuration.getSupplyCap();\\n  }\\n\\n  function setLiquidationProtocolFee(uint256 liquidationProtocolFee) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setLiquidationProtocolFee(liquidationProtocolFee);\\n    configuration = config;\\n  }\\n\\n  function getLiquidationProtocolFee() external view returns (uint256) {\\n    return configuration.getLiquidationProtocolFee();\\n  }\\n\\n  function setUnbackedMintCap(uint256 unbackedMintCap) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setUnbackedMintCap(unbackedMintCap);\\n    configuration = config;\\n  }\\n\\n  function getUnbackedMintCap() external view returns (uint256) {\\n    return configuration.getUnbackedMintCap();\\n  }\\n\\n  function getFlags() external view returns (bool, bool, bool, bool, bool) {\\n    return configuration.getFlags();\\n  }\\n\\n  function getParams()\\n    external\\n    view\\n    returns (uint256, uint256, uint256, uint256, uint256, uint256)\\n  {\\n    return configuration.getParams();\\n  }\\n\\n  function getCaps() external view returns (uint256, uint256) {\\n    return configuration.getCaps();\\n  }\\n}\\n\",\"keccak256\":\"0xc99c804088eb8ed9b661e41a77cf7e631339b37cf9500f69cfa11d619b139d63\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9110,"contract":"contracts/mocks/helpers/MockReserveConfiguration.sol:MockReserveConfiguration","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)23912_storage"}],"types":{"t_struct(ReserveConfigurationMap)23912_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":23911,"contract":"contracts/mocks/helpers/MockReserveConfiguration.sol:MockReserveConfiguration","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/helpers/SelfDestructTransfer.sol":{"SelfdestructTransfer":{"abi":[{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"destroyAndTransfer","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060bc8061001f6000396000f3fe608060405260043610601c5760003560e01c8063785e07b3146021575b600080fd5b6030602c366004604b565b6032565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b600060208284031215605c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114607f57600080fd5b939250505056fea2646970667358221220fea252da90a06bc70e97eaaf66c9b86a6b69d59e6b6880b4aee35184b56b6efb64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xBC DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x1C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x785E07B3 EQ PUSH1 0x21 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x30 PUSH1 0x2C CALLDATASIZE PUSH1 0x4 PUSH1 0x4B JUMP JUMPDEST PUSH1 0x32 JUMP JUMPDEST STOP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SELFDESTRUCT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0x7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID LOG2 MSTORE 0xDA SWAP1 LOG0 PUSH12 0xC70E97EAAF66C9B86A6B69D5 SWAP15 PUSH12 0x6880B4AEE35184B56B6EFB64 PUSH20 0x6F6C634300080A00330000000000000000000000 ","sourceMap":"62:128:66:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@destroyAndTransfer_9635":{"entryPoint":50,"id":9635,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_payable":{"entryPoint":75,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:333:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"92:239:124","statements":[{"body":{"nodeType":"YulBlock","src":"138:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"147:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"150:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"140:6:124"},"nodeType":"YulFunctionCall","src":"140:12:124"},"nodeType":"YulExpressionStatement","src":"140:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"113:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"122:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"109:3:124"},"nodeType":"YulFunctionCall","src":"109:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"134:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"105:3:124"},"nodeType":"YulFunctionCall","src":"105:32:124"},"nodeType":"YulIf","src":"102:52:124"},{"nodeType":"YulVariableDeclaration","src":"163:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"189:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"176:12:124"},"nodeType":"YulFunctionCall","src":"176:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"167:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"285:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"294:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"297:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"287:6:124"},"nodeType":"YulFunctionCall","src":"287:12:124"},"nodeType":"YulExpressionStatement","src":"287:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"221:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"239:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"228:3:124"},"nodeType":"YulFunctionCall","src":"228:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"218:2:124"},"nodeType":"YulFunctionCall","src":"218:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"211:6:124"},"nodeType":"YulFunctionCall","src":"211:73:124"},"nodeType":"YulIf","src":"208:93:124"},{"nodeType":"YulAssignment","src":"310:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"320:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"310:6:124"}]}]},"name":"abi_decode_tuple_t_address_payable","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"58:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"69:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"81:6:124","type":""}],"src":"14:317:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405260043610601c5760003560e01c8063785e07b3146021575b600080fd5b6030602c366004604b565b6032565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b600060208284031215605c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114607f57600080fd5b939250505056fea2646970667358221220fea252da90a06bc70e97eaaf66c9b86a6b69d59e6b6880b4aee35184b56b6efb64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x1C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x785E07B3 EQ PUSH1 0x21 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x30 PUSH1 0x2C CALLDATASIZE PUSH1 0x4 PUSH1 0x4B JUMP JUMPDEST PUSH1 0x32 JUMP JUMPDEST STOP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SELFDESTRUCT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0x7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID LOG2 MSTORE 0xDA SWAP1 LOG0 PUSH12 0xC70E97EAAF66C9B86A6B69D5 SWAP15 PUSH12 0x6880B4AEE35184B56B6EFB64 PUSH20 0x6F6C634300080A00330000000000000000000000 ","sourceMap":"62:128:66:-:0;;;;;;;;;;;;;;;;;;;;;96:92;;;;;;:::i;:::-;;:::i;:::-;;;180:2;167:16;;;14:317:124;81:6;134:2;122:9;113:7;109:23;105:32;102:52;;;150:1;147;140:12;102:52;189:9;176:23;239:42;232:5;228:54;221:5;218:65;208:93;;297:1;294;287:12;208:93;320:5;14:317;-1:-1:-1;;;14:317:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"37600","executionCost":"87","totalCost":"37687"},"external":{"destroyAndTransfer(address)":"27809"}},"methodIdentifiers":{"destroyAndTransfer(address)":"785e07b3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"destroyAndTransfer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/helpers/SelfDestructTransfer.sol\":\"SelfdestructTransfer\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/helpers/SelfDestructTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\ncontract SelfdestructTransfer {\\n  function destroyAndTransfer(address payable to) external payable {\\n    selfdestruct(to);\\n  }\\n}\\n\",\"keccak256\":\"0xc32f2c59aad7982a7f8afc4910f36f04ffc5f133bd8e48d80412f0b65a33ae48\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/oracle/CLAggregators/MockAggregator.sol":{"MockAggregator":{"abi":[{"inputs":[{"internalType":"int256","name":"initialAnswer","type":"int256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"current","type":"int256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updatedAt","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTokenType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_9665":{"entryPoint":null,"id":9665,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_int256_fromMemory":{"entryPoint":111,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:381:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"94:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"140:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"149:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"152:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"142:6:124"},"nodeType":"YulFunctionCall","src":"142:12:124"},"nodeType":"YulExpressionStatement","src":"142:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"115:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"124:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"136:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:32:124"},"nodeType":"YulIf","src":"104:52:124"},{"nodeType":"YulAssignment","src":"165:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"175:5:124"},"nodeType":"YulFunctionCall","src":"175:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"165:6:124"}]}]},"name":"abi_decode_tuple_t_int256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"60:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"71:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"83:6:124","type":""}],"src":"14:183:124"},{"body":{"nodeType":"YulBlock","src":"303:76:124","statements":[{"nodeType":"YulAssignment","src":"313:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"325:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"336:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"321:3:124"},"nodeType":"YulFunctionCall","src":"321:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"313:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"355:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"366:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"348:6:124"},"nodeType":"YulFunctionCall","src":"348:25:124"},"nodeType":"YulExpressionStatement","src":"348:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"272:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"283:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"294:4:124","type":""}],"src":"202:177:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_int256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161013838038061013883398101604081905261002f9161006f565b600081815560405142815282907f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a350610088565b60006020828403121561008157600080fd5b5051919050565b60a2806100966000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063313ce56714604157806350d25bcd146055578063fcab1819146066575b600080fd5b604051600881526020015b60405180910390f35b6000545b604051908152602001604c565b6001605956fea2646970667358221220f0cdec7e455e88df72a271e04f233a0a504843bda6ee29c9575ae83cd5f046cf64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x138 CODESIZE SUB DUP1 PUSH2 0x138 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x6F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD TIMESTAMP DUP2 MSTORE DUP3 SWAP1 PUSH32 0x559884FD3A460DB3073B7FC896CC77986F16E378210DED43186175BF646FC5F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x88 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xA2 DUP1 PUSH2 0x96 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 EQ PUSH1 0x41 JUMPI DUP1 PUSH4 0x50D25BCD EQ PUSH1 0x55 JUMPI DUP1 PUSH4 0xFCAB1819 EQ PUSH1 0x66 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x59 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CREATE 0xCD 0xEC PUSH31 0x455E88DF72A271E04F233A0A504843BDA6EE29C9575AE83CD5F046CF64736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"62:530:67:-:0;;;215:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;255:13;:29;;;295:48;;327:15;348:25:124;;255:29:67;;295:48;;336:2:124;321:18;295:48:67;;;;;;;215:133;62:530;;14:183:124;83:6;136:2;124:9;115:7;111:23;107:32;104:52;;;152:1;149;142:12;104:52;-1:-1:-1;175:16:124;;14:183;-1:-1:-1;14:183:124:o;202:177::-;62:530:67;;;;;;"},"deployedBytecode":{"functionDebugData":{"@decimals_9689":{"entryPoint":null,"id":9689,"parameterSlots":0,"returnSlots":1},"@getTokenType_9681":{"entryPoint":null,"id":9681,"parameterSlots":0,"returnSlots":1},"@latestAnswer_9673":{"entryPoint":null,"id":9673,"parameterSlots":0,"returnSlots":1},"abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:562:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"111:87:124","statements":[{"nodeType":"YulAssignment","src":"121:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"133:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"144:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"129:3:124"},"nodeType":"YulFunctionCall","src":"129:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"121:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"163:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"178:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"186:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"174:3:124"},"nodeType":"YulFunctionCall","src":"174:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"156:6:124"},"nodeType":"YulFunctionCall","src":"156:36:124"},"nodeType":"YulExpressionStatement","src":"156:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"80:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"91:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"102:4:124","type":""}],"src":"14:184:124"},{"body":{"nodeType":"YulBlock","src":"302:76:124","statements":[{"nodeType":"YulAssignment","src":"312:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"324:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"335:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"320:3:124"},"nodeType":"YulFunctionCall","src":"320:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"312:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"354:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"365:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"347:6:124"},"nodeType":"YulFunctionCall","src":"347:25:124"},"nodeType":"YulExpressionStatement","src":"347:25:124"}]},"name":"abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"271:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"282:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"293:4:124","type":""}],"src":"203:175:124"},{"body":{"nodeType":"YulBlock","src":"484:76:124","statements":[{"nodeType":"YulAssignment","src":"494:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"506:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:124"},"nodeType":"YulFunctionCall","src":"502:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"494:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"536:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"547:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"529:6:124"},"nodeType":"YulFunctionCall","src":"529:25:124"},"nodeType":"YulExpressionStatement","src":"529:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"453:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"464:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"475:4:124","type":""}],"src":"383:177:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063313ce56714604157806350d25bcd146055578063fcab1819146066575b600080fd5b604051600881526020015b60405180910390f35b6000545b604051908152602001604c565b6001605956fea2646970667358221220f0cdec7e455e88df72a271e04f233a0a504843bda6ee29c9575ae83cd5f046cf64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 EQ PUSH1 0x41 JUMPI DUP1 PUSH4 0x50D25BCD EQ PUSH1 0x55 JUMPI DUP1 PUSH4 0xFCAB1819 EQ PUSH1 0x66 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x59 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CREATE 0xCD 0xEC PUSH31 0x455E88DF72A271E04F233A0A504843BDA6EE29C9575AE83CD5F046CF64736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"62:530:67:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;521:69;;;584:1;156:36:124;;144:2;129:18;521:69:67;;;;;;;;352:86;399:6;420:13;352:86;;;347:25:124;;;335:2;320:18;352:86:67;203:175:124;442:75:67;511:1;442:75;"},"gasEstimates":{"creation":{"codeDepositCost":"32400","executionCost":"infinite","totalCost":"infinite"},"external":{"decimals()":"144","getTokenType()":"214","latestAnswer()":"2281"}},"methodIdentifiers":{"decimals()":"313ce567","getTokenType()":"fcab1819","latestAnswer()":"50d25bcd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"initialAnswer\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"current\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"name\":\"AnswerUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/oracle/CLAggregators/MockAggregator.sol\":\"MockAggregator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/oracle/CLAggregators/MockAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\ncontract MockAggregator {\\n  int256 private _latestAnswer;\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n  constructor(int256 initialAnswer) {\\n    _latestAnswer = initialAnswer;\\n    emit AnswerUpdated(initialAnswer, 0, block.timestamp);\\n  }\\n\\n  function latestAnswer() external view returns (int256) {\\n    return _latestAnswer;\\n  }\\n\\n  function getTokenType() external pure returns (uint256) {\\n    return 1;\\n  }\\n\\n  function decimals() external pure returns (uint8) {\\n    return 8;\\n  }\\n}\\n\",\"keccak256\":\"0xb9dc6ba54dcd7adf2dcd938c5cfa7540aa72bd09f644008efe411710ccf1dcdc\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9640,"contract":"contracts/mocks/oracle/CLAggregators/MockAggregator.sol:MockAggregator","label":"_latestAnswer","offset":0,"slot":"0","type":"t_int256"}],"types":{"t_int256":{"encoding":"inplace","label":"int256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/oracle/PriceOracle.sol":{"PriceOracle":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AssetPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"EthPriceUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthUsdPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setAssetPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setEthUsdPrice","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}},"setAssetPrice(address,uint256)":{"params":{"asset":"The address of the asset","price":"The price of the asset"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610231806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806351323f7214610051578063a0a8045e14610066578063b3596f071461007c578063b951883a146100b2575b600080fd5b61006461005f366004610196565b6100c5565b005b6001545b60405190815260200160405180910390f35b61006a61008a3660046101c0565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100646100c03660046101e2565b61012d565b73ffffffffffffffffffffffffffffffffffffffff821660008181526020818152604091829020849055815192835282018390524282820152517fce6e0b57367bae95ca7198e1172f653ea64a645c16ab586b4cefa9237bfc2d929181900360600190a15050565b6001819055604080518281524260208201527fb4f35977939fa8b5ffe552d517a8ff5223046b1fdd3ee0068ae38d1e2b8d0016910160405180910390a150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461019157600080fd5b919050565b600080604083850312156101a957600080fd5b6101b28361016d565b946020939093013593505050565b6000602082840312156101d257600080fd5b6101db8261016d565b9392505050565b6000602082840312156101f457600080fd5b503591905056fea2646970667358221220dbb79c57db1d61f4d1b2cd2fcb4c35895ebc4dc003660d97adf5e6e2c51438d264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x51323F72 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA0A8045E EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0xB3596F07 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0xB951883A EQ PUSH2 0xB2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x196 JUMP JUMPDEST PUSH2 0xC5 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6A PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x12D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD DUP4 SWAP1 MSTORE TIMESTAMP DUP3 DUP3 ADD MSTORE MLOAD PUSH32 0xCE6E0B57367BAE95CA7198E1172F653EA64A645C16AB586B4CEFA9237BFC2D92 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xB4F35977939FA8B5FFE552D517A8FF5223046B1FDD3EE0068AE38D1E2B8D0016 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B2 DUP4 PUSH2 0x16D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DB DUP3 PUSH2 0x16D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xB7 SWAP13 JUMPI 0xDB SAR PUSH2 0xF4D1 0xB2 0xCD 0x2F 0xCB 0x4C CALLDATALOAD DUP10 0x5E 0xBC 0x4D 0xC0 SUB PUSH7 0xD97ADF5E6E2C5 EQ CODESIZE 0xD2 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"127:801:68:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@getAssetPrice_9729":{"entryPoint":null,"id":9729,"parameterSlots":1,"returnSlots":1},"@getEthUsdPrice_9759":{"entryPoint":null,"id":9759,"parameterSlots":0,"returnSlots":1},"@setAssetPrice_9751":{"entryPoint":197,"id":9751,"parameterSlots":2,"returnSlots":0},"@setEthUsdPrice_9775":{"entryPoint":301,"id":9775,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":365,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":448,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":406,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":482,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1655:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"302:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"348:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"357:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"360:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"350:6:124"},"nodeType":"YulFunctionCall","src":"350:12:124"},"nodeType":"YulExpressionStatement","src":"350:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"323:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"319:3:124"},"nodeType":"YulFunctionCall","src":"319:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"344:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"315:3:124"},"nodeType":"YulFunctionCall","src":"315:32:124"},"nodeType":"YulIf","src":"312:52:124"},{"nodeType":"YulAssignment","src":"373:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"402:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"383:18:124"},"nodeType":"YulFunctionCall","src":"383:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"373:6:124"}]},{"nodeType":"YulAssignment","src":"421:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"448:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"444:3:124"},"nodeType":"YulFunctionCall","src":"444:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"431:12:124"},"nodeType":"YulFunctionCall","src":"431:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"421:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"260:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"271:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"283:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"291:6:124","type":""}],"src":"215:254:124"},{"body":{"nodeType":"YulBlock","src":"575:76:124","statements":[{"nodeType":"YulAssignment","src":"585:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"597:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"593:3:124"},"nodeType":"YulFunctionCall","src":"593:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"585:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"627:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"638:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:124"},"nodeType":"YulFunctionCall","src":"620:25:124"},"nodeType":"YulExpressionStatement","src":"620:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"544:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"555:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"566:4:124","type":""}],"src":"474:177:124"},{"body":{"nodeType":"YulBlock","src":"726:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"772:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"781:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"784:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"774:6:124"},"nodeType":"YulFunctionCall","src":"774:12:124"},"nodeType":"YulExpressionStatement","src":"774:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"747:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"756:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"743:3:124"},"nodeType":"YulFunctionCall","src":"743:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"768:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"739:3:124"},"nodeType":"YulFunctionCall","src":"739:32:124"},"nodeType":"YulIf","src":"736:52:124"},{"nodeType":"YulAssignment","src":"797:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"826:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"807:18:124"},"nodeType":"YulFunctionCall","src":"807:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"797:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"692:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"703:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"715:6:124","type":""}],"src":"656:186:124"},{"body":{"nodeType":"YulBlock","src":"917:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"963:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"972:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"975:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"965:6:124"},"nodeType":"YulFunctionCall","src":"965:12:124"},"nodeType":"YulExpressionStatement","src":"965:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"938:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"947:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"934:3:124"},"nodeType":"YulFunctionCall","src":"934:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"930:3:124"},"nodeType":"YulFunctionCall","src":"930:32:124"},"nodeType":"YulIf","src":"927:52:124"},{"nodeType":"YulAssignment","src":"988:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1011:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"998:12:124"},"nodeType":"YulFunctionCall","src":"998:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"988:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"883:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"894:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"906:6:124","type":""}],"src":"847:180:124"},{"body":{"nodeType":"YulBlock","src":"1189:211:124","statements":[{"nodeType":"YulAssignment","src":"1199:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1211:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1222:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1207:3:124"},"nodeType":"YulFunctionCall","src":"1207:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1199:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1241:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1256:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1264:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1252:3:124"},"nodeType":"YulFunctionCall","src":"1252:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1234:6:124"},"nodeType":"YulFunctionCall","src":"1234:74:124"},"nodeType":"YulExpressionStatement","src":"1234:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1328:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1339:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1324:3:124"},"nodeType":"YulFunctionCall","src":"1324:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1344:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1317:6:124"},"nodeType":"YulFunctionCall","src":"1317:34:124"},"nodeType":"YulExpressionStatement","src":"1317:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1371:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1382:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1367:3:124"},"nodeType":"YulFunctionCall","src":"1367:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"1387:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1360:6:124"},"nodeType":"YulFunctionCall","src":"1360:34:124"},"nodeType":"YulExpressionStatement","src":"1360:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1142:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1153:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1161:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1169:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1180:4:124","type":""}],"src":"1032:368:124"},{"body":{"nodeType":"YulBlock","src":"1534:119:124","statements":[{"nodeType":"YulAssignment","src":"1544:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1556:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1567:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1552:3:124"},"nodeType":"YulFunctionCall","src":"1552:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1544:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1586:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1597:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1579:6:124"},"nodeType":"YulFunctionCall","src":"1579:25:124"},"nodeType":"YulExpressionStatement","src":"1579:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1624:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1635:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1620:3:124"},"nodeType":"YulFunctionCall","src":"1620:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1640:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1613:6:124"},"nodeType":"YulFunctionCall","src":"1613:34:124"},"nodeType":"YulExpressionStatement","src":"1613:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1495:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1506:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1514:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1525:4:124","type":""}],"src":"1405:248:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c806351323f7214610051578063a0a8045e14610066578063b3596f071461007c578063b951883a146100b2575b600080fd5b61006461005f366004610196565b6100c5565b005b6001545b60405190815260200160405180910390f35b61006a61008a3660046101c0565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100646100c03660046101e2565b61012d565b73ffffffffffffffffffffffffffffffffffffffff821660008181526020818152604091829020849055815192835282018390524282820152517fce6e0b57367bae95ca7198e1172f653ea64a645c16ab586b4cefa9237bfc2d929181900360600190a15050565b6001819055604080518281524260208201527fb4f35977939fa8b5ffe552d517a8ff5223046b1fdd3ee0068ae38d1e2b8d0016910160405180910390a150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461019157600080fd5b919050565b600080604083850312156101a957600080fd5b6101b28361016d565b946020939093013593505050565b6000602082840312156101d257600080fd5b6101db8261016d565b9392505050565b6000602082840312156101f457600080fd5b503591905056fea2646970667358221220dbb79c57db1d61f4d1b2cd2fcb4c35895ebc4dc003660d97adf5e6e2c51438d264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x51323F72 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA0A8045E EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0xB3596F07 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0xB951883A EQ PUSH2 0xB2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x196 JUMP JUMPDEST PUSH2 0xC5 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6A PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x12D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD DUP4 SWAP1 MSTORE TIMESTAMP DUP3 DUP3 ADD MSTORE MLOAD PUSH32 0xCE6E0B57367BAE95CA7198E1172F653EA64A645C16AB586B4CEFA9237BFC2D92 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xB4F35977939FA8B5FFE552D517A8FF5223046B1FDD3EE0068AE38D1E2B8D0016 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B2 DUP4 PUSH2 0x16D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DB DUP3 PUSH2 0x16D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xB7 SWAP13 JUMPI 0xDB SAR PUSH2 0xF4D1 0xB2 0xCD 0x2F 0xCB 0x4C CALLDATALOAD DUP10 0x5E 0xBC 0x4D 0xC0 SUB PUSH7 0xD97ADF5E6E2C5 EQ CODESIZE 0xD2 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"127:801:68:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;541:162;;;;;;:::i;:::-;;:::i;:::-;;707:87;778:11;;707:87;;;620:25:124;;;608:2;593:18;707:87:68;;;;;;;427:110;;;;;;:::i;:::-;519:13;;497:7;519:13;;;;;;;;;;;;427:110;798:128;;;;;;:::i;:::-;;:::i;541:162::-;618:13;;;:6;:13;;;;;;;;;;;;:21;;;650:48;;1234:74:124;;;1324:18;;1317:34;;;682:15:68;1367:18:124;;;1360:34;650:48:68;;;;;;1222:2:124;650:48:68;;;541:162;;:::o;798:128::-;852:11;:19;;;882:39;;;1579:25:124;;;905:15:68;1635:2:124;1620:18;;1613:34;882:39:68;;1552:18:124;882:39:68;;;;;;;798:128;:::o;14:196:124:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:254::-;283:6;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;383:29;402:9;383:29;:::i;:::-;373:39;459:2;444:18;;;;431:32;;-1:-1:-1;;;215:254:124:o;656:186::-;715:6;768:2;756:9;747:7;743:23;739:32;736:52;;;784:1;781;774:12;736:52;807:29;826:9;807:29;:::i;:::-;797:39;656:186;-1:-1:-1;;;656:186:124:o;847:180::-;906:6;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;-1:-1:-1;998:23:124;;847:180;-1:-1:-1;847:180:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"112200","executionCost":"159","totalCost":"112359"},"external":{"getAssetPrice(address)":"2526","getEthUsdPrice()":"2269","setAssetPrice(address,uint256)":"24087","setEthUsdPrice(uint256)":"23706"}},"methodIdentifiers":{"getAssetPrice(address)":"b3596f07","getEthUsdPrice()":"a0a8045e","setAssetPrice(address,uint256)":"51323f72","setEthUsdPrice(uint256)":"b951883a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"AssetPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"EthPriceUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEthUsdPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setAssetPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setEthUsdPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}},\"setAssetPrice(address,uint256)\":{\"params\":{\"asset\":\"The address of the asset\",\"price\":\"The price of the asset\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"},\"setAssetPrice(address,uint256)\":{\"notice\":\"Set the price of the asset\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/oracle/PriceOracle.sol\":\"PriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracle\\n * @author Aave\\n * @notice Defines the basic interface for a Price oracle.\\n */\\ninterface IPriceOracle {\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Set the price of the asset\\n   * @param asset The address of the asset\\n   * @param price The price of the asset\\n   */\\n  function setAssetPrice(address asset, uint256 price) external;\\n}\\n\",\"keccak256\":\"0x672bcf328d4d811c1dea02b57580ea650f73121f98f39e7916ac70340bb234d2\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/oracle/PriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IPriceOracle} from '../../interfaces/IPriceOracle.sol';\\n\\ncontract PriceOracle is IPriceOracle {\\n  // Map of asset prices (asset => price)\\n  mapping(address => uint256) internal prices;\\n\\n  uint256 internal ethPriceUsd;\\n\\n  event AssetPriceUpdated(address asset, uint256 price, uint256 timestamp);\\n  event EthPriceUpdated(uint256 price, uint256 timestamp);\\n\\n  function getAssetPrice(address asset) external view override returns (uint256) {\\n    return prices[asset];\\n  }\\n\\n  function setAssetPrice(address asset, uint256 price) external override {\\n    prices[asset] = price;\\n    emit AssetPriceUpdated(asset, price, block.timestamp);\\n  }\\n\\n  function getEthUsdPrice() external view returns (uint256) {\\n    return ethPriceUsd;\\n  }\\n\\n  function setEthUsdPrice(uint256 price) external {\\n    ethPriceUsd = price;\\n    emit EthPriceUpdated(price, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x66d7b780168ce672614d6ee8e469ee28f90efc1d16bef53dcf7ebbfed9db545c\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9700,"contract":"contracts/mocks/oracle/PriceOracle.sol:PriceOracle","label":"prices","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":9702,"contract":"contracts/mocks/oracle/PriceOracle.sol:PriceOracle","label":"ethPriceUsd","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"},"setAssetPrice(address,uint256)":{"notice":"Set the price of the asset"}},"version":1}}},"contracts/mocks/oracle/SequencerOracle.sol":{"SequencerOracle":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isDown","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setAnswer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Constructor.","params":{"owner":"The owner address of this contract"}},"latestRoundData()":{"returns":{"answer":"The answer for the latest round: 0 if the sequencer is up, 1 if it is down.","answeredInRound":"The round ID of the round in which the answer was computed.","roundId":"The round ID from the aggregator for which the data was retrieved combined with a phase to ensure that round IDs get larger as time moves forward.","startedAt":"The timestamp when the round was started.","updatedAt":"The timestamp of the block in which the answer was updated on L1."}},"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 anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setAnswer(bool,uint256)":{"params":{"isDown":"True if the sequencer is down, false otherwise","timestamp":"The timestamp of last time the sequencer got up"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_9801":{"entryPoint":null,"id":9801,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":109,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":378,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1074:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:124"},"nodeType":"YulFunctionCall","src":"143:12:124"},"nodeType":"YulExpressionStatement","src":"143:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:124"},"nodeType":"YulFunctionCall","src":"112:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:124"},"nodeType":"YulFunctionCall","src":"108:32:124"},"nodeType":"YulIf","src":"105:52:124"},{"nodeType":"YulVariableDeclaration","src":"166:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:124"},"nodeType":"YulFunctionCall","src":"179:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:124"},"nodeType":"YulFunctionCall","src":"260:12:124"},"nodeType":"YulExpressionStatement","src":"260:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:124"},"nodeType":"YulFunctionCall","src":"235:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:124"},"nodeType":"YulFunctionCall","src":"224:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:124"},"nodeType":"YulFunctionCall","src":"214:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:124"},"nodeType":"YulFunctionCall","src":"207:50:124"},"nodeType":"YulIf","src":"204:70:124"},{"nodeType":"YulAssignment","src":"283:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:124","type":""}],"src":"14:290:124"},{"body":{"nodeType":"YulBlock","src":"483:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"493:6:124"},"nodeType":"YulFunctionCall","src":"493:21:124"},"nodeType":"YulExpressionStatement","src":"493:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"534:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"530:3:124"},"nodeType":"YulFunctionCall","src":"530:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"550:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"523:6:124"},"nodeType":"YulFunctionCall","src":"523:30:124"},"nodeType":"YulExpressionStatement","src":"523:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"584:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"569:3:124"},"nodeType":"YulFunctionCall","src":"569:18:124"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"589:34:124","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"562:6:124"},"nodeType":"YulFunctionCall","src":"562:62:124"},"nodeType":"YulExpressionStatement","src":"562:62:124"},{"nodeType":"YulAssignment","src":"633:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:124"},"nodeType":"YulFunctionCall","src":"641:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"633:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"460:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"474:4:124","type":""}],"src":"309:356:124"},{"body":{"nodeType":"YulBlock","src":"844:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"861:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"872:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"854:6:124"},"nodeType":"YulFunctionCall","src":"854:21:124"},"nodeType":"YulExpressionStatement","src":"854:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"906:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:124"},"nodeType":"YulFunctionCall","src":"891:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"911:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"884:6:124"},"nodeType":"YulFunctionCall","src":"884:30:124"},"nodeType":"YulExpressionStatement","src":"884:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"934:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"945:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"930:3:124"},"nodeType":"YulFunctionCall","src":"930:18:124"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"950:34:124","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"923:6:124"},"nodeType":"YulFunctionCall","src":"923:62:124"},"nodeType":"YulExpressionStatement","src":"923:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1005:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1016:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:124"},"nodeType":"YulFunctionCall","src":"1001:18:124"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1021:8:124","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"994:6:124"},"nodeType":"YulFunctionCall","src":"994:36:124"},"nodeType":"YulExpressionStatement","src":"994:36:124"},{"nodeType":"YulAssignment","src":"1039:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1062:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1047:3:124"},"nodeType":"YulFunctionCall","src":"1047:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1039:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"821:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"835:4:124","type":""}],"src":"670:402:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161073138038061073183398101604081905261002f9161017a565b600080546001600160a01b03191633908117825560405190918291600080516020610711833981519152908290a3506100678161006d565b506101aa565b6000546001600160a01b031633146100cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166101315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100c3565b600080546040516001600160a01b038085169392169160008051602061071183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561018c57600080fd5b81516001600160a01b03811681146101a357600080fd5b9392505050565b610558806101b96000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80638da5cb5b116100505780638da5cb5b14610089578063f2fde38b146100b6578063feaf968c146100c957600080fd5b8063715018a61461006c578063826a98ce14610076575b600080fd5b610074610108565b005b6100746100843660046104b4565b6101fd565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100746100c43660046104e5565b6102cc565b6100d161047d565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100ad565b60005473ffffffffffffffffffffffffffffffffffffffff16331461018e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461027e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6000805492151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90931692909217909155600155565b60005473ffffffffffffffffffffffffffffffffffffffff16331461034d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b73ffffffffffffffffffffffffffffffffffffffff81166103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610185565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080600080600080600060149054906101000a900460ff161561049f575060015b60015460009791965087955093508492509050565b600080604083850312156104c757600080fd5b823580151581146104d757600080fd5b946020939093013593505050565b6000602082840312156104f757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461051b57600080fd5b939250505056fea2646970667358221220a67d29868b26fc2b42ff8750be5fb82343abb77ac656b0f913af466465738a9864736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x731 CODESIZE SUB DUP1 PUSH2 0x731 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x17A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x711 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x67 DUP2 PUSH2 0x6D JUMP JUMPDEST POP PUSH2 0x1AA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x131 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x711 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x558 DUP1 PUSH2 0x1B9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0xFEAF968C EQ PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x826A98CE EQ PUSH2 0x76 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74 PUSH2 0x108 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x74 PUSH2 0x84 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B4 JUMP JUMPDEST PUSH2 0x1FD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x74 PUSH2 0xC4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E5 JUMP JUMPDEST PUSH2 0x2CC JUMP JUMPDEST PUSH2 0xD1 PUSH2 0x47D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0xAD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x18E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x27E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x185 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP3 ISZERO ISZERO PUSH21 0x10000000000000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x34D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x185 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x3F0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x185 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x49F JUMPI POP PUSH1 0x1 JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SWAP8 SWAP2 SWAP7 POP DUP8 SWAP6 POP SWAP4 POP DUP5 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA6 PUSH30 0x29868B26FC2B42FF8750BE5FB82343ABB77AC656B0F913AF466465738A98 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"214:970:69:-:0;;;422:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;455:24:69;473:5;455:17;:24::i;:::-;422:62;214:970;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;511:2:124;1196:67:11;;;493:21:124;;;530:18;;;523:30;589:34;569:18;;;562:62;641:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;872:2:124;1951:73:11::1;::::0;::::1;854:21:124::0;911:2;891:18;;;884:30;950:34;930:18;;;923:62;-1:-1:-1;;;1001:18:124;;;994:36;1047:19;;1951:73:11::1;670:402:124::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:290:124:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:124;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:124:o;670:402::-;214:970:69;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@latestRoundData_9853":{"entryPoint":1149,"id":9853,"parameterSlots":0,"returnSlots":5},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":264,"id":1544,"parameterSlots":0,"returnSlots":0},"@setAnswer_9820":{"entryPoint":509,"id":9820,"parameterSlots":2,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":716,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":1253,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_boolt_uint256":{"entryPoint":1204,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__to_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2191:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"98:257:124","statements":[{"body":{"nodeType":"YulBlock","src":"144:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"153:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"156:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"146:6:124"},"nodeType":"YulFunctionCall","src":"146:12:124"},"nodeType":"YulExpressionStatement","src":"146:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"119:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"128:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"115:3:124"},"nodeType":"YulFunctionCall","src":"115:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"140:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:32:124"},"nodeType":"YulIf","src":"108:52:124"},{"nodeType":"YulVariableDeclaration","src":"169:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"195:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"182:12:124"},"nodeType":"YulFunctionCall","src":"182:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"173:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:124"},"nodeType":"YulFunctionCall","src":"260:12:124"},"nodeType":"YulExpressionStatement","src":"260:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"227:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"241:6:124"},"nodeType":"YulFunctionCall","src":"241:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"234:6:124"},"nodeType":"YulFunctionCall","src":"234:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"224:2:124"},"nodeType":"YulFunctionCall","src":"224:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"217:6:124"},"nodeType":"YulFunctionCall","src":"217:40:124"},"nodeType":"YulIf","src":"214:60:124"},{"nodeType":"YulAssignment","src":"283:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:124"}]},{"nodeType":"YulAssignment","src":"307:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"334:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"345:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"330:3:124"},"nodeType":"YulFunctionCall","src":"330:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"317:12:124"},"nodeType":"YulFunctionCall","src":"317:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"307:6:124"}]}]},"name":"abi_decode_tuple_t_boolt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"56:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"67:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"79:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"87:6:124","type":""}],"src":"14:341:124"},{"body":{"nodeType":"YulBlock","src":"461:125:124","statements":[{"nodeType":"YulAssignment","src":"471:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"483:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"494:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"479:3:124"},"nodeType":"YulFunctionCall","src":"479:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"471:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"513:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"528:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"536:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"524:3:124"},"nodeType":"YulFunctionCall","src":"524:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"506:6:124"},"nodeType":"YulFunctionCall","src":"506:74:124"},"nodeType":"YulExpressionStatement","src":"506:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"430:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"441:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"452:4:124","type":""}],"src":"360:226:124"},{"body":{"nodeType":"YulBlock","src":"661:239:124","statements":[{"body":{"nodeType":"YulBlock","src":"707:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"716:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"719:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"709:6:124"},"nodeType":"YulFunctionCall","src":"709:12:124"},"nodeType":"YulExpressionStatement","src":"709:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"682:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"691:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"678:3:124"},"nodeType":"YulFunctionCall","src":"678:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"703:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"674:3:124"},"nodeType":"YulFunctionCall","src":"674:32:124"},"nodeType":"YulIf","src":"671:52:124"},{"nodeType":"YulVariableDeclaration","src":"732:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"758:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"745:12:124"},"nodeType":"YulFunctionCall","src":"745:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"736:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"854:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"863:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"866:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"856:6:124"},"nodeType":"YulFunctionCall","src":"856:12:124"},"nodeType":"YulExpressionStatement","src":"856:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"790:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"801:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"808:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"797:3:124"},"nodeType":"YulFunctionCall","src":"797:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"787:2:124"},"nodeType":"YulFunctionCall","src":"787:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"780:6:124"},"nodeType":"YulFunctionCall","src":"780:73:124"},"nodeType":"YulIf","src":"777:93:124"},{"nodeType":"YulAssignment","src":"879:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"889:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"879:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"627:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"638:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"650:6:124","type":""}],"src":"591:309:124"},{"body":{"nodeType":"YulBlock","src":"1112:309:124","statements":[{"nodeType":"YulAssignment","src":"1122:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1134:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1145:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1130:3:124"},"nodeType":"YulFunctionCall","src":"1130:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1122:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"1158:32:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1168:22:124","type":"","value":"0xffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1162:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1206:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1221:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1229:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1217:3:124"},"nodeType":"YulFunctionCall","src":"1217:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1199:6:124"},"nodeType":"YulFunctionCall","src":"1199:34:124"},"nodeType":"YulExpressionStatement","src":"1199:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1253:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1264:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1249:3:124"},"nodeType":"YulFunctionCall","src":"1249:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1269:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1242:6:124"},"nodeType":"YulFunctionCall","src":"1242:34:124"},"nodeType":"YulExpressionStatement","src":"1242:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1296:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1307:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1292:3:124"},"nodeType":"YulFunctionCall","src":"1292:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"1312:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1285:6:124"},"nodeType":"YulFunctionCall","src":"1285:34:124"},"nodeType":"YulExpressionStatement","src":"1285:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1339:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1350:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1335:3:124"},"nodeType":"YulFunctionCall","src":"1335:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"1355:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1328:6:124"},"nodeType":"YulFunctionCall","src":"1328:34:124"},"nodeType":"YulExpressionStatement","src":"1328:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1382:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1393:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1378:3:124"},"nodeType":"YulFunctionCall","src":"1378:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"1403:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1411:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1399:3:124"},"nodeType":"YulFunctionCall","src":"1399:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1371:6:124"},"nodeType":"YulFunctionCall","src":"1371:44:124"},"nodeType":"YulExpressionStatement","src":"1371:44:124"}]},"name":"abi_encode_tuple_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__to_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1049:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1060:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1068:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1076:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1084:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1092:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1103:4:124","type":""}],"src":"905:516:124"},{"body":{"nodeType":"YulBlock","src":"1600:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1617:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1628:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1610:6:124"},"nodeType":"YulFunctionCall","src":"1610:21:124"},"nodeType":"YulExpressionStatement","src":"1610:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1651:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1662:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1647:3:124"},"nodeType":"YulFunctionCall","src":"1647:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"1667:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1640:6:124"},"nodeType":"YulFunctionCall","src":"1640:30:124"},"nodeType":"YulExpressionStatement","src":"1640:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1690:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1701:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1686:3:124"},"nodeType":"YulFunctionCall","src":"1686:18:124"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1706:34:124","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1679:6:124"},"nodeType":"YulFunctionCall","src":"1679:62:124"},"nodeType":"YulExpressionStatement","src":"1679:62:124"},{"nodeType":"YulAssignment","src":"1750:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1762:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1773:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1758:3:124"},"nodeType":"YulFunctionCall","src":"1758:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1750:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1577:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1591:4:124","type":""}],"src":"1426:356:124"},{"body":{"nodeType":"YulBlock","src":"1961:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1978:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1989:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1971:6:124"},"nodeType":"YulFunctionCall","src":"1971:21:124"},"nodeType":"YulExpressionStatement","src":"1971:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2012:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2023:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2008:3:124"},"nodeType":"YulFunctionCall","src":"2008:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2028:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2001:6:124"},"nodeType":"YulFunctionCall","src":"2001:30:124"},"nodeType":"YulExpressionStatement","src":"2001:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2062:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2047:3:124"},"nodeType":"YulFunctionCall","src":"2047:18:124"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2067:34:124","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2040:6:124"},"nodeType":"YulFunctionCall","src":"2040:62:124"},"nodeType":"YulExpressionStatement","src":"2040:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2122:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2133:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2118:3:124"},"nodeType":"YulFunctionCall","src":"2118:18:124"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2138:8:124","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2111:6:124"},"nodeType":"YulFunctionCall","src":"2111:36:124"},"nodeType":"YulExpressionStatement","src":"2111:36:124"},{"nodeType":"YulAssignment","src":"2156:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2179:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2164:3:124"},"nodeType":"YulFunctionCall","src":"2164:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2156:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1938:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1952:4:124","type":""}],"src":"1787:402:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_boolt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__to_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100675760003560e01c80638da5cb5b116100505780638da5cb5b14610089578063f2fde38b146100b6578063feaf968c146100c957600080fd5b8063715018a61461006c578063826a98ce14610076575b600080fd5b610074610108565b005b6100746100843660046104b4565b6101fd565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100746100c43660046104e5565b6102cc565b6100d161047d565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100ad565b60005473ffffffffffffffffffffffffffffffffffffffff16331461018e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461027e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6000805492151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90931692909217909155600155565b60005473ffffffffffffffffffffffffffffffffffffffff16331461034d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b73ffffffffffffffffffffffffffffffffffffffff81166103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610185565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080600080600080600060149054906101000a900460ff161561049f575060015b60015460009791965087955093508492509050565b600080604083850312156104c757600080fd5b823580151581146104d757600080fd5b946020939093013593505050565b6000602082840312156104f757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461051b57600080fd5b939250505056fea2646970667358221220a67d29868b26fc2b42ff8750be5fb82343abb77ac656b0f913af466465738a9864736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0xFEAF968C EQ PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x826A98CE EQ PUSH2 0x76 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74 PUSH2 0x108 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x74 PUSH2 0x84 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B4 JUMP JUMPDEST PUSH2 0x1FD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x74 PUSH2 0xC4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E5 JUMP JUMPDEST PUSH2 0x2CC JUMP JUMPDEST PUSH2 0xD1 PUSH2 0x47D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0xAD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x18E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x27E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x185 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP3 ISZERO ISZERO PUSH21 0x10000000000000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x34D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x185 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x3F0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x185 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x49F JUMPI POP PUSH1 0x1 JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SWAP8 SWAP2 SWAP7 POP DUP8 SWAP6 POP SWAP4 POP DUP5 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA6 PUSH30 0x29868B26FC2B42FF8750BE5FB82343ABB77AC656B0F913AF466465738A98 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"214:970:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1601:135:11;;;:::i;:::-;;693:130:69;;;;;;:::i;:::-;;:::i;1018:71:11:-;1056:7;1078:6;1018:71;;1078:6;;;;506:74:124;;494:2;479:18;1018:71:11;;;;;;;;1875:226;;;;;;:::i;:::-;;:::i;862:320:69:-;;;:::i;:::-;;;;1168:22:124;1217:15;;;1199:34;;1264:2;1249:18;;1242:34;;;;1292:18;;1285:34;;;;1350:2;1335:18;;1328:34;1399:15;;;1393:3;1378:19;;1371:44;1145:3;1130:19;862:320:69;905:516:124;1601:135:11;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1628:2:124;1196:67:11;;;1610:21:124;;;1647:18;;;1640:30;1706:34;1686:18;;;1679:62;1758:18;;1196:67:11;;;;;;;;;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;693:130:69:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1628:2:124;1196:67:11;;;1610:21:124;;;1647:18;;;1640:30;1706:34;1686:18;;;1679:62;1758:18;;1196:67:11;1426:356:124;1196:67:11;769:7:69::1;:16:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;791:27:69;693:130::o;1875:226:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1628:2:124;1196:67:11;;;1610:21:124;;;1647:18;;;1640:30;1706:34;1686:18;;;1679:62;1758:18;;1196:67:11;1426:356:124;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;1989:2:124;1951:73:11::1;::::0;::::1;1971:21:124::0;2028:2;2008:18;;;2001:30;2067:34;2047:18;;;2040:62;2138:8;2118:18;;;2111:36;2164:19;;1951:73:11::1;1787:402:124::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;862:320:69:-;944:14;966:13;987:17;1012;1037:22;1074:13;1097:7;;;;;;;;;;;1093:38;;;-1:-1:-1;1123:1:69;1093:38;1158:15;;1144:1;;1147:6;;-1:-1:-1;1144:1:69;;-1:-1:-1;1158:15:69;-1:-1:-1;1144:1:69;;-1:-1:-1;862:320:69;-1:-1:-1;862:320:69:o;14:341:124:-;79:6;87;140:2;128:9;119:7;115:23;111:32;108:52;;;156:1;153;146:12;108:52;195:9;182:23;248:5;241:13;234:21;227:5;224:32;214:60;;270:1;267;260:12;214:60;293:5;345:2;330:18;;;;317:32;;-1:-1:-1;;;14:341:124:o;591:309::-;650:6;703:2;691:9;682:7;678:23;674:32;671:52;;;719:1;716;709:12;671:52;758:9;745:23;808:42;801:5;797:54;790:5;787:65;777:93;;866:1;863;856:12;777:93;889:5;591:309;-1:-1:-1;;;591:309:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"273600","executionCost":"infinite","totalCost":"infinite"},"external":{"latestRoundData()":"4713","owner()":"2278","renounceOwnership()":"30127","setAnswer(bool,uint256)":"48783","transferOwnership(address)":"30312"}},"methodIdentifiers":{"latestRoundData()":"feaf968c","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setAnswer(bool,uint256)":"826a98ce","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"isDown\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"setAnswer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"owner\":\"The owner address of this contract\"}},\"latestRoundData()\":{\"returns\":{\"answer\":\"The answer for the latest round: 0 if the sequencer is up, 1 if it is down.\",\"answeredInRound\":\"The round ID of the round in which the answer was computed.\",\"roundId\":\"The round ID from the aggregator for which the data was retrieved combined with a phase to ensure that round IDs get larger as time moves forward.\",\"startedAt\":\"The timestamp when the round was started.\",\"updatedAt\":\"The timestamp of the block in which the answer was updated on L1.\"}},\"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 anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setAnswer(bool,uint256)\":{\"params\":{\"isDown\":\"True if the sequencer is down, false otherwise\",\"timestamp\":\"The timestamp of last time the sequencer got up\"}},\"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\":{\"latestRoundData()\":{\"notice\":\"Returns the health status of the sequencer.\"},\"setAnswer(bool,uint256)\":{\"notice\":\"Updates the health status of the sequencer.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/oracle/SequencerOracle.sol\":\"SequencerOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './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 * By default, the owner account will be the one that deploys the contract. This\\n * can 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 */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = 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    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"contracts/interfaces/ISequencerOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ISequencerOracle\\n * @author Aave\\n * @notice Defines the basic interface for a Sequencer oracle.\\n */\\ninterface ISequencerOracle {\\n  /**\\n   * @notice Returns the health status of the sequencer.\\n   * @return roundId The round ID from the aggregator for which the data was retrieved combined with a phase to ensure\\n   * that round IDs get larger as time moves forward.\\n   * @return answer The answer for the latest round: 0 if the sequencer is up, 1 if it is down.\\n   * @return startedAt The timestamp when the round was started.\\n   * @return updatedAt The timestamp of the block in which the answer was updated on L1.\\n   * @return answeredInRound The round ID of the round in which the answer was computed.\\n   */\\n  function latestRoundData()\\n    external\\n    view\\n    returns (\\n      uint80 roundId,\\n      int256 answer,\\n      uint256 startedAt,\\n      uint256 updatedAt,\\n      uint80 answeredInRound\\n    );\\n}\\n\",\"keccak256\":\"0x2b0cac1dc7d684eab009ada5e1f134f7c61c90d8802cf4ca948a35d6db6f9aba\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/oracle/SequencerOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {ISequencerOracle} from '../../interfaces/ISequencerOracle.sol';\\n\\ncontract SequencerOracle is ISequencerOracle, Ownable {\\n  bool internal _isDown;\\n  uint256 internal _timestampGotUp;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param owner The owner address of this contract\\n   */\\n  constructor(address owner) {\\n    transferOwnership(owner);\\n  }\\n\\n  /**\\n   * @notice Updates the health status of the sequencer.\\n   * @param isDown True if the sequencer is down, false otherwise\\n   * @param timestamp The timestamp of last time the sequencer got up\\n   */\\n  function setAnswer(bool isDown, uint256 timestamp) external onlyOwner {\\n    _isDown = isDown;\\n    _timestampGotUp = timestamp;\\n  }\\n\\n  /// @inheritdoc ISequencerOracle\\n  function latestRoundData()\\n    external\\n    view\\n    override\\n    returns (\\n      uint80 roundId,\\n      int256 answer,\\n      uint256 startedAt,\\n      uint256 updatedAt,\\n      uint80 answeredInRound\\n    )\\n  {\\n    int256 isDown;\\n    if (_isDown) {\\n      isDown = 1;\\n    }\\n    return (0, isDown, 0, _timestampGotUp, 0);\\n  }\\n}\\n\",\"keccak256\":\"0x70d706d1ad0789f2fcd1a763db022f3e005a9f5090d0fb75e398770892870bea\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/mocks/oracle/SequencerOracle.sol:SequencerOracle","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":9788,"contract":"contracts/mocks/oracle/SequencerOracle.sol:SequencerOracle","label":"_isDown","offset":20,"slot":"0","type":"t_bool"},{"astId":9790,"contract":"contracts/mocks/oracle/SequencerOracle.sol:SequencerOracle","label":"_timestampGotUp","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"latestRoundData()":{"notice":"Returns the health status of the sequencer."},"setAnswer(bool,uint256)":{"notice":"Updates the health status of the sequencer."}},"version":1}}},"contracts/mocks/tests/FlashloanAttacker.sol":{"FlashloanAttacker":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAsset","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_3590":{"entryPoint":null,"id":3590,"parameterSlots":1,"returnSlots":0},"@_9907":{"entryPoint":null,"id":9907,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":358,"id":null,"parameterSlots":2,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":334,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:762:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:124"},"nodeType":"YulFunctionCall","src":"149:12:124"},"nodeType":"YulExpressionStatement","src":"149:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:124"},"nodeType":"YulFunctionCall","src":"128:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:124"},"nodeType":"YulFunctionCall","src":"124:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:124"},"nodeType":"YulFunctionCall","src":"113:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:124"},"nodeType":"YulFunctionCall","src":"103:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:50:124"},"nodeType":"YulIf","src":"93:70:124"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:124","type":""}],"src":"14:155:124"},{"body":{"nodeType":"YulBlock","src":"286:194:124","statements":[{"body":{"nodeType":"YulBlock","src":"332:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"341:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"344:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"334:6:124"},"nodeType":"YulFunctionCall","src":"334:12:124"},"nodeType":"YulExpressionStatement","src":"334:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"307:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"303:3:124"},"nodeType":"YulFunctionCall","src":"303:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"299:3:124"},"nodeType":"YulFunctionCall","src":"299:32:124"},"nodeType":"YulIf","src":"296:52:124"},{"nodeType":"YulVariableDeclaration","src":"357:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"376:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"370:5:124"},"nodeType":"YulFunctionCall","src":"370:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"361:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"444:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"395:48:124"},"nodeType":"YulFunctionCall","src":"395:55:124"},"nodeType":"YulExpressionStatement","src":"395:55:124"},{"nodeType":"YulAssignment","src":"459:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"469:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"459:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:124","type":""}],"src":"174:306:124"},{"body":{"nodeType":"YulBlock","src":"566:194:124","statements":[{"body":{"nodeType":"YulBlock","src":"612:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"621:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"624:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"614:6:124"},"nodeType":"YulFunctionCall","src":"614:12:124"},"nodeType":"YulExpressionStatement","src":"614:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"587:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"596:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"583:3:124"},"nodeType":"YulFunctionCall","src":"583:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"579:3:124"},"nodeType":"YulFunctionCall","src":"579:32:124"},"nodeType":"YulIf","src":"576:52:124"},{"nodeType":"YulVariableDeclaration","src":"637:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"656:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"650:5:124"},"nodeType":"YulFunctionCall","src":"650:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"641:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"724:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"675:48:124"},"nodeType":"YulFunctionCall","src":"675:55:124"},"nodeType":"YulExpressionStatement","src":"675:55:124"},{"nodeType":"YulAssignment","src":"739:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"749:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"739:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"543:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"555:6:124","type":""}],"src":"485:275:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c060405234801561001057600080fd5b50604051610c2e380380610c2e83398101604081905261002f91610166565b80806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ac9190610166565b6001600160a01b031660a0816001600160a01b03168152505050806001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101289190610166565b600180546001600160a01b0319166001600160a01b03929092169190911790555061018a565b6001600160a01b038116811461016357600080fd5b50565b60006020828403121561017857600080fd5b81516101838161014e565b9392505050565b60805160a051610a7a6101b46000396000818160df01526103e40152600060560152610a7a6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630542975c146100515780631416d762146100a25780631b11d0ff146100b75780637535d246146100da575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100b56100b0366004610686565b610101565b005b6100ca6100c536600461075a565b6102f6565b6040519015158152602001610099565b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260248101829052829073ffffffffffffffffffffffffffffffffffffffff8216906340c10f19906044016020604051808303816000875af1158015610176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019a9190610846565b506001546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529082169063095ea7b3906044016020604051808303816000875af1158015610233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102579190610846565b506001546040517f617ba03700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052306044830152600060648301529091169063617ba03790608401600060405180830381600087803b1580156102d957600080fd5b505af11580156102ed573d6000803e3d6000fd5b50505050505050565b60008581610304878761046f565b905061030f88610485565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8316906340c10f19906044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a69190610846565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905289169063095ea7b3906044016020604051808303816000875af115801561043c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104609190610846565b50600198975050505050505050565b8082018281101561047f57600080fd5b92915050565b6001546040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009216906335ea6a75906024016101e060405180830381865afa1580156104f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051b9190610908565b6101008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291925083916000918316906370a0823190602401602060405180830381865afa158015610595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b99190610a2b565b6001546040517fa415bcad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201849052600260448301526000606483015230608483015292935091169063a415bcad9060a401600060405180830381600087803b15801561064357600080fd5b505af1158015610657573d6000803e3d6000fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461068357600080fd5b50565b6000806040838503121561069957600080fd5b82356106a481610661565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715610705576107056106b2565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610752576107526106b2565b604052919050565b600080600080600060a0868803121561077257600080fd5b853561077d81610661565b9450602086810135945060408701359350606087013561079c81610661565b9250608087013567ffffffffffffffff808211156107b957600080fd5b818901915089601f8301126107cd57600080fd5b8135818111156107df576107df6106b2565b61080f847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161070b565b91508082528a8482850101111561082557600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60006020828403121561085857600080fd5b8151801515811461086857600080fd5b9392505050565b60006020828403121561088157600080fd5b6040516020810181811067ffffffffffffffff821117156108a4576108a46106b2565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff811681146108d157600080fd5b919050565b805164ffffffffff811681146108d157600080fd5b805161ffff811681146108d157600080fd5b80516108d181610661565b60006101e0828403121561091b57600080fd5b6109236106e1565b61092d848461086f565b815261093b602084016108b1565b602082015261094c604084016108b1565b604082015261095d606084016108b1565b606082015261096e608084016108b1565b608082015261097f60a084016108b1565b60a082015261099060c084016108d6565b60c08201526109a160e084016108eb565b60e08201526101006109b48185016108fd565b908201526101206109c68482016108fd565b908201526101406109d88482016108fd565b908201526101606109ea8482016108fd565b908201526101806109fc8482016108b1565b908201526101a0610a0e8482016108b1565b908201526101c0610a208482016108b1565b908201529392505050565b600060208284031215610a3d57600080fd5b505191905056fea26469706673582212200da36ca220a12a1d28690d795b69a2916e34309c394df3bd90d6cd69d516d6be64736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xC2E CODESIZE SUB DUP1 PUSH2 0xC2E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x166 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x166 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x104 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x128 SWAP2 SWAP1 PUSH2 0x166 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0x18A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x183 DUP2 PUSH2 0x14E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0xA7A PUSH2 0x1B4 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0xDF ADD MSTORE PUSH2 0x3E4 ADD MSTORE PUSH1 0x0 PUSH1 0x56 ADD MSTORE PUSH2 0xA7A PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x542975C EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x1416D762 EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0xDA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x78 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB5 PUSH2 0xB0 CALLDATASIZE PUSH1 0x4 PUSH2 0x686 JUMP JUMPDEST PUSH2 0x101 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x75A JUMP JUMPDEST PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x99 JUMP JUMPDEST PUSH2 0x78 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x176 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A SWAP2 SWAP1 PUSH2 0x846 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x233 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x846 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x617BA03700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x617BA037 SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 PUSH2 0x304 DUP8 DUP8 PUSH2 0x46F JUMP JUMPDEST SWAP1 POP PUSH2 0x30F DUP9 PUSH2 0x485 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x382 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A6 SWAP2 SWAP1 PUSH2 0x846 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP10 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x43C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x460 SWAP2 SWAP1 PUSH2 0x846 JUMP JUMPDEST POP PUSH1 0x1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x51B SWAP2 SWAP1 PUSH2 0x908 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP3 POP DUP4 SWAP2 PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x595 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5B9 SWAP2 SWAP1 PUSH2 0xA2B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xA415BCAD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x2 PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE ADDRESS PUSH1 0x84 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0xA415BCAD SWAP1 PUSH1 0xA4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x657 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x699 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x6A4 DUP2 PUSH2 0x661 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x705 JUMPI PUSH2 0x705 PUSH2 0x6B2 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x752 JUMPI PUSH2 0x752 PUSH2 0x6B2 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x772 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x77D DUP2 PUSH2 0x661 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x79C DUP2 PUSH2 0x661 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP10 ADD SWAP2 POP DUP10 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x7DF PUSH2 0x6B2 JUMP JUMPDEST PUSH2 0x80F DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x70B JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP11 DUP5 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 DUP5 ADD DUP6 DUP5 ADD CALLDATACOPY PUSH1 0x0 DUP5 DUP3 DUP5 ADD ADD MSTORE POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x858 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x868 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x881 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x8A4 JUMPI PUSH2 0x8A4 PUSH2 0x6B2 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x8D1 DUP2 PUSH2 0x661 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x91B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x923 PUSH2 0x6E1 JUMP JUMPDEST PUSH2 0x92D DUP5 DUP5 PUSH2 0x86F JUMP JUMPDEST DUP2 MSTORE PUSH2 0x93B PUSH1 0x20 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x94C PUSH1 0x40 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x95D PUSH1 0x60 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x96E PUSH1 0x80 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x97F PUSH1 0xA0 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x990 PUSH1 0xC0 DUP5 ADD PUSH2 0x8D6 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x9A1 PUSH1 0xE0 DUP5 ADD PUSH2 0x8EB JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x9B4 DUP2 DUP6 ADD PUSH2 0x8FD JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x9C6 DUP5 DUP3 ADD PUSH2 0x8FD JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x9D8 DUP5 DUP3 ADD PUSH2 0x8FD JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x9EA DUP5 DUP3 ADD PUSH2 0x8FD JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x9FC DUP5 DUP3 ADD PUSH2 0x8B1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0xA0E DUP5 DUP3 ADD PUSH2 0x8B1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0xA20 DUP5 DUP3 ADD PUSH2 0x8B1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD LOG3 PUSH13 0xA220A12A1D28690D795B69A291 PUSH15 0x34309C394DF3BD90D6CD69D516D6BE PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"750:1333:70:-:0;;;947:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1020:8;673::27;-1:-1:-1;;;;;652:29:27;;;-1:-1:-1;;;;;652:29:27;;;;;700:8;-1:-1:-1;;;;;700:16:27;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;687:32:27;;;-1:-1:-1;;;;;687:32:27;;;;;601:123;1050:8:70::1;-1:-1:-1::0;;;;;1050:16:70::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1036:5;:33:::0;;-1:-1:-1;;;;;;1036:33:70::1;-1:-1:-1::0;;;;;1036:33:70;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;750:1333:70;;14:155:124;-1:-1:-1;;;;;113:31:124;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:306::-;275:6;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;376:9;370:16;395:55;444:5;395:55;:::i;:::-;469:5;174:306;-1:-1:-1;;;174:306:124:o;485:275::-;750:1333:70;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_3567":{"entryPoint":null,"id":3567,"parameterSlots":0,"returnSlots":0},"@POOL_3571":{"entryPoint":null,"id":3571,"parameterSlots":0,"returnSlots":0},"@_innerBorrow_10002":{"entryPoint":1157,"id":10002,"parameterSlots":1,"returnSlots":0},"@add_2216":{"entryPoint":1135,"id":2216,"parameterSlots":2,"returnSlots":1},"@executeOperation_10060":{"entryPoint":758,"id":10060,"parameterSlots":5,"returnSlots":1},"@supplyAsset_9958":{"entryPoint":257,"id":9958,"parameterSlots":2,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":2301,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":2159,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":1670,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_memory_ptr":{"entryPoint":1882,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":2118,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory":{"entryPoint":2312,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":2603,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":2225,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":2283,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":2262,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_rational_2_by_1_t_rational_0_by_1_t_address__to_t_address_t_uint256_t_uint256_t_uint16_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1803,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_977":{"entryPoint":1761,"id":null,"parameterSlots":0,"returnSlots":1},"panic_error_0x41":{"entryPoint":1714,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":1633,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:8057:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"321:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:124"},"nodeType":"YulFunctionCall","src":"410:12:124"},"nodeType":"YulExpressionStatement","src":"410:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"344:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"355:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"362:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"351:3:124"},"nodeType":"YulFunctionCall","src":"351:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"341:2:124"},"nodeType":"YulFunctionCall","src":"341:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"334:6:124"},"nodeType":"YulFunctionCall","src":"334:73:124"},"nodeType":"YulIf","src":"331:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"310:5:124","type":""}],"src":"276:154:124"},{"body":{"nodeType":"YulBlock","src":"522:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"568:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"577:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"580:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"570:6:124"},"nodeType":"YulFunctionCall","src":"570:12:124"},"nodeType":"YulExpressionStatement","src":"570:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"543:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"552:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"539:3:124"},"nodeType":"YulFunctionCall","src":"539:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"564:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"535:3:124"},"nodeType":"YulFunctionCall","src":"535:32:124"},"nodeType":"YulIf","src":"532:52:124"},{"nodeType":"YulVariableDeclaration","src":"593:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"619:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"606:12:124"},"nodeType":"YulFunctionCall","src":"606:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"597:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"663:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"638:24:124"},"nodeType":"YulFunctionCall","src":"638:31:124"},"nodeType":"YulExpressionStatement","src":"638:31:124"},{"nodeType":"YulAssignment","src":"678:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"688:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"678:6:124"}]},{"nodeType":"YulAssignment","src":"702:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"729:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"740:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"725:3:124"},"nodeType":"YulFunctionCall","src":"725:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"712:12:124"},"nodeType":"YulFunctionCall","src":"712:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"480:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"491:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"503:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"511:6:124","type":""}],"src":"435:315:124"},{"body":{"nodeType":"YulBlock","src":"787:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"804:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"807:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"797:6:124"},"nodeType":"YulFunctionCall","src":"797:88:124"},"nodeType":"YulExpressionStatement","src":"797:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"901:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"904:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"894:6:124"},"nodeType":"YulFunctionCall","src":"894:15:124"},"nodeType":"YulExpressionStatement","src":"894:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"925:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"928:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"918:6:124"},"nodeType":"YulFunctionCall","src":"918:15:124"},"nodeType":"YulExpressionStatement","src":"918:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"755:184:124"},{"body":{"nodeType":"YulBlock","src":"989:206:124","statements":[{"nodeType":"YulAssignment","src":"999:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1015:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1009:5:124"},"nodeType":"YulFunctionCall","src":"1009:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"999:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1027:34:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1049:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1057:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1045:3:124"},"nodeType":"YulFunctionCall","src":"1045:16:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1031:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1136:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1138:16:124"},"nodeType":"YulFunctionCall","src":"1138:18:124"},"nodeType":"YulExpressionStatement","src":"1138:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1079:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1091:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1076:2:124"},"nodeType":"YulFunctionCall","src":"1076:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1115:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1127:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1112:2:124"},"nodeType":"YulFunctionCall","src":"1112:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1073:2:124"},"nodeType":"YulFunctionCall","src":"1073:62:124"},"nodeType":"YulIf","src":"1070:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1174:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1178:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1167:6:124"},"nodeType":"YulFunctionCall","src":"1167:22:124"},"nodeType":"YulExpressionStatement","src":"1167:22:124"}]},"name":"allocate_memory_977","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"978:6:124","type":""}],"src":"944:251:124"},{"body":{"nodeType":"YulBlock","src":"1245:289:124","statements":[{"nodeType":"YulAssignment","src":"1255:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1271:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1265:5:124"},"nodeType":"YulFunctionCall","src":"1265:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1255:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1283:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1305:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1321:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"1327:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1317:3:124"},"nodeType":"YulFunctionCall","src":"1317:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"1332:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1313:3:124"},"nodeType":"YulFunctionCall","src":"1313:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1301:3:124"},"nodeType":"YulFunctionCall","src":"1301:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1287:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1475:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1477:16:124"},"nodeType":"YulFunctionCall","src":"1477:18:124"},"nodeType":"YulExpressionStatement","src":"1477:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1418:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1430:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1415:2:124"},"nodeType":"YulFunctionCall","src":"1415:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1454:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1466:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1451:2:124"},"nodeType":"YulFunctionCall","src":"1451:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1412:2:124"},"nodeType":"YulFunctionCall","src":"1412:62:124"},"nodeType":"YulIf","src":"1409:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1513:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1517:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1506:6:124"},"nodeType":"YulFunctionCall","src":"1506:22:124"},"nodeType":"YulExpressionStatement","src":"1506:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1225:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1234:6:124","type":""}],"src":"1200:334:124"},{"body":{"nodeType":"YulBlock","src":"1686:1089:124","statements":[{"body":{"nodeType":"YulBlock","src":"1733:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1742:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1745:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1735:6:124"},"nodeType":"YulFunctionCall","src":"1735:12:124"},"nodeType":"YulExpressionStatement","src":"1735:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1707:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1716:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1703:3:124"},"nodeType":"YulFunctionCall","src":"1703:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1728:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1699:3:124"},"nodeType":"YulFunctionCall","src":"1699:33:124"},"nodeType":"YulIf","src":"1696:53:124"},{"nodeType":"YulVariableDeclaration","src":"1758:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1784:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1771:12:124"},"nodeType":"YulFunctionCall","src":"1771:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1762:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1828:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1803:24:124"},"nodeType":"YulFunctionCall","src":"1803:31:124"},"nodeType":"YulExpressionStatement","src":"1803:31:124"},{"nodeType":"YulAssignment","src":"1843:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1853:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1843:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1867:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1877:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1871:2:124","type":""}]},{"nodeType":"YulAssignment","src":"1888:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1915:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1926:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1911:3:124"},"nodeType":"YulFunctionCall","src":"1911:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1898:12:124"},"nodeType":"YulFunctionCall","src":"1898:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1888:6:124"}]},{"nodeType":"YulAssignment","src":"1939:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1966:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1977:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1962:3:124"},"nodeType":"YulFunctionCall","src":"1962:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1949:12:124"},"nodeType":"YulFunctionCall","src":"1949:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1939:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1990:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2022:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2033:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2018:3:124"},"nodeType":"YulFunctionCall","src":"2018:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2005:12:124"},"nodeType":"YulFunctionCall","src":"2005:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1994:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2071:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2046:24:124"},"nodeType":"YulFunctionCall","src":"2046:33:124"},"nodeType":"YulExpressionStatement","src":"2046:33:124"},{"nodeType":"YulAssignment","src":"2088:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2098:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2088:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2114:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2145:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2156:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2141:3:124"},"nodeType":"YulFunctionCall","src":"2141:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2128:12:124"},"nodeType":"YulFunctionCall","src":"2128:33:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2118:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2170:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2180:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2174:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2225:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2234:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2237:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2227:6:124"},"nodeType":"YulFunctionCall","src":"2227:12:124"},"nodeType":"YulExpressionStatement","src":"2227:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2213:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2221:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2210:2:124"},"nodeType":"YulFunctionCall","src":"2210:14:124"},"nodeType":"YulIf","src":"2207:34:124"},{"nodeType":"YulVariableDeclaration","src":"2250:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2264:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"2275:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2260:3:124"},"nodeType":"YulFunctionCall","src":"2260:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2254:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2330:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2339:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2342:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2332:6:124"},"nodeType":"YulFunctionCall","src":"2332:12:124"},"nodeType":"YulExpressionStatement","src":"2332:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2309:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2313:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2305:3:124"},"nodeType":"YulFunctionCall","src":"2305:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2320:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2301:3:124"},"nodeType":"YulFunctionCall","src":"2301:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2294:6:124"},"nodeType":"YulFunctionCall","src":"2294:35:124"},"nodeType":"YulIf","src":"2291:55:124"},{"nodeType":"YulVariableDeclaration","src":"2355:26:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2378:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2365:12:124"},"nodeType":"YulFunctionCall","src":"2365:16:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2359:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2404:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2406:16:124"},"nodeType":"YulFunctionCall","src":"2406:18:124"},"nodeType":"YulExpressionStatement","src":"2406:18:124"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2396:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2400:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2393:2:124"},"nodeType":"YulFunctionCall","src":"2393:10:124"},"nodeType":"YulIf","src":"2390:36:124"},{"nodeType":"YulVariableDeclaration","src":"2435:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2476:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2480:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2472:3:124"},"nodeType":"YulFunctionCall","src":"2472:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"2487:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2468:3:124"},"nodeType":"YulFunctionCall","src":"2468:86:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2556:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2464:3:124"},"nodeType":"YulFunctionCall","src":"2464:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2448:15:124"},"nodeType":"YulFunctionCall","src":"2448:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"2439:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"2576:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2583:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2569:6:124"},"nodeType":"YulFunctionCall","src":"2569:17:124"},"nodeType":"YulExpressionStatement","src":"2569:17:124"},{"body":{"nodeType":"YulBlock","src":"2632:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2641:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2644:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2634:6:124"},"nodeType":"YulFunctionCall","src":"2634:12:124"},"nodeType":"YulExpressionStatement","src":"2634:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2609:2:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2613:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2605:3:124"},"nodeType":"YulFunctionCall","src":"2605:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2618:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2601:3:124"},"nodeType":"YulFunctionCall","src":"2601:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2623:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2598:2:124"},"nodeType":"YulFunctionCall","src":"2598:33:124"},"nodeType":"YulIf","src":"2595:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"2674:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2681:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2670:3:124"},"nodeType":"YulFunctionCall","src":"2670:14:124"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2690:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2694:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2686:3:124"},"nodeType":"YulFunctionCall","src":"2686:11:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2699:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2657:12:124"},"nodeType":"YulFunctionCall","src":"2657:45:124"},"nodeType":"YulExpressionStatement","src":"2657:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"2726:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2733:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:124"},"nodeType":"YulFunctionCall","src":"2722:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2738:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2718:3:124"},"nodeType":"YulFunctionCall","src":"2718:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2743:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2711:6:124"},"nodeType":"YulFunctionCall","src":"2711:34:124"},"nodeType":"YulExpressionStatement","src":"2711:34:124"},{"nodeType":"YulAssignment","src":"2754:15:124","value":{"name":"array","nodeType":"YulIdentifier","src":"2764:5:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2754:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1620:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1631:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1643:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1651:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1659:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1667:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1675:6:124","type":""}],"src":"1539:1236:124"},{"body":{"nodeType":"YulBlock","src":"2875:92:124","statements":[{"nodeType":"YulAssignment","src":"2885:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2897:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2908:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2893:3:124"},"nodeType":"YulFunctionCall","src":"2893:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2885:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2927:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2952:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2945:6:124"},"nodeType":"YulFunctionCall","src":"2945:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2938:6:124"},"nodeType":"YulFunctionCall","src":"2938:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2920:6:124"},"nodeType":"YulFunctionCall","src":"2920:41:124"},"nodeType":"YulExpressionStatement","src":"2920:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2844:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2855:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2866:4:124","type":""}],"src":"2780:187:124"},{"body":{"nodeType":"YulBlock","src":"3087:125:124","statements":[{"nodeType":"YulAssignment","src":"3097:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3109:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3120:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3105:3:124"},"nodeType":"YulFunctionCall","src":"3105:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3097:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3139:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3154:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3162:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3150:3:124"},"nodeType":"YulFunctionCall","src":"3150:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3132:6:124"},"nodeType":"YulFunctionCall","src":"3132:74:124"},"nodeType":"YulExpressionStatement","src":"3132:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3056:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3067:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3078:4:124","type":""}],"src":"2972:240:124"},{"body":{"nodeType":"YulBlock","src":"3346:168:124","statements":[{"nodeType":"YulAssignment","src":"3356:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3368:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3379:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3364:3:124"},"nodeType":"YulFunctionCall","src":"3364:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3356:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3398:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3413:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3421:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3409:3:124"},"nodeType":"YulFunctionCall","src":"3409:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3391:6:124"},"nodeType":"YulFunctionCall","src":"3391:74:124"},"nodeType":"YulExpressionStatement","src":"3391:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3485:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3496:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3481:3:124"},"nodeType":"YulFunctionCall","src":"3481:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"3501:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3474:6:124"},"nodeType":"YulFunctionCall","src":"3474:34:124"},"nodeType":"YulExpressionStatement","src":"3474:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3307:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3318:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3326:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3337:4:124","type":""}],"src":"3217:297:124"},{"body":{"nodeType":"YulBlock","src":"3597:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"3643:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3652:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3655:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3645:6:124"},"nodeType":"YulFunctionCall","src":"3645:12:124"},"nodeType":"YulExpressionStatement","src":"3645:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3618:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3627:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3614:3:124"},"nodeType":"YulFunctionCall","src":"3614:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3639:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3610:3:124"},"nodeType":"YulFunctionCall","src":"3610:32:124"},"nodeType":"YulIf","src":"3607:52:124"},{"nodeType":"YulVariableDeclaration","src":"3668:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3687:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3681:5:124"},"nodeType":"YulFunctionCall","src":"3681:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3672:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3750:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3759:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3762:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3752:6:124"},"nodeType":"YulFunctionCall","src":"3752:12:124"},"nodeType":"YulExpressionStatement","src":"3752:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3719:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3740:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3733:6:124"},"nodeType":"YulFunctionCall","src":"3733:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3726:6:124"},"nodeType":"YulFunctionCall","src":"3726:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3716:2:124"},"nodeType":"YulFunctionCall","src":"3716:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3709:6:124"},"nodeType":"YulFunctionCall","src":"3709:40:124"},"nodeType":"YulIf","src":"3706:60:124"},{"nodeType":"YulAssignment","src":"3775:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3785:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3775:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3563:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3574:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3586:6:124","type":""}],"src":"3519:277:124"},{"body":{"nodeType":"YulBlock","src":"3993:298:124","statements":[{"nodeType":"YulAssignment","src":"4003:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4015:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4026:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4011:3:124"},"nodeType":"YulFunctionCall","src":"4011:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4003:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"4039:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4049:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4043:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4107:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4122:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4130:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4118:3:124"},"nodeType":"YulFunctionCall","src":"4118:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4100:6:124"},"nodeType":"YulFunctionCall","src":"4100:34:124"},"nodeType":"YulExpressionStatement","src":"4100:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4154:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4165:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4150:3:124"},"nodeType":"YulFunctionCall","src":"4150:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"4170:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4143:6:124"},"nodeType":"YulFunctionCall","src":"4143:34:124"},"nodeType":"YulExpressionStatement","src":"4143:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4197:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4208:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4193:3:124"},"nodeType":"YulFunctionCall","src":"4193:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"4217:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4225:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4213:3:124"},"nodeType":"YulFunctionCall","src":"4213:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4186:6:124"},"nodeType":"YulFunctionCall","src":"4186:43:124"},"nodeType":"YulExpressionStatement","src":"4186:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4249:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4260:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4245:3:124"},"nodeType":"YulFunctionCall","src":"4245:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"4269:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4277:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4265:3:124"},"nodeType":"YulFunctionCall","src":"4265:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4238:6:124"},"nodeType":"YulFunctionCall","src":"4238:47:124"},"nodeType":"YulExpressionStatement","src":"4238:47:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3938:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3949:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3957:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3965:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3973:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3984:4:124","type":""}],"src":"3801:490:124"},{"body":{"nodeType":"YulBlock","src":"4397:125:124","statements":[{"nodeType":"YulAssignment","src":"4407:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4419:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4430:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4415:3:124"},"nodeType":"YulFunctionCall","src":"4415:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4407:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4449:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4464:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4472:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4460:3:124"},"nodeType":"YulFunctionCall","src":"4460:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4442:6:124"},"nodeType":"YulFunctionCall","src":"4442:74:124"},"nodeType":"YulExpressionStatement","src":"4442:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4366:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4377:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4388:4:124","type":""}],"src":"4296:226:124"},{"body":{"nodeType":"YulBlock","src":"4618:335:124","statements":[{"body":{"nodeType":"YulBlock","src":"4662:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4671:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4674:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4664:6:124"},"nodeType":"YulFunctionCall","src":"4664:12:124"},"nodeType":"YulExpressionStatement","src":"4664:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"4639:3:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4644:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4635:3:124"},"nodeType":"YulFunctionCall","src":"4635:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"4656:4:124","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4631:3:124"},"nodeType":"YulFunctionCall","src":"4631:30:124"},"nodeType":"YulIf","src":"4628:50:124"},{"nodeType":"YulVariableDeclaration","src":"4687:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4707:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4701:5:124"},"nodeType":"YulFunctionCall","src":"4701:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"4691:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4719:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4741:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4749:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4737:3:124"},"nodeType":"YulFunctionCall","src":"4737:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"4723:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4829:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4831:16:124"},"nodeType":"YulFunctionCall","src":"4831:18:124"},"nodeType":"YulExpressionStatement","src":"4831:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4772:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"4784:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4769:2:124"},"nodeType":"YulFunctionCall","src":"4769:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4808:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"4820:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4805:2:124"},"nodeType":"YulFunctionCall","src":"4805:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4766:2:124"},"nodeType":"YulFunctionCall","src":"4766:62:124"},"nodeType":"YulIf","src":"4763:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4867:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4871:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4860:6:124"},"nodeType":"YulFunctionCall","src":"4860:22:124"},"nodeType":"YulExpressionStatement","src":"4860:22:124"},{"nodeType":"YulAssignment","src":"4891:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4900:6:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4891:5:124"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4922:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4936:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4930:5:124"},"nodeType":"YulFunctionCall","src":"4930:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4915:6:124"},"nodeType":"YulFunctionCall","src":"4915:32:124"},"nodeType":"YulExpressionStatement","src":"4915:32:124"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4589:9:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"4600:3:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4608:5:124","type":""}],"src":"4527:426:124"},{"body":{"nodeType":"YulBlock","src":"5018:132:124","statements":[{"nodeType":"YulAssignment","src":"5028:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5043:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5037:5:124"},"nodeType":"YulFunctionCall","src":"5037:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5028:5:124"}]},{"body":{"nodeType":"YulBlock","src":"5128:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5137:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5140:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5130:6:124"},"nodeType":"YulFunctionCall","src":"5130:12:124"},"nodeType":"YulExpressionStatement","src":"5130:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5072:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5083:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5090:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5079:3:124"},"nodeType":"YulFunctionCall","src":"5079:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5069:2:124"},"nodeType":"YulFunctionCall","src":"5069:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5062:6:124"},"nodeType":"YulFunctionCall","src":"5062:65:124"},"nodeType":"YulIf","src":"5059:85:124"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4997:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5008:5:124","type":""}],"src":"4958:192:124"},{"body":{"nodeType":"YulBlock","src":"5214:110:124","statements":[{"nodeType":"YulAssignment","src":"5224:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5239:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5233:5:124"},"nodeType":"YulFunctionCall","src":"5233:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5224:5:124"}]},{"body":{"nodeType":"YulBlock","src":"5302:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5311:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5314:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5304:6:124"},"nodeType":"YulFunctionCall","src":"5304:12:124"},"nodeType":"YulExpressionStatement","src":"5304:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5268:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5279:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5286:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5275:3:124"},"nodeType":"YulFunctionCall","src":"5275:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5265:2:124"},"nodeType":"YulFunctionCall","src":"5265:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5258:6:124"},"nodeType":"YulFunctionCall","src":"5258:43:124"},"nodeType":"YulIf","src":"5255:63:124"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5193:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5204:5:124","type":""}],"src":"5155:169:124"},{"body":{"nodeType":"YulBlock","src":"5388:104:124","statements":[{"nodeType":"YulAssignment","src":"5398:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5413:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5407:5:124"},"nodeType":"YulFunctionCall","src":"5407:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5398:5:124"}]},{"body":{"nodeType":"YulBlock","src":"5470:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5479:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5482:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5472:6:124"},"nodeType":"YulFunctionCall","src":"5472:12:124"},"nodeType":"YulExpressionStatement","src":"5472:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5442:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5453:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5460:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5449:3:124"},"nodeType":"YulFunctionCall","src":"5449:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5439:2:124"},"nodeType":"YulFunctionCall","src":"5439:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5432:6:124"},"nodeType":"YulFunctionCall","src":"5432:37:124"},"nodeType":"YulIf","src":"5429:57:124"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5367:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5378:5:124","type":""}],"src":"5329:163:124"},{"body":{"nodeType":"YulBlock","src":"5557:78:124","statements":[{"nodeType":"YulAssignment","src":"5567:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5582:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5576:5:124"},"nodeType":"YulFunctionCall","src":"5576:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5567:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5623:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5598:24:124"},"nodeType":"YulFunctionCall","src":"5598:31:124"},"nodeType":"YulExpressionStatement","src":"5598:31:124"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5536:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5547:5:124","type":""}],"src":"5497:138:124"},{"body":{"nodeType":"YulBlock","src":"5751:1540:124","statements":[{"body":{"nodeType":"YulBlock","src":"5798:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5807:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5810:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5800:6:124"},"nodeType":"YulFunctionCall","src":"5800:12:124"},"nodeType":"YulExpressionStatement","src":"5800:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5772:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5781:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5768:3:124"},"nodeType":"YulFunctionCall","src":"5768:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5793:3:124","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5764:3:124"},"nodeType":"YulFunctionCall","src":"5764:33:124"},"nodeType":"YulIf","src":"5761:53:124"},{"nodeType":"YulVariableDeclaration","src":"5823:34:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_977","nodeType":"YulIdentifier","src":"5836:19:124"},"nodeType":"YulFunctionCall","src":"5836:21:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5827:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5873:5:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5933:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5944:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"5880:52:124"},"nodeType":"YulFunctionCall","src":"5880:72:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5866:6:124"},"nodeType":"YulFunctionCall","src":"5866:87:124"},"nodeType":"YulExpressionStatement","src":"5866:87:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5973:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5980:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5969:3:124"},"nodeType":"YulFunctionCall","src":"5969:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6019:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6030:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6015:3:124"},"nodeType":"YulFunctionCall","src":"6015:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"5985:29:124"},"nodeType":"YulFunctionCall","src":"5985:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5962:6:124"},"nodeType":"YulFunctionCall","src":"5962:73:124"},"nodeType":"YulExpressionStatement","src":"5962:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6055:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"6062:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6051:3:124"},"nodeType":"YulFunctionCall","src":"6051:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6101:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6112:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6097:3:124"},"nodeType":"YulFunctionCall","src":"6097:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"6067:29:124"},"nodeType":"YulFunctionCall","src":"6067:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6044:6:124"},"nodeType":"YulFunctionCall","src":"6044:73:124"},"nodeType":"YulExpressionStatement","src":"6044:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6137:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"6144:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6133:3:124"},"nodeType":"YulFunctionCall","src":"6133:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6194:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6179:3:124"},"nodeType":"YulFunctionCall","src":"6179:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"6149:29:124"},"nodeType":"YulFunctionCall","src":"6149:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6126:6:124"},"nodeType":"YulFunctionCall","src":"6126:73:124"},"nodeType":"YulExpressionStatement","src":"6126:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6219:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"6226:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6215:3:124"},"nodeType":"YulFunctionCall","src":"6215:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6266:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6277:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6262:3:124"},"nodeType":"YulFunctionCall","src":"6262:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"6232:29:124"},"nodeType":"YulFunctionCall","src":"6232:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6208:6:124"},"nodeType":"YulFunctionCall","src":"6208:75:124"},"nodeType":"YulExpressionStatement","src":"6208:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6303:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"6310:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6299:3:124"},"nodeType":"YulFunctionCall","src":"6299:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6350:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6361:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6346:3:124"},"nodeType":"YulFunctionCall","src":"6346:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"6316:29:124"},"nodeType":"YulFunctionCall","src":"6316:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6292:6:124"},"nodeType":"YulFunctionCall","src":"6292:75:124"},"nodeType":"YulExpressionStatement","src":"6292:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6387:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"6394:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6383:3:124"},"nodeType":"YulFunctionCall","src":"6383:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6433:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6444:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6429:3:124"},"nodeType":"YulFunctionCall","src":"6429:19:124"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"6400:28:124"},"nodeType":"YulFunctionCall","src":"6400:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6376:6:124"},"nodeType":"YulFunctionCall","src":"6376:74:124"},"nodeType":"YulExpressionStatement","src":"6376:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6470:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"6477:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6466:3:124"},"nodeType":"YulFunctionCall","src":"6466:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6516:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6527:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6512:3:124"},"nodeType":"YulFunctionCall","src":"6512:19:124"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"6483:28:124"},"nodeType":"YulFunctionCall","src":"6483:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6459:6:124"},"nodeType":"YulFunctionCall","src":"6459:74:124"},"nodeType":"YulExpressionStatement","src":"6459:74:124"},{"nodeType":"YulVariableDeclaration","src":"6542:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6552:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6546:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6575:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6582:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6571:3:124"},"nodeType":"YulFunctionCall","src":"6571:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6621:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6632:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6617:3:124"},"nodeType":"YulFunctionCall","src":"6617:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"6587:29:124"},"nodeType":"YulFunctionCall","src":"6587:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6564:6:124"},"nodeType":"YulFunctionCall","src":"6564:73:124"},"nodeType":"YulExpressionStatement","src":"6564:73:124"},{"nodeType":"YulVariableDeclaration","src":"6646:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6656:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6650:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6679:5:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6686:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6675:3:124"},"nodeType":"YulFunctionCall","src":"6675:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6725:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6736:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6721:3:124"},"nodeType":"YulFunctionCall","src":"6721:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"6691:29:124"},"nodeType":"YulFunctionCall","src":"6691:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6668:6:124"},"nodeType":"YulFunctionCall","src":"6668:73:124"},"nodeType":"YulExpressionStatement","src":"6668:73:124"},{"nodeType":"YulVariableDeclaration","src":"6750:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6760:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6754:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6783:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6790:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6779:3:124"},"nodeType":"YulFunctionCall","src":"6779:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6829:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6840:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6825:3:124"},"nodeType":"YulFunctionCall","src":"6825:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"6795:29:124"},"nodeType":"YulFunctionCall","src":"6795:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6772:6:124"},"nodeType":"YulFunctionCall","src":"6772:73:124"},"nodeType":"YulExpressionStatement","src":"6772:73:124"},{"nodeType":"YulVariableDeclaration","src":"6854:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6864:3:124","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6858:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6887:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6894:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6883:3:124"},"nodeType":"YulFunctionCall","src":"6883:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6933:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6944:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6929:3:124"},"nodeType":"YulFunctionCall","src":"6929:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"6899:29:124"},"nodeType":"YulFunctionCall","src":"6899:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6876:6:124"},"nodeType":"YulFunctionCall","src":"6876:73:124"},"nodeType":"YulExpressionStatement","src":"6876:73:124"},{"nodeType":"YulVariableDeclaration","src":"6958:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6968:3:124","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6962:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6991:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6998:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6987:3:124"},"nodeType":"YulFunctionCall","src":"6987:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7037:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"7048:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7033:3:124"},"nodeType":"YulFunctionCall","src":"7033:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"7003:29:124"},"nodeType":"YulFunctionCall","src":"7003:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6980:6:124"},"nodeType":"YulFunctionCall","src":"6980:73:124"},"nodeType":"YulExpressionStatement","src":"6980:73:124"},{"nodeType":"YulVariableDeclaration","src":"7062:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7072:3:124","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"7066:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7095:5:124"},{"name":"_6","nodeType":"YulIdentifier","src":"7102:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7091:3:124"},"nodeType":"YulFunctionCall","src":"7091:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7141:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"7152:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7137:3:124"},"nodeType":"YulFunctionCall","src":"7137:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"7107:29:124"},"nodeType":"YulFunctionCall","src":"7107:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7084:6:124"},"nodeType":"YulFunctionCall","src":"7084:73:124"},"nodeType":"YulExpressionStatement","src":"7084:73:124"},{"nodeType":"YulVariableDeclaration","src":"7166:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7176:3:124","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"7170:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7199:5:124"},{"name":"_7","nodeType":"YulIdentifier","src":"7206:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7195:3:124"},"nodeType":"YulFunctionCall","src":"7195:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7245:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"7256:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7241:3:124"},"nodeType":"YulFunctionCall","src":"7241:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"7211:29:124"},"nodeType":"YulFunctionCall","src":"7211:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7188:6:124"},"nodeType":"YulFunctionCall","src":"7188:73:124"},"nodeType":"YulExpressionStatement","src":"7188:73:124"},{"nodeType":"YulAssignment","src":"7270:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7280:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7270:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5717:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5728:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5740:6:124","type":""}],"src":"5640:1651:124"},{"body":{"nodeType":"YulBlock","src":"7377:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"7423:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7432:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7435:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7425:6:124"},"nodeType":"YulFunctionCall","src":"7425:12:124"},"nodeType":"YulExpressionStatement","src":"7425:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7398:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7407:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7394:3:124"},"nodeType":"YulFunctionCall","src":"7394:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7419:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7390:3:124"},"nodeType":"YulFunctionCall","src":"7390:32:124"},"nodeType":"YulIf","src":"7387:52:124"},{"nodeType":"YulAssignment","src":"7448:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7464:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7458:5:124"},"nodeType":"YulFunctionCall","src":"7458:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7448:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7343:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7354:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7366:6:124","type":""}],"src":"7296:184:124"},{"body":{"nodeType":"YulBlock","src":"7713:342:124","statements":[{"nodeType":"YulAssignment","src":"7723:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7735:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7746:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7731:3:124"},"nodeType":"YulFunctionCall","src":"7731:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7723:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"7759:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7769:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7763:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7827:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7842:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7850:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7838:3:124"},"nodeType":"YulFunctionCall","src":"7838:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7820:6:124"},"nodeType":"YulFunctionCall","src":"7820:34:124"},"nodeType":"YulExpressionStatement","src":"7820:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7874:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7885:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7870:3:124"},"nodeType":"YulFunctionCall","src":"7870:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"7890:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7863:6:124"},"nodeType":"YulFunctionCall","src":"7863:34:124"},"nodeType":"YulExpressionStatement","src":"7863:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7917:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7928:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7913:3:124"},"nodeType":"YulFunctionCall","src":"7913:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"7933:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7906:6:124"},"nodeType":"YulFunctionCall","src":"7906:34:124"},"nodeType":"YulExpressionStatement","src":"7906:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7960:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7971:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7956:3:124"},"nodeType":"YulFunctionCall","src":"7956:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"7980:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7988:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7976:3:124"},"nodeType":"YulFunctionCall","src":"7976:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7949:6:124"},"nodeType":"YulFunctionCall","src":"7949:47:124"},"nodeType":"YulExpressionStatement","src":"7949:47:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8016:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8027:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8012:3:124"},"nodeType":"YulFunctionCall","src":"8012:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"8037:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8045:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8033:3:124"},"nodeType":"YulFunctionCall","src":"8033:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8005:6:124"},"nodeType":"YulFunctionCall","src":"8005:44:124"},"nodeType":"YulExpressionStatement","src":"8005:44:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_rational_2_by_1_t_rational_0_by_1_t_address__to_t_address_t_uint256_t_uint256_t_uint16_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7650:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7661:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7669:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7677:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7685:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7693:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7704:4:124","type":""}],"src":"7485:570:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_977() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let _1 := 32\n        value1 := calldataload(add(headStart, _1))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n        let offset := calldataload(add(headStart, 128))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_4, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _4)\n        if gt(add(add(_3, _4), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_3, _1), _4)\n        mstore(add(add(array, _4), _1), 0)\n        value4 := array\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xffff))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_977()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_rational_2_by_1_t_rational_0_by_1_t_address__to_t_address_t_uint256_t_uint256_t_uint16_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffff))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"3567":[{"length":32,"start":86}],"3571":[{"length":32,"start":223},{"length":32,"start":996}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c80630542975c146100515780631416d762146100a25780631b11d0ff146100b75780637535d246146100da575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100b56100b0366004610686565b610101565b005b6100ca6100c536600461075a565b6102f6565b6040519015158152602001610099565b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260248101829052829073ffffffffffffffffffffffffffffffffffffffff8216906340c10f19906044016020604051808303816000875af1158015610176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019a9190610846565b506001546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529082169063095ea7b3906044016020604051808303816000875af1158015610233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102579190610846565b506001546040517f617ba03700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052306044830152600060648301529091169063617ba03790608401600060405180830381600087803b1580156102d957600080fd5b505af11580156102ed573d6000803e3d6000fd5b50505050505050565b60008581610304878761046f565b905061030f88610485565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8316906340c10f19906044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a69190610846565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905289169063095ea7b3906044016020604051808303816000875af115801561043c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104609190610846565b50600198975050505050505050565b8082018281101561047f57600080fd5b92915050565b6001546040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009216906335ea6a75906024016101e060405180830381865afa1580156104f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051b9190610908565b6101008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291925083916000918316906370a0823190602401602060405180830381865afa158015610595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b99190610a2b565b6001546040517fa415bcad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201849052600260448301526000606483015230608483015292935091169063a415bcad9060a401600060405180830381600087803b15801561064357600080fd5b505af1158015610657573d6000803e3d6000fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461068357600080fd5b50565b6000806040838503121561069957600080fd5b82356106a481610661565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715610705576107056106b2565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610752576107526106b2565b604052919050565b600080600080600060a0868803121561077257600080fd5b853561077d81610661565b9450602086810135945060408701359350606087013561079c81610661565b9250608087013567ffffffffffffffff808211156107b957600080fd5b818901915089601f8301126107cd57600080fd5b8135818111156107df576107df6106b2565b61080f847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161070b565b91508082528a8482850101111561082557600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60006020828403121561085857600080fd5b8151801515811461086857600080fd5b9392505050565b60006020828403121561088157600080fd5b6040516020810181811067ffffffffffffffff821117156108a4576108a46106b2565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff811681146108d157600080fd5b919050565b805164ffffffffff811681146108d157600080fd5b805161ffff811681146108d157600080fd5b80516108d181610661565b60006101e0828403121561091b57600080fd5b6109236106e1565b61092d848461086f565b815261093b602084016108b1565b602082015261094c604084016108b1565b604082015261095d606084016108b1565b606082015261096e608084016108b1565b608082015261097f60a084016108b1565b60a082015261099060c084016108d6565b60c08201526109a160e084016108eb565b60e08201526101006109b48185016108fd565b908201526101206109c68482016108fd565b908201526101406109d88482016108fd565b908201526101606109ea8482016108fd565b908201526101806109fc8482016108b1565b908201526101a0610a0e8482016108b1565b908201526101c0610a208482016108b1565b908201529392505050565b600060208284031215610a3d57600080fd5b505191905056fea26469706673582212200da36ca220a12a1d28690d795b69a2916e34309c394df3bd90d6cd69d516d6be64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x542975C EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x1416D762 EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0xDA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x78 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB5 PUSH2 0xB0 CALLDATASIZE PUSH1 0x4 PUSH2 0x686 JUMP JUMPDEST PUSH2 0x101 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x75A JUMP JUMPDEST PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x99 JUMP JUMPDEST PUSH2 0x78 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x176 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A SWAP2 SWAP1 PUSH2 0x846 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x233 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x846 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x617BA03700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x617BA037 SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 PUSH2 0x304 DUP8 DUP8 PUSH2 0x46F JUMP JUMPDEST SWAP1 POP PUSH2 0x30F DUP9 PUSH2 0x485 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x382 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A6 SWAP2 SWAP1 PUSH2 0x846 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP10 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x43C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x460 SWAP2 SWAP1 PUSH2 0x846 JUMP JUMPDEST POP PUSH1 0x1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x51B SWAP2 SWAP1 PUSH2 0x908 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP3 POP DUP4 SWAP2 PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x595 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5B9 SWAP2 SWAP1 PUSH2 0xA2B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xA415BCAD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x2 PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE ADDRESS PUSH1 0x84 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0xA415BCAD SWAP1 PUSH1 0xA4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x657 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x699 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x6A4 DUP2 PUSH2 0x661 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x705 JUMPI PUSH2 0x705 PUSH2 0x6B2 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x752 JUMPI PUSH2 0x752 PUSH2 0x6B2 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x772 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x77D DUP2 PUSH2 0x661 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x79C DUP2 PUSH2 0x661 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP10 ADD SWAP2 POP DUP10 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x7DF PUSH2 0x6B2 JUMP JUMPDEST PUSH2 0x80F DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x70B JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP11 DUP5 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 DUP5 ADD DUP6 DUP5 ADD CALLDATACOPY PUSH1 0x0 DUP5 DUP3 DUP5 ADD ADD MSTORE POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x858 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x868 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x881 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x8A4 JUMPI PUSH2 0x8A4 PUSH2 0x6B2 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x8D1 DUP2 PUSH2 0x661 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x91B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x923 PUSH2 0x6E1 JUMP JUMPDEST PUSH2 0x92D DUP5 DUP5 PUSH2 0x86F JUMP JUMPDEST DUP2 MSTORE PUSH2 0x93B PUSH1 0x20 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x94C PUSH1 0x40 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x95D PUSH1 0x60 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x96E PUSH1 0x80 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x97F PUSH1 0xA0 DUP5 ADD PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x990 PUSH1 0xC0 DUP5 ADD PUSH2 0x8D6 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x9A1 PUSH1 0xE0 DUP5 ADD PUSH2 0x8EB JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x9B4 DUP2 DUP6 ADD PUSH2 0x8FD JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x9C6 DUP5 DUP3 ADD PUSH2 0x8FD JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x9D8 DUP5 DUP3 ADD PUSH2 0x8FD JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x9EA DUP5 DUP3 ADD PUSH2 0x8FD JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x9FC DUP5 DUP3 ADD PUSH2 0x8B1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0xA0E DUP5 DUP3 ADD PUSH2 0x8B1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0xA20 DUP5 DUP3 ADD PUSH2 0x8B1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD LOG3 PUSH13 0xA220A12A1D28690D795B69A291 PUSH15 0x34309C394DF3BD90D6CD69D516D6BE PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"750:1333:70:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;489:67:27;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;489:67:27;;;;;;;;1078:256:70;;;;;;:::i;:::-;;:::i;:::-;;1610:471;;;;;;:::i;:::-;;:::i;:::-;;;2945:14:124;;2938:22;2920:41;;2908:2;2893:18;1610:471:70;2780:187:124;560:36:27;;;;;1078:256:70;1191:33;;;;;1210:4;1191:33;;;3391:74:124;3481:18;;;3474:34;;;1179:5:70;;1191:10;;;;;;3364:18:124;;1191:33:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1252:5:70;;1230:48;;;;;:13;1252:5;;;1230:48;;;3391:74:124;1260:17:70;3481:18:124;;;3474:34;1230:13:70;;;;;;3364:18:124;;1230:48:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1284:5:70;;:45;;;;;:5;4118:15:124;;;1284:45:70;;;4100:34:124;4150:18;;;4143:34;;;1320:4:70;4193:18:124;;;4186:43;1284:5:70;4245:18:124;;;4238:47;1284:5:70;;;;:12;;4011:19:124;;1284:45:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1137:197;1078:256;;:::o;1610:471::-;1779:4;1827:5;1779:4;1864:19;:6;1875:7;1864:10;:19::i;:::-;1839:44;;1940:19;1953:5;1940:12;:19::i;:::-;1966:34;;;;;1985:4;1966:34;;;3391:74:124;3481:18;;;3474:34;;;1966:10:70;;;;;;3364:18:124;;1966:34:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2006:52:70;;;;;:21;2036:4;3409:55:124;;2006:52:70;;;3391:74:124;3481:18;;;3474:34;;;2006:21:70;;;;;3364:18:124;;2006:52:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2072:4:70;;1610:471;-1:-1:-1;;;;;;;;1610:471:70:o;410:129:14:-;516:5;;;511:16;;;;503:25;;;;;;410:129;;;;:::o;1338:268:70:-;1428:5;;:27;;;;;:5;209:55:124;;;1428:27:70;;;191:74:124;1390:35:70;;1428:5;;:20;;164:18:124;;1428:27:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1527:20;;;;1511:37;;;;;:15;209:55:124;;;1511:37:70;;;191:74:124;1527:20:70;;-1:-1:-1;1483:5:70;;1461:12;;1511:15;;;;;164:18:124;;1511:37:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1554:5;;:47;;;;;:5;7838:15:124;;;1554:47:70;;;7820:34:124;7870:18;;;7863:34;;;1581:1:70;7913:18:124;;;7906:34;1554:5:70;7956:18:124;;;7949:47;1595:4:70;8012:19:124;;;8005:44;1495:53:70;;-1:-1:-1;1554:5:70;;;:12;;7731:19:124;;1554:47:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1384:222;;;1338:268;:::o;276:154:124:-;362:42;355:5;351:54;344:5;341:65;331:93;;420:1;417;410:12;331:93;276:154;:::o;435:315::-;503:6;511;564:2;552:9;543:7;539:23;535:32;532:52;;;580:1;577;570:12;532:52;619:9;606:23;638:31;663:5;638:31;:::i;:::-;688:5;740:2;725:18;;;;712:32;;-1:-1:-1;;;435:315:124:o;755:184::-;807:77;804:1;797:88;904:4;901:1;894:15;928:4;925:1;918:15;944:251;1015:2;1009:9;1057:3;1045:16;;1091:18;1076:34;;1112:22;;;1073:62;1070:88;;;1138:18;;:::i;:::-;1174:2;1167:22;944:251;:::o;1200:334::-;1271:2;1265:9;1327:2;1317:13;;1332:66;1313:86;1301:99;;1430:18;1415:34;;1451:22;;;1412:62;1409:88;;;1477:18;;:::i;:::-;1513:2;1506:22;1200:334;;-1:-1:-1;1200:334:124:o;1539:1236::-;1643:6;1651;1659;1667;1675;1728:3;1716:9;1707:7;1703:23;1699:33;1696:53;;;1745:1;1742;1735:12;1696:53;1784:9;1771:23;1803:31;1828:5;1803:31;:::i;:::-;1853:5;-1:-1:-1;1877:2:124;1911:18;;;1898:32;;-1:-1:-1;1977:2:124;1962:18;;1949:32;;-1:-1:-1;2033:2:124;2018:18;;2005:32;2046:33;2005:32;2046:33;:::i;:::-;2098:7;-1:-1:-1;2156:3:124;2141:19;;2128:33;2180:18;2210:14;;;2207:34;;;2237:1;2234;2227:12;2207:34;2275:6;2264:9;2260:22;2250:32;;2320:7;2313:4;2309:2;2305:13;2301:27;2291:55;;2342:1;2339;2332:12;2291:55;2378:2;2365:16;2400:2;2396;2393:10;2390:36;;;2406:18;;:::i;:::-;2448:112;2556:2;2487:66;2480:4;2476:2;2472:13;2468:86;2464:95;2448:112;:::i;:::-;2435:125;;2583:2;2576:5;2569:17;2623:7;2618:2;2613;2609;2605:11;2601:20;2598:33;2595:53;;;2644:1;2641;2634:12;2595:53;2699:2;2694;2690;2686:11;2681:2;2674:5;2670:14;2657:45;2743:1;2738:2;2733;2726:5;2722:14;2718:23;2711:34;;2764:5;2754:15;;;;;1539:1236;;;;;;;;:::o;3519:277::-;3586:6;3639:2;3627:9;3618:7;3614:23;3610:32;3607:52;;;3655:1;3652;3645:12;3607:52;3687:9;3681:16;3740:5;3733:13;3726:21;3719:5;3716:32;3706:60;;3762:1;3759;3752:12;3706:60;3785:5;3519:277;-1:-1:-1;;;3519:277:124:o;4527:426::-;4608:5;4656:4;4644:9;4639:3;4635:19;4631:30;4628:50;;;4674:1;4671;4664:12;4628:50;4707:2;4701:9;4749:4;4741:6;4737:17;4820:6;4808:10;4805:22;4784:18;4772:10;4769:34;4766:62;4763:88;;;4831:18;;:::i;:::-;4867:2;4860:22;4930:16;;4915:32;;-1:-1:-1;4900:6:124;4527:426;-1:-1:-1;4527:426:124:o;4958:192::-;5037:13;;5090:34;5079:46;;5069:57;;5059:85;;5140:1;5137;5130:12;5059:85;4958:192;;;:::o;5155:169::-;5233:13;;5286:12;5275:24;;5265:35;;5255:63;;5314:1;5311;5304:12;5329:163;5407:13;;5460:6;5449:18;;5439:29;;5429:57;;5482:1;5479;5472:12;5497:138;5576:13;;5598:31;5576:13;5598:31;:::i;5640:1651::-;5740:6;5793:3;5781:9;5772:7;5768:23;5764:33;5761:53;;;5810:1;5807;5800:12;5761:53;5836:21;;:::i;:::-;5880:72;5944:7;5933:9;5880:72;:::i;:::-;5873:5;5866:87;5985:49;6030:2;6019:9;6015:18;5985:49;:::i;:::-;5980:2;5973:5;5969:14;5962:73;6067:49;6112:2;6101:9;6097:18;6067:49;:::i;:::-;6062:2;6055:5;6051:14;6044:73;6149:49;6194:2;6183:9;6179:18;6149:49;:::i;:::-;6144:2;6137:5;6133:14;6126:73;6232:50;6277:3;6266:9;6262:19;6232:50;:::i;:::-;6226:3;6219:5;6215:15;6208:75;6316:50;6361:3;6350:9;6346:19;6316:50;:::i;:::-;6310:3;6303:5;6299:15;6292:75;6400:49;6444:3;6433:9;6429:19;6400:49;:::i;:::-;6394:3;6387:5;6383:15;6376:74;6483:49;6527:3;6516:9;6512:19;6483:49;:::i;:::-;6477:3;6470:5;6466:15;6459:74;6552:3;6587:49;6632:2;6621:9;6617:18;6587:49;:::i;:::-;6571:14;;;6564:73;6656:3;6691:49;6721:18;;;6691:49;:::i;:::-;6675:14;;;6668:73;6760:3;6795:49;6825:18;;;6795:49;:::i;:::-;6779:14;;;6772:73;6864:3;6899:49;6929:18;;;6899:49;:::i;:::-;6883:14;;;6876:73;6968:3;7003:49;7033:18;;;7003:49;:::i;:::-;6987:14;;;6980:73;7072:3;7107:49;7137:18;;;7107:49;:::i;:::-;7091:14;;;7084:73;7176:3;7211:49;7241:18;;;7211:49;:::i;:::-;7195:14;;;7188:73;7199:5;5640:1651;-1:-1:-1;;;5640:1651:124:o;7296:184::-;7366:6;7419:2;7407:9;7398:7;7394:23;7390:32;7387:52;;;7435:1;7432;7425:12;7387:52;-1:-1:-1;7458:16:124;;7296:184;-1:-1:-1;7296:184:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"536400","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","POOL()":"infinite","executeOperation(address,uint256,uint256,address,bytes)":"infinite","supplyAsset(address,uint256)":"infinite"},"internal":{"_innerBorrow(address)":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff","supplyAsset(address,uint256)":"1416d762"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/tests/FlashloanAttacker.sol\":\"FlashloanAttacker\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.sol';\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\n\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n\\n  /**\\n   * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n   * a default value of 18.\\n   *\\n   * To select a different value for {decimals}, use {_setupDecimals}.\\n   *\\n   * All three of these values are immutable: they can only be set once during\\n   * construction.\\n   */\\n  constructor(string memory name, string memory symbol) {\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = 18;\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n   * called.\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `recipient` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n    _transfer(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) public view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20};\\n   *\\n   * Requirements:\\n   * - `sender` and `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) public virtual override returns (bool) {\\n    _transfer(sender, recipient, amount);\\n    _approve(\\n      sender,\\n      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   * - `spender` must have allowance for the caller of at least\\n   * `subtractedValue`.\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');\\n    _balances[recipient] = _balances[recipient].add(amount);\\n    emit Transfer(sender, recipient, amount);\\n  }\\n\\n  /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: mint to the zero address');\\n\\n    _beforeTokenTransfer(address(0), account, amount);\\n\\n    _totalSupply = _totalSupply.add(amount);\\n    _balances[account] = _balances[account].add(amount);\\n    emit Transfer(address(0), account, amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `amount` tokens from `account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `account` cannot be the zero address.\\n   * - `account` must have at least `amount` tokens.\\n   */\\n  function _burn(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');\\n    _totalSupply = _totalSupply.sub(amount);\\n    emit Transfer(account, address(0), amount);\\n  }\\n\\n  /**\\n   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\\n   *\\n   * This is internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `owner` cannot be the zero address.\\n   * - `spender` cannot be the zero address.\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev Sets {decimals} to a value other than the default one of 18.\\n   *\\n   * WARNING: This function should only be called from the constructor. Most\\n   * applications that interact with token contracts will not expect\\n   * {decimals} to ever change, and may work incorrectly if it does.\\n   */\\n  function _setupDecimals(uint8 decimals_) internal {\\n    _decimals = decimals_;\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * will be to transferred to `to`.\\n   * - when `from` is zero, `amount` tokens will be minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/tests/FlashloanAttacker.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {FlashLoanSimpleReceiverBase} from '../../flashloan/base/FlashLoanSimpleReceiverBase.sol';\\nimport {MintableERC20} from '../tokens/MintableERC20.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {DataTypes} from '../../protocol/libraries/types/DataTypes.sol';\\n\\ncontract FlashloanAttacker is FlashLoanSimpleReceiverBase {\\n  using GPv2SafeERC20 for IERC20;\\n  using SafeMath for uint256;\\n\\n  IPoolAddressesProvider internal _provider;\\n  IPool internal _pool;\\n\\n  constructor(IPoolAddressesProvider provider) FlashLoanSimpleReceiverBase(provider) {\\n    _pool = IPool(provider.getPool());\\n  }\\n\\n  function supplyAsset(address asset, uint256 amount) public {\\n    MintableERC20 token = MintableERC20(asset);\\n    token.mint(address(this), amount);\\n    token.approve(address(_pool), type(uint256).max);\\n    _pool.supply(asset, amount, address(this), 0);\\n  }\\n\\n  function _innerBorrow(address asset) internal {\\n    DataTypes.ReserveData memory config = _pool.getReserveData(asset);\\n    IERC20 token = IERC20(asset);\\n    uint256 avail = token.balanceOf(config.aTokenAddress);\\n    _pool.borrow(asset, avail, 2, 0, address(this));\\n  }\\n\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address, // initiator\\n    bytes memory // params\\n  ) public override returns (bool) {\\n    MintableERC20 token = MintableERC20(asset);\\n    uint256 amountToReturn = amount.add(premium);\\n\\n    // Also do a normal borrow here in the middle\\n    _innerBorrow(asset);\\n\\n    token.mint(address(this), premium);\\n    IERC20(asset).approve(address(POOL), amountToReturn);\\n\\n    return true;\\n  }\\n}\\n\",\"keccak256\":\"0x37db4c67df33d81525e790df38dae8c94fcbd4229c095e839a5dc0d14fb44457\",\"license\":\"BUSL-1.1\"},\"contracts/mocks/tokens/MintableERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title ERC20Mintable\\n * @dev ERC20 minting logic\\n */\\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n}\\n\",\"keccak256\":\"0x8306245c732faf6038ba650428edda23197ee5977be4cd2a1e5e73263acca6b7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9886,"contract":"contracts/mocks/tests/FlashloanAttacker.sol:FlashloanAttacker","label":"_provider","offset":0,"slot":"0","type":"t_contract(IPoolAddressesProvider)5282"},{"astId":9889,"contract":"contracts/mocks/tests/FlashloanAttacker.sol:FlashloanAttacker","label":"_pool","offset":0,"slot":"1","type":"t_contract(IPool)5073"}],"types":{"t_contract(IPool)5073":{"encoding":"inplace","label":"contract IPool","numberOfBytes":"20"},"t_contract(IPoolAddressesProvider)5282":{"encoding":"inplace","label":"contract IPoolAddressesProvider","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/tests/MockReserveInterestRateStrategy.sol":{"MockReserveInterestRateStrategy":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"uint256","name":"optimalUsageRatio","type":"uint256"},{"internalType":"uint256","name":"baseVariableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope2","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"variableBorrowRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseStableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getBaseVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateExcessOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityRate","type":"uint256"}],"name":"setLiquidityRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"}],"name":"setStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"variableBorrowRate","type":"uint256"}],"name":"setVariableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"getBaseStableBorrowRate()":{"returns":{"_0":"The base stable borrow rate, expressed in ray"}},"getBaseVariableBorrowRate()":{"returns":{"_0":"The base variable borrow rate, expressed in ray"}},"getMaxVariableBorrowRate()":{"returns":{"_0":"The maximum variable borrow rate, expressed in ray"}},"getStableRateExcessOffset()":{"details":"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","returns":{"_0":"The stable rate excess offset, expressed in ray"}},"getStableRateSlope1()":{"details":"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getStableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getVariableRateSlope1()":{"details":"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}},"getVariableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider contract","returns":{"_0":"The address of the PoolAddressesProvider contract"}},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO":{"details":"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)","return":"The max excess stable to total debt ratio, expressed in ray.","returns":{"_0":"The max excess stable to total debt ratio, expressed in ray."}},"MAX_EXCESS_USAGE_RATIO":{"details":"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)","return":"The max excess usage ratio, expressed in ray.","returns":{"_0":"The max excess usage ratio, expressed in ray."}},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO":{"return":"The optimal stable to total debt ratio, expressed in ray.","returns":{"_0":"The optimal stable to total debt ratio, expressed in ray."}},"OPTIMAL_USAGE_RATIO":{"return":"The optimal usage ratio, expressed in ray.","returns":{"_0":"The optimal usage ratio, expressed in ray."}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10150":{"entryPoint":null,"id":10150,"parameterSlots":7,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":97,"id":null,"parameterSlots":2,"returnSlots":7}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:707:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"228:477:124","statements":[{"body":{"nodeType":"YulBlock","src":"275:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"284:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"287:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"277:6:124"},"nodeType":"YulFunctionCall","src":"277:12:124"},"nodeType":"YulExpressionStatement","src":"277:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"249:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"258:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"245:3:124"},"nodeType":"YulFunctionCall","src":"245:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"270:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"241:3:124"},"nodeType":"YulFunctionCall","src":"241:33:124"},"nodeType":"YulIf","src":"238:53:124"},{"nodeType":"YulVariableDeclaration","src":"300:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"319:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"313:5:124"},"nodeType":"YulFunctionCall","src":"313:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"304:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"392:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"401:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"404:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"394:6:124"},"nodeType":"YulFunctionCall","src":"394:12:124"},"nodeType":"YulExpressionStatement","src":"394:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"351:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"362:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"377:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"382:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"386:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"369:3:124"},"nodeType":"YulFunctionCall","src":"369:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"358:3:124"},"nodeType":"YulFunctionCall","src":"358:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"348:2:124"},"nodeType":"YulFunctionCall","src":"348:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"341:6:124"},"nodeType":"YulFunctionCall","src":"341:50:124"},"nodeType":"YulIf","src":"338:70:124"},{"nodeType":"YulAssignment","src":"417:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"427:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"417:6:124"}]},{"nodeType":"YulAssignment","src":"441:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"461:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"472:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"457:3:124"},"nodeType":"YulFunctionCall","src":"457:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"451:5:124"},"nodeType":"YulFunctionCall","src":"451:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"441:6:124"}]},{"nodeType":"YulAssignment","src":"485:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"505:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"516:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"501:3:124"},"nodeType":"YulFunctionCall","src":"501:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"495:5:124"},"nodeType":"YulFunctionCall","src":"495:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"485:6:124"}]},{"nodeType":"YulAssignment","src":"529:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"549:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"560:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"545:3:124"},"nodeType":"YulFunctionCall","src":"545:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"539:5:124"},"nodeType":"YulFunctionCall","src":"539:25:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"529:6:124"}]},{"nodeType":"YulAssignment","src":"573:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"593:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"604:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"589:3:124"},"nodeType":"YulFunctionCall","src":"589:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"583:5:124"},"nodeType":"YulFunctionCall","src":"583:26:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"573:6:124"}]},{"nodeType":"YulAssignment","src":"618:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"638:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"649:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"634:3:124"},"nodeType":"YulFunctionCall","src":"634:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"628:5:124"},"nodeType":"YulFunctionCall","src":"628:26:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"618:6:124"}]},{"nodeType":"YulAssignment","src":"663:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"683:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"694:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"679:3:124"},"nodeType":"YulFunctionCall","src":"679:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"673:5:124"},"nodeType":"YulFunctionCall","src":"673:26:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"663:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"146:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"157:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"169:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"177:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"185:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"193:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"201:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"209:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"217:6:124","type":""}],"src":"14:691:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"61016060405234801561001157600080fd5b5060405161062d38038061062d83398101604081905261003091610061565b6080959095526001600160a01b0390951660a05260c09290925260e0526101005261012091909152610140526100ca565b600080600080600080600060e0888a03121561007c57600080fd5b87516001600160a01b038116811461009357600080fd5b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b60805160a05160c05160e0516101005161012051610140516104f461013960003960006101a3015260006102a10152600081816102c701526102ef01526000818161017301526103130152600081816101c90152610334015260006101250152600061020701526104f46000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c8063a5898709116100b2578063bc62690811610081578063d5cd739111610066578063d5cd73911461029f578063f4202409146102c5578063fe5fd6981461022957600080fd5b8063bc62690814610285578063cecced511461028c57600080fd5b8063a589870914610239578063a9c622f814610229578063aa16fe3414610272578063acd786861461028557600080fd5b80633a244adf116100ee5780633a244adf146101ed57806354c365c6146102025780636fb925891461022957806380031e371461023157600080fd5b80630542975c146101205780630b3429a21461017157806314e32da4146101a157806334762ca5146101c7575b600080fd5b6101477f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b604051908152602001610168565b7f0000000000000000000000000000000000000000000000000000000000000000610193565b7f0000000000000000000000000000000000000000000000000000000000000000610193565b6102006101fb366004610367565b600055565b005b6101937f000000000000000000000000000000000000000000000000000000000000000081565b610193600081565b6101936102eb565b6102576102473660046103fa565b6000546001546002549193909250565b60408051938452602084019290925290820152606001610168565b610200610280366004610367565b600255565b6000610193565b61020061029a366004610367565b600155565b7f0000000000000000000000000000000000000000000000000000000000000000610193565b7f0000000000000000000000000000000000000000000000000000000000000000610193565b60007f00000000000000000000000000000000000000000000000000000000000000006103587f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061047f565b610362919061047f565b905090565b60006020828403121561037957600080fd5b5035919050565b604051610120810167ffffffffffffffff811182821017156103cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff811681146103f557600080fd5b919050565b6000610120828403121561040d57600080fd5b610415610380565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015261046160e084016103d1565b60e08201526101006104748185016103d1565b908201529392505050565b600082198211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea26469706673582212200293de1ee4476411ba3b9820dc176bc1e8cf7d4a5c4059f8b162f09014fddb4764736f6c634300080a0033","opcodes":"PUSH2 0x160 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x62D CODESIZE SUB DUP1 PUSH2 0x62D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x30 SWAP2 PUSH2 0x61 JUMP JUMPDEST PUSH1 0x80 SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0xA0 MSTORE PUSH1 0xC0 SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 MSTORE PUSH2 0x120 SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 MSTORE PUSH2 0xCA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x40 DUP11 ADD MLOAD PUSH1 0x60 DUP12 ADD MLOAD PUSH1 0x80 DUP13 ADD MLOAD PUSH1 0xA0 DUP14 ADD MLOAD PUSH1 0xC0 SWAP1 SWAP14 ADD MLOAD SWAP5 SWAP15 SWAP4 SWAP14 POP SWAP2 SWAP12 SWAP1 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x4F4 PUSH2 0x139 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1A3 ADD MSTORE PUSH1 0x0 PUSH2 0x2A1 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2C7 ADD MSTORE PUSH2 0x2EF ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x173 ADD MSTORE PUSH2 0x313 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1C9 ADD MSTORE PUSH2 0x334 ADD MSTORE PUSH1 0x0 PUSH2 0x125 ADD MSTORE PUSH1 0x0 PUSH2 0x207 ADD MSTORE PUSH2 0x4F4 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA5898709 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xBC626908 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xD5CD7391 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD5CD7391 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0xF4202409 EQ PUSH2 0x2C5 JUMPI DUP1 PUSH4 0xFE5FD698 EQ PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBC626908 EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0xCECCED51 EQ PUSH2 0x28C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA5898709 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0xA9C622F8 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xAA16FE34 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0xACD78686 EQ PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3A244ADF GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3A244ADF EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0x54C365C6 EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0x6FB92589 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0x80031E37 EQ PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0xB3429A2 EQ PUSH2 0x171 JUMPI DUP1 PUSH4 0x14E32DA4 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x34762CA5 EQ PUSH2 0x1C7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x147 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x168 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH2 0x200 PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0x367 JUMP JUMPDEST PUSH1 0x0 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x193 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x193 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x193 PUSH2 0x2EB JUMP JUMPDEST PUSH2 0x257 PUSH2 0x247 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x168 JUMP JUMPDEST PUSH2 0x200 PUSH2 0x280 CALLDATASIZE PUSH1 0x4 PUSH2 0x367 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH2 0x200 PUSH2 0x29A CALLDATASIZE PUSH1 0x4 PUSH2 0x367 JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH32 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x358 PUSH32 0x0 PUSH32 0x0 PUSH2 0x47F JUMP JUMPDEST PUSH2 0x362 SWAP2 SWAP1 PUSH2 0x47F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3CB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x415 PUSH2 0x380 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x461 PUSH1 0xE0 DUP5 ADD PUSH2 0x3D1 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x474 DUP2 DUP6 ADD PUSH2 0x3D1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x4B9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP4 0xDE 0x1E 0xE4 SELFBALANCE PUSH5 0x11BA3B9820 0xDC OR PUSH12 0xC1E8CF7D4A5C4059F8B162F0 SWAP1 EQ REVERT 0xDB SELFBALANCE PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"388:3003:71:-:0;;;1186:559;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1436:39;;;;;-1:-1:-1;;;;;1481:29:71;;;;;1516:48;;;;;1570:40;;1616;;1662:36;;;;;1704;;388:3003;;14:691:124;169:6;177;185;193;201;209;217;270:3;258:9;249:7;245:23;241:33;238:53;;;287:1;284;277:12;238:53;313:16;;-1:-1:-1;;;;;358:31:124;;348:42;;338:70;;404:1;401;394:12;338:70;472:2;457:18;;451:25;516:2;501:18;;495:25;560:2;545:18;;539:25;604:3;589:19;;583:26;649:3;634:19;;628:26;694:3;679:19;;;673:26;427:5;;451:25;;-1:-1:-1;495:25:124;;539;;-1:-1:-1;583:26:124;;-1:-1:-1;628:26:124;-1:-1:-1;673:26:124;;-1:-1:-1;14:691:124;-1:-1:-1;;;14:691:124:o;:::-;388:3003:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_10078":{"entryPoint":null,"id":10078,"parameterSlots":0,"returnSlots":0},"@MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO_10091":{"entryPoint":null,"id":10091,"parameterSlots":0,"returnSlots":0},"@MAX_EXCESS_USAGE_RATIO_10094":{"entryPoint":null,"id":10094,"parameterSlots":0,"returnSlots":0},"@OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO_10097":{"entryPoint":null,"id":10097,"parameterSlots":0,"returnSlots":0},"@OPTIMAL_USAGE_RATIO_10075":{"entryPoint":null,"id":10075,"parameterSlots":0,"returnSlots":0},"@calculateInterestRates_10199":{"entryPoint":null,"id":10199,"parameterSlots":1,"returnSlots":3},"@getBaseStableBorrowRate_10262":{"entryPoint":null,"id":10262,"parameterSlots":0,"returnSlots":1},"@getBaseVariableBorrowRate_10240":{"entryPoint":null,"id":10240,"parameterSlots":0,"returnSlots":1},"@getMaxVariableBorrowRate_10253":{"entryPoint":747,"id":10253,"parameterSlots":0,"returnSlots":1},"@getStableRateExcessOffset_10271":{"entryPoint":null,"id":10271,"parameterSlots":0,"returnSlots":1},"@getStableRateSlope1_10223":{"entryPoint":null,"id":10223,"parameterSlots":0,"returnSlots":1},"@getStableRateSlope2_10231":{"entryPoint":null,"id":10231,"parameterSlots":0,"returnSlots":1},"@getVariableRateSlope1_10207":{"entryPoint":null,"id":10207,"parameterSlots":0,"returnSlots":1},"@getVariableRateSlope2_10215":{"entryPoint":null,"id":10215,"parameterSlots":0,"returnSlots":1},"@setLiquidityRate_10160":{"entryPoint":null,"id":10160,"parameterSlots":1,"returnSlots":0},"@setStableBorrowRate_10170":{"entryPoint":null,"id":10170,"parameterSlots":1,"returnSlots":0},"@setVariableBorrowRate_10180":{"entryPoint":null,"id":10180,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":977,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr":{"entryPoint":1018,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":871,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"allocate_memory":{"entryPoint":896,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":1151,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2721:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"377:76:124","statements":[{"nodeType":"YulAssignment","src":"387:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"399:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"410:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"395:3:124"},"nodeType":"YulFunctionCall","src":"395:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"387:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"429:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"440:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"422:6:124"},"nodeType":"YulFunctionCall","src":"422:25:124"},"nodeType":"YulExpressionStatement","src":"422:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"346:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"357:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"368:4:124","type":""}],"src":"276:177:124"},{"body":{"nodeType":"YulBlock","src":"528:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"574:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"583:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"586:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"576:6:124"},"nodeType":"YulFunctionCall","src":"576:12:124"},"nodeType":"YulExpressionStatement","src":"576:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"549:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"558:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"545:3:124"},"nodeType":"YulFunctionCall","src":"545:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"570:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"541:3:124"},"nodeType":"YulFunctionCall","src":"541:32:124"},"nodeType":"YulIf","src":"538:52:124"},{"nodeType":"YulAssignment","src":"599:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"622:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"609:12:124"},"nodeType":"YulFunctionCall","src":"609:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"599:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"494:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"505:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"517:6:124","type":""}],"src":"458:180:124"},{"body":{"nodeType":"YulBlock","src":"684:360:124","statements":[{"nodeType":"YulAssignment","src":"694:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"710:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"704:5:124"},"nodeType":"YulFunctionCall","src":"704:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"694:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"722:34:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"744:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"752:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"740:3:124"},"nodeType":"YulFunctionCall","src":"740:16:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"726:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"839:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"863:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"853:6:124"},"nodeType":"YulFunctionCall","src":"853:88:124"},"nodeType":"YulExpressionStatement","src":"853:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"961:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"964:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"954:6:124"},"nodeType":"YulFunctionCall","src":"954:15:124"},"nodeType":"YulExpressionStatement","src":"954:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"989:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"992:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"982:6:124"},"nodeType":"YulFunctionCall","src":"982:15:124"},"nodeType":"YulExpressionStatement","src":"982:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"774:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"786:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"771:2:124"},"nodeType":"YulFunctionCall","src":"771:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"810:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"822:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"807:2:124"},"nodeType":"YulFunctionCall","src":"807:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"768:2:124"},"nodeType":"YulFunctionCall","src":"768:62:124"},"nodeType":"YulIf","src":"765:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1023:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1027:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1016:6:124"},"nodeType":"YulFunctionCall","src":"1016:22:124"},"nodeType":"YulExpressionStatement","src":"1016:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"673:6:124","type":""}],"src":"643:401:124"},{"body":{"nodeType":"YulBlock","src":"1098:147:124","statements":[{"nodeType":"YulAssignment","src":"1108:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1130:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1117:12:124"},"nodeType":"YulFunctionCall","src":"1117:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1108:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1223:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1232:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1235:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1225:6:124"},"nodeType":"YulFunctionCall","src":"1225:12:124"},"nodeType":"YulExpressionStatement","src":"1225:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1159:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1170:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1177:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1166:3:124"},"nodeType":"YulFunctionCall","src":"1166:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1156:2:124"},"nodeType":"YulFunctionCall","src":"1156:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1149:6:124"},"nodeType":"YulFunctionCall","src":"1149:73:124"},"nodeType":"YulIf","src":"1146:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1077:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1088:5:124","type":""}],"src":"1049:196:124"},{"body":{"nodeType":"YulBlock","src":"1367:741:124","statements":[{"body":{"nodeType":"YulBlock","src":"1414:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1423:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1426:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1416:6:124"},"nodeType":"YulFunctionCall","src":"1416:12:124"},"nodeType":"YulExpressionStatement","src":"1416:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1388:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1397:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1384:3:124"},"nodeType":"YulFunctionCall","src":"1384:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1409:3:124","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1380:3:124"},"nodeType":"YulFunctionCall","src":"1380:33:124"},"nodeType":"YulIf","src":"1377:53:124"},{"nodeType":"YulVariableDeclaration","src":"1439:30:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1452:15:124"},"nodeType":"YulFunctionCall","src":"1452:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1443:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1485:5:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1505:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1492:12:124"},"nodeType":"YulFunctionCall","src":"1492:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1478:6:124"},"nodeType":"YulFunctionCall","src":"1478:38:124"},"nodeType":"YulExpressionStatement","src":"1478:38:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1536:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1543:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1532:3:124"},"nodeType":"YulFunctionCall","src":"1532:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1565:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1576:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1561:3:124"},"nodeType":"YulFunctionCall","src":"1561:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1548:12:124"},"nodeType":"YulFunctionCall","src":"1548:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1525:6:124"},"nodeType":"YulFunctionCall","src":"1525:56:124"},"nodeType":"YulExpressionStatement","src":"1525:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1601:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1608:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1597:3:124"},"nodeType":"YulFunctionCall","src":"1597:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1630:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1641:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1626:3:124"},"nodeType":"YulFunctionCall","src":"1626:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1613:12:124"},"nodeType":"YulFunctionCall","src":"1613:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1590:6:124"},"nodeType":"YulFunctionCall","src":"1590:56:124"},"nodeType":"YulExpressionStatement","src":"1590:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1666:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1673:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1662:3:124"},"nodeType":"YulFunctionCall","src":"1662:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1695:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1706:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1691:3:124"},"nodeType":"YulFunctionCall","src":"1691:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1678:12:124"},"nodeType":"YulFunctionCall","src":"1678:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1655:6:124"},"nodeType":"YulFunctionCall","src":"1655:56:124"},"nodeType":"YulExpressionStatement","src":"1655:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1731:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1738:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1727:3:124"},"nodeType":"YulFunctionCall","src":"1727:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1761:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1772:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1757:3:124"},"nodeType":"YulFunctionCall","src":"1757:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1744:12:124"},"nodeType":"YulFunctionCall","src":"1744:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1720:6:124"},"nodeType":"YulFunctionCall","src":"1720:58:124"},"nodeType":"YulExpressionStatement","src":"1720:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1798:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1805:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1794:3:124"},"nodeType":"YulFunctionCall","src":"1794:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1828:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1839:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1824:3:124"},"nodeType":"YulFunctionCall","src":"1824:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1811:12:124"},"nodeType":"YulFunctionCall","src":"1811:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1787:6:124"},"nodeType":"YulFunctionCall","src":"1787:58:124"},"nodeType":"YulExpressionStatement","src":"1787:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1865:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1872:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1861:3:124"},"nodeType":"YulFunctionCall","src":"1861:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1906:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1891:3:124"},"nodeType":"YulFunctionCall","src":"1891:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1878:12:124"},"nodeType":"YulFunctionCall","src":"1878:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1854:6:124"},"nodeType":"YulFunctionCall","src":"1854:58:124"},"nodeType":"YulExpressionStatement","src":"1854:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1932:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1939:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1928:3:124"},"nodeType":"YulFunctionCall","src":"1928:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1968:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1979:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1964:3:124"},"nodeType":"YulFunctionCall","src":"1964:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1945:18:124"},"nodeType":"YulFunctionCall","src":"1945:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1921:6:124"},"nodeType":"YulFunctionCall","src":"1921:64:124"},"nodeType":"YulExpressionStatement","src":"1921:64:124"},{"nodeType":"YulVariableDeclaration","src":"1994:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2004:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1998:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2027:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2034:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2023:3:124"},"nodeType":"YulFunctionCall","src":"2023:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2062:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2073:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2058:3:124"},"nodeType":"YulFunctionCall","src":"2058:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2039:18:124"},"nodeType":"YulFunctionCall","src":"2039:38:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2016:6:124"},"nodeType":"YulFunctionCall","src":"2016:62:124"},"nodeType":"YulExpressionStatement","src":"2016:62:124"},{"nodeType":"YulAssignment","src":"2087:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2097:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2087:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1333:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1344:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1356:6:124","type":""}],"src":"1250:858:124"},{"body":{"nodeType":"YulBlock","src":"2270:162:124","statements":[{"nodeType":"YulAssignment","src":"2280:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2292:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2303:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2288:3:124"},"nodeType":"YulFunctionCall","src":"2288:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2280:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2322:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2333:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2315:6:124"},"nodeType":"YulFunctionCall","src":"2315:25:124"},"nodeType":"YulExpressionStatement","src":"2315:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2360:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2371:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2356:3:124"},"nodeType":"YulFunctionCall","src":"2356:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2376:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2349:6:124"},"nodeType":"YulFunctionCall","src":"2349:34:124"},"nodeType":"YulExpressionStatement","src":"2349:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2403:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2414:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2399:3:124"},"nodeType":"YulFunctionCall","src":"2399:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"2419:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2392:6:124"},"nodeType":"YulFunctionCall","src":"2392:34:124"},"nodeType":"YulExpressionStatement","src":"2392:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2223:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2234:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2242:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2250:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2261:4:124","type":""}],"src":"2113:319:124"},{"body":{"nodeType":"YulBlock","src":"2485:234:124","statements":[{"body":{"nodeType":"YulBlock","src":"2520:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2541:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2544:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2534:6:124"},"nodeType":"YulFunctionCall","src":"2534:88:124"},"nodeType":"YulExpressionStatement","src":"2534:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2642:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2645:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2635:6:124"},"nodeType":"YulFunctionCall","src":"2635:15:124"},"nodeType":"YulExpressionStatement","src":"2635:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2670:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2673:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2663:6:124"},"nodeType":"YulFunctionCall","src":"2663:15:124"},"nodeType":"YulExpressionStatement","src":"2663:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2501:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2508:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2504:3:124"},"nodeType":"YulFunctionCall","src":"2504:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2498:2:124"},"nodeType":"YulFunctionCall","src":"2498:13:124"},"nodeType":"YulIf","src":"2495:193:124"},{"nodeType":"YulAssignment","src":"2697:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2708:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"2711:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2704:3:124"},"nodeType":"YulFunctionCall","src":"2704:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2697:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2468:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"2471:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2477:3:124","type":""}],"src":"2437:282:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 288)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, calldataload(headStart))\n        mstore(add(value, 32), calldataload(add(headStart, 32)))\n        mstore(add(value, 64), calldataload(add(headStart, 64)))\n        mstore(add(value, 96), calldataload(add(headStart, 96)))\n        mstore(add(value, 128), calldataload(add(headStart, 128)))\n        mstore(add(value, 160), calldataload(add(headStart, 160)))\n        mstore(add(value, 192), calldataload(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_address(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address(add(headStart, _1)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"10075":[{"length":32,"start":519}],"10078":[{"length":32,"start":293}],"10080":[{"length":32,"start":457},{"length":32,"start":820}],"10082":[{"length":32,"start":371},{"length":32,"start":787}],"10084":[{"length":32,"start":711},{"length":32,"start":751}],"10086":[{"length":32,"start":673}],"10088":[{"length":32,"start":419}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061011b5760003560e01c8063a5898709116100b2578063bc62690811610081578063d5cd739111610066578063d5cd73911461029f578063f4202409146102c5578063fe5fd6981461022957600080fd5b8063bc62690814610285578063cecced511461028c57600080fd5b8063a589870914610239578063a9c622f814610229578063aa16fe3414610272578063acd786861461028557600080fd5b80633a244adf116100ee5780633a244adf146101ed57806354c365c6146102025780636fb925891461022957806380031e371461023157600080fd5b80630542975c146101205780630b3429a21461017157806314e32da4146101a157806334762ca5146101c7575b600080fd5b6101477f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b604051908152602001610168565b7f0000000000000000000000000000000000000000000000000000000000000000610193565b7f0000000000000000000000000000000000000000000000000000000000000000610193565b6102006101fb366004610367565b600055565b005b6101937f000000000000000000000000000000000000000000000000000000000000000081565b610193600081565b6101936102eb565b6102576102473660046103fa565b6000546001546002549193909250565b60408051938452602084019290925290820152606001610168565b610200610280366004610367565b600255565b6000610193565b61020061029a366004610367565b600155565b7f0000000000000000000000000000000000000000000000000000000000000000610193565b7f0000000000000000000000000000000000000000000000000000000000000000610193565b60007f00000000000000000000000000000000000000000000000000000000000000006103587f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061047f565b610362919061047f565b905090565b60006020828403121561037957600080fd5b5035919050565b604051610120810167ffffffffffffffff811182821017156103cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff811681146103f557600080fd5b919050565b6000610120828403121561040d57600080fd5b610415610380565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015261046160e084016103d1565b60e08201526101006104748185016103d1565b908201529392505050565b600082198211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea26469706673582212200293de1ee4476411ba3b9820dc176bc1e8cf7d4a5c4059f8b162f09014fddb4764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA5898709 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xBC626908 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xD5CD7391 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD5CD7391 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0xF4202409 EQ PUSH2 0x2C5 JUMPI DUP1 PUSH4 0xFE5FD698 EQ PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBC626908 EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0xCECCED51 EQ PUSH2 0x28C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA5898709 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0xA9C622F8 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xAA16FE34 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0xACD78686 EQ PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3A244ADF GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3A244ADF EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0x54C365C6 EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0x6FB92589 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0x80031E37 EQ PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0xB3429A2 EQ PUSH2 0x171 JUMPI DUP1 PUSH4 0x14E32DA4 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x34762CA5 EQ PUSH2 0x1C7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x147 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x168 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH2 0x200 PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0x367 JUMP JUMPDEST PUSH1 0x0 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x193 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x193 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x193 PUSH2 0x2EB JUMP JUMPDEST PUSH2 0x257 PUSH2 0x247 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x168 JUMP JUMPDEST PUSH2 0x200 PUSH2 0x280 CALLDATASIZE PUSH1 0x4 PUSH2 0x367 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH2 0x200 PUSH2 0x29A CALLDATASIZE PUSH1 0x4 PUSH2 0x367 JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH32 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x193 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x358 PUSH32 0x0 PUSH32 0x0 PUSH2 0x47F JUMP JUMPDEST PUSH2 0x362 SWAP2 SWAP1 PUSH2 0x47F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3CB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x415 PUSH2 0x380 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x461 PUSH1 0xE0 DUP5 ADD PUSH2 0x3D1 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x474 DUP2 DUP6 ADD PUSH2 0x3D1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x4B9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP4 0xDE 0x1E 0xE4 SELFBALANCE PUSH5 0x11BA3B9820 0xDC OR PUSH12 0xC1E8CF7D4A5C4059F8B162F0 SWAP1 EQ REVERT 0xDB SELFBALANCE PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"388:3003:71:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;513:58;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;513:58:71;;;;;;;;2376:102;2454:19;2376:102;;;422:25:124;;;410:2;395:18;2376:102:71;276:177:124;2690:98:71;2766:17;2690:98;;2792:119;2883:23;2792:119;;1749:97;;;;;;:::i;:::-;1811:14;:30;1749:97;;;465:44;;;;;1005:62;;1066:1;1005:62;;2915:162;;;:::i;2084:288::-;;;;;;:::i;:::-;2219:21;2312:14;2328:17;;2347:19;;2084:288;;;;;;;;;;2315:25:124;;;2371:2;2356:18;;2349:34;;;;2399:18;;;2392:34;2303:2;2288:18;2084:288:71;2113:319:124;1963:117:71;;;;;;:::i;:::-;2035:19;:40;1963:117;3137:95;3204:7;3137:95;;1850:109;;;;;;:::i;:::-;1918:17;:36;1850:109;2588:98;2664:17;2588:98;;2482:102;2560:19;2482:102;;2915:162;2983:7;3053:19;3005:45;3031:19;3005:23;:45;:::i;:::-;:67;;;;:::i;:::-;2998:74;;2915:162;:::o;458:180:124:-;517:6;570:2;558:9;549:7;545:23;541:32;538:52;;;586:1;583;576:12;538:52;-1:-1:-1;609:23:124;;458:180;-1:-1:-1;458:180:124:o;643:401::-;710:2;704:9;752:3;740:16;;786:18;771:34;;807:22;;;768:62;765:242;;;863:77;860:1;853:88;964:4;961:1;954:15;992:4;989:1;982:15;765:242;1023:2;1016:22;643:401;:::o;1049:196::-;1117:20;;1177:42;1166:54;;1156:65;;1146:93;;1235:1;1232;1225:12;1146:93;1049:196;;;:::o;1250:858::-;1356:6;1409:3;1397:9;1388:7;1384:23;1380:33;1377:53;;;1426:1;1423;1416:12;1377:53;1452:17;;:::i;:::-;1505:9;1492:23;1485:5;1478:38;1576:2;1565:9;1561:18;1548:32;1543:2;1536:5;1532:14;1525:56;1641:2;1630:9;1626:18;1613:32;1608:2;1601:5;1597:14;1590:56;1706:2;1695:9;1691:18;1678:32;1673:2;1666:5;1662:14;1655:56;1772:3;1761:9;1757:19;1744:33;1738:3;1731:5;1727:15;1720:58;1839:3;1828:9;1824:19;1811:33;1805:3;1798:5;1794:15;1787:58;1906:3;1895:9;1891:19;1878:33;1872:3;1865:5;1861:15;1854:58;1945:39;1979:3;1968:9;1964:19;1945:39;:::i;:::-;1939:3;1932:5;1928:15;1921:64;2004:3;2039:38;2073:2;2062:9;2058:18;2039:38;:::i;:::-;2023:14;;;2016:62;2027:5;1250:858;-1:-1:-1;;;1250:858:124:o;2437:282::-;2477:3;2508:1;2504:6;2501:1;2498:13;2495:193;;;2544:77;2541:1;2534:88;2645:4;2642:1;2635:15;2673:4;2670:1;2663:15;2495:193;-1:-1:-1;2704:9:124;;2437:282::o"},"gasEstimates":{"creation":{"codeDepositCost":"253600","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"283","MAX_EXCESS_USAGE_RATIO()":"240","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"262","OPTIMAL_USAGE_RATIO()":"infinite","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"infinite","getBaseStableBorrowRate()":"281","getBaseVariableBorrowRate()":"infinite","getMaxVariableBorrowRate()":"infinite","getStableRateExcessOffset()":"237","getStableRateSlope1()":"infinite","getStableRateSlope2()":"infinite","getVariableRateSlope1()":"infinite","getVariableRateSlope2()":"infinite","setLiquidityRate(uint256)":"22335","setStableBorrowRate(uint256)":"22379","setVariableBorrowRate(uint256)":"22379"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"fe5fd698","MAX_EXCESS_USAGE_RATIO()":"a9c622f8","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"6fb92589","OPTIMAL_USAGE_RATIO()":"54c365c6","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"a5898709","getBaseStableBorrowRate()":"acd78686","getBaseVariableBorrowRate()":"34762ca5","getMaxVariableBorrowRate()":"80031e37","getStableRateExcessOffset()":"bc626908","getStableRateSlope1()":"d5cd7391","getStableRateSlope2()":"14e32da4","getVariableRateSlope1()":"0b3429a2","getVariableRateSlope2()":"f4202409","setLiquidityRate(uint256)":"3a244adf","setStableBorrowRate(uint256)":"cecced51","setVariableBorrowRate(uint256)":"aa16fe34"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"optimalUsageRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"}],\"internalType\":\"struct DataTypes.CalculateInterestRatesParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseStableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateExcessOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"}],\"name\":\"setLiquidityRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"}],\"name\":\"setStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"}],\"name\":\"setVariableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getBaseStableBorrowRate()\":{\"returns\":{\"_0\":\"The base stable borrow rate, expressed in ray\"}},\"getBaseVariableBorrowRate()\":{\"returns\":{\"_0\":\"The base variable borrow rate, expressed in ray\"}},\"getMaxVariableBorrowRate()\":{\"returns\":{\"_0\":\"The maximum variable borrow rate, expressed in ray\"}},\"getStableRateExcessOffset()\":{\"details\":\"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"returns\":{\"_0\":\"The stable rate excess offset, expressed in ray\"}},\"getStableRateSlope1()\":{\"details\":\"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getStableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getVariableRateSlope1()\":{\"details\":\"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}},\"getVariableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\":{\"details\":\"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\",\"return\":\"The max excess stable to total debt ratio, expressed in ray.\",\"returns\":{\"_0\":\"The max excess stable to total debt ratio, expressed in ray.\"}},\"MAX_EXCESS_USAGE_RATIO\":{\"details\":\"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\",\"return\":\"The max excess usage ratio, expressed in ray.\",\"returns\":{\"_0\":\"The max excess usage ratio, expressed in ray.\"}},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\":{\"return\":\"The optimal stable to total debt ratio, expressed in ray.\",\"returns\":{\"_0\":\"The optimal stable to total debt ratio, expressed in ray.\"}},\"OPTIMAL_USAGE_RATIO\":{\"return\":\"The optimal usage ratio, expressed in ray.\",\"returns\":{\"_0\":\"The optimal usage ratio, expressed in ray.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address of the PoolAddressesProvider\"},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the excess stable debt ratio above the optimal.\"},\"MAX_EXCESS_USAGE_RATIO()\":{\"notice\":\"Returns the excess usage ratio above the optimal.\"},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the optimal stable to total debt ratio of the reserve.\"},\"OPTIMAL_USAGE_RATIO()\":{\"notice\":\"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\"},\"getBaseStableBorrowRate()\":{\"notice\":\"Returns the base stable borrow rate\"},\"getBaseVariableBorrowRate()\":{\"notice\":\"Returns the base variable borrow rate\"},\"getMaxVariableBorrowRate()\":{\"notice\":\"Returns the maximum variable borrow rate\"},\"getStableRateExcessOffset()\":{\"notice\":\"Returns the stable rate excess offset\"},\"getStableRateSlope1()\":{\"notice\":\"Returns the stable rate slope below optimal usage ratio\"},\"getStableRateSlope2()\":{\"notice\":\"Returns the stable rate slope above optimal usage ratio\"},\"getVariableRateSlope1()\":{\"notice\":\"Returns the variable rate slope below optimal usage ratio\"},\"getVariableRateSlope2()\":{\"notice\":\"Returns the variable rate slope above optimal usage ratio\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/tests/MockReserveInterestRateStrategy.sol\":\"MockReserveInterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IDefaultInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IDefaultInterestRateStrategy\\n * @author Aave\\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\\n */\\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\\n  /**\\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\\n   * @return The optimal usage ratio, expressed in ray.\\n   */\\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\\n   * @return The optimal stable to total debt ratio, expressed in ray.\\n   */\\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess usage ratio above the optimal.\\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\\n   * @return The max excess usage ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess stable debt ratio above the optimal.\\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\\n   * @return The max excess stable to total debt ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the variable rate slope below optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the variable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope below optimal usage ratio\\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate excess offset\\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n   * @return The stable rate excess offset, expressed in ray\\n   */\\n  function getStableRateExcessOffset() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base stable borrow rate\\n   * @return The base stable borrow rate, expressed in ray\\n   */\\n  function getBaseStableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base variable borrow rate\\n   * @return The base variable borrow rate, expressed in ray\\n   */\\n  function getBaseVariableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the maximum variable borrow rate\\n   * @return The maximum variable borrow rate, expressed in ray\\n   */\\n  function getMaxVariableBorrowRate() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/tests/MockReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {WadRayMath} from '../../protocol/libraries/math/WadRayMath.sol';\\nimport {DataTypes} from '../../protocol/libraries/types/DataTypes.sol';\\n\\ncontract MockReserveInterestRateStrategy is IDefaultInterestRateStrategy {\\n  uint256 public immutable OPTIMAL_USAGE_RATIO;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n  uint256 internal immutable _baseVariableBorrowRate;\\n  uint256 internal immutable _variableRateSlope1;\\n  uint256 internal immutable _variableRateSlope2;\\n  uint256 internal immutable _stableRateSlope1;\\n  uint256 internal immutable _stableRateSlope2;\\n\\n  // Not used, only defined for interface compatibility\\n  uint256 public constant MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = 0;\\n  uint256 public constant MAX_EXCESS_USAGE_RATIO = 0;\\n  uint256 public constant OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = 0;\\n\\n  uint256 internal _liquidityRate;\\n  uint256 internal _stableBorrowRate;\\n  uint256 internal _variableBorrowRate;\\n\\n  constructor(\\n    IPoolAddressesProvider provider,\\n    uint256 optimalUsageRatio,\\n    uint256 baseVariableBorrowRate,\\n    uint256 variableRateSlope1,\\n    uint256 variableRateSlope2,\\n    uint256 stableRateSlope1,\\n    uint256 stableRateSlope2\\n  ) {\\n    OPTIMAL_USAGE_RATIO = optimalUsageRatio;\\n    ADDRESSES_PROVIDER = provider;\\n    _baseVariableBorrowRate = baseVariableBorrowRate;\\n    _variableRateSlope1 = variableRateSlope1;\\n    _variableRateSlope2 = variableRateSlope2;\\n    _stableRateSlope1 = stableRateSlope1;\\n    _stableRateSlope2 = stableRateSlope2;\\n  }\\n\\n  function setLiquidityRate(uint256 liquidityRate) public {\\n    _liquidityRate = liquidityRate;\\n  }\\n\\n  function setStableBorrowRate(uint256 stableBorrowRate) public {\\n    _stableBorrowRate = stableBorrowRate;\\n  }\\n\\n  function setVariableBorrowRate(uint256 variableBorrowRate) public {\\n    _variableBorrowRate = variableBorrowRate;\\n  }\\n\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory\\n  )\\n    external\\n    view\\n    override\\n    returns (uint256 liquidityRate, uint256 stableBorrowRate, uint256 variableBorrowRate)\\n  {\\n    return (_liquidityRate, _stableBorrowRate, _variableBorrowRate);\\n  }\\n\\n  function getVariableRateSlope1() external view returns (uint256) {\\n    return _variableRateSlope1;\\n  }\\n\\n  function getVariableRateSlope2() external view returns (uint256) {\\n    return _variableRateSlope2;\\n  }\\n\\n  function getStableRateSlope1() external view returns (uint256) {\\n    return _stableRateSlope1;\\n  }\\n\\n  function getStableRateSlope2() external view returns (uint256) {\\n    return _stableRateSlope2;\\n  }\\n\\n  function getBaseVariableBorrowRate() external view override returns (uint256) {\\n    return _baseVariableBorrowRate;\\n  }\\n\\n  function getMaxVariableBorrowRate() external view override returns (uint256) {\\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\\n  }\\n\\n  // Not used, only defined for interface compatibility\\n  function getBaseStableBorrowRate() external pure override returns (uint256) {\\n    return 0;\\n  }\\n\\n  // Not used, only defined for interface compatibility\\n  function getStableRateExcessOffset() external pure override returns (uint256) {\\n    return 0;\\n  }\\n}\\n\",\"keccak256\":\"0xaf18efc3488f2d7f1265f5869c058273cca55768b49d210139ebc2b890e3643d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10099,"contract":"contracts/mocks/tests/MockReserveInterestRateStrategy.sol:MockReserveInterestRateStrategy","label":"_liquidityRate","offset":0,"slot":"0","type":"t_uint256"},{"astId":10101,"contract":"contracts/mocks/tests/MockReserveInterestRateStrategy.sol:MockReserveInterestRateStrategy","label":"_stableBorrowRate","offset":0,"slot":"1","type":"t_uint256"},{"astId":10103,"contract":"contracts/mocks/tests/MockReserveInterestRateStrategy.sol:MockReserveInterestRateStrategy","label":"_variableBorrowRate","offset":0,"slot":"2","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address of the PoolAddressesProvider"},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the excess stable debt ratio above the optimal."},"MAX_EXCESS_USAGE_RATIO()":{"notice":"Returns the excess usage ratio above the optimal."},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the optimal stable to total debt ratio of the reserve."},"OPTIMAL_USAGE_RATIO()":{"notice":"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates."},"getBaseStableBorrowRate()":{"notice":"Returns the base stable borrow rate"},"getBaseVariableBorrowRate()":{"notice":"Returns the base variable borrow rate"},"getMaxVariableBorrowRate()":{"notice":"Returns the maximum variable borrow rate"},"getStableRateExcessOffset()":{"notice":"Returns the stable rate excess offset"},"getStableRateSlope1()":{"notice":"Returns the stable rate slope below optimal usage ratio"},"getStableRateSlope2()":{"notice":"Returns the stable rate slope above optimal usage ratio"},"getVariableRateSlope1()":{"notice":"Returns the variable rate slope below optimal usage ratio"},"getVariableRateSlope2()":{"notice":"Returns the variable rate slope above optimal usage ratio"}},"version":1}}},"contracts/mocks/tests/WadRayMathWrapper.sol":{"WadRayMathWrapper":{"abi":[{"inputs":[],"name":"halfRay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"halfWad","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"rayDiv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"rayMul","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"rayToWad","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"wad","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"wadDiv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"wadMul","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"wadToRay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506103a5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637df38c5b11610076578063d2e305851161005b578063d2e3058514610153578063e304e1d314610166578063e57b6d3b1461017457600080fd5b80637df38c5b146101325780639c34d8801461014057600080fd5b806329cb5aa4116100a757806329cb5aa4146100fa578063416a8b201461010d578063761fdad61461011f57600080fd5b806310de27b9146100c35780631fa89fc6146100e8575b600080fd5b6100d66100d1366004610334565b610187565b60405190815260200160405180910390f35b6b019d971e4fe8401e740000006100d6565b6100d6610108366004610334565b610198565b6b033b2e3c9fd0803ce80000006100d6565b6100d661012d36600461034d565b6101a3565b670de0b6b3a76400006100d6565b6100d661014e36600461034d565b6101b6565b6100d661016136600461034d565b6101c2565b6706f05b59d3b200006100d6565b6100d661018236600461034d565b6101ce565b6000610192826101da565b92915050565b6000610192826101f5565b60006101af8383610218565b9392505050565b60006101af8383610267565b60006101af83836102a6565b60006101af83836102fd565b633b9aca0081810290810482146101f057600080fd5b919050565b633b9aca00808204908206631dcd65008110610212576001820191505b50919050565b600081157ffffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4dffff8390048411151761024d57600080fd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b600081156b033b2e3c9fd0803ce80000006002840419048411171561028b57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff839004841115176102db57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60008115670de0b6b3a76400006002840419048411171561031d57600080fd5b50670de0b6b3a76400009190910260028204010490565b60006020828403121561034657600080fd5b5035919050565b6000806040838503121561036057600080fd5b5050803592602090910135915056fea26469706673582212201a46ee5caa643ebbd99cd02ba12c2427dbc3a5910e1b08702c58747f0ccb640d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A5 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7DF38C5B GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xD2E30585 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xD2E30585 EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0xE304E1D3 EQ PUSH2 0x166 JUMPI DUP1 PUSH4 0xE57B6D3B EQ PUSH2 0x174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7DF38C5B EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x9C34D880 EQ PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x29CB5AA4 GT PUSH2 0xA7 JUMPI DUP1 PUSH4 0x29CB5AA4 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x416A8B20 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x761FDAD6 EQ PUSH2 0x11F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x10DE27B9 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x1FA89FC6 EQ PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0xD1 CALLDATASIZE PUSH1 0x4 PUSH2 0x334 JUMP JUMPDEST PUSH2 0x187 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH12 0x19D971E4FE8401E74000000 PUSH2 0xD6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x334 JUMP JUMPDEST PUSH2 0x198 JUMP JUMPDEST PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0xD6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x12D CALLDATASIZE PUSH1 0x4 PUSH2 0x34D JUMP JUMPDEST PUSH2 0x1A3 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH2 0xD6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x14E CALLDATASIZE PUSH1 0x4 PUSH2 0x34D JUMP JUMPDEST PUSH2 0x1B6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x34D JUMP JUMPDEST PUSH2 0x1C2 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 PUSH2 0xD6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x182 CALLDATASIZE PUSH1 0x4 PUSH2 0x34D JUMP JUMPDEST PUSH2 0x1CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x192 DUP3 PUSH2 0x1DA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x192 DUP3 PUSH2 0x1F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF DUP4 DUP4 PUSH2 0x218 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF DUP4 DUP4 PUSH2 0x267 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF DUP4 DUP4 PUSH2 0x2A6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF DUP4 DUP4 PUSH2 0x2FD JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP1 DUP3 DIV SWAP1 DUP3 MOD PUSH4 0x1DCD6500 DUP2 LT PUSH2 0x212 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4DFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 MUL PUSH8 0x6F05B59D3B20000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE CHAINID 0xEE 0x5C 0xAA PUSH5 0x3EBBD99CD0 0x2B LOG1 0x2C 0x24 0x27 0xDB 0xC3 0xA5 SWAP2 0xE SHL ADDMOD PUSH17 0x2C58747F0CCB640D64736F6C634300080A STOP CALLER ","sourceMap":"136:1029:72:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@halfRay_10303":{"entryPoint":null,"id":10303,"parameterSlots":0,"returnSlots":1},"@halfWad_10312":{"entryPoint":null,"id":10312,"parameterSlots":0,"returnSlots":1},"@rayDiv_10376":{"entryPoint":438,"id":10376,"parameterSlots":2,"returnSlots":1},"@rayDiv_23792":{"entryPoint":615,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_10360":{"entryPoint":450,"id":10360,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":678,"id":23780,"parameterSlots":2,"returnSlots":1},"@rayToWad_10389":{"entryPoint":408,"id":10389,"parameterSlots":1,"returnSlots":1},"@rayToWad_23802":{"entryPoint":501,"id":23802,"parameterSlots":1,"returnSlots":1},"@ray_10294":{"entryPoint":null,"id":10294,"parameterSlots":0,"returnSlots":1},"@wadDiv_10344":{"entryPoint":462,"id":10344,"parameterSlots":2,"returnSlots":1},"@wadDiv_23768":{"entryPoint":765,"id":23768,"parameterSlots":2,"returnSlots":1},"@wadMul_10328":{"entryPoint":419,"id":10328,"parameterSlots":2,"returnSlots":1},"@wadMul_23756":{"entryPoint":536,"id":23756,"parameterSlots":2,"returnSlots":1},"@wadToRay_10402":{"entryPoint":391,"id":10402,"parameterSlots":1,"returnSlots":1},"@wadToRay_23812":{"entryPoint":474,"id":23812,"parameterSlots":1,"returnSlots":1},"@wad_10285":{"entryPoint":null,"id":10285,"parameterSlots":0,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":820,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":845,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:631:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:124"},"nodeType":"YulFunctionCall","src":"101:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:124"},"nodeType":"YulFunctionCall","src":"97:32:124"},"nodeType":"YulIf","src":"94:52:124"},{"nodeType":"YulAssignment","src":"155:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"178:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"165:12:124"},"nodeType":"YulFunctionCall","src":"165:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"155:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:124","type":""}],"src":"14:180:124"},{"body":{"nodeType":"YulBlock","src":"300:76:124","statements":[{"nodeType":"YulAssignment","src":"310:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"322:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"333:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:124"},"nodeType":"YulFunctionCall","src":"318:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"310:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"352:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"363:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"345:6:124"},"nodeType":"YulFunctionCall","src":"345:25:124"},"nodeType":"YulExpressionStatement","src":"345:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"269:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"280:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"291:4:124","type":""}],"src":"199:177:124"},{"body":{"nodeType":"YulBlock","src":"468:161:124","statements":[{"body":{"nodeType":"YulBlock","src":"514:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"523:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"526:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"516:6:124"},"nodeType":"YulFunctionCall","src":"516:12:124"},"nodeType":"YulExpressionStatement","src":"516:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"489:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"498:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"485:3:124"},"nodeType":"YulFunctionCall","src":"485:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"510:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"481:3:124"},"nodeType":"YulFunctionCall","src":"481:32:124"},"nodeType":"YulIf","src":"478:52:124"},{"nodeType":"YulAssignment","src":"539:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"562:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"549:12:124"},"nodeType":"YulFunctionCall","src":"549:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"539:6:124"}]},{"nodeType":"YulAssignment","src":"581:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"608:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"619:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"604:3:124"},"nodeType":"YulFunctionCall","src":"604:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"591:12:124"},"nodeType":"YulFunctionCall","src":"591:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"581:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"426:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"437:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"449:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"457:6:124","type":""}],"src":"381:248:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100be5760003560e01c80637df38c5b11610076578063d2e305851161005b578063d2e3058514610153578063e304e1d314610166578063e57b6d3b1461017457600080fd5b80637df38c5b146101325780639c34d8801461014057600080fd5b806329cb5aa4116100a757806329cb5aa4146100fa578063416a8b201461010d578063761fdad61461011f57600080fd5b806310de27b9146100c35780631fa89fc6146100e8575b600080fd5b6100d66100d1366004610334565b610187565b60405190815260200160405180910390f35b6b019d971e4fe8401e740000006100d6565b6100d6610108366004610334565b610198565b6b033b2e3c9fd0803ce80000006100d6565b6100d661012d36600461034d565b6101a3565b670de0b6b3a76400006100d6565b6100d661014e36600461034d565b6101b6565b6100d661016136600461034d565b6101c2565b6706f05b59d3b200006100d6565b6100d661018236600461034d565b6101ce565b6000610192826101da565b92915050565b6000610192826101f5565b60006101af8383610218565b9392505050565b60006101af8383610267565b60006101af83836102a6565b60006101af83836102fd565b633b9aca0081810290810482146101f057600080fd5b919050565b633b9aca00808204908206631dcd65008110610212576001820191505b50919050565b600081157ffffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4dffff8390048411151761024d57600080fd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b600081156b033b2e3c9fd0803ce80000006002840419048411171561028b57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff839004841115176102db57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60008115670de0b6b3a76400006002840419048411171561031d57600080fd5b50670de0b6b3a76400009190910260028204010490565b60006020828403121561034657600080fd5b5035919050565b6000806040838503121561036057600080fd5b5050803592602090910135915056fea26469706673582212201a46ee5caa643ebbd99cd02ba12c2427dbc3a5910e1b08702c58747f0ccb640d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7DF38C5B GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xD2E30585 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xD2E30585 EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0xE304E1D3 EQ PUSH2 0x166 JUMPI DUP1 PUSH4 0xE57B6D3B EQ PUSH2 0x174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7DF38C5B EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x9C34D880 EQ PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x29CB5AA4 GT PUSH2 0xA7 JUMPI DUP1 PUSH4 0x29CB5AA4 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x416A8B20 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x761FDAD6 EQ PUSH2 0x11F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x10DE27B9 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x1FA89FC6 EQ PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0xD1 CALLDATASIZE PUSH1 0x4 PUSH2 0x334 JUMP JUMPDEST PUSH2 0x187 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH12 0x19D971E4FE8401E74000000 PUSH2 0xD6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x334 JUMP JUMPDEST PUSH2 0x198 JUMP JUMPDEST PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0xD6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x12D CALLDATASIZE PUSH1 0x4 PUSH2 0x34D JUMP JUMPDEST PUSH2 0x1A3 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH2 0xD6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x14E CALLDATASIZE PUSH1 0x4 PUSH2 0x34D JUMP JUMPDEST PUSH2 0x1B6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x34D JUMP JUMPDEST PUSH2 0x1C2 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 PUSH2 0xD6 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x182 CALLDATASIZE PUSH1 0x4 PUSH2 0x34D JUMP JUMPDEST PUSH2 0x1CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x192 DUP3 PUSH2 0x1DA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x192 DUP3 PUSH2 0x1F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF DUP4 DUP4 PUSH2 0x218 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF DUP4 DUP4 PUSH2 0x267 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF DUP4 DUP4 PUSH2 0x2A6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF DUP4 DUP4 PUSH2 0x2FD JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP1 DUP3 DIV SWAP1 DUP3 MOD PUSH4 0x1DCD6500 DUP2 LT PUSH2 0x212 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4DFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 MUL PUSH8 0x6F05B59D3B20000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE CHAINID 0xEE 0x5C 0xAA PUSH5 0x3EBBD99CD0 0x2B LOG1 0x2C 0x24 0x27 0xDB 0xC3 0xA5 SWAP2 0xE SHL ADDMOD PUSH17 0x2C58747F0CCB640D64736F6C634300080A STOP CALLER ","sourceMap":"136:1029:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1064:99;;;;;;:::i;:::-;;:::i;:::-;;;345:25:124;;;333:2;318:18;1064:99:72;;;;;;;329:86;749:6:107;329:86:72;;961:99;;;;;;:::i;:::-;;:::i;248:77::-;704:4:107;248:77:72;;509:109;;;;;;:::i;:::-;;:::i;167:77::-;616:4:107;167:77:72;;848:109;;;;;;:::i;:::-;;:::i;735:::-;;;;;;:::i;:::-;;:::i;419:86::-;661:6:107;419:86:72;;622:109;;;;;;:::i;:::-;;:::i;1064:99::-;1114:7;1136:22;1156:1;1136:19;:22::i;:::-;1129:29;1064:99;-1:-1:-1;;1064:99:72:o;961:::-;1011:7;1033:22;1053:1;1033:19;:22::i;509:109::-;568:7;590:23;608:1;611;590:17;:23::i;:::-;583:30;509:109;-1:-1:-1;;;509:109:72:o;848:::-;907:7;929:23;947:1;950;929:17;:23::i;735:109::-;794:7;816:23;834:1;837;816:17;:23::i;622:109::-;681:7;703:23;721:1;724;703:17;:23::i;3901:247:107:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;3422:254::-;3520:13;3513:21;;;;3558;;3610;3596:36;;3586:80;;3656:1;3653;3649:9;3644:14;;3586:80;;3422:254;;;:::o;1075:319::-;1136:9;1249;;1277:21;1273:29;;;1267:36;;1260:44;1246:59;1236:101;;1327:1;1324;1317:12;1236:101;-1:-1:-1;1380:3:107;1358:9;;1369:8;1354:24;1350:34;;1075:319::o;2840:322::-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;2253:319::-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;1660:322::-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:107;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;14:180:124:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:124;;14:180;-1:-1:-1;14:180:124:o;381:248::-;449:6;457;510:2;498:9;489:7;485:23;481:32;478:52;;;526:1;523;516:12;478:52;-1:-1:-1;;549:23:124;;;619:2;604:18;;;591:32;;-1:-1:-1;381:248:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"186600","executionCost":"232","totalCost":"186832"},"external":{"halfRay()":"226","halfWad()":"224","ray()":"225","rayDiv(uint256,uint256)":"477","rayMul(uint256,uint256)":"432","rayToWad(uint256)":"401","wad()":"203","wadDiv(uint256,uint256)":"498","wadMul(uint256,uint256)":"477","wadToRay(uint256)":"383"}},"methodIdentifiers":{"halfRay()":"1fa89fc6","halfWad()":"e304e1d3","ray()":"416a8b20","rayDiv(uint256,uint256)":"9c34d880","rayMul(uint256,uint256)":"d2e30585","rayToWad(uint256)":"29cb5aa4","wad()":"7df38c5b","wadDiv(uint256,uint256)":"e57b6d3b","wadMul(uint256,uint256)":"761fdad6","wadToRay(uint256)":"10de27b9"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"halfRay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"halfWad\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ray\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"rayDiv\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"rayMul\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"rayToWad\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wad\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"wadDiv\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"wadMul\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"wadToRay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/tests/WadRayMathWrapper.sol\":\"WadRayMathWrapper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/tests/WadRayMathWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from '../../protocol/libraries/math/WadRayMath.sol';\\n\\ncontract WadRayMathWrapper {\\n  function wad() public pure returns (uint256) {\\n    return WadRayMath.WAD;\\n  }\\n\\n  function ray() public pure returns (uint256) {\\n    return WadRayMath.RAY;\\n  }\\n\\n  function halfRay() public pure returns (uint256) {\\n    return WadRayMath.HALF_RAY;\\n  }\\n\\n  function halfWad() public pure returns (uint256) {\\n    return WadRayMath.HALF_WAD;\\n  }\\n\\n  function wadMul(uint256 a, uint256 b) public pure returns (uint256) {\\n    return WadRayMath.wadMul(a, b);\\n  }\\n\\n  function wadDiv(uint256 a, uint256 b) public pure returns (uint256) {\\n    return WadRayMath.wadDiv(a, b);\\n  }\\n\\n  function rayMul(uint256 a, uint256 b) public pure returns (uint256) {\\n    return WadRayMath.rayMul(a, b);\\n  }\\n\\n  function rayDiv(uint256 a, uint256 b) public pure returns (uint256) {\\n    return WadRayMath.rayDiv(a, b);\\n  }\\n\\n  function rayToWad(uint256 a) public pure returns (uint256) {\\n    return WadRayMath.rayToWad(a);\\n  }\\n\\n  function wadToRay(uint256 a) public pure returns (uint256) {\\n    return WadRayMath.wadToRay(a);\\n  }\\n}\\n\",\"keccak256\":\"0xda70f5bc1069fbc243c8954732e042d7adc23ffa315cfe1c9cffcc2a4e5153e7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/tokens/MintableDelegationERC20.sol":{"MintableDelegationERC20":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegateeAddress","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delegatee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"ERC20 minting logic with delegation","kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"mint(uint256)":{"details":"Function to mint tokens","params":{"value":"The amount of tokens to mint."},"returns":{"_0":"A boolean that indicates if the operation was successful."}},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."}},"title":"MintableDelegationERC20","version":1},"evm":{"bytecode":{"functionDebugData":{"@_10434":{"entryPoint":null,"id":10434,"parameterSlots":3,"returnSlots":0},"@_828":{"entryPoint":null,"id":828,"parameterSlots":2,"returnSlots":0},"@_setupDecimals_1267":{"entryPoint":null,"id":1267,"parameterSlots":1,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":314,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory":{"entryPoint":497,"id":null,"parameterSlots":2,"returnSlots":3},"extract_byte_array_length":{"entryPoint":630,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":292,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2135:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:124"},"nodeType":"YulFunctionCall","src":"66:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:124"},"nodeType":"YulFunctionCall","src":"56:31:124"},"nodeType":"YulExpressionStatement","src":"56:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:15:124"},"nodeType":"YulExpressionStatement","src":"96:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:124"},"nodeType":"YulFunctionCall","src":"120:15:124"},"nodeType":"YulExpressionStatement","src":"120:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:124"},{"body":{"nodeType":"YulBlock","src":"210:821:124","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:124"},"nodeType":"YulFunctionCall","src":"261:12:124"},"nodeType":"YulExpressionStatement","src":"261:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:124"},"nodeType":"YulFunctionCall","src":"234:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:124"},"nodeType":"YulFunctionCall","src":"230:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:124"},"nodeType":"YulFunctionCall","src":"223:35:124"},"nodeType":"YulIf","src":"220:55:124"},{"nodeType":"YulVariableDeclaration","src":"284:23:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:124"},"nodeType":"YulFunctionCall","src":"294:13:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:124"},"nodeType":"YulFunctionCall","src":"330:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:124"},"nodeType":"YulFunctionCall","src":"326:18:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:124"},"nodeType":"YulFunctionCall","src":"369:18:124"},"nodeType":"YulExpressionStatement","src":"369:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:124"},"nodeType":"YulFunctionCall","src":"356:10:124"},"nodeType":"YulIf","src":"353:36:124"},{"nodeType":"YulVariableDeclaration","src":"398:17:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:124"},"nodeType":"YulFunctionCall","src":"408:7:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:124"},"nodeType":"YulFunctionCall","src":"438:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:124"},"nodeType":"YulFunctionCall","src":"498:13:124"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:124"},"nodeType":"YulFunctionCall","src":"494:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:124"},"nodeType":"YulFunctionCall","src":"490:31:124"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:124"},"nodeType":"YulFunctionCall","src":"486:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:124"},"nodeType":"YulFunctionCall","src":"474:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:124"},"nodeType":"YulFunctionCall","src":"588:18:124"},"nodeType":"YulExpressionStatement","src":"588:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:124"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:124"},"nodeType":"YulFunctionCall","src":"542:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:124"},"nodeType":"YulFunctionCall","src":"562:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:124"},"nodeType":"YulFunctionCall","src":"539:46:124"},"nodeType":"YulIf","src":"536:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:124"},"nodeType":"YulFunctionCall","src":"617:22:124"},"nodeType":"YulExpressionStatement","src":"617:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:124"},"nodeType":"YulFunctionCall","src":"648:18:124"},"nodeType":"YulExpressionStatement","src":"648:18:124"},{"nodeType":"YulVariableDeclaration","src":"675:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:124","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:124"},"nodeType":"YulFunctionCall","src":"737:12:124"},"nodeType":"YulExpressionStatement","src":"737:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:124"},"nodeType":"YulFunctionCall","src":"708:15:124"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:124"},"nodeType":"YulFunctionCall","src":"704:24:124"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:124"},"nodeType":"YulFunctionCall","src":"701:33:124"},"nodeType":"YulIf","src":"698:53:124"},{"nodeType":"YulVariableDeclaration","src":"760:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:14:124"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:124"},"nodeType":"YulFunctionCall","src":"846:23:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:124"},"nodeType":"YulFunctionCall","src":"881:14:124"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:124"},"nodeType":"YulFunctionCall","src":"877:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:124"},"nodeType":"YulFunctionCall","src":"871:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:124"},"nodeType":"YulFunctionCall","src":"839:63:124"},"nodeType":"YulExpressionStatement","src":"839:63:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:124"},"nodeType":"YulFunctionCall","src":"787:9:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:124","statements":[{"nodeType":"YulAssignment","src":"799:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:124"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:124"},"nodeType":"YulFunctionCall","src":"804:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:124","statements":[]},"src":"779:133:124"},{"body":{"nodeType":"YulBlock","src":"942:59:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"971:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"979:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:124"},"nodeType":"YulFunctionCall","src":"967:15:124"},{"name":"_4","nodeType":"YulIdentifier","src":"984:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:124"},"nodeType":"YulFunctionCall","src":"963:24:124"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"956:6:124"},"nodeType":"YulFunctionCall","src":"956:35:124"},"nodeType":"YulExpressionStatement","src":"956:35:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"927:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"930:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"924:2:124"},"nodeType":"YulFunctionCall","src":"924:9:124"},"nodeType":"YulIf","src":"921:80:124"},{"nodeType":"YulAssignment","src":"1010:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1019:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1010:5:124"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:124","type":""}],"src":"146:885:124"},{"body":{"nodeType":"YulBlock","src":"1169:579:124","statements":[{"body":{"nodeType":"YulBlock","src":"1215:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1224:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1227:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1217:6:124"},"nodeType":"YulFunctionCall","src":"1217:12:124"},"nodeType":"YulExpressionStatement","src":"1217:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1190:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1186:3:124"},"nodeType":"YulFunctionCall","src":"1186:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1211:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1182:3:124"},"nodeType":"YulFunctionCall","src":"1182:32:124"},"nodeType":"YulIf","src":"1179:52:124"},{"nodeType":"YulVariableDeclaration","src":"1240:30:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1260:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1254:5:124"},"nodeType":"YulFunctionCall","src":"1254:16:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1244:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1279:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1297:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1301:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1293:3:124"},"nodeType":"YulFunctionCall","src":"1293:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1305:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1289:3:124"},"nodeType":"YulFunctionCall","src":"1289:18:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1283:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1334:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1343:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1346:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1336:6:124"},"nodeType":"YulFunctionCall","src":"1336:12:124"},"nodeType":"YulExpressionStatement","src":"1336:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1322:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1330:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1319:2:124"},"nodeType":"YulFunctionCall","src":"1319:14:124"},"nodeType":"YulIf","src":"1316:34:124"},{"nodeType":"YulAssignment","src":"1359:71:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1402:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1413:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1398:3:124"},"nodeType":"YulFunctionCall","src":"1398:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1422:7:124"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1369:28:124"},"nodeType":"YulFunctionCall","src":"1369:61:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1359:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1439:41:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1465:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1476:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1461:3:124"},"nodeType":"YulFunctionCall","src":"1461:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1455:5:124"},"nodeType":"YulFunctionCall","src":"1455:25:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1443:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1509:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1518:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1521:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1511:6:124"},"nodeType":"YulFunctionCall","src":"1511:12:124"},"nodeType":"YulExpressionStatement","src":"1511:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1495:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1505:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1492:2:124"},"nodeType":"YulFunctionCall","src":"1492:16:124"},"nodeType":"YulIf","src":"1489:36:124"},{"nodeType":"YulAssignment","src":"1534:73:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1577:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1588:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1573:3:124"},"nodeType":"YulFunctionCall","src":"1573:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1599:7:124"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1544:28:124"},"nodeType":"YulFunctionCall","src":"1544:63:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1534:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1616:38:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1639:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1650:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1635:3:124"},"nodeType":"YulFunctionCall","src":"1635:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1629:5:124"},"nodeType":"YulFunctionCall","src":"1629:25:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1620:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1702:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1711:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1714:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1704:6:124"},"nodeType":"YulFunctionCall","src":"1704:12:124"},"nodeType":"YulExpressionStatement","src":"1704:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1676:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1687:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1694:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1683:3:124"},"nodeType":"YulFunctionCall","src":"1683:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1673:2:124"},"nodeType":"YulFunctionCall","src":"1673:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1666:6:124"},"nodeType":"YulFunctionCall","src":"1666:35:124"},"nodeType":"YulIf","src":"1663:55:124"},{"nodeType":"YulAssignment","src":"1727:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1737:5:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1727:6:124"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1119:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1130:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1142:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1150:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1158:6:124","type":""}],"src":"1036:712:124"},{"body":{"nodeType":"YulBlock","src":"1808:325:124","statements":[{"nodeType":"YulAssignment","src":"1818:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1832:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1835:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1828:3:124"},"nodeType":"YulFunctionCall","src":"1828:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1818:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1849:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1879:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"1885:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1875:3:124"},"nodeType":"YulFunctionCall","src":"1875:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"1853:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1926:31:124","statements":[{"nodeType":"YulAssignment","src":"1928:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1942:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1950:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1938:3:124"},"nodeType":"YulFunctionCall","src":"1938:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1928:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1906:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1899:6:124"},"nodeType":"YulFunctionCall","src":"1899:26:124"},"nodeType":"YulIf","src":"1896:61:124"},{"body":{"nodeType":"YulBlock","src":"2016:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2037:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2044:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2049:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2040:3:124"},"nodeType":"YulFunctionCall","src":"2040:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2030:6:124"},"nodeType":"YulFunctionCall","src":"2030:31:124"},"nodeType":"YulExpressionStatement","src":"2030:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2081:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2084:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2074:6:124"},"nodeType":"YulFunctionCall","src":"2074:15:124"},"nodeType":"YulExpressionStatement","src":"2074:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2109:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2112:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2102:6:124"},"nodeType":"YulFunctionCall","src":"2102:15:124"},"nodeType":"YulExpressionStatement","src":"2102:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1972:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1995:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2003:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1992:2:124"},"nodeType":"YulFunctionCall","src":"1992:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1969:2:124"},"nodeType":"YulFunctionCall","src":"1969:38:124"},"nodeType":"YulIf","src":"1966:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1788:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1797:6:124","type":""}],"src":"1753:380:124"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let value := mload(add(headStart, 64))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value2 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162000f5738038062000f578339810160408190526200003491620001f1565b8251839083906200004d9060039060208501906200007e565b508051620000639060049060208401906200007e565b50506005805460ff191660ff841617905550505050620002b3565b8280546200008c9062000276565b90600052602060002090601f016020900481019282620000b05760008555620000fb565b82601f10620000cb57805160ff1916838001178555620000fb565b82800160010185558215620000fb579182015b82811115620000fb578251825591602001919060010190620000de565b50620001099291506200010d565b5090565b5b808211156200010957600081556001016200010e565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014c57600080fd5b81516001600160401b038082111562000169576200016962000124565b604051601f8301601f19908116603f0116810190828211818310171562000194576200019462000124565b81604052838152602092508683858801011115620001b157600080fd5b600091505b83821015620001d55785820183015181830184015290820190620001b6565b83821115620001e75760008385830101525b9695505050505050565b6000806000606084860312156200020757600080fd5b83516001600160401b03808211156200021f57600080fd5b6200022d878388016200013a565b945060208601519150808211156200024457600080fd5b5062000253868287016200013a565b925050604084015160ff811681146200026b57600080fd5b809150509250925092565b600181811c908216806200028b57607f821691505b60208210811415620002ad57634e487b7160e01b600052602260045260246000fd5b50919050565b610c9480620002c36000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635c19a95c1161008c578063a0712d6811610066578063a0712d6814610261578063a457c2d714610274578063a9059cbb14610287578063dd62ed3e1461029a57600080fd5b80635c19a95c146101c757806370a082311461022357806395d89b411461025957600080fd5b80631e31d053116100c85780631e31d0531461014257806323b872dd1461018c578063313ce5671461019f57806339509351146101b457600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f76102e0565b6040516101049190610a27565b60405180910390f35b61012061011b366004610ac3565b610372565b6040519015158152602001610104565b6002545b604051908152602001610104565b60055461016790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b61012061019a366004610aed565b610389565b60055460405160ff9091168152602001610104565b6101206101c2366004610ac3565b6103ff565b6102216101d5366004610b29565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b005b610134610231366004610b29565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100f7610442565b61012061026f366004610b4b565b610451565b610120610282366004610ac3565b610465565b610120610295366004610ac3565b6104c1565b6101346102a8366004610b64565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102ef90610b97565b80601f016020809104026020016040519081016040528092919081815260200182805461031b90610b97565b80156103685780601f1061033d57610100808354040283529160200191610368565b820191906000526020600020905b81548152906001019060200180831161034b57829003601f168201915b5050505050905090565b600061037f3384846104ce565b5060015b92915050565b6000610396848484610687565b6103f584336103f085604051806060016040528060288152602001610c126028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906108b1565b6104ce565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161037f9185906103f090866108f8565b6060600480546102ef90610b97565b600061045d3383610908565b506001919050565b600061037f33846103f085604051806060016040528060258152602001610c3a6025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906108b1565b600061037f338484610687565b73ffffffffffffffffffffffffffffffffffffffff8316610575576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161056c565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661072a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161056c565b73ffffffffffffffffffffffffffffffffffffffff82166107cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161056c565b61081781604051806060016040528060268152602001610bec6026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906108b1565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220939093559084168152205461085390826108f8565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161067a565b81830381848211156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056c9190610a27565b509392505050565b8082018281101561038357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056c565b60025461099290826108f8565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546109c590826108f8565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b81811015610a5457858101830151858201604001528201610a38565b81811115610a66576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610abe57600080fd5b919050565b60008060408385031215610ad657600080fd5b610adf83610a9a565b946020939093013593505050565b600080600060608486031215610b0257600080fd5b610b0b84610a9a565b9250610b1960208501610a9a565b9150604084013590509250925092565b600060208284031215610b3b57600080fd5b610b4482610a9a565b9392505050565b600060208284031215610b5d57600080fd5b5035919050565b60008060408385031215610b7757600080fd5b610b8083610a9a565b9150610b8e60208401610a9a565b90509250929050565b600181811c90821680610bab57607f821691505b60208210811415610be5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a7002155c63825a0e9ae5878dee9e6a1f7b05b1c0f174a0fd45cfc57d35dad3664736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xF57 CODESIZE SUB DUP1 PUSH3 0xF57 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1F1 JUMP JUMPDEST DUP3 MLOAD DUP4 SWAP1 DUP4 SWAP1 PUSH3 0x4D SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x7E JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x63 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x7E JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF DUP5 AND OR SWAP1 SSTORE POP POP POP POP PUSH3 0x2B3 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x8C SWAP1 PUSH3 0x276 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xB0 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xFB JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xCB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xFB JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xFB JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xFB JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xDE JUMP JUMPDEST POP PUSH3 0x109 SWAP3 SWAP2 POP PUSH3 0x10D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x109 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x10E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x169 JUMPI PUSH3 0x169 PUSH3 0x124 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x194 JUMPI PUSH3 0x194 PUSH3 0x124 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x1D5 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x1B6 JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x1E7 JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x22D DUP8 DUP4 DUP9 ADD PUSH3 0x13A JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x253 DUP7 DUP3 DUP8 ADD PUSH3 0x13A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x28B JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x2AD JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC94 DUP1 PUSH3 0x2C3 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C19A95C GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x259 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E31D053 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x1E31D053 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x130 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x104 SWAP2 SWAP1 PUSH2 0xA27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x372 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x167 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x19A CALLDATASIZE PUSH1 0x4 PUSH2 0xAED JUMP JUMPDEST PUSH2 0x389 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x221 PUSH2 0x1D5 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134 PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x442 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x26F CALLDATASIZE PUSH1 0x4 PUSH2 0xB4B JUMP JUMPDEST PUSH2 0x451 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x282 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x465 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x2EF SWAP1 PUSH2 0xB97 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x31B SWAP1 PUSH2 0xB97 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x368 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x33D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x368 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x34B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 DUP5 PUSH2 0x4CE JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x396 DUP5 DUP5 DUP5 PUSH2 0x687 JUMP JUMPDEST PUSH2 0x3F5 DUP5 CALLER PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC12 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x37F SWAP2 DUP6 SWAP1 PUSH2 0x3F0 SWAP1 DUP7 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x2EF SWAP1 PUSH2 0xB97 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45D CALLER DUP4 PUSH2 0x908 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3A PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 DUP5 PUSH2 0x687 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x575 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x618 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x72A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x7CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH2 0x817 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBEC PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x853 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x67A JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x56C SWAP2 SWAP1 PUSH2 0xA27 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x985 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x56C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x992 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x9C5 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA54 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xA38 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xA66 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xABE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xADF DUP4 PUSH2 0xA9A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0B DUP5 PUSH2 0xA9A JUMP JUMPDEST SWAP3 POP PUSH2 0xB19 PUSH1 0x20 DUP6 ADD PUSH2 0xA9A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB44 DUP3 PUSH2 0xA9A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xB77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB80 DUP4 PUSH2 0xA9A JUMP JUMPDEST SWAP2 POP PUSH2 0xB8E PUSH1 0x20 DUP5 ADD PUSH2 0xA9A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xBAB JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xBE5 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220A700 0x21 SSTORE 0xC6 CODESIZE 0x25 LOG0 0xE9 0xAE PC PUSH25 0xDEE9E6A1F7B05B1C0F174A0FD45CFC57D35DAD3664736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"296:597:73:-:0;;;389:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2007:12:6;;465:4:73;;471:6;;2007:12:6;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2025:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2047:9:6;:14;;-1:-1:-1;;2047:14:6;9620:21;;;;;;-1:-1:-1;389:125:73;;;296:597;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;296:597:73;;;-1:-1:-1;296:597:73;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:124;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:124;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:124;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:124:o;1036:712::-;1142:6;1150;1158;1211:2;1199:9;1190:7;1186:23;1182:32;1179:52;;;1227:1;1224;1217:12;1179:52;1254:16;;-1:-1:-1;;;;;1319:14:124;;;1316:34;;;1346:1;1343;1336:12;1316:34;1369:61;1422:7;1413:6;1402:9;1398:22;1369:61;:::i;:::-;1359:71;;1476:2;1465:9;1461:18;1455:25;1439:41;;1505:2;1495:8;1492:16;1489:36;;;1521:1;1518;1511:12;1489:36;;1544:63;1599:7;1588:8;1577:9;1573:24;1544:63;:::i;:::-;1534:73;;;1650:2;1639:9;1635:18;1629:25;1694:4;1687:5;1683:16;1676:5;1673:27;1663:55;;1714:1;1711;1704:12;1663:55;1737:5;1727:15;;;1036:712;;;;;:::o;1753:380::-;1832:1;1828:12;;;;1875;;;1896:61;;1950:4;1942:6;1938:17;1928:27;;1896:61;2003:2;1995:6;1992:14;1972:18;1969:38;1966:161;;;2049:10;2044:3;2040:20;2037:1;2030:31;2084:4;2081:1;2074:15;2112:4;2109:1;2102:15;1966:161;;1753:380;;;:::o;:::-;296:597:73;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_approve_1256":{"entryPoint":1230,"id":1256,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_1278":{"entryPoint":null,"id":1278,"parameterSlots":3,"returnSlots":0},"@_mint_1155":{"entryPoint":2312,"id":1155,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_transfer_1100":{"entryPoint":1671,"id":1100,"parameterSlots":3,"returnSlots":0},"@add_2216":{"entryPoint":2296,"id":2216,"parameterSlots":2,"returnSlots":1},"@allowance_918":{"entryPoint":null,"id":918,"parameterSlots":2,"returnSlots":1},"@approve_939":{"entryPoint":882,"id":939,"parameterSlots":2,"returnSlots":1},"@balanceOf_879":{"entryPoint":null,"id":879,"parameterSlots":1,"returnSlots":1},"@decimals_855":{"entryPoint":null,"id":855,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_1034":{"entryPoint":1125,"id":1034,"parameterSlots":2,"returnSlots":1},"@delegate_10462":{"entryPoint":null,"id":10462,"parameterSlots":1,"returnSlots":0},"@delegatee_10416":{"entryPoint":null,"id":10416,"parameterSlots":0,"returnSlots":0},"@increaseAllowance_1005":{"entryPoint":1023,"id":1005,"parameterSlots":2,"returnSlots":1},"@mint_10451":{"entryPoint":1105,"id":10451,"parameterSlots":1,"returnSlots":1},"@name_837":{"entryPoint":736,"id":837,"parameterSlots":0,"returnSlots":1},"@sub_2265":{"entryPoint":2225,"id":2265,"parameterSlots":3,"returnSlots":1},"@symbol_846":{"entryPoint":1090,"id":846,"parameterSlots":0,"returnSlots":1},"@totalSupply_865":{"entryPoint":null,"id":865,"parameterSlots":0,"returnSlots":1},"@transferFrom_977":{"entryPoint":905,"id":977,"parameterSlots":3,"returnSlots":1},"@transfer_900":{"entryPoint":1217,"id":900,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":2714,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2857,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2916,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2797,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2755,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":2891,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2599,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2967,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5320:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:124"},"nodeType":"YulFunctionCall","src":"166:21:124"},"nodeType":"YulExpressionStatement","src":"166:21:124"},{"nodeType":"YulVariableDeclaration","src":"196:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:124"},"nodeType":"YulFunctionCall","src":"232:34:124"},"nodeType":"YulExpressionStatement","src":"232:34:124"},{"nodeType":"YulVariableDeclaration","src":"275:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:124"},"nodeType":"YulFunctionCall","src":"369:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:124"},"nodeType":"YulFunctionCall","src":"365:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:124"},"nodeType":"YulFunctionCall","src":"403:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:124"},"nodeType":"YulFunctionCall","src":"399:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:124"},"nodeType":"YulFunctionCall","src":"393:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:124"},"nodeType":"YulFunctionCall","src":"358:66:124"},"nodeType":"YulExpressionStatement","src":"358:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:124"},"nodeType":"YulFunctionCall","src":"302:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:124","statements":[{"nodeType":"YulAssignment","src":"318:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:124"},"nodeType":"YulFunctionCall","src":"323:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:124","statements":[]},"src":"294:140:124"},{"body":{"nodeType":"YulBlock","src":"468:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:124"},"nodeType":"YulFunctionCall","src":"493:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:124"},"nodeType":"YulFunctionCall","src":"489:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:124"},"nodeType":"YulFunctionCall","src":"482:42:124"},"nodeType":"YulExpressionStatement","src":"482:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:124"},"nodeType":"YulFunctionCall","src":"446:13:124"},"nodeType":"YulIf","src":"443:91:124"},{"nodeType":"YulAssignment","src":"543:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:124"},"nodeType":"YulFunctionCall","src":"574:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:124"},"nodeType":"YulFunctionCall","src":"570:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:124"},"nodeType":"YulFunctionCall","src":"555:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:124"},"nodeType":"YulFunctionCall","src":"551:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:124","type":""}],"src":"14:656:124"},{"body":{"nodeType":"YulBlock","src":"724:147:124","statements":[{"nodeType":"YulAssignment","src":"734:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:124"},"nodeType":"YulFunctionCall","src":"743:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:124"}]},{"body":{"nodeType":"YulBlock","src":"849:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:124"},"nodeType":"YulFunctionCall","src":"851:12:124"},"nodeType":"YulExpressionStatement","src":"851:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:124"},"nodeType":"YulFunctionCall","src":"792:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:124"},"nodeType":"YulFunctionCall","src":"782:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:124"},"nodeType":"YulFunctionCall","src":"775:73:124"},"nodeType":"YulIf","src":"772:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:124","type":""}],"src":"675:196:124"},{"body":{"nodeType":"YulBlock","src":"963:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:124"},"nodeType":"YulFunctionCall","src":"1011:12:124"},"nodeType":"YulExpressionStatement","src":"1011:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:124"},"nodeType":"YulFunctionCall","src":"980:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:124"},"nodeType":"YulFunctionCall","src":"976:32:124"},"nodeType":"YulIf","src":"973:52:124"},{"nodeType":"YulAssignment","src":"1034:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:124"},"nodeType":"YulFunctionCall","src":"1044:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:124"}]},{"nodeType":"YulAssignment","src":"1082:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:124"},"nodeType":"YulFunctionCall","src":"1105:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:124"},"nodeType":"YulFunctionCall","src":"1092:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:124","type":""}],"src":"876:254:124"},{"body":{"nodeType":"YulBlock","src":"1230:92:124","statements":[{"nodeType":"YulAssignment","src":"1240:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:124"},"nodeType":"YulFunctionCall","src":"1248:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:124"},"nodeType":"YulFunctionCall","src":"1300:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:124"},"nodeType":"YulFunctionCall","src":"1293:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:124"},"nodeType":"YulFunctionCall","src":"1275:41:124"},"nodeType":"YulExpressionStatement","src":"1275:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:124","type":""}],"src":"1135:187:124"},{"body":{"nodeType":"YulBlock","src":"1428:76:124","statements":[{"nodeType":"YulAssignment","src":"1438:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:124"},"nodeType":"YulFunctionCall","src":"1446:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:124"},"nodeType":"YulFunctionCall","src":"1473:25:124"},"nodeType":"YulExpressionStatement","src":"1473:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:124","type":""}],"src":"1327:177:124"},{"body":{"nodeType":"YulBlock","src":"1610:125:124","statements":[{"nodeType":"YulAssignment","src":"1620:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1632:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1643:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1628:3:124"},"nodeType":"YulFunctionCall","src":"1628:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1620:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1662:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1677:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1685:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1673:3:124"},"nodeType":"YulFunctionCall","src":"1673:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1655:6:124"},"nodeType":"YulFunctionCall","src":"1655:74:124"},"nodeType":"YulExpressionStatement","src":"1655:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1579:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1590:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1601:4:124","type":""}],"src":"1509:226:124"},{"body":{"nodeType":"YulBlock","src":"1844:224:124","statements":[{"body":{"nodeType":"YulBlock","src":"1890:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1899:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1902:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1892:6:124"},"nodeType":"YulFunctionCall","src":"1892:12:124"},"nodeType":"YulExpressionStatement","src":"1892:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1865:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1874:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1861:3:124"},"nodeType":"YulFunctionCall","src":"1861:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1886:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1857:3:124"},"nodeType":"YulFunctionCall","src":"1857:32:124"},"nodeType":"YulIf","src":"1854:52:124"},{"nodeType":"YulAssignment","src":"1915:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1944:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1925:18:124"},"nodeType":"YulFunctionCall","src":"1925:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1915:6:124"}]},{"nodeType":"YulAssignment","src":"1963:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1996:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2007:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1992:3:124"},"nodeType":"YulFunctionCall","src":"1992:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1973:18:124"},"nodeType":"YulFunctionCall","src":"1973:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1963:6:124"}]},{"nodeType":"YulAssignment","src":"2020:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2047:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2058:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2043:3:124"},"nodeType":"YulFunctionCall","src":"2043:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2030:12:124"},"nodeType":"YulFunctionCall","src":"2030:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2020:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1825:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1833:6:124","type":""}],"src":"1740:328:124"},{"body":{"nodeType":"YulBlock","src":"2170:87:124","statements":[{"nodeType":"YulAssignment","src":"2180:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2192:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2203:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2188:3:124"},"nodeType":"YulFunctionCall","src":"2188:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2180:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2222:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2237:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2245:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2233:3:124"},"nodeType":"YulFunctionCall","src":"2233:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2215:6:124"},"nodeType":"YulFunctionCall","src":"2215:36:124"},"nodeType":"YulExpressionStatement","src":"2215:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2139:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2150:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2161:4:124","type":""}],"src":"2073:184:124"},{"body":{"nodeType":"YulBlock","src":"2332:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"2378:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2387:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2390:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2380:6:124"},"nodeType":"YulFunctionCall","src":"2380:12:124"},"nodeType":"YulExpressionStatement","src":"2380:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2353:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2349:3:124"},"nodeType":"YulFunctionCall","src":"2349:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2374:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2345:3:124"},"nodeType":"YulFunctionCall","src":"2345:32:124"},"nodeType":"YulIf","src":"2342:52:124"},{"nodeType":"YulAssignment","src":"2403:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2432:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2413:18:124"},"nodeType":"YulFunctionCall","src":"2413:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2403:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2298:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2309:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2321:6:124","type":""}],"src":"2262:186:124"},{"body":{"nodeType":"YulBlock","src":"2523:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"2569:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2578:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2581:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2571:6:124"},"nodeType":"YulFunctionCall","src":"2571:12:124"},"nodeType":"YulExpressionStatement","src":"2571:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2544:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2553:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2540:3:124"},"nodeType":"YulFunctionCall","src":"2540:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2565:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2536:3:124"},"nodeType":"YulFunctionCall","src":"2536:32:124"},"nodeType":"YulIf","src":"2533:52:124"},{"nodeType":"YulAssignment","src":"2594:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2617:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2604:12:124"},"nodeType":"YulFunctionCall","src":"2604:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2594:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2489:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2500:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2512:6:124","type":""}],"src":"2453:180:124"},{"body":{"nodeType":"YulBlock","src":"2725:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"2771:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2780:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2783:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2773:6:124"},"nodeType":"YulFunctionCall","src":"2773:12:124"},"nodeType":"YulExpressionStatement","src":"2773:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2746:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2755:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2742:3:124"},"nodeType":"YulFunctionCall","src":"2742:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2767:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2738:3:124"},"nodeType":"YulFunctionCall","src":"2738:32:124"},"nodeType":"YulIf","src":"2735:52:124"},{"nodeType":"YulAssignment","src":"2796:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2825:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2806:18:124"},"nodeType":"YulFunctionCall","src":"2806:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2796:6:124"}]},{"nodeType":"YulAssignment","src":"2844:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2877:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2888:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2873:3:124"},"nodeType":"YulFunctionCall","src":"2873:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2854:18:124"},"nodeType":"YulFunctionCall","src":"2854:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2844:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2683:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2694:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2706:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2714:6:124","type":""}],"src":"2638:260:124"},{"body":{"nodeType":"YulBlock","src":"2958:382:124","statements":[{"nodeType":"YulAssignment","src":"2968:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2982:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2985:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2978:3:124"},"nodeType":"YulFunctionCall","src":"2978:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2968:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2999:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3029:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"3035:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3025:3:124"},"nodeType":"YulFunctionCall","src":"3025:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3003:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3076:31:124","statements":[{"nodeType":"YulAssignment","src":"3078:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3092:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3100:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3088:3:124"},"nodeType":"YulFunctionCall","src":"3088:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3078:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3056:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3049:6:124"},"nodeType":"YulFunctionCall","src":"3049:26:124"},"nodeType":"YulIf","src":"3046:61:124"},{"body":{"nodeType":"YulBlock","src":"3166:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3187:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3190:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3180:6:124"},"nodeType":"YulFunctionCall","src":"3180:88:124"},"nodeType":"YulExpressionStatement","src":"3180:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3288:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3291:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3281:6:124"},"nodeType":"YulFunctionCall","src":"3281:15:124"},"nodeType":"YulExpressionStatement","src":"3281:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3316:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3319:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3309:6:124"},"nodeType":"YulFunctionCall","src":"3309:15:124"},"nodeType":"YulExpressionStatement","src":"3309:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3122:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3145:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3153:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3142:2:124"},"nodeType":"YulFunctionCall","src":"3142:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3119:2:124"},"nodeType":"YulFunctionCall","src":"3119:38:124"},"nodeType":"YulIf","src":"3116:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2938:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2947:6:124","type":""}],"src":"2903:437:124"},{"body":{"nodeType":"YulBlock","src":"3519:226:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3536:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3547:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3529:6:124"},"nodeType":"YulFunctionCall","src":"3529:21:124"},"nodeType":"YulExpressionStatement","src":"3529:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3570:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3581:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3566:3:124"},"nodeType":"YulFunctionCall","src":"3566:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3586:2:124","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3559:6:124"},"nodeType":"YulFunctionCall","src":"3559:30:124"},"nodeType":"YulExpressionStatement","src":"3559:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3609:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3620:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3605:3:124"},"nodeType":"YulFunctionCall","src":"3605:18:124"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"3625:34:124","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3598:6:124"},"nodeType":"YulFunctionCall","src":"3598:62:124"},"nodeType":"YulExpressionStatement","src":"3598:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3680:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3691:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3676:3:124"},"nodeType":"YulFunctionCall","src":"3676:18:124"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"3696:6:124","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3669:6:124"},"nodeType":"YulFunctionCall","src":"3669:34:124"},"nodeType":"YulExpressionStatement","src":"3669:34:124"},{"nodeType":"YulAssignment","src":"3712:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3724:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3735:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3720:3:124"},"nodeType":"YulFunctionCall","src":"3720:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3712:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3496:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3510:4:124","type":""}],"src":"3345:400:124"},{"body":{"nodeType":"YulBlock","src":"3924:224:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3941:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3952:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3934:6:124"},"nodeType":"YulFunctionCall","src":"3934:21:124"},"nodeType":"YulExpressionStatement","src":"3934:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3975:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3986:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3971:3:124"},"nodeType":"YulFunctionCall","src":"3971:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3991:2:124","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3964:6:124"},"nodeType":"YulFunctionCall","src":"3964:30:124"},"nodeType":"YulExpressionStatement","src":"3964:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4014:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4025:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4010:3:124"},"nodeType":"YulFunctionCall","src":"4010:18:124"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"4030:34:124","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4003:6:124"},"nodeType":"YulFunctionCall","src":"4003:62:124"},"nodeType":"YulExpressionStatement","src":"4003:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4085:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4096:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4081:3:124"},"nodeType":"YulFunctionCall","src":"4081:18:124"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"4101:4:124","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4074:6:124"},"nodeType":"YulFunctionCall","src":"4074:32:124"},"nodeType":"YulExpressionStatement","src":"4074:32:124"},{"nodeType":"YulAssignment","src":"4115:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4127:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4138:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4123:3:124"},"nodeType":"YulFunctionCall","src":"4123:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4115:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3901:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3915:4:124","type":""}],"src":"3750:398:124"},{"body":{"nodeType":"YulBlock","src":"4327:227:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4344:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4355:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4337:6:124"},"nodeType":"YulFunctionCall","src":"4337:21:124"},"nodeType":"YulExpressionStatement","src":"4337:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4378:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4389:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4374:3:124"},"nodeType":"YulFunctionCall","src":"4374:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4394:2:124","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4367:6:124"},"nodeType":"YulFunctionCall","src":"4367:30:124"},"nodeType":"YulExpressionStatement","src":"4367:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4417:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4428:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4413:3:124"},"nodeType":"YulFunctionCall","src":"4413:18:124"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"4433:34:124","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4406:6:124"},"nodeType":"YulFunctionCall","src":"4406:62:124"},"nodeType":"YulExpressionStatement","src":"4406:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4499:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4484:3:124"},"nodeType":"YulFunctionCall","src":"4484:18:124"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"4504:7:124","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4477:6:124"},"nodeType":"YulFunctionCall","src":"4477:35:124"},"nodeType":"YulExpressionStatement","src":"4477:35:124"},{"nodeType":"YulAssignment","src":"4521:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4533:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4544:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4529:3:124"},"nodeType":"YulFunctionCall","src":"4529:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4521:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4304:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4318:4:124","type":""}],"src":"4153:401:124"},{"body":{"nodeType":"YulBlock","src":"4733:225:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4750:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4761:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4743:6:124"},"nodeType":"YulFunctionCall","src":"4743:21:124"},"nodeType":"YulExpressionStatement","src":"4743:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4784:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4795:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4780:3:124"},"nodeType":"YulFunctionCall","src":"4780:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:124","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4773:6:124"},"nodeType":"YulFunctionCall","src":"4773:30:124"},"nodeType":"YulExpressionStatement","src":"4773:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4823:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4834:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4819:3:124"},"nodeType":"YulFunctionCall","src":"4819:18:124"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"4839:34:124","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:124"},"nodeType":"YulFunctionCall","src":"4812:62:124"},"nodeType":"YulExpressionStatement","src":"4812:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4894:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4905:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4890:3:124"},"nodeType":"YulFunctionCall","src":"4890:18:124"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"4910:5:124","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4883:6:124"},"nodeType":"YulFunctionCall","src":"4883:33:124"},"nodeType":"YulExpressionStatement","src":"4883:33:124"},{"nodeType":"YulAssignment","src":"4925:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4937:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4948:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4933:3:124"},"nodeType":"YulFunctionCall","src":"4933:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4925:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4710:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4724:4:124","type":""}],"src":"4559:399:124"},{"body":{"nodeType":"YulBlock","src":"5137:181:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5154:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5165:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5147:6:124"},"nodeType":"YulFunctionCall","src":"5147:21:124"},"nodeType":"YulExpressionStatement","src":"5147:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5188:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5199:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5184:3:124"},"nodeType":"YulFunctionCall","src":"5184:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"5204:2:124","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5177:6:124"},"nodeType":"YulFunctionCall","src":"5177:30:124"},"nodeType":"YulExpressionStatement","src":"5177:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5227:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5238:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5223:3:124"},"nodeType":"YulFunctionCall","src":"5223:18:124"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"5243:33:124","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5216:6:124"},"nodeType":"YulFunctionCall","src":"5216:61:124"},"nodeType":"YulExpressionStatement","src":"5216:61:124"},{"nodeType":"YulAssignment","src":"5286:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5298:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5309:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5294:3:124"},"nodeType":"YulFunctionCall","src":"5294:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5286:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5114:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5128:4:124","type":""}],"src":"4963:355:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635c19a95c1161008c578063a0712d6811610066578063a0712d6814610261578063a457c2d714610274578063a9059cbb14610287578063dd62ed3e1461029a57600080fd5b80635c19a95c146101c757806370a082311461022357806395d89b411461025957600080fd5b80631e31d053116100c85780631e31d0531461014257806323b872dd1461018c578063313ce5671461019f57806339509351146101b457600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f76102e0565b6040516101049190610a27565b60405180910390f35b61012061011b366004610ac3565b610372565b6040519015158152602001610104565b6002545b604051908152602001610104565b60055461016790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b61012061019a366004610aed565b610389565b60055460405160ff9091168152602001610104565b6101206101c2366004610ac3565b6103ff565b6102216101d5366004610b29565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b005b610134610231366004610b29565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100f7610442565b61012061026f366004610b4b565b610451565b610120610282366004610ac3565b610465565b610120610295366004610ac3565b6104c1565b6101346102a8366004610b64565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102ef90610b97565b80601f016020809104026020016040519081016040528092919081815260200182805461031b90610b97565b80156103685780601f1061033d57610100808354040283529160200191610368565b820191906000526020600020905b81548152906001019060200180831161034b57829003601f168201915b5050505050905090565b600061037f3384846104ce565b5060015b92915050565b6000610396848484610687565b6103f584336103f085604051806060016040528060288152602001610c126028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906108b1565b6104ce565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161037f9185906103f090866108f8565b6060600480546102ef90610b97565b600061045d3383610908565b506001919050565b600061037f33846103f085604051806060016040528060258152602001610c3a6025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906108b1565b600061037f338484610687565b73ffffffffffffffffffffffffffffffffffffffff8316610575576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161056c565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661072a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161056c565b73ffffffffffffffffffffffffffffffffffffffff82166107cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161056c565b61081781604051806060016040528060268152602001610bec6026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906108b1565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220939093559084168152205461085390826108f8565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161067a565b81830381848211156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056c9190610a27565b509392505050565b8082018281101561038357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056c565b60025461099290826108f8565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546109c590826108f8565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b81811015610a5457858101830151858201604001528201610a38565b81811115610a66576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610abe57600080fd5b919050565b60008060408385031215610ad657600080fd5b610adf83610a9a565b946020939093013593505050565b600080600060608486031215610b0257600080fd5b610b0b84610a9a565b9250610b1960208501610a9a565b9150604084013590509250925092565b600060208284031215610b3b57600080fd5b610b4482610a9a565b9392505050565b600060208284031215610b5d57600080fd5b5035919050565b60008060408385031215610b7757600080fd5b610b8083610a9a565b9150610b8e60208401610a9a565b90509250929050565b600181811c90821680610bab57607f821691505b60208210811415610be5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a7002155c63825a0e9ae5878dee9e6a1f7b05b1c0f174a0fd45cfc57d35dad3664736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C19A95C GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x259 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E31D053 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x1E31D053 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x130 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x104 SWAP2 SWAP1 PUSH2 0xA27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x372 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x167 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x19A CALLDATASIZE PUSH1 0x4 PUSH2 0xAED JUMP JUMPDEST PUSH2 0x389 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x221 PUSH2 0x1D5 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134 PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x442 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x26F CALLDATASIZE PUSH1 0x4 PUSH2 0xB4B JUMP JUMPDEST PUSH2 0x451 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x282 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x465 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB64 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x2EF SWAP1 PUSH2 0xB97 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x31B SWAP1 PUSH2 0xB97 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x368 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x33D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x368 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x34B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 DUP5 PUSH2 0x4CE JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x396 DUP5 DUP5 DUP5 PUSH2 0x687 JUMP JUMPDEST PUSH2 0x3F5 DUP5 CALLER PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC12 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x37F SWAP2 DUP6 SWAP1 PUSH2 0x3F0 SWAP1 DUP7 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x2EF SWAP1 PUSH2 0xB97 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45D CALLER DUP4 PUSH2 0x908 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3A PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 DUP5 PUSH2 0x687 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x575 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x618 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x72A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x7CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH2 0x817 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBEC PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x853 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x67A JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x56C SWAP2 SWAP1 PUSH2 0xA27 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x985 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x56C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x992 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x9C5 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA54 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xA38 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xA66 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xABE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xADF DUP4 PUSH2 0xA9A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0B DUP5 PUSH2 0xA9A JUMP JUMPDEST SWAP3 POP PUSH2 0xB19 PUSH1 0x20 DUP6 ADD PUSH2 0xA9A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB44 DUP3 PUSH2 0xA9A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xB77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB80 DUP4 PUSH2 0xA9A JUMP JUMPDEST SWAP2 POP PUSH2 0xB8E PUSH1 0x20 DUP5 ADD PUSH2 0xA9A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xBAB JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xBE5 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220A700 0x21 SSTORE 0xC6 CODESIZE 0x25 LOG0 0xE9 0xAE PC PUSH25 0xDEE9E6A1F7B05B1C0F174A0FD45CFC57D35DAD3664736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"296:597:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4029:156;;;;;;:::i;:::-;;:::i;:::-;;;1300:14:124;;1293:22;1275:41;;1263:2;1248:18;4029:156:6;1135:187:124;3102:92:6;3177:12;;3102:92;;;1473:25:124;;;1461:2;1446:18;3102:92:6;1327:177:124;360:24:73;;;;;;;;;;;;;;;1685:42:124;1673:55;;;1655:74;;1643:2;1628:18;360:24:73;1509:226:124;4619:343:6;;;;;;:::i;:::-;;:::i;2975:75::-;3036:9;;2975:75;;3036:9;;;;2215:36:124;;2203:2;2188:18;2975:75:6;2073:184:124;5331:205:6;;;;;;:::i;:::-;;:::i;790:101:73:-;;;;;;:::i;:::-;858:9;:28;;;;;;;;;;;;;;;;;;790:101;;;3244:111:6;;;;;;:::i;:::-;3332:18;;3310:7;3332:18;;;;;;;;;;;;3244:111;2301:79;;;:::i;683:103:73:-;;;;;;:::i;:::-;;:::i;5993:316:6:-;;;;;;:::i;:::-;;:::i;3540:162::-;;;;;;:::i;:::-;;:::i;3752:155::-;;;;;;:::i;:::-;3875:18;;;;3853:7;3875:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3752:155;2123:75;2160:13;2188:5;2181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;:::o;4029:156::-;4112:4;4124:39;678:10:4;4147:7:6;4156:6;4124:8;:39::i;:::-;-1:-1:-1;4176:4:6;4029:156;;;;;:::o;4619:343::-;4741:4;4753:36;4763:6;4771:9;4782:6;4753:9;:36::i;:::-;4795:145;4811:6;678:10:4;4845:89:6;4883:6;4845:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;;;678:10:4;4845:33:6;;;;;;;;;;:37;:89::i;:::-;4795:8;:145::i;:::-;-1:-1:-1;4953:4:6;4619:343;;;;;:::o;5331:205::-;678:10:4;5419:4:6;5463:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5419:4;;5431:83;;5454:7;;5463:50;;5502:10;5463:38;:50::i;2301:79::-;2340:13;2368:7;2361:14;;;;;:::i;683:103:73:-;728:4;740:24;746:10;758:5;740;:24::i;:::-;-1:-1:-1;777:4:73;;683:103;-1:-1:-1;683:103:73:o;5993:316:6:-;6098:4;6110:177;678:10:4;6146:7:6;6161:120;6209:15;6161:120;;;;;;;;;;;;;;;;;678:10:4;6161:25:6;;;;:11;:25;;;;;;;;;:34;;;;;;;;;;;;:38;:120::i;3540:162::-;3626:4;3638:42;678:10:4;3662:9:6;3673:6;3638:9;:42::i;8935:322::-;9032:19;;;9024:68;;;;;;;3547:2:124;9024:68:6;;;3529:21:124;3586:2;3566:18;;;3559:30;3625:34;3605:18;;;3598:62;3696:6;3676:18;;;3669:34;3720:19;;9024:68:6;;;;;;;;;9106:21;;;9098:68;;;;;;;3952:2:124;9098:68:6;;;3934:21:124;3991:2;3971:18;;;3964:30;4030:34;4010:18;;;4003:62;4101:4;4081:18;;;4074:32;4123:19;;9098:68:6;3750:398:124;9098:68:6;9173:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9220:32;;1473:25:124;;;9220:32:6;;1446:18:124;9220:32:6;;;;;;;;8935:322;;;:::o;6753:504::-;6854:20;;;6846:70;;;;;;;4355:2:124;6846:70:6;;;4337:21:124;4394:2;4374:18;;;4367:30;4433:34;4413:18;;;4406:62;4504:7;4484:18;;;4477:35;4529:19;;6846:70:6;4153:401:124;6846:70:6;6930:23;;;6922:71;;;;;;;4761:2:124;6922:71:6;;;4743:21:124;4800:2;4780:18;;;4773:30;4839:34;4819:18;;;4812:62;4910:5;4890:18;;;4883:33;4933:19;;6922:71:6;4559:399:124;6922:71:6;7074;7096:6;7074:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7054:17;;;;:9;:17;;;;;;;;;;;:91;;;;7174:20;;;;;;;:32;;7199:6;7174:24;:32::i;:::-;7151:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7217:35;1473:25:124;;;7151:20:6;;7217:35;;;;;;1446:18:124;7217:35:6;1327:177:124;1011:161:14;1140:5;;;1153:7;1135:16;;;;1127:34;;;;;;;;;;;;;:::i;:::-;;1011:161;;;;;:::o;410:129::-;516:5;;;511:16;;;;503:25;;;;;7507:348:6;7586:21;;;7578:65;;;;;;;5165:2:124;7578:65:6;;;5147:21:124;5204:2;5184:18;;;5177:30;5243:33;5223:18;;;5216:61;5294:18;;7578:65:6;4963:355:124;7578:65:6;7721:12;;:24;;7738:6;7721:16;:24::i;:::-;7706:12;:39;7772:18;;;:9;:18;;;;;;;;;;;:30;;7795:6;7772:22;:30::i;:::-;7751:18;;;:9;:18;;;;;;;;;;;:51;;;;7813:37;;1473:25:124;;;7751:18:6;;:9;;7813:37;;1446:18:124;7813:37:6;;;;;;;7507:348;;:::o;14:656:124:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:124;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:124:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:124:o;1740:328::-;1817:6;1825;1833;1886:2;1874:9;1865:7;1861:23;1857:32;1854:52;;;1902:1;1899;1892:12;1854:52;1925:29;1944:9;1925:29;:::i;:::-;1915:39;;1973:38;2007:2;1996:9;1992:18;1973:38;:::i;:::-;1963:48;;2058:2;2047:9;2043:18;2030:32;2020:42;;1740:328;;;;;:::o;2262:186::-;2321:6;2374:2;2362:9;2353:7;2349:23;2345:32;2342:52;;;2390:1;2387;2380:12;2342:52;2413:29;2432:9;2413:29;:::i;:::-;2403:39;2262:186;-1:-1:-1;;;2262:186:124:o;2453:180::-;2512:6;2565:2;2553:9;2544:7;2540:23;2536:32;2533:52;;;2581:1;2578;2571:12;2533:52;-1:-1:-1;2604:23:124;;2453:180;-1:-1:-1;2453:180:124:o;2638:260::-;2706:6;2714;2767:2;2755:9;2746:7;2742:23;2738:32;2735:52;;;2783:1;2780;2773:12;2735:52;2806:29;2825:9;2806:29;:::i;:::-;2796:39;;2854:38;2888:2;2877:9;2873:18;2854:38;:::i;:::-;2844:48;;2638:260;;;;;:::o;2903:437::-;2982:1;2978:12;;;;3025;;;3046:61;;3100:4;3092:6;3088:17;3078:27;;3046:61;3153:2;3145:6;3142:14;3122:18;3119:38;3116:218;;;3190:77;3187:1;3180:88;3291:4;3288:1;3281:15;3319:4;3316:1;3309:15;3116:218;;2903:437;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"644000","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24596","balanceOf(address)":"2561","decimals()":"2356","decreaseAllowance(address,uint256)":"infinite","delegate(address)":"24554","delegatee()":"2347","increaseAllowance(address,uint256)":"infinite","mint(uint256)":"infinite","name()":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegate(address)":"5c19a95c","delegatee()":"1e31d053","increaseAllowance(address,uint256)":"39509351","mint(uint256)":"a0712d68","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegateeAddress\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegatee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC20 minting logic with delegation\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"mint(uint256)\":{\"details\":\"Function to mint tokens\",\"params\":{\"value\":\"The amount of tokens to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"title\":\"MintableDelegationERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/tokens/MintableDelegationERC20.sol\":\"MintableDelegationERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.sol';\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\n\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n\\n  /**\\n   * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n   * a default value of 18.\\n   *\\n   * To select a different value for {decimals}, use {_setupDecimals}.\\n   *\\n   * All three of these values are immutable: they can only be set once during\\n   * construction.\\n   */\\n  constructor(string memory name, string memory symbol) {\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = 18;\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n   * called.\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `recipient` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n    _transfer(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) public view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20};\\n   *\\n   * Requirements:\\n   * - `sender` and `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) public virtual override returns (bool) {\\n    _transfer(sender, recipient, amount);\\n    _approve(\\n      sender,\\n      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   * - `spender` must have allowance for the caller of at least\\n   * `subtractedValue`.\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');\\n    _balances[recipient] = _balances[recipient].add(amount);\\n    emit Transfer(sender, recipient, amount);\\n  }\\n\\n  /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: mint to the zero address');\\n\\n    _beforeTokenTransfer(address(0), account, amount);\\n\\n    _totalSupply = _totalSupply.add(amount);\\n    _balances[account] = _balances[account].add(amount);\\n    emit Transfer(address(0), account, amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `amount` tokens from `account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `account` cannot be the zero address.\\n   * - `account` must have at least `amount` tokens.\\n   */\\n  function _burn(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');\\n    _totalSupply = _totalSupply.sub(amount);\\n    emit Transfer(account, address(0), amount);\\n  }\\n\\n  /**\\n   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\\n   *\\n   * This is internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `owner` cannot be the zero address.\\n   * - `spender` cannot be the zero address.\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev Sets {decimals} to a value other than the default one of 18.\\n   *\\n   * WARNING: This function should only be called from the constructor. Most\\n   * applications that interact with token contracts will not expect\\n   * {decimals} to ever change, and may work incorrectly if it does.\\n   */\\n  function _setupDecimals(uint8 decimals_) internal {\\n    _decimals = decimals_;\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * will be to transferred to `to`.\\n   * - when `from` is zero, `amount` tokens will be minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IDelegationToken\\n * @author Aave\\n * @notice Implements an interface for tokens with delegation COMP/UNI compatible\\n */\\ninterface IDelegationToken {\\n  /**\\n   * @notice Delegate voting power to a delegatee\\n   * @param delegatee The address of the delegatee\\n   */\\n  function delegate(address delegatee) external;\\n}\\n\",\"keccak256\":\"0xefaf5afc40d517357085677322396a6864a28d9bdbd664643a7a4723a45e4427\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/tokens/MintableDelegationERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IDelegationToken} from '../../interfaces/IDelegationToken.sol';\\n\\n/**\\n * @title MintableDelegationERC20\\n * @dev ERC20 minting logic with delegation\\n */\\ncontract MintableDelegationERC20 is IDelegationToken, ERC20 {\\n  address public delegatee;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    _setupDecimals(decimals);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(msg.sender, value);\\n    return true;\\n  }\\n\\n  function delegate(address delegateeAddress) external override {\\n    delegatee = delegateeAddress;\\n  }\\n}\\n\",\"keccak256\":\"0x94b7a72e2a5fe905cf154a76fa63c7ec3dcdb6ecb3ed5984ac555a99bd0ac825\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":793,"contract":"contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":799,"contract":"contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":801,"contract":"contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":803,"contract":"contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":805,"contract":"contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":807,"contract":"contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":10416,"contract":"contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"delegatee","offset":1,"slot":"5","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/tokens/MintableERC20.sol":{"MintableERC20":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"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":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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"},{"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"ERC20 minting logic","kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"mint(address,uint256)":{"details":"Function to mint tokens to address","params":{"account":"The account to mint tokens.","value":"The amount of tokens to mint."},"returns":{"_0":"A boolean that indicates if the operation was successful."}},"mint(uint256)":{"details":"Function to mint tokens","params":{"value":"The amount of tokens to mint."},"returns":{"_0":"A boolean that indicates if the operation was successful."}},"name()":{"details":"Returns the name of the token."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."}},"title":"ERC20Mintable","version":1},"evm":{"bytecode":{"functionDebugData":{"@_10542":{"entryPoint":null,"id":10542,"parameterSlots":3,"returnSlots":0},"@_828":{"entryPoint":null,"id":828,"parameterSlots":2,"returnSlots":0},"@_setupDecimals_1267":{"entryPoint":null,"id":1267,"parameterSlots":1,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":478,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory":{"entryPoint":661,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"extract_byte_array_length":{"entryPoint":794,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":456,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2629:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:124"},"nodeType":"YulFunctionCall","src":"66:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:124"},"nodeType":"YulFunctionCall","src":"56:31:124"},"nodeType":"YulExpressionStatement","src":"56:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:15:124"},"nodeType":"YulExpressionStatement","src":"96:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:124"},"nodeType":"YulFunctionCall","src":"120:15:124"},"nodeType":"YulExpressionStatement","src":"120:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:124"},{"body":{"nodeType":"YulBlock","src":"210:821:124","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:124"},"nodeType":"YulFunctionCall","src":"261:12:124"},"nodeType":"YulExpressionStatement","src":"261:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:124"},"nodeType":"YulFunctionCall","src":"234:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:124"},"nodeType":"YulFunctionCall","src":"230:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:124"},"nodeType":"YulFunctionCall","src":"223:35:124"},"nodeType":"YulIf","src":"220:55:124"},{"nodeType":"YulVariableDeclaration","src":"284:23:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:124"},"nodeType":"YulFunctionCall","src":"294:13:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:124"},"nodeType":"YulFunctionCall","src":"330:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:124"},"nodeType":"YulFunctionCall","src":"326:18:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:124"},"nodeType":"YulFunctionCall","src":"369:18:124"},"nodeType":"YulExpressionStatement","src":"369:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:124"},"nodeType":"YulFunctionCall","src":"356:10:124"},"nodeType":"YulIf","src":"353:36:124"},{"nodeType":"YulVariableDeclaration","src":"398:17:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:124"},"nodeType":"YulFunctionCall","src":"408:7:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:124"},"nodeType":"YulFunctionCall","src":"438:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:124"},"nodeType":"YulFunctionCall","src":"498:13:124"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:124"},"nodeType":"YulFunctionCall","src":"494:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:124"},"nodeType":"YulFunctionCall","src":"490:31:124"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:124"},"nodeType":"YulFunctionCall","src":"486:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:124"},"nodeType":"YulFunctionCall","src":"474:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:124"},"nodeType":"YulFunctionCall","src":"588:18:124"},"nodeType":"YulExpressionStatement","src":"588:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:124"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:124"},"nodeType":"YulFunctionCall","src":"542:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:124"},"nodeType":"YulFunctionCall","src":"562:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:124"},"nodeType":"YulFunctionCall","src":"539:46:124"},"nodeType":"YulIf","src":"536:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:124"},"nodeType":"YulFunctionCall","src":"617:22:124"},"nodeType":"YulExpressionStatement","src":"617:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:124"},"nodeType":"YulFunctionCall","src":"648:18:124"},"nodeType":"YulExpressionStatement","src":"648:18:124"},{"nodeType":"YulVariableDeclaration","src":"675:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:124","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:124"},"nodeType":"YulFunctionCall","src":"737:12:124"},"nodeType":"YulExpressionStatement","src":"737:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:124"},"nodeType":"YulFunctionCall","src":"708:15:124"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:124"},"nodeType":"YulFunctionCall","src":"704:24:124"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:124"},"nodeType":"YulFunctionCall","src":"701:33:124"},"nodeType":"YulIf","src":"698:53:124"},{"nodeType":"YulVariableDeclaration","src":"760:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:14:124"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:124"},"nodeType":"YulFunctionCall","src":"846:23:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:124"},"nodeType":"YulFunctionCall","src":"881:14:124"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:124"},"nodeType":"YulFunctionCall","src":"877:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:124"},"nodeType":"YulFunctionCall","src":"871:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:124"},"nodeType":"YulFunctionCall","src":"839:63:124"},"nodeType":"YulExpressionStatement","src":"839:63:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:124"},"nodeType":"YulFunctionCall","src":"787:9:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:124","statements":[{"nodeType":"YulAssignment","src":"799:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:124"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:124"},"nodeType":"YulFunctionCall","src":"804:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:124","statements":[]},"src":"779:133:124"},{"body":{"nodeType":"YulBlock","src":"942:59:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"971:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"979:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:124"},"nodeType":"YulFunctionCall","src":"967:15:124"},{"name":"_4","nodeType":"YulIdentifier","src":"984:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:124"},"nodeType":"YulFunctionCall","src":"963:24:124"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"956:6:124"},"nodeType":"YulFunctionCall","src":"956:35:124"},"nodeType":"YulExpressionStatement","src":"956:35:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"927:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"930:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"924:2:124"},"nodeType":"YulFunctionCall","src":"924:9:124"},"nodeType":"YulIf","src":"921:80:124"},{"nodeType":"YulAssignment","src":"1010:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1019:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1010:5:124"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:124","type":""}],"src":"146:885:124"},{"body":{"nodeType":"YulBlock","src":"1169:579:124","statements":[{"body":{"nodeType":"YulBlock","src":"1215:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1224:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1227:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1217:6:124"},"nodeType":"YulFunctionCall","src":"1217:12:124"},"nodeType":"YulExpressionStatement","src":"1217:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1190:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1186:3:124"},"nodeType":"YulFunctionCall","src":"1186:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1211:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1182:3:124"},"nodeType":"YulFunctionCall","src":"1182:32:124"},"nodeType":"YulIf","src":"1179:52:124"},{"nodeType":"YulVariableDeclaration","src":"1240:30:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1260:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1254:5:124"},"nodeType":"YulFunctionCall","src":"1254:16:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1244:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1279:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1297:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1301:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1293:3:124"},"nodeType":"YulFunctionCall","src":"1293:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1305:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1289:3:124"},"nodeType":"YulFunctionCall","src":"1289:18:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1283:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1334:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1343:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1346:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1336:6:124"},"nodeType":"YulFunctionCall","src":"1336:12:124"},"nodeType":"YulExpressionStatement","src":"1336:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1322:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1330:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1319:2:124"},"nodeType":"YulFunctionCall","src":"1319:14:124"},"nodeType":"YulIf","src":"1316:34:124"},{"nodeType":"YulAssignment","src":"1359:71:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1402:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1413:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1398:3:124"},"nodeType":"YulFunctionCall","src":"1398:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1422:7:124"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1369:28:124"},"nodeType":"YulFunctionCall","src":"1369:61:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1359:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1439:41:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1465:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1476:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1461:3:124"},"nodeType":"YulFunctionCall","src":"1461:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1455:5:124"},"nodeType":"YulFunctionCall","src":"1455:25:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1443:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1509:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1518:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1521:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1511:6:124"},"nodeType":"YulFunctionCall","src":"1511:12:124"},"nodeType":"YulExpressionStatement","src":"1511:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1495:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1505:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1492:2:124"},"nodeType":"YulFunctionCall","src":"1492:16:124"},"nodeType":"YulIf","src":"1489:36:124"},{"nodeType":"YulAssignment","src":"1534:73:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1577:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1588:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1573:3:124"},"nodeType":"YulFunctionCall","src":"1573:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1599:7:124"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1544:28:124"},"nodeType":"YulFunctionCall","src":"1544:63:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1534:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1616:38:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1639:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1650:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1635:3:124"},"nodeType":"YulFunctionCall","src":"1635:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1629:5:124"},"nodeType":"YulFunctionCall","src":"1629:25:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1620:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1702:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1711:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1714:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1704:6:124"},"nodeType":"YulFunctionCall","src":"1704:12:124"},"nodeType":"YulExpressionStatement","src":"1704:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1676:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1687:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1694:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1683:3:124"},"nodeType":"YulFunctionCall","src":"1683:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1673:2:124"},"nodeType":"YulFunctionCall","src":"1673:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1666:6:124"},"nodeType":"YulFunctionCall","src":"1666:35:124"},"nodeType":"YulIf","src":"1663:55:124"},{"nodeType":"YulAssignment","src":"1727:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1737:5:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1727:6:124"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1119:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1130:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1142:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1150:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1158:6:124","type":""}],"src":"1036:712:124"},{"body":{"nodeType":"YulBlock","src":"1966:276:124","statements":[{"nodeType":"YulAssignment","src":"1976:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1999:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:124"},"nodeType":"YulFunctionCall","src":"1984:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2019:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2030:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2012:6:124"},"nodeType":"YulFunctionCall","src":"2012:25:124"},"nodeType":"YulExpressionStatement","src":"2012:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2057:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2068:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2053:3:124"},"nodeType":"YulFunctionCall","src":"2053:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2073:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2046:6:124"},"nodeType":"YulFunctionCall","src":"2046:34:124"},"nodeType":"YulExpressionStatement","src":"2046:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2100:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2111:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2096:3:124"},"nodeType":"YulFunctionCall","src":"2096:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"2116:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2089:6:124"},"nodeType":"YulFunctionCall","src":"2089:34:124"},"nodeType":"YulExpressionStatement","src":"2089:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2143:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2154:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2139:3:124"},"nodeType":"YulFunctionCall","src":"2139:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"2159:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2132:6:124"},"nodeType":"YulFunctionCall","src":"2132:34:124"},"nodeType":"YulExpressionStatement","src":"2132:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2186:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2197:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2182:3:124"},"nodeType":"YulFunctionCall","src":"2182:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"2207:6:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2223:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2228:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2219:3:124"},"nodeType":"YulFunctionCall","src":"2219:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"2232:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2215:3:124"},"nodeType":"YulFunctionCall","src":"2215:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2203:3:124"},"nodeType":"YulFunctionCall","src":"2203:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2175:6:124"},"nodeType":"YulFunctionCall","src":"2175:61:124"},"nodeType":"YulExpressionStatement","src":"2175:61:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1903:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1914:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1922:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1930:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:124","type":""}],"src":"1753:489:124"},{"body":{"nodeType":"YulBlock","src":"2302:325:124","statements":[{"nodeType":"YulAssignment","src":"2312:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2326:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2329:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2322:3:124"},"nodeType":"YulFunctionCall","src":"2322:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2312:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2343:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2373:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"2379:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2369:3:124"},"nodeType":"YulFunctionCall","src":"2369:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"2347:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2420:31:124","statements":[{"nodeType":"YulAssignment","src":"2422:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2436:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2444:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2432:3:124"},"nodeType":"YulFunctionCall","src":"2432:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2422:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2400:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2393:6:124"},"nodeType":"YulFunctionCall","src":"2393:26:124"},"nodeType":"YulIf","src":"2390:61:124"},{"body":{"nodeType":"YulBlock","src":"2510:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2531:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2538:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2543:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2534:3:124"},"nodeType":"YulFunctionCall","src":"2534:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2524:6:124"},"nodeType":"YulFunctionCall","src":"2524:31:124"},"nodeType":"YulExpressionStatement","src":"2524:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2575:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2578:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2568:6:124"},"nodeType":"YulFunctionCall","src":"2568:15:124"},"nodeType":"YulExpressionStatement","src":"2568:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2603:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2606:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2596:6:124"},"nodeType":"YulFunctionCall","src":"2596:15:124"},"nodeType":"YulExpressionStatement","src":"2596:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2466:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2489:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2497:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2486:2:124"},"nodeType":"YulFunctionCall","src":"2486:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2463:2:124"},"nodeType":"YulFunctionCall","src":"2463:38:124"},"nodeType":"YulIf","src":"2460:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2282:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2291:6:124","type":""}],"src":"2247:380:124"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let value := mload(add(headStart, 64))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value2 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b506040516200145538038062001455833981016040819052620000349162000295565b8251839083906200004d90600390602085019062000122565b5080516200006390600490602084019062000122565b505060058054855160209687012060408051808201825260018152603160f81b9089015280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818a0152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528151808403909101815260c09092019052805196019590952060075560ff9290921660ff1990941693909317905550620003579050565b82805462000130906200031a565b90600052602060002090601f0160209004810192826200015457600085556200019f565b82601f106200016f57805160ff19168380011785556200019f565b828001600101855582156200019f579182015b828111156200019f57825182559160200191906001019062000182565b50620001ad929150620001b1565b5090565b5b80821115620001ad5760008155600101620001b2565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b838211156200028b5760008385830101525b9695505050505050565b600080600060608486031215620002ab57600080fd5b83516001600160401b0380821115620002c357600080fd5b620002d187838801620001de565b94506020860151915080821115620002e857600080fd5b50620002f786828701620001de565b925050604084015160ff811681146200030f57600080fd5b809150509250925092565b600181811c908216806200032f57607f821691505b602082108114156200035157634e487b7160e01b600052602260045260246000fd5b50919050565b6110ee80620003676000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806370a08231116100b2578063a0712d6811610081578063a9059cbb11610066578063a9059cbb146102e2578063d505accf146102f5578063dd62ed3e1461030a57600080fd5b8063a0712d68146102bc578063a457c2d7146102cf57600080fd5b806370a082311461020c57806378160376146102425780637ecebe001461027e57806395d89b41146102b457600080fd5b806330adf81f116101095780633644e515116100ee5780633644e515146101dd57806339509351146101e657806340c10f19146101f957600080fd5b806330adf81f146101a1578063313ce567146101c857600080fd5b806306fdde031461013b578063095ea7b31461015957806318160ddd1461017c57806323b872dd1461018e575b600080fd5b610143610350565b6040516101509190610e2f565b60405180910390f35b61016c610167366004610e72565b6103e2565b6040519015158152602001610150565b6002545b604051908152602001610150565b61016c61019c366004610e9c565b6103f9565b6101807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460405160ff9091168152602001610150565b61018060075481565b61016c6101f4366004610e72565b61046f565b61016c610207366004610e72565b6104b2565b61018061021a366004610ed8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101436040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61018061028c366004610ed8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b6101436104be565b61016c6102ca366004610ef3565b6104cd565b61016c6102dd366004610e72565b6104e1565b61016c6102f0366004610e72565b61053d565b610308610303366004610f0c565b61054a565b005b610180610318366004610f7f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461035f90610fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461038b90610fb2565b80156103d85780601f106103ad576101008083540402835291602001916103d8565b820191906000526020600020905b8154815290600101906020018083116103bb57829003601f168201915b5050505050905090565b60006103ef338484610870565b5060015b92915050565b6000610406848484610a24565b61046584336104608560405180606001604052806028815260200161106c6028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602090815260408083203384529091529020549190610c4e565b610870565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103ef9185906104609086610c95565b60006103ef8383610ca5565b60606004805461035f90610fb2565b60006104d93383610ca5565b506001919050565b60006103ef3384610460856040518060600160405280602581526020016110946025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d1684529091529020549190610c4e565b60006103ef338484610a24565b73ffffffffffffffffffffffffffffffffffffffff87166105cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f4f574e45520000000000000000000000000000000000000060448201526064015b60405180910390fd5b83421115610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f45585049524154494f4e000000000000000000000000000060448201526064016105c3565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526006602090815260408083205460075482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601909252815191909201207f19010000000000000000000000000000000000000000000000000000000000006101008501526101028401949094526101228301939093529061014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561078b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f5349474e415455524500000000000000000000000000000060448201526064016105c3565b610834826001611006565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040902055610865898989610870565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff82166109b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff8216610b6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105c3565b610bb4816040518060600160405280602681526020016110466026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610c4e565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610bf09082610c95565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a17565b8183038184821115610c8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c39190610e2f565b509392505050565b808201828110156103f357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105c3565b600254610d2f9082610c95565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610d629082610c95565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000815180845260005b81811015610dea57602081850181015186830182015201610dce565b81811115610dfc576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610e426020830184610dc4565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e6d57600080fd5b919050565b60008060408385031215610e8557600080fd5b610e8e83610e49565b946020939093013593505050565b600080600060608486031215610eb157600080fd5b610eba84610e49565b9250610ec860208501610e49565b9150604084013590509250925092565b600060208284031215610eea57600080fd5b610e4282610e49565b600060208284031215610f0557600080fd5b5035919050565b600080600080600080600060e0888a031215610f2757600080fd5b610f3088610e49565b9650610f3e60208901610e49565b95506040880135945060608801359350608088013560ff81168114610f6257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f9257600080fd5b610f9b83610e49565b9150610fa960208401610e49565b90509250929050565b600181811c90821680610fc657607f821691505b60208210811415611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115611040577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122005932bc25bd40e0059087311cdb9869760c6f15e92501c0a74df88864585c46d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1455 CODESIZE SUB DUP1 PUSH3 0x1455 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x295 JUMP JUMPDEST DUP3 MLOAD DUP4 SWAP1 DUP4 SWAP1 PUSH3 0x4D SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x122 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x63 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x122 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD DUP6 MLOAD PUSH1 0x20 SWAP7 DUP8 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP10 ADD MSTORE DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP2 DUP11 ADD MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP4 ADD MSTORE CHAINID PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 PUSH1 0x7 SSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0xFF NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE POP PUSH3 0x357 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x130 SWAP1 PUSH3 0x31A JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x154 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x19F JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x16F JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x19F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x19F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x19F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x182 JUMP JUMPDEST POP PUSH3 0x1AD SWAP3 SWAP2 POP PUSH3 0x1B1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1AD JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1B2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x20D JUMPI PUSH3 0x20D PUSH3 0x1C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x238 JUMPI PUSH3 0x238 PUSH3 0x1C8 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x279 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x25A JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x28B JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2D1 DUP8 DUP4 DUP9 ADD PUSH3 0x1DE JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x2E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x2F7 DUP7 DUP3 DUP8 ADD PUSH3 0x1DE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x32F JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x351 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x10EE DUP1 PUSH3 0x367 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x136 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x2F5 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x109 JUMPI DUP1 PUSH4 0x3644E515 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x13B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x143 PUSH2 0x350 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xE2F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16C PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x3E2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0xE9C JUMP JUMPDEST PUSH2 0x3F9 JUMP JUMPDEST PUSH2 0x180 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH2 0x180 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x1F4 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x16C PUSH2 0x207 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x4B2 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x21A CALLDATASIZE PUSH1 0x4 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x143 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x28C CALLDATASIZE PUSH1 0x4 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x4BE JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0xEF3 JUMP JUMPDEST PUSH2 0x4CD JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2DD CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x4E1 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2F0 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x53D JUMP JUMPDEST PUSH2 0x308 PUSH2 0x303 CALLDATASIZE PUSH1 0x4 PUSH2 0xF0C JUMP JUMPDEST PUSH2 0x54A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x180 PUSH2 0x318 CALLDATASIZE PUSH1 0x4 PUSH2 0xF7F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x35F SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x38B SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D8 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3BB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 DUP5 PUSH2 0x870 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x406 DUP5 DUP5 DUP5 PUSH2 0xA24 JUMP JUMPDEST PUSH2 0x465 DUP5 CALLER PUSH2 0x460 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x106C PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH2 0x870 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3EF SWAP2 DUP6 SWAP1 PUSH2 0x460 SWAP1 DUP7 PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF DUP4 DUP4 PUSH2 0xCA5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x35F SWAP1 PUSH2 0xFB2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D9 CALLER DUP4 PUSH2 0xCA5 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 PUSH2 0x460 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1094 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 DUP5 PUSH2 0xA24 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH2 0x5CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F4F574E455200000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F45585049524154494F4E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x7 SLOAD DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP13 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP7 ADD DUP12 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 SWAP3 MSTORE DUP2 MLOAD SWAP2 SWAP1 SWAP3 ADD KECCAK256 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x102 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH2 0x122 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 PUSH2 0x142 ADD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x78B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x829 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH2 0x834 DUP3 PUSH1 0x1 PUSH2 0x1006 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x865 DUP10 DUP10 DUP10 PUSH2 0x870 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x912 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x9B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xAC7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xB6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH2 0xBB4 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1046 PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xBF0 SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0xA17 JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0xC8D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5C3 SWAP2 SWAP1 PUSH2 0xE2F JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xD22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xD2F SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xD62 SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDEA JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0xDCE JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xDFC JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xE42 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDC4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE8E DUP4 PUSH2 0xE49 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xEB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEBA DUP5 PUSH2 0xE49 JUMP JUMPDEST SWAP3 POP PUSH2 0xEC8 PUSH1 0x20 DUP6 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE42 DUP3 PUSH2 0xE49 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xF27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF30 DUP9 PUSH2 0xE49 JUMP JUMPDEST SWAP7 POP PUSH2 0xF3E PUSH1 0x20 DUP10 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xF62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF9B DUP4 PUSH2 0xE49 JUMP JUMPDEST SWAP2 POP PUSH2 0xFA9 PUSH1 0x20 DUP5 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xFC6 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x1000 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1040 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212200593 0x2B 0xC2 JUMPDEST 0xD4 0xE STOP MSIZE ADDMOD PUSH20 0x11CDB9869760C6F15E92501C0A74DF88864585C4 PUSH14 0x64736F6C634300080A0033000000 ","sourceMap":"270:2384:74:-:0;;;800:360;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2007:12:6;;876:4:74;;882:6;;2007:12:6;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2025:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2047:9:6;:14;;1013:22:74;;::::1;::::0;;::::1;::::0;364:10:::1;::::0;;;;::::1;::::0;;-1:-1:-1;364:10:74;;-1:-1:-1;;;364:10:74;;::::1;::::0;970:149;;424:95:::1;970:149:::0;;::::1;2012:25:124::0;2053:18;;;2046:34;;;;1045:26:74;2096:18:124;;;2089:34;914:13:74::1;2139:18:124::0;;;2132:34;1106:4:74::1;2182:19:124::0;;;;2175:61;;;;970:149:74;;;;;;;;;;1984:19:124;;;;970:149:74;;953:172;;;::::1;::::0;;;;934:16:::1;:191:::0;9620:21:6;;;;;-1:-1:-1;;2047:14:6;;;9620:21;;;;;;-1:-1:-1;270:2384:74;;-1:-1:-1;270:2384:74;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;270:2384:74;;;-1:-1:-1;270:2384:74;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:124;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:124;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:124;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:124:o;1036:712::-;1142:6;1150;1158;1211:2;1199:9;1190:7;1186:23;1182:32;1179:52;;;1227:1;1224;1217:12;1179:52;1254:16;;-1:-1:-1;;;;;1319:14:124;;;1316:34;;;1346:1;1343;1336:12;1316:34;1369:61;1422:7;1413:6;1402:9;1398:22;1369:61;:::i;:::-;1359:71;;1476:2;1465:9;1461:18;1455:25;1439:41;;1505:2;1495:8;1492:16;1489:36;;;1521:1;1518;1511:12;1489:36;;1544:63;1599:7;1588:8;1577:9;1573:24;1544:63;:::i;:::-;1534:73;;;1650:2;1639:9;1635:18;1629:25;1694:4;1687:5;1683:16;1676:5;1673:27;1663:55;;1714:1;1711;1704:12;1663:55;1737:5;1727:15;;;1036:712;;;;;:::o;2247:380::-;2326:1;2322:12;;;;2369;;;2390:61;;2444:4;2436:6;2432:17;2422:27;;2390:61;2497:2;2489:6;2486:14;2466:18;2463:38;2460:161;;;2543:10;2538:3;2534:20;2531:1;2524:31;2578:4;2575:1;2568:15;2606:4;2603:1;2596:15;2460:161;;2247:380;;;:::o;:::-;270:2384:74;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DOMAIN_SEPARATOR_10496":{"entryPoint":null,"id":10496,"parameterSlots":0,"returnSlots":0},"@EIP712_REVISION_10480":{"entryPoint":null,"id":10480,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_10490":{"entryPoint":null,"id":10490,"parameterSlots":0,"returnSlots":0},"@_approve_1256":{"entryPoint":2160,"id":1256,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_1278":{"entryPoint":null,"id":1278,"parameterSlots":3,"returnSlots":0},"@_mint_1155":{"entryPoint":3237,"id":1155,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_transfer_1100":{"entryPoint":2596,"id":1100,"parameterSlots":3,"returnSlots":0},"@add_2216":{"entryPoint":3221,"id":2216,"parameterSlots":2,"returnSlots":1},"@allowance_918":{"entryPoint":null,"id":918,"parameterSlots":2,"returnSlots":1},"@approve_939":{"entryPoint":994,"id":939,"parameterSlots":2,"returnSlots":1},"@balanceOf_879":{"entryPoint":null,"id":879,"parameterSlots":1,"returnSlots":1},"@decimals_855":{"entryPoint":null,"id":855,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_1034":{"entryPoint":1249,"id":1034,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_1005":{"entryPoint":1135,"id":1005,"parameterSlots":2,"returnSlots":1},"@mint_10650":{"entryPoint":1229,"id":10650,"parameterSlots":1,"returnSlots":1},"@mint_10668":{"entryPoint":1202,"id":10668,"parameterSlots":2,"returnSlots":1},"@name_837":{"entryPoint":848,"id":837,"parameterSlots":0,"returnSlots":1},"@nonces_10680":{"entryPoint":null,"id":10680,"parameterSlots":1,"returnSlots":1},"@permit_10633":{"entryPoint":1354,"id":10633,"parameterSlots":7,"returnSlots":0},"@sub_2265":{"entryPoint":3150,"id":2265,"parameterSlots":3,"returnSlots":1},"@symbol_846":{"entryPoint":1214,"id":846,"parameterSlots":0,"returnSlots":1},"@totalSupply_865":{"entryPoint":null,"id":865,"parameterSlots":0,"returnSlots":1},"@transferFrom_977":{"entryPoint":1017,"id":977,"parameterSlots":3,"returnSlots":1},"@transfer_900":{"entryPoint":1341,"id":900,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":3657,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":3800,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":3967,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":3740,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":3852,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":3698,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":3827,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":3524,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3631,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4102,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":4018,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:9085:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"824:147:124","statements":[{"nodeType":"YulAssignment","src":"834:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"856:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"843:12:124"},"nodeType":"YulFunctionCall","src":"843:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"834:5:124"}]},{"body":{"nodeType":"YulBlock","src":"949:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"958:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"961:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"951:6:124"},"nodeType":"YulFunctionCall","src":"951:12:124"},"nodeType":"YulExpressionStatement","src":"951:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"885:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"896:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"903:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"892:3:124"},"nodeType":"YulFunctionCall","src":"892:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"882:2:124"},"nodeType":"YulFunctionCall","src":"882:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"875:6:124"},"nodeType":"YulFunctionCall","src":"875:73:124"},"nodeType":"YulIf","src":"872:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"803:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"814:5:124","type":""}],"src":"775:196:124"},{"body":{"nodeType":"YulBlock","src":"1063:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"1109:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1118:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1121:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1111:6:124"},"nodeType":"YulFunctionCall","src":"1111:12:124"},"nodeType":"YulExpressionStatement","src":"1111:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1084:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1093:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1080:3:124"},"nodeType":"YulFunctionCall","src":"1080:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1105:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1076:3:124"},"nodeType":"YulFunctionCall","src":"1076:32:124"},"nodeType":"YulIf","src":"1073:52:124"},{"nodeType":"YulAssignment","src":"1134:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1163:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1144:18:124"},"nodeType":"YulFunctionCall","src":"1144:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1134:6:124"}]},{"nodeType":"YulAssignment","src":"1182:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1209:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1220:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1205:3:124"},"nodeType":"YulFunctionCall","src":"1205:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1192:12:124"},"nodeType":"YulFunctionCall","src":"1192:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1182:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1021:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1032:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1044:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1052:6:124","type":""}],"src":"976:254:124"},{"body":{"nodeType":"YulBlock","src":"1330:92:124","statements":[{"nodeType":"YulAssignment","src":"1340:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1352:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1363:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1348:3:124"},"nodeType":"YulFunctionCall","src":"1348:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1340:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1382:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1407:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1400:6:124"},"nodeType":"YulFunctionCall","src":"1400:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1393:6:124"},"nodeType":"YulFunctionCall","src":"1393:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1375:6:124"},"nodeType":"YulFunctionCall","src":"1375:41:124"},"nodeType":"YulExpressionStatement","src":"1375:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1299:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1310:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1321:4:124","type":""}],"src":"1235:187:124"},{"body":{"nodeType":"YulBlock","src":"1528:76:124","statements":[{"nodeType":"YulAssignment","src":"1538:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1550:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1561:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1546:3:124"},"nodeType":"YulFunctionCall","src":"1546:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1538:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1580:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1591:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1573:6:124"},"nodeType":"YulFunctionCall","src":"1573:25:124"},"nodeType":"YulExpressionStatement","src":"1573:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1497:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1508:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1519:4:124","type":""}],"src":"1427:177:124"},{"body":{"nodeType":"YulBlock","src":"1713:224:124","statements":[{"body":{"nodeType":"YulBlock","src":"1759:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1768:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1771:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1761:6:124"},"nodeType":"YulFunctionCall","src":"1761:12:124"},"nodeType":"YulExpressionStatement","src":"1761:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1734:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1743:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1730:3:124"},"nodeType":"YulFunctionCall","src":"1730:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1755:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1726:3:124"},"nodeType":"YulFunctionCall","src":"1726:32:124"},"nodeType":"YulIf","src":"1723:52:124"},{"nodeType":"YulAssignment","src":"1784:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1813:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1794:18:124"},"nodeType":"YulFunctionCall","src":"1794:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1784:6:124"}]},{"nodeType":"YulAssignment","src":"1832:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1876:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1861:3:124"},"nodeType":"YulFunctionCall","src":"1861:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1842:18:124"},"nodeType":"YulFunctionCall","src":"1842:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1832:6:124"}]},{"nodeType":"YulAssignment","src":"1889:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1916:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1927:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1912:3:124"},"nodeType":"YulFunctionCall","src":"1912:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1899:12:124"},"nodeType":"YulFunctionCall","src":"1899:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1889:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1663:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1674:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1686:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1694:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1702:6:124","type":""}],"src":"1609:328:124"},{"body":{"nodeType":"YulBlock","src":"2043:76:124","statements":[{"nodeType":"YulAssignment","src":"2053:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2065:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2076:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2061:3:124"},"nodeType":"YulFunctionCall","src":"2061:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2053:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2095:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2106:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2088:6:124"},"nodeType":"YulFunctionCall","src":"2088:25:124"},"nodeType":"YulExpressionStatement","src":"2088:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2012:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2023:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2034:4:124","type":""}],"src":"1942:177:124"},{"body":{"nodeType":"YulBlock","src":"2221:87:124","statements":[{"nodeType":"YulAssignment","src":"2231:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2254:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2239:3:124"},"nodeType":"YulFunctionCall","src":"2239:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2231:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2273:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2288:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2296:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2284:3:124"},"nodeType":"YulFunctionCall","src":"2284:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2266:6:124"},"nodeType":"YulFunctionCall","src":"2266:36:124"},"nodeType":"YulExpressionStatement","src":"2266:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2190:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2201:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2212:4:124","type":""}],"src":"2124:184:124"},{"body":{"nodeType":"YulBlock","src":"2383:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"2429:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2438:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2441:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2431:6:124"},"nodeType":"YulFunctionCall","src":"2431:12:124"},"nodeType":"YulExpressionStatement","src":"2431:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2404:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2413:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2400:3:124"},"nodeType":"YulFunctionCall","src":"2400:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2425:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2396:3:124"},"nodeType":"YulFunctionCall","src":"2396:32:124"},"nodeType":"YulIf","src":"2393:52:124"},{"nodeType":"YulAssignment","src":"2454:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2483:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2464:18:124"},"nodeType":"YulFunctionCall","src":"2464:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2454:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2349:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2360:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2372:6:124","type":""}],"src":"2313:186:124"},{"body":{"nodeType":"YulBlock","src":"2623:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2651:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2633:6:124"},"nodeType":"YulFunctionCall","src":"2633:21:124"},"nodeType":"YulExpressionStatement","src":"2633:21:124"},{"nodeType":"YulAssignment","src":"2663:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2689:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2701:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2712:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2697:3:124"},"nodeType":"YulFunctionCall","src":"2697:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"2671:17:124"},"nodeType":"YulFunctionCall","src":"2671:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2663:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2592:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2603:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2614:4:124","type":""}],"src":"2504:218:124"},{"body":{"nodeType":"YulBlock","src":"2797:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"2843:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2852:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2855:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2845:6:124"},"nodeType":"YulFunctionCall","src":"2845:12:124"},"nodeType":"YulExpressionStatement","src":"2845:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2818:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2827:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2814:3:124"},"nodeType":"YulFunctionCall","src":"2814:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2839:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2810:3:124"},"nodeType":"YulFunctionCall","src":"2810:32:124"},"nodeType":"YulIf","src":"2807:52:124"},{"nodeType":"YulAssignment","src":"2868:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2891:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2878:12:124"},"nodeType":"YulFunctionCall","src":"2878:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2868:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2763:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2774:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2786:6:124","type":""}],"src":"2727:180:124"},{"body":{"nodeType":"YulBlock","src":"3082:523:124","statements":[{"body":{"nodeType":"YulBlock","src":"3129:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3138:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3141:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3131:6:124"},"nodeType":"YulFunctionCall","src":"3131:12:124"},"nodeType":"YulExpressionStatement","src":"3131:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3103:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3112:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3099:3:124"},"nodeType":"YulFunctionCall","src":"3099:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3124:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3095:3:124"},"nodeType":"YulFunctionCall","src":"3095:33:124"},"nodeType":"YulIf","src":"3092:53:124"},{"nodeType":"YulAssignment","src":"3154:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3183:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3164:18:124"},"nodeType":"YulFunctionCall","src":"3164:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3154:6:124"}]},{"nodeType":"YulAssignment","src":"3202:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3235:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3246:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3231:3:124"},"nodeType":"YulFunctionCall","src":"3231:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3212:18:124"},"nodeType":"YulFunctionCall","src":"3212:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3202:6:124"}]},{"nodeType":"YulAssignment","src":"3259:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3297:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3282:3:124"},"nodeType":"YulFunctionCall","src":"3282:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3269:12:124"},"nodeType":"YulFunctionCall","src":"3269:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3259:6:124"}]},{"nodeType":"YulAssignment","src":"3310:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3337:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3348:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3333:3:124"},"nodeType":"YulFunctionCall","src":"3333:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3320:12:124"},"nodeType":"YulFunctionCall","src":"3320:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3310:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3361:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3391:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3402:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3387:3:124"},"nodeType":"YulFunctionCall","src":"3387:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3374:12:124"},"nodeType":"YulFunctionCall","src":"3374:33:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3365:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3455:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3464:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3467:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3457:6:124"},"nodeType":"YulFunctionCall","src":"3457:12:124"},"nodeType":"YulExpressionStatement","src":"3457:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3429:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3440:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3447:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3436:3:124"},"nodeType":"YulFunctionCall","src":"3436:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3426:2:124"},"nodeType":"YulFunctionCall","src":"3426:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3419:6:124"},"nodeType":"YulFunctionCall","src":"3419:35:124"},"nodeType":"YulIf","src":"3416:55:124"},{"nodeType":"YulAssignment","src":"3480:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3490:5:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3480:6:124"}]},{"nodeType":"YulAssignment","src":"3504:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3531:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3542:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3527:3:124"},"nodeType":"YulFunctionCall","src":"3527:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3514:12:124"},"nodeType":"YulFunctionCall","src":"3514:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3504:6:124"}]},{"nodeType":"YulAssignment","src":"3556:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3583:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3594:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3579:3:124"},"nodeType":"YulFunctionCall","src":"3579:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3566:12:124"},"nodeType":"YulFunctionCall","src":"3566:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3556:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3000:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3011:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3023:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3031:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3039:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3047:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3055:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3063:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3071:6:124","type":""}],"src":"2912:693:124"},{"body":{"nodeType":"YulBlock","src":"3697:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"3743:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3752:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3755:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3745:6:124"},"nodeType":"YulFunctionCall","src":"3745:12:124"},"nodeType":"YulExpressionStatement","src":"3745:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3718:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3727:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3714:3:124"},"nodeType":"YulFunctionCall","src":"3714:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3739:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3710:3:124"},"nodeType":"YulFunctionCall","src":"3710:32:124"},"nodeType":"YulIf","src":"3707:52:124"},{"nodeType":"YulAssignment","src":"3768:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3797:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3778:18:124"},"nodeType":"YulFunctionCall","src":"3778:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3768:6:124"}]},{"nodeType":"YulAssignment","src":"3816:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3849:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3860:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3845:3:124"},"nodeType":"YulFunctionCall","src":"3845:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3826:18:124"},"nodeType":"YulFunctionCall","src":"3826:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3816:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3655:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3666:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3678:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3686:6:124","type":""}],"src":"3610:260:124"},{"body":{"nodeType":"YulBlock","src":"3930:382:124","statements":[{"nodeType":"YulAssignment","src":"3940:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3954:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3957:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3950:3:124"},"nodeType":"YulFunctionCall","src":"3950:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3940:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3971:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"4001:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"4007:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3997:3:124"},"nodeType":"YulFunctionCall","src":"3997:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3975:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4048:31:124","statements":[{"nodeType":"YulAssignment","src":"4050:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4064:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4072:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4060:3:124"},"nodeType":"YulFunctionCall","src":"4060:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"4050:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4028:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4021:6:124"},"nodeType":"YulFunctionCall","src":"4021:26:124"},"nodeType":"YulIf","src":"4018:61:124"},{"body":{"nodeType":"YulBlock","src":"4138:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4159:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4162:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4152:6:124"},"nodeType":"YulFunctionCall","src":"4152:88:124"},"nodeType":"YulExpressionStatement","src":"4152:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4260:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4263:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4253:6:124"},"nodeType":"YulFunctionCall","src":"4253:15:124"},"nodeType":"YulExpressionStatement","src":"4253:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4288:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4291:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4281:6:124"},"nodeType":"YulFunctionCall","src":"4281:15:124"},"nodeType":"YulExpressionStatement","src":"4281:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4094:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4117:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4125:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4114:2:124"},"nodeType":"YulFunctionCall","src":"4114:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4091:2:124"},"nodeType":"YulFunctionCall","src":"4091:38:124"},"nodeType":"YulIf","src":"4088:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3910:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3919:6:124","type":""}],"src":"3875:437:124"},{"body":{"nodeType":"YulBlock","src":"4491:163:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4508:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4519:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4501:6:124"},"nodeType":"YulFunctionCall","src":"4501:21:124"},"nodeType":"YulExpressionStatement","src":"4501:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4542:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4553:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4538:3:124"},"nodeType":"YulFunctionCall","src":"4538:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4558:2:124","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4531:6:124"},"nodeType":"YulFunctionCall","src":"4531:30:124"},"nodeType":"YulExpressionStatement","src":"4531:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4581:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4592:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4577:3:124"},"nodeType":"YulFunctionCall","src":"4577:18:124"},{"hexValue":"494e56414c49445f4f574e4552","kind":"string","nodeType":"YulLiteral","src":"4597:15:124","type":"","value":"INVALID_OWNER"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4570:6:124"},"nodeType":"YulFunctionCall","src":"4570:43:124"},"nodeType":"YulExpressionStatement","src":"4570:43:124"},{"nodeType":"YulAssignment","src":"4622:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4634:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4645:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4630:3:124"},"nodeType":"YulFunctionCall","src":"4630:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4622:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4468:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4482:4:124","type":""}],"src":"4317:337:124"},{"body":{"nodeType":"YulBlock","src":"4833:168:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4850:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4861:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4843:6:124"},"nodeType":"YulFunctionCall","src":"4843:21:124"},"nodeType":"YulExpressionStatement","src":"4843:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4884:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4895:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4880:3:124"},"nodeType":"YulFunctionCall","src":"4880:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4900:2:124","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4873:6:124"},"nodeType":"YulFunctionCall","src":"4873:30:124"},"nodeType":"YulExpressionStatement","src":"4873:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4923:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4934:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4919:3:124"},"nodeType":"YulFunctionCall","src":"4919:18:124"},{"hexValue":"494e56414c49445f45585049524154494f4e","kind":"string","nodeType":"YulLiteral","src":"4939:20:124","type":"","value":"INVALID_EXPIRATION"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4912:6:124"},"nodeType":"YulFunctionCall","src":"4912:48:124"},"nodeType":"YulExpressionStatement","src":"4912:48:124"},{"nodeType":"YulAssignment","src":"4969:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4981:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4992:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4977:3:124"},"nodeType":"YulFunctionCall","src":"4977:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4969:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4810:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4824:4:124","type":""}],"src":"4659:342:124"},{"body":{"nodeType":"YulBlock","src":"5247:373:124","statements":[{"nodeType":"YulAssignment","src":"5257:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5269:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5280:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5265:3:124"},"nodeType":"YulFunctionCall","src":"5265:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5257:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5300:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"5311:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5293:6:124"},"nodeType":"YulFunctionCall","src":"5293:25:124"},"nodeType":"YulExpressionStatement","src":"5293:25:124"},{"nodeType":"YulVariableDeclaration","src":"5327:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5337:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5331:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5399:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5410:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5395:3:124"},"nodeType":"YulFunctionCall","src":"5395:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5419:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5427:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5415:3:124"},"nodeType":"YulFunctionCall","src":"5415:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5388:6:124"},"nodeType":"YulFunctionCall","src":"5388:43:124"},"nodeType":"YulExpressionStatement","src":"5388:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5451:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5462:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5447:3:124"},"nodeType":"YulFunctionCall","src":"5447:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"5471:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5479:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5467:3:124"},"nodeType":"YulFunctionCall","src":"5467:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5440:6:124"},"nodeType":"YulFunctionCall","src":"5440:43:124"},"nodeType":"YulExpressionStatement","src":"5440:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5503:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5514:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5499:3:124"},"nodeType":"YulFunctionCall","src":"5499:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"5519:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5492:6:124"},"nodeType":"YulFunctionCall","src":"5492:34:124"},"nodeType":"YulExpressionStatement","src":"5492:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5546:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5557:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5542:3:124"},"nodeType":"YulFunctionCall","src":"5542:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"5563:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5535:6:124"},"nodeType":"YulFunctionCall","src":"5535:35:124"},"nodeType":"YulExpressionStatement","src":"5535:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5590:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5601:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5586:3:124"},"nodeType":"YulFunctionCall","src":"5586:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"5607:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5579:6:124"},"nodeType":"YulFunctionCall","src":"5579:35:124"},"nodeType":"YulExpressionStatement","src":"5579:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5176:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"5187:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5195:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5203:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5211:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5219:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5227:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5238:4:124","type":""}],"src":"5006:614:124"},{"body":{"nodeType":"YulBlock","src":"5873:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5890:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"5895:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5883:6:124"},"nodeType":"YulFunctionCall","src":"5883:79:124"},"nodeType":"YulExpressionStatement","src":"5883:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5982:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"5987:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5978:3:124"},"nodeType":"YulFunctionCall","src":"5978:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"5991:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5971:6:124"},"nodeType":"YulFunctionCall","src":"5971:27:124"},"nodeType":"YulExpressionStatement","src":"5971:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6018:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"6023:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6014:3:124"},"nodeType":"YulFunctionCall","src":"6014:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"6028:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6007:6:124"},"nodeType":"YulFunctionCall","src":"6007:28:124"},"nodeType":"YulExpressionStatement","src":"6007:28:124"},{"nodeType":"YulAssignment","src":"6044:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6055:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"6060:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6051:3:124"},"nodeType":"YulFunctionCall","src":"6051:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6044:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"5841:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5854:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5865:3:124","type":""}],"src":"5625:444:124"},{"body":{"nodeType":"YulBlock","src":"6255:217:124","statements":[{"nodeType":"YulAssignment","src":"6265:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6277:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6288:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6273:3:124"},"nodeType":"YulFunctionCall","src":"6273:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6265:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6308:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"6319:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6301:6:124"},"nodeType":"YulFunctionCall","src":"6301:25:124"},"nodeType":"YulExpressionStatement","src":"6301:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6346:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6357:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6342:3:124"},"nodeType":"YulFunctionCall","src":"6342:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6366:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6374:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6362:3:124"},"nodeType":"YulFunctionCall","src":"6362:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6335:6:124"},"nodeType":"YulFunctionCall","src":"6335:45:124"},"nodeType":"YulExpressionStatement","src":"6335:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6400:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6411:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6396:3:124"},"nodeType":"YulFunctionCall","src":"6396:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"6416:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6389:6:124"},"nodeType":"YulFunctionCall","src":"6389:34:124"},"nodeType":"YulExpressionStatement","src":"6389:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6443:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6454:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6439:3:124"},"nodeType":"YulFunctionCall","src":"6439:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"6459:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6432:6:124"},"nodeType":"YulFunctionCall","src":"6432:34:124"},"nodeType":"YulExpressionStatement","src":"6432:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6200:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6211:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6219:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6227:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6235:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6246:4:124","type":""}],"src":"6074:398:124"},{"body":{"nodeType":"YulBlock","src":"6651:167:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6668:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6679:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6661:6:124"},"nodeType":"YulFunctionCall","src":"6661:21:124"},"nodeType":"YulExpressionStatement","src":"6661:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6702:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6713:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6698:3:124"},"nodeType":"YulFunctionCall","src":"6698:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:124","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6691:6:124"},"nodeType":"YulFunctionCall","src":"6691:30:124"},"nodeType":"YulExpressionStatement","src":"6691:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6741:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6752:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6737:3:124"},"nodeType":"YulFunctionCall","src":"6737:18:124"},{"hexValue":"494e56414c49445f5349474e4154555245","kind":"string","nodeType":"YulLiteral","src":"6757:19:124","type":"","value":"INVALID_SIGNATURE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6730:6:124"},"nodeType":"YulFunctionCall","src":"6730:47:124"},"nodeType":"YulExpressionStatement","src":"6730:47:124"},{"nodeType":"YulAssignment","src":"6786:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6798:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6809:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6794:3:124"},"nodeType":"YulFunctionCall","src":"6794:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6786:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6628:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6642:4:124","type":""}],"src":"6477:341:124"},{"body":{"nodeType":"YulBlock","src":"6871:234:124","statements":[{"body":{"nodeType":"YulBlock","src":"6906:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6927:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6930:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6920:6:124"},"nodeType":"YulFunctionCall","src":"6920:88:124"},"nodeType":"YulExpressionStatement","src":"6920:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7028:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7031:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7021:6:124"},"nodeType":"YulFunctionCall","src":"7021:15:124"},"nodeType":"YulExpressionStatement","src":"7021:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7056:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7059:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7049:6:124"},"nodeType":"YulFunctionCall","src":"7049:15:124"},"nodeType":"YulExpressionStatement","src":"7049:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6887:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6894:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6890:3:124"},"nodeType":"YulFunctionCall","src":"6890:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6884:2:124"},"nodeType":"YulFunctionCall","src":"6884:13:124"},"nodeType":"YulIf","src":"6881:193:124"},{"nodeType":"YulAssignment","src":"7083:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7094:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"7097:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7090:3:124"},"nodeType":"YulFunctionCall","src":"7090:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7083:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6854:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"6857:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"6863:3:124","type":""}],"src":"6823:282:124"},{"body":{"nodeType":"YulBlock","src":"7284:226:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7301:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7312:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7294:6:124"},"nodeType":"YulFunctionCall","src":"7294:21:124"},"nodeType":"YulExpressionStatement","src":"7294:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7335:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7346:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7331:3:124"},"nodeType":"YulFunctionCall","src":"7331:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"7351:2:124","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7324:6:124"},"nodeType":"YulFunctionCall","src":"7324:30:124"},"nodeType":"YulExpressionStatement","src":"7324:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7374:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7385:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7370:3:124"},"nodeType":"YulFunctionCall","src":"7370:18:124"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"7390:34:124","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7363:6:124"},"nodeType":"YulFunctionCall","src":"7363:62:124"},"nodeType":"YulExpressionStatement","src":"7363:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7445:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7456:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7441:3:124"},"nodeType":"YulFunctionCall","src":"7441:18:124"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"7461:6:124","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7434:6:124"},"nodeType":"YulFunctionCall","src":"7434:34:124"},"nodeType":"YulExpressionStatement","src":"7434:34:124"},{"nodeType":"YulAssignment","src":"7477:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7489:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7500:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7485:3:124"},"nodeType":"YulFunctionCall","src":"7485:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7477:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7261:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7275:4:124","type":""}],"src":"7110:400:124"},{"body":{"nodeType":"YulBlock","src":"7689:224:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7706:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7717:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7699:6:124"},"nodeType":"YulFunctionCall","src":"7699:21:124"},"nodeType":"YulExpressionStatement","src":"7699:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7740:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7751:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7736:3:124"},"nodeType":"YulFunctionCall","src":"7736:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"7756:2:124","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7729:6:124"},"nodeType":"YulFunctionCall","src":"7729:30:124"},"nodeType":"YulExpressionStatement","src":"7729:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7779:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7790:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7775:3:124"},"nodeType":"YulFunctionCall","src":"7775:18:124"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"7795:34:124","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7768:6:124"},"nodeType":"YulFunctionCall","src":"7768:62:124"},"nodeType":"YulExpressionStatement","src":"7768:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7850:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7861:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7846:3:124"},"nodeType":"YulFunctionCall","src":"7846:18:124"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"7866:4:124","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7839:6:124"},"nodeType":"YulFunctionCall","src":"7839:32:124"},"nodeType":"YulExpressionStatement","src":"7839:32:124"},{"nodeType":"YulAssignment","src":"7880:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7892:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7903:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7888:3:124"},"nodeType":"YulFunctionCall","src":"7888:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7880:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7666:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7680:4:124","type":""}],"src":"7515:398:124"},{"body":{"nodeType":"YulBlock","src":"8092:227:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8109:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8120:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8102:6:124"},"nodeType":"YulFunctionCall","src":"8102:21:124"},"nodeType":"YulExpressionStatement","src":"8102:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8143:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8154:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8139:3:124"},"nodeType":"YulFunctionCall","src":"8139:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"8159:2:124","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8132:6:124"},"nodeType":"YulFunctionCall","src":"8132:30:124"},"nodeType":"YulExpressionStatement","src":"8132:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8182:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8193:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8178:3:124"},"nodeType":"YulFunctionCall","src":"8178:18:124"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"8198:34:124","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8171:6:124"},"nodeType":"YulFunctionCall","src":"8171:62:124"},"nodeType":"YulExpressionStatement","src":"8171:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8253:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8264:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8249:3:124"},"nodeType":"YulFunctionCall","src":"8249:18:124"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"8269:7:124","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8242:6:124"},"nodeType":"YulFunctionCall","src":"8242:35:124"},"nodeType":"YulExpressionStatement","src":"8242:35:124"},{"nodeType":"YulAssignment","src":"8286:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8298:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8309:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8294:3:124"},"nodeType":"YulFunctionCall","src":"8294:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8286:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8069:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8083:4:124","type":""}],"src":"7918:401:124"},{"body":{"nodeType":"YulBlock","src":"8498:225:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8515:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8526:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8508:6:124"},"nodeType":"YulFunctionCall","src":"8508:21:124"},"nodeType":"YulExpressionStatement","src":"8508:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8549:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8560:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8545:3:124"},"nodeType":"YulFunctionCall","src":"8545:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"8565:2:124","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8538:6:124"},"nodeType":"YulFunctionCall","src":"8538:30:124"},"nodeType":"YulExpressionStatement","src":"8538:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8599:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8584:3:124"},"nodeType":"YulFunctionCall","src":"8584:18:124"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"8604:34:124","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8577:6:124"},"nodeType":"YulFunctionCall","src":"8577:62:124"},"nodeType":"YulExpressionStatement","src":"8577:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8659:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8670:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8655:3:124"},"nodeType":"YulFunctionCall","src":"8655:18:124"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"8675:5:124","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8648:6:124"},"nodeType":"YulFunctionCall","src":"8648:33:124"},"nodeType":"YulExpressionStatement","src":"8648:33:124"},{"nodeType":"YulAssignment","src":"8690:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8702:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8713:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8698:3:124"},"nodeType":"YulFunctionCall","src":"8698:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8690:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8475:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8489:4:124","type":""}],"src":"8324:399:124"},{"body":{"nodeType":"YulBlock","src":"8902:181:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8919:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8930:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8912:6:124"},"nodeType":"YulFunctionCall","src":"8912:21:124"},"nodeType":"YulExpressionStatement","src":"8912:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8953:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8964:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8949:3:124"},"nodeType":"YulFunctionCall","src":"8949:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"8969:2:124","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8942:6:124"},"nodeType":"YulFunctionCall","src":"8942:30:124"},"nodeType":"YulExpressionStatement","src":"8942:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8992:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9003:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8988:3:124"},"nodeType":"YulFunctionCall","src":"8988:18:124"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"9008:33:124","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8981:6:124"},"nodeType":"YulFunctionCall","src":"8981:61:124"},"nodeType":"YulExpressionStatement","src":"8981:61:124"},{"nodeType":"YulAssignment","src":"9051:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9063:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9059:3:124"},"nodeType":"YulFunctionCall","src":"9059:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9051:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8879:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8893:4:124","type":""}],"src":"8728:355:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value4 := value\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"INVALID_OWNER\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"INVALID_EXPIRATION\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"INVALID_SIGNATURE\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101365760003560e01c806370a08231116100b2578063a0712d6811610081578063a9059cbb11610066578063a9059cbb146102e2578063d505accf146102f5578063dd62ed3e1461030a57600080fd5b8063a0712d68146102bc578063a457c2d7146102cf57600080fd5b806370a082311461020c57806378160376146102425780637ecebe001461027e57806395d89b41146102b457600080fd5b806330adf81f116101095780633644e515116100ee5780633644e515146101dd57806339509351146101e657806340c10f19146101f957600080fd5b806330adf81f146101a1578063313ce567146101c857600080fd5b806306fdde031461013b578063095ea7b31461015957806318160ddd1461017c57806323b872dd1461018e575b600080fd5b610143610350565b6040516101509190610e2f565b60405180910390f35b61016c610167366004610e72565b6103e2565b6040519015158152602001610150565b6002545b604051908152602001610150565b61016c61019c366004610e9c565b6103f9565b6101807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460405160ff9091168152602001610150565b61018060075481565b61016c6101f4366004610e72565b61046f565b61016c610207366004610e72565b6104b2565b61018061021a366004610ed8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101436040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61018061028c366004610ed8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b6101436104be565b61016c6102ca366004610ef3565b6104cd565b61016c6102dd366004610e72565b6104e1565b61016c6102f0366004610e72565b61053d565b610308610303366004610f0c565b61054a565b005b610180610318366004610f7f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461035f90610fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461038b90610fb2565b80156103d85780601f106103ad576101008083540402835291602001916103d8565b820191906000526020600020905b8154815290600101906020018083116103bb57829003601f168201915b5050505050905090565b60006103ef338484610870565b5060015b92915050565b6000610406848484610a24565b61046584336104608560405180606001604052806028815260200161106c6028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602090815260408083203384529091529020549190610c4e565b610870565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103ef9185906104609086610c95565b60006103ef8383610ca5565b60606004805461035f90610fb2565b60006104d93383610ca5565b506001919050565b60006103ef3384610460856040518060600160405280602581526020016110946025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d1684529091529020549190610c4e565b60006103ef338484610a24565b73ffffffffffffffffffffffffffffffffffffffff87166105cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f4f574e45520000000000000000000000000000000000000060448201526064015b60405180910390fd5b83421115610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f45585049524154494f4e000000000000000000000000000060448201526064016105c3565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526006602090815260408083205460075482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601909252815191909201207f19010000000000000000000000000000000000000000000000000000000000006101008501526101028401949094526101228301939093529061014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561078b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f5349474e415455524500000000000000000000000000000060448201526064016105c3565b610834826001611006565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040902055610865898989610870565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff82166109b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff8216610b6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105c3565b610bb4816040518060600160405280602681526020016110466026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610c4e565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610bf09082610c95565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a17565b8183038184821115610c8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c39190610e2f565b509392505050565b808201828110156103f357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105c3565b600254610d2f9082610c95565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610d629082610c95565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000815180845260005b81811015610dea57602081850181015186830182015201610dce565b81811115610dfc576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610e426020830184610dc4565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e6d57600080fd5b919050565b60008060408385031215610e8557600080fd5b610e8e83610e49565b946020939093013593505050565b600080600060608486031215610eb157600080fd5b610eba84610e49565b9250610ec860208501610e49565b9150604084013590509250925092565b600060208284031215610eea57600080fd5b610e4282610e49565b600060208284031215610f0557600080fd5b5035919050565b600080600080600080600060e0888a031215610f2757600080fd5b610f3088610e49565b9650610f3e60208901610e49565b95506040880135945060608801359350608088013560ff81168114610f6257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f9257600080fd5b610f9b83610e49565b9150610fa960208401610e49565b90509250929050565b600181811c90821680610fc657607f821691505b60208210811415611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115611040577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122005932bc25bd40e0059087311cdb9869760c6f15e92501c0a74df88864585c46d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x136 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x2F5 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x109 JUMPI DUP1 PUSH4 0x3644E515 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x13B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x143 PUSH2 0x350 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xE2F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16C PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x3E2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0xE9C JUMP JUMPDEST PUSH2 0x3F9 JUMP JUMPDEST PUSH2 0x180 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH2 0x180 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x1F4 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x16C PUSH2 0x207 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x4B2 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x21A CALLDATASIZE PUSH1 0x4 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x143 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x28C CALLDATASIZE PUSH1 0x4 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x4BE JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0xEF3 JUMP JUMPDEST PUSH2 0x4CD JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2DD CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x4E1 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2F0 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x53D JUMP JUMPDEST PUSH2 0x308 PUSH2 0x303 CALLDATASIZE PUSH1 0x4 PUSH2 0xF0C JUMP JUMPDEST PUSH2 0x54A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x180 PUSH2 0x318 CALLDATASIZE PUSH1 0x4 PUSH2 0xF7F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x35F SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x38B SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D8 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3BB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 DUP5 PUSH2 0x870 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x406 DUP5 DUP5 DUP5 PUSH2 0xA24 JUMP JUMPDEST PUSH2 0x465 DUP5 CALLER PUSH2 0x460 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x106C PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH2 0x870 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3EF SWAP2 DUP6 SWAP1 PUSH2 0x460 SWAP1 DUP7 PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF DUP4 DUP4 PUSH2 0xCA5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x35F SWAP1 PUSH2 0xFB2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D9 CALLER DUP4 PUSH2 0xCA5 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 PUSH2 0x460 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1094 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 DUP5 PUSH2 0xA24 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH2 0x5CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F4F574E455200000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F45585049524154494F4E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x7 SLOAD DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP13 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP7 ADD DUP12 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 SWAP3 MSTORE DUP2 MLOAD SWAP2 SWAP1 SWAP3 ADD KECCAK256 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x102 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH2 0x122 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 PUSH2 0x142 ADD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x78B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x829 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH2 0x834 DUP3 PUSH1 0x1 PUSH2 0x1006 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x865 DUP10 DUP10 DUP10 PUSH2 0x870 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x912 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x9B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xAC7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xB6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH2 0xBB4 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1046 PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xBF0 SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0xA17 JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0xC8D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5C3 SWAP2 SWAP1 PUSH2 0xE2F JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xD22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xD2F SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xD62 SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDEA JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0xDCE JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xDFC JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xE42 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDC4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE8E DUP4 PUSH2 0xE49 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xEB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEBA DUP5 PUSH2 0xE49 JUMP JUMPDEST SWAP3 POP PUSH2 0xEC8 PUSH1 0x20 DUP6 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE42 DUP3 PUSH2 0xE49 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xF27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF30 DUP9 PUSH2 0xE49 JUMP JUMPDEST SWAP7 POP PUSH2 0xF3E PUSH1 0x20 DUP10 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xF62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF9B DUP4 PUSH2 0xE49 JUMP JUMPDEST SWAP2 POP PUSH2 0xFA9 PUSH1 0x20 DUP5 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xFC6 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x1000 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1040 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212200593 0x2B 0xC2 JUMPDEST 0xD4 0xE STOP MSIZE ADDMOD PUSH20 0x11CDB9869760C6F15E92501C0A74DF88864585C4 PUSH14 0x64736F6C634300080A0033000000 ","sourceMap":"270:2384:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4029:156;;;;;;:::i;:::-;;:::i;:::-;;;1400:14:124;;1393:22;1375:41;;1363:2;1348:18;4029:156:6;1235:187:124;3102:92:6;3177:12;;3102:92;;;1573:25:124;;;1561:2;1546:18;3102:92:6;1427:177:124;4619:343:6;;;;;;:::i;:::-;;:::i;523:141:74:-;;569:95;523:141;;2975:75:6;3036:9;;2975:75;;3036:9;;;;2266:36:124;;2254:2;2239:18;2975:75:6;2124:184:124;764:31:74;;;;;;5331:205:6;;;;;;:::i;:::-;;:::i;2430:117:74:-;;;;;;:::i;:::-;;:::i;3244:111:6:-;;;;;;:::i;:::-;3332:18;;3310:7;3332:18;;;;;;;;;;;;3244:111;324:50:74;;364:10;;;;;;;;;;;;;;;;;324:50;;2551:101;;;;;;:::i;:::-;2633:14;;2611:7;2633:14;;;:7;:14;;;;;;;2551:101;2301:79:6;;;:::i;2097:105:74:-;;;;;;:::i;:::-;;:::i;5993:316:6:-;;;;;;:::i;:::-;;:::i;3540:162::-;;;;;;:::i;:::-;;:::i;1199:729:74:-;;;;;;:::i;:::-;;:::i;:::-;;3752:155:6;;;;;;:::i;:::-;3875:18;;;;3853:7;3875:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3752:155;2123:75;2160:13;2188:5;2181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;:::o;4029:156::-;4112:4;4124:39;678:10:4;4147:7:6;4156:6;4124:8;:39::i;:::-;-1:-1:-1;4176:4:6;4029:156;;;;;:::o;4619:343::-;4741:4;4753:36;4763:6;4771:9;4782:6;4753:9;:36::i;:::-;4795:145;4811:6;678:10:4;4845:89:6;4883:6;4845:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;;;678:10:4;4845:33:6;;;;;;;;;;:37;:89::i;:::-;4795:8;:145::i;:::-;-1:-1:-1;4953:4:6;4619:343;;;;;:::o;5331:205::-;678:10:4;5419:4:6;5463:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5419:4;;5431:83;;5454:7;;5463:50;;5502:10;5463:38;:50::i;2430:117:74:-;2492:4;2504:21;2510:7;2519:5;2504;:21::i;2301:79:6:-;2340:13;2368:7;2361:14;;;;;:::i;2097:105:74:-;2142:4;2154:26;678:10:4;2174:5:74;2154;:26::i;:::-;-1:-1:-1;2193:4:74;;2097:105;-1:-1:-1;2097:105:74:o;5993:316:6:-;6098:4;6110:177;678:10:4;6146:7:6;6161:120;6209:15;6161:120;;;;;;;;;;;;;;;;;678:10:4;6161:25:6;;;;:11;:25;;;;;;;;;:34;;;;;;;;;;;;:38;:120::i;3540:162::-;3626:4;3638:42;678:10:4;3662:9:6;3673:6;3638:9;:42::i;1199:729:74:-;1375:19;;;1367:45;;;;;;;4519:2:124;1367:45:74;;;4501:21:124;4558:2;4538:18;;;4531:30;4597:15;4577:18;;;4570:43;4630:18;;1367:45:74;;;;;;;;;1476:8;1457:15;:27;;1449:58;;;;;;;4861:2:124;1449:58:74;;;4843:21:124;4900:2;4880:18;;;4873:30;4939:20;4919:18;;;4912:48;4977:18;;1449:58:74;4659:342:124;1449:58:74;1541:14;;;;1513:25;1541:14;;;:7;:14;;;;;;;;;1641:16;;1677:79;;569:95;1677:79;;;5293:25:124;5395:18;;;5388:43;;;;5467:15;;;5447:18;;;5440:43;5499:18;;;5492:34;;;5542:19;;;5535:35;;;5586:19;;;;5579:35;;;1677:79:74;;;;;;;;;;5265:19:124;;;1677:79:74;;;1667:90;;;;;;;5895:66:124;1595:170:74;;;5883:79:124;5978:11;;;5971:27;;;;6014:12;;;6007:28;;;;1513:25:74;6051:12:124;;1595:170:74;;;;;;;;;;;;;1578:193;;1595:170;1578:193;;;;1794:26;;;;;;;;;6301:25:124;;;6374:4;6362:17;;6342:18;;;6335:45;;;;6396:18;;;6389:34;;;6439:18;;;6432:34;;;1578:193:74;-1:-1:-1;1794:26:74;;6273:19:124;;1794:26:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1785:35;;:5;:35;;;1777:65;;;;;;;6679:2:124;1777:65:74;;;6661:21:124;6718:2;6698:18;;;6691:30;6757:19;6737:18;;;6730:47;6794:18;;1777:65:74;6477:341:124;1777:65:74;1865:21;:17;1885:1;1865:21;:::i;:::-;1848:14;;;;;;;:7;:14;;;;;:38;1892:31;1856:5;1908:7;1917:5;1892:8;:31::i;:::-;1361:567;;1199:729;;;;;;;:::o;8935:322:6:-;9032:19;;;9024:68;;;;;;;7312:2:124;9024:68:6;;;7294:21:124;7351:2;7331:18;;;7324:30;7390:34;7370:18;;;7363:62;7461:6;7441:18;;;7434:34;7485:19;;9024:68:6;7110:400:124;9024:68:6;9106:21;;;9098:68;;;;;;;7717:2:124;9098:68:6;;;7699:21:124;7756:2;7736:18;;;7729:30;7795:34;7775:18;;;7768:62;7866:4;7846:18;;;7839:32;7888:19;;9098:68:6;7515:398:124;9098:68:6;9173:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9220:32;;1573:25:124;;;9220:32:6;;1546:18:124;9220:32:6;;;;;;;;8935:322;;;:::o;6753:504::-;6854:20;;;6846:70;;;;;;;8120:2:124;6846:70:6;;;8102:21:124;8159:2;8139:18;;;8132:30;8198:34;8178:18;;;8171:62;8269:7;8249:18;;;8242:35;8294:19;;6846:70:6;7918:401:124;6846:70:6;6930:23;;;6922:71;;;;;;;8526:2:124;6922:71:6;;;8508:21:124;8565:2;8545:18;;;8538:30;8604:34;8584:18;;;8577:62;8675:5;8655:18;;;8648:33;8698:19;;6922:71:6;8324:399:124;6922:71:6;7074;7096:6;7074:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7054:17;;;;:9;:17;;;;;;;;;;;:91;;;;7174:20;;;;;;;:32;;7199:6;7174:24;:32::i;:::-;7151:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7217:35;1573:25:124;;;7151:20:6;;7217:35;;;;;;1546:18:124;7217:35:6;1427:177:124;1011:161:14;1140:5;;;1153:7;1135:16;;;;1127:34;;;;;;;;;;;;;:::i;:::-;;1011:161;;;;;:::o;410:129::-;516:5;;;511:16;;;;503:25;;;;;7507:348:6;7586:21;;;7578:65;;;;;;;8930:2:124;7578:65:6;;;8912:21:124;8969:2;8949:18;;;8942:30;9008:33;8988:18;;;8981:61;9059:18;;7578:65:6;8728:355:124;7578:65:6;7721:12;;:24;;7738:6;7721:16;:24::i;:::-;7706:12;:39;7772:18;;;:9;:18;;;;;;;;;;;:30;;7795:6;7772:22;:30::i;:::-;7751:18;;;:9;:18;;;;;;;;;;;:51;;;;7813:37;;1573:25:124;;;7751:18:6;;:9;;7813:37;;1546:18:124;7813:37:6;;;;;;;7507:348;;:::o;14:531:124:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:124:o;775:196::-;843:20;;903:42;892:54;;882:65;;872:93;;961:1;958;951:12;872:93;775:196;;;:::o;976:254::-;1044:6;1052;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;:::-;1134:39;1220:2;1205:18;;;;1192:32;;-1:-1:-1;;;976:254:124:o;1609:328::-;1686:6;1694;1702;1755:2;1743:9;1734:7;1730:23;1726:32;1723:52;;;1771:1;1768;1761:12;1723:52;1794:29;1813:9;1794:29;:::i;:::-;1784:39;;1842:38;1876:2;1865:9;1861:18;1842:38;:::i;:::-;1832:48;;1927:2;1916:9;1912:18;1899:32;1889:42;;1609:328;;;;;:::o;2313:186::-;2372:6;2425:2;2413:9;2404:7;2400:23;2396:32;2393:52;;;2441:1;2438;2431:12;2393:52;2464:29;2483:9;2464:29;:::i;2727:180::-;2786:6;2839:2;2827:9;2818:7;2814:23;2810:32;2807:52;;;2855:1;2852;2845:12;2807:52;-1:-1:-1;2878:23:124;;2727:180;-1:-1:-1;2727:180:124:o;2912:693::-;3023:6;3031;3039;3047;3055;3063;3071;3124:3;3112:9;3103:7;3099:23;3095:33;3092:53;;;3141:1;3138;3131:12;3092:53;3164:29;3183:9;3164:29;:::i;:::-;3154:39;;3212:38;3246:2;3235:9;3231:18;3212:38;:::i;:::-;3202:48;;3297:2;3286:9;3282:18;3269:32;3259:42;;3348:2;3337:9;3333:18;3320:32;3310:42;;3402:3;3391:9;3387:19;3374:33;3447:4;3440:5;3436:16;3429:5;3426:27;3416:55;;3467:1;3464;3457:12;3416:55;2912:693;;;;-1:-1:-1;2912:693:124;;;;3490:5;3542:3;3527:19;;3514:33;;-1:-1:-1;3594:3:124;3579:19;;;3566:33;;2912:693;-1:-1:-1;;2912:693:124:o;3610:260::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3778:29;3797:9;3778:29;:::i;:::-;3768:39;;3826:38;3860:2;3849:9;3845:18;3826:38;:::i;:::-;3816:48;;3610:260;;;;;:::o;3875:437::-;3954:1;3950:12;;;;3997;;;4018:61;;4072:4;4064:6;4060:17;4050:27;;4018:61;4125:2;4117:6;4114:14;4094:18;4091:38;4088:218;;;4162:77;4159:1;4152:88;4263:4;4260:1;4253:15;4291:4;4288:1;4281:15;4088:218;;3875:437;;;:::o;6823:282::-;6863:3;6894:1;6890:6;6887:1;6884:13;6881:193;;;6930:77;6927:1;6920:88;7031:4;7028:1;7021:15;7059:4;7056:1;7049:15;6881:193;-1:-1:-1;7090:9:124;;6823:282::o"},"gasEstimates":{"creation":{"codeDepositCost":"866800","executionCost":"infinite","totalCost":"infinite"},"external":{"DOMAIN_SEPARATOR()":"2340","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"241","allowance(address,address)":"infinite","approve(address,uint256)":"24596","balanceOf(address)":"2539","decimals()":"2357","decreaseAllowance(address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","mint(address,uint256)":"infinite","mint(uint256)":"infinite","name()":"infinite","nonces(address)":"2580","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","mint(address,uint256)":"40c10f19","mint(uint256)":"a0712d68","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":\"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\"},{\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC20 minting logic\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"mint(address,uint256)\":{\"details\":\"Function to mint tokens to address\",\"params\":{\"account\":\"The account to mint tokens.\",\"value\":\"The amount of tokens to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"mint(uint256)\":{\"details\":\"Function to mint tokens\",\"params\":{\"value\":\"The amount of tokens to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"title\":\"ERC20Mintable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/tokens/MintableERC20.sol\":\"MintableERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.sol';\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\n\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n\\n  /**\\n   * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n   * a default value of 18.\\n   *\\n   * To select a different value for {decimals}, use {_setupDecimals}.\\n   *\\n   * All three of these values are immutable: they can only be set once during\\n   * construction.\\n   */\\n  constructor(string memory name, string memory symbol) {\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = 18;\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n   * called.\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `recipient` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n    _transfer(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) public view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20};\\n   *\\n   * Requirements:\\n   * - `sender` and `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) public virtual override returns (bool) {\\n    _transfer(sender, recipient, amount);\\n    _approve(\\n      sender,\\n      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   * - `spender` must have allowance for the caller of at least\\n   * `subtractedValue`.\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');\\n    _balances[recipient] = _balances[recipient].add(amount);\\n    emit Transfer(sender, recipient, amount);\\n  }\\n\\n  /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: mint to the zero address');\\n\\n    _beforeTokenTransfer(address(0), account, amount);\\n\\n    _totalSupply = _totalSupply.add(amount);\\n    _balances[account] = _balances[account].add(amount);\\n    emit Transfer(address(0), account, amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `amount` tokens from `account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements\\n   *\\n   * - `account` cannot be the zero address.\\n   * - `account` must have at least `amount` tokens.\\n   */\\n  function _burn(address account, uint256 amount) internal virtual {\\n    require(account != address(0), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');\\n    _totalSupply = _totalSupply.sub(amount);\\n    emit Transfer(account, address(0), amount);\\n  }\\n\\n  /**\\n   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\\n   *\\n   * This is internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `owner` cannot be the zero address.\\n   * - `spender` cannot be the zero address.\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev Sets {decimals} to a value other than the default one of 18.\\n   *\\n   * WARNING: This function should only be called from the constructor. Most\\n   * applications that interact with token contracts will not expect\\n   * {decimals} to ever change, and may work incorrectly if it does.\\n   */\\n  function _setupDecimals(uint8 decimals_) internal {\\n    _decimals = decimals_;\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * will be to transferred to `to`.\\n   * - when `from` is zero, `amount` tokens will be minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/tokens/MintableERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title ERC20Mintable\\n * @dev ERC20 minting logic\\n */\\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n}\\n\",\"keccak256\":\"0x8306245c732faf6038ba650428edda23197ee5977be4cd2a1e5e73263acca6b7\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":793,"contract":"contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":799,"contract":"contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":801,"contract":"contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":803,"contract":"contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":805,"contract":"contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":807,"contract":"contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":10494,"contract":"contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_nonces","offset":0,"slot":"6","type":"t_mapping(t_address,t_uint256)"},{"astId":10496,"contract":"contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"DOMAIN_SEPARATOR","offset":0,"slot":"7","type":"t_bytes32"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"}},"version":1}}},"contracts/mocks/tokens/MockATokenRepayment.sol":{"MockATokenRepayment":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MockRepayment","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":"ATOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","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":"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","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":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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 `amount` 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 amount of tokens owned by `account`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10707":{"entryPoint":null,"id":10707,"parameterSlots":1,"returnSlots":0},"@_28371":{"entryPoint":null,"id":28371,"parameterSlots":1,"returnSlots":0},"@_30705":{"entryPoint":null,"id":30705,"parameterSlots":0,"returnSlots":0},"@_30916":{"entryPoint":null,"id":30916,"parameterSlots":4,"returnSlots":0},"@_31331":{"entryPoint":null,"id":31331,"parameterSlots":4,"returnSlots":0},"@_31495":{"entryPoint":null,"id":31495,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":543,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":582,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":518,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:50:124"},"nodeType":"YulIf","src":"76:70:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:138:124"},{"body":{"nodeType":"YulBlock","src":"252:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:124"},"nodeType":"YulFunctionCall","src":"300:12:124"},"nodeType":"YulExpressionStatement","src":"300:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:124"},"nodeType":"YulFunctionCall","src":"269:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:124"},"nodeType":"YulFunctionCall","src":"265:32:124"},"nodeType":"YulIf","src":"262:52:124"},{"nodeType":"YulVariableDeclaration","src":"323:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:124"},"nodeType":"YulFunctionCall","src":"336:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:124"},"nodeType":"YulFunctionCall","src":"361:38:124"},"nodeType":"YulExpressionStatement","src":"361:38:124"},{"nodeType":"YulAssignment","src":"408:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:124","type":""}],"src":"157:272:124"},{"body":{"nodeType":"YulBlock","src":"546:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:124"},"nodeType":"YulFunctionCall","src":"594:12:124"},"nodeType":"YulExpressionStatement","src":"594:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:32:124"},"nodeType":"YulIf","src":"556:52:124"},{"nodeType":"YulVariableDeclaration","src":"617:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:124"},"nodeType":"YulFunctionCall","src":"630:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:124"},"nodeType":"YulFunctionCall","src":"655:38:124"},"nodeType":"YulExpressionStatement","src":"655:38:124"},{"nodeType":"YulAssignment","src":"702:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:124","type":""}],"src":"434:289:124"},{"body":{"nodeType":"YulBlock","src":"783:325:124","statements":[{"nodeType":"YulAssignment","src":"793:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:124"},"nodeType":"YulFunctionCall","src":"803:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:124","statements":[{"nodeType":"YulAssignment","src":"903:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:124"},"nodeType":"YulFunctionCall","src":"913:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:124"},"nodeType":"YulFunctionCall","src":"874:26:124"},"nodeType":"YulIf","src":"871:61:124"},{"body":{"nodeType":"YulBlock","src":"991:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:124"},"nodeType":"YulFunctionCall","src":"1015:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:31:124"},"nodeType":"YulExpressionStatement","src":"1005:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:124"},"nodeType":"YulFunctionCall","src":"1049:15:124"},"nodeType":"YulExpressionStatement","src":"1049:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:124"},"nodeType":"YulFunctionCall","src":"1077:15:124"},"nodeType":"YulExpressionStatement","src":"1077:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:124"},"nodeType":"YulFunctionCall","src":"967:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:124"},"nodeType":"YulFunctionCall","src":"944:38:124"},"nodeType":"YulIf","src":"941:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:124","type":""}],"src":"728:380:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b506040516200394c3803806200394c83398101604081905262000038916200021f565b80806040518060400160405280600b81526020016a105513d2d15397d253541360aa1b8152506040518060400160405280600b81526020016a105513d2d15397d253541360aa1b81525060008383838383838383836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f191906200021f565b6001600160a01b031660805282516200011290603790602086019062000160565b5081516200012890603890602085019062000160565b506039805460ff191660ff9290921691909117905550506001600160a01b031660a05250504660c05250620002839650505050505050565b8280546200016e9062000246565b90600052602060002090601f016020900481019282620001925760008555620001dd565b82601f10620001ad57805160ff1916838001178555620001dd565b82800160010185558215620001dd579182015b82811115620001dd578251825591602001919060010190620001c0565b50620001eb929150620001ef565b5090565b5b80821115620001eb5760008155600101620001f0565b6001600160a01b03811681146200021c57600080fd5b50565b6000602082840312156200023257600080fd5b81516200023f8162000206565b9392505050565b600181811c908216806200025b57607f821691505b602082108114156200027d57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c051613637620003156000396000611d2b0152600081816103bc0152818161071d0152818161088401528181610a8301528181610c9d01528181610d6a01528181610e8401528181610f6701528181610fe70152818161110f0152818161176701528181611a37015281816123e00152612557015260008181611196015261182601526136376000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b604051610240919061309e565b60405180910390f35b61025c6102573660046130ed565b6106a0565b6040519015158152602001610240565b6102b961027a366004613119565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613190565b610795565b005b6102d661030f366004613119565b610b54565b61025c610322366004613284565b610b93565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c13565b61025c6103793660046130ed565b610c22565b6102ff61038c3660046130ed565b610c66565b6102ff61039f366004613284565b610d33565b6102d66103b2366004613119565b610e35565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff6104703660046132c5565b610f30565b6102d6610483366004613119565b611029565b610233611054565b61025c61049e3660046130ed565b611063565b61025c6104b13660046130ed565b6110a7565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d66110ca565b61025c6105083660046132e7565b6110d5565b6102ff61051b366004613284565b611192565b6102ff61052e36600461332d565b6113d6565b6102ff6105413660046132e7565b611730565b6102d661055436600461339b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a366004613119565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f6366004613119565b611822565b6102ff610609366004613284565b611a00565b60606037805461061d906133d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610649906133d4565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611ab2565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107889190613422565b8290611b20565b91505090565b60015460029060ff16806107a85750303b155b806107b4575060005481115b610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5061097f88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b7792505050565b6109be86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8a92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a7b611b9d565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0e99989796959493929190613484565b60405180910390a38015610b4557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9f83611c62565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfd91879190610bf8906fffffffffffffffffffffffffffffffff86169061352e565b611ab2565b610c08858583611d08565b506001949350505050565b6000610c1d611d27565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf8908690613545565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b50603d54610d2f9073ffffffffffffffffffffffffffffffffffffffff168383611d60565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fbfd31b362487106a121ca0a2568e198562a92db8322b94cb8ddcead020c7d8cf9060600160405180910390a1505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8d917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190613422565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611b20565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5081610fde575050565b603c54611024907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611e33565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8d565b60606038805461061d906133d4565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf890869061352e565b6000806110b383611c62565b90506110c0338583611d08565b5060019392505050565b6000610c1d60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5061118985858585611e33565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611223919061355d565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b4919061357a565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff868116911614156113ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506113d073ffffffffffffffffffffffffffffffffffffffff85168484611d60565b50505050565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8816611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b50834211156040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906114cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a6020526040812054906114fb610c13565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e001604051602081830303815290604052805190602001206040516020016115bc9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa158015611642573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906116e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506116f4826001613545565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a6020526040902055611725898989611ab2565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506117e184848484612074565b73ffffffffffffffffffffffffffffffffffffffff831630146113d057603d546113d09073ffffffffffffffffffffffffffffffffffffffff168484611d60565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b3919061355d565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611920573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611944919061357a565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906119b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506110248383836000612392565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611b5557600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2f906037906020840190612fa3565b8051610d2f906038906020840190612fa3565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bc861260e565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083c565b5090565b6110248383836fffffffffffffffffffffffffffffffff166001612392565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611d585750603b5490565b610c1d611b9d565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611dc3573d6000803e3d6000fd5b50611dcd84612618565b6113d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083c565b600080611e4084846126e4565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611f0c918491700100000000000000000000000000000000900416611b20565b611f168387611b20565b611f20919061352e565b9050611f2b85611c62565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f9387611f8e85611c62565b612723565b6000611f9f8288613545565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200191815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b600061208083836126e4565b60408051808201909152600281527f32350000000000000000000000000000000000000000000000000000000000006020820152909150816120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff808216929161214c918491700100000000000000000000000000000000900416611b20565b6121568386611b20565b612160919061352e565b905061216b84611c62565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121d3876121ce85611c62565b61289f565b848111156122b25760006121e7868361352e565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161224991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350612389565b60006122be828761352e565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161232091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015612429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244d9190613422565b9050600061249382610f2a8973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b905060006124d983610f2a8973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b90506124e788888886612903565b84156125b4576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561259b57600080fd5b505af11580156125af573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda86666125fa89876126e4565b60408051918252602082018890520161237f565b6060610c1d61060e565b6000612658565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d801561269757602081146126d1576126927f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f61261f565b6126de565b823b6126c8576126c87f475076323a206e6f74206120636f6e7472616374000000000000000000000000601461261f565b600191506126de565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561270857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546127426fffffffffffffffffffffffffffffffff831682613545565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612787838261359c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612898576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561288457600080fd5b505af1158015611725573d6000803e3d6000fd5b5050505050565b6036546128be6fffffffffffffffffffffffffffffffff83168261352e565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff1661278783826135d0565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff808216929161295f918491700100000000000000000000000000000000900416611b20565b6129698385611b20565b612973919061352e565b905060006129b58673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205491925090612a1090839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611b20565b612a1a8387611b20565b612a24919061352e565b9050612a2f85611c62565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a8e85611c62565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612b008888612afb612af68a8a6126e4565b611c62565b612cf8565b8215612baf5760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612beb5750600081115b15612c995760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161237f91815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612d3a82826135d0565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612dae838261359c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f9b576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612eae57600080fd5b505af1158015612ec2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612389576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f8157600080fd5b505af1158015612f95573d6000803e3d6000fd5b50505050505b505050505050565b828054612faf906133d4565b90600052602060002090601f016020900481019282612fd15760008555613017565b82601f10612fea57805160ff1916838001178555613017565b82800160010185558215613017579182015b82811115613017578251825591602001919060010190612ffc565b50611d049291505b80821115611d04576000815560010161301f565b6000815180845260005b818110156130595760208185018101518683018201520161303d565b8181111561306b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130b16020830184613033565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146130da57600080fd5b50565b80356130e8816130b8565b919050565b6000806040838503121561310057600080fd5b823561310b816130b8565b946020939093013593505050565b60006020828403121561312b57600080fd5b81356130b1816130b8565b803560ff811681146130e857600080fd5b60008083601f84011261315957600080fd5b50813567ffffffffffffffff81111561317157600080fd5b60208301915083602082850101111561318957600080fd5b9250929050565b60008060008060008060008060008060006101008c8e0312156131b257600080fd5b6131bb8c6130dd565b9a506131c960208d016130dd565b99506131d760408d016130dd565b98506131e560608d016130dd565b97506131f360808d01613136565b965067ffffffffffffffff8060a08e0135111561320f57600080fd5b61321f8e60a08f01358f01613147565b909750955060c08d013581101561323557600080fd5b6132458e60c08f01358f01613147565b909550935060e08d013581101561325b57600080fd5b5061326c8d60e08e01358e01613147565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561329957600080fd5b83356132a4816130b8565b925060208401356132b4816130b8565b929592945050506040919091013590565b600080604083850312156132d857600080fd5b50508035926020909101359150565b600080600080608085870312156132fd57600080fd5b8435613308816130b8565b93506020850135613318816130b8565b93969395505050506040820135916060013590565b600080600080600080600060e0888a03121561334857600080fd5b8735613353816130b8565b96506020880135613363816130b8565b9550604088013594506060880135935061337f60808901613136565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156133ae57600080fd5b82356133b9816130b8565b915060208301356133c9816130b8565b809150509250929050565b600181811c908216806133e857607f821691505b602082108114156126de577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561343457600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c060608301526134c760c08301888a61343b565b82810360808401526134da81878961343b565b905082810360a08401526134ef81858761343b565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613540576135406134ff565b500390565b60008219821115613558576135586134ff565b500190565b60006020828403121561356f57600080fd5b81516130b1816130b8565b60006020828403121561358c57600080fd5b815180151581146130b157600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156135c7576135c76134ff565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156135f9576135f96134ff565b03939250505056fea2646970667358221220c8fce797689d8b22e367a244ae073aa63667bf02360fb6bd71c01f821337bc4d64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x394C CODESIZE SUB DUP1 PUSH3 0x394C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x21F JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF1 SWAP2 SWAP1 PUSH3 0x21F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE DUP3 MLOAD PUSH3 0x112 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x128 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP PUSH1 0x39 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP POP CHAINID PUSH1 0xC0 MSTORE POP PUSH3 0x283 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x16E SWAP1 PUSH3 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x192 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1AD JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1DD JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1DD JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1C0 JUMP JUMPDEST POP PUSH3 0x1EB SWAP3 SWAP2 POP PUSH3 0x1EF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1EB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x23F DUP2 PUSH3 0x206 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x25B JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x27D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x3637 PUSH3 0x315 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1D2B ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3BC ADD MSTORE DUP2 DUP2 PUSH2 0x71D ADD MSTORE DUP2 DUP2 PUSH2 0x884 ADD MSTORE DUP2 DUP2 PUSH2 0xA83 ADD MSTORE DUP2 DUP2 PUSH2 0xC9D ADD MSTORE DUP2 DUP2 PUSH2 0xD6A ADD MSTORE DUP2 DUP2 PUSH2 0xE84 ADD MSTORE DUP2 DUP2 PUSH2 0xF67 ADD MSTORE DUP2 DUP2 PUSH2 0xFE7 ADD MSTORE DUP2 DUP2 PUSH2 0x110F ADD MSTORE DUP2 DUP2 PUSH2 0x1767 ADD MSTORE DUP2 DUP2 PUSH2 0x1A37 ADD MSTORE DUP2 DUP2 PUSH2 0x23E0 ADD MSTORE PUSH2 0x2557 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1196 ADD MSTORE PUSH2 0x1826 ADD MSTORE PUSH2 0x3637 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3190 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0xB54 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3284 JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0xC22 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0xC66 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3284 JUMP JUMPDEST PUSH2 0xD33 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0xE35 JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x32C5 JUMP JUMPDEST PUSH2 0xF30 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0x1029 JUMP JUMPDEST PUSH2 0x233 PUSH2 0x1054 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0x1063 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0x10A7 JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x10CA JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x32E7 JUMP JUMPDEST PUSH2 0x10D5 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3284 JUMP JUMPDEST PUSH2 0x1192 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x332D JUMP JUMPDEST PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x32E7 JUMP JUMPDEST PUSH2 0x1730 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x339B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0x1822 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3284 JUMP JUMPDEST PUSH2 0x1A00 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x33D4 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x33D4 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1AB2 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x3422 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1B20 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x7A8 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B4 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x882 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x97F DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B77 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BE DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B8A SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA7B PUSH2 0x1B9D JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0E SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3484 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB45 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9F DUP4 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFD SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF8 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x352E JUMP JUMPDEST PUSH2 0x1AB2 JUMP JUMPDEST PUSH2 0xC08 DUP6 DUP6 DUP4 PUSH2 0x1D08 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH2 0x1D27 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x3545 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2F SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D60 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xBFD31B362487106A121CA0A2568E198562A92DB8322B94CB8DDCEAD020C7D8CF SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8D SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xECD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEF1 SWAP2 SWAP1 PUSH2 0x3422 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1B20 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xFD4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP DUP2 PUSH2 0xFDE JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0x1024 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1E33 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x33D4 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x352E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x10B3 DUP4 PUSH2 0x1C62 JUMP JUMPDEST SWAP1 POP PUSH2 0x10C0 CALLER DUP6 DUP4 PUSH2 0x1D08 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x117C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x1189 DUP6 DUP6 DUP6 DUP6 PUSH2 0x1E33 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11FF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1223 SWAP2 SWAP1 PUSH2 0x355D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1290 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12B4 SWAP2 SWAP1 PUSH2 0x357A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1322 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x13AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x13D0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D60 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x1458 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x14CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x14FB PUSH2 0xC13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x15BC SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1642 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x16E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x16F4 DUP3 PUSH1 0x1 PUSH2 0x3545 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x1725 DUP10 DUP10 DUP10 PUSH2 0x1AB2 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x17D4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x17E1 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2074 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0x13D0 JUMPI PUSH1 0x3D SLOAD PUSH2 0x13D0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D60 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x188F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B3 SWAP2 SWAP1 PUSH2 0x355D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1920 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1944 SWAP2 SWAP1 PUSH2 0x357A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x19B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1AA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x1024 DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2392 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1B55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2FA3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2FA3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BC8 PUSH2 0x260E JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1D04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1024 DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2392 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1D58 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1D PUSH2 0x1B9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1DC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1DCD DUP5 PUSH2 0x2618 JUMP JUMPDEST PUSH2 0x13D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E40 DUP5 DUP5 PUSH2 0x26E4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1EAF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1F0C SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x1F16 DUP4 DUP8 PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x1F20 SWAP2 SWAP1 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH2 0x1F2B DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F93 DUP8 PUSH2 0x1F8E DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x2723 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F9F DUP3 DUP9 PUSH2 0x3545 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2001 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2080 DUP4 DUP4 PUSH2 0x26E4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x20EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x214C SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2156 DUP4 DUP7 PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2160 SWAP2 SWAP1 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH2 0x216B DUP5 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x21D3 DUP8 PUSH2 0x21CE DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x289F JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x22B2 JUMPI PUSH1 0x0 PUSH2 0x21E7 DUP7 DUP4 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2249 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x2389 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22BE DUP3 DUP8 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2320 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2429 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x244D SWAP2 SWAP1 PUSH2 0x3422 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2493 DUP3 PUSH2 0xF2A DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x24D9 DUP4 PUSH2 0xF2A DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x24E7 DUP9 DUP9 DUP9 DUP7 PUSH2 0x2903 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x25B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x259B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x25AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x25FA DUP10 DUP8 PUSH2 0x26E4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x237F JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1D PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2658 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2697 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x26D1 JUMPI PUSH2 0x2692 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x261F JUMP JUMPDEST PUSH2 0x26DE JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x26C8 JUMPI PUSH2 0x26C8 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x261F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x26DE JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2742 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x3545 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2787 DUP4 DUP3 PUSH2 0x359C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2898 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2884 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1725 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x28BE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x352E JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2787 DUP4 DUP3 PUSH2 0x35D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x295F SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2969 DUP4 DUP6 PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2973 SWAP2 SWAP1 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x29B5 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2A10 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2A1A DUP4 DUP8 PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2A24 SWAP2 SWAP1 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH2 0x2A2F DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A8E DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2B00 DUP9 DUP9 PUSH2 0x2AFB PUSH2 0x2AF6 DUP11 DUP11 PUSH2 0x26E4 JUMP JUMPDEST PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x2CF8 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2BAF JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2BEB JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C99 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x237F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2D3A DUP3 DUP3 PUSH2 0x35D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2DAE DUP4 DUP3 PUSH2 0x359C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F9B JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2EC2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2389 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F95 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2FAF SWAP1 PUSH2 0x33D4 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2FD1 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3017 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2FEA JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3017 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3017 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3017 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2FFC JUMP JUMPDEST POP PUSH2 0x1D04 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1D04 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x301F JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3059 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x303D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x306B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x30B1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3033 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x30DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x30E8 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x310B DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x312B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x30B1 DUP2 PUSH2 0x30B8 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x30E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x31B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31BB DUP13 PUSH2 0x30DD JUMP JUMPDEST SWAP11 POP PUSH2 0x31C9 PUSH1 0x20 DUP14 ADD PUSH2 0x30DD JUMP JUMPDEST SWAP10 POP PUSH2 0x31D7 PUSH1 0x40 DUP14 ADD PUSH2 0x30DD JUMP JUMPDEST SWAP9 POP PUSH2 0x31E5 PUSH1 0x60 DUP14 ADD PUSH2 0x30DD JUMP JUMPDEST SWAP8 POP PUSH2 0x31F3 PUSH1 0x80 DUP14 ADD PUSH2 0x3136 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x320F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x321F DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3147 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x3235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3245 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3147 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x325B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x326C DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3147 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x32A4 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x32B4 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x32D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x32FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3308 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3318 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x3353 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3363 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x337F PUSH1 0x80 DUP10 ADD PUSH2 0x3136 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x33AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x33B9 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x33C9 DUP2 PUSH2 0x30B8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x33E8 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x26DE JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3434 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x34C7 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x343B JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x34DA DUP2 DUP8 DUP10 PUSH2 0x343B JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x34EF DUP2 DUP6 DUP8 PUSH2 0x343B JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3540 JUMPI PUSH2 0x3540 PUSH2 0x34FF JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3558 JUMPI PUSH2 0x3558 PUSH2 0x34FF JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x356F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x30B1 DUP2 PUSH2 0x30B8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x358C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x30B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x35C7 JUMPI PUSH2 0x35C7 PUSH2 0x34FF JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x35F9 JUMPI PUSH2 0x35F9 PUSH2 0x34FF JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xFC 0xE7 SWAP8 PUSH9 0x9D8B22E367A244AE07 GASPRICE 0xA6 CALLDATASIZE PUSH8 0xBF02360FB6BD71C0 0x1F DUP3 SGT CALLDATACOPY 0xBC 0x4D PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"176:424:75:-:0;;;928:1:87;886:43;;293:39:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;324:4;1858::115;988:195:123;;;;;;;;;;;;;-1:-1:-1;;;988:195:123;;;;;;;;;;;;;;;;-1:-1:-1;;;988:195:123;;;1894:1:115;1116:4:123;1122;1128:6;1136:8;817:4:122;823;829:6;837:8;2780:4:121;-1:-1:-1;;;;;2780:23:121;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:121;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:121;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:121;:20;;-1:-1:-1;;2851:20:121;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:121;;;-1:-1:-1;;630:13:120;619:24;;-1:-1:-1;176:424:75;;-1:-1:-1;;;;;;;176:424:75;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;176:424:75;;;-1:-1:-1;176:424:75;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:124;-1:-1:-1;;;;;96:31:124;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:124:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;176:424:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ATOKEN_REVISION_28341":{"entryPoint":null,"id":28341,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_28877":{"entryPoint":3091,"id":28877,"parameterSlots":0,"returnSlots":1},"@DOMAIN_SEPARATOR_30723":{"entryPoint":7463,"id":30723,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_30682":{"entryPoint":null,"id":30682,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_28338":{"entryPoint":null,"id":28338,"parameterSlots":0,"returnSlots":0},"@POOL_30880":{"entryPoint":null,"id":30880,"parameterSlots":0,"returnSlots":0},"@RESERVE_TREASURY_ADDRESS_28628":{"entryPoint":null,"id":28628,"parameterSlots":0,"returnSlots":1},"@UNDERLYING_ASSET_ADDRESS_28638":{"entryPoint":null,"id":28638,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_28905":{"entryPoint":9742,"id":28905,"parameterSlots":0,"returnSlots":1},"@_approve_31266":{"entryPoint":6834,"id":31266,"parameterSlots":3,"returnSlots":0},"@_burnScaled_31772":{"entryPoint":8308,"id":31772,"parameterSlots":4,"returnSlots":0},"@_burn_31449":{"entryPoint":10399,"id":31449,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_30766":{"entryPoint":7069,"id":30766,"parameterSlots":0,"returnSlots":1},"@_mintScaled_31654":{"entryPoint":7731,"id":31654,"parameterSlots":4,"returnSlots":1},"@_mint_31390":{"entryPoint":10019,"id":31390,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_31299":{"entryPoint":null,"id":31299,"parameterSlots":1,"returnSlots":0},"@_setName_31277":{"entryPoint":7031,"id":31277,"parameterSlots":1,"returnSlots":0},"@_setSymbol_31288":{"entryPoint":7050,"id":31288,"parameterSlots":1,"returnSlots":0},"@_transfer_28844":{"entryPoint":9106,"id":28844,"parameterSlots":4,"returnSlots":0},"@_transfer_28863":{"entryPoint":7432,"id":28863,"parameterSlots":3,"returnSlots":0},"@_transfer_31241":{"entryPoint":11512,"id":31241,"parameterSlots":3,"returnSlots":0},"@_transfer_31916":{"entryPoint":10499,"id":31916,"parameterSlots":4,"returnSlots":0},"@allowance_31040":{"entryPoint":null,"id":31040,"parameterSlots":2,"returnSlots":1},"@approve_31061":{"entryPoint":1696,"id":31061,"parameterSlots":2,"returnSlots":1},"@balanceOf_28587":{"entryPoint":3637,"id":28587,"parameterSlots":1,"returnSlots":1},"@balanceOf_30971":{"entryPoint":null,"id":30971,"parameterSlots":1,"returnSlots":1},"@burn_28515":{"entryPoint":5936,"id":28515,"parameterSlots":4,"returnSlots":0},"@decimals_30946":{"entryPoint":null,"id":30946,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_31157":{"entryPoint":4195,"id":31157,"parameterSlots":2,"returnSlots":1},"@getIncentivesController_30981":{"entryPoint":null,"id":30981,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":9752,"id":117,"parameterSlots":1,"returnSlots":1},"@getPreviousIndex_31558":{"entryPoint":null,"id":31558,"parameterSlots":1,"returnSlots":1},"@getRevision_10716":{"entryPoint":null,"id":10716,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_31531":{"entryPoint":null,"id":31531,"parameterSlots":1,"returnSlots":2},"@handleRepayment_10735":{"entryPoint":3379,"id":10735,"parameterSlots":3,"returnSlots":0},"@increaseAllowance_31130":{"entryPoint":3106,"id":31130,"parameterSlots":2,"returnSlots":1},"@initialize_28451":{"entryPoint":1941,"id":28451,"parameterSlots":11,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@mintToTreasury_28543":{"entryPoint":3888,"id":28543,"parameterSlots":2,"returnSlots":0},"@mint_28476":{"entryPoint":4309,"id":28476,"parameterSlots":4,"returnSlots":1},"@name_30926":{"entryPoint":1550,"id":30926,"parameterSlots":0,"returnSlots":1},"@nonces_28894":{"entryPoint":4137,"id":28894,"parameterSlots":1,"returnSlots":1},"@nonces_30736":{"entryPoint":null,"id":30736,"parameterSlots":1,"returnSlots":1},"@permit_28767":{"entryPoint":5078,"id":28767,"parameterSlots":7,"returnSlots":0},"@rayDiv_23792":{"entryPoint":9956,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":6944,"id":23780,"parameterSlots":2,"returnSlots":1},"@rescueTokens_28935":{"entryPoint":4498,"id":28935,"parameterSlots":3,"returnSlots":0},"@safeTransfer_78":{"entryPoint":7520,"id":78,"parameterSlots":3,"returnSlots":0},"@scaledBalanceOf_31510":{"entryPoint":2900,"id":31510,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_31543":{"entryPoint":4298,"id":31543,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_30995":{"entryPoint":6178,"id":30995,"parameterSlots":1,"returnSlots":0},"@symbol_30936":{"entryPoint":4180,"id":30936,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7266,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_28618":{"entryPoint":1718,"id":28618,"parameterSlots":0,"returnSlots":1},"@totalSupply_30956":{"entryPoint":null,"id":30956,"parameterSlots":0,"returnSlots":1},"@transferFrom_31103":{"entryPoint":2963,"id":31103,"parameterSlots":3,"returnSlots":1},"@transferOnLiquidation_28564":{"entryPoint":6656,"id":28564,"parameterSlots":3,"returnSlots":0},"@transferUnderlyingTo_28658":{"entryPoint":3174,"id":28658,"parameterSlots":2,"returnSlots":0},"@transfer_31022":{"entryPoint":4263,"id":31022,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":12509,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":12615,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":12569,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":13661,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":13211,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":12932,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":13031,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":13101,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":12525,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13690,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr":{"entryPoint":12688,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":13346,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":12997,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint8":{"entryPoint":12598,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":12339,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":13371,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13444,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12446,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":13724,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13637,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":13776,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13614,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13268,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":13567,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":12472,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16523:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"820:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:124"},"nodeType":"YulFunctionCall","src":"909:12:124"},"nodeType":"YulExpressionStatement","src":"909:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:124"},"nodeType":"YulFunctionCall","src":"840:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:73:124"},"nodeType":"YulIf","src":"830:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:124","type":""}],"src":"775:154:124"},{"body":{"nodeType":"YulBlock","src":"983:85:124","statements":[{"nodeType":"YulAssignment","src":"993:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:124"},"nodeType":"YulFunctionCall","src":"1002:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:124"},"nodeType":"YulFunctionCall","src":"1031:31:124"},"nodeType":"YulExpressionStatement","src":"1031:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:124","type":""}],"src":"934:134:124"},{"body":{"nodeType":"YulBlock","src":"1160:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:124"},"nodeType":"YulFunctionCall","src":"1208:12:124"},"nodeType":"YulExpressionStatement","src":"1208:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:124"},"nodeType":"YulFunctionCall","src":"1177:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:124"},"nodeType":"YulFunctionCall","src":"1173:32:124"},"nodeType":"YulIf","src":"1170:52:124"},{"nodeType":"YulVariableDeclaration","src":"1231:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:124"},"nodeType":"YulFunctionCall","src":"1244:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:124"},"nodeType":"YulFunctionCall","src":"1276:31:124"},"nodeType":"YulExpressionStatement","src":"1276:31:124"},{"nodeType":"YulAssignment","src":"1316:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:124"}]},{"nodeType":"YulAssignment","src":"1340:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:124","type":""}],"src":"1073:315:124"},{"body":{"nodeType":"YulBlock","src":"1488:92:124","statements":[{"nodeType":"YulAssignment","src":"1498:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:124"},"nodeType":"YulFunctionCall","src":"1558:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:124"},"nodeType":"YulFunctionCall","src":"1551:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:41:124"},"nodeType":"YulExpressionStatement","src":"1533:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:124","type":""}],"src":"1393:187:124"},{"body":{"nodeType":"YulBlock","src":"1655:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:124"},"nodeType":"YulFunctionCall","src":"1703:12:124"},"nodeType":"YulExpressionStatement","src":"1703:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:124"},"nodeType":"YulFunctionCall","src":"1672:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:124"},"nodeType":"YulFunctionCall","src":"1668:32:124"},"nodeType":"YulIf","src":"1665:52:124"},{"nodeType":"YulVariableDeclaration","src":"1726:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:124"},"nodeType":"YulFunctionCall","src":"1739:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:124"},"nodeType":"YulFunctionCall","src":"1771:31:124"},"nodeType":"YulExpressionStatement","src":"1771:31:124"},{"nodeType":"YulAssignment","src":"1811:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:124","type":""}],"src":"1585:247:124"},{"body":{"nodeType":"YulBlock","src":"1966:119:124","statements":[{"nodeType":"YulAssignment","src":"1976:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:124"},"nodeType":"YulFunctionCall","src":"1984:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:124"},"nodeType":"YulFunctionCall","src":"2011:25:124"},"nodeType":"YulExpressionStatement","src":"2011:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:124"},"nodeType":"YulFunctionCall","src":"2052:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:124"},"nodeType":"YulFunctionCall","src":"2045:34:124"},"nodeType":"YulExpressionStatement","src":"2045:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:124","type":""}],"src":"1837:248:124"},{"body":{"nodeType":"YulBlock","src":"2191:76:124","statements":[{"nodeType":"YulAssignment","src":"2201:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:124"},"nodeType":"YulFunctionCall","src":"2209:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2201:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2254:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2236:6:124"},"nodeType":"YulFunctionCall","src":"2236:25:124"},"nodeType":"YulExpressionStatement","src":"2236:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2160:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2171:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2182:4:124","type":""}],"src":"2090:177:124"},{"body":{"nodeType":"YulBlock","src":"2319:109:124","statements":[{"nodeType":"YulAssignment","src":"2329:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2351:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2338:12:124"},"nodeType":"YulFunctionCall","src":"2338:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2329:5:124"}]},{"body":{"nodeType":"YulBlock","src":"2406:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2415:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2418:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2408:6:124"},"nodeType":"YulFunctionCall","src":"2408:12:124"},"nodeType":"YulExpressionStatement","src":"2408:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2380:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2391:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2398:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2387:3:124"},"nodeType":"YulFunctionCall","src":"2387:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2377:2:124"},"nodeType":"YulFunctionCall","src":"2377:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2370:6:124"},"nodeType":"YulFunctionCall","src":"2370:35:124"},"nodeType":"YulIf","src":"2367:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2298:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2309:5:124","type":""}],"src":"2272:156:124"},{"body":{"nodeType":"YulBlock","src":"2506:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"2555:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2564:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2567:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2557:6:124"},"nodeType":"YulFunctionCall","src":"2557:12:124"},"nodeType":"YulExpressionStatement","src":"2557:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2534:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2542:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2530:3:124"},"nodeType":"YulFunctionCall","src":"2530:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"2549:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2526:3:124"},"nodeType":"YulFunctionCall","src":"2526:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2519:6:124"},"nodeType":"YulFunctionCall","src":"2519:35:124"},"nodeType":"YulIf","src":"2516:55:124"},{"nodeType":"YulAssignment","src":"2580:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2603:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2590:12:124"},"nodeType":"YulFunctionCall","src":"2590:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2580:6:124"}]},{"body":{"nodeType":"YulBlock","src":"2653:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2662:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2665:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2655:6:124"},"nodeType":"YulFunctionCall","src":"2655:12:124"},"nodeType":"YulExpressionStatement","src":"2655:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2625:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2633:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2622:2:124"},"nodeType":"YulFunctionCall","src":"2622:30:124"},"nodeType":"YulIf","src":"2619:50:124"},{"nodeType":"YulAssignment","src":"2678:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2694:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2702:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2690:3:124"},"nodeType":"YulFunctionCall","src":"2690:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2678:8:124"}]},{"body":{"nodeType":"YulBlock","src":"2759:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:124"},"nodeType":"YulFunctionCall","src":"2761:12:124"},"nodeType":"YulExpressionStatement","src":"2761:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2730:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"2738:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2726:3:124"},"nodeType":"YulFunctionCall","src":"2726:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"2747:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:124"},"nodeType":"YulFunctionCall","src":"2722:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"2754:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2719:2:124"},"nodeType":"YulFunctionCall","src":"2719:39:124"},"nodeType":"YulIf","src":"2716:59:124"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2469:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2477:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2485:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"2495:6:124","type":""}],"src":"2433:348:124"},{"body":{"nodeType":"YulBlock","src":"3081:1119:124","statements":[{"body":{"nodeType":"YulBlock","src":"3128:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3137:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3140:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3130:6:124"},"nodeType":"YulFunctionCall","src":"3130:12:124"},"nodeType":"YulExpressionStatement","src":"3130:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3102:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3098:3:124"},"nodeType":"YulFunctionCall","src":"3098:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3123:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3094:3:124"},"nodeType":"YulFunctionCall","src":"3094:33:124"},"nodeType":"YulIf","src":"3091:53:124"},{"nodeType":"YulAssignment","src":"3153:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3163:18:124"},"nodeType":"YulFunctionCall","src":"3163:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3153:6:124"}]},{"nodeType":"YulAssignment","src":"3201:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3245:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:124"},"nodeType":"YulFunctionCall","src":"3230:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3211:18:124"},"nodeType":"YulFunctionCall","src":"3211:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3201:6:124"}]},{"nodeType":"YulAssignment","src":"3258:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3291:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3302:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3287:3:124"},"nodeType":"YulFunctionCall","src":"3287:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3268:18:124"},"nodeType":"YulFunctionCall","src":"3268:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3258:6:124"}]},{"nodeType":"YulAssignment","src":"3315:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3348:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3359:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3344:3:124"},"nodeType":"YulFunctionCall","src":"3344:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3325:18:124"},"nodeType":"YulFunctionCall","src":"3325:38:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3315:6:124"}]},{"nodeType":"YulAssignment","src":"3372:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3403:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3414:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3399:3:124"},"nodeType":"YulFunctionCall","src":"3399:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3382:16:124"},"nodeType":"YulFunctionCall","src":"3382:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3372:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3428:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3438:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3432:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3510:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:124"},"nodeType":"YulFunctionCall","src":"3512:12:124"},"nodeType":"YulExpressionStatement","src":"3512:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3499:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:124"},"nodeType":"YulFunctionCall","src":"3484:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:124"},"nodeType":"YulFunctionCall","src":"3471:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3506:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3468:2:124"},"nodeType":"YulFunctionCall","src":"3468:41:124"},"nodeType":"YulIf","src":"3465:61:124"},{"nodeType":"YulVariableDeclaration","src":"3535:112:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3592:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3620:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3631:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3616:3:124"},"nodeType":"YulFunctionCall","src":"3616:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3603:12:124"},"nodeType":"YulFunctionCall","src":"3603:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3588:3:124"},"nodeType":"YulFunctionCall","src":"3588:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3639:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3561:26:124"},"nodeType":"YulFunctionCall","src":"3561:86:124"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"3539:8:124","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"3549:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3656:18:124","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"3666:8:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:124"}]},{"nodeType":"YulAssignment","src":"3683:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3693:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3683:6:124"}]},{"body":{"nodeType":"YulBlock","src":"3755:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3764:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3767:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3757:6:124"},"nodeType":"YulFunctionCall","src":"3757:12:124"},"nodeType":"YulExpressionStatement","src":"3757:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3733:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3744:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3729:3:124"},"nodeType":"YulFunctionCall","src":"3729:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3716:12:124"},"nodeType":"YulFunctionCall","src":"3716:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3751:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3713:2:124"},"nodeType":"YulFunctionCall","src":"3713:41:124"},"nodeType":"YulIf","src":"3710:61:124"},{"nodeType":"YulVariableDeclaration","src":"3780:112:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:124"},"nodeType":"YulFunctionCall","src":"3861:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3848:12:124"},"nodeType":"YulFunctionCall","src":"3848:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3833:3:124"},"nodeType":"YulFunctionCall","src":"3833:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3884:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3806:26:124"},"nodeType":"YulFunctionCall","src":"3806:86:124"},"variables":[{"name":"value7_1","nodeType":"YulTypedName","src":"3784:8:124","type":""},{"name":"value8_1","nodeType":"YulTypedName","src":"3794:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3901:18:124","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"3911:8:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3901:6:124"}]},{"nodeType":"YulAssignment","src":"3928:18:124","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"3938:8:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"3928:6:124"}]},{"body":{"nodeType":"YulBlock","src":"4000:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4009:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4012:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4002:6:124"},"nodeType":"YulFunctionCall","src":"4002:12:124"},"nodeType":"YulExpressionStatement","src":"4002:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3978:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3989:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3974:3:124"},"nodeType":"YulFunctionCall","src":"3974:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3961:12:124"},"nodeType":"YulFunctionCall","src":"3961:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3996:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3958:2:124"},"nodeType":"YulFunctionCall","src":"3958:41:124"},"nodeType":"YulIf","src":"3955:61:124"},{"nodeType":"YulVariableDeclaration","src":"4025:113:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4083:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4111:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4122:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4107:3:124"},"nodeType":"YulFunctionCall","src":"4107:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4094:12:124"},"nodeType":"YulFunctionCall","src":"4094:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4079:3:124"},"nodeType":"YulFunctionCall","src":"4079:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4130:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"4052:26:124"},"nodeType":"YulFunctionCall","src":"4052:86:124"},"variables":[{"name":"value9_1","nodeType":"YulTypedName","src":"4029:8:124","type":""},{"name":"value10_1","nodeType":"YulTypedName","src":"4039:9:124","type":""}]},{"nodeType":"YulAssignment","src":"4147:18:124","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"4157:8:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"4147:6:124"}]},{"nodeType":"YulAssignment","src":"4174:20:124","value":{"name":"value10_1","nodeType":"YulIdentifier","src":"4185:9:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"4174:7:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2966:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2977:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2989:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2997:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3005:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3013:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3021:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3029:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3037:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3045:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3053:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3061:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"3069:7:124","type":""}],"src":"2786:1414:124"},{"body":{"nodeType":"YulBlock","src":"4309:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"4355:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4364:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4367:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4357:6:124"},"nodeType":"YulFunctionCall","src":"4357:12:124"},"nodeType":"YulExpressionStatement","src":"4357:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4330:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4339:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4326:3:124"},"nodeType":"YulFunctionCall","src":"4326:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4351:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4322:3:124"},"nodeType":"YulFunctionCall","src":"4322:32:124"},"nodeType":"YulIf","src":"4319:52:124"},{"nodeType":"YulVariableDeclaration","src":"4380:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4406:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4393:12:124"},"nodeType":"YulFunctionCall","src":"4393:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4384:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4450:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4425:24:124"},"nodeType":"YulFunctionCall","src":"4425:31:124"},"nodeType":"YulExpressionStatement","src":"4425:31:124"},{"nodeType":"YulAssignment","src":"4465:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4475:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4465:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4489:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4532:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:124"},"nodeType":"YulFunctionCall","src":"4517:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4504:12:124"},"nodeType":"YulFunctionCall","src":"4504:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4493:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4570:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4545:24:124"},"nodeType":"YulFunctionCall","src":"4545:33:124"},"nodeType":"YulExpressionStatement","src":"4545:33:124"},{"nodeType":"YulAssignment","src":"4587:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4597:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4587:6:124"}]},{"nodeType":"YulAssignment","src":"4613:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4651:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:124"},"nodeType":"YulFunctionCall","src":"4636:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4623:12:124"},"nodeType":"YulFunctionCall","src":"4623:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4613:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4259:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4270:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4282:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4290:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4298:6:124","type":""}],"src":"4205:456:124"},{"body":{"nodeType":"YulBlock","src":"4767:76:124","statements":[{"nodeType":"YulAssignment","src":"4777:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4789:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4785:3:124"},"nodeType":"YulFunctionCall","src":"4785:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4777:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4819:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"4830:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:124"},"nodeType":"YulFunctionCall","src":"4812:25:124"},"nodeType":"YulExpressionStatement","src":"4812:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4736:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4747:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4758:4:124","type":""}],"src":"4666:177:124"},{"body":{"nodeType":"YulBlock","src":"4945:87:124","statements":[{"nodeType":"YulAssignment","src":"4955:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4967:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4978:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4963:3:124"},"nodeType":"YulFunctionCall","src":"4963:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4955:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4997:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5012:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5020:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5008:3:124"},"nodeType":"YulFunctionCall","src":"5008:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4990:6:124"},"nodeType":"YulFunctionCall","src":"4990:36:124"},"nodeType":"YulExpressionStatement","src":"4990:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4914:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4925:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4936:4:124","type":""}],"src":"4848:184:124"},{"body":{"nodeType":"YulBlock","src":"5152:125:124","statements":[{"nodeType":"YulAssignment","src":"5162:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5185:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5170:3:124"},"nodeType":"YulFunctionCall","src":"5170:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5162:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5204:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5219:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5227:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5215:3:124"},"nodeType":"YulFunctionCall","src":"5215:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5197:6:124"},"nodeType":"YulFunctionCall","src":"5197:74:124"},"nodeType":"YulExpressionStatement","src":"5197:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5121:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5132:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5143:4:124","type":""}],"src":"5037:240:124"},{"body":{"nodeType":"YulBlock","src":"5417:125:124","statements":[{"nodeType":"YulAssignment","src":"5427:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5439:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5450:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5435:3:124"},"nodeType":"YulFunctionCall","src":"5435:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5427:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5469:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5484:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5492:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5480:3:124"},"nodeType":"YulFunctionCall","src":"5480:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5462:6:124"},"nodeType":"YulFunctionCall","src":"5462:74:124"},"nodeType":"YulExpressionStatement","src":"5462:74:124"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5386:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5397:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5408:4:124","type":""}],"src":"5282:260:124"},{"body":{"nodeType":"YulBlock","src":"5666:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5683:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5694:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5676:6:124"},"nodeType":"YulFunctionCall","src":"5676:21:124"},"nodeType":"YulExpressionStatement","src":"5676:21:124"},{"nodeType":"YulAssignment","src":"5706:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5732:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5744:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5755:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5740:3:124"},"nodeType":"YulFunctionCall","src":"5740:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5714:17:124"},"nodeType":"YulFunctionCall","src":"5714:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5706:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5635:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5646:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5657:4:124","type":""}],"src":"5547:218:124"},{"body":{"nodeType":"YulBlock","src":"5857:161:124","statements":[{"body":{"nodeType":"YulBlock","src":"5903:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5912:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5915:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5905:6:124"},"nodeType":"YulFunctionCall","src":"5905:12:124"},"nodeType":"YulExpressionStatement","src":"5905:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5878:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5887:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5874:3:124"},"nodeType":"YulFunctionCall","src":"5874:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5899:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5870:3:124"},"nodeType":"YulFunctionCall","src":"5870:32:124"},"nodeType":"YulIf","src":"5867:52:124"},{"nodeType":"YulAssignment","src":"5928:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5951:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5938:12:124"},"nodeType":"YulFunctionCall","src":"5938:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5928:6:124"}]},{"nodeType":"YulAssignment","src":"5970:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5997:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6008:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5993:3:124"},"nodeType":"YulFunctionCall","src":"5993:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5980:12:124"},"nodeType":"YulFunctionCall","src":"5980:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5970:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5815:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5826:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5838:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:124","type":""}],"src":"5770:248:124"},{"body":{"nodeType":"YulBlock","src":"6124:125:124","statements":[{"nodeType":"YulAssignment","src":"6134:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6146:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6157:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6142:3:124"},"nodeType":"YulFunctionCall","src":"6142:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6134:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6176:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6191:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6199:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6187:3:124"},"nodeType":"YulFunctionCall","src":"6187:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6169:6:124"},"nodeType":"YulFunctionCall","src":"6169:74:124"},"nodeType":"YulExpressionStatement","src":"6169:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6093:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6104:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6115:4:124","type":""}],"src":"6023:226:124"},{"body":{"nodeType":"YulBlock","src":"6375:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"6422:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6431:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6434:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6424:6:124"},"nodeType":"YulFunctionCall","src":"6424:12:124"},"nodeType":"YulExpressionStatement","src":"6424:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6396:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6405:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6392:3:124"},"nodeType":"YulFunctionCall","src":"6392:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6417:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6388:3:124"},"nodeType":"YulFunctionCall","src":"6388:33:124"},"nodeType":"YulIf","src":"6385:53:124"},{"nodeType":"YulVariableDeclaration","src":"6447:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6473:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:124"},"nodeType":"YulFunctionCall","src":"6460:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6451:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6517:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6492:24:124"},"nodeType":"YulFunctionCall","src":"6492:31:124"},"nodeType":"YulExpressionStatement","src":"6492:31:124"},{"nodeType":"YulAssignment","src":"6532:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6542:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6532:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6556:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6599:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6584:3:124"},"nodeType":"YulFunctionCall","src":"6584:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6571:12:124"},"nodeType":"YulFunctionCall","src":"6571:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6560:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6637:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6612:24:124"},"nodeType":"YulFunctionCall","src":"6612:33:124"},"nodeType":"YulExpressionStatement","src":"6612:33:124"},{"nodeType":"YulAssignment","src":"6654:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6664:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6654:6:124"}]},{"nodeType":"YulAssignment","src":"6680:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6707:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6703:3:124"},"nodeType":"YulFunctionCall","src":"6703:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6690:12:124"},"nodeType":"YulFunctionCall","src":"6690:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6680:6:124"}]},{"nodeType":"YulAssignment","src":"6731:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6758:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6769:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6754:3:124"},"nodeType":"YulFunctionCall","src":"6754:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6741:12:124"},"nodeType":"YulFunctionCall","src":"6741:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6731:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6317:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6328:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6340:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6348:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6356:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6364:6:124","type":""}],"src":"6254:525:124"},{"body":{"nodeType":"YulBlock","src":"6954:564:124","statements":[{"body":{"nodeType":"YulBlock","src":"7001:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7010:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7013:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7003:6:124"},"nodeType":"YulFunctionCall","src":"7003:12:124"},"nodeType":"YulExpressionStatement","src":"7003:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6975:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6984:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6971:3:124"},"nodeType":"YulFunctionCall","src":"6971:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6996:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6967:3:124"},"nodeType":"YulFunctionCall","src":"6967:33:124"},"nodeType":"YulIf","src":"6964:53:124"},{"nodeType":"YulVariableDeclaration","src":"7026:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7052:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7039:12:124"},"nodeType":"YulFunctionCall","src":"7039:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7030:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7096:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7071:24:124"},"nodeType":"YulFunctionCall","src":"7071:31:124"},"nodeType":"YulExpressionStatement","src":"7071:31:124"},{"nodeType":"YulAssignment","src":"7111:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7121:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7111:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7135:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7167:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7178:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:124"},"nodeType":"YulFunctionCall","src":"7163:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7150:12:124"},"nodeType":"YulFunctionCall","src":"7150:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7139:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7216:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7191:24:124"},"nodeType":"YulFunctionCall","src":"7191:33:124"},"nodeType":"YulExpressionStatement","src":"7191:33:124"},{"nodeType":"YulAssignment","src":"7233:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7243:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7233:6:124"}]},{"nodeType":"YulAssignment","src":"7259:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7286:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7297:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7282:3:124"},"nodeType":"YulFunctionCall","src":"7282:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7269:12:124"},"nodeType":"YulFunctionCall","src":"7269:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7259:6:124"}]},{"nodeType":"YulAssignment","src":"7310:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7337:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7348:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7333:3:124"},"nodeType":"YulFunctionCall","src":"7333:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7320:12:124"},"nodeType":"YulFunctionCall","src":"7320:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7310:6:124"}]},{"nodeType":"YulAssignment","src":"7361:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7392:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7403:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:124"},"nodeType":"YulFunctionCall","src":"7388:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7371:16:124"},"nodeType":"YulFunctionCall","src":"7371:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7361:6:124"}]},{"nodeType":"YulAssignment","src":"7417:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7444:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7455:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7440:3:124"},"nodeType":"YulFunctionCall","src":"7440:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7427:12:124"},"nodeType":"YulFunctionCall","src":"7427:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7417:6:124"}]},{"nodeType":"YulAssignment","src":"7469:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7496:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7507:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7492:3:124"},"nodeType":"YulFunctionCall","src":"7492:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7479:12:124"},"nodeType":"YulFunctionCall","src":"7479:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7469:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6872:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6883:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6895:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6903:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6911:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6919:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6927:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6935:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6943:6:124","type":""}],"src":"6784:734:124"},{"body":{"nodeType":"YulBlock","src":"7610:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"7656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7658:6:124"},"nodeType":"YulFunctionCall","src":"7658:12:124"},"nodeType":"YulExpressionStatement","src":"7658:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7631:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7640:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7627:3:124"},"nodeType":"YulFunctionCall","src":"7627:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7652:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7623:3:124"},"nodeType":"YulFunctionCall","src":"7623:32:124"},"nodeType":"YulIf","src":"7620:52:124"},{"nodeType":"YulVariableDeclaration","src":"7681:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7707:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7694:12:124"},"nodeType":"YulFunctionCall","src":"7694:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7685:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7751:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7726:24:124"},"nodeType":"YulFunctionCall","src":"7726:31:124"},"nodeType":"YulExpressionStatement","src":"7726:31:124"},{"nodeType":"YulAssignment","src":"7766:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7776:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7766:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7790:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7833:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7818:3:124"},"nodeType":"YulFunctionCall","src":"7818:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7805:12:124"},"nodeType":"YulFunctionCall","src":"7805:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7794:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7871:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7846:24:124"},"nodeType":"YulFunctionCall","src":"7846:33:124"},"nodeType":"YulExpressionStatement","src":"7846:33:124"},{"nodeType":"YulAssignment","src":"7888:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7898:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7888:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7568:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7579:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7591:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7599:6:124","type":""}],"src":"7523:388:124"},{"body":{"nodeType":"YulBlock","src":"8020:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"8066:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8075:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8078:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8068:6:124"},"nodeType":"YulFunctionCall","src":"8068:12:124"},"nodeType":"YulExpressionStatement","src":"8068:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8041:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8050:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8037:3:124"},"nodeType":"YulFunctionCall","src":"8037:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8062:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8033:3:124"},"nodeType":"YulFunctionCall","src":"8033:32:124"},"nodeType":"YulIf","src":"8030:52:124"},{"nodeType":"YulVariableDeclaration","src":"8091:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8117:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8104:12:124"},"nodeType":"YulFunctionCall","src":"8104:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8095:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8161:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8136:24:124"},"nodeType":"YulFunctionCall","src":"8136:31:124"},"nodeType":"YulExpressionStatement","src":"8136:31:124"},{"nodeType":"YulAssignment","src":"8176:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"8186:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7986:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7997:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8009:6:124","type":""}],"src":"7916:281:124"},{"body":{"nodeType":"YulBlock","src":"8257:382:124","statements":[{"nodeType":"YulAssignment","src":"8267:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8281:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"8284:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8277:3:124"},"nodeType":"YulFunctionCall","src":"8277:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8267:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8298:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"8328:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"8334:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8324:3:124"},"nodeType":"YulFunctionCall","src":"8324:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"8302:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8375:31:124","statements":[{"nodeType":"YulAssignment","src":"8377:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8391:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8387:3:124"},"nodeType":"YulFunctionCall","src":"8387:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8377:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8355:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8348:6:124"},"nodeType":"YulFunctionCall","src":"8348:26:124"},"nodeType":"YulIf","src":"8345:61:124"},{"body":{"nodeType":"YulBlock","src":"8465:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8486:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8489:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8479:6:124"},"nodeType":"YulFunctionCall","src":"8479:88:124"},"nodeType":"YulExpressionStatement","src":"8479:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8587:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8590:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8580:6:124"},"nodeType":"YulFunctionCall","src":"8580:15:124"},"nodeType":"YulExpressionStatement","src":"8580:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8615:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8618:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8608:6:124"},"nodeType":"YulFunctionCall","src":"8608:15:124"},"nodeType":"YulExpressionStatement","src":"8608:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8421:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8444:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8452:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8441:2:124"},"nodeType":"YulFunctionCall","src":"8441:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8418:2:124"},"nodeType":"YulFunctionCall","src":"8418:38:124"},"nodeType":"YulIf","src":"8415:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"8237:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"8246:6:124","type":""}],"src":"8202:437:124"},{"body":{"nodeType":"YulBlock","src":"8725:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"8771:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8780:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8783:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8773:6:124"},"nodeType":"YulFunctionCall","src":"8773:12:124"},"nodeType":"YulExpressionStatement","src":"8773:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8746:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8755:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8742:3:124"},"nodeType":"YulFunctionCall","src":"8742:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8738:3:124"},"nodeType":"YulFunctionCall","src":"8738:32:124"},"nodeType":"YulIf","src":"8735:52:124"},{"nodeType":"YulAssignment","src":"8796:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8812:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8806:5:124"},"nodeType":"YulFunctionCall","src":"8806:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8796:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8691:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8702:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8714:6:124","type":""}],"src":"8644:184:124"},{"body":{"nodeType":"YulBlock","src":"9007:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9024:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9035:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9017:6:124"},"nodeType":"YulFunctionCall","src":"9017:21:124"},"nodeType":"YulExpressionStatement","src":"9017:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9058:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9069:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9054:3:124"},"nodeType":"YulFunctionCall","src":"9054:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9047:6:124"},"nodeType":"YulFunctionCall","src":"9047:30:124"},"nodeType":"YulExpressionStatement","src":"9047:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9097:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9108:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9093:3:124"},"nodeType":"YulFunctionCall","src":"9093:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"9113:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9086:6:124"},"nodeType":"YulFunctionCall","src":"9086:62:124"},"nodeType":"YulExpressionStatement","src":"9086:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9179:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9164:3:124"},"nodeType":"YulFunctionCall","src":"9164:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"9184:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9157:6:124"},"nodeType":"YulFunctionCall","src":"9157:44:124"},"nodeType":"YulExpressionStatement","src":"9157:44:124"},{"nodeType":"YulAssignment","src":"9210:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9222:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9233:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9218:3:124"},"nodeType":"YulFunctionCall","src":"9218:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9210:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8998:4:124","type":""}],"src":"8833:410:124"},{"body":{"nodeType":"YulBlock","src":"9315:259:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9332:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9337:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9325:6:124"},"nodeType":"YulFunctionCall","src":"9325:19:124"},"nodeType":"YulExpressionStatement","src":"9325:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9370:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"9375:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:124"},"nodeType":"YulFunctionCall","src":"9366:14:124"},{"name":"start","nodeType":"YulIdentifier","src":"9382:5:124"},{"name":"length","nodeType":"YulIdentifier","src":"9389:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9353:12:124"},"nodeType":"YulFunctionCall","src":"9353:43:124"},"nodeType":"YulExpressionStatement","src":"9353:43:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9420:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9425:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9416:3:124"},"nodeType":"YulFunctionCall","src":"9416:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"9434:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9412:3:124"},"nodeType":"YulFunctionCall","src":"9412:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"9441:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9405:6:124"},"nodeType":"YulFunctionCall","src":"9405:38:124"},"nodeType":"YulExpressionStatement","src":"9405:38:124"},{"nodeType":"YulAssignment","src":"9452:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9467:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9480:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9476:3:124"},"nodeType":"YulFunctionCall","src":"9476:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"9493:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9472:3:124"},"nodeType":"YulFunctionCall","src":"9472:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9463:3:124"},"nodeType":"YulFunctionCall","src":"9463:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"9563:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9459:3:124"},"nodeType":"YulFunctionCall","src":"9459:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9452:3:124"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"9284:5:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"9291:6:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9299:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9307:3:124","type":""}],"src":"9248:326:124"},{"body":{"nodeType":"YulBlock","src":"9904:603:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9914:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9924:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9918:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9982:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9997:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10005:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9993:3:124"},"nodeType":"YulFunctionCall","src":"9993:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9975:6:124"},"nodeType":"YulFunctionCall","src":"9975:34:124"},"nodeType":"YulExpressionStatement","src":"9975:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10029:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10040:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10025:3:124"},"nodeType":"YulFunctionCall","src":"10025:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10049:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10057:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10045:3:124"},"nodeType":"YulFunctionCall","src":"10045:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10018:6:124"},"nodeType":"YulFunctionCall","src":"10018:43:124"},"nodeType":"YulExpressionStatement","src":"10018:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10081:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10092:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10077:3:124"},"nodeType":"YulFunctionCall","src":"10077:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10101:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10109:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10097:3:124"},"nodeType":"YulFunctionCall","src":"10097:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10070:6:124"},"nodeType":"YulFunctionCall","src":"10070:45:124"},"nodeType":"YulExpressionStatement","src":"10070:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10135:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10146:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10131:3:124"},"nodeType":"YulFunctionCall","src":"10131:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"10151:3:124","type":"","value":"192"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10124:6:124"},"nodeType":"YulFunctionCall","src":"10124:31:124"},"nodeType":"YulExpressionStatement","src":"10124:31:124"},{"nodeType":"YulVariableDeclaration","src":"10164:77:124","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10205:6:124"},{"name":"value4","nodeType":"YulIdentifier","src":"10213:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10225:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10236:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10221:3:124"},"nodeType":"YulFunctionCall","src":"10221:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10178:26:124"},"nodeType":"YulFunctionCall","src":"10178:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10261:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10272:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10257:3:124"},"nodeType":"YulFunctionCall","src":"10257:19:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10282:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10290:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10278:3:124"},"nodeType":"YulFunctionCall","src":"10278:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10250:6:124"},"nodeType":"YulFunctionCall","src":"10250:51:124"},"nodeType":"YulExpressionStatement","src":"10250:51:124"},{"nodeType":"YulVariableDeclaration","src":"10310:64:124","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10351:6:124"},{"name":"value6","nodeType":"YulIdentifier","src":"10359:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10367:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10324:26:124"},"nodeType":"YulFunctionCall","src":"10324:50:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10314:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10405:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:124"},"nodeType":"YulFunctionCall","src":"10390:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10415:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10423:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10411:3:124"},"nodeType":"YulFunctionCall","src":"10411:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10383:6:124"},"nodeType":"YulFunctionCall","src":"10383:51:124"},"nodeType":"YulExpressionStatement","src":"10383:51:124"},{"nodeType":"YulAssignment","src":"10443:58:124","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10478:6:124"},{"name":"value8","nodeType":"YulIdentifier","src":"10486:6:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10494:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10451:26:124"},"nodeType":"YulFunctionCall","src":"10451:50:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10443:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9809:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"9820:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"9828:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"9836:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"9844:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9852:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9860:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9868:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9876:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9884:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9895:4:124","type":""}],"src":"9579:928:124"},{"body":{"nodeType":"YulBlock","src":"10544:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10561:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10564:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10554:6:124"},"nodeType":"YulFunctionCall","src":"10554:88:124"},"nodeType":"YulExpressionStatement","src":"10554:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10658:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10661:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10651:6:124"},"nodeType":"YulFunctionCall","src":"10651:15:124"},"nodeType":"YulExpressionStatement","src":"10651:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10682:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10685:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10675:6:124"},"nodeType":"YulFunctionCall","src":"10675:15:124"},"nodeType":"YulExpressionStatement","src":"10675:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10512:184:124"},{"body":{"nodeType":"YulBlock","src":"10750:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"10772:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10774:16:124"},"nodeType":"YulFunctionCall","src":"10774:18:124"},"nodeType":"YulExpressionStatement","src":"10774:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10766:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10769:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10763:2:124"},"nodeType":"YulFunctionCall","src":"10763:8:124"},"nodeType":"YulIf","src":"10760:34:124"},{"nodeType":"YulAssignment","src":"10803:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10815:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10818:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10811:3:124"},"nodeType":"YulFunctionCall","src":"10811:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10803:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10732:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"10735:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10741:4:124","type":""}],"src":"10701:125:124"},{"body":{"nodeType":"YulBlock","src":"10879:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"10906:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10908:16:124"},"nodeType":"YulFunctionCall","src":"10908:18:124"},"nodeType":"YulExpressionStatement","src":"10908:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10895:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10902:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10898:3:124"},"nodeType":"YulFunctionCall","src":"10898:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10892:2:124"},"nodeType":"YulFunctionCall","src":"10892:13:124"},"nodeType":"YulIf","src":"10889:39:124"},{"nodeType":"YulAssignment","src":"10937:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10948:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10951:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10944:3:124"},"nodeType":"YulFunctionCall","src":"10944:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"10937:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10862:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"10865:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"10871:3:124","type":""}],"src":"10831:128:124"},{"body":{"nodeType":"YulBlock","src":"11121:241:124","statements":[{"nodeType":"YulAssignment","src":"11131:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11143:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11154:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11139:3:124"},"nodeType":"YulFunctionCall","src":"11139:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11131:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"11166:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11176:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11170:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11234:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11249:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11257:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11245:3:124"},"nodeType":"YulFunctionCall","src":"11245:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11227:6:124"},"nodeType":"YulFunctionCall","src":"11227:34:124"},"nodeType":"YulExpressionStatement","src":"11227:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11281:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11292:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11277:3:124"},"nodeType":"YulFunctionCall","src":"11277:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11301:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11309:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11297:3:124"},"nodeType":"YulFunctionCall","src":"11297:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11270:6:124"},"nodeType":"YulFunctionCall","src":"11270:43:124"},"nodeType":"YulExpressionStatement","src":"11270:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11333:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11344:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11329:3:124"},"nodeType":"YulFunctionCall","src":"11329:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"11349:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11322:6:124"},"nodeType":"YulFunctionCall","src":"11322:34:124"},"nodeType":"YulExpressionStatement","src":"11322:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11074:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11085:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11093:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11101:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11112:4:124","type":""}],"src":"10964:398:124"},{"body":{"nodeType":"YulBlock","src":"11448:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"11494:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11503:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11506:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11496:6:124"},"nodeType":"YulFunctionCall","src":"11496:12:124"},"nodeType":"YulExpressionStatement","src":"11496:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11469:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11478:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11465:3:124"},"nodeType":"YulFunctionCall","src":"11465:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11490:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11461:3:124"},"nodeType":"YulFunctionCall","src":"11461:32:124"},"nodeType":"YulIf","src":"11458:52:124"},{"nodeType":"YulVariableDeclaration","src":"11519:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11538:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11532:5:124"},"nodeType":"YulFunctionCall","src":"11532:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11523:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11582:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11557:24:124"},"nodeType":"YulFunctionCall","src":"11557:31:124"},"nodeType":"YulExpressionStatement","src":"11557:31:124"},{"nodeType":"YulAssignment","src":"11597:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11607:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11597:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11414:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11425:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11437:6:124","type":""}],"src":"11367:251:124"},{"body":{"nodeType":"YulBlock","src":"11701:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"11747:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11756:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11759:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11749:6:124"},"nodeType":"YulFunctionCall","src":"11749:12:124"},"nodeType":"YulExpressionStatement","src":"11749:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11722:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11731:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11718:3:124"},"nodeType":"YulFunctionCall","src":"11718:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11743:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11714:3:124"},"nodeType":"YulFunctionCall","src":"11714:32:124"},"nodeType":"YulIf","src":"11711:52:124"},{"nodeType":"YulVariableDeclaration","src":"11772:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11791:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11785:5:124"},"nodeType":"YulFunctionCall","src":"11785:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11776:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11854:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11863:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11866:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11856:6:124"},"nodeType":"YulFunctionCall","src":"11856:12:124"},"nodeType":"YulExpressionStatement","src":"11856:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11823:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11844:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11837:6:124"},"nodeType":"YulFunctionCall","src":"11837:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11830:6:124"},"nodeType":"YulFunctionCall","src":"11830:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11820:2:124"},"nodeType":"YulFunctionCall","src":"11820:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11813:6:124"},"nodeType":"YulFunctionCall","src":"11813:40:124"},"nodeType":"YulIf","src":"11810:60:124"},{"nodeType":"YulAssignment","src":"11879:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11889:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11879:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11667:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11678:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11690:6:124","type":""}],"src":"11623:277:124"},{"body":{"nodeType":"YulBlock","src":"12146:373:124","statements":[{"nodeType":"YulAssignment","src":"12156:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12179:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12164:3:124"},"nodeType":"YulFunctionCall","src":"12164:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12199:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12210:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12192:6:124"},"nodeType":"YulFunctionCall","src":"12192:25:124"},"nodeType":"YulExpressionStatement","src":"12192:25:124"},{"nodeType":"YulVariableDeclaration","src":"12226:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12236:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12230:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12298:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12309:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12294:3:124"},"nodeType":"YulFunctionCall","src":"12294:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12318:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12326:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12314:3:124"},"nodeType":"YulFunctionCall","src":"12314:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12287:6:124"},"nodeType":"YulFunctionCall","src":"12287:43:124"},"nodeType":"YulExpressionStatement","src":"12287:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12350:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12361:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12346:3:124"},"nodeType":"YulFunctionCall","src":"12346:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12370:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12378:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12366:3:124"},"nodeType":"YulFunctionCall","src":"12366:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12339:6:124"},"nodeType":"YulFunctionCall","src":"12339:43:124"},"nodeType":"YulExpressionStatement","src":"12339:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12402:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12413:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12398:3:124"},"nodeType":"YulFunctionCall","src":"12398:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12418:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12391:6:124"},"nodeType":"YulFunctionCall","src":"12391:34:124"},"nodeType":"YulExpressionStatement","src":"12391:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12445:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12456:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12441:3:124"},"nodeType":"YulFunctionCall","src":"12441:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"12462:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12434:6:124"},"nodeType":"YulFunctionCall","src":"12434:35:124"},"nodeType":"YulExpressionStatement","src":"12434:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12489:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12500:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12485:3:124"},"nodeType":"YulFunctionCall","src":"12485:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12506:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12478:6:124"},"nodeType":"YulFunctionCall","src":"12478:35:124"},"nodeType":"YulExpressionStatement","src":"12478:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12075:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12086:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12094:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12102:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12110:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12118:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12137:4:124","type":""}],"src":"11905:614:124"},{"body":{"nodeType":"YulBlock","src":"12772:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12789:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12794:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12782:6:124"},"nodeType":"YulFunctionCall","src":"12782:79:124"},"nodeType":"YulExpressionStatement","src":"12782:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12881:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12886:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12877:3:124"},"nodeType":"YulFunctionCall","src":"12877:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12890:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12870:6:124"},"nodeType":"YulFunctionCall","src":"12870:27:124"},"nodeType":"YulExpressionStatement","src":"12870:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12917:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12922:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12913:3:124"},"nodeType":"YulFunctionCall","src":"12913:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"12927:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12906:6:124"},"nodeType":"YulFunctionCall","src":"12906:28:124"},"nodeType":"YulExpressionStatement","src":"12906:28:124"},{"nodeType":"YulAssignment","src":"12943:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12954:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12959:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12950:3:124"},"nodeType":"YulFunctionCall","src":"12950:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12943:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12740:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12745:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12753:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12764:3:124","type":""}],"src":"12524:444:124"},{"body":{"nodeType":"YulBlock","src":"13154:217:124","statements":[{"nodeType":"YulAssignment","src":"13164:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13176:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13187:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13172:3:124"},"nodeType":"YulFunctionCall","src":"13172:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13164:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13207:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"13218:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13200:6:124"},"nodeType":"YulFunctionCall","src":"13200:25:124"},"nodeType":"YulExpressionStatement","src":"13200:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13245:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13256:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13241:3:124"},"nodeType":"YulFunctionCall","src":"13241:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13265:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13273:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13261:3:124"},"nodeType":"YulFunctionCall","src":"13261:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13234:6:124"},"nodeType":"YulFunctionCall","src":"13234:45:124"},"nodeType":"YulExpressionStatement","src":"13234:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13299:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13310:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13295:3:124"},"nodeType":"YulFunctionCall","src":"13295:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"13315:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13288:6:124"},"nodeType":"YulFunctionCall","src":"13288:34:124"},"nodeType":"YulExpressionStatement","src":"13288:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13342:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13353:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13338:3:124"},"nodeType":"YulFunctionCall","src":"13338:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"13358:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13331:6:124"},"nodeType":"YulFunctionCall","src":"13331:34:124"},"nodeType":"YulExpressionStatement","src":"13331:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13099:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13110:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13118:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13126:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13134:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13145:4:124","type":""}],"src":"12973:398:124"},{"body":{"nodeType":"YulBlock","src":"13589:299:124","statements":[{"nodeType":"YulAssignment","src":"13599:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13611:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13622:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13607:3:124"},"nodeType":"YulFunctionCall","src":"13607:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13599:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13642:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"13653:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13635:6:124"},"nodeType":"YulFunctionCall","src":"13635:25:124"},"nodeType":"YulExpressionStatement","src":"13635:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13680:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13691:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13676:3:124"},"nodeType":"YulFunctionCall","src":"13676:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"13696:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13669:6:124"},"nodeType":"YulFunctionCall","src":"13669:34:124"},"nodeType":"YulExpressionStatement","src":"13669:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13723:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13734:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13719:3:124"},"nodeType":"YulFunctionCall","src":"13719:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"13739:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13712:6:124"},"nodeType":"YulFunctionCall","src":"13712:34:124"},"nodeType":"YulExpressionStatement","src":"13712:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13766:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13777:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13762:3:124"},"nodeType":"YulFunctionCall","src":"13762:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"13782:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13755:6:124"},"nodeType":"YulFunctionCall","src":"13755:34:124"},"nodeType":"YulExpressionStatement","src":"13755:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13809:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13820:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13805:3:124"},"nodeType":"YulFunctionCall","src":"13805:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13830:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13838:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13826:3:124"},"nodeType":"YulFunctionCall","src":"13826:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13798:6:124"},"nodeType":"YulFunctionCall","src":"13798:84:124"},"nodeType":"YulExpressionStatement","src":"13798:84:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13526:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13537:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13545:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13553:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13561:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13569:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13580:4:124","type":""}],"src":"13376:512:124"},{"body":{"nodeType":"YulBlock","src":"14067:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14084:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14095:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14077:6:124"},"nodeType":"YulFunctionCall","src":"14077:21:124"},"nodeType":"YulExpressionStatement","src":"14077:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14118:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14129:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14114:3:124"},"nodeType":"YulFunctionCall","src":"14114:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14134:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14107:6:124"},"nodeType":"YulFunctionCall","src":"14107:30:124"},"nodeType":"YulExpressionStatement","src":"14107:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14157:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14168:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14153:3:124"},"nodeType":"YulFunctionCall","src":"14153:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"14173:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14146:6:124"},"nodeType":"YulFunctionCall","src":"14146:62:124"},"nodeType":"YulExpressionStatement","src":"14146:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14228:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14239:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14224:3:124"},"nodeType":"YulFunctionCall","src":"14224:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"14244:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14217:6:124"},"nodeType":"YulFunctionCall","src":"14217:37:124"},"nodeType":"YulExpressionStatement","src":"14217:37:124"},{"nodeType":"YulAssignment","src":"14263:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14275:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14286:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14271:3:124"},"nodeType":"YulFunctionCall","src":"14271:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14263:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14044:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14058:4:124","type":""}],"src":"13893:403:124"},{"body":{"nodeType":"YulBlock","src":"14475:171:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14492:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14503:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14485:6:124"},"nodeType":"YulFunctionCall","src":"14485:21:124"},"nodeType":"YulExpressionStatement","src":"14485:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14526:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14537:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14522:3:124"},"nodeType":"YulFunctionCall","src":"14522:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14542:2:124","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14515:6:124"},"nodeType":"YulFunctionCall","src":"14515:30:124"},"nodeType":"YulExpressionStatement","src":"14515:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14565:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14576:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14561:3:124"},"nodeType":"YulFunctionCall","src":"14561:18:124"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"14581:23:124","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14554:6:124"},"nodeType":"YulFunctionCall","src":"14554:51:124"},"nodeType":"YulExpressionStatement","src":"14554:51:124"},{"nodeType":"YulAssignment","src":"14614:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14626:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14637:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14622:3:124"},"nodeType":"YulFunctionCall","src":"14622:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14614:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14452:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14466:4:124","type":""}],"src":"14301:345:124"},{"body":{"nodeType":"YulBlock","src":"14808:162:124","statements":[{"nodeType":"YulAssignment","src":"14818:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14830:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14841:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14826:3:124"},"nodeType":"YulFunctionCall","src":"14826:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14818:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14860:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"14871:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14853:6:124"},"nodeType":"YulFunctionCall","src":"14853:25:124"},"nodeType":"YulExpressionStatement","src":"14853:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14898:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14909:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14894:3:124"},"nodeType":"YulFunctionCall","src":"14894:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14914:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14887:6:124"},"nodeType":"YulFunctionCall","src":"14887:34:124"},"nodeType":"YulExpressionStatement","src":"14887:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14941:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14952:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14937:3:124"},"nodeType":"YulFunctionCall","src":"14937:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"14957:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14930:6:124"},"nodeType":"YulFunctionCall","src":"14930:34:124"},"nodeType":"YulExpressionStatement","src":"14930:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14761:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14772:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14780:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14788:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14799:4:124","type":""}],"src":"14651:319:124"},{"body":{"nodeType":"YulBlock","src":"15216:382:124","statements":[{"nodeType":"YulAssignment","src":"15226:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15238:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15249:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15234:3:124"},"nodeType":"YulFunctionCall","src":"15234:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15226:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"15262:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15272:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15266:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15330:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15345:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15353:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15341:3:124"},"nodeType":"YulFunctionCall","src":"15341:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15323:6:124"},"nodeType":"YulFunctionCall","src":"15323:34:124"},"nodeType":"YulExpressionStatement","src":"15323:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15377:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15388:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15373:3:124"},"nodeType":"YulFunctionCall","src":"15373:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15397:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15405:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15393:3:124"},"nodeType":"YulFunctionCall","src":"15393:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15366:6:124"},"nodeType":"YulFunctionCall","src":"15366:43:124"},"nodeType":"YulExpressionStatement","src":"15366:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15429:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15440:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15425:3:124"},"nodeType":"YulFunctionCall","src":"15425:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15449:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15457:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15445:3:124"},"nodeType":"YulFunctionCall","src":"15445:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15418:6:124"},"nodeType":"YulFunctionCall","src":"15418:43:124"},"nodeType":"YulExpressionStatement","src":"15418:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15481:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15492:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15477:3:124"},"nodeType":"YulFunctionCall","src":"15477:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"15497:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15470:6:124"},"nodeType":"YulFunctionCall","src":"15470:34:124"},"nodeType":"YulExpressionStatement","src":"15470:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15524:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15535:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15520:3:124"},"nodeType":"YulFunctionCall","src":"15520:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"15541:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15513:6:124"},"nodeType":"YulFunctionCall","src":"15513:35:124"},"nodeType":"YulExpressionStatement","src":"15513:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15568:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15579:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15564:3:124"},"nodeType":"YulFunctionCall","src":"15564:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"15585:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15557:6:124"},"nodeType":"YulFunctionCall","src":"15557:35:124"},"nodeType":"YulExpressionStatement","src":"15557:35:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15145:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"15156:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15164:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15172:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15180:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15188:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15196:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15207:4:124","type":""}],"src":"14975:623:124"},{"body":{"nodeType":"YulBlock","src":"15651:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15661:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15671:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15665:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15714:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15729:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15732:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15725:3:124"},"nodeType":"YulFunctionCall","src":"15725:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15718:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15744:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15759:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15762:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15755:3:124"},"nodeType":"YulFunctionCall","src":"15755:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15748:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15799:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15801:16:124"},"nodeType":"YulFunctionCall","src":"15801:18:124"},"nodeType":"YulExpressionStatement","src":"15801:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15780:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15789:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15793:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15785:3:124"},"nodeType":"YulFunctionCall","src":"15785:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15777:2:124"},"nodeType":"YulFunctionCall","src":"15777:21:124"},"nodeType":"YulIf","src":"15774:47:124"},{"nodeType":"YulAssignment","src":"15830:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15841:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15846:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15837:3:124"},"nodeType":"YulFunctionCall","src":"15837:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15830:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15634:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15637:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15643:3:124","type":""}],"src":"15603:253:124"},{"body":{"nodeType":"YulBlock","src":"16018:252:124","statements":[{"nodeType":"YulAssignment","src":"16028:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16040:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16051:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16036:3:124"},"nodeType":"YulFunctionCall","src":"16036:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16028:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16070:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16085:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16093:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16081:3:124"},"nodeType":"YulFunctionCall","src":"16081:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16063:6:124"},"nodeType":"YulFunctionCall","src":"16063:74:124"},"nodeType":"YulExpressionStatement","src":"16063:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16157:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16168:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16153:3:124"},"nodeType":"YulFunctionCall","src":"16153:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"16173:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16146:6:124"},"nodeType":"YulFunctionCall","src":"16146:34:124"},"nodeType":"YulExpressionStatement","src":"16146:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16200:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16211:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16196:3:124"},"nodeType":"YulFunctionCall","src":"16196:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"16220:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16228:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16216:3:124"},"nodeType":"YulFunctionCall","src":"16216:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16189:6:124"},"nodeType":"YulFunctionCall","src":"16189:75:124"},"nodeType":"YulExpressionStatement","src":"16189:75:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15971:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15982:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15990:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15998:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16009:4:124","type":""}],"src":"15861:409:124"},{"body":{"nodeType":"YulBlock","src":"16324:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"16334:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16344:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16338:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16387:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16402:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16405:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16398:3:124"},"nodeType":"YulFunctionCall","src":"16398:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"16391:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16417:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16432:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16435:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16428:3:124"},"nodeType":"YulFunctionCall","src":"16428:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16421:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16463:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16465:16:124"},"nodeType":"YulFunctionCall","src":"16465:18:124"},"nodeType":"YulExpressionStatement","src":"16465:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16453:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16458:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16450:2:124"},"nodeType":"YulFunctionCall","src":"16450:12:124"},"nodeType":"YulIf","src":"16447:38:124"},{"nodeType":"YulAssignment","src":"16494:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16506:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16511:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16502:3:124"},"nodeType":"YulFunctionCall","src":"16502:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16494:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"16306:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"16309:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"16315:4:124","type":""}],"src":"16275:246:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        if gt(calldataload(add(headStart, 192)), _1) { revert(0, 0) }\n        let value7_1, value8_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 192))), dataEnd)\n        value7 := value7_1\n        value8 := value8_1\n        if gt(calldataload(add(headStart, 224)), _1) { revert(0, 0) }\n        let value9_1, value10_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 224))), dataEnd)\n        value9 := value9_1\n        value10 := value10_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), 192)\n        let tail_1 := abi_encode_string_calldata(value3, value4, add(headStart, 192))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value5, value6, tail_1)\n        mstore(add(headStart, 160), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value7, value8, tail_2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"30695":[{"length":32,"start":7467}],"30877":[{"length":32,"start":4502},{"length":32,"start":6182}],"30880":[{"length":32,"start":956},{"length":32,"start":1821},{"length":32,"start":2180},{"length":32,"start":2691},{"length":32,"start":3229},{"length":32,"start":3434},{"length":32,"start":3716},{"length":32,"start":3943},{"length":32,"start":4071},{"length":32,"start":4367},{"length":32,"start":5991},{"length":32,"start":6711},{"length":32,"start":9184},{"length":32,"start":9559}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b604051610240919061309e565b60405180910390f35b61025c6102573660046130ed565b6106a0565b6040519015158152602001610240565b6102b961027a366004613119565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613190565b610795565b005b6102d661030f366004613119565b610b54565b61025c610322366004613284565b610b93565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c13565b61025c6103793660046130ed565b610c22565b6102ff61038c3660046130ed565b610c66565b6102ff61039f366004613284565b610d33565b6102d66103b2366004613119565b610e35565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff6104703660046132c5565b610f30565b6102d6610483366004613119565b611029565b610233611054565b61025c61049e3660046130ed565b611063565b61025c6104b13660046130ed565b6110a7565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d66110ca565b61025c6105083660046132e7565b6110d5565b6102ff61051b366004613284565b611192565b6102ff61052e36600461332d565b6113d6565b6102ff6105413660046132e7565b611730565b6102d661055436600461339b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a366004613119565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f6366004613119565b611822565b6102ff610609366004613284565b611a00565b60606037805461061d906133d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610649906133d4565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611ab2565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107889190613422565b8290611b20565b91505090565b60015460029060ff16806107a85750303b155b806107b4575060005481115b610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5061097f88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b7792505050565b6109be86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8a92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a7b611b9d565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0e99989796959493929190613484565b60405180910390a38015610b4557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9f83611c62565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfd91879190610bf8906fffffffffffffffffffffffffffffffff86169061352e565b611ab2565b610c08858583611d08565b506001949350505050565b6000610c1d611d27565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf8908690613545565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b50603d54610d2f9073ffffffffffffffffffffffffffffffffffffffff168383611d60565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fbfd31b362487106a121ca0a2568e198562a92db8322b94cb8ddcead020c7d8cf9060600160405180910390a1505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8d917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190613422565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611b20565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5081610fde575050565b603c54611024907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611e33565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8d565b60606038805461061d906133d4565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf890869061352e565b6000806110b383611c62565b90506110c0338583611d08565b5060019392505050565b6000610c1d60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5061118985858585611e33565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611223919061355d565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b4919061357a565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff868116911614156113ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506113d073ffffffffffffffffffffffffffffffffffffffff85168484611d60565b50505050565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8816611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b50834211156040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906114cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a6020526040812054906114fb610c13565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e001604051602081830303815290604052805190602001206040516020016115bc9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa158015611642573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906116e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506116f4826001613545565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a6020526040902055611725898989611ab2565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506117e184848484612074565b73ffffffffffffffffffffffffffffffffffffffff831630146113d057603d546113d09073ffffffffffffffffffffffffffffffffffffffff168484611d60565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b3919061355d565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611920573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611944919061357a565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906119b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b506110248383836000612392565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611b5557600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2f906037906020840190612fa3565b8051610d2f906038906020840190612fa3565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bc861260e565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083c565b5090565b6110248383836fffffffffffffffffffffffffffffffff166001612392565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611d585750603b5490565b610c1d611b9d565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611dc3573d6000803e3d6000fd5b50611dcd84612618565b6113d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083c565b600080611e4084846126e4565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611f0c918491700100000000000000000000000000000000900416611b20565b611f168387611b20565b611f20919061352e565b9050611f2b85611c62565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f9387611f8e85611c62565b612723565b6000611f9f8288613545565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200191815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b600061208083836126e4565b60408051808201909152600281527f32350000000000000000000000000000000000000000000000000000000000006020820152909150816120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c919061309e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff808216929161214c918491700100000000000000000000000000000000900416611b20565b6121568386611b20565b612160919061352e565b905061216b84611c62565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121d3876121ce85611c62565b61289f565b848111156122b25760006121e7868361352e565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161224991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350612389565b60006122be828761352e565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161232091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015612429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244d9190613422565b9050600061249382610f2a8973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b905060006124d983610f2a8973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b90506124e788888886612903565b84156125b4576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561259b57600080fd5b505af11580156125af573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda86666125fa89876126e4565b60408051918252602082018890520161237f565b6060610c1d61060e565b6000612658565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d801561269757602081146126d1576126927f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f61261f565b6126de565b823b6126c8576126c87f475076323a206e6f74206120636f6e7472616374000000000000000000000000601461261f565b600191506126de565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561270857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546127426fffffffffffffffffffffffffffffffff831682613545565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612787838261359c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612898576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561288457600080fd5b505af1158015611725573d6000803e3d6000fd5b5050505050565b6036546128be6fffffffffffffffffffffffffffffffff83168261352e565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff1661278783826135d0565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff808216929161295f918491700100000000000000000000000000000000900416611b20565b6129698385611b20565b612973919061352e565b905060006129b58673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205491925090612a1090839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611b20565b612a1a8387611b20565b612a24919061352e565b9050612a2f85611c62565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a8e85611c62565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612b008888612afb612af68a8a6126e4565b611c62565b612cf8565b8215612baf5760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612beb5750600081115b15612c995760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161237f91815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612d3a82826135d0565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612dae838261359c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f9b576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612eae57600080fd5b505af1158015612ec2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612389576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f8157600080fd5b505af1158015612f95573d6000803e3d6000fd5b50505050505b505050505050565b828054612faf906133d4565b90600052602060002090601f016020900481019282612fd15760008555613017565b82601f10612fea57805160ff1916838001178555613017565b82800160010185558215613017579182015b82811115613017578251825591602001919060010190612ffc565b50611d049291505b80821115611d04576000815560010161301f565b6000815180845260005b818110156130595760208185018101518683018201520161303d565b8181111561306b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130b16020830184613033565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146130da57600080fd5b50565b80356130e8816130b8565b919050565b6000806040838503121561310057600080fd5b823561310b816130b8565b946020939093013593505050565b60006020828403121561312b57600080fd5b81356130b1816130b8565b803560ff811681146130e857600080fd5b60008083601f84011261315957600080fd5b50813567ffffffffffffffff81111561317157600080fd5b60208301915083602082850101111561318957600080fd5b9250929050565b60008060008060008060008060008060006101008c8e0312156131b257600080fd5b6131bb8c6130dd565b9a506131c960208d016130dd565b99506131d760408d016130dd565b98506131e560608d016130dd565b97506131f360808d01613136565b965067ffffffffffffffff8060a08e0135111561320f57600080fd5b61321f8e60a08f01358f01613147565b909750955060c08d013581101561323557600080fd5b6132458e60c08f01358f01613147565b909550935060e08d013581101561325b57600080fd5b5061326c8d60e08e01358e01613147565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561329957600080fd5b83356132a4816130b8565b925060208401356132b4816130b8565b929592945050506040919091013590565b600080604083850312156132d857600080fd5b50508035926020909101359150565b600080600080608085870312156132fd57600080fd5b8435613308816130b8565b93506020850135613318816130b8565b93969395505050506040820135916060013590565b600080600080600080600060e0888a03121561334857600080fd5b8735613353816130b8565b96506020880135613363816130b8565b9550604088013594506060880135935061337f60808901613136565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156133ae57600080fd5b82356133b9816130b8565b915060208301356133c9816130b8565b809150509250929050565b600181811c908216806133e857607f821691505b602082108114156126de577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561343457600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c060608301526134c760c08301888a61343b565b82810360808401526134da81878961343b565b905082810360a08401526134ef81858761343b565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613540576135406134ff565b500390565b60008219821115613558576135586134ff565b500190565b60006020828403121561356f57600080fd5b81516130b1816130b8565b60006020828403121561358c57600080fd5b815180151581146130b157600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156135c7576135c76134ff565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156135f9576135f96134ff565b03939250505056fea2646970667358221220c8fce797689d8b22e367a244ae073aa63667bf02360fb6bd71c01f821337bc4d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3190 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0xB54 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3284 JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0xC22 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0xC66 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3284 JUMP JUMPDEST PUSH2 0xD33 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0xE35 JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x32C5 JUMP JUMPDEST PUSH2 0xF30 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0x1029 JUMP JUMPDEST PUSH2 0x233 PUSH2 0x1054 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0x1063 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x30ED JUMP JUMPDEST PUSH2 0x10A7 JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x10CA JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x32E7 JUMP JUMPDEST PUSH2 0x10D5 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3284 JUMP JUMPDEST PUSH2 0x1192 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x332D JUMP JUMPDEST PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x32E7 JUMP JUMPDEST PUSH2 0x1730 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x339B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0x1822 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3284 JUMP JUMPDEST PUSH2 0x1A00 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x33D4 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x33D4 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1AB2 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x3422 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1B20 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x7A8 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B4 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x882 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x97F DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B77 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BE DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B8A SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA7B PUSH2 0x1B9D JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0E SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3484 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB45 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9F DUP4 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFD SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF8 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x352E JUMP JUMPDEST PUSH2 0x1AB2 JUMP JUMPDEST PUSH2 0xC08 DUP6 DUP6 DUP4 PUSH2 0x1D08 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH2 0x1D27 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x3545 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2F SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D60 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xBFD31B362487106A121CA0A2568E198562A92DB8322B94CB8DDCEAD020C7D8CF SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8D SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xECD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEF1 SWAP2 SWAP1 PUSH2 0x3422 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1B20 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xFD4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP DUP2 PUSH2 0xFDE JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0x1024 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1E33 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x33D4 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x352E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x10B3 DUP4 PUSH2 0x1C62 JUMP JUMPDEST SWAP1 POP PUSH2 0x10C0 CALLER DUP6 DUP4 PUSH2 0x1D08 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x117C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x1189 DUP6 DUP6 DUP6 DUP6 PUSH2 0x1E33 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11FF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1223 SWAP2 SWAP1 PUSH2 0x355D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1290 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12B4 SWAP2 SWAP1 PUSH2 0x357A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1322 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x13AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x13D0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D60 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x1458 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x14CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x14FB PUSH2 0xC13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x15BC SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1642 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x16E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x16F4 DUP3 PUSH1 0x1 PUSH2 0x3545 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x1725 DUP10 DUP10 DUP10 PUSH2 0x1AB2 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x17D4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x17E1 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2074 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0x13D0 JUMPI PUSH1 0x3D SLOAD PUSH2 0x13D0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D60 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x188F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B3 SWAP2 SWAP1 PUSH2 0x355D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1920 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1944 SWAP2 SWAP1 PUSH2 0x357A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x19B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1AA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH2 0x1024 DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2392 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1B55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2FA3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2FA3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BC8 PUSH2 0x260E JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1D04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1024 DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2392 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1D58 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1D PUSH2 0x1B9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1DC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1DCD DUP5 PUSH2 0x2618 JUMP JUMPDEST PUSH2 0x13D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E40 DUP5 DUP5 PUSH2 0x26E4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1EAF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1F0C SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x1F16 DUP4 DUP8 PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x1F20 SWAP2 SWAP1 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH2 0x1F2B DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F93 DUP8 PUSH2 0x1F8E DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x2723 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F9F DUP3 DUP9 PUSH2 0x3545 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2001 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2080 DUP4 DUP4 PUSH2 0x26E4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x20EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x309E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x214C SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2156 DUP4 DUP7 PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2160 SWAP2 SWAP1 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH2 0x216B DUP5 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x21D3 DUP8 PUSH2 0x21CE DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x289F JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x22B2 JUMPI PUSH1 0x0 PUSH2 0x21E7 DUP7 DUP4 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2249 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x2389 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22BE DUP3 DUP8 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2320 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2429 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x244D SWAP2 SWAP1 PUSH2 0x3422 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2493 DUP3 PUSH2 0xF2A DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x24D9 DUP4 PUSH2 0xF2A DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x24E7 DUP9 DUP9 DUP9 DUP7 PUSH2 0x2903 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x25B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x259B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x25AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x25FA DUP10 DUP8 PUSH2 0x26E4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x237F JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1D PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2658 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2697 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x26D1 JUMPI PUSH2 0x2692 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x261F JUMP JUMPDEST PUSH2 0x26DE JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x26C8 JUMPI PUSH2 0x26C8 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x261F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x26DE JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2742 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x3545 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2787 DUP4 DUP3 PUSH2 0x359C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2898 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2884 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1725 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x28BE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x352E JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2787 DUP4 DUP3 PUSH2 0x35D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x295F SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2969 DUP4 DUP6 PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2973 SWAP2 SWAP1 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x29B5 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2A10 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2A1A DUP4 DUP8 PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x2A24 SWAP2 SWAP1 PUSH2 0x352E JUMP JUMPDEST SWAP1 POP PUSH2 0x2A2F DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A8E DUP6 PUSH2 0x1C62 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2B00 DUP9 DUP9 PUSH2 0x2AFB PUSH2 0x2AF6 DUP11 DUP11 PUSH2 0x26E4 JUMP JUMPDEST PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x2CF8 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2BAF JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2BEB JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C99 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x237F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2D3A DUP3 DUP3 PUSH2 0x35D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2DAE DUP4 DUP3 PUSH2 0x359C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F9B JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2EC2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2389 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F95 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2FAF SWAP1 PUSH2 0x33D4 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2FD1 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3017 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2FEA JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3017 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3017 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3017 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2FFC JUMP JUMPDEST POP PUSH2 0x1D04 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1D04 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x301F JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3059 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x303D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x306B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x30B1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3033 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x30DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x30E8 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x310B DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x312B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x30B1 DUP2 PUSH2 0x30B8 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x30E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x31B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31BB DUP13 PUSH2 0x30DD JUMP JUMPDEST SWAP11 POP PUSH2 0x31C9 PUSH1 0x20 DUP14 ADD PUSH2 0x30DD JUMP JUMPDEST SWAP10 POP PUSH2 0x31D7 PUSH1 0x40 DUP14 ADD PUSH2 0x30DD JUMP JUMPDEST SWAP9 POP PUSH2 0x31E5 PUSH1 0x60 DUP14 ADD PUSH2 0x30DD JUMP JUMPDEST SWAP8 POP PUSH2 0x31F3 PUSH1 0x80 DUP14 ADD PUSH2 0x3136 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x320F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x321F DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3147 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x3235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3245 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3147 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x325B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x326C DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3147 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x32A4 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x32B4 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x32D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x32FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3308 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3318 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x3353 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3363 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x337F PUSH1 0x80 DUP10 ADD PUSH2 0x3136 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x33AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x33B9 DUP2 PUSH2 0x30B8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x33C9 DUP2 PUSH2 0x30B8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x33E8 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x26DE JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3434 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x34C7 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x343B JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x34DA DUP2 DUP8 DUP10 PUSH2 0x343B JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x34EF DUP2 DUP6 DUP8 PUSH2 0x343B JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3540 JUMPI PUSH2 0x3540 PUSH2 0x34FF JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3558 JUMPI PUSH2 0x3558 PUSH2 0x34FF JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x356F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x30B1 DUP2 PUSH2 0x30B8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x358C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x30B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x35C7 JUMPI PUSH2 0x35C7 PUSH2 0x34FF JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x35F9 JUMPI PUSH2 0x35F9 PUSH2 0x34FF JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xFC 0xE7 SWAP8 PUSH9 0x9D8B22E367A244AE07 GASPRICE 0xA6 CALLDATASIZE PUSH8 0xBF02360FB6BD71C0 0x1F DUP3 SGT CALLDATACOPY 0xBC 0x4D PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"176:424:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4534:158;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:124;;1551:22;1533:41;;1521:2;1506:18;4534:158:121;1393:187:124;1386:173:123;;;;;;:::i;:::-;3518:19:121;;1479:7:123;3518:19:121;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:123;;;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:123;1837:248:124;1450:45:115;;1492:3;1450:45;;;;;2236:25:124;;;2224:2;2209:18;1450:45:115;2090:177:124;4276:307:115;;;:::i;1990:850::-;;;;;;:::i;:::-;;:::i;:::-;;1225:119:123;;;;;;:::i;:::-;;:::i;4721:327:121:-;;;;;;:::i;:::-;;:::i;1304:141:115:-;;1350:95;1304:141;;3178:86:121;3250:9;;3178:86;;3250:9;;;;4990:36:124;;4978:2;4963:18;3178:86:121;4848:184:124;7503:130:115;;;:::i;5296:204:121:-;;;;;;:::i;:::-;;:::i;4888:161:115:-;;;;;;:::i;:::-;;:::i;425:173:75:-;;;;;;:::i;:::-;;:::i;4035:212:115:-;;;;;;:::i;:::-;;:::i;2408:27:121:-;;;;;;;;5227:42:124;5215:55;;;5197:74;;5185:2;5170:18;2408:27:121;5037:240:124;3691:132:121;3797:21;;;;;;;3691:132;;192:50:120;;232:10;;;;;;;;;;;;;;;;;192:50;;3484:196:115;;;;;;:::i;:::-;;:::i;7782:128::-;;;;;;:::i;:::-;;:::i;3051:90:121:-;;;:::i;5758:226::-;;;;;;:::i;:::-;;:::i;4106:213::-;;;;;;:::i;:::-;;:::i;4613:104:115:-;4703:9;;;;4613:104;;4747:111;4837:16;;;;4747:111;;1601:113:123;;;:::i;2870:215:115:-;;;;;;:::i;:::-;;:::i;8069:223::-;;;;;;:::i;:::-;;:::i;5272:755::-;;;;;;:::i;:::-;;:::i;3115:339::-;;;;;;:::i;:::-;;:::i;4348:157:121:-;;;;;;:::i;:::-;4473:18;;;;4451:7;4473:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4348:157;1756:138:123;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:121;;;;;;:::i;:::-;;:::i;3710:296:115:-;;;;;;:::i;:::-;;:::i;2930:84:121:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4534:158::-;4619:4;4631:39;678:10:4;4654:7:121;4663:6;4631:8;:39::i;:::-;-1:-1:-1;4683:4:121;4534:158;;;;:::o;4276:307:115:-;4364:7;4379:27;4409:19;3376:12:121;;;3293:100;4409:19:115;4379:49;-1:-1:-1;4439:24:115;4435:53;;4480:1;4473:8;;;4276:307;:::o;4435:53::-;4560:16;;4528:49;;;;;:31;4560:16;;;4528:49;;;5197:74:124;4501:77:115;;4528:4;:31;;;;5170:18:124;;4528:49:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:19;;:26;:77::i;:::-;4494:84;;;4276:307;:::o;1990:850::-;1217:12:87;;413:3:75;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;9035:2:124;1202:146:87;;;9017:21:124;9074:2;9054:18;;;9047:30;9113:34;9093:18;;;9086:62;9184:16;9164:18;;;9157:44;9218:19;;1202:146:87;;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2334:4:115::1;2314:24;;:16;:24;;;2340:34;;;;;;;;;;;;;;;;::::0;2306:69:::1;;;;;;;;;;;;;;:::i;:::-;;2381:20;2390:10;;2381:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2381:8:115::1;::::0;-1:-1:-1;;;2381:20:115:i:1;:::-;2407:24;2418:12;;2407:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2407:10:115::1;::::0;-1:-1:-1;;;2407:24:115:i:1;:::-;7979:9:121::0;:23;;;;;;;;;;2472:9:115::1;:20:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;2498:16:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;2538:21:::1;:44:::0;;;;::::1;2472:20;2538:44;::::0;;;::::1;::::0;;;::::1;::::0;;2608:27:::1;:25;:27::i;:::-;2589:16;:46;;;;2697:4;2647:188;;2666:15;2647:188;;;2710:8;2734:20;2763:14;2785:10;;2803:12;;2823:6;;2647:188;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1990:850:115;;;;;;;;;;;:::o;1225:119:123:-;3518:19:121;;;1296:7:123;3518:19:121;;;:10;:19;;;;;:27;;;1318:21:123;1311:28;1225:119;-1:-1:-1;;1225:119:123:o;4721:327:121:-;4845:4;4857:18;4878;:6;:16;:18::i;:::-;4933:19;;;;;;;:11;:19;;;;;;;;678:10:4;4933:33:121;;;;;;;;;4857:39;;-1:-1:-1;4902:78:121;;4911:6;;678:10:4;4933:46:121;;;;;;;:::i;:::-;4902:8;:78::i;:::-;4986:40;4996:6;5004:9;5015:10;4986:9;:40::i;:::-;-1:-1:-1;5039:4:121;;4721:327;-1:-1:-1;;;;4721:327:121:o;7503:130:115:-;7582:7;7604:24;:22;:24::i;:::-;7597:31;;7503:130;:::o;5296:204:121:-;678:10:4;5386:4:121;5430:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5386:4;;5398:80;;5421:7;;5430:47;;5467:10;;5430:47;:::i;4888:161:115:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4998:16:115::1;::::0;4991:53:::1;::::0;4998:16:::1;;5029:6:::0;5037;4991:37:::1;:53::i;:::-;4888:161:::0;;:::o;425:173:75:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;554:39:75::1;::::0;;11176:42:124;11245:15;;;11227:34;;11297:15;;11292:2;11277:18;;11270:43;11329:18;;;11322:34;;;554:39:75::1;::::0;11154:2:124;11139:18;554:39:75::1;;;;;;;425:173:::0;;;:::o;4035:212:115:-;4224:16;;4192:49;;;;;:31;4224:16;;;4192:49;;;5197:74:124;4141:7:115;;4163:79;;4192:4;:31;;;;;;5170:18:124;;4192:49:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3518:19:121;;;3496:7;3518:19;;;:10;:19;;;;;:27;;;4163:21:115;:28;;:79::i;3484:196::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3584:11:115;3580:38:::1;;4888:161:::0;;:::o;3580:38::-:1;3650:9;::::0;3623:52:::1;::::0;3643:4:::1;::::0;3650:9:::1;;3661:6:::0;3669:5;3623:11:::1;:52::i;:::-;;3484:196:::0;;:::o;7782:128::-;1342:14:120;;;7864:7:115;1342:14:120;;;:7;:14;;;;;;7886:19:115;1260:101:120;3051:90:121;3101:13;3129:7;3122:14;;;;;:::i;5758:226::-;678:10:4;5865:4:121;5909:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5865:4;;5877:85;;5900:7;;5909:52;;5946:15;;5909:52;:::i;4106:213::-;4194:4;4206:18;4227;:6;:16;:18::i;:::-;4206:39;-1:-1:-1;4251:46:121;678:10:4;4275:9:121;4286:10;4251:9;:46::i;:::-;-1:-1:-1;4310:4:121;;4106:213;-1:-1:-1;;;4106:213:121:o;1601:113:123:-;1668:7;1690:19;3376:12:121;;;3293:100;2870:215:115;1519:26:121;;;;;;;;;;;;;;;;;3015:4:115;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3034:46:115::1;3046:6;3054:10;3066:6;3074:5;3034:11;:46::i;:::-;3027:53:::0;2870:215;-1:-1:-1;;;;;2870:215:115:o;8069:223::-;1211:22:121;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8189:16:115::1;::::0;8207:35:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;8189:16:::1;8180:25:::0;;::::1;8189:16:::0;::::1;8180:25;;8172:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8249:38:115::1;:26;::::0;::::1;8276:2:::0;8280:6;8249:26:::1;:38::i;:::-;1205:169:121::0;8069:223:115;;;:::o;5272:755::-;5469:29;;;;;;;;;;;;;;;;;5448:19;;;5440:59;;;;;;;;;;;;;:::i;:::-;;5563:8;5544:15;:27;;5573:25;;;;;;;;;;;;;;;;;5536:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5633:14:115;;;5605:25;5633:14;;;:7;:14;;;;;;;5733:18;:16;:18::i;:::-;5771:79;;;1350:95;5771:79;;;12192:25:124;12236:42;12314:15;;;12294:18;;;12287:43;;;;12366:15;;;12346:18;;;12339:43;12398:18;;;12391:34;;;12441:19;;;12434:35;;;12485:19;;;12478:35;;;12164:19;;5771:79:115;;;;;;;;;;;;5761:90;;;;;;5687:172;;;;;;;;12794:66:124;12782:79;;12886:1;12877:11;;12870:27;;;;12922:2;12913:12;;12906:28;12959:2;12950:12;;12524:444;5687:172:115;;;;;;;;;;;;;;5670:195;;5687:172;5670:195;;;;5888:26;;;;;;;;;13200:25:124;;;13273:4;13261:17;;13241:18;;;13234:45;;;;13295:18;;;13288:34;;;13338:18;;;13331:34;;;5670:195:115;-1:-1:-1;5888:26:115;;13172:19:124;;5888:26:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35;;:5;:35;;;5916:24;;;;;;;;;;;;;;;;;5871:70;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5964:21:115;:17;5984:1;5964:21;:::i;:::-;5947:14;;;;;;;:7;:14;;;;;:38;5991:31;5955:5;6007:7;6016:5;5991:8;:31::i;:::-;5434:593;;5272:755;;;;;;;:::o;3115:339::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3265:54:115::1;3277:4;3283:20;3305:6;3313:5;3265:11;:54::i;:::-;3329:37;::::0;::::1;3361:4;3329:37;3325:125;;3383:16;::::0;3376:67:::1;::::0;3383:16:::1;;3414:20:::0;3436:6;3376:37:::1;:67::i;3938:139:121:-:0;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:121::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3710:296:115:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3968:33:115::1;3978:4;3984:2;3988:5;3995;3968:9;:33::i;7235:173:121:-:0;7324:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7371:32;;2236:25:124;;;7371:32:121;;2209:18:124;7371:32:121;;;;;;;7235:173;;;:::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;7513:76:121:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;1475:298:120:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13635:25:124;;;;13676:18;;;13669:34;;;;1674:26:120;13719:18:124;;;13712:34;1712:13:120;13762:18:124;;;13755:34;1745:4:120;13805:19:124;;;13798:84;13607:19;;1582:178:120;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;14095:2:124;1635:78:12;;;14077:21:124;14134:2;14114:18;;;14107:30;14173:34;14153:18;;;14146:62;14244:9;14224:18;;;14217:37;14271:19;;1635:78:12;13893:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;7213:131:115:-;7306:33;7316:4;7322:2;7326:6;7306:33;;7334:4;7306:9;:33::i;867:185:120:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:120;;;867:185::o;939:69::-;1020:27;:25;:27::i;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;14503:2:124;1031:62:1;;;14485:21:124;14542:2;14522:18;;;14515:30;14581:23;14561:18;;;14554:51;14622:18;;1031:62:1;14301:345:124;2295:763:123;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:123;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;2543:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;2543:21:123;2662:59;;3518:27:121;;2683:37:123;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;2236:25:124;;2224:2;2209:18;;2090:177;2900:46:123;;;;;;;;2957:62;;;14853:25:124;;;14909:2;14894:18;;14887:34;;;14937:18;;;14930:34;;;2957:62:123;;;;;;;;;;;14841:2:124;14826:18;2957:62:123;;;;;;;-1:-1:-1;;3034:18:123;;2295:763;-1:-1:-1;;;;;;2295:763:123:o;3512:888::-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:123;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;3719:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;3719:21:123;3832:53;;3518:27:121;;3853:31:123;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;2236:25:124;;2224:2;2209:18;;2090:177;4092:40:123;;;;;;;;4145:54;;;14853:25:124;;;14909:2;14894:18;;14887:34;;;14937:18;;;14930:34;;;4145:54:123;;;;;;;;14841:2:124;14826:18;4145:54:123;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;2236:25:124;;2224:2;2209:18;;2090:177;4280:40:123;;;;;;;;4333:56;;;14853:25:124;;;14909:2;14894:18;;14887:34;;;14937:18;;;14930:34;;;4333:56:123;;;;;;;;;;;14841:2:124;14826:18;4333:56:123;;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;6387:592:115:-;6512:16;;6551:48;;;;;6512:16;;;;6551:48;;;5197:74:124;;;6512:16:115;6486:23;;6551:4;:31;;;;;;5170:18:124;;6551:48:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6535:64;;6606:25;6634:35;6663:5;6634:21;6650:4;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6634:35:115;6606:63;;6675:23;6701:33;6728:5;6701:19;6717:2;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6701:33:115;6675:59;;6741:40;6757:4;6763:2;6767:6;6775:5;6741:15;:40::i;:::-;6792:8;6788:121;;;6810:92;;;;;:21;15341:15:124;;;6810:92:115;;;15323:34:124;15393:15;;;15373:18;;;15366:43;15445:15;;;15425:18;;;15418:43;15477:18;;;15470:34;;;15520:19;;;15513:35;;;15564:19;;;15557:35;;;6810:4:115;:21;;;;15234:19:124;;6810:92:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:121;6920:54;;;;;;;;6946:20;:6;6960:5;6946:13;:20::i;:::-;6920:54;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;1984:18;6920:54:115;1837:248:124;7943:96:115;8000:13;8028:6;:4;:6::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1069:519:122:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;16081:55:124;;;1495:82:122;;;16063:74:124;16153:18;;;16146:34;;;16228;16216:47;;16196:18;;;16189:75;1495:38:122;;;;;16036:18:124;;1495:82:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;4767:1203:123:-;3518:19:121;;;4867:27:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;4867::123;5000:61;;3518:27:121;;5027:33:123;;;;5000:26;:61::i;:::-;4958:33;:19;4985:5;4958:26;:33::i;:::-;:103;;;;:::i;:::-;4926:135;;5068:30;5101:26;5117:9;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;5101:26:123;5243:21;;;5133:32;5243:21;;;:10;:21;;;;;:36;5068:59;;-1:-1:-1;5133:32:123;5213:67;;5068:59;;5243:36;;;;;5213:29;:67::i;:::-;5168:36;:22;5198:5;5168:29;:36::i;:::-;:112;;;;:::i;:::-;5133:147;;5323:17;:5;:15;:17::i;:::-;5287:18;;;;;;;:10;:18;;;;;:53;;;;;;;;;;;;;;;;5385:17;:5;:15;:17::i;:::-;5346:21;;;;;;;:10;:21;;;;;:56;;;;;;;;;;;;;;;;5409:68;5425:6;5357:9;5444:32;:20;:6;5458:5;5444:13;:20::i;:::-;:30;:32::i;:::-;5409:15;:68::i;:::-;5488:25;;5484:194;;5528:51;;2236:25:124;;;5528:51:123;;;;5545:1;;5528:51;;2224:2:124;2209:18;5528:51:123;;;;;;;5592:79;;;14853:25:124;;;14909:2;14894:18;;14887:34;;;14937:18;;;14930:34;;;5592:79:123;;;;;;678:10:4;;5592:79:123;;;;;14841:2:124;5592:79:123;;;5484:194;5698:9;5688:19;;:6;:19;;;;:51;;;;;5738:1;5711:24;:28;5688:51;5684:235;;;5754:57;;2236:25:124;;;5754:57:123;;;;5771:1;;5754:57;;2224:2:124;2209:18;5754:57:123;;;;;;;5824:88;;;14853:25:124;;;14909:2;14894:18;;14887:34;;;14937:18;;;14930:34;;;5824:88:123;;;;;;678:10:4;;5824:88:123;;;;;14841:2:124;5824:88:123;;;5684:235;5947:9;5930:35;;5939:6;5930:35;;;5958:6;5930:35;;;;2236:25:124;;2224:2;2209:18;;2090:177;6215:772:121;6335:18;;;6308:24;6335:18;;;:10;:18;;;;;:26;;;6396:25;6415:6;6335:26;6396:25;:::i;:::-;6367:18;;;;;;;;:10;:18;;;;;;:54;;;;;;;;;;;6457:21;;;;;;:29;;6524:28;6546:6;6457:29;6524:28;:::i;:::-;6492:21;;;;;;;;:10;:21;;;;;:60;;;;;;;;;;;;;;;;6613:21;;6492:60;6613:21;;;6644:48;;6640:343;;6731:12;;6751:84;;;;;:38;16081:55:124;;;6751:84:121;;;16063:74:124;16153:18;;;16146:34;;;16228;16216:47;;16196:18;;;16189:75;6751:38:121;;;;;16036:18:124;;6751:84:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6857:9;6847:19;;:6;:19;;;6843:134;;6878:90;;;;;:38;16081:55:124;;;6878:90:121;;;16063:74:124;16153:18;;;16146:34;;;16228;16216:47;;16196:18;;;16189:75;6878:38:121;;;;;16036:18:124;;6878:90:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6694:289;6640:343;6302:685;;;6215:772;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:124;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:124:o;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:124:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2272:156::-;2338:20;;2398:4;2387:16;;2377:27;;2367:55;;2418:1;2415;2408:12;2433:348;2485:8;2495:6;2549:3;2542:4;2534:6;2530:17;2526:27;2516:55;;2567:1;2564;2557:12;2516:55;-1:-1:-1;2590:20:124;;2633:18;2622:30;;2619:50;;;2665:1;2662;2655:12;2619:50;2702:4;2694:6;2690:17;2678:29;;2754:3;2747:4;2738:6;2730;2726:19;2722:30;2719:39;2716:59;;;2771:1;2768;2761:12;2716:59;2433:348;;;;;:::o;2786:1414::-;2989:6;2997;3005;3013;3021;3029;3037;3045;3053;3061;3069:7;3123:3;3111:9;3102:7;3098:23;3094:33;3091:53;;;3140:1;3137;3130:12;3091:53;3163:29;3182:9;3163:29;:::i;:::-;3153:39;;3211:38;3245:2;3234:9;3230:18;3211:38;:::i;:::-;3201:48;;3268:38;3302:2;3291:9;3287:18;3268:38;:::i;:::-;3258:48;;3325:38;3359:2;3348:9;3344:18;3325:38;:::i;:::-;3315:48;;3382:37;3414:3;3403:9;3399:19;3382:37;:::i;:::-;3372:47;;3438:18;3506:2;3499:3;3488:9;3484:19;3471:33;3468:41;3465:61;;;3522:1;3519;3512:12;3465:61;3561:86;3639:7;3631:3;3620:9;3616:19;3603:33;3592:9;3588:49;3561:86;:::i;:::-;3666:8;;-1:-1:-1;3693:8:124;-1:-1:-1;3744:3:124;3729:19;;3716:33;3713:41;-1:-1:-1;3710:61:124;;;3767:1;3764;3757:12;3710:61;3806:86;3884:7;3876:3;3865:9;3861:19;3848:33;3837:9;3833:49;3806:86;:::i;:::-;3911:8;;-1:-1:-1;3938:8:124;-1:-1:-1;3989:3:124;3974:19;;3961:33;3958:41;-1:-1:-1;3955:61:124;;;4012:1;4009;4002:12;3955:61;;4052:86;4130:7;4122:3;4111:9;4107:19;4094:33;4083:9;4079:49;4052:86;:::i;:::-;4157:8;4147:18;;4185:9;4174:20;;;;2786:1414;;;;;;;;;;;;;;:::o;4205:456::-;4282:6;4290;4298;4351:2;4339:9;4330:7;4326:23;4322:32;4319:52;;;4367:1;4364;4357:12;4319:52;4406:9;4393:23;4425:31;4450:5;4425:31;:::i;:::-;4475:5;-1:-1:-1;4532:2:124;4517:18;;4504:32;4545:33;4504:32;4545:33;:::i;:::-;4205:456;;4597:7;;-1:-1:-1;;;4651:2:124;4636:18;;;;4623:32;;4205:456::o;5770:248::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;-1:-1:-1;;5938:23:124;;;6008:2;5993:18;;;5980:32;;-1:-1:-1;5770:248:124:o;6254:525::-;6340:6;6348;6356;6364;6417:3;6405:9;6396:7;6392:23;6388:33;6385:53;;;6434:1;6431;6424:12;6385:53;6473:9;6460:23;6492:31;6517:5;6492:31;:::i;:::-;6542:5;-1:-1:-1;6599:2:124;6584:18;;6571:32;6612:33;6571:32;6612:33;:::i;:::-;6254:525;;6664:7;;-1:-1:-1;;;;6718:2:124;6703:18;;6690:32;;6769:2;6754:18;6741:32;;6254:525::o;6784:734::-;6895:6;6903;6911;6919;6927;6935;6943;6996:3;6984:9;6975:7;6971:23;6967:33;6964:53;;;7013:1;7010;7003:12;6964:53;7052:9;7039:23;7071:31;7096:5;7071:31;:::i;:::-;7121:5;-1:-1:-1;7178:2:124;7163:18;;7150:32;7191:33;7150:32;7191:33;:::i;:::-;7243:7;-1:-1:-1;7297:2:124;7282:18;;7269:32;;-1:-1:-1;7348:2:124;7333:18;;7320:32;;-1:-1:-1;7371:37:124;7403:3;7388:19;;7371:37;:::i;:::-;7361:47;;7455:3;7444:9;7440:19;7427:33;7417:43;;7507:3;7496:9;7492:19;7479:33;7469:43;;6784:734;;;;;;;;;;:::o;7523:388::-;7591:6;7599;7652:2;7640:9;7631:7;7627:23;7623:32;7620:52;;;7668:1;7665;7658:12;7620:52;7707:9;7694:23;7726:31;7751:5;7726:31;:::i;:::-;7776:5;-1:-1:-1;7833:2:124;7818:18;;7805:32;7846:33;7805:32;7846:33;:::i;:::-;7898:7;7888:17;;;7523:388;;;;;:::o;8202:437::-;8281:1;8277:12;;;;8324;;;8345:61;;8399:4;8391:6;8387:17;8377:27;;8345:61;8452:2;8444:6;8441:14;8421:18;8418:38;8415:218;;;8489:77;8486:1;8479:88;8590:4;8587:1;8580:15;8618:4;8615:1;8608:15;8644:184;8714:6;8767:2;8755:9;8746:7;8742:23;8738:32;8735:52;;;8783:1;8780;8773:12;8735:52;-1:-1:-1;8806:16:124;;8644:184;-1:-1:-1;8644:184:124:o;9248:326::-;9337:6;9332:3;9325:19;9389:6;9382:5;9375:4;9370:3;9366:14;9353:43;;9441:1;9434:4;9425:6;9420:3;9416:16;9412:27;9405:38;9307:3;9563:4;9493:66;9488:2;9480:6;9476:15;9472:88;9467:3;9463:98;9459:109;9452:116;;9248:326;;;;:::o;9579:928::-;9895:4;9924:42;10005:2;9997:6;9993:15;9982:9;9975:34;10057:2;10049:6;10045:15;10040:2;10029:9;10025:18;10018:43;;10109:4;10101:6;10097:17;10092:2;10081:9;10077:18;10070:45;10151:3;10146:2;10135:9;10131:18;10124:31;10178:63;10236:3;10225:9;10221:19;10213:6;10205;10178:63;:::i;:::-;10290:9;10282:6;10278:22;10272:3;10261:9;10257:19;10250:51;10324:50;10367:6;10359;10351;10324:50;:::i;:::-;10310:64;;10423:9;10415:6;10411:22;10405:3;10394:9;10390:19;10383:51;10451:50;10494:6;10486;10478;10451:50;:::i;:::-;10443:58;9579:928;-1:-1:-1;;;;;;;;;;;;9579:928:124:o;10512:184::-;10564:77;10561:1;10554:88;10661:4;10658:1;10651:15;10685:4;10682:1;10675:15;10701:125;10741:4;10769:1;10766;10763:8;10760:34;;;10774:18;;:::i;:::-;-1:-1:-1;10811:9:124;;10701:125::o;10831:128::-;10871:3;10902:1;10898:6;10895:1;10892:13;10889:39;;;10908:18;;:::i;:::-;-1:-1:-1;10944:9:124;;10831:128::o;11367:251::-;11437:6;11490:2;11478:9;11469:7;11465:23;11461:32;11458:52;;;11506:1;11503;11496:12;11458:52;11538:9;11532:16;11557:31;11582:5;11557:31;:::i;11623:277::-;11690:6;11743:2;11731:9;11722:7;11718:23;11714:32;11711:52;;;11759:1;11756;11749:12;11711:52;11791:9;11785:16;11844:5;11837:13;11830:21;11823:5;11820:32;11810:60;;11866:1;11863;11856:12;15603:253;15643:3;15671:34;15732:2;15729:1;15725:10;15762:2;15759:1;15755:10;15793:3;15789:2;15785:12;15780:3;15777:21;15774:47;;;15801:18;;:::i;:::-;15837:13;;15603:253;-1:-1:-1;;;;15603:253:124:o;16275:246::-;16315:4;16344:34;16428:10;;;;16398;;16450:12;;;16447:38;;;16465:18;;:::i;:::-;16502:13;;16275:246;-1:-1:-1;;;16275:246:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"2775800","executionCost":"infinite","totalCost":"infinite"},"external":{"ATOKEN_REVISION()":"308","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"241","POOL()":"infinite","RESERVE_TREASURY_ADDRESS()":"2396","UNDERLYING_ASSET_ADDRESS()":"2418","allowance(address,address)":"infinite","approve(address,uint256)":"24565","balanceOf(address)":"infinite","burn(address,address,uint256,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"26864","getIncentivesController()":"2429","getPreviousIndex(address)":"2590","getScaledUserBalanceAndSupply(address)":"4737","handleRepayment(address,address,uint256)":"infinite","increaseAllowance(address,uint256)":"26934","initialize(address,address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","mintToTreasury(uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2631","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","scaledBalanceOf(address)":"2626","scaledTotalSupply()":"2375","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOnLiquidation(address,address,uint256)":"infinite","transferUnderlyingTo(address,uint256)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"ATOKEN_REVISION()":"0bd7ad3b","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","POOL()":"7535d246","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MockRepayment\",\"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\":\"ATOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"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\":\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"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\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\"},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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 `amount` 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 amount of tokens owned by `account`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/tokens/MockATokenRepayment.sol\":\"MockATokenRepayment\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/tokens/MockATokenRepayment.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {AToken} from '../../protocol/tokenization/AToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\ncontract MockATokenRepayment is AToken {\\n  event MockRepayment(address user, address onBehalfOf, uint256 amount);\\n\\n  constructor(IPool pool) AToken(pool) {}\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x2;\\n  }\\n\\n  function handleRepayment(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount\\n  ) external override onlyPool {\\n    emit MockRepayment(user, onBehalfOf, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x35c4aac98f8d0ff23f9ab558cf90b0d7ceccc3441645ed057eedf1f89402cee3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/AToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAToken} from '../../interfaces/IAToken.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\n\\n/**\\n * @title Aave ERC20 AToken\\n * @author Aave\\n * @notice Implementation of the interest bearing token for the Aave protocol\\n */\\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  uint256 public constant ATOKEN_REVISION = 0x1;\\n\\n  address internal _treasury;\\n  address internal _underlyingAsset;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return ATOKEN_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableAToken\\n  function initialize(\\n    IPool initializingPool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) public virtual override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(aTokenName);\\n    _setSymbol(aTokenSymbol);\\n    _setDecimals(aTokenDecimals);\\n\\n    _treasury = treasury;\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      treasury,\\n      address(incentivesController),\\n      aTokenDecimals,\\n      aTokenName,\\n      aTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool) {\\n    return _mintScaled(caller, onBehalfOf, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function burn(\\n    address from,\\n    address receiverOfUnderlying,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool {\\n    _burnScaled(from, receiverOfUnderlying, amount, index);\\n    if (receiverOfUnderlying != address(this)) {\\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\\n    }\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\\n    if (amount == 0) {\\n      return;\\n    }\\n    _mintScaled(address(POOL), _treasury, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferOnLiquidation(\\n    address from,\\n    address to,\\n    uint256 value\\n  ) external virtual override onlyPool {\\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\\n    // so no need to emit a specific event here\\n    _transfer(from, to, value, false);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(\\n    address user\\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    uint256 currentSupplyScaled = super.totalSupply();\\n\\n    if (currentSupplyScaled == 0) {\\n      return 0;\\n    }\\n\\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\\n    return _treasury;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function handleRepayment(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount\\n  ) external virtual override onlyPool {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IAToken\\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 override {\\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @notice Transfers the aTokens between two users. Validates the transfer\\n   * (ie checks for valid HF after the transfer) if required\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   * @param validate True if the transfer needs to be validated, false otherwise\\n   */\\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\\n    address underlyingAsset = _underlyingAsset;\\n\\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\\n\\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\\n\\n    super._transfer(from, to, amount, index);\\n\\n    if (validate) {\\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\\n    }\\n\\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\\n  }\\n\\n  /**\\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\\n    _transfer(from, to, amount, true);\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\\n   */\\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\\n    return super.DOMAIN_SEPARATOR();\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\\n   */\\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\\n    return super.nonces(owner);\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x2bebbe5c8078e3d300b67d27ed2ac6695f9d17d7c52f0f22879a04353a5c7db1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30857,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_userState","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_allowances","offset":0,"slot":"53","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_totalSupply","offset":0,"slot":"54","type":"t_uint256"},{"astId":30867,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_name","offset":0,"slot":"55","type":"t_string_storage"},{"astId":30869,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_symbol","offset":0,"slot":"56","type":"t_string_storage"},{"astId":30871,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_decimals","offset":0,"slot":"57","type":"t_uint8"},{"astId":30874,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_incentivesController","offset":1,"slot":"57","type":"t_contract(IAaveIncentivesController)4000"},{"astId":30691,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_nonces","offset":0,"slot":"58","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_domainSeparator","offset":0,"slot":"59","type":"t_bytes32"},{"astId":28343,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_treasury","offset":0,"slot":"60","type":"t_address"},{"astId":28345,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"_underlyingAsset","offset":0,"slot":"61","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/mocks/tokens/MockATokenRepayment.sol:MockATokenRepayment","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"version":1}}},"contracts/mocks/tokens/WETH9Mocked.sol":{"WETH9Mocked":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"extract_byte_array_length":{"entryPoint":275,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:396:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"69:325:124","statements":[{"nodeType":"YulAssignment","src":"79:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"93:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"96:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"89:3:124"},"nodeType":"YulFunctionCall","src":"89:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"79:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"110:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"140:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"136:3:124"},"nodeType":"YulFunctionCall","src":"136:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"114:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"187:31:124","statements":[{"nodeType":"YulAssignment","src":"189:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"203:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"211:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"199:3:124"},"nodeType":"YulFunctionCall","src":"199:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"189:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"167:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"160:6:124"},"nodeType":"YulFunctionCall","src":"160:26:124"},"nodeType":"YulIf","src":"157:61:124"},{"body":{"nodeType":"YulBlock","src":"277:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"305:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"310:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"301:3:124"},"nodeType":"YulFunctionCall","src":"301:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"291:6:124"},"nodeType":"YulFunctionCall","src":"291:31:124"},"nodeType":"YulExpressionStatement","src":"291:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"342:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"345:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"335:6:124"},"nodeType":"YulFunctionCall","src":"335:15:124"},"nodeType":"YulExpressionStatement","src":"335:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:124"},"nodeType":"YulFunctionCall","src":"363:15:124"},"nodeType":"YulExpressionStatement","src":"363:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"233:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"256:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"264:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"253:2:124"},"nodeType":"YulFunctionCall","src":"253:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"230:2:124"},"nodeType":"YulFunctionCall","src":"230:38:124"},"nodeType":"YulIf","src":"227:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"49:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"58:6:124","type":""}],"src":"14:380:124"}]},"contents":"{\n    { }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b610a2e8061015d6000396000f3fe6080604052600436106100d65760003560e01c806340c10f191161007f578063a0712d6811610059578063a0712d6814610230578063a9059cbb14610250578063d0e30db014610270578063dd62ed3e1461027857600080fd5b806340c10f19146101ce57806370a08231146101ee57806395d89b411461021b57600080fd5b806323b872dd116100b057806323b872dd146101625780632e1a7d4d14610182578063313ce567146101a257600080fd5b806306fdde03146100ea578063095ea7b31461011557806318160ddd1461014557600080fd5b366100e5576100e36102b0565b005b600080fd5b3480156100f657600080fd5b506100ff61030b565b60405161010c91906107dd565b60405180910390f35b34801561012157600080fd5b50610135610130366004610879565b610399565b604051901515815260200161010c565b34801561015157600080fd5b50475b60405190815260200161010c565b34801561016e57600080fd5b5061013561017d3660046108a3565b610412565b34801561018e57600080fd5b506100e361019d3660046108df565b610629565b3480156101ae57600080fd5b506002546101bc9060ff1681565b60405160ff909116815260200161010c565b3480156101da57600080fd5b506101356101e9366004610879565b6106cf565b3480156101fa57600080fd5b506101546102093660046108f8565b60036020526000908152604090205481565b34801561022757600080fd5b506100ff610756565b34801561023c57600080fd5b5061013561024b3660046108df565b610763565b34801561025c57600080fd5b5061013561026b366004610879565b6107c9565b6100e36102b0565b34801561028457600080fd5b50610154610293366004610913565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102cf908490610975565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546103189061098d565b80601f01602080910402602001604051908101604052809291908181526020018280546103449061098d565b80156103915780601f1061036657610100808354040283529160200191610391565b820191906000526020600020905b81548152906001019060200180831161037457829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104019086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561044457600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104ba575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105425773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104fc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061053c9084906109e1565b90915550505b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812080548492906105779084906109e1565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105b1908490610975565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161061791815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561064557600080fd5b33600090815260036020526040812080548392906106649084906109e1565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610696573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548391908390610706908490610975565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610401565b600180546103189061098d565b33600090815260036020526040812080548391908390610784908490610975565b909155505060405182815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3506001919050565b60006107d6338484610412565b9392505050565b600060208083528351808285015260005b8181101561080a578581018301518582016040015282016107ee565b8181111561081c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461087457600080fd5b919050565b6000806040838503121561088c57600080fd5b61089583610850565b946020939093013593505050565b6000806000606084860312156108b857600080fd5b6108c184610850565b92506108cf60208501610850565b9150604084013590509250925092565b6000602082840312156108f157600080fd5b5035919050565b60006020828403121561090a57600080fd5b6107d682610850565b6000806040838503121561092657600080fd5b61092f83610850565b915061093d60208401610850565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561098857610988610946565b500190565b600181811c908216806109a157607f821691505b602082108114156109db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109f3576109f3610946565b50039056fea2646970667358221220733e7e1504b5ef674c5d3a190b26665a68052d127a9c51f1ac415ae9a4bc057864736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH13 0x2BB930B83832B21022BA3432B9 PUSH1 0x99 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x2E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0xAE8AA89 PUSH1 0xE3 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x5A SWAP2 PUSH1 0x1 SWAP2 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14E JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x86 SWAP1 PUSH2 0x113 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0xA8 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0xEE JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0xC1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xEE JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xEE JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xEE JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xD3 JUMP JUMPDEST POP PUSH2 0xFA SWAP3 SWAP2 POP PUSH2 0xFE JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xFF JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x127 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x148 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA2E DUP1 PUSH2 0x15D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x230 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x250 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x182 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xE5 JUMPI PUSH2 0xE3 PUSH2 0x2B0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x30B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x399 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x17D CALLDATASIZE PUSH1 0x4 PUSH2 0x8A3 JUMP JUMPDEST PUSH2 0x412 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x19D CALLDATASIZE PUSH1 0x4 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x1BC SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x1E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x6CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x756 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x24B CALLDATASIZE PUSH1 0x4 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x763 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x26B CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0x2B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x293 CALLDATASIZE PUSH1 0x4 PUSH2 0x913 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x2CF SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x318 SWAP1 PUSH2 0x98D JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x344 SWAP1 PUSH2 0x98D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x391 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x366 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x391 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x374 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x401 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4BA JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x542 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x53C SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x577 SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5B1 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x617 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x645 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x664 SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP4 SWAP1 PUSH2 0x706 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH2 0x401 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x318 SWAP1 PUSH2 0x98D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP4 SWAP1 PUSH2 0x784 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE CALLER SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D6 CALLER DUP5 DUP5 PUSH2 0x412 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x80A JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x7EE JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x81C JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x895 DUP4 PUSH2 0x850 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8C1 DUP5 PUSH2 0x850 JUMP JUMPDEST SWAP3 POP PUSH2 0x8CF PUSH1 0x20 DUP6 ADD PUSH2 0x850 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x90A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D6 DUP3 PUSH2 0x850 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x92F DUP4 PUSH2 0x850 JUMP JUMPDEST SWAP2 POP PUSH2 0x93D PUSH1 0x20 DUP5 ADD PUSH2 0x850 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x988 JUMPI PUSH2 0x988 PUSH2 0x946 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x9A1 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x9DB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x9F3 JUMPI PUSH2 0x9F3 PUSH2 0x946 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x3E7E1504B5EF674C5D3A190B26665A68052D127A SWAP13 MLOAD CALL 0xAC COINBASE GAS 0xE9 LOG4 0xBC SDIV PUSH25 0x64736F6C634300080A00330000000000000000000000000000 ","sourceMap":"731:36:24:-:0;120:426:76;731:36:24;;120:426:76;731:36:24;;;-1:-1:-1;;;731:36:24;;;;;;-1:-1:-1;;731:36:24;;:::i;:::-;-1:-1:-1;771:29:24;;;;;;;;;;;;;-1:-1:-1;;;771:29:24;;;;;;;;;;;;:::i;:::-;-1:-1:-1;804:26:24;;;-1:-1:-1;;804:26:24;828:2;804:26;;;120:426:76;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;120:426:76;;;-1:-1:-1;120:426:76;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:380:124;93:1;89:12;;;;136;;;157:61;;211:4;203:6;199:17;189:27;;157:61;264:2;256:6;253:14;233:18;230:38;227:161;;;310:10;305:3;301:20;298:1;291:31;345:4;342:1;335:15;373:4;370:1;363:15;227:161;;14:380;;;:::o;:::-;120:426:76;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3160":{"entryPoint":null,"id":3160,"parameterSlots":0,"returnSlots":0},"@allowance_3153":{"entryPoint":null,"id":3153,"parameterSlots":0,"returnSlots":0},"@approve_3256":{"entryPoint":921,"id":3256,"parameterSlots":2,"returnSlots":1},"@balanceOf_3147":{"entryPoint":null,"id":3147,"parameterSlots":0,"returnSlots":0},"@decimals_3115":{"entryPoint":null,"id":3115,"parameterSlots":0,"returnSlots":0},"@deposit_3179":{"entryPoint":688,"id":3179,"parameterSlots":0,"returnSlots":0},"@mint_10769":{"entryPoint":1891,"id":10769,"parameterSlots":1,"returnSlots":1},"@mint_10796":{"entryPoint":1743,"id":10796,"parameterSlots":2,"returnSlots":1},"@name_3109":{"entryPoint":779,"id":3109,"parameterSlots":0,"returnSlots":0},"@symbol_3112":{"entryPoint":1878,"id":3112,"parameterSlots":0,"returnSlots":0},"@totalSupply_3228":{"entryPoint":null,"id":3228,"parameterSlots":0,"returnSlots":1},"@transferFrom_3352":{"entryPoint":1042,"id":3352,"parameterSlots":3,"returnSlots":1},"@transfer_3273":{"entryPoint":1993,"id":3273,"parameterSlots":2,"returnSlots":1},"@withdraw_3216":{"entryPoint":1577,"id":3216,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":2128,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2296,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2323,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2211,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2169,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":2271,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2013,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2421,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":2529,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2445,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":2374,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3563:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:124"},"nodeType":"YulFunctionCall","src":"166:21:124"},"nodeType":"YulExpressionStatement","src":"166:21:124"},{"nodeType":"YulVariableDeclaration","src":"196:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:124"},"nodeType":"YulFunctionCall","src":"232:34:124"},"nodeType":"YulExpressionStatement","src":"232:34:124"},{"nodeType":"YulVariableDeclaration","src":"275:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:124"},"nodeType":"YulFunctionCall","src":"369:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:124"},"nodeType":"YulFunctionCall","src":"365:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:124"},"nodeType":"YulFunctionCall","src":"403:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:124"},"nodeType":"YulFunctionCall","src":"399:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:124"},"nodeType":"YulFunctionCall","src":"393:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:124"},"nodeType":"YulFunctionCall","src":"358:66:124"},"nodeType":"YulExpressionStatement","src":"358:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:124"},"nodeType":"YulFunctionCall","src":"302:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:124","statements":[{"nodeType":"YulAssignment","src":"318:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:124"},"nodeType":"YulFunctionCall","src":"323:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:124","statements":[]},"src":"294:140:124"},{"body":{"nodeType":"YulBlock","src":"468:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:124"},"nodeType":"YulFunctionCall","src":"493:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:124"},"nodeType":"YulFunctionCall","src":"489:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:124"},"nodeType":"YulFunctionCall","src":"482:42:124"},"nodeType":"YulExpressionStatement","src":"482:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:124"},"nodeType":"YulFunctionCall","src":"446:13:124"},"nodeType":"YulIf","src":"443:91:124"},{"nodeType":"YulAssignment","src":"543:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:124"},"nodeType":"YulFunctionCall","src":"574:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:124"},"nodeType":"YulFunctionCall","src":"570:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:124"},"nodeType":"YulFunctionCall","src":"555:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:124"},"nodeType":"YulFunctionCall","src":"551:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:124","type":""}],"src":"14:656:124"},{"body":{"nodeType":"YulBlock","src":"724:147:124","statements":[{"nodeType":"YulAssignment","src":"734:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:124"},"nodeType":"YulFunctionCall","src":"743:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:124"}]},{"body":{"nodeType":"YulBlock","src":"849:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:124"},"nodeType":"YulFunctionCall","src":"851:12:124"},"nodeType":"YulExpressionStatement","src":"851:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:124"},"nodeType":"YulFunctionCall","src":"792:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:124"},"nodeType":"YulFunctionCall","src":"782:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:124"},"nodeType":"YulFunctionCall","src":"775:73:124"},"nodeType":"YulIf","src":"772:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:124","type":""}],"src":"675:196:124"},{"body":{"nodeType":"YulBlock","src":"963:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:124"},"nodeType":"YulFunctionCall","src":"1011:12:124"},"nodeType":"YulExpressionStatement","src":"1011:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:124"},"nodeType":"YulFunctionCall","src":"980:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:124"},"nodeType":"YulFunctionCall","src":"976:32:124"},"nodeType":"YulIf","src":"973:52:124"},{"nodeType":"YulAssignment","src":"1034:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:124"},"nodeType":"YulFunctionCall","src":"1044:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:124"}]},{"nodeType":"YulAssignment","src":"1082:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:124"},"nodeType":"YulFunctionCall","src":"1105:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:124"},"nodeType":"YulFunctionCall","src":"1092:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:124","type":""}],"src":"876:254:124"},{"body":{"nodeType":"YulBlock","src":"1230:92:124","statements":[{"nodeType":"YulAssignment","src":"1240:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:124"},"nodeType":"YulFunctionCall","src":"1248:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:124"},"nodeType":"YulFunctionCall","src":"1300:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:124"},"nodeType":"YulFunctionCall","src":"1293:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:124"},"nodeType":"YulFunctionCall","src":"1275:41:124"},"nodeType":"YulExpressionStatement","src":"1275:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:124","type":""}],"src":"1135:187:124"},{"body":{"nodeType":"YulBlock","src":"1428:76:124","statements":[{"nodeType":"YulAssignment","src":"1438:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:124"},"nodeType":"YulFunctionCall","src":"1446:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:124"},"nodeType":"YulFunctionCall","src":"1473:25:124"},"nodeType":"YulExpressionStatement","src":"1473:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:124","type":""}],"src":"1327:177:124"},{"body":{"nodeType":"YulBlock","src":"1613:224:124","statements":[{"body":{"nodeType":"YulBlock","src":"1659:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1668:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1671:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1661:6:124"},"nodeType":"YulFunctionCall","src":"1661:12:124"},"nodeType":"YulExpressionStatement","src":"1661:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1634:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1630:3:124"},"nodeType":"YulFunctionCall","src":"1630:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1655:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1626:3:124"},"nodeType":"YulFunctionCall","src":"1626:32:124"},"nodeType":"YulIf","src":"1623:52:124"},{"nodeType":"YulAssignment","src":"1684:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1694:18:124"},"nodeType":"YulFunctionCall","src":"1694:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1684:6:124"}]},{"nodeType":"YulAssignment","src":"1732:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1765:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1776:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1761:3:124"},"nodeType":"YulFunctionCall","src":"1761:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1742:18:124"},"nodeType":"YulFunctionCall","src":"1742:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1732:6:124"}]},{"nodeType":"YulAssignment","src":"1789:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1816:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1827:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1812:3:124"},"nodeType":"YulFunctionCall","src":"1812:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1799:12:124"},"nodeType":"YulFunctionCall","src":"1799:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1789:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1563:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1574:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1586:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1594:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1602:6:124","type":""}],"src":"1509:328:124"},{"body":{"nodeType":"YulBlock","src":"1912:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"1958:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1967:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1970:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1960:6:124"},"nodeType":"YulFunctionCall","src":"1960:12:124"},"nodeType":"YulExpressionStatement","src":"1960:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1933:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1942:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1929:3:124"},"nodeType":"YulFunctionCall","src":"1929:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1954:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1925:3:124"},"nodeType":"YulFunctionCall","src":"1925:32:124"},"nodeType":"YulIf","src":"1922:52:124"},{"nodeType":"YulAssignment","src":"1983:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2006:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1993:12:124"},"nodeType":"YulFunctionCall","src":"1993:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1983:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1878:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1889:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1901:6:124","type":""}],"src":"1842:180:124"},{"body":{"nodeType":"YulBlock","src":"2124:87:124","statements":[{"nodeType":"YulAssignment","src":"2134:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2146:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2157:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2142:3:124"},"nodeType":"YulFunctionCall","src":"2142:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2134:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2176:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2191:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2199:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2187:3:124"},"nodeType":"YulFunctionCall","src":"2187:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2169:6:124"},"nodeType":"YulFunctionCall","src":"2169:36:124"},"nodeType":"YulExpressionStatement","src":"2169:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2093:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2104:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2115:4:124","type":""}],"src":"2027:184:124"},{"body":{"nodeType":"YulBlock","src":"2286:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"2332:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2341:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2344:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2334:6:124"},"nodeType":"YulFunctionCall","src":"2334:12:124"},"nodeType":"YulExpressionStatement","src":"2334:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2307:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2316:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2303:3:124"},"nodeType":"YulFunctionCall","src":"2303:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2328:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2299:3:124"},"nodeType":"YulFunctionCall","src":"2299:32:124"},"nodeType":"YulIf","src":"2296:52:124"},{"nodeType":"YulAssignment","src":"2357:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2386:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2367:18:124"},"nodeType":"YulFunctionCall","src":"2367:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2357:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2252:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2263:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2275:6:124","type":""}],"src":"2216:186:124"},{"body":{"nodeType":"YulBlock","src":"2494:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"2540:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2549:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2552:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2542:6:124"},"nodeType":"YulFunctionCall","src":"2542:12:124"},"nodeType":"YulExpressionStatement","src":"2542:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2515:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2524:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2511:3:124"},"nodeType":"YulFunctionCall","src":"2511:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2536:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2507:3:124"},"nodeType":"YulFunctionCall","src":"2507:32:124"},"nodeType":"YulIf","src":"2504:52:124"},{"nodeType":"YulAssignment","src":"2565:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2594:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2575:18:124"},"nodeType":"YulFunctionCall","src":"2575:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2565:6:124"}]},{"nodeType":"YulAssignment","src":"2613:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2646:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2657:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2642:3:124"},"nodeType":"YulFunctionCall","src":"2642:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2623:18:124"},"nodeType":"YulFunctionCall","src":"2623:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2613:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2452:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2463:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2475:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2483:6:124","type":""}],"src":"2407:260:124"},{"body":{"nodeType":"YulBlock","src":"2704:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2721:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2724:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2714:6:124"},"nodeType":"YulFunctionCall","src":"2714:88:124"},"nodeType":"YulExpressionStatement","src":"2714:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2818:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2821:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2811:6:124"},"nodeType":"YulFunctionCall","src":"2811:15:124"},"nodeType":"YulExpressionStatement","src":"2811:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2842:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2845:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2835:6:124"},"nodeType":"YulFunctionCall","src":"2835:15:124"},"nodeType":"YulExpressionStatement","src":"2835:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2672:184:124"},{"body":{"nodeType":"YulBlock","src":"2909:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"2936:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2938:16:124"},"nodeType":"YulFunctionCall","src":"2938:18:124"},"nodeType":"YulExpressionStatement","src":"2938:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2925:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2932:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2928:3:124"},"nodeType":"YulFunctionCall","src":"2928:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2922:2:124"},"nodeType":"YulFunctionCall","src":"2922:13:124"},"nodeType":"YulIf","src":"2919:39:124"},{"nodeType":"YulAssignment","src":"2967:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2978:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"2981:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2974:3:124"},"nodeType":"YulFunctionCall","src":"2974:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2967:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2892:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"2895:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2901:3:124","type":""}],"src":"2861:128:124"},{"body":{"nodeType":"YulBlock","src":"3049:382:124","statements":[{"nodeType":"YulAssignment","src":"3059:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3073:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3076:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3069:3:124"},"nodeType":"YulFunctionCall","src":"3069:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3059:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3090:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3120:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"3126:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3116:3:124"},"nodeType":"YulFunctionCall","src":"3116:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3094:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3167:31:124","statements":[{"nodeType":"YulAssignment","src":"3169:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3183:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3191:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3179:3:124"},"nodeType":"YulFunctionCall","src":"3179:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3169:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3147:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3140:6:124"},"nodeType":"YulFunctionCall","src":"3140:26:124"},"nodeType":"YulIf","src":"3137:61:124"},{"body":{"nodeType":"YulBlock","src":"3257:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3278:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3281:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3271:6:124"},"nodeType":"YulFunctionCall","src":"3271:88:124"},"nodeType":"YulExpressionStatement","src":"3271:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3379:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3382:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3372:6:124"},"nodeType":"YulFunctionCall","src":"3372:15:124"},"nodeType":"YulExpressionStatement","src":"3372:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3407:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3410:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3400:6:124"},"nodeType":"YulFunctionCall","src":"3400:15:124"},"nodeType":"YulExpressionStatement","src":"3400:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3213:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3236:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3244:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3233:2:124"},"nodeType":"YulFunctionCall","src":"3233:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3210:2:124"},"nodeType":"YulFunctionCall","src":"3210:38:124"},"nodeType":"YulIf","src":"3207:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3029:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3038:6:124","type":""}],"src":"2994:437:124"},{"body":{"nodeType":"YulBlock","src":"3485:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"3507:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3509:16:124"},"nodeType":"YulFunctionCall","src":"3509:18:124"},"nodeType":"YulExpressionStatement","src":"3509:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3501:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3504:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3498:2:124"},"nodeType":"YulFunctionCall","src":"3498:8:124"},"nodeType":"YulIf","src":"3495:34:124"},{"nodeType":"YulAssignment","src":"3538:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3550:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3553:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3546:3:124"},"nodeType":"YulFunctionCall","src":"3546:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3538:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3467:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3470:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3476:4:124","type":""}],"src":"3436:125:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100d65760003560e01c806340c10f191161007f578063a0712d6811610059578063a0712d6814610230578063a9059cbb14610250578063d0e30db014610270578063dd62ed3e1461027857600080fd5b806340c10f19146101ce57806370a08231146101ee57806395d89b411461021b57600080fd5b806323b872dd116100b057806323b872dd146101625780632e1a7d4d14610182578063313ce567146101a257600080fd5b806306fdde03146100ea578063095ea7b31461011557806318160ddd1461014557600080fd5b366100e5576100e36102b0565b005b600080fd5b3480156100f657600080fd5b506100ff61030b565b60405161010c91906107dd565b60405180910390f35b34801561012157600080fd5b50610135610130366004610879565b610399565b604051901515815260200161010c565b34801561015157600080fd5b50475b60405190815260200161010c565b34801561016e57600080fd5b5061013561017d3660046108a3565b610412565b34801561018e57600080fd5b506100e361019d3660046108df565b610629565b3480156101ae57600080fd5b506002546101bc9060ff1681565b60405160ff909116815260200161010c565b3480156101da57600080fd5b506101356101e9366004610879565b6106cf565b3480156101fa57600080fd5b506101546102093660046108f8565b60036020526000908152604090205481565b34801561022757600080fd5b506100ff610756565b34801561023c57600080fd5b5061013561024b3660046108df565b610763565b34801561025c57600080fd5b5061013561026b366004610879565b6107c9565b6100e36102b0565b34801561028457600080fd5b50610154610293366004610913565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102cf908490610975565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546103189061098d565b80601f01602080910402602001604051908101604052809291908181526020018280546103449061098d565b80156103915780601f1061036657610100808354040283529160200191610391565b820191906000526020600020905b81548152906001019060200180831161037457829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104019086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561044457600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104ba575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105425773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104fc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061053c9084906109e1565b90915550505b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812080548492906105779084906109e1565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105b1908490610975565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161061791815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561064557600080fd5b33600090815260036020526040812080548392906106649084906109e1565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610696573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548391908390610706908490610975565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610401565b600180546103189061098d565b33600090815260036020526040812080548391908390610784908490610975565b909155505060405182815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3506001919050565b60006107d6338484610412565b9392505050565b600060208083528351808285015260005b8181101561080a578581018301518582016040015282016107ee565b8181111561081c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461087457600080fd5b919050565b6000806040838503121561088c57600080fd5b61089583610850565b946020939093013593505050565b6000806000606084860312156108b857600080fd5b6108c184610850565b92506108cf60208501610850565b9150604084013590509250925092565b6000602082840312156108f157600080fd5b5035919050565b60006020828403121561090a57600080fd5b6107d682610850565b6000806040838503121561092657600080fd5b61092f83610850565b915061093d60208401610850565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561098857610988610946565b500190565b600181811c908216806109a157607f821691505b602082108114156109db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109f3576109f3610946565b50039056fea2646970667358221220733e7e1504b5ef674c5d3a190b26665a68052d127a9c51f1ac415ae9a4bc057864736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x230 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x250 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x182 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xE5 JUMPI PUSH2 0xE3 PUSH2 0x2B0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x30B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x399 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x17D CALLDATASIZE PUSH1 0x4 PUSH2 0x8A3 JUMP JUMPDEST PUSH2 0x412 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x19D CALLDATASIZE PUSH1 0x4 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x1BC SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x1E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x6CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x756 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x24B CALLDATASIZE PUSH1 0x4 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x763 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x26B CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0x2B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x293 CALLDATASIZE PUSH1 0x4 PUSH2 0x913 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x2CF SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x318 SWAP1 PUSH2 0x98D JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x344 SWAP1 PUSH2 0x98D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x391 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x366 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x391 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x374 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x401 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4BA JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x542 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x53C SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x577 SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5B1 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x617 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x645 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x664 SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP4 SWAP1 PUSH2 0x706 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH2 0x401 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x318 SWAP1 PUSH2 0x98D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP4 SWAP1 PUSH2 0x784 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE CALLER SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D6 CALLER DUP5 DUP5 PUSH2 0x412 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x80A JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x7EE JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x81C JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x895 DUP4 PUSH2 0x850 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8C1 DUP5 PUSH2 0x850 JUMP JUMPDEST SWAP3 POP PUSH2 0x8CF PUSH1 0x20 DUP6 ADD PUSH2 0x850 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x90A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D6 DUP3 PUSH2 0x850 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x92F DUP4 PUSH2 0x850 JUMP JUMPDEST SWAP2 POP PUSH2 0x93D PUSH1 0x20 DUP5 ADD PUSH2 0x850 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x988 JUMPI PUSH2 0x988 PUSH2 0x946 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x9A1 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x9DB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x9F3 JUMPI PUSH2 0x9F3 PUSH2 0x946 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x3E7E1504B5EF674C5D3A190B26665A68052D127A SWAP13 MLOAD CALL 0xAC COINBASE GAS 0xE9 LOG4 0xBC SDIV PUSH25 0x64736F6C634300080A00330000000000000000000000000000 ","sourceMap":"120:426:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1237:9:24;:7;:9::i;:::-;120:426:76;;;;;731:36:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1676:166;;;;;;;;;;-1:-1:-1;1676:166:24;;;;;:::i;:::-;;:::i;:::-;;;1300:14:124;;1293:22;1275:41;;1263:2;1248:18;1676:166:24;1135:187:124;1580:92:24;;;;;;;;;;-1:-1:-1;1646:21:24;1580:92;;;1473:25:124;;;1461:2;1446:18;1580:92:24;1327:177:124;1968:410:24;;;;;;;;;;-1:-1:-1;1968:410:24;;;;;:::i;:::-;;:::i;1379:197::-;;;;;;;;;;-1:-1:-1;1379:197:24;;;;;:::i;:::-;;:::i;804:26::-;;;;;;;;;;-1:-1:-1;804:26:24;;;;;;;;;;;2199:4:124;2187:17;;;2169:36;;2157:2;2142:18;804:26:24;2027:184:124;374:170:76;;;;;;;;;;-1:-1:-1;374:170:76;;;;;:::i;:::-;;:::i;1087:44:24:-;;;;;;;;;;-1:-1:-1;1087:44:24;;;;;:::i;:::-;;;;;;;;;;;;;;771:29;;;;;;;;;;;;;:::i;211:159:76:-;;;;;;;;;;-1:-1:-1;211:159:76;;;;;:::i;:::-;;:::i;1846:118:24:-;;;;;;;;;;-1:-1:-1;1846:118:24;;;;;:::i;:::-;;:::i;1255:120::-;;;:::i;1135:64::-;;;;;;;;;;-1:-1:-1;1135:64:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1255:120;1305:10;1295:21;;;;:9;:21;;;;;:34;;1320:9;;1295:21;:34;;1320:9;;1295:34;:::i;:::-;;;;-1:-1:-1;;1340:30:24;;1360:9;1473:25:124;;1348:10:24;;1340:30;;1461:2:124;1446:18;1340:30:24;;;;;;;1255:120::o;731:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1676:166::-;1757:10;1735:4;1747:21;;;:9;:21;;;;;;;;;:26;;;;;;;;;;:32;;;1790:30;1735:4;;1747:26;;1790:30;;;;1776:3;1473:25:124;;1461:2;1446:18;;1327:177;1790:30:24;;;;;;;;-1:-1:-1;1833:4:24;1676:166;;;;:::o;1968:410::-;2065:14;;;2045:4;2065:14;;;:9;:14;;;;;;:21;-1:-1:-1;2065:21:24;2057:30;;;;;;2098:17;;;2105:10;2098:17;;;;:68;;-1:-1:-1;2119:14:24;;;;;;;:9;:14;;;;;;;;2134:10;2119:26;;;;;;;;2149:17;2119:47;;2098:68;2094:172;;;2184:14;;;;;;;:9;:14;;;;;;;;2199:10;2184:26;;;;;;;;:33;-1:-1:-1;2184:33:24;2176:42;;;;;;2226:14;;;;;;;:9;:14;;;;;;;;2241:10;2226:26;;;;;;;:33;;2256:3;;2226:14;:33;;2256:3;;2226:33;:::i;:::-;;;;-1:-1:-1;;2094:172:24;2272:14;;;;;;;:9;:14;;;;;:21;;2290:3;;2272:14;:21;;2290:3;;2272:21;:::i;:::-;;;;-1:-1:-1;;2299:14:24;;;;;;;:9;:14;;;;;:21;;2317:3;;2299:14;:21;;2317:3;;2299:21;:::i;:::-;;;;;;;;2346:3;2332:23;;2341:3;2332:23;;;2351:3;2332:23;;;;1473:25:124;;1461:2;1446:18;;1327:177;2332:23:24;;;;;;;;-1:-1:-1;2369:4:24;1968:410;;;;;:::o;1379:197::-;1441:10;1431:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1431:28:24;1423:37;;;;;;1476:10;1466:21;;;;:9;:21;;;;;:28;;1491:3;;1466:21;:28;;1491:3;;1466:28;:::i;:::-;;;;-1:-1:-1;;1500:33:24;;1508:10;;1500:33;;;;;1529:3;;1500:33;;;;1529:3;1508:10;1500:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1544:27:24;;1473:25:124;;;1555:10:24;;1544:27;;1461:2:124;1446:18;1544:27:24;;;;;;;1379:197;:::o;374:170:76:-;448:18;;;436:4;448:18;;;:9;:18;;;;;:27;;470:5;;448:18;436:4;;448:27;;470:5;;448:27;:::i;:::-;;;;-1:-1:-1;;486:36:76;;1473:25:124;;;486:36:76;;;;503:1;;486:36;;1461:2:124;1446:18;486:36:76;1327:177:124;771:29:24;;;;;;;:::i;211:159:76:-;278:10;256:4;268:21;;;:9;:21;;;;;:30;;293:5;;268:21;256:4;;268:30;;293:5;;268:30;:::i;:::-;;;;-1:-1:-1;;309:39:76;;1473:25:124;;;330:10:76;;326:1;;309:39;;1461:2:124;1446:18;309:39:76;;;;;;;-1:-1:-1;361:4:76;;211:159;-1:-1:-1;211:159:76:o;1846:118:24:-;1906:4;1925:34;1938:10;1950:3;1955;1925:12;:34::i;:::-;1918:41;1846:118;-1:-1:-1;;;1846:118:24:o;14:656:124:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:124;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:124:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:124:o;1509:328::-;1586:6;1594;1602;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;1694:29;1713:9;1694:29;:::i;:::-;1684:39;;1742:38;1776:2;1765:9;1761:18;1742:38;:::i;:::-;1732:48;;1827:2;1816:9;1812:18;1799:32;1789:42;;1509:328;;;;;:::o;1842:180::-;1901:6;1954:2;1942:9;1933:7;1929:23;1925:32;1922:52;;;1970:1;1967;1960:12;1922:52;-1:-1:-1;1993:23:124;;1842:180;-1:-1:-1;1842:180:124:o;2216:186::-;2275:6;2328:2;2316:9;2307:7;2303:23;2299:32;2296:52;;;2344:1;2341;2334:12;2296:52;2367:29;2386:9;2367:29;:::i;2407:260::-;2475:6;2483;2536:2;2524:9;2515:7;2511:23;2507:32;2504:52;;;2552:1;2549;2542:12;2504:52;2575:29;2594:9;2575:29;:::i;:::-;2565:39;;2623:38;2657:2;2646:9;2642:18;2623:38;:::i;:::-;2613:48;;2407:260;;;;;:::o;2672:184::-;2724:77;2721:1;2714:88;2821:4;2818:1;2811:15;2845:4;2842:1;2835:15;2861:128;2901:3;2932:1;2928:6;2925:1;2922:13;2919:39;;;2938:18;;:::i;:::-;-1:-1:-1;2974:9:124;;2861:128::o;2994:437::-;3073:1;3069:12;;;;3116;;;3137:61;;3191:4;3183:6;3179:17;3169:27;;3137:61;3244:2;3236:6;3233:14;3213:18;3210:38;3207:218;;;3281:77;3278:1;3271:88;3382:4;3379:1;3372:15;3410:4;3407:1;3400:15;3207:218;;2994:437;;;:::o;3436:125::-;3476:4;3504:1;3501;3498:8;3495:34;;;3509:18;;:::i;:::-;-1:-1:-1;3546:9:124;;3436:125::o"},"gasEstimates":{"creation":{"codeDepositCost":"521200","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24521","balanceOf(address)":"2552","decimals()":"2380","deposit()":"25987","mint(address,uint256)":"26622","mint(uint256)":"26503","name()":"infinite","symbol()":"infinite","totalSupply()":"251","transfer(address,uint256)":"53319","transferFrom(address,address,uint256)":"infinite","withdraw(uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","deposit()":"d0e30db0","mint(address,uint256)":"40c10f19","mint(uint256)":"a0712d68","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"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\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"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\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/tokens/WETH9Mocked.sol\":\"WETH9Mocked\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/weth/WETH9.sol\":{\"content\":\"// Copyright (C) 2015, 2016, 2017 Dapphub\\n\\n// This program is free software: you can redistribute it and/or modify\\n// it under the terms of the GNU General Public License as published by\\n// the Free Software Foundation, either version 3 of the License, or\\n// (at your option) any later version.\\n\\n// This program is distributed in the hope that it will be useful,\\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n// GNU General Public License for more details.\\n\\n// You should have received a copy of the GNU General Public License\\n// along with this program.  If not, see <http://www.gnu.org/licenses/>.\\n\\npragma solidity ^0.8.10;\\n\\ncontract WETH9 {\\n  string public name = 'Wrapped Ether';\\n  string public symbol = 'WETH';\\n  uint8 public decimals = 18;\\n\\n  event Approval(address indexed src, address indexed guy, uint256 wad);\\n  event Transfer(address indexed src, address indexed dst, uint256 wad);\\n  event Deposit(address indexed dst, uint256 wad);\\n  event Withdrawal(address indexed src, uint256 wad);\\n\\n  mapping(address => uint256) public balanceOf;\\n  mapping(address => mapping(address => uint256)) public allowance;\\n\\n  receive() external payable {\\n    deposit();\\n  }\\n\\n  function deposit() public payable {\\n    balanceOf[msg.sender] += msg.value;\\n    emit Deposit(msg.sender, msg.value);\\n  }\\n\\n  function withdraw(uint256 wad) public {\\n    require(balanceOf[msg.sender] >= wad);\\n    balanceOf[msg.sender] -= wad;\\n    payable(msg.sender).transfer(wad);\\n    emit Withdrawal(msg.sender, wad);\\n  }\\n\\n  function totalSupply() public view returns (uint256) {\\n    return address(this).balance;\\n  }\\n\\n  function approve(address guy, uint256 wad) public returns (bool) {\\n    allowance[msg.sender][guy] = wad;\\n    emit Approval(msg.sender, guy, wad);\\n    return true;\\n  }\\n\\n  function transfer(address dst, uint256 wad) public returns (bool) {\\n    return transferFrom(msg.sender, dst, wad);\\n  }\\n\\n  function transferFrom(address src, address dst, uint256 wad) public returns (bool) {\\n    require(balanceOf[src] >= wad);\\n\\n    if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) {\\n      require(allowance[src][msg.sender] >= wad);\\n      allowance[src][msg.sender] -= wad;\\n    }\\n\\n    balanceOf[src] -= wad;\\n    balanceOf[dst] += wad;\\n\\n    emit Transfer(src, dst, wad);\\n\\n    return true;\\n  }\\n}\\n\\n/*\\n                    GNU GENERAL PUBLIC LICENSE\\n                       Version 3, 29 June 2007\\n\\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\\n Everyone is permitted to copy and distribute verbatim copies\\n of this license document, but changing it is not allowed.\\n\\n                            Preamble\\n\\n  The GNU General Public License is a free, copyleft license for\\nsoftware and other kinds of works.\\n\\n  The licenses for most software and other practical works are designed\\nto take away your freedom to share and change the works.  By contrast,\\nthe GNU General Public License is intended to guarantee your freedom to\\nshare and change all versions of a program--to make sure it remains free\\nsoftware for all its users.  We, the Free Software Foundation, use the\\nGNU General Public License for most of our software; it applies also to\\nany other work released this way by its authors.  You can apply it to\\nyour programs, too.\\n\\n  When we speak of free software, we are referring to freedom, not\\nprice.  Our General Public Licenses are designed to make sure that you\\nhave the freedom to distribute copies of free software (and charge for\\nthem if you wish), that you receive source code or can get it if you\\nwant it, that you can change the software or use pieces of it in new\\nfree programs, and that you know you can do these things.\\n\\n  To protect your rights, we need to prevent others from denying you\\nthese rights or asking you to surrender the rights.  Therefore, you have\\ncertain responsibilities if you distribute copies of the software, or if\\nyou modify it: responsibilities to respect the freedom of others.\\n\\n  For example, if you distribute copies of such a program, whether\\ngratis or for a fee, you must pass on to the recipients the same\\nfreedoms that you received.  You must make sure that they, too, receive\\nor can get the source code.  And you must show them these terms so they\\nknow their rights.\\n\\n  Developers that use the GNU GPL protect your rights with two steps:\\n(1) assert copyright on the software, and (2) offer you this License\\ngiving you legal permission to copy, distribute and/or modify it.\\n\\n  For the developers' and authors' protection, the GPL clearly explains\\nthat there is no warranty for this free software.  For both users' and\\nauthors' sake, the GPL requires that modified versions be marked as\\nchanged, so that their problems will not be attributed erroneously to\\nauthors of previous versions.\\n\\n  Some devices are designed to deny users access to install or run\\nmodified versions of the software inside them, although the manufacturer\\ncan do so.  This is fundamentally incompatible with the aim of\\nprotecting users' freedom to change the software.  The systematic\\npattern of such abuse occurs in the area of products for individuals to\\nuse, which is precisely where it is most unacceptable.  Therefore, we\\nhave designed this version of the GPL to prohibit the practice for those\\nproducts.  If such problems arise substantially in other domains, we\\nstand ready to extend this provision to those domains in future versions\\nof the GPL, as needed to protect the freedom of users.\\n\\n  Finally, every program is threatened constantly by software patents.\\nStates should not allow patents to restrict development and use of\\nsoftware on general-purpose computers, but in those that do, we wish to\\navoid the special danger that patents applied to a free program could\\nmake it effectively proprietary.  To prevent this, the GPL assures that\\npatents cannot be used to render the program non-free.\\n\\n  The precise terms and conditions for copying, distribution and\\nmodification follow.\\n\\n                       TERMS AND CONDITIONS\\n\\n  0. Definitions.\\n\\n  \\\"This License\\\" refers to version 3 of the GNU General Public License.\\n\\n  \\\"Copyright\\\" also means copyright-like laws that apply to other kinds of\\nworks, such as semiconductor masks.\\n\\n  \\\"The Program\\\" refers to any copyrightable work licensed under this\\nLicense.  Each licensee is addressed as \\\"you\\\".  \\\"Licensees\\\" and\\n\\\"recipients\\\" may be individuals or organizations.\\n\\n  To \\\"modify\\\" a work means to copy from or adapt all or part of the work\\nin a fashion requiring copyright permission, other than the making of an\\nexact copy.  The resulting work is called a \\\"modified version\\\" of the\\nearlier work or a work \\\"based on\\\" the earlier work.\\n\\n  A \\\"covered work\\\" means either the unmodified Program or a work based\\non the Program.\\n\\n  To \\\"propagate\\\" a work means to do anything with it that, without\\npermission, would make you directly or secondarily liable for\\ninfringement under applicable copyright law, except executing it on a\\ncomputer or modifying a private copy.  Propagation includes copying,\\ndistribution (with or without modification), making available to the\\npublic, and in some countries other activities as well.\\n\\n  To \\\"convey\\\" a work means any kind of propagation that enables other\\nparties to make or receive copies.  Mere interaction with a user through\\na computer network, with no transfer of a copy, is not conveying.\\n\\n  An interactive user interface displays \\\"Appropriate Legal Notices\\\"\\nto the extent that it includes a convenient and prominently visible\\nfeature that (1) displays an appropriate copyright notice, and (2)\\ntells the user that there is no warranty for the work (except to the\\nextent that warranties are provided), that licensees may convey the\\nwork under this License, and how to view a copy of this License.  If\\nthe interface presents a list of user commands or options, such as a\\nmenu, a prominent item in the list meets this criterion.\\n\\n  1. Source Code.\\n\\n  The \\\"source code\\\" for a work means the preferred form of the work\\nfor making modifications to it.  \\\"Object code\\\" means any non-source\\nform of a work.\\n\\n  A \\\"Standard Interface\\\" means an interface that either is an official\\nstandard defined by a recognized standards body, or, in the case of\\ninterfaces specified for a particular programming language, one that\\nis widely used among developers working in that language.\\n\\n  The \\\"System Libraries\\\" of an executable work include anything, other\\nthan the work as a whole, that (a) is included in the normal form of\\npackaging a Major Component, but which is not part of that Major\\nComponent, and (b) serves only to enable use of the work with that\\nMajor Component, or to implement a Standard Interface for which an\\nimplementation is available to the public in source code form.  A\\n\\\"Major Component\\\", in this context, means a major essential component\\n(kernel, window system, and so on) of the specific operating system\\n(if any) on which the executable work runs, or a compiler used to\\nproduce the work, or an object code interpreter used to run it.\\n\\n  The \\\"Corresponding Source\\\" for a work in object code form means all\\nthe source code needed to generate, install, and (for an executable\\nwork) run the object code and to modify the work, including scripts to\\ncontrol those activities.  However, it does not include the work's\\nSystem Libraries, or general-purpose tools or generally available free\\nprograms which are used unmodified in performing those activities but\\nwhich are not part of the work.  For example, Corresponding Source\\nincludes interface definition files associated with source files for\\nthe work, and the source code for shared libraries and dynamically\\nlinked subprograms that the work is specifically designed to require,\\nsuch as by intimate data communication or control flow between those\\nsubprograms and other parts of the work.\\n\\n  The Corresponding Source need not include anything that users\\ncan regenerate automatically from other parts of the Corresponding\\nSource.\\n\\n  The Corresponding Source for a work in source code form is that\\nsame work.\\n\\n  2. Basic Permissions.\\n\\n  All rights granted under this License are granted for the term of\\ncopyright on the Program, and are irrevocable provided the stated\\nconditions are met.  This License explicitly affirms your unlimited\\npermission to run the unmodified Program.  The output from running a\\ncovered work is covered by this License only if the output, given its\\ncontent, constitutes a covered work.  This License acknowledges your\\nrights of fair use or other equivalent, as provided by copyright law.\\n\\n  You may make, run and propagate covered works that you do not\\nconvey, without conditions so long as your license otherwise remains\\nin force.  You may convey covered works to others for the sole purpose\\nof having them make modifications exclusively for you, or provide you\\nwith facilities for running those works, provided that you comply with\\nthe terms of this License in conveying all material for which you do\\nnot control copyright.  Those thus making or running the covered works\\nfor you must do so exclusively on your behalf, under your direction\\nand control, on terms that prohibit them from making any copies of\\nyour copyrighted material outside their relationship with you.\\n\\n  Conveying under any other circumstances is permitted solely under\\nthe conditions stated below.  Sublicensing is not allowed; section 10\\nmakes it unnecessary.\\n\\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\\n\\n  No covered work shall be deemed part of an effective technological\\nmeasure under any applicable law fulfilling obligations under article\\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\\nsimilar laws prohibiting or restricting circumvention of such\\nmeasures.\\n\\n  When you convey a covered work, you waive any legal power to forbid\\ncircumvention of technological measures to the extent such circumvention\\nis effected by exercising rights under this License with respect to\\nthe covered work, and you disclaim any intention to limit operation or\\nmodification of the work as a means of enforcing, against the work's\\nusers, your or third parties' legal rights to forbid circumvention of\\ntechnological measures.\\n\\n  4. Conveying Verbatim Copies.\\n\\n  You may convey verbatim copies of the Program's source code as you\\nreceive it, in any medium, provided that you conspicuously and\\nappropriately publish on each copy an appropriate copyright notice;\\nkeep intact all notices stating that this License and any\\nnon-permissive terms added in accord with section 7 apply to the code;\\nkeep intact all notices of the absence of any warranty; and give all\\nrecipients a copy of this License along with the Program.\\n\\n  You may charge any price or no price for each copy that you convey,\\nand you may offer support or warranty protection for a fee.\\n\\n  5. Conveying Modified Source Versions.\\n\\n  You may convey a work based on the Program, or the modifications to\\nproduce it from the Program, in the form of source code under the\\nterms of section 4, provided that you also meet all of these conditions:\\n\\n    a) The work must carry prominent notices stating that you modified\\n    it, and giving a relevant date.\\n\\n    b) The work must carry prominent notices stating that it is\\n    released under this License and any conditions added under section\\n    7.  This requirement modifies the requirement in section 4 to\\n    \\\"keep intact all notices\\\".\\n\\n    c) You must license the entire work, as a whole, under this\\n    License to anyone who comes into possession of a copy.  This\\n    License will therefore apply, along with any applicable section 7\\n    additional terms, to the whole of the work, and all its parts,\\n    regardless of how they are packaged.  This License gives no\\n    permission to license the work in any other way, but it does not\\n    invalidate such permission if you have separately received it.\\n\\n    d) If the work has interactive user interfaces, each must display\\n    Appropriate Legal Notices; however, if the Program has interactive\\n    interfaces that do not display Appropriate Legal Notices, your\\n    work need not make them do so.\\n\\n  A compilation of a covered work with other separate and independent\\nworks, which are not by their nature extensions of the covered work,\\nand which are not combined with it such as to form a larger program,\\nin or on a volume of a storage or distribution medium, is called an\\n\\\"aggregate\\\" if the compilation and its resulting copyright are not\\nused to limit the access or legal rights of the compilation's users\\nbeyond what the individual works permit.  Inclusion of a covered work\\nin an aggregate does not cause this License to apply to the other\\nparts of the aggregate.\\n\\n  6. Conveying Non-Source Forms.\\n\\n  You may convey a covered work in object code form under the terms\\nof sections 4 and 5, provided that you also convey the\\nmachine-readable Corresponding Source under the terms of this License,\\nin one of these ways:\\n\\n    a) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by the\\n    Corresponding Source fixed on a durable physical medium\\n    customarily used for software interchange.\\n\\n    b) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by a\\n    written offer, valid for at least three years and valid for as\\n    long as you offer spare parts or customer support for that product\\n    model, to give anyone who possesses the object code either (1) a\\n    copy of the Corresponding Source for all the software in the\\n    product that is covered by this License, on a durable physical\\n    medium customarily used for software interchange, for a price no\\n    more than your reasonable cost of physically performing this\\n    conveying of source, or (2) access to copy the\\n    Corresponding Source from a network server at no charge.\\n\\n    c) Convey individual copies of the object code with a copy of the\\n    written offer to provide the Corresponding Source.  This\\n    alternative is allowed only occasionally and noncommercially, and\\n    only if you received the object code with such an offer, in accord\\n    with subsection 6b.\\n\\n    d) Convey the object code by offering access from a designated\\n    place (gratis or for a charge), and offer equivalent access to the\\n    Corresponding Source in the same way through the same place at no\\n    further charge.  You need not require recipients to copy the\\n    Corresponding Source along with the object code.  If the place to\\n    copy the object code is a network server, the Corresponding Source\\n    may be on a different server (operated by you or a third party)\\n    that supports equivalent copying facilities, provided you maintain\\n    clear directions next to the object code saying where to find the\\n    Corresponding Source.  Regardless of what server hosts the\\n    Corresponding Source, you remain obligated to ensure that it is\\n    available for as long as needed to satisfy these requirements.\\n\\n    e) Convey the object code using peer-to-peer transmission, provided\\n    you inform other peers where the object code and Corresponding\\n    Source of the work are being offered to the general public at no\\n    charge under subsection 6d.\\n\\n  A separable portion of the object code, whose source code is excluded\\nfrom the Corresponding Source as a System Library, need not be\\nincluded in conveying the object code work.\\n\\n  A \\\"User Product\\\" is either (1) a \\\"consumer product\\\", which means any\\ntangible personal property which is normally used for personal, family,\\nor household purposes, or (2) anything designed or sold for incorporation\\ninto a dwelling.  In determining whether a product is a consumer product,\\ndoubtful cases shall be resolved in favor of coverage.  For a particular\\nproduct received by a particular user, \\\"normally used\\\" refers to a\\ntypical or common use of that class of product, regardless of the status\\nof the particular user or of the way in which the particular user\\nactually uses, or expects or is expected to use, the product.  A product\\nis a consumer product regardless of whether the product has substantial\\ncommercial, industrial or non-consumer uses, unless such uses represent\\nthe only significant mode of use of the product.\\n\\n  \\\"Installation Information\\\" for a User Product means any methods,\\nprocedures, authorization keys, or other information required to install\\nand execute modified versions of a covered work in that User Product from\\na modified version of its Corresponding Source.  The information must\\nsuffice to ensure that the continued functioning of the modified object\\ncode is in no case prevented or interfered with solely because\\nmodification has been made.\\n\\n  If you convey an object code work under this section in, or with, or\\nspecifically for use in, a User Product, and the conveying occurs as\\npart of a transaction in which the right of possession and use of the\\nUser Product is transferred to the recipient in perpetuity or for a\\nfixed term (regardless of how the transaction is characterized), the\\nCorresponding Source conveyed under this section must be accompanied\\nby the Installation Information.  But this requirement does not apply\\nif neither you nor any third party retains the ability to install\\nmodified object code on the User Product (for example, the work has\\nbeen installed in ROM).\\n\\n  The requirement to provide Installation Information does not include a\\nrequirement to continue to provide support service, warranty, or updates\\nfor a work that has been modified or installed by the recipient, or for\\nthe User Product in which it has been modified or installed.  Access to a\\nnetwork may be denied when the modification itself materially and\\nadversely affects the operation of the network or violates the rules and\\nprotocols for communication across the network.\\n\\n  Corresponding Source conveyed, and Installation Information provided,\\nin accord with this section must be in a format that is publicly\\ndocumented (and with an implementation available to the public in\\nsource code form), and must require no special password or key for\\nunpacking, reading or copying.\\n\\n  7. Additional Terms.\\n\\n  \\\"Additional permissions\\\" are terms that supplement the terms of this\\nLicense by making exceptions from one or more of its conditions.\\nAdditional permissions that are applicable to the entire Program shall\\nbe treated as though they were included in this License, to the extent\\nthat they are valid under applicable law.  If additional permissions\\napply only to part of the Program, that part may be used separately\\nunder those permissions, but the entire Program remains governed by\\nthis License without regard to the additional permissions.\\n\\n  When you convey a copy of a covered work, you may at your option\\nremove any additional permissions from that copy, or from any part of\\nit.  (Additional permissions may be written to require their own\\nremoval in certain cases when you modify the work.)  You may place\\nadditional permissions on material, added by you to a covered work,\\nfor which you have or can give appropriate copyright permission.\\n\\n  Notwithstanding any other provision of this License, for material you\\nadd to a covered work, you may (if authorized by the copyright holders of\\nthat material) supplement the terms of this License with terms:\\n\\n    a) Disclaiming warranty or limiting liability differently from the\\n    terms of sections 15 and 16 of this License; or\\n\\n    b) Requiring preservation of specified reasonable legal notices or\\n    author attributions in that material or in the Appropriate Legal\\n    Notices displayed by works containing it; or\\n\\n    c) Prohibiting misrepresentation of the origin of that material, or\\n    requiring that modified versions of such material be marked in\\n    reasonable ways as different from the original version; or\\n\\n    d) Limiting the use for publicity purposes of names of licensors or\\n    authors of the material; or\\n\\n    e) Declining to grant rights under trademark law for use of some\\n    trade names, trademarks, or service marks; or\\n\\n    f) Requiring indemnification of licensors and authors of that\\n    material by anyone who conveys the material (or modified versions of\\n    it) with contractual assumptions of liability to the recipient, for\\n    any liability that these contractual assumptions directly impose on\\n    those licensors and authors.\\n\\n  All other non-permissive additional terms are considered \\\"further\\nrestrictions\\\" within the meaning of section 10.  If the Program as you\\nreceived it, or any part of it, contains a notice stating that it is\\ngoverned by this License along with a term that is a further\\nrestriction, you may remove that term.  If a license document contains\\na further restriction but permits relicensing or conveying under this\\nLicense, you may add to a covered work material governed by the terms\\nof that license document, provided that the further restriction does\\nnot survive such relicensing or conveying.\\n\\n  If you add terms to a covered work in accord with this section, you\\nmust place, in the relevant source files, a statement of the\\nadditional terms that apply to those files, or a notice indicating\\nwhere to find the applicable terms.\\n\\n  Additional terms, permissive or non-permissive, may be stated in the\\nform of a separately written license, or stated as exceptions;\\nthe above requirements apply either way.\\n\\n  8. Termination.\\n\\n  You may not propagate or modify a covered work except as expressly\\nprovided under this License.  Any attempt otherwise to propagate or\\nmodify it is void, and will automatically terminate your rights under\\nthis License (including any patent licenses granted under the third\\nparagraph of section 11).\\n\\n  However, if you cease all violation of this License, then your\\nlicense from a particular copyright holder is reinstated (a)\\nprovisionally, unless and until the copyright holder explicitly and\\nfinally terminates your license, and (b) permanently, if the copyright\\nholder fails to notify you of the violation by some reasonable means\\nprior to 60 days after the cessation.\\n\\n  Moreover, your license from a particular copyright holder is\\nreinstated permanently if the copyright holder notifies you of the\\nviolation by some reasonable means, this is the first time you have\\nreceived notice of violation of this License (for any work) from that\\ncopyright holder, and you cure the violation prior to 30 days after\\nyour receipt of the notice.\\n\\n  Termination of your rights under this section does not terminate the\\nlicenses of parties who have received copies or rights from you under\\nthis License.  If your rights have been terminated and not permanently\\nreinstated, you do not qualify to receive new licenses for the same\\nmaterial under section 10.\\n\\n  9. Acceptance Not Required for Having Copies.\\n\\n  You are not required to accept this License in order to receive or\\nrun a copy of the Program.  Ancillary propagation of a covered work\\noccurring solely as a consequence of using peer-to-peer transmission\\nto receive a copy likewise does not require acceptance.  However,\\nnothing other than this License grants you permission to propagate or\\nmodify any covered work.  These actions infringe copyright if you do\\nnot accept this License.  Therefore, by modifying or propagating a\\ncovered work, you indicate your acceptance of this License to do so.\\n\\n  10. Automatic Licensing of Downstream Recipients.\\n\\n  Each time you convey a covered work, the recipient automatically\\nreceives a license from the original licensors, to run, modify and\\npropagate that work, subject to this License.  You are not responsible\\nfor enforcing compliance by third parties with this License.\\n\\n  An \\\"entity transaction\\\" is a transaction transferring control of an\\norganization, or substantially all assets of one, or subdividing an\\norganization, or merging organizations.  If propagation of a covered\\nwork results from an entity transaction, each party to that\\ntransaction who receives a copy of the work also receives whatever\\nlicenses to the work the party's predecessor in interest had or could\\ngive under the previous paragraph, plus a right to possession of the\\nCorresponding Source of the work from the predecessor in interest, if\\nthe predecessor has it or can get it with reasonable efforts.\\n\\n  You may not impose any further restrictions on the exercise of the\\nrights granted or affirmed under this License.  For example, you may\\nnot impose a license fee, royalty, or other charge for exercise of\\nrights granted under this License, and you may not initiate litigation\\n(including a cross-claim or counterclaim in a lawsuit) alleging that\\nany patent claim is infringed by making, using, selling, offering for\\nsale, or importing the Program or any portion of it.\\n\\n  11. Patents.\\n\\n  A \\\"contributor\\\" is a copyright holder who authorizes use under this\\nLicense of the Program or a work on which the Program is based.  The\\nwork thus licensed is called the contributor's \\\"contributor version\\\".\\n\\n  A contributor's \\\"essential patent claims\\\" are all patent claims\\nowned or controlled by the contributor, whether already acquired or\\nhereafter acquired, that would be infringed by some manner, permitted\\nby this License, of making, using, or selling its contributor version,\\nbut do not include claims that would be infringed only as a\\nconsequence of further modification of the contributor version.  For\\npurposes of this definition, \\\"control\\\" includes the right to grant\\npatent sublicenses in a manner consistent with the requirements of\\nthis License.\\n\\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\\npatent license under the contributor's essential patent claims, to\\nmake, use, sell, offer for sale, import and otherwise run, modify and\\npropagate the contents of its contributor version.\\n\\n  In the following three paragraphs, a \\\"patent license\\\" is any express\\nagreement or commitment, however denominated, not to enforce a patent\\n(such as an express permission to practice a patent or covenant not to\\nsue for patent infringement).  To \\\"grant\\\" such a patent license to a\\nparty means to make such an agreement or commitment not to enforce a\\npatent against the party.\\n\\n  If you convey a covered work, knowingly relying on a patent license,\\nand the Corresponding Source of the work is not available for anyone\\nto copy, free of charge and under the terms of this License, through a\\npublicly available network server or other readily accessible means,\\nthen you must either (1) cause the Corresponding Source to be so\\navailable, or (2) arrange to deprive yourself of the benefit of the\\npatent license for this particular work, or (3) arrange, in a manner\\nconsistent with the requirements of this License, to extend the patent\\nlicense to downstream recipients.  \\\"Knowingly relying\\\" means you have\\nactual knowledge that, but for the patent license, your conveying the\\ncovered work in a country, or your recipient's use of the covered work\\nin a country, would infringe one or more identifiable patents in that\\ncountry that you have reason to believe are valid.\\n\\n  If, pursuant to or in connection with a single transaction or\\narrangement, you convey, or propagate by procuring conveyance of, a\\ncovered work, and grant a patent license to some of the parties\\nreceiving the covered work authorizing them to use, propagate, modify\\nor convey a specific copy of the covered work, then the patent license\\nyou grant is automatically extended to all recipients of the covered\\nwork and works based on it.\\n\\n  A patent license is \\\"discriminatory\\\" if it does not include within\\nthe scope of its coverage, prohibits the exercise of, or is\\nconditioned on the non-exercise of one or more of the rights that are\\nspecifically granted under this License.  You may not convey a covered\\nwork if you are a party to an arrangement with a third party that is\\nin the business of distributing software, under which you make payment\\nto the third party based on the extent of your activity of conveying\\nthe work, and under which the third party grants, to any of the\\nparties who would receive the covered work from you, a discriminatory\\npatent license (a) in connection with copies of the covered work\\nconveyed by you (or copies made from those copies), or (b) primarily\\nfor and in connection with specific products or compilations that\\ncontain the covered work, unless you entered into that arrangement,\\nor that patent license was granted, prior to 28 March 2007.\\n\\n  Nothing in this License shall be construed as excluding or limiting\\nany implied license or other defenses to infringement that may\\notherwise be available to you under applicable patent law.\\n\\n  12. No Surrender of Others' Freedom.\\n\\n  If conditions are imposed on you (whether by court order, agreement or\\notherwise) that contradict the conditions of this License, they do not\\nexcuse you from the conditions of this License.  If you cannot convey a\\ncovered work so as to satisfy simultaneously your obligations under this\\nLicense and any other pertinent obligations, then as a consequence you may\\nnot convey it at all.  For example, if you agree to terms that obligate you\\nto collect a royalty for further conveying from those to whom you convey\\nthe Program, the only way you could satisfy both those terms and this\\nLicense would be to refrain entirely from conveying the Program.\\n\\n  13. Use with the GNU Affero General Public License.\\n\\n  Notwithstanding any other provision of this License, you have\\npermission to link or combine any covered work with a work licensed\\nunder version 3 of the GNU Affero General Public License into a single\\ncombined work, and to convey the resulting work.  The terms of this\\nLicense will continue to apply to the part which is the covered work,\\nbut the special requirements of the GNU Affero General Public License,\\nsection 13, concerning interaction through a network will apply to the\\ncombination as such.\\n\\n  14. Revised Versions of this License.\\n\\n  The Free Software Foundation may publish revised and/or new versions of\\nthe GNU General Public License from time to time.  Such new versions will\\nbe similar in spirit to the present version, but may differ in detail to\\naddress new problems or concerns.\\n\\n  Each version is given a distinguishing version number.  If the\\nProgram specifies that a certain numbered version of the GNU General\\nPublic License \\\"or any later version\\\" applies to it, you have the\\noption of following the terms and conditions either of that numbered\\nversion or of any later version published by the Free Software\\nFoundation.  If the Program does not specify a version number of the\\nGNU General Public License, you may choose any version ever published\\nby the Free Software Foundation.\\n\\n  If the Program specifies that a proxy can decide which future\\nversions of the GNU General Public License can be used, that proxy's\\npublic statement of acceptance of a version permanently authorizes you\\nto choose that version for the Program.\\n\\n  Later license versions may give you additional or different\\npermissions.  However, no additional obligations are imposed on any\\nauthor or copyright holder as a result of your choosing to follow a\\nlater version.\\n\\n  15. Disclaimer of Warranty.\\n\\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \\\"AS IS\\\" WITHOUT WARRANTY\\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\\n\\n  16. Limitation of Liability.\\n\\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\\nSUCH DAMAGES.\\n\\n  17. Interpretation of Sections 15 and 16.\\n\\n  If the disclaimer of warranty and limitation of liability provided\\nabove cannot be given local legal effect according to their terms,\\nreviewing courts shall apply local law that most closely approximates\\nan absolute waiver of all civil liability in connection with the\\nProgram, unless a warranty or assumption of liability accompanies a\\ncopy of the Program in return for a fee.\\n\\n                     END OF TERMS AND CONDITIONS\\n\\n            How to Apply These Terms to Your New Programs\\n\\n  If you develop a new program, and you want it to be of the greatest\\npossible use to the public, the best way to achieve this is to make it\\nfree software which everyone can redistribute and change under these terms.\\n\\n  To do so, attach the following notices to the program.  It is safest\\nto attach them to the start of each source file to most effectively\\nstate the exclusion of warranty; and each file should have at least\\nthe \\\"copyright\\\" line and a pointer to where the full notice is found.\\n\\n    <one line to give the program's name and a brief idea of what it does.>\\n    Copyright (C) <year>  <name of author>\\n\\n    This program is free software: you can redistribute it and/or modify\\n    it under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    This program is distributed in the hope that it will be useful,\\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n    GNU General Public License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\\n\\nAlso add information on how to contact you by electronic and paper mail.\\n\\n  If the program does terminal interaction, make it output a short\\nnotice like this when it starts in an interactive mode:\\n\\n    <program>  Copyright (C) <year>  <name of author>\\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\\n    This is free software, and you are welcome to redistribute it\\n    under certain conditions; type `show c' for details.\\n\\nThe hypothetical commands `show w' and `show c' should show the appropriate\\nparts of the General Public License.  Of course, your program's commands\\nmight be different; for a GUI interface, you would use an \\\"about box\\\".\\n\\n  You should also get your employer (if you work as a programmer) or school,\\nif any, to sign a \\\"copyright disclaimer\\\" for the program, if necessary.\\nFor more information on this, and how to apply and follow the GNU GPL, see\\n<http://www.gnu.org/licenses/>.\\n\\n  The GNU General Public License does not permit incorporating your program\\ninto proprietary programs.  If your program is a subroutine library, you\\nmay consider it more useful to permit linking proprietary applications with\\nthe library.  If this is what you want to do, use the GNU Lesser General\\nPublic License instead of this License.  But first, please read\\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\\n\\n*/\\n\",\"keccak256\":\"0x08da88e3ef46dae3e7937fbc60210e7a02f1e7b7daddd3c33ab40bdd20ca30e6\"},\"contracts/mocks/tokens/WETH9Mocked.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WETH9} from '../../dependencies/weth/WETH9.sol';\\n\\ncontract WETH9Mocked is WETH9 {\\n  // Mint not backed by Ether: only for testing purposes\\n  function mint(uint256 value) public returns (bool) {\\n    balanceOf[msg.sender] += value;\\n    emit Transfer(address(0), msg.sender, value);\\n    return true;\\n  }\\n\\n  function mint(address account, uint256 value) public returns (bool) {\\n    balanceOf[account] += value;\\n    emit Transfer(address(0), account, value);\\n    return true;\\n  }\\n}\\n\",\"keccak256\":\"0x83cd7ab548a31266dcdde4c0a07c9b2d4cc63ab18ffdd37f08b685e81243fd49\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3109,"contract":"contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":3112,"contract":"contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":3115,"contract":"contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":3147,"contract":"contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"balanceOf","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":3153,"contract":"contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/upgradeability/MockAToken.sol":{"MockAToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"ATOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","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":"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","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":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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 `amount` 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 amount of tokens owned by `account`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10815":{"entryPoint":null,"id":10815,"parameterSlots":1,"returnSlots":0},"@_28371":{"entryPoint":null,"id":28371,"parameterSlots":1,"returnSlots":0},"@_30705":{"entryPoint":null,"id":30705,"parameterSlots":0,"returnSlots":0},"@_30916":{"entryPoint":null,"id":30916,"parameterSlots":4,"returnSlots":0},"@_31331":{"entryPoint":null,"id":31331,"parameterSlots":4,"returnSlots":0},"@_31495":{"entryPoint":null,"id":31495,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":543,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":582,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":518,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:50:124"},"nodeType":"YulIf","src":"76:70:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:138:124"},{"body":{"nodeType":"YulBlock","src":"252:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:124"},"nodeType":"YulFunctionCall","src":"300:12:124"},"nodeType":"YulExpressionStatement","src":"300:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:124"},"nodeType":"YulFunctionCall","src":"269:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:124"},"nodeType":"YulFunctionCall","src":"265:32:124"},"nodeType":"YulIf","src":"262:52:124"},{"nodeType":"YulVariableDeclaration","src":"323:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:124"},"nodeType":"YulFunctionCall","src":"336:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:124"},"nodeType":"YulFunctionCall","src":"361:38:124"},"nodeType":"YulExpressionStatement","src":"361:38:124"},{"nodeType":"YulAssignment","src":"408:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:124","type":""}],"src":"157:272:124"},{"body":{"nodeType":"YulBlock","src":"546:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:124"},"nodeType":"YulFunctionCall","src":"594:12:124"},"nodeType":"YulExpressionStatement","src":"594:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:32:124"},"nodeType":"YulIf","src":"556:52:124"},{"nodeType":"YulVariableDeclaration","src":"617:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:124"},"nodeType":"YulFunctionCall","src":"630:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:124"},"nodeType":"YulFunctionCall","src":"655:38:124"},"nodeType":"YulExpressionStatement","src":"655:38:124"},{"nodeType":"YulAssignment","src":"702:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:124","type":""}],"src":"434:289:124"},{"body":{"nodeType":"YulBlock","src":"783:325:124","statements":[{"nodeType":"YulAssignment","src":"793:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:124"},"nodeType":"YulFunctionCall","src":"803:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:124","statements":[{"nodeType":"YulAssignment","src":"903:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:124"},"nodeType":"YulFunctionCall","src":"913:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:124"},"nodeType":"YulFunctionCall","src":"874:26:124"},"nodeType":"YulIf","src":"871:61:124"},{"body":{"nodeType":"YulBlock","src":"991:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:124"},"nodeType":"YulFunctionCall","src":"1015:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:31:124"},"nodeType":"YulExpressionStatement","src":"1005:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:124"},"nodeType":"YulFunctionCall","src":"1049:15:124"},"nodeType":"YulExpressionStatement","src":"1049:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:124"},"nodeType":"YulFunctionCall","src":"1077:15:124"},"nodeType":"YulExpressionStatement","src":"1077:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:124"},"nodeType":"YulFunctionCall","src":"967:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:124"},"nodeType":"YulFunctionCall","src":"944:38:124"},"nodeType":"YulIf","src":"941:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:124","type":""}],"src":"728:380:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b50604051620038ee380380620038ee83398101604081905262000038916200021f565b80806040518060400160405280600b81526020016a105513d2d15397d253541360aa1b8152506040518060400160405280600b81526020016a105513d2d15397d253541360aa1b81525060008383838383838383836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f191906200021f565b6001600160a01b031660805282516200011290603790602086019062000160565b5081516200012890603890602085019062000160565b506039805460ff191660ff9290921691909117905550506001600160a01b031660a05250504660c05250620002839650505050505050565b8280546200016e9062000246565b90600052602060002090601f016020900481019282620001925760008555620001dd565b82601f10620001ad57805160ff1916838001178555620001dd565b82800160010185558215620001dd579182015b82811115620001dd578251825591602001919060010190620001c0565b50620001eb929150620001ef565b5090565b5b80821115620001eb5760008155600101620001f0565b6001600160a01b03811681146200021c57600080fd5b50565b6000602082840312156200023257600080fd5b81516200023f8162000206565b9392505050565b600181811c908216806200025b57607f821691505b602082108114156200027d57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516135d9620003156000396000611ccd0152600081816103bc0152818161071d0152818161088401528181610a8301528181610c9d01528181610d6a01528181610e2c01528181610f0f01528181610f8f015281816110b701528181611709015281816119d90152818161238201526124f901526000818161113e01526117c801526135d96000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b6040516102409190613040565b60405180910390f35b61025c61025736600461308f565b6106a0565b6040519015158152602001610240565b6102b961027a3660046130bb565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613132565b610795565b005b6102d661030f3660046130bb565b610b54565b61025c610322366004613226565b610b93565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c13565b61025c61037936600461308f565b610c22565b6102ff61038c36600461308f565b610c66565b6102ff61039f366004613226565b610d33565b6102d66103b23660046130bb565b610ddd565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff610470366004613267565b610ed8565b6102d66104833660046130bb565b610fd1565b610233610ffc565b61025c61049e36600461308f565b61100b565b61025c6104b136600461308f565b61104f565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d6611072565b61025c610508366004613289565b61107d565b6102ff61051b366004613226565b61113a565b6102ff61052e3660046132cf565b611378565b6102ff610541366004613289565b6116d2565b6102d661055436600461333d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a3660046130bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f63660046130bb565b6117c4565b6102ff610609366004613226565b6119a2565b60606037805461061d90613376565b80601f016020809104026020016040519081016040528092919081815260200182805461064990613376565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611a54565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078891906133c4565b8290611ac2565b91505090565b60015460029060ff16806107a85750303b155b806107b4575060005481115b610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061097f88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1992505050565b6109be86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2c92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a7b611b3f565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0e99989796959493929190613426565b60405180910390a38015610b4557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9f83611c04565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfd91879190610bf8906fffffffffffffffffffffffffffffffff8616906134d0565b611a54565b610c08858583611caa565b506001949350505050565b6000610c1d611cc9565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf89086906134e7565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50603d54610d2f9073ffffffffffffffffffffffffffffffffffffffff168383611d02565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8d917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906133c4565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611ac2565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5081610f86575050565b603c54610fcc907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611dd5565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8d565b60606038805461061d90613376565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf89086906134d0565b60008061105b83611c04565b9050611068338583611caa565b5060019392505050565b6000610c1d60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061113185858585611dd5565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb91906134ff565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c919061351c565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906112ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff86811691161415611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50610dd773ffffffffffffffffffffffffffffffffffffffff85168484611d02565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166113fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a60205260408120549061149d610c13565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e0016040516020818303038152906040528051906020012060405160200161155e9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156115e4573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f37390000000000000000000000000000000000000000000000000000000000008152509061168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b506116968260016134e7565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a60205260409020556116c7898989611a54565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061178384848484612016565b73ffffffffffffffffffffffffffffffffffffffff83163014610dd757603d54610dd79073ffffffffffffffffffffffffffffffffffffffff168484611d02565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185591906134ff565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e6919061351c565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50610fcc8383836000612334565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611af757600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2f906037906020840190612f45565b8051610d2f906038906020840190612f45565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b6a6125b0565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611ca6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083c565b5090565b610fcc8383836fffffffffffffffffffffffffffffffff166001612334565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611cfa5750603b5490565b610c1d611b3f565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611d65573d6000803e3d6000fd5b50611d6f846125ba565b610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083c565b600080611de28484612686565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611e51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611eae918491700100000000000000000000000000000000900416611ac2565b611eb88387611ac2565b611ec291906134d0565b9050611ecd85611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f3587611f3085611c04565b6126c5565b6000611f4182886134e7565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa391815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006120228383612686565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916120ee918491700100000000000000000000000000000000900416611ac2565b6120f88386611ac2565b61210291906134d0565b905061210d84611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121758761217085611c04565b612841565b8481111561225457600061218986836134d0565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121eb91815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35061232b565b600061226082876134d0565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122c291815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef91906133c4565b9050600061243582610ed28973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050600061247b83610ed28973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050612489888888866128a5565b8415612556576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda866661259c8987612686565b604080519182526020820188905201612321565b6060610c1d61060e565b60006125fa565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156126395760208114612673576126347f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125c1565b612680565b823b61266a5761266a7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125c1565b60019150612680565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126aa57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546126e46fffffffffffffffffffffffffffffffff8316826134e7565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612729838261353e565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603954610100900416801561283a576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561282657600080fd5b505af11580156116c7573d6000803e3d6000fd5b5050505050565b6036546128606fffffffffffffffffffffffffffffffff8316826134d0565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166127298382613572565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612901918491700100000000000000000000000000000000900416611ac2565b61290b8385611ac2565b61291591906134d0565b905060006129578673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054919250906129b290839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611ac2565b6129bc8387611ac2565b6129c691906134d0565b90506129d185611c04565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a3085611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612aa28888612a9d612a988a8a612686565b611c04565b612c9a565b8215612b515760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612b8d5750600081115b15612c3b5760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161232191815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612cdc8282613572565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612d50838261353e565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f3d576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612e5057600080fd5b505af1158015612e64573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461232b576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b50505050505b505050505050565b828054612f5190613376565b90600052602060002090601f016020900481019282612f735760008555612fb9565b82601f10612f8c57805160ff1916838001178555612fb9565b82800160010185558215612fb9579182015b82811115612fb9578251825591602001919060010190612f9e565b50611ca69291505b80821115611ca65760008155600101612fc1565b6000815180845260005b81811015612ffb57602081850181015186830182015201612fdf565b8181111561300d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130536020830184612fd5565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461307c57600080fd5b50565b803561308a8161305a565b919050565b600080604083850312156130a257600080fd5b82356130ad8161305a565b946020939093013593505050565b6000602082840312156130cd57600080fd5b81356130538161305a565b803560ff8116811461308a57600080fd5b60008083601f8401126130fb57600080fd5b50813567ffffffffffffffff81111561311357600080fd5b60208301915083602082850101111561312b57600080fd5b9250929050565b60008060008060008060008060008060006101008c8e03121561315457600080fd5b61315d8c61307f565b9a5061316b60208d0161307f565b995061317960408d0161307f565b985061318760608d0161307f565b975061319560808d016130d8565b965067ffffffffffffffff8060a08e013511156131b157600080fd5b6131c18e60a08f01358f016130e9565b909750955060c08d01358110156131d757600080fd5b6131e78e60c08f01358f016130e9565b909550935060e08d01358110156131fd57600080fd5b5061320e8d60e08e01358e016130e9565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561323b57600080fd5b83356132468161305a565b925060208401356132568161305a565b929592945050506040919091013590565b6000806040838503121561327a57600080fd5b50508035926020909101359150565b6000806000806080858703121561329f57600080fd5b84356132aa8161305a565b935060208501356132ba8161305a565b93969395505050506040820135916060013590565b600080600080600080600060e0888a0312156132ea57600080fd5b87356132f58161305a565b965060208801356133058161305a565b95506040880135945060608801359350613321608089016130d8565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561335057600080fd5b823561335b8161305a565b9150602083013561336b8161305a565b809150509250929050565b600181811c9082168061338a57607f821691505b60208210811415612680577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156133d657600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c0606083015261346960c08301888a6133dd565b828103608084015261347c8187896133dd565b905082810360a08401526134918185876133dd565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134e2576134e26134a1565b500390565b600082198211156134fa576134fa6134a1565b500190565b60006020828403121561351157600080fd5b81516130538161305a565b60006020828403121561352e57600080fd5b8151801515811461305357600080fd5b60006fffffffffffffffffffffffffffffffff808316818516808303821115613569576135696134a1565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561359b5761359b6134a1565b03939250505056fea2646970667358221220ac468757d0f026a6b3a52b58a4305cc76754b4319bb541eb3c25ef99f422775b64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x38EE CODESIZE SUB DUP1 PUSH3 0x38EE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x21F JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF1 SWAP2 SWAP1 PUSH3 0x21F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE DUP3 MLOAD PUSH3 0x112 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x128 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP PUSH1 0x39 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP POP CHAINID PUSH1 0xC0 MSTORE POP PUSH3 0x283 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x16E SWAP1 PUSH3 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x192 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1AD JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1DD JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1DD JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1C0 JUMP JUMPDEST POP PUSH3 0x1EB SWAP3 SWAP2 POP PUSH3 0x1EF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1EB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x23F DUP2 PUSH3 0x206 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x25B JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x27D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x35D9 PUSH3 0x315 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1CCD ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3BC ADD MSTORE DUP2 DUP2 PUSH2 0x71D ADD MSTORE DUP2 DUP2 PUSH2 0x884 ADD MSTORE DUP2 DUP2 PUSH2 0xA83 ADD MSTORE DUP2 DUP2 PUSH2 0xC9D ADD MSTORE DUP2 DUP2 PUSH2 0xD6A ADD MSTORE DUP2 DUP2 PUSH2 0xE2C ADD MSTORE DUP2 DUP2 PUSH2 0xF0F ADD MSTORE DUP2 DUP2 PUSH2 0xF8F ADD MSTORE DUP2 DUP2 PUSH2 0x10B7 ADD MSTORE DUP2 DUP2 PUSH2 0x1709 ADD MSTORE DUP2 DUP2 PUSH2 0x19D9 ADD MSTORE DUP2 DUP2 PUSH2 0x2382 ADD MSTORE PUSH2 0x24F9 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x113E ADD MSTORE PUSH2 0x17C8 ADD MSTORE PUSH2 0x35D9 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3132 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xB54 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0xC22 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0xC66 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0xD33 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xDDD JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xED8 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xFD1 JUMP JUMPDEST PUSH2 0x233 PUSH2 0xFFC JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x100B JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x104F JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x1072 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x3289 JUMP JUMPDEST PUSH2 0x107D JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x113A JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x32CF JUMP JUMPDEST PUSH2 0x1378 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3289 JUMP JUMPDEST PUSH2 0x16D2 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x333D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0x17C4 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x19A2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3376 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x3376 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1A54 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1AC2 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x7A8 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B4 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x882 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x97F DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B19 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BE DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B2C SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA7B PUSH2 0x1B3F JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0E SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3426 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB45 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9F DUP4 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFD SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF8 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0xC08 DUP6 DUP6 DUP4 PUSH2 0x1CAA JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH2 0x1CC9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2F SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D02 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8D SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE99 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP DUP2 PUSH2 0xF86 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0xFCC SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1DD5 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3376 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x105B DUP4 PUSH2 0x1C04 JUMP JUMPDEST SWAP1 POP PUSH2 0x1068 CALLER DUP6 DUP4 PUSH2 0x1CAA JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1124 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1131 DUP6 DUP6 DUP6 DUP6 PUSH2 0x1DD5 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11CB SWAP2 SWAP1 PUSH2 0x34FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125C SWAP2 SWAP1 PUSH2 0x351C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x12CA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1356 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0xDD7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x13FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x146D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x149D PUSH2 0xC13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x155E SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x168A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1696 DUP3 PUSH1 0x1 PUSH2 0x34E7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x16C7 DUP10 DUP10 DUP10 PUSH2 0x1A54 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1776 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1783 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2016 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0xDD7 JUMPI PUSH1 0x3D SLOAD PUSH2 0xDD7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1831 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1855 SWAP2 SWAP1 PUSH2 0x34FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E6 SWAP2 SWAP1 PUSH2 0x351C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1954 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0xFCC DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2334 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1AF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F45 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F45 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1B6A PUSH2 0x25B0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CA6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFCC DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2334 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1CFA JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1D PUSH2 0x1B3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1D65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D6F DUP5 PUSH2 0x25BA JUMP JUMPDEST PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DE2 DUP5 DUP5 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1E51 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1EAE SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x1EB8 DUP4 DUP8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x1EC2 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1ECD DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F35 DUP8 PUSH2 0x1F30 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x26C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F41 DUP3 DUP9 PUSH2 0x34E7 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FA3 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2022 DUP4 DUP4 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x2091 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x20EE SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x20F8 DUP4 DUP7 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2102 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x210D DUP5 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2175 DUP8 PUSH2 0x2170 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x2841 JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x2254 JUMPI PUSH1 0x0 PUSH2 0x2189 DUP7 DUP4 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x21EB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x232B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2260 DUP3 DUP8 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x22C2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23EF SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2435 DUP3 PUSH2 0xED2 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x247B DUP4 PUSH2 0xED2 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2489 DUP9 DUP9 DUP9 DUP7 PUSH2 0x28A5 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x2556 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x253D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2551 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x259C DUP10 DUP8 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x2321 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1D PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25FA JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2639 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x2673 JUMPI PUSH2 0x2634 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25C1 JUMP JUMPDEST PUSH2 0x2680 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x266A JUMPI PUSH2 0x266A PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25C1 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2680 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x26E4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2729 DUP4 DUP3 PUSH2 0x353E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x283A JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2826 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2860 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2729 DUP4 DUP3 PUSH2 0x3572 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2901 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x290B DUP4 DUP6 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2915 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2957 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29B2 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x29BC DUP4 DUP8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x29C6 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x29D1 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A30 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AA2 DUP9 DUP9 PUSH2 0x2A9D PUSH2 0x2A98 DUP11 DUP11 PUSH2 0x2686 JUMP JUMPDEST PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x2C9A JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2B51 JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B8D JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C3B JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x2321 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CDC DUP3 DUP3 PUSH2 0x3572 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2D50 DUP4 DUP3 PUSH2 0x353E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F3D JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x232B JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F37 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2F51 SWAP1 PUSH2 0x3376 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2F73 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2FB9 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2F8C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2FB9 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2FB9 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2FB9 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2F9E JUMP JUMPDEST POP PUSH2 0x1CA6 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA6 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2FC1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2FFB JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2FDF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x300D JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3053 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FD5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x307C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x308A DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x30AD DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3053 DUP2 PUSH2 0x305A JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x308A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x30FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3113 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x312B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x3154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x315D DUP13 PUSH2 0x307F JUMP JUMPDEST SWAP11 POP PUSH2 0x316B PUSH1 0x20 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP10 POP PUSH2 0x3179 PUSH1 0x40 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP9 POP PUSH2 0x3187 PUSH1 0x60 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP8 POP PUSH2 0x3195 PUSH1 0x80 DUP14 ADD PUSH2 0x30D8 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x31B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31C1 DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E9 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E7 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E9 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x320E DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x30E9 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x323B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3246 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3256 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x327A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x329F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32AA DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x32BA DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x32EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x32F5 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3305 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3321 PUSH1 0x80 DUP10 ADD PUSH2 0x30D8 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x335B DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x336B DUP2 PUSH2 0x305A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x338A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2680 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3469 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x33DD JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x347C DUP2 DUP8 DUP10 PUSH2 0x33DD JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3491 DUP2 DUP6 DUP8 PUSH2 0x33DD JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34E2 JUMPI PUSH2 0x34E2 PUSH2 0x34A1 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x34FA JUMPI PUSH2 0x34FA PUSH2 0x34A1 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3053 DUP2 PUSH2 0x305A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x352E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3053 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3569 JUMPI PUSH2 0x3569 PUSH2 0x34A1 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x359B JUMPI PUSH2 0x359B PUSH2 0x34A1 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAC CHAINID DUP8 JUMPI 0xD0 CREATE 0x26 0xA6 0xB3 0xA5 0x2B PC LOG4 ADDRESS 0x5C 0xC7 PUSH8 0x54B4319BB541EB3C 0x25 0xEF SWAP10 DELEGATECALL 0x22 PUSH24 0x5B64736F6C634300080A0033000000000000000000000000 ","sourceMap":"176:164:77:-:0;;;928:1:87;886:43;;210:39:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;241:4;1858::115;988:195:123;;;;;;;;;;;;;-1:-1:-1;;;988:195:123;;;;;;;;;;;;;;;;-1:-1:-1;;;988:195:123;;;1894:1:115;1116:4:123;1122;1128:6;1136:8;817:4:122;823;829:6;837:8;2780:4:121;-1:-1:-1;;;;;2780:23:121;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:121;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:121;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:121;:20;;-1:-1:-1;;2851:20:121;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:121;;;-1:-1:-1;;630:13:120;619:24;;-1:-1:-1;176:164:77;;-1:-1:-1;;;;;;;176:164:77;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;176:164:77;;;-1:-1:-1;176:164:77;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:124;-1:-1:-1;;;;;96:31:124;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:124:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;176:164:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ATOKEN_REVISION_28341":{"entryPoint":null,"id":28341,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_28877":{"entryPoint":3091,"id":28877,"parameterSlots":0,"returnSlots":1},"@DOMAIN_SEPARATOR_30723":{"entryPoint":7369,"id":30723,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_30682":{"entryPoint":null,"id":30682,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_28338":{"entryPoint":null,"id":28338,"parameterSlots":0,"returnSlots":0},"@POOL_30880":{"entryPoint":null,"id":30880,"parameterSlots":0,"returnSlots":0},"@RESERVE_TREASURY_ADDRESS_28628":{"entryPoint":null,"id":28628,"parameterSlots":0,"returnSlots":1},"@UNDERLYING_ASSET_ADDRESS_28638":{"entryPoint":null,"id":28638,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_28905":{"entryPoint":9648,"id":28905,"parameterSlots":0,"returnSlots":1},"@_approve_31266":{"entryPoint":6740,"id":31266,"parameterSlots":3,"returnSlots":0},"@_burnScaled_31772":{"entryPoint":8214,"id":31772,"parameterSlots":4,"returnSlots":0},"@_burn_31449":{"entryPoint":10305,"id":31449,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_30766":{"entryPoint":6975,"id":30766,"parameterSlots":0,"returnSlots":1},"@_mintScaled_31654":{"entryPoint":7637,"id":31654,"parameterSlots":4,"returnSlots":1},"@_mint_31390":{"entryPoint":9925,"id":31390,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_31299":{"entryPoint":null,"id":31299,"parameterSlots":1,"returnSlots":0},"@_setName_31277":{"entryPoint":6937,"id":31277,"parameterSlots":1,"returnSlots":0},"@_setSymbol_31288":{"entryPoint":6956,"id":31288,"parameterSlots":1,"returnSlots":0},"@_transfer_28844":{"entryPoint":9012,"id":28844,"parameterSlots":4,"returnSlots":0},"@_transfer_28863":{"entryPoint":7338,"id":28863,"parameterSlots":3,"returnSlots":0},"@_transfer_31241":{"entryPoint":11418,"id":31241,"parameterSlots":3,"returnSlots":0},"@_transfer_31916":{"entryPoint":10405,"id":31916,"parameterSlots":4,"returnSlots":0},"@allowance_31040":{"entryPoint":null,"id":31040,"parameterSlots":2,"returnSlots":1},"@approve_31061":{"entryPoint":1696,"id":31061,"parameterSlots":2,"returnSlots":1},"@balanceOf_28587":{"entryPoint":3549,"id":28587,"parameterSlots":1,"returnSlots":1},"@balanceOf_30971":{"entryPoint":null,"id":30971,"parameterSlots":1,"returnSlots":1},"@burn_28515":{"entryPoint":5842,"id":28515,"parameterSlots":4,"returnSlots":0},"@decimals_30946":{"entryPoint":null,"id":30946,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_31157":{"entryPoint":4107,"id":31157,"parameterSlots":2,"returnSlots":1},"@getIncentivesController_30981":{"entryPoint":null,"id":30981,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":9658,"id":117,"parameterSlots":1,"returnSlots":1},"@getPreviousIndex_31558":{"entryPoint":null,"id":31558,"parameterSlots":1,"returnSlots":1},"@getRevision_10824":{"entryPoint":null,"id":10824,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_31531":{"entryPoint":null,"id":31531,"parameterSlots":1,"returnSlots":2},"@handleRepayment_28672":{"entryPoint":3379,"id":28672,"parameterSlots":3,"returnSlots":0},"@increaseAllowance_31130":{"entryPoint":3106,"id":31130,"parameterSlots":2,"returnSlots":1},"@initialize_28451":{"entryPoint":1941,"id":28451,"parameterSlots":11,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@mintToTreasury_28543":{"entryPoint":3800,"id":28543,"parameterSlots":2,"returnSlots":0},"@mint_28476":{"entryPoint":4221,"id":28476,"parameterSlots":4,"returnSlots":1},"@name_30926":{"entryPoint":1550,"id":30926,"parameterSlots":0,"returnSlots":1},"@nonces_28894":{"entryPoint":4049,"id":28894,"parameterSlots":1,"returnSlots":1},"@nonces_30736":{"entryPoint":null,"id":30736,"parameterSlots":1,"returnSlots":1},"@permit_28767":{"entryPoint":4984,"id":28767,"parameterSlots":7,"returnSlots":0},"@rayDiv_23792":{"entryPoint":9862,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":6850,"id":23780,"parameterSlots":2,"returnSlots":1},"@rescueTokens_28935":{"entryPoint":4410,"id":28935,"parameterSlots":3,"returnSlots":0},"@safeTransfer_78":{"entryPoint":7426,"id":78,"parameterSlots":3,"returnSlots":0},"@scaledBalanceOf_31510":{"entryPoint":2900,"id":31510,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_31543":{"entryPoint":4210,"id":31543,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_30995":{"entryPoint":6084,"id":30995,"parameterSlots":1,"returnSlots":0},"@symbol_30936":{"entryPoint":4092,"id":30936,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7172,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_28618":{"entryPoint":1718,"id":28618,"parameterSlots":0,"returnSlots":1},"@totalSupply_30956":{"entryPoint":null,"id":30956,"parameterSlots":0,"returnSlots":1},"@transferFrom_31103":{"entryPoint":2963,"id":31103,"parameterSlots":3,"returnSlots":1},"@transferOnLiquidation_28564":{"entryPoint":6562,"id":28564,"parameterSlots":3,"returnSlots":0},"@transferUnderlyingTo_28658":{"entryPoint":3174,"id":28658,"parameterSlots":2,"returnSlots":0},"@transfer_31022":{"entryPoint":4175,"id":31022,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":12415,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":12521,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":12475,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":13567,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":13117,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":12838,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":12937,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":13007,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":12431,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13596,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr":{"entryPoint":12594,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":13252,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":12903,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint8":{"entryPoint":12504,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":12245,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":13277,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13350,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12352,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":13630,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13543,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":13682,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13520,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13174,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":13473,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":12378,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16120:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"820:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:124"},"nodeType":"YulFunctionCall","src":"909:12:124"},"nodeType":"YulExpressionStatement","src":"909:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:124"},"nodeType":"YulFunctionCall","src":"840:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:73:124"},"nodeType":"YulIf","src":"830:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:124","type":""}],"src":"775:154:124"},{"body":{"nodeType":"YulBlock","src":"983:85:124","statements":[{"nodeType":"YulAssignment","src":"993:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:124"},"nodeType":"YulFunctionCall","src":"1002:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:124"},"nodeType":"YulFunctionCall","src":"1031:31:124"},"nodeType":"YulExpressionStatement","src":"1031:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:124","type":""}],"src":"934:134:124"},{"body":{"nodeType":"YulBlock","src":"1160:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:124"},"nodeType":"YulFunctionCall","src":"1208:12:124"},"nodeType":"YulExpressionStatement","src":"1208:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:124"},"nodeType":"YulFunctionCall","src":"1177:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:124"},"nodeType":"YulFunctionCall","src":"1173:32:124"},"nodeType":"YulIf","src":"1170:52:124"},{"nodeType":"YulVariableDeclaration","src":"1231:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:124"},"nodeType":"YulFunctionCall","src":"1244:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:124"},"nodeType":"YulFunctionCall","src":"1276:31:124"},"nodeType":"YulExpressionStatement","src":"1276:31:124"},{"nodeType":"YulAssignment","src":"1316:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:124"}]},{"nodeType":"YulAssignment","src":"1340:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:124","type":""}],"src":"1073:315:124"},{"body":{"nodeType":"YulBlock","src":"1488:92:124","statements":[{"nodeType":"YulAssignment","src":"1498:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:124"},"nodeType":"YulFunctionCall","src":"1558:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:124"},"nodeType":"YulFunctionCall","src":"1551:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:41:124"},"nodeType":"YulExpressionStatement","src":"1533:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:124","type":""}],"src":"1393:187:124"},{"body":{"nodeType":"YulBlock","src":"1655:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:124"},"nodeType":"YulFunctionCall","src":"1703:12:124"},"nodeType":"YulExpressionStatement","src":"1703:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:124"},"nodeType":"YulFunctionCall","src":"1672:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:124"},"nodeType":"YulFunctionCall","src":"1668:32:124"},"nodeType":"YulIf","src":"1665:52:124"},{"nodeType":"YulVariableDeclaration","src":"1726:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:124"},"nodeType":"YulFunctionCall","src":"1739:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:124"},"nodeType":"YulFunctionCall","src":"1771:31:124"},"nodeType":"YulExpressionStatement","src":"1771:31:124"},{"nodeType":"YulAssignment","src":"1811:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:124","type":""}],"src":"1585:247:124"},{"body":{"nodeType":"YulBlock","src":"1966:119:124","statements":[{"nodeType":"YulAssignment","src":"1976:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:124"},"nodeType":"YulFunctionCall","src":"1984:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:124"},"nodeType":"YulFunctionCall","src":"2011:25:124"},"nodeType":"YulExpressionStatement","src":"2011:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:124"},"nodeType":"YulFunctionCall","src":"2052:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:124"},"nodeType":"YulFunctionCall","src":"2045:34:124"},"nodeType":"YulExpressionStatement","src":"2045:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:124","type":""}],"src":"1837:248:124"},{"body":{"nodeType":"YulBlock","src":"2191:76:124","statements":[{"nodeType":"YulAssignment","src":"2201:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:124"},"nodeType":"YulFunctionCall","src":"2209:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2201:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2254:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2236:6:124"},"nodeType":"YulFunctionCall","src":"2236:25:124"},"nodeType":"YulExpressionStatement","src":"2236:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2160:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2171:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2182:4:124","type":""}],"src":"2090:177:124"},{"body":{"nodeType":"YulBlock","src":"2319:109:124","statements":[{"nodeType":"YulAssignment","src":"2329:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2351:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2338:12:124"},"nodeType":"YulFunctionCall","src":"2338:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2329:5:124"}]},{"body":{"nodeType":"YulBlock","src":"2406:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2415:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2418:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2408:6:124"},"nodeType":"YulFunctionCall","src":"2408:12:124"},"nodeType":"YulExpressionStatement","src":"2408:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2380:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2391:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2398:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2387:3:124"},"nodeType":"YulFunctionCall","src":"2387:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2377:2:124"},"nodeType":"YulFunctionCall","src":"2377:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2370:6:124"},"nodeType":"YulFunctionCall","src":"2370:35:124"},"nodeType":"YulIf","src":"2367:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2298:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2309:5:124","type":""}],"src":"2272:156:124"},{"body":{"nodeType":"YulBlock","src":"2506:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"2555:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2564:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2567:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2557:6:124"},"nodeType":"YulFunctionCall","src":"2557:12:124"},"nodeType":"YulExpressionStatement","src":"2557:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2534:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2542:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2530:3:124"},"nodeType":"YulFunctionCall","src":"2530:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"2549:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2526:3:124"},"nodeType":"YulFunctionCall","src":"2526:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2519:6:124"},"nodeType":"YulFunctionCall","src":"2519:35:124"},"nodeType":"YulIf","src":"2516:55:124"},{"nodeType":"YulAssignment","src":"2580:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2603:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2590:12:124"},"nodeType":"YulFunctionCall","src":"2590:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2580:6:124"}]},{"body":{"nodeType":"YulBlock","src":"2653:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2662:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2665:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2655:6:124"},"nodeType":"YulFunctionCall","src":"2655:12:124"},"nodeType":"YulExpressionStatement","src":"2655:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2625:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2633:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2622:2:124"},"nodeType":"YulFunctionCall","src":"2622:30:124"},"nodeType":"YulIf","src":"2619:50:124"},{"nodeType":"YulAssignment","src":"2678:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2694:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2702:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2690:3:124"},"nodeType":"YulFunctionCall","src":"2690:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2678:8:124"}]},{"body":{"nodeType":"YulBlock","src":"2759:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:124"},"nodeType":"YulFunctionCall","src":"2761:12:124"},"nodeType":"YulExpressionStatement","src":"2761:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2730:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"2738:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2726:3:124"},"nodeType":"YulFunctionCall","src":"2726:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"2747:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:124"},"nodeType":"YulFunctionCall","src":"2722:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"2754:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2719:2:124"},"nodeType":"YulFunctionCall","src":"2719:39:124"},"nodeType":"YulIf","src":"2716:59:124"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2469:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2477:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2485:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"2495:6:124","type":""}],"src":"2433:348:124"},{"body":{"nodeType":"YulBlock","src":"3081:1119:124","statements":[{"body":{"nodeType":"YulBlock","src":"3128:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3137:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3140:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3130:6:124"},"nodeType":"YulFunctionCall","src":"3130:12:124"},"nodeType":"YulExpressionStatement","src":"3130:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3102:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3098:3:124"},"nodeType":"YulFunctionCall","src":"3098:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3123:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3094:3:124"},"nodeType":"YulFunctionCall","src":"3094:33:124"},"nodeType":"YulIf","src":"3091:53:124"},{"nodeType":"YulAssignment","src":"3153:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3163:18:124"},"nodeType":"YulFunctionCall","src":"3163:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3153:6:124"}]},{"nodeType":"YulAssignment","src":"3201:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3245:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:124"},"nodeType":"YulFunctionCall","src":"3230:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3211:18:124"},"nodeType":"YulFunctionCall","src":"3211:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3201:6:124"}]},{"nodeType":"YulAssignment","src":"3258:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3291:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3302:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3287:3:124"},"nodeType":"YulFunctionCall","src":"3287:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3268:18:124"},"nodeType":"YulFunctionCall","src":"3268:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3258:6:124"}]},{"nodeType":"YulAssignment","src":"3315:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3348:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3359:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3344:3:124"},"nodeType":"YulFunctionCall","src":"3344:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3325:18:124"},"nodeType":"YulFunctionCall","src":"3325:38:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3315:6:124"}]},{"nodeType":"YulAssignment","src":"3372:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3403:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3414:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3399:3:124"},"nodeType":"YulFunctionCall","src":"3399:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3382:16:124"},"nodeType":"YulFunctionCall","src":"3382:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3372:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3428:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3438:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3432:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3510:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:124"},"nodeType":"YulFunctionCall","src":"3512:12:124"},"nodeType":"YulExpressionStatement","src":"3512:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3499:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:124"},"nodeType":"YulFunctionCall","src":"3484:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:124"},"nodeType":"YulFunctionCall","src":"3471:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3506:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3468:2:124"},"nodeType":"YulFunctionCall","src":"3468:41:124"},"nodeType":"YulIf","src":"3465:61:124"},{"nodeType":"YulVariableDeclaration","src":"3535:112:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3592:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3620:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3631:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3616:3:124"},"nodeType":"YulFunctionCall","src":"3616:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3603:12:124"},"nodeType":"YulFunctionCall","src":"3603:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3588:3:124"},"nodeType":"YulFunctionCall","src":"3588:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3639:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3561:26:124"},"nodeType":"YulFunctionCall","src":"3561:86:124"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"3539:8:124","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"3549:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3656:18:124","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"3666:8:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:124"}]},{"nodeType":"YulAssignment","src":"3683:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3693:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3683:6:124"}]},{"body":{"nodeType":"YulBlock","src":"3755:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3764:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3767:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3757:6:124"},"nodeType":"YulFunctionCall","src":"3757:12:124"},"nodeType":"YulExpressionStatement","src":"3757:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3733:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3744:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3729:3:124"},"nodeType":"YulFunctionCall","src":"3729:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3716:12:124"},"nodeType":"YulFunctionCall","src":"3716:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3751:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3713:2:124"},"nodeType":"YulFunctionCall","src":"3713:41:124"},"nodeType":"YulIf","src":"3710:61:124"},{"nodeType":"YulVariableDeclaration","src":"3780:112:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:124"},"nodeType":"YulFunctionCall","src":"3861:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3848:12:124"},"nodeType":"YulFunctionCall","src":"3848:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3833:3:124"},"nodeType":"YulFunctionCall","src":"3833:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3884:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3806:26:124"},"nodeType":"YulFunctionCall","src":"3806:86:124"},"variables":[{"name":"value7_1","nodeType":"YulTypedName","src":"3784:8:124","type":""},{"name":"value8_1","nodeType":"YulTypedName","src":"3794:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3901:18:124","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"3911:8:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3901:6:124"}]},{"nodeType":"YulAssignment","src":"3928:18:124","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"3938:8:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"3928:6:124"}]},{"body":{"nodeType":"YulBlock","src":"4000:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4009:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4012:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4002:6:124"},"nodeType":"YulFunctionCall","src":"4002:12:124"},"nodeType":"YulExpressionStatement","src":"4002:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3978:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3989:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3974:3:124"},"nodeType":"YulFunctionCall","src":"3974:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3961:12:124"},"nodeType":"YulFunctionCall","src":"3961:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3996:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3958:2:124"},"nodeType":"YulFunctionCall","src":"3958:41:124"},"nodeType":"YulIf","src":"3955:61:124"},{"nodeType":"YulVariableDeclaration","src":"4025:113:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4083:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4111:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4122:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4107:3:124"},"nodeType":"YulFunctionCall","src":"4107:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4094:12:124"},"nodeType":"YulFunctionCall","src":"4094:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4079:3:124"},"nodeType":"YulFunctionCall","src":"4079:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4130:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"4052:26:124"},"nodeType":"YulFunctionCall","src":"4052:86:124"},"variables":[{"name":"value9_1","nodeType":"YulTypedName","src":"4029:8:124","type":""},{"name":"value10_1","nodeType":"YulTypedName","src":"4039:9:124","type":""}]},{"nodeType":"YulAssignment","src":"4147:18:124","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"4157:8:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"4147:6:124"}]},{"nodeType":"YulAssignment","src":"4174:20:124","value":{"name":"value10_1","nodeType":"YulIdentifier","src":"4185:9:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"4174:7:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2966:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2977:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2989:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2997:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3005:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3013:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3021:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3029:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3037:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3045:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3053:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3061:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"3069:7:124","type":""}],"src":"2786:1414:124"},{"body":{"nodeType":"YulBlock","src":"4309:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"4355:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4364:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4367:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4357:6:124"},"nodeType":"YulFunctionCall","src":"4357:12:124"},"nodeType":"YulExpressionStatement","src":"4357:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4330:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4339:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4326:3:124"},"nodeType":"YulFunctionCall","src":"4326:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4351:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4322:3:124"},"nodeType":"YulFunctionCall","src":"4322:32:124"},"nodeType":"YulIf","src":"4319:52:124"},{"nodeType":"YulVariableDeclaration","src":"4380:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4406:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4393:12:124"},"nodeType":"YulFunctionCall","src":"4393:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4384:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4450:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4425:24:124"},"nodeType":"YulFunctionCall","src":"4425:31:124"},"nodeType":"YulExpressionStatement","src":"4425:31:124"},{"nodeType":"YulAssignment","src":"4465:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4475:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4465:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4489:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4532:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:124"},"nodeType":"YulFunctionCall","src":"4517:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4504:12:124"},"nodeType":"YulFunctionCall","src":"4504:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4493:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4570:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4545:24:124"},"nodeType":"YulFunctionCall","src":"4545:33:124"},"nodeType":"YulExpressionStatement","src":"4545:33:124"},{"nodeType":"YulAssignment","src":"4587:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4597:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4587:6:124"}]},{"nodeType":"YulAssignment","src":"4613:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4651:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:124"},"nodeType":"YulFunctionCall","src":"4636:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4623:12:124"},"nodeType":"YulFunctionCall","src":"4623:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4613:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4259:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4270:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4282:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4290:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4298:6:124","type":""}],"src":"4205:456:124"},{"body":{"nodeType":"YulBlock","src":"4767:76:124","statements":[{"nodeType":"YulAssignment","src":"4777:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4789:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4785:3:124"},"nodeType":"YulFunctionCall","src":"4785:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4777:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4819:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"4830:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:124"},"nodeType":"YulFunctionCall","src":"4812:25:124"},"nodeType":"YulExpressionStatement","src":"4812:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4736:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4747:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4758:4:124","type":""}],"src":"4666:177:124"},{"body":{"nodeType":"YulBlock","src":"4945:87:124","statements":[{"nodeType":"YulAssignment","src":"4955:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4967:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4978:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4963:3:124"},"nodeType":"YulFunctionCall","src":"4963:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4955:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4997:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5012:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5020:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5008:3:124"},"nodeType":"YulFunctionCall","src":"5008:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4990:6:124"},"nodeType":"YulFunctionCall","src":"4990:36:124"},"nodeType":"YulExpressionStatement","src":"4990:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4914:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4925:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4936:4:124","type":""}],"src":"4848:184:124"},{"body":{"nodeType":"YulBlock","src":"5152:125:124","statements":[{"nodeType":"YulAssignment","src":"5162:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5185:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5170:3:124"},"nodeType":"YulFunctionCall","src":"5170:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5162:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5204:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5219:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5227:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5215:3:124"},"nodeType":"YulFunctionCall","src":"5215:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5197:6:124"},"nodeType":"YulFunctionCall","src":"5197:74:124"},"nodeType":"YulExpressionStatement","src":"5197:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5121:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5132:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5143:4:124","type":""}],"src":"5037:240:124"},{"body":{"nodeType":"YulBlock","src":"5417:125:124","statements":[{"nodeType":"YulAssignment","src":"5427:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5439:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5450:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5435:3:124"},"nodeType":"YulFunctionCall","src":"5435:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5427:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5469:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5484:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5492:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5480:3:124"},"nodeType":"YulFunctionCall","src":"5480:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5462:6:124"},"nodeType":"YulFunctionCall","src":"5462:74:124"},"nodeType":"YulExpressionStatement","src":"5462:74:124"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5386:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5397:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5408:4:124","type":""}],"src":"5282:260:124"},{"body":{"nodeType":"YulBlock","src":"5666:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5683:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5694:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5676:6:124"},"nodeType":"YulFunctionCall","src":"5676:21:124"},"nodeType":"YulExpressionStatement","src":"5676:21:124"},{"nodeType":"YulAssignment","src":"5706:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5732:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5744:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5755:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5740:3:124"},"nodeType":"YulFunctionCall","src":"5740:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5714:17:124"},"nodeType":"YulFunctionCall","src":"5714:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5706:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5635:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5646:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5657:4:124","type":""}],"src":"5547:218:124"},{"body":{"nodeType":"YulBlock","src":"5857:161:124","statements":[{"body":{"nodeType":"YulBlock","src":"5903:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5912:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5915:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5905:6:124"},"nodeType":"YulFunctionCall","src":"5905:12:124"},"nodeType":"YulExpressionStatement","src":"5905:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5878:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5887:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5874:3:124"},"nodeType":"YulFunctionCall","src":"5874:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5899:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5870:3:124"},"nodeType":"YulFunctionCall","src":"5870:32:124"},"nodeType":"YulIf","src":"5867:52:124"},{"nodeType":"YulAssignment","src":"5928:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5951:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5938:12:124"},"nodeType":"YulFunctionCall","src":"5938:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5928:6:124"}]},{"nodeType":"YulAssignment","src":"5970:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5997:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6008:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5993:3:124"},"nodeType":"YulFunctionCall","src":"5993:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5980:12:124"},"nodeType":"YulFunctionCall","src":"5980:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5970:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5815:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5826:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5838:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:124","type":""}],"src":"5770:248:124"},{"body":{"nodeType":"YulBlock","src":"6124:125:124","statements":[{"nodeType":"YulAssignment","src":"6134:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6146:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6157:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6142:3:124"},"nodeType":"YulFunctionCall","src":"6142:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6134:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6176:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6191:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6199:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6187:3:124"},"nodeType":"YulFunctionCall","src":"6187:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6169:6:124"},"nodeType":"YulFunctionCall","src":"6169:74:124"},"nodeType":"YulExpressionStatement","src":"6169:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6093:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6104:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6115:4:124","type":""}],"src":"6023:226:124"},{"body":{"nodeType":"YulBlock","src":"6375:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"6422:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6431:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6434:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6424:6:124"},"nodeType":"YulFunctionCall","src":"6424:12:124"},"nodeType":"YulExpressionStatement","src":"6424:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6396:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6405:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6392:3:124"},"nodeType":"YulFunctionCall","src":"6392:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6417:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6388:3:124"},"nodeType":"YulFunctionCall","src":"6388:33:124"},"nodeType":"YulIf","src":"6385:53:124"},{"nodeType":"YulVariableDeclaration","src":"6447:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6473:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:124"},"nodeType":"YulFunctionCall","src":"6460:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6451:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6517:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6492:24:124"},"nodeType":"YulFunctionCall","src":"6492:31:124"},"nodeType":"YulExpressionStatement","src":"6492:31:124"},{"nodeType":"YulAssignment","src":"6532:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6542:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6532:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6556:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6599:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6584:3:124"},"nodeType":"YulFunctionCall","src":"6584:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6571:12:124"},"nodeType":"YulFunctionCall","src":"6571:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6560:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6637:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6612:24:124"},"nodeType":"YulFunctionCall","src":"6612:33:124"},"nodeType":"YulExpressionStatement","src":"6612:33:124"},{"nodeType":"YulAssignment","src":"6654:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6664:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6654:6:124"}]},{"nodeType":"YulAssignment","src":"6680:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6707:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6703:3:124"},"nodeType":"YulFunctionCall","src":"6703:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6690:12:124"},"nodeType":"YulFunctionCall","src":"6690:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6680:6:124"}]},{"nodeType":"YulAssignment","src":"6731:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6758:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6769:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6754:3:124"},"nodeType":"YulFunctionCall","src":"6754:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6741:12:124"},"nodeType":"YulFunctionCall","src":"6741:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6731:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6317:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6328:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6340:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6348:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6356:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6364:6:124","type":""}],"src":"6254:525:124"},{"body":{"nodeType":"YulBlock","src":"6954:564:124","statements":[{"body":{"nodeType":"YulBlock","src":"7001:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7010:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7013:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7003:6:124"},"nodeType":"YulFunctionCall","src":"7003:12:124"},"nodeType":"YulExpressionStatement","src":"7003:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6975:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6984:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6971:3:124"},"nodeType":"YulFunctionCall","src":"6971:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6996:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6967:3:124"},"nodeType":"YulFunctionCall","src":"6967:33:124"},"nodeType":"YulIf","src":"6964:53:124"},{"nodeType":"YulVariableDeclaration","src":"7026:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7052:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7039:12:124"},"nodeType":"YulFunctionCall","src":"7039:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7030:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7096:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7071:24:124"},"nodeType":"YulFunctionCall","src":"7071:31:124"},"nodeType":"YulExpressionStatement","src":"7071:31:124"},{"nodeType":"YulAssignment","src":"7111:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7121:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7111:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7135:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7167:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7178:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:124"},"nodeType":"YulFunctionCall","src":"7163:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7150:12:124"},"nodeType":"YulFunctionCall","src":"7150:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7139:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7216:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7191:24:124"},"nodeType":"YulFunctionCall","src":"7191:33:124"},"nodeType":"YulExpressionStatement","src":"7191:33:124"},{"nodeType":"YulAssignment","src":"7233:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7243:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7233:6:124"}]},{"nodeType":"YulAssignment","src":"7259:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7286:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7297:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7282:3:124"},"nodeType":"YulFunctionCall","src":"7282:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7269:12:124"},"nodeType":"YulFunctionCall","src":"7269:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7259:6:124"}]},{"nodeType":"YulAssignment","src":"7310:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7337:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7348:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7333:3:124"},"nodeType":"YulFunctionCall","src":"7333:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7320:12:124"},"nodeType":"YulFunctionCall","src":"7320:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7310:6:124"}]},{"nodeType":"YulAssignment","src":"7361:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7392:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7403:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:124"},"nodeType":"YulFunctionCall","src":"7388:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7371:16:124"},"nodeType":"YulFunctionCall","src":"7371:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7361:6:124"}]},{"nodeType":"YulAssignment","src":"7417:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7444:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7455:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7440:3:124"},"nodeType":"YulFunctionCall","src":"7440:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7427:12:124"},"nodeType":"YulFunctionCall","src":"7427:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7417:6:124"}]},{"nodeType":"YulAssignment","src":"7469:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7496:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7507:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7492:3:124"},"nodeType":"YulFunctionCall","src":"7492:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7479:12:124"},"nodeType":"YulFunctionCall","src":"7479:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7469:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6872:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6883:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6895:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6903:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6911:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6919:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6927:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6935:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6943:6:124","type":""}],"src":"6784:734:124"},{"body":{"nodeType":"YulBlock","src":"7610:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"7656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7658:6:124"},"nodeType":"YulFunctionCall","src":"7658:12:124"},"nodeType":"YulExpressionStatement","src":"7658:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7631:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7640:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7627:3:124"},"nodeType":"YulFunctionCall","src":"7627:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7652:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7623:3:124"},"nodeType":"YulFunctionCall","src":"7623:32:124"},"nodeType":"YulIf","src":"7620:52:124"},{"nodeType":"YulVariableDeclaration","src":"7681:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7707:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7694:12:124"},"nodeType":"YulFunctionCall","src":"7694:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7685:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7751:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7726:24:124"},"nodeType":"YulFunctionCall","src":"7726:31:124"},"nodeType":"YulExpressionStatement","src":"7726:31:124"},{"nodeType":"YulAssignment","src":"7766:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7776:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7766:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7790:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7833:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7818:3:124"},"nodeType":"YulFunctionCall","src":"7818:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7805:12:124"},"nodeType":"YulFunctionCall","src":"7805:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7794:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7871:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7846:24:124"},"nodeType":"YulFunctionCall","src":"7846:33:124"},"nodeType":"YulExpressionStatement","src":"7846:33:124"},{"nodeType":"YulAssignment","src":"7888:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7898:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7888:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7568:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7579:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7591:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7599:6:124","type":""}],"src":"7523:388:124"},{"body":{"nodeType":"YulBlock","src":"8020:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"8066:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8075:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8078:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8068:6:124"},"nodeType":"YulFunctionCall","src":"8068:12:124"},"nodeType":"YulExpressionStatement","src":"8068:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8041:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8050:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8037:3:124"},"nodeType":"YulFunctionCall","src":"8037:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8062:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8033:3:124"},"nodeType":"YulFunctionCall","src":"8033:32:124"},"nodeType":"YulIf","src":"8030:52:124"},{"nodeType":"YulVariableDeclaration","src":"8091:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8117:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8104:12:124"},"nodeType":"YulFunctionCall","src":"8104:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8095:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8161:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8136:24:124"},"nodeType":"YulFunctionCall","src":"8136:31:124"},"nodeType":"YulExpressionStatement","src":"8136:31:124"},{"nodeType":"YulAssignment","src":"8176:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"8186:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7986:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7997:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8009:6:124","type":""}],"src":"7916:281:124"},{"body":{"nodeType":"YulBlock","src":"8257:382:124","statements":[{"nodeType":"YulAssignment","src":"8267:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8281:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"8284:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8277:3:124"},"nodeType":"YulFunctionCall","src":"8277:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8267:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8298:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"8328:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"8334:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8324:3:124"},"nodeType":"YulFunctionCall","src":"8324:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"8302:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8375:31:124","statements":[{"nodeType":"YulAssignment","src":"8377:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8391:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8387:3:124"},"nodeType":"YulFunctionCall","src":"8387:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8377:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8355:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8348:6:124"},"nodeType":"YulFunctionCall","src":"8348:26:124"},"nodeType":"YulIf","src":"8345:61:124"},{"body":{"nodeType":"YulBlock","src":"8465:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8486:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8489:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8479:6:124"},"nodeType":"YulFunctionCall","src":"8479:88:124"},"nodeType":"YulExpressionStatement","src":"8479:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8587:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8590:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8580:6:124"},"nodeType":"YulFunctionCall","src":"8580:15:124"},"nodeType":"YulExpressionStatement","src":"8580:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8615:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8618:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8608:6:124"},"nodeType":"YulFunctionCall","src":"8608:15:124"},"nodeType":"YulExpressionStatement","src":"8608:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8421:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8444:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8452:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8441:2:124"},"nodeType":"YulFunctionCall","src":"8441:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8418:2:124"},"nodeType":"YulFunctionCall","src":"8418:38:124"},"nodeType":"YulIf","src":"8415:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"8237:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"8246:6:124","type":""}],"src":"8202:437:124"},{"body":{"nodeType":"YulBlock","src":"8725:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"8771:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8780:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8783:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8773:6:124"},"nodeType":"YulFunctionCall","src":"8773:12:124"},"nodeType":"YulExpressionStatement","src":"8773:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8746:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8755:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8742:3:124"},"nodeType":"YulFunctionCall","src":"8742:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8738:3:124"},"nodeType":"YulFunctionCall","src":"8738:32:124"},"nodeType":"YulIf","src":"8735:52:124"},{"nodeType":"YulAssignment","src":"8796:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8812:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8806:5:124"},"nodeType":"YulFunctionCall","src":"8806:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8796:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8691:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8702:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8714:6:124","type":""}],"src":"8644:184:124"},{"body":{"nodeType":"YulBlock","src":"9007:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9024:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9035:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9017:6:124"},"nodeType":"YulFunctionCall","src":"9017:21:124"},"nodeType":"YulExpressionStatement","src":"9017:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9058:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9069:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9054:3:124"},"nodeType":"YulFunctionCall","src":"9054:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9047:6:124"},"nodeType":"YulFunctionCall","src":"9047:30:124"},"nodeType":"YulExpressionStatement","src":"9047:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9097:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9108:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9093:3:124"},"nodeType":"YulFunctionCall","src":"9093:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"9113:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9086:6:124"},"nodeType":"YulFunctionCall","src":"9086:62:124"},"nodeType":"YulExpressionStatement","src":"9086:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9179:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9164:3:124"},"nodeType":"YulFunctionCall","src":"9164:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"9184:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9157:6:124"},"nodeType":"YulFunctionCall","src":"9157:44:124"},"nodeType":"YulExpressionStatement","src":"9157:44:124"},{"nodeType":"YulAssignment","src":"9210:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9222:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9233:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9218:3:124"},"nodeType":"YulFunctionCall","src":"9218:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9210:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8998:4:124","type":""}],"src":"8833:410:124"},{"body":{"nodeType":"YulBlock","src":"9315:259:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9332:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9337:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9325:6:124"},"nodeType":"YulFunctionCall","src":"9325:19:124"},"nodeType":"YulExpressionStatement","src":"9325:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9370:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"9375:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:124"},"nodeType":"YulFunctionCall","src":"9366:14:124"},{"name":"start","nodeType":"YulIdentifier","src":"9382:5:124"},{"name":"length","nodeType":"YulIdentifier","src":"9389:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9353:12:124"},"nodeType":"YulFunctionCall","src":"9353:43:124"},"nodeType":"YulExpressionStatement","src":"9353:43:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9420:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9425:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9416:3:124"},"nodeType":"YulFunctionCall","src":"9416:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"9434:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9412:3:124"},"nodeType":"YulFunctionCall","src":"9412:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"9441:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9405:6:124"},"nodeType":"YulFunctionCall","src":"9405:38:124"},"nodeType":"YulExpressionStatement","src":"9405:38:124"},{"nodeType":"YulAssignment","src":"9452:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9467:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9480:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9476:3:124"},"nodeType":"YulFunctionCall","src":"9476:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"9493:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9472:3:124"},"nodeType":"YulFunctionCall","src":"9472:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9463:3:124"},"nodeType":"YulFunctionCall","src":"9463:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"9563:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9459:3:124"},"nodeType":"YulFunctionCall","src":"9459:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9452:3:124"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"9284:5:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"9291:6:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9299:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9307:3:124","type":""}],"src":"9248:326:124"},{"body":{"nodeType":"YulBlock","src":"9904:603:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9914:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9924:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9918:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9982:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9997:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10005:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9993:3:124"},"nodeType":"YulFunctionCall","src":"9993:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9975:6:124"},"nodeType":"YulFunctionCall","src":"9975:34:124"},"nodeType":"YulExpressionStatement","src":"9975:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10029:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10040:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10025:3:124"},"nodeType":"YulFunctionCall","src":"10025:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10049:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10057:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10045:3:124"},"nodeType":"YulFunctionCall","src":"10045:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10018:6:124"},"nodeType":"YulFunctionCall","src":"10018:43:124"},"nodeType":"YulExpressionStatement","src":"10018:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10081:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10092:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10077:3:124"},"nodeType":"YulFunctionCall","src":"10077:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10101:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10109:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10097:3:124"},"nodeType":"YulFunctionCall","src":"10097:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10070:6:124"},"nodeType":"YulFunctionCall","src":"10070:45:124"},"nodeType":"YulExpressionStatement","src":"10070:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10135:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10146:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10131:3:124"},"nodeType":"YulFunctionCall","src":"10131:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"10151:3:124","type":"","value":"192"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10124:6:124"},"nodeType":"YulFunctionCall","src":"10124:31:124"},"nodeType":"YulExpressionStatement","src":"10124:31:124"},{"nodeType":"YulVariableDeclaration","src":"10164:77:124","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10205:6:124"},{"name":"value4","nodeType":"YulIdentifier","src":"10213:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10225:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10236:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10221:3:124"},"nodeType":"YulFunctionCall","src":"10221:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10178:26:124"},"nodeType":"YulFunctionCall","src":"10178:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10261:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10272:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10257:3:124"},"nodeType":"YulFunctionCall","src":"10257:19:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10282:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10290:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10278:3:124"},"nodeType":"YulFunctionCall","src":"10278:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10250:6:124"},"nodeType":"YulFunctionCall","src":"10250:51:124"},"nodeType":"YulExpressionStatement","src":"10250:51:124"},{"nodeType":"YulVariableDeclaration","src":"10310:64:124","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10351:6:124"},{"name":"value6","nodeType":"YulIdentifier","src":"10359:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10367:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10324:26:124"},"nodeType":"YulFunctionCall","src":"10324:50:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10314:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10405:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:124"},"nodeType":"YulFunctionCall","src":"10390:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10415:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10423:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10411:3:124"},"nodeType":"YulFunctionCall","src":"10411:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10383:6:124"},"nodeType":"YulFunctionCall","src":"10383:51:124"},"nodeType":"YulExpressionStatement","src":"10383:51:124"},{"nodeType":"YulAssignment","src":"10443:58:124","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10478:6:124"},{"name":"value8","nodeType":"YulIdentifier","src":"10486:6:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10494:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10451:26:124"},"nodeType":"YulFunctionCall","src":"10451:50:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10443:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9809:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"9820:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"9828:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"9836:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"9844:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9852:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9860:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9868:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9876:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9884:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9895:4:124","type":""}],"src":"9579:928:124"},{"body":{"nodeType":"YulBlock","src":"10544:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10561:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10564:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10554:6:124"},"nodeType":"YulFunctionCall","src":"10554:88:124"},"nodeType":"YulExpressionStatement","src":"10554:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10658:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10661:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10651:6:124"},"nodeType":"YulFunctionCall","src":"10651:15:124"},"nodeType":"YulExpressionStatement","src":"10651:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10682:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10685:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10675:6:124"},"nodeType":"YulFunctionCall","src":"10675:15:124"},"nodeType":"YulExpressionStatement","src":"10675:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10512:184:124"},{"body":{"nodeType":"YulBlock","src":"10750:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"10772:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10774:16:124"},"nodeType":"YulFunctionCall","src":"10774:18:124"},"nodeType":"YulExpressionStatement","src":"10774:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10766:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10769:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10763:2:124"},"nodeType":"YulFunctionCall","src":"10763:8:124"},"nodeType":"YulIf","src":"10760:34:124"},{"nodeType":"YulAssignment","src":"10803:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10815:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10818:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10811:3:124"},"nodeType":"YulFunctionCall","src":"10811:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10803:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10732:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"10735:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10741:4:124","type":""}],"src":"10701:125:124"},{"body":{"nodeType":"YulBlock","src":"10879:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"10906:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10908:16:124"},"nodeType":"YulFunctionCall","src":"10908:18:124"},"nodeType":"YulExpressionStatement","src":"10908:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10895:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10902:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10898:3:124"},"nodeType":"YulFunctionCall","src":"10898:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10892:2:124"},"nodeType":"YulFunctionCall","src":"10892:13:124"},"nodeType":"YulIf","src":"10889:39:124"},{"nodeType":"YulAssignment","src":"10937:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10948:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10951:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10944:3:124"},"nodeType":"YulFunctionCall","src":"10944:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"10937:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10862:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"10865:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"10871:3:124","type":""}],"src":"10831:128:124"},{"body":{"nodeType":"YulBlock","src":"11045:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"11091:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11100:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11103:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11093:6:124"},"nodeType":"YulFunctionCall","src":"11093:12:124"},"nodeType":"YulExpressionStatement","src":"11093:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11066:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11075:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11062:3:124"},"nodeType":"YulFunctionCall","src":"11062:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11087:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11058:3:124"},"nodeType":"YulFunctionCall","src":"11058:32:124"},"nodeType":"YulIf","src":"11055:52:124"},{"nodeType":"YulVariableDeclaration","src":"11116:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11135:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11129:5:124"},"nodeType":"YulFunctionCall","src":"11129:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11120:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11179:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11154:24:124"},"nodeType":"YulFunctionCall","src":"11154:31:124"},"nodeType":"YulExpressionStatement","src":"11154:31:124"},{"nodeType":"YulAssignment","src":"11194:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11204:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11194:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11011:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11022:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11034:6:124","type":""}],"src":"10964:251:124"},{"body":{"nodeType":"YulBlock","src":"11298:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"11344:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11353:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11356:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11346:6:124"},"nodeType":"YulFunctionCall","src":"11346:12:124"},"nodeType":"YulExpressionStatement","src":"11346:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11319:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11328:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11315:3:124"},"nodeType":"YulFunctionCall","src":"11315:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11340:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11311:3:124"},"nodeType":"YulFunctionCall","src":"11311:32:124"},"nodeType":"YulIf","src":"11308:52:124"},{"nodeType":"YulVariableDeclaration","src":"11369:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11388:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11382:5:124"},"nodeType":"YulFunctionCall","src":"11382:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11373:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11451:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11460:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11463:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11453:6:124"},"nodeType":"YulFunctionCall","src":"11453:12:124"},"nodeType":"YulExpressionStatement","src":"11453:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11420:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11441:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11434:6:124"},"nodeType":"YulFunctionCall","src":"11434:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11427:6:124"},"nodeType":"YulFunctionCall","src":"11427:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11417:2:124"},"nodeType":"YulFunctionCall","src":"11417:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11410:6:124"},"nodeType":"YulFunctionCall","src":"11410:40:124"},"nodeType":"YulIf","src":"11407:60:124"},{"nodeType":"YulAssignment","src":"11476:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11486:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11476:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11264:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11275:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11287:6:124","type":""}],"src":"11220:277:124"},{"body":{"nodeType":"YulBlock","src":"11743:373:124","statements":[{"nodeType":"YulAssignment","src":"11753:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11765:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11776:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11761:3:124"},"nodeType":"YulFunctionCall","src":"11761:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11753:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11796:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11807:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11789:6:124"},"nodeType":"YulFunctionCall","src":"11789:25:124"},"nodeType":"YulExpressionStatement","src":"11789:25:124"},{"nodeType":"YulVariableDeclaration","src":"11823:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11833:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11827:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11906:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11891:3:124"},"nodeType":"YulFunctionCall","src":"11891:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11915:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11923:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11911:3:124"},"nodeType":"YulFunctionCall","src":"11911:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11884:6:124"},"nodeType":"YulFunctionCall","src":"11884:43:124"},"nodeType":"YulExpressionStatement","src":"11884:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11947:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11958:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11943:3:124"},"nodeType":"YulFunctionCall","src":"11943:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11967:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11975:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11963:3:124"},"nodeType":"YulFunctionCall","src":"11963:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11936:6:124"},"nodeType":"YulFunctionCall","src":"11936:43:124"},"nodeType":"YulExpressionStatement","src":"11936:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11999:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12010:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11995:3:124"},"nodeType":"YulFunctionCall","src":"11995:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12015:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11988:6:124"},"nodeType":"YulFunctionCall","src":"11988:34:124"},"nodeType":"YulExpressionStatement","src":"11988:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:124"},"nodeType":"YulFunctionCall","src":"12038:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"12059:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12031:6:124"},"nodeType":"YulFunctionCall","src":"12031:35:124"},"nodeType":"YulExpressionStatement","src":"12031:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12086:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12097:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12082:3:124"},"nodeType":"YulFunctionCall","src":"12082:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12103:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12075:6:124"},"nodeType":"YulFunctionCall","src":"12075:35:124"},"nodeType":"YulExpressionStatement","src":"12075:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11672:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11683:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11691:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11699:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11707:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11715:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11723:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11734:4:124","type":""}],"src":"11502:614:124"},{"body":{"nodeType":"YulBlock","src":"12369:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12386:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12391:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12379:6:124"},"nodeType":"YulFunctionCall","src":"12379:79:124"},"nodeType":"YulExpressionStatement","src":"12379:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12478:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12483:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:124"},"nodeType":"YulFunctionCall","src":"12474:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12487:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:124"},"nodeType":"YulFunctionCall","src":"12467:27:124"},"nodeType":"YulExpressionStatement","src":"12467:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12514:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12519:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12510:3:124"},"nodeType":"YulFunctionCall","src":"12510:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"12524:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12503:6:124"},"nodeType":"YulFunctionCall","src":"12503:28:124"},"nodeType":"YulExpressionStatement","src":"12503:28:124"},{"nodeType":"YulAssignment","src":"12540:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12551:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12556:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12547:3:124"},"nodeType":"YulFunctionCall","src":"12547:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12540:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12337:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12342:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12350:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12361:3:124","type":""}],"src":"12121:444:124"},{"body":{"nodeType":"YulBlock","src":"12751:217:124","statements":[{"nodeType":"YulAssignment","src":"12761:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12773:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12784:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12769:3:124"},"nodeType":"YulFunctionCall","src":"12769:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12761:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12804:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12815:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12797:6:124"},"nodeType":"YulFunctionCall","src":"12797:25:124"},"nodeType":"YulExpressionStatement","src":"12797:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12842:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12853:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12838:3:124"},"nodeType":"YulFunctionCall","src":"12838:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12862:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12870:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12858:3:124"},"nodeType":"YulFunctionCall","src":"12858:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12831:6:124"},"nodeType":"YulFunctionCall","src":"12831:45:124"},"nodeType":"YulExpressionStatement","src":"12831:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12896:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12907:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12892:3:124"},"nodeType":"YulFunctionCall","src":"12892:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12912:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12885:6:124"},"nodeType":"YulFunctionCall","src":"12885:34:124"},"nodeType":"YulExpressionStatement","src":"12885:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12939:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12950:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12935:3:124"},"nodeType":"YulFunctionCall","src":"12935:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12955:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12928:6:124"},"nodeType":"YulFunctionCall","src":"12928:34:124"},"nodeType":"YulExpressionStatement","src":"12928:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12696:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12707:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12715:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12723:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12731:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12742:4:124","type":""}],"src":"12570:398:124"},{"body":{"nodeType":"YulBlock","src":"13186:299:124","statements":[{"nodeType":"YulAssignment","src":"13196:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13208:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13219:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13204:3:124"},"nodeType":"YulFunctionCall","src":"13204:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13196:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13239:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"13250:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13232:6:124"},"nodeType":"YulFunctionCall","src":"13232:25:124"},"nodeType":"YulExpressionStatement","src":"13232:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13288:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13273:3:124"},"nodeType":"YulFunctionCall","src":"13273:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"13293:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13266:6:124"},"nodeType":"YulFunctionCall","src":"13266:34:124"},"nodeType":"YulExpressionStatement","src":"13266:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13320:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13331:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13316:3:124"},"nodeType":"YulFunctionCall","src":"13316:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"13336:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13309:6:124"},"nodeType":"YulFunctionCall","src":"13309:34:124"},"nodeType":"YulExpressionStatement","src":"13309:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13363:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13374:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13359:3:124"},"nodeType":"YulFunctionCall","src":"13359:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"13379:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13352:6:124"},"nodeType":"YulFunctionCall","src":"13352:34:124"},"nodeType":"YulExpressionStatement","src":"13352:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13417:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13402:3:124"},"nodeType":"YulFunctionCall","src":"13402:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13427:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13435:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13423:3:124"},"nodeType":"YulFunctionCall","src":"13423:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13395:6:124"},"nodeType":"YulFunctionCall","src":"13395:84:124"},"nodeType":"YulExpressionStatement","src":"13395:84:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13123:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13134:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13142:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13150:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13158:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13166:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13177:4:124","type":""}],"src":"12973:512:124"},{"body":{"nodeType":"YulBlock","src":"13664:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13681:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13692:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13674:6:124"},"nodeType":"YulFunctionCall","src":"13674:21:124"},"nodeType":"YulExpressionStatement","src":"13674:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13715:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13711:3:124"},"nodeType":"YulFunctionCall","src":"13711:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"13731:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13704:6:124"},"nodeType":"YulFunctionCall","src":"13704:30:124"},"nodeType":"YulExpressionStatement","src":"13704:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13754:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13765:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13750:3:124"},"nodeType":"YulFunctionCall","src":"13750:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"13770:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13743:6:124"},"nodeType":"YulFunctionCall","src":"13743:62:124"},"nodeType":"YulExpressionStatement","src":"13743:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13825:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13836:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13821:3:124"},"nodeType":"YulFunctionCall","src":"13821:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"13841:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13814:6:124"},"nodeType":"YulFunctionCall","src":"13814:37:124"},"nodeType":"YulExpressionStatement","src":"13814:37:124"},{"nodeType":"YulAssignment","src":"13860:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13883:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13868:3:124"},"nodeType":"YulFunctionCall","src":"13868:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13860:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13641:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13655:4:124","type":""}],"src":"13490:403:124"},{"body":{"nodeType":"YulBlock","src":"14072:171:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14089:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14100:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14082:6:124"},"nodeType":"YulFunctionCall","src":"14082:21:124"},"nodeType":"YulExpressionStatement","src":"14082:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14123:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14134:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14119:3:124"},"nodeType":"YulFunctionCall","src":"14119:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14139:2:124","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14112:6:124"},"nodeType":"YulFunctionCall","src":"14112:30:124"},"nodeType":"YulExpressionStatement","src":"14112:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14162:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14173:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14158:3:124"},"nodeType":"YulFunctionCall","src":"14158:18:124"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"14178:23:124","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14151:6:124"},"nodeType":"YulFunctionCall","src":"14151:51:124"},"nodeType":"YulExpressionStatement","src":"14151:51:124"},{"nodeType":"YulAssignment","src":"14211:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14223:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14234:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14219:3:124"},"nodeType":"YulFunctionCall","src":"14219:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14211:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14049:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14063:4:124","type":""}],"src":"13898:345:124"},{"body":{"nodeType":"YulBlock","src":"14405:162:124","statements":[{"nodeType":"YulAssignment","src":"14415:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14427:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14438:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14423:3:124"},"nodeType":"YulFunctionCall","src":"14423:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14415:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14457:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"14468:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14450:6:124"},"nodeType":"YulFunctionCall","src":"14450:25:124"},"nodeType":"YulExpressionStatement","src":"14450:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14495:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14506:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14491:3:124"},"nodeType":"YulFunctionCall","src":"14491:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14511:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14484:6:124"},"nodeType":"YulFunctionCall","src":"14484:34:124"},"nodeType":"YulExpressionStatement","src":"14484:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14538:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14549:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14534:3:124"},"nodeType":"YulFunctionCall","src":"14534:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"14554:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14527:6:124"},"nodeType":"YulFunctionCall","src":"14527:34:124"},"nodeType":"YulExpressionStatement","src":"14527:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14358:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14369:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14377:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14385:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14396:4:124","type":""}],"src":"14248:319:124"},{"body":{"nodeType":"YulBlock","src":"14813:382:124","statements":[{"nodeType":"YulAssignment","src":"14823:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14835:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14846:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14831:3:124"},"nodeType":"YulFunctionCall","src":"14831:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14823:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"14859:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"14869:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14863:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14927:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14942:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"14950:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14938:3:124"},"nodeType":"YulFunctionCall","src":"14938:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14920:6:124"},"nodeType":"YulFunctionCall","src":"14920:34:124"},"nodeType":"YulExpressionStatement","src":"14920:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14974:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14985:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14970:3:124"},"nodeType":"YulFunctionCall","src":"14970:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14994:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15002:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14990:3:124"},"nodeType":"YulFunctionCall","src":"14990:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14963:6:124"},"nodeType":"YulFunctionCall","src":"14963:43:124"},"nodeType":"YulExpressionStatement","src":"14963:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15026:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15037:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15022:3:124"},"nodeType":"YulFunctionCall","src":"15022:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15046:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15054:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15042:3:124"},"nodeType":"YulFunctionCall","src":"15042:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15015:6:124"},"nodeType":"YulFunctionCall","src":"15015:43:124"},"nodeType":"YulExpressionStatement","src":"15015:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15078:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15089:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15074:3:124"},"nodeType":"YulFunctionCall","src":"15074:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"15094:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15067:6:124"},"nodeType":"YulFunctionCall","src":"15067:34:124"},"nodeType":"YulExpressionStatement","src":"15067:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15121:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15132:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15117:3:124"},"nodeType":"YulFunctionCall","src":"15117:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"15138:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15110:6:124"},"nodeType":"YulFunctionCall","src":"15110:35:124"},"nodeType":"YulExpressionStatement","src":"15110:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15165:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15176:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15161:3:124"},"nodeType":"YulFunctionCall","src":"15161:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"15182:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15154:6:124"},"nodeType":"YulFunctionCall","src":"15154:35:124"},"nodeType":"YulExpressionStatement","src":"15154:35:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14742:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14753:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14761:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14769:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14777:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14785:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14793:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14804:4:124","type":""}],"src":"14572:623:124"},{"body":{"nodeType":"YulBlock","src":"15248:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15258:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15268:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15262:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15311:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15326:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15329:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15322:3:124"},"nodeType":"YulFunctionCall","src":"15322:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15315:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15341:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15356:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15359:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15352:3:124"},"nodeType":"YulFunctionCall","src":"15352:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15345:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15396:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15398:16:124"},"nodeType":"YulFunctionCall","src":"15398:18:124"},"nodeType":"YulExpressionStatement","src":"15398:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15377:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15386:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15390:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15382:3:124"},"nodeType":"YulFunctionCall","src":"15382:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15374:2:124"},"nodeType":"YulFunctionCall","src":"15374:21:124"},"nodeType":"YulIf","src":"15371:47:124"},{"nodeType":"YulAssignment","src":"15427:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15438:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15443:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15434:3:124"},"nodeType":"YulFunctionCall","src":"15434:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15427:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15231:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15234:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15240:3:124","type":""}],"src":"15200:253:124"},{"body":{"nodeType":"YulBlock","src":"15615:252:124","statements":[{"nodeType":"YulAssignment","src":"15625:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:124"},"nodeType":"YulFunctionCall","src":"15633:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15625:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15667:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15682:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15690:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15678:3:124"},"nodeType":"YulFunctionCall","src":"15678:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15660:6:124"},"nodeType":"YulFunctionCall","src":"15660:74:124"},"nodeType":"YulExpressionStatement","src":"15660:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15754:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15765:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15750:3:124"},"nodeType":"YulFunctionCall","src":"15750:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"15770:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15743:6:124"},"nodeType":"YulFunctionCall","src":"15743:34:124"},"nodeType":"YulExpressionStatement","src":"15743:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15797:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15808:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15793:3:124"},"nodeType":"YulFunctionCall","src":"15793:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15817:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15825:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15813:3:124"},"nodeType":"YulFunctionCall","src":"15813:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15786:6:124"},"nodeType":"YulFunctionCall","src":"15786:75:124"},"nodeType":"YulExpressionStatement","src":"15786:75:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15568:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15579:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15587:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15595:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15606:4:124","type":""}],"src":"15458:409:124"},{"body":{"nodeType":"YulBlock","src":"15921:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:124"},"nodeType":"YulFunctionCall","src":"15995:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:124"},"nodeType":"YulFunctionCall","src":"16025:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16060:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16062:16:124"},"nodeType":"YulFunctionCall","src":"16062:18:124"},"nodeType":"YulExpressionStatement","src":"16062:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16055:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16047:2:124"},"nodeType":"YulFunctionCall","src":"16047:12:124"},"nodeType":"YulIf","src":"16044:38:124"},{"nodeType":"YulAssignment","src":"16091:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16103:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16108:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16099:3:124"},"nodeType":"YulFunctionCall","src":"16099:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16091:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15903:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15906:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15912:4:124","type":""}],"src":"15872:246:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        if gt(calldataload(add(headStart, 192)), _1) { revert(0, 0) }\n        let value7_1, value8_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 192))), dataEnd)\n        value7 := value7_1\n        value8 := value8_1\n        if gt(calldataload(add(headStart, 224)), _1) { revert(0, 0) }\n        let value9_1, value10_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 224))), dataEnd)\n        value9 := value9_1\n        value10 := value10_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), 192)\n        let tail_1 := abi_encode_string_calldata(value3, value4, add(headStart, 192))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value5, value6, tail_1)\n        mstore(add(headStart, 160), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value7, value8, tail_2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"30695":[{"length":32,"start":7373}],"30877":[{"length":32,"start":4414},{"length":32,"start":6088}],"30880":[{"length":32,"start":956},{"length":32,"start":1821},{"length":32,"start":2180},{"length":32,"start":2691},{"length":32,"start":3229},{"length":32,"start":3434},{"length":32,"start":3628},{"length":32,"start":3855},{"length":32,"start":3983},{"length":32,"start":4279},{"length":32,"start":5897},{"length":32,"start":6617},{"length":32,"start":9090},{"length":32,"start":9465}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b6040516102409190613040565b60405180910390f35b61025c61025736600461308f565b6106a0565b6040519015158152602001610240565b6102b961027a3660046130bb565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613132565b610795565b005b6102d661030f3660046130bb565b610b54565b61025c610322366004613226565b610b93565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c13565b61025c61037936600461308f565b610c22565b6102ff61038c36600461308f565b610c66565b6102ff61039f366004613226565b610d33565b6102d66103b23660046130bb565b610ddd565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff610470366004613267565b610ed8565b6102d66104833660046130bb565b610fd1565b610233610ffc565b61025c61049e36600461308f565b61100b565b61025c6104b136600461308f565b61104f565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d6611072565b61025c610508366004613289565b61107d565b6102ff61051b366004613226565b61113a565b6102ff61052e3660046132cf565b611378565b6102ff610541366004613289565b6116d2565b6102d661055436600461333d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a3660046130bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f63660046130bb565b6117c4565b6102ff610609366004613226565b6119a2565b60606037805461061d90613376565b80601f016020809104026020016040519081016040528092919081815260200182805461064990613376565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611a54565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078891906133c4565b8290611ac2565b91505090565b60015460029060ff16806107a85750303b155b806107b4575060005481115b610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061097f88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1992505050565b6109be86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2c92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a7b611b3f565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0e99989796959493929190613426565b60405180910390a38015610b4557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9f83611c04565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfd91879190610bf8906fffffffffffffffffffffffffffffffff8616906134d0565b611a54565b610c08858583611caa565b506001949350505050565b6000610c1d611cc9565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf89086906134e7565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50603d54610d2f9073ffffffffffffffffffffffffffffffffffffffff168383611d02565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8d917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906133c4565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611ac2565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5081610f86575050565b603c54610fcc907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611dd5565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8d565b60606038805461061d90613376565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf89086906134d0565b60008061105b83611c04565b9050611068338583611caa565b5060019392505050565b6000610c1d60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061113185858585611dd5565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb91906134ff565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c919061351c565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906112ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff86811691161415611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50610dd773ffffffffffffffffffffffffffffffffffffffff85168484611d02565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166113fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a60205260408120549061149d610c13565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e0016040516020818303038152906040528051906020012060405160200161155e9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156115e4573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f37390000000000000000000000000000000000000000000000000000000000008152509061168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b506116968260016134e7565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a60205260409020556116c7898989611a54565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061178384848484612016565b73ffffffffffffffffffffffffffffffffffffffff83163014610dd757603d54610dd79073ffffffffffffffffffffffffffffffffffffffff168484611d02565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185591906134ff565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e6919061351c565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50610fcc8383836000612334565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611af757600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2f906037906020840190612f45565b8051610d2f906038906020840190612f45565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b6a6125b0565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611ca6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083c565b5090565b610fcc8383836fffffffffffffffffffffffffffffffff166001612334565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611cfa5750603b5490565b610c1d611b3f565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611d65573d6000803e3d6000fd5b50611d6f846125ba565b610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083c565b600080611de28484612686565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611e51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611eae918491700100000000000000000000000000000000900416611ac2565b611eb88387611ac2565b611ec291906134d0565b9050611ecd85611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f3587611f3085611c04565b6126c5565b6000611f4182886134e7565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa391815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006120228383612686565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916120ee918491700100000000000000000000000000000000900416611ac2565b6120f88386611ac2565b61210291906134d0565b905061210d84611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121758761217085611c04565b612841565b8481111561225457600061218986836134d0565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121eb91815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35061232b565b600061226082876134d0565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122c291815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef91906133c4565b9050600061243582610ed28973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050600061247b83610ed28973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050612489888888866128a5565b8415612556576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda866661259c8987612686565b604080519182526020820188905201612321565b6060610c1d61060e565b60006125fa565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156126395760208114612673576126347f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125c1565b612680565b823b61266a5761266a7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125c1565b60019150612680565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126aa57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546126e46fffffffffffffffffffffffffffffffff8316826134e7565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612729838261353e565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603954610100900416801561283a576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561282657600080fd5b505af11580156116c7573d6000803e3d6000fd5b5050505050565b6036546128606fffffffffffffffffffffffffffffffff8316826134d0565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166127298382613572565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612901918491700100000000000000000000000000000000900416611ac2565b61290b8385611ac2565b61291591906134d0565b905060006129578673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054919250906129b290839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611ac2565b6129bc8387611ac2565b6129c691906134d0565b90506129d185611c04565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a3085611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612aa28888612a9d612a988a8a612686565b611c04565b612c9a565b8215612b515760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612b8d5750600081115b15612c3b5760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161232191815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612cdc8282613572565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612d50838261353e565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f3d576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612e5057600080fd5b505af1158015612e64573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461232b576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b50505050505b505050505050565b828054612f5190613376565b90600052602060002090601f016020900481019282612f735760008555612fb9565b82601f10612f8c57805160ff1916838001178555612fb9565b82800160010185558215612fb9579182015b82811115612fb9578251825591602001919060010190612f9e565b50611ca69291505b80821115611ca65760008155600101612fc1565b6000815180845260005b81811015612ffb57602081850181015186830182015201612fdf565b8181111561300d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130536020830184612fd5565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461307c57600080fd5b50565b803561308a8161305a565b919050565b600080604083850312156130a257600080fd5b82356130ad8161305a565b946020939093013593505050565b6000602082840312156130cd57600080fd5b81356130538161305a565b803560ff8116811461308a57600080fd5b60008083601f8401126130fb57600080fd5b50813567ffffffffffffffff81111561311357600080fd5b60208301915083602082850101111561312b57600080fd5b9250929050565b60008060008060008060008060008060006101008c8e03121561315457600080fd5b61315d8c61307f565b9a5061316b60208d0161307f565b995061317960408d0161307f565b985061318760608d0161307f565b975061319560808d016130d8565b965067ffffffffffffffff8060a08e013511156131b157600080fd5b6131c18e60a08f01358f016130e9565b909750955060c08d01358110156131d757600080fd5b6131e78e60c08f01358f016130e9565b909550935060e08d01358110156131fd57600080fd5b5061320e8d60e08e01358e016130e9565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561323b57600080fd5b83356132468161305a565b925060208401356132568161305a565b929592945050506040919091013590565b6000806040838503121561327a57600080fd5b50508035926020909101359150565b6000806000806080858703121561329f57600080fd5b84356132aa8161305a565b935060208501356132ba8161305a565b93969395505050506040820135916060013590565b600080600080600080600060e0888a0312156132ea57600080fd5b87356132f58161305a565b965060208801356133058161305a565b95506040880135945060608801359350613321608089016130d8565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561335057600080fd5b823561335b8161305a565b9150602083013561336b8161305a565b809150509250929050565b600181811c9082168061338a57607f821691505b60208210811415612680577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156133d657600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c0606083015261346960c08301888a6133dd565b828103608084015261347c8187896133dd565b905082810360a08401526134918185876133dd565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134e2576134e26134a1565b500390565b600082198211156134fa576134fa6134a1565b500190565b60006020828403121561351157600080fd5b81516130538161305a565b60006020828403121561352e57600080fd5b8151801515811461305357600080fd5b60006fffffffffffffffffffffffffffffffff808316818516808303821115613569576135696134a1565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561359b5761359b6134a1565b03939250505056fea2646970667358221220ac468757d0f026a6b3a52b58a4305cc76754b4319bb541eb3c25ef99f422775b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3132 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xB54 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0xC22 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0xC66 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0xD33 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xDDD JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xED8 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xFD1 JUMP JUMPDEST PUSH2 0x233 PUSH2 0xFFC JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x100B JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x104F JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x1072 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x3289 JUMP JUMPDEST PUSH2 0x107D JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x113A JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x32CF JUMP JUMPDEST PUSH2 0x1378 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3289 JUMP JUMPDEST PUSH2 0x16D2 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x333D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0x17C4 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x19A2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3376 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x3376 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1A54 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1AC2 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x7A8 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B4 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x882 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x97F DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B19 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BE DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B2C SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA7B PUSH2 0x1B3F JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0E SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3426 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB45 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9F DUP4 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFD SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF8 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0xC08 DUP6 DUP6 DUP4 PUSH2 0x1CAA JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH2 0x1CC9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2F SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D02 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8D SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE99 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP DUP2 PUSH2 0xF86 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0xFCC SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1DD5 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3376 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x105B DUP4 PUSH2 0x1C04 JUMP JUMPDEST SWAP1 POP PUSH2 0x1068 CALLER DUP6 DUP4 PUSH2 0x1CAA JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1124 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1131 DUP6 DUP6 DUP6 DUP6 PUSH2 0x1DD5 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11CB SWAP2 SWAP1 PUSH2 0x34FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125C SWAP2 SWAP1 PUSH2 0x351C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x12CA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1356 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0xDD7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x13FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x146D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x149D PUSH2 0xC13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x155E SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x168A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1696 DUP3 PUSH1 0x1 PUSH2 0x34E7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x16C7 DUP10 DUP10 DUP10 PUSH2 0x1A54 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1776 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1783 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2016 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0xDD7 JUMPI PUSH1 0x3D SLOAD PUSH2 0xDD7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1831 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1855 SWAP2 SWAP1 PUSH2 0x34FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E6 SWAP2 SWAP1 PUSH2 0x351C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1954 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0xFCC DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2334 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1AF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F45 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F45 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1B6A PUSH2 0x25B0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CA6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFCC DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2334 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1CFA JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1D PUSH2 0x1B3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1D65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D6F DUP5 PUSH2 0x25BA JUMP JUMPDEST PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DE2 DUP5 DUP5 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1E51 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1EAE SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x1EB8 DUP4 DUP8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x1EC2 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1ECD DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F35 DUP8 PUSH2 0x1F30 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x26C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F41 DUP3 DUP9 PUSH2 0x34E7 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FA3 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2022 DUP4 DUP4 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x2091 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x20EE SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x20F8 DUP4 DUP7 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2102 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x210D DUP5 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2175 DUP8 PUSH2 0x2170 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x2841 JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x2254 JUMPI PUSH1 0x0 PUSH2 0x2189 DUP7 DUP4 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x21EB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x232B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2260 DUP3 DUP8 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x22C2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23EF SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2435 DUP3 PUSH2 0xED2 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x247B DUP4 PUSH2 0xED2 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2489 DUP9 DUP9 DUP9 DUP7 PUSH2 0x28A5 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x2556 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x253D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2551 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x259C DUP10 DUP8 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x2321 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1D PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25FA JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2639 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x2673 JUMPI PUSH2 0x2634 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25C1 JUMP JUMPDEST PUSH2 0x2680 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x266A JUMPI PUSH2 0x266A PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25C1 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2680 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x26E4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2729 DUP4 DUP3 PUSH2 0x353E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x283A JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2826 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2860 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2729 DUP4 DUP3 PUSH2 0x3572 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2901 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x290B DUP4 DUP6 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2915 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2957 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29B2 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x29BC DUP4 DUP8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x29C6 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x29D1 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A30 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AA2 DUP9 DUP9 PUSH2 0x2A9D PUSH2 0x2A98 DUP11 DUP11 PUSH2 0x2686 JUMP JUMPDEST PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x2C9A JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2B51 JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B8D JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C3B JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x2321 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CDC DUP3 DUP3 PUSH2 0x3572 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2D50 DUP4 DUP3 PUSH2 0x353E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F3D JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x232B JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F37 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2F51 SWAP1 PUSH2 0x3376 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2F73 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2FB9 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2F8C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2FB9 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2FB9 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2FB9 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2F9E JUMP JUMPDEST POP PUSH2 0x1CA6 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA6 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2FC1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2FFB JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2FDF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x300D JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3053 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FD5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x307C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x308A DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x30AD DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3053 DUP2 PUSH2 0x305A JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x308A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x30FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3113 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x312B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x3154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x315D DUP13 PUSH2 0x307F JUMP JUMPDEST SWAP11 POP PUSH2 0x316B PUSH1 0x20 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP10 POP PUSH2 0x3179 PUSH1 0x40 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP9 POP PUSH2 0x3187 PUSH1 0x60 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP8 POP PUSH2 0x3195 PUSH1 0x80 DUP14 ADD PUSH2 0x30D8 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x31B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31C1 DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E9 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E7 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E9 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x320E DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x30E9 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x323B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3246 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3256 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x327A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x329F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32AA DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x32BA DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x32EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x32F5 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3305 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3321 PUSH1 0x80 DUP10 ADD PUSH2 0x30D8 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x335B DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x336B DUP2 PUSH2 0x305A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x338A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2680 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3469 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x33DD JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x347C DUP2 DUP8 DUP10 PUSH2 0x33DD JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3491 DUP2 DUP6 DUP8 PUSH2 0x33DD JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34E2 JUMPI PUSH2 0x34E2 PUSH2 0x34A1 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x34FA JUMPI PUSH2 0x34FA PUSH2 0x34A1 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3053 DUP2 PUSH2 0x305A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x352E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3053 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3569 JUMPI PUSH2 0x3569 PUSH2 0x34A1 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x359B JUMPI PUSH2 0x359B PUSH2 0x34A1 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAC CHAINID DUP8 JUMPI 0xD0 CREATE 0x26 0xA6 0xB3 0xA5 0x2B PC LOG4 ADDRESS 0x5C 0xC7 PUSH8 0x54B4319BB541EB3C 0x25 0xEF SWAP10 DELEGATECALL 0x22 PUSH24 0x5B64736F6C634300080A0033000000000000000000000000 ","sourceMap":"176:164:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4534:158;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:124;;1551:22;1533:41;;1521:2;1506:18;4534:158:121;1393:187:124;1386:173:123;;;;;;:::i;:::-;3518:19:121;;1479:7:123;3518:19:121;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:123;;;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:123;1837:248:124;1450:45:115;;1492:3;1450:45;;;;;2236:25:124;;;2224:2;2209:18;1450:45:115;2090:177:124;4276:307:115;;;:::i;1990:850::-;;;;;;:::i;:::-;;:::i;:::-;;1225:119:123;;;;;;:::i;:::-;;:::i;4721:327:121:-;;;;;;:::i;:::-;;:::i;1304:141:115:-;;1350:95;1304:141;;3178:86:121;3250:9;;3178:86;;3250:9;;;;4990:36:124;;4978:2;4963:18;3178:86:121;4848:184:124;7503:130:115;;;:::i;5296:204:121:-;;;;;;:::i;:::-;;:::i;4888:161:115:-;;;;;;:::i;:::-;;:::i;5079:163::-;;;;;;:::i;:::-;;:::i;4035:212::-;;;;;;:::i;:::-;;:::i;2408:27:121:-;;;;;;;;5227:42:124;5215:55;;;5197:74;;5185:2;5170:18;2408:27:121;5037:240:124;3691:132:121;3797:21;;;;;;;3691:132;;192:50:120;;232:10;;;;;;;;;;;;;;;;;192:50;;3484:196:115;;;;;;:::i;:::-;;:::i;7782:128::-;;;;;;:::i;:::-;;:::i;3051:90:121:-;;;:::i;5758:226::-;;;;;;:::i;:::-;;:::i;4106:213::-;;;;;;:::i;:::-;;:::i;4613:104:115:-;4703:9;;;;4613:104;;4747:111;4837:16;;;;4747:111;;1601:113:123;;;:::i;2870:215:115:-;;;;;;:::i;:::-;;:::i;8069:223::-;;;;;;:::i;:::-;;:::i;5272:755::-;;;;;;:::i;:::-;;:::i;3115:339::-;;;;;;:::i;:::-;;:::i;4348:157:121:-;;;;;;:::i;:::-;4473:18;;;;4451:7;4473:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4348:157;1756:138:123;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:121;;;;;;:::i;:::-;;:::i;3710:296:115:-;;;;;;:::i;:::-;;:::i;2930:84:121:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4534:158::-;4619:4;4631:39;678:10:4;4654:7:121;4663:6;4631:8;:39::i;:::-;-1:-1:-1;4683:4:121;4534:158;;;;:::o;4276:307:115:-;4364:7;4379:27;4409:19;3376:12:121;;;3293:100;4409:19:115;4379:49;-1:-1:-1;4439:24:115;4435:53;;4480:1;4473:8;;;4276:307;:::o;4435:53::-;4560:16;;4528:49;;;;;:31;4560:16;;;4528:49;;;5197:74:124;4501:77:115;;4528:4;:31;;;;5170:18:124;;4528:49:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:19;;:26;:77::i;:::-;4494:84;;;4276:307;:::o;1990:850::-;1217:12:87;;330:3:77;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;9035:2:124;1202:146:87;;;9017:21:124;9074:2;9054:18;;;9047:30;9113:34;9093:18;;;9086:62;9184:16;9164:18;;;9157:44;9218:19;;1202:146:87;;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2334:4:115::1;2314:24;;:16;:24;;;2340:34;;;;;;;;;;;;;;;;::::0;2306:69:::1;;;;;;;;;;;;;;:::i;:::-;;2381:20;2390:10;;2381:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2381:8:115::1;::::0;-1:-1:-1;;;2381:20:115:i:1;:::-;2407:24;2418:12;;2407:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2407:10:115::1;::::0;-1:-1:-1;;;2407:24:115:i:1;:::-;7979:9:121::0;:23;;;;;;;;;;2472:9:115::1;:20:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;2498:16:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;2538:21:::1;:44:::0;;;;::::1;2472:20;2538:44;::::0;;;::::1;::::0;;;::::1;::::0;;2608:27:::1;:25;:27::i;:::-;2589:16;:46;;;;2697:4;2647:188;;2666:15;2647:188;;;2710:8;2734:20;2763:14;2785:10;;2803:12;;2823:6;;2647:188;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1990:850:115;;;;;;;;;;;:::o;1225:119:123:-;3518:19:121;;;1296:7:123;3518:19:121;;;:10;:19;;;;;:27;;;1318:21:123;1311:28;1225:119;-1:-1:-1;;1225:119:123:o;4721:327:121:-;4845:4;4857:18;4878;:6;:16;:18::i;:::-;4933:19;;;;;;;:11;:19;;;;;;;;678:10:4;4933:33:121;;;;;;;;;4857:39;;-1:-1:-1;4902:78:121;;4911:6;;678:10:4;4933:46:121;;;;;;;:::i;:::-;4902:8;:78::i;:::-;4986:40;4996:6;5004:9;5015:10;4986:9;:40::i;:::-;-1:-1:-1;5039:4:121;;4721:327;-1:-1:-1;;;;4721:327:121:o;7503:130:115:-;7582:7;7604:24;:22;:24::i;:::-;7597:31;;7503:130;:::o;5296:204:121:-;678:10:4;5386:4:121;5430:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5386:4;;5398:80;;5421:7;;5430:47;;5467:10;;5430:47;:::i;4888:161:115:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4998:16:115::1;::::0;4991:53:::1;::::0;4998:16:::1;;5029:6:::0;5037;4991:37:::1;:53::i;:::-;4888:161:::0;;:::o;5079:163::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;5079:163:115;;;:::o;4035:212::-;4224:16;;4192:49;;;;;:31;4224:16;;;4192:49;;;5197:74:124;4141:7:115;;4163:79;;4192:4;:31;;;;;;5170:18:124;;4192:49:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3518:19:121;;;3496:7;3518:19;;;:10;:19;;;;;:27;;;4163:21:115;:28;;:79::i;3484:196::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3584:11:115;3580:38:::1;;4888:161:::0;;:::o;3580:38::-:1;3650:9;::::0;3623:52:::1;::::0;3643:4:::1;::::0;3650:9:::1;;3661:6:::0;3669:5;3623:11:::1;:52::i;:::-;;3484:196:::0;;:::o;7782:128::-;1342:14:120;;;7864:7:115;1342:14:120;;;:7;:14;;;;;;7886:19:115;1260:101:120;3051:90:121;3101:13;3129:7;3122:14;;;;;:::i;5758:226::-;678:10:4;5865:4:121;5909:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5865:4;;5877:85;;5900:7;;5909:52;;5946:15;;5909:52;:::i;4106:213::-;4194:4;4206:18;4227;:6;:16;:18::i;:::-;4206:39;-1:-1:-1;4251:46:121;678:10:4;4275:9:121;4286:10;4251:9;:46::i;:::-;-1:-1:-1;4310:4:121;;4106:213;-1:-1:-1;;;4106:213:121:o;1601:113:123:-;1668:7;1690:19;3376:12:121;;;3293:100;2870:215:115;1519:26:121;;;;;;;;;;;;;;;;;3015:4:115;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3034:46:115::1;3046:6;3054:10;3066:6;3074:5;3034:11;:46::i;:::-;3027:53:::0;2870:215;-1:-1:-1;;;;;2870:215:115:o;8069:223::-;1211:22:121;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8189:16:115::1;::::0;8207:35:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;8189:16:::1;8180:25:::0;;::::1;8189:16:::0;::::1;8180:25;;8172:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8249:38:115::1;:26;::::0;::::1;8276:2:::0;8280:6;8249:26:::1;:38::i;5272:755::-:0;5469:29;;;;;;;;;;;;;;;;;5448:19;;;5440:59;;;;;;;;;;;;;:::i;:::-;;5563:8;5544:15;:27;;5573:25;;;;;;;;;;;;;;;;;5536:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5633:14:115;;;5605:25;5633:14;;;:7;:14;;;;;;;5733:18;:16;:18::i;:::-;5771:79;;;1350:95;5771:79;;;11789:25:124;11833:42;11911:15;;;11891:18;;;11884:43;;;;11963:15;;;11943:18;;;11936:43;11995:18;;;11988:34;;;12038:19;;;12031:35;;;12082:19;;;12075:35;;;11761:19;;5771:79:115;;;;;;;;;;;;5761:90;;;;;;5687:172;;;;;;;;12391:66:124;12379:79;;12483:1;12474:11;;12467:27;;;;12519:2;12510:12;;12503:28;12556:2;12547:12;;12121:444;5687:172:115;;;;;;;;;;;;;;5670:195;;5687:172;5670:195;;;;5888:26;;;;;;;;;12797:25:124;;;12870:4;12858:17;;12838:18;;;12831:45;;;;12892:18;;;12885:34;;;12935:18;;;12928:34;;;5670:195:115;-1:-1:-1;5888:26:115;;12769:19:124;;5888:26:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35;;:5;:35;;;5916:24;;;;;;;;;;;;;;;;;5871:70;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5964:21:115;:17;5984:1;5964:21;:::i;:::-;5947:14;;;;;;;:7;:14;;;;;:38;5991:31;5955:5;6007:7;6016:5;5991:8;:31::i;:::-;5434:593;;5272:755;;;;;;;:::o;3115:339::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3265:54:115::1;3277:4;3283:20;3305:6;3313:5;3265:11;:54::i;:::-;3329:37;::::0;::::1;3361:4;3329:37;3325:125;;3383:16;::::0;3376:67:::1;::::0;3383:16:::1;;3414:20:::0;3436:6;3376:37:::1;:67::i;3938:139:121:-:0;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:121::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3710:296:115:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3968:33:115::1;3978:4;3984:2;3988:5;3995;3968:9;:33::i;7235:173:121:-:0;7324:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7371:32;;2236:25:124;;;7371:32:121;;2209:18:124;7371:32:121;;;;;;;7235:173;;;:::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;7513:76:121:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;1475:298:120:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13232:25:124;;;;13273:18;;;13266:34;;;;1674:26:120;13316:18:124;;;13309:34;1712:13:120;13359:18:124;;;13352:34;1745:4:120;13402:19:124;;;13395:84;13204:19;;1582:178:120;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;13692:2:124;1635:78:12;;;13674:21:124;13731:2;13711:18;;;13704:30;13770:34;13750:18;;;13743:62;13841:9;13821:18;;;13814:37;13868:19;;1635:78:12;13490:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;7213:131:115:-;7306:33;7316:4;7322:2;7326:6;7306:33;;7334:4;7306:9;:33::i;867:185:120:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:120;;;867:185::o;939:69::-;1020:27;:25;:27::i;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;14100:2:124;1031:62:1;;;14082:21:124;14139:2;14119:18;;;14112:30;14178:23;14158:18;;;14151:51;14219:18;;1031:62:1;13898:345:124;2295:763:123;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:123;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;2543:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;2543:21:123;2662:59;;3518:27:121;;2683:37:123;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;2236:25:124;;2224:2;2209:18;;2090:177;2900:46:123;;;;;;;;2957:62;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;2957:62:123;;;;;;;;;;;14438:2:124;14423:18;2957:62:123;;;;;;;-1:-1:-1;;3034:18:123;;2295:763;-1:-1:-1;;;;;;2295:763:123:o;3512:888::-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:123;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;3719:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;3719:21:123;3832:53;;3518:27:121;;3853:31:123;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;2236:25:124;;2224:2;2209:18;;2090:177;4092:40:123;;;;;;;;4145:54;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4145:54:123;;;;;;;;14438:2:124;14423:18;4145:54:123;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;2236:25:124;;2224:2;2209:18;;2090:177;4280:40:123;;;;;;;;4333:56;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4333:56:123;;;;;;;;;;;14438:2:124;14423:18;4333:56:123;;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;6387:592:115:-;6512:16;;6551:48;;;;;6512:16;;;;6551:48;;;5197:74:124;;;6512:16:115;6486:23;;6551:4;:31;;;;;;5170:18:124;;6551:48:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6535:64;;6606:25;6634:35;6663:5;6634:21;6650:4;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6634:35:115;6606:63;;6675:23;6701:33;6728:5;6701:19;6717:2;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6701:33:115;6675:59;;6741:40;6757:4;6763:2;6767:6;6775:5;6741:15;:40::i;:::-;6792:8;6788:121;;;6810:92;;;;;:21;14938:15:124;;;6810:92:115;;;14920:34:124;14990:15;;;14970:18;;;14963:43;15042:15;;;15022:18;;;15015:43;15074:18;;;15067:34;;;15117:19;;;15110:35;;;15161:19;;;15154:35;;;6810:4:115;:21;;;;14831:19:124;;6810:92:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:121;6920:54;;;;;;;;6946:20;:6;6960:5;6946:13;:20::i;:::-;6920:54;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;1984:18;6920:54:115;1837:248:124;7943:96:115;8000:13;8028:6;:4;:6::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1069:519:122:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15678:55:124;;;1495:82:122;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;1495:38:122;;;;;15633:18:124;;1495:82:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;4767:1203:123:-;3518:19:121;;;4867:27:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;4867::123;5000:61;;3518:27:121;;5027:33:123;;;;5000:26;:61::i;:::-;4958:33;:19;4985:5;4958:26;:33::i;:::-;:103;;;;:::i;:::-;4926:135;;5068:30;5101:26;5117:9;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;5101:26:123;5243:21;;;5133:32;5243:21;;;:10;:21;;;;;:36;5068:59;;-1:-1:-1;5133:32:123;5213:67;;5068:59;;5243:36;;;;;5213:29;:67::i;:::-;5168:36;:22;5198:5;5168:29;:36::i;:::-;:112;;;;:::i;:::-;5133:147;;5323:17;:5;:15;:17::i;:::-;5287:18;;;;;;;:10;:18;;;;;:53;;;;;;;;;;;;;;;;5385:17;:5;:15;:17::i;:::-;5346:21;;;;;;;:10;:21;;;;;:56;;;;;;;;;;;;;;;;5409:68;5425:6;5357:9;5444:32;:20;:6;5458:5;5444:13;:20::i;:::-;:30;:32::i;:::-;5409:15;:68::i;:::-;5488:25;;5484:194;;5528:51;;2236:25:124;;;5528:51:123;;;;5545:1;;5528:51;;2224:2:124;2209:18;5528:51:123;;;;;;;5592:79;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5592:79:123;;;;;;678:10:4;;5592:79:123;;;;;14438:2:124;5592:79:123;;;5484:194;5698:9;5688:19;;:6;:19;;;;:51;;;;;5738:1;5711:24;:28;5688:51;5684:235;;;5754:57;;2236:25:124;;;5754:57:123;;;;5771:1;;5754:57;;2224:2:124;2209:18;5754:57:123;;;;;;;5824:88;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5824:88:123;;;;;;678:10:4;;5824:88:123;;;;;14438:2:124;5824:88:123;;;5684:235;5947:9;5930:35;;5939:6;5930:35;;;5958:6;5930:35;;;;2236:25:124;;2224:2;2209:18;;2090:177;6215:772:121;6335:18;;;6308:24;6335:18;;;:10;:18;;;;;:26;;;6396:25;6415:6;6335:26;6396:25;:::i;:::-;6367:18;;;;;;;;:10;:18;;;;;;:54;;;;;;;;;;;6457:21;;;;;;:29;;6524:28;6546:6;6457:29;6524:28;:::i;:::-;6492:21;;;;;;;;:10;:21;;;;;:60;;;;;;;;;;;;;;;;6613:21;;6492:60;6613:21;;;6644:48;;6640:343;;6731:12;;6751:84;;;;;:38;15678:55:124;;;6751:84:121;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6751:38:121;;;;;15633:18:124;;6751:84:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6857:9;6847:19;;:6;:19;;;6843:134;;6878:90;;;;;:38;15678:55:124;;;6878:90:121;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6878:38:121;;;;;15633:18:124;;6878:90:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6694:289;6640:343;6302:685;;;6215:772;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:124;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:124:o;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:124:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2272:156::-;2338:20;;2398:4;2387:16;;2377:27;;2367:55;;2418:1;2415;2408:12;2433:348;2485:8;2495:6;2549:3;2542:4;2534:6;2530:17;2526:27;2516:55;;2567:1;2564;2557:12;2516:55;-1:-1:-1;2590:20:124;;2633:18;2622:30;;2619:50;;;2665:1;2662;2655:12;2619:50;2702:4;2694:6;2690:17;2678:29;;2754:3;2747:4;2738:6;2730;2726:19;2722:30;2719:39;2716:59;;;2771:1;2768;2761:12;2716:59;2433:348;;;;;:::o;2786:1414::-;2989:6;2997;3005;3013;3021;3029;3037;3045;3053;3061;3069:7;3123:3;3111:9;3102:7;3098:23;3094:33;3091:53;;;3140:1;3137;3130:12;3091:53;3163:29;3182:9;3163:29;:::i;:::-;3153:39;;3211:38;3245:2;3234:9;3230:18;3211:38;:::i;:::-;3201:48;;3268:38;3302:2;3291:9;3287:18;3268:38;:::i;:::-;3258:48;;3325:38;3359:2;3348:9;3344:18;3325:38;:::i;:::-;3315:48;;3382:37;3414:3;3403:9;3399:19;3382:37;:::i;:::-;3372:47;;3438:18;3506:2;3499:3;3488:9;3484:19;3471:33;3468:41;3465:61;;;3522:1;3519;3512:12;3465:61;3561:86;3639:7;3631:3;3620:9;3616:19;3603:33;3592:9;3588:49;3561:86;:::i;:::-;3666:8;;-1:-1:-1;3693:8:124;-1:-1:-1;3744:3:124;3729:19;;3716:33;3713:41;-1:-1:-1;3710:61:124;;;3767:1;3764;3757:12;3710:61;3806:86;3884:7;3876:3;3865:9;3861:19;3848:33;3837:9;3833:49;3806:86;:::i;:::-;3911:8;;-1:-1:-1;3938:8:124;-1:-1:-1;3989:3:124;3974:19;;3961:33;3958:41;-1:-1:-1;3955:61:124;;;4012:1;4009;4002:12;3955:61;;4052:86;4130:7;4122:3;4111:9;4107:19;4094:33;4083:9;4079:49;4052:86;:::i;:::-;4157:8;4147:18;;4185:9;4174:20;;;;2786:1414;;;;;;;;;;;;;;:::o;4205:456::-;4282:6;4290;4298;4351:2;4339:9;4330:7;4326:23;4322:32;4319:52;;;4367:1;4364;4357:12;4319:52;4406:9;4393:23;4425:31;4450:5;4425:31;:::i;:::-;4475:5;-1:-1:-1;4532:2:124;4517:18;;4504:32;4545:33;4504:32;4545:33;:::i;:::-;4205:456;;4597:7;;-1:-1:-1;;;4651:2:124;4636:18;;;;4623:32;;4205:456::o;5770:248::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;-1:-1:-1;;5938:23:124;;;6008:2;5993:18;;;5980:32;;-1:-1:-1;5770:248:124:o;6254:525::-;6340:6;6348;6356;6364;6417:3;6405:9;6396:7;6392:23;6388:33;6385:53;;;6434:1;6431;6424:12;6385:53;6473:9;6460:23;6492:31;6517:5;6492:31;:::i;:::-;6542:5;-1:-1:-1;6599:2:124;6584:18;;6571:32;6612:33;6571:32;6612:33;:::i;:::-;6254:525;;6664:7;;-1:-1:-1;;;;6718:2:124;6703:18;;6690:32;;6769:2;6754:18;6741:32;;6254:525::o;6784:734::-;6895:6;6903;6911;6919;6927;6935;6943;6996:3;6984:9;6975:7;6971:23;6967:33;6964:53;;;7013:1;7010;7003:12;6964:53;7052:9;7039:23;7071:31;7096:5;7071:31;:::i;:::-;7121:5;-1:-1:-1;7178:2:124;7163:18;;7150:32;7191:33;7150:32;7191:33;:::i;:::-;7243:7;-1:-1:-1;7297:2:124;7282:18;;7269:32;;-1:-1:-1;7348:2:124;7333:18;;7320:32;;-1:-1:-1;7371:37:124;7403:3;7388:19;;7371:37;:::i;:::-;7361:47;;7455:3;7444:9;7440:19;7427:33;7417:43;;7507:3;7496:9;7492:19;7479:33;7469:43;;6784:734;;;;;;;;;;:::o;7523:388::-;7591:6;7599;7652:2;7640:9;7631:7;7627:23;7623:32;7620:52;;;7668:1;7665;7658:12;7620:52;7707:9;7694:23;7726:31;7751:5;7726:31;:::i;:::-;7776:5;-1:-1:-1;7833:2:124;7818:18;;7805:32;7846:33;7805:32;7846:33;:::i;:::-;7898:7;7888:17;;;7523:388;;;;;:::o;8202:437::-;8281:1;8277:12;;;;8324;;;8345:61;;8399:4;8391:6;8387:17;8377:27;;8345:61;8452:2;8444:6;8441:14;8421:18;8418:38;8415:218;;;8489:77;8486:1;8479:88;8590:4;8587:1;8580:15;8618:4;8615:1;8608:15;8644:184;8714:6;8767:2;8755:9;8746:7;8742:23;8738:32;8735:52;;;8783:1;8780;8773:12;8735:52;-1:-1:-1;8806:16:124;;8644:184;-1:-1:-1;8644:184:124:o;9248:326::-;9337:6;9332:3;9325:19;9389:6;9382:5;9375:4;9370:3;9366:14;9353:43;;9441:1;9434:4;9425:6;9420:3;9416:16;9412:27;9405:38;9307:3;9563:4;9493:66;9488:2;9480:6;9476:15;9472:88;9467:3;9463:98;9459:109;9452:116;;9248:326;;;;:::o;9579:928::-;9895:4;9924:42;10005:2;9997:6;9993:15;9982:9;9975:34;10057:2;10049:6;10045:15;10040:2;10029:9;10025:18;10018:43;;10109:4;10101:6;10097:17;10092:2;10081:9;10077:18;10070:45;10151:3;10146:2;10135:9;10131:18;10124:31;10178:63;10236:3;10225:9;10221:19;10213:6;10205;10178:63;:::i;:::-;10290:9;10282:6;10278:22;10272:3;10261:9;10257:19;10250:51;10324:50;10367:6;10359;10351;10324:50;:::i;:::-;10310:64;;10423:9;10415:6;10411:22;10405:3;10394:9;10390:19;10383:51;10451:50;10494:6;10486;10478;10451:50;:::i;:::-;10443:58;9579:928;-1:-1:-1;;;;;;;;;;;;9579:928:124:o;10512:184::-;10564:77;10561:1;10554:88;10661:4;10658:1;10651:15;10685:4;10682:1;10675:15;10701:125;10741:4;10769:1;10766;10763:8;10760:34;;;10774:18;;:::i;:::-;-1:-1:-1;10811:9:124;;10701:125::o;10831:128::-;10871:3;10902:1;10898:6;10895:1;10892:13;10889:39;;;10908:18;;:::i;:::-;-1:-1:-1;10944:9:124;;10831:128::o;10964:251::-;11034:6;11087:2;11075:9;11066:7;11062:23;11058:32;11055:52;;;11103:1;11100;11093:12;11055:52;11135:9;11129:16;11154:31;11179:5;11154:31;:::i;11220:277::-;11287:6;11340:2;11328:9;11319:7;11315:23;11311:32;11308:52;;;11356:1;11353;11346:12;11308:52;11388:9;11382:16;11441:5;11434:13;11427:21;11420:5;11417:32;11407:60;;11463:1;11460;11453:12;15200:253;15240:3;15268:34;15329:2;15326:1;15322:10;15359:2;15356:1;15352:10;15390:3;15386:2;15382:12;15377:3;15374:21;15371:47;;;15398:18;;:::i;:::-;15434:13;;15200:253;-1:-1:-1;;;;15200:253:124:o;15872:246::-;15912:4;15941:34;16025:10;;;;15995;;16047:12;;;16044:38;;;16062:18;;:::i;:::-;16099:13;;15872:246;-1:-1:-1;;;15872:246:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"2757000","executionCost":"infinite","totalCost":"infinite"},"external":{"ATOKEN_REVISION()":"308","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"241","POOL()":"infinite","RESERVE_TREASURY_ADDRESS()":"2396","UNDERLYING_ASSET_ADDRESS()":"2418","allowance(address,address)":"infinite","approve(address,uint256)":"24565","balanceOf(address)":"infinite","burn(address,address,uint256,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"26864","getIncentivesController()":"2429","getPreviousIndex(address)":"2590","getScaledUserBalanceAndSupply(address)":"4737","handleRepayment(address,address,uint256)":"infinite","increaseAllowance(address,uint256)":"26934","initialize(address,address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","mintToTreasury(uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2631","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","scaledBalanceOf(address)":"2626","scaledTotalSupply()":"2375","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOnLiquidation(address,address,uint256)":"infinite","transferUnderlyingTo(address,uint256)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"ATOKEN_REVISION()":"0bd7ad3b","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","POOL()":"7535d246","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"ATOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"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\":\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"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\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\"},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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 `amount` 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 amount of tokens owned by `account`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/upgradeability/MockAToken.sol\":\"MockAToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/upgradeability/MockAToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {AToken} from '../../protocol/tokenization/AToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\ncontract MockAToken is AToken {\\n  constructor(IPool pool) AToken(pool) {}\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x2;\\n  }\\n}\\n\",\"keccak256\":\"0x9746a6316fac4c667ff176c50fa727917864a9feef52cf99663f78301d1aa12d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/AToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAToken} from '../../interfaces/IAToken.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\n\\n/**\\n * @title Aave ERC20 AToken\\n * @author Aave\\n * @notice Implementation of the interest bearing token for the Aave protocol\\n */\\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  uint256 public constant ATOKEN_REVISION = 0x1;\\n\\n  address internal _treasury;\\n  address internal _underlyingAsset;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return ATOKEN_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableAToken\\n  function initialize(\\n    IPool initializingPool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) public virtual override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(aTokenName);\\n    _setSymbol(aTokenSymbol);\\n    _setDecimals(aTokenDecimals);\\n\\n    _treasury = treasury;\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      treasury,\\n      address(incentivesController),\\n      aTokenDecimals,\\n      aTokenName,\\n      aTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool) {\\n    return _mintScaled(caller, onBehalfOf, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function burn(\\n    address from,\\n    address receiverOfUnderlying,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool {\\n    _burnScaled(from, receiverOfUnderlying, amount, index);\\n    if (receiverOfUnderlying != address(this)) {\\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\\n    }\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\\n    if (amount == 0) {\\n      return;\\n    }\\n    _mintScaled(address(POOL), _treasury, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferOnLiquidation(\\n    address from,\\n    address to,\\n    uint256 value\\n  ) external virtual override onlyPool {\\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\\n    // so no need to emit a specific event here\\n    _transfer(from, to, value, false);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(\\n    address user\\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    uint256 currentSupplyScaled = super.totalSupply();\\n\\n    if (currentSupplyScaled == 0) {\\n      return 0;\\n    }\\n\\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\\n    return _treasury;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function handleRepayment(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount\\n  ) external virtual override onlyPool {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IAToken\\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 override {\\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @notice Transfers the aTokens between two users. Validates the transfer\\n   * (ie checks for valid HF after the transfer) if required\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   * @param validate True if the transfer needs to be validated, false otherwise\\n   */\\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\\n    address underlyingAsset = _underlyingAsset;\\n\\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\\n\\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\\n\\n    super._transfer(from, to, amount, index);\\n\\n    if (validate) {\\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\\n    }\\n\\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\\n  }\\n\\n  /**\\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\\n    _transfer(from, to, amount, true);\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\\n   */\\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\\n    return super.DOMAIN_SEPARATOR();\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\\n   */\\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\\n    return super.nonces(owner);\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x2bebbe5c8078e3d300b67d27ed2ac6695f9d17d7c52f0f22879a04353a5c7db1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30857,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_userState","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_allowances","offset":0,"slot":"53","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_totalSupply","offset":0,"slot":"54","type":"t_uint256"},{"astId":30867,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_name","offset":0,"slot":"55","type":"t_string_storage"},{"astId":30869,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_symbol","offset":0,"slot":"56","type":"t_string_storage"},{"astId":30871,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_decimals","offset":0,"slot":"57","type":"t_uint8"},{"astId":30874,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_incentivesController","offset":1,"slot":"57","type":"t_contract(IAaveIncentivesController)4000"},{"astId":30691,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_nonces","offset":0,"slot":"58","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_domainSeparator","offset":0,"slot":"59","type":"t_bytes32"},{"astId":28343,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_treasury","offset":0,"slot":"60","type":"t_address"},{"astId":28345,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_underlyingAsset","offset":0,"slot":"61","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"version":1}}},"contracts/mocks/upgradeability/MockInitializableImplementation.sol":{"MockInitializableFromConstructorImple":{"abi":[{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10992":{"entryPoint":null,"id":10992,"parameterSlots":1,"returnSlots":0},"@getRevision_10982":{"entryPoint":null,"id":10982,"parameterSlots":0,"returnSlots":1},"@initialize_11004":{"entryPoint":66,"id":11004,"parameterSlots":1,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":258,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:615:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:124"},"nodeType":"YulFunctionCall","src":"143:12:124"},"nodeType":"YulExpressionStatement","src":"143:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:124"},"nodeType":"YulFunctionCall","src":"112:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:124"},"nodeType":"YulFunctionCall","src":"108:32:124"},"nodeType":"YulIf","src":"105:52:124"},{"nodeType":"YulAssignment","src":"166:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"182:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"176:5:124"},"nodeType":"YulFunctionCall","src":"176:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"166:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:124","type":""}],"src":"14:184:124"},{"body":{"nodeType":"YulBlock","src":"377:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"394:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"405:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"387:6:124"},"nodeType":"YulFunctionCall","src":"387:21:124"},"nodeType":"YulExpressionStatement","src":"387:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"428:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"439:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"424:3:124"},"nodeType":"YulFunctionCall","src":"424:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"444:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"417:6:124"},"nodeType":"YulFunctionCall","src":"417:30:124"},"nodeType":"YulExpressionStatement","src":"417:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"467:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"478:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"463:3:124"},"nodeType":"YulFunctionCall","src":"463:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"483:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"456:6:124"},"nodeType":"YulFunctionCall","src":"456:62:124"},"nodeType":"YulExpressionStatement","src":"456:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"538:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"549:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"534:3:124"},"nodeType":"YulFunctionCall","src":"534:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"554:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"527:6:124"},"nodeType":"YulFunctionCall","src":"527:44:124"},"nodeType":"YulExpressionStatement","src":"527:44:124"},{"nodeType":"YulAssignment","src":"580:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"592:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"603:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"588:3:124"},"nodeType":"YulFunctionCall","src":"588:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"580:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"354:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"368:4:124","type":""}],"src":"203:410:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b5060405161031c38038061031c83398101604081905261003391610102565b61003c81610042565b5061011b565b60015460029060ff16806100555750303b155b80610061575060005481115b6100c85760405162461bcd60e51b815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201526d195b881a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b60015460ff161580156100e7576001805460ff19168117905560008290555b603483905580156100fd576001805460ff191690555b505050565b60006020828403121561011457600080fd5b5051919050565b6101f28061012a6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633fa4f24514610046578063dde43cba14610061578063fe4b84df14610069575b600080fd5b61004f60345481565b60405190815260200160405180910390f35b61004f600281565b61007c6100773660046101a3565b61007e565b005b60015460029060ff16806100915750303b155b8061009d575060005481115b61012d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561016a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b6034839055801561019e57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6000602082840312156101b557600080fd5b503591905056fea2646970667358221220a2bc2435d5ad67391d31646737c640530fb0e18e55c4e0ad7e41a33496dc9c2c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x31C CODESIZE SUB DUP1 PUSH2 0x31C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x33 SWAP2 PUSH2 0x102 JUMP JUMPDEST PUSH2 0x3C DUP2 PUSH2 0x42 JUMP JUMPDEST POP PUSH2 0x11B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x55 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x61 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xC8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x195B881A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE DUP1 ISZERO PUSH2 0xFD JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F2 DUP1 PUSH2 0x12A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xFE4B84DF EQ PUSH2 0x69 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4F PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x7C PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A3 JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x91 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x9D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x12D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x19E JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG2 0xBC 0x24 CALLDATALOAD 0xD5 0xAD PUSH8 0x391D31646737C640 MSTORE8 0xF 0xB0 0xE1 DUP15 SSTORE 0xC4 0xE0 0xAD PUSH31 0x41A33496DC9C2C64736F6C634300080A003300000000000000000000000000 ","sourceMap":"1601:497:78:-:0;;;928:1:87;886:43;;1967:51:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1998:15;2009:3;1998:10;:15::i;:::-;1967:51;1601:497;;2022:74;1217:12:87;;1738:1:78;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;-1:-1:-1;;;1202:146:87;;405:2:124;1202:146:87;;;387:21:124;444:2;424:18;;;417:30;483:34;463:18;;;456:62;-1:-1:-1;;;534:18:124;;;527:44;588:19;;1202:146:87;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;-1:-1:-1;;1424:19:87;;;;;:12;1451:34;;;1396:96;2080:5:78::1;:11:::0;;;1506:55:87;;;;1534:12;:20;;-1:-1:-1;;1534:20:87;;;1506:55;1158:407;;2022:74:78;:::o;14:184:124:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:124;;14:184;-1:-1:-1;14:184:124:o;203:410::-;1601:497:78;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_10972":{"entryPoint":null,"id":10972,"parameterSlots":0,"returnSlots":0},"@getRevision_10982":{"entryPoint":null,"id":10982,"parameterSlots":0,"returnSlots":1},"@initialize_11004":{"entryPoint":126,"id":11004,"parameterSlots":1,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@value_10969":{"entryPoint":null,"id":10969,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_uint256":{"entryPoint":419,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:793:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:124","statements":[{"nodeType":"YulAssignment","src":"125:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:124"},"nodeType":"YulFunctionCall","src":"133:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:124"},"nodeType":"YulFunctionCall","src":"160:25:124"},"nodeType":"YulExpressionStatement","src":"160:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:124","type":""}],"src":"14:177:124"},{"body":{"nodeType":"YulBlock","src":"266:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:124"},"nodeType":"YulFunctionCall","src":"314:12:124"},"nodeType":"YulExpressionStatement","src":"314:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:124"},"nodeType":"YulFunctionCall","src":"283:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:124"},"nodeType":"YulFunctionCall","src":"279:32:124"},"nodeType":"YulIf","src":"276:52:124"},{"nodeType":"YulAssignment","src":"337:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"360:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"347:12:124"},"nodeType":"YulFunctionCall","src":"347:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"337:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:124","type":""}],"src":"196:180:124"},{"body":{"nodeType":"YulBlock","src":"555:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"572:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"583:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"565:6:124"},"nodeType":"YulFunctionCall","src":"565:21:124"},"nodeType":"YulExpressionStatement","src":"565:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"606:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"617:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"602:3:124"},"nodeType":"YulFunctionCall","src":"602:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"622:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"595:6:124"},"nodeType":"YulFunctionCall","src":"595:30:124"},"nodeType":"YulExpressionStatement","src":"595:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:124"},"nodeType":"YulFunctionCall","src":"641:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"661:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"634:6:124"},"nodeType":"YulFunctionCall","src":"634:62:124"},"nodeType":"YulExpressionStatement","src":"634:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"716:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"727:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"712:3:124"},"nodeType":"YulFunctionCall","src":"712:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"732:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"705:6:124"},"nodeType":"YulFunctionCall","src":"705:44:124"},"nodeType":"YulExpressionStatement","src":"705:44:124"},{"nodeType":"YulAssignment","src":"758:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"770:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"781:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"766:3:124"},"nodeType":"YulFunctionCall","src":"766:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"758:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"546:4:124","type":""}],"src":"381:410:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c80633fa4f24514610046578063dde43cba14610061578063fe4b84df14610069575b600080fd5b61004f60345481565b60405190815260200160405180910390f35b61004f600281565b61007c6100773660046101a3565b61007e565b005b60015460029060ff16806100915750303b155b8061009d575060005481115b61012d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561016a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b6034839055801561019e57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6000602082840312156101b557600080fd5b503591905056fea2646970667358221220a2bc2435d5ad67391d31646737c640530fb0e18e55c4e0ad7e41a33496dc9c2c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xFE4B84DF EQ PUSH2 0x69 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4F PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x7C PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A3 JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x91 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x9D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x12D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x19E JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG2 0xBC 0x24 CALLDATALOAD 0xD5 0xAD PUSH8 0x391D31646737C640 MSTORE8 0xF 0xB0 0xE1 DUP15 SSTORE 0xC4 0xE0 0xAD PUSH31 0x41A33496DC9C2C64736F6C634300080A003300000000000000000000000000 ","sourceMap":"1601:497:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1678:20;;;;;;;;;160:25:124;;;148:2;133:18;1678:20:78;;;;;;;1703:36;;1738:1;1703:36;;2022:74;;;;;;:::i;:::-;;:::i;:::-;;;1217:12:87;;1738:1:78;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;583:2:124;1202:146:87;;;565:21:124;622:2;602:18;;;595:30;661:34;641:18;;;634:62;732:16;712:18;;;705:44;766:19;;1202:146:87;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2080:5:78::1;:11:::0;;;1506:55:87;;;;1534:12;:20;;;;;;1506:55;1158:407;;2022:74:78;:::o;196:180:124:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:124;;196:180;-1:-1:-1;196:180:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"99600","executionCost":"infinite","totalCost":"infinite"},"external":{"REVISION()":"183","initialize(uint256)":"101936","value()":"2261"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","initialize(uint256)":"fe4b84df","value()":"3fa4f245"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/upgradeability/MockInitializableImplementation.sol\":\"MockInitializableFromConstructorImple\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/upgradeability/MockInitializableImplementation.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\n\\ncontract MockInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableImpleV2 is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  constructor(uint256 val) {\\n    initialize(val);\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n  }\\n}\\n\\ncontract MockReentrantInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n    if (value < 2) {\\n      initialize(value + 1);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08dcaae7248f12ffcec322ea174c12d6a9310a59c85e3c11112594ab58f1a2a6\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableFromConstructorImple","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableFromConstructorImple","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableFromConstructorImple","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":10969,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableFromConstructorImple","label":"value","offset":0,"slot":"52","type":"t_uint256"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockInitializableImple":{"abi":[{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"},{"internalType":"string","name":"txt","type":"string"},{"internalType":"uint256[]","name":"vals","type":"uint256[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValueViaProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"values","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b506106bb806100246000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635dd216101161005b5780635dd21610146100b75780635e383d21146100cc578063d31f8b6b146100df578063dde43cba146100f257600080fd5b80631f1bd692146100825780633fa4f245146100a057806355241077146100b7575b600080fd5b61008a6100fa565b60405161009791906103c9565b60405180910390f35b6100a960345481565b604051908152602001610097565b6100ca6100c536600461043c565b603455565b005b6100a96100da36600461043c565b610188565b6100ca6100ed366004610553565b6101a9565b6100a9600181565b6035805461010790610631565b80601f016020809104026020016040519081016040528092919081815260200182805461013390610631565b80156101805780601f1061015557610100808354040283529160200191610180565b820191906000526020600020905b81548152906001019060200180831161016357829003601f168201915b505050505081565b6036818154811061019857600080fd5b600091825260209091200154905081565b6001805460ff16806101ba5750303b155b806101c6575060005481115b610256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561029357600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603485905583516102ab9060359060208701906102f6565b5082516102bf90603690602086019061037a565b5080156102ef57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b82805461030290610631565b90600052602060002090601f016020900481019282610324576000855561036a565b82601f1061033d57805160ff191683800117855561036a565b8280016001018555821561036a579182015b8281111561036a57825182559160200191906001019061034f565b506103769291506103b4565b5090565b82805482825590600052602060002090810192821561036a579160200282018281111561036a57825182559160200191906001019061034f565b5b8082111561037657600081556001016103b5565b600060208083528351808285015260005b818110156103f6578581018301518582016040015282016103da565b81811115610408576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561044e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104cb576104cb610455565b604052919050565b600082601f8301126104e457600080fd5b8135602067ffffffffffffffff82111561050057610500610455565b8160051b61050f828201610484565b928352848101820192828101908785111561052957600080fd5b83870192505b848310156105485782358252918301919083019061052f565b979650505050505050565b60008060006060848603121561056857600080fd5b8335925060208085013567ffffffffffffffff8082111561058857600080fd5b818701915087601f83011261059c57600080fd5b8135818111156105ae576105ae610455565b6105de847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610484565b81815289858386010111156105f257600080fd5b81858501868301376000918101909401529193506040860135918083111561061957600080fd5b5050610627868287016104d3565b9150509250925092565b600181811c9082168061064557607f821691505b6020821081141561067f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220d3b6cd3addccaad77e50ddcd2359885d6a6513a49c0ed2c0635e1967b0a72b2064736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6BB DUP1 PUSH2 0x24 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5DD21610 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5DD21610 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x5E383D21 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xD31F8B6B EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1F1BD692 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x55241077 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0xFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x3C9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA9 PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43C JUMP JUMPDEST PUSH1 0x34 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x43C JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xED CALLDATASIZE PUSH1 0x4 PUSH2 0x553 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST PUSH2 0xA9 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH2 0x107 SWAP1 PUSH2 0x631 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x133 SWAP1 PUSH2 0x631 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x155 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x180 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x163 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x36 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x1BA JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1C6 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x256 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP6 SWAP1 SSTORE DUP4 MLOAD PUSH2 0x2AB SWAP1 PUSH1 0x35 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH2 0x2F6 JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x2BF SWAP1 PUSH1 0x36 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x37A JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x2EF JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x302 SWAP1 PUSH2 0x631 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x324 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x36A JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x33D JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x36A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x36A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x36A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x34F JUMP JUMPDEST POP PUSH2 0x376 SWAP3 SWAP2 POP PUSH2 0x3B4 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x36A JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x36A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x34F JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x376 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3DA JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x408 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4CB JUMPI PUSH2 0x4CB PUSH2 0x455 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x500 JUMPI PUSH2 0x500 PUSH2 0x455 JUMP JUMPDEST DUP2 PUSH1 0x5 SHL PUSH2 0x50F DUP3 DUP3 ADD PUSH2 0x484 JUMP JUMPDEST SWAP3 DUP4 MSTORE DUP5 DUP2 ADD DUP3 ADD SWAP3 DUP3 DUP2 ADD SWAP1 DUP8 DUP6 GT ISZERO PUSH2 0x529 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x548 JUMPI DUP3 CALLDATALOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x52F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x588 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5AE JUMPI PUSH2 0x5AE PUSH2 0x455 JUMP JUMPDEST PUSH2 0x5DE DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x484 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP10 DUP6 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 DUP6 ADD DUP7 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD SWAP1 SWAP5 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 DUP1 DUP4 GT ISZERO PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH2 0x627 DUP7 DUP3 DUP8 ADD PUSH2 0x4D3 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x645 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x67F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xB6 0xCD GASPRICE 0xDD 0xCC 0xAA 0xD7 PUSH31 0x50DDCD2359885D6A6513A49C0ED2C0635E1967B0A72B2064736F6C63430008 EXP STOP CALLER ","sourceMap":"175:711:78:-:0;;;928:1:87;886:43;;175:711:78;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_10841":{"entryPoint":null,"id":10841,"parameterSlots":0,"returnSlots":0},"@getRevision_10851":{"entryPoint":null,"id":10851,"parameterSlots":0,"returnSlots":1},"@initialize_10876":{"entryPoint":425,"id":10876,"parameterSlots":3,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@setValueViaProxy_10896":{"entryPoint":null,"id":10896,"parameterSlots":1,"returnSlots":0},"@setValue_10886":{"entryPoint":null,"id":10886,"parameterSlots":1,"returnSlots":0},"@text_10835":{"entryPoint":250,"id":10835,"parameterSlots":0,"returnSlots":0},"@value_10833":{"entryPoint":null,"id":10833,"parameterSlots":0,"returnSlots":0},"@values_10838":{"entryPoint":392,"id":10838,"parameterSlots":0,"returnSlots":0},"abi_decode_array_uint256_dyn":{"entryPoint":1235,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":1084,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":1363,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":969,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1156,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":1585,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":1109,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4263:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:124"},"nodeType":"YulFunctionCall","src":"166:21:124"},"nodeType":"YulExpressionStatement","src":"166:21:124"},{"nodeType":"YulVariableDeclaration","src":"196:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:124"},"nodeType":"YulFunctionCall","src":"232:34:124"},"nodeType":"YulExpressionStatement","src":"232:34:124"},{"nodeType":"YulVariableDeclaration","src":"275:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:124"},"nodeType":"YulFunctionCall","src":"369:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:124"},"nodeType":"YulFunctionCall","src":"365:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:124"},"nodeType":"YulFunctionCall","src":"403:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:124"},"nodeType":"YulFunctionCall","src":"399:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:124"},"nodeType":"YulFunctionCall","src":"393:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:124"},"nodeType":"YulFunctionCall","src":"358:66:124"},"nodeType":"YulExpressionStatement","src":"358:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:124"},"nodeType":"YulFunctionCall","src":"302:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:124","statements":[{"nodeType":"YulAssignment","src":"318:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:124"},"nodeType":"YulFunctionCall","src":"323:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:124","statements":[]},"src":"294:140:124"},{"body":{"nodeType":"YulBlock","src":"468:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:124"},"nodeType":"YulFunctionCall","src":"493:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:124"},"nodeType":"YulFunctionCall","src":"489:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:124"},"nodeType":"YulFunctionCall","src":"482:42:124"},"nodeType":"YulExpressionStatement","src":"482:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:124"},"nodeType":"YulFunctionCall","src":"446:13:124"},"nodeType":"YulIf","src":"443:91:124"},{"nodeType":"YulAssignment","src":"543:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:124"},"nodeType":"YulFunctionCall","src":"574:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:124"},"nodeType":"YulFunctionCall","src":"570:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:124"},"nodeType":"YulFunctionCall","src":"555:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:124"},"nodeType":"YulFunctionCall","src":"551:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:124","type":""}],"src":"14:656:124"},{"body":{"nodeType":"YulBlock","src":"776:76:124","statements":[{"nodeType":"YulAssignment","src":"786:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"798:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"809:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"794:3:124"},"nodeType":"YulFunctionCall","src":"794:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"786:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"828:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"839:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"821:6:124"},"nodeType":"YulFunctionCall","src":"821:25:124"},"nodeType":"YulExpressionStatement","src":"821:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"745:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"756:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"767:4:124","type":""}],"src":"675:177:124"},{"body":{"nodeType":"YulBlock","src":"927:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"973:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"982:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"985:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"975:6:124"},"nodeType":"YulFunctionCall","src":"975:12:124"},"nodeType":"YulExpressionStatement","src":"975:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"948:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"957:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"944:3:124"},"nodeType":"YulFunctionCall","src":"944:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"969:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"940:3:124"},"nodeType":"YulFunctionCall","src":"940:32:124"},"nodeType":"YulIf","src":"937:52:124"},{"nodeType":"YulAssignment","src":"998:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1021:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1008:12:124"},"nodeType":"YulFunctionCall","src":"1008:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"998:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"893:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"904:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"916:6:124","type":""}],"src":"857:180:124"},{"body":{"nodeType":"YulBlock","src":"1074:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1091:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1094:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1084:6:124"},"nodeType":"YulFunctionCall","src":"1084:88:124"},"nodeType":"YulExpressionStatement","src":"1084:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1188:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1191:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1181:6:124"},"nodeType":"YulFunctionCall","src":"1181:15:124"},"nodeType":"YulExpressionStatement","src":"1181:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1212:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1215:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1205:6:124"},"nodeType":"YulFunctionCall","src":"1205:15:124"},"nodeType":"YulExpressionStatement","src":"1205:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1042:184:124"},{"body":{"nodeType":"YulBlock","src":"1276:289:124","statements":[{"nodeType":"YulAssignment","src":"1286:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1302:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1296:5:124"},"nodeType":"YulFunctionCall","src":"1296:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1286:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1314:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1336:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1352:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"1358:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1348:3:124"},"nodeType":"YulFunctionCall","src":"1348:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"1363:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1344:3:124"},"nodeType":"YulFunctionCall","src":"1344:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1332:3:124"},"nodeType":"YulFunctionCall","src":"1332:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1318:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1506:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1508:16:124"},"nodeType":"YulFunctionCall","src":"1508:18:124"},"nodeType":"YulExpressionStatement","src":"1508:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1449:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1461:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1446:2:124"},"nodeType":"YulFunctionCall","src":"1446:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1485:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1497:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1482:2:124"},"nodeType":"YulFunctionCall","src":"1482:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1443:2:124"},"nodeType":"YulFunctionCall","src":"1443:62:124"},"nodeType":"YulIf","src":"1440:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1544:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1548:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1537:6:124"},"nodeType":"YulFunctionCall","src":"1537:22:124"},"nodeType":"YulExpressionStatement","src":"1537:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1256:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1265:6:124","type":""}],"src":"1231:334:124"},{"body":{"nodeType":"YulBlock","src":"1634:648:124","statements":[{"body":{"nodeType":"YulBlock","src":"1683:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1692:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1695:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1685:6:124"},"nodeType":"YulFunctionCall","src":"1685:12:124"},"nodeType":"YulExpressionStatement","src":"1685:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1662:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1670:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1658:3:124"},"nodeType":"YulFunctionCall","src":"1658:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"1677:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1654:3:124"},"nodeType":"YulFunctionCall","src":"1654:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1647:6:124"},"nodeType":"YulFunctionCall","src":"1647:35:124"},"nodeType":"YulIf","src":"1644:55:124"},{"nodeType":"YulVariableDeclaration","src":"1708:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1731:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1718:12:124"},"nodeType":"YulFunctionCall","src":"1718:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1712:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1747:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1757:4:124","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1751:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1800:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1802:16:124"},"nodeType":"YulFunctionCall","src":"1802:18:124"},"nodeType":"YulExpressionStatement","src":"1802:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1776:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1780:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1773:2:124"},"nodeType":"YulFunctionCall","src":"1773:26:124"},"nodeType":"YulIf","src":"1770:52:124"},{"nodeType":"YulVariableDeclaration","src":"1831:20:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1845:1:124","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"1848:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1841:3:124"},"nodeType":"YulFunctionCall","src":"1841:10:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1835:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1860:39:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1891:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1895:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1887:3:124"},"nodeType":"YulFunctionCall","src":"1887:11:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1871:15:124"},"nodeType":"YulFunctionCall","src":"1871:28:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1864:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1908:16:124","value":{"name":"dst","nodeType":"YulIdentifier","src":"1921:3:124"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"1912:5:124","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1940:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1945:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1933:6:124"},"nodeType":"YulFunctionCall","src":"1933:15:124"},"nodeType":"YulExpressionStatement","src":"1933:15:124"},{"nodeType":"YulAssignment","src":"1957:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1968:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1973:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1964:3:124"},"nodeType":"YulFunctionCall","src":"1964:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1957:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"1985:38:124","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2007:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2015:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2003:3:124"},"nodeType":"YulFunctionCall","src":"2003:15:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2020:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1999:3:124"},"nodeType":"YulFunctionCall","src":"1999:24:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1989:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2051:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2060:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2063:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2053:6:124"},"nodeType":"YulFunctionCall","src":"2053:12:124"},"nodeType":"YulExpressionStatement","src":"2053:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2038:6:124"},{"name":"end","nodeType":"YulIdentifier","src":"2046:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2035:2:124"},"nodeType":"YulFunctionCall","src":"2035:15:124"},"nodeType":"YulIf","src":"2032:35:124"},{"nodeType":"YulVariableDeclaration","src":"2076:26:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2091:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2099:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2087:3:124"},"nodeType":"YulFunctionCall","src":"2087:15:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2080:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2167:86:124","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2188:3:124"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2206:3:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2193:12:124"},"nodeType":"YulFunctionCall","src":"2193:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2181:6:124"},"nodeType":"YulFunctionCall","src":"2181:30:124"},"nodeType":"YulExpressionStatement","src":"2181:30:124"},{"nodeType":"YulAssignment","src":"2224:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2235:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2240:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2231:3:124"},"nodeType":"YulFunctionCall","src":"2231:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2224:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2122:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2127:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2119:2:124"},"nodeType":"YulFunctionCall","src":"2119:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2135:23:124","statements":[{"nodeType":"YulAssignment","src":"2137:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2148:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2153:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2144:3:124"},"nodeType":"YulFunctionCall","src":"2144:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2137:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2115:3:124","statements":[]},"src":"2111:142:124"},{"nodeType":"YulAssignment","src":"2262:14:124","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2271:5:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2262:5:124"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1608:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"1616:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1624:5:124","type":""}],"src":"1570:712:124"},{"body":{"nodeType":"YulBlock","src":"2426:978:124","statements":[{"body":{"nodeType":"YulBlock","src":"2472:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2481:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2484:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2474:6:124"},"nodeType":"YulFunctionCall","src":"2474:12:124"},"nodeType":"YulExpressionStatement","src":"2474:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2447:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2456:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2443:3:124"},"nodeType":"YulFunctionCall","src":"2443:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2468:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2439:3:124"},"nodeType":"YulFunctionCall","src":"2439:32:124"},"nodeType":"YulIf","src":"2436:52:124"},{"nodeType":"YulAssignment","src":"2497:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2520:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2507:12:124"},"nodeType":"YulFunctionCall","src":"2507:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2497:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2539:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2549:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2543:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2560:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2591:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2602:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2587:3:124"},"nodeType":"YulFunctionCall","src":"2587:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2574:12:124"},"nodeType":"YulFunctionCall","src":"2574:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2564:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2615:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2625:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2619:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2670:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2679:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2682:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2672:6:124"},"nodeType":"YulFunctionCall","src":"2672:12:124"},"nodeType":"YulExpressionStatement","src":"2672:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2658:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2666:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2655:2:124"},"nodeType":"YulFunctionCall","src":"2655:14:124"},"nodeType":"YulIf","src":"2652:34:124"},{"nodeType":"YulVariableDeclaration","src":"2695:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2709:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"2720:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2705:3:124"},"nodeType":"YulFunctionCall","src":"2705:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2699:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2775:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2784:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2787:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2777:6:124"},"nodeType":"YulFunctionCall","src":"2777:12:124"},"nodeType":"YulExpressionStatement","src":"2777:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2754:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2758:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2750:3:124"},"nodeType":"YulFunctionCall","src":"2750:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2765:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2746:3:124"},"nodeType":"YulFunctionCall","src":"2746:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2739:6:124"},"nodeType":"YulFunctionCall","src":"2739:35:124"},"nodeType":"YulIf","src":"2736:55:124"},{"nodeType":"YulVariableDeclaration","src":"2800:26:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2823:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2810:12:124"},"nodeType":"YulFunctionCall","src":"2810:16:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2804:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2849:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2851:16:124"},"nodeType":"YulFunctionCall","src":"2851:18:124"},"nodeType":"YulExpressionStatement","src":"2851:18:124"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2841:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2845:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2838:2:124"},"nodeType":"YulFunctionCall","src":"2838:10:124"},"nodeType":"YulIf","src":"2835:36:124"},{"nodeType":"YulVariableDeclaration","src":"2880:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2921:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2925:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2917:3:124"},"nodeType":"YulFunctionCall","src":"2917:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"2932:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2913:3:124"},"nodeType":"YulFunctionCall","src":"2913:86:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3001:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2909:3:124"},"nodeType":"YulFunctionCall","src":"2909:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2893:15:124"},"nodeType":"YulFunctionCall","src":"2893:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"2884:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3021:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"3028:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3014:6:124"},"nodeType":"YulFunctionCall","src":"3014:17:124"},"nodeType":"YulExpressionStatement","src":"3014:17:124"},{"body":{"nodeType":"YulBlock","src":"3077:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3086:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3089:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3079:6:124"},"nodeType":"YulFunctionCall","src":"3079:12:124"},"nodeType":"YulExpressionStatement","src":"3079:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3054:2:124"},{"name":"_4","nodeType":"YulIdentifier","src":"3058:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3050:3:124"},"nodeType":"YulFunctionCall","src":"3050:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3063:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3046:3:124"},"nodeType":"YulFunctionCall","src":"3046:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3068:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3043:2:124"},"nodeType":"YulFunctionCall","src":"3043:33:124"},"nodeType":"YulIf","src":"3040:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3119:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3126:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3115:3:124"},"nodeType":"YulFunctionCall","src":"3115:14:124"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3135:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3139:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3131:3:124"},"nodeType":"YulFunctionCall","src":"3131:11:124"},{"name":"_4","nodeType":"YulIdentifier","src":"3144:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3102:12:124"},"nodeType":"YulFunctionCall","src":"3102:45:124"},"nodeType":"YulExpressionStatement","src":"3102:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3171:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"3178:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3167:3:124"},"nodeType":"YulFunctionCall","src":"3167:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3183:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3163:3:124"},"nodeType":"YulFunctionCall","src":"3163:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3188:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3156:6:124"},"nodeType":"YulFunctionCall","src":"3156:34:124"},"nodeType":"YulExpressionStatement","src":"3156:34:124"},{"nodeType":"YulAssignment","src":"3199:15:124","value":{"name":"array","nodeType":"YulIdentifier","src":"3209:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3199:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3223:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3256:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3267:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3252:3:124"},"nodeType":"YulFunctionCall","src":"3252:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3239:12:124"},"nodeType":"YulFunctionCall","src":"3239:32:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3227:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3300:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3309:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3312:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3302:6:124"},"nodeType":"YulFunctionCall","src":"3302:12:124"},"nodeType":"YulExpressionStatement","src":"3302:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3286:8:124"},{"name":"_2","nodeType":"YulIdentifier","src":"3296:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3283:2:124"},"nodeType":"YulFunctionCall","src":"3283:16:124"},"nodeType":"YulIf","src":"3280:36:124"},{"nodeType":"YulAssignment","src":"3325:73:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3368:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3379:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3364:3:124"},"nodeType":"YulFunctionCall","src":"3364:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3390:7:124"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"3335:28:124"},"nodeType":"YulFunctionCall","src":"3335:63:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3325:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2376:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2387:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2399:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2407:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2415:6:124","type":""}],"src":"2287:1117:124"},{"body":{"nodeType":"YulBlock","src":"3464:382:124","statements":[{"nodeType":"YulAssignment","src":"3474:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3488:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3491:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3484:3:124"},"nodeType":"YulFunctionCall","src":"3484:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3474:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3505:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3535:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"3541:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3531:3:124"},"nodeType":"YulFunctionCall","src":"3531:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3509:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3582:31:124","statements":[{"nodeType":"YulAssignment","src":"3584:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3598:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3606:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3594:3:124"},"nodeType":"YulFunctionCall","src":"3594:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3584:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3562:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3555:6:124"},"nodeType":"YulFunctionCall","src":"3555:26:124"},"nodeType":"YulIf","src":"3552:61:124"},{"body":{"nodeType":"YulBlock","src":"3672:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3693:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3696:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3686:6:124"},"nodeType":"YulFunctionCall","src":"3686:88:124"},"nodeType":"YulExpressionStatement","src":"3686:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3794:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3797:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3787:6:124"},"nodeType":"YulFunctionCall","src":"3787:15:124"},"nodeType":"YulExpressionStatement","src":"3787:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3822:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3825:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3815:6:124"},"nodeType":"YulFunctionCall","src":"3815:15:124"},"nodeType":"YulExpressionStatement","src":"3815:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3628:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3651:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3659:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3648:2:124"},"nodeType":"YulFunctionCall","src":"3648:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3625:2:124"},"nodeType":"YulFunctionCall","src":"3625:38:124"},"nodeType":"YulIf","src":"3622:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3444:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3453:6:124","type":""}],"src":"3409:437:124"},{"body":{"nodeType":"YulBlock","src":"4025:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4053:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4035:6:124"},"nodeType":"YulFunctionCall","src":"4035:21:124"},"nodeType":"YulExpressionStatement","src":"4035:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4076:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4087:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4072:3:124"},"nodeType":"YulFunctionCall","src":"4072:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4092:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4065:6:124"},"nodeType":"YulFunctionCall","src":"4065:30:124"},"nodeType":"YulExpressionStatement","src":"4065:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4115:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4126:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4111:3:124"},"nodeType":"YulFunctionCall","src":"4111:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"4131:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4104:6:124"},"nodeType":"YulFunctionCall","src":"4104:62:124"},"nodeType":"YulExpressionStatement","src":"4104:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4186:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4197:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4182:3:124"},"nodeType":"YulFunctionCall","src":"4182:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"4202:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4175:6:124"},"nodeType":"YulFunctionCall","src":"4175:44:124"},"nodeType":"YulExpressionStatement","src":"4175:44:124"},{"nodeType":"YulAssignment","src":"4228:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4240:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4251:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4236:3:124"},"nodeType":"YulFunctionCall","src":"4236:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4228:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4002:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4016:4:124","type":""}],"src":"3851:410:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let _3 := shl(5, _1)\n        let dst := allocate_memory(add(_3, _2))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, _3), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_4, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _4)\n        if gt(add(add(_3, _4), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_3, _1), _4)\n        mstore(add(add(array, _4), _1), 0)\n        value1 := array\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _2) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061007d5760003560e01c80635dd216101161005b5780635dd21610146100b75780635e383d21146100cc578063d31f8b6b146100df578063dde43cba146100f257600080fd5b80631f1bd692146100825780633fa4f245146100a057806355241077146100b7575b600080fd5b61008a6100fa565b60405161009791906103c9565b60405180910390f35b6100a960345481565b604051908152602001610097565b6100ca6100c536600461043c565b603455565b005b6100a96100da36600461043c565b610188565b6100ca6100ed366004610553565b6101a9565b6100a9600181565b6035805461010790610631565b80601f016020809104026020016040519081016040528092919081815260200182805461013390610631565b80156101805780601f1061015557610100808354040283529160200191610180565b820191906000526020600020905b81548152906001019060200180831161016357829003601f168201915b505050505081565b6036818154811061019857600080fd5b600091825260209091200154905081565b6001805460ff16806101ba5750303b155b806101c6575060005481115b610256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561029357600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603485905583516102ab9060359060208701906102f6565b5082516102bf90603690602086019061037a565b5080156102ef57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b82805461030290610631565b90600052602060002090601f016020900481019282610324576000855561036a565b82601f1061033d57805160ff191683800117855561036a565b8280016001018555821561036a579182015b8281111561036a57825182559160200191906001019061034f565b506103769291506103b4565b5090565b82805482825590600052602060002090810192821561036a579160200282018281111561036a57825182559160200191906001019061034f565b5b8082111561037657600081556001016103b5565b600060208083528351808285015260005b818110156103f6578581018301518582016040015282016103da565b81811115610408576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561044e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104cb576104cb610455565b604052919050565b600082601f8301126104e457600080fd5b8135602067ffffffffffffffff82111561050057610500610455565b8160051b61050f828201610484565b928352848101820192828101908785111561052957600080fd5b83870192505b848310156105485782358252918301919083019061052f565b979650505050505050565b60008060006060848603121561056857600080fd5b8335925060208085013567ffffffffffffffff8082111561058857600080fd5b818701915087601f83011261059c57600080fd5b8135818111156105ae576105ae610455565b6105de847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610484565b81815289858386010111156105f257600080fd5b81858501868301376000918101909401529193506040860135918083111561061957600080fd5b5050610627868287016104d3565b9150509250925092565b600181811c9082168061064557607f821691505b6020821081141561067f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220d3b6cd3addccaad77e50ddcd2359885d6a6513a49c0ed2c0635e1967b0a72b2064736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5DD21610 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5DD21610 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x5E383D21 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xD31F8B6B EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1F1BD692 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x55241077 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0xFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x3C9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA9 PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43C JUMP JUMPDEST PUSH1 0x34 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x43C JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xED CALLDATASIZE PUSH1 0x4 PUSH2 0x553 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST PUSH2 0xA9 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH2 0x107 SWAP1 PUSH2 0x631 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x133 SWAP1 PUSH2 0x631 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x155 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x180 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x163 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x36 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x1BA JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1C6 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x256 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP6 SWAP1 SSTORE DUP4 MLOAD PUSH2 0x2AB SWAP1 PUSH1 0x35 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH2 0x2F6 JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x2BF SWAP1 PUSH1 0x36 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x37A JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x2EF JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x302 SWAP1 PUSH2 0x631 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x324 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x36A JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x33D JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x36A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x36A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x36A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x34F JUMP JUMPDEST POP PUSH2 0x376 SWAP3 SWAP2 POP PUSH2 0x3B4 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x36A JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x36A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x34F JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x376 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3DA JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x408 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4CB JUMPI PUSH2 0x4CB PUSH2 0x455 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x500 JUMPI PUSH2 0x500 PUSH2 0x455 JUMP JUMPDEST DUP2 PUSH1 0x5 SHL PUSH2 0x50F DUP3 DUP3 ADD PUSH2 0x484 JUMP JUMPDEST SWAP3 DUP4 MSTORE DUP5 DUP2 ADD DUP3 ADD SWAP3 DUP3 DUP2 ADD SWAP1 DUP8 DUP6 GT ISZERO PUSH2 0x529 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x548 JUMPI DUP3 CALLDATALOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x52F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x588 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5AE JUMPI PUSH2 0x5AE PUSH2 0x455 JUMP JUMPDEST PUSH2 0x5DE DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x484 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP10 DUP6 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 DUP6 ADD DUP7 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD SWAP1 SWAP5 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 DUP1 DUP4 GT ISZERO PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH2 0x627 DUP7 DUP3 DUP8 ADD PUSH2 0x4D3 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x645 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x67F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xB6 0xCD GASPRICE 0xDD 0xCC 0xAA 0xD7 PUSH31 0x50DDCD2359885D6A6513A49C0ED2C0635E1967B0A72B2064736F6C63430008 EXP STOP CALLER ","sourceMap":"175:711:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;261:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;237:20;;;;;;;;;821:25:124;;;809:2;794:18;237:20:78;675:177:124;732:70:78;;;;;;:::i;:::-;781:5;:16;732:70;;;283:23;;;;;;:::i;:::-;;:::i;575:153::-;;;;;;:::i;:::-;;:::i;311:36::-;;346:1;311:36;;261:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;283:23::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;283:23:78;:::o;575:153::-;346:1;1217:12:87;;;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;4053:2:124;1202:146:87;;;4035:21:124;4092:2;4072:18;;;4065:30;4131:34;4111:18;;;4104:62;4202:16;4182:18;;;4175:44;4236:19;;1202:146:87;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;677:5:78::1;:11:::0;;;694:10;;::::1;::::0;:4:::1;::::0;:10:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;710:13:78;;::::1;::::0;:6:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;575:153:78;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:656:124;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:124;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:124:o;857:180::-;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;-1:-1:-1;1008:23:124;;857:180;-1:-1:-1;857:180:124:o;1042:184::-;1094:77;1091:1;1084:88;1191:4;1188:1;1181:15;1215:4;1212:1;1205:15;1231:334;1302:2;1296:9;1358:2;1348:13;;1363:66;1344:86;1332:99;;1461:18;1446:34;;1482:22;;;1443:62;1440:88;;;1508:18;;:::i;:::-;1544:2;1537:22;1231:334;;-1:-1:-1;1231:334:124:o;1570:712::-;1624:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:55;;1695:1;1692;1685:12;1644:55;1731:6;1718:20;1757:4;1780:18;1776:2;1773:26;1770:52;;;1802:18;;:::i;:::-;1848:2;1845:1;1841:10;1871:28;1895:2;1891;1887:11;1871:28;:::i;:::-;1933:15;;;2003;;;1999:24;;;1964:12;;;;2035:15;;;2032:35;;;2063:1;2060;2053:12;2032:35;2099:2;2091:6;2087:15;2076:26;;2111:142;2127:6;2122:3;2119:15;2111:142;;;2193:17;;2181:30;;2144:12;;;;2231;;;;2111:142;;;2271:5;1570:712;-1:-1:-1;;;;;;;1570:712:124:o;2287:1117::-;2399:6;2407;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2520:9;2507:23;2497:33;;2549:2;2602;2591:9;2587:18;2574:32;2625:18;2666:2;2658:6;2655:14;2652:34;;;2682:1;2679;2672:12;2652:34;2720:6;2709:9;2705:22;2695:32;;2765:7;2758:4;2754:2;2750:13;2746:27;2736:55;;2787:1;2784;2777:12;2736:55;2823:2;2810:16;2845:2;2841;2838:10;2835:36;;;2851:18;;:::i;:::-;2893:112;3001:2;2932:66;2925:4;2921:2;2917:13;2913:86;2909:95;2893:112;:::i;:::-;3028:2;3021:5;3014:17;3068:7;3063:2;3058;3054;3050:11;3046:20;3043:33;3040:53;;;3089:1;3086;3079:12;3040:53;3144:2;3139;3135;3131:11;3126:2;3119:5;3115:14;3102:45;3188:1;3167:14;;;3163:23;;;3156:34;3171:5;;-1:-1:-1;3267:2:124;3252:18;;3239:32;;3283:16;;;3280:36;;;3312:1;3309;3302:12;3280:36;;;3335:63;3390:7;3379:8;3368:9;3364:24;3335:63;:::i;:::-;3325:73;;;2287:1117;;;;;:::o;3409:437::-;3488:1;3484:12;;;;3531;;;3552:61;;3606:4;3598:6;3594:17;3584:27;;3552:61;3659:2;3651:6;3648:14;3628:18;3625:38;3622:218;;;3696:77;3693:1;3686:88;3797:4;3794:1;3787:15;3825:4;3822:1;3815:15;3622:218;;3409:437;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"344600","executionCost":"5386","totalCost":"349986"},"external":{"REVISION()":"261","initialize(uint256,string,uint256[])":"infinite","setValue(uint256)":"22357","setValueViaProxy(uint256)":"22312","text()":"infinite","value()":"2318","values(uint256)":"4597"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","initialize(uint256,string,uint256[])":"d31f8b6b","setValue(uint256)":"55241077","setValueViaProxy(uint256)":"5dd21610","text()":"1f1bd692","value()":"3fa4f245","values(uint256)":"5e383d21"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"txt\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"vals\",\"type\":\"uint256[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setValueViaProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"text\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"values\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/upgradeability/MockInitializableImplementation.sol\":\"MockInitializableImple\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/upgradeability/MockInitializableImplementation.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\n\\ncontract MockInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableImpleV2 is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  constructor(uint256 val) {\\n    initialize(val);\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n  }\\n}\\n\\ncontract MockReentrantInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n    if (value < 2) {\\n      initialize(value + 1);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08dcaae7248f12ffcec322ea174c12d6a9310a59c85e3c11112594ab58f1a2a6\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":10833,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"value","offset":0,"slot":"52","type":"t_uint256"},{"astId":10835,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"text","offset":0,"slot":"53","type":"t_string_storage"},{"astId":10838,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"values","offset":0,"slot":"54","type":"t_array(t_uint256)dyn_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockInitializableImpleV2":{"abi":[{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"},{"internalType":"string","name":"txt","type":"string"},{"internalType":"uint256[]","name":"vals","type":"uint256[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValueViaProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"values","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b506106bd806100246000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635dd216101161005b5780635dd21610146100b75780635e383d21146100cc578063d31f8b6b146100df578063dde43cba146100f257600080fd5b80631f1bd692146100825780633fa4f245146100a057806355241077146100b7575b600080fd5b61008a6100fa565b60405161009791906103cb565b60405180910390f35b6100a960345481565b604051908152602001610097565b6100ca6100c536600461043e565b603455565b005b6100a96100da36600461043e565b610188565b6100ca6100ed366004610555565b6101a9565b6100a9600281565b6035805461010790610633565b80601f016020809104026020016040519081016040528092919081815260200182805461013390610633565b80156101805780601f1061015557610100808354040283529160200191610180565b820191906000526020600020905b81548152906001019060200180831161016357829003601f168201915b505050505081565b6036818154811061019857600080fd5b600091825260209091200154905081565b60015460029060ff16806101bc5750303b155b806101c8575060005481115b610258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561029557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603485905583516102ad9060359060208701906102f8565b5082516102c190603690602086019061037c565b5080156102f157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b82805461030490610633565b90600052602060002090601f016020900481019282610326576000855561036c565b82601f1061033f57805160ff191683800117855561036c565b8280016001018555821561036c579182015b8281111561036c578251825591602001919060010190610351565b506103789291506103b6565b5090565b82805482825590600052602060002090810192821561036c579160200282018281111561036c578251825591602001919060010190610351565b5b8082111561037857600081556001016103b7565b600060208083528351808285015260005b818110156103f8578581018301518582016040015282016103dc565b8181111561040a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561045057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104cd576104cd610457565b604052919050565b600082601f8301126104e657600080fd5b8135602067ffffffffffffffff82111561050257610502610457565b8160051b610511828201610486565b928352848101820192828101908785111561052b57600080fd5b83870192505b8483101561054a57823582529183019190830190610531565b979650505050505050565b60008060006060848603121561056a57600080fd5b8335925060208085013567ffffffffffffffff8082111561058a57600080fd5b818701915087601f83011261059e57600080fd5b8135818111156105b0576105b0610457565b6105e0847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610486565b81815289858386010111156105f457600080fd5b81858501868301376000918101909401529193506040860135918083111561061b57600080fd5b5050610629868287016104d5565b9150509250925092565b600181811c9082168061064757607f821691505b60208210811415610681577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220dbdb4dbe8b906b01dd3c7aece96898d531211bd2ec2f1ce7291d50984a10766264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6BD DUP1 PUSH2 0x24 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5DD21610 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5DD21610 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x5E383D21 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xD31F8B6B EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1F1BD692 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x55241077 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0xFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA9 PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x34 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x43E JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xED CALLDATASIZE PUSH1 0x4 PUSH2 0x555 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST PUSH2 0xA9 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH2 0x107 SWAP1 PUSH2 0x633 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x133 SWAP1 PUSH2 0x633 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x155 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x180 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x163 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x36 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x1BC JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1C8 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x258 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP6 SWAP1 SSTORE DUP4 MLOAD PUSH2 0x2AD SWAP1 PUSH1 0x35 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH2 0x2F8 JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x2C1 SWAP1 PUSH1 0x36 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x37C JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x304 SWAP1 PUSH2 0x633 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x326 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x36C JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x33F JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x36C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x36C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x36C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x351 JUMP JUMPDEST POP PUSH2 0x378 SWAP3 SWAP2 POP PUSH2 0x3B6 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x36C JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x36C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x351 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3B7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F8 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3DC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x40A JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4CD JUMPI PUSH2 0x4CD PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x502 JUMPI PUSH2 0x502 PUSH2 0x457 JUMP JUMPDEST DUP2 PUSH1 0x5 SHL PUSH2 0x511 DUP3 DUP3 ADD PUSH2 0x486 JUMP JUMPDEST SWAP3 DUP4 MSTORE DUP5 DUP2 ADD DUP3 ADD SWAP3 DUP3 DUP2 ADD SWAP1 DUP8 DUP6 GT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x54A JUMPI DUP3 CALLDATALOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x531 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x56A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5B0 JUMPI PUSH2 0x5B0 PUSH2 0x457 JUMP JUMPDEST PUSH2 0x5E0 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x486 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP10 DUP6 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 DUP6 ADD DUP7 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD SWAP1 SWAP5 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 DUP1 DUP4 GT ISZERO PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH2 0x629 DUP7 DUP3 DUP8 ADD PUSH2 0x4D5 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x647 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x681 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xDB 0x4D 0xBE DUP12 SWAP1 PUSH12 0x1DD3C7AECE96898D531211B 0xD2 0xEC 0x2F SHR 0xE7 0x29 SAR POP SWAP9 0x4A LT PUSH23 0x6264736F6C634300080A00330000000000000000000000 ","sourceMap":"888:711:78:-:0;;;928:1:87;886:43;;888:711:78;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_10909":{"entryPoint":null,"id":10909,"parameterSlots":0,"returnSlots":0},"@getRevision_10919":{"entryPoint":null,"id":10919,"parameterSlots":0,"returnSlots":1},"@initialize_10944":{"entryPoint":425,"id":10944,"parameterSlots":3,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@setValueViaProxy_10964":{"entryPoint":null,"id":10964,"parameterSlots":1,"returnSlots":0},"@setValue_10954":{"entryPoint":null,"id":10954,"parameterSlots":1,"returnSlots":0},"@text_10903":{"entryPoint":250,"id":10903,"parameterSlots":0,"returnSlots":0},"@value_10901":{"entryPoint":null,"id":10901,"parameterSlots":0,"returnSlots":0},"@values_10906":{"entryPoint":392,"id":10906,"parameterSlots":0,"returnSlots":0},"abi_decode_array_uint256_dyn":{"entryPoint":1237,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":1086,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":1365,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":971,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1158,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":1587,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":1111,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4263:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:124"},"nodeType":"YulFunctionCall","src":"166:21:124"},"nodeType":"YulExpressionStatement","src":"166:21:124"},{"nodeType":"YulVariableDeclaration","src":"196:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:124"},"nodeType":"YulFunctionCall","src":"232:34:124"},"nodeType":"YulExpressionStatement","src":"232:34:124"},{"nodeType":"YulVariableDeclaration","src":"275:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:124"},"nodeType":"YulFunctionCall","src":"369:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:124"},"nodeType":"YulFunctionCall","src":"365:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:124"},"nodeType":"YulFunctionCall","src":"403:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:124"},"nodeType":"YulFunctionCall","src":"399:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:124"},"nodeType":"YulFunctionCall","src":"393:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:124"},"nodeType":"YulFunctionCall","src":"358:66:124"},"nodeType":"YulExpressionStatement","src":"358:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:124"},"nodeType":"YulFunctionCall","src":"302:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:124","statements":[{"nodeType":"YulAssignment","src":"318:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:124"},"nodeType":"YulFunctionCall","src":"323:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:124","statements":[]},"src":"294:140:124"},{"body":{"nodeType":"YulBlock","src":"468:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:124"},"nodeType":"YulFunctionCall","src":"493:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:124"},"nodeType":"YulFunctionCall","src":"489:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:124"},"nodeType":"YulFunctionCall","src":"482:42:124"},"nodeType":"YulExpressionStatement","src":"482:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:124"},"nodeType":"YulFunctionCall","src":"446:13:124"},"nodeType":"YulIf","src":"443:91:124"},{"nodeType":"YulAssignment","src":"543:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:124"},"nodeType":"YulFunctionCall","src":"574:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:124"},"nodeType":"YulFunctionCall","src":"570:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:124"},"nodeType":"YulFunctionCall","src":"555:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:124"},"nodeType":"YulFunctionCall","src":"551:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:124","type":""}],"src":"14:656:124"},{"body":{"nodeType":"YulBlock","src":"776:76:124","statements":[{"nodeType":"YulAssignment","src":"786:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"798:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"809:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"794:3:124"},"nodeType":"YulFunctionCall","src":"794:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"786:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"828:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"839:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"821:6:124"},"nodeType":"YulFunctionCall","src":"821:25:124"},"nodeType":"YulExpressionStatement","src":"821:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"745:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"756:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"767:4:124","type":""}],"src":"675:177:124"},{"body":{"nodeType":"YulBlock","src":"927:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"973:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"982:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"985:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"975:6:124"},"nodeType":"YulFunctionCall","src":"975:12:124"},"nodeType":"YulExpressionStatement","src":"975:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"948:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"957:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"944:3:124"},"nodeType":"YulFunctionCall","src":"944:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"969:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"940:3:124"},"nodeType":"YulFunctionCall","src":"940:32:124"},"nodeType":"YulIf","src":"937:52:124"},{"nodeType":"YulAssignment","src":"998:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1021:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1008:12:124"},"nodeType":"YulFunctionCall","src":"1008:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"998:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"893:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"904:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"916:6:124","type":""}],"src":"857:180:124"},{"body":{"nodeType":"YulBlock","src":"1074:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1091:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1094:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1084:6:124"},"nodeType":"YulFunctionCall","src":"1084:88:124"},"nodeType":"YulExpressionStatement","src":"1084:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1188:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1191:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1181:6:124"},"nodeType":"YulFunctionCall","src":"1181:15:124"},"nodeType":"YulExpressionStatement","src":"1181:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1212:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1215:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1205:6:124"},"nodeType":"YulFunctionCall","src":"1205:15:124"},"nodeType":"YulExpressionStatement","src":"1205:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1042:184:124"},{"body":{"nodeType":"YulBlock","src":"1276:289:124","statements":[{"nodeType":"YulAssignment","src":"1286:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1302:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1296:5:124"},"nodeType":"YulFunctionCall","src":"1296:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1286:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1314:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1336:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1352:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"1358:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1348:3:124"},"nodeType":"YulFunctionCall","src":"1348:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"1363:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1344:3:124"},"nodeType":"YulFunctionCall","src":"1344:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1332:3:124"},"nodeType":"YulFunctionCall","src":"1332:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1318:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1506:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1508:16:124"},"nodeType":"YulFunctionCall","src":"1508:18:124"},"nodeType":"YulExpressionStatement","src":"1508:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1449:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1461:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1446:2:124"},"nodeType":"YulFunctionCall","src":"1446:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1485:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1497:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1482:2:124"},"nodeType":"YulFunctionCall","src":"1482:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1443:2:124"},"nodeType":"YulFunctionCall","src":"1443:62:124"},"nodeType":"YulIf","src":"1440:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1544:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1548:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1537:6:124"},"nodeType":"YulFunctionCall","src":"1537:22:124"},"nodeType":"YulExpressionStatement","src":"1537:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1256:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1265:6:124","type":""}],"src":"1231:334:124"},{"body":{"nodeType":"YulBlock","src":"1634:648:124","statements":[{"body":{"nodeType":"YulBlock","src":"1683:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1692:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1695:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1685:6:124"},"nodeType":"YulFunctionCall","src":"1685:12:124"},"nodeType":"YulExpressionStatement","src":"1685:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1662:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1670:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1658:3:124"},"nodeType":"YulFunctionCall","src":"1658:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"1677:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1654:3:124"},"nodeType":"YulFunctionCall","src":"1654:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1647:6:124"},"nodeType":"YulFunctionCall","src":"1647:35:124"},"nodeType":"YulIf","src":"1644:55:124"},{"nodeType":"YulVariableDeclaration","src":"1708:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1731:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1718:12:124"},"nodeType":"YulFunctionCall","src":"1718:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1712:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1747:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1757:4:124","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1751:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1800:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1802:16:124"},"nodeType":"YulFunctionCall","src":"1802:18:124"},"nodeType":"YulExpressionStatement","src":"1802:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1776:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1780:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1773:2:124"},"nodeType":"YulFunctionCall","src":"1773:26:124"},"nodeType":"YulIf","src":"1770:52:124"},{"nodeType":"YulVariableDeclaration","src":"1831:20:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1845:1:124","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"1848:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1841:3:124"},"nodeType":"YulFunctionCall","src":"1841:10:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1835:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1860:39:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1891:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1895:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1887:3:124"},"nodeType":"YulFunctionCall","src":"1887:11:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1871:15:124"},"nodeType":"YulFunctionCall","src":"1871:28:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1864:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1908:16:124","value":{"name":"dst","nodeType":"YulIdentifier","src":"1921:3:124"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"1912:5:124","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1940:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1945:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1933:6:124"},"nodeType":"YulFunctionCall","src":"1933:15:124"},"nodeType":"YulExpressionStatement","src":"1933:15:124"},{"nodeType":"YulAssignment","src":"1957:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1968:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1973:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1964:3:124"},"nodeType":"YulFunctionCall","src":"1964:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1957:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"1985:38:124","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2007:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2015:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2003:3:124"},"nodeType":"YulFunctionCall","src":"2003:15:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2020:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1999:3:124"},"nodeType":"YulFunctionCall","src":"1999:24:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1989:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2051:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2060:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2063:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2053:6:124"},"nodeType":"YulFunctionCall","src":"2053:12:124"},"nodeType":"YulExpressionStatement","src":"2053:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2038:6:124"},{"name":"end","nodeType":"YulIdentifier","src":"2046:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2035:2:124"},"nodeType":"YulFunctionCall","src":"2035:15:124"},"nodeType":"YulIf","src":"2032:35:124"},{"nodeType":"YulVariableDeclaration","src":"2076:26:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2091:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2099:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2087:3:124"},"nodeType":"YulFunctionCall","src":"2087:15:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2080:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2167:86:124","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2188:3:124"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2206:3:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2193:12:124"},"nodeType":"YulFunctionCall","src":"2193:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2181:6:124"},"nodeType":"YulFunctionCall","src":"2181:30:124"},"nodeType":"YulExpressionStatement","src":"2181:30:124"},{"nodeType":"YulAssignment","src":"2224:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2235:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2240:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2231:3:124"},"nodeType":"YulFunctionCall","src":"2231:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2224:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2122:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2127:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2119:2:124"},"nodeType":"YulFunctionCall","src":"2119:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2135:23:124","statements":[{"nodeType":"YulAssignment","src":"2137:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2148:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2153:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2144:3:124"},"nodeType":"YulFunctionCall","src":"2144:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2137:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2115:3:124","statements":[]},"src":"2111:142:124"},{"nodeType":"YulAssignment","src":"2262:14:124","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2271:5:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2262:5:124"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1608:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"1616:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1624:5:124","type":""}],"src":"1570:712:124"},{"body":{"nodeType":"YulBlock","src":"2426:978:124","statements":[{"body":{"nodeType":"YulBlock","src":"2472:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2481:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2484:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2474:6:124"},"nodeType":"YulFunctionCall","src":"2474:12:124"},"nodeType":"YulExpressionStatement","src":"2474:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2447:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2456:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2443:3:124"},"nodeType":"YulFunctionCall","src":"2443:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2468:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2439:3:124"},"nodeType":"YulFunctionCall","src":"2439:32:124"},"nodeType":"YulIf","src":"2436:52:124"},{"nodeType":"YulAssignment","src":"2497:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2520:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2507:12:124"},"nodeType":"YulFunctionCall","src":"2507:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2497:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2539:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2549:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2543:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2560:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2591:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2602:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2587:3:124"},"nodeType":"YulFunctionCall","src":"2587:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2574:12:124"},"nodeType":"YulFunctionCall","src":"2574:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2564:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2615:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2625:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2619:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2670:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2679:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2682:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2672:6:124"},"nodeType":"YulFunctionCall","src":"2672:12:124"},"nodeType":"YulExpressionStatement","src":"2672:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2658:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2666:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2655:2:124"},"nodeType":"YulFunctionCall","src":"2655:14:124"},"nodeType":"YulIf","src":"2652:34:124"},{"nodeType":"YulVariableDeclaration","src":"2695:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2709:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"2720:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2705:3:124"},"nodeType":"YulFunctionCall","src":"2705:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2699:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2775:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2784:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2787:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2777:6:124"},"nodeType":"YulFunctionCall","src":"2777:12:124"},"nodeType":"YulExpressionStatement","src":"2777:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2754:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2758:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2750:3:124"},"nodeType":"YulFunctionCall","src":"2750:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2765:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2746:3:124"},"nodeType":"YulFunctionCall","src":"2746:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2739:6:124"},"nodeType":"YulFunctionCall","src":"2739:35:124"},"nodeType":"YulIf","src":"2736:55:124"},{"nodeType":"YulVariableDeclaration","src":"2800:26:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2823:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2810:12:124"},"nodeType":"YulFunctionCall","src":"2810:16:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2804:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2849:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2851:16:124"},"nodeType":"YulFunctionCall","src":"2851:18:124"},"nodeType":"YulExpressionStatement","src":"2851:18:124"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2841:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2845:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2838:2:124"},"nodeType":"YulFunctionCall","src":"2838:10:124"},"nodeType":"YulIf","src":"2835:36:124"},{"nodeType":"YulVariableDeclaration","src":"2880:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2921:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2925:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2917:3:124"},"nodeType":"YulFunctionCall","src":"2917:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"2932:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2913:3:124"},"nodeType":"YulFunctionCall","src":"2913:86:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3001:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2909:3:124"},"nodeType":"YulFunctionCall","src":"2909:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2893:15:124"},"nodeType":"YulFunctionCall","src":"2893:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"2884:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3021:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"3028:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3014:6:124"},"nodeType":"YulFunctionCall","src":"3014:17:124"},"nodeType":"YulExpressionStatement","src":"3014:17:124"},{"body":{"nodeType":"YulBlock","src":"3077:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3086:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3089:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3079:6:124"},"nodeType":"YulFunctionCall","src":"3079:12:124"},"nodeType":"YulExpressionStatement","src":"3079:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3054:2:124"},{"name":"_4","nodeType":"YulIdentifier","src":"3058:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3050:3:124"},"nodeType":"YulFunctionCall","src":"3050:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3063:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3046:3:124"},"nodeType":"YulFunctionCall","src":"3046:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3068:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3043:2:124"},"nodeType":"YulFunctionCall","src":"3043:33:124"},"nodeType":"YulIf","src":"3040:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3119:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3126:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3115:3:124"},"nodeType":"YulFunctionCall","src":"3115:14:124"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3135:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3139:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3131:3:124"},"nodeType":"YulFunctionCall","src":"3131:11:124"},{"name":"_4","nodeType":"YulIdentifier","src":"3144:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3102:12:124"},"nodeType":"YulFunctionCall","src":"3102:45:124"},"nodeType":"YulExpressionStatement","src":"3102:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3171:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"3178:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3167:3:124"},"nodeType":"YulFunctionCall","src":"3167:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3183:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3163:3:124"},"nodeType":"YulFunctionCall","src":"3163:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3188:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3156:6:124"},"nodeType":"YulFunctionCall","src":"3156:34:124"},"nodeType":"YulExpressionStatement","src":"3156:34:124"},{"nodeType":"YulAssignment","src":"3199:15:124","value":{"name":"array","nodeType":"YulIdentifier","src":"3209:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3199:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3223:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3256:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3267:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3252:3:124"},"nodeType":"YulFunctionCall","src":"3252:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3239:12:124"},"nodeType":"YulFunctionCall","src":"3239:32:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3227:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3300:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3309:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3312:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3302:6:124"},"nodeType":"YulFunctionCall","src":"3302:12:124"},"nodeType":"YulExpressionStatement","src":"3302:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3286:8:124"},{"name":"_2","nodeType":"YulIdentifier","src":"3296:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3283:2:124"},"nodeType":"YulFunctionCall","src":"3283:16:124"},"nodeType":"YulIf","src":"3280:36:124"},{"nodeType":"YulAssignment","src":"3325:73:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3368:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3379:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3364:3:124"},"nodeType":"YulFunctionCall","src":"3364:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3390:7:124"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"3335:28:124"},"nodeType":"YulFunctionCall","src":"3335:63:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3325:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2376:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2387:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2399:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2407:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2415:6:124","type":""}],"src":"2287:1117:124"},{"body":{"nodeType":"YulBlock","src":"3464:382:124","statements":[{"nodeType":"YulAssignment","src":"3474:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3488:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3491:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3484:3:124"},"nodeType":"YulFunctionCall","src":"3484:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3474:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3505:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3535:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"3541:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3531:3:124"},"nodeType":"YulFunctionCall","src":"3531:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3509:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3582:31:124","statements":[{"nodeType":"YulAssignment","src":"3584:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3598:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3606:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3594:3:124"},"nodeType":"YulFunctionCall","src":"3594:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3584:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3562:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3555:6:124"},"nodeType":"YulFunctionCall","src":"3555:26:124"},"nodeType":"YulIf","src":"3552:61:124"},{"body":{"nodeType":"YulBlock","src":"3672:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3693:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3696:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3686:6:124"},"nodeType":"YulFunctionCall","src":"3686:88:124"},"nodeType":"YulExpressionStatement","src":"3686:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3794:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3797:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3787:6:124"},"nodeType":"YulFunctionCall","src":"3787:15:124"},"nodeType":"YulExpressionStatement","src":"3787:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3822:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3825:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3815:6:124"},"nodeType":"YulFunctionCall","src":"3815:15:124"},"nodeType":"YulExpressionStatement","src":"3815:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3628:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3651:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3659:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3648:2:124"},"nodeType":"YulFunctionCall","src":"3648:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3625:2:124"},"nodeType":"YulFunctionCall","src":"3625:38:124"},"nodeType":"YulIf","src":"3622:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3444:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3453:6:124","type":""}],"src":"3409:437:124"},{"body":{"nodeType":"YulBlock","src":"4025:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4053:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4035:6:124"},"nodeType":"YulFunctionCall","src":"4035:21:124"},"nodeType":"YulExpressionStatement","src":"4035:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4076:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4087:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4072:3:124"},"nodeType":"YulFunctionCall","src":"4072:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4092:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4065:6:124"},"nodeType":"YulFunctionCall","src":"4065:30:124"},"nodeType":"YulExpressionStatement","src":"4065:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4115:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4126:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4111:3:124"},"nodeType":"YulFunctionCall","src":"4111:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"4131:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4104:6:124"},"nodeType":"YulFunctionCall","src":"4104:62:124"},"nodeType":"YulExpressionStatement","src":"4104:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4186:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4197:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4182:3:124"},"nodeType":"YulFunctionCall","src":"4182:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"4202:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4175:6:124"},"nodeType":"YulFunctionCall","src":"4175:44:124"},"nodeType":"YulExpressionStatement","src":"4175:44:124"},{"nodeType":"YulAssignment","src":"4228:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4240:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4251:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4236:3:124"},"nodeType":"YulFunctionCall","src":"4236:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4228:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4002:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4016:4:124","type":""}],"src":"3851:410:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let _3 := shl(5, _1)\n        let dst := allocate_memory(add(_3, _2))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, _3), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_4, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _4)\n        if gt(add(add(_3, _4), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_3, _1), _4)\n        mstore(add(add(array, _4), _1), 0)\n        value1 := array\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _2) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061007d5760003560e01c80635dd216101161005b5780635dd21610146100b75780635e383d21146100cc578063d31f8b6b146100df578063dde43cba146100f257600080fd5b80631f1bd692146100825780633fa4f245146100a057806355241077146100b7575b600080fd5b61008a6100fa565b60405161009791906103cb565b60405180910390f35b6100a960345481565b604051908152602001610097565b6100ca6100c536600461043e565b603455565b005b6100a96100da36600461043e565b610188565b6100ca6100ed366004610555565b6101a9565b6100a9600281565b6035805461010790610633565b80601f016020809104026020016040519081016040528092919081815260200182805461013390610633565b80156101805780601f1061015557610100808354040283529160200191610180565b820191906000526020600020905b81548152906001019060200180831161016357829003601f168201915b505050505081565b6036818154811061019857600080fd5b600091825260209091200154905081565b60015460029060ff16806101bc5750303b155b806101c8575060005481115b610258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561029557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603485905583516102ad9060359060208701906102f8565b5082516102c190603690602086019061037c565b5080156102f157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b82805461030490610633565b90600052602060002090601f016020900481019282610326576000855561036c565b82601f1061033f57805160ff191683800117855561036c565b8280016001018555821561036c579182015b8281111561036c578251825591602001919060010190610351565b506103789291506103b6565b5090565b82805482825590600052602060002090810192821561036c579160200282018281111561036c578251825591602001919060010190610351565b5b8082111561037857600081556001016103b7565b600060208083528351808285015260005b818110156103f8578581018301518582016040015282016103dc565b8181111561040a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561045057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104cd576104cd610457565b604052919050565b600082601f8301126104e657600080fd5b8135602067ffffffffffffffff82111561050257610502610457565b8160051b610511828201610486565b928352848101820192828101908785111561052b57600080fd5b83870192505b8483101561054a57823582529183019190830190610531565b979650505050505050565b60008060006060848603121561056a57600080fd5b8335925060208085013567ffffffffffffffff8082111561058a57600080fd5b818701915087601f83011261059e57600080fd5b8135818111156105b0576105b0610457565b6105e0847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610486565b81815289858386010111156105f457600080fd5b81858501868301376000918101909401529193506040860135918083111561061b57600080fd5b5050610629868287016104d5565b9150509250925092565b600181811c9082168061064757607f821691505b60208210811415610681577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220dbdb4dbe8b906b01dd3c7aece96898d531211bd2ec2f1ce7291d50984a10766264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5DD21610 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5DD21610 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x5E383D21 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xD31F8B6B EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1F1BD692 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x55241077 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0xFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA9 PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x34 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x43E JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xED CALLDATASIZE PUSH1 0x4 PUSH2 0x555 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST PUSH2 0xA9 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH2 0x107 SWAP1 PUSH2 0x633 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x133 SWAP1 PUSH2 0x633 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x155 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x180 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x163 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x36 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x1BC JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1C8 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x258 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP6 SWAP1 SSTORE DUP4 MLOAD PUSH2 0x2AD SWAP1 PUSH1 0x35 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH2 0x2F8 JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x2C1 SWAP1 PUSH1 0x36 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x37C JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x304 SWAP1 PUSH2 0x633 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x326 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x36C JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x33F JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x36C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x36C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x36C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x351 JUMP JUMPDEST POP PUSH2 0x378 SWAP3 SWAP2 POP PUSH2 0x3B6 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x36C JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x36C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x351 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3B7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F8 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3DC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x40A JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4CD JUMPI PUSH2 0x4CD PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x502 JUMPI PUSH2 0x502 PUSH2 0x457 JUMP JUMPDEST DUP2 PUSH1 0x5 SHL PUSH2 0x511 DUP3 DUP3 ADD PUSH2 0x486 JUMP JUMPDEST SWAP3 DUP4 MSTORE DUP5 DUP2 ADD DUP3 ADD SWAP3 DUP3 DUP2 ADD SWAP1 DUP8 DUP6 GT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x54A JUMPI DUP3 CALLDATALOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x531 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x56A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5B0 JUMPI PUSH2 0x5B0 PUSH2 0x457 JUMP JUMPDEST PUSH2 0x5E0 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x486 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP10 DUP6 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 DUP6 ADD DUP7 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD SWAP1 SWAP5 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 DUP1 DUP4 GT ISZERO PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH2 0x629 DUP7 DUP3 DUP8 ADD PUSH2 0x4D5 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x647 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x681 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xDB 0x4D 0xBE DUP12 SWAP1 PUSH12 0x1DD3C7AECE96898D531211B 0xD2 0xEC 0x2F SHR 0xE7 0x29 SAR POP SWAP9 0x4A LT PUSH23 0x6264736F6C634300080A00330000000000000000000000 ","sourceMap":"888:711:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;976:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;952:20;;;;;;;;;821:25:124;;;809:2;794:18;952:20:78;675:177:124;1445:70:78;;;;;;:::i;:::-;1494:5;:16;1445:70;;;998:23;;;;;;:::i;:::-;;:::i;1290:151::-;;;;;;:::i;:::-;;:::i;1026:36::-;;1061:1;1026:36;;976:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;998:23::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;998:23:78;:::o;1290:151::-;1217:12:87;;1061:1:78;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;4053:2:124;1202:146:87;;;4035:21:124;4092:2;4072:18;;;4065:30;4131:34;4111:18;;;4104:62;4202:16;4182:18;;;4175:44;4236:19;;1202:146:87;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;1390:5:78::1;:11:::0;;;1407:10;;::::1;::::0;:4:::1;::::0;:10:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;1423:13:78;;::::1;::::0;:6:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1290:151:78;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:656:124;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:124;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:124:o;857:180::-;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;-1:-1:-1;1008:23:124;;857:180;-1:-1:-1;857:180:124:o;1042:184::-;1094:77;1091:1;1084:88;1191:4;1188:1;1181:15;1215:4;1212:1;1205:15;1231:334;1302:2;1296:9;1358:2;1348:13;;1363:66;1344:86;1332:99;;1461:18;1446:34;;1482:22;;;1443:62;1440:88;;;1508:18;;:::i;:::-;1544:2;1537:22;1231:334;;-1:-1:-1;1231:334:124:o;1570:712::-;1624:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:55;;1695:1;1692;1685:12;1644:55;1731:6;1718:20;1757:4;1780:18;1776:2;1773:26;1770:52;;;1802:18;;:::i;:::-;1848:2;1845:1;1841:10;1871:28;1895:2;1891;1887:11;1871:28;:::i;:::-;1933:15;;;2003;;;1999:24;;;1964:12;;;;2035:15;;;2032:35;;;2063:1;2060;2053:12;2032:35;2099:2;2091:6;2087:15;2076:26;;2111:142;2127:6;2122:3;2119:15;2111:142;;;2193:17;;2181:30;;2144:12;;;;2231;;;;2111:142;;;2271:5;1570:712;-1:-1:-1;;;;;;;1570:712:124:o;2287:1117::-;2399:6;2407;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2520:9;2507:23;2497:33;;2549:2;2602;2591:9;2587:18;2574:32;2625:18;2666:2;2658:6;2655:14;2652:34;;;2682:1;2679;2672:12;2652:34;2720:6;2709:9;2705:22;2695:32;;2765:7;2758:4;2754:2;2750:13;2746:27;2736:55;;2787:1;2784;2777:12;2736:55;2823:2;2810:16;2845:2;2841;2838:10;2835:36;;;2851:18;;:::i;:::-;2893:112;3001:2;2932:66;2925:4;2921:2;2917:13;2913:86;2909:95;2893:112;:::i;:::-;3028:2;3021:5;3014:17;3068:7;3063:2;3058;3054;3050:11;3046:20;3043:33;3040:53;;;3089:1;3086;3079:12;3040:53;3144:2;3139;3135;3131:11;3126:2;3119:5;3115:14;3102:45;3188:1;3167:14;;;3163:23;;;3156:34;3171:5;;-1:-1:-1;3267:2:124;3252:18;;3239:32;;3283:16;;;3280:36;;;3312:1;3309;3302:12;3280:36;;;3335:63;3390:7;3379:8;3368:9;3364:24;3335:63;:::i;:::-;3325:73;;;2287:1117;;;;;:::o;3409:437::-;3488:1;3484:12;;;;3531;;;3552:61;;3606:4;3598:6;3594:17;3584:27;;3552:61;3659:2;3651:6;3648:14;3628:18;3625:38;3622:218;;;3696:77;3693:1;3686:88;3797:4;3794:1;3787:15;3825:4;3822:1;3815:15;3622:218;;3409:437;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"345000","executionCost":"5386","totalCost":"350386"},"external":{"REVISION()":"261","initialize(uint256,string,uint256[])":"infinite","setValue(uint256)":"22357","setValueViaProxy(uint256)":"22312","text()":"infinite","value()":"2318","values(uint256)":"4597"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","initialize(uint256,string,uint256[])":"d31f8b6b","setValue(uint256)":"55241077","setValueViaProxy(uint256)":"5dd21610","text()":"1f1bd692","value()":"3fa4f245","values(uint256)":"5e383d21"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"txt\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"vals\",\"type\":\"uint256[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setValueViaProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"text\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"values\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/upgradeability/MockInitializableImplementation.sol\":\"MockInitializableImpleV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/upgradeability/MockInitializableImplementation.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\n\\ncontract MockInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableImpleV2 is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  constructor(uint256 val) {\\n    initialize(val);\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n  }\\n}\\n\\ncontract MockReentrantInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n    if (value < 2) {\\n      initialize(value + 1);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08dcaae7248f12ffcec322ea174c12d6a9310a59c85e3c11112594ab58f1a2a6\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":10901,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"value","offset":0,"slot":"52","type":"t_uint256"},{"astId":10903,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"text","offset":0,"slot":"53","type":"t_string_storage"},{"astId":10906,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"values","offset":0,"slot":"54","type":"t_array(t_uint256)dyn_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockReentrantInitializableImple":{"abi":[{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b5061024c806100246000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633fa4f24514610046578063dde43cba14610061578063fe4b84df14610069575b600080fd5b61004f60345481565b60405190815260200160405180910390f35b61004f600281565b61007c6100773660046101be565b61007e565b005b60015460029060ff16806100915750303b155b8061009d575060005481115b61012d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561016a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b6034839055600283101561018a5761018a603454600161007791906101d7565b80156101b957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6000602082840312156101d057600080fd5b5035919050565b60008219821115610211577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea264697066735822122081ac8aefe5b335fe1b90e2f58dd932add504aa6819d0177e896a574fb7c1ea0d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C DUP1 PUSH2 0x24 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xFE4B84DF EQ PUSH2 0x69 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4F PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x7C PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BE JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x91 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x9D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x12D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x18A JUMPI PUSH2 0x18A PUSH1 0x34 SLOAD PUSH1 0x1 PUSH2 0x77 SWAP2 SWAP1 PUSH2 0x1D7 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x211 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xAC DUP11 0xEF 0xE5 0xB3 CALLDATALOAD INVALID SHL SWAP1 0xE2 CREATE2 DUP14 0xD9 ORIGIN 0xAD 0xD5 DIV 0xAA PUSH9 0x19D0177E896A574FB7 0xC1 0xEA 0xD PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"2100:492:78:-:0;;;928:1:87;886:43;;2100:492:78;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_11012":{"entryPoint":null,"id":11012,"parameterSlots":0,"returnSlots":0},"@getRevision_11022":{"entryPoint":null,"id":11022,"parameterSlots":0,"returnSlots":1},"@initialize_11045":{"entryPoint":126,"id":11045,"parameterSlots":1,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@value_11009":{"entryPoint":null,"id":11009,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_uint256":{"entryPoint":446,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":471,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1080:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:124","statements":[{"nodeType":"YulAssignment","src":"125:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:124"},"nodeType":"YulFunctionCall","src":"133:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:124"},"nodeType":"YulFunctionCall","src":"160:25:124"},"nodeType":"YulExpressionStatement","src":"160:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:124","type":""}],"src":"14:177:124"},{"body":{"nodeType":"YulBlock","src":"266:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:124"},"nodeType":"YulFunctionCall","src":"314:12:124"},"nodeType":"YulExpressionStatement","src":"314:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:124"},"nodeType":"YulFunctionCall","src":"283:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:124"},"nodeType":"YulFunctionCall","src":"279:32:124"},"nodeType":"YulIf","src":"276:52:124"},{"nodeType":"YulAssignment","src":"337:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"360:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"347:12:124"},"nodeType":"YulFunctionCall","src":"347:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"337:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:124","type":""}],"src":"196:180:124"},{"body":{"nodeType":"YulBlock","src":"555:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"572:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"583:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"565:6:124"},"nodeType":"YulFunctionCall","src":"565:21:124"},"nodeType":"YulExpressionStatement","src":"565:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"606:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"617:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"602:3:124"},"nodeType":"YulFunctionCall","src":"602:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"622:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"595:6:124"},"nodeType":"YulFunctionCall","src":"595:30:124"},"nodeType":"YulExpressionStatement","src":"595:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:124"},"nodeType":"YulFunctionCall","src":"641:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"661:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"634:6:124"},"nodeType":"YulFunctionCall","src":"634:62:124"},"nodeType":"YulExpressionStatement","src":"634:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"716:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"727:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"712:3:124"},"nodeType":"YulFunctionCall","src":"712:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"732:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"705:6:124"},"nodeType":"YulFunctionCall","src":"705:44:124"},"nodeType":"YulExpressionStatement","src":"705:44:124"},{"nodeType":"YulAssignment","src":"758:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"770:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"781:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"766:3:124"},"nodeType":"YulFunctionCall","src":"766:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"758:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"546:4:124","type":""}],"src":"381:410:124"},{"body":{"nodeType":"YulBlock","src":"844:234:124","statements":[{"body":{"nodeType":"YulBlock","src":"879:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"900:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"903:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"893:6:124"},"nodeType":"YulFunctionCall","src":"893:88:124"},"nodeType":"YulExpressionStatement","src":"893:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1001:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1004:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"994:6:124"},"nodeType":"YulFunctionCall","src":"994:15:124"},"nodeType":"YulExpressionStatement","src":"994:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1029:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1032:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1022:6:124"},"nodeType":"YulFunctionCall","src":"1022:15:124"},"nodeType":"YulExpressionStatement","src":"1022:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"860:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"867:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"863:3:124"},"nodeType":"YulFunctionCall","src":"863:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"857:2:124"},"nodeType":"YulFunctionCall","src":"857:13:124"},"nodeType":"YulIf","src":"854:193:124"},{"nodeType":"YulAssignment","src":"1056:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1067:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1070:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1063:3:124"},"nodeType":"YulFunctionCall","src":"1063:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"1056:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"827:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"830:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"836:3:124","type":""}],"src":"796:282:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c80633fa4f24514610046578063dde43cba14610061578063fe4b84df14610069575b600080fd5b61004f60345481565b60405190815260200160405180910390f35b61004f600281565b61007c6100773660046101be565b61007e565b005b60015460029060ff16806100915750303b155b8061009d575060005481115b61012d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561016a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b6034839055600283101561018a5761018a603454600161007791906101d7565b80156101b957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6000602082840312156101d057600080fd5b5035919050565b60008219821115610211577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea264697066735822122081ac8aefe5b335fe1b90e2f58dd932add504aa6819d0177e896a574fb7c1ea0d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xFE4B84DF EQ PUSH2 0x69 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4F PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x7C PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BE JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x91 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x9D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x12D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x18A JUMPI PUSH2 0x18A PUSH1 0x34 SLOAD PUSH1 0x1 PUSH2 0x77 SWAP2 SWAP1 PUSH2 0x1D7 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x211 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xAC DUP11 0xEF 0xE5 0xB3 CALLDATALOAD INVALID SHL SWAP1 0xE2 CREATE2 DUP14 0xD9 ORIGIN 0xAD 0xD5 DIV 0xAA PUSH9 0x19D0177E896A574FB7 0xC1 0xEA 0xD PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"2100:492:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:20;;;;;;;;;160:25:124;;;148:2;133:18;2171:20:78;;;;;;;2196:36;;2231:1;2196:36;;2460:130;;;;;;:::i;:::-;;:::i;:::-;;;1217:12:87;;2231:1:78;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;583:2:124;1202:146:87;;;565:21:124;622:2;602:18;;;595:30;661:34;641:18;;;634:62;732:16;712:18;;;705:44;766:19;;1202:146:87;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2518:5:78::1;:11:::0;;;2547:1:::1;2539:9:::0;::::1;2535:51;;;2558:21;2569:5;;2577:1;2569:9;;;;:::i;2558:21::-;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;2460:130:78;:::o;196:180:124:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:124;;196:180;-1:-1:-1;196:180:124:o;796:282::-;836:3;867:1;863:6;860:1;857:13;854:193;;;903:77;900:1;893:88;1004:4;1001:1;994:15;1032:4;1029:1;1022:15;854:193;-1:-1:-1;1063:9:124;;796:282::o"},"gasEstimates":{"creation":{"codeDepositCost":"117600","executionCost":"5171","totalCost":"122771"},"external":{"REVISION()":"183","initialize(uint256)":"infinite","value()":"2261"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","initialize(uint256)":"fe4b84df","value()":"3fa4f245"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/upgradeability/MockInitializableImplementation.sol\":\"MockReentrantInitializableImple\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/mocks/upgradeability/MockInitializableImplementation.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\n\\ncontract MockInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableImpleV2 is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  constructor(uint256 val) {\\n    initialize(val);\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n  }\\n}\\n\\ncontract MockReentrantInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n    if (value < 2) {\\n      initialize(value + 1);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08dcaae7248f12ffcec322ea174c12d6a9310a59c85e3c11112594ab58f1a2a6\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockReentrantInitializableImple","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockReentrantInitializableImple","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockReentrantInitializableImple","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":11009,"contract":"contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockReentrantInitializableImple","label":"value","offset":0,"slot":"52","type":"t_uint256"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/upgradeability/MockStableDebtToken.sol":{"MockStableDebtToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Mint","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":"DEBT_TOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"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":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAverageStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyAndAvgRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"user","type":"address"}],"name":"principalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"burn(address,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned","params":{"amount":"The amount of debt tokens getting burned","from":"The address from which the debt will be burned"},"returns":{"_0":"The total stable debt","_1":"The average stable borrow rate"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"getAverageStableRate()":{"returns":{"_0":"The average stable rate"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getSupplyData()":{"returns":{"_0":"The principal","_1":"The total supply","_2":"The average stable rate","_3":"The timestamp of the last update"}},"getTotalSupplyAndAvgRate()":{"returns":{"_0":"The total supply","_1":"The average rate"}},"getTotalSupplyLastUpdated()":{"returns":{"_0":"The timestamp"}},"getUserLastUpdated(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The timestamp"}},"getUserStableRate(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The stable rate of the user"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt","params":{"amount":"The amount of debt tokens to mint","onBehalfOf":"The address receiving the debt tokens","rate":"The rate of the debt being minted","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if it is the first borrow, false otherwise","_1":"The total stable debt","_2":"The average stable borrow rate"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}},"principalBalanceOf(address)":{"returns":{"_0":"The debt balance of the user since the last burn/mint action"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_11064":{"entryPoint":null,"id":11064,"parameterSlots":1,"returnSlots":0},"@_29052":{"entryPoint":null,"id":29052,"parameterSlots":1,"returnSlots":0},"@_30482":{"entryPoint":null,"id":30482,"parameterSlots":0,"returnSlots":0},"@_30705":{"entryPoint":null,"id":30705,"parameterSlots":0,"returnSlots":0},"@_30916":{"entryPoint":null,"id":30916,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":567,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":606,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":542,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:50:124"},"nodeType":"YulIf","src":"76:70:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:138:124"},{"body":{"nodeType":"YulBlock","src":"252:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:124"},"nodeType":"YulFunctionCall","src":"300:12:124"},"nodeType":"YulExpressionStatement","src":"300:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:124"},"nodeType":"YulFunctionCall","src":"269:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:124"},"nodeType":"YulFunctionCall","src":"265:32:124"},"nodeType":"YulIf","src":"262:52:124"},{"nodeType":"YulVariableDeclaration","src":"323:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:124"},"nodeType":"YulFunctionCall","src":"336:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:124"},"nodeType":"YulFunctionCall","src":"361:38:124"},"nodeType":"YulExpressionStatement","src":"361:38:124"},{"nodeType":"YulAssignment","src":"408:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:124","type":""}],"src":"157:272:124"},{"body":{"nodeType":"YulBlock","src":"546:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:124"},"nodeType":"YulFunctionCall","src":"594:12:124"},"nodeType":"YulExpressionStatement","src":"594:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:32:124"},"nodeType":"YulIf","src":"556:52:124"},{"nodeType":"YulVariableDeclaration","src":"617:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:124"},"nodeType":"YulFunctionCall","src":"630:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:124"},"nodeType":"YulFunctionCall","src":"655:38:124"},"nodeType":"YulExpressionStatement","src":"655:38:124"},{"nodeType":"YulAssignment","src":"702:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:124","type":""}],"src":"434:289:124"},{"body":{"nodeType":"YulBlock","src":"783:325:124","statements":[{"nodeType":"YulAssignment","src":"793:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:124"},"nodeType":"YulFunctionCall","src":"803:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:124","statements":[{"nodeType":"YulAssignment","src":"903:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:124"},"nodeType":"YulFunctionCall","src":"913:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:124"},"nodeType":"YulFunctionCall","src":"874:26:124"},"nodeType":"YulIf","src":"871:61:124"},{"body":{"nodeType":"YulBlock","src":"991:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:124"},"nodeType":"YulFunctionCall","src":"1015:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:31:124"},"nodeType":"YulExpressionStatement","src":"1005:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:124"},"nodeType":"YulFunctionCall","src":"1049:15:124"},"nodeType":"YulExpressionStatement","src":"1049:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:124"},"nodeType":"YulFunctionCall","src":"1077:15:124"},"nodeType":"YulExpressionStatement","src":"1077:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:124"},"nodeType":"YulFunctionCall","src":"967:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:124"},"nodeType":"YulFunctionCall","src":"944:38:124"},"nodeType":"YulIf","src":"941:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:124","type":""}],"src":"728:380:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b5060405162002cb438038062002cb4833981016040819052620000389162000237565b80806040518060400160405280601681526020017f535441424c455f444542545f544f4b454e5f494d504c000000000000000000008152506040518060400160405280601681526020017f535441424c455f444542545f544f4b454e5f494d504c0000000000000000000081525060004660808181525050836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000115919062000237565b6001600160a01b031660a05282516200013690603b90602086019062000178565b5081516200014c90603c90602085019062000178565b50603d805460ff191660ff9290921691909117905550506001600160a01b031660c052506200029b9050565b82805462000186906200025e565b90600052602060002090601f016020900481019282620001aa5760008555620001f5565b82601f10620001c557805160ff1916838001178555620001f5565b82800160010185558215620001f5579182015b82811115620001f5578251825591602001919060010190620001d8565b506200020392915062000207565b5090565b5b8082111562000203576000815560010162000208565b6001600160a01b03811681146200023457600080fd5b50565b6000602082840312156200024a57600080fd5b815162000257816200021e565b9392505050565b600181811c908216806200027357607f821691505b602082108114156200029557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516129cd620002e76000396000818161030501528181610c4501528181611144015281816116a401526117ff015260006118cb01526000610abd01526129cd6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806390f6fcf21161012a578063c04a8a10116100bd578063e655dbd81161008c578063e78c9b3b11610071578063e78c9b3b146105b5578063f3bfc73814610611578063f731e9be1461063857600080fd5b8063e655dbd81461057f578063e74848901461059257600080fd5b8063c04a8a1014610503578063c222ec8a14610516578063c634dfaa14610529578063dd62ed3e1461057157600080fd5b8063a9059cbb116100f9578063a9059cbb1461022e578063b16a19de146104ad578063b3f1c93d146104cb578063b9a7b622146104fb57600080fd5b806390f6fcf21461046357806395d89b411461047d5780639dc29fac14610485578063a457c2d71461022e57600080fd5b80636bd76d24116101a25780637816037611610171578063781603761461036f57806379774338146103ab57806379ce6b8c146103da5780637ecebe001461042d57600080fd5b80636bd76d24146102a757806370a08231146102ed5780637535d2461461030057806375d264131461034c57600080fd5b806323b872dd116101de57806323b872dd1461027c578063313ce5671461028a5780633644e5151461029f578063395093511461022e57600080fd5b806306fdde0314610210578063095ea7b31461022e5780630b52d5581461025157806318160ddd14610266575b600080fd5b610218610640565b604051610225919061233e565b60405180910390f35b61024161023c366004612381565b6106d2565b6040519015158152602001610225565b61026461025f3660046123be565b610742565b005b61026e610a93565b604051908152602001610225565b61024161023c36600461242c565b603d5460405160ff9091168152602001610225565b61026e610ab9565b61026e6102b536600461246d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61026e6102fb3660046124a6565b610af2565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff16610327565b6102186040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103b3610b9e565b6040805194855260208501939093529183015264ffffffffff166060820152608001610225565b6104176103e83660046124a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603e602052604090205464ffffffffff1690565b60405164ffffffffff9091168152602001610225565b61026e61043b3660046124a6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b603f546fffffffffffffffffffffffffffffffff1661026e565b610218610bfa565b610498610493366004612381565b610c09565b60408051928352602083019190915201610225565b60375473ffffffffffffffffffffffffffffffffffffffff16610327565b6104de6104d93660046124c3565b611129565b604080519315158452602084019290925290820152606001610225565b61026e600181565b610264610511366004612381565b6115ab565b610264610524366004612625565b6115ba565b61026e6105373660046124a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61026e61023c36600461246d565b61026461058d3660046124a6565b6118c7565b603f54700100000000000000000000000000000000900464ffffffffff16610417565b61026e6105c33660046124a6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61026e7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b610498611aa5565b6060603b805461064f906126fa565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906126fa565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526000916107399160040161233e565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166107c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50834211156040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525090610837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b5073ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205490610867610ab9565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c0016040516020818303038152906040528051906020012060405160200161091f9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156109a5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50610a5782600161277d565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260346020526040902055610a88898989611ad0565b505050505050505050565b603f54600090610ab4906fffffffffffffffffffffffffffffffff16611b47565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610aea575060355490565b610ab4611b96565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041681610b51575060009392505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603e6020526040812054610b8990839064ffffffffff16611c5b565b9050610b958382611c6f565b95945050505050565b603f546000908190819081906fffffffffffffffffffffffffffffffff16610bc5603a5490565b610bce82611b47565b603f549197909650919450700100000000000000000000000000000000900464ffffffffff1692509050565b6060603c805461064f906126fa565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50600080610cbf86611cc6565b92509250506000610cce610a93565b73ffffffffffffffffffffffffffffffffffffffff881660009081526038602052604081205491925090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16888411610d5957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a55610e53565b610d638985612795565b603a81905591506000610d93610d7886611d4b565b603f546fffffffffffffffffffffffffffffffff1690611c6f565b90506000610daa610da38c611d4b565b8490611c6f565b9050818110610de957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a8190559450610e50565b610e0d610e08610df886611d4b565b610e028486612795565b90611d66565b611da5565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905594505b50505b85891415610ecb5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff169055603e909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169055610f20565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff160217905588851115611049576000610f788a87612795565b9050610f858b8287611e4b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8c16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018390526080810185905260a0810184905273ffffffffffffffffffffffffffffffffffffffff8c169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350611119565b6000611055868b612795565b90506110628b8287611fbc565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018590526080810184905273ffffffffffffffffffffffffffffffffffffffff8c16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b50955093505050505b9250929050565b6000808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906111ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b506112246040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112625761126287898861200c565b60008061126e89611cc6565b925092505061127b610a93565b808452603f546fffffffffffffffffffffffffffffffff1660a08501526112a390899061277d565b603a81905560208401526112b688611d4b565b60408481019190915273ffffffffffffffffffffffffffffffffffffffff8a1660009081526038602052205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16606084015261135261132261131d8a8561277d565b611d4b565b6040850151611331908a611c6f565b61134861133d86611d4b565b606088015190611c6f565b610e02919061277d565b6080840181905261136290611da5565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000969091168602179055603e825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16908117909155603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16919093021790915583015161146190610e089061143690611d4b565b6040860151611446908b90611c6f565b6113486114568860000151611d4b565b60a089015190611c6f565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905560a084015260006114b2828a61277d565b90506114c38a828660000151611e4b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8b16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360808085015160a080870151602080890151604080518881529283018a9052820188905260608201949094529384015282015273ffffffffffffffffffffffffffffffffffffffff808c1691908d16907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a35050602082015160a0909201519015999198509650945050505050565b6115b6338383611ad0565b5050565b60015460039060ff16806115cd5750303b155b806115d9575060005481115b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60015460ff161580156116a257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50611769866120cc565b611772856120df565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a16171790556117f7611b96565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051611884969594939291906127ac565b60405180910390a380156118bb57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061284c565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612869565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b603f5460009081906fffffffffffffffffffffffffffffffff16611ac881611b47565b939092509050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600080611b53603a5490565b905080611b635750600092915050565b6000611b8284603f60109054906101000a900464ffffffffff16611c5b565b9050611b8e8282611c6f565b949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bc16120f2565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000611c688383426120fc565b9392505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611ca457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080611d0a8573ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b905080611d2257600080600093509350935050611d44565b6000611d2d86610af2565b90508181611d3b8282612795565b94509450945050505b9193909250565b633b9aca008181029081048214611d6157600080fd5b919050565b600081156b033b2e3c9fd0803ce800000060028404190484111715611d8a57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b6000611e5683611da5565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9b828261288b565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d5461010090041615611fb557603d546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018690526fffffffffffffffffffffffffffffffff84166044830152610100909204909116906331873e2e90606401600060405180830381600087803b158015611fa157600080fd5b505af1158015610a88573d6000803e3d6000fd5b5050505050565b6000611fc783611da5565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9b82826128bf565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260366020908152604080832093861683529290529081205461204c908390612795565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1906120be9086815260200190565b60405180910390a450505050565b80516115b690603b906020840190612243565b80516115b690603c906020840190612243565b6060610ab4610640565b60008061211064ffffffffff851684612795565b90508061212c576b033b2e3c9fd0803ce8000000915050611c68565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511612162576000612167565b600285035b925066038882915c400061217b8a80611c6f565b81612188576121886128f0565b0491506301e1338061219a838b611c6f565b816121a7576121a76128f0565b0490506000826121b7868861291f565b6121c1919061291f565b600290049050600082856121d5888a61291f565b6121df919061291f565b6121e9919061291f565b60069004905080826301e133806122008a8f61291f565b61220a919061295c565b612220906b033b2e3c9fd0803ce800000061277d565b61222a919061277d565b612234919061277d565b9b9a5050505050505050505050565b82805461224f906126fa565b90600052602060002090601f01602090048101928261227157600085556122b7565b82601f1061228a57805160ff19168380011785556122b7565b828001600101855582156122b7579182015b828111156122b757825182559160200191906001019061229c565b50611e479291505b80821115611e4757600081556001016122bf565b6000815180845260005b818110156122f9576020818501810151868301820152016122dd565b8181111561230b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c6860208301846122d3565b73ffffffffffffffffffffffffffffffffffffffff8116811461237357600080fd5b50565b8035611d6181612351565b6000806040838503121561239457600080fd5b823561239f81612351565b946020939093013593505050565b803560ff81168114611d6157600080fd5b600080600080600080600060e0888a0312156123d957600080fd5b87356123e481612351565b965060208801356123f481612351565b95506040880135945060608801359350612410608089016123ad565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561244157600080fd5b833561244c81612351565b9250602084013561245c81612351565b929592945050506040919091013590565b6000806040838503121561248057600080fd5b823561248b81612351565b9150602083013561249b81612351565b809150509250929050565b6000602082840312156124b857600080fd5b8135611c6881612351565b600080600080608085870312156124d957600080fd5b84356124e481612351565b935060208501356124f481612351565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261254957600080fd5b813567ffffffffffffffff8082111561256457612564612509565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125aa576125aa612509565b816040528381528660208588010111156125c357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f8401126125f557600080fd5b50813567ffffffffffffffff81111561260d57600080fd5b60208301915083602082850101111561112257600080fd5b60008060008060008060008060e0898b03121561264157600080fd5b883561264c81612351565b9750602089013561265c81612351565b965061266a60408a01612376565b955061267860608a016123ad565b9450608089013567ffffffffffffffff8082111561269557600080fd5b6126a18c838d01612538565b955060a08b01359150808211156126b757600080fd5b6126c38c838d01612538565b945060c08b01359150808211156126d957600080fd5b506126e68b828c016125e3565b999c989b5096995094979396929594505050565b600181811c9082168061270e57607f821691505b60208210811415612748577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156127905761279061274e565b500190565b6000828210156127a7576127a761274e565b500390565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a0604082015260006127e460a08301876122d3565b82810360608401526127f681876122d3565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b60006020828403121561285e57600080fd5b8151611c6881612351565b60006020828403121561287b57600080fd5b81518015158114611c6857600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156128b6576128b661274e565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156128e8576128e861274e565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129575761295761274e565b500290565b600082612992577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212208d5d4a4d9868eb87ed712407c926eaf292b8ef9c98a041bcea0c53066edc1fcb64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2CB4 CODESIZE SUB DUP1 PUSH3 0x2CB4 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x237 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441424C455F444542545F544F4B454E5F494D504C00000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441424C455F444542545F544F4B454E5F494D504C00000000000000000000 DUP2 MSTORE POP PUSH1 0x0 CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xEF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x115 SWAP2 SWAP1 PUSH3 0x237 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE DUP3 MLOAD PUSH3 0x136 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x178 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x14C SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x178 JUMP JUMPDEST POP PUSH1 0x3D DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x29B SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x186 SWAP1 PUSH3 0x25E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x1AA JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1F5 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1C5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1F5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1F5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1F5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1D8 JUMP JUMPDEST POP PUSH3 0x203 SWAP3 SWAP2 POP PUSH3 0x207 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x203 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x208 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x257 DUP2 PUSH3 0x21E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x273 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x295 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x29CD PUSH3 0x2E7 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x305 ADD MSTORE DUP2 DUP2 PUSH2 0xC45 ADD MSTORE DUP2 DUP2 PUSH2 0x1144 ADD MSTORE DUP2 DUP2 PUSH2 0x16A4 ADD MSTORE PUSH2 0x17FF ADD MSTORE PUSH1 0x0 PUSH2 0x18CB ADD MSTORE PUSH1 0x0 PUSH2 0xABD ADD MSTORE PUSH2 0x29CD PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90F6FCF2 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC04A8A10 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xE655DBD8 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE78C9B3B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE78C9B3B EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF731E9BE EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xE7484890 EQ PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC634DFAA EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90F6FCF2 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x78160376 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x79774338 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x79CE6B8C EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x266 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x218 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x225 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x23BE JUMP JUMPDEST PUSH2 0x742 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26E PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x246D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH2 0xAF2 JUMP JUMPDEST PUSH2 0x327 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x218 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0xB9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x43B CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x26E JUMP JUMPDEST PUSH2 0x218 PUSH2 0xBFA JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0xC09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x4DE PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x264 PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2625 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST PUSH2 0x26E PUSH2 0x537 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x246D JUMP JUMPDEST PUSH2 0x264 PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH2 0x18C7 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x417 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x5C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1AA5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26FA JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x67B SWAP1 PUSH2 0x26FA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x69D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C8 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6AB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x739 SWAP2 PUSH1 0x4 ADD PUSH2 0x233E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x867 PUSH2 0xAB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x91F SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0xA57 DUP3 PUSH1 0x1 PUSH2 0x277D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xA88 DUP10 DUP10 DUP10 PUSH2 0x1AD0 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 PUSH2 0xAB4 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B47 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAEA JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAB4 PUSH2 0x1B96 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND DUP2 PUSH2 0xB51 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB89 SWAP1 DUP4 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C5B JUMP JUMPDEST SWAP1 POP PUSH2 0xB95 DUP4 DUP3 PUSH2 0x1C6F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC5 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBCE DUP3 PUSH2 0x1B47 JUMP JUMPDEST PUSH1 0x3F SLOAD SWAP2 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26FA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCB2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0xCBF DUP7 PUSH2 0x1CC6 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH1 0x0 PUSH2 0xCCE PUSH2 0xA93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 DUP2 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP5 GT PUSH2 0xD59 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A SSTORE PUSH2 0xE53 JUMP JUMPDEST PUSH2 0xD63 DUP10 DUP6 PUSH2 0x2795 JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP2 POP PUSH1 0x0 PUSH2 0xD93 PUSH2 0xD78 DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x1C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0xDA3 DUP13 PUSH2 0x1D4B JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1C6F JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0xDE9 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP5 POP PUSH2 0xE50 JUMP JUMPDEST PUSH2 0xE0D PUSH2 0xE08 PUSH2 0xDF8 DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH2 0xE02 DUP5 DUP7 PUSH2 0x2795 JUMP JUMPDEST SWAP1 PUSH2 0x1D66 JUMP JUMPDEST PUSH2 0x1DA5 JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE SWAP5 POP JUMPDEST POP POP JUMPDEST DUP6 DUP10 EQ ISZERO PUSH2 0xECB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH1 0x3E SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND SWAP1 SSTORE PUSH2 0xF20 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE DUP9 DUP6 GT ISZERO PUSH2 0x1049 JUMPI PUSH1 0x0 PUSH2 0xF78 DUP11 DUP8 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP PUSH2 0xF85 DUP12 DUP3 DUP8 PUSH2 0x1E4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 DUP2 SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1119 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1055 DUP7 DUP12 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP PUSH2 0x1062 DUP12 DUP3 DUP8 PUSH2 0x1FBC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH32 0x44BD20A79E993BDCC7CBEDF54A3B4D19FB78490124B6B90D04FE3242EEA579E8 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP SWAP6 POP SWAP4 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0x1224 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1262 JUMPI PUSH2 0x1262 DUP8 DUP10 DUP9 PUSH2 0x200C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x126E DUP10 PUSH2 0x1CC6 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x127B PUSH2 0xA93 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x12A3 SWAP1 DUP10 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12B6 DUP9 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1352 PUSH2 0x1322 PUSH2 0x131D DUP11 DUP6 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD PUSH2 0x1331 SWAP1 DUP11 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x133D DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0xE02 SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE PUSH2 0x1362 SWAP1 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP7 SWAP1 SWAP2 AND DUP7 MUL OR SWAP1 SSTORE PUSH1 0x3E DUP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 SWAP4 MUL OR SWAP1 SWAP2 SSTORE DUP4 ADD MLOAD PUSH2 0x1461 SWAP1 PUSH2 0xE08 SWAP1 PUSH2 0x1436 SWAP1 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x1446 SWAP1 DUP12 SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x1456 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x0 PUSH2 0x14B2 DUP3 DUP11 PUSH2 0x277D JUMP JUMPDEST SWAP1 POP PUSH2 0x14C3 DUP11 DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x1E4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x80 DUP1 DUP6 ADD MLOAD PUSH1 0xA0 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP1 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP11 SWAP1 MSTORE DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 ISZERO SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 CALLER DUP4 DUP4 PUSH2 0x1AD0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x15CD JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x15D9 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x1665 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A2 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x175F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0x1769 DUP7 PUSH2 0x20CC JUMP JUMPDEST PUSH2 0x1772 DUP6 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0x17F7 PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1884 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27AC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x18BB JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1934 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1958 SWAP2 SWAP1 PUSH2 0x284C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19E9 SWAP2 SWAP1 PUSH2 0x2869 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC8 DUP2 PUSH2 0x1B47 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B53 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1B63 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B82 DUP5 PUSH1 0x3F PUSH1 0x10 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C5B JUMP JUMPDEST SWAP1 POP PUSH2 0x1B8E DUP3 DUP3 PUSH2 0x1C6F JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BC1 PUSH2 0x20F2 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C68 DUP4 DUP4 TIMESTAMP PUSH2 0x20FC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1CA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1D0A DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1D22 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x1D44 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2D DUP7 PUSH2 0xAF2 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH2 0x1D3B DUP3 DUP3 PUSH2 0x2795 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP POP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1D8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E56 DUP4 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9B DUP3 DUP3 PUSH2 0x288B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND ISZERO PUSH2 0x1FB5 JUMPI PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FC7 DUP4 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9B DUP3 DUP3 PUSH2 0x28BF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x204C SWAP1 DUP4 SWAP1 PUSH2 0x2795 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x20BE SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2243 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2243 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAB4 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2110 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x212C JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1C68 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2162 JUMPI PUSH1 0x0 PUSH2 0x2167 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x217B DUP11 DUP1 PUSH2 0x1C6F JUMP JUMPDEST DUP2 PUSH2 0x2188 JUMPI PUSH2 0x2188 PUSH2 0x28F0 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x219A DUP4 DUP12 PUSH2 0x1C6F JUMP JUMPDEST DUP2 PUSH2 0x21A7 JUMPI PUSH2 0x21A7 PUSH2 0x28F0 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x21B7 DUP7 DUP9 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21C1 SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x21D5 DUP9 DUP11 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21DF SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21E9 SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x2200 DUP11 DUP16 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x220A SWAP2 SWAP1 PUSH2 0x295C JUMP JUMPDEST PUSH2 0x2220 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x222A SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x2234 SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x224F SWAP1 PUSH2 0x26FA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2271 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x22B7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x228A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x22B7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x22B7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x22B7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x229C JUMP JUMPDEST POP PUSH2 0x1E47 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22BF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x22F9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x22DD JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x230B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C68 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x22D3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D61 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x239F DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x23D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x23E4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x23F4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x2410 PUSH1 0x80 DUP10 ADD PUSH2 0x23AD JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x244C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x245C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x248B DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x249B DUP2 PUSH2 0x2351 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C68 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x24E4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x24F4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2564 JUMPI PUSH2 0x2564 PUSH2 0x2509 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x25AA JUMPI PUSH2 0x25AA PUSH2 0x2509 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x25C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x260D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x2641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x264C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x265C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP7 POP PUSH2 0x266A PUSH1 0x40 DUP11 ADD PUSH2 0x2376 JUMP JUMPDEST SWAP6 POP PUSH2 0x2678 PUSH1 0x60 DUP11 ADD PUSH2 0x23AD JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26A1 DUP13 DUP4 DUP14 ADD PUSH2 0x2538 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C3 DUP13 DUP4 DUP14 ADD PUSH2 0x2538 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E6 DUP12 DUP3 DUP13 ADD PUSH2 0x25E3 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x270E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2748 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2790 JUMPI PUSH2 0x2790 PUSH2 0x274E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x27A7 JUMPI PUSH2 0x27A7 PUSH2 0x274E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27E4 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x22D3 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x27F6 DUP2 DUP8 PUSH2 0x22D3 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x285E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C68 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x287B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x28B6 JUMPI PUSH2 0x28B6 PUSH2 0x274E JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x28E8 JUMPI PUSH2 0x28E8 PUSH2 0x274E JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2957 JUMPI PUSH2 0x2957 PUSH2 0x274E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2992 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0x5D 0x4A 0x4D SWAP9 PUSH9 0xEB87ED712407C926EA CALLCODE SWAP3 0xB8 0xEF SWAP13 SWAP9 LOG0 COINBASE 0xBC 0xEA 0xC MSTORE8 MOD PUSH15 0xDC1FCB64736F6C634300080A003300 ","sourceMap":"194:191:79:-:0;;;928:1:87;886:43;;246:48:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;286:4;1853::117;2671:222:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:1:117;630:13:120;619:24;;;;;;2780:4:121;-1:-1:-1;;;;;2780:23:121;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:121;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:121;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:121;:20;;-1:-1:-1;;2851:20:121;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:121;;;-1:-1:-1;194:191:79;;-1:-1:-1;194:191:79;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;194:191:79;;;-1:-1:-1;194:191:79;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:124;-1:-1:-1;;;;;96:31:124;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:124:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;194:191:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_TOKEN_REVISION_29028":{"entryPoint":null,"id":29028,"parameterSlots":0,"returnSlots":0},"@DELEGATION_WITH_SIG_TYPEHASH_30473":{"entryPoint":null,"id":30473,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_30723":{"entryPoint":2745,"id":30723,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_30682":{"entryPoint":null,"id":30682,"parameterSlots":0,"returnSlots":0},"@POOL_30880":{"entryPoint":null,"id":30880,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_ASSET_ADDRESS_29809":{"entryPoint":null,"id":29809,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_29959":{"entryPoint":8434,"id":29959,"parameterSlots":0,"returnSlots":1},"@_approveDelegation_30636":{"entryPoint":6864,"id":30636,"parameterSlots":3,"returnSlots":0},"@_burn_29948":{"entryPoint":8124,"id":29948,"parameterSlots":3,"returnSlots":0},"@_calcTotalSupply_29844":{"entryPoint":6983,"id":29844,"parameterSlots":1,"returnSlots":1},"@_calculateBalanceIncrease_29714":{"entryPoint":7366,"id":29714,"parameterSlots":1,"returnSlots":3},"@_calculateDomainSeparator_30766":{"entryPoint":7062,"id":30766,"parameterSlots":0,"returnSlots":1},"@_decreaseBorrowAllowance_30672":{"entryPoint":8204,"id":30672,"parameterSlots":3,"returnSlots":0},"@_mint_29896":{"entryPoint":7755,"id":29896,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_31299":{"entryPoint":null,"id":31299,"parameterSlots":1,"returnSlots":0},"@_setName_31277":{"entryPoint":8396,"id":31277,"parameterSlots":1,"returnSlots":0},"@_setSymbol_31288":{"entryPoint":8415,"id":31288,"parameterSlots":1,"returnSlots":0},"@allowance_29992":{"entryPoint":null,"id":29992,"parameterSlots":2,"returnSlots":1},"@approveDelegation_30499":{"entryPoint":5547,"id":30499,"parameterSlots":2,"returnSlots":0},"@approve_30008":{"entryPoint":1746,"id":30008,"parameterSlots":2,"returnSlots":1},"@balanceOf_29220":{"entryPoint":2802,"id":29220,"parameterSlots":1,"returnSlots":1},"@balanceOf_30971":{"entryPoint":null,"id":30971,"parameterSlots":1,"returnSlots":1},"@borrowAllowance_30610":{"entryPoint":null,"id":30610,"parameterSlots":2,"returnSlots":1},"@burn_29671":{"entryPoint":3081,"id":29671,"parameterSlots":2,"returnSlots":2},"@calculateCompoundedInterest_23673":{"entryPoint":8444,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":7259,"id":23691,"parameterSlots":2,"returnSlots":1},"@decimals_30946":{"entryPoint":null,"id":30946,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_30058":{"entryPoint":null,"id":30058,"parameterSlots":2,"returnSlots":1},"@delegationWithSig_30592":{"entryPoint":1858,"id":30592,"parameterSlots":7,"returnSlots":0},"@getAverageStableRate_29145":{"entryPoint":null,"id":29145,"parameterSlots":0,"returnSlots":1},"@getIncentivesController_30981":{"entryPoint":null,"id":30981,"parameterSlots":0,"returnSlots":1},"@getRevision_11073":{"entryPoint":null,"id":11073,"parameterSlots":0,"returnSlots":1},"@getSupplyData_29742":{"entryPoint":2974,"id":29742,"parameterSlots":0,"returnSlots":4},"@getTotalSupplyAndAvgRate_29762":{"entryPoint":6821,"id":29762,"parameterSlots":0,"returnSlots":2},"@getTotalSupplyLastUpdated_29784":{"entryPoint":null,"id":29784,"parameterSlots":0,"returnSlots":1},"@getUserLastUpdated_29159":{"entryPoint":null,"id":29159,"parameterSlots":1,"returnSlots":1},"@getUserStableRate_29174":{"entryPoint":null,"id":29174,"parameterSlots":1,"returnSlots":1},"@increaseAllowance_30042":{"entryPoint":null,"id":30042,"parameterSlots":2,"returnSlots":1},"@initialize_29125":{"entryPoint":5562,"id":29125,"parameterSlots":8,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@mint_29444":{"entryPoint":4393,"id":29444,"parameterSlots":4,"returnSlots":3},"@name_30926":{"entryPoint":1600,"id":30926,"parameterSlots":0,"returnSlots":1},"@nonces_30736":{"entryPoint":null,"id":30736,"parameterSlots":1,"returnSlots":1},"@principalBalanceOf_29799":{"entryPoint":null,"id":29799,"parameterSlots":1,"returnSlots":1},"@rayDiv_23792":{"entryPoint":7526,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":7279,"id":23780,"parameterSlots":2,"returnSlots":1},"@setIncentivesController_30995":{"entryPoint":6343,"id":30995,"parameterSlots":1,"returnSlots":0},"@symbol_30936":{"entryPoint":3066,"id":30936,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7589,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_29774":{"entryPoint":2707,"id":29774,"parameterSlots":0,"returnSlots":1},"@totalSupply_30956":{"entryPoint":null,"id":30956,"parameterSlots":0,"returnSlots":1},"@transferFrom_30026":{"entryPoint":null,"id":30026,"parameterSlots":3,"returnSlots":1},"@transfer_29976":{"entryPoint":null,"id":29976,"parameterSlots":2,"returnSlots":1},"@wadToRay_23812":{"entryPoint":7499,"id":23812,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":9078,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":9699,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_string":{"entryPoint":9528,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":9382,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10316,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":9325,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":9260,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":9411,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":9150,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":9089,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10345,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr":{"entryPoint":9765,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_uint8":{"entryPoint":9133,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":8915,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":10156,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":9022,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":10379,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":10109,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":10588,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":10527,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":10431,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10133,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":9978,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":10062,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":10480,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":9481,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":9041,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:17494:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"820:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:124"},"nodeType":"YulFunctionCall","src":"909:12:124"},"nodeType":"YulExpressionStatement","src":"909:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:124"},"nodeType":"YulFunctionCall","src":"840:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:73:124"},"nodeType":"YulIf","src":"830:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:124","type":""}],"src":"775:154:124"},{"body":{"nodeType":"YulBlock","src":"983:85:124","statements":[{"nodeType":"YulAssignment","src":"993:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:124"},"nodeType":"YulFunctionCall","src":"1002:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:124"},"nodeType":"YulFunctionCall","src":"1031:31:124"},"nodeType":"YulExpressionStatement","src":"1031:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:124","type":""}],"src":"934:134:124"},{"body":{"nodeType":"YulBlock","src":"1160:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:124"},"nodeType":"YulFunctionCall","src":"1208:12:124"},"nodeType":"YulExpressionStatement","src":"1208:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:124"},"nodeType":"YulFunctionCall","src":"1177:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:124"},"nodeType":"YulFunctionCall","src":"1173:32:124"},"nodeType":"YulIf","src":"1170:52:124"},{"nodeType":"YulVariableDeclaration","src":"1231:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:124"},"nodeType":"YulFunctionCall","src":"1244:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:124"},"nodeType":"YulFunctionCall","src":"1276:31:124"},"nodeType":"YulExpressionStatement","src":"1276:31:124"},{"nodeType":"YulAssignment","src":"1316:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:124"}]},{"nodeType":"YulAssignment","src":"1340:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:124","type":""}],"src":"1073:315:124"},{"body":{"nodeType":"YulBlock","src":"1488:92:124","statements":[{"nodeType":"YulAssignment","src":"1498:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:124"},"nodeType":"YulFunctionCall","src":"1558:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:124"},"nodeType":"YulFunctionCall","src":"1551:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:41:124"},"nodeType":"YulExpressionStatement","src":"1533:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:124","type":""}],"src":"1393:187:124"},{"body":{"nodeType":"YulBlock","src":"1632:109:124","statements":[{"nodeType":"YulAssignment","src":"1642:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1664:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1651:12:124"},"nodeType":"YulFunctionCall","src":"1651:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1642:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1719:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1728:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1731:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1721:6:124"},"nodeType":"YulFunctionCall","src":"1721:12:124"},"nodeType":"YulExpressionStatement","src":"1721:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1693:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1704:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1711:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1700:3:124"},"nodeType":"YulFunctionCall","src":"1700:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1690:2:124"},"nodeType":"YulFunctionCall","src":"1690:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1683:6:124"},"nodeType":"YulFunctionCall","src":"1683:35:124"},"nodeType":"YulIf","src":"1680:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1611:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1622:5:124","type":""}],"src":"1585:156:124"},{"body":{"nodeType":"YulBlock","src":"1916:564:124","statements":[{"body":{"nodeType":"YulBlock","src":"1963:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1972:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1975:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1965:6:124"},"nodeType":"YulFunctionCall","src":"1965:12:124"},"nodeType":"YulExpressionStatement","src":"1965:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1937:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1946:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1933:3:124"},"nodeType":"YulFunctionCall","src":"1933:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1958:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1929:3:124"},"nodeType":"YulFunctionCall","src":"1929:33:124"},"nodeType":"YulIf","src":"1926:53:124"},{"nodeType":"YulVariableDeclaration","src":"1988:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2014:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2001:12:124"},"nodeType":"YulFunctionCall","src":"2001:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1992:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2058:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2033:24:124"},"nodeType":"YulFunctionCall","src":"2033:31:124"},"nodeType":"YulExpressionStatement","src":"2033:31:124"},{"nodeType":"YulAssignment","src":"2073:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2083:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2073:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2097:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2129:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2140:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2125:3:124"},"nodeType":"YulFunctionCall","src":"2125:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2112:12:124"},"nodeType":"YulFunctionCall","src":"2112:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2101:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2178:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2153:24:124"},"nodeType":"YulFunctionCall","src":"2153:33:124"},"nodeType":"YulExpressionStatement","src":"2153:33:124"},{"nodeType":"YulAssignment","src":"2195:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2205:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2195:6:124"}]},{"nodeType":"YulAssignment","src":"2221:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2248:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2259:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2244:3:124"},"nodeType":"YulFunctionCall","src":"2244:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2231:12:124"},"nodeType":"YulFunctionCall","src":"2231:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2221:6:124"}]},{"nodeType":"YulAssignment","src":"2272:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2299:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2310:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2295:3:124"},"nodeType":"YulFunctionCall","src":"2295:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2282:12:124"},"nodeType":"YulFunctionCall","src":"2282:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2272:6:124"}]},{"nodeType":"YulAssignment","src":"2323:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2354:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2365:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2350:3:124"},"nodeType":"YulFunctionCall","src":"2350:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2333:16:124"},"nodeType":"YulFunctionCall","src":"2333:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2323:6:124"}]},{"nodeType":"YulAssignment","src":"2379:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2417:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2402:3:124"},"nodeType":"YulFunctionCall","src":"2402:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2389:12:124"},"nodeType":"YulFunctionCall","src":"2389:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2379:6:124"}]},{"nodeType":"YulAssignment","src":"2431:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2458:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2469:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2454:3:124"},"nodeType":"YulFunctionCall","src":"2454:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2441:12:124"},"nodeType":"YulFunctionCall","src":"2441:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2431:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1834:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1845:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1857:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1865:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1873:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1881:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1889:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1897:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1905:6:124","type":""}],"src":"1746:734:124"},{"body":{"nodeType":"YulBlock","src":"2586:76:124","statements":[{"nodeType":"YulAssignment","src":"2596:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2608:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2619:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2604:3:124"},"nodeType":"YulFunctionCall","src":"2604:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2596:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2638:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2649:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2631:6:124"},"nodeType":"YulFunctionCall","src":"2631:25:124"},"nodeType":"YulExpressionStatement","src":"2631:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2555:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2566:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2577:4:124","type":""}],"src":"2485:177:124"},{"body":{"nodeType":"YulBlock","src":"2771:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"2817:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2826:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2829:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2819:6:124"},"nodeType":"YulFunctionCall","src":"2819:12:124"},"nodeType":"YulExpressionStatement","src":"2819:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2792:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2801:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2788:3:124"},"nodeType":"YulFunctionCall","src":"2788:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2813:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2784:3:124"},"nodeType":"YulFunctionCall","src":"2784:32:124"},"nodeType":"YulIf","src":"2781:52:124"},{"nodeType":"YulVariableDeclaration","src":"2842:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2868:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2855:12:124"},"nodeType":"YulFunctionCall","src":"2855:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2846:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2912:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2887:24:124"},"nodeType":"YulFunctionCall","src":"2887:31:124"},"nodeType":"YulExpressionStatement","src":"2887:31:124"},{"nodeType":"YulAssignment","src":"2927:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2937:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2927:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2951:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2983:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2994:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2979:3:124"},"nodeType":"YulFunctionCall","src":"2979:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2966:12:124"},"nodeType":"YulFunctionCall","src":"2966:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2955:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3032:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3007:24:124"},"nodeType":"YulFunctionCall","src":"3007:33:124"},"nodeType":"YulExpressionStatement","src":"3007:33:124"},{"nodeType":"YulAssignment","src":"3049:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3059:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3049:6:124"}]},{"nodeType":"YulAssignment","src":"3075:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3102:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3113:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3098:3:124"},"nodeType":"YulFunctionCall","src":"3098:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3085:12:124"},"nodeType":"YulFunctionCall","src":"3085:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3075:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2721:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2732:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2744:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2752:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2760:6:124","type":""}],"src":"2667:456:124"},{"body":{"nodeType":"YulBlock","src":"3225:87:124","statements":[{"nodeType":"YulAssignment","src":"3235:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3247:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3258:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3243:3:124"},"nodeType":"YulFunctionCall","src":"3243:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3235:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3277:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3292:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3300:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3288:3:124"},"nodeType":"YulFunctionCall","src":"3288:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3270:6:124"},"nodeType":"YulFunctionCall","src":"3270:36:124"},"nodeType":"YulExpressionStatement","src":"3270:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3194:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3205:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3216:4:124","type":""}],"src":"3128:184:124"},{"body":{"nodeType":"YulBlock","src":"3418:76:124","statements":[{"nodeType":"YulAssignment","src":"3428:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3440:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3451:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3436:3:124"},"nodeType":"YulFunctionCall","src":"3436:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3428:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3470:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3481:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3463:6:124"},"nodeType":"YulFunctionCall","src":"3463:25:124"},"nodeType":"YulExpressionStatement","src":"3463:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3387:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3398:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3409:4:124","type":""}],"src":"3317:177:124"},{"body":{"nodeType":"YulBlock","src":"3586:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"3632:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3641:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3644:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3634:6:124"},"nodeType":"YulFunctionCall","src":"3634:12:124"},"nodeType":"YulExpressionStatement","src":"3634:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3607:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3616:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3603:3:124"},"nodeType":"YulFunctionCall","src":"3603:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3628:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3599:3:124"},"nodeType":"YulFunctionCall","src":"3599:32:124"},"nodeType":"YulIf","src":"3596:52:124"},{"nodeType":"YulVariableDeclaration","src":"3657:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3683:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3670:12:124"},"nodeType":"YulFunctionCall","src":"3670:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3661:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3727:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3702:24:124"},"nodeType":"YulFunctionCall","src":"3702:31:124"},"nodeType":"YulExpressionStatement","src":"3702:31:124"},{"nodeType":"YulAssignment","src":"3742:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3752:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3742:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3766:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3798:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3809:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3794:3:124"},"nodeType":"YulFunctionCall","src":"3794:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3781:12:124"},"nodeType":"YulFunctionCall","src":"3781:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3770:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3847:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3822:24:124"},"nodeType":"YulFunctionCall","src":"3822:33:124"},"nodeType":"YulExpressionStatement","src":"3822:33:124"},{"nodeType":"YulAssignment","src":"3864:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3874:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3864:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3544:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3555:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3567:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3575:6:124","type":""}],"src":"3499:388:124"},{"body":{"nodeType":"YulBlock","src":"3962:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"4008:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4017:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4020:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4010:6:124"},"nodeType":"YulFunctionCall","src":"4010:12:124"},"nodeType":"YulExpressionStatement","src":"4010:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3983:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3992:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3979:3:124"},"nodeType":"YulFunctionCall","src":"3979:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4004:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3975:3:124"},"nodeType":"YulFunctionCall","src":"3975:32:124"},"nodeType":"YulIf","src":"3972:52:124"},{"nodeType":"YulVariableDeclaration","src":"4033:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4059:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4046:12:124"},"nodeType":"YulFunctionCall","src":"4046:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4037:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4103:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4078:24:124"},"nodeType":"YulFunctionCall","src":"4078:31:124"},"nodeType":"YulExpressionStatement","src":"4078:31:124"},{"nodeType":"YulAssignment","src":"4118:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4128:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4118:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3928:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3939:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3951:6:124","type":""}],"src":"3892:247:124"},{"body":{"nodeType":"YulBlock","src":"4259:125:124","statements":[{"nodeType":"YulAssignment","src":"4269:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4281:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4292:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4277:3:124"},"nodeType":"YulFunctionCall","src":"4277:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4269:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4311:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4326:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4334:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4322:3:124"},"nodeType":"YulFunctionCall","src":"4322:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4304:6:124"},"nodeType":"YulFunctionCall","src":"4304:74:124"},"nodeType":"YulExpressionStatement","src":"4304:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4228:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4239:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4250:4:124","type":""}],"src":"4144:240:124"},{"body":{"nodeType":"YulBlock","src":"4524:125:124","statements":[{"nodeType":"YulAssignment","src":"4534:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4546:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4557:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4542:3:124"},"nodeType":"YulFunctionCall","src":"4542:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4534:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4576:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4591:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4599:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4587:3:124"},"nodeType":"YulFunctionCall","src":"4587:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4569:6:124"},"nodeType":"YulFunctionCall","src":"4569:74:124"},"nodeType":"YulExpressionStatement","src":"4569:74:124"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4493:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4504:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4515:4:124","type":""}],"src":"4389:260:124"},{"body":{"nodeType":"YulBlock","src":"4773:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4790:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4801:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4783:6:124"},"nodeType":"YulFunctionCall","src":"4783:21:124"},"nodeType":"YulExpressionStatement","src":"4783:21:124"},{"nodeType":"YulAssignment","src":"4813:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4839:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4851:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4862:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4847:3:124"},"nodeType":"YulFunctionCall","src":"4847:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"4821:17:124"},"nodeType":"YulFunctionCall","src":"4821:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4813:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4742:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4753:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4764:4:124","type":""}],"src":"4654:218:124"},{"body":{"nodeType":"YulBlock","src":"5060:225:124","statements":[{"nodeType":"YulAssignment","src":"5070:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5082:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5093:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5078:3:124"},"nodeType":"YulFunctionCall","src":"5078:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5070:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5113:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"5124:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5106:6:124"},"nodeType":"YulFunctionCall","src":"5106:25:124"},"nodeType":"YulExpressionStatement","src":"5106:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5151:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5162:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5147:3:124"},"nodeType":"YulFunctionCall","src":"5147:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"5167:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5140:6:124"},"nodeType":"YulFunctionCall","src":"5140:34:124"},"nodeType":"YulExpressionStatement","src":"5140:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5194:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5205:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5190:3:124"},"nodeType":"YulFunctionCall","src":"5190:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"5210:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5183:6:124"},"nodeType":"YulFunctionCall","src":"5183:34:124"},"nodeType":"YulExpressionStatement","src":"5183:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5237:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5248:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5233:3:124"},"nodeType":"YulFunctionCall","src":"5233:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"5257:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5265:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5253:3:124"},"nodeType":"YulFunctionCall","src":"5253:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5226:6:124"},"nodeType":"YulFunctionCall","src":"5226:53:124"},"nodeType":"YulExpressionStatement","src":"5226:53:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5005:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5016:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5024:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5032:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5040:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5051:4:124","type":""}],"src":"4877:408:124"},{"body":{"nodeType":"YulBlock","src":"5389:95:124","statements":[{"nodeType":"YulAssignment","src":"5399:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5411:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5422:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5407:3:124"},"nodeType":"YulFunctionCall","src":"5407:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5399:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5441:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5456:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5464:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5452:3:124"},"nodeType":"YulFunctionCall","src":"5452:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5434:6:124"},"nodeType":"YulFunctionCall","src":"5434:44:124"},"nodeType":"YulExpressionStatement","src":"5434:44:124"}]},"name":"abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5358:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5369:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5380:4:124","type":""}],"src":"5290:194:124"},{"body":{"nodeType":"YulBlock","src":"5618:119:124","statements":[{"nodeType":"YulAssignment","src":"5628:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5651:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:124"},"nodeType":"YulFunctionCall","src":"5636:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5628:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5670:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"5681:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5663:6:124"},"nodeType":"YulFunctionCall","src":"5663:25:124"},"nodeType":"YulExpressionStatement","src":"5663:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5708:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5719:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5704:3:124"},"nodeType":"YulFunctionCall","src":"5704:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"5724:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5697:6:124"},"nodeType":"YulFunctionCall","src":"5697:34:124"},"nodeType":"YulExpressionStatement","src":"5697:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5579:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5590:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5598:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5609:4:124","type":""}],"src":"5489:248:124"},{"body":{"nodeType":"YulBlock","src":"5843:125:124","statements":[{"nodeType":"YulAssignment","src":"5853:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5876:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5861:3:124"},"nodeType":"YulFunctionCall","src":"5861:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5853:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5895:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5910:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5918:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5906:3:124"},"nodeType":"YulFunctionCall","src":"5906:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5888:6:124"},"nodeType":"YulFunctionCall","src":"5888:74:124"},"nodeType":"YulExpressionStatement","src":"5888:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5812:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5823:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5834:4:124","type":""}],"src":"5742:226:124"},{"body":{"nodeType":"YulBlock","src":"6094:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"6141:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6153:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6143:6:124"},"nodeType":"YulFunctionCall","src":"6143:12:124"},"nodeType":"YulExpressionStatement","src":"6143:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6115:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6124:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6111:3:124"},"nodeType":"YulFunctionCall","src":"6111:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6136:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6107:3:124"},"nodeType":"YulFunctionCall","src":"6107:33:124"},"nodeType":"YulIf","src":"6104:53:124"},{"nodeType":"YulVariableDeclaration","src":"6166:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6192:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6179:12:124"},"nodeType":"YulFunctionCall","src":"6179:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6170:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6236:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6211:24:124"},"nodeType":"YulFunctionCall","src":"6211:31:124"},"nodeType":"YulExpressionStatement","src":"6211:31:124"},{"nodeType":"YulAssignment","src":"6251:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6261:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6275:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6307:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6318:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6303:3:124"},"nodeType":"YulFunctionCall","src":"6303:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6290:12:124"},"nodeType":"YulFunctionCall","src":"6290:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6279:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6356:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6331:24:124"},"nodeType":"YulFunctionCall","src":"6331:33:124"},"nodeType":"YulExpressionStatement","src":"6331:33:124"},{"nodeType":"YulAssignment","src":"6373:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6383:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6373:6:124"}]},{"nodeType":"YulAssignment","src":"6399:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6426:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6437:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6422:3:124"},"nodeType":"YulFunctionCall","src":"6422:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6409:12:124"},"nodeType":"YulFunctionCall","src":"6409:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6399:6:124"}]},{"nodeType":"YulAssignment","src":"6450:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6477:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6488:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6473:3:124"},"nodeType":"YulFunctionCall","src":"6473:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:124"},"nodeType":"YulFunctionCall","src":"6460:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6450:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6036:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6047:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6059:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6067:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6075:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6083:6:124","type":""}],"src":"5973:525:124"},{"body":{"nodeType":"YulBlock","src":"6654:178:124","statements":[{"nodeType":"YulAssignment","src":"6664:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6676:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6687:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6672:3:124"},"nodeType":"YulFunctionCall","src":"6672:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6664:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6706:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6731:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6724:6:124"},"nodeType":"YulFunctionCall","src":"6724:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6717:6:124"},"nodeType":"YulFunctionCall","src":"6717:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6699:6:124"},"nodeType":"YulFunctionCall","src":"6699:41:124"},"nodeType":"YulExpressionStatement","src":"6699:41:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6760:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6771:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6756:3:124"},"nodeType":"YulFunctionCall","src":"6756:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"6776:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6749:6:124"},"nodeType":"YulFunctionCall","src":"6749:34:124"},"nodeType":"YulExpressionStatement","src":"6749:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6803:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6814:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6799:3:124"},"nodeType":"YulFunctionCall","src":"6799:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"6819:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6792:6:124"},"nodeType":"YulFunctionCall","src":"6792:34:124"},"nodeType":"YulExpressionStatement","src":"6792:34:124"}]},"name":"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6607:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6618:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6626:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6634:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6645:4:124","type":""}],"src":"6503:329:124"},{"body":{"nodeType":"YulBlock","src":"6869:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6886:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6889:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6879:6:124"},"nodeType":"YulFunctionCall","src":"6879:88:124"},"nodeType":"YulExpressionStatement","src":"6879:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6983:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6986:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6976:6:124"},"nodeType":"YulFunctionCall","src":"6976:15:124"},"nodeType":"YulExpressionStatement","src":"6976:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7007:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7010:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7000:6:124"},"nodeType":"YulFunctionCall","src":"7000:15:124"},"nodeType":"YulExpressionStatement","src":"7000:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6837:184:124"},{"body":{"nodeType":"YulBlock","src":"7079:725:124","statements":[{"body":{"nodeType":"YulBlock","src":"7128:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7137:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7140:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7130:6:124"},"nodeType":"YulFunctionCall","src":"7130:12:124"},"nodeType":"YulExpressionStatement","src":"7130:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7107:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7115:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7103:3:124"},"nodeType":"YulFunctionCall","src":"7103:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7122:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7099:3:124"},"nodeType":"YulFunctionCall","src":"7099:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7092:6:124"},"nodeType":"YulFunctionCall","src":"7092:35:124"},"nodeType":"YulIf","src":"7089:55:124"},{"nodeType":"YulVariableDeclaration","src":"7153:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7176:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7163:12:124"},"nodeType":"YulFunctionCall","src":"7163:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7157:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7192:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7202:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7196:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7243:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7245:16:124"},"nodeType":"YulFunctionCall","src":"7245:18:124"},"nodeType":"YulExpressionStatement","src":"7245:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7235:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"7239:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7232:2:124"},"nodeType":"YulFunctionCall","src":"7232:10:124"},"nodeType":"YulIf","src":"7229:36:124"},{"nodeType":"YulVariableDeclaration","src":"7274:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7284:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7278:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7359:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7379:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7373:5:124"},"nodeType":"YulFunctionCall","src":"7373:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7363:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7391:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7413:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7437:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"7441:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7433:3:124"},"nodeType":"YulFunctionCall","src":"7433:13:124"},{"name":"_3","nodeType":"YulIdentifier","src":"7448:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7429:3:124"},"nodeType":"YulFunctionCall","src":"7429:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"7453:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7425:3:124"},"nodeType":"YulFunctionCall","src":"7425:31:124"},{"name":"_3","nodeType":"YulIdentifier","src":"7458:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7421:3:124"},"nodeType":"YulFunctionCall","src":"7421:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7409:3:124"},"nodeType":"YulFunctionCall","src":"7409:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7395:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7521:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7523:16:124"},"nodeType":"YulFunctionCall","src":"7523:18:124"},"nodeType":"YulExpressionStatement","src":"7523:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7480:10:124"},{"name":"_2","nodeType":"YulIdentifier","src":"7492:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7477:2:124"},"nodeType":"YulFunctionCall","src":"7477:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7500:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7512:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7497:2:124"},"nodeType":"YulFunctionCall","src":"7497:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7474:2:124"},"nodeType":"YulFunctionCall","src":"7474:46:124"},"nodeType":"YulIf","src":"7471:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7559:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7563:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7552:6:124"},"nodeType":"YulFunctionCall","src":"7552:22:124"},"nodeType":"YulExpressionStatement","src":"7552:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7590:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7598:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7583:6:124"},"nodeType":"YulFunctionCall","src":"7583:18:124"},"nodeType":"YulExpressionStatement","src":"7583:18:124"},{"body":{"nodeType":"YulBlock","src":"7649:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7658:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7661:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7651:6:124"},"nodeType":"YulFunctionCall","src":"7651:12:124"},"nodeType":"YulExpressionStatement","src":"7651:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7624:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7632:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7620:3:124"},"nodeType":"YulFunctionCall","src":"7620:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"7637:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7616:3:124"},"nodeType":"YulFunctionCall","src":"7616:26:124"},{"name":"end","nodeType":"YulIdentifier","src":"7644:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7613:2:124"},"nodeType":"YulFunctionCall","src":"7613:35:124"},"nodeType":"YulIf","src":"7610:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7691:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7699:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7687:3:124"},"nodeType":"YulFunctionCall","src":"7687:17:124"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7710:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7718:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7706:3:124"},"nodeType":"YulFunctionCall","src":"7706:17:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7725:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"7674:12:124"},"nodeType":"YulFunctionCall","src":"7674:54:124"},"nodeType":"YulExpressionStatement","src":"7674:54:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7752:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7760:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7748:3:124"},"nodeType":"YulFunctionCall","src":"7748:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"7765:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7744:3:124"},"nodeType":"YulFunctionCall","src":"7744:26:124"},{"kind":"number","nodeType":"YulLiteral","src":"7772:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7737:6:124"},"nodeType":"YulFunctionCall","src":"7737:37:124"},"nodeType":"YulExpressionStatement","src":"7737:37:124"},{"nodeType":"YulAssignment","src":"7783:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7792:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7783:5:124"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7053:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7061:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"7069:5:124","type":""}],"src":"7026:778:124"},{"body":{"nodeType":"YulBlock","src":"7881:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"7930:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7939:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7942:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7932:6:124"},"nodeType":"YulFunctionCall","src":"7932:12:124"},"nodeType":"YulExpressionStatement","src":"7932:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7909:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7917:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7905:3:124"},"nodeType":"YulFunctionCall","src":"7905:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7924:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7901:3:124"},"nodeType":"YulFunctionCall","src":"7901:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7894:6:124"},"nodeType":"YulFunctionCall","src":"7894:35:124"},"nodeType":"YulIf","src":"7891:55:124"},{"nodeType":"YulAssignment","src":"7955:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7978:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7965:12:124"},"nodeType":"YulFunctionCall","src":"7965:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7955:6:124"}]},{"body":{"nodeType":"YulBlock","src":"8028:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8037:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8040:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8030:6:124"},"nodeType":"YulFunctionCall","src":"8030:12:124"},"nodeType":"YulExpressionStatement","src":"8030:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8000:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8008:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7997:2:124"},"nodeType":"YulFunctionCall","src":"7997:30:124"},"nodeType":"YulIf","src":"7994:50:124"},{"nodeType":"YulAssignment","src":"8053:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8069:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8077:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8065:3:124"},"nodeType":"YulFunctionCall","src":"8065:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"8053:8:124"}]},{"body":{"nodeType":"YulBlock","src":"8134:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8143:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8146:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8136:6:124"},"nodeType":"YulFunctionCall","src":"8136:12:124"},"nodeType":"YulExpressionStatement","src":"8136:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8105:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"8113:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8101:3:124"},"nodeType":"YulFunctionCall","src":"8101:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"8122:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8097:3:124"},"nodeType":"YulFunctionCall","src":"8097:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"8129:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8094:2:124"},"nodeType":"YulFunctionCall","src":"8094:39:124"},"nodeType":"YulIf","src":"8091:59:124"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7844:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7852:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7860:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7870:6:124","type":""}],"src":"7809:347:124"},{"body":{"nodeType":"YulBlock","src":"8418:1045:124","statements":[{"body":{"nodeType":"YulBlock","src":"8465:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8474:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8477:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8467:6:124"},"nodeType":"YulFunctionCall","src":"8467:12:124"},"nodeType":"YulExpressionStatement","src":"8467:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8439:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8448:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8435:3:124"},"nodeType":"YulFunctionCall","src":"8435:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8460:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8431:3:124"},"nodeType":"YulFunctionCall","src":"8431:33:124"},"nodeType":"YulIf","src":"8428:53:124"},{"nodeType":"YulVariableDeclaration","src":"8490:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8516:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8503:12:124"},"nodeType":"YulFunctionCall","src":"8503:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8494:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8560:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8535:24:124"},"nodeType":"YulFunctionCall","src":"8535:31:124"},"nodeType":"YulExpressionStatement","src":"8535:31:124"},{"nodeType":"YulAssignment","src":"8575:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"8585:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8575:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8599:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8642:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8627:3:124"},"nodeType":"YulFunctionCall","src":"8627:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8614:12:124"},"nodeType":"YulFunctionCall","src":"8614:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"8603:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8680:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8655:24:124"},"nodeType":"YulFunctionCall","src":"8655:33:124"},"nodeType":"YulExpressionStatement","src":"8655:33:124"},{"nodeType":"YulAssignment","src":"8697:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8707:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8697:6:124"}]},{"nodeType":"YulAssignment","src":"8723:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8756:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8752:3:124"},"nodeType":"YulFunctionCall","src":"8752:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8733:18:124"},"nodeType":"YulFunctionCall","src":"8733:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8723:6:124"}]},{"nodeType":"YulAssignment","src":"8780:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8822:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8807:3:124"},"nodeType":"YulFunctionCall","src":"8807:18:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8790:16:124"},"nodeType":"YulFunctionCall","src":"8790:36:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8780:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8835:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8866:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8877:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8862:3:124"},"nodeType":"YulFunctionCall","src":"8862:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8849:12:124"},"nodeType":"YulFunctionCall","src":"8849:33:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8839:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8891:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8901:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8895:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8946:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8955:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8958:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8948:6:124"},"nodeType":"YulFunctionCall","src":"8948:12:124"},"nodeType":"YulExpressionStatement","src":"8948:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8934:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8942:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8931:2:124"},"nodeType":"YulFunctionCall","src":"8931:14:124"},"nodeType":"YulIf","src":"8928:34:124"},{"nodeType":"YulAssignment","src":"8971:60:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9003:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"9014:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8999:3:124"},"nodeType":"YulFunctionCall","src":"8999:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9023:7:124"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8981:17:124"},"nodeType":"YulFunctionCall","src":"8981:50:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8971:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9040:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9073:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9084:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9069:3:124"},"nodeType":"YulFunctionCall","src":"9069:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9056:12:124"},"nodeType":"YulFunctionCall","src":"9056:33:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"9044:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9118:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9127:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9130:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9120:6:124"},"nodeType":"YulFunctionCall","src":"9120:12:124"},"nodeType":"YulExpressionStatement","src":"9120:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"9104:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9114:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9101:2:124"},"nodeType":"YulFunctionCall","src":"9101:16:124"},"nodeType":"YulIf","src":"9098:36:124"},{"nodeType":"YulAssignment","src":"9143:62:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9175:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"9186:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9171:3:124"},"nodeType":"YulFunctionCall","src":"9171:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9197:7:124"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"9153:17:124"},"nodeType":"YulFunctionCall","src":"9153:52:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"9143:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9214:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9247:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9258:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9243:3:124"},"nodeType":"YulFunctionCall","src":"9243:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9230:12:124"},"nodeType":"YulFunctionCall","src":"9230:33:124"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"9218:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9292:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9301:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9304:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9294:6:124"},"nodeType":"YulFunctionCall","src":"9294:12:124"},"nodeType":"YulExpressionStatement","src":"9294:12:124"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"9278:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9288:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9275:2:124"},"nodeType":"YulFunctionCall","src":"9275:16:124"},"nodeType":"YulIf","src":"9272:36:124"},{"nodeType":"YulVariableDeclaration","src":"9317:86:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9373:9:124"},{"name":"offset_2","nodeType":"YulIdentifier","src":"9384:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9369:3:124"},"nodeType":"YulFunctionCall","src":"9369:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9395:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"9343:25:124"},"nodeType":"YulFunctionCall","src":"9343:60:124"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"9321:8:124","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"9331:8:124","type":""}]},{"nodeType":"YulAssignment","src":"9412:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"9422:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"9412:6:124"}]},{"nodeType":"YulAssignment","src":"9439:18:124","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"9449:8:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"9439:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8328:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8339:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8351:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8359:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8367:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8375:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8383:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8391:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"8399:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"8407:6:124","type":""}],"src":"8161:1302:124"},{"body":{"nodeType":"YulBlock","src":"9572:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"9618:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9627:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9630:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9620:6:124"},"nodeType":"YulFunctionCall","src":"9620:12:124"},"nodeType":"YulExpressionStatement","src":"9620:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9593:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9602:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9589:3:124"},"nodeType":"YulFunctionCall","src":"9589:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9614:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9585:3:124"},"nodeType":"YulFunctionCall","src":"9585:32:124"},"nodeType":"YulIf","src":"9582:52:124"},{"nodeType":"YulVariableDeclaration","src":"9643:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9669:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9656:12:124"},"nodeType":"YulFunctionCall","src":"9656:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9647:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9713:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9688:24:124"},"nodeType":"YulFunctionCall","src":"9688:31:124"},"nodeType":"YulExpressionStatement","src":"9688:31:124"},{"nodeType":"YulAssignment","src":"9728:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9738:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9728:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9538:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9549:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9561:6:124","type":""}],"src":"9468:281:124"},{"body":{"nodeType":"YulBlock","src":"9809:382:124","statements":[{"nodeType":"YulAssignment","src":"9819:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9833:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"9836:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9829:3:124"},"nodeType":"YulFunctionCall","src":"9829:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9819:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9850:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"9880:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"9886:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9876:3:124"},"nodeType":"YulFunctionCall","src":"9876:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"9854:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9927:31:124","statements":[{"nodeType":"YulAssignment","src":"9929:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9943:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9951:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9939:3:124"},"nodeType":"YulFunctionCall","src":"9939:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9929:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9907:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9900:6:124"},"nodeType":"YulFunctionCall","src":"9900:26:124"},"nodeType":"YulIf","src":"9897:61:124"},{"body":{"nodeType":"YulBlock","src":"10017:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10038:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10041:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10031:6:124"},"nodeType":"YulFunctionCall","src":"10031:88:124"},"nodeType":"YulExpressionStatement","src":"10031:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10139:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10142:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10132:6:124"},"nodeType":"YulFunctionCall","src":"10132:15:124"},"nodeType":"YulExpressionStatement","src":"10132:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10167:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10170:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10160:6:124"},"nodeType":"YulFunctionCall","src":"10160:15:124"},"nodeType":"YulExpressionStatement","src":"10160:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9973:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9996:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10004:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9993:2:124"},"nodeType":"YulFunctionCall","src":"9993:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9970:2:124"},"nodeType":"YulFunctionCall","src":"9970:38:124"},"nodeType":"YulIf","src":"9967:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"9789:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"9798:6:124","type":""}],"src":"9754:437:124"},{"body":{"nodeType":"YulBlock","src":"10409:299:124","statements":[{"nodeType":"YulAssignment","src":"10419:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10431:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10442:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10427:3:124"},"nodeType":"YulFunctionCall","src":"10427:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10419:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10462:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"10473:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10455:6:124"},"nodeType":"YulFunctionCall","src":"10455:25:124"},"nodeType":"YulExpressionStatement","src":"10455:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10500:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10511:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10496:3:124"},"nodeType":"YulFunctionCall","src":"10496:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10520:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10528:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10516:3:124"},"nodeType":"YulFunctionCall","src":"10516:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10489:6:124"},"nodeType":"YulFunctionCall","src":"10489:83:124"},"nodeType":"YulExpressionStatement","src":"10489:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10592:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10603:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10588:3:124"},"nodeType":"YulFunctionCall","src":"10588:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"10608:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10581:6:124"},"nodeType":"YulFunctionCall","src":"10581:34:124"},"nodeType":"YulExpressionStatement","src":"10581:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10635:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10646:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10631:3:124"},"nodeType":"YulFunctionCall","src":"10631:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"10651:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10624:6:124"},"nodeType":"YulFunctionCall","src":"10624:34:124"},"nodeType":"YulExpressionStatement","src":"10624:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10678:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10689:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10674:3:124"},"nodeType":"YulFunctionCall","src":"10674:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"10695:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10667:6:124"},"nodeType":"YulFunctionCall","src":"10667:35:124"},"nodeType":"YulExpressionStatement","src":"10667:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10346:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10357:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10365:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10373:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10381:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10389:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10400:4:124","type":""}],"src":"10196:512:124"},{"body":{"nodeType":"YulBlock","src":"10961:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10978:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10983:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10971:6:124"},"nodeType":"YulFunctionCall","src":"10971:79:124"},"nodeType":"YulExpressionStatement","src":"10971:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11070:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"11075:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11066:3:124"},"nodeType":"YulFunctionCall","src":"11066:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11079:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11059:6:124"},"nodeType":"YulFunctionCall","src":"11059:27:124"},"nodeType":"YulExpressionStatement","src":"11059:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11106:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"11111:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11102:3:124"},"nodeType":"YulFunctionCall","src":"11102:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"11116:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11095:6:124"},"nodeType":"YulFunctionCall","src":"11095:28:124"},"nodeType":"YulExpressionStatement","src":"11095:28:124"},{"nodeType":"YulAssignment","src":"11132:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11143:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"11148:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11139:3:124"},"nodeType":"YulFunctionCall","src":"11139:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11132:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10929:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10934:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10942:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10953:3:124","type":""}],"src":"10713:444:124"},{"body":{"nodeType":"YulBlock","src":"11343:217:124","statements":[{"nodeType":"YulAssignment","src":"11353:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11365:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11376:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11361:3:124"},"nodeType":"YulFunctionCall","src":"11361:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11353:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11396:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11407:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11389:6:124"},"nodeType":"YulFunctionCall","src":"11389:25:124"},"nodeType":"YulExpressionStatement","src":"11389:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11434:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11445:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11430:3:124"},"nodeType":"YulFunctionCall","src":"11430:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11454:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11462:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11450:3:124"},"nodeType":"YulFunctionCall","src":"11450:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11423:6:124"},"nodeType":"YulFunctionCall","src":"11423:45:124"},"nodeType":"YulExpressionStatement","src":"11423:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11499:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11484:3:124"},"nodeType":"YulFunctionCall","src":"11484:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"11504:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11477:6:124"},"nodeType":"YulFunctionCall","src":"11477:34:124"},"nodeType":"YulExpressionStatement","src":"11477:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11531:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11542:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11527:3:124"},"nodeType":"YulFunctionCall","src":"11527:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"11547:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11520:6:124"},"nodeType":"YulFunctionCall","src":"11520:34:124"},"nodeType":"YulExpressionStatement","src":"11520:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11288:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11299:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11307:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11315:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11323:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11334:4:124","type":""}],"src":"11162:398:124"},{"body":{"nodeType":"YulBlock","src":"11597:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11614:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11617:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11607:6:124"},"nodeType":"YulFunctionCall","src":"11607:88:124"},"nodeType":"YulExpressionStatement","src":"11607:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11711:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11714:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11704:6:124"},"nodeType":"YulFunctionCall","src":"11704:15:124"},"nodeType":"YulExpressionStatement","src":"11704:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11735:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11738:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11728:6:124"},"nodeType":"YulFunctionCall","src":"11728:15:124"},"nodeType":"YulExpressionStatement","src":"11728:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11565:184:124"},{"body":{"nodeType":"YulBlock","src":"11802:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"11829:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11831:16:124"},"nodeType":"YulFunctionCall","src":"11831:18:124"},"nodeType":"YulExpressionStatement","src":"11831:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11818:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11825:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11821:3:124"},"nodeType":"YulFunctionCall","src":"11821:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11815:2:124"},"nodeType":"YulFunctionCall","src":"11815:13:124"},"nodeType":"YulIf","src":"11812:39:124"},{"nodeType":"YulAssignment","src":"11860:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11871:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11874:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11867:3:124"},"nodeType":"YulFunctionCall","src":"11867:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11860:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11785:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11788:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11794:3:124","type":""}],"src":"11754:128:124"},{"body":{"nodeType":"YulBlock","src":"11936:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"11958:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11960:16:124"},"nodeType":"YulFunctionCall","src":"11960:18:124"},"nodeType":"YulExpressionStatement","src":"11960:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11952:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11955:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11949:2:124"},"nodeType":"YulFunctionCall","src":"11949:8:124"},"nodeType":"YulIf","src":"11946:34:124"},{"nodeType":"YulAssignment","src":"11989:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12001:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"12004:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11997:3:124"},"nodeType":"YulFunctionCall","src":"11997:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11989:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11918:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11921:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11927:4:124","type":""}],"src":"11887:125:124"},{"body":{"nodeType":"YulBlock","src":"12258:294:124","statements":[{"nodeType":"YulAssignment","src":"12268:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12280:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12291:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12276:3:124"},"nodeType":"YulFunctionCall","src":"12276:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12268:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12311:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12322:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12304:6:124"},"nodeType":"YulFunctionCall","src":"12304:25:124"},"nodeType":"YulExpressionStatement","src":"12304:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12349:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12360:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12345:3:124"},"nodeType":"YulFunctionCall","src":"12345:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"12365:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12338:6:124"},"nodeType":"YulFunctionCall","src":"12338:34:124"},"nodeType":"YulExpressionStatement","src":"12338:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12392:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12403:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12388:3:124"},"nodeType":"YulFunctionCall","src":"12388:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12408:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12381:6:124"},"nodeType":"YulFunctionCall","src":"12381:34:124"},"nodeType":"YulExpressionStatement","src":"12381:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12446:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12431:3:124"},"nodeType":"YulFunctionCall","src":"12431:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12451:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12424:6:124"},"nodeType":"YulFunctionCall","src":"12424:34:124"},"nodeType":"YulExpressionStatement","src":"12424:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12478:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12489:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:124"},"nodeType":"YulFunctionCall","src":"12474:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"12495:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:124"},"nodeType":"YulFunctionCall","src":"12467:35:124"},"nodeType":"YulExpressionStatement","src":"12467:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12522:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12533:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12518:3:124"},"nodeType":"YulFunctionCall","src":"12518:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12539:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12511:6:124"},"nodeType":"YulFunctionCall","src":"12511:35:124"},"nodeType":"YulExpressionStatement","src":"12511:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12187:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12198:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12206:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12214:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12222:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12230:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12238:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12249:4:124","type":""}],"src":"12017:535:124"},{"body":{"nodeType":"YulBlock","src":"12770:250:124","statements":[{"nodeType":"YulAssignment","src":"12780:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12792:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12803:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12788:3:124"},"nodeType":"YulFunctionCall","src":"12788:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12780:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12823:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12834:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12816:6:124"},"nodeType":"YulFunctionCall","src":"12816:25:124"},"nodeType":"YulExpressionStatement","src":"12816:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12861:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12872:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12857:3:124"},"nodeType":"YulFunctionCall","src":"12857:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"12877:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12850:6:124"},"nodeType":"YulFunctionCall","src":"12850:34:124"},"nodeType":"YulExpressionStatement","src":"12850:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12904:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12915:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12900:3:124"},"nodeType":"YulFunctionCall","src":"12900:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12920:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12893:6:124"},"nodeType":"YulFunctionCall","src":"12893:34:124"},"nodeType":"YulExpressionStatement","src":"12893:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12947:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12958:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12943:3:124"},"nodeType":"YulFunctionCall","src":"12943:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12963:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12936:6:124"},"nodeType":"YulFunctionCall","src":"12936:34:124"},"nodeType":"YulExpressionStatement","src":"12936:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12990:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13001:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12986:3:124"},"nodeType":"YulFunctionCall","src":"12986:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"13007:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12979:6:124"},"nodeType":"YulFunctionCall","src":"12979:35:124"},"nodeType":"YulExpressionStatement","src":"12979:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12707:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12718:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12726:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12734:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12742:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12750:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12761:4:124","type":""}],"src":"12557:463:124"},{"body":{"nodeType":"YulBlock","src":"13199:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13216:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13227:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13209:6:124"},"nodeType":"YulFunctionCall","src":"13209:21:124"},"nodeType":"YulExpressionStatement","src":"13209:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13250:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13261:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13246:3:124"},"nodeType":"YulFunctionCall","src":"13246:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"13266:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13239:6:124"},"nodeType":"YulFunctionCall","src":"13239:30:124"},"nodeType":"YulExpressionStatement","src":"13239:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13289:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13300:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13285:3:124"},"nodeType":"YulFunctionCall","src":"13285:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"13305:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13278:6:124"},"nodeType":"YulFunctionCall","src":"13278:62:124"},"nodeType":"YulExpressionStatement","src":"13278:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13360:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13371:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13356:3:124"},"nodeType":"YulFunctionCall","src":"13356:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"13376:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13349:6:124"},"nodeType":"YulFunctionCall","src":"13349:44:124"},"nodeType":"YulExpressionStatement","src":"13349:44:124"},{"nodeType":"YulAssignment","src":"13402:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13414:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13425:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13410:3:124"},"nodeType":"YulFunctionCall","src":"13410:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13402:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13176:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13190:4:124","type":""}],"src":"13025:410:124"},{"body":{"nodeType":"YulBlock","src":"13717:688:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13734:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13749:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13757:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13745:3:124"},"nodeType":"YulFunctionCall","src":"13745:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13727:6:124"},"nodeType":"YulFunctionCall","src":"13727:74:124"},"nodeType":"YulExpressionStatement","src":"13727:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13821:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13832:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13817:3:124"},"nodeType":"YulFunctionCall","src":"13817:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13841:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13849:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13837:3:124"},"nodeType":"YulFunctionCall","src":"13837:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13810:6:124"},"nodeType":"YulFunctionCall","src":"13810:45:124"},"nodeType":"YulExpressionStatement","src":"13810:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13875:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13886:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13871:3:124"},"nodeType":"YulFunctionCall","src":"13871:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"13891:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13864:6:124"},"nodeType":"YulFunctionCall","src":"13864:31:124"},"nodeType":"YulExpressionStatement","src":"13864:31:124"},{"nodeType":"YulVariableDeclaration","src":"13904:60:124","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"13936:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13948:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13959:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13944:3:124"},"nodeType":"YulFunctionCall","src":"13944:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"13918:17:124"},"nodeType":"YulFunctionCall","src":"13918:46:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"13908:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13984:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13995:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13980:3:124"},"nodeType":"YulFunctionCall","src":"13980:18:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"14004:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14012:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14000:3:124"},"nodeType":"YulFunctionCall","src":"14000:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13973:6:124"},"nodeType":"YulFunctionCall","src":"13973:50:124"},"nodeType":"YulExpressionStatement","src":"13973:50:124"},{"nodeType":"YulVariableDeclaration","src":"14032:47:124","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14064:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"14072:6:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"14046:17:124"},"nodeType":"YulFunctionCall","src":"14046:33:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"14036:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14099:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14110:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14095:3:124"},"nodeType":"YulFunctionCall","src":"14095:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14120:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14128:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14116:3:124"},"nodeType":"YulFunctionCall","src":"14116:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14088:6:124"},"nodeType":"YulFunctionCall","src":"14088:51:124"},"nodeType":"YulExpressionStatement","src":"14088:51:124"},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14155:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"14163:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14148:6:124"},"nodeType":"YulFunctionCall","src":"14148:22:124"},"nodeType":"YulExpressionStatement","src":"14148:22:124"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14196:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14204:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14192:3:124"},"nodeType":"YulFunctionCall","src":"14192:15:124"},{"name":"value4","nodeType":"YulIdentifier","src":"14209:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"14217:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"14179:12:124"},"nodeType":"YulFunctionCall","src":"14179:45:124"},"nodeType":"YulExpressionStatement","src":"14179:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14248:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"14256:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14244:3:124"},"nodeType":"YulFunctionCall","src":"14244:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"14265:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14240:3:124"},"nodeType":"YulFunctionCall","src":"14240:28:124"},{"kind":"number","nodeType":"YulLiteral","src":"14270:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14233:6:124"},"nodeType":"YulFunctionCall","src":"14233:39:124"},"nodeType":"YulExpressionStatement","src":"14233:39:124"},{"nodeType":"YulAssignment","src":"14281:118:124","value":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14297:6:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"14313:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14321:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14309:3:124"},"nodeType":"YulFunctionCall","src":"14309:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"14326:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14305:3:124"},"nodeType":"YulFunctionCall","src":"14305:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14293:3:124"},"nodeType":"YulFunctionCall","src":"14293:101:124"},{"kind":"number","nodeType":"YulLiteral","src":"14396:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14289:3:124"},"nodeType":"YulFunctionCall","src":"14289:110:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14281:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13646:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"13657:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13665:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13673:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13681:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13689:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13697:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13708:4:124","type":""}],"src":"13440:965:124"},{"body":{"nodeType":"YulBlock","src":"14491:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"14537:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14546:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14549:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14539:6:124"},"nodeType":"YulFunctionCall","src":"14539:12:124"},"nodeType":"YulExpressionStatement","src":"14539:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14512:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14521:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14508:3:124"},"nodeType":"YulFunctionCall","src":"14508:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14533:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14504:3:124"},"nodeType":"YulFunctionCall","src":"14504:32:124"},"nodeType":"YulIf","src":"14501:52:124"},{"nodeType":"YulVariableDeclaration","src":"14562:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14581:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14575:5:124"},"nodeType":"YulFunctionCall","src":"14575:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14566:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14625:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14600:24:124"},"nodeType":"YulFunctionCall","src":"14600:31:124"},"nodeType":"YulExpressionStatement","src":"14600:31:124"},{"nodeType":"YulAssignment","src":"14640:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14650:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14640:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14457:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14468:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14480:6:124","type":""}],"src":"14410:251:124"},{"body":{"nodeType":"YulBlock","src":"14744:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"14790:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14799:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14802:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14792:6:124"},"nodeType":"YulFunctionCall","src":"14792:12:124"},"nodeType":"YulExpressionStatement","src":"14792:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14765:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14774:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14761:3:124"},"nodeType":"YulFunctionCall","src":"14761:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14786:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14757:3:124"},"nodeType":"YulFunctionCall","src":"14757:32:124"},"nodeType":"YulIf","src":"14754:52:124"},{"nodeType":"YulVariableDeclaration","src":"14815:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14834:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14828:5:124"},"nodeType":"YulFunctionCall","src":"14828:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14819:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"14897:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14906:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14909:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14899:6:124"},"nodeType":"YulFunctionCall","src":"14899:12:124"},"nodeType":"YulExpressionStatement","src":"14899:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14866:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14887:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14880:6:124"},"nodeType":"YulFunctionCall","src":"14880:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14873:6:124"},"nodeType":"YulFunctionCall","src":"14873:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14863:2:124"},"nodeType":"YulFunctionCall","src":"14863:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14856:6:124"},"nodeType":"YulFunctionCall","src":"14856:40:124"},"nodeType":"YulIf","src":"14853:60:124"},{"nodeType":"YulAssignment","src":"14922:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14932:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14922:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14710:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14721:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14733:6:124","type":""}],"src":"14666:277:124"},{"body":{"nodeType":"YulBlock","src":"15161:299:124","statements":[{"nodeType":"YulAssignment","src":"15171:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15194:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15179:3:124"},"nodeType":"YulFunctionCall","src":"15179:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15171:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15214:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"15225:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15207:6:124"},"nodeType":"YulFunctionCall","src":"15207:25:124"},"nodeType":"YulExpressionStatement","src":"15207:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15252:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15263:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15248:3:124"},"nodeType":"YulFunctionCall","src":"15248:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"15268:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15241:6:124"},"nodeType":"YulFunctionCall","src":"15241:34:124"},"nodeType":"YulExpressionStatement","src":"15241:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15295:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15306:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15291:3:124"},"nodeType":"YulFunctionCall","src":"15291:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"15311:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15284:6:124"},"nodeType":"YulFunctionCall","src":"15284:34:124"},"nodeType":"YulExpressionStatement","src":"15284:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15338:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15349:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15334:3:124"},"nodeType":"YulFunctionCall","src":"15334:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"15354:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15327:6:124"},"nodeType":"YulFunctionCall","src":"15327:34:124"},"nodeType":"YulExpressionStatement","src":"15327:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15381:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15392:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15377:3:124"},"nodeType":"YulFunctionCall","src":"15377:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"15402:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15410:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15398:3:124"},"nodeType":"YulFunctionCall","src":"15398:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15370:6:124"},"nodeType":"YulFunctionCall","src":"15370:84:124"},"nodeType":"YulExpressionStatement","src":"15370:84:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15098:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15109:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15117:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15125:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15133:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15141:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15152:4:124","type":""}],"src":"14948:512:124"},{"body":{"nodeType":"YulBlock","src":"15639:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15656:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15667:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15649:6:124"},"nodeType":"YulFunctionCall","src":"15649:21:124"},"nodeType":"YulExpressionStatement","src":"15649:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15690:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15701:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15686:3:124"},"nodeType":"YulFunctionCall","src":"15686:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"15706:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15679:6:124"},"nodeType":"YulFunctionCall","src":"15679:30:124"},"nodeType":"YulExpressionStatement","src":"15679:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15729:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15740:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15725:3:124"},"nodeType":"YulFunctionCall","src":"15725:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"15745:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15718:6:124"},"nodeType":"YulFunctionCall","src":"15718:62:124"},"nodeType":"YulExpressionStatement","src":"15718:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15800:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15811:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15796:3:124"},"nodeType":"YulFunctionCall","src":"15796:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15816:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15789:6:124"},"nodeType":"YulFunctionCall","src":"15789:37:124"},"nodeType":"YulExpressionStatement","src":"15789:37:124"},{"nodeType":"YulAssignment","src":"15835:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15847:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15858:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15843:3:124"},"nodeType":"YulFunctionCall","src":"15843:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15835:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15616:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15630:4:124","type":""}],"src":"15465:403:124"},{"body":{"nodeType":"YulBlock","src":"15921:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:124"},"nodeType":"YulFunctionCall","src":"15995:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:124"},"nodeType":"YulFunctionCall","src":"16025:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16069:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16071:16:124"},"nodeType":"YulFunctionCall","src":"16071:18:124"},"nodeType":"YulExpressionStatement","src":"16071:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"16059:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16063:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16055:3:124"},"nodeType":"YulFunctionCall","src":"16055:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16047:2:124"},"nodeType":"YulFunctionCall","src":"16047:21:124"},"nodeType":"YulIf","src":"16044:47:124"},{"nodeType":"YulAssignment","src":"16100:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16111:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16116:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16107:3:124"},"nodeType":"YulFunctionCall","src":"16107:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"16100:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15904:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15907:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15913:3:124","type":""}],"src":"15873:253:124"},{"body":{"nodeType":"YulBlock","src":"16288:252:124","statements":[{"nodeType":"YulAssignment","src":"16298:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16310:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16321:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16306:3:124"},"nodeType":"YulFunctionCall","src":"16306:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16298:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16340:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16355:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16363:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16351:3:124"},"nodeType":"YulFunctionCall","src":"16351:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16333:6:124"},"nodeType":"YulFunctionCall","src":"16333:74:124"},"nodeType":"YulExpressionStatement","src":"16333:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16427:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16438:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16423:3:124"},"nodeType":"YulFunctionCall","src":"16423:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"16443:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16416:6:124"},"nodeType":"YulFunctionCall","src":"16416:34:124"},"nodeType":"YulExpressionStatement","src":"16416:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16470:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16481:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16466:3:124"},"nodeType":"YulFunctionCall","src":"16466:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"16490:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16498:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16486:3:124"},"nodeType":"YulFunctionCall","src":"16486:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16459:6:124"},"nodeType":"YulFunctionCall","src":"16459:75:124"},"nodeType":"YulExpressionStatement","src":"16459:75:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16241:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16252:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16260:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16268:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16279:4:124","type":""}],"src":"16131:409:124"},{"body":{"nodeType":"YulBlock","src":"16594:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"16604:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16614:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16608:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16657:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16672:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16675:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16668:3:124"},"nodeType":"YulFunctionCall","src":"16668:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"16661:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16687:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16702:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16705:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16698:3:124"},"nodeType":"YulFunctionCall","src":"16698:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16691:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16733:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16735:16:124"},"nodeType":"YulFunctionCall","src":"16735:18:124"},"nodeType":"YulExpressionStatement","src":"16735:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16723:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16728:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16720:2:124"},"nodeType":"YulFunctionCall","src":"16720:12:124"},"nodeType":"YulIf","src":"16717:38:124"},{"nodeType":"YulAssignment","src":"16764:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16776:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16781:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16772:3:124"},"nodeType":"YulFunctionCall","src":"16772:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16764:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"16576:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"16579:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"16585:4:124","type":""}],"src":"16545:246:124"},{"body":{"nodeType":"YulBlock","src":"16828:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16845:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16848:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16838:6:124"},"nodeType":"YulFunctionCall","src":"16838:88:124"},"nodeType":"YulExpressionStatement","src":"16838:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16942:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16945:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16935:6:124"},"nodeType":"YulFunctionCall","src":"16935:15:124"},"nodeType":"YulExpressionStatement","src":"16935:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16966:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16969:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16959:6:124"},"nodeType":"YulFunctionCall","src":"16959:15:124"},"nodeType":"YulExpressionStatement","src":"16959:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"16796:184:124"},{"body":{"nodeType":"YulBlock","src":"17037:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"17156:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17158:16:124"},"nodeType":"YulFunctionCall","src":"17158:18:124"},"nodeType":"YulExpressionStatement","src":"17158:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17068:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17061:6:124"},"nodeType":"YulFunctionCall","src":"17061:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17054:6:124"},"nodeType":"YulFunctionCall","src":"17054:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17076:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17083:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"17151:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17079:3:124"},"nodeType":"YulFunctionCall","src":"17079:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17073:2:124"},"nodeType":"YulFunctionCall","src":"17073:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17050:3:124"},"nodeType":"YulFunctionCall","src":"17050:105:124"},"nodeType":"YulIf","src":"17047:131:124"},{"nodeType":"YulAssignment","src":"17187:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17202:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"17205:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"17198:3:124"},"nodeType":"YulFunctionCall","src":"17198:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"17187:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17016:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"17019:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"17025:7:124","type":""}],"src":"16985:228:124"},{"body":{"nodeType":"YulBlock","src":"17264:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"17295:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17316:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17319:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17309:6:124"},"nodeType":"YulFunctionCall","src":"17309:88:124"},"nodeType":"YulExpressionStatement","src":"17309:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17417:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"17420:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17410:6:124"},"nodeType":"YulFunctionCall","src":"17410:15:124"},"nodeType":"YulExpressionStatement","src":"17410:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17445:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17448:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17438:6:124"},"nodeType":"YulFunctionCall","src":"17438:15:124"},"nodeType":"YulExpressionStatement","src":"17438:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17284:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17277:6:124"},"nodeType":"YulFunctionCall","src":"17277:9:124"},"nodeType":"YulIf","src":"17274:189:124"},{"nodeType":"YulAssignment","src":"17472:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17481:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"17484:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17477:3:124"},"nodeType":"YulFunctionCall","src":"17477:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"17472:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17249:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"17252:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"17258:1:124","type":""}],"src":"17218:274:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value5 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 192))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_2), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_string(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value3, tail_1)\n        mstore(add(headStart, 128), sub(tail_2, headStart))\n        mstore(tail_2, value5)\n        calldatacopy(add(tail_2, 32), value4, value5)\n        mstore(add(add(tail_2, value5), 32), 0)\n        tail := add(add(tail_2, and(add(value5, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"30695":[{"length":32,"start":2749}],"30877":[{"length":32,"start":6347}],"30880":[{"length":32,"start":773},{"length":32,"start":3141},{"length":32,"start":4420},{"length":32,"start":5796},{"length":32,"start":6143}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061020b5760003560e01c806390f6fcf21161012a578063c04a8a10116100bd578063e655dbd81161008c578063e78c9b3b11610071578063e78c9b3b146105b5578063f3bfc73814610611578063f731e9be1461063857600080fd5b8063e655dbd81461057f578063e74848901461059257600080fd5b8063c04a8a1014610503578063c222ec8a14610516578063c634dfaa14610529578063dd62ed3e1461057157600080fd5b8063a9059cbb116100f9578063a9059cbb1461022e578063b16a19de146104ad578063b3f1c93d146104cb578063b9a7b622146104fb57600080fd5b806390f6fcf21461046357806395d89b411461047d5780639dc29fac14610485578063a457c2d71461022e57600080fd5b80636bd76d24116101a25780637816037611610171578063781603761461036f57806379774338146103ab57806379ce6b8c146103da5780637ecebe001461042d57600080fd5b80636bd76d24146102a757806370a08231146102ed5780637535d2461461030057806375d264131461034c57600080fd5b806323b872dd116101de57806323b872dd1461027c578063313ce5671461028a5780633644e5151461029f578063395093511461022e57600080fd5b806306fdde0314610210578063095ea7b31461022e5780630b52d5581461025157806318160ddd14610266575b600080fd5b610218610640565b604051610225919061233e565b60405180910390f35b61024161023c366004612381565b6106d2565b6040519015158152602001610225565b61026461025f3660046123be565b610742565b005b61026e610a93565b604051908152602001610225565b61024161023c36600461242c565b603d5460405160ff9091168152602001610225565b61026e610ab9565b61026e6102b536600461246d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61026e6102fb3660046124a6565b610af2565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff16610327565b6102186040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103b3610b9e565b6040805194855260208501939093529183015264ffffffffff166060820152608001610225565b6104176103e83660046124a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603e602052604090205464ffffffffff1690565b60405164ffffffffff9091168152602001610225565b61026e61043b3660046124a6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b603f546fffffffffffffffffffffffffffffffff1661026e565b610218610bfa565b610498610493366004612381565b610c09565b60408051928352602083019190915201610225565b60375473ffffffffffffffffffffffffffffffffffffffff16610327565b6104de6104d93660046124c3565b611129565b604080519315158452602084019290925290820152606001610225565b61026e600181565b610264610511366004612381565b6115ab565b610264610524366004612625565b6115ba565b61026e6105373660046124a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61026e61023c36600461246d565b61026461058d3660046124a6565b6118c7565b603f54700100000000000000000000000000000000900464ffffffffff16610417565b61026e6105c33660046124a6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61026e7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b610498611aa5565b6060603b805461064f906126fa565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906126fa565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526000916107399160040161233e565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166107c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50834211156040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525090610837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b5073ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205490610867610ab9565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c0016040516020818303038152906040528051906020012060405160200161091f9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156109a5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50610a5782600161277d565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260346020526040902055610a88898989611ad0565b505050505050505050565b603f54600090610ab4906fffffffffffffffffffffffffffffffff16611b47565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610aea575060355490565b610ab4611b96565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041681610b51575060009392505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603e6020526040812054610b8990839064ffffffffff16611c5b565b9050610b958382611c6f565b95945050505050565b603f546000908190819081906fffffffffffffffffffffffffffffffff16610bc5603a5490565b610bce82611b47565b603f549197909650919450700100000000000000000000000000000000900464ffffffffff1692509050565b6060603c805461064f906126fa565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50600080610cbf86611cc6565b92509250506000610cce610a93565b73ffffffffffffffffffffffffffffffffffffffff881660009081526038602052604081205491925090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16888411610d5957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a55610e53565b610d638985612795565b603a81905591506000610d93610d7886611d4b565b603f546fffffffffffffffffffffffffffffffff1690611c6f565b90506000610daa610da38c611d4b565b8490611c6f565b9050818110610de957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a8190559450610e50565b610e0d610e08610df886611d4b565b610e028486612795565b90611d66565b611da5565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905594505b50505b85891415610ecb5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff169055603e909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169055610f20565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff160217905588851115611049576000610f788a87612795565b9050610f858b8287611e4b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8c16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018390526080810185905260a0810184905273ffffffffffffffffffffffffffffffffffffffff8c169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350611119565b6000611055868b612795565b90506110628b8287611fbc565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018590526080810184905273ffffffffffffffffffffffffffffffffffffffff8c16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b50955093505050505b9250929050565b6000808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906111ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b506112246040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112625761126287898861200c565b60008061126e89611cc6565b925092505061127b610a93565b808452603f546fffffffffffffffffffffffffffffffff1660a08501526112a390899061277d565b603a81905560208401526112b688611d4b565b60408481019190915273ffffffffffffffffffffffffffffffffffffffff8a1660009081526038602052205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16606084015261135261132261131d8a8561277d565b611d4b565b6040850151611331908a611c6f565b61134861133d86611d4b565b606088015190611c6f565b610e02919061277d565b6080840181905261136290611da5565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000969091168602179055603e825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16908117909155603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16919093021790915583015161146190610e089061143690611d4b565b6040860151611446908b90611c6f565b6113486114568860000151611d4b565b60a089015190611c6f565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905560a084015260006114b2828a61277d565b90506114c38a828660000151611e4b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8b16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360808085015160a080870151602080890151604080518881529283018a9052820188905260608201949094529384015282015273ffffffffffffffffffffffffffffffffffffffff808c1691908d16907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a35050602082015160a0909201519015999198509650945050505050565b6115b6338383611ad0565b5050565b60015460039060ff16806115cd5750303b155b806115d9575060005481115b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60015460ff161580156116a257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50611769866120cc565b611772856120df565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a16171790556117f7611b96565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051611884969594939291906127ac565b60405180910390a380156118bb57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061284c565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612869565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b603f5460009081906fffffffffffffffffffffffffffffffff16611ac881611b47565b939092509050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600080611b53603a5490565b905080611b635750600092915050565b6000611b8284603f60109054906101000a900464ffffffffff16611c5b565b9050611b8e8282611c6f565b949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bc16120f2565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000611c688383426120fc565b9392505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611ca457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080611d0a8573ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b905080611d2257600080600093509350935050611d44565b6000611d2d86610af2565b90508181611d3b8282612795565b94509450945050505b9193909250565b633b9aca008181029081048214611d6157600080fd5b919050565b600081156b033b2e3c9fd0803ce800000060028404190484111715611d8a57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b6000611e5683611da5565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9b828261288b565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d5461010090041615611fb557603d546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018690526fffffffffffffffffffffffffffffffff84166044830152610100909204909116906331873e2e90606401600060405180830381600087803b158015611fa157600080fd5b505af1158015610a88573d6000803e3d6000fd5b5050505050565b6000611fc783611da5565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9b82826128bf565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260366020908152604080832093861683529290529081205461204c908390612795565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1906120be9086815260200190565b60405180910390a450505050565b80516115b690603b906020840190612243565b80516115b690603c906020840190612243565b6060610ab4610640565b60008061211064ffffffffff851684612795565b90508061212c576b033b2e3c9fd0803ce8000000915050611c68565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511612162576000612167565b600285035b925066038882915c400061217b8a80611c6f565b81612188576121886128f0565b0491506301e1338061219a838b611c6f565b816121a7576121a76128f0565b0490506000826121b7868861291f565b6121c1919061291f565b600290049050600082856121d5888a61291f565b6121df919061291f565b6121e9919061291f565b60069004905080826301e133806122008a8f61291f565b61220a919061295c565b612220906b033b2e3c9fd0803ce800000061277d565b61222a919061277d565b612234919061277d565b9b9a5050505050505050505050565b82805461224f906126fa565b90600052602060002090601f01602090048101928261227157600085556122b7565b82601f1061228a57805160ff19168380011785556122b7565b828001600101855582156122b7579182015b828111156122b757825182559160200191906001019061229c565b50611e479291505b80821115611e4757600081556001016122bf565b6000815180845260005b818110156122f9576020818501810151868301820152016122dd565b8181111561230b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c6860208301846122d3565b73ffffffffffffffffffffffffffffffffffffffff8116811461237357600080fd5b50565b8035611d6181612351565b6000806040838503121561239457600080fd5b823561239f81612351565b946020939093013593505050565b803560ff81168114611d6157600080fd5b600080600080600080600060e0888a0312156123d957600080fd5b87356123e481612351565b965060208801356123f481612351565b95506040880135945060608801359350612410608089016123ad565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561244157600080fd5b833561244c81612351565b9250602084013561245c81612351565b929592945050506040919091013590565b6000806040838503121561248057600080fd5b823561248b81612351565b9150602083013561249b81612351565b809150509250929050565b6000602082840312156124b857600080fd5b8135611c6881612351565b600080600080608085870312156124d957600080fd5b84356124e481612351565b935060208501356124f481612351565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261254957600080fd5b813567ffffffffffffffff8082111561256457612564612509565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125aa576125aa612509565b816040528381528660208588010111156125c357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f8401126125f557600080fd5b50813567ffffffffffffffff81111561260d57600080fd5b60208301915083602082850101111561112257600080fd5b60008060008060008060008060e0898b03121561264157600080fd5b883561264c81612351565b9750602089013561265c81612351565b965061266a60408a01612376565b955061267860608a016123ad565b9450608089013567ffffffffffffffff8082111561269557600080fd5b6126a18c838d01612538565b955060a08b01359150808211156126b757600080fd5b6126c38c838d01612538565b945060c08b01359150808211156126d957600080fd5b506126e68b828c016125e3565b999c989b5096995094979396929594505050565b600181811c9082168061270e57607f821691505b60208210811415612748577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156127905761279061274e565b500190565b6000828210156127a7576127a761274e565b500390565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a0604082015260006127e460a08301876122d3565b82810360608401526127f681876122d3565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b60006020828403121561285e57600080fd5b8151611c6881612351565b60006020828403121561287b57600080fd5b81518015158114611c6857600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156128b6576128b661274e565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156128e8576128e861274e565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129575761295761274e565b500290565b600082612992577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212208d5d4a4d9868eb87ed712407c926eaf292b8ef9c98a041bcea0c53066edc1fcb64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90F6FCF2 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC04A8A10 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xE655DBD8 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE78C9B3B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE78C9B3B EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF731E9BE EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xE7484890 EQ PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC634DFAA EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90F6FCF2 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x78160376 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x79774338 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x79CE6B8C EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x266 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x218 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x225 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x23BE JUMP JUMPDEST PUSH2 0x742 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26E PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x246D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH2 0xAF2 JUMP JUMPDEST PUSH2 0x327 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x218 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0xB9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x43B CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x26E JUMP JUMPDEST PUSH2 0x218 PUSH2 0xBFA JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0xC09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x4DE PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x264 PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2625 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST PUSH2 0x26E PUSH2 0x537 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x246D JUMP JUMPDEST PUSH2 0x264 PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH2 0x18C7 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x417 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x5C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1AA5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26FA JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x67B SWAP1 PUSH2 0x26FA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x69D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C8 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6AB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x739 SWAP2 PUSH1 0x4 ADD PUSH2 0x233E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x867 PUSH2 0xAB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x91F SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0xA57 DUP3 PUSH1 0x1 PUSH2 0x277D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xA88 DUP10 DUP10 DUP10 PUSH2 0x1AD0 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 PUSH2 0xAB4 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B47 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAEA JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAB4 PUSH2 0x1B96 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND DUP2 PUSH2 0xB51 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB89 SWAP1 DUP4 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C5B JUMP JUMPDEST SWAP1 POP PUSH2 0xB95 DUP4 DUP3 PUSH2 0x1C6F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC5 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBCE DUP3 PUSH2 0x1B47 JUMP JUMPDEST PUSH1 0x3F SLOAD SWAP2 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26FA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCB2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0xCBF DUP7 PUSH2 0x1CC6 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH1 0x0 PUSH2 0xCCE PUSH2 0xA93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 DUP2 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP5 GT PUSH2 0xD59 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A SSTORE PUSH2 0xE53 JUMP JUMPDEST PUSH2 0xD63 DUP10 DUP6 PUSH2 0x2795 JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP2 POP PUSH1 0x0 PUSH2 0xD93 PUSH2 0xD78 DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x1C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0xDA3 DUP13 PUSH2 0x1D4B JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1C6F JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0xDE9 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP5 POP PUSH2 0xE50 JUMP JUMPDEST PUSH2 0xE0D PUSH2 0xE08 PUSH2 0xDF8 DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH2 0xE02 DUP5 DUP7 PUSH2 0x2795 JUMP JUMPDEST SWAP1 PUSH2 0x1D66 JUMP JUMPDEST PUSH2 0x1DA5 JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE SWAP5 POP JUMPDEST POP POP JUMPDEST DUP6 DUP10 EQ ISZERO PUSH2 0xECB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH1 0x3E SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND SWAP1 SSTORE PUSH2 0xF20 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE DUP9 DUP6 GT ISZERO PUSH2 0x1049 JUMPI PUSH1 0x0 PUSH2 0xF78 DUP11 DUP8 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP PUSH2 0xF85 DUP12 DUP3 DUP8 PUSH2 0x1E4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 DUP2 SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1119 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1055 DUP7 DUP12 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP PUSH2 0x1062 DUP12 DUP3 DUP8 PUSH2 0x1FBC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH32 0x44BD20A79E993BDCC7CBEDF54A3B4D19FB78490124B6B90D04FE3242EEA579E8 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP SWAP6 POP SWAP4 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0x1224 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1262 JUMPI PUSH2 0x1262 DUP8 DUP10 DUP9 PUSH2 0x200C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x126E DUP10 PUSH2 0x1CC6 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x127B PUSH2 0xA93 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x12A3 SWAP1 DUP10 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12B6 DUP9 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1352 PUSH2 0x1322 PUSH2 0x131D DUP11 DUP6 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD PUSH2 0x1331 SWAP1 DUP11 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x133D DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0xE02 SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE PUSH2 0x1362 SWAP1 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP7 SWAP1 SWAP2 AND DUP7 MUL OR SWAP1 SSTORE PUSH1 0x3E DUP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 SWAP4 MUL OR SWAP1 SWAP2 SSTORE DUP4 ADD MLOAD PUSH2 0x1461 SWAP1 PUSH2 0xE08 SWAP1 PUSH2 0x1436 SWAP1 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x1446 SWAP1 DUP12 SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x1456 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x0 PUSH2 0x14B2 DUP3 DUP11 PUSH2 0x277D JUMP JUMPDEST SWAP1 POP PUSH2 0x14C3 DUP11 DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x1E4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x80 DUP1 DUP6 ADD MLOAD PUSH1 0xA0 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP1 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP11 SWAP1 MSTORE DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 ISZERO SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 CALLER DUP4 DUP4 PUSH2 0x1AD0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x15CD JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x15D9 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x1665 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A2 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x175F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0x1769 DUP7 PUSH2 0x20CC JUMP JUMPDEST PUSH2 0x1772 DUP6 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0x17F7 PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1884 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27AC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x18BB JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1934 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1958 SWAP2 SWAP1 PUSH2 0x284C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19E9 SWAP2 SWAP1 PUSH2 0x2869 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC8 DUP2 PUSH2 0x1B47 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B53 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1B63 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B82 DUP5 PUSH1 0x3F PUSH1 0x10 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C5B JUMP JUMPDEST SWAP1 POP PUSH2 0x1B8E DUP3 DUP3 PUSH2 0x1C6F JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BC1 PUSH2 0x20F2 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C68 DUP4 DUP4 TIMESTAMP PUSH2 0x20FC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1CA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1D0A DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1D22 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x1D44 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2D DUP7 PUSH2 0xAF2 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH2 0x1D3B DUP3 DUP3 PUSH2 0x2795 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP POP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1D8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E56 DUP4 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9B DUP3 DUP3 PUSH2 0x288B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND ISZERO PUSH2 0x1FB5 JUMPI PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FC7 DUP4 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9B DUP3 DUP3 PUSH2 0x28BF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x204C SWAP1 DUP4 SWAP1 PUSH2 0x2795 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x20BE SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2243 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2243 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAB4 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2110 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x212C JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1C68 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2162 JUMPI PUSH1 0x0 PUSH2 0x2167 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x217B DUP11 DUP1 PUSH2 0x1C6F JUMP JUMPDEST DUP2 PUSH2 0x2188 JUMPI PUSH2 0x2188 PUSH2 0x28F0 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x219A DUP4 DUP12 PUSH2 0x1C6F JUMP JUMPDEST DUP2 PUSH2 0x21A7 JUMPI PUSH2 0x21A7 PUSH2 0x28F0 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x21B7 DUP7 DUP9 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21C1 SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x21D5 DUP9 DUP11 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21DF SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21E9 SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x2200 DUP11 DUP16 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x220A SWAP2 SWAP1 PUSH2 0x295C JUMP JUMPDEST PUSH2 0x2220 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x222A SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x2234 SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x224F SWAP1 PUSH2 0x26FA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2271 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x22B7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x228A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x22B7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x22B7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x22B7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x229C JUMP JUMPDEST POP PUSH2 0x1E47 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22BF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x22F9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x22DD JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x230B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C68 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x22D3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D61 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x239F DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x23D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x23E4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x23F4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x2410 PUSH1 0x80 DUP10 ADD PUSH2 0x23AD JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x244C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x245C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x248B DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x249B DUP2 PUSH2 0x2351 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C68 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x24E4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x24F4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2564 JUMPI PUSH2 0x2564 PUSH2 0x2509 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x25AA JUMPI PUSH2 0x25AA PUSH2 0x2509 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x25C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x260D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x2641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x264C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x265C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP7 POP PUSH2 0x266A PUSH1 0x40 DUP11 ADD PUSH2 0x2376 JUMP JUMPDEST SWAP6 POP PUSH2 0x2678 PUSH1 0x60 DUP11 ADD PUSH2 0x23AD JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26A1 DUP13 DUP4 DUP14 ADD PUSH2 0x2538 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C3 DUP13 DUP4 DUP14 ADD PUSH2 0x2538 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E6 DUP12 DUP3 DUP13 ADD PUSH2 0x25E3 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x270E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2748 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2790 JUMPI PUSH2 0x2790 PUSH2 0x274E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x27A7 JUMPI PUSH2 0x27A7 PUSH2 0x274E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27E4 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x22D3 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x27F6 DUP2 DUP8 PUSH2 0x22D3 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x285E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C68 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x287B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x28B6 JUMPI PUSH2 0x28B6 PUSH2 0x274E JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x28E8 JUMPI PUSH2 0x28E8 PUSH2 0x274E JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2957 JUMPI PUSH2 0x2957 PUSH2 0x274E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2992 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0x5D 0x4A 0x4D SWAP9 PUSH9 0xEB87ED712407C926EA CALLCODE SWAP3 0xB8 0xEF SWAP13 SWAP9 LOG0 COINBASE 0xBC 0xEA 0xC MSTORE8 MOD PUSH15 0xDC1FCB64736F6C634300080A003300 ","sourceMap":"194:191:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12646:125:117;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:124;;1551:22;1533:41;;1521:2;1506:18;12646:125:117;1393:187:124;1424:823:119;;;;;;:::i;:::-;;:::i;:::-;;9656:120:117;;;:::i;:::-;;;2631:25:124;;;2619:2;2604:18;9656:120:117;2485:177:124;12775:139:117;;;;;;:::i;3178:86:121:-;3250:9;;3178:86;;3250:9;;;;3270:36:124;;3258:2;3243:18;3178:86:121;3128:184:124;867:185:120;;;:::i;2292:165:119:-;;;;;;:::i;:::-;2417:27;;;;2395:7;2417:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2292:165;3477:433:117;;;;;;:::i;:::-;;:::i;2408:27:121:-;;;;;;;;4334:42:124;4322:55;;;4304:74;;4292:2;4277:18;2408:27:121;4144:240:124;3691:132:121;3797:21;;;;;;;3691:132;;192:50:120;;232:10;;;;;;;;;;;;;;;;;192:50;;9182:228:117;;;:::i;:::-;;;;5106:25:124;;;5162:2;5147:18;;5140:34;;;;5190:18;;;5183:34;5265:12;5253:25;5248:2;5233:18;;5226:53;5093:3;5078:19;9182:228:117;4877:408:124;3145:125:117;;;;;;:::i;:::-;3248:17;;3227:6;3248:17;;;:11;:17;;;;;;;;;3145:125;;;;5464:12:124;5452:25;;;5434:44;;5422:2;5407:18;3145:125:117;5290:194:124;1260:101:120;;;;;;:::i;:::-;1342:14;;1320:7;1342:14;;;:7;:14;;;;;;;1260:101;2993:113:117;3087:14;;;;2993:113;;3051:90:121;;;:::i;5927:2487:117:-;;;;;;:::i;:::-;;:::i;:::-;;;;5663:25:124;;;5719:2;5704:18;;5697:34;;;;5636:18;5927:2487:117;5489:248:124;10139:111:117;10229:16;;;;10139:111;;4149:1739;;;;;;:::i;:::-;;:::i;:::-;;;;6724:14:124;;6717:22;6699:41;;6771:2;6756:18;;6749:34;;;;6799:18;;;6792:34;6687:2;6672:18;4149:1739:117;6503:329:124;1362:49:117;;1408:3;1362:49;;1237:142:119;;;;;;:::i;:::-;;:::i;1997:803:117:-;;;;;;:::i;:::-;;:::i;9970:130::-;;;;;;:::i;:::-;3518:19:121;;10052:7:117;3518:19:121;;;:10;:19;;;;;:27;;;;9970:130:117;12507:135;;;;;;:::i;3938:139:121:-;;;;;;:::i;:::-;;:::i;9815:116:117:-;9905:21;;;;;;;9815:116;;3309:139;;;;;;:::i;:::-;3412:16;;3390:7;3412:16;;;:10;:16;;;;;:31;;;;;;;3309:139;897:153:119;;956:94;897:153;;9449:178:117;;;:::i;2930:84:121:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;12646:125:117:-;12735:30;;;;;;;;;;;;;;;;12728:38;;;;;12716:4;;12728:38;;;;;:::i;:::-;;;;;;;;1424:823:119;1633:29;;;;;;;;;;;;;;;;;1608:23;;;1600:63;;;;;;;;;;;;;:::i;:::-;;1727:8;1708:15;:27;;1737:25;;;;;;;;;;;;;;;;;1700:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1797:18:119;;;1769:25;1797:18;;;:7;:18;;;;;;;1901;:16;:18::i;:::-;1950:87;;;956:94;1950:87;;;10455:25:124;10528:42;10516:55;;10496:18;;;10489:83;;;;10588:18;;;10581:34;;;10631:18;;;10624:34;;;10674:19;;;10667:35;;;10427:19;;1950:87:119;;;;;;;;;;;;1929:118;;;;;;1855:200;;;;;;;;10983:66:124;10971:79;;11075:1;11066:11;;11059:27;;;;11111:2;11102:12;;11095:28;11148:2;11139:12;;10713:444;1855:200:119;;;;;;;;;;;;;;1838:223;;1855:200;1838:223;;;;2088:26;;;;;;;;;11389:25:124;;;11462:4;11450:17;;11430:18;;;11423:45;;;;11484:18;;;11477:34;;;11527:18;;;11520:34;;;1838:223:119;-1:-1:-1;2088:26:119;;11361:19:124;;2088:26:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:39;;:9;:39;;;2116:24;;;;;;;;;;;;;;;;;2067:74;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2168:21:119;:17;2188:1;2168:21;:::i;:::-;2147:18;;;;;;;:7;:18;;;;;:42;2195:47;2155:9;2225;2236:5;2195:18;:47::i;:::-;1594:653;;1424:823;;;;;;;:::o;9656:120:117:-;9756:14;;9717:7;;9739:32;;9756:14;;9739:16;:32::i;:::-;9732:39;;9656:120;:::o;867:185:120:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:120;;;867:185::o;939:69::-;1020:27;:25;:27::i;3477:433:117:-;3518:19:121;;;3551:7:117;3518:19:121;;;:10;:19;;;;;:27;;;;;;3642:34:117;;;;3518:27:121;3682:48:117;;-1:-1:-1;3722:1:117;;3477:433;-1:-1:-1;;;3477:433:117:o;3682:48::-;3826:20;;;3735:25;3826:20;;;:11;:20;;;;;;3763:89;;3808:10;;3826:20;;3763:37;:89::i;:::-;3735:117;-1:-1:-1;3865:40:117;:14;3735:117;3865:21;:40::i;:::-;3858:47;3477:433;-1:-1:-1;;;;;3477:433:117:o;9182:228::-;9298:14;;9239:7;;;;;;;;9298:14;;9326:19;3376:12:121;;;3293:100;9326:19:117;9347:25;9364:7;9347:16;:25::i;:::-;9383:21;;9318:87;;;;-1:-1:-1;9374:7:117;;-1:-1:-1;9383:21:117;;;;;;-1:-1:-1;9182:228:117;-1:-1:-1;9182:228:117:o;3051:90:121:-;3101:13;3129:7;3122:14;;;;;:::i;5927:2487:117:-;1519:26:121;;;;;;;;;;;;;;;;;6027:7:117;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;6054:22:117::1;6078:23:::0;6105:31:::1;6131:4;6105:25;:31::i;:::-;6051:85;;;;;6143:22;6168:13;:11;:13::i;:::-;6275:16;::::0;::::1;6187:25;6275:16:::0;;;:10:::1;:16;::::0;;;;:31;6143:38;;-1:-1:-1;6187:25:117;;;6275:31;;::::1;;;6621:24:::0;;::::1;6617:786;;6655:14;:18:::0;;;::::1;::::0;;6672:1:::1;6681:12;:16:::0;6617:786:::1;;;6746:23;6763:6:::0;6746:14;:23:::1;:::i;:::-;6731:12;:38;;;6718:51;;6777:17;6797:57;6828:25;:14;:23;:25::i;:::-;6805:14;::::0;::::1;;::::0;6797:30:::1;:57::i;:::-;6777:77;;6862:18;6883:40;6905:17;:6;:15;:17::i;:::-;6883:14:::0;;:21:::1;:40::i;:::-;6862:61;;7164:9;7150:10;:23;7146:251;;7220:14;:18:::0;;;::::1;::::0;;7237:1:::1;7205:12;:33:::0;;;7237:1;-1:-1:-1;7146:251:117::1;;;7300:88;7312:54;7344:21;:10;:19;:21::i;:::-;7313:22;7325:10:::0;7313:9;:22:::1;:::i;:::-;7312:31:::0;::::1;:54::i;:::-;7300:86;:88::i;:::-;7283:14;:105:::0;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;7146:251:117::1;6710:693;;6617:786;7423:14;7413:6;:24;7409:206;;;7447:16;::::0;::::1;7481:1;7447:16:::0;;;:10:::1;:16;::::0;;;;;;;:35;;::::1;;::::0;;7490:11:::1;:17:::0;;;;;:21;;;::::1;::::0;;7409:206:::1;;;7565:17;::::0;::::1;;::::0;;;:11:::1;:17;::::0;;;;:43;;;::::1;7592:15;7565:43;;;::::0;;7409:206:::1;7651:21;:47:::0;;;::::1;::::0;7682:15:::1;7651:47;;;;::::0;;7709:24;;::::1;7705:660;;;7743:20;7766:24;7784:6:::0;7766:15;:24:::1;:::i;:::-;7743:47;;7798:41;7804:4;7810:12;7824:14;7798:5;:41::i;:::-;7852:40;::::0;2631:25:124;;;7852:40:117::1;::::0;::::1;::::0;7869:1:::1;::::0;7852:40:::1;::::0;2619:2:124;2604:18;7852:40:117::1;;;;;;;7905:182;::::0;;12304:25:124;;;12360:2;12345:18;;12338:34;;;12388:18;;;12381:34;;;12446:2;12431:18;;12424:34;;;12489:3;12474:19;;12467:35;;;12533:3;12518:19;;12511:35;;;7905:182:117::1;::::0;::::1;::::0;;;::::1;::::0;12291:3:124;12276:19;7905:182:117::1;;;;;;;7735:359;7705:660;;;8108:20;8131:24;8140:15:::0;8131:6;:24:::1;:::i;:::-;8108:47;;8163:41;8169:4;8175:12;8189:14;8163:5;:41::i;:::-;8217:40;::::0;2631:25:124;;;8240:1:117::1;::::0;8217:40:::1;::::0;::::1;::::0;::::1;::::0;2619:2:124;2604:18;8217:40:117::1;;;;;;;8270:88;::::0;;12816:25:124;;;12872:2;12857:18;;12850:34;;;12900:18;;;12893:34;;;12958:2;12943:18;;12936:34;;;13001:3;12986:19;;12979:35;;;8270:88:117::1;::::0;::::1;::::0;::::1;::::0;12803:3:124;12788:19;8270:88:117::1;;;;;;;8100:265;7705:660;-1:-1:-1::0;8379:10:117;-1:-1:-1;8391:17:117;-1:-1:-1;;;;1552:1:121::1;5927:2487:117::0;;;;;:::o;4149:1739::-;4291:4;;;1488:29:121;1512:4;1488:29;678:10:4;1488:29:121;;;1519:26;;;;;;;;;;;;;;;;;1480:66;;;;;;;;;;;;;;:::i;:::-;;4321:25:117::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4321:25:117::1;4365:10;4357:18;;:4;:18;;;4353:89;;4385:50;4410:10;4422:4;4428:6;4385:24;:50::i;:::-;4451:22;4475:23:::0;4502:37:::1;4528:10;4502:25;:37::i;:::-;4448:91;;;;;4568:13;:11;:13::i;:::-;4546:35:::0;;;4615:14:::1;::::0;::::1;;4587:25;::::0;::::1;:42:::0;4668:28:::1;::::0;4690:6;;4668:28:::1;:::i;:::-;4653:12;:43:::0;;;4635:15:::1;::::0;::::1;:61:::0;4722:17:::1;:6:::0;:15:::1;:17::i;:::-;4703:16;::::0;;::::1;:36:::0;;;;4771:22:::1;::::0;::::1;;::::0;;;:10:::1;:22;::::0;;:37;;;::::1;;;4746:22;::::0;::::1;:62:::0;4836:141:::1;4940:36;4941:23;4958:6:::0;4941:14;:23:::1;:::i;:::-;4940:34;:36::i;:::-;4902:16;::::0;::::1;::::0;:29:::1;::::0;4926:4;4902:23:::1;:29::i;:::-;4837:56;4867:25;:14;:23;:25::i;:::-;4837:22;::::0;::::1;::::0;;:29:::1;:56::i;:::-;:94;;;;:::i;4836:141::-;4814:19;::::0;::::1;:163:::0;;;5024:31:::1;::::0;:29:::1;:31::i;:::-;4984:22;::::0;::::1;;::::0;;;:10:::1;:22;::::0;;;;;;;:71;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;;5117:11:::1;:23:::0;;;;;:49;;;::::1;5150:15;5117:49;;::::0;;::::1;::::0;;;5093:21:::1;:73:::0;;;::::1;::::0;;;::::1;;::::0;;;5390:15;::::1;::::0;5268:167:::1;::::0;5276:141:::1;::::0;5390:26:::1;::::0;:24:::1;:26::i;:::-;5364:16;::::0;::::1;::::0;5352:29:::1;::::0;:4;;:11:::1;:29::i;:::-;5277:64;5310:30;:4;:19;;;:28;:30::i;:::-;5277:25;::::0;::::1;::::0;;:32:::1;:64::i;5268:167::-;5251:14;:184:::0;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;5223:25:::1;::::0;::::1;:212:::0;-1:-1:-1;5465:24:117::1;5474:15:::0;5465:6;:24:::1;:::i;:::-;5442:47;;5495:52;5501:10;5513:12;5527:4;:19;;;5495:5;:52::i;:::-;5559:46;::::0;2631:25:124;;;5559:46:117::1;::::0;::::1;::::0;5576:1:::1;::::0;5559:46:::1;::::0;2619:2:124;2604:18;5559:46:117::1;;;;;;;5723:19;::::0;;::::1;::::0;5750:25:::1;::::0;;::::1;::::0;5783:15:::1;::::0;;::::1;::::0;5616:188:::1;::::0;;12304:25:124;;;12345:18;;;12338:34;;;12388:18;;12381:34;;;12446:2;12431:18;;12424:34;;;;12474:19;;;12467:35;12518:19;;12511:35;5616:188:117::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;12291:3:124;12276:19;5616:188:117::1;;;;;;;-1:-1:-1::0;;5840:15:117::1;::::0;::::1;::::0;5857:25:::1;::::0;;::::1;::::0;5819:19;;;5840:15;;-1:-1:-1;5857:25:117;-1:-1:-1;4149:1739:117;-1:-1:-1;;;;;4149:1739:117:o;1237:142:119:-;1323:51;678:10:4;1356:9:119;1367:6;1323:18;:51::i;:::-;1237:142;;:::o;1997:803:117:-;1217:12:87;;375:3:79;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;13227:2:124;1202:146:87;;;13209:21:124;13266:2;13246:18;;;13239:30;13305:34;13285:18;;;13278:62;13376:16;13356:18;;;13349:44;13410:19;;1202:146:87;13025:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2318:4:117::1;2298:24;;:16;:24;;;2324:34;;;;;;;;;;;;;;;;::::0;2290:69:::1;;;;;;;;;;;;;;:::i;:::-;;2365:23;2374:13;2365:8;:23::i;:::-;2394:27;2405:15;2394:10;:27::i;:::-;7979:9:121::0;:23;;2465:16:117::1;:34:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2505:44;::::1;2465:34;2505:44;::::0;;;;7979:23:121;;;2505:44:117;::::1;::::0;;2575:27:::1;:25;:27::i;:::-;2556:16;:46;;;;2664:4;2614:181;;2633:15;2614:181;;;2685:20;2714:17;2739:13;2760:15;2783:6;;2614:181;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1997:803:117;;;;;;;;:::o;3938:139:121:-;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;4304:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;4277:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:121::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;9449:178:117:-;9559:14;;9517:7;;;;9559:14;;9587:25;9559:14;9587:16;:25::i;:::-;9579:43;9614:7;;-1:-1:-1;9449:178:117;-1:-1:-1;9449:178:117:o;2749:233:119:-;2846:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;:48;;;2952:16;;2905:72;;2631:25:124;;;2952:16:119;;;2846:39;;:28;2905:72;;2604:18:124;2905:72:119;;;;;;;2749:233;;;:::o;10454:363:117:-;10520:7;10535:23;10561:19;3376:12:121;;;3293:100;10561:19:117;10535:45;-1:-1:-1;10591:20:117;10587:49;;-1:-1:-1;10628:1:117;;10454:363;-1:-1:-1;;10454:363:117:o;10587:49::-;10642:25;10670:87;10715:7;10730:21;;;;;;;;;;;10670:37;:87::i;:::-;10642:115;-1:-1:-1;10771:41:117;:15;10642:115;10771:22;:41::i;:::-;10764:48;10454:363;-1:-1:-1;;;;10454:363:117:o;1475:298:120:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;15207:25:124;;;;15248:18;;;15241:34;;;;1674:26:120;15291:18:124;;;15284:34;1712:13:120;15334:18:124;;;15327:34;1745:4:120;15377:19:124;;;15370:84;15179:19;;1582:178:120;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;3142:212:105:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;:::-;3271:78;3142:212;-1:-1:-1;;;3142:212:105:o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;8712:431:117:-;8792:7;8801;8810;8825:32;8860:21;8876:4;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;8860:21:117;8825:56;-1:-1:-1;8892:29:117;8888:66;;8939:1;8942;8945;8931:16;;;;;;;;;8888:66;8960:27;8990:15;9000:4;8990:9;:15::i;:::-;8960:45;-1:-1:-1;9027:24:117;8960:45;9086:46;9027:24;8960:45;9086:46;:::i;:::-;9012:126;;;;;;;;8712:431;;;;;;:::o;3901:247:107:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;2840:322::-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;15667:2:124;1635:78:12;;;15649:21:124;15706:2;15686:18;;;15679:30;15745:34;15725:18;;;15718:62;15816:9;15796:18;;;15789:37;15843:19;;1635:78:12;15465:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;11051:407:117:-;11138:18;11159;:6;:16;:18::i;:::-;11211:19;;;11183:25;11211:19;;;:10;:19;;;;;:27;11138:39;;-1:-1:-1;11211:27:117;;11274:30;11138:39;11211:27;11274:30;:::i;:::-;11244:19;;;;;;;;:10;:19;;;;;:60;;;;;;;;;;;;;;;;11323:21;;11244:60;11323:21;;;11315:44;11311:143;;11369:21;;:78;;;;;:21;16351:55:124;;;11369:78:117;;;16333:74:124;16423:18;;;16416:34;;;16498;16486:47;;16466:18;;;16459:75;11369:21:117;;;;;;;;:34;;16306:18:124;;11369:78:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11311:143;11132:326;;11051:407;;;:::o;11687:::-;11774:18;11795;:6;:16;:18::i;:::-;11847:19;;;11819:25;11847:19;;;:10;:19;;;;;:27;11774:39;;-1:-1:-1;11847:27:117;;11910:30;11774:39;11847:27;11910:30;:::i;3288:330:119:-;3414:28;;;;3391:20;3414:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;3456:6;;3414:48;:::i;:::-;3469:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;3582:16;;3535:78;;3391:71;;-1:-1:-1;3582:16:119;;;3535:78;;;;3391:71;2631:25:124;;2619:2;2604:18;;2485:177;3535:78:119;;;;;;;;3385:233;3288:330;;;:::o;7513:76:121:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;12127:96:117:-;12184:13;12212:6;:4;:6::i;1780:972:105:-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:124;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:124:o;1585:156::-;1651:20;;1711:4;1700:16;;1690:27;;1680:55;;1731:1;1728;1721:12;1746:734;1857:6;1865;1873;1881;1889;1897;1905;1958:3;1946:9;1937:7;1933:23;1929:33;1926:53;;;1975:1;1972;1965:12;1926:53;2014:9;2001:23;2033:31;2058:5;2033:31;:::i;:::-;2083:5;-1:-1:-1;2140:2:124;2125:18;;2112:32;2153:33;2112:32;2153:33;:::i;:::-;2205:7;-1:-1:-1;2259:2:124;2244:18;;2231:32;;-1:-1:-1;2310:2:124;2295:18;;2282:32;;-1:-1:-1;2333:37:124;2365:3;2350:19;;2333:37;:::i;:::-;2323:47;;2417:3;2406:9;2402:19;2389:33;2379:43;;2469:3;2458:9;2454:19;2441:33;2431:43;;1746:734;;;;;;;;;;:::o;2667:456::-;2744:6;2752;2760;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2868:9;2855:23;2887:31;2912:5;2887:31;:::i;:::-;2937:5;-1:-1:-1;2994:2:124;2979:18;;2966:32;3007:33;2966:32;3007:33;:::i;:::-;2667:456;;3059:7;;-1:-1:-1;;;3113:2:124;3098:18;;;;3085:32;;2667:456::o;3499:388::-;3567:6;3575;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3683:9;3670:23;3702:31;3727:5;3702:31;:::i;:::-;3752:5;-1:-1:-1;3809:2:124;3794:18;;3781:32;3822:33;3781:32;3822:33;:::i;:::-;3874:7;3864:17;;;3499:388;;;;;:::o;3892:247::-;3951:6;4004:2;3992:9;3983:7;3979:23;3975:32;3972:52;;;4020:1;4017;4010:12;3972:52;4059:9;4046:23;4078:31;4103:5;4078:31;:::i;5973:525::-;6059:6;6067;6075;6083;6136:3;6124:9;6115:7;6111:23;6107:33;6104:53;;;6153:1;6150;6143:12;6104:53;6192:9;6179:23;6211:31;6236:5;6211:31;:::i;:::-;6261:5;-1:-1:-1;6318:2:124;6303:18;;6290:32;6331:33;6290:32;6331:33;:::i;:::-;5973:525;;6383:7;;-1:-1:-1;;;;6437:2:124;6422:18;;6409:32;;6488:2;6473:18;6460:32;;5973:525::o;6837:184::-;6889:77;6886:1;6879:88;6986:4;6983:1;6976:15;7010:4;7007:1;7000:15;7026:778;7069:5;7122:3;7115:4;7107:6;7103:17;7099:27;7089:55;;7140:1;7137;7130:12;7089:55;7176:6;7163:20;7202:18;7239:2;7235;7232:10;7229:36;;;7245:18;;:::i;:::-;7379:2;7373:9;7441:4;7433:13;;7284:66;7429:22;;;7453:2;7425:31;7421:40;7409:53;;;7477:18;;;7497:22;;;7474:46;7471:72;;;7523:18;;:::i;:::-;7563:10;7559:2;7552:22;7598:2;7590:6;7583:18;7644:3;7637:4;7632:2;7624:6;7620:15;7616:26;7613:35;7610:55;;;7661:1;7658;7651:12;7610:55;7725:2;7718:4;7710:6;7706:17;7699:4;7691:6;7687:17;7674:54;7772:1;7765:4;7760:2;7752:6;7748:15;7744:26;7737:37;7792:6;7783:15;;;;;;7026:778;;;;:::o;7809:347::-;7860:8;7870:6;7924:3;7917:4;7909:6;7905:17;7901:27;7891:55;;7942:1;7939;7932:12;7891:55;-1:-1:-1;7965:20:124;;8008:18;7997:30;;7994:50;;;8040:1;8037;8030:12;7994:50;8077:4;8069:6;8065:17;8053:29;;8129:3;8122:4;8113:6;8105;8101:19;8097:30;8094:39;8091:59;;;8146:1;8143;8136:12;8161:1302;8351:6;8359;8367;8375;8383;8391;8399;8407;8460:3;8448:9;8439:7;8435:23;8431:33;8428:53;;;8477:1;8474;8467:12;8428:53;8516:9;8503:23;8535:31;8560:5;8535:31;:::i;:::-;8585:5;-1:-1:-1;8642:2:124;8627:18;;8614:32;8655:33;8614:32;8655:33;:::i;:::-;8707:7;-1:-1:-1;8733:38:124;8767:2;8752:18;;8733:38;:::i;:::-;8723:48;;8790:36;8822:2;8811:9;8807:18;8790:36;:::i;:::-;8780:46;;8877:3;8866:9;8862:19;8849:33;8901:18;8942:2;8934:6;8931:14;8928:34;;;8958:1;8955;8948:12;8928:34;8981:50;9023:7;9014:6;9003:9;8999:22;8981:50;:::i;:::-;8971:60;;9084:3;9073:9;9069:19;9056:33;9040:49;;9114:2;9104:8;9101:16;9098:36;;;9130:1;9127;9120:12;9098:36;9153:52;9197:7;9186:8;9175:9;9171:24;9153:52;:::i;:::-;9143:62;;9258:3;9247:9;9243:19;9230:33;9214:49;;9288:2;9278:8;9275:16;9272:36;;;9304:1;9301;9294:12;9272:36;;9343:60;9395:7;9384:8;9373:9;9369:24;9343:60;:::i;:::-;8161:1302;;;;-1:-1:-1;8161:1302:124;;-1:-1:-1;8161:1302:124;;;;;;9422:8;-1:-1:-1;;;8161:1302:124:o;9754:437::-;9833:1;9829:12;;;;9876;;;9897:61;;9951:4;9943:6;9939:17;9929:27;;9897:61;10004:2;9996:6;9993:14;9973:18;9970:38;9967:218;;;10041:77;10038:1;10031:88;10142:4;10139:1;10132:15;10170:4;10167:1;10160:15;9967:218;;9754:437;;;:::o;11565:184::-;11617:77;11614:1;11607:88;11714:4;11711:1;11704:15;11738:4;11735:1;11728:15;11754:128;11794:3;11825:1;11821:6;11818:1;11815:13;11812:39;;;11831:18;;:::i;:::-;-1:-1:-1;11867:9:124;;11754:128::o;11887:125::-;11927:4;11955:1;11952;11949:8;11946:34;;;11960:18;;:::i;:::-;-1:-1:-1;11997:9:124;;11887:125::o;13440:965::-;13757:42;13749:6;13745:55;13734:9;13727:74;13849:4;13841:6;13837:17;13832:2;13821:9;13817:18;13810:45;13891:3;13886:2;13875:9;13871:18;13864:31;13708:4;13918:46;13959:3;13948:9;13944:19;13936:6;13918:46;:::i;:::-;14012:9;14004:6;14000:22;13995:2;13984:9;13980:18;13973:50;14046:33;14072:6;14064;14046:33;:::i;:::-;14032:47;;14128:9;14120:6;14116:22;14110:3;14099:9;14095:19;14088:51;14163:6;14155;14148:22;14217:6;14209;14204:2;14196:6;14192:15;14179:45;14270:1;14265:2;14256:6;14248;14244:19;14240:28;14233:39;14396:2;14326:66;14321:2;14313:6;14309:15;14305:88;14297:6;14293:101;14289:110;14281:118;;;13440:965;;;;;;;;;:::o;14410:251::-;14480:6;14533:2;14521:9;14512:7;14508:23;14504:32;14501:52;;;14549:1;14546;14539:12;14501:52;14581:9;14575:16;14600:31;14625:5;14600:31;:::i;14666:277::-;14733:6;14786:2;14774:9;14765:7;14761:23;14757:32;14754:52;;;14802:1;14799;14792:12;14754:52;14834:9;14828:16;14887:5;14880:13;14873:21;14866:5;14863:32;14853:60;;14909:1;14906;14899:12;15873:253;15913:3;15941:34;16002:2;15999:1;15995:10;16032:2;16029:1;16025:10;16063:3;16059:2;16055:12;16050:3;16047:21;16044:47;;;16071:18;;:::i;:::-;16107:13;;15873:253;-1:-1:-1;;;;15873:253:124:o;16545:246::-;16585:4;16614:34;16698:10;;;;16668;;16720:12;;;16717:38;;;16735:18;;:::i;:::-;16772:13;;16545:246;-1:-1:-1;;;16545:246:124:o;16796:184::-;16848:77;16845:1;16838:88;16945:4;16942:1;16935:15;16969:4;16966:1;16959:15;16985:228;17025:7;17151:1;17083:66;17079:74;17076:1;17073:81;17068:1;17061:9;17054:17;17050:105;17047:131;;;17158:18;;:::i;:::-;-1:-1:-1;17198:9:124;;16985:228::o;17218:274::-;17258:1;17284;17274:189;;17319:77;17316:1;17309:88;17420:4;17417:1;17410:15;17448:4;17445:1;17438:15;17274:189;-1:-1:-1;17477:9:124;;17218:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"2140200","executionCost":"infinite","totalCost":"infinite"},"external":{"DEBT_TOKEN_REVISION()":"306","DELEGATION_WITH_SIG_TYPEHASH()":"283","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","POOL()":"infinite","UNDERLYING_ASSET_ADDRESS()":"2374","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","approveDelegation(address,uint256)":"26966","balanceOf(address)":"infinite","borrowAllowance(address,address)":"infinite","burn(address,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"infinite","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","getAverageStableRate()":"2344","getIncentivesController()":"2430","getSupplyData()":"infinite","getTotalSupplyAndAvgRate()":"infinite","getTotalSupplyLastUpdated()":"2407","getUserLastUpdated(address)":"2611","getUserStableRate(address)":"2590","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2618","principalBalanceOf(address)":"2602","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"DEBT_TOKEN_REVISION()":"b9a7b622","DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","POOL()":"7535d246","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveDelegation(address,uint256)":"c04a8a10","balanceOf(address)":"70a08231","borrowAllowance(address,address)":"6bd76d24","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","getAverageStableRate()":"90f6fcf2","getIncentivesController()":"75d26413","getSupplyData()":"79774338","getTotalSupplyAndAvgRate()":"f731e9be","getTotalSupplyLastUpdated()":"e7484890","getUserLastUpdated(address)":"79ce6b8c","getUserStableRate(address)":"e78c9b3b","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","name()":"06fdde03","nonces(address)":"7ecebe00","principalBalanceOf(address)":"c634dfaa","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"DEBT_TOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"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\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAverageStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyAndAvgRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"principalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"burn(address,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned\",\"params\":{\"amount\":\"The amount of debt tokens getting burned\",\"from\":\"The address from which the debt will be burned\"},\"returns\":{\"_0\":\"The total stable debt\",\"_1\":\"The average stable borrow rate\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"getAverageStableRate()\":{\"returns\":{\"_0\":\"The average stable rate\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getSupplyData()\":{\"returns\":{\"_0\":\"The principal\",\"_1\":\"The total supply\",\"_2\":\"The average stable rate\",\"_3\":\"The timestamp of the last update\"}},\"getTotalSupplyAndAvgRate()\":{\"returns\":{\"_0\":\"The total supply\",\"_1\":\"The average rate\"}},\"getTotalSupplyLastUpdated()\":{\"returns\":{\"_0\":\"The timestamp\"}},\"getUserLastUpdated(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The timestamp\"}},\"getUserStableRate(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The stable rate of the user\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt\",\"params\":{\"amount\":\"The amount of debt tokens to mint\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"rate\":\"The rate of the debt being minted\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if it is the first borrow, false otherwise\",\"_1\":\"The total stable debt\",\"_2\":\"The average stable borrow rate\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}},\"principalBalanceOf(address)\":{\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"burn(address,uint256)\":{\"notice\":\"Burns debt of `user`\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"getAverageStableRate()\":{\"notice\":\"Returns the average rate of all the stable rate loans.\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getSupplyData()\":{\"notice\":\"Returns the principal, the total supply, the average stable rate and the timestamp for the last update\"},\"getTotalSupplyAndAvgRate()\":{\"notice\":\"Returns the total supply and the average stable rate\"},\"getTotalSupplyLastUpdated()\":{\"notice\":\"Returns the timestamp of the last update of the total supply\"},\"getUserLastUpdated(address)\":{\"notice\":\"Returns the timestamp of the last update of the user\"},\"getUserStableRate(address)\":{\"notice\":\"Returns the stable rate of the user debt\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address.\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"},\"principalBalanceOf(address)\":{\"notice\":\"Returns the principal debt balance of the user\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/upgradeability/MockStableDebtToken.sol\":\"MockStableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/upgradeability/MockStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {StableDebtToken} from '../../protocol/tokenization/StableDebtToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\ncontract MockStableDebtToken is StableDebtToken {\\n  constructor(IPool pool) StableDebtToken(pool) {}\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n}\\n\",\"keccak256\":\"0xe4187b33f22dc8e20f3fbf121f0b96e86bdf73f07a9aa10f4c5943c48f4541d2\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/StableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {MathUtils} from '../libraries/math/MathUtils.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\\nimport {IStableDebtToken} from '../../interfaces/IStableDebtToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title StableDebtToken\\n * @author Aave\\n * @notice Implements a stable debt token to track the borrowing positions of users\\n * at stable rate mode\\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\\n */\\ncontract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\\n\\n  // Map of users address and the timestamp of their last update (userAddress => lastUpdateTimestamp)\\n  mapping(address => uint40) internal _timestamps;\\n\\n  uint128 internal _avgStableRate;\\n\\n  // Timestamp of the last update of the total supply\\n  uint40 internal _totalSupplyTimestamp;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) DebtTokenBase() IncentivizedERC20(pool, 'STABLE_DEBT_TOKEN_IMPL', 'STABLE_DEBT_TOKEN_IMPL', 0) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableDebtToken\\n  function initialize(\\n    IPool initializingPool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(debtTokenName);\\n    _setSymbol(debtTokenSymbol);\\n    _setDecimals(debtTokenDecimals);\\n\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      address(incentivesController),\\n      debtTokenDecimals,\\n      debtTokenName,\\n      debtTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return DEBT_TOKEN_REVISION;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getAverageStableRate() external view virtual override returns (uint256) {\\n    return _avgStableRate;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getUserLastUpdated(address user) external view virtual override returns (uint40) {\\n    return _timestamps[user];\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getUserStableRate(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    uint256 accountBalance = super.balanceOf(account);\\n    uint256 stableRate = _userState[account].additionalData;\\n    if (accountBalance == 0) {\\n      return 0;\\n    }\\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\\n      stableRate,\\n      _timestamps[account]\\n    );\\n    return accountBalance.rayMul(cumulatedInterest);\\n  }\\n\\n  struct MintLocalVars {\\n    uint256 previousSupply;\\n    uint256 nextSupply;\\n    uint256 amountInRay;\\n    uint256 currentStableRate;\\n    uint256 nextStableRate;\\n    uint256 currentAvgStableRate;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external virtual override onlyPool returns (bool, uint256, uint256) {\\n    MintLocalVars memory vars;\\n\\n    if (user != onBehalfOf) {\\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\\n    }\\n\\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(onBehalfOf);\\n\\n    vars.previousSupply = totalSupply();\\n    vars.currentAvgStableRate = _avgStableRate;\\n    vars.nextSupply = _totalSupply = vars.previousSupply + amount;\\n\\n    vars.amountInRay = amount.wadToRay();\\n\\n    vars.currentStableRate = _userState[onBehalfOf].additionalData;\\n    vars.nextStableRate = (vars.currentStableRate.rayMul(currentBalance.wadToRay()) +\\n      vars.amountInRay.rayMul(rate)).rayDiv((currentBalance + amount).wadToRay());\\n\\n    _userState[onBehalfOf].additionalData = vars.nextStableRate.toUint128();\\n\\n    //solium-disable-next-line\\n    _totalSupplyTimestamp = _timestamps[onBehalfOf] = uint40(block.timestamp);\\n\\n    // Calculates the updated average stable rate\\n    vars.currentAvgStableRate = _avgStableRate = (\\n      (vars.currentAvgStableRate.rayMul(vars.previousSupply.wadToRay()) +\\n        rate.rayMul(vars.amountInRay)).rayDiv(vars.nextSupply.wadToRay())\\n    ).toUint128();\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    _mint(onBehalfOf, amountToMint, vars.previousSupply);\\n\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(\\n      user,\\n      onBehalfOf,\\n      amountToMint,\\n      currentBalance,\\n      balanceIncrease,\\n      vars.nextStableRate,\\n      vars.currentAvgStableRate,\\n      vars.nextSupply\\n    );\\n\\n    return (currentBalance == 0, vars.nextSupply, vars.currentAvgStableRate);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function burn(\\n    address from,\\n    uint256 amount\\n  ) external virtual override onlyPool returns (uint256, uint256) {\\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(from);\\n\\n    uint256 previousSupply = totalSupply();\\n    uint256 nextAvgStableRate = 0;\\n    uint256 nextSupply = 0;\\n    uint256 userStableRate = _userState[from].additionalData;\\n\\n    // Since the total supply and each single user debt accrue separately,\\n    // there might be accumulation errors so that the last borrower repaying\\n    // might actually try to repay more than the available debt supply.\\n    // In this case we simply set the total supply and the avg stable rate to 0\\n    if (previousSupply <= amount) {\\n      _avgStableRate = 0;\\n      _totalSupply = 0;\\n    } else {\\n      nextSupply = _totalSupply = previousSupply - amount;\\n      uint256 firstTerm = uint256(_avgStableRate).rayMul(previousSupply.wadToRay());\\n      uint256 secondTerm = userStableRate.rayMul(amount.wadToRay());\\n\\n      // For the same reason described above, when the last user is repaying it might\\n      // happen that user rate * user balance > avg rate * total supply. In that case,\\n      // we simply set the avg rate to 0\\n      if (secondTerm >= firstTerm) {\\n        nextAvgStableRate = _totalSupply = _avgStableRate = 0;\\n      } else {\\n        nextAvgStableRate = _avgStableRate = (\\n          (firstTerm - secondTerm).rayDiv(nextSupply.wadToRay())\\n        ).toUint128();\\n      }\\n    }\\n\\n    if (amount == currentBalance) {\\n      _userState[from].additionalData = 0;\\n      _timestamps[from] = 0;\\n    } else {\\n      //solium-disable-next-line\\n      _timestamps[from] = uint40(block.timestamp);\\n    }\\n    //solium-disable-next-line\\n    _totalSupplyTimestamp = uint40(block.timestamp);\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      _mint(from, amountToMint, previousSupply);\\n      emit Transfer(address(0), from, amountToMint);\\n      emit Mint(\\n        from,\\n        from,\\n        amountToMint,\\n        currentBalance,\\n        balanceIncrease,\\n        userStableRate,\\n        nextAvgStableRate,\\n        nextSupply\\n      );\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      _burn(from, amountToBurn, previousSupply);\\n      emit Transfer(from, address(0), amountToBurn);\\n      emit Burn(from, amountToBurn, currentBalance, balanceIncrease, nextAvgStableRate, nextSupply);\\n    }\\n\\n    return (nextSupply, nextAvgStableRate);\\n  }\\n\\n  /**\\n   * @notice Calculates the increase in balance since the last user interaction\\n   * @param user The address of the user for which the interest is being accumulated\\n   * @return The previous principal balance\\n   * @return The new principal balance\\n   * @return The balance increase\\n   */\\n  function _calculateBalanceIncrease(\\n    address user\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 previousPrincipalBalance = super.balanceOf(user);\\n\\n    if (previousPrincipalBalance == 0) {\\n      return (0, 0, 0);\\n    }\\n\\n    uint256 newPrincipalBalance = balanceOf(user);\\n\\n    return (\\n      previousPrincipalBalance,\\n      newPrincipalBalance,\\n      newPrincipalBalance - previousPrincipalBalance\\n    );\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getSupplyData() external view override returns (uint256, uint256, uint256, uint40) {\\n    uint256 avgRate = _avgStableRate;\\n    return (super.totalSupply(), _calcTotalSupply(avgRate), avgRate, _totalSupplyTimestamp);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getTotalSupplyAndAvgRate() external view override returns (uint256, uint256) {\\n    uint256 avgRate = _avgStableRate;\\n    return (_calcTotalSupply(avgRate), avgRate);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _calcTotalSupply(_avgStableRate);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getTotalSupplyLastUpdated() external view override returns (uint40) {\\n    return _totalSupplyTimestamp;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function principalBalanceOf(address user) external view virtual override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /**\\n   * @notice Calculates the total supply\\n   * @param avgRate The average rate at which the total supply increases\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function _calcTotalSupply(uint256 avgRate) internal view returns (uint256) {\\n    uint256 principalSupply = super.totalSupply();\\n\\n    if (principalSupply == 0) {\\n      return 0;\\n    }\\n\\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\\n      avgRate,\\n      _totalSupplyTimestamp\\n    );\\n\\n    return principalSupply.rayMul(cumulatedInterest);\\n  }\\n\\n  /**\\n   * @notice Mints stable debt tokens to a user\\n   * @param account The account receiving the debt tokens\\n   * @param amount The amount being minted\\n   * @param oldTotalSupply The total supply before the minting event\\n   */\\n  function _mint(address account, uint256 amount, uint256 oldTotalSupply) internal {\\n    uint128 castAmount = amount.toUint128();\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + castAmount;\\n\\n    if (address(_incentivesController) != address(0)) {\\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns stable debt tokens of a user\\n   * @param account The user getting his debt burned\\n   * @param amount The amount being burned\\n   * @param oldTotalSupply The total supply before the burning event\\n   */\\n  function _burn(address account, uint256 amount, uint256 oldTotalSupply) internal {\\n    uint128 castAmount = amount.toUint128();\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - castAmount;\\n\\n    if (address(_incentivesController) != address(0)) {\\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /**\\n   * @dev Being non transferrable, the debt token does not implement any of the\\n   * standard ERC20 functions for transfer and allowance.\\n   */\\n  function transfer(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function allowance(address, address) external view virtual override returns (uint256) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function approve(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n}\\n\",\"keccak256\":\"0xe27a3879a8d414bbe000b6e392458abc521550db3649b4bf63f9ba23fe42b180\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30691,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":30468,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30475,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"},{"astId":30857,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_userState","offset":0,"slot":"56","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_allowances","offset":0,"slot":"57","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_totalSupply","offset":0,"slot":"58","type":"t_uint256"},{"astId":30867,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_name","offset":0,"slot":"59","type":"t_string_storage"},{"astId":30869,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_symbol","offset":0,"slot":"60","type":"t_string_storage"},{"astId":30871,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_decimals","offset":0,"slot":"61","type":"t_uint8"},{"astId":30874,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_incentivesController","offset":1,"slot":"61","type":"t_contract(IAaveIncentivesController)4000"},{"astId":29032,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_timestamps","offset":0,"slot":"62","type":"t_mapping(t_address,t_uint40)"},{"astId":29034,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_avgStableRate","offset":0,"slot":"63","type":"t_uint128"},{"astId":29036,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_totalSupplyTimestamp","offset":16,"slot":"63","type":"t_uint40"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint40)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint40)","numberOfBytes":"32","value":"t_uint40"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"burn(address,uint256)":{"notice":"Burns debt of `user`"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"getAverageStableRate()":{"notice":"Returns the average rate of all the stable rate loans."},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getSupplyData()":{"notice":"Returns the principal, the total supply, the average stable rate and the timestamp for the last update"},"getTotalSupplyAndAvgRate()":{"notice":"Returns the total supply and the average stable rate"},"getTotalSupplyLastUpdated()":{"notice":"Returns the timestamp of the last update of the total supply"},"getUserLastUpdated(address)":{"notice":"Returns the timestamp of the last update of the user"},"getUserStableRate(address)":{"notice":"Returns the stable rate of the user debt"},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address."},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"},"principalBalanceOf(address)":{"notice":"Returns the principal debt balance of the user"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"version":1}}},"contracts/mocks/upgradeability/MockVariableDebtToken.sol":{"MockVariableDebtToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"DEBT_TOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"burn(address,uint256,uint256)":{"details":"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount getting burned","from":"The address from which the debt will be burned","index":"The variable debt index of the reserve"},"returns":{"_0":"The scaled total debt of the reserve"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of debt being minted","index":"The variable debt index of the reserve","onBehalfOf":"The address receiving the debt tokens","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if the previous balance of the user is 0, false otherwise","_1":"The scaled total debt of the reserve"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_11092":{"entryPoint":null,"id":11092,"parameterSlots":1,"returnSlots":0},"@_30117":{"entryPoint":null,"id":30117,"parameterSlots":1,"returnSlots":0},"@_30482":{"entryPoint":null,"id":30482,"parameterSlots":0,"returnSlots":0},"@_30705":{"entryPoint":null,"id":30705,"parameterSlots":0,"returnSlots":0},"@_30916":{"entryPoint":null,"id":30916,"parameterSlots":4,"returnSlots":0},"@_31331":{"entryPoint":null,"id":31331,"parameterSlots":4,"returnSlots":0},"@_31495":{"entryPoint":null,"id":31495,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":583,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":622,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":558,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:50:124"},"nodeType":"YulIf","src":"76:70:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:138:124"},{"body":{"nodeType":"YulBlock","src":"252:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:124"},"nodeType":"YulFunctionCall","src":"300:12:124"},"nodeType":"YulExpressionStatement","src":"300:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:124"},"nodeType":"YulFunctionCall","src":"269:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:124"},"nodeType":"YulFunctionCall","src":"265:32:124"},"nodeType":"YulIf","src":"262:52:124"},{"nodeType":"YulVariableDeclaration","src":"323:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:124"},"nodeType":"YulFunctionCall","src":"336:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:124"},"nodeType":"YulFunctionCall","src":"361:38:124"},"nodeType":"YulExpressionStatement","src":"361:38:124"},{"nodeType":"YulAssignment","src":"408:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:124","type":""}],"src":"157:272:124"},{"body":{"nodeType":"YulBlock","src":"546:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:124"},"nodeType":"YulFunctionCall","src":"594:12:124"},"nodeType":"YulExpressionStatement","src":"594:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:32:124"},"nodeType":"YulIf","src":"556:52:124"},{"nodeType":"YulVariableDeclaration","src":"617:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:124"},"nodeType":"YulFunctionCall","src":"630:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:124"},"nodeType":"YulFunctionCall","src":"655:38:124"},"nodeType":"YulExpressionStatement","src":"655:38:124"},{"nodeType":"YulAssignment","src":"702:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:124","type":""}],"src":"434:289:124"},{"body":{"nodeType":"YulBlock","src":"783:325:124","statements":[{"nodeType":"YulAssignment","src":"793:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:124"},"nodeType":"YulFunctionCall","src":"803:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:124","statements":[{"nodeType":"YulAssignment","src":"903:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:124"},"nodeType":"YulFunctionCall","src":"913:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:124"},"nodeType":"YulFunctionCall","src":"874:26:124"},"nodeType":"YulIf","src":"871:61:124"},{"body":{"nodeType":"YulBlock","src":"991:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:124"},"nodeType":"YulFunctionCall","src":"1015:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:31:124"},"nodeType":"YulExpressionStatement","src":"1005:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:124"},"nodeType":"YulFunctionCall","src":"1049:15:124"},"nodeType":"YulExpressionStatement","src":"1049:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:124"},"nodeType":"YulFunctionCall","src":"1077:15:124"},"nodeType":"YulExpressionStatement","src":"1077:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:124"},"nodeType":"YulFunctionCall","src":"967:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:124"},"nodeType":"YulFunctionCall","src":"944:38:124"},"nodeType":"YulIf","src":"941:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:124","type":""}],"src":"728:380:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b50604051620027c2380380620027c2833981016040819052620000389162000247565b80806040518060400160405280601881526020017f5641524941424c455f444542545f544f4b454e5f494d504c00000000000000008152506040518060400160405280601881526020017f5641524941424c455f444542545f544f4b454e5f494d504c0000000000000000815250600083838383838383834660808181525050836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011d919062000247565b6001600160a01b031660a05282516200013e90603b90602086019062000188565b5081516200015490603c90602085019062000188565b50603d805460ff191660ff9290921691909117905550506001600160a01b031660c05250620002ab98505050505050505050565b82805462000196906200026e565b90600052602060002090601f016020900481019282620001ba576000855562000205565b82601f10620001d557805160ff191683800117855562000205565b8280016001018555821562000205579182015b8281111562000205578251825591602001919060010190620001e8565b506200021392915062000217565b5090565b5b8082111562000213576000815560010162000218565b6001600160a01b03811681146200024457600080fd5b50565b6000602082840312156200025a57600080fd5b815162000267816200022e565b9392505050565b600181811c908216806200028357607f821691505b60208210811415620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516124bd620003056000396000818161037e01528181610a3901528181610b7f01528181610c4e01528181610e1401528181610f6f015261124f0152600061103b01526000610ab801526124bd6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063b9a7b622116100a2578063e075398611610071578063e0753986146104ee578063e655dbd81461054a578063f3bfc7381461055d578063f5298aca1461058457600080fd5b8063b9a7b622146104b2578063c04a8a10146104ba578063c222ec8a146104cd578063dd62ed3e146104e057600080fd5b8063a9059cbb116100de578063a9059cbb146101fd578063b16a19de14610462578063b1bf962d14610480578063b3f1c93d1461048857600080fd5b80637ecebe001461042457806395d89b411461045a578063a457c2d7146101fd57600080fd5b8063313ce5671161017c57806370a082311161014b57806370a08231146103665780637535d2461461037957806375d26413146103c557806378160376146103e857600080fd5b8063313ce567146103035780633644e5151461031857806339509351146101fd5780636bd76d241461032057600080fd5b80630b52d558116101b85780630b52d5581461028257806318160ddd146102975780631da24f3e146102ad57806323b872dd146102f557600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630afbcdc914610220575b600080fd5b6101e7610597565b6040516101f49190611e7b565b60405180910390f35b61021061020b366004611ec3565b610629565b60405190151581526020016101f4565b61026d61022e366004611eef565b73ffffffffffffffffffffffffffffffffffffffff16600090815260386020526040902054603a546fffffffffffffffffffffffffffffffff90911691565b604080519283526020830191909152016101f4565b610295610290366004611f1d565b610699565b005b61029f6109ea565b6040519081526020016101f4565b61029f6102bb366004611eef565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61021061020b366004611f8b565b603d5460405160ff90911681526020016101f4565b61029f610ab4565b61029f61032e366004611fcc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61029f610374366004611eef565b610aed565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff166103a0565b6101e76040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61029f610432366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b6101e7610bf8565b60375473ffffffffffffffffffffffffffffffffffffffff166103a0565b61029f610c07565b61049b610496366004612005565b610c12565b6040805192151583526020830191909152016101f4565b61029f600181565b6102956104c8366004611ec3565b610d1b565b6102956104db36600461216e565b610d2a565b61029f61020b366004611fcc565b61029f6104fc366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b610295610558366004611eef565b611037565b61029f7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b61029f610592366004612243565b611215565b6060603b80546105a690612278565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290612278565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815260009161069091600401611e7b565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881661071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054906107be610ab4565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c001604051602081830303815290604052805190602001206040516020016108769291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156108fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b506109ae8260016122fb565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603460205260409020556109df8989896112da565b505050505050505050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610aaf917f00000000000000000000000000000000000000000000000000000000000000009091169063386497fd90602401602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190612313565b603a5490611351565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ae5575060355490565b610aaf6113a8565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff1680610b335750600092915050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152610bf1917f0000000000000000000000000000000000000000000000000000000000000000169063386497fd90602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612313565b8290611351565b9392505050565b6060603c80546105a690612278565b6000610aaf603a5490565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610cfa57610cfa85878661146d565b610d068686868661152d565b610d0e610c07565b9150915094509492505050565b610d263383836112da565b5050565b60015460039060ff1680610d3d5750303b155b80610d49575060005481115b610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610690565b60015460ff16158015610e1257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525090610ecf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b50610ed98661176e565b610ee285611781565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a1617179055610f676113a8565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051610ff49695949392919061232c565b60405180910390a3801561102b57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c891906123cc565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115991906123e9565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b506112ca8460008585611794565b6112d2610c07565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761138657600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d3611ab1565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526036602090815260408083209386168352929052908120546114ad90839061240b565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19061151f9086815260200190565b60405180910390a450505050565b60008061153a8484611abb565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169291611606918491700100000000000000000000000000000000900416611351565b6116108387611351565b61161a919061240b565b905061162585611afa565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905561168d8761168885611afa565b611ba0565b600061169982886122fb565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116fb91815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b8051610d2690603b906020840190611d80565b8051610d2690603c906020840190611d80565b60006117a08383611abb565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161180f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161186c918491700100000000000000000000000000000000900416611351565b6118768386611351565b611880919061240b565b905061188b84611afa565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556118f3876118ee85611afa565b611d1c565b848111156119d2576000611907868361240b565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611aa8565b60006119de828761240b565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909060600160405180910390a3505b50505050505050565b6060610aaf610597565b600081156b033b2e3c9fd0803ce800000060028404190484111715611adf57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610690565b5090565b603a54611bbf6fffffffffffffffffffffffffffffffff8316826122fb565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c048382612422565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d546101009004168015611d15576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015611d0157600080fd5b505af11580156109df573d6000803e3d6000fd5b5050505050565b603a54611d3b6fffffffffffffffffffffffffffffffff83168261240b565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c048382612456565b828054611d8c90612278565b90600052602060002090601f016020900481019282611dae5760008555611df4565b82601f10611dc757805160ff1916838001178555611df4565b82800160010185558215611df4579182015b82811115611df4578251825591602001919060010190611dd9565b50611b9c9291505b80821115611b9c5760008155600101611dfc565b6000815180845260005b81811015611e3657602081850181015186830182015201611e1a565b81811115611e48576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf16020830184611e10565b73ffffffffffffffffffffffffffffffffffffffff81168114611eb057600080fd5b50565b8035611ebe81611e8e565b919050565b60008060408385031215611ed657600080fd5b8235611ee181611e8e565b946020939093013593505050565b600060208284031215611f0157600080fd5b8135610bf181611e8e565b803560ff81168114611ebe57600080fd5b600080600080600080600060e0888a031215611f3857600080fd5b8735611f4381611e8e565b96506020880135611f5381611e8e565b95506040880135945060608801359350611f6f60808901611f0c565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215611fa057600080fd5b8335611fab81611e8e565b92506020840135611fbb81611e8e565b929592945050506040919091013590565b60008060408385031215611fdf57600080fd5b8235611fea81611e8e565b91506020830135611ffa81611e8e565b809150509250929050565b6000806000806080858703121561201b57600080fd5b843561202681611e8e565b9350602085013561203681611e8e565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261208b57600080fd5b813567ffffffffffffffff808211156120a6576120a661204b565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156120ec576120ec61204b565b8160405283815286602085880101111561210557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f84011261213757600080fd5b50813567ffffffffffffffff81111561214f57600080fd5b60208301915083602082850101111561216757600080fd5b9250929050565b60008060008060008060008060e0898b03121561218a57600080fd5b883561219581611e8e565b975060208901356121a581611e8e565b96506121b360408a01611eb3565b95506121c160608a01611f0c565b9450608089013567ffffffffffffffff808211156121de57600080fd5b6121ea8c838d0161207a565b955060a08b013591508082111561220057600080fd5b61220c8c838d0161207a565b945060c08b013591508082111561222257600080fd5b5061222f8b828c01612125565b999c989b5096995094979396929594505050565b60008060006060848603121561225857600080fd5b833561226381611e8e565b95602085013595506040909401359392505050565b600181811c9082168061228c57607f821691505b602082108114156122c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561230e5761230e6122cc565b500190565b60006020828403121561232557600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a06040820152600061236460a0830187611e10565b82810360608401526123768187611e10565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b6000602082840312156123de57600080fd5b8151610bf181611e8e565b6000602082840312156123fb57600080fd5b81518015158114610bf157600080fd5b60008282101561241d5761241d6122cc565b500390565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561244d5761244d6122cc565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561247f5761247f6122cc565b03939250505056fea264697066735822122000f4562bffe853f0ac0a29a385a30de82985a21e620daafd354694785019fc9964736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x27C2 CODESIZE SUB DUP1 PUSH3 0x27C2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x247 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5641524941424C455F444542545F544F4B454E5F494D504C0000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5641524941424C455F444542545F544F4B454E5F494D504C0000000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x11D SWAP2 SWAP1 PUSH3 0x247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE DUP3 MLOAD PUSH3 0x13E SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x188 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x154 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x188 JUMP JUMPDEST POP PUSH1 0x3D DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x2AB SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x196 SWAP1 PUSH3 0x26E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x1BA JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x205 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1D5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x205 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x205 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x205 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1E8 JUMP JUMPDEST POP PUSH3 0x213 SWAP3 SWAP2 POP PUSH3 0x217 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x213 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x267 DUP2 PUSH3 0x22E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x283 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x2A5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x24BD PUSH3 0x305 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x37E ADD MSTORE DUP2 DUP2 PUSH2 0xA39 ADD MSTORE DUP2 DUP2 PUSH2 0xB7F ADD MSTORE DUP2 DUP2 PUSH2 0xC4E ADD MSTORE DUP2 DUP2 PUSH2 0xE14 ADD MSTORE DUP2 DUP2 PUSH2 0xF6F ADD MSTORE PUSH2 0x124F ADD MSTORE PUSH1 0x0 PUSH2 0x103B ADD MSTORE PUSH1 0x0 PUSH2 0xAB8 ADD MSTORE PUSH2 0x24BD PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xB9A7B622 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x55D JUMPI DUP1 PUSH4 0xF5298ACA EQ PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x303 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB52D558 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x220 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC3 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x26D PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1D JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x29F PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x2BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1F8B JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xAB4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST PUSH2 0x3A0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x1E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x432 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0xBF8 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xC07 JUMP JUMPDEST PUSH2 0x49B PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x2005 JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC3 JUMP JUMPDEST PUSH2 0xD1B JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x216E JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x29F PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCC JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x558 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0x1037 JUMP JUMPDEST PUSH2 0x29F PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x2243 JUMP JUMPDEST PUSH2 0x1215 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2278 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x2278 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x690 SWAP2 PUSH1 0x4 ADD PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x71B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x7BE PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x876 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0x9AE DUP3 PUSH1 0x1 PUSH2 0x22FB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x9DF DUP10 DUP10 DUP10 PUSH2 0x12DA JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xAAF SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA82 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAA6 SWAP2 SWAP1 PUSH2 0x2313 JUMP JUMPDEST PUSH1 0x3A SLOAD SWAP1 PUSH2 0x1351 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAE5 JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAAF PUSH2 0x13A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0xBF1 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBEA SWAP2 SWAP1 PUSH2 0x2313 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1351 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2278 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAAF PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCFA JUMPI PUSH2 0xCFA DUP6 DUP8 DUP7 PUSH2 0x146D JUMP JUMPDEST PUSH2 0xD06 DUP7 DUP7 DUP7 DUP7 PUSH2 0x152D JUMP JUMPDEST PUSH2 0xD0E PUSH2 0xC07 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD26 CALLER DUP4 DUP4 PUSH2 0x12DA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0xD3D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0xD49 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE12 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xECF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0xED9 DUP7 PUSH2 0x176E JUMP JUMPDEST PUSH2 0xEE2 DUP6 PUSH2 0x1781 JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0xF67 PUSH2 0x13A8 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0xFF4 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x232C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x102B JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C8 SWAP2 SWAP1 PUSH2 0x23CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1135 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1159 SWAP2 SWAP1 PUSH2 0x23E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11C7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x12BC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0x12CA DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1794 JUMP JUMPDEST PUSH2 0x12D2 PUSH2 0xC07 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x13D3 PUSH2 0x1AB1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x14AD SWAP1 DUP4 SWAP1 PUSH2 0x240B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x151F SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x153A DUP5 DUP5 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x15A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1606 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1610 DUP4 DUP8 PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x161A SWAP2 SWAP1 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH2 0x1625 DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x168D DUP8 PUSH2 0x1688 DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH2 0x1BA0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1699 DUP3 DUP9 PUSH2 0x22FB JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x16FB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D80 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17A0 DUP4 DUP4 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x180F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x186C SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1876 DUP4 DUP7 PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1880 SWAP2 SWAP1 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH2 0x188B DUP5 PUSH2 0x1AFA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x18F3 DUP8 PUSH2 0x18EE DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH2 0x1D1C JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x19D2 JUMPI PUSH1 0x0 PUSH2 0x1907 DUP7 DUP4 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1969 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1AA8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DE DUP3 DUP8 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1A40 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAAF PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1B9C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1BBF PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x22FB JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C04 DUP4 DUP3 PUSH2 0x2422 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x1D15 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1D3B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x240B JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C04 DUP4 DUP3 PUSH2 0x2456 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1D8C SWAP1 PUSH2 0x2278 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1DAE JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x1DF4 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1DC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1DF4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1DF4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1DF4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1DD9 JUMP JUMPDEST POP PUSH2 0x1B9C SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B9C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E36 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1E1A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1E48 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1EBE DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1ED6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1EE1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1F38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1F43 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x1F53 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1F6F PUSH1 0x80 DUP10 ADD PUSH2 0x1F0C JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1FA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FAB DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FBB DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FEA DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1FFA DUP2 PUSH2 0x1E8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x201B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2026 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x2036 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x208B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x20A6 JUMPI PUSH2 0x20A6 PUSH2 0x204B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x20EC JUMPI PUSH2 0x20EC PUSH2 0x204B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x218A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x2195 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x21A5 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x21B3 PUSH1 0x40 DUP11 ADD PUSH2 0x1EB3 JUMP JUMPDEST SWAP6 POP PUSH2 0x21C1 PUSH1 0x60 DUP11 ADD PUSH2 0x1F0C JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21EA DUP13 DUP4 DUP14 ADD PUSH2 0x207A JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x220C DUP13 DUP4 DUP14 ADD PUSH2 0x207A JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x222F DUP12 DUP3 DUP13 ADD PUSH2 0x2125 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2263 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x228C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x22C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x230E JUMPI PUSH2 0x230E PUSH2 0x22CC JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2364 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x1E10 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2376 DUP2 DUP8 PUSH2 0x1E10 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x241D JUMPI PUSH2 0x241D PUSH2 0x22CC JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x244D JUMPI PUSH2 0x244D PUSH2 0x22CC JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x247F JUMPI PUSH2 0x247F PUSH2 0x22CC JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP DELEGATECALL JUMP 0x2B SELFDESTRUCT 0xE8 MSTORE8 CREATE 0xAC EXP 0x29 LOG3 DUP6 LOG3 0xD 0xE8 0x29 DUP6 LOG2 0x1E PUSH3 0xDAAFD CALLDATALOAD CHAINID SWAP5 PUSH25 0x5019FC9964736F6C634300080A003300000000000000000000 ","sourceMap":"198:197:80:-:0;;;928:1:87;886:43;;254:50:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;296:4;1550::118;988:195:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1612:1:118;1116:4:123;1122;1128:6;1136:8;817:4:122;823;829:6;837:8;630:13:120;619:24;;;;;;2780:4:121;-1:-1:-1;;;;;2780:23:121;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:121;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:121;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:121;:20;;-1:-1:-1;;2851:20:121;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:121;;;-1:-1:-1;198:197:80;;-1:-1:-1;;;;;;;;;198:197:80;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;198:197:80;;;-1:-1:-1;198:197:80;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:124;-1:-1:-1;;;;;96:31:124;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:124:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;198:197:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_TOKEN_REVISION_30101":{"entryPoint":null,"id":30101,"parameterSlots":0,"returnSlots":0},"@DELEGATION_WITH_SIG_TYPEHASH_30473":{"entryPoint":null,"id":30473,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_30723":{"entryPoint":2740,"id":30723,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_30682":{"entryPoint":null,"id":30682,"parameterSlots":0,"returnSlots":0},"@POOL_30880":{"entryPoint":null,"id":30880,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_ASSET_ADDRESS_30440":{"entryPoint":null,"id":30440,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_30331":{"entryPoint":6833,"id":30331,"parameterSlots":0,"returnSlots":1},"@_approveDelegation_30636":{"entryPoint":4826,"id":30636,"parameterSlots":3,"returnSlots":0},"@_burnScaled_31772":{"entryPoint":6036,"id":31772,"parameterSlots":4,"returnSlots":0},"@_burn_31449":{"entryPoint":7452,"id":31449,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_30766":{"entryPoint":5032,"id":30766,"parameterSlots":0,"returnSlots":1},"@_decreaseBorrowAllowance_30672":{"entryPoint":5229,"id":30672,"parameterSlots":3,"returnSlots":0},"@_mintScaled_31654":{"entryPoint":5421,"id":31654,"parameterSlots":4,"returnSlots":1},"@_mint_31390":{"entryPoint":7072,"id":31390,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_31299":{"entryPoint":null,"id":31299,"parameterSlots":1,"returnSlots":0},"@_setName_31277":{"entryPoint":5998,"id":31277,"parameterSlots":1,"returnSlots":0},"@_setSymbol_31288":{"entryPoint":6017,"id":31288,"parameterSlots":1,"returnSlots":0},"@allowance_30364":{"entryPoint":null,"id":30364,"parameterSlots":2,"returnSlots":1},"@approveDelegation_30499":{"entryPoint":3355,"id":30499,"parameterSlots":2,"returnSlots":0},"@approve_30380":{"entryPoint":1577,"id":30380,"parameterSlots":2,"returnSlots":1},"@balanceOf_30232":{"entryPoint":2797,"id":30232,"parameterSlots":1,"returnSlots":1},"@balanceOf_30971":{"entryPoint":null,"id":30971,"parameterSlots":1,"returnSlots":1},"@borrowAllowance_30610":{"entryPoint":null,"id":30610,"parameterSlots":2,"returnSlots":1},"@burn_30302":{"entryPoint":4629,"id":30302,"parameterSlots":3,"returnSlots":1},"@decimals_30946":{"entryPoint":null,"id":30946,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_30430":{"entryPoint":null,"id":30430,"parameterSlots":2,"returnSlots":1},"@delegationWithSig_30592":{"entryPoint":1689,"id":30592,"parameterSlots":7,"returnSlots":0},"@getIncentivesController_30981":{"entryPoint":null,"id":30981,"parameterSlots":0,"returnSlots":1},"@getPreviousIndex_31558":{"entryPoint":null,"id":31558,"parameterSlots":1,"returnSlots":1},"@getRevision_11101":{"entryPoint":null,"id":11101,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_31531":{"entryPoint":null,"id":31531,"parameterSlots":1,"returnSlots":2},"@increaseAllowance_30414":{"entryPoint":null,"id":30414,"parameterSlots":2,"returnSlots":1},"@initialize_30190":{"entryPoint":3370,"id":30190,"parameterSlots":8,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@mint_30273":{"entryPoint":3090,"id":30273,"parameterSlots":4,"returnSlots":2},"@name_30926":{"entryPoint":1431,"id":30926,"parameterSlots":0,"returnSlots":1},"@nonces_30736":{"entryPoint":null,"id":30736,"parameterSlots":1,"returnSlots":1},"@rayDiv_23792":{"entryPoint":6843,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":4945,"id":23780,"parameterSlots":2,"returnSlots":1},"@scaledBalanceOf_31510":{"entryPoint":null,"id":31510,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_31543":{"entryPoint":3079,"id":31543,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_30995":{"entryPoint":4151,"id":30995,"parameterSlots":1,"returnSlots":0},"@symbol_30936":{"entryPoint":3064,"id":30936,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":6906,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_30320":{"entryPoint":2538,"id":30320,"parameterSlots":0,"returnSlots":1},"@totalSupply_30956":{"entryPoint":null,"id":30956,"parameterSlots":0,"returnSlots":1},"@transferFrom_30398":{"entryPoint":null,"id":30398,"parameterSlots":3,"returnSlots":1},"@transfer_30348":{"entryPoint":null,"id":30348,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":7859,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":8485,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_string":{"entryPoint":8314,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":7919,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":9164,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":8140,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":8075,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":8197,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":7965,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":7875,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":8771,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":9193,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr":{"entryPoint":8558,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8979,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint8":{"entryPoint":7948,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":7696,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":9004,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":7803,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":9250,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":8955,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":9302,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9227,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":8824,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":8908,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8267,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7822,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16003:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"820:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:124"},"nodeType":"YulFunctionCall","src":"909:12:124"},"nodeType":"YulExpressionStatement","src":"909:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:124"},"nodeType":"YulFunctionCall","src":"840:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:73:124"},"nodeType":"YulIf","src":"830:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:124","type":""}],"src":"775:154:124"},{"body":{"nodeType":"YulBlock","src":"983:85:124","statements":[{"nodeType":"YulAssignment","src":"993:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:124"},"nodeType":"YulFunctionCall","src":"1002:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:124"},"nodeType":"YulFunctionCall","src":"1031:31:124"},"nodeType":"YulExpressionStatement","src":"1031:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:124","type":""}],"src":"934:134:124"},{"body":{"nodeType":"YulBlock","src":"1160:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:124"},"nodeType":"YulFunctionCall","src":"1208:12:124"},"nodeType":"YulExpressionStatement","src":"1208:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:124"},"nodeType":"YulFunctionCall","src":"1177:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:124"},"nodeType":"YulFunctionCall","src":"1173:32:124"},"nodeType":"YulIf","src":"1170:52:124"},{"nodeType":"YulVariableDeclaration","src":"1231:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:124"},"nodeType":"YulFunctionCall","src":"1244:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:124"},"nodeType":"YulFunctionCall","src":"1276:31:124"},"nodeType":"YulExpressionStatement","src":"1276:31:124"},{"nodeType":"YulAssignment","src":"1316:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:124"}]},{"nodeType":"YulAssignment","src":"1340:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:124","type":""}],"src":"1073:315:124"},{"body":{"nodeType":"YulBlock","src":"1488:92:124","statements":[{"nodeType":"YulAssignment","src":"1498:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:124"},"nodeType":"YulFunctionCall","src":"1558:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:124"},"nodeType":"YulFunctionCall","src":"1551:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:41:124"},"nodeType":"YulExpressionStatement","src":"1533:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:124","type":""}],"src":"1393:187:124"},{"body":{"nodeType":"YulBlock","src":"1655:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:124"},"nodeType":"YulFunctionCall","src":"1703:12:124"},"nodeType":"YulExpressionStatement","src":"1703:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:124"},"nodeType":"YulFunctionCall","src":"1672:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:124"},"nodeType":"YulFunctionCall","src":"1668:32:124"},"nodeType":"YulIf","src":"1665:52:124"},{"nodeType":"YulVariableDeclaration","src":"1726:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:124"},"nodeType":"YulFunctionCall","src":"1739:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:124"},"nodeType":"YulFunctionCall","src":"1771:31:124"},"nodeType":"YulExpressionStatement","src":"1771:31:124"},{"nodeType":"YulAssignment","src":"1811:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:124","type":""}],"src":"1585:247:124"},{"body":{"nodeType":"YulBlock","src":"1966:119:124","statements":[{"nodeType":"YulAssignment","src":"1976:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:124"},"nodeType":"YulFunctionCall","src":"1984:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:124"},"nodeType":"YulFunctionCall","src":"2011:25:124"},"nodeType":"YulExpressionStatement","src":"2011:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:124"},"nodeType":"YulFunctionCall","src":"2052:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:124"},"nodeType":"YulFunctionCall","src":"2045:34:124"},"nodeType":"YulExpressionStatement","src":"2045:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:124","type":""}],"src":"1837:248:124"},{"body":{"nodeType":"YulBlock","src":"2137:109:124","statements":[{"nodeType":"YulAssignment","src":"2147:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2169:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2156:12:124"},"nodeType":"YulFunctionCall","src":"2156:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2147:5:124"}]},{"body":{"nodeType":"YulBlock","src":"2224:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2233:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2236:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2226:6:124"},"nodeType":"YulFunctionCall","src":"2226:12:124"},"nodeType":"YulExpressionStatement","src":"2226:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2198:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2209:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2216:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2205:3:124"},"nodeType":"YulFunctionCall","src":"2205:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2195:2:124"},"nodeType":"YulFunctionCall","src":"2195:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2188:6:124"},"nodeType":"YulFunctionCall","src":"2188:35:124"},"nodeType":"YulIf","src":"2185:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2116:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2127:5:124","type":""}],"src":"2090:156:124"},{"body":{"nodeType":"YulBlock","src":"2421:564:124","statements":[{"body":{"nodeType":"YulBlock","src":"2468:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2477:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2480:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2470:6:124"},"nodeType":"YulFunctionCall","src":"2470:12:124"},"nodeType":"YulExpressionStatement","src":"2470:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2442:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2451:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2438:3:124"},"nodeType":"YulFunctionCall","src":"2438:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2463:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2434:3:124"},"nodeType":"YulFunctionCall","src":"2434:33:124"},"nodeType":"YulIf","src":"2431:53:124"},{"nodeType":"YulVariableDeclaration","src":"2493:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2519:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2506:12:124"},"nodeType":"YulFunctionCall","src":"2506:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2497:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2563:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2538:24:124"},"nodeType":"YulFunctionCall","src":"2538:31:124"},"nodeType":"YulExpressionStatement","src":"2538:31:124"},{"nodeType":"YulAssignment","src":"2578:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2588:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2578:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2602:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2634:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2645:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2630:3:124"},"nodeType":"YulFunctionCall","src":"2630:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2617:12:124"},"nodeType":"YulFunctionCall","src":"2617:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2606:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2683:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2658:24:124"},"nodeType":"YulFunctionCall","src":"2658:33:124"},"nodeType":"YulExpressionStatement","src":"2658:33:124"},{"nodeType":"YulAssignment","src":"2700:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2710:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2700:6:124"}]},{"nodeType":"YulAssignment","src":"2726:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2753:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2764:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2749:3:124"},"nodeType":"YulFunctionCall","src":"2749:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2736:12:124"},"nodeType":"YulFunctionCall","src":"2736:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2726:6:124"}]},{"nodeType":"YulAssignment","src":"2777:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2804:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2815:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2800:3:124"},"nodeType":"YulFunctionCall","src":"2800:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2787:12:124"},"nodeType":"YulFunctionCall","src":"2787:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2777:6:124"}]},{"nodeType":"YulAssignment","src":"2828:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2859:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2870:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2855:3:124"},"nodeType":"YulFunctionCall","src":"2855:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2838:16:124"},"nodeType":"YulFunctionCall","src":"2838:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2828:6:124"}]},{"nodeType":"YulAssignment","src":"2884:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2911:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2922:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2907:3:124"},"nodeType":"YulFunctionCall","src":"2907:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2894:12:124"},"nodeType":"YulFunctionCall","src":"2894:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2884:6:124"}]},{"nodeType":"YulAssignment","src":"2936:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2963:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2974:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2959:3:124"},"nodeType":"YulFunctionCall","src":"2959:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2946:12:124"},"nodeType":"YulFunctionCall","src":"2946:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2936:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2339:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2350:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2362:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2370:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2378:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2386:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2394:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2402:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"2410:6:124","type":""}],"src":"2251:734:124"},{"body":{"nodeType":"YulBlock","src":"3091:76:124","statements":[{"nodeType":"YulAssignment","src":"3101:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3113:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3124:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3109:3:124"},"nodeType":"YulFunctionCall","src":"3109:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3101:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3143:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3154:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3136:6:124"},"nodeType":"YulFunctionCall","src":"3136:25:124"},"nodeType":"YulExpressionStatement","src":"3136:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3060:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3071:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3082:4:124","type":""}],"src":"2990:177:124"},{"body":{"nodeType":"YulBlock","src":"3276:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"3322:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3331:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3334:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3324:6:124"},"nodeType":"YulFunctionCall","src":"3324:12:124"},"nodeType":"YulExpressionStatement","src":"3324:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3297:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3306:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3293:3:124"},"nodeType":"YulFunctionCall","src":"3293:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3318:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3289:3:124"},"nodeType":"YulFunctionCall","src":"3289:32:124"},"nodeType":"YulIf","src":"3286:52:124"},{"nodeType":"YulVariableDeclaration","src":"3347:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3373:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3360:12:124"},"nodeType":"YulFunctionCall","src":"3360:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3351:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3417:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3392:24:124"},"nodeType":"YulFunctionCall","src":"3392:31:124"},"nodeType":"YulExpressionStatement","src":"3392:31:124"},{"nodeType":"YulAssignment","src":"3432:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3442:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3432:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3456:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3499:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:124"},"nodeType":"YulFunctionCall","src":"3484:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:124"},"nodeType":"YulFunctionCall","src":"3471:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3460:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3537:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3512:24:124"},"nodeType":"YulFunctionCall","src":"3512:33:124"},"nodeType":"YulExpressionStatement","src":"3512:33:124"},{"nodeType":"YulAssignment","src":"3554:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3564:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3554:6:124"}]},{"nodeType":"YulAssignment","src":"3580:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3607:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3618:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3603:3:124"},"nodeType":"YulFunctionCall","src":"3603:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3590:12:124"},"nodeType":"YulFunctionCall","src":"3590:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3580:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3226:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3237:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3249:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3257:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3265:6:124","type":""}],"src":"3172:456:124"},{"body":{"nodeType":"YulBlock","src":"3730:87:124","statements":[{"nodeType":"YulAssignment","src":"3740:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3752:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3763:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3748:3:124"},"nodeType":"YulFunctionCall","src":"3748:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3740:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3782:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3797:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3805:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3793:3:124"},"nodeType":"YulFunctionCall","src":"3793:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3775:6:124"},"nodeType":"YulFunctionCall","src":"3775:36:124"},"nodeType":"YulExpressionStatement","src":"3775:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3699:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3710:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3721:4:124","type":""}],"src":"3633:184:124"},{"body":{"nodeType":"YulBlock","src":"3923:76:124","statements":[{"nodeType":"YulAssignment","src":"3933:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3945:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3956:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3941:3:124"},"nodeType":"YulFunctionCall","src":"3941:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3933:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3975:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3986:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3968:6:124"},"nodeType":"YulFunctionCall","src":"3968:25:124"},"nodeType":"YulExpressionStatement","src":"3968:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3892:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3903:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3914:4:124","type":""}],"src":"3822:177:124"},{"body":{"nodeType":"YulBlock","src":"4091:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"4137:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4146:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4149:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4139:6:124"},"nodeType":"YulFunctionCall","src":"4139:12:124"},"nodeType":"YulExpressionStatement","src":"4139:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4112:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4121:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4108:3:124"},"nodeType":"YulFunctionCall","src":"4108:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4133:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4104:3:124"},"nodeType":"YulFunctionCall","src":"4104:32:124"},"nodeType":"YulIf","src":"4101:52:124"},{"nodeType":"YulVariableDeclaration","src":"4162:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4188:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4175:12:124"},"nodeType":"YulFunctionCall","src":"4175:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4166:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4232:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4207:24:124"},"nodeType":"YulFunctionCall","src":"4207:31:124"},"nodeType":"YulExpressionStatement","src":"4207:31:124"},{"nodeType":"YulAssignment","src":"4247:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4257:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4247:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4271:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4303:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4314:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4299:3:124"},"nodeType":"YulFunctionCall","src":"4299:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4286:12:124"},"nodeType":"YulFunctionCall","src":"4286:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4275:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4352:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4327:24:124"},"nodeType":"YulFunctionCall","src":"4327:33:124"},"nodeType":"YulExpressionStatement","src":"4327:33:124"},{"nodeType":"YulAssignment","src":"4369:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4379:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4369:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4049:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4060:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4072:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4080:6:124","type":""}],"src":"4004:388:124"},{"body":{"nodeType":"YulBlock","src":"4512:125:124","statements":[{"nodeType":"YulAssignment","src":"4522:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4534:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4545:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4530:3:124"},"nodeType":"YulFunctionCall","src":"4530:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4522:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4564:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4579:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4587:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4575:3:124"},"nodeType":"YulFunctionCall","src":"4575:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4557:6:124"},"nodeType":"YulFunctionCall","src":"4557:74:124"},"nodeType":"YulExpressionStatement","src":"4557:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4481:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4492:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4503:4:124","type":""}],"src":"4397:240:124"},{"body":{"nodeType":"YulBlock","src":"4777:125:124","statements":[{"nodeType":"YulAssignment","src":"4787:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4799:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4810:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4795:3:124"},"nodeType":"YulFunctionCall","src":"4795:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4787:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4829:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4844:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4852:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4840:3:124"},"nodeType":"YulFunctionCall","src":"4840:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4822:6:124"},"nodeType":"YulFunctionCall","src":"4822:74:124"},"nodeType":"YulExpressionStatement","src":"4822:74:124"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4746:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4757:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4768:4:124","type":""}],"src":"4642:260:124"},{"body":{"nodeType":"YulBlock","src":"5026:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5043:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5054:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5036:6:124"},"nodeType":"YulFunctionCall","src":"5036:21:124"},"nodeType":"YulExpressionStatement","src":"5036:21:124"},{"nodeType":"YulAssignment","src":"5066:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5092:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5104:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5115:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5100:3:124"},"nodeType":"YulFunctionCall","src":"5100:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5074:17:124"},"nodeType":"YulFunctionCall","src":"5074:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5066:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4995:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5006:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5017:4:124","type":""}],"src":"4907:218:124"},{"body":{"nodeType":"YulBlock","src":"5231:125:124","statements":[{"nodeType":"YulAssignment","src":"5241:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5253:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5264:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5249:3:124"},"nodeType":"YulFunctionCall","src":"5249:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5241:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5283:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5298:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5306:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5294:3:124"},"nodeType":"YulFunctionCall","src":"5294:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5276:6:124"},"nodeType":"YulFunctionCall","src":"5276:74:124"},"nodeType":"YulExpressionStatement","src":"5276:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5200:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5211:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5222:4:124","type":""}],"src":"5130:226:124"},{"body":{"nodeType":"YulBlock","src":"5482:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"5529:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5538:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5541:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5531:6:124"},"nodeType":"YulFunctionCall","src":"5531:12:124"},"nodeType":"YulExpressionStatement","src":"5531:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5503:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5512:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5499:3:124"},"nodeType":"YulFunctionCall","src":"5499:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5524:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5495:3:124"},"nodeType":"YulFunctionCall","src":"5495:33:124"},"nodeType":"YulIf","src":"5492:53:124"},{"nodeType":"YulVariableDeclaration","src":"5554:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5580:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5567:12:124"},"nodeType":"YulFunctionCall","src":"5567:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5558:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5624:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5599:24:124"},"nodeType":"YulFunctionCall","src":"5599:31:124"},"nodeType":"YulExpressionStatement","src":"5599:31:124"},{"nodeType":"YulAssignment","src":"5639:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5649:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5639:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5663:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5695:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5706:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5691:3:124"},"nodeType":"YulFunctionCall","src":"5691:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5678:12:124"},"nodeType":"YulFunctionCall","src":"5678:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5667:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5744:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5719:24:124"},"nodeType":"YulFunctionCall","src":"5719:33:124"},"nodeType":"YulExpressionStatement","src":"5719:33:124"},{"nodeType":"YulAssignment","src":"5761:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5771:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5761:6:124"}]},{"nodeType":"YulAssignment","src":"5787:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5814:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5825:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5810:3:124"},"nodeType":"YulFunctionCall","src":"5810:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5797:12:124"},"nodeType":"YulFunctionCall","src":"5797:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5787:6:124"}]},{"nodeType":"YulAssignment","src":"5838:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5876:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5861:3:124"},"nodeType":"YulFunctionCall","src":"5861:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5848:12:124"},"nodeType":"YulFunctionCall","src":"5848:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5838:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5424:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5435:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5447:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5455:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5463:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5471:6:124","type":""}],"src":"5361:525:124"},{"body":{"nodeType":"YulBlock","src":"6014:135:124","statements":[{"nodeType":"YulAssignment","src":"6024:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6036:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6047:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6032:3:124"},"nodeType":"YulFunctionCall","src":"6032:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6024:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6066:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6091:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6084:6:124"},"nodeType":"YulFunctionCall","src":"6084:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6077:6:124"},"nodeType":"YulFunctionCall","src":"6077:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6059:6:124"},"nodeType":"YulFunctionCall","src":"6059:41:124"},"nodeType":"YulExpressionStatement","src":"6059:41:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6120:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6131:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6116:3:124"},"nodeType":"YulFunctionCall","src":"6116:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"6136:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6109:6:124"},"nodeType":"YulFunctionCall","src":"6109:34:124"},"nodeType":"YulExpressionStatement","src":"6109:34:124"}]},"name":"abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5975:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5986:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5994:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6005:4:124","type":""}],"src":"5891:258:124"},{"body":{"nodeType":"YulBlock","src":"6186:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6203:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6206:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6196:6:124"},"nodeType":"YulFunctionCall","src":"6196:88:124"},"nodeType":"YulExpressionStatement","src":"6196:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6300:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6303:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6293:6:124"},"nodeType":"YulFunctionCall","src":"6293:15:124"},"nodeType":"YulExpressionStatement","src":"6293:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6324:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6327:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6317:6:124"},"nodeType":"YulFunctionCall","src":"6317:15:124"},"nodeType":"YulExpressionStatement","src":"6317:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6154:184:124"},{"body":{"nodeType":"YulBlock","src":"6396:725:124","statements":[{"body":{"nodeType":"YulBlock","src":"6445:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6454:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6457:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6447:6:124"},"nodeType":"YulFunctionCall","src":"6447:12:124"},"nodeType":"YulExpressionStatement","src":"6447:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6424:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6432:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6420:3:124"},"nodeType":"YulFunctionCall","src":"6420:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"6439:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6416:3:124"},"nodeType":"YulFunctionCall","src":"6416:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6409:6:124"},"nodeType":"YulFunctionCall","src":"6409:35:124"},"nodeType":"YulIf","src":"6406:55:124"},{"nodeType":"YulVariableDeclaration","src":"6470:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6493:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6480:12:124"},"nodeType":"YulFunctionCall","src":"6480:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6474:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6509:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6519:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6513:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6560:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6562:16:124"},"nodeType":"YulFunctionCall","src":"6562:18:124"},"nodeType":"YulExpressionStatement","src":"6562:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6552:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6556:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6549:2:124"},"nodeType":"YulFunctionCall","src":"6549:10:124"},"nodeType":"YulIf","src":"6546:36:124"},{"nodeType":"YulVariableDeclaration","src":"6591:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6601:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6595:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6676:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6696:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6690:5:124"},"nodeType":"YulFunctionCall","src":"6690:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6680:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6708:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6730:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6754:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"6758:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6750:3:124"},"nodeType":"YulFunctionCall","src":"6750:13:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6765:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6746:3:124"},"nodeType":"YulFunctionCall","src":"6746:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"6770:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6742:3:124"},"nodeType":"YulFunctionCall","src":"6742:31:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6775:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6738:3:124"},"nodeType":"YulFunctionCall","src":"6738:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6726:3:124"},"nodeType":"YulFunctionCall","src":"6726:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6712:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6838:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6840:16:124"},"nodeType":"YulFunctionCall","src":"6840:18:124"},"nodeType":"YulExpressionStatement","src":"6840:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6797:10:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6809:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6794:2:124"},"nodeType":"YulFunctionCall","src":"6794:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6817:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6829:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6814:2:124"},"nodeType":"YulFunctionCall","src":"6814:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6791:2:124"},"nodeType":"YulFunctionCall","src":"6791:46:124"},"nodeType":"YulIf","src":"6788:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6876:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6880:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6869:6:124"},"nodeType":"YulFunctionCall","src":"6869:22:124"},"nodeType":"YulExpressionStatement","src":"6869:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6907:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6915:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6900:6:124"},"nodeType":"YulFunctionCall","src":"6900:18:124"},"nodeType":"YulExpressionStatement","src":"6900:18:124"},{"body":{"nodeType":"YulBlock","src":"6966:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6975:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6978:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6968:6:124"},"nodeType":"YulFunctionCall","src":"6968:12:124"},"nodeType":"YulExpressionStatement","src":"6968:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6941:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6949:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6937:3:124"},"nodeType":"YulFunctionCall","src":"6937:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"6954:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6933:3:124"},"nodeType":"YulFunctionCall","src":"6933:26:124"},{"name":"end","nodeType":"YulIdentifier","src":"6961:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6930:2:124"},"nodeType":"YulFunctionCall","src":"6930:35:124"},"nodeType":"YulIf","src":"6927:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7008:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7016:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7004:3:124"},"nodeType":"YulFunctionCall","src":"7004:17:124"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7027:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7035:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7023:3:124"},"nodeType":"YulFunctionCall","src":"7023:17:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7042:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"6991:12:124"},"nodeType":"YulFunctionCall","src":"6991:54:124"},"nodeType":"YulExpressionStatement","src":"6991:54:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7069:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7077:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7065:3:124"},"nodeType":"YulFunctionCall","src":"7065:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"7082:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7061:3:124"},"nodeType":"YulFunctionCall","src":"7061:26:124"},{"kind":"number","nodeType":"YulLiteral","src":"7089:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7054:6:124"},"nodeType":"YulFunctionCall","src":"7054:37:124"},"nodeType":"YulExpressionStatement","src":"7054:37:124"},{"nodeType":"YulAssignment","src":"7100:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7109:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7100:5:124"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6370:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"6378:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"6386:5:124","type":""}],"src":"6343:778:124"},{"body":{"nodeType":"YulBlock","src":"7198:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"7247:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7256:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7259:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7249:6:124"},"nodeType":"YulFunctionCall","src":"7249:12:124"},"nodeType":"YulExpressionStatement","src":"7249:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7226:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7234:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7222:3:124"},"nodeType":"YulFunctionCall","src":"7222:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7241:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7218:3:124"},"nodeType":"YulFunctionCall","src":"7218:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7211:6:124"},"nodeType":"YulFunctionCall","src":"7211:35:124"},"nodeType":"YulIf","src":"7208:55:124"},{"nodeType":"YulAssignment","src":"7272:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7295:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7282:12:124"},"nodeType":"YulFunctionCall","src":"7282:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7272:6:124"}]},{"body":{"nodeType":"YulBlock","src":"7345:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7354:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7357:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7347:6:124"},"nodeType":"YulFunctionCall","src":"7347:12:124"},"nodeType":"YulExpressionStatement","src":"7347:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7317:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7325:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7314:2:124"},"nodeType":"YulFunctionCall","src":"7314:30:124"},"nodeType":"YulIf","src":"7311:50:124"},{"nodeType":"YulAssignment","src":"7370:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7386:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7394:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7382:3:124"},"nodeType":"YulFunctionCall","src":"7382:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7370:8:124"}]},{"body":{"nodeType":"YulBlock","src":"7451:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7460:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7463:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7453:6:124"},"nodeType":"YulFunctionCall","src":"7453:12:124"},"nodeType":"YulExpressionStatement","src":"7453:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7422:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"7430:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7418:3:124"},"nodeType":"YulFunctionCall","src":"7418:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"7439:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7414:3:124"},"nodeType":"YulFunctionCall","src":"7414:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"7446:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7411:2:124"},"nodeType":"YulFunctionCall","src":"7411:39:124"},"nodeType":"YulIf","src":"7408:59:124"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7161:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7169:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7177:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7187:6:124","type":""}],"src":"7126:347:124"},{"body":{"nodeType":"YulBlock","src":"7735:1045:124","statements":[{"body":{"nodeType":"YulBlock","src":"7782:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7791:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7794:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7784:6:124"},"nodeType":"YulFunctionCall","src":"7784:12:124"},"nodeType":"YulExpressionStatement","src":"7784:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7756:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7765:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7752:3:124"},"nodeType":"YulFunctionCall","src":"7752:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7777:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7748:3:124"},"nodeType":"YulFunctionCall","src":"7748:33:124"},"nodeType":"YulIf","src":"7745:53:124"},{"nodeType":"YulVariableDeclaration","src":"7807:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7833:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7820:12:124"},"nodeType":"YulFunctionCall","src":"7820:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7811:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7877:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7852:24:124"},"nodeType":"YulFunctionCall","src":"7852:31:124"},"nodeType":"YulExpressionStatement","src":"7852:31:124"},{"nodeType":"YulAssignment","src":"7892:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7902:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7892:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7916:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7948:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7959:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7944:3:124"},"nodeType":"YulFunctionCall","src":"7944:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7931:12:124"},"nodeType":"YulFunctionCall","src":"7931:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7920:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7997:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7972:24:124"},"nodeType":"YulFunctionCall","src":"7972:33:124"},"nodeType":"YulExpressionStatement","src":"7972:33:124"},{"nodeType":"YulAssignment","src":"8014:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8024:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8014:6:124"}]},{"nodeType":"YulAssignment","src":"8040:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8073:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8084:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8069:3:124"},"nodeType":"YulFunctionCall","src":"8069:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8050:18:124"},"nodeType":"YulFunctionCall","src":"8050:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8040:6:124"}]},{"nodeType":"YulAssignment","src":"8097:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8128:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8139:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8124:3:124"},"nodeType":"YulFunctionCall","src":"8124:18:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8107:16:124"},"nodeType":"YulFunctionCall","src":"8107:36:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8097:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8152:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8194:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8179:3:124"},"nodeType":"YulFunctionCall","src":"8179:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8166:12:124"},"nodeType":"YulFunctionCall","src":"8166:33:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8156:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8208:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8218:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8212:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8263:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8272:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8275:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8265:6:124"},"nodeType":"YulFunctionCall","src":"8265:12:124"},"nodeType":"YulExpressionStatement","src":"8265:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8251:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8259:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8248:2:124"},"nodeType":"YulFunctionCall","src":"8248:14:124"},"nodeType":"YulIf","src":"8245:34:124"},{"nodeType":"YulAssignment","src":"8288:60:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8320:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"8331:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8316:3:124"},"nodeType":"YulFunctionCall","src":"8316:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8340:7:124"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8298:17:124"},"nodeType":"YulFunctionCall","src":"8298:50:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8288:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8357:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8390:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8401:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8386:3:124"},"nodeType":"YulFunctionCall","src":"8386:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8373:12:124"},"nodeType":"YulFunctionCall","src":"8373:33:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"8361:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8435:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8444:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8447:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8437:6:124"},"nodeType":"YulFunctionCall","src":"8437:12:124"},"nodeType":"YulExpressionStatement","src":"8437:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"8421:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8431:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8418:2:124"},"nodeType":"YulFunctionCall","src":"8418:16:124"},"nodeType":"YulIf","src":"8415:36:124"},{"nodeType":"YulAssignment","src":"8460:62:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8492:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"8503:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8488:3:124"},"nodeType":"YulFunctionCall","src":"8488:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8514:7:124"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8470:17:124"},"nodeType":"YulFunctionCall","src":"8470:52:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8460:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8531:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8564:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8575:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8560:3:124"},"nodeType":"YulFunctionCall","src":"8560:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8547:12:124"},"nodeType":"YulFunctionCall","src":"8547:33:124"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"8535:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8609:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8618:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8621:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8611:6:124"},"nodeType":"YulFunctionCall","src":"8611:12:124"},"nodeType":"YulExpressionStatement","src":"8611:12:124"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"8595:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8605:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8592:2:124"},"nodeType":"YulFunctionCall","src":"8592:16:124"},"nodeType":"YulIf","src":"8589:36:124"},{"nodeType":"YulVariableDeclaration","src":"8634:86:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8690:9:124"},{"name":"offset_2","nodeType":"YulIdentifier","src":"8701:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8686:3:124"},"nodeType":"YulFunctionCall","src":"8686:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8712:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8660:25:124"},"nodeType":"YulFunctionCall","src":"8660:60:124"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"8638:8:124","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"8648:8:124","type":""}]},{"nodeType":"YulAssignment","src":"8729:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"8739:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"8729:6:124"}]},{"nodeType":"YulAssignment","src":"8756:18:124","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"8766:8:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"8756:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7645:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7656:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7668:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7676:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7684:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7692:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7700:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7708:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"7716:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"7724:6:124","type":""}],"src":"7478:1302:124"},{"body":{"nodeType":"YulBlock","src":"8889:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"8935:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8944:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8947:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8937:6:124"},"nodeType":"YulFunctionCall","src":"8937:12:124"},"nodeType":"YulExpressionStatement","src":"8937:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8910:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8919:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8906:3:124"},"nodeType":"YulFunctionCall","src":"8906:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8931:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8902:3:124"},"nodeType":"YulFunctionCall","src":"8902:32:124"},"nodeType":"YulIf","src":"8899:52:124"},{"nodeType":"YulVariableDeclaration","src":"8960:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8986:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8973:12:124"},"nodeType":"YulFunctionCall","src":"8973:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8964:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9030:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9005:24:124"},"nodeType":"YulFunctionCall","src":"9005:31:124"},"nodeType":"YulExpressionStatement","src":"9005:31:124"},{"nodeType":"YulAssignment","src":"9045:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9055:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9045:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8855:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8866:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8878:6:124","type":""}],"src":"8785:281:124"},{"body":{"nodeType":"YulBlock","src":"9175:279:124","statements":[{"body":{"nodeType":"YulBlock","src":"9221:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9230:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9233:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9223:6:124"},"nodeType":"YulFunctionCall","src":"9223:12:124"},"nodeType":"YulExpressionStatement","src":"9223:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9196:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9205:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9192:3:124"},"nodeType":"YulFunctionCall","src":"9192:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9217:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9188:3:124"},"nodeType":"YulFunctionCall","src":"9188:32:124"},"nodeType":"YulIf","src":"9185:52:124"},{"nodeType":"YulVariableDeclaration","src":"9246:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9272:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9259:12:124"},"nodeType":"YulFunctionCall","src":"9259:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9250:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9316:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9291:24:124"},"nodeType":"YulFunctionCall","src":"9291:31:124"},"nodeType":"YulExpressionStatement","src":"9291:31:124"},{"nodeType":"YulAssignment","src":"9331:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9341:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9331:6:124"}]},{"nodeType":"YulAssignment","src":"9355:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9382:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9393:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9378:3:124"},"nodeType":"YulFunctionCall","src":"9378:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9365:12:124"},"nodeType":"YulFunctionCall","src":"9365:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9355:6:124"}]},{"nodeType":"YulAssignment","src":"9406:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9433:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9444:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9429:3:124"},"nodeType":"YulFunctionCall","src":"9429:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9416:12:124"},"nodeType":"YulFunctionCall","src":"9416:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9406:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9125:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9136:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9148:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9156:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9164:6:124","type":""}],"src":"9071:383:124"},{"body":{"nodeType":"YulBlock","src":"9514:382:124","statements":[{"nodeType":"YulAssignment","src":"9524:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9538:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"9541:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9534:3:124"},"nodeType":"YulFunctionCall","src":"9534:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9524:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9555:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"9585:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"9591:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9581:3:124"},"nodeType":"YulFunctionCall","src":"9581:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"9559:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9632:31:124","statements":[{"nodeType":"YulAssignment","src":"9634:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9648:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9656:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9644:3:124"},"nodeType":"YulFunctionCall","src":"9644:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9634:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9612:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9605:6:124"},"nodeType":"YulFunctionCall","src":"9605:26:124"},"nodeType":"YulIf","src":"9602:61:124"},{"body":{"nodeType":"YulBlock","src":"9722:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9743:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9746:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9736:6:124"},"nodeType":"YulFunctionCall","src":"9736:88:124"},"nodeType":"YulExpressionStatement","src":"9736:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9844:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9847:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9837:6:124"},"nodeType":"YulFunctionCall","src":"9837:15:124"},"nodeType":"YulExpressionStatement","src":"9837:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9872:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9875:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9865:6:124"},"nodeType":"YulFunctionCall","src":"9865:15:124"},"nodeType":"YulExpressionStatement","src":"9865:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9678:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9701:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9709:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9698:2:124"},"nodeType":"YulFunctionCall","src":"9698:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9675:2:124"},"nodeType":"YulFunctionCall","src":"9675:38:124"},"nodeType":"YulIf","src":"9672:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"9494:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"9503:6:124","type":""}],"src":"9459:437:124"},{"body":{"nodeType":"YulBlock","src":"10114:299:124","statements":[{"nodeType":"YulAssignment","src":"10124:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10136:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10147:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10132:3:124"},"nodeType":"YulFunctionCall","src":"10132:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10124:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10167:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"10178:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10160:6:124"},"nodeType":"YulFunctionCall","src":"10160:25:124"},"nodeType":"YulExpressionStatement","src":"10160:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10205:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10216:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10201:3:124"},"nodeType":"YulFunctionCall","src":"10201:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10225:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10233:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10221:3:124"},"nodeType":"YulFunctionCall","src":"10221:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10194:6:124"},"nodeType":"YulFunctionCall","src":"10194:83:124"},"nodeType":"YulExpressionStatement","src":"10194:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10297:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10308:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10293:3:124"},"nodeType":"YulFunctionCall","src":"10293:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"10313:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10286:6:124"},"nodeType":"YulFunctionCall","src":"10286:34:124"},"nodeType":"YulExpressionStatement","src":"10286:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10340:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10351:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10336:3:124"},"nodeType":"YulFunctionCall","src":"10336:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"10356:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10329:6:124"},"nodeType":"YulFunctionCall","src":"10329:34:124"},"nodeType":"YulExpressionStatement","src":"10329:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10383:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10394:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10379:3:124"},"nodeType":"YulFunctionCall","src":"10379:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"10400:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10372:6:124"},"nodeType":"YulFunctionCall","src":"10372:35:124"},"nodeType":"YulExpressionStatement","src":"10372:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10051:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10062:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10070:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10078:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10086:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10094:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10105:4:124","type":""}],"src":"9901:512:124"},{"body":{"nodeType":"YulBlock","src":"10666:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10683:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10688:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10676:6:124"},"nodeType":"YulFunctionCall","src":"10676:79:124"},"nodeType":"YulExpressionStatement","src":"10676:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10775:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10780:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10771:3:124"},"nodeType":"YulFunctionCall","src":"10771:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"10784:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10764:6:124"},"nodeType":"YulFunctionCall","src":"10764:27:124"},"nodeType":"YulExpressionStatement","src":"10764:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10811:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10816:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10807:3:124"},"nodeType":"YulFunctionCall","src":"10807:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"10821:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10800:6:124"},"nodeType":"YulFunctionCall","src":"10800:28:124"},"nodeType":"YulExpressionStatement","src":"10800:28:124"},{"nodeType":"YulAssignment","src":"10837:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10848:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10853:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10844:3:124"},"nodeType":"YulFunctionCall","src":"10844:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10837:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10634:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10639:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10647:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10658:3:124","type":""}],"src":"10418:444:124"},{"body":{"nodeType":"YulBlock","src":"11048:217:124","statements":[{"nodeType":"YulAssignment","src":"11058:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11070:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11081:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11066:3:124"},"nodeType":"YulFunctionCall","src":"11066:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11058:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11101:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11112:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11094:6:124"},"nodeType":"YulFunctionCall","src":"11094:25:124"},"nodeType":"YulExpressionStatement","src":"11094:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11139:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11150:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11135:3:124"},"nodeType":"YulFunctionCall","src":"11135:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11159:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11167:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11155:3:124"},"nodeType":"YulFunctionCall","src":"11155:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11128:6:124"},"nodeType":"YulFunctionCall","src":"11128:45:124"},"nodeType":"YulExpressionStatement","src":"11128:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11193:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11204:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11189:3:124"},"nodeType":"YulFunctionCall","src":"11189:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"11209:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11182:6:124"},"nodeType":"YulFunctionCall","src":"11182:34:124"},"nodeType":"YulExpressionStatement","src":"11182:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11236:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11247:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11232:3:124"},"nodeType":"YulFunctionCall","src":"11232:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"11252:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11225:6:124"},"nodeType":"YulFunctionCall","src":"11225:34:124"},"nodeType":"YulExpressionStatement","src":"11225:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10993:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11004:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11012:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11020:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11028:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11039:4:124","type":""}],"src":"10867:398:124"},{"body":{"nodeType":"YulBlock","src":"11302:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11319:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11322:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11312:6:124"},"nodeType":"YulFunctionCall","src":"11312:88:124"},"nodeType":"YulExpressionStatement","src":"11312:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11416:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11419:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11409:6:124"},"nodeType":"YulFunctionCall","src":"11409:15:124"},"nodeType":"YulExpressionStatement","src":"11409:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11440:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11443:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11433:6:124"},"nodeType":"YulFunctionCall","src":"11433:15:124"},"nodeType":"YulExpressionStatement","src":"11433:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11270:184:124"},{"body":{"nodeType":"YulBlock","src":"11507:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"11534:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11536:16:124"},"nodeType":"YulFunctionCall","src":"11536:18:124"},"nodeType":"YulExpressionStatement","src":"11536:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11523:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11530:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11526:3:124"},"nodeType":"YulFunctionCall","src":"11526:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11520:2:124"},"nodeType":"YulFunctionCall","src":"11520:13:124"},"nodeType":"YulIf","src":"11517:39:124"},{"nodeType":"YulAssignment","src":"11565:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11576:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11579:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11572:3:124"},"nodeType":"YulFunctionCall","src":"11572:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11565:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11490:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11493:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11499:3:124","type":""}],"src":"11459:128:124"},{"body":{"nodeType":"YulBlock","src":"11673:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"11719:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11728:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11731:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11721:6:124"},"nodeType":"YulFunctionCall","src":"11721:12:124"},"nodeType":"YulExpressionStatement","src":"11721:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11694:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11703:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11690:3:124"},"nodeType":"YulFunctionCall","src":"11690:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11715:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11686:3:124"},"nodeType":"YulFunctionCall","src":"11686:32:124"},"nodeType":"YulIf","src":"11683:52:124"},{"nodeType":"YulAssignment","src":"11744:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11760:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11754:5:124"},"nodeType":"YulFunctionCall","src":"11754:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11744:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11639:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11650:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11662:6:124","type":""}],"src":"11592:184:124"},{"body":{"nodeType":"YulBlock","src":"11955:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11972:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11983:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11965:6:124"},"nodeType":"YulFunctionCall","src":"11965:21:124"},"nodeType":"YulExpressionStatement","src":"11965:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12006:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12017:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12002:3:124"},"nodeType":"YulFunctionCall","src":"12002:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"12022:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11995:6:124"},"nodeType":"YulFunctionCall","src":"11995:30:124"},"nodeType":"YulExpressionStatement","src":"11995:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12045:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12056:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12041:3:124"},"nodeType":"YulFunctionCall","src":"12041:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"12061:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12034:6:124"},"nodeType":"YulFunctionCall","src":"12034:62:124"},"nodeType":"YulExpressionStatement","src":"12034:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12116:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12127:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12112:3:124"},"nodeType":"YulFunctionCall","src":"12112:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"12132:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12105:6:124"},"nodeType":"YulFunctionCall","src":"12105:44:124"},"nodeType":"YulExpressionStatement","src":"12105:44:124"},{"nodeType":"YulAssignment","src":"12158:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12170:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12181:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12166:3:124"},"nodeType":"YulFunctionCall","src":"12166:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12158:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11932:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11946:4:124","type":""}],"src":"11781:410:124"},{"body":{"nodeType":"YulBlock","src":"12473:688:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12490:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12505:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12513:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12501:3:124"},"nodeType":"YulFunctionCall","src":"12501:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12483:6:124"},"nodeType":"YulFunctionCall","src":"12483:74:124"},"nodeType":"YulExpressionStatement","src":"12483:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12577:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12588:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12573:3:124"},"nodeType":"YulFunctionCall","src":"12573:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12597:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12605:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12593:3:124"},"nodeType":"YulFunctionCall","src":"12593:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12566:6:124"},"nodeType":"YulFunctionCall","src":"12566:45:124"},"nodeType":"YulExpressionStatement","src":"12566:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12642:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12627:3:124"},"nodeType":"YulFunctionCall","src":"12627:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"12647:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12620:6:124"},"nodeType":"YulFunctionCall","src":"12620:31:124"},"nodeType":"YulExpressionStatement","src":"12620:31:124"},{"nodeType":"YulVariableDeclaration","src":"12660:60:124","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12692:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12704:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12715:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12700:3:124"},"nodeType":"YulFunctionCall","src":"12700:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12674:17:124"},"nodeType":"YulFunctionCall","src":"12674:46:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12664:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12740:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12751:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12736:3:124"},"nodeType":"YulFunctionCall","src":"12736:18:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12760:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12768:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12756:3:124"},"nodeType":"YulFunctionCall","src":"12756:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12729:6:124"},"nodeType":"YulFunctionCall","src":"12729:50:124"},"nodeType":"YulExpressionStatement","src":"12729:50:124"},{"nodeType":"YulVariableDeclaration","src":"12788:47:124","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"12820:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"12828:6:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12802:17:124"},"nodeType":"YulFunctionCall","src":"12802:33:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"12792:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12855:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12866:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12851:3:124"},"nodeType":"YulFunctionCall","src":"12851:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12876:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12884:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12872:3:124"},"nodeType":"YulFunctionCall","src":"12872:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12844:6:124"},"nodeType":"YulFunctionCall","src":"12844:51:124"},"nodeType":"YulExpressionStatement","src":"12844:51:124"},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12911:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12919:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12904:6:124"},"nodeType":"YulFunctionCall","src":"12904:22:124"},"nodeType":"YulExpressionStatement","src":"12904:22:124"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12952:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12960:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12948:3:124"},"nodeType":"YulFunctionCall","src":"12948:15:124"},{"name":"value4","nodeType":"YulIdentifier","src":"12965:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12973:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"12935:12:124"},"nodeType":"YulFunctionCall","src":"12935:45:124"},"nodeType":"YulExpressionStatement","src":"12935:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13004:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"13012:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13000:3:124"},"nodeType":"YulFunctionCall","src":"13000:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"13021:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12996:3:124"},"nodeType":"YulFunctionCall","src":"12996:28:124"},{"kind":"number","nodeType":"YulLiteral","src":"13026:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12989:6:124"},"nodeType":"YulFunctionCall","src":"12989:39:124"},"nodeType":"YulExpressionStatement","src":"12989:39:124"},{"nodeType":"YulAssignment","src":"13037:118:124","value":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13053:6:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"13069:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13077:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13065:3:124"},"nodeType":"YulFunctionCall","src":"13065:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"13082:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13061:3:124"},"nodeType":"YulFunctionCall","src":"13061:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13049:3:124"},"nodeType":"YulFunctionCall","src":"13049:101:124"},{"kind":"number","nodeType":"YulLiteral","src":"13152:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13045:3:124"},"nodeType":"YulFunctionCall","src":"13045:110:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13037:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12402:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12413:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12421:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12429:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12437:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12445:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12453:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12464:4:124","type":""}],"src":"12196:965:124"},{"body":{"nodeType":"YulBlock","src":"13247:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"13293:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13302:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13305:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13295:6:124"},"nodeType":"YulFunctionCall","src":"13295:12:124"},"nodeType":"YulExpressionStatement","src":"13295:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13268:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13264:3:124"},"nodeType":"YulFunctionCall","src":"13264:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13289:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13260:3:124"},"nodeType":"YulFunctionCall","src":"13260:32:124"},"nodeType":"YulIf","src":"13257:52:124"},{"nodeType":"YulVariableDeclaration","src":"13318:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13337:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13331:5:124"},"nodeType":"YulFunctionCall","src":"13331:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13322:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13381:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13356:24:124"},"nodeType":"YulFunctionCall","src":"13356:31:124"},"nodeType":"YulExpressionStatement","src":"13356:31:124"},{"nodeType":"YulAssignment","src":"13396:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13406:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13396:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13213:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13224:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13236:6:124","type":""}],"src":"13166:251:124"},{"body":{"nodeType":"YulBlock","src":"13500:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"13546:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13555:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13558:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13548:6:124"},"nodeType":"YulFunctionCall","src":"13548:12:124"},"nodeType":"YulExpressionStatement","src":"13548:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13521:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13530:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13517:3:124"},"nodeType":"YulFunctionCall","src":"13517:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13542:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13513:3:124"},"nodeType":"YulFunctionCall","src":"13513:32:124"},"nodeType":"YulIf","src":"13510:52:124"},{"nodeType":"YulVariableDeclaration","src":"13571:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13590:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13584:5:124"},"nodeType":"YulFunctionCall","src":"13584:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13575:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13653:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13662:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13665:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13655:6:124"},"nodeType":"YulFunctionCall","src":"13655:12:124"},"nodeType":"YulExpressionStatement","src":"13655:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13622:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13643:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13636:6:124"},"nodeType":"YulFunctionCall","src":"13636:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13629:6:124"},"nodeType":"YulFunctionCall","src":"13629:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13619:2:124"},"nodeType":"YulFunctionCall","src":"13619:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13612:6:124"},"nodeType":"YulFunctionCall","src":"13612:40:124"},"nodeType":"YulIf","src":"13609:60:124"},{"nodeType":"YulAssignment","src":"13678:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13688:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13678:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13466:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13477:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13489:6:124","type":""}],"src":"13422:277:124"},{"body":{"nodeType":"YulBlock","src":"13917:299:124","statements":[{"nodeType":"YulAssignment","src":"13927:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13939:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13950:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13935:3:124"},"nodeType":"YulFunctionCall","src":"13935:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13927:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13970:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"13981:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13963:6:124"},"nodeType":"YulFunctionCall","src":"13963:25:124"},"nodeType":"YulExpressionStatement","src":"13963:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14008:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14019:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14004:3:124"},"nodeType":"YulFunctionCall","src":"14004:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14024:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13997:6:124"},"nodeType":"YulFunctionCall","src":"13997:34:124"},"nodeType":"YulExpressionStatement","src":"13997:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14062:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14047:3:124"},"nodeType":"YulFunctionCall","src":"14047:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"14067:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14040:6:124"},"nodeType":"YulFunctionCall","src":"14040:34:124"},"nodeType":"YulExpressionStatement","src":"14040:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14094:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14105:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14090:3:124"},"nodeType":"YulFunctionCall","src":"14090:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"14110:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14083:6:124"},"nodeType":"YulFunctionCall","src":"14083:34:124"},"nodeType":"YulExpressionStatement","src":"14083:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14137:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14148:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14133:3:124"},"nodeType":"YulFunctionCall","src":"14133:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14158:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14166:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14154:3:124"},"nodeType":"YulFunctionCall","src":"14154:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14126:6:124"},"nodeType":"YulFunctionCall","src":"14126:84:124"},"nodeType":"YulExpressionStatement","src":"14126:84:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13854:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13865:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13873:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13881:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13889:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13897:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13908:4:124","type":""}],"src":"13704:512:124"},{"body":{"nodeType":"YulBlock","src":"14270:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"14292:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14294:16:124"},"nodeType":"YulFunctionCall","src":"14294:18:124"},"nodeType":"YulExpressionStatement","src":"14294:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14286:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"14289:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14283:2:124"},"nodeType":"YulFunctionCall","src":"14283:8:124"},"nodeType":"YulIf","src":"14280:34:124"},{"nodeType":"YulAssignment","src":"14323:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14335:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"14338:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14331:3:124"},"nodeType":"YulFunctionCall","src":"14331:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"14323:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14252:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"14255:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"14261:4:124","type":""}],"src":"14221:125:124"},{"body":{"nodeType":"YulBlock","src":"14508:162:124","statements":[{"nodeType":"YulAssignment","src":"14518:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14530:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14541:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14526:3:124"},"nodeType":"YulFunctionCall","src":"14526:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14518:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14560:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"14571:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14553:6:124"},"nodeType":"YulFunctionCall","src":"14553:25:124"},"nodeType":"YulExpressionStatement","src":"14553:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14598:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14609:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14594:3:124"},"nodeType":"YulFunctionCall","src":"14594:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14614:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14587:6:124"},"nodeType":"YulFunctionCall","src":"14587:34:124"},"nodeType":"YulExpressionStatement","src":"14587:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14641:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14652:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14637:3:124"},"nodeType":"YulFunctionCall","src":"14637:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"14657:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14630:6:124"},"nodeType":"YulFunctionCall","src":"14630:34:124"},"nodeType":"YulExpressionStatement","src":"14630:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14461:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14472:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14480:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14488:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14499:4:124","type":""}],"src":"14351:319:124"},{"body":{"nodeType":"YulBlock","src":"14849:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14866:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14877:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14859:6:124"},"nodeType":"YulFunctionCall","src":"14859:21:124"},"nodeType":"YulExpressionStatement","src":"14859:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14900:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14911:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14896:3:124"},"nodeType":"YulFunctionCall","src":"14896:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14916:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14889:6:124"},"nodeType":"YulFunctionCall","src":"14889:30:124"},"nodeType":"YulExpressionStatement","src":"14889:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14939:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14950:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14935:3:124"},"nodeType":"YulFunctionCall","src":"14935:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"14955:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14928:6:124"},"nodeType":"YulFunctionCall","src":"14928:62:124"},"nodeType":"YulExpressionStatement","src":"14928:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15010:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15021:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15006:3:124"},"nodeType":"YulFunctionCall","src":"15006:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15026:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14999:6:124"},"nodeType":"YulFunctionCall","src":"14999:37:124"},"nodeType":"YulExpressionStatement","src":"14999:37:124"},{"nodeType":"YulAssignment","src":"15045:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15057:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15068:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15053:3:124"},"nodeType":"YulFunctionCall","src":"15053:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15045:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14826:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14840:4:124","type":""}],"src":"14675:403:124"},{"body":{"nodeType":"YulBlock","src":"15131:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15141:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15151:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15145:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15194:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15209:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15212:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15205:3:124"},"nodeType":"YulFunctionCall","src":"15205:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15198:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15224:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15239:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15242:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15235:3:124"},"nodeType":"YulFunctionCall","src":"15235:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15228:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15279:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15281:16:124"},"nodeType":"YulFunctionCall","src":"15281:18:124"},"nodeType":"YulExpressionStatement","src":"15281:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15260:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15269:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15273:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15265:3:124"},"nodeType":"YulFunctionCall","src":"15265:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15257:2:124"},"nodeType":"YulFunctionCall","src":"15257:21:124"},"nodeType":"YulIf","src":"15254:47:124"},{"nodeType":"YulAssignment","src":"15310:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15321:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15326:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15317:3:124"},"nodeType":"YulFunctionCall","src":"15317:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15310:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15114:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15117:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15123:3:124","type":""}],"src":"15083:253:124"},{"body":{"nodeType":"YulBlock","src":"15498:252:124","statements":[{"nodeType":"YulAssignment","src":"15508:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15520:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15531:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15516:3:124"},"nodeType":"YulFunctionCall","src":"15516:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15508:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15550:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15565:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15573:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15561:3:124"},"nodeType":"YulFunctionCall","src":"15561:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15543:6:124"},"nodeType":"YulFunctionCall","src":"15543:74:124"},"nodeType":"YulExpressionStatement","src":"15543:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:124"},"nodeType":"YulFunctionCall","src":"15633:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"15653:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15626:6:124"},"nodeType":"YulFunctionCall","src":"15626:34:124"},"nodeType":"YulExpressionStatement","src":"15626:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15680:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15691:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15676:3:124"},"nodeType":"YulFunctionCall","src":"15676:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15700:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15708:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15696:3:124"},"nodeType":"YulFunctionCall","src":"15696:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15669:6:124"},"nodeType":"YulFunctionCall","src":"15669:75:124"},"nodeType":"YulExpressionStatement","src":"15669:75:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15451:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15462:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15470:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15478:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15489:4:124","type":""}],"src":"15341:409:124"},{"body":{"nodeType":"YulBlock","src":"15804:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15814:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15824:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15818:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15867:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15882:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15885:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15878:3:124"},"nodeType":"YulFunctionCall","src":"15878:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15871:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15897:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15912:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15915:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15908:3:124"},"nodeType":"YulFunctionCall","src":"15908:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15901:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15943:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15945:16:124"},"nodeType":"YulFunctionCall","src":"15945:18:124"},"nodeType":"YulExpressionStatement","src":"15945:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15933:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15938:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15930:2:124"},"nodeType":"YulFunctionCall","src":"15930:12:124"},"nodeType":"YulIf","src":"15927:38:124"},{"nodeType":"YulAssignment","src":"15974:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15986:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15991:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15982:3:124"},"nodeType":"YulFunctionCall","src":"15982:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15974:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15786:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15789:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15795:4:124","type":""}],"src":"15755:246:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value5 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 192))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_2), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_string(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value3, tail_1)\n        mstore(add(headStart, 128), sub(tail_2, headStart))\n        mstore(tail_2, value5)\n        calldatacopy(add(tail_2, 32), value4, value5)\n        mstore(add(add(tail_2, value5), 32), 0)\n        tail := add(add(tail_2, and(add(value5, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"30695":[{"length":32,"start":2744}],"30877":[{"length":32,"start":4155}],"30880":[{"length":32,"start":894},{"length":32,"start":2617},{"length":32,"start":2943},{"length":32,"start":3150},{"length":32,"start":3604},{"length":32,"start":3951},{"length":32,"start":4687}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063b9a7b622116100a2578063e075398611610071578063e0753986146104ee578063e655dbd81461054a578063f3bfc7381461055d578063f5298aca1461058457600080fd5b8063b9a7b622146104b2578063c04a8a10146104ba578063c222ec8a146104cd578063dd62ed3e146104e057600080fd5b8063a9059cbb116100de578063a9059cbb146101fd578063b16a19de14610462578063b1bf962d14610480578063b3f1c93d1461048857600080fd5b80637ecebe001461042457806395d89b411461045a578063a457c2d7146101fd57600080fd5b8063313ce5671161017c57806370a082311161014b57806370a08231146103665780637535d2461461037957806375d26413146103c557806378160376146103e857600080fd5b8063313ce567146103035780633644e5151461031857806339509351146101fd5780636bd76d241461032057600080fd5b80630b52d558116101b85780630b52d5581461028257806318160ddd146102975780631da24f3e146102ad57806323b872dd146102f557600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630afbcdc914610220575b600080fd5b6101e7610597565b6040516101f49190611e7b565b60405180910390f35b61021061020b366004611ec3565b610629565b60405190151581526020016101f4565b61026d61022e366004611eef565b73ffffffffffffffffffffffffffffffffffffffff16600090815260386020526040902054603a546fffffffffffffffffffffffffffffffff90911691565b604080519283526020830191909152016101f4565b610295610290366004611f1d565b610699565b005b61029f6109ea565b6040519081526020016101f4565b61029f6102bb366004611eef565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61021061020b366004611f8b565b603d5460405160ff90911681526020016101f4565b61029f610ab4565b61029f61032e366004611fcc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61029f610374366004611eef565b610aed565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff166103a0565b6101e76040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61029f610432366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b6101e7610bf8565b60375473ffffffffffffffffffffffffffffffffffffffff166103a0565b61029f610c07565b61049b610496366004612005565b610c12565b6040805192151583526020830191909152016101f4565b61029f600181565b6102956104c8366004611ec3565b610d1b565b6102956104db36600461216e565b610d2a565b61029f61020b366004611fcc565b61029f6104fc366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b610295610558366004611eef565b611037565b61029f7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b61029f610592366004612243565b611215565b6060603b80546105a690612278565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290612278565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815260009161069091600401611e7b565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881661071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054906107be610ab4565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c001604051602081830303815290604052805190602001206040516020016108769291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156108fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b506109ae8260016122fb565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603460205260409020556109df8989896112da565b505050505050505050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610aaf917f00000000000000000000000000000000000000000000000000000000000000009091169063386497fd90602401602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190612313565b603a5490611351565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ae5575060355490565b610aaf6113a8565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff1680610b335750600092915050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152610bf1917f0000000000000000000000000000000000000000000000000000000000000000169063386497fd90602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612313565b8290611351565b9392505050565b6060603c80546105a690612278565b6000610aaf603a5490565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610cfa57610cfa85878661146d565b610d068686868661152d565b610d0e610c07565b9150915094509492505050565b610d263383836112da565b5050565b60015460039060ff1680610d3d5750303b155b80610d49575060005481115b610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610690565b60015460ff16158015610e1257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525090610ecf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b50610ed98661176e565b610ee285611781565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a1617179055610f676113a8565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051610ff49695949392919061232c565b60405180910390a3801561102b57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c891906123cc565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115991906123e9565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b506112ca8460008585611794565b6112d2610c07565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761138657600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d3611ab1565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526036602090815260408083209386168352929052908120546114ad90839061240b565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19061151f9086815260200190565b60405180910390a450505050565b60008061153a8484611abb565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169291611606918491700100000000000000000000000000000000900416611351565b6116108387611351565b61161a919061240b565b905061162585611afa565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905561168d8761168885611afa565b611ba0565b600061169982886122fb565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116fb91815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b8051610d2690603b906020840190611d80565b8051610d2690603c906020840190611d80565b60006117a08383611abb565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161180f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161186c918491700100000000000000000000000000000000900416611351565b6118768386611351565b611880919061240b565b905061188b84611afa565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556118f3876118ee85611afa565b611d1c565b848111156119d2576000611907868361240b565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611aa8565b60006119de828761240b565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909060600160405180910390a3505b50505050505050565b6060610aaf610597565b600081156b033b2e3c9fd0803ce800000060028404190484111715611adf57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610690565b5090565b603a54611bbf6fffffffffffffffffffffffffffffffff8316826122fb565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c048382612422565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d546101009004168015611d15576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015611d0157600080fd5b505af11580156109df573d6000803e3d6000fd5b5050505050565b603a54611d3b6fffffffffffffffffffffffffffffffff83168261240b565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c048382612456565b828054611d8c90612278565b90600052602060002090601f016020900481019282611dae5760008555611df4565b82601f10611dc757805160ff1916838001178555611df4565b82800160010185558215611df4579182015b82811115611df4578251825591602001919060010190611dd9565b50611b9c9291505b80821115611b9c5760008155600101611dfc565b6000815180845260005b81811015611e3657602081850181015186830182015201611e1a565b81811115611e48576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf16020830184611e10565b73ffffffffffffffffffffffffffffffffffffffff81168114611eb057600080fd5b50565b8035611ebe81611e8e565b919050565b60008060408385031215611ed657600080fd5b8235611ee181611e8e565b946020939093013593505050565b600060208284031215611f0157600080fd5b8135610bf181611e8e565b803560ff81168114611ebe57600080fd5b600080600080600080600060e0888a031215611f3857600080fd5b8735611f4381611e8e565b96506020880135611f5381611e8e565b95506040880135945060608801359350611f6f60808901611f0c565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215611fa057600080fd5b8335611fab81611e8e565b92506020840135611fbb81611e8e565b929592945050506040919091013590565b60008060408385031215611fdf57600080fd5b8235611fea81611e8e565b91506020830135611ffa81611e8e565b809150509250929050565b6000806000806080858703121561201b57600080fd5b843561202681611e8e565b9350602085013561203681611e8e565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261208b57600080fd5b813567ffffffffffffffff808211156120a6576120a661204b565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156120ec576120ec61204b565b8160405283815286602085880101111561210557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f84011261213757600080fd5b50813567ffffffffffffffff81111561214f57600080fd5b60208301915083602082850101111561216757600080fd5b9250929050565b60008060008060008060008060e0898b03121561218a57600080fd5b883561219581611e8e565b975060208901356121a581611e8e565b96506121b360408a01611eb3565b95506121c160608a01611f0c565b9450608089013567ffffffffffffffff808211156121de57600080fd5b6121ea8c838d0161207a565b955060a08b013591508082111561220057600080fd5b61220c8c838d0161207a565b945060c08b013591508082111561222257600080fd5b5061222f8b828c01612125565b999c989b5096995094979396929594505050565b60008060006060848603121561225857600080fd5b833561226381611e8e565b95602085013595506040909401359392505050565b600181811c9082168061228c57607f821691505b602082108114156122c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561230e5761230e6122cc565b500190565b60006020828403121561232557600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a06040820152600061236460a0830187611e10565b82810360608401526123768187611e10565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b6000602082840312156123de57600080fd5b8151610bf181611e8e565b6000602082840312156123fb57600080fd5b81518015158114610bf157600080fd5b60008282101561241d5761241d6122cc565b500390565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561244d5761244d6122cc565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561247f5761247f6122cc565b03939250505056fea264697066735822122000f4562bffe853f0ac0a29a385a30de82985a21e620daafd354694785019fc9964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xB9A7B622 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x55D JUMPI DUP1 PUSH4 0xF5298ACA EQ PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x303 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB52D558 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x220 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC3 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x26D PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1D JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x29F PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x2BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1F8B JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xAB4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST PUSH2 0x3A0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x1E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x432 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0xBF8 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xC07 JUMP JUMPDEST PUSH2 0x49B PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x2005 JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC3 JUMP JUMPDEST PUSH2 0xD1B JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x216E JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x29F PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCC JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x558 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0x1037 JUMP JUMPDEST PUSH2 0x29F PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x2243 JUMP JUMPDEST PUSH2 0x1215 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2278 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x2278 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x690 SWAP2 PUSH1 0x4 ADD PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x71B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x7BE PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x876 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0x9AE DUP3 PUSH1 0x1 PUSH2 0x22FB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x9DF DUP10 DUP10 DUP10 PUSH2 0x12DA JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xAAF SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA82 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAA6 SWAP2 SWAP1 PUSH2 0x2313 JUMP JUMPDEST PUSH1 0x3A SLOAD SWAP1 PUSH2 0x1351 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAE5 JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAAF PUSH2 0x13A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0xBF1 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBEA SWAP2 SWAP1 PUSH2 0x2313 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1351 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2278 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAAF PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCFA JUMPI PUSH2 0xCFA DUP6 DUP8 DUP7 PUSH2 0x146D JUMP JUMPDEST PUSH2 0xD06 DUP7 DUP7 DUP7 DUP7 PUSH2 0x152D JUMP JUMPDEST PUSH2 0xD0E PUSH2 0xC07 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD26 CALLER DUP4 DUP4 PUSH2 0x12DA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0xD3D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0xD49 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE12 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xECF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0xED9 DUP7 PUSH2 0x176E JUMP JUMPDEST PUSH2 0xEE2 DUP6 PUSH2 0x1781 JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0xF67 PUSH2 0x13A8 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0xFF4 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x232C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x102B JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C8 SWAP2 SWAP1 PUSH2 0x23CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1135 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1159 SWAP2 SWAP1 PUSH2 0x23E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11C7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x12BC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0x12CA DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1794 JUMP JUMPDEST PUSH2 0x12D2 PUSH2 0xC07 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x13D3 PUSH2 0x1AB1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x14AD SWAP1 DUP4 SWAP1 PUSH2 0x240B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x151F SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x153A DUP5 DUP5 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x15A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1606 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1610 DUP4 DUP8 PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x161A SWAP2 SWAP1 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH2 0x1625 DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x168D DUP8 PUSH2 0x1688 DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH2 0x1BA0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1699 DUP3 DUP9 PUSH2 0x22FB JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x16FB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D80 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17A0 DUP4 DUP4 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x180F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x186C SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1876 DUP4 DUP7 PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1880 SWAP2 SWAP1 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH2 0x188B DUP5 PUSH2 0x1AFA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x18F3 DUP8 PUSH2 0x18EE DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH2 0x1D1C JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x19D2 JUMPI PUSH1 0x0 PUSH2 0x1907 DUP7 DUP4 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1969 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1AA8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DE DUP3 DUP8 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1A40 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAAF PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1B9C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1BBF PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x22FB JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C04 DUP4 DUP3 PUSH2 0x2422 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x1D15 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1D3B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x240B JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C04 DUP4 DUP3 PUSH2 0x2456 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1D8C SWAP1 PUSH2 0x2278 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1DAE JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x1DF4 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1DC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1DF4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1DF4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1DF4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1DD9 JUMP JUMPDEST POP PUSH2 0x1B9C SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B9C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E36 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1E1A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1E48 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1EBE DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1ED6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1EE1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1F38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1F43 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x1F53 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1F6F PUSH1 0x80 DUP10 ADD PUSH2 0x1F0C JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1FA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FAB DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FBB DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FEA DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1FFA DUP2 PUSH2 0x1E8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x201B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2026 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x2036 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x208B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x20A6 JUMPI PUSH2 0x20A6 PUSH2 0x204B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x20EC JUMPI PUSH2 0x20EC PUSH2 0x204B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x218A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x2195 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x21A5 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x21B3 PUSH1 0x40 DUP11 ADD PUSH2 0x1EB3 JUMP JUMPDEST SWAP6 POP PUSH2 0x21C1 PUSH1 0x60 DUP11 ADD PUSH2 0x1F0C JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21EA DUP13 DUP4 DUP14 ADD PUSH2 0x207A JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x220C DUP13 DUP4 DUP14 ADD PUSH2 0x207A JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x222F DUP12 DUP3 DUP13 ADD PUSH2 0x2125 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2263 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x228C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x22C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x230E JUMPI PUSH2 0x230E PUSH2 0x22CC JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2364 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x1E10 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2376 DUP2 DUP8 PUSH2 0x1E10 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x241D JUMPI PUSH2 0x241D PUSH2 0x22CC JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x244D JUMPI PUSH2 0x244D PUSH2 0x22CC JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x247F JUMPI PUSH2 0x247F PUSH2 0x22CC JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP DELEGATECALL JUMP 0x2B SELFDESTRUCT 0xE8 MSTORE8 CREATE 0xAC EXP 0x29 LOG3 DUP6 LOG3 0xD 0xE8 0x29 DUP6 LOG2 0x1E PUSH3 0xDAAFD CALLDATALOAD CHAINID SWAP5 PUSH25 0x5019FC9964736F6C634300080A003300000000000000000000 ","sourceMap":"198:197:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4352:125:118;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:124;;1551:22;1533:41;;1521:2;1506:18;4352:125:118;1393:187:124;1386:173:123;;;;;;:::i;:::-;3518:19:121;;1479:7:123;3518:19:121;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:123;;;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:123;1837:248:124;1424:823:119;;;;;;:::i;:::-;;:::i;:::-;;3629:171:118;;;:::i;:::-;;;3136:25:124;;;3124:2;3109:18;3629:171:118;2990:177:124;1225:119:123;;;;;;:::i;:::-;3518:19:121;;1296:7:123;3518:19:121;;;:10;:19;;;;;:27;;;;1225:119:123;4481:139:118;;;;;;:::i;3178:86:121:-;3250:9;;3178:86;;3250:9;;;;3775:36:124;;3763:2;3748:18;3178:86:121;3633:184:124;867:185:120;;;:::i;2292:165:119:-;;;;;;:::i;:::-;2417:27;;;;2395:7;2417:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2292:165;2686:280:118;;;;;;:::i;:::-;;:::i;2408:27:121:-;;;;;;;;4587:42:124;4575:55;;;4557:74;;4545:2;4530:18;2408:27:121;4397:240:124;3691:132:121;3797:21;;;;;;;3691:132;;192:50:120;;232:10;;;;;;;;;;;;;;;;;192:50;;1260:101;;;;;;:::i;:::-;1342:14;;1320:7;1342:14;;;:7;:14;;;;;;;1260:101;3051:90:121;;;:::i;4939:111:118:-;5029:16;;;;4939:111;;1601:113:123;;;:::i;3007:337:118:-;;;;;;:::i;:::-;;:::i;:::-;;;;6084:14:124;;6077:22;6059:41;;6131:2;6116:18;;6109:34;;;;6032:18;3007:337:118;5891:258:124;1332:49:118;;1378:3;1332:49;;1237:142:119;;;;;;:::i;:::-;;:::i;1700:803:118:-;;;;;;:::i;:::-;;:::i;4213:135::-;;;;;;:::i;1756:138:123:-;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:121;;;;;;:::i;:::-;;:::i;897:153:119:-;;956:94;897:153;;3385:215:118;;;;;;:::i;:::-;;:::i;2930:84:121:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4352:125:118:-;4441:30;;;;;;;;;;;;;;;;4434:38;;;;;4422:4;;4434:38;;;;;:::i;:::-;;;;;;;;1424:823:119;1633:29;;;;;;;;;;;;;;;;;1608:23;;;1600:63;;;;;;;;;;;;;:::i;:::-;;1727:8;1708:15;:27;;1737:25;;;;;;;;;;;;;;;;;1700:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1797:18:119;;;1769:25;1797:18;;;:7;:18;;;;;;;1901;:16;:18::i;:::-;1950:87;;;956:94;1950:87;;;10160:25:124;10233:42;10221:55;;10201:18;;;10194:83;;;;10293:18;;;10286:34;;;10336:18;;;10329:34;;;10379:19;;;10372:35;;;10132:19;;1950:87:119;;;;;;;;;;;;1929:118;;;;;;1855:200;;;;;;;;10688:66:124;10676:79;;10780:1;10771:11;;10764:27;;;;10816:2;10807:12;;10800:28;10853:2;10844:12;;10418:444;1855:200:119;;;;;;;;;;;;;;1838:223;;1855:200;1838:223;;;;2088:26;;;;;;;;;11094:25:124;;;11167:4;11155:17;;11135:18;;;11128:45;;;;11189:18;;;11182:34;;;11232:18;;;11225:34;;;1838:223:119;-1:-1:-1;2088:26:119;;11066:19:124;;2088:26:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:39;;:9;:39;;;2116:24;;;;;;;;;;;;;;;;;2067:74;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2168:21:119;:17;2188:1;2168:21;:::i;:::-;2147:18;;;;;;;:7;:18;;;;;:42;2195:47;2155:9;2225;2236:5;2195:18;:47::i;:::-;1594:653;;1424:823;;;;;;;:::o;3629:171:118:-;3777:16;;3739:55;;;;;:37;3777:16;;;3739:55;;;4557:74:124;3690:7:118;;3712:83;;3739:4;:37;;;;;;4530:18:124;;3739:55:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3376:12:121;;3712:26:118;;:83::i;:::-;3705:90;;3629:171;:::o;867:185:120:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:120;;;867:185::o;939:69::-;1020:27;:25;:27::i;2686:280:118:-;3518:19:121;;;2757:7:118;3518:19:121;;;:10;:19;;;;;:27;;;;2824:47:118;;-1:-1:-1;2863:1:118;;2686:280;-1:-1:-1;;2686:280:118:o;2824:47::-;2943:16;;2905:55;;;;;:37;2943:16;;;2905:55;;;4557:74:124;2884:77:118;;2905:4;:37;;;;4530:18:124;;2905:55:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2884:13;;:20;:77::i;:::-;2877:84;2686:280;-1:-1:-1;;;2686:280:118:o;3051:90:121:-;3101:13;3129:7;3122:14;;;;;:::i;1601:113:123:-;1668:7;1690:19;3376:12:121;;;3293:100;3007:337:118;1519:26:121;;;;;;;;;;;;;;;;;3150:4:118;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3183:10:118::1;3175:18;;:4;:18;;;3171:89;;3203:50;3228:10;3240:4;3246:6;3203:24;:50::i;:::-;3273:44;3285:4;3291:10;3303:6;3311:5;3273:11;:44::i;:::-;3319:19;:17;:19::i;:::-;3265:74;;;;3007:337:::0;;;;;;;:::o;1237:142:119:-;1323:51;678:10:4;1356:9:119;1367:6;1323:18;:51::i;:::-;1237:142;;:::o;1700:803:118:-;1217:12:87;;385:3:80;;1217:12:87;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;11983:2:124;1202:146:87;;;11965:21:124;12022:2;12002:18;;;11995:30;12061:34;12041:18;;;12034:62;12132:16;12112:18;;;12105:44;12166:19;;1202:146:87;11781:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2021:4:118::1;2001:24;;:16;:24;;;2027:34;;;;;;;;;;;;;;;;::::0;1993:69:::1;;;;;;;;;;;;;;:::i;:::-;;2068:23;2077:13;2068:8;:23::i;:::-;2097:27;2108:15;2097:10;:27::i;:::-;7979:9:121::0;:23;;2168:16:118::1;:34:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2208:44;::::1;2168:34;2208:44;::::0;;;;7979:23:121;;;2208:44:118;::::1;::::0;;2278:27:::1;:25;:27::i;:::-;2259:16;:46;;;;2367:4;2317:181;;2336:15;2317:181;;;2388:20;2417:17;2442:13;2463:15;2486:6;;2317:181;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1700:803:118;;;;;;;;:::o;3938:139:121:-;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;4557:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;4530:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:121::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3385:215:118:-;1519:26:121;;;;;;;;;;;;;;;;;3504:7:118;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3519:44:118::1;3531:4;3545:1;3549:6;3557:5;3519:11;:44::i;:::-;3576:19;:17;:19::i;:::-;3569:26:::0;3385:215;-1:-1:-1;;;;3385:215:118:o;2749:233:119:-;2846:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;:48;;;2952:16;;2905:72;;3136:25:124;;;2952:16:119;;;2846:39;;:28;2905:72;;3109:18:124;2905:72:119;;;;;;;2749:233;;;:::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;1475:298:120:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13963:25:124;;;;14004:18;;;13997:34;;;;1674:26:120;14047:18:124;;;14040:34;1712:13:120;14090:18:124;;;14083:34;1745:4:120;14133:19:124;;;14126:84;13935:19;;1582:178:120;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;3288:330:119:-;3414:28;;;;3391:20;3414:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;3456:6;;3414:48;:::i;:::-;3469:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;3582:16;;3535:78;;3391:71;;-1:-1:-1;3582:16:119;;;3535:78;;;;3391:71;3136:25:124;;3124:2;3109:18;;2990:177;3535:78:119;;;;;;;;3385:233;3288:330;;;:::o;2295:763:123:-;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:123;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;2543:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;2543:21:123;2662:59;;3518:27:121;;2683:37:123;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;3136:25:124;;3124:2;3109:18;;2990:177;2900:46:123;;;;;;;;2957:62;;;14553:25:124;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;2957:62:123;;;;;;;;;;;14541:2:124;14526:18;2957:62:123;;;;;;;-1:-1:-1;;3034:18:123;;2295:763;-1:-1:-1;;;;;;2295:763:123:o;7513:76:121:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;3512:888:123:-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:123;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;3719:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;3719:21:123;3832:53;;3518:27:121;;3853:31:123;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;3136:25:124;;3124:2;3109:18;;2990:177;4092:40:123;;;;;;;;4145:54;;;14553:25:124;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;4145:54:123;;;;;;;;14541:2:124;14526:18;4145:54:123;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;3136:25:124;;3124:2;3109:18;;2990:177;4280:40:123;;;;;;;;4333:56;;;14553:25:124;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;4333:56:123;;;;;;;;;;;14541:2:124;14526:18;4333:56:123;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;3833:96:118:-;3890:13;3918:6;:4;:6::i;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;14877:2:124;1635:78:12;;;14859:21:124;14916:2;14896:18;;;14889:30;14955:34;14935:18;;;14928:62;15026:9;15006:18;;;14999:37;15053:19;;1635:78:12;14675:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;1069:519:122:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15561:55:124;;;1495:82:122;;;15543:74:124;15633:18;;;15626:34;;;15708;15696:47;;15676:18;;;15669:75;1495:38:122;;;;;15516:18:124;;1495:82:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:124;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:124:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2090:156::-;2156:20;;2216:4;2205:16;;2195:27;;2185:55;;2236:1;2233;2226:12;2251:734;2362:6;2370;2378;2386;2394;2402;2410;2463:3;2451:9;2442:7;2438:23;2434:33;2431:53;;;2480:1;2477;2470:12;2431:53;2519:9;2506:23;2538:31;2563:5;2538:31;:::i;:::-;2588:5;-1:-1:-1;2645:2:124;2630:18;;2617:32;2658:33;2617:32;2658:33;:::i;:::-;2710:7;-1:-1:-1;2764:2:124;2749:18;;2736:32;;-1:-1:-1;2815:2:124;2800:18;;2787:32;;-1:-1:-1;2838:37:124;2870:3;2855:19;;2838:37;:::i;:::-;2828:47;;2922:3;2911:9;2907:19;2894:33;2884:43;;2974:3;2963:9;2959:19;2946:33;2936:43;;2251:734;;;;;;;;;;:::o;3172:456::-;3249:6;3257;3265;3318:2;3306:9;3297:7;3293:23;3289:32;3286:52;;;3334:1;3331;3324:12;3286:52;3373:9;3360:23;3392:31;3417:5;3392:31;:::i;:::-;3442:5;-1:-1:-1;3499:2:124;3484:18;;3471:32;3512:33;3471:32;3512:33;:::i;:::-;3172:456;;3564:7;;-1:-1:-1;;;3618:2:124;3603:18;;;;3590:32;;3172:456::o;4004:388::-;4072:6;4080;4133:2;4121:9;4112:7;4108:23;4104:32;4101:52;;;4149:1;4146;4139:12;4101:52;4188:9;4175:23;4207:31;4232:5;4207:31;:::i;:::-;4257:5;-1:-1:-1;4314:2:124;4299:18;;4286:32;4327:33;4286:32;4327:33;:::i;:::-;4379:7;4369:17;;;4004:388;;;;;:::o;5361:525::-;5447:6;5455;5463;5471;5524:3;5512:9;5503:7;5499:23;5495:33;5492:53;;;5541:1;5538;5531:12;5492:53;5580:9;5567:23;5599:31;5624:5;5599:31;:::i;:::-;5649:5;-1:-1:-1;5706:2:124;5691:18;;5678:32;5719:33;5678:32;5719:33;:::i;:::-;5361:525;;5771:7;;-1:-1:-1;;;;5825:2:124;5810:18;;5797:32;;5876:2;5861:18;5848:32;;5361:525::o;6154:184::-;6206:77;6203:1;6196:88;6303:4;6300:1;6293:15;6327:4;6324:1;6317:15;6343:778;6386:5;6439:3;6432:4;6424:6;6420:17;6416:27;6406:55;;6457:1;6454;6447:12;6406:55;6493:6;6480:20;6519:18;6556:2;6552;6549:10;6546:36;;;6562:18;;:::i;:::-;6696:2;6690:9;6758:4;6750:13;;6601:66;6746:22;;;6770:2;6742:31;6738:40;6726:53;;;6794:18;;;6814:22;;;6791:46;6788:72;;;6840:18;;:::i;:::-;6880:10;6876:2;6869:22;6915:2;6907:6;6900:18;6961:3;6954:4;6949:2;6941:6;6937:15;6933:26;6930:35;6927:55;;;6978:1;6975;6968:12;6927:55;7042:2;7035:4;7027:6;7023:17;7016:4;7008:6;7004:17;6991:54;7089:1;7082:4;7077:2;7069:6;7065:15;7061:26;7054:37;7109:6;7100:15;;;;;;6343:778;;;;:::o;7126:347::-;7177:8;7187:6;7241:3;7234:4;7226:6;7222:17;7218:27;7208:55;;7259:1;7256;7249:12;7208:55;-1:-1:-1;7282:20:124;;7325:18;7314:30;;7311:50;;;7357:1;7354;7347:12;7311:50;7394:4;7386:6;7382:17;7370:29;;7446:3;7439:4;7430:6;7422;7418:19;7414:30;7411:39;7408:59;;;7463:1;7460;7453:12;7408:59;7126:347;;;;;:::o;7478:1302::-;7668:6;7676;7684;7692;7700;7708;7716;7724;7777:3;7765:9;7756:7;7752:23;7748:33;7745:53;;;7794:1;7791;7784:12;7745:53;7833:9;7820:23;7852:31;7877:5;7852:31;:::i;:::-;7902:5;-1:-1:-1;7959:2:124;7944:18;;7931:32;7972:33;7931:32;7972:33;:::i;:::-;8024:7;-1:-1:-1;8050:38:124;8084:2;8069:18;;8050:38;:::i;:::-;8040:48;;8107:36;8139:2;8128:9;8124:18;8107:36;:::i;:::-;8097:46;;8194:3;8183:9;8179:19;8166:33;8218:18;8259:2;8251:6;8248:14;8245:34;;;8275:1;8272;8265:12;8245:34;8298:50;8340:7;8331:6;8320:9;8316:22;8298:50;:::i;:::-;8288:60;;8401:3;8390:9;8386:19;8373:33;8357:49;;8431:2;8421:8;8418:16;8415:36;;;8447:1;8444;8437:12;8415:36;8470:52;8514:7;8503:8;8492:9;8488:24;8470:52;:::i;:::-;8460:62;;8575:3;8564:9;8560:19;8547:33;8531:49;;8605:2;8595:8;8592:16;8589:36;;;8621:1;8618;8611:12;8589:36;;8660:60;8712:7;8701:8;8690:9;8686:24;8660:60;:::i;:::-;7478:1302;;;;-1:-1:-1;7478:1302:124;;-1:-1:-1;7478:1302:124;;;;;;8739:8;-1:-1:-1;;;7478:1302:124:o;9071:383::-;9148:6;9156;9164;9217:2;9205:9;9196:7;9192:23;9188:32;9185:52;;;9233:1;9230;9223:12;9185:52;9272:9;9259:23;9291:31;9316:5;9291:31;:::i;:::-;9341:5;9393:2;9378:18;;9365:32;;-1:-1:-1;9444:2:124;9429:18;;;9416:32;;9071:383;-1:-1:-1;;;9071:383:124:o;9459:437::-;9538:1;9534:12;;;;9581;;;9602:61;;9656:4;9648:6;9644:17;9634:27;;9602:61;9709:2;9701:6;9698:14;9678:18;9675:38;9672:218;;;9746:77;9743:1;9736:88;9847:4;9844:1;9837:15;9875:4;9872:1;9865:15;9672:218;;9459:437;;;:::o;11270:184::-;11322:77;11319:1;11312:88;11419:4;11416:1;11409:15;11443:4;11440:1;11433:15;11459:128;11499:3;11530:1;11526:6;11523:1;11520:13;11517:39;;;11536:18;;:::i;:::-;-1:-1:-1;11572:9:124;;11459:128::o;11592:184::-;11662:6;11715:2;11703:9;11694:7;11690:23;11686:32;11683:52;;;11731:1;11728;11721:12;11683:52;-1:-1:-1;11754:16:124;;11592:184;-1:-1:-1;11592:184:124:o;12196:965::-;12513:42;12505:6;12501:55;12490:9;12483:74;12605:4;12597:6;12593:17;12588:2;12577:9;12573:18;12566:45;12647:3;12642:2;12631:9;12627:18;12620:31;12464:4;12674:46;12715:3;12704:9;12700:19;12692:6;12674:46;:::i;:::-;12768:9;12760:6;12756:22;12751:2;12740:9;12736:18;12729:50;12802:33;12828:6;12820;12802:33;:::i;:::-;12788:47;;12884:9;12876:6;12872:22;12866:3;12855:9;12851:19;12844:51;12919:6;12911;12904:22;12973:6;12965;12960:2;12952:6;12948:15;12935:45;13026:1;13021:2;13012:6;13004;13000:19;12996:28;12989:39;13152:2;13082:66;13077:2;13069:6;13065:15;13061:88;13053:6;13049:101;13045:110;13037:118;;;12196:965;;;;;;;;;:::o;13166:251::-;13236:6;13289:2;13277:9;13268:7;13264:23;13260:32;13257:52;;;13305:1;13302;13295:12;13257:52;13337:9;13331:16;13356:31;13381:5;13356:31;:::i;13422:277::-;13489:6;13542:2;13530:9;13521:7;13517:23;13513:32;13510:52;;;13558:1;13555;13548:12;13510:52;13590:9;13584:16;13643:5;13636:13;13629:21;13622:5;13619:32;13609:60;;13665:1;13662;13655:12;14221:125;14261:4;14289:1;14286;14283:8;14280:34;;;14294:18;;:::i;:::-;-1:-1:-1;14331:9:124;;14221:125::o;15083:253::-;15123:3;15151:34;15212:2;15209:1;15205:10;15242:2;15239:1;15235:10;15273:3;15269:2;15265:12;15260:3;15257:21;15254:47;;;15281:18;;:::i;:::-;15317:13;;15083:253;-1:-1:-1;;;;15083:253:124:o;15755:246::-;15795:4;15824:34;15908:10;;;;15878;;15930:12;;;15927:38;;;15945:18;;:::i;:::-;15982:13;;15755:246;-1:-1:-1;;;15755:246:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"1881000","executionCost":"infinite","totalCost":"infinite"},"external":{"DEBT_TOKEN_REVISION()":"240","DELEGATION_WITH_SIG_TYPEHASH()":"283","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","POOL()":"infinite","UNDERLYING_ASSET_ADDRESS()":"2374","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","approveDelegation(address,uint256)":"26988","balanceOf(address)":"infinite","borrowAllowance(address,address)":"infinite","burn(address,uint256,uint256)":"infinite","decimals()":"2335","decreaseAllowance(address,uint256)":"infinite","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","getIncentivesController()":"2407","getPreviousIndex(address)":"2568","getScaledUserBalanceAndSupply(address)":"4737","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2553","scaledBalanceOf(address)":"2603","scaledTotalSupply()":"2419","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"DEBT_TOKEN_REVISION()":"b9a7b622","DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","POOL()":"7535d246","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveDelegation(address,uint256)":"c04a8a10","balanceOf(address)":"70a08231","borrowAllowance(address,address)":"6bd76d24","burn(address,uint256,uint256)":"f5298aca","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","name()":"06fdde03","nonces(address)":"7ecebe00","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"DEBT_TOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"burn(address,uint256,uint256)\":{\"details\":\"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount getting burned\",\"from\":\"The address from which the debt will be burned\",\"index\":\"The variable debt index of the reserve\"},\"returns\":{\"_0\":\"The scaled total debt of the reserve\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of debt being minted\",\"index\":\"The variable debt index of the reserve\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if the previous balance of the user is 0, false otherwise\",\"_1\":\"The scaled total debt of the reserve\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"burn(address,uint256,uint256)\":{\"notice\":\"Burns user variable debt\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/upgradeability/MockVariableDebtToken.sol\":\"MockVariableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/upgradeability/MockVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VariableDebtToken} from '../../protocol/tokenization/VariableDebtToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\ncontract MockVariableDebtToken is VariableDebtToken {\\n  constructor(IPool pool) VariableDebtToken(pool) {}\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n}\\n\",\"keccak256\":\"0xd701a18b4dec32cbe4b3c05b200bf7dcf1db90b646c4667e46fbc9a2b4314e23\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/VariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../interfaces/IVariableDebtToken.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\n\\n/**\\n * @title VariableDebtToken\\n * @author Aave\\n * @notice Implements a variable debt token to track the borrowing positions of users\\n * at variable rate mode\\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\\n */\\ncontract VariableDebtToken is DebtTokenBase, ScaledBalanceTokenBase, IVariableDebtToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  )\\n    DebtTokenBase()\\n    ScaledBalanceTokenBase(pool, 'VARIABLE_DEBT_TOKEN_IMPL', 'VARIABLE_DEBT_TOKEN_IMPL', 0)\\n  {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableDebtToken\\n  function initialize(\\n    IPool initializingPool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(debtTokenName);\\n    _setSymbol(debtTokenSymbol);\\n    _setDecimals(debtTokenDecimals);\\n\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      address(incentivesController),\\n      debtTokenDecimals,\\n      debtTokenName,\\n      debtTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return DEBT_TOKEN_REVISION;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address user) public view virtual override returns (uint256) {\\n    uint256 scaledBalance = super.balanceOf(user);\\n\\n    if (scaledBalance == 0) {\\n      return 0;\\n    }\\n\\n    return scaledBalance.rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool, uint256) {\\n    if (user != onBehalfOf) {\\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\\n    }\\n    return (_mintScaled(user, onBehalfOf, amount, index), scaledTotalSupply());\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function burn(\\n    address from,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (uint256) {\\n    _burnScaled(from, address(0), amount, index);\\n    return scaledTotalSupply();\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply().rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /**\\n   * @dev Being non transferrable, the debt token does not implement any of the\\n   * standard ERC20 functions for transfer and allowance.\\n   */\\n  function transfer(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function allowance(address, address) external view virtual override returns (uint256) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function approve(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n}\\n\",\"keccak256\":\"0xd86b1ee620cb0fb2d3db1926f31660cd94c055e17103102e2b13f84c7a65191d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30691,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":30468,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30475,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"},{"astId":30857,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_userState","offset":0,"slot":"56","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_allowances","offset":0,"slot":"57","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_totalSupply","offset":0,"slot":"58","type":"t_uint256"},{"astId":30867,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_name","offset":0,"slot":"59","type":"t_string_storage"},{"astId":30869,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_symbol","offset":0,"slot":"60","type":"t_string_storage"},{"astId":30871,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_decimals","offset":0,"slot":"61","type":"t_uint8"},{"astId":30874,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_incentivesController","offset":1,"slot":"61","type":"t_contract(IAaveIncentivesController)4000"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"burn(address,uint256,uint256)":{"notice":"Burns user variable debt"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address"},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"version":1}}},"contracts/protocol/configuration/ACLManager.sol":{"ACLManager":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_LISTING_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASH_BORROWER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RISK_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAssetListingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"addBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"addFlashBorrower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addPoolAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addRiskAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAssetListingAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"isBridge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isEmergencyAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"isFlashBorrower","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isPoolAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isRiskAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeAssetListingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"removeBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"removeFlashBorrower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removePoolAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeRiskAdmin","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"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"bytes32","name":"adminRole","type":"bytes32"}],"name":"setRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"addAssetListingAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addBridge(address)":{"params":{"bridge":"The address of the new Bridge"}},"addEmergencyAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addFlashBorrower(address)":{"params":{"borrower":"The address of the new FlashBorrower"}},"addPoolAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addRiskAdmin(address)":{"params":{"admin":"The address of the new admin"}},"constructor":{"details":"ConstructorThe ACL admin should be initialized at the addressesProvider beforehand","params":{"provider":"The address of the PoolAddressesProvider"}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"isAssetListingAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is AssetListingAdmin, false otherwise"}},"isBridge(address)":{"params":{"bridge":"The address to check"},"returns":{"_0":"True if the given address is Bridge, false otherwise"}},"isEmergencyAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is EmergencyAdmin, false otherwise"}},"isFlashBorrower(address)":{"params":{"borrower":"The address to check"},"returns":{"_0":"True if the given address is FlashBorrower, false otherwise"}},"isPoolAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is PoolAdmin, false otherwise"}},"isRiskAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is RiskAdmin, false otherwise"}},"removeAssetListingAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeBridge(address)":{"params":{"bridge":"The address of the bridge to remove"}},"removeEmergencyAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeFlashBorrower(address)":{"params":{"borrower":"The address of the FlashBorrower to remove"}},"removePoolAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeRiskAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."},"setRoleAdmin(bytes32,bytes32)":{"details":"By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.","params":{"adminRole":"The admin role","role":"The role to be managed by the admin role"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider","returns":{"_0":"The address of the PoolAddressesProvider"}},"ASSET_LISTING_ADMIN_ROLE":{"return":"The id of the AssetListingAdmin role","returns":{"_0":"The id of the AssetListingAdmin role"}},"BRIDGE_ROLE":{"return":"The id of the Bridge role","returns":{"_0":"The id of the Bridge role"}},"EMERGENCY_ADMIN_ROLE":{"return":"The id of the EmergencyAdmin role","returns":{"_0":"The id of the EmergencyAdmin role"}},"FLASH_BORROWER_ROLE":{"return":"The id of the FlashBorrower role","returns":{"_0":"The id of the FlashBorrower role"}},"POOL_ADMIN_ROLE":{"return":"The id of the PoolAdmin role","returns":{"_0":"The id of the PoolAdmin role"}},"RISK_ADMIN_ROLE":{"return":"The id of the RiskAdmin role","returns":{"_0":"The id of the RiskAdmin role"}}},"title":"ACLManager","version":1},"evm":{"bytecode":{"functionDebugData":{"@_11190":{"entryPoint":null,"id":11190,"parameterSlots":1,"returnSlots":0},"@_grantRole_394":{"entryPoint":298,"id":394,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setupRole_335":{"entryPoint":282,"id":335,"parameterSlots":2,"returnSlots":0},"@hasRole_200":{"entryPoint":null,"id":200,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":483,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":522,"id":null,"parameterSlots":2,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":458,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1364:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:124"},"nodeType":"YulFunctionCall","src":"149:12:124"},"nodeType":"YulExpressionStatement","src":"149:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:124"},"nodeType":"YulFunctionCall","src":"128:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:124"},"nodeType":"YulFunctionCall","src":"124:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:124"},"nodeType":"YulFunctionCall","src":"113:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:124"},"nodeType":"YulFunctionCall","src":"103:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:50:124"},"nodeType":"YulIf","src":"93:70:124"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:124","type":""}],"src":"14:155:124"},{"body":{"nodeType":"YulBlock","src":"286:194:124","statements":[{"body":{"nodeType":"YulBlock","src":"332:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"341:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"344:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"334:6:124"},"nodeType":"YulFunctionCall","src":"334:12:124"},"nodeType":"YulExpressionStatement","src":"334:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"307:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"303:3:124"},"nodeType":"YulFunctionCall","src":"303:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"299:3:124"},"nodeType":"YulFunctionCall","src":"299:32:124"},"nodeType":"YulIf","src":"296:52:124"},{"nodeType":"YulVariableDeclaration","src":"357:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"376:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"370:5:124"},"nodeType":"YulFunctionCall","src":"370:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"361:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"444:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"395:48:124"},"nodeType":"YulFunctionCall","src":"395:55:124"},"nodeType":"YulExpressionStatement","src":"395:55:124"},{"nodeType":"YulAssignment","src":"459:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"469:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"459:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:124","type":""}],"src":"174:306:124"},{"body":{"nodeType":"YulBlock","src":"566:194:124","statements":[{"body":{"nodeType":"YulBlock","src":"612:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"621:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"624:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"614:6:124"},"nodeType":"YulFunctionCall","src":"614:12:124"},"nodeType":"YulExpressionStatement","src":"614:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"587:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"596:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"583:3:124"},"nodeType":"YulFunctionCall","src":"583:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"579:3:124"},"nodeType":"YulFunctionCall","src":"579:32:124"},"nodeType":"YulIf","src":"576:52:124"},{"nodeType":"YulVariableDeclaration","src":"637:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"656:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"650:5:124"},"nodeType":"YulFunctionCall","src":"650:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"641:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"724:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"675:48:124"},"nodeType":"YulFunctionCall","src":"675:55:124"},"nodeType":"YulExpressionStatement","src":"675:55:124"},{"nodeType":"YulAssignment","src":"739:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"749:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"739:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"543:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"555:6:124","type":""}],"src":"485:275:124"},{"body":{"nodeType":"YulBlock","src":"886:476:124","statements":[{"nodeType":"YulVariableDeclaration","src":"896:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"906:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"900:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"924:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"935:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"917:6:124"},"nodeType":"YulFunctionCall","src":"917:21:124"},"nodeType":"YulExpressionStatement","src":"917:21:124"},{"nodeType":"YulVariableDeclaration","src":"947:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"967:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"961:5:124"},"nodeType":"YulFunctionCall","src":"961:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"951:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"994:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1005:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"990:3:124"},"nodeType":"YulFunctionCall","src":"990:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"1010:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"983:6:124"},"nodeType":"YulFunctionCall","src":"983:34:124"},"nodeType":"YulExpressionStatement","src":"983:34:124"},{"nodeType":"YulVariableDeclaration","src":"1026:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1035:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1030:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1095:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1124:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"1135:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1120:3:124"},"nodeType":"YulFunctionCall","src":"1120:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"1139:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1116:3:124"},"nodeType":"YulFunctionCall","src":"1116:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1158:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"1166:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1154:3:124"},"nodeType":"YulFunctionCall","src":"1154:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1170:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1150:3:124"},"nodeType":"YulFunctionCall","src":"1150:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1144:5:124"},"nodeType":"YulFunctionCall","src":"1144:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1109:6:124"},"nodeType":"YulFunctionCall","src":"1109:66:124"},"nodeType":"YulExpressionStatement","src":"1109:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1056:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"1059:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1053:2:124"},"nodeType":"YulFunctionCall","src":"1053:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1067:19:124","statements":[{"nodeType":"YulAssignment","src":"1069:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1078:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1081:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1074:3:124"},"nodeType":"YulFunctionCall","src":"1074:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1069:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"1049:3:124","statements":[]},"src":"1045:140:124"},{"body":{"nodeType":"YulBlock","src":"1219:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1248:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"1259:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:124"},"nodeType":"YulFunctionCall","src":"1244:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"1268:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:124"},"nodeType":"YulFunctionCall","src":"1240:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"1273:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1233:6:124"},"nodeType":"YulFunctionCall","src":"1233:42:124"},"nodeType":"YulExpressionStatement","src":"1233:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1200:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"1203:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1197:2:124"},"nodeType":"YulFunctionCall","src":"1197:13:124"},"nodeType":"YulIf","src":"1194:91:124"},{"nodeType":"YulAssignment","src":"1294:62:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1310:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1329:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1337:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1325:3:124"},"nodeType":"YulFunctionCall","src":"1325:15:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1346:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1342:3:124"},"nodeType":"YulFunctionCall","src":"1342:7:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1321:3:124"},"nodeType":"YulFunctionCall","src":"1321:29:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1306:3:124"},"nodeType":"YulFunctionCall","src":"1306:45:124"},{"kind":"number","nodeType":"YulLiteral","src":"1353:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1302:3:124"},"nodeType":"YulFunctionCall","src":"1302:54:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1294:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"855:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"866:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"877:4:124","type":""}],"src":"765:597:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a06040523480156200001157600080fd5b50604051620015cd380380620015cd8339810160408190526200003491620001e3565b806001600160a01b03166080816001600160a01b0316815250506000816001600160a01b0316630e67178c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b59190620001e3565b604080518082019091526002815261373560f01b60208201529091506001600160a01b038216620001045760405162461bcd60e51b8152600401620000fb91906200020a565b60405180910390fd5b50620001126000826200011a565b505062000262565b6200012682826200012a565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000126576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001863390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b0381168114620001e057600080fd5b50565b600060208284031215620001f657600080fd5b81516200020381620001ca565b9392505050565b600060208083528351808285015260005b8181101562000239578581018301518582016040015282016200021b565b818111156200024c576000604083870101525b50601f01601f1916929092016040019392505050565b60805161134f6200027e6000396000610252015261134f6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c8063674b5e4d1161012a5780639a2b96f7116100bd578063b5bfddea1161008c578063d547741f11610071578063d547741f1461059e578063f83695cb146105b1578063fa50f297146105c457600080fd5b8063b5bfddea14610550578063b8f6dba71461057757600080fd5b80639a2b96f71461050f5780639ac9d80b14610522578063a217fddf14610535578063a21bce151461053d57600080fd5b80637a9a93f4116100f95780637a9a93f41461044a5780637be53ca11461045d57806391d14854146104b85780639712fdf8146104fc57600080fd5b8063674b5e4d146103d65780636e76fc8f146103e9578063726600ce1461041057806378bb0a431461042357600080fd5b80632500f2b6116101a25780633c5a08e5116101715780633c5a08e5146103625780634f16b425146103755780635577b7a91461039c5780635b9a94e4146103c357600080fd5b80632500f2b614610316578063253cf980146103295780632f2ff15d1461033c57806336568abe1461034f57600080fd5b8063179efb09116101de578063179efb09146102ac5780631e4e0091146102bf57806322650caf146102d2578063248a9ca3146102e557600080fd5b806301ffc9a71461021057806304df017d146102385780630542975c1461024d57806313ee32e014610299575b600080fd5b61022361021e366004611013565b6105d7565b60405190151581526020015b60405180910390f35b61024b61024636600461107e565b610670565b005b6102747f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b6102236102a736600461107e565b61069d565b61024b6102ba36600461107e565b6106ea565b61024b6102cd366004611099565b610714565b61024b6102e036600461107e565b61072f565b6103086102f33660046110bb565b60009081526020819052604090206001015490565b60405190815260200161022f565b61022361032436600461107e565b610759565b61024b61033736600461107e565b6107a6565b61024b61034a3660046110d4565b6107d0565b61024b61035d3660046110d4565b6107f6565b61024b61037036600461107e565b6108ae565b6103087f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e1816781565b6103087f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca481565b61024b6103d136600461107e565b6108d8565b6102236103e436600461107e565b610902565b6103087f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb81565b61022361041e36600461107e565b61094f565b6103087f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c85743381565b61024b61045836600461107e565b61099c565b61022361046b36600461107e565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fd21b659ff028ba5860060da0a2ef0b8b1b13b1f79963511fcee160c2e54d2f22602052604081205460ff1661066a565b6102236104c63660046110d4565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024b61050a36600461107e565b6109c6565b61024b61051d36600461107e565b6109f0565b61024b61053036600461107e565b610a1a565b610308600081565b61024b61054b36600461107e565b610a44565b6103087f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae327881565b6103087f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b81565b61024b6105ac3660046110d4565b610a6a565b61024b6105bf36600461107e565b610a90565b6102236105d236600461107e565b610aba565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061066a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61069a7f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae327882610a6a565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fcba084d2e26105260e9ae84b007967d64af085c681345e4941eeba502738cf44602052604081205460ff1661066a565b61069a7f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb826107d0565b60006107208133610b07565b61072a8383610bd7565b505050565b61069a7f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b826107d0565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fac55d60145c2b1e72232130507b090ddd2cd26daa31eeab1e3e64b89140e668d602052604081205460ff1661066a565b61069a7f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca482610a6a565b6000828152602081905260409020600101546107ec8133610b07565b61072a8383610c22565b73ffffffffffffffffffffffffffffffffffffffff811633146108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6108aa8282610d12565b5050565b61069a7f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e1816782610a6a565b61069a7f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e18167826107d0565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fa2630211c42039a24e17727bf18ec344681c4916090d2a50e04b9b6e50b7fea9602052604081205460ff1661066a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f9e350b38c6d0090a0631963682975411c4e88e66bd66d7f4ffcc296b4c83bf93602052604081205460ff1661066a565b61069a7f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb82610a6a565b61069a7f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae3278826107d0565b61069a7f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433826107d0565b61069a7f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca4826107d0565b61069a7f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433825b600082815260208190526040902060010154610a868133610b07565b61072a8383610d12565b61069a7f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b82610a6a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f2eadd72b6698cc7bfac8abf613f53107771ac2a3e4a3221cda0a8e2b1b91b0b4602052604081205460ff1661066a565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108aa57610b5d8173ffffffffffffffffffffffffffffffffffffffff166014610dc9565b610b68836020610dc9565b604051602001610b79929190611130565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610897916004016111b1565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108aa5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610cb43390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156108aa5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610dd8836002611231565b610de390600261126e565b67ffffffffffffffff811115610dfb57610dfb611286565b6040519080825280601f01601f191660200182016040528015610e25576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610e5c57610e5c6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610ebf57610ebf6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610efb846002611231565b610f0690600161126e565b90505b6001811115610fa3577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610f4757610f476112b5565b1a60f81b828281518110610f5d57610f5d6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610f9c816112e4565b9050610f09565b50831561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610897565b9392505050565b60006020828403121561102557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100c57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461107957600080fd5b919050565b60006020828403121561109057600080fd5b61100c82611055565b600080604083850312156110ac57600080fd5b50508035926020909101359150565b6000602082840312156110cd57600080fd5b5035919050565b600080604083850312156110e757600080fd5b823591506110f760208401611055565b90509250929050565b60005b8381101561111b578181015183820152602001611103565b8381111561112a576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611168816017850160208801611100565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516111a5816028840160208801611100565b01602801949350505050565b60208152600082518060208401526111d0816040850160208701611100565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561126957611269611202565b500290565b6000821982111561128157611281611202565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000816112f3576112f3611202565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220d36d6d2e7df54059c4f97367cdc649fdae9ca664fd0c0f3b09dac9d6b21f8a7564736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x15CD CODESIZE SUB DUP1 PUSH3 0x15CD DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1E3 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE67178C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xB5 SWAP2 SWAP1 PUSH3 0x1E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x3735 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x104 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xFB SWAP2 SWAP1 PUSH3 0x20A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH3 0x112 PUSH1 0x0 DUP3 PUSH3 0x11A JUMP JUMPDEST POP POP PUSH3 0x262 JUMP JUMPDEST PUSH3 0x126 DUP3 DUP3 PUSH3 0x12A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH3 0x126 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH3 0x186 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x203 DUP2 PUSH3 0x1CA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x239 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH3 0x21B JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH3 0x24C JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x134F PUSH3 0x27E PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x252 ADD MSTORE PUSH2 0x134F PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x674B5E4D GT PUSH2 0x12A JUMPI DUP1 PUSH4 0x9A2B96F7 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xB5BFDDEA GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD547741F GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x59E JUMPI DUP1 PUSH4 0xF83695CB EQ PUSH2 0x5B1 JUMPI DUP1 PUSH4 0xFA50F297 EQ PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB5BFDDEA EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0xB8F6DBA7 EQ PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9A2B96F7 EQ PUSH2 0x50F JUMPI DUP1 PUSH4 0x9AC9D80B EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0xA21BCE15 EQ PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A9A93F4 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0x7A9A93F4 EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x7BE53CA1 EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x9712FDF8 EQ PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x674B5E4D EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x6E76FC8F EQ PUSH2 0x3E9 JUMPI DUP1 PUSH4 0x726600CE EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0x78BB0A43 EQ PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2500F2B6 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x3C5A08E5 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x3C5A08E5 EQ PUSH2 0x362 JUMPI DUP1 PUSH4 0x4F16B425 EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0x5577B7A9 EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x5B9A94E4 EQ PUSH2 0x3C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2500F2B6 EQ PUSH2 0x316 JUMPI DUP1 PUSH4 0x253CF980 EQ PUSH2 0x329 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x179EFB09 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x179EFB09 EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x1E4E0091 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x22650CAF EQ PUSH2 0x2D2 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x4DF017D EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x13EE32E0 EQ PUSH2 0x299 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x223 PUSH2 0x21E CALLDATASIZE PUSH1 0x4 PUSH2 0x1013 JUMP JUMPDEST PUSH2 0x5D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x24B PUSH2 0x246 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x670 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x274 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x22F JUMP JUMPDEST PUSH2 0x223 PUSH2 0x2A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x69D JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2BA CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x6EA JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2CD CALLDATASIZE PUSH1 0x4 PUSH2 0x1099 JUMP JUMPDEST PUSH2 0x714 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x72F JUMP JUMPDEST PUSH2 0x308 PUSH2 0x2F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x10BB JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x22F JUMP JUMPDEST PUSH2 0x223 PUSH2 0x324 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x759 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x337 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x34A CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x35D CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x7F6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x370 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x8AE JUMP JUMPDEST PUSH2 0x308 PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP2 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x3D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x8D8 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x3E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x902 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP2 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x41E CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x94F JUMP JUMPDEST PUSH2 0x308 PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x458 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x99C JUMP JUMPDEST PUSH2 0x223 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xD21B659FF028BA5860060DA0A2EF0B8B1B13B1F79963511FCEE160C2E54D2F22 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x223 PUSH2 0x4C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x50A CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x9C6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x9F0 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA1A JUMP JUMPDEST PUSH2 0x308 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x54B CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA44 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP2 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x5AC CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x24B PUSH2 0x5BF CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA90 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x5D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xABA JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 EQ DUP1 PUSH2 0x66A JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP3 PUSH2 0xA6A JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xCBA084D2E26105260E9AE84B007967D64AF085C681345E4941EEBA502738CF44 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x720 DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xBD7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xAC55D60145C2B1E72232130507B090DDD2CD26DAA31EEAB1E3E64B89140E668D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x7EC DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xC22 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND CALLER EQ PUSH2 0x8A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416363657373436F6E74726F6C3A2063616E206F6E6C792072656E6F756E6365 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20726F6C657320666F722073656C660000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8AA DUP3 DUP3 PUSH2 0xD12 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xA2630211C42039A24E17727BF18EC344681C4916090D2A50E04B9B6E50B7FEA9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x9E350B38C6D0090A0631963682975411C4E88E66BD66D7F4FFCC296B4C83BF93 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP3 JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0xA86 DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xD12 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x2EADD72B6698CC7BFAC8ABF613F53107771AC2A3E4A3221CDA0A8E2B1B91B0B4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8AA JUMPI PUSH2 0xB5D DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x14 PUSH2 0xDC9 JUMP JUMPDEST PUSH2 0xB68 DUP4 PUSH1 0x20 PUSH2 0xDC9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB79 SWAP3 SWAP2 SWAP1 PUSH2 0x1130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH2 0x897 SWAP2 PUSH1 0x4 ADD PUSH2 0x11B1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 DUP4 SWAP2 DUP4 SWAP2 DUP7 SWAP2 PUSH32 0xBD79B86FFE0AB8E8776151514217CD7CACD52C909F66475C3AF44E129F0B00FF SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8AA JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0xCB4 CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP6 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xDD8 DUP4 PUSH1 0x2 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0xDE3 SWAP1 PUSH1 0x2 PUSH2 0x126E JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDFB JUMPI PUSH2 0xDFB PUSH2 0x1286 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE25 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH32 0x3000000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH32 0x7800000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xEBF JUMPI PUSH2 0xEBF PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x0 PUSH2 0xEFB DUP5 PUSH1 0x2 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0xF06 SWAP1 PUSH1 0x1 PUSH2 0x126E JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xFA3 JUMPI PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 DUP6 PUSH1 0xF AND PUSH1 0x10 DUP2 LT PUSH2 0xF47 JUMPI PUSH2 0xF47 PUSH2 0x12B5 JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF5D JUMPI PUSH2 0xF5D PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x4 SWAP5 SWAP1 SWAP5 SHR SWAP4 PUSH2 0xF9C DUP2 PUSH2 0x12E4 JUMP JUMPDEST SWAP1 POP PUSH2 0xF09 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0x100C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537472696E67733A20686578206C656E67746820696E73756666696369656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x897 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1025 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x100C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1079 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1090 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x100C DUP3 PUSH2 0x1055 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x10F7 PUSH1 0x20 DUP5 ADD PUSH2 0x1055 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x111B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1103 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x112A JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x416363657373436F6E74726F6C3A206163636F756E7420000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0x1168 DUP2 PUSH1 0x17 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1100 JUMP JUMPDEST PUSH32 0x206973206D697373696E6720726F6C6520000000000000000000000000000000 PUSH1 0x17 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x11A5 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1100 JUMP JUMPDEST ADD PUSH1 0x28 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x11D0 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1100 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1269 JUMPI PUSH2 0x1269 PUSH2 0x1202 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1281 JUMPI PUSH2 0x1281 PUSH2 0x1202 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x12F3 JUMPI PUSH2 0x12F3 PUSH2 0x1202 JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 PUSH14 0x6D2E7DF54059C4F97367CDC649FD 0xAE SWAP13 0xA6 PUSH5 0xFD0C0F3B09 0xDA 0xC9 0xD6 0xB2 0x1F DUP11 PUSH22 0x64736F6C634300080A00330000000000000000000000 ","sourceMap":"489:3901:81:-:0;;;1281:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1353:8;-1:-1:-1;;;;;1332:29:81;;;-1:-1:-1;;;;;1332:29:81;;;;;1367:16;1386:8;-1:-1:-1;;;;;1386:20:81;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1446:31;;;;;;;;;;;;-1:-1:-1;;;1446:31:81;;;;1367:41;;-1:-1:-1;;;;;;1422:22:81;;1414:64;;;;-1:-1:-1;;;1414:64:81;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1484:40:81;1946:4:2;1515:8:81;1484:10;:40::i;:::-;1326:203;1281:248;489:3901;;5727:104:2;5801:25;5812:4;5818:7;5801:10;:25::i;:::-;5727:104;;:::o;6181:202::-;2807:4;2826:12;;;;;;;;;;;-1:-1:-1;;;;;2826:29:2;;;;;;;;;;;;6246:133;;6283:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6283:29:2;;;;;;;;;:36;;-1:-1:-1;;6283:36:2;6315:4;6283:36;;;6359:12;678:10:4;;587:107;6359:12:2;-1:-1:-1;;;;;6332:40:2;6350:7;-1:-1:-1;;;;;6332:40:2;6344:4;6332:40;;;;;;;;;;6181:202;;:::o;14:155:124:-;-1:-1:-1;;;;;113:31:124;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:306::-;275:6;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;376:9;370:16;395:55;444:5;395:55;:::i;:::-;469:5;174:306;-1:-1:-1;;;174:306:124:o;765:597::-;877:4;906:2;935;924:9;917:21;967:6;961:13;1010:6;1005:2;994:9;990:18;983:34;1035:1;1045:140;1059:6;1056:1;1053:13;1045:140;;;1154:14;;;1150:23;;1144:30;1120:17;;;1139:2;1116:26;1109:66;1074:10;;1045:140;;;1203:6;1200:1;1197:13;1194:91;;;1273:1;1268:2;1259:6;1248:9;1244:22;1240:31;1233:42;1194:91;-1:-1:-1;1346:2:124;1325:15;-1:-1:-1;;1321:29:124;1306:45;;;;1353:2;1302:54;;765:597;-1:-1:-1;;;765:597:124:o;:::-;489:3901:81;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_11156":{"entryPoint":null,"id":11156,"parameterSlots":0,"returnSlots":0},"@ASSET_LISTING_ADMIN_ROLE_11153":{"entryPoint":null,"id":11153,"parameterSlots":0,"returnSlots":0},"@BRIDGE_ROLE_11147":{"entryPoint":null,"id":11147,"parameterSlots":0,"returnSlots":0},"@DEFAULT_ADMIN_ROLE_146":{"entryPoint":null,"id":146,"parameterSlots":0,"returnSlots":0},"@EMERGENCY_ADMIN_ROLE_11129":{"entryPoint":null,"id":11129,"parameterSlots":0,"returnSlots":0},"@FLASH_BORROWER_ROLE_11141":{"entryPoint":null,"id":11141,"parameterSlots":0,"returnSlots":0},"@POOL_ADMIN_ROLE_11123":{"entryPoint":null,"id":11123,"parameterSlots":0,"returnSlots":0},"@RISK_ADMIN_ROLE_11135":{"entryPoint":null,"id":11135,"parameterSlots":0,"returnSlots":0},"@_checkRole_243":{"entryPoint":2823,"id":243,"parameterSlots":2,"returnSlots":0},"@_grantRole_394":{"entryPoint":3106,"id":394,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_revokeRole_424":{"entryPoint":3346,"id":424,"parameterSlots":2,"returnSlots":0},"@_setRoleAdmin_363":{"entryPoint":3031,"id":363,"parameterSlots":2,"returnSlots":0},"@addAssetListingAdmin_11426":{"entryPoint":2544,"id":11426,"parameterSlots":1,"returnSlots":0},"@addBridge_11385":{"entryPoint":2502,"id":11385,"parameterSlots":1,"returnSlots":0},"@addEmergencyAdmin_11262":{"entryPoint":1770,"id":11262,"parameterSlots":1,"returnSlots":0},"@addFlashBorrower_11344":{"entryPoint":2586,"id":11344,"parameterSlots":1,"returnSlots":0},"@addPoolAdmin_11221":{"entryPoint":1839,"id":11221,"parameterSlots":1,"returnSlots":0},"@addRiskAdmin_11303":{"entryPoint":2264,"id":11303,"parameterSlots":1,"returnSlots":0},"@getRoleAdmin_258":{"entryPoint":null,"id":258,"parameterSlots":1,"returnSlots":1},"@grantRole_278":{"entryPoint":2000,"id":278,"parameterSlots":2,"returnSlots":0},"@hasRole_200":{"entryPoint":null,"id":200,"parameterSlots":2,"returnSlots":1},"@isAssetListingAdmin_11454":{"entryPoint":1693,"id":11454,"parameterSlots":1,"returnSlots":1},"@isBridge_11413":{"entryPoint":2383,"id":11413,"parameterSlots":1,"returnSlots":1},"@isEmergencyAdmin_11290":{"entryPoint":1881,"id":11290,"parameterSlots":1,"returnSlots":1},"@isFlashBorrower_11372":{"entryPoint":2746,"id":11372,"parameterSlots":1,"returnSlots":1},"@isPoolAdmin_11249":{"entryPoint":null,"id":11249,"parameterSlots":1,"returnSlots":1},"@isRiskAdmin_11331":{"entryPoint":2306,"id":11331,"parameterSlots":1,"returnSlots":1},"@removeAssetListingAdmin_11439":{"entryPoint":2628,"id":11439,"parameterSlots":1,"returnSlots":0},"@removeBridge_11398":{"entryPoint":1648,"id":11398,"parameterSlots":1,"returnSlots":0},"@removeEmergencyAdmin_11275":{"entryPoint":2460,"id":11275,"parameterSlots":1,"returnSlots":0},"@removeFlashBorrower_11357":{"entryPoint":1958,"id":11357,"parameterSlots":1,"returnSlots":0},"@removePoolAdmin_11234":{"entryPoint":2704,"id":11234,"parameterSlots":1,"returnSlots":0},"@removeRiskAdmin_11316":{"entryPoint":2222,"id":11316,"parameterSlots":1,"returnSlots":0},"@renounceRole_321":{"entryPoint":2038,"id":321,"parameterSlots":2,"returnSlots":0},"@revokeRole_298":{"entryPoint":2666,"id":298,"parameterSlots":2,"returnSlots":0},"@setRoleAdmin_11208":{"entryPoint":1812,"id":11208,"parameterSlots":2,"returnSlots":0},"@supportsInterface_181":{"entryPoint":1495,"id":181,"parameterSlots":1,"returnSlots":1},"@supportsInterface_771":{"entryPoint":null,"id":771,"parameterSlots":1,"returnSlots":1},"@toHexString_2512":{"entryPoint":3529,"id":2512,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":4181,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":4222,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":4283,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_address":{"entryPoint":4308,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32t_bytes32":{"entryPoint":4249,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes4":{"entryPoint":4115,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":4400,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4529,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4718,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":4657,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":4352,"id":null,"parameterSlots":3,"returnSlots":0},"decrement_t_uint256":{"entryPoint":4836,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":4610,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":4789,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":4742,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5485:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:263:124","statements":[{"body":{"nodeType":"YulBlock","src":"129:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"138:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"131:6:124"},"nodeType":"YulFunctionCall","src":"131:12:124"},"nodeType":"YulExpressionStatement","src":"131:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"104:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"113:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"100:3:124"},"nodeType":"YulFunctionCall","src":"100:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"125:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:32:124"},"nodeType":"YulIf","src":"93:52:124"},{"nodeType":"YulVariableDeclaration","src":"154:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"180:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"167:12:124"},"nodeType":"YulFunctionCall","src":"167:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"158:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"300:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"309:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"312:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"302:6:124"},"nodeType":"YulFunctionCall","src":"302:12:124"},"nodeType":"YulExpressionStatement","src":"302:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"212:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"223:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"230:66:124","type":"","value":"0xffffffff00000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"219:3:124"},"nodeType":"YulFunctionCall","src":"219:78:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"209:2:124"},"nodeType":"YulFunctionCall","src":"209:89:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"202:6:124"},"nodeType":"YulFunctionCall","src":"202:97:124"},"nodeType":"YulIf","src":"199:117:124"},{"nodeType":"YulAssignment","src":"325:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"335:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"325:6:124"}]}]},"name":"abi_decode_tuple_t_bytes4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"60:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"72:6:124","type":""}],"src":"14:332:124"},{"body":{"nodeType":"YulBlock","src":"446:92:124","statements":[{"nodeType":"YulAssignment","src":"456:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"468:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"479:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"464:3:124"},"nodeType":"YulFunctionCall","src":"464:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"456:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"498:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"523:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"516:6:124"},"nodeType":"YulFunctionCall","src":"516:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"509:6:124"},"nodeType":"YulFunctionCall","src":"509:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"491:6:124"},"nodeType":"YulFunctionCall","src":"491:41:124"},"nodeType":"YulExpressionStatement","src":"491:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"415:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"426:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"437:4:124","type":""}],"src":"351:187:124"},{"body":{"nodeType":"YulBlock","src":"592:147:124","statements":[{"nodeType":"YulAssignment","src":"602:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"624:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"611:12:124"},"nodeType":"YulFunctionCall","src":"611:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"602:5:124"}]},{"body":{"nodeType":"YulBlock","src":"717:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"726:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"729:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"719:6:124"},"nodeType":"YulFunctionCall","src":"719:12:124"},"nodeType":"YulExpressionStatement","src":"719:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"653:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"664:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"671:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"660:3:124"},"nodeType":"YulFunctionCall","src":"660:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"650:2:124"},"nodeType":"YulFunctionCall","src":"650:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"643:6:124"},"nodeType":"YulFunctionCall","src":"643:73:124"},"nodeType":"YulIf","src":"640:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"571:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"582:5:124","type":""}],"src":"543:196:124"},{"body":{"nodeType":"YulBlock","src":"814:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"860:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"869:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"872:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"862:6:124"},"nodeType":"YulFunctionCall","src":"862:12:124"},"nodeType":"YulExpressionStatement","src":"862:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"835:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"844:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"831:3:124"},"nodeType":"YulFunctionCall","src":"831:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"856:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"827:3:124"},"nodeType":"YulFunctionCall","src":"827:32:124"},"nodeType":"YulIf","src":"824:52:124"},{"nodeType":"YulAssignment","src":"885:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"914:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"895:18:124"},"nodeType":"YulFunctionCall","src":"895:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"885:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"780:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"791:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"803:6:124","type":""}],"src":"744:186:124"},{"body":{"nodeType":"YulBlock","src":"1067:125:124","statements":[{"nodeType":"YulAssignment","src":"1077:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1089:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1100:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1085:3:124"},"nodeType":"YulFunctionCall","src":"1085:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1077:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1119:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1134:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1130:3:124"},"nodeType":"YulFunctionCall","src":"1130:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1112:6:124"},"nodeType":"YulFunctionCall","src":"1112:74:124"},"nodeType":"YulExpressionStatement","src":"1112:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1036:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1047:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1058:4:124","type":""}],"src":"935:257:124"},{"body":{"nodeType":"YulBlock","src":"1284:161:124","statements":[{"body":{"nodeType":"YulBlock","src":"1330:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1339:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1342:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1332:6:124"},"nodeType":"YulFunctionCall","src":"1332:12:124"},"nodeType":"YulExpressionStatement","src":"1332:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1305:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1314:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1301:3:124"},"nodeType":"YulFunctionCall","src":"1301:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1326:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1297:3:124"},"nodeType":"YulFunctionCall","src":"1297:32:124"},"nodeType":"YulIf","src":"1294:52:124"},{"nodeType":"YulAssignment","src":"1355:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1378:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1365:12:124"},"nodeType":"YulFunctionCall","src":"1365:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1355:6:124"}]},{"nodeType":"YulAssignment","src":"1397:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1424:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1435:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1420:3:124"},"nodeType":"YulFunctionCall","src":"1420:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1407:12:124"},"nodeType":"YulFunctionCall","src":"1407:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1397:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1242:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1253:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1265:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1273:6:124","type":""}],"src":"1197:248:124"},{"body":{"nodeType":"YulBlock","src":"1520:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"1566:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1575:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1578:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1568:6:124"},"nodeType":"YulFunctionCall","src":"1568:12:124"},"nodeType":"YulExpressionStatement","src":"1568:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1541:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1550:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1537:3:124"},"nodeType":"YulFunctionCall","src":"1537:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1562:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1533:3:124"},"nodeType":"YulFunctionCall","src":"1533:32:124"},"nodeType":"YulIf","src":"1530:52:124"},{"nodeType":"YulAssignment","src":"1591:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1614:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1601:12:124"},"nodeType":"YulFunctionCall","src":"1601:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1591:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1486:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1497:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1509:6:124","type":""}],"src":"1450:180:124"},{"body":{"nodeType":"YulBlock","src":"1736:76:124","statements":[{"nodeType":"YulAssignment","src":"1746:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1758:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1769:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1754:3:124"},"nodeType":"YulFunctionCall","src":"1754:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1746:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1788:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1799:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1781:6:124"},"nodeType":"YulFunctionCall","src":"1781:25:124"},"nodeType":"YulExpressionStatement","src":"1781:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1705:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1716:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1727:4:124","type":""}],"src":"1635:177:124"},{"body":{"nodeType":"YulBlock","src":"1904:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"1950:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1959:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1962:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1952:6:124"},"nodeType":"YulFunctionCall","src":"1952:12:124"},"nodeType":"YulExpressionStatement","src":"1952:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1925:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1934:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1921:3:124"},"nodeType":"YulFunctionCall","src":"1921:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1946:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1917:3:124"},"nodeType":"YulFunctionCall","src":"1917:32:124"},"nodeType":"YulIf","src":"1914:52:124"},{"nodeType":"YulAssignment","src":"1975:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1998:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1985:12:124"},"nodeType":"YulFunctionCall","src":"1985:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1975:6:124"}]},{"nodeType":"YulAssignment","src":"2017:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2050:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2061:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2046:3:124"},"nodeType":"YulFunctionCall","src":"2046:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2027:18:124"},"nodeType":"YulFunctionCall","src":"2027:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2017:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1862:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1873:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1885:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1893:6:124","type":""}],"src":"1817:254:124"},{"body":{"nodeType":"YulBlock","src":"2250:237:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2267:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2278:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2260:6:124"},"nodeType":"YulFunctionCall","src":"2260:21:124"},"nodeType":"YulExpressionStatement","src":"2260:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2301:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2312:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2297:3:124"},"nodeType":"YulFunctionCall","src":"2297:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2317:2:124","type":"","value":"47"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2290:6:124"},"nodeType":"YulFunctionCall","src":"2290:30:124"},"nodeType":"YulExpressionStatement","src":"2290:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2340:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2351:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2336:3:124"},"nodeType":"YulFunctionCall","src":"2336:18:124"},{"hexValue":"416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365","kind":"string","nodeType":"YulLiteral","src":"2356:34:124","type":"","value":"AccessControl: can only renounce"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:124"},"nodeType":"YulFunctionCall","src":"2329:62:124"},"nodeType":"YulExpressionStatement","src":"2329:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2411:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2422:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2407:3:124"},"nodeType":"YulFunctionCall","src":"2407:18:124"},{"hexValue":"20726f6c657320666f722073656c66","kind":"string","nodeType":"YulLiteral","src":"2427:17:124","type":"","value":" roles for self"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2400:6:124"},"nodeType":"YulFunctionCall","src":"2400:45:124"},"nodeType":"YulExpressionStatement","src":"2400:45:124"},{"nodeType":"YulAssignment","src":"2454:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2477:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:124"},"nodeType":"YulFunctionCall","src":"2462:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2454:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2227:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2241:4:124","type":""}],"src":"2076:411:124"},{"body":{"nodeType":"YulBlock","src":"2545:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2555:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2564:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2559:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2624:63:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2649:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"2654:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2645:3:124"},"nodeType":"YulFunctionCall","src":"2645:11:124"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2668:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"2673:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2664:3:124"},"nodeType":"YulFunctionCall","src":"2664:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2658:5:124"},"nodeType":"YulFunctionCall","src":"2658:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2638:6:124"},"nodeType":"YulFunctionCall","src":"2638:39:124"},"nodeType":"YulExpressionStatement","src":"2638:39:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2585:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2588:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2582:2:124"},"nodeType":"YulFunctionCall","src":"2582:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2596:19:124","statements":[{"nodeType":"YulAssignment","src":"2598:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2607:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"2610:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2603:3:124"},"nodeType":"YulFunctionCall","src":"2603:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2598:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2578:3:124","statements":[]},"src":"2574:113:124"},{"body":{"nodeType":"YulBlock","src":"2713:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2726:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2731:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:124"},"nodeType":"YulFunctionCall","src":"2722:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"2740:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2715:6:124"},"nodeType":"YulFunctionCall","src":"2715:27:124"},"nodeType":"YulExpressionStatement","src":"2715:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2702:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2705:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2699:2:124"},"nodeType":"YulFunctionCall","src":"2699:13:124"},"nodeType":"YulIf","src":"2696:48:124"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"2523:3:124","type":""},{"name":"dst","nodeType":"YulTypedName","src":"2528:3:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"2533:6:124","type":""}],"src":"2492:258:124"},{"body":{"nodeType":"YulBlock","src":"3144:397:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3161:3:124"},{"hexValue":"416363657373436f6e74726f6c3a206163636f756e7420","kind":"string","nodeType":"YulLiteral","src":"3166:25:124","type":"","value":"AccessControl: account "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3154:6:124"},"nodeType":"YulFunctionCall","src":"3154:38:124"},"nodeType":"YulExpressionStatement","src":"3154:38:124"},{"nodeType":"YulVariableDeclaration","src":"3201:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3221:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3215:5:124"},"nodeType":"YulFunctionCall","src":"3215:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3205:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3263:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3271:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3259:3:124"},"nodeType":"YulFunctionCall","src":"3259:17:124"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3282:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"3287:2:124","type":"","value":"23"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3278:3:124"},"nodeType":"YulFunctionCall","src":"3278:12:124"},{"name":"length","nodeType":"YulIdentifier","src":"3292:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"3237:21:124"},"nodeType":"YulFunctionCall","src":"3237:62:124"},"nodeType":"YulExpressionStatement","src":"3237:62:124"},{"nodeType":"YulVariableDeclaration","src":"3308:26:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3322:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"3327:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3318:3:124"},"nodeType":"YulFunctionCall","src":"3318:16:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3312:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3354:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3358:2:124","type":"","value":"23"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3350:3:124"},"nodeType":"YulFunctionCall","src":"3350:11:124"},{"hexValue":"206973206d697373696e6720726f6c6520","kind":"string","nodeType":"YulLiteral","src":"3363:19:124","type":"","value":" is missing role "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3343:6:124"},"nodeType":"YulFunctionCall","src":"3343:40:124"},"nodeType":"YulExpressionStatement","src":"3343:40:124"},{"nodeType":"YulVariableDeclaration","src":"3392:29:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3414:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3408:5:124"},"nodeType":"YulFunctionCall","src":"3408:13:124"},"variables":[{"name":"length_1","nodeType":"YulTypedName","src":"3396:8:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3456:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3464:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3452:3:124"},"nodeType":"YulFunctionCall","src":"3452:17:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3475:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3479:2:124","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3471:3:124"},"nodeType":"YulFunctionCall","src":"3471:11:124"},{"name":"length_1","nodeType":"YulIdentifier","src":"3484:8:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"3430:21:124"},"nodeType":"YulFunctionCall","src":"3430:63:124"},"nodeType":"YulExpressionStatement","src":"3430:63:124"},{"nodeType":"YulAssignment","src":"3502:33:124","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3517:2:124"},{"name":"length_1","nodeType":"YulIdentifier","src":"3521:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3513:3:124"},"nodeType":"YulFunctionCall","src":"3513:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"3532:2:124","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3509:3:124"},"nodeType":"YulFunctionCall","src":"3509:26:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3502:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3112:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3117:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3125:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3136:3:124","type":""}],"src":"2755:786:124"},{"body":{"nodeType":"YulBlock","src":"3667:321:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3684:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3695:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3677:6:124"},"nodeType":"YulFunctionCall","src":"3677:21:124"},"nodeType":"YulExpressionStatement","src":"3677:21:124"},{"nodeType":"YulVariableDeclaration","src":"3707:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3727:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3721:5:124"},"nodeType":"YulFunctionCall","src":"3721:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3711:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3754:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3765:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3750:3:124"},"nodeType":"YulFunctionCall","src":"3750:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"3770:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3743:6:124"},"nodeType":"YulFunctionCall","src":"3743:34:124"},"nodeType":"YulExpressionStatement","src":"3743:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3812:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3820:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3808:3:124"},"nodeType":"YulFunctionCall","src":"3808:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3829:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3840:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3825:3:124"},"nodeType":"YulFunctionCall","src":"3825:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"3845:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"3786:21:124"},"nodeType":"YulFunctionCall","src":"3786:66:124"},"nodeType":"YulExpressionStatement","src":"3786:66:124"},{"nodeType":"YulAssignment","src":"3861:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3877:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3896:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3904:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3892:3:124"},"nodeType":"YulFunctionCall","src":"3892:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"3909:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3888:3:124"},"nodeType":"YulFunctionCall","src":"3888:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3873:3:124"},"nodeType":"YulFunctionCall","src":"3873:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"3979:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3869:3:124"},"nodeType":"YulFunctionCall","src":"3869:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3861:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3636:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3647:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3658:4:124","type":""}],"src":"3546:442:124"},{"body":{"nodeType":"YulBlock","src":"4025:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4042:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4045:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4035:6:124"},"nodeType":"YulFunctionCall","src":"4035:88:124"},"nodeType":"YulExpressionStatement","src":"4035:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4139:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4142:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4132:6:124"},"nodeType":"YulFunctionCall","src":"4132:15:124"},"nodeType":"YulExpressionStatement","src":"4132:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4163:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4166:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4156:6:124"},"nodeType":"YulFunctionCall","src":"4156:15:124"},"nodeType":"YulExpressionStatement","src":"4156:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"3993:184:124"},{"body":{"nodeType":"YulBlock","src":"4234:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"4353:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4355:16:124"},"nodeType":"YulFunctionCall","src":"4355:18:124"},"nodeType":"YulExpressionStatement","src":"4355:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4265:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4258:6:124"},"nodeType":"YulFunctionCall","src":"4258:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4251:6:124"},"nodeType":"YulFunctionCall","src":"4251:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4273:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4280:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"4348:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4276:3:124"},"nodeType":"YulFunctionCall","src":"4276:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4270:2:124"},"nodeType":"YulFunctionCall","src":"4270:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4247:3:124"},"nodeType":"YulFunctionCall","src":"4247:105:124"},"nodeType":"YulIf","src":"4244:131:124"},{"nodeType":"YulAssignment","src":"4384:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4399:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"4402:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4395:3:124"},"nodeType":"YulFunctionCall","src":"4395:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"4384:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4213:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"4216:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"4222:7:124","type":""}],"src":"4182:228:124"},{"body":{"nodeType":"YulBlock","src":"4463:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"4490:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4492:16:124"},"nodeType":"YulFunctionCall","src":"4492:18:124"},"nodeType":"YulExpressionStatement","src":"4492:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4479:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4486:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4482:3:124"},"nodeType":"YulFunctionCall","src":"4482:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4476:2:124"},"nodeType":"YulFunctionCall","src":"4476:13:124"},"nodeType":"YulIf","src":"4473:39:124"},{"nodeType":"YulAssignment","src":"4521:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4532:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"4535:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4528:3:124"},"nodeType":"YulFunctionCall","src":"4528:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"4521:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4446:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"4449:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"4455:3:124","type":""}],"src":"4415:128:124"},{"body":{"nodeType":"YulBlock","src":"4580:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4597:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4600:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4590:6:124"},"nodeType":"YulFunctionCall","src":"4590:88:124"},"nodeType":"YulExpressionStatement","src":"4590:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4694:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4697:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4687:6:124"},"nodeType":"YulFunctionCall","src":"4687:15:124"},"nodeType":"YulExpressionStatement","src":"4687:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4718:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4721:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4711:6:124"},"nodeType":"YulFunctionCall","src":"4711:15:124"},"nodeType":"YulExpressionStatement","src":"4711:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"4548:184:124"},{"body":{"nodeType":"YulBlock","src":"4769:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4786:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4789:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4779:6:124"},"nodeType":"YulFunctionCall","src":"4779:88:124"},"nodeType":"YulExpressionStatement","src":"4779:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4883:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4886:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4876:6:124"},"nodeType":"YulFunctionCall","src":"4876:15:124"},"nodeType":"YulExpressionStatement","src":"4876:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4907:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4910:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4900:6:124"},"nodeType":"YulFunctionCall","src":"4900:15:124"},"nodeType":"YulExpressionStatement","src":"4900:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"4737:184:124"},{"body":{"nodeType":"YulBlock","src":"4973:149:124","statements":[{"body":{"nodeType":"YulBlock","src":"5000:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5002:16:124"},"nodeType":"YulFunctionCall","src":"5002:18:124"},"nodeType":"YulExpressionStatement","src":"5002:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4993:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4986:6:124"},"nodeType":"YulFunctionCall","src":"4986:13:124"},"nodeType":"YulIf","src":"4983:39:124"},{"nodeType":"YulAssignment","src":"5031:85:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5042:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5049:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5038:3:124"},"nodeType":"YulFunctionCall","src":"5038:78:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"5031:3:124"}]}]},"name":"decrement_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4955:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"4965:3:124","type":""}],"src":"4926:196:124"},{"body":{"nodeType":"YulBlock","src":"5301:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5318:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5329:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5311:6:124"},"nodeType":"YulFunctionCall","src":"5311:21:124"},"nodeType":"YulExpressionStatement","src":"5311:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5352:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5363:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5348:3:124"},"nodeType":"YulFunctionCall","src":"5348:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"5368:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5341:6:124"},"nodeType":"YulFunctionCall","src":"5341:30:124"},"nodeType":"YulExpressionStatement","src":"5341:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5391:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5402:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5387:3:124"},"nodeType":"YulFunctionCall","src":"5387:18:124"},{"hexValue":"537472696e67733a20686578206c656e67746820696e73756666696369656e74","kind":"string","nodeType":"YulLiteral","src":"5407:34:124","type":"","value":"Strings: hex length insufficient"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5380:6:124"},"nodeType":"YulFunctionCall","src":"5380:62:124"},"nodeType":"YulExpressionStatement","src":"5380:62:124"},{"nodeType":"YulAssignment","src":"5451:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5463:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5474:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5459:3:124"},"nodeType":"YulFunctionCall","src":"5459:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5451:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5278:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5292:4:124","type":""}],"src":"5127:356:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"AccessControl: can only renounce\")\n        mstore(add(headStart, 96), \" roles for self\")\n        tail := add(headStart, 128)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, \"AccessControl: account \")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 23), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 23), \" is missing role \")\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(_1, 40), length_1)\n        end := add(add(_1, length_1), 40)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function decrement_t_uint256(value) -> ret\n    {\n        if iszero(value) { panic_error_0x11() }\n        ret := add(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n    }\n    function abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Strings: hex length insufficient\")\n        tail := add(headStart, 96)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"11156":[{"length":32,"start":594}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061020b5760003560e01c8063674b5e4d1161012a5780639a2b96f7116100bd578063b5bfddea1161008c578063d547741f11610071578063d547741f1461059e578063f83695cb146105b1578063fa50f297146105c457600080fd5b8063b5bfddea14610550578063b8f6dba71461057757600080fd5b80639a2b96f71461050f5780639ac9d80b14610522578063a217fddf14610535578063a21bce151461053d57600080fd5b80637a9a93f4116100f95780637a9a93f41461044a5780637be53ca11461045d57806391d14854146104b85780639712fdf8146104fc57600080fd5b8063674b5e4d146103d65780636e76fc8f146103e9578063726600ce1461041057806378bb0a431461042357600080fd5b80632500f2b6116101a25780633c5a08e5116101715780633c5a08e5146103625780634f16b425146103755780635577b7a91461039c5780635b9a94e4146103c357600080fd5b80632500f2b614610316578063253cf980146103295780632f2ff15d1461033c57806336568abe1461034f57600080fd5b8063179efb09116101de578063179efb09146102ac5780631e4e0091146102bf57806322650caf146102d2578063248a9ca3146102e557600080fd5b806301ffc9a71461021057806304df017d146102385780630542975c1461024d57806313ee32e014610299575b600080fd5b61022361021e366004611013565b6105d7565b60405190151581526020015b60405180910390f35b61024b61024636600461107e565b610670565b005b6102747f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b6102236102a736600461107e565b61069d565b61024b6102ba36600461107e565b6106ea565b61024b6102cd366004611099565b610714565b61024b6102e036600461107e565b61072f565b6103086102f33660046110bb565b60009081526020819052604090206001015490565b60405190815260200161022f565b61022361032436600461107e565b610759565b61024b61033736600461107e565b6107a6565b61024b61034a3660046110d4565b6107d0565b61024b61035d3660046110d4565b6107f6565b61024b61037036600461107e565b6108ae565b6103087f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e1816781565b6103087f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca481565b61024b6103d136600461107e565b6108d8565b6102236103e436600461107e565b610902565b6103087f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb81565b61022361041e36600461107e565b61094f565b6103087f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c85743381565b61024b61045836600461107e565b61099c565b61022361046b36600461107e565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fd21b659ff028ba5860060da0a2ef0b8b1b13b1f79963511fcee160c2e54d2f22602052604081205460ff1661066a565b6102236104c63660046110d4565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024b61050a36600461107e565b6109c6565b61024b61051d36600461107e565b6109f0565b61024b61053036600461107e565b610a1a565b610308600081565b61024b61054b36600461107e565b610a44565b6103087f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae327881565b6103087f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b81565b61024b6105ac3660046110d4565b610a6a565b61024b6105bf36600461107e565b610a90565b6102236105d236600461107e565b610aba565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061066a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61069a7f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae327882610a6a565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fcba084d2e26105260e9ae84b007967d64af085c681345e4941eeba502738cf44602052604081205460ff1661066a565b61069a7f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb826107d0565b60006107208133610b07565b61072a8383610bd7565b505050565b61069a7f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b826107d0565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fac55d60145c2b1e72232130507b090ddd2cd26daa31eeab1e3e64b89140e668d602052604081205460ff1661066a565b61069a7f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca482610a6a565b6000828152602081905260409020600101546107ec8133610b07565b61072a8383610c22565b73ffffffffffffffffffffffffffffffffffffffff811633146108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6108aa8282610d12565b5050565b61069a7f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e1816782610a6a565b61069a7f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e18167826107d0565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fa2630211c42039a24e17727bf18ec344681c4916090d2a50e04b9b6e50b7fea9602052604081205460ff1661066a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f9e350b38c6d0090a0631963682975411c4e88e66bd66d7f4ffcc296b4c83bf93602052604081205460ff1661066a565b61069a7f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb82610a6a565b61069a7f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae3278826107d0565b61069a7f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433826107d0565b61069a7f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca4826107d0565b61069a7f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433825b600082815260208190526040902060010154610a868133610b07565b61072a8383610d12565b61069a7f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b82610a6a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f2eadd72b6698cc7bfac8abf613f53107771ac2a3e4a3221cda0a8e2b1b91b0b4602052604081205460ff1661066a565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108aa57610b5d8173ffffffffffffffffffffffffffffffffffffffff166014610dc9565b610b68836020610dc9565b604051602001610b79929190611130565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610897916004016111b1565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108aa5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610cb43390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156108aa5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610dd8836002611231565b610de390600261126e565b67ffffffffffffffff811115610dfb57610dfb611286565b6040519080825280601f01601f191660200182016040528015610e25576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610e5c57610e5c6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610ebf57610ebf6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610efb846002611231565b610f0690600161126e565b90505b6001811115610fa3577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610f4757610f476112b5565b1a60f81b828281518110610f5d57610f5d6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610f9c816112e4565b9050610f09565b50831561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610897565b9392505050565b60006020828403121561102557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100c57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461107957600080fd5b919050565b60006020828403121561109057600080fd5b61100c82611055565b600080604083850312156110ac57600080fd5b50508035926020909101359150565b6000602082840312156110cd57600080fd5b5035919050565b600080604083850312156110e757600080fd5b823591506110f760208401611055565b90509250929050565b60005b8381101561111b578181015183820152602001611103565b8381111561112a576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611168816017850160208801611100565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516111a5816028840160208801611100565b01602801949350505050565b60208152600082518060208401526111d0816040850160208701611100565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561126957611269611202565b500290565b6000821982111561128157611281611202565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000816112f3576112f3611202565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220d36d6d2e7df54059c4f97367cdc649fdae9ca664fd0c0f3b09dac9d6b21f8a7564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x674B5E4D GT PUSH2 0x12A JUMPI DUP1 PUSH4 0x9A2B96F7 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xB5BFDDEA GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD547741F GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x59E JUMPI DUP1 PUSH4 0xF83695CB EQ PUSH2 0x5B1 JUMPI DUP1 PUSH4 0xFA50F297 EQ PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB5BFDDEA EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0xB8F6DBA7 EQ PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9A2B96F7 EQ PUSH2 0x50F JUMPI DUP1 PUSH4 0x9AC9D80B EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0xA21BCE15 EQ PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A9A93F4 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0x7A9A93F4 EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x7BE53CA1 EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x9712FDF8 EQ PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x674B5E4D EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x6E76FC8F EQ PUSH2 0x3E9 JUMPI DUP1 PUSH4 0x726600CE EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0x78BB0A43 EQ PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2500F2B6 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x3C5A08E5 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x3C5A08E5 EQ PUSH2 0x362 JUMPI DUP1 PUSH4 0x4F16B425 EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0x5577B7A9 EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x5B9A94E4 EQ PUSH2 0x3C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2500F2B6 EQ PUSH2 0x316 JUMPI DUP1 PUSH4 0x253CF980 EQ PUSH2 0x329 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x179EFB09 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x179EFB09 EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x1E4E0091 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x22650CAF EQ PUSH2 0x2D2 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x4DF017D EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x13EE32E0 EQ PUSH2 0x299 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x223 PUSH2 0x21E CALLDATASIZE PUSH1 0x4 PUSH2 0x1013 JUMP JUMPDEST PUSH2 0x5D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x24B PUSH2 0x246 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x670 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x274 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x22F JUMP JUMPDEST PUSH2 0x223 PUSH2 0x2A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x69D JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2BA CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x6EA JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2CD CALLDATASIZE PUSH1 0x4 PUSH2 0x1099 JUMP JUMPDEST PUSH2 0x714 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x72F JUMP JUMPDEST PUSH2 0x308 PUSH2 0x2F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x10BB JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x22F JUMP JUMPDEST PUSH2 0x223 PUSH2 0x324 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x759 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x337 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x34A CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x35D CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x7F6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x370 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x8AE JUMP JUMPDEST PUSH2 0x308 PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP2 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x3D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x8D8 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x3E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x902 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP2 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x41E CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x94F JUMP JUMPDEST PUSH2 0x308 PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x458 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x99C JUMP JUMPDEST PUSH2 0x223 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xD21B659FF028BA5860060DA0A2EF0B8B1B13B1F79963511FCEE160C2E54D2F22 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x223 PUSH2 0x4C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x50A CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x9C6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x9F0 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA1A JUMP JUMPDEST PUSH2 0x308 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x54B CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA44 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP2 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x5AC CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x24B PUSH2 0x5BF CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA90 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x5D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xABA JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 EQ DUP1 PUSH2 0x66A JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP3 PUSH2 0xA6A JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xCBA084D2E26105260E9AE84B007967D64AF085C681345E4941EEBA502738CF44 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x720 DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xBD7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xAC55D60145C2B1E72232130507B090DDD2CD26DAA31EEAB1E3E64B89140E668D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x7EC DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xC22 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND CALLER EQ PUSH2 0x8A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416363657373436F6E74726F6C3A2063616E206F6E6C792072656E6F756E6365 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20726F6C657320666F722073656C660000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8AA DUP3 DUP3 PUSH2 0xD12 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xA2630211C42039A24E17727BF18EC344681C4916090D2A50E04B9B6E50B7FEA9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x9E350B38C6D0090A0631963682975411C4E88E66BD66D7F4FFCC296B4C83BF93 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP3 JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0xA86 DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xD12 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x2EADD72B6698CC7BFAC8ABF613F53107771AC2A3E4A3221CDA0A8E2B1B91B0B4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8AA JUMPI PUSH2 0xB5D DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x14 PUSH2 0xDC9 JUMP JUMPDEST PUSH2 0xB68 DUP4 PUSH1 0x20 PUSH2 0xDC9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB79 SWAP3 SWAP2 SWAP1 PUSH2 0x1130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH2 0x897 SWAP2 PUSH1 0x4 ADD PUSH2 0x11B1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 DUP4 SWAP2 DUP4 SWAP2 DUP7 SWAP2 PUSH32 0xBD79B86FFE0AB8E8776151514217CD7CACD52C909F66475C3AF44E129F0B00FF SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8AA JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0xCB4 CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP6 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xDD8 DUP4 PUSH1 0x2 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0xDE3 SWAP1 PUSH1 0x2 PUSH2 0x126E JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDFB JUMPI PUSH2 0xDFB PUSH2 0x1286 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE25 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH32 0x3000000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH32 0x7800000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xEBF JUMPI PUSH2 0xEBF PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x0 PUSH2 0xEFB DUP5 PUSH1 0x2 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0xF06 SWAP1 PUSH1 0x1 PUSH2 0x126E JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xFA3 JUMPI PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 DUP6 PUSH1 0xF AND PUSH1 0x10 DUP2 LT PUSH2 0xF47 JUMPI PUSH2 0xF47 PUSH2 0x12B5 JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF5D JUMPI PUSH2 0xF5D PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x4 SWAP5 SWAP1 SWAP5 SHR SWAP4 PUSH2 0xF9C DUP2 PUSH2 0x12E4 JUMP JUMPDEST SWAP1 POP PUSH2 0xF09 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0x100C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537472696E67733A20686578206C656E67746820696E73756666696369656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x897 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1025 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x100C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1079 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1090 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x100C DUP3 PUSH2 0x1055 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x10F7 PUSH1 0x20 DUP5 ADD PUSH2 0x1055 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x111B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1103 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x112A JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x416363657373436F6E74726F6C3A206163636F756E7420000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0x1168 DUP2 PUSH1 0x17 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1100 JUMP JUMPDEST PUSH32 0x206973206D697373696E6720726F6C6520000000000000000000000000000000 PUSH1 0x17 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x11A5 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1100 JUMP JUMPDEST ADD PUSH1 0x28 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x11D0 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1100 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1269 JUMPI PUSH2 0x1269 PUSH2 0x1202 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1281 JUMPI PUSH2 0x1281 PUSH2 0x1202 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x12F3 JUMPI PUSH2 0x12F3 PUSH2 0x1202 JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 PUSH14 0x6D2E7DF54059C4F97367CDC649FD 0xAE SWAP13 0xA6 PUSH5 0xFD0C0F3B09 0xDA 0xC9 0xD6 0xB2 0x1F DUP11 PUSH22 0x64736F6C634300080A00330000000000000000000000 ","sourceMap":"489:3901:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2454:196:2;;;;;;:::i;:::-;;:::i;:::-;;;516:14:124;;509:22;491:41;;479:2;464:18;2454:196:2;;;;;;;;3660:98:81;;;;;;:::i;:::-;;:::i;:::-;;1040:58;;;;;;;;1142:42:124;1130:55;;;1112:74;;1100:2;1085:18;1040:58:81;935:257:124;4248:140:81;;;;;;:::i;:::-;;:::i;2179:109::-;;;;;;:::i;:::-;;:::i;1563:155::-;;;;;;:::i;:::-;;:::i;1752:99::-;;;;;;:::i;:::-;;:::i;3670:115:2:-;;;;;;:::i;:::-;3736:7;3758:12;;;;;;;;;;:22;;;;3670:115;;;;1781:25:124;;;1769:2;1754:18;3670:115:2;1635:177:124;2469:133:81;;;;;;:::i;:::-;;:::i;3210:117::-;;;;;;:::i;:::-;;:::i;4013:151:2:-;;;;;;:::i;:::-;;:::i;4992:204::-;;;;;;:::i;:::-;;:::i;2769:103:81:-;;;;;;:::i;:::-;;:::i;709:74::-;;760:23;709:74;;787:82;;842:27;787:82;;2636:99;;;;;;:::i;:::-;;:::i;2906:123::-;;;;;;:::i;:::-;;:::i;621:84::-;;677:28;621:84;;3792:118;;;;;;:::i;:::-;;:::i;943:92::-;;1003:32;943:92;;2322:113;;;;;;:::i;:::-;;:::i;2022:123::-;;;;;;:::i;:::-;2826:29:2;;;2090:4:81;2826:29:2;;;:12;;:29;:12;:29;;;;;2109:31:81;2729:131:2;;;;;;;:::i;:::-;2807:4;2826:12;;;;;;;;;;;:29;;;;;;;;;;;;;;;;2729:131;3532:94:81;;;;;;:::i;:::-;;:::i;3944:116::-;;;;;;:::i;:::-;;:::i;3063:113::-;;;;;;:::i;:::-;;:::i;1901:49:2:-;;1946:4;1901:49;;4094:120:81;;;;;;:::i;:::-;;:::i;873:66::-;;920:19;873:66;;543:74;;594:23;543:74;;4378:153:2;;;;;;:::i;:::-;;:::i;1885:103:81:-;;;;;;:::i;:::-;;:::i;3361:137::-;;;;;;:::i;:::-;;:::i;2454:196:2:-;2539:4;2558:47;;;2573:32;2558:47;;:87;;-1:-1:-1;874:25:5;859:40;;;;2609:36:2;2551:94;2454:196;-1:-1:-1;;2454:196:2:o;3660:98:81:-;3722:31;920:19;3746:6;3722:10;:31::i;:::-;3660:98;:::o;4248:140::-;2826:29:2;;;4324:4:81;2826:29:2;;;:12;;:29;:12;:29;;;;;4343:40:81;2729:131:2;2179:109:81;2245:38;677:28;2277:5;2245:9;:38::i;1563:155::-;1946:4:2;2353:30;1946:4;678:10:4;2353::2;:30::i;:::-;1683::81::1;1697:4;1703:9;1683:13;:30::i;:::-;1563:155:::0;;;:::o;1752:99::-;1813:33;594:23;1840:5;1813:9;:33::i;2469:133::-;2826:29:2;;;2542:4:81;2826:29:2;;;:12;;:29;:12;:29;;;;;2561:36:81;2729:131:2;3210:117:81;3281:41;842:27;3313:8;3281:10;:41::i;4013:151:2:-;3736:7;3758:12;;;;;;;;;;:22;;;2353:30;2364:4;678:10:4;2353::2;:30::i;:::-;4134:25:::1;4145:4;4151:7;4134:10;:25::i;4992:204::-:0;5083:23;;;678:10:4;5083:23:2;5075:83;;;;;;;2278:2:124;5075:83:2;;;2260:21:124;2317:2;2297:18;;;2290:30;2356:34;2336:18;;;2329:62;2427:17;2407:18;;;2400:45;2462:19;;5075:83:2;;;;;;;;;5165:26;5177:4;5183:7;5165:11;:26::i;:::-;4992:204;;:::o;2769:103:81:-;2833:34;760:23;2861:5;2833:10;:34::i;2636:99::-;2697:33;760:23;2724:5;2697:9;:33::i;2906:123::-;2826:29:2;;;2974:4:81;2826:29:2;;;:12;;:29;:12;:29;;;;;2993:31:81;2729:131:2;3792:118:81;2826:29:2;;;3858:4:81;2826:29:2;;;:12;;:29;:12;:29;;;;;3877:28:81;2729:131:2;2322:113:81;2391:39;677:28;2424:5;2391:10;:39::i;3532:94::-;3591:30;920:19;3614:6;3591:9;:30::i;3944:116::-;4013:42;1003:32;4049:5;4013:9;:42::i;3063:113::-;3131:40;842:27;3162:8;3131:9;:40::i;4094:120::-;4166:43;1003:32;4203:5;4378:153:2;3736:7;3758:12;;;;;;;;;;:22;;;2353:30;2364:4;678:10:4;2353::2;:30::i;:::-;4500:26:::1;4512:4;4518:7;4500:11;:26::i;1885:103:81:-:0;1949:34;594:23;1977:5;1949:10;:34::i;3361:137::-;2826:29:2;;;3436:4:81;2826:29:2;;;:12;;:29;:12;:29;;;;;3455:38:81;2729:131:2;3125:378;2807:4;2826:12;;;;;;;;;;;:29;;;;;;;;;;;;;3196:303;;3336:41;3364:7;3336:41;;3374:2;3336:19;:41::i;:::-;3424:38;3452:4;3459:2;3424:19;:38::i;:::-;3267:207;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;3233:259;;;;;;;;:::i;5944:233::-;6023:25;3758:12;;;;;;;;;;;:22;;;;6075:34;;;;6120:52;;3758:22;;6075:34;;3758:22;;:12;;6120:52;;6023:25;6120:52;6017:160;5944:233;;:::o;6181:202::-;2807:4;2826:12;;;;;;;;;;;:29;;;;;;;;;;;;;6246:133;;6283:6;:12;;;;;;;;;;;:29;;;;;;;;;;:36;;;;6315:4;6283:36;;;6359:12;678:10:4;;587:107;6359:12:2;6332:40;;6350:7;6332:40;;6344:4;6332:40;;;;;;;;;;6181:202;;:::o;6387:203::-;2807:4;2826:12;;;;;;;;;;;:29;;;;;;;;;;;;;6453:133;;;6521:5;6489:12;;;;;;;;;;;:29;;;;;;;;;;;:37;;;;;;6539:40;678:10:4;;6489:12:2;;6539:40;;6521:5;6539:40;6387:203;;:::o;1375:399:15:-;1450:13;1471:19;1503:10;1507:6;1503:1;:10;:::i;:::-;:14;;1516:1;1503:14;:::i;:::-;1493:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1493:25:15;;1471:47;;1524:15;:6;1531:1;1524:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;;1545;:6;1552:1;1545:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;-1:-1:-1;1571:9:15;1583:10;1587:6;1583:1;:10;:::i;:::-;:14;;1596:1;1583:14;:::i;:::-;1571:26;;1566:116;1603:1;1599;:5;1566:116;;;1631:12;1644:5;1652:3;1644:11;1631:25;;;;;;;:::i;:::-;;;;1619:6;1626:1;1619:9;;;;;;;;:::i;:::-;;;;:37;;;;;;;;;;-1:-1:-1;1674:1:15;1664:11;;;;;1606:3;;;:::i;:::-;;;1566:116;;;-1:-1:-1;1695:10:15;;1687:55;;;;;;;5329:2:124;1687:55:15;;;5311:21:124;;;5348:18;;;5341:30;5407:34;5387:18;;;5380:62;5459:18;;1687:55:15;5127:356:124;1687:55:15;1762:6;1375:399;-1:-1:-1;;;1375:399:15:o;14:332:124:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:196;611:20;;671:42;660:54;;650:65;;640:93;;729:1;726;719:12;640:93;543:196;;;:::o;744:186::-;803:6;856:2;844:9;835:7;831:23;827:32;824:52;;;872:1;869;862:12;824:52;895:29;914:9;895:29;:::i;1197:248::-;1265:6;1273;1326:2;1314:9;1305:7;1301:23;1297:32;1294:52;;;1342:1;1339;1332:12;1294:52;-1:-1:-1;;1365:23:124;;;1435:2;1420:18;;;1407:32;;-1:-1:-1;1197:248:124:o;1450:180::-;1509:6;1562:2;1550:9;1541:7;1537:23;1533:32;1530:52;;;1578:1;1575;1568:12;1530:52;-1:-1:-1;1601:23:124;;1450:180;-1:-1:-1;1450:180:124:o;1817:254::-;1885:6;1893;1946:2;1934:9;1925:7;1921:23;1917:32;1914:52;;;1962:1;1959;1952:12;1914:52;1998:9;1985:23;1975:33;;2027:38;2061:2;2050:9;2046:18;2027:38;:::i;:::-;2017:48;;1817:254;;;;;:::o;2492:258::-;2564:1;2574:113;2588:6;2585:1;2582:13;2574:113;;;2664:11;;;2658:18;2645:11;;;2638:39;2610:2;2603:10;2574:113;;;2705:6;2702:1;2699:13;2696:48;;;2740:1;2731:6;2726:3;2722:16;2715:27;2696:48;;2492:258;;;:::o;2755:786::-;3166:25;3161:3;3154:38;3136:3;3221:6;3215:13;3237:62;3292:6;3287:2;3282:3;3278:12;3271:4;3263:6;3259:17;3237:62;:::i;:::-;3363:19;3358:2;3318:16;;;3350:11;;;3343:40;3408:13;;3430:63;3408:13;3479:2;3471:11;;3464:4;3452:17;;3430:63;:::i;:::-;3513:17;3532:2;3509:26;;2755:786;-1:-1:-1;;;;2755:786:124:o;3546:442::-;3695:2;3684:9;3677:21;3658:4;3727:6;3721:13;3770:6;3765:2;3754:9;3750:18;3743:34;3786:66;3845:6;3840:2;3829:9;3825:18;3820:2;3812:6;3808:15;3786:66;:::i;:::-;3904:2;3892:15;3909:66;3888:88;3873:104;;;;3979:2;3869:113;;3546:442;-1:-1:-1;;3546:442:124:o;3993:184::-;4045:77;4042:1;4035:88;4142:4;4139:1;4132:15;4166:4;4163:1;4156:15;4182:228;4222:7;4348:1;4280:66;4276:74;4273:1;4270:81;4265:1;4258:9;4251:17;4247:105;4244:131;;;4355:18;;:::i;:::-;-1:-1:-1;4395:9:124;;4182:228::o;4415:128::-;4455:3;4486:1;4482:6;4479:1;4476:13;4473:39;;;4492:18;;:::i;:::-;-1:-1:-1;4528:9:124;;4415:128::o;4548:184::-;4600:77;4597:1;4590:88;4697:4;4694:1;4687:15;4721:4;4718:1;4711:15;4737:184;4789:77;4786:1;4779:88;4886:4;4883:1;4876:15;4910:4;4907:1;4900:15;4926:196;4965:3;4993:5;4983:39;;5002:18;;:::i;:::-;-1:-1:-1;5049:66:124;5038:78;;4926:196::o"},"gasEstimates":{"creation":{"codeDepositCost":"988600","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","ASSET_LISTING_ADMIN_ROLE()":"307","BRIDGE_ROLE()":"262","DEFAULT_ADMIN_ROLE()":"284","EMERGENCY_ADMIN_ROLE()":"263","FLASH_BORROWER_ROLE()":"284","POOL_ADMIN_ROLE()":"284","RISK_ADMIN_ROLE()":"262","addAssetListingAdmin(address)":"infinite","addBridge(address)":"infinite","addEmergencyAdmin(address)":"infinite","addFlashBorrower(address)":"infinite","addPoolAdmin(address)":"infinite","addRiskAdmin(address)":"infinite","getRoleAdmin(bytes32)":"2559","grantRole(bytes32,address)":"infinite","hasRole(bytes32,address)":"2704","isAssetListingAdmin(address)":"2661","isBridge(address)":"2638","isEmergencyAdmin(address)":"2594","isFlashBorrower(address)":"2658","isPoolAdmin(address)":"2603","isRiskAdmin(address)":"2594","removeAssetListingAdmin(address)":"infinite","removeBridge(address)":"infinite","removeEmergencyAdmin(address)":"infinite","removeFlashBorrower(address)":"infinite","removePoolAdmin(address)":"infinite","removeRiskAdmin(address)":"infinite","renounceRole(bytes32,address)":"29017","revokeRole(bytes32,address)":"infinite","setRoleAdmin(bytes32,bytes32)":"infinite","supportsInterface(bytes4)":"416"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","ASSET_LISTING_ADMIN_ROLE()":"78bb0a43","BRIDGE_ROLE()":"b5bfddea","DEFAULT_ADMIN_ROLE()":"a217fddf","EMERGENCY_ADMIN_ROLE()":"6e76fc8f","FLASH_BORROWER_ROLE()":"5577b7a9","POOL_ADMIN_ROLE()":"b8f6dba7","RISK_ADMIN_ROLE()":"4f16b425","addAssetListingAdmin(address)":"9a2b96f7","addBridge(address)":"9712fdf8","addEmergencyAdmin(address)":"179efb09","addFlashBorrower(address)":"9ac9d80b","addPoolAdmin(address)":"22650caf","addRiskAdmin(address)":"5b9a94e4","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","isAssetListingAdmin(address)":"13ee32e0","isBridge(address)":"726600ce","isEmergencyAdmin(address)":"2500f2b6","isFlashBorrower(address)":"fa50f297","isPoolAdmin(address)":"7be53ca1","isRiskAdmin(address)":"674b5e4d","removeAssetListingAdmin(address)":"a21bce15","removeBridge(address)":"04df017d","removeEmergencyAdmin(address)":"7a9a93f4","removeFlashBorrower(address)":"253cf980","removePoolAdmin(address)":"f83695cb","removeRiskAdmin(address)":"3c5a08e5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","setRoleAdmin(bytes32,bytes32)":"1e4e0091","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_LISTING_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EMERGENCY_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASH_BORROWER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RISK_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addAssetListingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"addBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"addFlashBorrower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addPoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addRiskAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isAssetListingAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"isBridge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isEmergencyAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"isFlashBorrower\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isPoolAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isRiskAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeAssetListingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"removeBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"removeFlashBorrower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removePoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeRiskAdmin\",\"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\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"adminRole\",\"type\":\"bytes32\"}],\"name\":\"setRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"addAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addBridge(address)\":{\"params\":{\"bridge\":\"The address of the new Bridge\"}},\"addEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address of the new FlashBorrower\"}},\"addPoolAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addRiskAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"constructor\":{\"details\":\"ConstructorThe ACL admin should be initialized at the addressesProvider beforehand\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is AssetListingAdmin, false otherwise\"}},\"isBridge(address)\":{\"params\":{\"bridge\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is Bridge, false otherwise\"}},\"isEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is EmergencyAdmin, false otherwise\"}},\"isFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is FlashBorrower, false otherwise\"}},\"isPoolAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is PoolAdmin, false otherwise\"}},\"isRiskAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is RiskAdmin, false otherwise\"}},\"removeAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeBridge(address)\":{\"params\":{\"bridge\":\"The address of the bridge to remove\"}},\"removeEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address of the FlashBorrower to remove\"}},\"removePoolAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeRiskAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"setRoleAdmin(bytes32,bytes32)\":{\"details\":\"By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\",\"params\":{\"adminRole\":\"The admin role\",\"role\":\"The role to be managed by the admin role\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider\"}},\"ASSET_LISTING_ADMIN_ROLE\":{\"return\":\"The id of the AssetListingAdmin role\",\"returns\":{\"_0\":\"The id of the AssetListingAdmin role\"}},\"BRIDGE_ROLE\":{\"return\":\"The id of the Bridge role\",\"returns\":{\"_0\":\"The id of the Bridge role\"}},\"EMERGENCY_ADMIN_ROLE\":{\"return\":\"The id of the EmergencyAdmin role\",\"returns\":{\"_0\":\"The id of the EmergencyAdmin role\"}},\"FLASH_BORROWER_ROLE\":{\"return\":\"The id of the FlashBorrower role\",\"returns\":{\"_0\":\"The id of the FlashBorrower role\"}},\"POOL_ADMIN_ROLE\":{\"return\":\"The id of the PoolAdmin role\",\"returns\":{\"_0\":\"The id of the PoolAdmin role\"}},\"RISK_ADMIN_ROLE\":{\"return\":\"The id of the RiskAdmin role\",\"returns\":{\"_0\":\"The id of the RiskAdmin role\"}}},\"title\":\"ACLManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the contract address of the PoolAddressesProvider\"},\"ASSET_LISTING_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the AssetListingAdmin role\"},\"BRIDGE_ROLE()\":{\"notice\":\"Returns the identifier of the Bridge role\"},\"EMERGENCY_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the EmergencyAdmin role\"},\"FLASH_BORROWER_ROLE()\":{\"notice\":\"Returns the identifier of the FlashBorrower role\"},\"POOL_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the PoolAdmin role\"},\"RISK_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the RiskAdmin role\"},\"addAssetListingAdmin(address)\":{\"notice\":\"Adds a new admin as AssetListingAdmin\"},\"addBridge(address)\":{\"notice\":\"Adds a new address as Bridge\"},\"addEmergencyAdmin(address)\":{\"notice\":\"Adds a new admin as EmergencyAdmin\"},\"addFlashBorrower(address)\":{\"notice\":\"Adds a new address as FlashBorrower\"},\"addPoolAdmin(address)\":{\"notice\":\"Adds a new admin as PoolAdmin\"},\"addRiskAdmin(address)\":{\"notice\":\"Adds a new admin as RiskAdmin\"},\"isAssetListingAdmin(address)\":{\"notice\":\"Returns true if the address is AssetListingAdmin, false otherwise\"},\"isBridge(address)\":{\"notice\":\"Returns true if the address is Bridge, false otherwise\"},\"isEmergencyAdmin(address)\":{\"notice\":\"Returns true if the address is EmergencyAdmin, false otherwise\"},\"isFlashBorrower(address)\":{\"notice\":\"Returns true if the address is FlashBorrower, false otherwise\"},\"isPoolAdmin(address)\":{\"notice\":\"Returns true if the address is PoolAdmin, false otherwise\"},\"isRiskAdmin(address)\":{\"notice\":\"Returns true if the address is RiskAdmin, false otherwise\"},\"removeAssetListingAdmin(address)\":{\"notice\":\"Removes an admin as AssetListingAdmin\"},\"removeBridge(address)\":{\"notice\":\"Removes an address as Bridge\"},\"removeEmergencyAdmin(address)\":{\"notice\":\"Removes an admin as EmergencyAdmin\"},\"removeFlashBorrower(address)\":{\"notice\":\"Removes an address as FlashBorrower\"},\"removePoolAdmin(address)\":{\"notice\":\"Removes an admin as PoolAdmin\"},\"removeRiskAdmin(address)\":{\"notice\":\"Removes an admin as RiskAdmin\"},\"setRoleAdmin(bytes32,bytes32)\":{\"notice\":\"Set the role as admin of a specific role.\"}},\"notice\":\"Access Control List Manager. Main registry of system roles and permissions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/configuration/ACLManager.sol\":\"ACLManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './IAccessControl.sol';\\nimport './Context.sol';\\nimport './Strings.sol';\\nimport './ERC165.sol';\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n *     require(hasRole(MY_ROLE, msg.sender));\\n *     ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n  struct RoleData {\\n    mapping(address => bool) members;\\n    bytes32 adminRole;\\n  }\\n\\n  mapping(bytes32 => RoleData) private _roles;\\n\\n  bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n  /**\\n   * @dev Modifier that checks that an account has a specific role. Reverts\\n   * with a standardized message including the required role.\\n   *\\n   * The format of the revert reason is given by the following regular expression:\\n   *\\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n   *\\n   * _Available since v4.1._\\n   */\\n  modifier onlyRole(bytes32 role) {\\n    _checkRole(role, _msgSender());\\n    _;\\n  }\\n\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n  }\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) public view override returns (bool) {\\n    return _roles[role].members[account];\\n  }\\n\\n  /**\\n   * @dev Revert with a standard message if `account` is missing `role`.\\n   *\\n   * The format of the revert reason is given by the following regular expression:\\n   *\\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n   */\\n  function _checkRole(bytes32 role, address account) internal view {\\n    if (!hasRole(role, account)) {\\n      revert(\\n        string(\\n          abi.encodePacked(\\n            'AccessControl: account ',\\n            Strings.toHexString(uint160(account), 20),\\n            ' is missing role ',\\n            Strings.toHexString(uint256(role), 32)\\n          )\\n        )\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) public view override returns (bytes32) {\\n    return _roles[role].adminRole;\\n  }\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(\\n    bytes32 role,\\n    address account\\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\\n    _grantRole(role, account);\\n  }\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(\\n    bytes32 role,\\n    address account\\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\\n    _revokeRole(role, account);\\n  }\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) public virtual override {\\n    require(account == _msgSender(), 'AccessControl: can only renounce roles for self');\\n\\n    _revokeRole(role, account);\\n  }\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event. Note that unlike {grantRole}, this function doesn't perform any\\n   * checks on the calling account.\\n   *\\n   * [WARNING]\\n   * ====\\n   * This function should only be called from the constructor when setting\\n   * up the initial roles for the system.\\n   *\\n   * Using this function in any other way is effectively circumventing the admin\\n   * system imposed by {AccessControl}.\\n   * ====\\n   */\\n  function _setupRole(bytes32 role, address account) internal virtual {\\n    _grantRole(role, account);\\n  }\\n\\n  /**\\n   * @dev Sets `adminRole` as ``role``'s admin role.\\n   *\\n   * Emits a {RoleAdminChanged} event.\\n   */\\n  function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n    bytes32 previousAdminRole = getRoleAdmin(role);\\n    _roles[role].adminRole = adminRole;\\n    emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n  }\\n\\n  function _grantRole(bytes32 role, address account) private {\\n    if (!hasRole(role, account)) {\\n      _roles[role].members[account] = true;\\n      emit RoleGranted(role, account, _msgSender());\\n    }\\n  }\\n\\n  function _revokeRole(bytes32 role, address account) private {\\n    if (hasRole(role, account)) {\\n      _roles[role].members[account] = false;\\n      emit RoleRevoked(role, account, _msgSender());\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xee6ee05b311d9683fe6402b9c396d3767bb1c7517a8ac7fb270d6c09facefb36\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './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 *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IERC165).interfaceId;\\n  }\\n}\\n\",\"keccak256\":\"0x583726b0d457b859eb327ac9838dd3ee345e1956a47cd0a5cd0c0c3c17277eef\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\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\",\"keccak256\":\"0xbca9de297214bb9c30daefda5ecaedd0af2c3e8e0440403ad543fb33528c5ef8\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n  bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';\\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    // Inspired by OraclizeAPI's implementation - MIT licence\\n    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n    if (value == 0) {\\n      return '0';\\n    }\\n    uint256 temp = value;\\n    uint256 digits;\\n    while (temp != 0) {\\n      digits++;\\n      temp /= 10;\\n    }\\n    bytes memory buffer = new bytes(digits);\\n    while (value != 0) {\\n      digits -= 1;\\n      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n      value /= 10;\\n    }\\n    return string(buffer);\\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    if (value == 0) {\\n      return '0x00';\\n    }\\n    uint256 temp = value;\\n    uint256 length = 0;\\n    while (temp != 0) {\\n      length++;\\n      temp >>= 8;\\n    }\\n    return toHexString(value, length);\\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    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_SYMBOLS[value & 0xf];\\n      value >>= 4;\\n    }\\n    require(value == 0, 'Strings: hex length insufficient');\\n    return string(buffer);\\n  }\\n}\\n\",\"keccak256\":\"0xb2754a420cad582ee384ce1075833bc78411b4e27198019fe762066f7a72946a\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/configuration/ACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {AccessControl} from '../../dependencies/openzeppelin/contracts/AccessControl.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\n\\n/**\\n * @title ACLManager\\n * @author Aave\\n * @notice Access Control List Manager. Main registry of system roles and permissions.\\n */\\ncontract ACLManager is AccessControl, IACLManager {\\n  bytes32 public constant override POOL_ADMIN_ROLE = keccak256('POOL_ADMIN');\\n  bytes32 public constant override EMERGENCY_ADMIN_ROLE = keccak256('EMERGENCY_ADMIN');\\n  bytes32 public constant override RISK_ADMIN_ROLE = keccak256('RISK_ADMIN');\\n  bytes32 public constant override FLASH_BORROWER_ROLE = keccak256('FLASH_BORROWER');\\n  bytes32 public constant override BRIDGE_ROLE = keccak256('BRIDGE');\\n  bytes32 public constant override ASSET_LISTING_ADMIN_ROLE = keccak256('ASSET_LISTING_ADMIN');\\n\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Constructor\\n   * @dev The ACL admin should be initialized at the addressesProvider beforehand\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    address aclAdmin = provider.getACLAdmin();\\n    require(aclAdmin != address(0), Errors.ACL_ADMIN_CANNOT_BE_ZERO);\\n    _setupRole(DEFAULT_ADMIN_ROLE, aclAdmin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function setRoleAdmin(\\n    bytes32 role,\\n    bytes32 adminRole\\n  ) external override onlyRole(DEFAULT_ADMIN_ROLE) {\\n    _setRoleAdmin(role, adminRole);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addPoolAdmin(address admin) external override {\\n    grantRole(POOL_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removePoolAdmin(address admin) external override {\\n    revokeRole(POOL_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isPoolAdmin(address admin) external view override returns (bool) {\\n    return hasRole(POOL_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addEmergencyAdmin(address admin) external override {\\n    grantRole(EMERGENCY_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeEmergencyAdmin(address admin) external override {\\n    revokeRole(EMERGENCY_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isEmergencyAdmin(address admin) external view override returns (bool) {\\n    return hasRole(EMERGENCY_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addRiskAdmin(address admin) external override {\\n    grantRole(RISK_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeRiskAdmin(address admin) external override {\\n    revokeRole(RISK_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isRiskAdmin(address admin) external view override returns (bool) {\\n    return hasRole(RISK_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addFlashBorrower(address borrower) external override {\\n    grantRole(FLASH_BORROWER_ROLE, borrower);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeFlashBorrower(address borrower) external override {\\n    revokeRole(FLASH_BORROWER_ROLE, borrower);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isFlashBorrower(address borrower) external view override returns (bool) {\\n    return hasRole(FLASH_BORROWER_ROLE, borrower);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addBridge(address bridge) external override {\\n    grantRole(BRIDGE_ROLE, bridge);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeBridge(address bridge) external override {\\n    revokeRole(BRIDGE_ROLE, bridge);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isBridge(address bridge) external view override returns (bool) {\\n    return hasRole(BRIDGE_ROLE, bridge);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addAssetListingAdmin(address admin) external override {\\n    grantRole(ASSET_LISTING_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeAssetListingAdmin(address admin) external override {\\n    revokeRole(ASSET_LISTING_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isAssetListingAdmin(address admin) external view override returns (bool) {\\n    return hasRole(ASSET_LISTING_ADMIN_ROLE, admin);\\n  }\\n}\\n\",\"keccak256\":\"0x67e7a1a872a007101947bdab4eb9314613148271f0bc21bcc69aa78cbe1635a3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":143,"contract":"contracts/protocol/configuration/ACLManager.sol:ACLManager","label":"_roles","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_struct(RoleData)138_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(RoleData)138_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)138_storage"},"t_struct(RoleData)138_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":135,"contract":"contracts/protocol/configuration/ACLManager.sol:ACLManager","label":"members","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":137,"contract":"contracts/protocol/configuration/ACLManager.sol:ACLManager","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the contract address of the PoolAddressesProvider"},"ASSET_LISTING_ADMIN_ROLE()":{"notice":"Returns the identifier of the AssetListingAdmin role"},"BRIDGE_ROLE()":{"notice":"Returns the identifier of the Bridge role"},"EMERGENCY_ADMIN_ROLE()":{"notice":"Returns the identifier of the EmergencyAdmin role"},"FLASH_BORROWER_ROLE()":{"notice":"Returns the identifier of the FlashBorrower role"},"POOL_ADMIN_ROLE()":{"notice":"Returns the identifier of the PoolAdmin role"},"RISK_ADMIN_ROLE()":{"notice":"Returns the identifier of the RiskAdmin role"},"addAssetListingAdmin(address)":{"notice":"Adds a new admin as AssetListingAdmin"},"addBridge(address)":{"notice":"Adds a new address as Bridge"},"addEmergencyAdmin(address)":{"notice":"Adds a new admin as EmergencyAdmin"},"addFlashBorrower(address)":{"notice":"Adds a new address as FlashBorrower"},"addPoolAdmin(address)":{"notice":"Adds a new admin as PoolAdmin"},"addRiskAdmin(address)":{"notice":"Adds a new admin as RiskAdmin"},"isAssetListingAdmin(address)":{"notice":"Returns true if the address is AssetListingAdmin, false otherwise"},"isBridge(address)":{"notice":"Returns true if the address is Bridge, false otherwise"},"isEmergencyAdmin(address)":{"notice":"Returns true if the address is EmergencyAdmin, false otherwise"},"isFlashBorrower(address)":{"notice":"Returns true if the address is FlashBorrower, false otherwise"},"isPoolAdmin(address)":{"notice":"Returns true if the address is PoolAdmin, false otherwise"},"isRiskAdmin(address)":{"notice":"Returns true if the address is RiskAdmin, false otherwise"},"removeAssetListingAdmin(address)":{"notice":"Removes an admin as AssetListingAdmin"},"removeBridge(address)":{"notice":"Removes an address as Bridge"},"removeEmergencyAdmin(address)":{"notice":"Removes an admin as EmergencyAdmin"},"removeFlashBorrower(address)":{"notice":"Removes an address as FlashBorrower"},"removePoolAdmin(address)":{"notice":"Removes an admin as PoolAdmin"},"removeRiskAdmin(address)":{"notice":"Removes an admin as RiskAdmin"},"setRoleAdmin(bytes32,bytes32)":{"notice":"Set the role as admin of a specific role."}},"notice":"Access Control List Manager. Main registry of system roles and permissions.","version":1}}},"contracts/protocol/configuration/PoolAddressesProvider.sol":{"PoolAddressesProvider":{"abi":[{"inputs":[{"internalType":"string","name":"marketId","type":"string"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ACLAdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ACLManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"AddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":false,"internalType":"address","name":"oldImplementationAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"AddressSetAsProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oldMarketId","type":"string"},{"indexed":true,"internalType":"string","name":"newMarketId","type":"string"}],"name":"MarketIdSet","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":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolConfiguratorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolDataProviderUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleSentinelUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":true,"internalType":"address","name":"implementationAddress","type":"address"}],"name":"ProxyCreated","type":"event"},{"inputs":[],"name":"getACLAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getACLManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolConfigurator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolDataProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOracleSentinel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"newAclAdmin","type":"address"}],"name":"setACLAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAclManager","type":"address"}],"name":"setACLManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"setAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"setAddressAsProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newMarketId","type":"string"}],"name":"setMarketId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolConfiguratorImpl","type":"address"}],"name":"setPoolConfiguratorImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDataProvider","type":"address"}],"name":"setPoolDataProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolImpl","type":"address"}],"name":"setPoolImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceOracle","type":"address"}],"name":"setPriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceOracleSentinel","type":"address"}],"name":"setPriceOracleSentinel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Acts as factory of proxies and admin of those, so with right to change its implementationsOwned by the Aave Governance","kind":"dev","methods":{"constructor":{"details":"Constructor.","params":{"marketId":"The identifier of the market.","owner":"The owner address of this contract."}},"getACLAdmin()":{"returns":{"_0":"The address of the ACL admin"}},"getACLManager()":{"returns":{"_0":"The address of the ACLManager"}},"getAddress(bytes32)":{"details":"The returned address might be an EOA or a contract, potentially proxiedIt returns ZERO if there is no registered address with the given id","params":{"id":"The id"},"returns":{"_0":"The address of the registered for the specified id"}},"getMarketId()":{"returns":{"_0":"The market id"}},"getPool()":{"returns":{"_0":"The Pool proxy address"}},"getPoolConfigurator()":{"returns":{"_0":"The PoolConfigurator proxy address"}},"getPoolDataProvider()":{"returns":{"_0":"The address of the DataProvider"}},"getPriceOracle()":{"returns":{"_0":"The address of the PriceOracle"}},"getPriceOracleSentinel()":{"returns":{"_0":"The address of the PriceOracleSentinel"}},"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 anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setACLAdmin(address)":{"params":{"newAclAdmin":"The address of the new ACL admin"}},"setACLManager(address)":{"params":{"newAclManager":"The address of the new ACLManager"}},"setAddress(bytes32,address)":{"details":"IMPORTANT Use this function carefully, as it will do a hard replacement","params":{"id":"The id","newAddress":"The address to set"}},"setAddressAsProxy(bytes32,address)":{"details":"IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences","params":{"id":"The id","newImplementationAddress":"The address of the new implementation"}},"setMarketId(string)":{"details":"This can be used to create an onchain registry of PoolAddressesProviders to identify and validate multiple Aave markets.","params":{"newMarketId":"The market id"}},"setPoolConfiguratorImpl(address)":{"params":{"newPoolConfiguratorImpl":"The new PoolConfigurator implementation"}},"setPoolDataProvider(address)":{"params":{"newDataProvider":"The address of the new DataProvider"}},"setPoolImpl(address)":{"params":{"newPoolImpl":"The new Pool implementation"}},"setPriceOracle(address)":{"params":{"newPriceOracle":"The address of the new PriceOracle"}},"setPriceOracleSentinel(address)":{"params":{"newPriceOracleSentinel":"The address of the new PriceOracleSentinel"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"PoolAddressesProvider","version":1},"evm":{"bytecode":{"functionDebugData":{"@_11512":{"entryPoint":null,"id":11512,"parameterSlots":2,"returnSlots":0},"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setMarketId_11997":{"entryPoint":130,"id":11997,"parameterSlots":1,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":397,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":909,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_address_fromMemory":{"entryPoint":938,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1204,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":858,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":1143,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":836,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3004:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:124"},"nodeType":"YulFunctionCall","src":"66:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:124"},"nodeType":"YulFunctionCall","src":"56:31:124"},"nodeType":"YulExpressionStatement","src":"56:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:15:124"},"nodeType":"YulExpressionStatement","src":"96:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:124"},"nodeType":"YulFunctionCall","src":"120:15:124"},"nodeType":"YulExpressionStatement","src":"120:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:124"},{"body":{"nodeType":"YulBlock","src":"199:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"209:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"218:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"213:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"278:63:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"303:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"308:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"299:3:124"},"nodeType":"YulFunctionCall","src":"299:11:124"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"322:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"327:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:124"},"nodeType":"YulFunctionCall","src":"318:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"312:5:124"},"nodeType":"YulFunctionCall","src":"312:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"292:6:124"},"nodeType":"YulFunctionCall","src":"292:39:124"},"nodeType":"YulExpressionStatement","src":"292:39:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"239:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"242:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"236:2:124"},"nodeType":"YulFunctionCall","src":"236:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"250:19:124","statements":[{"nodeType":"YulAssignment","src":"252:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"261:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"264:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"257:3:124"},"nodeType":"YulFunctionCall","src":"257:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"252:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"232:3:124","statements":[]},"src":"228:113:124"},{"body":{"nodeType":"YulBlock","src":"367:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"380:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"385:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"376:3:124"},"nodeType":"YulFunctionCall","src":"376:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"394:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"369:6:124"},"nodeType":"YulFunctionCall","src":"369:27:124"},"nodeType":"YulExpressionStatement","src":"369:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"356:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"359:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"353:2:124"},"nodeType":"YulFunctionCall","src":"353:13:124"},"nodeType":"YulIf","src":"350:48:124"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"177:3:124","type":""},{"name":"dst","nodeType":"YulTypedName","src":"182:3:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"187:6:124","type":""}],"src":"146:258:124"},{"body":{"nodeType":"YulBlock","src":"469:117:124","statements":[{"nodeType":"YulAssignment","src":"479:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"494:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"488:5:124"},"nodeType":"YulFunctionCall","src":"488:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"479:5:124"}]},{"body":{"nodeType":"YulBlock","src":"564:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"573:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"576:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"566:6:124"},"nodeType":"YulFunctionCall","src":"566:12:124"},"nodeType":"YulExpressionStatement","src":"566:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"523:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"534:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"549:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"554:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"545:3:124"},"nodeType":"YulFunctionCall","src":"545:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"558:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"541:3:124"},"nodeType":"YulFunctionCall","src":"541:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"530:3:124"},"nodeType":"YulFunctionCall","src":"530:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"520:2:124"},"nodeType":"YulFunctionCall","src":"520:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"513:6:124"},"nodeType":"YulFunctionCall","src":"513:50:124"},"nodeType":"YulIf","src":"510:70:124"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"448:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"459:5:124","type":""}],"src":"409:177:124"},{"body":{"nodeType":"YulBlock","src":"699:869:124","statements":[{"body":{"nodeType":"YulBlock","src":"745:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"754:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"757:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"747:6:124"},"nodeType":"YulFunctionCall","src":"747:12:124"},"nodeType":"YulExpressionStatement","src":"747:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"720:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"729:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"716:3:124"},"nodeType":"YulFunctionCall","src":"716:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"741:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"712:3:124"},"nodeType":"YulFunctionCall","src":"712:32:124"},"nodeType":"YulIf","src":"709:52:124"},{"nodeType":"YulVariableDeclaration","src":"770:30:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"790:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"784:5:124"},"nodeType":"YulFunctionCall","src":"784:16:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"774:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"809:28:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"827:2:124","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"831:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"823:3:124"},"nodeType":"YulFunctionCall","src":"823:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"835:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"819:3:124"},"nodeType":"YulFunctionCall","src":"819:18:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"813:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"864:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"873:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"876:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"866:6:124"},"nodeType":"YulFunctionCall","src":"866:12:124"},"nodeType":"YulExpressionStatement","src":"866:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"852:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"860:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"849:2:124"},"nodeType":"YulFunctionCall","src":"849:14:124"},"nodeType":"YulIf","src":"846:34:124"},{"nodeType":"YulVariableDeclaration","src":"889:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"903:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"914:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"899:3:124"},"nodeType":"YulFunctionCall","src":"899:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"893:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"969:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"978:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"981:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"971:6:124"},"nodeType":"YulFunctionCall","src":"971:12:124"},"nodeType":"YulExpressionStatement","src":"971:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"948:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"952:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"944:3:124"},"nodeType":"YulFunctionCall","src":"944:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"959:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"940:3:124"},"nodeType":"YulFunctionCall","src":"940:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"933:6:124"},"nodeType":"YulFunctionCall","src":"933:35:124"},"nodeType":"YulIf","src":"930:55:124"},{"nodeType":"YulVariableDeclaration","src":"994:19:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1010:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1004:5:124"},"nodeType":"YulFunctionCall","src":"1004:9:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"998:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1036:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1038:16:124"},"nodeType":"YulFunctionCall","src":"1038:18:124"},"nodeType":"YulExpressionStatement","src":"1038:18:124"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1028:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1032:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1025:2:124"},"nodeType":"YulFunctionCall","src":"1025:10:124"},"nodeType":"YulIf","src":"1022:36:124"},{"nodeType":"YulVariableDeclaration","src":"1067:17:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1081:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1077:3:124"},"nodeType":"YulFunctionCall","src":"1077:7:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1071:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1093:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1113:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1107:5:124"},"nodeType":"YulFunctionCall","src":"1107:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1097:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1125:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1147:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1171:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1175:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1167:3:124"},"nodeType":"YulFunctionCall","src":"1167:13:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1182:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1163:3:124"},"nodeType":"YulFunctionCall","src":"1163:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"1187:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1159:3:124"},"nodeType":"YulFunctionCall","src":"1159:31:124"},{"name":"_4","nodeType":"YulIdentifier","src":"1192:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1155:3:124"},"nodeType":"YulFunctionCall","src":"1155:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1143:3:124"},"nodeType":"YulFunctionCall","src":"1143:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1129:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1255:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1257:16:124"},"nodeType":"YulFunctionCall","src":"1257:18:124"},"nodeType":"YulExpressionStatement","src":"1257:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1214:10:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1226:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1211:2:124"},"nodeType":"YulFunctionCall","src":"1211:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1234:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1246:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1231:2:124"},"nodeType":"YulFunctionCall","src":"1231:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1208:2:124"},"nodeType":"YulFunctionCall","src":"1208:46:124"},"nodeType":"YulIf","src":"1205:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1293:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1297:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1286:6:124"},"nodeType":"YulFunctionCall","src":"1286:22:124"},"nodeType":"YulExpressionStatement","src":"1286:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1324:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1332:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1317:6:124"},"nodeType":"YulFunctionCall","src":"1317:18:124"},"nodeType":"YulExpressionStatement","src":"1317:18:124"},{"body":{"nodeType":"YulBlock","src":"1383:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1392:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1395:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1385:6:124"},"nodeType":"YulFunctionCall","src":"1385:12:124"},"nodeType":"YulExpressionStatement","src":"1385:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1358:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1362:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1354:3:124"},"nodeType":"YulFunctionCall","src":"1354:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"1367:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1350:3:124"},"nodeType":"YulFunctionCall","src":"1350:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1374:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1347:2:124"},"nodeType":"YulFunctionCall","src":"1347:35:124"},"nodeType":"YulIf","src":"1344:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1434:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1438:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1430:3:124"},"nodeType":"YulFunctionCall","src":"1430:13:124"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1449:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1457:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1445:3:124"},"nodeType":"YulFunctionCall","src":"1445:17:124"},{"name":"_3","nodeType":"YulIdentifier","src":"1464:2:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"1408:21:124"},"nodeType":"YulFunctionCall","src":"1408:59:124"},"nodeType":"YulExpressionStatement","src":"1408:59:124"},{"nodeType":"YulAssignment","src":"1476:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1486:6:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1476:6:124"}]},{"nodeType":"YulAssignment","src":"1501:61:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1545:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1556:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1541:3:124"},"nodeType":"YulFunctionCall","src":"1541:20:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1511:29:124"},"nodeType":"YulFunctionCall","src":"1511:51:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1501:6:124"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"657:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"668:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"680:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"688:6:124","type":""}],"src":"591:977:124"},{"body":{"nodeType":"YulBlock","src":"1628:325:124","statements":[{"nodeType":"YulAssignment","src":"1638:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1652:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1655:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1648:3:124"},"nodeType":"YulFunctionCall","src":"1648:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1638:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1669:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1699:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"1705:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1695:3:124"},"nodeType":"YulFunctionCall","src":"1695:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"1673:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1746:31:124","statements":[{"nodeType":"YulAssignment","src":"1748:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1762:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1770:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1758:3:124"},"nodeType":"YulFunctionCall","src":"1758:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1748:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1726:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1719:6:124"},"nodeType":"YulFunctionCall","src":"1719:26:124"},"nodeType":"YulIf","src":"1716:61:124"},{"body":{"nodeType":"YulBlock","src":"1836:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1857:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1864:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1869:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1860:3:124"},"nodeType":"YulFunctionCall","src":"1860:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1850:6:124"},"nodeType":"YulFunctionCall","src":"1850:31:124"},"nodeType":"YulExpressionStatement","src":"1850:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1901:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1904:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1894:6:124"},"nodeType":"YulFunctionCall","src":"1894:15:124"},"nodeType":"YulExpressionStatement","src":"1894:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1929:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1932:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1922:6:124"},"nodeType":"YulFunctionCall","src":"1922:15:124"},"nodeType":"YulExpressionStatement","src":"1922:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1792:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1815:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1823:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1812:2:124"},"nodeType":"YulFunctionCall","src":"1812:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1789:2:124"},"nodeType":"YulFunctionCall","src":"1789:38:124"},"nodeType":"YulIf","src":"1786:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1608:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1617:6:124","type":""}],"src":"1573:380:124"},{"body":{"nodeType":"YulBlock","src":"2097:137:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2107:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2127:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2121:5:124"},"nodeType":"YulFunctionCall","src":"2121:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2111:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2169:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2177:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2165:3:124"},"nodeType":"YulFunctionCall","src":"2165:17:124"},{"name":"pos","nodeType":"YulIdentifier","src":"2184:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2189:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"2143:21:124"},"nodeType":"YulFunctionCall","src":"2143:53:124"},"nodeType":"YulExpressionStatement","src":"2143:53:124"},{"nodeType":"YulAssignment","src":"2205:23:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2216:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"2221:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2212:3:124"},"nodeType":"YulFunctionCall","src":"2212:16:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2205:3:124"}]}]},"name":"abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2073:3:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2078:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2089:3:124","type":""}],"src":"1958:276:124"},{"body":{"nodeType":"YulBlock","src":"2413:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2430:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2441:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2423:6:124"},"nodeType":"YulFunctionCall","src":"2423:21:124"},"nodeType":"YulExpressionStatement","src":"2423:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2464:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2475:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2460:3:124"},"nodeType":"YulFunctionCall","src":"2460:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2480:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2453:6:124"},"nodeType":"YulFunctionCall","src":"2453:30:124"},"nodeType":"YulExpressionStatement","src":"2453:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2503:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2514:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2499:3:124"},"nodeType":"YulFunctionCall","src":"2499:18:124"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"2519:34:124","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2492:6:124"},"nodeType":"YulFunctionCall","src":"2492:62:124"},"nodeType":"YulExpressionStatement","src":"2492:62:124"},{"nodeType":"YulAssignment","src":"2563:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2575:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2586:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2571:3:124"},"nodeType":"YulFunctionCall","src":"2571:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2563:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2390:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2404:4:124","type":""}],"src":"2239:356:124"},{"body":{"nodeType":"YulBlock","src":"2774:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2791:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2802:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2784:6:124"},"nodeType":"YulFunctionCall","src":"2784:21:124"},"nodeType":"YulExpressionStatement","src":"2784:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2825:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2836:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2821:3:124"},"nodeType":"YulFunctionCall","src":"2821:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2841:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2814:6:124"},"nodeType":"YulFunctionCall","src":"2814:30:124"},"nodeType":"YulExpressionStatement","src":"2814:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2864:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2875:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2860:3:124"},"nodeType":"YulFunctionCall","src":"2860:18:124"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2880:34:124","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2853:6:124"},"nodeType":"YulFunctionCall","src":"2853:62:124"},"nodeType":"YulExpressionStatement","src":"2853:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2935:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2946:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2931:3:124"},"nodeType":"YulFunctionCall","src":"2931:18:124"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2951:8:124","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2924:6:124"},"nodeType":"YulFunctionCall","src":"2924:36:124"},"nodeType":"YulExpressionStatement","src":"2924:36:124"},{"nodeType":"YulAssignment","src":"2969:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2981:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2992:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2977:3:124"},"nodeType":"YulFunctionCall","src":"2977:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2969:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2751:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2765:4:124","type":""}],"src":"2600:402:124"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 0x20), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 0x20), add(memPtr, 0x20), _3)\n        value0 := memPtr\n        value1 := abi_decode_address_fromMemory(add(headStart, 0x20))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162002b3538038062002b358339810160408190526200003491620003aa565b600080546001600160a01b0319163390811782556040519091829160008051602062002b15833981519152908290a3506200006f8262000082565b6200007a816200018d565b5050620004d2565b600060018054620000939062000477565b80601f0160208091040260200160405190810160405280929190818152602001828054620000c19062000477565b8015620001125780601f10620000e65761010080835404028352916020019162000112565b820191906000526020600020905b815481529060010190602001808311620000f457829003601f168201915b5050855193945062000130936001935060208701925090506200029e565b5081604051620001419190620004b4565b604051809103902081604051620001599190620004b4565b604051908190038120907fe685c8cdecc6030c45030fd54778812cb84ed8e4467c38294403d68ba786082390600090a35050565b6000546001600160a01b03163314620001ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620002545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001e4565b600080546040516001600160a01b038085169392169160008051602062002b1583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054620002ac9062000477565b90600052602060002090601f016020900481019282620002d057600085556200031b565b82601f10620002eb57805160ff19168380011785556200031b565b828001600101855582156200031b579182015b828111156200031b578251825591602001919060010190620002fe565b50620003299291506200032d565b5090565b5b808211156200032957600081556001016200032e565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003775781810151838201526020016200035d565b8381111562000387576000848401525b50505050565b80516001600160a01b0381168114620003a557600080fd5b919050565b60008060408385031215620003be57600080fd5b82516001600160401b0380821115620003d657600080fd5b818501915085601f830112620003eb57600080fd5b81518181111562000400576200040062000344565b604051601f8201601f19908116603f011681019083821181831017156200042b576200042b62000344565b816040528281528860208487010111156200044557600080fd5b620004588360208301602088016200035a565b80965050505050506200046e602084016200038d565b90509250929050565b600181811c908216806200048c57607f821691505b60208210811415620004ae57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251620004c88184602087016200035a565b9190910192915050565b61263380620004e26000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806376d84ffc116100d8578063e4ca28b71161008c578063f2fde38b11610066578063f2fde38b1461052f578063f67b184714610542578063fca513a81461055557600080fd5b8063e4ca28b7146104a3578063e860accb146104b6578063ed301ca91461051c57600080fd5b8063a1564406116100bd578063a15644061461046a578063ca446dd91461047d578063e44e9ed11461049057600080fd5b806376d84ffc146104395780638da5cb5b1461044c57600080fd5b80635dcc528c1161013a578063707cd71611610114578063707cd716146103b8578063715018a61461041e57806374944cec1461042657600080fd5b80635dcc528c146102d95780635eb88d3d146102ec578063631adfca1461035257600080fd5b806321f8a7211161016b57806321f8a72114610279578063530e784f146102af578063568ef470146102c457600080fd5b8063026b1d5f146101875780630e67178c14610213575b600080fd5b7f504f4f4c0000000000000000000000000000000000000000000000000000000060005260026020527f4fe005067814bb4b024d9515847377d15011b64593c006223b4a722952d2c05a5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f41434c5f41444d494e000000000000000000000000000000000000000000000060005260026020527ffab167ad2009dcb80ee379700bb4bd029d97c1181ed9d961625632c8a6f051c65473ffffffffffffffffffffffffffffffffffffffff166101e9565b6101e9610287366004611962565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6102c26102bd36600461199d565b6105bb565b005b6102cc6106ff565b60405161020a9190611a3b565b6102c26102e7366004611a4e565b610791565b7f50524943455f4f5241434c455f53454e54494e454c000000000000000000000060005260026020527f0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab85473ffffffffffffffffffffffffffffffffffffffff166101e9565b7f504f4f4c5f434f4e464947555241544f5200000000000000000000000000000060005260026020527f90c127ef1c12c03f5781afeca3079527ea5333738078bba6fea26825bf9bf2c55473ffffffffffffffffffffffffffffffffffffffff166101e9565b7f41434c5f4d414e4147455200000000000000000000000000000000000000000060005260026020527f9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c26108a7565b6102c261043436600461199d565b610997565b6102c261044736600461199d565b610ad6565b60005473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c261047836600461199d565b610c15565b6102c261048b366004611a4e565b610d4b565b6102c261049e36600461199d565b610e4f565b6102c26104b136600461199d565b610f8e565b7f444154415f50524f56494445520000000000000000000000000000000000000060005260026020527fcd7944601aaa5cd7ccdae1bebec659e98c6aac8f12486b30e59db0d39698051f5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c261052a36600461199d565b6110c4565b6102c261053d36600461199d565b611203565b6102c2610550366004611aad565b6113b4565b7f50524943455f4f5241434c45000000000000000000000000000000000000000060005260026020527f740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd635473ffffffffffffffffffffffffffffffffffffffff166101e9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b7f50524943455f4f5241434c450000000000000000000000000000000000000000600090815260026020527f740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd63805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917f56b5f80d8cac1479698aa7d01605fd6111e90b15fc4d2b377417f46034876cbd9190a35050565b60606001805461070e90611b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461073a90611b7c565b80156107875780601f1061075c57610100808354040283529160200191610787565b820191906000526020600020905b81548152906001019060200180831161076a57829003601f168201915b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff169061084184611441565b905061084d84846114f8565b60405173ffffffffffffffffffffffffffffffffffffffff8281168252808516919084169086907f3bbd45b5429b385e3fb37ad5cd1cd1435a3c8ec32196c7937597365a3fd3e99c9060200160405180910390a450505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f50524943455f4f5241434c455f53454e54494e454c0000000000000000000000600090815260026020527f0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab8805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917f5326514eeca90494a14bedabcff812a0e683029ee85d1e23824d44fd14cd6ae79190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f41434c5f41444d494e0000000000000000000000000000000000000000000000600090815260026020527ffab167ad2009dcb80ee379700bb4bd029d97c1181ed9d961625632c8a6f051c6805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fe9cf53972264dc95304fd424458745019ddfca0e37ae8f703d74772c41ad115b9190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000610cc17f504f4f4c00000000000000000000000000000000000000000000000000000000611441565b9050610ced7f504f4f4c00000000000000000000000000000000000000000000000000000000836114f8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90affc163f1a2dfedcd36aa02ed992eeeba8100a4014f0b4cdc20ea265a6662760405160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b60008281526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8681169182179093559251911692839186917f9ef0e8c8e52743bb38b83b17d9429141d494b8041ca6d616a6c77cebae9cd8b791a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f444154415f50524f564944455200000000000000000000000000000000000000600090815260026020527fcd7944601aaa5cd7ccdae1bebec659e98c6aac8f12486b30e59db0d39698051f805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fc853974cfbf81487a14a23565917bee63f527853bcb5fa54f2ae1cdf8a38356d9190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b600061103a7f504f4f4c5f434f4e464947555241544f52000000000000000000000000000000611441565b90506110667f504f4f4c5f434f4e464947555241544f52000000000000000000000000000000836114f8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8932892569eba59c8382a089d9b732d1f49272878775235761a2a6b0309cd46560405160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f41434c5f4d414e41474552000000000000000000000000000000000000000000600090815260026020527f9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fb30efa04327bb8a537d61cc1e5c48095345ad18ef7cc04e6bacf7dfb6caaf5079190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b73ffffffffffffffffffffffffffffffffffffffff8116611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610638565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b61143e816117bf565b50565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806114745750600092915050565b60008190508073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190611bca565b949350505050565b50919050565b60008281526002602052604080822054905130602482015273ffffffffffffffffffffffffffffffffffffffff90911691908190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052905073ffffffffffffffffffffffffffffffffffffffff831661172e57306040516115cf906118bc565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015611608573d6000803e3d6000fd5b506000868152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915590517fd1f578940000000000000000000000000000000000000000000000000000000081529194508493509063d1f578949061169c9087908590600401611be7565b600060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16867f4a465a9bd819d9662563c1e11ae958f8109e437e7f4bf1c6ef0b9a7b3f35d47860405160405180910390a46117b8565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815283925073ffffffffffffffffffffffffffffffffffffffff831690634f1ef286906117859087908590600401611be7565b600060405180830381600087803b15801561179f57600080fd5b505af11580156117b3573d6000803e3d6000fd5b505050505b5050505050565b6000600180546117ce90611b7c565b80601f01602080910402602001604051908101604052809291908181526020018280546117fa90611b7c565b80156118475780601f1061181c57610100808354040283529160200191611847565b820191906000526020600020905b81548152906001019060200180831161182a57829003601f168201915b50508551939450611863936001935060208701925090506118c9565b50816040516118729190611c16565b6040518091039020816040516118889190611c16565b604051908190038120907fe685c8cdecc6030c45030fd54778812cb84ed8e4467c38294403d68ba786082390600090a35050565b6109cb80611c3383390190565b8280546118d590611b7c565b90600052602060002090601f0160209004810192826118f7576000855561193d565b82601f1061191057805160ff191683800117855561193d565b8280016001018555821561193d579182015b8281111561193d578251825591602001919060010190611922565b5061194992915061194d565b5090565b5b80821115611949576000815560010161194e565b60006020828403121561197457600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461143e57600080fd5b6000602082840312156119af57600080fd5b81356119ba8161197b565b9392505050565b60005b838110156119dc5781810151838201526020016119c4565b838111156119eb576000848401525b50505050565b60008151808452611a098160208601602086016119c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119ba60208301846119f1565b60008060408385031215611a6157600080fd5b823591506020830135611a738161197b565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611abf57600080fd5b813567ffffffffffffffff80821115611ad757600080fd5b818401915084601f830112611aeb57600080fd5b813581811115611afd57611afd611a7e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b4357611b43611a7e565b81604052828152876020848701011115611b5c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680611b9057607f821691505b602082108114156114f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215611bdc57600080fd5b81516119ba8161197b565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006114ea60408301846119f1565b60008251611c288184602087016119c1565b919091019291505056fe60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220899ba9574e8c52c72539176723d8c74a8618334587150196e2029371e7486a8464736f6c634300080a0033a2646970667358221220e62d78f287b0c390f4963ebdc446c3b33cd341f5cc839e23b26c90067a0b899564736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2B35 CODESIZE SUB DUP1 PUSH3 0x2B35 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x3AA JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2B15 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH3 0x6F DUP3 PUSH3 0x82 JUMP JUMPDEST PUSH3 0x7A DUP2 PUSH3 0x18D JUMP JUMPDEST POP POP PUSH3 0x4D2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 SLOAD PUSH3 0x93 SWAP1 PUSH3 0x477 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH3 0xC1 SWAP1 PUSH3 0x477 JUMP JUMPDEST DUP1 ISZERO PUSH3 0x112 JUMPI DUP1 PUSH1 0x1F LT PUSH3 0xE6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH3 0x112 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH3 0xF4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 MLOAD SWAP4 SWAP5 POP PUSH3 0x130 SWAP4 PUSH1 0x1 SWAP4 POP PUSH1 0x20 DUP8 ADD SWAP3 POP SWAP1 POP PUSH3 0x29E JUMP JUMPDEST POP DUP2 PUSH1 0x40 MLOAD PUSH3 0x141 SWAP2 SWAP1 PUSH3 0x4B4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 PUSH1 0x40 MLOAD PUSH3 0x159 SWAP2 SWAP1 PUSH3 0x4B4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0xE685C8CDECC6030C45030FD54778812CB84ED8E4467C38294403D68BA7860823 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x1ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x254 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x1E4 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2B15 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x2AC SWAP1 PUSH3 0x477 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x2D0 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x31B JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x2EB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x31B JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x31B JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x31B JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x2FE JUMP JUMPDEST POP PUSH3 0x329 SWAP3 SWAP2 POP PUSH3 0x32D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x329 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x32E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x377 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x35D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x387 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x3BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x3D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x3EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x400 JUMPI PUSH3 0x400 PUSH3 0x344 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x42B JUMPI PUSH3 0x42B PUSH3 0x344 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x445 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x458 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x35A JUMP JUMPDEST DUP1 SWAP7 POP POP POP POP POP POP PUSH3 0x46E PUSH1 0x20 DUP5 ADD PUSH3 0x38D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x48C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x4AE JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x4C8 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x35A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2633 DUP1 PUSH3 0x4E2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x182 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x76D84FFC GT PUSH2 0xD8 JUMPI DUP1 PUSH4 0xE4CA28B7 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xF2FDE38B GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x52F JUMPI DUP1 PUSH4 0xF67B1847 EQ PUSH2 0x542 JUMPI DUP1 PUSH4 0xFCA513A8 EQ PUSH2 0x555 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE4CA28B7 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xE860ACCB EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xED301CA9 EQ PUSH2 0x51C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA1564406 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xA1564406 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0xCA446DD9 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0xE44E9ED1 EQ PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x76D84FFC EQ PUSH2 0x439 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5DCC528C GT PUSH2 0x13A JUMPI DUP1 PUSH4 0x707CD716 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0x707CD716 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x41E JUMPI DUP1 PUSH4 0x74944CEC EQ PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5DCC528C EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x5EB88D3D EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x631ADFCA EQ PUSH2 0x352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x21F8A721 GT PUSH2 0x16B JUMPI DUP1 PUSH4 0x21F8A721 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x2AF JUMPI DUP1 PUSH4 0x568EF470 EQ PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x26B1D5F EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0xE67178C EQ PUSH2 0x213 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x4FE005067814BB4B024D9515847377D15011B64593C006223B4A722952D2C05A SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x41434C5F41444D494E0000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xFAB167AD2009DCB80EE379700BB4BD029D97C1181ED9D961625632C8A6F051C6 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x1E9 PUSH2 0x287 CALLDATASIZE PUSH1 0x4 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2BD CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x5BB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2CC PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x20A SWAP2 SWAP1 PUSH2 0x1A3B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0x791 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C455F53454E54494E454C0000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xD2C1BCEE56447B4F46248272F34207A580A5C40F666A31F4E2FBB470EA53AB8 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x90C127EF1C12C03F5781AFECA3079527EA5333738078BBA6FEA26825BF9BF2C5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH32 0x41434C5F4D414E41474552000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x9EDEF266EF35FD0C6E131DF0F31A330F3DD4C4D19DD31ED615C21D005C68116B SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x8A7 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x434 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x997 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x447 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xAD6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x478 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xC15 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x48B CALLDATASIZE PUSH1 0x4 PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0xD4B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xE4F JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xF8E JUMP JUMPDEST PUSH32 0x444154415F50524F564944455200000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xCD7944601AAA5CD7CCDAE1BEBEC659E98C6AAC8F12486B30E59DB0D39698051F SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x52A CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x53D CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x1203 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x550 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AAD JUMP JUMPDEST PUSH2 0x13B4 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C450000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x740F710666BD7A12AF42DF98311E541E47F7FD33D382D11602457A6D540CBD63 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x50524943455F4F5241434C450000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x740F710666BD7A12AF42DF98311E541E47F7FD33D382D11602457A6D540CBD63 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0x56B5F80D8CAC1479698AA7D01605FD6111E90B15FC4D2B377417F46034876CBD SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x70E SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x73A SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x787 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x75C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x787 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x76A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x812 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x841 DUP5 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0x84D DUP5 DUP5 PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND DUP3 MSTORE DUP1 DUP6 AND SWAP2 SWAP1 DUP5 AND SWAP1 DUP7 SWAP1 PUSH32 0x3BBD45B5429B385E3FB37AD5CD1CD1435A3C8EC32196C7937597365A3FD3E99C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x928 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C455F53454E54494E454C0000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xD2C1BCEE56447B4F46248272F34207A580A5C40F666A31F4E2FBB470EA53AB8 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0x5326514EECA90494A14BEDABCFF812A0E683029EE85D1E23824D44FD14CD6AE7 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x41434C5F41444D494E0000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xFAB167AD2009DCB80EE379700BB4BD029D97C1181ED9D961625632C8A6F051C6 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xE9CF53972264DC95304FD424458745019DDFCA0E37AE8F703D74772C41AD115B SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC96 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0xCED PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 DUP4 PUSH2 0x14F8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x90AFFC163F1A2DFEDCD36AA02ED992EEEBA8100A4014F0B4CDC20EA265A66627 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xDCC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE SWAP3 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 DUP7 SWAP2 PUSH32 0x9EF0E8C8E52743BB38B83B17D9429141D494B8041CA6D616A6C77CEBAE9CD8B7 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xED0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x444154415F50524F564944455200000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xCD7944601AAA5CD7CCDAE1BEBEC659E98C6AAC8F12486B30E59DB0D39698051F DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xC853974CFBF81487A14A23565917BEE63F527853BCB5FA54F2AE1CDF8A38356D SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x100F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x103A PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0x1066 PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 DUP4 PUSH2 0x14F8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8932892569EBA59C8382A089D9B732D1F49272878775235761A2A6B0309CD465 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1145 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x41434C5F4D414E41474552000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x9EDEF266EF35FD0C6E131DF0F31A330F3DD4C4D19DD31ED615C21D005C68116B DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xB30EFA04327BB8A537D61CC1E5C48095345AD18EF7CC04E6BACF7DFB6CAAF507 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1284 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1327 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1435 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH2 0x143E DUP2 PUSH2 0x17BF JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x1474 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x14C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14EA SWAP2 SWAP1 PUSH2 0x1BCA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x172E JUMPI ADDRESS PUSH1 0x40 MLOAD PUSH2 0x15CF SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x1608 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD PUSH32 0xD1F5789400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP5 POP DUP5 SWAP4 POP SWAP1 PUSH4 0xD1F57894 SWAP1 PUSH2 0x169C SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH32 0x4A465A9BD819D9662563C1E11AE958F8109E437E7F4BF1C6EF0B9A7B3F35D478 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH2 0x17B8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 PUSH2 0x1785 SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x179F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17B3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 SLOAD PUSH2 0x17CE SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x17FA SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1847 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x181C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1847 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x182A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 MLOAD SWAP4 SWAP5 POP PUSH2 0x1863 SWAP4 PUSH1 0x1 SWAP4 POP PUSH1 0x20 DUP8 ADD SWAP3 POP SWAP1 POP PUSH2 0x18C9 JUMP JUMPDEST POP DUP2 PUSH1 0x40 MLOAD PUSH2 0x1872 SWAP2 SWAP1 PUSH2 0x1C16 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 PUSH1 0x40 MLOAD PUSH2 0x1888 SWAP2 SWAP1 PUSH2 0x1C16 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0xE685C8CDECC6030C45030FD54778812CB84ED8E4467C38294403D68BA7860823 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x9CB DUP1 PUSH2 0x1C33 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x18D5 SWAP1 PUSH2 0x1B7C JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x18F7 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x193D JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1910 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x193D JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x193D JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x193D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1922 JUMP JUMPDEST POP PUSH2 0x1949 SWAP3 SWAP2 POP PUSH2 0x194D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1949 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x194E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1974 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x143E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x19BA DUP2 PUSH2 0x197B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x19DC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x19C4 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x19EB JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A09 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x19BA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x19F1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1A73 DUP2 PUSH2 0x197B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1ABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1AD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1AFD JUMPI PUSH2 0x1AFD PUSH2 0x1A7E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1B43 JUMPI PUSH2 0x1B43 PUSH2 0x1A7E JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1B5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP3 DUP2 ADD PUSH1 0x20 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x1B90 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x14F2 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x19BA DUP2 PUSH2 0x197B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x14EA PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x19F1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C28 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x19C1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 SWAP12 0xA9 JUMPI 0x4E DUP13 MSTORE 0xC7 0x25 CODECOPY OR PUSH8 0x23D8C74A86183345 DUP8 ISZERO ADD SWAP7 0xE2 MUL SWAP4 PUSH18 0xE7486A8464736F6C634300080A0033A26469 PUSH17 0x667358221220E62D78F287B0C390F4963E 0xBD 0xC4 CHAINID 0xC3 0xB3 EXTCODECOPY 0xD3 COINBASE CREATE2 0xCC DUP4 SWAP15 0x23 0xB2 PUSH13 0x90067A0B899564736F6C634300 ADDMOD EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"672:7625:82:-:0;;;1499:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;1556:22:82;1569:8;1556:12;:22::i;:::-;1584:24;1602:5;1584:17;:24::i;:::-;1499:114;;672:7625;;7357:183;7421:25;7449:9;7421:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7464:23:82;;7421:37;;-1:-1:-1;7464:23:82;;:9;;-1:-1:-1;7464:23:82;;;;-1:-1:-1;7464:23:82;-1:-1:-1;7464:23:82;:::i;:::-;;7523:11;7498:37;;;;;;:::i;:::-;;;;;;;;7510:11;7498:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;7415:125;7357:183;:::o;1875:226:11:-;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;2441:2:124;1196:67:11;;;2423:21:124;;;2460:18;;;2453:30;2519:34;2499:18;;;2492:62;2571:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;2802:2:124;1951:73:11::1;::::0;::::1;2784:21:124::0;2841:2;2821:18;;;2814:30;2880:34;2860:18;;;2853:62;-1:-1:-1;;;2931:18:124;;;2924:36;2977:19;;1951:73:11::1;2600:402:124::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;672:7625:82:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;672:7625:82;;;-1:-1:-1;672:7625:82;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:124;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:258;218:1;228:113;242:6;239:1;236:13;228:113;;;318:11;;;312:18;299:11;;;292:39;264:2;257:10;228:113;;;359:6;356:1;353:13;350:48;;;394:1;385:6;380:3;376:16;369:27;350:48;;146:258;;;:::o;409:177::-;488:13;;-1:-1:-1;;;;;530:31:124;;520:42;;510:70;;576:1;573;566:12;510:70;409:177;;;:::o;591:977::-;680:6;688;741:2;729:9;720:7;716:23;712:32;709:52;;;757:1;754;747:12;709:52;784:16;;-1:-1:-1;;;;;849:14:124;;;846:34;;;876:1;873;866:12;846:34;914:6;903:9;899:22;889:32;;959:7;952:4;948:2;944:13;940:27;930:55;;981:1;978;971:12;930:55;1010:2;1004:9;1032:2;1028;1025:10;1022:36;;;1038:18;;:::i;:::-;1113:2;1107:9;1081:2;1167:13;;-1:-1:-1;;1163:22:124;;;1187:2;1159:31;1155:40;1143:53;;;1211:18;;;1231:22;;;1208:46;1205:72;;;1257:18;;:::i;:::-;1297:10;1293:2;1286:22;1332:2;1324:6;1317:18;1374:7;1367:4;1362:2;1358;1354:11;1350:22;1347:35;1344:55;;;1395:1;1392;1385:12;1344:55;1408:59;1464:2;1457:4;1449:6;1445:17;1438:4;1434:2;1430:13;1408:59;:::i;:::-;1486:6;1476:16;;;;;;;1511:51;1556:4;1545:9;1541:20;1511:51;:::i;:::-;1501:61;;591:977;;;;;:::o;1573:380::-;1652:1;1648:12;;;;1695;;;1716:61;;1770:4;1762:6;1758:17;1748:27;;1716:61;1823:2;1815:6;1812:14;1792:18;1789:38;1786:161;;;1869:10;1864:3;1860:20;1857:1;1850:31;1904:4;1901:1;1894:15;1932:4;1929:1;1922:15;1786:161;;1573:380;;;:::o;1958:276::-;2089:3;2127:6;2121:13;2143:53;2189:6;2184:3;2177:4;2169:6;2165:17;2143:53;:::i;:::-;2212:16;;;;;1958:276;-1:-1:-1;;1958:276:124:o;2600:402::-;672:7625:82;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_getProxyImplementation_12039":{"entryPoint":5185,"id":12039,"parameterSlots":1,"returnSlots":1},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setMarketId_11997":{"entryPoint":6079,"id":11997,"parameterSlots":1,"returnSlots":0},"@_updateImpl_11977":{"entryPoint":5368,"id":11977,"parameterSlots":2,"returnSlots":0},"@getACLAdmin_11782":{"entryPoint":null,"id":11782,"parameterSlots":0,"returnSlots":1},"@getACLManager_11743":{"entryPoint":null,"id":11743,"parameterSlots":0,"returnSlots":1},"@getAddress_11550":{"entryPoint":null,"id":11550,"parameterSlots":1,"returnSlots":1},"@getMarketId_11522":{"entryPoint":1791,"id":11522,"parameterSlots":0,"returnSlots":1},"@getPoolConfigurator_11666":{"entryPoint":null,"id":11666,"parameterSlots":0,"returnSlots":1},"@getPoolDataProvider_11860":{"entryPoint":null,"id":11860,"parameterSlots":0,"returnSlots":1},"@getPool_11628":{"entryPoint":null,"id":11628,"parameterSlots":0,"returnSlots":1},"@getPriceOracleSentinel_11821":{"entryPoint":null,"id":11821,"parameterSlots":0,"returnSlots":1},"@getPriceOracle_11704":{"entryPoint":null,"id":11704,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":2215,"id":1544,"parameterSlots":0,"returnSlots":0},"@setACLAdmin_11809":{"entryPoint":2774,"id":11809,"parameterSlots":1,"returnSlots":0},"@setACLManager_11770":{"entryPoint":4292,"id":11770,"parameterSlots":1,"returnSlots":0},"@setAddressAsProxy_11616":{"entryPoint":1937,"id":11616,"parameterSlots":2,"returnSlots":0},"@setAddress_11580":{"entryPoint":3403,"id":11580,"parameterSlots":2,"returnSlots":0},"@setMarketId_11536":{"entryPoint":5044,"id":11536,"parameterSlots":1,"returnSlots":0},"@setPoolConfiguratorImpl_11692":{"entryPoint":3982,"id":11692,"parameterSlots":1,"returnSlots":0},"@setPoolDataProvider_11887":{"entryPoint":3663,"id":11887,"parameterSlots":1,"returnSlots":0},"@setPoolImpl_11654":{"entryPoint":3093,"id":11654,"parameterSlots":1,"returnSlots":0},"@setPriceOracleSentinel_11848":{"entryPoint":2455,"id":11848,"parameterSlots":1,"returnSlots":0},"@setPriceOracle_11731":{"entryPoint":1467,"id":11731,"parameterSlots":1,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":4611,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":6557,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":7114,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":6498,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_address":{"entryPoint":6734,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_string_memory_ptr":{"entryPoint":6829,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":6641,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":7190,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":7143,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":6715,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":6593,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":7036,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":6782,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":6523,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5233:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:125:124","statements":[{"nodeType":"YulAssignment","src":"125:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:124"},"nodeType":"YulFunctionCall","src":"133:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"182:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"190:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"178:3:124"},"nodeType":"YulFunctionCall","src":"178:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:124"},"nodeType":"YulFunctionCall","src":"160:74:124"},"nodeType":"YulExpressionStatement","src":"160:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:124","type":""}],"src":"14:226:124"},{"body":{"nodeType":"YulBlock","src":"315:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"361:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:124"},"nodeType":"YulFunctionCall","src":"363:12:124"},"nodeType":"YulExpressionStatement","src":"363:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"336:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"345:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"332:3:124"},"nodeType":"YulFunctionCall","src":"332:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"357:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"328:3:124"},"nodeType":"YulFunctionCall","src":"328:32:124"},"nodeType":"YulIf","src":"325:52:124"},{"nodeType":"YulAssignment","src":"386:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"409:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"396:12:124"},"nodeType":"YulFunctionCall","src":"396:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"386:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"281:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"292:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"304:6:124","type":""}],"src":"245:180:124"},{"body":{"nodeType":"YulBlock","src":"475:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"562:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"571:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"574:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"564:6:124"},"nodeType":"YulFunctionCall","src":"564:12:124"},"nodeType":"YulExpressionStatement","src":"564:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"498:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"509:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"516:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"505:3:124"},"nodeType":"YulFunctionCall","src":"505:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"495:2:124"},"nodeType":"YulFunctionCall","src":"495:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"488:6:124"},"nodeType":"YulFunctionCall","src":"488:73:124"},"nodeType":"YulIf","src":"485:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"464:5:124","type":""}],"src":"430:154:124"},{"body":{"nodeType":"YulBlock","src":"659:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"705:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"714:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"717:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"707:6:124"},"nodeType":"YulFunctionCall","src":"707:12:124"},"nodeType":"YulExpressionStatement","src":"707:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"680:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"689:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"676:3:124"},"nodeType":"YulFunctionCall","src":"676:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"701:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"672:3:124"},"nodeType":"YulFunctionCall","src":"672:32:124"},"nodeType":"YulIf","src":"669:52:124"},{"nodeType":"YulVariableDeclaration","src":"730:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"756:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:124"},"nodeType":"YulFunctionCall","src":"743:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"734:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"800:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"775:24:124"},"nodeType":"YulFunctionCall","src":"775:31:124"},"nodeType":"YulExpressionStatement","src":"775:31:124"},{"nodeType":"YulAssignment","src":"815:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"825:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"815:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"625:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"636:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"648:6:124","type":""}],"src":"589:247:124"},{"body":{"nodeType":"YulBlock","src":"894:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"904:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"913:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"908:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"973:63:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"998:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"1003:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"994:3:124"},"nodeType":"YulFunctionCall","src":"994:11:124"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1017:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"1022:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1013:3:124"},"nodeType":"YulFunctionCall","src":"1013:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1007:5:124"},"nodeType":"YulFunctionCall","src":"1007:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"987:6:124"},"nodeType":"YulFunctionCall","src":"987:39:124"},"nodeType":"YulExpressionStatement","src":"987:39:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"934:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"937:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"931:2:124"},"nodeType":"YulFunctionCall","src":"931:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"945:19:124","statements":[{"nodeType":"YulAssignment","src":"947:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"956:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"952:3:124"},"nodeType":"YulFunctionCall","src":"952:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"947:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"927:3:124","statements":[]},"src":"923:113:124"},{"body":{"nodeType":"YulBlock","src":"1062:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1075:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"1080:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1071:3:124"},"nodeType":"YulFunctionCall","src":"1071:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"1089:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1064:6:124"},"nodeType":"YulFunctionCall","src":"1064:27:124"},"nodeType":"YulExpressionStatement","src":"1064:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1051:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"1054:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1048:2:124"},"nodeType":"YulFunctionCall","src":"1048:13:124"},"nodeType":"YulIf","src":"1045:48:124"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"872:3:124","type":""},{"name":"dst","nodeType":"YulTypedName","src":"877:3:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"882:6:124","type":""}],"src":"841:258:124"},{"body":{"nodeType":"YulBlock","src":"1154:267:124","statements":[{"nodeType":"YulVariableDeclaration","src":"1164:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1184:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1178:5:124"},"nodeType":"YulFunctionCall","src":"1178:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1168:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1206:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"1211:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1199:6:124"},"nodeType":"YulFunctionCall","src":"1199:19:124"},"nodeType":"YulExpressionStatement","src":"1199:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1253:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1260:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1249:3:124"},"nodeType":"YulFunctionCall","src":"1249:16:124"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1271:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"1276:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1267:3:124"},"nodeType":"YulFunctionCall","src":"1267:14:124"},{"name":"length","nodeType":"YulIdentifier","src":"1283:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"1227:21:124"},"nodeType":"YulFunctionCall","src":"1227:63:124"},"nodeType":"YulExpressionStatement","src":"1227:63:124"},{"nodeType":"YulAssignment","src":"1299:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1314:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1327:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1335:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1323:3:124"},"nodeType":"YulFunctionCall","src":"1323:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"1340:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1319:3:124"},"nodeType":"YulFunctionCall","src":"1319:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1310:3:124"},"nodeType":"YulFunctionCall","src":"1310:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"1410:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1306:3:124"},"nodeType":"YulFunctionCall","src":"1306:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1299:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1131:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1138:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1146:3:124","type":""}],"src":"1104:317:124"},{"body":{"nodeType":"YulBlock","src":"1547:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1564:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1575:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1557:6:124"},"nodeType":"YulFunctionCall","src":"1557:21:124"},"nodeType":"YulExpressionStatement","src":"1557:21:124"},{"nodeType":"YulAssignment","src":"1587:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1613:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1625:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1636:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1621:3:124"},"nodeType":"YulFunctionCall","src":"1621:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"1595:17:124"},"nodeType":"YulFunctionCall","src":"1595:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1587:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1516:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1527:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1538:4:124","type":""}],"src":"1426:220:124"},{"body":{"nodeType":"YulBlock","src":"1738:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1784:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1793:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1796:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1786:6:124"},"nodeType":"YulFunctionCall","src":"1786:12:124"},"nodeType":"YulExpressionStatement","src":"1786:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1759:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1768:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1755:3:124"},"nodeType":"YulFunctionCall","src":"1755:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1780:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1751:3:124"},"nodeType":"YulFunctionCall","src":"1751:32:124"},"nodeType":"YulIf","src":"1748:52:124"},{"nodeType":"YulAssignment","src":"1809:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1832:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1819:12:124"},"nodeType":"YulFunctionCall","src":"1819:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1809:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1851:45:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1881:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1892:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1877:3:124"},"nodeType":"YulFunctionCall","src":"1877:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1864:12:124"},"nodeType":"YulFunctionCall","src":"1864:32:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1855:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1930:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1905:24:124"},"nodeType":"YulFunctionCall","src":"1905:31:124"},"nodeType":"YulExpressionStatement","src":"1905:31:124"},{"nodeType":"YulAssignment","src":"1945:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1955:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1945:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1696:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1707:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1719:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1727:6:124","type":""}],"src":"1651:315:124"},{"body":{"nodeType":"YulBlock","src":"2003:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2020:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2023:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2013:6:124"},"nodeType":"YulFunctionCall","src":"2013:88:124"},"nodeType":"YulExpressionStatement","src":"2013:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2117:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2120:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2110:6:124"},"nodeType":"YulFunctionCall","src":"2110:15:124"},"nodeType":"YulExpressionStatement","src":"2110:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2141:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2144:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2134:6:124"},"nodeType":"YulFunctionCall","src":"2134:15:124"},"nodeType":"YulExpressionStatement","src":"2134:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1971:184:124"},{"body":{"nodeType":"YulBlock","src":"2240:901:124","statements":[{"body":{"nodeType":"YulBlock","src":"2286:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2295:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2298:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2288:6:124"},"nodeType":"YulFunctionCall","src":"2288:12:124"},"nodeType":"YulExpressionStatement","src":"2288:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2261:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2270:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2257:3:124"},"nodeType":"YulFunctionCall","src":"2257:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2282:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2253:3:124"},"nodeType":"YulFunctionCall","src":"2253:32:124"},"nodeType":"YulIf","src":"2250:52:124"},{"nodeType":"YulVariableDeclaration","src":"2311:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2338:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2325:12:124"},"nodeType":"YulFunctionCall","src":"2325:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2315:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2357:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2367:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2361:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2412:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2421:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2424:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2414:6:124"},"nodeType":"YulFunctionCall","src":"2414:12:124"},"nodeType":"YulExpressionStatement","src":"2414:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2400:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2408:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2397:2:124"},"nodeType":"YulFunctionCall","src":"2397:14:124"},"nodeType":"YulIf","src":"2394:34:124"},{"nodeType":"YulVariableDeclaration","src":"2437:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2451:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"2462:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2447:3:124"},"nodeType":"YulFunctionCall","src":"2447:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2441:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2517:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2526:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2529:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2519:6:124"},"nodeType":"YulFunctionCall","src":"2519:12:124"},"nodeType":"YulExpressionStatement","src":"2519:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2496:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2500:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2492:3:124"},"nodeType":"YulFunctionCall","src":"2492:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2507:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2488:3:124"},"nodeType":"YulFunctionCall","src":"2488:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2481:6:124"},"nodeType":"YulFunctionCall","src":"2481:35:124"},"nodeType":"YulIf","src":"2478:55:124"},{"nodeType":"YulVariableDeclaration","src":"2542:26:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2565:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2552:12:124"},"nodeType":"YulFunctionCall","src":"2552:16:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2546:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2591:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2593:16:124"},"nodeType":"YulFunctionCall","src":"2593:18:124"},"nodeType":"YulExpressionStatement","src":"2593:18:124"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2583:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2587:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2580:2:124"},"nodeType":"YulFunctionCall","src":"2580:10:124"},"nodeType":"YulIf","src":"2577:36:124"},{"nodeType":"YulVariableDeclaration","src":"2622:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2632:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2626:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2707:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2727:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2721:5:124"},"nodeType":"YulFunctionCall","src":"2721:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2711:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2739:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2761:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2785:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2789:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2781:3:124"},"nodeType":"YulFunctionCall","src":"2781:13:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2796:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2777:3:124"},"nodeType":"YulFunctionCall","src":"2777:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"2801:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2773:3:124"},"nodeType":"YulFunctionCall","src":"2773:31:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2806:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2769:3:124"},"nodeType":"YulFunctionCall","src":"2769:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2757:3:124"},"nodeType":"YulFunctionCall","src":"2757:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2743:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2869:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2871:16:124"},"nodeType":"YulFunctionCall","src":"2871:18:124"},"nodeType":"YulExpressionStatement","src":"2871:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2828:10:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2840:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2825:2:124"},"nodeType":"YulFunctionCall","src":"2825:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2848:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2860:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2845:2:124"},"nodeType":"YulFunctionCall","src":"2845:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2822:2:124"},"nodeType":"YulFunctionCall","src":"2822:46:124"},"nodeType":"YulIf","src":"2819:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2907:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2911:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2900:6:124"},"nodeType":"YulFunctionCall","src":"2900:22:124"},"nodeType":"YulExpressionStatement","src":"2900:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2938:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2946:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2931:6:124"},"nodeType":"YulFunctionCall","src":"2931:18:124"},"nodeType":"YulExpressionStatement","src":"2931:18:124"},{"body":{"nodeType":"YulBlock","src":"2995:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3004:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3007:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2997:6:124"},"nodeType":"YulFunctionCall","src":"2997:12:124"},"nodeType":"YulExpressionStatement","src":"2997:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2972:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2976:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2968:3:124"},"nodeType":"YulFunctionCall","src":"2968:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"2981:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2964:3:124"},"nodeType":"YulFunctionCall","src":"2964:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2986:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2961:2:124"},"nodeType":"YulFunctionCall","src":"2961:33:124"},"nodeType":"YulIf","src":"2958:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3037:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3045:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3033:3:124"},"nodeType":"YulFunctionCall","src":"3033:15:124"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3054:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3058:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3050:3:124"},"nodeType":"YulFunctionCall","src":"3050:11:124"},{"name":"_3","nodeType":"YulIdentifier","src":"3063:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3020:12:124"},"nodeType":"YulFunctionCall","src":"3020:46:124"},"nodeType":"YulExpressionStatement","src":"3020:46:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3090:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"3098:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3086:3:124"},"nodeType":"YulFunctionCall","src":"3086:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"3103:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3082:3:124"},"nodeType":"YulFunctionCall","src":"3082:24:124"},{"kind":"number","nodeType":"YulLiteral","src":"3108:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3075:6:124"},"nodeType":"YulFunctionCall","src":"3075:35:124"},"nodeType":"YulExpressionStatement","src":"3075:35:124"},{"nodeType":"YulAssignment","src":"3119:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3129:6:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3119:6:124"}]}]},"name":"abi_decode_tuple_t_string_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2206:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2217:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2229:6:124","type":""}],"src":"2160:981:124"},{"body":{"nodeType":"YulBlock","src":"3320:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3337:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3348:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3330:6:124"},"nodeType":"YulFunctionCall","src":"3330:21:124"},"nodeType":"YulExpressionStatement","src":"3330:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3371:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3382:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3367:3:124"},"nodeType":"YulFunctionCall","src":"3367:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3387:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3360:6:124"},"nodeType":"YulFunctionCall","src":"3360:30:124"},"nodeType":"YulExpressionStatement","src":"3360:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3410:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3421:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3406:3:124"},"nodeType":"YulFunctionCall","src":"3406:18:124"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"3426:34:124","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3399:6:124"},"nodeType":"YulFunctionCall","src":"3399:62:124"},"nodeType":"YulExpressionStatement","src":"3399:62:124"},{"nodeType":"YulAssignment","src":"3470:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3482:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3493:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3478:3:124"},"nodeType":"YulFunctionCall","src":"3478:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3470:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3297:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3311:4:124","type":""}],"src":"3146:356:124"},{"body":{"nodeType":"YulBlock","src":"3562:382:124","statements":[{"nodeType":"YulAssignment","src":"3572:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3586:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3589:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3582:3:124"},"nodeType":"YulFunctionCall","src":"3582:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3572:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3603:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3633:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"3639:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3629:3:124"},"nodeType":"YulFunctionCall","src":"3629:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3607:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3680:31:124","statements":[{"nodeType":"YulAssignment","src":"3682:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3696:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3704:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3692:3:124"},"nodeType":"YulFunctionCall","src":"3692:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3682:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3660:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3653:6:124"},"nodeType":"YulFunctionCall","src":"3653:26:124"},"nodeType":"YulIf","src":"3650:61:124"},{"body":{"nodeType":"YulBlock","src":"3770:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3791:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3794:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3784:6:124"},"nodeType":"YulFunctionCall","src":"3784:88:124"},"nodeType":"YulExpressionStatement","src":"3784:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3892:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3895:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3885:6:124"},"nodeType":"YulFunctionCall","src":"3885:15:124"},"nodeType":"YulExpressionStatement","src":"3885:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3920:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3923:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3913:6:124"},"nodeType":"YulFunctionCall","src":"3913:15:124"},"nodeType":"YulExpressionStatement","src":"3913:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3726:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3749:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3757:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3746:2:124"},"nodeType":"YulFunctionCall","src":"3746:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3723:2:124"},"nodeType":"YulFunctionCall","src":"3723:38:124"},"nodeType":"YulIf","src":"3720:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3542:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3551:6:124","type":""}],"src":"3507:437:124"},{"body":{"nodeType":"YulBlock","src":"4123:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4140:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4151:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4133:6:124"},"nodeType":"YulFunctionCall","src":"4133:21:124"},"nodeType":"YulExpressionStatement","src":"4133:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4185:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4170:3:124"},"nodeType":"YulFunctionCall","src":"4170:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4190:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4163:6:124"},"nodeType":"YulFunctionCall","src":"4163:30:124"},"nodeType":"YulExpressionStatement","src":"4163:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4213:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4224:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4209:3:124"},"nodeType":"YulFunctionCall","src":"4209:18:124"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"4229:34:124","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4202:6:124"},"nodeType":"YulFunctionCall","src":"4202:62:124"},"nodeType":"YulExpressionStatement","src":"4202:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4284:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4295:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4280:3:124"},"nodeType":"YulFunctionCall","src":"4280:18:124"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"4300:8:124","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4273:6:124"},"nodeType":"YulFunctionCall","src":"4273:36:124"},"nodeType":"YulExpressionStatement","src":"4273:36:124"},{"nodeType":"YulAssignment","src":"4318:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4330:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4341:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4326:3:124"},"nodeType":"YulFunctionCall","src":"4326:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4318:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4100:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4114:4:124","type":""}],"src":"3949:402:124"},{"body":{"nodeType":"YulBlock","src":"4437:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"4483:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4492:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4495:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4485:6:124"},"nodeType":"YulFunctionCall","src":"4485:12:124"},"nodeType":"YulExpressionStatement","src":"4485:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4458:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4467:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4454:3:124"},"nodeType":"YulFunctionCall","src":"4454:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4479:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4450:3:124"},"nodeType":"YulFunctionCall","src":"4450:32:124"},"nodeType":"YulIf","src":"4447:52:124"},{"nodeType":"YulVariableDeclaration","src":"4508:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4527:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4521:5:124"},"nodeType":"YulFunctionCall","src":"4521:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4512:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4571:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4546:24:124"},"nodeType":"YulFunctionCall","src":"4546:31:124"},"nodeType":"YulExpressionStatement","src":"4546:31:124"},{"nodeType":"YulAssignment","src":"4586:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4596:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4586:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4403:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4414:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4426:6:124","type":""}],"src":"4356:251:124"},{"body":{"nodeType":"YulBlock","src":"4759:191:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4776:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4791:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4799:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4787:3:124"},"nodeType":"YulFunctionCall","src":"4787:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4769:6:124"},"nodeType":"YulFunctionCall","src":"4769:74:124"},"nodeType":"YulExpressionStatement","src":"4769:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4863:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4874:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4859:3:124"},"nodeType":"YulFunctionCall","src":"4859:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4879:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4852:6:124"},"nodeType":"YulFunctionCall","src":"4852:30:124"},"nodeType":"YulExpressionStatement","src":"4852:30:124"},{"nodeType":"YulAssignment","src":"4891:53:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4917:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4929:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4940:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4925:3:124"},"nodeType":"YulFunctionCall","src":"4925:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"4899:17:124"},"nodeType":"YulFunctionCall","src":"4899:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4891:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4720:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4731:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4739:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4750:4:124","type":""}],"src":"4612:338:124"},{"body":{"nodeType":"YulBlock","src":"5094:137:124","statements":[{"nodeType":"YulVariableDeclaration","src":"5104:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5124:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5118:5:124"},"nodeType":"YulFunctionCall","src":"5118:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5108:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5166:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5174:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5162:3:124"},"nodeType":"YulFunctionCall","src":"5162:17:124"},{"name":"pos","nodeType":"YulIdentifier","src":"5181:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"5186:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"5140:21:124"},"nodeType":"YulFunctionCall","src":"5140:53:124"},"nodeType":"YulExpressionStatement","src":"5140:53:124"},{"nodeType":"YulAssignment","src":"5202:23:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5213:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"5218:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5209:3:124"},"nodeType":"YulFunctionCall","src":"5209:16:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5202:3:124"}]}]},"name":"abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"5070:3:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5075:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5086:3:124","type":""}],"src":"4955:276:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_string_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value0 := memPtr\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_string(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101825760003560e01c806376d84ffc116100d8578063e4ca28b71161008c578063f2fde38b11610066578063f2fde38b1461052f578063f67b184714610542578063fca513a81461055557600080fd5b8063e4ca28b7146104a3578063e860accb146104b6578063ed301ca91461051c57600080fd5b8063a1564406116100bd578063a15644061461046a578063ca446dd91461047d578063e44e9ed11461049057600080fd5b806376d84ffc146104395780638da5cb5b1461044c57600080fd5b80635dcc528c1161013a578063707cd71611610114578063707cd716146103b8578063715018a61461041e57806374944cec1461042657600080fd5b80635dcc528c146102d95780635eb88d3d146102ec578063631adfca1461035257600080fd5b806321f8a7211161016b57806321f8a72114610279578063530e784f146102af578063568ef470146102c457600080fd5b8063026b1d5f146101875780630e67178c14610213575b600080fd5b7f504f4f4c0000000000000000000000000000000000000000000000000000000060005260026020527f4fe005067814bb4b024d9515847377d15011b64593c006223b4a722952d2c05a5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f41434c5f41444d494e000000000000000000000000000000000000000000000060005260026020527ffab167ad2009dcb80ee379700bb4bd029d97c1181ed9d961625632c8a6f051c65473ffffffffffffffffffffffffffffffffffffffff166101e9565b6101e9610287366004611962565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6102c26102bd36600461199d565b6105bb565b005b6102cc6106ff565b60405161020a9190611a3b565b6102c26102e7366004611a4e565b610791565b7f50524943455f4f5241434c455f53454e54494e454c000000000000000000000060005260026020527f0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab85473ffffffffffffffffffffffffffffffffffffffff166101e9565b7f504f4f4c5f434f4e464947555241544f5200000000000000000000000000000060005260026020527f90c127ef1c12c03f5781afeca3079527ea5333738078bba6fea26825bf9bf2c55473ffffffffffffffffffffffffffffffffffffffff166101e9565b7f41434c5f4d414e4147455200000000000000000000000000000000000000000060005260026020527f9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c26108a7565b6102c261043436600461199d565b610997565b6102c261044736600461199d565b610ad6565b60005473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c261047836600461199d565b610c15565b6102c261048b366004611a4e565b610d4b565b6102c261049e36600461199d565b610e4f565b6102c26104b136600461199d565b610f8e565b7f444154415f50524f56494445520000000000000000000000000000000000000060005260026020527fcd7944601aaa5cd7ccdae1bebec659e98c6aac8f12486b30e59db0d39698051f5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c261052a36600461199d565b6110c4565b6102c261053d36600461199d565b611203565b6102c2610550366004611aad565b6113b4565b7f50524943455f4f5241434c45000000000000000000000000000000000000000060005260026020527f740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd635473ffffffffffffffffffffffffffffffffffffffff166101e9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b7f50524943455f4f5241434c450000000000000000000000000000000000000000600090815260026020527f740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd63805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917f56b5f80d8cac1479698aa7d01605fd6111e90b15fc4d2b377417f46034876cbd9190a35050565b60606001805461070e90611b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461073a90611b7c565b80156107875780601f1061075c57610100808354040283529160200191610787565b820191906000526020600020905b81548152906001019060200180831161076a57829003601f168201915b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff169061084184611441565b905061084d84846114f8565b60405173ffffffffffffffffffffffffffffffffffffffff8281168252808516919084169086907f3bbd45b5429b385e3fb37ad5cd1cd1435a3c8ec32196c7937597365a3fd3e99c9060200160405180910390a450505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f50524943455f4f5241434c455f53454e54494e454c0000000000000000000000600090815260026020527f0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab8805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917f5326514eeca90494a14bedabcff812a0e683029ee85d1e23824d44fd14cd6ae79190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f41434c5f41444d494e0000000000000000000000000000000000000000000000600090815260026020527ffab167ad2009dcb80ee379700bb4bd029d97c1181ed9d961625632c8a6f051c6805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fe9cf53972264dc95304fd424458745019ddfca0e37ae8f703d74772c41ad115b9190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000610cc17f504f4f4c00000000000000000000000000000000000000000000000000000000611441565b9050610ced7f504f4f4c00000000000000000000000000000000000000000000000000000000836114f8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90affc163f1a2dfedcd36aa02ed992eeeba8100a4014f0b4cdc20ea265a6662760405160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b60008281526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8681169182179093559251911692839186917f9ef0e8c8e52743bb38b83b17d9429141d494b8041ca6d616a6c77cebae9cd8b791a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f444154415f50524f564944455200000000000000000000000000000000000000600090815260026020527fcd7944601aaa5cd7ccdae1bebec659e98c6aac8f12486b30e59db0d39698051f805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fc853974cfbf81487a14a23565917bee63f527853bcb5fa54f2ae1cdf8a38356d9190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b600061103a7f504f4f4c5f434f4e464947555241544f52000000000000000000000000000000611441565b90506110667f504f4f4c5f434f4e464947555241544f52000000000000000000000000000000836114f8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8932892569eba59c8382a089d9b732d1f49272878775235761a2a6b0309cd46560405160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f41434c5f4d414e41474552000000000000000000000000000000000000000000600090815260026020527f9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fb30efa04327bb8a537d61cc1e5c48095345ad18ef7cc04e6bacf7dfb6caaf5079190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b73ffffffffffffffffffffffffffffffffffffffff8116611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610638565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b61143e816117bf565b50565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806114745750600092915050565b60008190508073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190611bca565b949350505050565b50919050565b60008281526002602052604080822054905130602482015273ffffffffffffffffffffffffffffffffffffffff90911691908190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052905073ffffffffffffffffffffffffffffffffffffffff831661172e57306040516115cf906118bc565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015611608573d6000803e3d6000fd5b506000868152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915590517fd1f578940000000000000000000000000000000000000000000000000000000081529194508493509063d1f578949061169c9087908590600401611be7565b600060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16867f4a465a9bd819d9662563c1e11ae958f8109e437e7f4bf1c6ef0b9a7b3f35d47860405160405180910390a46117b8565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815283925073ffffffffffffffffffffffffffffffffffffffff831690634f1ef286906117859087908590600401611be7565b600060405180830381600087803b15801561179f57600080fd5b505af11580156117b3573d6000803e3d6000fd5b505050505b5050505050565b6000600180546117ce90611b7c565b80601f01602080910402602001604051908101604052809291908181526020018280546117fa90611b7c565b80156118475780601f1061181c57610100808354040283529160200191611847565b820191906000526020600020905b81548152906001019060200180831161182a57829003601f168201915b50508551939450611863936001935060208701925090506118c9565b50816040516118729190611c16565b6040518091039020816040516118889190611c16565b604051908190038120907fe685c8cdecc6030c45030fd54778812cb84ed8e4467c38294403d68ba786082390600090a35050565b6109cb80611c3383390190565b8280546118d590611b7c565b90600052602060002090601f0160209004810192826118f7576000855561193d565b82601f1061191057805160ff191683800117855561193d565b8280016001018555821561193d579182015b8281111561193d578251825591602001919060010190611922565b5061194992915061194d565b5090565b5b80821115611949576000815560010161194e565b60006020828403121561197457600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461143e57600080fd5b6000602082840312156119af57600080fd5b81356119ba8161197b565b9392505050565b60005b838110156119dc5781810151838201526020016119c4565b838111156119eb576000848401525b50505050565b60008151808452611a098160208601602086016119c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119ba60208301846119f1565b60008060408385031215611a6157600080fd5b823591506020830135611a738161197b565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611abf57600080fd5b813567ffffffffffffffff80821115611ad757600080fd5b818401915084601f830112611aeb57600080fd5b813581811115611afd57611afd611a7e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b4357611b43611a7e565b81604052828152876020848701011115611b5c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680611b9057607f821691505b602082108114156114f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215611bdc57600080fd5b81516119ba8161197b565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006114ea60408301846119f1565b60008251611c288184602087016119c1565b919091019291505056fe60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220899ba9574e8c52c72539176723d8c74a8618334587150196e2029371e7486a8464736f6c634300080a0033a2646970667358221220e62d78f287b0c390f4963ebdc446c3b33cd341f5cc839e23b26c90067a0b899564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x182 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x76D84FFC GT PUSH2 0xD8 JUMPI DUP1 PUSH4 0xE4CA28B7 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xF2FDE38B GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x52F JUMPI DUP1 PUSH4 0xF67B1847 EQ PUSH2 0x542 JUMPI DUP1 PUSH4 0xFCA513A8 EQ PUSH2 0x555 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE4CA28B7 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xE860ACCB EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xED301CA9 EQ PUSH2 0x51C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA1564406 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xA1564406 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0xCA446DD9 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0xE44E9ED1 EQ PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x76D84FFC EQ PUSH2 0x439 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5DCC528C GT PUSH2 0x13A JUMPI DUP1 PUSH4 0x707CD716 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0x707CD716 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x41E JUMPI DUP1 PUSH4 0x74944CEC EQ PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5DCC528C EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x5EB88D3D EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x631ADFCA EQ PUSH2 0x352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x21F8A721 GT PUSH2 0x16B JUMPI DUP1 PUSH4 0x21F8A721 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x2AF JUMPI DUP1 PUSH4 0x568EF470 EQ PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x26B1D5F EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0xE67178C EQ PUSH2 0x213 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x4FE005067814BB4B024D9515847377D15011B64593C006223B4A722952D2C05A SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x41434C5F41444D494E0000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xFAB167AD2009DCB80EE379700BB4BD029D97C1181ED9D961625632C8A6F051C6 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x1E9 PUSH2 0x287 CALLDATASIZE PUSH1 0x4 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2BD CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x5BB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2CC PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x20A SWAP2 SWAP1 PUSH2 0x1A3B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0x791 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C455F53454E54494E454C0000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xD2C1BCEE56447B4F46248272F34207A580A5C40F666A31F4E2FBB470EA53AB8 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x90C127EF1C12C03F5781AFECA3079527EA5333738078BBA6FEA26825BF9BF2C5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH32 0x41434C5F4D414E41474552000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x9EDEF266EF35FD0C6E131DF0F31A330F3DD4C4D19DD31ED615C21D005C68116B SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x8A7 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x434 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x997 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x447 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xAD6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x478 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xC15 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x48B CALLDATASIZE PUSH1 0x4 PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0xD4B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xE4F JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xF8E JUMP JUMPDEST PUSH32 0x444154415F50524F564944455200000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xCD7944601AAA5CD7CCDAE1BEBEC659E98C6AAC8F12486B30E59DB0D39698051F SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x52A CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x53D CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x1203 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x550 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AAD JUMP JUMPDEST PUSH2 0x13B4 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C450000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x740F710666BD7A12AF42DF98311E541E47F7FD33D382D11602457A6D540CBD63 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x50524943455F4F5241434C450000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x740F710666BD7A12AF42DF98311E541E47F7FD33D382D11602457A6D540CBD63 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0x56B5F80D8CAC1479698AA7D01605FD6111E90B15FC4D2B377417F46034876CBD SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x70E SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x73A SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x787 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x75C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x787 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x76A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x812 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x841 DUP5 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0x84D DUP5 DUP5 PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND DUP3 MSTORE DUP1 DUP6 AND SWAP2 SWAP1 DUP5 AND SWAP1 DUP7 SWAP1 PUSH32 0x3BBD45B5429B385E3FB37AD5CD1CD1435A3C8EC32196C7937597365A3FD3E99C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x928 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C455F53454E54494E454C0000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xD2C1BCEE56447B4F46248272F34207A580A5C40F666A31F4E2FBB470EA53AB8 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0x5326514EECA90494A14BEDABCFF812A0E683029EE85D1E23824D44FD14CD6AE7 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x41434C5F41444D494E0000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xFAB167AD2009DCB80EE379700BB4BD029D97C1181ED9D961625632C8A6F051C6 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xE9CF53972264DC95304FD424458745019DDFCA0E37AE8F703D74772C41AD115B SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC96 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0xCED PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 DUP4 PUSH2 0x14F8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x90AFFC163F1A2DFEDCD36AA02ED992EEEBA8100A4014F0B4CDC20EA265A66627 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xDCC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE SWAP3 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 DUP7 SWAP2 PUSH32 0x9EF0E8C8E52743BB38B83B17D9429141D494B8041CA6D616A6C77CEBAE9CD8B7 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xED0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x444154415F50524F564944455200000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xCD7944601AAA5CD7CCDAE1BEBEC659E98C6AAC8F12486B30E59DB0D39698051F DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xC853974CFBF81487A14A23565917BEE63F527853BCB5FA54F2AE1CDF8A38356D SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x100F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x103A PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0x1066 PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 DUP4 PUSH2 0x14F8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8932892569EBA59C8382A089D9B732D1F49272878775235761A2A6B0309CD465 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1145 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x41434C5F4D414E41474552000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x9EDEF266EF35FD0C6E131DF0F31A330F3DD4C4D19DD31ED615C21D005C68116B DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xB30EFA04327BB8A537D61CC1E5C48095345AD18EF7CC04E6BACF7DFB6CAAF507 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1284 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1327 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1435 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH2 0x143E DUP2 PUSH2 0x17BF JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x1474 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x14C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14EA SWAP2 SWAP1 PUSH2 0x1BCA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x172E JUMPI ADDRESS PUSH1 0x40 MLOAD PUSH2 0x15CF SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x1608 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD PUSH32 0xD1F5789400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP5 POP DUP5 SWAP4 POP SWAP1 PUSH4 0xD1F57894 SWAP1 PUSH2 0x169C SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH32 0x4A465A9BD819D9662563C1E11AE958F8109E437E7F4BF1C6EF0B9A7B3F35D478 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH2 0x17B8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 PUSH2 0x1785 SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x179F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17B3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 SLOAD PUSH2 0x17CE SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x17FA SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1847 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x181C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1847 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x182A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 MLOAD SWAP4 SWAP5 POP PUSH2 0x1863 SWAP4 PUSH1 0x1 SWAP4 POP PUSH1 0x20 DUP8 ADD SWAP3 POP SWAP1 POP PUSH2 0x18C9 JUMP JUMPDEST POP DUP2 PUSH1 0x40 MLOAD PUSH2 0x1872 SWAP2 SWAP1 PUSH2 0x1C16 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 PUSH1 0x40 MLOAD PUSH2 0x1888 SWAP2 SWAP1 PUSH2 0x1C16 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0xE685C8CDECC6030C45030FD54778812CB84ED8E4467C38294403D68BA7860823 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x9CB DUP1 PUSH2 0x1C33 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x18D5 SWAP1 PUSH2 0x1B7C JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x18F7 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x193D JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1910 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x193D JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x193D JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x193D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1922 JUMP JUMPDEST POP PUSH2 0x1949 SWAP3 SWAP2 POP PUSH2 0x194D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1949 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x194E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1974 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x143E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x19BA DUP2 PUSH2 0x197B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x19DC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x19C4 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x19EB JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A09 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x19BA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x19F1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1A73 DUP2 PUSH2 0x197B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1ABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1AD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1AFD JUMPI PUSH2 0x1AFD PUSH2 0x1A7E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1B43 JUMPI PUSH2 0x1B43 PUSH2 0x1A7E JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1B5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP3 DUP2 ADD PUSH1 0x20 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x1B90 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x14F2 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x19BA DUP2 PUSH2 0x197B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x14EA PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x19F1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C28 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x19C1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 SWAP12 0xA9 JUMPI 0x4E DUP13 MSTORE 0xC7 0x25 CODECOPY OR PUSH8 0x23D8C74A86183345 DUP8 ISZERO ADD SWAP7 0xE2 MUL SWAP4 PUSH18 0xE7486A8464736F6C634300080A0033A26469 PUSH17 0x667358221220E62D78F287B0C390F4963E 0xBD 0xC4 CHAINID 0xC3 0xB3 EXTCODECOPY 0xD3 COINBASE CREATE2 0xCC DUP4 SWAP15 0x23 0xB2 PUSH13 0x90067A0B899564736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"672:7625:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:94;2861:4;2828:7;2041:14;:10;:14;;;;;;2777:94;;;190:42:124;178:55;;;160:74;;148:2;133:18;2777:94:82;;;;;;;;4587:103;4675:9;4642:7;2041:14;:10;:14;;;;;;4587:103;2777:94;1957:103;;;;;;:::i;:::-;2019:7;2041:14;;;:10;:14;;;;;;;;;1957:103;3866:244;;;;;;:::i;:::-;;:::i;:::-;;1658:97;;;:::i;:::-;;;;;;;:::i;2358:374::-;;;;;;:::i;:::-;;:::i;4997:126::-;5096:21;5063:7;2041:14;:10;:14;;;;;;4997:126;2777:94;3177:119;3273:17;3240:7;2041:14;:10;:14;;;;;;3177:119;2777:94;4155:107;4245:11;4212:7;2041:14;:10;:14;;;;;;4155:107;2777:94;1601:135:11;;;:::i;5168:318:82:-;;;;;;:::i;:::-;;:::i;4735:217::-;;;;;;:::i;:::-;;:::i;1018:71:11:-;1056:7;1078:6;;;1018:71;;2916:216:82;;;;;;:::i;:::-;;:::i;2105:208::-;;;;;;:::i;:::-;;:::i;5691:261::-;;;;;;:::i;:::-;;:::i;3341:326::-;;;;;;:::i;:::-;;:::i;5531:115::-;5627:13;5594:7;2041:14;:10;:14;;;;;;5531:115;2777:94;4307:235;;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;:::i;:::-;;:::i;1800:112:82:-;;;;;;:::i;:::-;;:::i;3712:109::-;3803:12;3770:7;2041:14;:10;:14;;;;;;3712:109;2777:94;3866:244;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;;;;;;;;;3984:12:82::1;3948:22;3973:24:::0;;;:10:::1;:24;::::0;;;;::::1;4003:41:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;3973:24;4055:50;3973:24;::::1;::::0;;;4055:50:::1;::::0;3948:22;4055:50:::1;3942:168;3866:244:::0;:::o;1658:97::-;1713:13;1741:9;1734:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1658:97;:::o;2358:374::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;2477:20:82::1;2500:14:::0;;;:10:::1;:14;::::0;;;;;::::1;;::::0;2555:27:::1;2511:2:::0;2555:23:::1;:27::i;:::-;2520:62;;2588:41;2600:2;2604:24;2588:11;:41::i;:::-;2640:87;::::0;::::1;178:55:124::0;;;160:74;;2640:87:82;;::::1;::::0;;;::::1;::::0;2658:2;;2640:87:::1;::::0;148:2:124;133:18;2640:87:82::1;;;;;;;2471:261;;2358:374:::0;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;5168:318:82:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;5310:21:82::1;5266:30;5299:33:::0;;;:10:::1;:33;::::0;;;;::::1;5338:58:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;5299:33;5407:74;5299:33;::::1;::::0;;;5407:74:::1;::::0;5266:30;5407:74:::1;5260:226;5168:318:::0;:::o;4735:217::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;4844:9:82::1;4811:19;4833:21:::0;;;:10:::1;:21;::::0;;;;::::1;4860:35:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;4833:21;4906:41;4833:21;::::1;::::0;;;4906:41:::1;::::0;4811:19;4906:41:::1;4805:147;4735:217:::0;:::o;2916:216::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;2992:19:82::1;3014:29;3038:4;3014:23;:29::i;:::-;2992:51;;3049:30;3061:4;3067:11;3049;:30::i;:::-;3115:11;3090:37;;3102:11;3090:37;;;;;;;;;;;;2986:146;2916:216:::0;:::o;2105:208::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;2191:18:82::1;2212:14:::0;;;:10:::1;:14;::::0;;;;;;;2232:27;;::::1;2212:14;2232:27:::0;;::::1;::::0;;::::1;::::0;;;2270:38;;2212:14;::::1;::::0;;;;;2270:38:::1;::::0;::::1;2185:128;2105:208:::0;;:::o;5691:261::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;5816:13:82::1;5779:23;5805:25:::0;;;:10:::1;:25;::::0;;;;::::1;5836:43:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;5805:25;5890:57;5805:25;::::1;::::0;;;5890:57:::1;::::0;5779:23;5890:57:::1;5773:179;5691:261:::0;:::o;3341:326::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;3441:31:82::1;3475:42;3499:17;3475:23;:42::i;:::-;3441:76;;3523:55;3535:17;3554:23;3523:11;:55::i;:::-;3638:23;3589:73;;3613:23;3589:73;;;;;;;;;;;;3435:232;3341:326:::0;:::o;4307:235::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;4422:11:82::1;4387:21;4411:23:::0;;;:10:::1;:23;::::0;;;;::::1;4440:39:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;4411:23;4490:47;4411:23;::::1;::::0;;;4490:47:::1;::::0;4387:21;4490:47:::1;4381:161;4307:235:::0;:::o;1875:226:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;4151:2:124;1951:73:11::1;::::0;::::1;4133:21:124::0;4190:2;4170:18;;;4163:30;4229:34;4209:18;;;4202:62;4300:8;4280:18;;;4273:36;4326:19;;1951:73:11::1;3949:402:124::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;1800:112:82:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:124;1196:67:11;;;3330:21:124;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:124;1196:67:11;1882:25:82::1;1895:11;1882:12;:25::i;:::-;1800:112:::0;:::o;7927:368::-;7990:7;8028:14;;;:10;:14;;;;;;;;8052:26;8048:243;;-1:-1:-1;8103:1:82;;7927:368;-1:-1:-1;;7927:368:82:o;8048:243::-;8126:35;8172:12;8126:59;;8247:19;8200:82;;;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8193:91;7927:368;-1:-1:-1;;;;7927:368:82:o;8048:243::-;7999:296;7927:368;;;:::o;6552:684::-;6620:20;6643:14;;;:10;:14;;;;;;;6743:61;;6798:4;6743:61;;;160:74:124;6643:14:82;;;;;6620:20;;;133:18:124;;6743:61:82;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6815:26:82;;;6811:421;;6918:4;6859:65;;;;;:::i;:::-;190:42:124;178:55;;;160:74;;148:2;133:18;6859:65:82;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6932:14:82;;;;:10;:14;;;;;;;:46;;;;;;;;;;;;;6986:36;;;;;6932:46;;-1:-1:-1;6932:46:82;;-1:-1:-1;6932:46:82;6986:16;;:36;;7003:10;;7015:6;;6986:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7066:10;7035:42;;7052:12;7035:42;;7048:2;7035:42;;;;;;;;;;6811:421;;;7183:42;;;;;7161:12;;-1:-1:-1;7183:22:82;;;;;;:42;;7206:10;;7218:6;;7183:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6811:421;6614:622;;;6552:684;;:::o;7357:183::-;7421:25;7449:9;7421:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7464:23:82;;7421:37;;-1:-1:-1;7464:23:82;;:9;;-1:-1:-1;7464:23:82;;;;-1:-1:-1;7464:23:82;-1:-1:-1;7464:23:82;:::i;:::-;;7523:11;7498:37;;;;;;:::i;:::-;;;;;;;;7510:11;7498:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;7415:125;7357:183;:::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;245:180:124;304:6;357:2;345:9;336:7;332:23;328:32;325:52;;;373:1;370;363:12;325:52;-1:-1:-1;396:23:124;;245:180;-1:-1:-1;245:180:124:o;430:154::-;516:42;509:5;505:54;498:5;495:65;485:93;;574:1;571;564:12;589:247;648:6;701:2;689:9;680:7;676:23;672:32;669:52;;;717:1;714;707:12;669:52;756:9;743:23;775:31;800:5;775:31;:::i;:::-;825:5;589:247;-1:-1:-1;;;589:247:124:o;841:258::-;913:1;923:113;937:6;934:1;931:13;923:113;;;1013:11;;;1007:18;994:11;;;987:39;959:2;952:10;923:113;;;1054:6;1051:1;1048:13;1045:48;;;1089:1;1080:6;1075:3;1071:16;1064:27;1045:48;;841:258;;;:::o;1104:317::-;1146:3;1184:5;1178:12;1211:6;1206:3;1199:19;1227:63;1283:6;1276:4;1271:3;1267:14;1260:4;1253:5;1249:16;1227:63;:::i;:::-;1335:2;1323:15;1340:66;1319:88;1310:98;;;;1410:4;1306:109;;1104:317;-1:-1:-1;;1104:317:124:o;1426:220::-;1575:2;1564:9;1557:21;1538:4;1595:45;1636:2;1625:9;1621:18;1613:6;1595:45;:::i;1651:315::-;1719:6;1727;1780:2;1768:9;1759:7;1755:23;1751:32;1748:52;;;1796:1;1793;1786:12;1748:52;1832:9;1819:23;1809:33;;1892:2;1881:9;1877:18;1864:32;1905:31;1930:5;1905:31;:::i;:::-;1955:5;1945:15;;;1651:315;;;;;:::o;1971:184::-;2023:77;2020:1;2013:88;2120:4;2117:1;2110:15;2144:4;2141:1;2134:15;2160:981;2229:6;2282:2;2270:9;2261:7;2257:23;2253:32;2250:52;;;2298:1;2295;2288:12;2250:52;2338:9;2325:23;2367:18;2408:2;2400:6;2397:14;2394:34;;;2424:1;2421;2414:12;2394:34;2462:6;2451:9;2447:22;2437:32;;2507:7;2500:4;2496:2;2492:13;2488:27;2478:55;;2529:1;2526;2519:12;2478:55;2565:2;2552:16;2587:2;2583;2580:10;2577:36;;;2593:18;;:::i;:::-;2727:2;2721:9;2789:4;2781:13;;2632:66;2777:22;;;2801:2;2773:31;2769:40;2757:53;;;2825:18;;;2845:22;;;2822:46;2819:72;;;2871:18;;:::i;:::-;2911:10;2907:2;2900:22;2946:2;2938:6;2931:18;2986:7;2981:2;2976;2972;2968:11;2964:20;2961:33;2958:53;;;3007:1;3004;2997:12;2958:53;3063:2;3058;3054;3050:11;3045:2;3037:6;3033:15;3020:46;3108:1;3086:15;;;3103:2;3082:24;3075:35;;;;-1:-1:-1;3090:6:124;2160:981;-1:-1:-1;;;;;2160:981:124:o;3507:437::-;3586:1;3582:12;;;;3629;;;3650:61;;3704:4;3696:6;3692:17;3682:27;;3650:61;3757:2;3749:6;3746:14;3726:18;3723:38;3720:218;;;3794:77;3791:1;3784:88;3895:4;3892:1;3885:15;3923:4;3920:1;3913:15;4356:251;4426:6;4479:2;4467:9;4458:7;4454:23;4450:32;4447:52;;;4495:1;4492;4485:12;4447:52;4527:9;4521:16;4546:31;4571:5;4546:31;:::i;4612:338::-;4799:42;4791:6;4787:55;4776:9;4769:74;4879:2;4874;4863:9;4859:18;4852:30;4750:4;4899:45;4940:2;4929:9;4925:18;4917:6;4899:45;:::i;4955:276::-;5086:3;5124:6;5118:13;5140:53;5186:6;5181:3;5174:4;5166:6;5162:17;5140:53;:::i;:::-;5209:16;;;;;4955:276;-1:-1:-1;;4955:276:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"1955800","executionCost":"infinite","totalCost":"infinite"},"external":{"getACLAdmin()":"2383","getACLManager()":"2359","getAddress(bytes32)":"2488","getMarketId()":"infinite","getPool()":"2350","getPoolConfigurator()":"2404","getPoolDataProvider()":"2381","getPriceOracle()":"2402","getPriceOracleSentinel()":"2382","owner()":"2364","renounceOwnership()":"30193","setACLAdmin(address)":"28255","setACLManager(address)":"28298","setAddress(bytes32,address)":"28735","setAddressAsProxy(bytes32,address)":"infinite","setMarketId(string)":"infinite","setPoolConfiguratorImpl(address)":"infinite","setPoolDataProvider(address)":"28298","setPoolImpl(address)":"infinite","setPriceOracle(address)":"28277","setPriceOracleSentinel(address)":"28298","transferOwnership(address)":"30363"},"internal":{"_getProxyImplementation(bytes32)":"infinite","_setMarketId(string memory)":"infinite","_updateImpl(bytes32,address)":"infinite"}},"methodIdentifiers":{"getACLAdmin()":"0e67178c","getACLManager()":"707cd716","getAddress(bytes32)":"21f8a721","getMarketId()":"568ef470","getPool()":"026b1d5f","getPoolConfigurator()":"631adfca","getPoolDataProvider()":"e860accb","getPriceOracle()":"fca513a8","getPriceOracleSentinel()":"5eb88d3d","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setACLAdmin(address)":"76d84ffc","setACLManager(address)":"ed301ca9","setAddress(bytes32,address)":"ca446dd9","setAddressAsProxy(bytes32,address)":"5dcc528c","setMarketId(string)":"f67b1847","setPoolConfiguratorImpl(address)":"e4ca28b7","setPoolDataProvider(address)":"e44e9ed1","setPoolImpl(address)":"a1564406","setPriceOracle(address)":"530e784f","setPriceOracleSentinel(address)":"74944cec","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"marketId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ACLAdminUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ACLManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldImplementationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementationAddress\",\"type\":\"address\"}],\"name\":\"AddressSetAsProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"oldMarketId\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"MarketIdSet\",\"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\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolConfiguratorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolDataProviderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceOracleSentinelUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"}],\"name\":\"ProxyCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getACLAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getACLManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarketId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolConfigurator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolDataProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracleSentinel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":\"newAclAdmin\",\"type\":\"address\"}],\"name\":\"setACLAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAclManager\",\"type\":\"address\"}],\"name\":\"setACLManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newImplementationAddress\",\"type\":\"address\"}],\"name\":\"setAddressAsProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"setMarketId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolConfiguratorImpl\",\"type\":\"address\"}],\"name\":\"setPoolConfiguratorImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newDataProvider\",\"type\":\"address\"}],\"name\":\"setPoolDataProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolImpl\",\"type\":\"address\"}],\"name\":\"setPoolImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPriceOracle\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPriceOracleSentinel\",\"type\":\"address\"}],\"name\":\"setPriceOracleSentinel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Acts as factory of proxies and admin of those, so with right to change its implementationsOwned by the Aave Governance\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"marketId\":\"The identifier of the market.\",\"owner\":\"The owner address of this contract.\"}},\"getACLAdmin()\":{\"returns\":{\"_0\":\"The address of the ACL admin\"}},\"getACLManager()\":{\"returns\":{\"_0\":\"The address of the ACLManager\"}},\"getAddress(bytes32)\":{\"details\":\"The returned address might be an EOA or a contract, potentially proxiedIt returns ZERO if there is no registered address with the given id\",\"params\":{\"id\":\"The id\"},\"returns\":{\"_0\":\"The address of the registered for the specified id\"}},\"getMarketId()\":{\"returns\":{\"_0\":\"The market id\"}},\"getPool()\":{\"returns\":{\"_0\":\"The Pool proxy address\"}},\"getPoolConfigurator()\":{\"returns\":{\"_0\":\"The PoolConfigurator proxy address\"}},\"getPoolDataProvider()\":{\"returns\":{\"_0\":\"The address of the DataProvider\"}},\"getPriceOracle()\":{\"returns\":{\"_0\":\"The address of the PriceOracle\"}},\"getPriceOracleSentinel()\":{\"returns\":{\"_0\":\"The address of the PriceOracleSentinel\"}},\"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 anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setACLAdmin(address)\":{\"params\":{\"newAclAdmin\":\"The address of the new ACL admin\"}},\"setACLManager(address)\":{\"params\":{\"newAclManager\":\"The address of the new ACLManager\"}},\"setAddress(bytes32,address)\":{\"details\":\"IMPORTANT Use this function carefully, as it will do a hard replacement\",\"params\":{\"id\":\"The id\",\"newAddress\":\"The address to set\"}},\"setAddressAsProxy(bytes32,address)\":{\"details\":\"IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences\",\"params\":{\"id\":\"The id\",\"newImplementationAddress\":\"The address of the new implementation\"}},\"setMarketId(string)\":{\"details\":\"This can be used to create an onchain registry of PoolAddressesProviders to identify and validate multiple Aave markets.\",\"params\":{\"newMarketId\":\"The market id\"}},\"setPoolConfiguratorImpl(address)\":{\"params\":{\"newPoolConfiguratorImpl\":\"The new PoolConfigurator implementation\"}},\"setPoolDataProvider(address)\":{\"params\":{\"newDataProvider\":\"The address of the new DataProvider\"}},\"setPoolImpl(address)\":{\"params\":{\"newPoolImpl\":\"The new Pool implementation\"}},\"setPriceOracle(address)\":{\"params\":{\"newPriceOracle\":\"The address of the new PriceOracle\"}},\"setPriceOracleSentinel(address)\":{\"params\":{\"newPriceOracleSentinel\":\"The address of the new PriceOracleSentinel\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"PoolAddressesProvider\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getACLAdmin()\":{\"notice\":\"Returns the address of the ACL admin.\"},\"getACLManager()\":{\"notice\":\"Returns the address of the ACL manager.\"},\"getAddress(bytes32)\":{\"notice\":\"Returns an address by its identifier.\"},\"getMarketId()\":{\"notice\":\"Returns the id of the Aave market to which this contract points to.\"},\"getPool()\":{\"notice\":\"Returns the address of the Pool proxy.\"},\"getPoolConfigurator()\":{\"notice\":\"Returns the address of the PoolConfigurator proxy.\"},\"getPoolDataProvider()\":{\"notice\":\"Returns the address of the data provider.\"},\"getPriceOracle()\":{\"notice\":\"Returns the address of the price oracle.\"},\"getPriceOracleSentinel()\":{\"notice\":\"Returns the address of the price oracle sentinel.\"},\"setACLAdmin(address)\":{\"notice\":\"Updates the address of the ACL admin.\"},\"setACLManager(address)\":{\"notice\":\"Updates the address of the ACL manager.\"},\"setAddress(bytes32,address)\":{\"notice\":\"Sets an address for an id replacing the address saved in the addresses map.\"},\"setAddressAsProxy(bytes32,address)\":{\"notice\":\"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `newImplementationAddress`.\"},\"setMarketId(string)\":{\"notice\":\"Associates an id with a specific PoolAddressesProvider.\"},\"setPoolConfiguratorImpl(address)\":{\"notice\":\"Updates the implementation of the PoolConfigurator, or creates a proxy setting the new `PoolConfigurator` implementation when the function is called for the first time.\"},\"setPoolDataProvider(address)\":{\"notice\":\"Updates the address of the data provider.\"},\"setPoolImpl(address)\":{\"notice\":\"Updates the implementation of the Pool, or creates a proxy setting the new `pool` implementation when the function is called for the first time.\"},\"setPriceOracle(address)\":{\"notice\":\"Updates the address of the price oracle.\"},\"setPriceOracleSentinel(address)\":{\"notice\":\"Updates the address of the price oracle sentinel.\"}},\"notice\":\"Main registry of addresses part of or connected to the protocol, including permissioned roles\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/configuration/PoolAddressesProvider.sol\":\"PoolAddressesProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './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 * By default, the owner account will be the one that deploys the contract. This\\n * can 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 */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = 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    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/configuration/PoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title PoolAddressesProvider\\n * @author Aave\\n * @notice Main registry of addresses part of or connected to the protocol, including permissioned roles\\n * @dev Acts as factory of proxies and admin of those, so with right to change its implementations\\n * @dev Owned by the Aave Governance\\n */\\ncontract PoolAddressesProvider is Ownable, IPoolAddressesProvider {\\n  // Identifier of the Aave Market\\n  string private _marketId;\\n\\n  // Map of registered addresses (identifier => registeredAddress)\\n  mapping(bytes32 => address) private _addresses;\\n\\n  // Main identifiers\\n  bytes32 private constant POOL = 'POOL';\\n  bytes32 private constant POOL_CONFIGURATOR = 'POOL_CONFIGURATOR';\\n  bytes32 private constant PRICE_ORACLE = 'PRICE_ORACLE';\\n  bytes32 private constant ACL_MANAGER = 'ACL_MANAGER';\\n  bytes32 private constant ACL_ADMIN = 'ACL_ADMIN';\\n  bytes32 private constant PRICE_ORACLE_SENTINEL = 'PRICE_ORACLE_SENTINEL';\\n  bytes32 private constant DATA_PROVIDER = 'DATA_PROVIDER';\\n\\n  /**\\n   * @dev Constructor.\\n   * @param marketId The identifier of the market.\\n   * @param owner The owner address of this contract.\\n   */\\n  constructor(string memory marketId, address owner) {\\n    _setMarketId(marketId);\\n    transferOwnership(owner);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getMarketId() external view override returns (string memory) {\\n    return _marketId;\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setMarketId(string memory newMarketId) external override onlyOwner {\\n    _setMarketId(newMarketId);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getAddress(bytes32 id) public view override returns (address) {\\n    return _addresses[id];\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setAddress(bytes32 id, address newAddress) external override onlyOwner {\\n    address oldAddress = _addresses[id];\\n    _addresses[id] = newAddress;\\n    emit AddressSet(id, oldAddress, newAddress);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setAddressAsProxy(\\n    bytes32 id,\\n    address newImplementationAddress\\n  ) external override onlyOwner {\\n    address proxyAddress = _addresses[id];\\n    address oldImplementationAddress = _getProxyImplementation(id);\\n    _updateImpl(id, newImplementationAddress);\\n    emit AddressSetAsProxy(id, proxyAddress, oldImplementationAddress, newImplementationAddress);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPool() external view override returns (address) {\\n    return getAddress(POOL);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPoolImpl(address newPoolImpl) external override onlyOwner {\\n    address oldPoolImpl = _getProxyImplementation(POOL);\\n    _updateImpl(POOL, newPoolImpl);\\n    emit PoolUpdated(oldPoolImpl, newPoolImpl);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPoolConfigurator() external view override returns (address) {\\n    return getAddress(POOL_CONFIGURATOR);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external override onlyOwner {\\n    address oldPoolConfiguratorImpl = _getProxyImplementation(POOL_CONFIGURATOR);\\n    _updateImpl(POOL_CONFIGURATOR, newPoolConfiguratorImpl);\\n    emit PoolConfiguratorUpdated(oldPoolConfiguratorImpl, newPoolConfiguratorImpl);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPriceOracle() external view override returns (address) {\\n    return getAddress(PRICE_ORACLE);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPriceOracle(address newPriceOracle) external override onlyOwner {\\n    address oldPriceOracle = _addresses[PRICE_ORACLE];\\n    _addresses[PRICE_ORACLE] = newPriceOracle;\\n    emit PriceOracleUpdated(oldPriceOracle, newPriceOracle);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getACLManager() external view override returns (address) {\\n    return getAddress(ACL_MANAGER);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setACLManager(address newAclManager) external override onlyOwner {\\n    address oldAclManager = _addresses[ACL_MANAGER];\\n    _addresses[ACL_MANAGER] = newAclManager;\\n    emit ACLManagerUpdated(oldAclManager, newAclManager);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getACLAdmin() external view override returns (address) {\\n    return getAddress(ACL_ADMIN);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setACLAdmin(address newAclAdmin) external override onlyOwner {\\n    address oldAclAdmin = _addresses[ACL_ADMIN];\\n    _addresses[ACL_ADMIN] = newAclAdmin;\\n    emit ACLAdminUpdated(oldAclAdmin, newAclAdmin);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPriceOracleSentinel() external view override returns (address) {\\n    return getAddress(PRICE_ORACLE_SENTINEL);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external override onlyOwner {\\n    address oldPriceOracleSentinel = _addresses[PRICE_ORACLE_SENTINEL];\\n    _addresses[PRICE_ORACLE_SENTINEL] = newPriceOracleSentinel;\\n    emit PriceOracleSentinelUpdated(oldPriceOracleSentinel, newPriceOracleSentinel);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPoolDataProvider() external view override returns (address) {\\n    return getAddress(DATA_PROVIDER);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPoolDataProvider(address newDataProvider) external override onlyOwner {\\n    address oldDataProvider = _addresses[DATA_PROVIDER];\\n    _addresses[DATA_PROVIDER] = newDataProvider;\\n    emit PoolDataProviderUpdated(oldDataProvider, newDataProvider);\\n  }\\n\\n  /**\\n   * @notice Internal function to update the implementation of a specific proxied component of the protocol.\\n   * @dev If there is no proxy registered with the given identifier, it creates the proxy setting `newAddress`\\n   *   as implementation and calls the initialize() function on the proxy\\n   * @dev If there is already a proxy registered, it just updates the implementation to `newAddress` and\\n   *   calls the initialize() function via upgradeToAndCall() in the proxy\\n   * @param id The id of the proxy to be updated\\n   * @param newAddress The address of the new implementation\\n   */\\n  function _updateImpl(bytes32 id, address newAddress) internal {\\n    address proxyAddress = _addresses[id];\\n    InitializableImmutableAdminUpgradeabilityProxy proxy;\\n    bytes memory params = abi.encodeWithSignature('initialize(address)', address(this));\\n\\n    if (proxyAddress == address(0)) {\\n      proxy = new InitializableImmutableAdminUpgradeabilityProxy(address(this));\\n      _addresses[id] = proxyAddress = address(proxy);\\n      proxy.initialize(newAddress, params);\\n      emit ProxyCreated(id, proxyAddress, newAddress);\\n    } else {\\n      proxy = InitializableImmutableAdminUpgradeabilityProxy(payable(proxyAddress));\\n      proxy.upgradeToAndCall(newAddress, params);\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the identifier of the Aave market.\\n   * @param newMarketId The new id of the market\\n   */\\n  function _setMarketId(string memory newMarketId) internal {\\n    string memory oldMarketId = _marketId;\\n    _marketId = newMarketId;\\n    emit MarketIdSet(oldMarketId, newMarketId);\\n  }\\n\\n  /**\\n   * @notice Returns the the implementation contract of the proxy contract by its identifier.\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @dev It reverts if the registered address with the given id is not `InitializableImmutableAdminUpgradeabilityProxy`\\n   * @param id The id\\n   * @return The address of the implementation contract\\n   */\\n  function _getProxyImplementation(bytes32 id) internal returns (address) {\\n    address proxyAddress = _addresses[id];\\n    if (proxyAddress == address(0)) {\\n      return address(0);\\n    } else {\\n      address payable payableProxyAddress = payable(proxyAddress);\\n      return InitializableImmutableAdminUpgradeabilityProxy(payableProxyAddress).implementation();\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa3e001fb534cd318159374e8736ce1ce45afd08246e3fe6ce78ec85dd6281db0\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/protocol/configuration/PoolAddressesProvider.sol:PoolAddressesProvider","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":11470,"contract":"contracts/protocol/configuration/PoolAddressesProvider.sol:PoolAddressesProvider","label":"_marketId","offset":0,"slot":"1","type":"t_string_storage"},{"astId":11474,"contract":"contracts/protocol/configuration/PoolAddressesProvider.sol:PoolAddressesProvider","label":"_addresses","offset":0,"slot":"2","type":"t_mapping(t_bytes32,t_address)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_bytes32,t_address)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address)","numberOfBytes":"32","value":"t_address"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"getACLAdmin()":{"notice":"Returns the address of the ACL admin."},"getACLManager()":{"notice":"Returns the address of the ACL manager."},"getAddress(bytes32)":{"notice":"Returns an address by its identifier."},"getMarketId()":{"notice":"Returns the id of the Aave market to which this contract points to."},"getPool()":{"notice":"Returns the address of the Pool proxy."},"getPoolConfigurator()":{"notice":"Returns the address of the PoolConfigurator proxy."},"getPoolDataProvider()":{"notice":"Returns the address of the data provider."},"getPriceOracle()":{"notice":"Returns the address of the price oracle."},"getPriceOracleSentinel()":{"notice":"Returns the address of the price oracle sentinel."},"setACLAdmin(address)":{"notice":"Updates the address of the ACL admin."},"setACLManager(address)":{"notice":"Updates the address of the ACL manager."},"setAddress(bytes32,address)":{"notice":"Sets an address for an id replacing the address saved in the addresses map."},"setAddressAsProxy(bytes32,address)":{"notice":"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `newImplementationAddress`."},"setMarketId(string)":{"notice":"Associates an id with a specific PoolAddressesProvider."},"setPoolConfiguratorImpl(address)":{"notice":"Updates the implementation of the PoolConfigurator, or creates a proxy setting the new `PoolConfigurator` implementation when the function is called for the first time."},"setPoolDataProvider(address)":{"notice":"Updates the address of the data provider."},"setPoolImpl(address)":{"notice":"Updates the implementation of the Pool, or creates a proxy setting the new `pool` implementation when the function is called for the first time."},"setPriceOracle(address)":{"notice":"Updates the address of the price oracle."},"setPriceOracleSentinel(address)":{"notice":"Updates the address of the price oracle sentinel."}},"notice":"Main registry of addresses part of or connected to the protocol, including permissioned roles","version":1}}},"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol":{"PoolAddressesProviderRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressesProvider","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"AddressesProviderRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressesProvider","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"AddressesProviderUnregistered","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getAddressesProviderAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressesProvider","type":"address"}],"name":"getAddressesProviderIdByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressesProvidersList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"registerAddressesProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"}],"name":"unregisterAddressesProvider","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the market it is connected with, for example with `1` for the Aave main market and `2` for the next created.","kind":"dev","methods":{"constructor":{"details":"Constructor.","params":{"owner":"The owner address of this contract."}},"getAddressesProviderAddressById(uint256)":{"params":{"id":"The id of the market"},"returns":{"_0":"The address of the PoolAddressesProvider with the given id or zero address if it is not registered"}},"getAddressesProviderIdByAddress(address)":{"params":{"addressesProvider":"The address of the PoolAddressesProvider"},"returns":{"_0":"The id of the PoolAddressesProvider or 0 if is not registered"}},"getAddressesProvidersList()":{"returns":{"_0":"The list of addresses providers"}},"owner()":{"details":"Returns the address of the current owner."},"registerAddressesProvider(address,uint256)":{"details":"The PoolAddressesProvider must not already be registered in the registryThe id must not be used by an already registered PoolAddressesProvider","params":{"id":"The id for the new PoolAddressesProvider, referring to the market it belongs to","provider":"The address of the new PoolAddressesProvider"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing 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."},"unregisterAddressesProvider(address)":{"params":{"provider":"The PoolAddressesProvider address"}}},"title":"PoolAddressesProviderRegistry","version":1},"evm":{"bytecode":{"functionDebugData":{"@_12079":{"entryPoint":null,"id":12079,"parameterSlots":1,"returnSlots":0},"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":109,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":378,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1074:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:124"},"nodeType":"YulFunctionCall","src":"143:12:124"},"nodeType":"YulExpressionStatement","src":"143:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:124"},"nodeType":"YulFunctionCall","src":"112:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:124"},"nodeType":"YulFunctionCall","src":"108:32:124"},"nodeType":"YulIf","src":"105:52:124"},{"nodeType":"YulVariableDeclaration","src":"166:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:124"},"nodeType":"YulFunctionCall","src":"179:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:124"},"nodeType":"YulFunctionCall","src":"260:12:124"},"nodeType":"YulExpressionStatement","src":"260:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:124"},"nodeType":"YulFunctionCall","src":"235:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:124"},"nodeType":"YulFunctionCall","src":"224:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:124"},"nodeType":"YulFunctionCall","src":"214:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:124"},"nodeType":"YulFunctionCall","src":"207:50:124"},"nodeType":"YulIf","src":"204:70:124"},{"nodeType":"YulAssignment","src":"283:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:124","type":""}],"src":"14:290:124"},{"body":{"nodeType":"YulBlock","src":"483:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"493:6:124"},"nodeType":"YulFunctionCall","src":"493:21:124"},"nodeType":"YulExpressionStatement","src":"493:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"534:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"530:3:124"},"nodeType":"YulFunctionCall","src":"530:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"550:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"523:6:124"},"nodeType":"YulFunctionCall","src":"523:30:124"},"nodeType":"YulExpressionStatement","src":"523:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"584:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"569:3:124"},"nodeType":"YulFunctionCall","src":"569:18:124"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"589:34:124","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"562:6:124"},"nodeType":"YulFunctionCall","src":"562:62:124"},"nodeType":"YulExpressionStatement","src":"562:62:124"},{"nodeType":"YulAssignment","src":"633:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:124"},"nodeType":"YulFunctionCall","src":"641:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"633:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"460:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"474:4:124","type":""}],"src":"309:356:124"},{"body":{"nodeType":"YulBlock","src":"844:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"861:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"872:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"854:6:124"},"nodeType":"YulFunctionCall","src":"854:21:124"},"nodeType":"YulExpressionStatement","src":"854:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"906:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:124"},"nodeType":"YulFunctionCall","src":"891:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"911:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"884:6:124"},"nodeType":"YulFunctionCall","src":"884:30:124"},"nodeType":"YulExpressionStatement","src":"884:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"934:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"945:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"930:3:124"},"nodeType":"YulFunctionCall","src":"930:18:124"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"950:34:124","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"923:6:124"},"nodeType":"YulFunctionCall","src":"923:62:124"},"nodeType":"YulExpressionStatement","src":"923:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1005:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1016:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:124"},"nodeType":"YulFunctionCall","src":"1001:18:124"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1021:8:124","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"994:6:124"},"nodeType":"YulFunctionCall","src":"994:36:124"},"nodeType":"YulExpressionStatement","src":"994:36:124"},{"nodeType":"YulAssignment","src":"1039:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1062:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1047:3:124"},"nodeType":"YulFunctionCall","src":"1047:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1039:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"821:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"835:4:124","type":""}],"src":"670:402:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b50604051610edf380380610edf83398101604081905261002f9161017a565b600080546001600160a01b03191633908117825560405190918291600080516020610ebf833981519152908290a3506100678161006d565b506101aa565b6000546001600160a01b031633146100cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166101315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100c3565b600080546040516001600160a01b0380851693921691600080516020610ebf83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561018c57600080fd5b81516001600160a01b03811681146101a357600080fd5b9392505050565b610d06806101b96000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b14610123578063d0267be714610141578063d258191e14610185578063f2fde38b1461019857600080fd5b80630de267071461008d578063365ccbbf146100a257806357dc0566146100c0578063715018a61461011b575b600080fd5b6100a061009b366004610b02565b6101ab565b005b6100aa610375565b6040516100b79190610b24565b60405180910390f35b6100f66100ce366004610b7e565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b7565b6100a06103e4565b60005473ffffffffffffffffffffffffffffffffffffffff166100f6565b61017761014f366004610b02565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6040519081526020016100b7565b6100a0610193366004610b97565b6104d4565b6100a06101a6366004610b02565b6107c2565b60005473ffffffffffffffffffffffffffffffffffffffff163314610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160208181526040928390205483518085019094529183527f3700000000000000000000000000000000000000000000000000000000000000908301526102c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff8116600081815260016020818152604080842080548086526002845291852080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055948452919052915561032e82610973565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907f254723080701bde71d562cad0e967cef23d86bb27ee842c190a2596820f3b24190600090a35050565b606060038054806020026020016040519081016040528092919081815260200182805480156103da57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103af575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b60408051808201909152600181527f38000000000000000000000000000000000000000000000000000000000000006020820152816105c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b50600081815260026020908152604091829020548251808401909352600183527f38000000000000000000000000000000000000000000000000000000000000009183019190915273ffffffffffffffffffffffffffffffffffffffff1615610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604091829020548251808401909352600283527f383600000000000000000000000000000000000000000000000000000000000091830191909152156106ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff821660008181526001602081815260408084208690558584526002825280842080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116871790915560038054878752600490945282862084905593830184559284527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180549092168417909155518392917fc2e7cc813550ef0e7126cc0571281850ce5df2e9c400acf3589c38e4627f85f191a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b73ffffffffffffffffffffffffffffffffffffffff81166108e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610228565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081208054908290556003549091906109b090600190610c34565b905080821015610a6b576000600382815481106109cf576109cf610c72565b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169250829185908110610a0b57610a0b610c72565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526004909152604090208290555b6003805480610a7c57610a7c610ca1565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610afd57600080fd5b919050565b600060208284031215610b1457600080fd5b610b1d82610ad9565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610b7257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610b40565b50909695505050505050565b600060208284031215610b9057600080fd5b5035919050565b60008060408385031215610baa57600080fd5b610bb383610ad9565b946020939093013593505050565b600060208083528351808285015260005b81811015610bee57858101830151858201604001528201610bd2565b81811115610c00576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082821015610c6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122074c6839b1d1590350ddb9d0e34bfa72c909eff9235ab9689860c09f3723ca9d964736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xEDF CODESIZE SUB DUP1 PUSH2 0xEDF DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x17A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xEBF DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x67 DUP2 PUSH2 0x6D JUMP JUMPDEST POP PUSH2 0x1AA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x131 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xEBF DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD06 DUP1 PUSH2 0x1B9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xD0267BE7 EQ PUSH2 0x141 JUMPI DUP1 PUSH4 0xD258191E EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDE26707 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x365CCBBF EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0x57DC0566 EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0x375 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP2 SWAP1 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF6 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x3E4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xF6 JUMP JUMPDEST PUSH2 0x177 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xB97 JUMP JUMPDEST PUSH2 0x4D4 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x231 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE SWAP2 DUP4 MSTORE PUSH32 0x3700000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP4 ADD MSTORE PUSH2 0x2C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD DUP1 DUP7 MSTORE PUSH1 0x2 DUP5 MSTORE SWAP2 DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP5 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SSTORE PUSH2 0x32E DUP3 PUSH2 0x973 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x254723080701BDE71D562CAD0E967CEF23D86BB27EE842C190A2596820F3B241 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3DA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3AF JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x465 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x555 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x5C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3836000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO PUSH2 0x6EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP6 DUP5 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND DUP8 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD DUP8 DUP8 MSTORE PUSH1 0x4 SWAP1 SWAP5 MSTORE DUP3 DUP7 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 ADD DUP5 SSTORE SWAP3 DUP5 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP2 ADD DUP1 SLOAD SWAP1 SWAP3 AND DUP5 OR SWAP1 SWAP2 SSTORE MLOAD DUP4 SWAP3 SWAP2 PUSH32 0xC2E7CC813550EF0E7126CC0571281850CE5DF2E9C400ACF3589C38E4627F85F1 SWAP2 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x843 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x3 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x9B0 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0xC34 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0xA6B JUMPI PUSH1 0x0 PUSH1 0x3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x9CF JUMPI PUSH2 0x9CF PUSH2 0xC72 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0xA0B JUMPI PUSH2 0xA0B PUSH2 0xC72 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP1 PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0xCA1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE ADD SWAP1 SSTORE POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB1D DUP3 PUSH2 0xAD9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB72 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xB40 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBB3 DUP4 PUSH2 0xAD9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBEE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xBD2 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xC00 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC6D JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH21 0xC6839B1D1590350DDB9D0E34BFA72C909EFF9235AB SWAP7 DUP10 DUP7 0xC MULMOD RETURN PUSH19 0x3CA9D964736F6C634300080A00338BE0079C53 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"658:3439:83:-:0;;;1299:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;1332:24:83;1350:5;1332:17;:24::i;:::-;1299:62;658:3439;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;511:2:124;1196:67:11;;;493:21:124;;;530:18;;;523:30;589:34;569:18;;;562:62;641:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;872:2:124;1951:73:11::1;::::0;::::1;854:21:124::0;911:2;891:18;;;884:30;950:34;930:18;;;923:62;-1:-1:-1;;;1001:18:124;;;994:36;1047:19;;1951:73:11::1;670:402:124::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:290:124:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:124;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:124:o;670:402::-;658:3439:83;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_addToAddressesProvidersList_12252":{"entryPoint":null,"id":12252,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_removeFromAddressesProvidersList_12306":{"entryPoint":2419,"id":12306,"parameterSlots":1,"returnSlots":0},"@getAddressesProviderAddressById_12232":{"entryPoint":null,"id":12232,"parameterSlots":1,"returnSlots":1},"@getAddressesProviderIdByAddress_12218":{"entryPoint":null,"id":12218,"parameterSlots":1,"returnSlots":1},"@getAddressesProvidersList_12090":{"entryPoint":885,"id":12090,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@registerAddressesProvider_12154":{"entryPoint":1236,"id":12154,"parameterSlots":2,"returnSlots":0},"@renounceOwnership_1544":{"entryPoint":996,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":1986,"id":1572,"parameterSlots":1,"returnSlots":0},"@unregisterAddressesProvider_12204":{"entryPoint":427,"id":12204,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":2777,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2818,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2967,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":2942,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":2852,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3009,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3124,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x31":{"entryPoint":3233,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":3186,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4037:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"285:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:124"},"nodeType":"YulFunctionCall","src":"333:12:124"},"nodeType":"YulExpressionStatement","src":"333:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:124"},"nodeType":"YulFunctionCall","src":"302:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:124"},"nodeType":"YulFunctionCall","src":"298:32:124"},"nodeType":"YulIf","src":"295:52:124"},{"nodeType":"YulAssignment","src":"356:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:124"},"nodeType":"YulFunctionCall","src":"366:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:124","type":""}],"src":"215:186:124"},{"body":{"nodeType":"YulBlock","src":"557:530:124","statements":[{"nodeType":"YulVariableDeclaration","src":"567:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"577:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"571:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"588:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"606:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"617:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"602:3:124"},"nodeType":"YulFunctionCall","src":"602:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"592:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"647:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"629:6:124"},"nodeType":"YulFunctionCall","src":"629:21:124"},"nodeType":"YulExpressionStatement","src":"629:21:124"},{"nodeType":"YulVariableDeclaration","src":"659:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"670:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"663:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"685:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"705:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"699:5:124"},"nodeType":"YulFunctionCall","src":"699:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"689:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"728:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"736:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"721:6:124"},"nodeType":"YulFunctionCall","src":"721:22:124"},"nodeType":"YulExpressionStatement","src":"721:22:124"},{"nodeType":"YulAssignment","src":"752:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"763:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"774:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"759:3:124"},"nodeType":"YulFunctionCall","src":"759:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"752:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"786:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"804:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"812:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"800:3:124"},"nodeType":"YulFunctionCall","src":"800:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"790:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"824:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"833:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"828:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"892:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"913:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"928:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"922:5:124"},"nodeType":"YulFunctionCall","src":"922:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"937:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"918:3:124"},"nodeType":"YulFunctionCall","src":"918:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"906:6:124"},"nodeType":"YulFunctionCall","src":"906:75:124"},"nodeType":"YulExpressionStatement","src":"906:75:124"},{"nodeType":"YulAssignment","src":"994:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1005:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1010:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:124"},"nodeType":"YulFunctionCall","src":"1001:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"994:3:124"}]},{"nodeType":"YulAssignment","src":"1026:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1040:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1048:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1036:3:124"},"nodeType":"YulFunctionCall","src":"1036:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1026:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"854:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"857:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"851:2:124"},"nodeType":"YulFunctionCall","src":"851:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"865:18:124","statements":[{"nodeType":"YulAssignment","src":"867:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"876:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"879:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"872:3:124"},"nodeType":"YulFunctionCall","src":"872:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"867:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"847:3:124","statements":[]},"src":"843:218:124"},{"nodeType":"YulAssignment","src":"1070:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"1078:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1070:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"526:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"537:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"548:4:124","type":""}],"src":"406:681:124"},{"body":{"nodeType":"YulBlock","src":"1162:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"1208:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1217:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1220:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1210:6:124"},"nodeType":"YulFunctionCall","src":"1210:12:124"},"nodeType":"YulExpressionStatement","src":"1210:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1183:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1192:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1179:3:124"},"nodeType":"YulFunctionCall","src":"1179:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1204:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1175:3:124"},"nodeType":"YulFunctionCall","src":"1175:32:124"},"nodeType":"YulIf","src":"1172:52:124"},{"nodeType":"YulAssignment","src":"1233:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1256:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1243:12:124"},"nodeType":"YulFunctionCall","src":"1243:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1233:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1128:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1139:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1151:6:124","type":""}],"src":"1092:180:124"},{"body":{"nodeType":"YulBlock","src":"1378:125:124","statements":[{"nodeType":"YulAssignment","src":"1388:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1400:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1411:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1396:3:124"},"nodeType":"YulFunctionCall","src":"1396:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1388:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1430:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1445:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1453:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1441:3:124"},"nodeType":"YulFunctionCall","src":"1441:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1423:6:124"},"nodeType":"YulFunctionCall","src":"1423:74:124"},"nodeType":"YulExpressionStatement","src":"1423:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1347:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1358:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1369:4:124","type":""}],"src":"1277:226:124"},{"body":{"nodeType":"YulBlock","src":"1609:76:124","statements":[{"nodeType":"YulAssignment","src":"1619:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1642:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1627:3:124"},"nodeType":"YulFunctionCall","src":"1627:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1619:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1661:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1672:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1654:6:124"},"nodeType":"YulFunctionCall","src":"1654:25:124"},"nodeType":"YulExpressionStatement","src":"1654:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1578:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1589:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1600:4:124","type":""}],"src":"1508:177:124"},{"body":{"nodeType":"YulBlock","src":"1777:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"1823:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1832:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1835:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1825:6:124"},"nodeType":"YulFunctionCall","src":"1825:12:124"},"nodeType":"YulExpressionStatement","src":"1825:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1798:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1807:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1794:3:124"},"nodeType":"YulFunctionCall","src":"1794:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1819:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1790:3:124"},"nodeType":"YulFunctionCall","src":"1790:32:124"},"nodeType":"YulIf","src":"1787:52:124"},{"nodeType":"YulAssignment","src":"1848:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1877:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1858:18:124"},"nodeType":"YulFunctionCall","src":"1858:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1848:6:124"}]},{"nodeType":"YulAssignment","src":"1896:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1923:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1934:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1919:3:124"},"nodeType":"YulFunctionCall","src":"1919:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1906:12:124"},"nodeType":"YulFunctionCall","src":"1906:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1896:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1735:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1746:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1758:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1766:6:124","type":""}],"src":"1690:254:124"},{"body":{"nodeType":"YulBlock","src":"2123:182:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2140:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2151:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2133:6:124"},"nodeType":"YulFunctionCall","src":"2133:21:124"},"nodeType":"YulExpressionStatement","src":"2133:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2185:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2170:3:124"},"nodeType":"YulFunctionCall","src":"2170:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2190:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2163:6:124"},"nodeType":"YulFunctionCall","src":"2163:30:124"},"nodeType":"YulExpressionStatement","src":"2163:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:124"},"nodeType":"YulFunctionCall","src":"2209:18:124"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"2229:34:124","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2202:6:124"},"nodeType":"YulFunctionCall","src":"2202:62:124"},"nodeType":"YulExpressionStatement","src":"2202:62:124"},{"nodeType":"YulAssignment","src":"2273:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2285:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2296:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2281:3:124"},"nodeType":"YulFunctionCall","src":"2281:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2273:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2100:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2114:4:124","type":""}],"src":"1949:356:124"},{"body":{"nodeType":"YulBlock","src":"2431:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2441:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2451:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2445:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2469:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2480:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2462:6:124"},"nodeType":"YulFunctionCall","src":"2462:21:124"},"nodeType":"YulExpressionStatement","src":"2462:21:124"},{"nodeType":"YulVariableDeclaration","src":"2492:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2512:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2506:5:124"},"nodeType":"YulFunctionCall","src":"2506:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2496:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2539:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2550:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2535:3:124"},"nodeType":"YulFunctionCall","src":"2535:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"2555:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2528:6:124"},"nodeType":"YulFunctionCall","src":"2528:34:124"},"nodeType":"YulExpressionStatement","src":"2528:34:124"},{"nodeType":"YulVariableDeclaration","src":"2571:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2580:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2575:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2640:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2669:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"2680:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2665:3:124"},"nodeType":"YulFunctionCall","src":"2665:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"2684:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2661:3:124"},"nodeType":"YulFunctionCall","src":"2661:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2703:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"2711:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2699:3:124"},"nodeType":"YulFunctionCall","src":"2699:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2715:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2695:3:124"},"nodeType":"YulFunctionCall","src":"2695:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2689:5:124"},"nodeType":"YulFunctionCall","src":"2689:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2654:6:124"},"nodeType":"YulFunctionCall","src":"2654:66:124"},"nodeType":"YulExpressionStatement","src":"2654:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2601:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2604:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2598:2:124"},"nodeType":"YulFunctionCall","src":"2598:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2612:19:124","statements":[{"nodeType":"YulAssignment","src":"2614:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2623:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2626:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2619:3:124"},"nodeType":"YulFunctionCall","src":"2619:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2614:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2594:3:124","statements":[]},"src":"2590:140:124"},{"body":{"nodeType":"YulBlock","src":"2764:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2793:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"2804:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2789:3:124"},"nodeType":"YulFunctionCall","src":"2789:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"2813:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2785:3:124"},"nodeType":"YulFunctionCall","src":"2785:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"2818:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2778:6:124"},"nodeType":"YulFunctionCall","src":"2778:42:124"},"nodeType":"YulExpressionStatement","src":"2778:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2745:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2748:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2742:2:124"},"nodeType":"YulFunctionCall","src":"2742:13:124"},"nodeType":"YulIf","src":"2739:91:124"},{"nodeType":"YulAssignment","src":"2839:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2855:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2874:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2882:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2870:3:124"},"nodeType":"YulFunctionCall","src":"2870:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"2887:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2866:3:124"},"nodeType":"YulFunctionCall","src":"2866:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2851:3:124"},"nodeType":"YulFunctionCall","src":"2851:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"2957:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2847:3:124"},"nodeType":"YulFunctionCall","src":"2847:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2839:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2400:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2411:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2422:4:124","type":""}],"src":"2310:656:124"},{"body":{"nodeType":"YulBlock","src":"3145:228:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3162:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3173:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3155:6:124"},"nodeType":"YulFunctionCall","src":"3155:21:124"},"nodeType":"YulExpressionStatement","src":"3155:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3196:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3207:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3192:3:124"},"nodeType":"YulFunctionCall","src":"3192:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3212:2:124","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3185:6:124"},"nodeType":"YulFunctionCall","src":"3185:30:124"},"nodeType":"YulExpressionStatement","src":"3185:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3235:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3246:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3231:3:124"},"nodeType":"YulFunctionCall","src":"3231:18:124"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"3251:34:124","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3224:6:124"},"nodeType":"YulFunctionCall","src":"3224:62:124"},"nodeType":"YulExpressionStatement","src":"3224:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3306:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3317:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3302:3:124"},"nodeType":"YulFunctionCall","src":"3302:18:124"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"3322:8:124","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3295:6:124"},"nodeType":"YulFunctionCall","src":"3295:36:124"},"nodeType":"YulExpressionStatement","src":"3295:36:124"},{"nodeType":"YulAssignment","src":"3340:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3352:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3363:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3348:3:124"},"nodeType":"YulFunctionCall","src":"3348:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3340:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3122:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3136:4:124","type":""}],"src":"2971:402:124"},{"body":{"nodeType":"YulBlock","src":"3427:230:124","statements":[{"body":{"nodeType":"YulBlock","src":"3457:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3478:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3481:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3471:6:124"},"nodeType":"YulFunctionCall","src":"3471:88:124"},"nodeType":"YulExpressionStatement","src":"3471:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3579:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3582:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3572:6:124"},"nodeType":"YulFunctionCall","src":"3572:15:124"},"nodeType":"YulExpressionStatement","src":"3572:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3607:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3610:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3600:6:124"},"nodeType":"YulFunctionCall","src":"3600:15:124"},"nodeType":"YulExpressionStatement","src":"3600:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3443:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3446:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3440:2:124"},"nodeType":"YulFunctionCall","src":"3440:8:124"},"nodeType":"YulIf","src":"3437:188:124"},{"nodeType":"YulAssignment","src":"3634:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3646:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3649:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3642:3:124"},"nodeType":"YulFunctionCall","src":"3642:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3634:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3409:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3412:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3418:4:124","type":""}],"src":"3378:279:124"},{"body":{"nodeType":"YulBlock","src":"3694:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3711:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3714:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3704:6:124"},"nodeType":"YulFunctionCall","src":"3704:88:124"},"nodeType":"YulExpressionStatement","src":"3704:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3808:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3811:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3801:6:124"},"nodeType":"YulFunctionCall","src":"3801:15:124"},"nodeType":"YulExpressionStatement","src":"3801:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3832:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3835:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3825:6:124"},"nodeType":"YulFunctionCall","src":"3825:15:124"},"nodeType":"YulExpressionStatement","src":"3825:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3662:184:124"},{"body":{"nodeType":"YulBlock","src":"3883:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3900:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3903:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3893:6:124"},"nodeType":"YulFunctionCall","src":"3893:88:124"},"nodeType":"YulExpressionStatement","src":"3893:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3997:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4000:4:124","type":"","value":"0x31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3990:6:124"},"nodeType":"YulFunctionCall","src":"3990:15:124"},"nodeType":"YulExpressionStatement","src":"3990:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4021:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4024:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4014:6:124"},"nodeType":"YulFunctionCall","src":"4014:15:124"},"nodeType":"YulExpressionStatement","src":"4014:15:124"}]},"name":"panic_error_0x31","nodeType":"YulFunctionDefinition","src":"3851:184:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b14610123578063d0267be714610141578063d258191e14610185578063f2fde38b1461019857600080fd5b80630de267071461008d578063365ccbbf146100a257806357dc0566146100c0578063715018a61461011b575b600080fd5b6100a061009b366004610b02565b6101ab565b005b6100aa610375565b6040516100b79190610b24565b60405180910390f35b6100f66100ce366004610b7e565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b7565b6100a06103e4565b60005473ffffffffffffffffffffffffffffffffffffffff166100f6565b61017761014f366004610b02565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6040519081526020016100b7565b6100a0610193366004610b97565b6104d4565b6100a06101a6366004610b02565b6107c2565b60005473ffffffffffffffffffffffffffffffffffffffff163314610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160208181526040928390205483518085019094529183527f3700000000000000000000000000000000000000000000000000000000000000908301526102c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff8116600081815260016020818152604080842080548086526002845291852080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055948452919052915561032e82610973565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907f254723080701bde71d562cad0e967cef23d86bb27ee842c190a2596820f3b24190600090a35050565b606060038054806020026020016040519081016040528092919081815260200182805480156103da57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103af575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b60408051808201909152600181527f38000000000000000000000000000000000000000000000000000000000000006020820152816105c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b50600081815260026020908152604091829020548251808401909352600183527f38000000000000000000000000000000000000000000000000000000000000009183019190915273ffffffffffffffffffffffffffffffffffffffff1615610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604091829020548251808401909352600283527f383600000000000000000000000000000000000000000000000000000000000091830191909152156106ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff821660008181526001602081815260408084208690558584526002825280842080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116871790915560038054878752600490945282862084905593830184559284527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180549092168417909155518392917fc2e7cc813550ef0e7126cc0571281850ce5df2e9c400acf3589c38e4627f85f191a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b73ffffffffffffffffffffffffffffffffffffffff81166108e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610228565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081208054908290556003549091906109b090600190610c34565b905080821015610a6b576000600382815481106109cf576109cf610c72565b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169250829185908110610a0b57610a0b610c72565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526004909152604090208290555b6003805480610a7c57610a7c610ca1565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610afd57600080fd5b919050565b600060208284031215610b1457600080fd5b610b1d82610ad9565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610b7257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610b40565b50909695505050505050565b600060208284031215610b9057600080fd5b5035919050565b60008060408385031215610baa57600080fd5b610bb383610ad9565b946020939093013593505050565b600060208083528351808285015260005b81811015610bee57858101830151858201604001528201610bd2565b81811115610c00576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082821015610c6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122074c6839b1d1590350ddb9d0e34bfa72c909eff9235ab9689860c09f3723ca9d964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xD0267BE7 EQ PUSH2 0x141 JUMPI DUP1 PUSH4 0xD258191E EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDE26707 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x365CCBBF EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0x57DC0566 EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0x375 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP2 SWAP1 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF6 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x3E4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xF6 JUMP JUMPDEST PUSH2 0x177 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xB97 JUMP JUMPDEST PUSH2 0x4D4 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x231 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE SWAP2 DUP4 MSTORE PUSH32 0x3700000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP4 ADD MSTORE PUSH2 0x2C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD DUP1 DUP7 MSTORE PUSH1 0x2 DUP5 MSTORE SWAP2 DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP5 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SSTORE PUSH2 0x32E DUP3 PUSH2 0x973 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x254723080701BDE71D562CAD0E967CEF23D86BB27EE842C190A2596820F3B241 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3DA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3AF JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x465 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x555 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x5C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3836000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO PUSH2 0x6EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP6 DUP5 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND DUP8 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD DUP8 DUP8 MSTORE PUSH1 0x4 SWAP1 SWAP5 MSTORE DUP3 DUP7 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 ADD DUP5 SSTORE SWAP3 DUP5 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP2 ADD DUP1 SLOAD SWAP1 SWAP3 AND DUP5 OR SWAP1 SWAP2 SSTORE MLOAD DUP4 SWAP3 SWAP2 PUSH32 0xC2E7CC813550EF0E7126CC0571281850CE5DF2E9C400ACF3589C38E4627F85F1 SWAP2 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x843 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x3 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x9B0 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0xC34 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0xA6B JUMPI PUSH1 0x0 PUSH1 0x3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x9CF JUMPI PUSH2 0x9CF PUSH2 0xC72 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0xA0B JUMPI PUSH2 0xA0B PUSH2 0xC72 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP1 PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0xCA1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE ADD SWAP1 SSTORE POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB1D DUP3 PUSH2 0xAD9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB72 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xB40 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBB3 DUP4 PUSH2 0xAD9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBEE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xBD2 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xC00 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC6D JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH21 0xC6839B1D1590350DDB9D0E34BFA72C909EFF9235AB SWAP7 DUP10 DUP7 0xC MULMOD RETURN PUSH19 0x3CA9D964736F6C634300080A00330000000000 ","sourceMap":"658:3439:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2176:434;;;;;;:::i;:::-;;:::i;:::-;;1414:128;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2892:138;;;;;;:::i;:::-;2977:7;2999:26;;;:22;:26;;;;;;;;;2892:138;;;;1453:42:124;1441:55;;;1423:74;;1411:2;1396:18;2892:138:83;1277:226:124;1601:135:11;;;:::i;1018:71::-;1056:7;1078:6;;;1018:71;;2663:176:83;;;;;;:::i;:::-;2793:41;;2771:7;2793:41;;;:22;:41;;;;;;;2663:176;;;;1654:25:124;;;1642:2;1627:18;2663:176:83;1508:177:124;1595:528:83;;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;:::i;:::-;;:::i;2176:434:83:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;2151:2:124;1196:67:11;;;2133:21:124;;;2170:18;;;2163:30;2229:34;2209:18;;;2202:62;2281:18;;1196:67:11;;;;;;;;;2273:32:83::1;::::0;::::1;;::::0;;;:22:::1;:32;::::0;;;;;;;;;2312:40;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;2265:88:::1;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;2375:32:83::1;::::0;::::1;2359:13;2375:32:::0;;;:22:::1;:32;::::0;;;;;;;;;2413:29;;;:22:::1;:29:::0;;;;;:42;;;::::1;::::0;;2461:32;;;;;;:36;;2504:43:::1;2398:8:::0;2504:33:::1;:43::i;:::-;2559:46;::::0;2599:5;;2559:46:::1;::::0;::::1;::::0;::::1;::::0;;;::::1;2259:351;2176:434:::0;:::o;1414:128::-;1483:16;1514:23;1507:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1414:128;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;2151:2:124;1196:67:11;;;2133:21:124;;;2170:18;;;2163:30;2229:34;2209:18;;;2202:62;2281:18;;1196:67:11;1949:356:124;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1595:528:83:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;2151:2:124;1196:67:11;;;2133:21:124;;;2170:18;;;2163:30;2229:34;2209:18;;;2202:62;2281:18;;1196:67:11;1949:356:124;1196:67:11;1711:36:83::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;1702:7;1694:54:::1;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1800:1:83::1;1762:26:::0;;;:22:::1;:26;::::0;;;;;;;;;1804:36;;;;::::1;::::0;;;1762:26;1804:36;;::::1;::::0;;::::1;::::0;;;;1762:40:::1;:26;:40:::0;1754:87:::1;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1855:32:83::1;::::0;::::1;;::::0;;;:22:::1;:32;::::0;;;;;;;;;1894:39;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;1855:37;1847:87:::1;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1941:32:83::1;::::0;::::1;;::::0;;;:22:::1;:32;::::0;;;;;;;:37;;;1984:26;;;:22:::1;:26:::0;;;;;:37;;;;;::::1;::::0;::::1;::::0;;;3280:23;:30;;3241:36;;;:26;:36;;;;;;:69;;;3316:38;;;;;;;;;;;;;;;;;;;;;;2077:41;1941:37;;:32;2077:41:::1;::::0;::::1;1595:528:::0;;:::o;1875:226:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;2151:2:124;1196:67:11;;;2133:21:124;;;2170:18;;;2163:30;2229:34;2209:18;;;2202:62;2281:18;;1196:67:11;1949:356:124;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;3173:2:124;1951:73:11::1;::::0;::::1;3155:21:124::0;3212:2;3192:18;;;3185:30;3251:34;3231:18;;;3224:62;3322:8;3302:18;;;3295:36;3348:19;;1951:73:11::1;2971:402:124::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;3504:591:83:-;3596:36;;;3580:13;3596:36;;;:26;:36;;;;;;;3639:40;;;;3812:23;:30;3596:36;;3580:13;3812:34;;-1:-1:-1;;3812:34:83;:::i;:::-;3792:54;;3864:9;3856:5;:17;3852:204;;;3883:20;3906:23;3930:9;3906:34;;;;;;;;:::i;:::-;;;;;;;;;;;3948:23;:30;;3906:34;;;;;-1:-1:-1;3906:34:83;;3972:5;;3948:30;;;;;;:::i;:::-;;;;;;;;;;;;;:45;;;;;;;;;;;4001:40;;;;;;:26;:40;;;;;;:48;;;3852:204;4061:23;:29;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3504:591:83:o;14:196:124:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:124:o;406:681::-;577:2;629:21;;;699:13;;602:18;;;721:22;;;548:4;;577:2;800:15;;;;774:2;759:18;;;548:4;843:218;857:6;854:1;851:13;843:218;;;922:13;;937:42;918:62;906:75;;1036:15;;;;1001:12;;;;879:1;872:9;843:218;;;-1:-1:-1;1078:3:124;;406:681;-1:-1:-1;;;;;;406:681:124:o;1092:180::-;1151:6;1204:2;1192:9;1183:7;1179:23;1175:32;1172:52;;;1220:1;1217;1210:12;1172:52;-1:-1:-1;1243:23:124;;1092:180;-1:-1:-1;1092:180:124:o;1690:254::-;1758:6;1766;1819:2;1807:9;1798:7;1794:23;1790:32;1787:52;;;1835:1;1832;1825:12;1787:52;1858:29;1877:9;1858:29;:::i;:::-;1848:39;1934:2;1919:18;;;;1906:32;;-1:-1:-1;;;1690:254:124:o;2310:656::-;2422:4;2451:2;2480;2469:9;2462:21;2512:6;2506:13;2555:6;2550:2;2539:9;2535:18;2528:34;2580:1;2590:140;2604:6;2601:1;2598:13;2590:140;;;2699:14;;;2695:23;;2689:30;2665:17;;;2684:2;2661:26;2654:66;2619:10;;2590:140;;;2748:6;2745:1;2742:13;2739:91;;;2818:1;2813:2;2804:6;2793:9;2789:22;2785:31;2778:42;2739:91;-1:-1:-1;2882:2:124;2870:15;2887:66;2866:88;2851:104;;;;2957:2;2847:113;;2310:656;-1:-1:-1;;;2310:656:124:o;3378:279::-;3418:4;3446:1;3443;3440:8;3437:188;;;3481:77;3478:1;3471:88;3582:4;3579:1;3572:15;3610:4;3607:1;3600:15;3437:188;-1:-1:-1;3642:9:124;;3378:279::o;3662:184::-;3714:77;3711:1;3704:88;3811:4;3808:1;3801:15;3835:4;3832:1;3825:15;3851:184;3903:77;3900:1;3893:88;4000:4;3997:1;3990:15;4024:4;4021:1;4014:15"},"gasEstimates":{"creation":{"codeDepositCost":"666800","executionCost":"infinite","totalCost":"infinite"},"external":{"getAddressesProviderAddressById(uint256)":"2498","getAddressesProviderIdByAddress(address)":"2535","getAddressesProvidersList()":"infinite","owner()":"2307","registerAddressesProvider(address,uint256)":"infinite","renounceOwnership()":"30193","transferOwnership(address)":"30391","unregisterAddressesProvider(address)":"infinite"},"internal":{"_addToAddressesProvidersList(address)":"infinite","_removeFromAddressesProvidersList(address)":"110864"}},"methodIdentifiers":{"getAddressesProviderAddressById(uint256)":"57dc0566","getAddressesProviderIdByAddress(address)":"d0267be7","getAddressesProvidersList()":"365ccbbf","owner()":"8da5cb5b","registerAddressesProvider(address,uint256)":"d258191e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","unregisterAddressesProvider(address)":"0de26707"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AddressesProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AddressesProviderUnregistered\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getAddressesProviderAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"}],\"name\":\"getAddressesProviderIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressesProvidersList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"registerAddressesProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"unregisterAddressesProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the market it is connected with, for example with `1` for the Aave main market and `2` for the next created.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"owner\":\"The owner address of this contract.\"}},\"getAddressesProviderAddressById(uint256)\":{\"params\":{\"id\":\"The id of the market\"},\"returns\":{\"_0\":\"The address of the PoolAddressesProvider with the given id or zero address if it is not registered\"}},\"getAddressesProviderIdByAddress(address)\":{\"params\":{\"addressesProvider\":\"The address of the PoolAddressesProvider\"},\"returns\":{\"_0\":\"The id of the PoolAddressesProvider or 0 if is not registered\"}},\"getAddressesProvidersList()\":{\"returns\":{\"_0\":\"The list of addresses providers\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerAddressesProvider(address,uint256)\":{\"details\":\"The PoolAddressesProvider must not already be registered in the registryThe id must not be used by an already registered PoolAddressesProvider\",\"params\":{\"id\":\"The id for the new PoolAddressesProvider, referring to the market it belongs to\",\"provider\":\"The address of the new PoolAddressesProvider\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing 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.\"},\"unregisterAddressesProvider(address)\":{\"params\":{\"provider\":\"The PoolAddressesProvider address\"}}},\"title\":\"PoolAddressesProviderRegistry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAddressesProviderAddressById(uint256)\":{\"notice\":\"Returns the address of a registered PoolAddressesProvider\"},\"getAddressesProviderIdByAddress(address)\":{\"notice\":\"Returns the id of a registered PoolAddressesProvider\"},\"getAddressesProvidersList()\":{\"notice\":\"Returns the list of registered addresses providers\"},\"registerAddressesProvider(address,uint256)\":{\"notice\":\"Registers an addresses provider\"},\"unregisterAddressesProvider(address)\":{\"notice\":\"Removes an addresses provider from the list of registered addresses providers\"}},\"notice\":\"Main registry of PoolAddressesProvider of Aave markets.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol\":\"PoolAddressesProviderRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './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 * By default, the owner account will be the one that deploys the contract. This\\n * can 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 */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = 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    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"contracts/interfaces/IPoolAddressesProviderRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProviderRegistry\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool Addresses Provider Registry.\\n */\\ninterface IPoolAddressesProviderRegistry {\\n  /**\\n   * @dev Emitted when a new AddressesProvider is registered.\\n   * @param addressesProvider The address of the registered PoolAddressesProvider\\n   * @param id The id of the registered PoolAddressesProvider\\n   */\\n  event AddressesProviderRegistered(address indexed addressesProvider, uint256 indexed id);\\n\\n  /**\\n   * @dev Emitted when an AddressesProvider is unregistered.\\n   * @param addressesProvider The address of the unregistered PoolAddressesProvider\\n   * @param id The id of the unregistered PoolAddressesProvider\\n   */\\n  event AddressesProviderUnregistered(address indexed addressesProvider, uint256 indexed id);\\n\\n  /**\\n   * @notice Returns the list of registered addresses providers\\n   * @return The list of addresses providers\\n   */\\n  function getAddressesProvidersList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the id of a registered PoolAddressesProvider\\n   * @param addressesProvider The address of the PoolAddressesProvider\\n   * @return The id of the PoolAddressesProvider or 0 if is not registered\\n   */\\n  function getAddressesProviderIdByAddress(\\n    address addressesProvider\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of a registered PoolAddressesProvider\\n   * @param id The id of the market\\n   * @return The address of the PoolAddressesProvider with the given id or zero address if it is not registered\\n   */\\n  function getAddressesProviderAddressById(uint256 id) external view returns (address);\\n\\n  /**\\n   * @notice Registers an addresses provider\\n   * @dev The PoolAddressesProvider must not already be registered in the registry\\n   * @dev The id must not be used by an already registered PoolAddressesProvider\\n   * @param provider The address of the new PoolAddressesProvider\\n   * @param id The id for the new PoolAddressesProvider, referring to the market it belongs to\\n   */\\n  function registerAddressesProvider(address provider, uint256 id) external;\\n\\n  /**\\n   * @notice Removes an addresses provider from the list of registered addresses providers\\n   * @param provider The PoolAddressesProvider address\\n   */\\n  function unregisterAddressesProvider(address provider) external;\\n}\\n\",\"keccak256\":\"0x71ae9fcb634382141cce4c138230280f50b98fc47ba1d90cbc2d15ef8224fab1\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IPoolAddressesProviderRegistry} from '../../interfaces/IPoolAddressesProviderRegistry.sol';\\n\\n/**\\n * @title PoolAddressesProviderRegistry\\n * @author Aave\\n * @notice Main registry of PoolAddressesProvider of Aave markets.\\n * @dev Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the\\n * market it is connected with, for example with `1` for the Aave main market and `2` for the next created.\\n */\\ncontract PoolAddressesProviderRegistry is Ownable, IPoolAddressesProviderRegistry {\\n  // Map of address provider ids (addressesProvider => id)\\n  mapping(address => uint256) private _addressesProviderToId;\\n  // Map of id to address provider (id => addressesProvider)\\n  mapping(uint256 => address) private _idToAddressesProvider;\\n  // List of addresses providers\\n  address[] private _addressesProvidersList;\\n  // Map of address provider list indexes (addressesProvider => indexInList)\\n  mapping(address => uint256) private _addressesProvidersIndexes;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param owner The owner address of this contract.\\n   */\\n  constructor(address owner) {\\n    transferOwnership(owner);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function getAddressesProvidersList() external view override returns (address[] memory) {\\n    return _addressesProvidersList;\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function registerAddressesProvider(address provider, uint256 id) external override onlyOwner {\\n    require(id != 0, Errors.INVALID_ADDRESSES_PROVIDER_ID);\\n    require(_idToAddressesProvider[id] == address(0), Errors.INVALID_ADDRESSES_PROVIDER_ID);\\n    require(_addressesProviderToId[provider] == 0, Errors.ADDRESSES_PROVIDER_ALREADY_ADDED);\\n\\n    _addressesProviderToId[provider] = id;\\n    _idToAddressesProvider[id] = provider;\\n\\n    _addToAddressesProvidersList(provider);\\n    emit AddressesProviderRegistered(provider, id);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function unregisterAddressesProvider(address provider) external override onlyOwner {\\n    require(_addressesProviderToId[provider] != 0, Errors.ADDRESSES_PROVIDER_NOT_REGISTERED);\\n    uint256 oldId = _addressesProviderToId[provider];\\n    _idToAddressesProvider[oldId] = address(0);\\n    _addressesProviderToId[provider] = 0;\\n\\n    _removeFromAddressesProvidersList(provider);\\n\\n    emit AddressesProviderUnregistered(provider, oldId);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function getAddressesProviderIdByAddress(\\n    address addressesProvider\\n  ) external view override returns (uint256) {\\n    return _addressesProviderToId[addressesProvider];\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function getAddressesProviderAddressById(uint256 id) external view override returns (address) {\\n    return _idToAddressesProvider[id];\\n  }\\n\\n  /**\\n   * @notice Adds the addresses provider address to the list.\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function _addToAddressesProvidersList(address provider) internal {\\n    _addressesProvidersIndexes[provider] = _addressesProvidersList.length;\\n    _addressesProvidersList.push(provider);\\n  }\\n\\n  /**\\n   * @notice Removes the addresses provider address from the list.\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function _removeFromAddressesProvidersList(address provider) internal {\\n    uint256 index = _addressesProvidersIndexes[provider];\\n\\n    _addressesProvidersIndexes[provider] = 0;\\n\\n    // Swap the index of the last addresses provider in the list with the index of the provider to remove\\n    uint256 lastIndex = _addressesProvidersList.length - 1;\\n    if (index < lastIndex) {\\n      address lastProvider = _addressesProvidersList[lastIndex];\\n      _addressesProvidersList[index] = lastProvider;\\n      _addressesProvidersIndexes[lastProvider] = index;\\n    }\\n    _addressesProvidersList.pop();\\n  }\\n}\\n\",\"keccak256\":\"0x0055e677185fa3a8ca3586d4ad78d8fe5633772753b3c21a5c4507e0d4b6522e\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":12057,"contract":"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_addressesProviderToId","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":12061,"contract":"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_idToAddressesProvider","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_address)"},{"astId":12064,"contract":"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_addressesProvidersList","offset":0,"slot":"3","type":"t_array(t_address)dyn_storage"},{"astId":12068,"contract":"contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_addressesProvidersIndexes","offset":0,"slot":"4","type":"t_mapping(t_address,t_uint256)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"getAddressesProviderAddressById(uint256)":{"notice":"Returns the address of a registered PoolAddressesProvider"},"getAddressesProviderIdByAddress(address)":{"notice":"Returns the id of a registered PoolAddressesProvider"},"getAddressesProvidersList()":{"notice":"Returns the list of registered addresses providers"},"registerAddressesProvider(address,uint256)":{"notice":"Registers an addresses provider"},"unregisterAddressesProvider(address)":{"notice":"Removes an addresses provider from the list of registered addresses providers"}},"notice":"Main registry of PoolAddressesProvider of Aave markets.","version":1}}},"contracts/protocol/configuration/PriceOracleSentinel.sol":{"PriceOracleSentinel":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"contract ISequencerOracle","name":"oracle","type":"address"},{"internalType":"uint256","name":"gracePeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newGracePeriod","type":"uint256"}],"name":"GracePeriodUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newSequencerOracle","type":"address"}],"name":"SequencerOracleUpdated","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSequencerOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBorrowAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidationAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGracePeriod","type":"uint256"}],"name":"setGracePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSequencerOracle","type":"address"}],"name":"setSequencerOracle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Once the PriceOracle gets up after an outage/downtime, users can make their positions healthy during a grace  period. So the PriceOracle is considered completely up once its up and the grace period passed.","kind":"dev","methods":{"constructor":{"details":"Constructor","params":{"gracePeriod":"The duration of the grace period in seconds","oracle":"The address of the SequencerOracle","provider":"The address of the PoolAddressesProvider"}},"getGracePeriod()":{"returns":{"_0":"The duration of the grace period"}},"getSequencerOracle()":{"returns":{"_0":"The address of the sequencer oracle contract"}},"isBorrowAllowed()":{"details":"Operation not allowed when PriceOracle is down or grace period not passed.","returns":{"_0":"True if the `borrow` operation is allowed, false otherwise."}},"isLiquidationAllowed()":{"details":"Operation not allowed when PriceOracle is down or grace period not passed.","returns":{"_0":"True if the `liquidation` operation is allowed, false otherwise."}},"setGracePeriod(uint256)":{"params":{"newGracePeriod":"The value of the new grace period duration"}},"setSequencerOracle(address)":{"params":{"newSequencerOracle":"The address of the new Sequencer Oracle to use"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider contract","returns":{"_0":"The address of the PoolAddressesProvider contract"}}},"title":"PriceOracleSentinel","version":1},"evm":{"bytecode":{"functionDebugData":{"@_12410":{"entryPoint":null,"id":12410,"parameterSlots":3,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_contract$_ISequencerOracle_$6206t_uint256_fromMemory":{"entryPoint":118,"id":null,"parameterSlots":2,"returnSlots":3},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":94,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:726:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:124"},"nodeType":"YulFunctionCall","src":"149:12:124"},"nodeType":"YulExpressionStatement","src":"149:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:124"},"nodeType":"YulFunctionCall","src":"128:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:124"},"nodeType":"YulFunctionCall","src":"124:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:124"},"nodeType":"YulFunctionCall","src":"113:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:124"},"nodeType":"YulFunctionCall","src":"103:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:124"},"nodeType":"YulFunctionCall","src":"96:50:124"},"nodeType":"YulIf","src":"93:70:124"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:124","type":""}],"src":"14:155:124"},{"body":{"nodeType":"YulBlock","src":"345:379:124","statements":[{"body":{"nodeType":"YulBlock","src":"391:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"400:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"403:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"393:6:124"},"nodeType":"YulFunctionCall","src":"393:12:124"},"nodeType":"YulExpressionStatement","src":"393:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"366:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"362:3:124"},"nodeType":"YulFunctionCall","src":"362:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"387:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"358:3:124"},"nodeType":"YulFunctionCall","src":"358:32:124"},"nodeType":"YulIf","src":"355:52:124"},{"nodeType":"YulVariableDeclaration","src":"416:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"435:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"429:5:124"},"nodeType":"YulFunctionCall","src":"429:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"420:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"503:5:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"454:48:124"},"nodeType":"YulFunctionCall","src":"454:55:124"},"nodeType":"YulExpressionStatement","src":"454:55:124"},{"nodeType":"YulAssignment","src":"518:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"528:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"518:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"542:40:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"567:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"578:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"557:5:124"},"nodeType":"YulFunctionCall","src":"557:25:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"546:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"640:7:124"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"591:48:124"},"nodeType":"YulFunctionCall","src":"591:57:124"},"nodeType":"YulExpressionStatement","src":"591:57:124"},{"nodeType":"YulAssignment","src":"657:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"667:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"657:6:124"}]},{"nodeType":"YulAssignment","src":"683:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"703:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"714:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"699:3:124"},"nodeType":"YulFunctionCall","src":"699:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"693:5:124"},"nodeType":"YulFunctionCall","src":"693:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"683:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_contract$_ISequencerOracle_$6206t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"295:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"306:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"318:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"326:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"334:6:124","type":""}],"src":"174:550:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_contract$_ISequencerOracle_$6206t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        value1 := value_1\n        value2 := mload(add(headStart, 64))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b5060405161095538038061095583398101604081905261002f91610076565b6001600160a01b03928316608052600080546001600160a01b03191692909316919091179091556001556100b9565b6001600160a01b038116811461007357600080fd5b50565b60008060006060848603121561008b57600080fd5b83516100968161005e565b60208501519093506100a78161005e565b80925050604084015190509250925092565b6080516108746100e160003960008181608701528181610155015261036a01526108746000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80637a5d20ea1161005b5780637a5d20ea146100f1578063dbd1838814610109578063f0aef31c1461011a578063f2f659601461012f57600080fd5b80630542975c1461008257806312168dc2146100d357806349aa2e81146100f1575b600080fd5b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff166100a9565b6100f9610142565b60405190151581526020016100ca565b6001546040519081526020016100ca565b61012d6101283660046106a2565b610151565b005b61012d61013d3660046106c6565b610366565b600061014c6105c0565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e291906106df565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa15801561024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027391906106fc565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906102ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e1919061071e565b60405180910390fd5b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527f95cbf1d8f44ec81ff345ed9cf2fe53b6a6473e072bf046ee412f198c54dba449906020015b60405180910390a15050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f791906106df565b6040517f674b5e4d00000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff82169063674b5e4d90602401602060405180830381865afa158015610464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048891906106fc565b8061051c57506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c91906106fc565b6040518060400160405280600181526020017f34000000000000000000000000000000000000000000000000000000000000008152509061058a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e1919061071e565b5060018290556040518281527f33d1191f5a3abfe19d468d51bb5ece97489f1277a912a5b5c65992fc279ad3d49060200161035a565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065591906107b0565b5093505092505081600014801561067657506001546106748242610800565b115b9250505090565b73ffffffffffffffffffffffffffffffffffffffff8116811461069f57600080fd5b50565b6000602082840312156106b457600080fd5b81356106bf8161067d565b9392505050565b6000602082840312156106d857600080fd5b5035919050565b6000602082840312156106f157600080fd5b81516106bf8161067d565b60006020828403121561070e57600080fd5b815180151581146106bf57600080fd5b600060208083528351808285015260005b8181101561074b5785810183015185820160400152820161072f565b8181111561075d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b805169ffffffffffffffffffff811681146107ab57600080fd5b919050565b600080600080600060a086880312156107c857600080fd5b6107d186610791565b94506020860151935060408601519250606086015191506107f460808701610791565b90509295509295909350565b600082821015610839577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea26469706673582212208e2e87e4ecd8046960b7bdb3e12e8ae397fead10c61338dcab7ae456e8dfd05464736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x955 CODESIZE SUB DUP1 PUSH2 0x955 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x76 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x80 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SSTORE PUSH2 0xB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x96 DUP2 PUSH2 0x5E JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0xA7 DUP2 PUSH2 0x5E JUMP JUMPDEST DUP1 SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x874 PUSH2 0xE1 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0x87 ADD MSTORE DUP2 DUP2 PUSH2 0x155 ADD MSTORE PUSH2 0x36A ADD MSTORE PUSH2 0x874 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A5D20EA GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7A5D20EA EQ PUSH2 0xF1 JUMPI DUP1 PUSH4 0xDBD18388 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0xF0AEF31C EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0xF2F65960 EQ PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x12168DC2 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x49AA2E81 EQ PUSH2 0xF1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA9 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xA9 JUMP JUMPDEST PUSH2 0xF9 PUSH2 0x142 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCA JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCA JUMP JUMPDEST PUSH2 0x12D PUSH2 0x128 CALLDATASIZE PUSH1 0x4 PUSH2 0x6A2 JUMP JUMPDEST PUSH2 0x151 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12D PUSH2 0x13D CALLDATASIZE PUSH1 0x4 PUSH2 0x6C6 JUMP JUMPDEST PUSH2 0x366 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14C PUSH2 0x5C0 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E2 SWAP2 SWAP1 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x6FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E1 SWAP2 SWAP1 PUSH2 0x71E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x95CBF1D8F44EC81FF345ED9CF2FE53B6A6473E072BF046EE412F198C54DBA449 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3F7 SWAP2 SWAP1 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x674B5E4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x674B5E4D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x464 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x488 SWAP2 SWAP1 PUSH2 0x6FC JUMP JUMPDEST DUP1 PUSH2 0x51C JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x51C SWAP2 SWAP1 PUSH2 0x6FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x58A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E1 SWAP2 SWAP1 PUSH2 0x71E JUMP JUMPDEST POP PUSH1 0x1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x33D1191F5A3ABFE19D468D51BB5ECE97489F1277A912A5B5C65992FC279AD3D4 SWAP1 PUSH1 0x20 ADD PUSH2 0x35A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x631 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x655 SWAP2 SWAP1 PUSH2 0x7B0 JUMP JUMPDEST POP SWAP4 POP POP SWAP3 POP POP DUP2 PUSH1 0x0 EQ DUP1 ISZERO PUSH2 0x676 JUMPI POP PUSH1 0x1 SLOAD PUSH2 0x674 DUP3 TIMESTAMP PUSH2 0x800 JUMP JUMPDEST GT JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x69F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6BF DUP2 PUSH2 0x67D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x6BF DUP2 PUSH2 0x67D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x70E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x74B JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x72F JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x75D JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D1 DUP7 PUSH2 0x791 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH2 0x7F4 PUSH1 0x80 DUP8 ADD PUSH2 0x791 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x839 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 0x2E DUP8 0xE4 0xEC 0xD8 DIV PUSH10 0x60B7BDB3E12E8AE397FE 0xAD LT 0xC6 SGT CODESIZE 0xDC 0xAB PUSH27 0xE456E8DFD05464736F6C634300080A003300000000000000000000 ","sourceMap":"776:2724:84:-:0;;;1843:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1940:29:84;;;;;1975:16;:25;;-1:-1:-1;;;;;;1975:25:84;;;;;;;;;;;;-1:-1:-1;2006:26:84;776:2724;;14:155:124;-1:-1:-1;;;;;113:31:124;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:550::-;318:6;326;334;387:2;375:9;366:7;362:23;358:32;355:52;;;403:1;400;393:12;355:52;435:9;429:16;454:55;503:5;454:55;:::i;:::-;578:2;563:18;;557:25;528:5;;-1:-1:-1;591:57:124;557:25;591:57;:::i;:::-;667:7;657:17;;;714:2;703:9;699:18;693:25;683:35;;174:550;;;;;:::o;:::-;776:2724:84;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_12380":{"entryPoint":null,"id":12380,"parameterSlots":0,"returnSlots":0},"@_isUpAndGracePeriodPassed_12458":{"entryPoint":1472,"id":12458,"parameterSlots":0,"returnSlots":1},"@getGracePeriod_12515":{"entryPoint":null,"id":12515,"parameterSlots":0,"returnSlots":1},"@getSequencerOracle_12506":{"entryPoint":null,"id":12506,"parameterSlots":0,"returnSlots":1},"@isBorrowAllowed_12421":{"entryPoint":322,"id":12421,"parameterSlots":0,"returnSlots":1},"@isLiquidationAllowed_12432":{"entryPoint":null,"id":12432,"parameterSlots":0,"returnSlots":1},"@setGracePeriod_12494":{"entryPoint":870,"id":12494,"parameterSlots":1,"returnSlots":0},"@setSequencerOracle_12477":{"entryPoint":337,"id":12477,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":1698,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":1759,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":1788,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":1734,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory":{"entryPoint":1968,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_uint80_fromMemory":{"entryPoint":1937,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1822,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":2048,"id":null,"parameterSlots":2,"returnSlots":1},"validator_revert_address":{"entryPoint":1661,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3619:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"377:125:124","statements":[{"nodeType":"YulAssignment","src":"387:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"399:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"410:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"395:3:124"},"nodeType":"YulFunctionCall","src":"395:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"387:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"429:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"444:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"452:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"440:3:124"},"nodeType":"YulFunctionCall","src":"440:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"422:6:124"},"nodeType":"YulFunctionCall","src":"422:74:124"},"nodeType":"YulExpressionStatement","src":"422:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"346:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"357:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"368:4:124","type":""}],"src":"276:226:124"},{"body":{"nodeType":"YulBlock","src":"602:92:124","statements":[{"nodeType":"YulAssignment","src":"612:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"624:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"635:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"620:3:124"},"nodeType":"YulFunctionCall","src":"620:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"612:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"654:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"679:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"672:6:124"},"nodeType":"YulFunctionCall","src":"672:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"665:6:124"},"nodeType":"YulFunctionCall","src":"665:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"647:6:124"},"nodeType":"YulFunctionCall","src":"647:41:124"},"nodeType":"YulExpressionStatement","src":"647:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"571:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"582:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"593:4:124","type":""}],"src":"507:187:124"},{"body":{"nodeType":"YulBlock","src":"800:76:124","statements":[{"nodeType":"YulAssignment","src":"810:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"833:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"818:3:124"},"nodeType":"YulFunctionCall","src":"818:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"810:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"852:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"863:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"845:6:124"},"nodeType":"YulFunctionCall","src":"845:25:124"},"nodeType":"YulExpressionStatement","src":"845:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"769:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"780:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"791:4:124","type":""}],"src":"699:177:124"},{"body":{"nodeType":"YulBlock","src":"926:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"1013:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1022:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1025:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1015:6:124"},"nodeType":"YulFunctionCall","src":"1015:12:124"},"nodeType":"YulExpressionStatement","src":"1015:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"949:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"960:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"967:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"956:3:124"},"nodeType":"YulFunctionCall","src":"956:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"946:2:124"},"nodeType":"YulFunctionCall","src":"946:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"939:6:124"},"nodeType":"YulFunctionCall","src":"939:73:124"},"nodeType":"YulIf","src":"936:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"915:5:124","type":""}],"src":"881:154:124"},{"body":{"nodeType":"YulBlock","src":"1110:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"1156:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1165:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1168:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1158:6:124"},"nodeType":"YulFunctionCall","src":"1158:12:124"},"nodeType":"YulExpressionStatement","src":"1158:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1131:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1140:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1127:3:124"},"nodeType":"YulFunctionCall","src":"1127:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1152:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1123:3:124"},"nodeType":"YulFunctionCall","src":"1123:32:124"},"nodeType":"YulIf","src":"1120:52:124"},{"nodeType":"YulVariableDeclaration","src":"1181:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1207:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1194:12:124"},"nodeType":"YulFunctionCall","src":"1194:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1185:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1251:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1226:24:124"},"nodeType":"YulFunctionCall","src":"1226:31:124"},"nodeType":"YulExpressionStatement","src":"1226:31:124"},{"nodeType":"YulAssignment","src":"1266:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1276:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1266:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1076:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1087:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1099:6:124","type":""}],"src":"1040:247:124"},{"body":{"nodeType":"YulBlock","src":"1362:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"1408:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1417:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1420:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1410:6:124"},"nodeType":"YulFunctionCall","src":"1410:12:124"},"nodeType":"YulExpressionStatement","src":"1410:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1383:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1392:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1379:3:124"},"nodeType":"YulFunctionCall","src":"1379:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1404:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1375:3:124"},"nodeType":"YulFunctionCall","src":"1375:32:124"},"nodeType":"YulIf","src":"1372:52:124"},{"nodeType":"YulAssignment","src":"1433:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1456:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1443:12:124"},"nodeType":"YulFunctionCall","src":"1443:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1433:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1328:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1339:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1351:6:124","type":""}],"src":"1292:180:124"},{"body":{"nodeType":"YulBlock","src":"1558:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"1604:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1613:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1616:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1606:6:124"},"nodeType":"YulFunctionCall","src":"1606:12:124"},"nodeType":"YulExpressionStatement","src":"1606:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1579:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1588:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1575:3:124"},"nodeType":"YulFunctionCall","src":"1575:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1600:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1571:3:124"},"nodeType":"YulFunctionCall","src":"1571:32:124"},"nodeType":"YulIf","src":"1568:52:124"},{"nodeType":"YulVariableDeclaration","src":"1629:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1648:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1642:5:124"},"nodeType":"YulFunctionCall","src":"1642:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1633:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1692:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1667:24:124"},"nodeType":"YulFunctionCall","src":"1667:31:124"},"nodeType":"YulExpressionStatement","src":"1667:31:124"},{"nodeType":"YulAssignment","src":"1707:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1717:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1707:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1524:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1535:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1547:6:124","type":""}],"src":"1477:251:124"},{"body":{"nodeType":"YulBlock","src":"1811:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"1857:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1866:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1869:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1859:6:124"},"nodeType":"YulFunctionCall","src":"1859:12:124"},"nodeType":"YulExpressionStatement","src":"1859:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1832:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1841:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1828:3:124"},"nodeType":"YulFunctionCall","src":"1828:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1853:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1824:3:124"},"nodeType":"YulFunctionCall","src":"1824:32:124"},"nodeType":"YulIf","src":"1821:52:124"},{"nodeType":"YulVariableDeclaration","src":"1882:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1901:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1895:5:124"},"nodeType":"YulFunctionCall","src":"1895:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1886:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1964:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1973:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1976:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1966:6:124"},"nodeType":"YulFunctionCall","src":"1966:12:124"},"nodeType":"YulExpressionStatement","src":"1966:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1933:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1954:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1947:6:124"},"nodeType":"YulFunctionCall","src":"1947:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1940:6:124"},"nodeType":"YulFunctionCall","src":"1940:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1930:2:124"},"nodeType":"YulFunctionCall","src":"1930:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1923:6:124"},"nodeType":"YulFunctionCall","src":"1923:40:124"},"nodeType":"YulIf","src":"1920:60:124"},{"nodeType":"YulAssignment","src":"1989:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1999:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1989:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1788:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1800:6:124","type":""}],"src":"1733:277:124"},{"body":{"nodeType":"YulBlock","src":"2136:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2146:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2156:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2150:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2174:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2185:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2167:6:124"},"nodeType":"YulFunctionCall","src":"2167:21:124"},"nodeType":"YulExpressionStatement","src":"2167:21:124"},{"nodeType":"YulVariableDeclaration","src":"2197:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2217:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2211:5:124"},"nodeType":"YulFunctionCall","src":"2211:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2201:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2244:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2255:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2240:3:124"},"nodeType":"YulFunctionCall","src":"2240:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"2260:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2233:6:124"},"nodeType":"YulFunctionCall","src":"2233:34:124"},"nodeType":"YulExpressionStatement","src":"2233:34:124"},{"nodeType":"YulVariableDeclaration","src":"2276:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2285:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2280:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2345:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2374:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"2385:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2370:3:124"},"nodeType":"YulFunctionCall","src":"2370:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"2389:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2366:3:124"},"nodeType":"YulFunctionCall","src":"2366:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2408:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"2416:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2404:3:124"},"nodeType":"YulFunctionCall","src":"2404:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2420:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2400:3:124"},"nodeType":"YulFunctionCall","src":"2400:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2394:5:124"},"nodeType":"YulFunctionCall","src":"2394:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2359:6:124"},"nodeType":"YulFunctionCall","src":"2359:66:124"},"nodeType":"YulExpressionStatement","src":"2359:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2306:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2309:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2303:2:124"},"nodeType":"YulFunctionCall","src":"2303:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2317:19:124","statements":[{"nodeType":"YulAssignment","src":"2319:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2328:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2331:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2324:3:124"},"nodeType":"YulFunctionCall","src":"2324:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2319:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2299:3:124","statements":[]},"src":"2295:140:124"},{"body":{"nodeType":"YulBlock","src":"2469:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2498:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"2509:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2494:3:124"},"nodeType":"YulFunctionCall","src":"2494:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"2518:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2490:3:124"},"nodeType":"YulFunctionCall","src":"2490:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"2523:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2483:6:124"},"nodeType":"YulFunctionCall","src":"2483:42:124"},"nodeType":"YulExpressionStatement","src":"2483:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2450:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2453:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2447:2:124"},"nodeType":"YulFunctionCall","src":"2447:13:124"},"nodeType":"YulIf","src":"2444:91:124"},{"nodeType":"YulAssignment","src":"2544:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2560:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2579:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2587:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2575:3:124"},"nodeType":"YulFunctionCall","src":"2575:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"2592:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2571:3:124"},"nodeType":"YulFunctionCall","src":"2571:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2556:3:124"},"nodeType":"YulFunctionCall","src":"2556:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"2662:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2552:3:124"},"nodeType":"YulFunctionCall","src":"2552:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2544:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2105:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2116:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2127:4:124","type":""}],"src":"2015:656:124"},{"body":{"nodeType":"YulBlock","src":"2735:120:124","statements":[{"nodeType":"YulAssignment","src":"2745:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2760:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2754:5:124"},"nodeType":"YulFunctionCall","src":"2754:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2745:5:124"}]},{"body":{"nodeType":"YulBlock","src":"2833:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2842:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2845:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2835:6:124"},"nodeType":"YulFunctionCall","src":"2835:12:124"},"nodeType":"YulExpressionStatement","src":"2835:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2789:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2800:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2807:22:124","type":"","value":"0xffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2796:3:124"},"nodeType":"YulFunctionCall","src":"2796:34:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2786:2:124"},"nodeType":"YulFunctionCall","src":"2786:45:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2779:6:124"},"nodeType":"YulFunctionCall","src":"2779:53:124"},"nodeType":"YulIf","src":"2776:73:124"}]},"name":"abi_decode_uint80_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2714:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2725:5:124","type":""}],"src":"2676:179:124"},{"body":{"nodeType":"YulBlock","src":"3006:327:124","statements":[{"body":{"nodeType":"YulBlock","src":"3053:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3062:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3065:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3055:6:124"},"nodeType":"YulFunctionCall","src":"3055:12:124"},"nodeType":"YulExpressionStatement","src":"3055:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3027:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3036:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3023:3:124"},"nodeType":"YulFunctionCall","src":"3023:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3048:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3019:3:124"},"nodeType":"YulFunctionCall","src":"3019:33:124"},"nodeType":"YulIf","src":"3016:53:124"},{"nodeType":"YulAssignment","src":"3078:49:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3117:9:124"}],"functionName":{"name":"abi_decode_uint80_fromMemory","nodeType":"YulIdentifier","src":"3088:28:124"},"nodeType":"YulFunctionCall","src":"3088:39:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3078:6:124"}]},{"nodeType":"YulAssignment","src":"3136:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3156:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3167:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3152:3:124"},"nodeType":"YulFunctionCall","src":"3152:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3146:5:124"},"nodeType":"YulFunctionCall","src":"3146:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3136:6:124"}]},{"nodeType":"YulAssignment","src":"3180:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3200:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3211:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3196:3:124"},"nodeType":"YulFunctionCall","src":"3196:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3190:5:124"},"nodeType":"YulFunctionCall","src":"3190:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3180:6:124"}]},{"nodeType":"YulAssignment","src":"3224:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3244:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3255:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3240:3:124"},"nodeType":"YulFunctionCall","src":"3240:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3234:5:124"},"nodeType":"YulFunctionCall","src":"3234:25:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3224:6:124"}]},{"nodeType":"YulAssignment","src":"3268:59:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3311:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3322:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3307:3:124"},"nodeType":"YulFunctionCall","src":"3307:19:124"}],"functionName":{"name":"abi_decode_uint80_fromMemory","nodeType":"YulIdentifier","src":"3278:28:124"},"nodeType":"YulFunctionCall","src":"3278:49:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3268:6:124"}]}]},"name":"abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2940:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2951:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2963:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2971:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2979:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2987:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2995:6:124","type":""}],"src":"2860:473:124"},{"body":{"nodeType":"YulBlock","src":"3387:230:124","statements":[{"body":{"nodeType":"YulBlock","src":"3417:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3438:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3441:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3431:6:124"},"nodeType":"YulFunctionCall","src":"3431:88:124"},"nodeType":"YulExpressionStatement","src":"3431:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3539:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3542:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3532:6:124"},"nodeType":"YulFunctionCall","src":"3532:15:124"},"nodeType":"YulExpressionStatement","src":"3532:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3567:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3570:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3560:6:124"},"nodeType":"YulFunctionCall","src":"3560:15:124"},"nodeType":"YulExpressionStatement","src":"3560:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3403:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3406:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3400:2:124"},"nodeType":"YulFunctionCall","src":"3400:8:124"},"nodeType":"YulIf","src":"3397:188:124"},{"nodeType":"YulAssignment","src":"3594:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3606:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3609:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3602:3:124"},"nodeType":"YulFunctionCall","src":"3602:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3594:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3369:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3372:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3378:4:124","type":""}],"src":"3338:279:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_uint80_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_uint80_fromMemory(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := abi_decode_uint80_fromMemory(add(headStart, 128))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"12380":[{"length":32,"start":135},{"length":32,"start":341},{"length":32,"start":874}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061007d5760003560e01c80637a5d20ea1161005b5780637a5d20ea146100f1578063dbd1838814610109578063f0aef31c1461011a578063f2f659601461012f57600080fd5b80630542975c1461008257806312168dc2146100d357806349aa2e81146100f1575b600080fd5b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff166100a9565b6100f9610142565b60405190151581526020016100ca565b6001546040519081526020016100ca565b61012d6101283660046106a2565b610151565b005b61012d61013d3660046106c6565b610366565b600061014c6105c0565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e291906106df565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa15801561024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027391906106fc565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906102ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e1919061071e565b60405180910390fd5b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527f95cbf1d8f44ec81ff345ed9cf2fe53b6a6473e072bf046ee412f198c54dba449906020015b60405180910390a15050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f791906106df565b6040517f674b5e4d00000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff82169063674b5e4d90602401602060405180830381865afa158015610464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048891906106fc565b8061051c57506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c91906106fc565b6040518060400160405280600181526020017f34000000000000000000000000000000000000000000000000000000000000008152509061058a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e1919061071e565b5060018290556040518281527f33d1191f5a3abfe19d468d51bb5ece97489f1277a912a5b5c65992fc279ad3d49060200161035a565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065591906107b0565b5093505092505081600014801561067657506001546106748242610800565b115b9250505090565b73ffffffffffffffffffffffffffffffffffffffff8116811461069f57600080fd5b50565b6000602082840312156106b457600080fd5b81356106bf8161067d565b9392505050565b6000602082840312156106d857600080fd5b5035919050565b6000602082840312156106f157600080fd5b81516106bf8161067d565b60006020828403121561070e57600080fd5b815180151581146106bf57600080fd5b600060208083528351808285015260005b8181101561074b5785810183015185820160400152820161072f565b8181111561075d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b805169ffffffffffffffffffff811681146107ab57600080fd5b919050565b600080600080600060a086880312156107c857600080fd5b6107d186610791565b94506020860151935060408601519250606086015191506107f460808701610791565b90509295509295909350565b600082821015610839577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea26469706673582212208e2e87e4ecd8046960b7bdb3e12e8ae397fead10c61338dcab7ae456e8dfd05464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A5D20EA GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7A5D20EA EQ PUSH2 0xF1 JUMPI DUP1 PUSH4 0xDBD18388 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0xF0AEF31C EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0xF2F65960 EQ PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x12168DC2 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x49AA2E81 EQ PUSH2 0xF1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA9 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xA9 JUMP JUMPDEST PUSH2 0xF9 PUSH2 0x142 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCA JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCA JUMP JUMPDEST PUSH2 0x12D PUSH2 0x128 CALLDATASIZE PUSH1 0x4 PUSH2 0x6A2 JUMP JUMPDEST PUSH2 0x151 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12D PUSH2 0x13D CALLDATASIZE PUSH1 0x4 PUSH2 0x6C6 JUMP JUMPDEST PUSH2 0x366 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14C PUSH2 0x5C0 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E2 SWAP2 SWAP1 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x6FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E1 SWAP2 SWAP1 PUSH2 0x71E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x95CBF1D8F44EC81FF345ED9CF2FE53B6A6473E072BF046EE412F198C54DBA449 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3F7 SWAP2 SWAP1 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x674B5E4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x674B5E4D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x464 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x488 SWAP2 SWAP1 PUSH2 0x6FC JUMP JUMPDEST DUP1 PUSH2 0x51C JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x51C SWAP2 SWAP1 PUSH2 0x6FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x58A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E1 SWAP2 SWAP1 PUSH2 0x71E JUMP JUMPDEST POP PUSH1 0x1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x33D1191F5A3ABFE19D468D51BB5ECE97489F1277A912A5B5C65992FC279AD3D4 SWAP1 PUSH1 0x20 ADD PUSH2 0x35A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x631 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x655 SWAP2 SWAP1 PUSH2 0x7B0 JUMP JUMPDEST POP SWAP4 POP POP SWAP3 POP POP DUP2 PUSH1 0x0 EQ DUP1 ISZERO PUSH2 0x676 JUMPI POP PUSH1 0x1 SLOAD PUSH2 0x674 DUP3 TIMESTAMP PUSH2 0x800 JUMP JUMPDEST GT JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x69F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6BF DUP2 PUSH2 0x67D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x6BF DUP2 PUSH2 0x67D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x70E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x74B JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x72F JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x75D JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D1 DUP7 PUSH2 0x791 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH2 0x7F4 PUSH1 0x80 DUP8 ADD PUSH2 0x791 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x839 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 0x2E DUP8 0xE4 0xEC 0xD8 DIV PUSH10 0x60B7BDB3E12E8AE397FE 0xAD LT 0xC6 SGT CODESIZE 0xDC 0xAB PUSH27 0xE456E8DFD05464736F6C634300080A003300000000000000000000 ","sourceMap":"776:2724:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1472:67;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;1472:67:84;;;;;;;;3266:103;3317:7;3347:16;;;3266:103;;2080:108;;;:::i;:::-;;;672:14:124;;665:22;647:41;;635:2;620:18;2080:108:84;507:187:124;3412:86:84;3481:12;;3412:86;;845:25:124;;;833:2;818:18;3412:86:84;699:177:124;2823:196:84;;;;;;:::i;:::-;;:::i;:::-;;3062:161;;;;;;:::i;:::-;;:::i;2080:108::-;2137:4;2156:27;:25;:27::i;:::-;2149:34;;2080:108;:::o;2823:196::-;946:22;983:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1032;;;;;1055:10;1032:34;;;191:74:124;946:72:84;;-1:-1:-1;1032:22:84;;;;;;164:18:124;;1032:34:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1068:28;;;;;;;;;;;;;;;;;1024:73;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;2906:16:84::1;:55:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2972:42:::1;::::0;191:74:124;;;2972:42:84::1;::::0;179:2:124;164:18;2972:42:84::1;;;;;;;;940:169:::0;2823:196;:::o;3062:161::-;1241:22;1278:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1334;;;;;1357:10;1334:34;;;191:74:124;1241:72:84;;-1:-1:-1;1334:22:84;;;;;;164:18:124;;1334:34:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;;-1:-1:-1;1372:34:84;;;;;1395:10;1372:34;;;191:74:124;1372:22:84;;;;;;164:18:124;;1372:34:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1414:36;;;;;;;;;;;;;;;;;1319:137;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3144:12:84::1;:29:::0;;;3184:34:::1;::::0;845:25:124;;;3184:34:84::1;::::0;833:2:124;818:18;3184:34:84::1;699:177:124::0;2536:244:84;2596:4;2611:13;2628:27;2661:16;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2608:87;;;;;;;2708:6;2718:1;2708:11;:67;;;;-1:-1:-1;2763:12:84;;2723:37;2741:19;2723:15;:37;:::i;:::-;:52;2708:67;2701:74;;;;2536:244;:::o;881:154:124:-;967:42;960:5;956:54;949:5;946:65;936:93;;1025:1;1022;1015:12;936:93;881:154;:::o;1040:247::-;1099:6;1152:2;1140:9;1131:7;1127:23;1123:32;1120:52;;;1168:1;1165;1158:12;1120:52;1207:9;1194:23;1226:31;1251:5;1226:31;:::i;:::-;1276:5;1040:247;-1:-1:-1;;;1040:247:124:o;1292:180::-;1351:6;1404:2;1392:9;1383:7;1379:23;1375:32;1372:52;;;1420:1;1417;1410:12;1372:52;-1:-1:-1;1443:23:124;;1292:180;-1:-1:-1;1292:180:124:o;1477:251::-;1547:6;1600:2;1588:9;1579:7;1575:23;1571:32;1568:52;;;1616:1;1613;1606:12;1568:52;1648:9;1642:16;1667:31;1692:5;1667:31;:::i;1733:277::-;1800:6;1853:2;1841:9;1832:7;1828:23;1824:32;1821:52;;;1869:1;1866;1859:12;1821:52;1901:9;1895:16;1954:5;1947:13;1940:21;1933:5;1930:32;1920:60;;1976:1;1973;1966:12;2015:656;2127:4;2156:2;2185;2174:9;2167:21;2217:6;2211:13;2260:6;2255:2;2244:9;2240:18;2233:34;2285:1;2295:140;2309:6;2306:1;2303:13;2295:140;;;2404:14;;;2400:23;;2394:30;2370:17;;;2389:2;2366:26;2359:66;2324:10;;2295:140;;;2453:6;2450:1;2447:13;2444:91;;;2523:1;2518:2;2509:6;2498:9;2494:22;2490:31;2483:42;2444:91;-1:-1:-1;2587:2:124;2575:15;2592:66;2571:88;2556:104;;;;2662:2;2552:113;;2015:656;-1:-1:-1;;;2015:656:124:o;2676:179::-;2754:13;;2807:22;2796:34;;2786:45;;2776:73;;2845:1;2842;2835:12;2776:73;2676:179;;;:::o;2860:473::-;2963:6;2971;2979;2987;2995;3048:3;3036:9;3027:7;3023:23;3019:33;3016:53;;;3065:1;3062;3055:12;3016:53;3088:39;3117:9;3088:39;:::i;:::-;3078:49;;3167:2;3156:9;3152:18;3146:25;3136:35;;3211:2;3200:9;3196:18;3190:25;3180:35;;3255:2;3244:9;3240:18;3234:25;3224:35;;3278:49;3322:3;3311:9;3307:19;3278:49;:::i;:::-;3268:59;;2860:473;;;;;;;;:::o;3338:279::-;3378:4;3406:1;3403;3400:8;3397:188;;;3441:77;3438:1;3431:88;3542:4;3539:1;3532:15;3570:4;3567:1;3560:15;3397:188;-1:-1:-1;3602:9:124;;3338:279::o"},"gasEstimates":{"creation":{"codeDepositCost":"432800","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","getGracePeriod()":"2302","getSequencerOracle()":"2319","isBorrowAllowed()":"infinite","isLiquidationAllowed()":"infinite","setGracePeriod(uint256)":"infinite","setSequencerOracle(address)":"infinite"},"internal":{"_isUpAndGracePeriodPassed()":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","getGracePeriod()":"dbd18388","getSequencerOracle()":"12168dc2","isBorrowAllowed()":"49aa2e81","isLiquidationAllowed()":"7a5d20ea","setGracePeriod(uint256)":"f2f65960","setSequencerOracle(address)":"f0aef31c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"contract ISequencerOracle\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gracePeriod\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newGracePeriod\",\"type\":\"uint256\"}],\"name\":\"GracePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerOracle\",\"type\":\"address\"}],\"name\":\"SequencerOracleUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGracePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSequencerOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBorrowAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLiquidationAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newGracePeriod\",\"type\":\"uint256\"}],\"name\":\"setGracePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newSequencerOracle\",\"type\":\"address\"}],\"name\":\"setSequencerOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Once the PriceOracle gets up after an outage/downtime, users can make their positions healthy during a grace  period. So the PriceOracle is considered completely up once its up and the grace period passed.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor\",\"params\":{\"gracePeriod\":\"The duration of the grace period in seconds\",\"oracle\":\"The address of the SequencerOracle\",\"provider\":\"The address of the PoolAddressesProvider\"}},\"getGracePeriod()\":{\"returns\":{\"_0\":\"The duration of the grace period\"}},\"getSequencerOracle()\":{\"returns\":{\"_0\":\"The address of the sequencer oracle contract\"}},\"isBorrowAllowed()\":{\"details\":\"Operation not allowed when PriceOracle is down or grace period not passed.\",\"returns\":{\"_0\":\"True if the `borrow` operation is allowed, false otherwise.\"}},\"isLiquidationAllowed()\":{\"details\":\"Operation not allowed when PriceOracle is down or grace period not passed.\",\"returns\":{\"_0\":\"True if the `liquidation` operation is allowed, false otherwise.\"}},\"setGracePeriod(uint256)\":{\"params\":{\"newGracePeriod\":\"The value of the new grace period duration\"}},\"setSequencerOracle(address)\":{\"params\":{\"newSequencerOracle\":\"The address of the new Sequencer Oracle to use\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}}},\"title\":\"PriceOracleSentinel\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider\"},\"getGracePeriod()\":{\"notice\":\"Returns the grace period\"},\"getSequencerOracle()\":{\"notice\":\"Returns the SequencerOracle\"},\"isBorrowAllowed()\":{\"notice\":\"Returns true if the `borrow` operation is allowed.\"},\"isLiquidationAllowed()\":{\"notice\":\"Returns true if the `liquidation` operation is allowed.\"},\"setGracePeriod(uint256)\":{\"notice\":\"Updates the duration of the grace period\"},\"setSequencerOracle(address)\":{\"notice\":\"Updates the address of the sequencer oracle\"}},\"notice\":\"It validates if operations are allowed depending on the PriceOracle health.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/configuration/PriceOracleSentinel.sol\":\"PriceOracleSentinel\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/ISequencerOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ISequencerOracle\\n * @author Aave\\n * @notice Defines the basic interface for a Sequencer oracle.\\n */\\ninterface ISequencerOracle {\\n  /**\\n   * @notice Returns the health status of the sequencer.\\n   * @return roundId The round ID from the aggregator for which the data was retrieved combined with a phase to ensure\\n   * that round IDs get larger as time moves forward.\\n   * @return answer The answer for the latest round: 0 if the sequencer is up, 1 if it is down.\\n   * @return startedAt The timestamp when the round was started.\\n   * @return updatedAt The timestamp of the block in which the answer was updated on L1.\\n   * @return answeredInRound The round ID of the round in which the answer was computed.\\n   */\\n  function latestRoundData()\\n    external\\n    view\\n    returns (\\n      uint80 roundId,\\n      int256 answer,\\n      uint256 startedAt,\\n      uint256 updatedAt,\\n      uint80 answeredInRound\\n    );\\n}\\n\",\"keccak256\":\"0x2b0cac1dc7d684eab009ada5e1f134f7c61c90d8802cf4ca948a35d6db6f9aba\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/configuration/PriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleSentinel} from '../../interfaces/IPriceOracleSentinel.sol';\\nimport {ISequencerOracle} from '../../interfaces/ISequencerOracle.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title PriceOracleSentinel\\n * @author Aave\\n * @notice It validates if operations are allowed depending on the PriceOracle health.\\n * @dev Once the PriceOracle gets up after an outage/downtime, users can make their positions healthy during a grace\\n *  period. So the PriceOracle is considered completely up once its up and the grace period passed.\\n */\\ncontract PriceOracleSentinel is IPriceOracleSentinel {\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only risk or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyRiskOrPoolAdmins() {\\n    IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager());\\n    require(\\n      aclManager.isRiskAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_RISK_OR_POOL_ADMIN\\n    );\\n    _;\\n  }\\n\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n\\n  ISequencerOracle internal _sequencerOracle;\\n\\n  uint256 internal _gracePeriod;\\n\\n  /**\\n   * @dev Constructor\\n   * @param provider The address of the PoolAddressesProvider\\n   * @param oracle The address of the SequencerOracle\\n   * @param gracePeriod The duration of the grace period in seconds\\n   */\\n  constructor(IPoolAddressesProvider provider, ISequencerOracle oracle, uint256 gracePeriod) {\\n    ADDRESSES_PROVIDER = provider;\\n    _sequencerOracle = oracle;\\n    _gracePeriod = gracePeriod;\\n  }\\n\\n  /// @inheritdoc IPriceOracleSentinel\\n  function isBorrowAllowed() public view override returns (bool) {\\n    return _isUpAndGracePeriodPassed();\\n  }\\n\\n  /// @inheritdoc IPriceOracleSentinel\\n  function isLiquidationAllowed() public view override returns (bool) {\\n    return _isUpAndGracePeriodPassed();\\n  }\\n\\n  /**\\n   * @notice Checks the sequencer oracle is healthy: is up and grace period passed.\\n   * @return True if the SequencerOracle is up and the grace period passed, false otherwise\\n   */\\n  function _isUpAndGracePeriodPassed() internal view returns (bool) {\\n    (, int256 answer, , uint256 lastUpdateTimestamp, ) = _sequencerOracle.latestRoundData();\\n    return answer == 0 && block.timestamp - lastUpdateTimestamp > _gracePeriod;\\n  }\\n\\n  /// @inheritdoc IPriceOracleSentinel\\n  function setSequencerOracle(address newSequencerOracle) public onlyPoolAdmin {\\n    _sequencerOracle = ISequencerOracle(newSequencerOracle);\\n    emit SequencerOracleUpdated(newSequencerOracle);\\n  }\\n\\n  /// @inheritdoc IPriceOracleSentinel\\n  function setGracePeriod(uint256 newGracePeriod) public onlyRiskOrPoolAdmins {\\n    _gracePeriod = newGracePeriod;\\n    emit GracePeriodUpdated(newGracePeriod);\\n  }\\n\\n  /// @inheritdoc IPriceOracleSentinel\\n  function getSequencerOracle() public view returns (address) {\\n    return address(_sequencerOracle);\\n  }\\n\\n  /// @inheritdoc IPriceOracleSentinel\\n  function getGracePeriod() public view returns (uint256) {\\n    return _gracePeriod;\\n  }\\n}\\n\",\"keccak256\":\"0x0a9806cbad5f5c741ed569f4279fa1aff3956a1e0a78bdea56b55de07b795f0f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12383,"contract":"contracts/protocol/configuration/PriceOracleSentinel.sol:PriceOracleSentinel","label":"_sequencerOracle","offset":0,"slot":"0","type":"t_contract(ISequencerOracle)6206"},{"astId":12385,"contract":"contracts/protocol/configuration/PriceOracleSentinel.sol:PriceOracleSentinel","label":"_gracePeriod","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_contract(ISequencerOracle)6206":{"encoding":"inplace","label":"contract ISequencerOracle","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider"},"getGracePeriod()":{"notice":"Returns the grace period"},"getSequencerOracle()":{"notice":"Returns the SequencerOracle"},"isBorrowAllowed()":{"notice":"Returns true if the `borrow` operation is allowed."},"isLiquidationAllowed()":{"notice":"Returns true if the `liquidation` operation is allowed."},"setGracePeriod(uint256)":{"notice":"Updates the duration of the grace period"},"setSequencerOracle(address)":{"notice":"Updates the address of the sequencer oracle"}},"notice":"It validates if operations are allowed depending on the PriceOracle health.","version":1}}},"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol":{"BaseImmutableAdminUpgradeabilityProxy":{"abi":[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"author":"Aave, inspired by the OpenZeppelin upgradeability proxy pattern","details":"The admin role is stored in an immutable, which helps saving transactions costs All external functions in this contract must be guarded by the `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity feature proposal that would enable this to be done automatically.","kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"constructor":{"details":"Constructor.","params":{"admin":"The address of the admin"}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"upgradeTo(address)":{"details":"Only the admin can call this function.","params":{"newImplementation":"The address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"The address of the new implementation."}}},"title":"BaseImmutableAdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_12536":{"entryPoint":null,"id":12536,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:124"},"nodeType":"YulFunctionCall","src":"143:12:124"},"nodeType":"YulExpressionStatement","src":"143:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:124"},"nodeType":"YulFunctionCall","src":"112:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:124"},"nodeType":"YulFunctionCall","src":"108:32:124"},"nodeType":"YulIf","src":"105:52:124"},{"nodeType":"YulVariableDeclaration","src":"166:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:124"},"nodeType":"YulFunctionCall","src":"179:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:124"},"nodeType":"YulFunctionCall","src":"260:12:124"},"nodeType":"YulExpressionStatement","src":"260:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:124"},"nodeType":"YulFunctionCall","src":"235:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:124"},"nodeType":"YulFunctionCall","src":"224:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:124"},"nodeType":"YulFunctionCall","src":"214:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:124"},"nodeType":"YulFunctionCall","src":"207:50:124"},"nodeType":"YulIf","src":"204:70:124"},{"nodeType":"YulAssignment","src":"283:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:124","type":""}],"src":"14:290:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b506040516106b23803806106b283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516106046100ae600039600081816101210152818161017301528181610246015281816102b7015281816102e0015261031a01526106046000f3fe60806040526004361061003f5760003560e01c80633659cfe6146100495780634f1ef286146100695780635c60da1b1461007c578063f851a440146100ba575b6100476100cf565b005b34801561005557600080fd5b50610047610064366004610519565b610109565b61004761007736600461053b565b61015b565b34801561008857600080fd5b5061009161022c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b5061009161029d565b6100d7610302565b6101076101027f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6103cd565b565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561015357610150816103f1565b50565b6101506100cf565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561021f576101a2836103f1565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101cb9291906105be565b600060405180830381855af49150503d8060008114610206576040519150601f19603f3d011682016040523d82523d6000602084013e61020b565b606091505b505090508061021957600080fd5b50505050565b6102276100cf565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561029257507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61029a6100cf565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561029257507f000000000000000000000000000000000000000000000000000000000000000090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156103ec573d6000f35b3d6000fd5b6103fa8161043e565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b6104cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016103c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461051457600080fd5b919050565b60006020828403121561052b57600080fd5b610534826104f0565b9392505050565b60008060006040848603121561055057600080fd5b610559846104f0565b9250602084013567ffffffffffffffff8082111561057657600080fd5b818601915086601f83011261058a57600080fd5b81358181111561059957600080fd5b8760208285010111156105ab57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea2646970667358221220e82eb5db7a922c0abbee6f27200b3a3683020e1f521120f9bedf4dd21641994464736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6B2 CODESIZE SUB DUP1 PUSH2 0x6B2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x604 PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x121 ADD MSTORE DUP2 DUP2 PUSH2 0x173 ADD MSTORE DUP2 DUP2 PUSH2 0x246 ADD MSTORE DUP2 DUP2 PUSH2 0x2B7 ADD MSTORE DUP2 DUP2 PUSH2 0x2E0 ADD MSTORE PUSH2 0x31A ADD MSTORE PUSH2 0x604 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x49 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x69 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xBA JUMPI JUMPDEST PUSH2 0x47 PUSH2 0xCF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47 PUSH2 0x64 CALLDATASIZE PUSH1 0x4 PUSH2 0x519 JUMP JUMPDEST PUSH2 0x109 JUMP JUMPDEST PUSH2 0x47 PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x53B JUMP JUMPDEST PUSH2 0x15B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x22C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x29D JUMP JUMPDEST PUSH2 0xD7 PUSH2 0x302 JUMP JUMPDEST PUSH2 0x107 PUSH2 0x102 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3CD JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x153 JUMPI PUSH2 0x150 DUP2 PUSH2 0x3F1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x150 PUSH2 0xCF JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x21F JUMPI PUSH2 0x1A2 DUP4 PUSH2 0x3F1 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP3 SWAP2 SWAP1 PUSH2 0x5BE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x206 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x20B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227 PUSH2 0xCF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x292 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29A PUSH2 0xCF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x292 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x107 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x3EC JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3FA DUP2 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x4CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C4 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x514 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x534 DUP3 PUSH2 0x4F0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x559 DUP5 PUSH2 0x4F0 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 0x2E 0xB5 0xDB PUSH27 0x922C0ABBEE6F27200B3A3683020E1F521120F9BEDF4DD216419944 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"720:2049:85:-:0;;;914:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;947:14:85;;;720:2049;;14:290:124;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:124;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:124:o;:::-;720:2049:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3018":{"entryPoint":null,"id":3018,"parameterSlots":0,"returnSlots":0},"@_delegate_3032":{"entryPoint":973,"id":3032,"parameterSlots":1,"returnSlots":0},"@_fallback_3050":{"entryPoint":207,"id":3050,"parameterSlots":0,"returnSlots":0},"@_implementation_2769":{"entryPoint":null,"id":2769,"parameterSlots":0,"returnSlots":1},"@_setImplementation_2804":{"entryPoint":1086,"id":2804,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2784":{"entryPoint":1009,"id":2784,"parameterSlots":1,"returnSlots":0},"@_willFallback_12631":{"entryPoint":770,"id":12631,"parameterSlots":0,"returnSlots":0},"@_willFallback_3037":{"entryPoint":null,"id":3037,"parameterSlots":0,"returnSlots":0},"@admin_12561":{"entryPoint":669,"id":12561,"parameterSlots":0,"returnSlots":1},"@implementation_12573":{"entryPoint":556,"id":12573,"parameterSlots":0,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_12612":{"entryPoint":347,"id":12612,"parameterSlots":3,"returnSlots":0},"@upgradeTo_12586":{"entryPoint":265,"id":12586,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1264,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1305,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1339,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1470,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2427:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"285:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:124"},"nodeType":"YulFunctionCall","src":"333:12:124"},"nodeType":"YulExpressionStatement","src":"333:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:124"},"nodeType":"YulFunctionCall","src":"302:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:124"},"nodeType":"YulFunctionCall","src":"298:32:124"},"nodeType":"YulIf","src":"295:52:124"},{"nodeType":"YulAssignment","src":"356:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:124"},"nodeType":"YulFunctionCall","src":"366:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:124","type":""}],"src":"215:186:124"},{"body":{"nodeType":"YulBlock","src":"512:559:124","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:124"},"nodeType":"YulFunctionCall","src":"560:12:124"},"nodeType":"YulExpressionStatement","src":"560:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:124"},"nodeType":"YulFunctionCall","src":"529:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:124"},"nodeType":"YulFunctionCall","src":"525:32:124"},"nodeType":"YulIf","src":"522:52:124"},{"nodeType":"YulAssignment","src":"583:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:124"},"nodeType":"YulFunctionCall","src":"593:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:124"},"nodeType":"YulFunctionCall","src":"658:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:124"},"nodeType":"YulFunctionCall","src":"645:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:124"},"nodeType":"YulFunctionCall","src":"743:12:124"},"nodeType":"YulExpressionStatement","src":"743:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:124"},"nodeType":"YulFunctionCall","src":"726:14:124"},"nodeType":"YulIf","src":"723:34:124"},{"nodeType":"YulVariableDeclaration","src":"766:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:124"},"nodeType":"YulFunctionCall","src":"776:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:124"},"nodeType":"YulFunctionCall","src":"848:12:124"},"nodeType":"YulExpressionStatement","src":"848:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:124"},"nodeType":"YulFunctionCall","src":"821:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:124"},"nodeType":"YulFunctionCall","src":"817:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:124"},"nodeType":"YulFunctionCall","src":"810:35:124"},"nodeType":"YulIf","src":"807:55:124"},{"nodeType":"YulVariableDeclaration","src":"871:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:124"},"nodeType":"YulFunctionCall","src":"885:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:124"},"nodeType":"YulFunctionCall","src":"930:12:124"},"nodeType":"YulExpressionStatement","src":"930:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:124"},"nodeType":"YulFunctionCall","src":"913:14:124"},"nodeType":"YulIf","src":"910:34:124"},{"body":{"nodeType":"YulBlock","src":"994:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:124"},"nodeType":"YulFunctionCall","src":"996:12:124"},"nodeType":"YulExpressionStatement","src":"996:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:124"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:124"},"nodeType":"YulFunctionCall","src":"963:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:124"},"nodeType":"YulFunctionCall","src":"959:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:124"},"nodeType":"YulFunctionCall","src":"956:37:124"},"nodeType":"YulIf","src":"953:57:124"},{"nodeType":"YulAssignment","src":"1019:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:124"},"nodeType":"YulFunctionCall","src":"1029:11:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:124"}]},{"nodeType":"YulAssignment","src":"1049:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:124","type":""}],"src":"406:665:124"},{"body":{"nodeType":"YulBlock","src":"1177:125:124","statements":[{"nodeType":"YulAssignment","src":"1187:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:124"},"nodeType":"YulFunctionCall","src":"1195:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:124"},"nodeType":"YulFunctionCall","src":"1240:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:124"},"nodeType":"YulFunctionCall","src":"1222:74:124"},"nodeType":"YulExpressionStatement","src":"1222:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:124","type":""}],"src":"1076:226:124"},{"body":{"nodeType":"YulBlock","src":"1454:124:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1477:3:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1482:6:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1490:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1464:12:124"},"nodeType":"YulFunctionCall","src":"1464:33:124"},"nodeType":"YulExpressionStatement","src":"1464:33:124"},{"nodeType":"YulVariableDeclaration","src":"1506:26:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1520:3:124"},{"name":"value1","nodeType":"YulIdentifier","src":"1525:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1516:3:124"},"nodeType":"YulFunctionCall","src":"1516:16:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1510:2:124","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1548:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1552:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1541:6:124"},"nodeType":"YulFunctionCall","src":"1541:13:124"},"nodeType":"YulExpressionStatement","src":"1541:13:124"},{"nodeType":"YulAssignment","src":"1563:9:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"1570:2:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1563:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1422:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1427:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1435:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1446:3:124","type":""}],"src":"1307:271:124"},{"body":{"nodeType":"YulBlock","src":"1757:240:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1774:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1785:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1767:6:124"},"nodeType":"YulFunctionCall","src":"1767:21:124"},"nodeType":"YulExpressionStatement","src":"1767:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1808:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1819:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1804:3:124"},"nodeType":"YulFunctionCall","src":"1804:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"1824:2:124","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1797:6:124"},"nodeType":"YulFunctionCall","src":"1797:30:124"},"nodeType":"YulExpressionStatement","src":"1797:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1847:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1858:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1843:3:124"},"nodeType":"YulFunctionCall","src":"1843:18:124"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"1863:34:124","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1836:6:124"},"nodeType":"YulFunctionCall","src":"1836:62:124"},"nodeType":"YulExpressionStatement","src":"1836:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1918:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1929:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1914:3:124"},"nodeType":"YulFunctionCall","src":"1914:18:124"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"1934:20:124","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1907:6:124"},"nodeType":"YulFunctionCall","src":"1907:48:124"},"nodeType":"YulExpressionStatement","src":"1907:48:124"},{"nodeType":"YulAssignment","src":"1964:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1976:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1987:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1972:3:124"},"nodeType":"YulFunctionCall","src":"1972:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1964:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1734:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1748:4:124","type":""}],"src":"1583:414:124"},{"body":{"nodeType":"YulBlock","src":"2176:249:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2193:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2204:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2186:6:124"},"nodeType":"YulFunctionCall","src":"2186:21:124"},"nodeType":"YulExpressionStatement","src":"2186:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2227:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2238:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2223:3:124"},"nodeType":"YulFunctionCall","src":"2223:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"2243:2:124","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2216:6:124"},"nodeType":"YulFunctionCall","src":"2216:30:124"},"nodeType":"YulExpressionStatement","src":"2216:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2266:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2277:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2262:3:124"},"nodeType":"YulFunctionCall","src":"2262:18:124"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"2282:34:124","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2255:6:124"},"nodeType":"YulFunctionCall","src":"2255:62:124"},"nodeType":"YulExpressionStatement","src":"2255:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2337:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2348:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2333:3:124"},"nodeType":"YulFunctionCall","src":"2333:18:124"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"2353:29:124","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2326:6:124"},"nodeType":"YulFunctionCall","src":"2326:57:124"},"nodeType":"YulExpressionStatement","src":"2326:57:124"},{"nodeType":"YulAssignment","src":"2392:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2404:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2415:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2400:3:124"},"nodeType":"YulFunctionCall","src":"2400:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2392:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2153:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2167:4:124","type":""}],"src":"2002:423:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"12525":[{"length":32,"start":289},{"length":32,"start":371},{"length":32,"start":582},{"length":32,"start":695},{"length":32,"start":736},{"length":32,"start":794}]},"linkReferences":{},"object":"60806040526004361061003f5760003560e01c80633659cfe6146100495780634f1ef286146100695780635c60da1b1461007c578063f851a440146100ba575b6100476100cf565b005b34801561005557600080fd5b50610047610064366004610519565b610109565b61004761007736600461053b565b61015b565b34801561008857600080fd5b5061009161022c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b5061009161029d565b6100d7610302565b6101076101027f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6103cd565b565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561015357610150816103f1565b50565b6101506100cf565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561021f576101a2836103f1565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101cb9291906105be565b600060405180830381855af49150503d8060008114610206576040519150601f19603f3d011682016040523d82523d6000602084013e61020b565b606091505b505090508061021957600080fd5b50505050565b6102276100cf565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561029257507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61029a6100cf565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561029257507f000000000000000000000000000000000000000000000000000000000000000090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156103ec573d6000f35b3d6000fd5b6103fa8161043e565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b6104cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016103c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461051457600080fd5b919050565b60006020828403121561052b57600080fd5b610534826104f0565b9392505050565b60008060006040848603121561055057600080fd5b610559846104f0565b9250602084013567ffffffffffffffff8082111561057657600080fd5b818601915086601f83011261058a57600080fd5b81358181111561059957600080fd5b8760208285010111156105ab57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea2646970667358221220e82eb5db7a922c0abbee6f27200b3a3683020e1f521120f9bedf4dd21641994464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x49 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x69 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xBA JUMPI JUMPDEST PUSH2 0x47 PUSH2 0xCF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47 PUSH2 0x64 CALLDATASIZE PUSH1 0x4 PUSH2 0x519 JUMP JUMPDEST PUSH2 0x109 JUMP JUMPDEST PUSH2 0x47 PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x53B JUMP JUMPDEST PUSH2 0x15B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x22C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x29D JUMP JUMPDEST PUSH2 0xD7 PUSH2 0x302 JUMP JUMPDEST PUSH2 0x107 PUSH2 0x102 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3CD JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x153 JUMPI PUSH2 0x150 DUP2 PUSH2 0x3F1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x150 PUSH2 0xCF JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x21F JUMPI PUSH2 0x1A2 DUP4 PUSH2 0x3F1 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP3 SWAP2 SWAP1 PUSH2 0x5BE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x206 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x20B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227 PUSH2 0xCF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x292 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29A PUSH2 0xCF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x292 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x107 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x3EC JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3FA DUP2 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x4CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C4 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x514 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x534 DUP3 PUSH2 0x4F0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x559 DUP5 PUSH2 0x4F0 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 0x2E 0xB5 0xDB PUSH27 0x922C0ABBEE6F27200B3A3683020E1F521120F9BEDF4DD216419944 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"720:2049:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:22;:9;:11::i;:::-;720:2049:85;1651:103;;;;;;;;;;-1:-1:-1;1651:103:85;;;;;:::i;:::-;;:::i;2283:234::-;;;;;;:::i;:::-;;:::i;1359:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:124;1240:55;;;1222:74;;1210:2;1195:18;1359:96:85;;;;;;;1172:76;;;;;;;;;;;;;:::i;2155:90:22:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:18;1183:11;;1008:196;2222:17:22;2212:9;:28::i;:::-;2155:90::o;1651:103:85:-;999:10;:20;1013:6;999:20;;995:74;;;1720:29:::1;1731:17;1720:10;:29::i;:::-;1651:103:::0;:::o;995:74::-;1051:11;:9;:11::i;2283:234::-;999:10;:20;1013:6;999:20;;995:74;;;2400:29:::1;2411:17;2400:10;:29::i;:::-;2436:12;2454:17;:30;;2485:4;;2454:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:55;;;2504:7;2496:16;;;::::0;::::1;;2394:123;2283:234:::0;;;:::o;995:74::-;1051:11;:9;:11::i;:::-;2283:234;;;:::o;1359:96::-;1411:7;999:10;:20;1013:6;999:20;;995:74;;;-1:-1:-1;823:66:18;1183:11;;1359:96:85:o;995:74::-;1051:11;:9;:11::i;:::-;1359:96;:::o;1172:76::-;1215:7;999:10;:20;1013:6;999:20;;995:74;;;-1:-1:-1;1237:6:85::1;1359:96:::0;:::o;2595:172::-;2660:10;:20;2674:6;2660:20;;;2652:83;;;;;;;1785:2:124;2652:83:85;;;1767:21:124;1824:2;1804:18;;;1797:30;1863:34;1843:18;;;1836:62;1934:20;1914:18;;;1907:48;1972:19;;2652:83:85;;;;;;;;1005:802:22;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:18;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;1618:334::-;1025:20:3;;1688:127:18;;;;;;;2204:2:124;1688:127:18;;;2186:21:124;2243:2;2223:18;;;2216:30;2282:34;2262:18;;;2255:62;2353:29;2333:18;;;2326:57;2400:19;;1688:127:18;2002:423:124;1688:127:18;823:66;1911:31;1618:334::o;14:196:124:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:124:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:271::-;1490:6;1482;1477:3;1464:33;1446:3;1516:16;;1541:13;;;1516:16;1307:271;-1:-1:-1;1307:271:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"308000","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite","admin()":"infinite","implementation()":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave, inspired by the OpenZeppelin upgradeability proxy pattern\",\"details\":\"The admin role is stored in an immutable, which helps saving transactions costs All external functions in this contract must be guarded by the `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity feature proposal that would enable this to be done automatically.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"admin\":\"The address of the admin\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Only the admin can call this function.\",\"params\":{\"newImplementation\":\"The address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"The address of the new implementation.\"}}},\"title\":\"BaseImmutableAdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"admin()\":{\"notice\":\"Return the admin address\"},\"implementation()\":{\"notice\":\"Return the implementation address\"},\"upgradeTo(address)\":{\"notice\":\"Upgrade the backing implementation of the proxy.\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation.\"}},\"notice\":\"This contract combines an upgradeability proxy with an authorization mechanism for administrative tasks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":\"BaseImmutableAdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"admin()":{"notice":"Return the admin address"},"implementation()":{"notice":"Return the implementation address"},"upgradeTo(address)":{"notice":"Upgrade the backing implementation of the proxy."},"upgradeToAndCall(address,bytes)":{"notice":"Upgrade the backing implementation of the proxy and call a function on the new implementation."}},"notice":"This contract combines an upgradeability proxy with an authorization mechanism for administrative tasks.","version":1}}},"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol":{"InitializableImmutableAdminUpgradeabilityProxy":{"abi":[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"author":"Aave","details":"Extends BaseAdminUpgradeabilityProxy with an initializer function","kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"constructor":{"details":"Constructor.","params":{"admin":"The address of the admin"}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"initialize(address,bytes)":{"details":"Contract initializer.","params":{"_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"Address of the initial implementation."}},"upgradeTo(address)":{"details":"Only the admin can call this function.","params":{"newImplementation":"The address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"The address of the new implementation."}}},"title":"InitializableAdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_12536":{"entryPoint":null,"id":12536,"parameterSlots":1,"returnSlots":0},"@_12655":{"entryPoint":null,"id":12655,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:124"},"nodeType":"YulFunctionCall","src":"143:12:124"},"nodeType":"YulExpressionStatement","src":"143:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:124"},"nodeType":"YulFunctionCall","src":"112:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:124"},"nodeType":"YulFunctionCall","src":"108:32:124"},"nodeType":"YulIf","src":"105:52:124"},{"nodeType":"YulVariableDeclaration","src":"166:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:124"},"nodeType":"YulFunctionCall","src":"179:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:124"},"nodeType":"YulFunctionCall","src":"260:12:124"},"nodeType":"YulExpressionStatement","src":"260:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:124"},"nodeType":"YulFunctionCall","src":"239:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:124"},"nodeType":"YulFunctionCall","src":"235:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:124"},"nodeType":"YulFunctionCall","src":"224:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:124"},"nodeType":"YulFunctionCall","src":"214:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:124"},"nodeType":"YulFunctionCall","src":"207:50:124"},"nodeType":"YulIf","src":"204:70:124"},{"nodeType":"YulAssignment","src":"283:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:124","type":""}],"src":"14:290:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220899ba9574e8c52c72539176723d8c74a8618334587150196e2029371e7486a8464736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 SWAP12 0xA9 JUMPI 0x4E DUP13 MSTORE 0xC7 0x25 CODECOPY OR PUSH8 0x23D8C74A86183345 DUP8 ISZERO ADD SWAP7 0xE2 MUL SWAP4 PUSH18 0xE7486A8464736F6C634300080A0033000000 ","sourceMap":"528:541:86:-:0;;;745:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;947:14:85;;;528:541:86;;14:290:124;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:124;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:124:o;:::-;528:541:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3018":{"entryPoint":null,"id":3018,"parameterSlots":0,"returnSlots":0},"@_delegate_3032":{"entryPoint":1124,"id":3032,"parameterSlots":1,"returnSlots":0},"@_fallback_3050":{"entryPoint":253,"id":3050,"parameterSlots":0,"returnSlots":0},"@_implementation_2769":{"entryPoint":null,"id":2769,"parameterSlots":0,"returnSlots":1},"@_setImplementation_2804":{"entryPoint":1237,"id":2804,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2784":{"entryPoint":1160,"id":2784,"parameterSlots":1,"returnSlots":0},"@_willFallback_12631":{"entryPoint":1420,"id":12631,"parameterSlots":0,"returnSlots":0},"@_willFallback_12668":{"entryPoint":1116,"id":12668,"parameterSlots":0,"returnSlots":0},"@_willFallback_3037":{"entryPoint":null,"id":3037,"parameterSlots":0,"returnSlots":0},"@admin_12561":{"entryPoint":1015,"id":12561,"parameterSlots":0,"returnSlots":1},"@implementation_12573":{"entryPoint":602,"id":12573,"parameterSlots":0,"returnSlots":1},"@initialize_3006":{"entryPoint":715,"id":3006,"parameterSlots":2,"returnSlots":0},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_12612":{"entryPoint":393,"id":12612,"parameterSlots":3,"returnSlots":0},"@upgradeTo_12586":{"entryPoint":311,"id":12586,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1618,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1659,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1693,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_bytes_memory_ptr":{"entryPoint":1871,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2095,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2220,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":2111,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x01":{"entryPoint":2173,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":1824,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4579:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"285:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:124"},"nodeType":"YulFunctionCall","src":"333:12:124"},"nodeType":"YulExpressionStatement","src":"333:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:124"},"nodeType":"YulFunctionCall","src":"302:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:124"},"nodeType":"YulFunctionCall","src":"298:32:124"},"nodeType":"YulIf","src":"295:52:124"},{"nodeType":"YulAssignment","src":"356:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:124"},"nodeType":"YulFunctionCall","src":"366:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:124","type":""}],"src":"215:186:124"},{"body":{"nodeType":"YulBlock","src":"512:559:124","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:124"},"nodeType":"YulFunctionCall","src":"560:12:124"},"nodeType":"YulExpressionStatement","src":"560:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:124"},"nodeType":"YulFunctionCall","src":"529:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:124"},"nodeType":"YulFunctionCall","src":"525:32:124"},"nodeType":"YulIf","src":"522:52:124"},{"nodeType":"YulAssignment","src":"583:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:124"},"nodeType":"YulFunctionCall","src":"593:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:124"},"nodeType":"YulFunctionCall","src":"658:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:124"},"nodeType":"YulFunctionCall","src":"645:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:124"},"nodeType":"YulFunctionCall","src":"743:12:124"},"nodeType":"YulExpressionStatement","src":"743:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:124"},"nodeType":"YulFunctionCall","src":"726:14:124"},"nodeType":"YulIf","src":"723:34:124"},{"nodeType":"YulVariableDeclaration","src":"766:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:124"},"nodeType":"YulFunctionCall","src":"776:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:124"},"nodeType":"YulFunctionCall","src":"848:12:124"},"nodeType":"YulExpressionStatement","src":"848:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:124"},"nodeType":"YulFunctionCall","src":"821:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:124"},"nodeType":"YulFunctionCall","src":"817:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:124"},"nodeType":"YulFunctionCall","src":"810:35:124"},"nodeType":"YulIf","src":"807:55:124"},{"nodeType":"YulVariableDeclaration","src":"871:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:124"},"nodeType":"YulFunctionCall","src":"885:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:124"},"nodeType":"YulFunctionCall","src":"930:12:124"},"nodeType":"YulExpressionStatement","src":"930:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:124"},"nodeType":"YulFunctionCall","src":"913:14:124"},"nodeType":"YulIf","src":"910:34:124"},{"body":{"nodeType":"YulBlock","src":"994:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:124"},"nodeType":"YulFunctionCall","src":"996:12:124"},"nodeType":"YulExpressionStatement","src":"996:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:124"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:124"},"nodeType":"YulFunctionCall","src":"963:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:124"},"nodeType":"YulFunctionCall","src":"959:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:124"},"nodeType":"YulFunctionCall","src":"956:37:124"},"nodeType":"YulIf","src":"953:57:124"},{"nodeType":"YulAssignment","src":"1019:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:124"},"nodeType":"YulFunctionCall","src":"1029:11:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:124"}]},{"nodeType":"YulAssignment","src":"1049:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:124","type":""}],"src":"406:665:124"},{"body":{"nodeType":"YulBlock","src":"1177:125:124","statements":[{"nodeType":"YulAssignment","src":"1187:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:124"},"nodeType":"YulFunctionCall","src":"1195:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:124"},"nodeType":"YulFunctionCall","src":"1240:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:124"},"nodeType":"YulFunctionCall","src":"1222:74:124"},"nodeType":"YulExpressionStatement","src":"1222:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:124","type":""}],"src":"1076:226:124"},{"body":{"nodeType":"YulBlock","src":"1339:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1356:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1359:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1349:6:124"},"nodeType":"YulFunctionCall","src":"1349:88:124"},"nodeType":"YulExpressionStatement","src":"1349:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1453:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1456:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1446:6:124"},"nodeType":"YulFunctionCall","src":"1446:15:124"},"nodeType":"YulExpressionStatement","src":"1446:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1477:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1480:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1470:6:124"},"nodeType":"YulFunctionCall","src":"1470:15:124"},"nodeType":"YulExpressionStatement","src":"1470:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1307:184:124"},{"body":{"nodeType":"YulBlock","src":"1592:958:124","statements":[{"body":{"nodeType":"YulBlock","src":"1638:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1647:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1650:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1640:6:124"},"nodeType":"YulFunctionCall","src":"1640:12:124"},"nodeType":"YulExpressionStatement","src":"1640:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1613:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1622:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1609:3:124"},"nodeType":"YulFunctionCall","src":"1609:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1634:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1605:3:124"},"nodeType":"YulFunctionCall","src":"1605:32:124"},"nodeType":"YulIf","src":"1602:52:124"},{"nodeType":"YulAssignment","src":"1663:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1692:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1673:18:124"},"nodeType":"YulFunctionCall","src":"1673:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1663:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1711:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1742:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1753:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1738:3:124"},"nodeType":"YulFunctionCall","src":"1738:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1725:12:124"},"nodeType":"YulFunctionCall","src":"1725:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1715:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1766:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1776:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1770:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1821:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1830:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1833:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1823:6:124"},"nodeType":"YulFunctionCall","src":"1823:12:124"},"nodeType":"YulExpressionStatement","src":"1823:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1809:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1817:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1806:2:124"},"nodeType":"YulFunctionCall","src":"1806:14:124"},"nodeType":"YulIf","src":"1803:34:124"},{"nodeType":"YulVariableDeclaration","src":"1846:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1860:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1871:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1856:3:124"},"nodeType":"YulFunctionCall","src":"1856:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1850:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1926:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1935:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1938:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1928:6:124"},"nodeType":"YulFunctionCall","src":"1928:12:124"},"nodeType":"YulExpressionStatement","src":"1928:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1905:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1909:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1901:3:124"},"nodeType":"YulFunctionCall","src":"1901:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1916:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1897:3:124"},"nodeType":"YulFunctionCall","src":"1897:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1890:6:124"},"nodeType":"YulFunctionCall","src":"1890:35:124"},"nodeType":"YulIf","src":"1887:55:124"},{"nodeType":"YulVariableDeclaration","src":"1951:26:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1974:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1961:12:124"},"nodeType":"YulFunctionCall","src":"1961:16:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1955:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2000:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2002:16:124"},"nodeType":"YulFunctionCall","src":"2002:18:124"},"nodeType":"YulExpressionStatement","src":"2002:18:124"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1992:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1996:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1989:2:124"},"nodeType":"YulFunctionCall","src":"1989:10:124"},"nodeType":"YulIf","src":"1986:36:124"},{"nodeType":"YulVariableDeclaration","src":"2031:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2041:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2035:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2116:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2136:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2130:5:124"},"nodeType":"YulFunctionCall","src":"2130:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2120:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2148:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2170:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2194:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2198:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2190:3:124"},"nodeType":"YulFunctionCall","src":"2190:13:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2205:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2186:3:124"},"nodeType":"YulFunctionCall","src":"2186:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"2210:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2182:3:124"},"nodeType":"YulFunctionCall","src":"2182:31:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2215:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2178:3:124"},"nodeType":"YulFunctionCall","src":"2178:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2166:3:124"},"nodeType":"YulFunctionCall","src":"2166:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2152:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2278:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2280:16:124"},"nodeType":"YulFunctionCall","src":"2280:18:124"},"nodeType":"YulExpressionStatement","src":"2280:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2237:10:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2249:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2234:2:124"},"nodeType":"YulFunctionCall","src":"2234:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2257:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2269:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2254:2:124"},"nodeType":"YulFunctionCall","src":"2254:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2231:2:124"},"nodeType":"YulFunctionCall","src":"2231:46:124"},"nodeType":"YulIf","src":"2228:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2316:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2320:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2309:6:124"},"nodeType":"YulFunctionCall","src":"2309:22:124"},"nodeType":"YulExpressionStatement","src":"2309:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2347:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2355:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2340:6:124"},"nodeType":"YulFunctionCall","src":"2340:18:124"},"nodeType":"YulExpressionStatement","src":"2340:18:124"},{"body":{"nodeType":"YulBlock","src":"2404:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2413:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2416:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2406:6:124"},"nodeType":"YulFunctionCall","src":"2406:12:124"},"nodeType":"YulExpressionStatement","src":"2406:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2381:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2385:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2377:3:124"},"nodeType":"YulFunctionCall","src":"2377:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"2390:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2373:3:124"},"nodeType":"YulFunctionCall","src":"2373:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2395:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2370:2:124"},"nodeType":"YulFunctionCall","src":"2370:33:124"},"nodeType":"YulIf","src":"2367:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2446:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2454:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2442:3:124"},"nodeType":"YulFunctionCall","src":"2442:15:124"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2463:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2467:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2459:3:124"},"nodeType":"YulFunctionCall","src":"2459:11:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2472:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2429:12:124"},"nodeType":"YulFunctionCall","src":"2429:46:124"},"nodeType":"YulExpressionStatement","src":"2429:46:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2499:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2507:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2495:3:124"},"nodeType":"YulFunctionCall","src":"2495:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"2512:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2491:3:124"},"nodeType":"YulFunctionCall","src":"2491:24:124"},{"kind":"number","nodeType":"YulLiteral","src":"2517:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2484:6:124"},"nodeType":"YulFunctionCall","src":"2484:35:124"},"nodeType":"YulExpressionStatement","src":"2484:35:124"},{"nodeType":"YulAssignment","src":"2528:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2538:6:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2528:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1550:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1561:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1573:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1581:6:124","type":""}],"src":"1496:1054:124"},{"body":{"nodeType":"YulBlock","src":"2702:124:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2725:3:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2730:6:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2738:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2712:12:124"},"nodeType":"YulFunctionCall","src":"2712:33:124"},"nodeType":"YulExpressionStatement","src":"2712:33:124"},{"nodeType":"YulVariableDeclaration","src":"2754:26:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2768:3:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2773:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2764:3:124"},"nodeType":"YulFunctionCall","src":"2764:16:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2758:2:124","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2796:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2800:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2789:6:124"},"nodeType":"YulFunctionCall","src":"2789:13:124"},"nodeType":"YulExpressionStatement","src":"2789:13:124"},{"nodeType":"YulAssignment","src":"2811:9:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"2818:2:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2811:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2670:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2675:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2683:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2694:3:124","type":""}],"src":"2555:271:124"},{"body":{"nodeType":"YulBlock","src":"2880:230:124","statements":[{"body":{"nodeType":"YulBlock","src":"2910:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2931:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2934:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2924:6:124"},"nodeType":"YulFunctionCall","src":"2924:88:124"},"nodeType":"YulExpressionStatement","src":"2924:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3032:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3035:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3025:6:124"},"nodeType":"YulFunctionCall","src":"3025:15:124"},"nodeType":"YulExpressionStatement","src":"3025:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3060:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3063:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3053:6:124"},"nodeType":"YulFunctionCall","src":"3053:15:124"},"nodeType":"YulExpressionStatement","src":"3053:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2896:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"2899:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2893:2:124"},"nodeType":"YulFunctionCall","src":"2893:8:124"},"nodeType":"YulIf","src":"2890:188:124"},{"nodeType":"YulAssignment","src":"3087:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3099:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3102:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3095:3:124"},"nodeType":"YulFunctionCall","src":"3095:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3087:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2862:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"2865:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"2871:4:124","type":""}],"src":"2831:279:124"},{"body":{"nodeType":"YulBlock","src":"3147:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3164:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3167:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3157:6:124"},"nodeType":"YulFunctionCall","src":"3157:88:124"},"nodeType":"YulExpressionStatement","src":"3157:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3261:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3264:4:124","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3254:6:124"},"nodeType":"YulFunctionCall","src":"3254:15:124"},"nodeType":"YulExpressionStatement","src":"3254:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3285:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3288:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3278:6:124"},"nodeType":"YulFunctionCall","src":"3278:15:124"},"nodeType":"YulExpressionStatement","src":"3278:15:124"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"3115:184:124"},{"body":{"nodeType":"YulBlock","src":"3441:289:124","statements":[{"nodeType":"YulVariableDeclaration","src":"3451:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3471:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3465:5:124"},"nodeType":"YulFunctionCall","src":"3465:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3455:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3487:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3496:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3491:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3558:77:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3583:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"3588:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3579:3:124"},"nodeType":"YulFunctionCall","src":"3579:11:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3606:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"3614:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3602:3:124"},"nodeType":"YulFunctionCall","src":"3602:14:124"},{"kind":"number","nodeType":"YulLiteral","src":"3618:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3598:3:124"},"nodeType":"YulFunctionCall","src":"3598:25:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3592:5:124"},"nodeType":"YulFunctionCall","src":"3592:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3572:6:124"},"nodeType":"YulFunctionCall","src":"3572:53:124"},"nodeType":"YulExpressionStatement","src":"3572:53:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3517:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"3520:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3514:2:124"},"nodeType":"YulFunctionCall","src":"3514:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3528:21:124","statements":[{"nodeType":"YulAssignment","src":"3530:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3539:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"3542:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3535:3:124"},"nodeType":"YulFunctionCall","src":"3535:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3530:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"3510:3:124","statements":[]},"src":"3506:129:124"},{"body":{"nodeType":"YulBlock","src":"3661:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3674:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"3679:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3670:3:124"},"nodeType":"YulFunctionCall","src":"3670:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"3688:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3663:6:124"},"nodeType":"YulFunctionCall","src":"3663:27:124"},"nodeType":"YulExpressionStatement","src":"3663:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3650:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"3653:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3647:2:124"},"nodeType":"YulFunctionCall","src":"3647:13:124"},"nodeType":"YulIf","src":"3644:48:124"},{"nodeType":"YulAssignment","src":"3701:23:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3712:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"3717:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3708:3:124"},"nodeType":"YulFunctionCall","src":"3708:16:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3701:3:124"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3417:3:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3422:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3433:3:124","type":""}],"src":"3304:426:124"},{"body":{"nodeType":"YulBlock","src":"3909:249:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3926:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3937:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3919:6:124"},"nodeType":"YulFunctionCall","src":"3919:21:124"},"nodeType":"YulExpressionStatement","src":"3919:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3960:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3971:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3956:3:124"},"nodeType":"YulFunctionCall","src":"3956:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"3976:2:124","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3949:6:124"},"nodeType":"YulFunctionCall","src":"3949:30:124"},"nodeType":"YulExpressionStatement","src":"3949:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3999:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4010:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3995:3:124"},"nodeType":"YulFunctionCall","src":"3995:18:124"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"4015:34:124","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3988:6:124"},"nodeType":"YulFunctionCall","src":"3988:62:124"},"nodeType":"YulExpressionStatement","src":"3988:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4070:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4081:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4066:3:124"},"nodeType":"YulFunctionCall","src":"4066:18:124"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"4086:29:124","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4059:6:124"},"nodeType":"YulFunctionCall","src":"4059:57:124"},"nodeType":"YulExpressionStatement","src":"4059:57:124"},{"nodeType":"YulAssignment","src":"4125:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4137:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4148:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4133:3:124"},"nodeType":"YulFunctionCall","src":"4133:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4125:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3886:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3900:4:124","type":""}],"src":"3735:423:124"},{"body":{"nodeType":"YulBlock","src":"4337:240:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4354:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4365:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4347:6:124"},"nodeType":"YulFunctionCall","src":"4347:21:124"},"nodeType":"YulExpressionStatement","src":"4347:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4388:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4399:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4384:3:124"},"nodeType":"YulFunctionCall","src":"4384:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"4404:2:124","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4377:6:124"},"nodeType":"YulFunctionCall","src":"4377:30:124"},"nodeType":"YulExpressionStatement","src":"4377:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4427:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4438:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4423:3:124"},"nodeType":"YulFunctionCall","src":"4423:18:124"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"4443:34:124","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4416:6:124"},"nodeType":"YulFunctionCall","src":"4416:62:124"},"nodeType":"YulExpressionStatement","src":"4416:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4498:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4509:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4494:3:124"},"nodeType":"YulFunctionCall","src":"4494:18:124"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"4514:20:124","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4487:6:124"},"nodeType":"YulFunctionCall","src":"4487:48:124"},"nodeType":"YulExpressionStatement","src":"4487:48:124"},{"nodeType":"YulAssignment","src":"4544:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4556:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4567:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4552:3:124"},"nodeType":"YulFunctionCall","src":"4552:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4544:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4314:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4328:4:124","type":""}],"src":"4163:414:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value1 := memPtr\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        if gt(i, length) { mstore(add(pos, length), 0) }\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"12525":[{"length":32,"start":335},{"length":32,"start":417},{"length":32,"start":628},{"length":32,"start":1041},{"length":32,"start":1082},{"length":32,"start":1444}]},"linkReferences":{},"object":"60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220899ba9574e8c52c72539176723d8c74a8618334587150196e2029371e7486a8464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 SWAP12 0xA9 JUMPI 0x4E DUP13 MSTORE 0xC7 0x25 CODECOPY OR PUSH8 0x23D8C74A86183345 DUP8 ISZERO ADD SWAP7 0xE2 MUL SWAP4 PUSH18 0xE7486A8464736F6C634300080A0033000000 ","sourceMap":"528:541:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:22;:9;:11::i;:::-;528:541:86;1651:103:85;;;;;;;;;;-1:-1:-1;1651:103:85;;;;;:::i;:::-;;:::i;2283:234::-;;;;;;:::i;:::-;;:::i;1359:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:124;1240:55;;;1222:74;;1210:2;1195:18;1359:96:85;;;;;;;859:365:21;;;;;;:::i;:::-;;:::i;1172:76:85:-;;;;;;;;;;;;;:::i;2155:90:22:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:18;1183:11;;1008:196;2222:17:22;2212:9;:28::i;:::-;2155:90::o;1651:103:85:-;999:10;:20;1013:6;999:20;;995:74;;;1720:29:::1;1731:17;1720:10;:29::i;:::-;1651:103:::0;:::o;995:74::-;1051:11;:9;:11::i;2283:234::-;999:10;:20;1013:6;999:20;;995:74;;;2400:29:::1;2411:17;2400:10;:29::i;:::-;2436:12;2454:17;:30;;2485:4;;2454:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:55;;;2504:7;2496:16;;;::::0;::::1;;2394:123;2283:234:::0;;;:::o;995:74::-;1051:11;:9;:11::i;:::-;2283:234;;;:::o;1359:96::-;1411:7;999:10;:20;1013:6;999:20;;995:74;;;-1:-1:-1;823:66:18;1183:11;;1359:96:85:o;995:74::-;1051:11;:9;:11::i;:::-;1359:96;:::o;859:365:21:-;973:1;944:17;823:66:18;1183:11;;1008:196;944:17:21;:31;;;936:40;;;;;;1020:54;1073:1;1028:41;1020:54;:::i;:::-;823:66:18;989:86:21;982:94;;;;:::i;:::-;1082:26;1101:6;1082:18;:26::i;:::-;1118:12;;:16;1114:106;;1145:12;1163:6;:19;;1183:5;1163:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:45;;;1205:7;1197:16;;;;;1114:106;859:365;;:::o;1172:76:85:-;1215:7;999:10;:20;1013:6;999:20;;995:74;;;-1:-1:-1;1237:6:85::1;1359:96:::0;:::o;914:153:86:-;1009:53;:51;:53::i;1005:802:22:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:18;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;1618:334::-;1025:20:3;;1688:127:18;;;;;;;3937:2:124;1688:127:18;;;3919:21:124;3976:2;3956:18;;;3949:30;4015:34;3995:18;;;3988:62;4086:29;4066:18;;;4059:57;4133:19;;1688:127:18;;;;;;;;;823:66;1911:31;1618:334::o;2595:172:85:-;2660:10;:20;2674:6;2660:20;;;2652:83;;;;;;;4365:2:124;2652:83:85;;;4347:21:124;4404:2;4384:18;;;4377:30;4443:34;4423:18;;;4416:62;4514:20;4494:18;;;4487:48;4552:19;;2652:83:85;4163:414:124;14:196;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:124:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:184::-;1359:77;1356:1;1349:88;1456:4;1453:1;1446:15;1480:4;1477:1;1470:15;1496:1054;1573:6;1581;1634:2;1622:9;1613:7;1609:23;1605:32;1602:52;;;1650:1;1647;1640:12;1602:52;1673:29;1692:9;1673:29;:::i;:::-;1663:39;;1753:2;1742:9;1738:18;1725:32;1776:18;1817:2;1809:6;1806:14;1803:34;;;1833:1;1830;1823:12;1803:34;1871:6;1860:9;1856:22;1846:32;;1916:7;1909:4;1905:2;1901:13;1897:27;1887:55;;1938:1;1935;1928:12;1887:55;1974:2;1961:16;1996:2;1992;1989:10;1986:36;;;2002:18;;:::i;:::-;2136:2;2130:9;2198:4;2190:13;;2041:66;2186:22;;;2210:2;2182:31;2178:40;2166:53;;;2234:18;;;2254:22;;;2231:46;2228:72;;;2280:18;;:::i;:::-;2320:10;2316:2;2309:22;2355:2;2347:6;2340:18;2395:7;2390:2;2385;2381;2377:11;2373:20;2370:33;2367:53;;;2416:1;2413;2406:12;2367:53;2472:2;2467;2463;2459:11;2454:2;2446:6;2442:15;2429:46;2517:1;2512:2;2507;2499:6;2495:15;2491:24;2484:35;2538:6;2528:16;;;;;;;1496:1054;;;;;:::o;2555:271::-;2738:6;2730;2725:3;2712:33;2694:3;2764:16;;2789:13;;;2764:16;2555:271;-1:-1:-1;2555:271:124:o;2831:279::-;2871:4;2899:1;2896;2893:8;2890:188;;;2934:77;2931:1;2924:88;3035:4;3032:1;3025:15;3063:4;3060:1;3053:15;2890:188;-1:-1:-1;3095:9:124;;2831:279::o;3115:184::-;3167:77;3164:1;3157:88;3264:4;3261:1;3254:15;3288:4;3285:1;3278:15;3304:426;3433:3;3471:6;3465:13;3496:1;3506:129;3520:6;3517:1;3514:13;3506:129;;;3618:4;3602:14;;;3598:25;;3592:32;3579:11;;;3572:53;3535:12;3506:129;;;3653:6;3650:1;3647:13;3644:48;;;3688:1;3679:6;3674:3;3670:16;3663:27;3644:48;-1:-1:-1;3708:16:124;;;;;3304:426;-1:-1:-1;;3304:426:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"466600","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite","admin()":"infinite","implementation()":"infinite","initialize(address,bytes)":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","implementation()":"5c60da1b","initialize(address,bytes)":"d1f57894","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Extends BaseAdminUpgradeabilityProxy with an initializer function\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"admin\":\"The address of the admin\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"initialize(address,bytes)\":{\"details\":\"Contract initializer.\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"Address of the initial implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Only the admin can call this function.\",\"params\":{\"newImplementation\":\"The address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"The address of the new implementation.\"}}},\"title\":\"InitializableAdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"admin()\":{\"notice\":\"Return the admin address\"},\"implementation()\":{\"notice\":\"Return the implementation address\"},\"upgradeTo(address)\":{\"notice\":\"Upgrade the backing implementation of the proxy.\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":\"InitializableImmutableAdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"admin()":{"notice":"Return the admin address"},"implementation()":{"notice":"Return the implementation address"},"upgradeTo(address)":{"notice":"Upgrade the backing implementation of the proxy."},"upgradeToAndCall(address,bytes)":{"notice":"Upgrade the backing implementation of the proxy and call a function on the new implementation."}},"version":1}}},"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol":{"VersionedInitializable":{"abi":[],"devdoc":{"author":"Aave, inspired by the OpenZeppelin Initializable contract","details":"WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.","kind":"dev","methods":{},"stateVariables":{"initializing":{"details":"Indicates that the contract is in the process of being initialized."},"lastInitializedRevision":{"details":"Indicates that the contract has been initialized."}},"title":"VersionedInitializable","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave, inspired by the OpenZeppelin Initializable contract\",\"details\":\"WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"},\"lastInitializedRevision\":{\"details\":\"Indicates that the contract has been initialized.\"}},\"title\":\"VersionedInitializable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper contract to implement initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":\"VersionedInitializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol:VersionedInitializable","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol:VersionedInitializable","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol:VersionedInitializable","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"notice":"Helper contract to implement initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier.","version":1}}},"contracts/protocol/libraries/configuration/ReserveConfiguration.sol":{"ReserveConfiguration":{"abi":[{"inputs":[],"name":"DEBT_CEILING_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVES_COUNT","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"stateVariables":{"LIQUIDATION_THRESHOLD_START_BIT_POSITION":{"details":"For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed"}},"title":"ReserveConfiguration library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60ab610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c8063280d5de914604257806331b561ba14605c575b600080fd5b6049600281565b6040519081526020015b60405180910390f35b6063608081565b60405161ffff9091168152602001605356fea26469706673582212201a8e3d05ec8c67e18e5bced0ec5a683f950802de051e07fecb02266947af7f8364736f6c634300080a0033","opcodes":"PUSH1 0xAB PUSH2 0x38 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x280D5DE9 EQ PUSH1 0x42 JUMPI DUP1 PUSH4 0x31B561BA EQ PUSH1 0x5C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x49 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x63 PUSH1 0x80 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x53 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE DUP15 RETURNDATASIZE SDIV 0xEC DUP13 PUSH8 0xE18E5BCED0EC5A68 EXTCODEHASH SWAP6 ADDMOD MUL 0xDE SDIV 0x1E SMOD INVALID 0xCB MUL 0x26 PUSH10 0x47AF7F8364736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"297:23357:88:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;297:23357:88;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_CEILING_DECIMALS_12905":{"entryPoint":null,"id":12905,"parameterSlots":0,"returnSlots":0},"@MAX_RESERVES_COUNT_12908":{"entryPoint":null,"id":12908,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:402:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"123:76:124","statements":[{"nodeType":"YulAssignment","src":"133:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"145:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"156:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"141:3:124"},"nodeType":"YulFunctionCall","src":"141:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"133:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"175:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"186:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"168:6:124"},"nodeType":"YulFunctionCall","src":"168:25:124"},"nodeType":"YulExpressionStatement","src":"168:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"103:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"114:4:124","type":""}],"src":"14:185:124"},{"body":{"nodeType":"YulBlock","src":"311:89:124","statements":[{"nodeType":"YulAssignment","src":"321:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"333:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"344:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"329:3:124"},"nodeType":"YulFunctionCall","src":"329:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"321:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"363:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"378:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"386:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"374:3:124"},"nodeType":"YulFunctionCall","src":"374:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"356:6:124"},"nodeType":"YulFunctionCall","src":"356:38:124"},"nodeType":"YulExpressionStatement","src":"356:38:124"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"280:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"291:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"302:4:124","type":""}],"src":"204:196:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c8063280d5de914604257806331b561ba14605c575b600080fd5b6049600281565b6040519081526020015b60405180910390f35b6063608081565b60405161ffff9091168152602001605356fea26469706673582212201a8e3d05ec8c67e18e5bced0ec5a683f950802de051e07fecb02266947af7f8364736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x280D5DE9 EQ PUSH1 0x42 JUMPI DUP1 PUSH4 0x31B561BA EQ PUSH1 0x5C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x49 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x63 PUSH1 0x80 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x53 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE DUP15 RETURNDATASIZE SDIV 0xEC DUP13 PUSH8 0xE18E5BCED0EC5A68 EXTCODEHASH SWAP6 ADDMOD MUL 0xDE SDIV 0x1E SMOD INVALID 0xCB MUL 0x26 PUSH10 0x47AF7F8364736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"297:23357:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5187:49;;5235:1;5187:49;;;;;168:25:124;;;156:2;141:18;5187:49:88;;;;;;;;5240:47;;5284:3;5240:47;;;;;386:6:124;374:19;;;356:38;;344:2;329:18;5240:47:88;204:196:124"},"gasEstimates":{"creation":{"codeDepositCost":"34200","executionCost":"118","totalCost":"34318"},"external":{"DEBT_CEILING_DECIMALS()":"146","MAX_RESERVES_COUNT()":"188"},"internal":{"getActive(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getBorrowCap(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getBorrowableInIsolation(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getBorrowingEnabled(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getCaps(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getDebtCeiling(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getDecimals(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getEModeCategory(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getFlags(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getFlashLoanEnabled(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getFrozen(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getLiquidationBonus(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getLiquidationProtocolFee(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getLiquidationThreshold(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getLtv(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getParams(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getPaused(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getReserveFactor(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getSiloedBorrowing(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getStableRateBorrowingEnabled(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getSupplyCap(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getUnbackedMintCap(struct DataTypes.ReserveConfigurationMap memory)":"infinite","setActive(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setBorrowCap(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setBorrowableInIsolation(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setBorrowingEnabled(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setDebtCeiling(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setDecimals(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setEModeCategory(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setFlashLoanEnabled(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setFrozen(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setLiquidationBonus(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setLiquidationProtocolFee(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setLiquidationThreshold(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setLtv(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setPaused(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setReserveFactor(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setSiloedBorrowing(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setStableRateBorrowingEnabled(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setSupplyCap(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setUnbackedMintCap(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite"}},"methodIdentifiers":{"DEBT_CEILING_DECIMALS()":"280d5de9","MAX_RESERVES_COUNT()":"31b561ba"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEBT_CEILING_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESERVES_COUNT\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"LIQUIDATION_THRESHOLD_START_BIT_POSITION\":{\"details\":\"For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\"}},\"title\":\"ReserveConfiguration library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements the bitmap logic to handle the reserve configuration\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":\"ReserveConfiguration\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements the bitmap logic to handle the reserve configuration","version":1}}},"contracts/protocol/libraries/configuration/UserConfiguration.sol":{"UserConfiguration":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"UserConfiguration library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122076ed5d7cab4160c9991d858869de50feaaf7f84302c3341d4fa2a9b7476d6ad164736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH23 0xED5D7CAB4160C9991D858869DE50FEAAF7F84302C3341D 0x4F LOG2 0xA9 0xB7 SELFBALANCE PUSH14 0x6AD164736F6C634300080A003300 ","sourceMap":"356:8450:89:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;356:8450:89;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122076ed5d7cab4160c9991d858869de50feaaf7f84302c3341d4fa2a9b7476d6ad164736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH23 0xED5D7CAB4160C9991D858869DE50FEAAF7F84302C3341D 0x4F LOG2 0xA9 0xB7 SELFBALANCE PUSH14 0x6AD164736F6C634300080A003300 ","sourceMap":"356:8450:89:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_getFirstAssetIdByMask(struct DataTypes.UserConfigurationMap memory,uint256)":"infinite","getIsolationModeState(struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address))":"infinite","getSiloedBorrowingState(struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address))":"infinite","isBorrowing(struct DataTypes.UserConfigurationMap memory,uint256)":"infinite","isBorrowingAny(struct DataTypes.UserConfigurationMap memory)":"infinite","isBorrowingOne(struct DataTypes.UserConfigurationMap memory)":"infinite","isEmpty(struct DataTypes.UserConfigurationMap memory)":"infinite","isUsingAsCollateral(struct DataTypes.UserConfigurationMap memory,uint256)":"infinite","isUsingAsCollateralAny(struct DataTypes.UserConfigurationMap memory)":"infinite","isUsingAsCollateralOne(struct DataTypes.UserConfigurationMap memory)":"infinite","isUsingAsCollateralOrBorrowing(struct DataTypes.UserConfigurationMap memory,uint256)":"infinite","setBorrowing(struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)":"infinite","setUsingAsCollateral(struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"UserConfiguration library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements the bitmap logic to handle the user configuration\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":\"UserConfiguration\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements the bitmap logic to handle the user configuration","version":1}}},"contracts/protocol/libraries/helpers/Errors.sol":{"Errors":{"abi":[{"inputs":[],"name":"ACL_ADMIN_CANNOT_BE_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ADDRESSES_PROVIDER_ALREADY_ADDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ADDRESSES_PROVIDER_NOT_REGISTERED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_NOT_BORROWABLE_IN_ISOLATION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_NOT_LISTED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BORROWING_NOT_ENABLED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BORROW_CAP_EXCEEDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE_INVALID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_MUST_BE_POOL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_ATOKEN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_BRIDGE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_EMERGENCY_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_POOL_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_POOL_CONFIGURATOR","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_POOL_OR_EMERGENCY_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_RISK_OR_POOL_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLATERAL_BALANCE_IS_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLATERAL_CANNOT_BE_LIQUIDATED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLATERAL_CANNOT_COVER_NEW_BORROW","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLATERAL_SAME_AS_BORROWING_CURRENCY","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEBT_CEILING_EXCEEDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEBT_CEILING_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMODE_CATEGORY_RESERVED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_DISABLED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_INVALID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HEALTH_FACTOR_NOT_BELOW_THRESHOLD","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INCONSISTENT_EMODE_CATEGORY","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INCONSISTENT_FLASHLOAN_PARAMS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INCONSISTENT_PARAMS_LENGTH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_ADDRESSES_PROVIDER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_ADDRESSES_PROVIDER_ID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_AMOUNT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_BORROW_CAP","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_BURN_AMOUNT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_DEBT_CEILING","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_DECIMALS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_EMODE_CATEGORY","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_EMODE_CATEGORY_ASSIGNMENT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_EMODE_CATEGORY_PARAMS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_EXPIRATION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_FLASHLOAN_EXECUTOR_RETURN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_INTEREST_RATE_MODE_SELECTED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_LIQUIDATION_PROTOCOL_FEE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_LIQ_BONUS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_LIQ_THRESHOLD","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_LTV","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_MINT_AMOUNT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_RESERVE_FACTOR","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_RESERVE_INDEX","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_RESERVE_PARAMS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_SIGNATURE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_SUPPLY_CAP","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_UNBACKED_MINT_CAP","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LTV_VALIDATION_FAILED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CONTRACT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_ENOUGH_AVAILABLE_USER_BALANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_DEBT_OF_SELECTED_TYPE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_MORE_RESERVES_ALLOWED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_OUTSTANDING_STABLE_DEBT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_OUTSTANDING_VARIABLE_DEBT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATION_NOT_SUPPORTED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_ADDRESSES_DO_NOT_MATCH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_ORACLE_SENTINEL_CHECK_FAILED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_ALREADY_ADDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_ALREADY_INITIALIZED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_DEBT_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_FROZEN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_INACTIVE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_LIQUIDITY_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_PAUSED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SILOED_BORROWING_VIOLATION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STABLE_BORROWING_ENABLED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STABLE_BORROWING_NOT_ENABLED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STABLE_DEBT_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_CAP_EXCEEDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNBACKED_MINT_CAP_EXCEEDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_BALANCE_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_CANNOT_BE_RESCUED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USER_IN_ISOLATION_MODE_OR_LTV_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VARIABLE_DEBT_SUPPLY_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS_NOT_VALID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"Errors library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"611bd461003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106105f85760003560e01c80638aa3ca4c11610318578063bad8308c116101b1578063dd1dd95f11610103578063f07f6785116100ac578063fa163a8311610086578063fa163a8314611a77578063fae8279114611ab3578063fd1828ff14611aef57600080fd5b8063f07f6785146119c3578063f10727db146119ff578063f479ea1114611a3b57600080fd5b8063e3fa20f5116100dd578063e3fa20f51461190f578063e4dd8b741461194b578063e981483a1461198757600080fd5b8063dd1dd95f1461185b578063de24948c14611897578063e02f07ee146118d357600080fd5b8063d14bb17a11610165578063d9adda851161013f578063d9adda85146117a7578063dc191bd9146117e3578063dcc56db61461181f57600080fd5b8063d14bb17a146116f3578063d1cd8b1d1461172f578063d6f9fcde1461176b57600080fd5b8063c863808211610196578063c86380821461163f578063c899301a1461167b578063cd23367c146116b757600080fd5b8063bad8308c146115c7578063c08a11461461160357600080fd5b8063a4868dca1161026a578063b05100541161021e578063b68774e9116101f8578063b68774e914611513578063b7f5e2241461154f578063b87041c21461158b57600080fd5b8063b05100541461145f578063b4a457301461149b578063b5e79366146114d757600080fd5b8063ab883ca01161024f578063ab883ca0146113ab578063abd351b1146113e7578063ac7532361461142357600080fd5b8063a4868dca14611333578063a8c978531461136f57600080fd5b8063952633c5116102cc578063a2797c80116102a6578063a2797c801461127f578063a2e976c6146112bb578063a3402a38146112f757600080fd5b8063952633c5146111cb5780639527e9d91461120757806399ce53f31461124357600080fd5b80638eda46bd116102fd5780638eda46bd146111175780638f7722b21461115357806394f9fd8a1461118f57600080fd5b80638aa3ca4c1461109f5780638b8b98d7146110db57600080fd5b80634e3aed37116104955780636cd3cfbc116103e75780637aa0767e11610390578063895f7dc81161036a578063895f7dc814610feb57806389c5d45f146110275780638a3440001461106357600080fd5b80637aa0767e14610f375780637fea6f3614610f735780638596aad514610faf57600080fd5b806374459b14116103c157806374459b1414610e83578063747fa55614610ebf57806376ae8fca14610efb57600080fd5b80636cd3cfbc14610dcf578063712f536a14610e0b57806373dea5e314610e4757600080fd5b80635d9c76c01161044957806365a83bab1161042357806365a83bab14610d1b57806365e7ef4c14610d575780636b3f7cc714610d9357600080fd5b80635d9c76c014610c6757806360c3de8014610ca357806361c111d214610cdf57600080fd5b80634f77647b1161047a5780634f77647b14610bb35780635126745014610bef57806352ba9dbe14610c2b57600080fd5b80634e3aed3714610b3b5780634ef999ff14610b7757600080fd5b80632eed17e81161054e57806347ba93d811610502578063485c8ff6116104dc578063485c8ff614610a875780634d86f39314610ac35780634e01e3c114610aff57600080fd5b806347ba93d8146109d357806347cf152314610a0f578063480702ae14610a4b57600080fd5b8063366eb54d11610533578063366eb54d1461091f578063379307821461095b578063471df6851461099757600080fd5b80632eed17e8146108a7578063335763de146108e357600080fd5b80631abbb001116105b057806326e7b3121161058a57806326e7b312146107f35780632926c9711461082f5780632c8e3b4c1461086b57600080fd5b80631abbb0011461073f57806322a734461461077b57806326bbd053146107b757600080fd5b806312dcade8116105e157806312dcade81461068b57806314dcfbbc146106c7578063198d6a6b1461070357600080fd5b8063084dfa0d146105fd57806311d7b0061461064f575b600080fd5b6106396040518060400160405280600281526020017f313800000000000000000000000000000000000000000000000000000000000081525081565b6040516106469190611b2b565b60405180910390f35b6106396040518060400160405280600181526020017f390000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f393100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f393000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373500000000000000000000000000000000000000000000000000000000000081525081565b600060208083528351808285015260005b81811015611b5857858101830151858201604001528201611b3c565b81811115611b6a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212207a5c7368ae4403e495a36005771eaed457b328109046913f905f633124b0752d64736f6c634300080a0033","opcodes":"PUSH2 0x1BD4 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5F8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8AA3CA4C GT PUSH2 0x318 JUMPI DUP1 PUSH4 0xBAD8308C GT PUSH2 0x1B1 JUMPI DUP1 PUSH4 0xDD1DD95F GT PUSH2 0x103 JUMPI DUP1 PUSH4 0xF07F6785 GT PUSH2 0xAC JUMPI DUP1 PUSH4 0xFA163A83 GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xFA163A83 EQ PUSH2 0x1A77 JUMPI DUP1 PUSH4 0xFAE82791 EQ PUSH2 0x1AB3 JUMPI DUP1 PUSH4 0xFD1828FF EQ PUSH2 0x1AEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xF07F6785 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0xF10727DB EQ PUSH2 0x19FF JUMPI DUP1 PUSH4 0xF479EA11 EQ PUSH2 0x1A3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE3FA20F5 GT PUSH2 0xDD JUMPI DUP1 PUSH4 0xE3FA20F5 EQ PUSH2 0x190F JUMPI DUP1 PUSH4 0xE4DD8B74 EQ PUSH2 0x194B JUMPI DUP1 PUSH4 0xE981483A EQ PUSH2 0x1987 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDD1DD95F EQ PUSH2 0x185B JUMPI DUP1 PUSH4 0xDE24948C EQ PUSH2 0x1897 JUMPI DUP1 PUSH4 0xE02F07EE EQ PUSH2 0x18D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD14BB17A GT PUSH2 0x165 JUMPI DUP1 PUSH4 0xD9ADDA85 GT PUSH2 0x13F JUMPI DUP1 PUSH4 0xD9ADDA85 EQ PUSH2 0x17A7 JUMPI DUP1 PUSH4 0xDC191BD9 EQ PUSH2 0x17E3 JUMPI DUP1 PUSH4 0xDCC56DB6 EQ PUSH2 0x181F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD14BB17A EQ PUSH2 0x16F3 JUMPI DUP1 PUSH4 0xD1CD8B1D EQ PUSH2 0x172F JUMPI DUP1 PUSH4 0xD6F9FCDE EQ PUSH2 0x176B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC8638082 GT PUSH2 0x196 JUMPI DUP1 PUSH4 0xC8638082 EQ PUSH2 0x163F JUMPI DUP1 PUSH4 0xC899301A EQ PUSH2 0x167B JUMPI DUP1 PUSH4 0xCD23367C EQ PUSH2 0x16B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBAD8308C EQ PUSH2 0x15C7 JUMPI DUP1 PUSH4 0xC08A1146 EQ PUSH2 0x1603 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA4868DCA GT PUSH2 0x26A JUMPI DUP1 PUSH4 0xB0510054 GT PUSH2 0x21E JUMPI DUP1 PUSH4 0xB68774E9 GT PUSH2 0x1F8 JUMPI DUP1 PUSH4 0xB68774E9 EQ PUSH2 0x1513 JUMPI DUP1 PUSH4 0xB7F5E224 EQ PUSH2 0x154F JUMPI DUP1 PUSH4 0xB87041C2 EQ PUSH2 0x158B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB0510054 EQ PUSH2 0x145F JUMPI DUP1 PUSH4 0xB4A45730 EQ PUSH2 0x149B JUMPI DUP1 PUSH4 0xB5E79366 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAB883CA0 GT PUSH2 0x24F JUMPI DUP1 PUSH4 0xAB883CA0 EQ PUSH2 0x13AB JUMPI DUP1 PUSH4 0xABD351B1 EQ PUSH2 0x13E7 JUMPI DUP1 PUSH4 0xAC753236 EQ PUSH2 0x1423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA4868DCA EQ PUSH2 0x1333 JUMPI DUP1 PUSH4 0xA8C97853 EQ PUSH2 0x136F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x952633C5 GT PUSH2 0x2CC JUMPI DUP1 PUSH4 0xA2797C80 GT PUSH2 0x2A6 JUMPI DUP1 PUSH4 0xA2797C80 EQ PUSH2 0x127F JUMPI DUP1 PUSH4 0xA2E976C6 EQ PUSH2 0x12BB JUMPI DUP1 PUSH4 0xA3402A38 EQ PUSH2 0x12F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x952633C5 EQ PUSH2 0x11CB JUMPI DUP1 PUSH4 0x9527E9D9 EQ PUSH2 0x1207 JUMPI DUP1 PUSH4 0x99CE53F3 EQ PUSH2 0x1243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8EDA46BD GT PUSH2 0x2FD JUMPI DUP1 PUSH4 0x8EDA46BD EQ PUSH2 0x1117 JUMPI DUP1 PUSH4 0x8F7722B2 EQ PUSH2 0x1153 JUMPI DUP1 PUSH4 0x94F9FD8A EQ PUSH2 0x118F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8AA3CA4C EQ PUSH2 0x109F JUMPI DUP1 PUSH4 0x8B8B98D7 EQ PUSH2 0x10DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E3AED37 GT PUSH2 0x495 JUMPI DUP1 PUSH4 0x6CD3CFBC GT PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x7AA0767E GT PUSH2 0x390 JUMPI DUP1 PUSH4 0x895F7DC8 GT PUSH2 0x36A JUMPI DUP1 PUSH4 0x895F7DC8 EQ PUSH2 0xFEB JUMPI DUP1 PUSH4 0x89C5D45F EQ PUSH2 0x1027 JUMPI DUP1 PUSH4 0x8A344000 EQ PUSH2 0x1063 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7AA0767E EQ PUSH2 0xF37 JUMPI DUP1 PUSH4 0x7FEA6F36 EQ PUSH2 0xF73 JUMPI DUP1 PUSH4 0x8596AAD5 EQ PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x74459B14 GT PUSH2 0x3C1 JUMPI DUP1 PUSH4 0x74459B14 EQ PUSH2 0xE83 JUMPI DUP1 PUSH4 0x747FA556 EQ PUSH2 0xEBF JUMPI DUP1 PUSH4 0x76AE8FCA EQ PUSH2 0xEFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6CD3CFBC EQ PUSH2 0xDCF JUMPI DUP1 PUSH4 0x712F536A EQ PUSH2 0xE0B JUMPI DUP1 PUSH4 0x73DEA5E3 EQ PUSH2 0xE47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5D9C76C0 GT PUSH2 0x449 JUMPI DUP1 PUSH4 0x65A83BAB GT PUSH2 0x423 JUMPI DUP1 PUSH4 0x65A83BAB EQ PUSH2 0xD1B JUMPI DUP1 PUSH4 0x65E7EF4C EQ PUSH2 0xD57 JUMPI DUP1 PUSH4 0x6B3F7CC7 EQ PUSH2 0xD93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5D9C76C0 EQ PUSH2 0xC67 JUMPI DUP1 PUSH4 0x60C3DE80 EQ PUSH2 0xCA3 JUMPI DUP1 PUSH4 0x61C111D2 EQ PUSH2 0xCDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F77647B GT PUSH2 0x47A JUMPI DUP1 PUSH4 0x4F77647B EQ PUSH2 0xBB3 JUMPI DUP1 PUSH4 0x51267450 EQ PUSH2 0xBEF JUMPI DUP1 PUSH4 0x52BA9DBE EQ PUSH2 0xC2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E3AED37 EQ PUSH2 0xB3B JUMPI DUP1 PUSH4 0x4EF999FF EQ PUSH2 0xB77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2EED17E8 GT PUSH2 0x54E JUMPI DUP1 PUSH4 0x47BA93D8 GT PUSH2 0x502 JUMPI DUP1 PUSH4 0x485C8FF6 GT PUSH2 0x4DC JUMPI DUP1 PUSH4 0x485C8FF6 EQ PUSH2 0xA87 JUMPI DUP1 PUSH4 0x4D86F393 EQ PUSH2 0xAC3 JUMPI DUP1 PUSH4 0x4E01E3C1 EQ PUSH2 0xAFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x47BA93D8 EQ PUSH2 0x9D3 JUMPI DUP1 PUSH4 0x47CF1523 EQ PUSH2 0xA0F JUMPI DUP1 PUSH4 0x480702AE EQ PUSH2 0xA4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x366EB54D GT PUSH2 0x533 JUMPI DUP1 PUSH4 0x366EB54D EQ PUSH2 0x91F JUMPI DUP1 PUSH4 0x37930782 EQ PUSH2 0x95B JUMPI DUP1 PUSH4 0x471DF685 EQ PUSH2 0x997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2EED17E8 EQ PUSH2 0x8A7 JUMPI DUP1 PUSH4 0x335763DE EQ PUSH2 0x8E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1ABBB001 GT PUSH2 0x5B0 JUMPI DUP1 PUSH4 0x26E7B312 GT PUSH2 0x58A JUMPI DUP1 PUSH4 0x26E7B312 EQ PUSH2 0x7F3 JUMPI DUP1 PUSH4 0x2926C971 EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0x2C8E3B4C EQ PUSH2 0x86B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1ABBB001 EQ PUSH2 0x73F JUMPI DUP1 PUSH4 0x22A73446 EQ PUSH2 0x77B JUMPI DUP1 PUSH4 0x26BBD053 EQ PUSH2 0x7B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12DCADE8 GT PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x12DCADE8 EQ PUSH2 0x68B JUMPI DUP1 PUSH4 0x14DCFBBC EQ PUSH2 0x6C7 JUMPI DUP1 PUSH4 0x198D6A6B EQ PUSH2 0x703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x84DFA0D EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0x11D7B006 EQ PUSH2 0x64F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3138000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x646 SWAP2 SWAP1 PUSH2 0x1B2B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3900000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3134000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3836000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3838000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3437000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3300000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3434000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3530000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3632000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3334000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3833000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3137000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3533000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3535000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3532000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3430000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3439000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3431000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3135000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3630000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3436000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3931000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3534000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3435000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3433000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3432000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3332000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3736000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3834000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3631000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3339000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3733000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3700000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3336000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3831000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3930000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3338000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3536000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3735000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1B58 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1B3C JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1B6A JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0x5C7368AE4403E495A36005771EAED457B328109046913F905F6331 0x24 0xB0 PUSH22 0x2D64736F6C634300080A003300000000000000000000 ","sourceMap":"205:9704:90:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;205:9704:90;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ACL_ADMIN_CANNOT_BE_ZERO_14770":{"entryPoint":null,"id":14770,"parameterSlots":0,"returnSlots":0},"@ADDRESSES_PROVIDER_ALREADY_ADDED_14803":{"entryPoint":null,"id":14803,"parameterSlots":0,"returnSlots":0},"@ADDRESSES_PROVIDER_NOT_REGISTERED_14569":{"entryPoint":null,"id":14569,"parameterSlots":0,"returnSlots":0},"@AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE_14662":{"entryPoint":null,"id":14662,"parameterSlots":0,"returnSlots":0},"@ASSET_NOT_BORROWABLE_IN_ISOLATION_14725":{"entryPoint":null,"id":14725,"parameterSlots":0,"returnSlots":0},"@ASSET_NOT_LISTED_14791":{"entryPoint":null,"id":14791,"parameterSlots":0,"returnSlots":0},"@BORROWING_NOT_ENABLED_14638":{"entryPoint":null,"id":14638,"parameterSlots":0,"returnSlots":0},"@BORROW_CAP_EXCEEDED_14695":{"entryPoint":null,"id":14695,"parameterSlots":0,"returnSlots":0},"@BRIDGE_PROTOCOL_FEE_INVALID_14614":{"entryPoint":null,"id":14614,"parameterSlots":0,"returnSlots":0},"@CALLER_MUST_BE_POOL_14617":{"entryPoint":null,"id":14617,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN_14563":{"entryPoint":null,"id":14563,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_ATOKEN_14581":{"entryPoint":null,"id":14581,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_BRIDGE_14566":{"entryPoint":null,"id":14566,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_EMERGENCY_ADMIN_14554":{"entryPoint":null,"id":14554,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_POOL_ADMIN_14551":{"entryPoint":null,"id":14551,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_POOL_CONFIGURATOR_14578":{"entryPoint":null,"id":14578,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_POOL_OR_EMERGENCY_ADMIN_14557":{"entryPoint":null,"id":14557,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_RISK_OR_POOL_ADMIN_14560":{"entryPoint":null,"id":14560,"parameterSlots":0,"returnSlots":0},"@COLLATERAL_BALANCE_IS_ZERO_14650":{"entryPoint":null,"id":14650,"parameterSlots":0,"returnSlots":0},"@COLLATERAL_CANNOT_BE_LIQUIDATED_14686":{"entryPoint":null,"id":14686,"parameterSlots":0,"returnSlots":0},"@COLLATERAL_CANNOT_COVER_NEW_BORROW_14656":{"entryPoint":null,"id":14656,"parameterSlots":0,"returnSlots":0},"@COLLATERAL_SAME_AS_BORROWING_CURRENCY_14659":{"entryPoint":null,"id":14659,"parameterSlots":0,"returnSlots":0},"@DEBT_CEILING_EXCEEDED_14704":{"entryPoint":null,"id":14704,"parameterSlots":0,"returnSlots":0},"@DEBT_CEILING_NOT_ZERO_14788":{"entryPoint":null,"id":14788,"parameterSlots":0,"returnSlots":0},"@EMODE_CATEGORY_RESERVED_14596":{"entryPoint":null,"id":14596,"parameterSlots":0,"returnSlots":0},"@FLASHLOAN_DISABLED_14818":{"entryPoint":null,"id":14818,"parameterSlots":0,"returnSlots":0},"@FLASHLOAN_PREMIUM_INVALID_14605":{"entryPoint":null,"id":14605,"parameterSlots":0,"returnSlots":0},"@HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD_14653":{"entryPoint":null,"id":14653,"parameterSlots":0,"returnSlots":0},"@HEALTH_FACTOR_NOT_BELOW_THRESHOLD_14683":{"entryPoint":null,"id":14683,"parameterSlots":0,"returnSlots":0},"@INCONSISTENT_EMODE_CATEGORY_14719":{"entryPoint":null,"id":14719,"parameterSlots":0,"returnSlots":0},"@INCONSISTENT_FLASHLOAN_PARAMS_14692":{"entryPoint":null,"id":14692,"parameterSlots":0,"returnSlots":0},"@INCONSISTENT_PARAMS_LENGTH_14773":{"entryPoint":null,"id":14773,"parameterSlots":0,"returnSlots":0},"@INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET_14680":{"entryPoint":null,"id":14680,"parameterSlots":0,"returnSlots":0},"@INVALID_ADDRESSES_PROVIDER_14584":{"entryPoint":null,"id":14584,"parameterSlots":0,"returnSlots":0},"@INVALID_ADDRESSES_PROVIDER_ID_14572":{"entryPoint":null,"id":14572,"parameterSlots":0,"returnSlots":0},"@INVALID_AMOUNT_14626":{"entryPoint":null,"id":14626,"parameterSlots":0,"returnSlots":0},"@INVALID_BORROW_CAP_14749":{"entryPoint":null,"id":14749,"parameterSlots":0,"returnSlots":0},"@INVALID_BURN_AMOUNT_14623":{"entryPoint":null,"id":14623,"parameterSlots":0,"returnSlots":0},"@INVALID_DEBT_CEILING_14764":{"entryPoint":null,"id":14764,"parameterSlots":0,"returnSlots":0},"@INVALID_DECIMALS_14743":{"entryPoint":null,"id":14743,"parameterSlots":0,"returnSlots":0},"@INVALID_EMODE_CATEGORY_14758":{"entryPoint":null,"id":14758,"parameterSlots":0,"returnSlots":0},"@INVALID_EMODE_CATEGORY_ASSIGNMENT_14599":{"entryPoint":null,"id":14599,"parameterSlots":0,"returnSlots":0},"@INVALID_EMODE_CATEGORY_PARAMS_14611":{"entryPoint":null,"id":14611,"parameterSlots":0,"returnSlots":0},"@INVALID_EXPIRATION_14779":{"entryPoint":null,"id":14779,"parameterSlots":0,"returnSlots":0},"@INVALID_FLASHLOAN_EXECUTOR_RETURN_14587":{"entryPoint":null,"id":14587,"parameterSlots":0,"returnSlots":0},"@INVALID_INTEREST_RATE_MODE_SELECTED_14647":{"entryPoint":null,"id":14647,"parameterSlots":0,"returnSlots":0},"@INVALID_LIQUIDATION_PROTOCOL_FEE_14755":{"entryPoint":null,"id":14755,"parameterSlots":0,"returnSlots":0},"@INVALID_LIQ_BONUS_14740":{"entryPoint":null,"id":14740,"parameterSlots":0,"returnSlots":0},"@INVALID_LIQ_THRESHOLD_14737":{"entryPoint":null,"id":14737,"parameterSlots":0,"returnSlots":0},"@INVALID_LTV_14734":{"entryPoint":null,"id":14734,"parameterSlots":0,"returnSlots":0},"@INVALID_MINT_AMOUNT_14620":{"entryPoint":null,"id":14620,"parameterSlots":0,"returnSlots":0},"@INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO_14797":{"entryPoint":null,"id":14797,"parameterSlots":0,"returnSlots":0},"@INVALID_OPTIMAL_USAGE_RATIO_14794":{"entryPoint":null,"id":14794,"parameterSlots":0,"returnSlots":0},"@INVALID_RESERVE_FACTOR_14746":{"entryPoint":null,"id":14746,"parameterSlots":0,"returnSlots":0},"@INVALID_RESERVE_INDEX_14767":{"entryPoint":null,"id":14767,"parameterSlots":0,"returnSlots":0},"@INVALID_RESERVE_PARAMS_14608":{"entryPoint":null,"id":14608,"parameterSlots":0,"returnSlots":0},"@INVALID_SIGNATURE_14782":{"entryPoint":null,"id":14782,"parameterSlots":0,"returnSlots":0},"@INVALID_SUPPLY_CAP_14752":{"entryPoint":null,"id":14752,"parameterSlots":0,"returnSlots":0},"@INVALID_UNBACKED_MINT_CAP_14761":{"entryPoint":null,"id":14761,"parameterSlots":0,"returnSlots":0},"@LTV_VALIDATION_FAILED_14716":{"entryPoint":null,"id":14716,"parameterSlots":0,"returnSlots":0},"@NOT_CONTRACT_14575":{"entryPoint":null,"id":14575,"parameterSlots":0,"returnSlots":0},"@NOT_ENOUGH_AVAILABLE_USER_BALANCE_14644":{"entryPoint":null,"id":14644,"parameterSlots":0,"returnSlots":0},"@NO_DEBT_OF_SELECTED_TYPE_14665":{"entryPoint":null,"id":14665,"parameterSlots":0,"returnSlots":0},"@NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF_14668":{"entryPoint":null,"id":14668,"parameterSlots":0,"returnSlots":0},"@NO_MORE_RESERVES_ALLOWED_14593":{"entryPoint":null,"id":14593,"parameterSlots":0,"returnSlots":0},"@NO_OUTSTANDING_STABLE_DEBT_14671":{"entryPoint":null,"id":14671,"parameterSlots":0,"returnSlots":0},"@NO_OUTSTANDING_VARIABLE_DEBT_14674":{"entryPoint":null,"id":14674,"parameterSlots":0,"returnSlots":0},"@OPERATION_NOT_SUPPORTED_14785":{"entryPoint":null,"id":14785,"parameterSlots":0,"returnSlots":0},"@POOL_ADDRESSES_DO_NOT_MATCH_14806":{"entryPoint":null,"id":14806,"parameterSlots":0,"returnSlots":0},"@PRICE_ORACLE_SENTINEL_CHECK_FAILED_14722":{"entryPoint":null,"id":14722,"parameterSlots":0,"returnSlots":0},"@RESERVE_ALREADY_ADDED_14590":{"entryPoint":null,"id":14590,"parameterSlots":0,"returnSlots":0},"@RESERVE_ALREADY_INITIALIZED_14728":{"entryPoint":null,"id":14728,"parameterSlots":0,"returnSlots":0},"@RESERVE_DEBT_NOT_ZERO_14815":{"entryPoint":null,"id":14815,"parameterSlots":0,"returnSlots":0},"@RESERVE_FROZEN_14632":{"entryPoint":null,"id":14632,"parameterSlots":0,"returnSlots":0},"@RESERVE_INACTIVE_14629":{"entryPoint":null,"id":14629,"parameterSlots":0,"returnSlots":0},"@RESERVE_LIQUIDITY_NOT_ZERO_14602":{"entryPoint":null,"id":14602,"parameterSlots":0,"returnSlots":0},"@RESERVE_PAUSED_14635":{"entryPoint":null,"id":14635,"parameterSlots":0,"returnSlots":0},"@SILOED_BORROWING_VIOLATION_14812":{"entryPoint":null,"id":14812,"parameterSlots":0,"returnSlots":0},"@SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER_14689":{"entryPoint":null,"id":14689,"parameterSlots":0,"returnSlots":0},"@STABLE_BORROWING_ENABLED_14809":{"entryPoint":null,"id":14809,"parameterSlots":0,"returnSlots":0},"@STABLE_BORROWING_NOT_ENABLED_14641":{"entryPoint":null,"id":14641,"parameterSlots":0,"returnSlots":0},"@STABLE_DEBT_NOT_ZERO_14710":{"entryPoint":null,"id":14710,"parameterSlots":0,"returnSlots":0},"@SUPPLY_CAP_EXCEEDED_14698":{"entryPoint":null,"id":14698,"parameterSlots":0,"returnSlots":0},"@UNBACKED_MINT_CAP_EXCEEDED_14701":{"entryPoint":null,"id":14701,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_BALANCE_ZERO_14677":{"entryPoint":null,"id":14677,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_CANNOT_BE_RESCUED_14800":{"entryPoint":null,"id":14800,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO_14707":{"entryPoint":null,"id":14707,"parameterSlots":0,"returnSlots":0},"@USER_IN_ISOLATION_MODE_OR_LTV_ZERO_14731":{"entryPoint":null,"id":14731,"parameterSlots":0,"returnSlots":0},"@VARIABLE_DEBT_SUPPLY_NOT_ZERO_14713":{"entryPoint":null,"id":14713,"parameterSlots":0,"returnSlots":0},"@ZERO_ADDRESS_NOT_VALID_14776":{"entryPoint":null,"id":14776,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed":{"entryPoint":6955,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:680:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"143:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"153:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"163:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"157:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"192:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"174:6:124"},"nodeType":"YulFunctionCall","src":"174:21:124"},"nodeType":"YulExpressionStatement","src":"174:21:124"},{"nodeType":"YulVariableDeclaration","src":"204:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"224:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"218:5:124"},"nodeType":"YulFunctionCall","src":"218:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"208:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"262:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:124"},"nodeType":"YulFunctionCall","src":"247:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"267:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"240:6:124"},"nodeType":"YulFunctionCall","src":"240:34:124"},"nodeType":"YulExpressionStatement","src":"240:34:124"},{"nodeType":"YulVariableDeclaration","src":"283:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"292:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"287:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"352:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"381:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"392:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"396:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"415:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"423:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"411:3:124"},"nodeType":"YulFunctionCall","src":"411:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"427:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"407:3:124"},"nodeType":"YulFunctionCall","src":"407:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"401:5:124"},"nodeType":"YulFunctionCall","src":"401:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:66:124"},"nodeType":"YulExpressionStatement","src":"366:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"313:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"316:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"310:2:124"},"nodeType":"YulFunctionCall","src":"310:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"324:19:124","statements":[{"nodeType":"YulAssignment","src":"326:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"335:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"338:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"331:3:124"},"nodeType":"YulFunctionCall","src":"331:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"326:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"306:3:124","statements":[]},"src":"302:140:124"},{"body":{"nodeType":"YulBlock","src":"476:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"505:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"516:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"501:3:124"},"nodeType":"YulFunctionCall","src":"501:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"525:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"497:3:124"},"nodeType":"YulFunctionCall","src":"497:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"530:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"490:6:124"},"nodeType":"YulFunctionCall","src":"490:42:124"},"nodeType":"YulExpressionStatement","src":"490:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"457:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"460:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"454:2:124"},"nodeType":"YulFunctionCall","src":"454:13:124"},"nodeType":"YulIf","src":"451:91:124"},{"nodeType":"YulAssignment","src":"551:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"567:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"586:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"594:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"582:3:124"},"nodeType":"YulFunctionCall","src":"582:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"599:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"578:3:124"},"nodeType":"YulFunctionCall","src":"578:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"669:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"551:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"112:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"123:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"134:4:124","type":""}],"src":"14:664:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106105f85760003560e01c80638aa3ca4c11610318578063bad8308c116101b1578063dd1dd95f11610103578063f07f6785116100ac578063fa163a8311610086578063fa163a8314611a77578063fae8279114611ab3578063fd1828ff14611aef57600080fd5b8063f07f6785146119c3578063f10727db146119ff578063f479ea1114611a3b57600080fd5b8063e3fa20f5116100dd578063e3fa20f51461190f578063e4dd8b741461194b578063e981483a1461198757600080fd5b8063dd1dd95f1461185b578063de24948c14611897578063e02f07ee146118d357600080fd5b8063d14bb17a11610165578063d9adda851161013f578063d9adda85146117a7578063dc191bd9146117e3578063dcc56db61461181f57600080fd5b8063d14bb17a146116f3578063d1cd8b1d1461172f578063d6f9fcde1461176b57600080fd5b8063c863808211610196578063c86380821461163f578063c899301a1461167b578063cd23367c146116b757600080fd5b8063bad8308c146115c7578063c08a11461461160357600080fd5b8063a4868dca1161026a578063b05100541161021e578063b68774e9116101f8578063b68774e914611513578063b7f5e2241461154f578063b87041c21461158b57600080fd5b8063b05100541461145f578063b4a457301461149b578063b5e79366146114d757600080fd5b8063ab883ca01161024f578063ab883ca0146113ab578063abd351b1146113e7578063ac7532361461142357600080fd5b8063a4868dca14611333578063a8c978531461136f57600080fd5b8063952633c5116102cc578063a2797c80116102a6578063a2797c801461127f578063a2e976c6146112bb578063a3402a38146112f757600080fd5b8063952633c5146111cb5780639527e9d91461120757806399ce53f31461124357600080fd5b80638eda46bd116102fd5780638eda46bd146111175780638f7722b21461115357806394f9fd8a1461118f57600080fd5b80638aa3ca4c1461109f5780638b8b98d7146110db57600080fd5b80634e3aed37116104955780636cd3cfbc116103e75780637aa0767e11610390578063895f7dc81161036a578063895f7dc814610feb57806389c5d45f146110275780638a3440001461106357600080fd5b80637aa0767e14610f375780637fea6f3614610f735780638596aad514610faf57600080fd5b806374459b14116103c157806374459b1414610e83578063747fa55614610ebf57806376ae8fca14610efb57600080fd5b80636cd3cfbc14610dcf578063712f536a14610e0b57806373dea5e314610e4757600080fd5b80635d9c76c01161044957806365a83bab1161042357806365a83bab14610d1b57806365e7ef4c14610d575780636b3f7cc714610d9357600080fd5b80635d9c76c014610c6757806360c3de8014610ca357806361c111d214610cdf57600080fd5b80634f77647b1161047a5780634f77647b14610bb35780635126745014610bef57806352ba9dbe14610c2b57600080fd5b80634e3aed3714610b3b5780634ef999ff14610b7757600080fd5b80632eed17e81161054e57806347ba93d811610502578063485c8ff6116104dc578063485c8ff614610a875780634d86f39314610ac35780634e01e3c114610aff57600080fd5b806347ba93d8146109d357806347cf152314610a0f578063480702ae14610a4b57600080fd5b8063366eb54d11610533578063366eb54d1461091f578063379307821461095b578063471df6851461099757600080fd5b80632eed17e8146108a7578063335763de146108e357600080fd5b80631abbb001116105b057806326e7b3121161058a57806326e7b312146107f35780632926c9711461082f5780632c8e3b4c1461086b57600080fd5b80631abbb0011461073f57806322a734461461077b57806326bbd053146107b757600080fd5b806312dcade8116105e157806312dcade81461068b57806314dcfbbc146106c7578063198d6a6b1461070357600080fd5b8063084dfa0d146105fd57806311d7b0061461064f575b600080fd5b6106396040518060400160405280600281526020017f313800000000000000000000000000000000000000000000000000000000000081525081565b6040516106469190611b2b565b60405180910390f35b6106396040518060400160405280600181526020017f390000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f393100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f393000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373500000000000000000000000000000000000000000000000000000000000081525081565b600060208083528351808285015260005b81811015611b5857858101830151858201604001528201611b3c565b81811115611b6a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212207a5c7368ae4403e495a36005771eaed457b328109046913f905f633124b0752d64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5F8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8AA3CA4C GT PUSH2 0x318 JUMPI DUP1 PUSH4 0xBAD8308C GT PUSH2 0x1B1 JUMPI DUP1 PUSH4 0xDD1DD95F GT PUSH2 0x103 JUMPI DUP1 PUSH4 0xF07F6785 GT PUSH2 0xAC JUMPI DUP1 PUSH4 0xFA163A83 GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xFA163A83 EQ PUSH2 0x1A77 JUMPI DUP1 PUSH4 0xFAE82791 EQ PUSH2 0x1AB3 JUMPI DUP1 PUSH4 0xFD1828FF EQ PUSH2 0x1AEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xF07F6785 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0xF10727DB EQ PUSH2 0x19FF JUMPI DUP1 PUSH4 0xF479EA11 EQ PUSH2 0x1A3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE3FA20F5 GT PUSH2 0xDD JUMPI DUP1 PUSH4 0xE3FA20F5 EQ PUSH2 0x190F JUMPI DUP1 PUSH4 0xE4DD8B74 EQ PUSH2 0x194B JUMPI DUP1 PUSH4 0xE981483A EQ PUSH2 0x1987 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDD1DD95F EQ PUSH2 0x185B JUMPI DUP1 PUSH4 0xDE24948C EQ PUSH2 0x1897 JUMPI DUP1 PUSH4 0xE02F07EE EQ PUSH2 0x18D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD14BB17A GT PUSH2 0x165 JUMPI DUP1 PUSH4 0xD9ADDA85 GT PUSH2 0x13F JUMPI DUP1 PUSH4 0xD9ADDA85 EQ PUSH2 0x17A7 JUMPI DUP1 PUSH4 0xDC191BD9 EQ PUSH2 0x17E3 JUMPI DUP1 PUSH4 0xDCC56DB6 EQ PUSH2 0x181F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD14BB17A EQ PUSH2 0x16F3 JUMPI DUP1 PUSH4 0xD1CD8B1D EQ PUSH2 0x172F JUMPI DUP1 PUSH4 0xD6F9FCDE EQ PUSH2 0x176B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC8638082 GT PUSH2 0x196 JUMPI DUP1 PUSH4 0xC8638082 EQ PUSH2 0x163F JUMPI DUP1 PUSH4 0xC899301A EQ PUSH2 0x167B JUMPI DUP1 PUSH4 0xCD23367C EQ PUSH2 0x16B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBAD8308C EQ PUSH2 0x15C7 JUMPI DUP1 PUSH4 0xC08A1146 EQ PUSH2 0x1603 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA4868DCA GT PUSH2 0x26A JUMPI DUP1 PUSH4 0xB0510054 GT PUSH2 0x21E JUMPI DUP1 PUSH4 0xB68774E9 GT PUSH2 0x1F8 JUMPI DUP1 PUSH4 0xB68774E9 EQ PUSH2 0x1513 JUMPI DUP1 PUSH4 0xB7F5E224 EQ PUSH2 0x154F JUMPI DUP1 PUSH4 0xB87041C2 EQ PUSH2 0x158B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB0510054 EQ PUSH2 0x145F JUMPI DUP1 PUSH4 0xB4A45730 EQ PUSH2 0x149B JUMPI DUP1 PUSH4 0xB5E79366 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAB883CA0 GT PUSH2 0x24F JUMPI DUP1 PUSH4 0xAB883CA0 EQ PUSH2 0x13AB JUMPI DUP1 PUSH4 0xABD351B1 EQ PUSH2 0x13E7 JUMPI DUP1 PUSH4 0xAC753236 EQ PUSH2 0x1423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA4868DCA EQ PUSH2 0x1333 JUMPI DUP1 PUSH4 0xA8C97853 EQ PUSH2 0x136F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x952633C5 GT PUSH2 0x2CC JUMPI DUP1 PUSH4 0xA2797C80 GT PUSH2 0x2A6 JUMPI DUP1 PUSH4 0xA2797C80 EQ PUSH2 0x127F JUMPI DUP1 PUSH4 0xA2E976C6 EQ PUSH2 0x12BB JUMPI DUP1 PUSH4 0xA3402A38 EQ PUSH2 0x12F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x952633C5 EQ PUSH2 0x11CB JUMPI DUP1 PUSH4 0x9527E9D9 EQ PUSH2 0x1207 JUMPI DUP1 PUSH4 0x99CE53F3 EQ PUSH2 0x1243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8EDA46BD GT PUSH2 0x2FD JUMPI DUP1 PUSH4 0x8EDA46BD EQ PUSH2 0x1117 JUMPI DUP1 PUSH4 0x8F7722B2 EQ PUSH2 0x1153 JUMPI DUP1 PUSH4 0x94F9FD8A EQ PUSH2 0x118F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8AA3CA4C EQ PUSH2 0x109F JUMPI DUP1 PUSH4 0x8B8B98D7 EQ PUSH2 0x10DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E3AED37 GT PUSH2 0x495 JUMPI DUP1 PUSH4 0x6CD3CFBC GT PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x7AA0767E GT PUSH2 0x390 JUMPI DUP1 PUSH4 0x895F7DC8 GT PUSH2 0x36A JUMPI DUP1 PUSH4 0x895F7DC8 EQ PUSH2 0xFEB JUMPI DUP1 PUSH4 0x89C5D45F EQ PUSH2 0x1027 JUMPI DUP1 PUSH4 0x8A344000 EQ PUSH2 0x1063 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7AA0767E EQ PUSH2 0xF37 JUMPI DUP1 PUSH4 0x7FEA6F36 EQ PUSH2 0xF73 JUMPI DUP1 PUSH4 0x8596AAD5 EQ PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x74459B14 GT PUSH2 0x3C1 JUMPI DUP1 PUSH4 0x74459B14 EQ PUSH2 0xE83 JUMPI DUP1 PUSH4 0x747FA556 EQ PUSH2 0xEBF JUMPI DUP1 PUSH4 0x76AE8FCA EQ PUSH2 0xEFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6CD3CFBC EQ PUSH2 0xDCF JUMPI DUP1 PUSH4 0x712F536A EQ PUSH2 0xE0B JUMPI DUP1 PUSH4 0x73DEA5E3 EQ PUSH2 0xE47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5D9C76C0 GT PUSH2 0x449 JUMPI DUP1 PUSH4 0x65A83BAB GT PUSH2 0x423 JUMPI DUP1 PUSH4 0x65A83BAB EQ PUSH2 0xD1B JUMPI DUP1 PUSH4 0x65E7EF4C EQ PUSH2 0xD57 JUMPI DUP1 PUSH4 0x6B3F7CC7 EQ PUSH2 0xD93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5D9C76C0 EQ PUSH2 0xC67 JUMPI DUP1 PUSH4 0x60C3DE80 EQ PUSH2 0xCA3 JUMPI DUP1 PUSH4 0x61C111D2 EQ PUSH2 0xCDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F77647B GT PUSH2 0x47A JUMPI DUP1 PUSH4 0x4F77647B EQ PUSH2 0xBB3 JUMPI DUP1 PUSH4 0x51267450 EQ PUSH2 0xBEF JUMPI DUP1 PUSH4 0x52BA9DBE EQ PUSH2 0xC2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E3AED37 EQ PUSH2 0xB3B JUMPI DUP1 PUSH4 0x4EF999FF EQ PUSH2 0xB77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2EED17E8 GT PUSH2 0x54E JUMPI DUP1 PUSH4 0x47BA93D8 GT PUSH2 0x502 JUMPI DUP1 PUSH4 0x485C8FF6 GT PUSH2 0x4DC JUMPI DUP1 PUSH4 0x485C8FF6 EQ PUSH2 0xA87 JUMPI DUP1 PUSH4 0x4D86F393 EQ PUSH2 0xAC3 JUMPI DUP1 PUSH4 0x4E01E3C1 EQ PUSH2 0xAFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x47BA93D8 EQ PUSH2 0x9D3 JUMPI DUP1 PUSH4 0x47CF1523 EQ PUSH2 0xA0F JUMPI DUP1 PUSH4 0x480702AE EQ PUSH2 0xA4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x366EB54D GT PUSH2 0x533 JUMPI DUP1 PUSH4 0x366EB54D EQ PUSH2 0x91F JUMPI DUP1 PUSH4 0x37930782 EQ PUSH2 0x95B JUMPI DUP1 PUSH4 0x471DF685 EQ PUSH2 0x997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2EED17E8 EQ PUSH2 0x8A7 JUMPI DUP1 PUSH4 0x335763DE EQ PUSH2 0x8E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1ABBB001 GT PUSH2 0x5B0 JUMPI DUP1 PUSH4 0x26E7B312 GT PUSH2 0x58A JUMPI DUP1 PUSH4 0x26E7B312 EQ PUSH2 0x7F3 JUMPI DUP1 PUSH4 0x2926C971 EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0x2C8E3B4C EQ PUSH2 0x86B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1ABBB001 EQ PUSH2 0x73F JUMPI DUP1 PUSH4 0x22A73446 EQ PUSH2 0x77B JUMPI DUP1 PUSH4 0x26BBD053 EQ PUSH2 0x7B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12DCADE8 GT PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x12DCADE8 EQ PUSH2 0x68B JUMPI DUP1 PUSH4 0x14DCFBBC EQ PUSH2 0x6C7 JUMPI DUP1 PUSH4 0x198D6A6B EQ PUSH2 0x703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x84DFA0D EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0x11D7B006 EQ PUSH2 0x64F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3138000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x646 SWAP2 SWAP1 PUSH2 0x1B2B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3900000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3134000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3836000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3838000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3437000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3300000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3434000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3530000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3632000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3334000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3833000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3137000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3533000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3535000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3532000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3430000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3439000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3431000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3135000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3630000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3436000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3931000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3534000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3435000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3433000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3432000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3332000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3736000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3834000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3631000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3339000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3733000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3700000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3336000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3831000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3930000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3338000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3536000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3735000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1B58 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1B3C JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1B6A JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0x5C7368AE4403E495A36005771EAED457B328109046913F905F6331 0x24 0xB0 PUSH22 0x2D64736F6C634300080A003300000000000000000000 ","sourceMap":"205:9704:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2169:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1163:41;;;;;;;;;;;;;;;;;;;;;1709:51;;;;;;;;;;;;;;;;;;;;;9203:62;;;;;;;;;;;;;;;;;;;;;9493:54;;;;;;;;;;;;;;;;;;;;;9321:57;;;;;;;;;;;;;;;;;;;;;5418:69;;;;;;;;;;;;;;;;;;;;;7579:48;;;;;;;;;;;;;;;;;;;;;447:63;;;;;;;;;;;;;;;;;;;;;5063:72;;;;;;;;;;;;;;;;;;;;;701:67;;;;;;;;;;;;;;;;;;;;;5641:49;;;;;;;;;;;;;;;;;;;;;2367:52;;;;;;;;;;;;;;;;;;;;;3844:76;;;;;;;;;;;;;;;;;;;;;1462:56;;;;;;;;;;;;;;;;;;;;;2677:49;;;;;;;;;;;;;;;;;;;;;7891:55;;;;;;;;;;;;;;;;;;;;;2468:59;;;;;;;;;;;;;;;;;;;;;6834:64;;;;;;;;;;;;;;;;;;;;;330:55;;;;;;;;;;;;;;;;;;;;;3417:58;;;;;;;;;;;;;;;;;;;;;3751:56;;;;;;;;;;;;;;;;;;;;;8879:57;;;;;;;;;;;;;;;;;;;;;3332:51;;;;;;;;;;;;;;;;;;;;;842:46;;;;;;;;;;;;;;;;;;;;;2859:49;;;;;;;;;;;;;;;;;;;;;3023:46;;;;;;;;;;;;;;;;;;;;;2054:63;;;;;;;;;;;;;;;;;;;;;1053:58;;;;;;;;;;;;;;;;;;;;;1239;;;;;;;;;;;;;;;;;;;;;5898:51;;;;;;;;;;;;;;;;;;;;;6137:50;;;;;;;;;;;;;;;;;;;;;5803:56;;;;;;;;;;;;;;;;;;;;;3112:44;;;;;;;;;;;;;;;;;;;;;4546:67;;;;;;;;;;;;;;;;;;;;;5539:59;;;;;;;;;;;;;;;;;;;;;4689:56;;;;;;;;;;;;;;;;;;;;;2277:55;;;;;;;;;;;;;;;;;;;;;1816:54;;;;;;;;;;;;;;;;;;;;;2583:57;;;;;;;;;;;;;;;;;;;;;1581:63;;;;;;;;;;;;;;;;;;;;;6617;;;;;;;;;;;;;;;;;;;;;5305:61;;;;;;;;;;;;;;;;;;;;;3641:65;;;;;;;;;;;;;;;;;;;;;4110:67;;;;;;;;;;;;;;;;;;;;;9815:48;;;;;;;;;;;;;;;;;;;;;8633:53;;;;;;;;;;;;;;;;;;;;;7671:62;;;;;;;;;;;;;;;;;;;;;6410:57;;;;;;;;;;;;;;;;;;;;;5983:66;;;;;;;;;;;;;;;;;;;;;5192:63;;;;;;;;;;;;;;;;;;;;;7150:47;;;;;;;;;;;;;;;;;;;;;6948:41;;;;;;;;;;;;;;;;;;;;;4951:53;;;;;;;;;;;;;;;;;;;;;1362:47;;;;;;;;;;;;;;;;;;;;;8559;;;;;;;;;;;;;;;;;;;;;7377:52;;;;;;;;;;;;;;;;;;;;;7791;;;;;;;;;;;;;;;;;;;;;9097:58;;;;;;;;;;;;;;;;;;;;;2778:49;;;;;;;;;;;;;;;;;;;;;224:50;;;;;;;;;;;;;;;;;;;;;5722:49;;;;;;;;;;;;;;;;;;;;;4818:58;;;;;;;;;;;;;;;;;;;;;579;;;;;;;;;;;;;;;;;;;;;3222:44;;;;;;;;;;;;;;;;;;;;;3516:63;;;;;;;;;;;;;;;;;;;;;6328:51;;;;;;;;;;;;;;;;;;;;;8281:56;;;;;;;;;;;;;;;;;;;;;8483:48;;;;;;;;;;;;;;;;;;;;;6504:64;;;;;;;;;;;;;;;;;;;;;8973:72;;;;;;;;;;;;;;;;;;;;;8804:46;;;;;;;;;;;;;;;;;;;;;8399:52;;;;;;;;;;;;;;;;;;;;;8092:51;;;;;;;;;;;;;;;;;;;;;7487:48;;;;;;;;;;;;;;;;;;;;;6731:57;;;;;;;;;;;;;;;;;;;;;4403:54;;;;;;;;;;;;;;;;;;;;;7997:50;;;;;;;;;;;;;;;;;;;;;7036:51;;;;;;;;;;;;;;;;;;;;;9584:56;;;;;;;;;;;;;;;;;;;;;940:62;;;;;;;;;;;;;;;;;;;;;3984:64;;;;;;;;;;;;;;;;;;;;;8719:51;;;;;;;;;;;;;;;;;;;;;9713;;;;;;;;;;;;;;;;;;;;;4250:69;;;;;;;;;;;;;;;;;;;;;6227:59;;;;;;;;;;;;;;;;;;;;;1926:53;;;;;;;;;;;;;;;;;;;;;7256:46;;;;;;;;;;;;;;;;;;;;;2940:44;;;;;;;;;;;;;;;;;;;;;8174:54;;;;;;;;;;;;;;;;;;;;;14:664:124;134:4;163:2;192;181:9;174:21;224:6;218:13;267:6;262:2;251:9;247:18;240:34;292:1;302:140;316:6;313:1;310:13;302:140;;;411:14;;;407:23;;401:30;377:17;;;396:2;373:26;366:66;331:10;;302:140;;;460:6;457:1;454:13;451:91;;;530:1;525:2;516:6;505:9;501:22;497:31;490:42;451:91;-1:-1:-1;594:2:124;582:15;599:66;578:88;563:104;;;;669:2;559:113;;14:664;-1:-1:-1;;;14:664:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"1424800","executionCost":"1517","totalCost":"1426317"},"external":{"ACL_ADMIN_CANNOT_BE_ZERO()":"infinite","ADDRESSES_PROVIDER_ALREADY_ADDED()":"infinite","ADDRESSES_PROVIDER_NOT_REGISTERED()":"infinite","AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE()":"infinite","ASSET_NOT_BORROWABLE_IN_ISOLATION()":"infinite","ASSET_NOT_LISTED()":"infinite","BORROWING_NOT_ENABLED()":"infinite","BORROW_CAP_EXCEEDED()":"infinite","BRIDGE_PROTOCOL_FEE_INVALID()":"infinite","CALLER_MUST_BE_POOL()":"infinite","CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN()":"infinite","CALLER_NOT_ATOKEN()":"infinite","CALLER_NOT_BRIDGE()":"infinite","CALLER_NOT_EMERGENCY_ADMIN()":"infinite","CALLER_NOT_POOL_ADMIN()":"infinite","CALLER_NOT_POOL_CONFIGURATOR()":"infinite","CALLER_NOT_POOL_OR_EMERGENCY_ADMIN()":"infinite","CALLER_NOT_RISK_OR_POOL_ADMIN()":"infinite","COLLATERAL_BALANCE_IS_ZERO()":"infinite","COLLATERAL_CANNOT_BE_LIQUIDATED()":"infinite","COLLATERAL_CANNOT_COVER_NEW_BORROW()":"infinite","COLLATERAL_SAME_AS_BORROWING_CURRENCY()":"infinite","DEBT_CEILING_EXCEEDED()":"infinite","DEBT_CEILING_NOT_ZERO()":"infinite","EMODE_CATEGORY_RESERVED()":"infinite","FLASHLOAN_DISABLED()":"infinite","FLASHLOAN_PREMIUM_INVALID()":"infinite","HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD()":"infinite","HEALTH_FACTOR_NOT_BELOW_THRESHOLD()":"infinite","INCONSISTENT_EMODE_CATEGORY()":"infinite","INCONSISTENT_FLASHLOAN_PARAMS()":"infinite","INCONSISTENT_PARAMS_LENGTH()":"infinite","INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET()":"infinite","INVALID_ADDRESSES_PROVIDER()":"infinite","INVALID_ADDRESSES_PROVIDER_ID()":"infinite","INVALID_AMOUNT()":"infinite","INVALID_BORROW_CAP()":"infinite","INVALID_BURN_AMOUNT()":"infinite","INVALID_DEBT_CEILING()":"infinite","INVALID_DECIMALS()":"infinite","INVALID_EMODE_CATEGORY()":"infinite","INVALID_EMODE_CATEGORY_ASSIGNMENT()":"infinite","INVALID_EMODE_CATEGORY_PARAMS()":"infinite","INVALID_EXPIRATION()":"infinite","INVALID_FLASHLOAN_EXECUTOR_RETURN()":"infinite","INVALID_INTEREST_RATE_MODE_SELECTED()":"infinite","INVALID_LIQUIDATION_PROTOCOL_FEE()":"infinite","INVALID_LIQ_BONUS()":"infinite","INVALID_LIQ_THRESHOLD()":"infinite","INVALID_LTV()":"infinite","INVALID_MINT_AMOUNT()":"infinite","INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"infinite","INVALID_OPTIMAL_USAGE_RATIO()":"infinite","INVALID_RESERVE_FACTOR()":"infinite","INVALID_RESERVE_INDEX()":"infinite","INVALID_RESERVE_PARAMS()":"infinite","INVALID_SIGNATURE()":"infinite","INVALID_SUPPLY_CAP()":"infinite","INVALID_UNBACKED_MINT_CAP()":"infinite","LTV_VALIDATION_FAILED()":"infinite","NOT_CONTRACT()":"infinite","NOT_ENOUGH_AVAILABLE_USER_BALANCE()":"infinite","NO_DEBT_OF_SELECTED_TYPE()":"infinite","NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF()":"infinite","NO_MORE_RESERVES_ALLOWED()":"infinite","NO_OUTSTANDING_STABLE_DEBT()":"infinite","NO_OUTSTANDING_VARIABLE_DEBT()":"infinite","OPERATION_NOT_SUPPORTED()":"infinite","POOL_ADDRESSES_DO_NOT_MATCH()":"infinite","PRICE_ORACLE_SENTINEL_CHECK_FAILED()":"infinite","RESERVE_ALREADY_ADDED()":"infinite","RESERVE_ALREADY_INITIALIZED()":"infinite","RESERVE_DEBT_NOT_ZERO()":"infinite","RESERVE_FROZEN()":"infinite","RESERVE_INACTIVE()":"infinite","RESERVE_LIQUIDITY_NOT_ZERO()":"infinite","RESERVE_PAUSED()":"infinite","SILOED_BORROWING_VIOLATION()":"infinite","SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER()":"infinite","STABLE_BORROWING_ENABLED()":"infinite","STABLE_BORROWING_NOT_ENABLED()":"infinite","STABLE_DEBT_NOT_ZERO()":"infinite","SUPPLY_CAP_EXCEEDED()":"infinite","UNBACKED_MINT_CAP_EXCEEDED()":"infinite","UNDERLYING_BALANCE_ZERO()":"infinite","UNDERLYING_CANNOT_BE_RESCUED()":"infinite","UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO()":"infinite","USER_IN_ISOLATION_MODE_OR_LTV_ZERO()":"infinite","VARIABLE_DEBT_SUPPLY_NOT_ZERO()":"infinite","ZERO_ADDRESS_NOT_VALID()":"infinite"}},"methodIdentifiers":{"ACL_ADMIN_CANNOT_BE_ZERO()":"fd1828ff","ADDRESSES_PROVIDER_ALREADY_ADDED()":"14dcfbbc","ADDRESSES_PROVIDER_NOT_REGISTERED()":"e02f07ee","AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE()":"f07f6785","ASSET_NOT_BORROWABLE_IN_ISOLATION()":"8596aad5","ASSET_NOT_LISTED()":"cd23367c","BORROWING_NOT_ENABLED()":"4ef999ff","BORROW_CAP_EXCEEDED()":"2eed17e8","BRIDGE_PROTOCOL_FEE_INVALID()":"7aa0767e","CALLER_MUST_BE_POOL()":"471df685","CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN()":"2c8e3b4c","CALLER_NOT_ATOKEN()":"a2e976c6","CALLER_NOT_BRIDGE()":"4f77647b","CALLER_NOT_EMERGENCY_ADMIN()":"485c8ff6","CALLER_NOT_POOL_ADMIN()":"ac753236","CALLER_NOT_POOL_CONFIGURATOR()":"61c111d2","CALLER_NOT_POOL_OR_EMERGENCY_ADMIN()":"26e7b312","CALLER_NOT_RISK_OR_POOL_ADMIN()":"b5e79366","COLLATERAL_BALANCE_IS_ZERO()":"4e01e3c1","COLLATERAL_CANNOT_BE_LIQUIDATED()":"895f7dc8","COLLATERAL_CANNOT_COVER_NEW_BORROW()":"e3fa20f5","COLLATERAL_SAME_AS_BORROWING_CURRENCY()":"8a344000","DEBT_CEILING_EXCEEDED()":"65a83bab","DEBT_CEILING_NOT_ZERO()":"e4dd8b74","EMODE_CATEGORY_RESERVED()":"f479ea11","FLASHLOAN_DISABLED()":"8aa3ca4c","FLASHLOAN_PREMIUM_INVALID()":"747fa556","HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD()":"366eb54d","HEALTH_FACTOR_NOT_BELOW_THRESHOLD()":"952633c5","INCONSISTENT_EMODE_CATEGORY()":"8f7722b2","INCONSISTENT_FLASHLOAN_PARAMS()":"73dea5e3","INCONSISTENT_PARAMS_LENGTH()":"bad8308c","INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET()":"2926c971","INVALID_ADDRESSES_PROVIDER()":"37930782","INVALID_ADDRESSES_PROVIDER_ID()":"60c3de80","INVALID_AMOUNT()":"fae82791","INVALID_BORROW_CAP()":"d6f9fcde","INVALID_BURN_AMOUNT()":"51267450","INVALID_DEBT_CEILING()":"dcc56db6","INVALID_DECIMALS()":"fa163a83","INVALID_EMODE_CATEGORY()":"a8c97853","INVALID_EMODE_CATEGORY_ASSIGNMENT()":"5d9c76c0","INVALID_EMODE_CATEGORY_PARAMS()":"47cf1523","INVALID_EXPIRATION()":"c08a1146","INVALID_FLASHLOAN_EXECUTOR_RETURN()":"7fea6f36","INVALID_INTEREST_RATE_MODE_SELECTED()":"89c5d45f","INVALID_LIQUIDATION_PROTOCOL_FEE()":"8eda46bd","INVALID_LIQ_BONUS()":"9527e9d9","INVALID_LIQ_THRESHOLD()":"dd1dd95f","INVALID_LTV()":"99ce53f3","INVALID_MINT_AMOUNT()":"abd351b1","INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"c899301a","INVALID_OPTIMAL_USAGE_RATIO()":"4e3aed37","INVALID_RESERVE_FACTOR()":"a4868dca","INVALID_RESERVE_INDEX()":"d1cd8b1d","INVALID_RESERVE_PARAMS()":"335763de","INVALID_SIGNATURE()":"a3402a38","INVALID_SUPPLY_CAP()":"26bbd053","INVALID_UNBACKED_MINT_CAP()":"47ba93d8","LTV_VALIDATION_FAILED()":"b87041c2","NOT_CONTRACT()":"11d7b006","NOT_ENOUGH_AVAILABLE_USER_BALANCE()":"b7f5e224","NO_DEBT_OF_SELECTED_TYPE()":"dc191bd9","NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF()":"712f536a","NO_MORE_RESERVES_ALLOWED()":"76ae8fca","NO_OUTSTANDING_STABLE_DEBT()":"74459b14","NO_OUTSTANDING_VARIABLE_DEBT()":"b4a45730","OPERATION_NOT_SUPPORTED()":"8b8b98d7","POOL_ADDRESSES_DO_NOT_MATCH()":"1abbb001","PRICE_ORACLE_SENTINEL_CHECK_FAILED()":"c8638082","RESERVE_ALREADY_ADDED()":"12dcade8","RESERVE_ALREADY_INITIALIZED()":"d9adda85","RESERVE_DEBT_NOT_ZERO()":"e981483a","RESERVE_FROZEN()":"6cd3cfbc","RESERVE_INACTIVE()":"52ba9dbe","RESERVE_LIQUIDITY_NOT_ZERO()":"084dfa0d","RESERVE_PAUSED()":"b68774e9","SILOED_BORROWING_VIOLATION()":"de24948c","SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER()":"22a73446","STABLE_BORROWING_ENABLED()":"198d6a6b","STABLE_BORROWING_NOT_ENABLED()":"4d86f393","STABLE_DEBT_NOT_ZERO()":"65e7ef4c","SUPPLY_CAP_EXCEEDED()":"b0510054","UNBACKED_MINT_CAP_EXCEEDED()":"6b3f7cc7","UNDERLYING_BALANCE_ZERO()":"a2797c80","UNDERLYING_CANNOT_BE_RESCUED()":"ab883ca0","UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO()":"94f9fd8a","USER_IN_ISOLATION_MODE_OR_LTV_ZERO()":"480702ae","VARIABLE_DEBT_SUPPLY_NOT_ZERO()":"f10727db","ZERO_ADDRESS_NOT_VALID()":"d14bb17a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ACL_ADMIN_CANNOT_BE_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER_ALREADY_ADDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER_NOT_REGISTERED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_NOT_BORROWABLE_IN_ISOLATION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_NOT_LISTED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BORROWING_NOT_ENABLED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BORROW_CAP_EXCEEDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE_INVALID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_MUST_BE_POOL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_ATOKEN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_BRIDGE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_EMERGENCY_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_POOL_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_POOL_CONFIGURATOR\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_POOL_OR_EMERGENCY_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_RISK_OR_POOL_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLATERAL_BALANCE_IS_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLATERAL_CANNOT_BE_LIQUIDATED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLATERAL_CANNOT_COVER_NEW_BORROW\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLATERAL_SAME_AS_BORROWING_CURRENCY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEBT_CEILING_EXCEEDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEBT_CEILING_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EMODE_CATEGORY_RESERVED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_DISABLED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_INVALID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEALTH_FACTOR_NOT_BELOW_THRESHOLD\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCONSISTENT_EMODE_CATEGORY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCONSISTENT_FLASHLOAN_PARAMS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCONSISTENT_PARAMS_LENGTH\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_ADDRESSES_PROVIDER_ID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_AMOUNT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_BORROW_CAP\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_BURN_AMOUNT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_DEBT_CEILING\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_DECIMALS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_EMODE_CATEGORY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_EMODE_CATEGORY_ASSIGNMENT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_EMODE_CATEGORY_PARAMS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_EXPIRATION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_FLASHLOAN_EXECUTOR_RETURN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_INTEREST_RATE_MODE_SELECTED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_LIQUIDATION_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_LIQ_BONUS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_LIQ_THRESHOLD\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_LTV\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_MINT_AMOUNT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_OPTIMAL_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_RESERVE_FACTOR\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_RESERVE_INDEX\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_RESERVE_PARAMS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_SIGNATURE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_SUPPLY_CAP\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_UNBACKED_MINT_CAP\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LTV_VALIDATION_FAILED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NOT_CONTRACT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NOT_ENOUGH_AVAILABLE_USER_BALANCE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_DEBT_OF_SELECTED_TYPE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_MORE_RESERVES_ALLOWED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_OUTSTANDING_STABLE_DEBT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_OUTSTANDING_VARIABLE_DEBT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATION_NOT_SUPPORTED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ADDRESSES_DO_NOT_MATCH\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_ORACLE_SENTINEL_CHECK_FAILED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_ALREADY_ADDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_ALREADY_INITIALIZED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_DEBT_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_FROZEN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_INACTIVE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_LIQUIDITY_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_PAUSED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SILOED_BORROWING_VIOLATION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STABLE_BORROWING_ENABLED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STABLE_BORROWING_NOT_ENABLED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STABLE_DEBT_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_CAP_EXCEEDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNBACKED_MINT_CAP_EXCEEDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_BALANCE_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_CANNOT_BE_RESCUED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_IN_ISOLATION_MODE_OR_LTV_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VARIABLE_DEBT_SUPPLY_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZERO_ADDRESS_NOT_VALID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Errors library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Defines the error messages emitted by the different contracts of the Aave protocol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/helpers/Errors.sol\":\"Errors\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Defines the error messages emitted by the different contracts of the Aave protocol","version":1}}},"contracts/protocol/libraries/helpers/Helpers.sol":{"Helpers":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"Helpers library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f92a86d8dac16aafb0bb6c648e7737fd71a6b7da81b636a55ddd0c2f5ccdada564736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 0x2A DUP7 0xD8 0xDA 0xC1 PUSH11 0xAFB0BB6C648E7737FD71A6 0xB7 0xDA DUP2 0xB6 CALLDATASIZE 0xA5 0x5D 0xDD 0xC 0x2F 0x5C 0xCD 0xAD 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"243:570:91:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;243:570:91;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f92a86d8dac16aafb0bb6c648e7737fd71a6b7da81b636a55ddd0c2f5ccdada564736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 0x2A DUP7 0xD8 0xDA 0xC1 PUSH11 0xAFB0BB6C648E7737FD71A6 0xB7 0xDA DUP2 0xB6 CALLDATASIZE 0xA5 0x5D 0xDD 0xC 0x2F 0x5C 0xCD 0xAD 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"243:570:91:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getUserCurrentDebt(address,struct DataTypes.ReserveCache memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Helpers library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/helpers/Helpers.sol\":\"Helpers\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)":{"details":"Emits the `Borrow()` event","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the borrow function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}},"executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)":{"details":"The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`Emits the `RebalanceStableBorrowRate()` event","params":{"asset":"The asset of the position being rebalanced","reserve":"The state of the reserve of the asset being repaid","user":"The user being rebalanced"}},"executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)":{"details":"Emits the `Repay()` event","params":{"params":"The additional parameters needed to execute the repay function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"},"returns":{"_0":"The actual amount being repaid"}},"executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)":{"details":"Emits the `Swap()` event","params":{"asset":"The asset of the position being swapped","interestRateMode":"The current interest rate mode of the position being swapped","reserve":"The of the reserve of the asset being repaid","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}}},"title":"BorrowLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6159116200003b600b82828239805160001a60731461002e57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80631e6473f91461005b57806340e95de61461007d5780636973f744146100af578063eac4d703146100cf575b600080fd5b81801561006757600080fd5b5061007b610076366004615124565b6100ef565b005b81801561008957600080fd5b5061009d610098366004615260565b610773565b60405190815260200160405180910390f35b8180156100bb57600080fd5b5061007b6100ca366004615360565b610cd9565b8180156100db57600080fd5b5061007b6100ea36600461539c565b610f6d565b805173ffffffffffffffffffffffffffffffffffffffff1660009081526020869052604081209061011f8261131d565b905061012b8282611536565b6040805160208101909152845481526000908190819061014c908b8b6115c1565b92509250925061027c8a8a8a604051806101c001604052808981526020018c60405180602001604052908160008201548152505081526020018b6000015173ffffffffffffffffffffffffffffffffffffffff1681526020018b6040015173ffffffffffffffffffffffffffffffffffffffff1681526020018b6060015181526020018b6080015160028111156101e5576101e56153e2565b81526020018b60e0015181526020018b610100015181526020018b610120015173ffffffffffffffffffffffffffffffffffffffff1681526020018b610140015160ff1681526020018b610160015173ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815250611679565b600080600188608001516002811115610297576102976153e2565b141561038657600387015461020087015160208a01516040808c015160608d015191517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152908316602482015260448101919091526fffffffffffffffffffffffffffffffff909316606484018190529450169063b3f1c93d906084016060604051808303816000875af1158015610351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103759190615411565b60a089015260c0880152905061044f565b61022086015160208901516040808b015160608c01516101408b015192517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015291841660248301526044820152606481019190915291169063b3f1c93d9060840160408051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190615448565b602088015290505b8015610484576003870154610484908a907501000000000000000000000000000000000000000000900461ffff1660016127a4565b84156105af576101c0860151516000906104ca9060029060301c60ff166104ab91906154a5565b6104b690600a6155dc565b8a606001516104c59190615617565b612839565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208f90526040812060090180549091906105149084906fffffffffffffffffffffffffffffffff16615652565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790556fffffffffffffffffffffffffffffffff1690508473ffffffffffffffffffffffffffffffffffffffff167faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5826040516105a591815260200190565b60405180910390a2505b6105da86896000015160008b60c001516105ca5760006105d0565b8b606001515b8b939291906128df565b8760c001511561067e576101e0860151602089015160608a01516040517f4efecaa500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152911690634efecaa590604401600060405180830381600087803b15801561066557600080fd5b505af1158015610679573d6000803e3d6000fd5b505050505b8760a0015161ffff16886040015173ffffffffffffffffffffffffffffffffffffffff16896000015173ffffffffffffffffffffffffffffffffffffffff167fb3d084820fb1a9decffb176436bd02558d15fac9b0ddfed8c465bc7359d7dce08b602001518c606001518d6080015160016002811115610700576107006153e2565b8f608001516002811115610716576107166153e2565b1461074b5760028e015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661074d565b885b60405161075d94939291906156c1565b60405180910390a4505050505050505050505050565b805173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120816107a38261131d565b90506107af8282611536565b6000806107c0866060015184612c20565b915091506107de838760200151886040015189606001518686612d5d565b60006001876040015160028111156107f8576107f86153e2565b146108035781610805565b825b90508660800151801561083b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8760200151145b156108db576101e08401516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156108b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d59190615701565b60208801525b80876020015110156108ee575060208601515b600187604001516002811115610906576109066153e2565b14156109be5761020084015160608801516040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101849052911690639dc29fac9060440160408051808303816000875af115801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af919061571a565b60a086015260c0850152610a76565b61022084015160608801516101408601516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101859052604481019190915291169063f5298aca906064016020604051808303816000875af1158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190615701565b60208501525b610a9c8488600001518960800151610a8e5783610a91565b60005b8892919060006128df565b80610aa7838561573e565b610ab191906154a5565b610ae4576003850154610ae49089907501000000000000000000000000000000000000000000900461ffff1660006127a4565b610af18a8a8a8785613075565b866080015115610ba2576101e08401516101008501516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909216602483018190526044830184905260648301919091529063d7020d0a90608401600060405180830381600087803b158015610b8557600080fd5b505af1158015610b99573d6000803e3d6000fd5b50505050610c69565b6101e08401518751610bcf9173ffffffffffffffffffffffffffffffffffffffff90911690339084613277565b6101e084015160608801516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015260448101849052911690636fd9767690606401600060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b505050505b606087015187516080890151604080518581529115156020830152339373ffffffffffffffffffffffffffffffffffffffff9081169316917fa534c8dbe71f871f9f3530e97a74601fea17b426cae02e1c5aee42c96c784051910160405180910390a49998505050505050505050565b6000610ce48461131d565b9050610cf08482611536565b610cfb848285613352565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908316906370a0823190602401602060405180830381865afa158015610d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d959190615701565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820183905291925090831690639dc29fac9060440160408051808303816000875af1158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e31919061571a565b505060038601546040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483018190526024830152604482018490526fffffffffffffffffffffffffffffffff90921660648201529083169063b3f1c93d906084016060604051808303816000875af1158015610ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef29190615411565b60a086015260c085015250610f0b8684876000806128df565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a3505050505050565b6000610f788561131d565b9050610f848582611536565b600080610f913384612c20565b91509150610fa38784888585896137a8565b6001846002811115610fb757610fb76153e2565b1415611121576102008301516040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac9060440160408051808303816000875af1158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a919061571a565b60a085015260c08401526102208301516101408401516040517fb3f1c93d0000000000000000000000000000000000000000000000000000000081523360048201819052602482015260448101859052606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063b3f1c93d9060840160408051808303816000875af11580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190615448565b6020850152506112a1565b6102208301516101408401516040517ff5298aca00000000000000000000000000000000000000000000000000000000815233600482015260248101849052604481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063f5298aca906064016020604051808303816000875af11580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd9190615701565b602084015261020083015160038801546040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018490526fffffffffffffffffffffffffffffffff909116606482015273ffffffffffffffffffffffffffffffffffffffff9091169063b3f1c93d906084016060604051808303816000875af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190615411565b60a086015260c0850152505b6112af8784876000806128df565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f7962b394d85a534033ba2efcf43cd36de57b7ebeb3de0ca4428965d9b3ddc4818660405161130c9190615756565b60405180910390a350505050505050565b611325614faf565b61132d614faf565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561145a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147e9190615701565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156114df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190615764565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415611565575050565b61156f8282613ca8565b6115798282613dc9565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b60008060006115cf86613f49565b15611666576000611600877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa613f90565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015611662576001955090935091506116709050565b5050505b5060009150819050805b93509350939050565b608081015160408051808201909152600281527f32360000000000000000000000000000000000000000000000000000000000006020820152906116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b60405180910390fd5b506117c8604051806102800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581526020016000151581526020016000151581526020016000151581526020016000151581525090565b81516101c09081015151671000000000000000811615156102008401526708000000000000008116151561024084015267040000000000000081161515610220840152670200000000000000811615156101e084015267010000000000000016151590820181905260408051808201909152600281527f323700000000000000000000000000000000000000000000000000000000000060208201529061189c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50806102000151156040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525090611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50806101e00151156040518060400160405280600281526020017f323800000000000000000000000000000000000000000000000000000000000081525090611988576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b508061022001516040518060400160405280600281526020017f3330000000000000000000000000000000000000000000000000000000000000815250906119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5061014082015173ffffffffffffffffffffffffffffffffffffffff161580611a95575081610140015173ffffffffffffffffffffffffffffffffffffffff166349aa2e816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615822565b6040518060400160405280600281526020017f353900000000000000000000000000000000000000000000000000000000000081525090611b03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060028260a001516002811115611b1c57611b1c6153e2565b1480611b3d575060018260a001516002811115611b3b57611b3b6153e2565b145b6040518060400160405280600281526020017f333300000000000000000000000000000000000000000000000000000000000081525090611bab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5081516101c001515160301c60ff1661010082015281516101c001515160501c640fffffffff166101208201819052610100820151600a0a61016083015215611cae5781516101408101519051611c0191613fdf565b60e082018190526080808401518451909101519091611c1f9161573e565b611c29919061573e565b60c0820181905261016082015161012083015160408051808201909152600281527f353000000000000000000000000000000000000000000000000000000000000060208201529291021015611cac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b505b81610160015115611e3f5781516101c00151516720000000000000001615156040518060400160405280600281526020017f363000000000000000000000000000000000000000000000000000000000000081525090611d3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50816101a00151611d716002836101000151611d5791906154a5565b611d6290600a6155dc565b84608001516104c59190615617565b61018084015173ffffffffffffffffffffffffffffffffffffffff16600090815260208890526040902060090154611dbb91906fffffffffffffffffffffffffffffffff16615652565b6fffffffffffffffffffffffffffffffff1611156040518060400160405280600281526020017f353300000000000000000000000000000000000000000000000000000000000081525090611e3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b505b61012082015160ff1615611f175761012082015182516101c001515160ff9182169160a89190911c16146040518060400160405280600281526020017f353800000000000000000000000000000000000000000000000000000000000081525090611ed7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5061012082015160ff166000908152602084905260409020546601000000000000900473ffffffffffffffffffffffffffffffffffffffff166101808201525b611f8e8585856040518060a00160405280876020015181526020018760e001518152602001876060015173ffffffffffffffffffffffffffffffffffffffff16815260200187610100015173ffffffffffffffffffffffffffffffffffffffff16815260200187610120015160ff16815250614036565b5060a0860152508352606083015260408083018290528051808201909152600281527f333400000000000000000000000000000000000000000000000000000000000060208201529061200e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50805160408051808201909152600281527f353700000000000000000000000000000000000000000000000000000000000060208201529061207d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50670de0b6b3a76400008160a00151116040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50816080015182610100015173ffffffffffffffffffffffffffffffffffffffff1663b3596f07600073ffffffffffffffffffffffffffffffffffffffff1684610180015173ffffffffffffffffffffffffffffffffffffffff16141561216657846040015161216d565b8361018001515b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156121d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fa9190615701565b612204919061583f565b610140820181815261016083015191829081612222576122226155e8565b049052508051610140820151606083015161224792916122419161573e565b906145a0565b60208083018290526040808401518151808301909252600282527f3336000000000000000000000000000000000000000000000000000000000000928201929092529111156122c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060018260a0015160028111156122dc576122dc6153e2565b141561260a578061024001516040518060400160405280600281526020017f333100000000000000000000000000000000000000000000000000000000000081525090612356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408281015173ffffffffffffffffffffffffffffffffffffffff166000908152602087815291902060030154908301516123ae917501000000000000000000000000000000000000000000900461ffff166145cb565b15806123c3575081516101c001515161ffff16155b8061246c575081516101e0015160608301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906370a0823190602401602060405180830381865afa158015612441573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124659190615701565b8260800151115b6040518060400160405280600281526020017f3337000000000000000000000000000000000000000000000000000000000000815250906124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408281015183516101e0015191517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116906370a0823190602401602060405180830381865afa158015612553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125779190615701565b6080820181905260c083015160009161258f9161464f565b905080836080015111156040518060400160405280600281526020017f333800000000000000000000000000000000000000000000000000000000000081525090612607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50505b6020820151517f5555555555555555555555555555555555555555555555555555555555555555161561279d576020820151612647908686614692565b73ffffffffffffffffffffffffffffffffffffffff166101a083015215801561026083015261271c57816040015173ffffffffffffffffffffffffffffffffffffffff16816101a0015173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383900000000000000000000000000000000000000000000000000000000000081525090612716576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5061279d565b81516101c001515160408051808201909152600281527f3839000000000000000000000000000000000000000000000000000000000000602082015290674000000000000000161561279b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b505b5050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310612813576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50600182811b1b811561282b57835481178455612833565b835481191684555b50505050565b60006fffffffffffffffffffffffffffffffff8211156128db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016116ea565b5090565b61290a6040518060800160405280600081526020016000815260200160008152602001600081525090565b610140850151602086015161291e91613fdf565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991612a7f9190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac0919061587c565b60408401526020830152808252612ad690612839565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151612b1990612839565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff929092169190911790556040810151612b6a90612839565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa158015612c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbb9190615701565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa158015612d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d529190615701565b915091509250929050565b60408051808201909152600281527f3236000000000000000000000000000000000000000000000000000000000000602082015285612dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85141580612e0e57503373ffffffffffffffffffffffffffffffffffffffff8416145b6040518060400160405280600281526020017f343000000000000000000000000000000000000000000000000000000000000081525090612e7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50600080612ed1886101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090612f47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115612fb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b508315801590612fd657506001866002811115612fd457612fd46153e2565b145b80612ffc57508215801590612ffc57506002866002811115612ffa57612ffa6153e2565b145b6040518060400160405280600281526020017f33390000000000000000000000000000000000000000000000000000000000008152509061306a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b505050505050505050565b60408051602081019091528354815260009081906130949088886115c1565b5091509150811561326e5773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff90911691906131119060029060301c60ff166130fc91906154a5565b61310790600a6155dc565b6104c59087615617565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16116131c15773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a261306a565b60006131cd82846158aa565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a25050505b50505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16132e2573d6000803e3d6000fd5b506132ec8561473e565b61279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016116ea565b6000806133a6846101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061341c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f32390000000000000000000000000000000000000000000000000000000000006020820152811561348a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50600084610220015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135019190615701565b85610200015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135759190615701565b61357f919061573e565b6007870154604080516101208101825260088a01546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104168152600060208201819052818301819052606082018190526080820185905260a082018190526101a08a015160c083015273ffffffffffffffffffffffffffffffffffffffff89811660e08401526101e08b0151811661010084015292517fa589870900000000000000000000000000000000000000000000000000000000815294955093919092169163a5898709916136d59190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa1580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613716919061587c565b5090915061372890508161232861464f565b86610160015111156040518060400160405280600281526020017f34340000000000000000000000000000000000000000000000000000000000008152509061379e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5050505050505050565b6000806000806137ff896101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b945094505093509350836040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090613877576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f3239000000000000000000000000000000000000000000000000000000000000602082015281156138e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528315613953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b506001856002811115613968576139686153e2565b14156139e05760408051808201909152600281527f34310000000000000000000000000000000000000000000000000000000000006020820152876139da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50613c9c565b60028560028111156139f4576139f46153e2565b1415613c375760408051808201909152600281527f3432000000000000000000000000000000000000000000000000000000000000602082015286613a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f3331000000000000000000000000000000000000000000000000000000000000602082015282613ad3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060038a0154604080516020810190915289548152613b0e917501000000000000000000000000000000000000000000900461ffff166145cb565b1580613b2257506101c08901515161ffff16155b80613bc957506101e08901516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015613b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbd9190615701565b613bc7878961573e565b115b6040518060400160405280600281526020017f3337000000000000000000000000000000000000000000000000000000000000815250906139da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b604080518082018252600281527f3333000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526116ea91906004016157af565b50505050505050505050565b61016081015115613d38576000613cc982610160015183610240015161480a565b9050613ce28260e0015182613fdf90919063ffffffff16565b6101008301819052613cf390612839565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115613dc5576000613d5582610180015183610240015161484f565b9050613d6f82610120015182613fdf90919063ffffffff16565b6101408301819052613d8090612839565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b613e026040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a0820151613e1157505050565b6101208201518251613e2291613fdf565b60208201526101408201518251613e3891613fdf565b60408201526060820151610260830151610240840151613e6092919064ffffffffff16614858565b606082018190526040830151613e7591613fdf565b808252602082015160808401516040840151613e91919061573e565b613e9b91906154a5565b613ea591906154a5565b608082018190526101a0830151613ebc919061464f565b60a0820181905215613f4457613ee76104c58361010001518360a0015161499f90919063ffffffff16565b600884018054600090613f0d9084906fffffffffffffffffffffffffffffffff16615652565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa168015801590613f895750613f856001826154a5565b8116155b9392505050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c908115613fd457600101613fbf565b925050505b92915050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761401457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60008060008060008061404c8760000151511590565b156140885750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081614593565b61413760405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff161561417c57608088015160ff16600090815260208a905260409020606089015161416991906149de565b6101808401526101c08301526101a08201525b87602001518160c00151101561449b5760c0810151885161419c91614abd565b6141b05760c081018051600101905261417c565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff1661020082018190526141f65760c081018051600101905261417c565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a908301526101808201511580159061428c5750816101e00151896080015160ff16145b6143305760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015614307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061432b9190615701565b614337565b8161018001515b825260a082015115801590614357575060c08201518951614357916145cb565b156144475761437489604001518284600001518560200151614b42565b604083018190526101008301805161438d90839061573e565b90525060808901516101e08301516143a89160ff1690614c21565b15156102408301526080820151156143fe578161024001516143ce5781608001516143d5565b816101a001515b82604001516143e4919061583f565b82610140018181516143f6919061573e565b905250614407565b60016102208301525b81610240015161441b578160a00151614422565b816101c001515b8260400151614431919061583f565b8261016001818151614443919061573e565b9052505b60c0820151895161445791614c32565b1561448a5761447489604001518284600001518560200151614cb4565b8261012001818151614486919061573e565b9052505b5060c081018051600101905261417c565b6101008101516144ac5760006144c7565b806101000151816101400151816144c5576144c56155e8565b045b6101408201526101008101516144de5760006144f9565b806101000151816101600151816144f7576144f76155e8565b045b6101608201526101208101511561453b5761453681610120015161453083610160015184610100015161464f90919063ffffffff16565b90614e34565b61455d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b60008115612710600284041904841117156145ba57600080fd5b506127109190910260028204010490565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061463d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50509051600191821b82011c16151590565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761468457600080fd5b506127109102611388010490565b60008061469e85614e6b565b1561472f5760006146cf867f5555555555555555555555555555555555555555555555555555555555555555613f90565b6000818152602086815260408083205473ffffffffffffffffffffffffffffffffffffffff16808452898352928190208151928301909152549081905291925090674000000000000000161561472c576001935091506147369050565b50505b5060009050805b935093915050565b600061477e565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156147bd57602081146147f7576147b87f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f614745565b614804565b823b6147ee576147ee7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014614745565b60019150614804565b3d6000803e600051151591505b50919050565b60008061481e64ffffffffff8416426154a5565b614828908561583f565b6301e1338090049050614847816b033b2e3c9fd0803ce800000061573e565b949350505050565b6000613f898383425b60008061486c64ffffffffff8516846154a5565b905080614888576b033b2e3c9fd0803ce8000000915050613f89565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116148be5760006148c3565b600285035b925066038882915c40006148d78a80613fdf565b816148e4576148e46155e8565b0491506301e133806148f6838b613fdf565b81614903576149036155e8565b049050600082614913868861583f565b61491d919061583f565b60029004905060008285614931888a61583f565b61493b919061583f565b614945919061583f565b60069004905080826301e1338061495c8a8f61583f565b6149669190615617565b61497c906b033b2e3c9fd0803ce800000061573e565b614986919061573e565b614990919061573e565b9b9a5050505050505050505050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156149c357600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015614aa2576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015614a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a9f9190615701565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310614b2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5050905160019190911b1c600316151590565b600080614b4e85614ea7565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792614bfa928692911690631da24f3e90602401602060405180830381865afa158015614bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf49190615701565b90613fdf565b614c04919061583f565b9050838181614c1557614c156155e8565b04979650505050505050565b60008215801590613f895750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310614ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015614d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d4e9190615701565b90508015614d6c57614d69614d6286614f2b565b8290613fdf565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015614dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e029190615701565b614e0c908261573e565b9050614e18818561583f565b9050828181614e2957614e296155e8565b049695505050505050565b60008115670de0b6b3a764000060028404190484111715614e5457600080fd5b50670de0b6b3a76400009190910260028204010490565b80516000907f5555555555555555555555555555555555555555555555555555555555555555168015801590613f895750613f856001826154a5565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415614eed575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154613f89906fffffffffffffffffffffffffffffffff80821691614bf491700100000000000000000000000000000000909104168461480a565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415614f71575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154613f89906fffffffffffffffffffffffffffffffff80821691614bf491700100000000000000000000000000000000909104168461484f565b60405180610280016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016150336040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610180810167ffffffffffffffff811182821017156150a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff811681146150d157600080fd5b919050565b8035600381106150d157600080fd5b803561ffff811681146150d157600080fd5b801515811461510557600080fd5b50565b80356150d1816150f7565b803560ff811681146150d157600080fd5b600080600080600085870361020081121561513e57600080fd5b86359550602087013594506040870135935060608701359250610180807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301121561518957600080fd5b61519161505c565b915061519f608089016150ad565b82526151ad60a089016150ad565b60208301526151be60c089016150ad565b604083015260e088013560608301526101006151db818a016150d6565b60808401526101206151ee818b016150e5565b60a0850152610140615201818c01615108565b60c0860152610160808c013560e0870152848c0135848701526152276101a08d016150ad565b838701526152386101c08d01615113565b828701526152496101e08d016150ad565b818701525050505050809150509295509295909350565b60008060008084860361010081121561527857600080fd5b85359450602086013593506040860135925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0820112156152ba57600080fd5b5060405160a0810181811067ffffffffffffffff82111715615305577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052615314606087016150ad565b81526080860135602082015261532c60a087016150d6565b604082015261533d60c087016150ad565b606082015260e0860135615350816150f7565b6080820152939692955090935050565b60008060006060848603121561537557600080fd5b83359250615385602085016150ad565b9150615393604085016150ad565b90509250925092565b600080600080608085870312156153b257600080fd5b84359350602085013592506153c9604086016150ad565b91506153d7606086016150d6565b905092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008060006060848603121561542657600080fd5b8351615431816150f7565b602085015160409095015190969495509392505050565b6000806040838503121561545b57600080fd5b8251615466816150f7565b6020939093015192949293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156154b7576154b7615476565b500390565b600181815b8085111561551557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156154fb576154fb615476565b8085161561550857918102915b93841c93908002906154c1565b509250929050565b60008261552c57506001613fd9565b8161553957506000613fd9565b816001811461554f576002811461555957615575565b6001915050613fd9565b60ff84111561556a5761556a615476565b50506001821b613fd9565b5060208310610133831016604e8410600b8410161715615598575081810a613fd9565b6155a283836154bc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156155d4576155d4615476565b029392505050565b6000613f89838361551d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261564d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561567d5761567d615476565b01949350505050565b600381106156bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff8516815260208101849052608081016156f26040830185615686565b82606083015295945050505050565b60006020828403121561571357600080fd5b5051919050565b6000806040838503121561572d57600080fd5b505080516020909101519092909150565b6000821982111561575157615751615476565b500190565b60208101613fd98284615686565b6000806000806080858703121561577a57600080fd5b845193506020850151925060408501519150606085015164ffffffffff811681146157a457600080fd5b939692955090935050565b600060208083528351808285015260005b818110156157dc578581018301518582016040015282016157c0565b818111156157ee576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561583457600080fd5b8151613f89816150f7565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561587757615877615476565b500290565b60008060006060848603121561589157600080fd5b8351925060208401519150604084015190509250925092565b60006fffffffffffffffffffffffffffffffff838116908316818110156158d3576158d3615476565b03939250505056fea2646970667358221220a3d4fdb496f81003e5208f37b798bc2b09a2ff3ba728c227e902aac4c0fc188564736f6c634300080a0033","opcodes":"PUSH2 0x5911 PUSH3 0x3B PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1E6473F9 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x40E95DE6 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x6973F744 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xEAC4D703 EQ PUSH2 0xCF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x5124 JUMP JUMPDEST PUSH2 0xEF JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9D PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x5260 JUMP JUMPDEST PUSH2 0x773 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x5360 JUMP JUMPDEST PUSH2 0xCD9 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xEA CALLDATASIZE PUSH1 0x4 PUSH2 0x539C JUMP JUMPDEST PUSH2 0xF6D JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x11F DUP3 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0x12B DUP3 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x14C SWAP1 DUP12 DUP12 PUSH2 0x15C1 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x27C DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E5 JUMPI PUSH2 0x1E5 PUSH2 0x53E2 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x100 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x140 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE POP PUSH2 0x1679 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 DUP9 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x297 JUMPI PUSH2 0x297 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x386 JUMPI PUSH1 0x3 DUP8 ADD SLOAD PUSH2 0x200 DUP8 ADD MLOAD PUSH1 0x20 DUP11 ADD MLOAD PUSH1 0x40 DUP1 DUP13 ADD MLOAD PUSH1 0x60 DUP14 ADD MLOAD SWAP2 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x64 DUP5 ADD DUP2 SWAP1 MSTORE SWAP5 POP AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x351 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x375 SWAP2 SWAP1 PUSH2 0x5411 JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE SWAP1 POP PUSH2 0x44F JUMP JUMPDEST PUSH2 0x220 DUP7 ADD MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x40 DUP1 DUP12 ADD MLOAD PUSH1 0x60 DUP13 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD SWAP3 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x423 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x447 SWAP2 SWAP1 PUSH2 0x5448 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MSTORE SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x484 JUMPI PUSH1 0x3 DUP8 ADD SLOAD PUSH2 0x484 SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x27A4 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x5AF JUMPI PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x4CA SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x4B6 SWAP1 PUSH1 0xA PUSH2 0x55DC JUMP JUMPDEST DUP11 PUSH1 0x60 ADD MLOAD PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x5617 JUMP JUMPDEST PUSH2 0x2839 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP16 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x514 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5652 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 DUP3 PUSH1 0x40 MLOAD PUSH2 0x5A5 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST PUSH2 0x5DA DUP7 DUP10 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP12 PUSH1 0xC0 ADD MLOAD PUSH2 0x5CA JUMPI PUSH1 0x0 PUSH2 0x5D0 JUMP JUMPDEST DUP12 PUSH1 0x60 ADD MLOAD JUMPDEST DUP12 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x28DF JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD MLOAD ISZERO PUSH2 0x67E JUMPI PUSH2 0x1E0 DUP7 ADD MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x60 DUP11 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x4EFECAA5 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x665 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x679 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP8 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP9 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB3D084820FB1A9DECFFB176436BD02558D15FAC9B0DDFED8C465BC7359D7DCE0 DUP12 PUSH1 0x20 ADD MLOAD DUP13 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x700 JUMPI PUSH2 0x700 PUSH2 0x53E2 JUMP JUMPDEST DUP16 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x716 JUMPI PUSH2 0x716 PUSH2 0x53E2 JUMP JUMPDEST EQ PUSH2 0x74B JUMPI PUSH1 0x2 DUP15 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x74D JUMP JUMPDEST DUP9 JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x75D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x56C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x7A3 DUP3 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0x7AF DUP3 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x7C0 DUP7 PUSH1 0x60 ADD MLOAD DUP5 PUSH2 0x2C20 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x7DE DUP4 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP10 PUSH1 0x60 ADD MLOAD DUP7 DUP7 PUSH2 0x2D5D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x7F8 JUMPI PUSH2 0x7F8 PUSH2 0x53E2 JUMP JUMPDEST EQ PUSH2 0x803 JUMPI DUP2 PUSH2 0x805 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP DUP7 PUSH1 0x80 ADD MLOAD DUP1 ISZERO PUSH2 0x83B JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH1 0x20 ADD MLOAD EQ JUMPDEST ISZERO PUSH2 0x8DB JUMPI PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8D5 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MSTORE JUMPDEST DUP1 DUP8 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x8EE JUMPI POP PUSH1 0x20 DUP7 ADD MLOAD JUMPDEST PUSH1 0x1 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x906 JUMPI PUSH2 0x906 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x9BE JUMPI PUSH2 0x200 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x98B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AF SWAP2 SWAP1 PUSH2 0x571A JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0xA76 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x140 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA70 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE JUMPDEST PUSH2 0xA9C DUP5 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0xA8E JUMPI DUP4 PUSH2 0xA91 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP9 SWAP3 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x28DF JUMP JUMPDEST DUP1 PUSH2 0xAA7 DUP4 DUP6 PUSH2 0x573E JUMP JUMPDEST PUSH2 0xAB1 SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0xAE4 JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0xAE4 SWAP1 DUP10 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x27A4 JUMP JUMPDEST PUSH2 0xAF1 DUP11 DUP11 DUP11 DUP8 DUP6 PUSH2 0x3075 JUMP JUMPDEST DUP7 PUSH1 0x80 ADD MLOAD ISZERO PUSH2 0xBA2 JUMPI PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x64 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xC69 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD DUP8 MLOAD PUSH2 0xBCF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 CALLER SWAP1 DUP5 PUSH2 0x3277 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP8 MLOAD PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE CALLER SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP4 AND SWAP2 PUSH32 0xA534C8DBE71F871F9F3530E97A74601FEA17B426CAE02E1C5AEE42C96C784051 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE4 DUP5 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0xCF0 DUP5 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH2 0xCFB DUP5 DUP3 DUP6 PUSH2 0x3352 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD95 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 DUP4 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE31 SWAP2 SWAP1 PUSH2 0x571A JUMP JUMPDEST POP POP PUSH1 0x3 DUP7 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xECE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEF2 SWAP2 SWAP1 PUSH2 0x5411 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE POP PUSH2 0xF0B DUP7 DUP5 DUP8 PUSH1 0x0 DUP1 PUSH2 0x28DF JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9F439AE0C81E41A04D3FDFE07AED54E6A179FB0DB15BE7702EB66FA8EF6F5300 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF78 DUP6 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0xF84 DUP6 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF91 CALLER DUP5 PUSH2 0x2C20 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xFA3 DUP8 DUP5 DUP9 DUP6 DUP6 DUP10 PUSH2 0x37A8 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xFB7 JUMPI PUSH2 0xFB7 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x1121 JUMPI PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1036 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x105A SWAP2 SWAP1 PUSH2 0x571A JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x220 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1116 SWAP2 SWAP1 PUSH2 0x5448 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE POP PUSH2 0x12A1 JUMP JUMPDEST PUSH2 0x220 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11CD SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x3 DUP9 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1271 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1295 SWAP2 SWAP1 PUSH2 0x5411 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE POP JUMPDEST PUSH2 0x12AF DUP8 DUP5 DUP8 PUSH1 0x0 DUP1 PUSH2 0x28DF JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7962B394D85A534033BA2EFCF43CD36DE57B7EBEB3DE0CA4428965D9B3DDC481 DUP7 PUSH1 0x40 MLOAD PUSH2 0x130C SWAP2 SWAP1 PUSH2 0x5756 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1325 PUSH2 0x4FAF JUMP JUMPDEST PUSH2 0x132D PUSH2 0x4FAF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x145A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x147E SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1503 SWAP2 SWAP1 PUSH2 0x5764 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x1565 JUMPI POP POP JUMP JUMPDEST PUSH2 0x156F DUP3 DUP3 PUSH2 0x3CA8 JUMP JUMPDEST PUSH2 0x1579 DUP3 DUP3 PUSH2 0x3DC9 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x15CF DUP7 PUSH2 0x3F49 JUMP JUMPDEST ISZERO PUSH2 0x1666 JUMPI PUSH1 0x0 PUSH2 0x1600 DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x3F90 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1662 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x1670 SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x16F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x17C8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x1C0 SWAP1 DUP2 ADD MLOAD MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x200 DUP5 ADD MSTORE PUSH8 0x800000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x240 DUP5 ADD MSTORE PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x220 DUP5 ADD MSTORE PUSH8 0x200000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x1E0 DUP5 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP1 PUSH2 0x200 ADD MLOAD ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1912 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP1 PUSH2 0x1E0 ADD MLOAD ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1988 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP1 PUSH2 0x220 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x19FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH2 0x140 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO DUP1 PUSH2 0x1A95 JUMPI POP DUP2 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x49AA2E81 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A95 SWAP2 SWAP1 PUSH2 0x5822 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1B03 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x2 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1B1C JUMPI PUSH2 0x1B1C PUSH2 0x53E2 JUMP JUMPDEST EQ DUP1 PUSH2 0x1B3D JUMPI POP PUSH1 0x1 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1B3B JUMPI PUSH2 0x1B3B PUSH2 0x53E2 JUMP JUMPDEST EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1BAB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x100 DUP3 ADD MSTORE DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x120 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH1 0xA EXP PUSH2 0x160 DUP4 ADD MSTORE ISZERO PUSH2 0x1CAE JUMPI DUP2 MLOAD PUSH2 0x140 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x1C01 SWAP2 PUSH2 0x3FDF JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP1 DUP5 ADD MLOAD DUP5 MLOAD SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 PUSH2 0x1C1F SWAP2 PUSH2 0x573E JUMP JUMPDEST PUSH2 0x1C29 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3530000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 MUL LT ISZERO PUSH2 0x1CAC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP JUMPDEST DUP2 PUSH2 0x160 ADD MLOAD ISZERO PUSH2 0x1E3F JUMPI DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x2000000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3630000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1D3B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP2 PUSH2 0x1A0 ADD MLOAD PUSH2 0x1D71 PUSH1 0x2 DUP4 PUSH2 0x100 ADD MLOAD PUSH2 0x1D57 SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x1D62 SWAP1 PUSH1 0xA PUSH2 0x55DC JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x5617 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1DBB SWAP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5652 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3533000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1E3D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1F17 JUMPI PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0xFF SWAP2 DUP3 AND SWAP2 PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHR AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1ED7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x180 DUP3 ADD MSTORE JUMPDEST PUSH2 0x1F8E DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH2 0x120 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x4036 JUMP JUMPDEST POP PUSH1 0xA0 DUP7 ADD MSTORE POP DUP4 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3334000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x200E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x207D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP2 PUSH1 0xA0 ADD MLOAD GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x20FB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP2 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB3596F07 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH2 0x180 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2166 JUMPI DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x216D JUMP JUMPDEST DUP4 PUSH2 0x180 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21FA SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x2204 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x140 DUP3 ADD DUP2 DUP2 MSTORE PUSH2 0x160 DUP4 ADD MLOAD SWAP2 DUP3 SWAP1 DUP2 PUSH2 0x2222 JUMPI PUSH2 0x2222 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP1 MSTORE POP DUP1 MLOAD PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x2247 SWAP3 SWAP2 PUSH2 0x2241 SWAP2 PUSH2 0x573E JUMP JUMPDEST SWAP1 PUSH2 0x45A0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP5 ADD MLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH32 0x3336000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 GT ISZERO PUSH2 0x22C3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x1 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x22DC JUMPI PUSH2 0x22DC PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x260A JUMPI DUP1 PUSH2 0x240 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2356 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP3 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE SWAP2 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD SWAP1 DUP4 ADD MLOAD PUSH2 0x23AE SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x45CB JUMP JUMPDEST ISZERO DUP1 PUSH2 0x23C3 JUMPI POP DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST DUP1 PUSH2 0x246C JUMPI POP DUP2 MLOAD PUSH2 0x1E0 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2441 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2465 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST DUP3 PUSH1 0x80 ADD MLOAD GT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x24DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP3 DUP2 ADD MLOAD DUP4 MLOAD PUSH2 0x1E0 ADD MLOAD SWAP2 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2577 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x0 SWAP2 PUSH2 0x258F SWAP2 PUSH2 0x464F JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH1 0x80 ADD MLOAD GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3338000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2607 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD MLOAD PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO PUSH2 0x279D JUMPI PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x2647 SWAP1 DUP7 DUP7 PUSH2 0x4692 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1A0 DUP4 ADD MSTORE ISZERO DUP1 ISZERO PUSH2 0x260 DUP4 ADD MSTORE PUSH2 0x271C JUMPI DUP2 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH2 0x1A0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2716 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH2 0x279D JUMP JUMPDEST DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH8 0x4000000000000000 AND ISZERO PUSH2 0x279B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x2813 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL SHL DUP2 ISZERO PUSH2 0x282B JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x2833 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x28DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x16EA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x290A PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x291E SWAP2 PUSH2 0x3FDF JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x2A7F SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A9C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2AC0 SWAP2 SWAP1 PUSH2 0x587C JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x2AD6 SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2B19 SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x2B6A SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C97 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CBB SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D52 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP6 PUSH2 0x2DC9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 EQ ISZERO DUP1 PUSH2 0x2E0E JUMPI POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3430000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2E7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x2ED1 DUP9 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2F47 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x2FB5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP4 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FD6 JUMPI POP PUSH1 0x1 DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2FD4 JUMPI PUSH2 0x2FD4 PUSH2 0x53E2 JUMP JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x2FFC JUMPI POP DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FFC JUMPI POP PUSH1 0x2 DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2FFA JUMPI PUSH2 0x2FFA PUSH2 0x53E2 JUMP JUMPDEST EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3339000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x306A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x3094 SWAP1 DUP9 DUP9 PUSH2 0x15C1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x326E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 PUSH2 0x3111 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x30FC SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x3107 SWAP1 PUSH1 0xA PUSH2 0x55DC JUMP JUMPDEST PUSH2 0x4C5 SWAP1 DUP8 PUSH2 0x5617 JUMP JUMPDEST SWAP1 POP DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT PUSH2 0x31C1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x306A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31CD DUP3 DUP5 PUSH2 0x58AA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP14 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 DUP6 OR SWAP1 SSTORE SWAP1 MLOAD DUP4 DUP2 MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x32E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x32EC DUP6 PUSH2 0x473E JUMP JUMPDEST PUSH2 0x279D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x16EA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x33A6 DUP5 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x341C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x348A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x0 DUP5 PUSH2 0x220 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3501 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST DUP6 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3551 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3575 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x357F SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST PUSH1 0x7 DUP8 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP11 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE DUP2 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP11 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1E0 DUP12 ADD MLOAD DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE SWAP3 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 SWAP6 POP SWAP4 SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x36D5 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3716 SWAP2 SWAP1 PUSH2 0x587C JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0x3728 SWAP1 POP DUP2 PUSH2 0x2328 PUSH2 0x464F JUMP JUMPDEST DUP7 PUSH2 0x160 ADD MLOAD GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3434000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x379E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x37FF DUP10 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP SWAP4 POP SWAP4 POP DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3877 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x38E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP4 ISZERO PUSH2 0x3953 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x1 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3968 JUMPI PUSH2 0x3968 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x39E0 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3431000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP8 PUSH2 0x39DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH2 0x3C9C JUMP JUMPDEST PUSH1 0x2 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x39F4 JUMPI PUSH2 0x39F4 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x3C37 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3432000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP7 PUSH2 0x3A66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH2 0x3AD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x3 DUP11 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP10 SLOAD DUP2 MSTORE PUSH2 0x3B0E SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x45CB JUMP JUMPDEST ISZERO DUP1 PUSH2 0x3B22 JUMPI POP PUSH2 0x1C0 DUP10 ADD MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST DUP1 PUSH2 0x3BC9 JUMPI POP PUSH2 0x1E0 DUP10 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BBD SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x3BC7 DUP8 DUP10 PUSH2 0x573E JUMP JUMPDEST GT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x39DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH2 0x16EA SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x57AF JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x3D38 JUMPI PUSH1 0x0 PUSH2 0x3CC9 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x480A JUMP JUMPDEST SWAP1 POP PUSH2 0x3CE2 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x3FDF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x3CF3 SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3DC5 JUMPI PUSH1 0x0 PUSH2 0x3D55 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x484F JUMP JUMPDEST SWAP1 POP PUSH2 0x3D6F DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x3FDF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x3D80 SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3E02 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x3E11 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x3E22 SWAP2 PUSH2 0x3FDF JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x3E38 SWAP2 PUSH2 0x3FDF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x3E60 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x4858 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3E75 SWAP2 PUSH2 0x3FDF JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x3E91 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST PUSH2 0x3E9B SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x3EA5 SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x3EBC SWAP2 SWAP1 PUSH2 0x464F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x3F44 JUMPI PUSH2 0x3EE7 PUSH2 0x4C5 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x499F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x3F0D SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5652 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F89 JUMPI POP PUSH2 0x3F85 PUSH1 0x1 DUP3 PUSH2 0x54A5 JUMP JUMPDEST DUP2 AND ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x3FD4 JUMPI PUSH1 0x1 ADD PUSH2 0x3FBF JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4014 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x404C DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x4088 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x4593 JUMP JUMPDEST PUSH2 0x4137 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x417C JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x4169 SWAP2 SWAP1 PUSH2 0x49DE JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x449B JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x419C SWAP2 PUSH2 0x4ABD JUMP JUMPDEST PUSH2 0x41B0 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x417C JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x41F6 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x417C JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x428C JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x4330 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4307 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x432B SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x4337 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x4357 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x4357 SWAP2 PUSH2 0x45CB JUMP JUMPDEST ISZERO PUSH2 0x4447 JUMPI PUSH2 0x4374 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x4B42 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x438D SWAP1 DUP4 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x43A8 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x4C21 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x43FE JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x43CE JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x43D5 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x43E4 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x43F6 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x4407 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x441B JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x4422 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x4431 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x4443 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x4457 SWAP2 PUSH2 0x4C32 JUMP JUMPDEST ISZERO PUSH2 0x448A JUMPI PUSH2 0x4474 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x4CB4 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x4486 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x417C JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x44AC JUMPI PUSH1 0x0 PUSH2 0x44C7 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x44C5 JUMPI PUSH2 0x44C5 PUSH2 0x55E8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x44DE JUMPI PUSH1 0x0 PUSH2 0x44F9 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x44F7 JUMPI PUSH2 0x44F7 PUSH2 0x55E8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x453B JUMPI PUSH2 0x4536 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x4530 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x464F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x4E34 JUMP JUMPDEST PUSH2 0x455D JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x2710 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x45BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x463D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x469E DUP6 PUSH2 0x4E6B JUMP JUMPDEST ISZERO PUSH2 0x472F JUMPI PUSH1 0x0 PUSH2 0x46CF DUP7 PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 PUSH2 0x3F90 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP10 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH8 0x4000000000000000 AND ISZERO PUSH2 0x472C JUMPI PUSH1 0x1 SWAP4 POP SWAP2 POP PUSH2 0x4736 SWAP1 POP JUMP JUMPDEST POP POP JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x477E JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x47BD JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x47F7 JUMPI PUSH2 0x47B8 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x4745 JUMP JUMPDEST PUSH2 0x4804 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x47EE JUMPI PUSH2 0x47EE PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x4745 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x4804 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x481E PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x4828 SWAP1 DUP6 PUSH2 0x583F JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x4847 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x573E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F89 DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x486C PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x54A5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x4888 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x3F89 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x48BE JUMPI PUSH1 0x0 PUSH2 0x48C3 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x48D7 DUP11 DUP1 PUSH2 0x3FDF JUMP JUMPDEST DUP2 PUSH2 0x48E4 JUMPI PUSH2 0x48E4 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x48F6 DUP4 DUP12 PUSH2 0x3FDF JUMP JUMPDEST DUP2 PUSH2 0x4903 JUMPI PUSH2 0x4903 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x4913 DUP7 DUP9 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x491D SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x4931 DUP9 DUP11 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x493B SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x4945 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x495C DUP11 DUP16 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x4966 SWAP2 SWAP1 PUSH2 0x5617 JUMP JUMPDEST PUSH2 0x497C SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x573E JUMP JUMPDEST PUSH2 0x4986 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST PUSH2 0x4990 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x49C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x4AA2 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A7B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A9F SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x4B2F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4B4E DUP6 PUSH2 0x4EA7 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x4BFA SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4BD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4BF4 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST SWAP1 PUSH2 0x3FDF JUMP JUMPDEST PUSH2 0x4C04 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x4C15 JUMPI PUSH2 0x4C15 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F89 JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x4CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4D2A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4D4E SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x4D6C JUMPI PUSH2 0x4D69 PUSH2 0x4D62 DUP7 PUSH2 0x4F2B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x3FDF JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4DDE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4E02 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x4E0C SWAP1 DUP3 PUSH2 0x573E JUMP JUMPDEST SWAP1 POP PUSH2 0x4E18 DUP2 DUP6 PUSH2 0x583F JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x4E29 JUMPI PUSH2 0x4E29 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x4E54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F89 JUMPI POP PUSH2 0x3F85 PUSH1 0x1 DUP3 PUSH2 0x54A5 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x4EED JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x3F89 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x4BF4 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x480A JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x4F71 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x3F89 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x4BF4 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x484F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x5033 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x180 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x50A7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x50D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x50D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x50D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x50D1 DUP2 PUSH2 0x50F7 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x50D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x200 DUP2 SLT ISZERO PUSH2 0x513E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x180 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x5189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5191 PUSH2 0x505C JUMP JUMPDEST SWAP2 POP PUSH2 0x519F PUSH1 0x80 DUP10 ADD PUSH2 0x50AD JUMP JUMPDEST DUP3 MSTORE PUSH2 0x51AD PUSH1 0xA0 DUP10 ADD PUSH2 0x50AD JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x51BE PUSH1 0xC0 DUP10 ADD PUSH2 0x50AD JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x51DB DUP2 DUP11 ADD PUSH2 0x50D6 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x120 PUSH2 0x51EE DUP2 DUP12 ADD PUSH2 0x50E5 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x140 PUSH2 0x5201 DUP2 DUP13 ADD PUSH2 0x5108 JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x160 DUP1 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP8 ADD MSTORE DUP5 DUP13 ADD CALLDATALOAD DUP5 DUP8 ADD MSTORE PUSH2 0x5227 PUSH2 0x1A0 DUP14 ADD PUSH2 0x50AD JUMP JUMPDEST DUP4 DUP8 ADD MSTORE PUSH2 0x5238 PUSH2 0x1C0 DUP14 ADD PUSH2 0x5113 JUMP JUMPDEST DUP3 DUP8 ADD MSTORE PUSH2 0x5249 PUSH2 0x1E0 DUP14 ADD PUSH2 0x50AD JUMP JUMPDEST DUP2 DUP8 ADD MSTORE POP POP POP POP POP DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x5278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP3 ADD SLT ISZERO PUSH2 0x52BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x5305 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x5314 PUSH1 0x60 DUP8 ADD PUSH2 0x50AD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x532C PUSH1 0xA0 DUP8 ADD PUSH2 0x50D6 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x533D PUSH1 0xC0 DUP8 ADD PUSH2 0x50AD JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xE0 DUP7 ADD CALLDATALOAD PUSH2 0x5350 DUP2 PUSH2 0x50F7 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x5385 PUSH1 0x20 DUP6 ADD PUSH2 0x50AD JUMP JUMPDEST SWAP2 POP PUSH2 0x5393 PUSH1 0x40 DUP6 ADD PUSH2 0x50AD JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x53B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x53C9 PUSH1 0x40 DUP7 ADD PUSH2 0x50AD JUMP JUMPDEST SWAP2 POP PUSH2 0x53D7 PUSH1 0x60 DUP7 ADD PUSH2 0x50D6 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x5431 DUP2 PUSH2 0x50F7 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x545B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5466 DUP2 PUSH2 0x50F7 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x54B7 JUMPI PUSH2 0x54B7 PUSH2 0x5476 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x5515 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x54FB JUMPI PUSH2 0x54FB PUSH2 0x5476 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x5508 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x54C1 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x552C JUMPI POP PUSH1 0x1 PUSH2 0x3FD9 JUMP JUMPDEST DUP2 PUSH2 0x5539 JUMPI POP PUSH1 0x0 PUSH2 0x3FD9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x554F JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x5559 JUMPI PUSH2 0x5575 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x3FD9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x556A JUMPI PUSH2 0x556A PUSH2 0x5476 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x3FD9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x5598 JUMPI POP DUP2 DUP2 EXP PUSH2 0x3FD9 JUMP JUMPDEST PUSH2 0x55A2 DUP4 DUP4 PUSH2 0x54BC JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x55D4 JUMPI PUSH2 0x55D4 PUSH2 0x5476 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F89 DUP4 DUP4 PUSH2 0x551D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x564D JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x567D JUMPI PUSH2 0x567D PUSH2 0x5476 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x56BD JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x56F2 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5686 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5713 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x572D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5751 JUMPI PUSH2 0x5751 PUSH2 0x5476 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3FD9 DUP3 DUP5 PUSH2 0x5686 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x577A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x57A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x57DC JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x57C0 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x57EE JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3F89 DUP2 PUSH2 0x50F7 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5877 JUMPI PUSH2 0x5877 PUSH2 0x5476 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x58D3 JUMPI PUSH2 0x58D3 PUSH2 0x5476 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 0xD4 REVERT 0xB4 SWAP7 0xF8 LT SUB 0xE5 KECCAK256 DUP16 CALLDATACOPY 0xB7 SWAP9 0xBC 0x2B MULMOD LOG2 SELFDESTRUCT EXTCODESIZE 0xA7 0x28 0xC2 0x27 0xE9 MUL 0xAA 0xC4 0xC0 0xFC XOR DUP6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1076:11976:92:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1076:11976:92;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_accrueToTreasury_20746":{"entryPoint":15817,"id":20746,"parameterSlots":2,"returnSlots":0},"@_getFirstAssetIdByMask_14544":{"entryPoint":16272,"id":14544,"parameterSlots":2,"returnSlots":1},"@_getUserBalanceInBaseCurrency_18448":{"entryPoint":19266,"id":18448,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_18405":{"entryPoint":19636,"id":18405,"parameterSlots":4,"returnSlots":1},"@_updateIndexes_20827":{"entryPoint":15528,"id":20827,"parameterSlots":2,"returnSlots":0},"@cache_20970":{"entryPoint":4893,"id":20970,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_23673":{"entryPoint":18520,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":18511,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":18442,"id":23550,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_18307":{"entryPoint":16438,"id":18307,"parameterSlots":4,"returnSlots":6},"@executeBorrow_15216":{"entryPoint":239,"id":15216,"parameterSlots":5,"returnSlots":0},"@executeRebalanceStableBorrowRate_15569":{"entryPoint":3289,"id":15569,"parameterSlots":3,"returnSlots":0},"@executeRepay_15477":{"entryPoint":1907,"id":15477,"parameterSlots":4,"returnSlots":1},"@executeSwapBorrowRateMode_15719":{"entryPoint":3949,"id":15719,"parameterSlots":4,"returnSlots":0},"@getBorrowCap_13564":{"entryPoint":null,"id":13564,"parameterSlots":1,"returnSlots":1},"@getBorrowableInIsolation_13310":{"entryPoint":null,"id":13310,"parameterSlots":1,"returnSlots":1},"@getDebtCeiling_13668":{"entryPoint":null,"id":13668,"parameterSlots":1,"returnSlots":1},"@getDecimals_13110":{"entryPoint":null,"id":13110,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_13824":{"entryPoint":null,"id":13824,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_17188":{"entryPoint":18910,"id":17188,"parameterSlots":2,"returnSlots":3},"@getFlags_13934":{"entryPoint":null,"id":13934,"parameterSlots":1,"returnSlots":5},"@getIsolationModeState_14439":{"entryPoint":5569,"id":14439,"parameterSlots":3,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":18238,"id":117,"parameterSlots":1,"returnSlots":1},"@getLtv_12954":{"entryPoint":null,"id":12954,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_20345":{"entryPoint":20267,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":20135,"id":20309,"parameterSlots":1,"returnSlots":1},"@getParams_14000":{"entryPoint":null,"id":14000,"parameterSlots":1,"returnSlots":6},"@getReserveFactor_13512":{"entryPoint":null,"id":13512,"parameterSlots":1,"returnSlots":1},"@getSiloedBorrowingState_14497":{"entryPoint":18066,"id":14497,"parameterSlots":3,"returnSlots":2},"@getSiloedBorrowing_13360":{"entryPoint":null,"id":13360,"parameterSlots":1,"returnSlots":1},"@getUserCurrentDebt_14856":{"entryPoint":11296,"id":14856,"parameterSlots":2,"returnSlots":2},"@isBorrowingAny_14356":{"entryPoint":null,"id":14356,"parameterSlots":1,"returnSlots":1},"@isBorrowingOne_14339":{"entryPoint":20075,"id":14339,"parameterSlots":1,"returnSlots":1},"@isBorrowing_14222":{"entryPoint":19506,"id":14222,"parameterSlots":2,"returnSlots":1},"@isEmpty_14371":{"entryPoint":null,"id":14371,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_17208":{"entryPoint":19489,"id":17208,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralOne_14291":{"entryPoint":16201,"id":14291,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_14187":{"entryPoint":19133,"id":14187,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_14260":{"entryPoint":17867,"id":14260,"parameterSlots":2,"returnSlots":1},"@percentDiv_23725":{"entryPoint":17824,"id":23725,"parameterSlots":2,"returnSlots":1},"@percentMul_23713":{"entryPoint":17999,"id":23713,"parameterSlots":2,"returnSlots":1},"@rayDiv_23792":{"entryPoint":18847,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":16351,"id":23780,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":12919,"id":106,"parameterSlots":4,"returnSlots":0},"@setBorrowing_14101":{"entryPoint":10148,"id":14101,"parameterSlots":3,"returnSlots":0},"@toUint128_1626":{"entryPoint":10297,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_20618":{"entryPoint":10463,"id":20618,"parameterSlots":5,"returnSlots":0},"@updateIsolatedDebtIfIsolated_18571":{"entryPoint":12405,"id":18571,"parameterSlots":5,"returnSlots":0},"@updateState_20387":{"entryPoint":5430,"id":20387,"parameterSlots":2,"returnSlots":0},"@validateBorrow_22477":{"entryPoint":5753,"id":22477,"parameterSlots":4,"returnSlots":0},"@validateRebalanceStableBorrowRate_22783":{"entryPoint":13138,"id":22783,"parameterSlots":3,"returnSlots":0},"@validateRepay_22569":{"entryPoint":11613,"id":22569,"parameterSlots":6,"returnSlots":0},"@validateSwapRateMode_22696":{"entryPoint":14248,"id":22696,"parameterSlots":6,"returnSlots":0},"@wadDiv_23768":{"entryPoint":20020,"id":23768,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":20653,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool":{"entryPoint":20744,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_InterestRateMode":{"entryPoint":20694,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":22562,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_boolt_uint256_fromMemory":{"entryPoint":21576,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory":{"entryPoint":21521,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteBorrowParams_$24027_memory_ptr":{"entryPoint":20772,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteRepayParams_$24039_memory_ptr":{"entryPoint":21088,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_addresst_address":{"entryPoint":21344,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_enum$_InterestRateMode_$23931":{"entryPoint":21404,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":22273,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256_fromMemory":{"entryPoint":22298,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":22652,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":22372,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint16":{"entryPoint":20709,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":20755,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_enum_InterestRateMode":{"entryPoint":22150,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint128__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed":{"entryPoint":22209,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_enum$_InterestRateMode_$23931__to_t_uint8__fromStack_reversed":{"entryPoint":22358,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":22447,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"allocate_memory":{"entryPoint":20572,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":22098,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":22334,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":22039,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":21692,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":21980,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":21789,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":22591,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":22698,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":21669,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":21622,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":21992,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":21474,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":20727,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:17909:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"55:363:124","statements":[{"nodeType":"YulAssignment","src":"65:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"81:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"75:5:124"},"nodeType":"YulFunctionCall","src":"75:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"65:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"93:37:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"115:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"123:6:124","type":"","value":"0x0180"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:19:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"97:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"213:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"234:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"237:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"227:6:124"},"nodeType":"YulFunctionCall","src":"227:88:124"},"nodeType":"YulExpressionStatement","src":"227:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"335:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"338:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"328:6:124"},"nodeType":"YulFunctionCall","src":"328:15:124"},"nodeType":"YulExpressionStatement","src":"328:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"363:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"366:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"356:6:124"},"nodeType":"YulFunctionCall","src":"356:15:124"},"nodeType":"YulExpressionStatement","src":"356:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"148:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"160:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"145:2:124"},"nodeType":"YulFunctionCall","src":"145:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"184:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"196:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"181:2:124"},"nodeType":"YulFunctionCall","src":"181:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"142:2:124"},"nodeType":"YulFunctionCall","src":"142:62:124"},"nodeType":"YulIf","src":"139:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"397:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"401:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"390:6:124"},"nodeType":"YulFunctionCall","src":"390:22:124"},"nodeType":"YulExpressionStatement","src":"390:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"44:6:124","type":""}],"src":"14:404:124"},{"body":{"nodeType":"YulBlock","src":"472:147:124","statements":[{"nodeType":"YulAssignment","src":"482:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"504:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"491:12:124"},"nodeType":"YulFunctionCall","src":"491:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"482:5:124"}]},{"body":{"nodeType":"YulBlock","src":"597:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"606:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"609:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"599:6:124"},"nodeType":"YulFunctionCall","src":"599:12:124"},"nodeType":"YulExpressionStatement","src":"599:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"533:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"544:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"551:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"540:3:124"},"nodeType":"YulFunctionCall","src":"540:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"530:2:124"},"nodeType":"YulFunctionCall","src":"530:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"523:6:124"},"nodeType":"YulFunctionCall","src":"523:73:124"},"nodeType":"YulIf","src":"520:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"451:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"462:5:124","type":""}],"src":"423:196:124"},{"body":{"nodeType":"YulBlock","src":"687:94:124","statements":[{"nodeType":"YulAssignment","src":"697:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"719:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"706:12:124"},"nodeType":"YulFunctionCall","src":"706:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"697:5:124"}]},{"body":{"nodeType":"YulBlock","src":"759:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"768:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"771:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"761:6:124"},"nodeType":"YulFunctionCall","src":"761:12:124"},"nodeType":"YulExpressionStatement","src":"761:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"748:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"755:1:124","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"745:2:124"},"nodeType":"YulFunctionCall","src":"745:12:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"738:6:124"},"nodeType":"YulFunctionCall","src":"738:20:124"},"nodeType":"YulIf","src":"735:40:124"}]},"name":"abi_decode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"666:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"677:5:124","type":""}],"src":"624:157:124"},{"body":{"nodeType":"YulBlock","src":"834:111:124","statements":[{"nodeType":"YulAssignment","src":"844:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"866:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"853:12:124"},"nodeType":"YulFunctionCall","src":"853:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"844:5:124"}]},{"body":{"nodeType":"YulBlock","src":"923:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"932:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"935:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"925:6:124"},"nodeType":"YulFunctionCall","src":"925:12:124"},"nodeType":"YulExpressionStatement","src":"925:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"895:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"906:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"913:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"902:3:124"},"nodeType":"YulFunctionCall","src":"902:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"892:2:124"},"nodeType":"YulFunctionCall","src":"892:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"885:6:124"},"nodeType":"YulFunctionCall","src":"885:37:124"},"nodeType":"YulIf","src":"882:57:124"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"813:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"824:5:124","type":""}],"src":"786:159:124"},{"body":{"nodeType":"YulBlock","src":"992:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"1046:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1055:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1058:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1048:6:124"},"nodeType":"YulFunctionCall","src":"1048:12:124"},"nodeType":"YulExpressionStatement","src":"1048:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1015:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1036:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1029:6:124"},"nodeType":"YulFunctionCall","src":"1029:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1022:6:124"},"nodeType":"YulFunctionCall","src":"1022:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1012:2:124"},"nodeType":"YulFunctionCall","src":"1012:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:40:124"},"nodeType":"YulIf","src":"1002:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"981:5:124","type":""}],"src":"950:118:124"},{"body":{"nodeType":"YulBlock","src":"1119:82:124","statements":[{"nodeType":"YulAssignment","src":"1129:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1151:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1138:12:124"},"nodeType":"YulFunctionCall","src":"1138:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1129:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1189:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1167:21:124"},"nodeType":"YulFunctionCall","src":"1167:28:124"},"nodeType":"YulExpressionStatement","src":"1167:28:124"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1098:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1109:5:124","type":""}],"src":"1073:128:124"},{"body":{"nodeType":"YulBlock","src":"1253:109:124","statements":[{"nodeType":"YulAssignment","src":"1263:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1285:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1272:12:124"},"nodeType":"YulFunctionCall","src":"1272:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1263:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1340:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1349:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1352:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1342:6:124"},"nodeType":"YulFunctionCall","src":"1342:12:124"},"nodeType":"YulExpressionStatement","src":"1342:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1314:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1325:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1332:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1321:3:124"},"nodeType":"YulFunctionCall","src":"1321:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1311:2:124"},"nodeType":"YulFunctionCall","src":"1311:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1304:6:124"},"nodeType":"YulFunctionCall","src":"1304:35:124"},"nodeType":"YulIf","src":"1301:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1232:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1243:5:124","type":""}],"src":"1206:156:124"},{"body":{"nodeType":"YulBlock","src":"1712:1418:124","statements":[{"nodeType":"YulVariableDeclaration","src":"1722:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1736:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1745:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1732:3:124"},"nodeType":"YulFunctionCall","src":"1732:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1726:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1780:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1789:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1792:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1782:6:124"},"nodeType":"YulFunctionCall","src":"1782:12:124"},"nodeType":"YulExpressionStatement","src":"1782:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1771:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1775:3:124","type":"","value":"512"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1767:3:124"},"nodeType":"YulFunctionCall","src":"1767:12:124"},"nodeType":"YulIf","src":"1764:32:124"},{"nodeType":"YulAssignment","src":"1805:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1828:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1815:12:124"},"nodeType":"YulFunctionCall","src":"1815:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1805:6:124"}]},{"nodeType":"YulAssignment","src":"1847:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1874:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1885:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1870:3:124"},"nodeType":"YulFunctionCall","src":"1870:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1857:12:124"},"nodeType":"YulFunctionCall","src":"1857:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1847:6:124"}]},{"nodeType":"YulAssignment","src":"1898:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1925:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1936:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1921:3:124"},"nodeType":"YulFunctionCall","src":"1921:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1908:12:124"},"nodeType":"YulFunctionCall","src":"1908:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1898:6:124"}]},{"nodeType":"YulAssignment","src":"1949:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1976:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1987:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1972:3:124"},"nodeType":"YulFunctionCall","src":"1972:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1959:12:124"},"nodeType":"YulFunctionCall","src":"1959:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1949:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2000:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2010:6:124","type":"","value":"0x0180"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2004:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2113:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2122:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2125:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2115:6:124"},"nodeType":"YulFunctionCall","src":"2115:12:124"},"nodeType":"YulExpressionStatement","src":"2115:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2036:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2040:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2032:3:124"},"nodeType":"YulFunctionCall","src":"2032:75:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2109:2:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2028:3:124"},"nodeType":"YulFunctionCall","src":"2028:84:124"},"nodeType":"YulIf","src":"2025:104:124"},{"nodeType":"YulVariableDeclaration","src":"2138:30:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2151:15:124"},"nodeType":"YulFunctionCall","src":"2151:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2142:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2184:5:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2214:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2225:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2210:3:124"},"nodeType":"YulFunctionCall","src":"2210:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2191:18:124"},"nodeType":"YulFunctionCall","src":"2191:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2177:6:124"},"nodeType":"YulFunctionCall","src":"2177:54:124"},"nodeType":"YulExpressionStatement","src":"2177:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2251:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2258:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2247:3:124"},"nodeType":"YulFunctionCall","src":"2247:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2286:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2297:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2282:3:124"},"nodeType":"YulFunctionCall","src":"2282:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2263:18:124"},"nodeType":"YulFunctionCall","src":"2263:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2240:6:124"},"nodeType":"YulFunctionCall","src":"2240:63:124"},"nodeType":"YulExpressionStatement","src":"2240:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2323:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2330:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2319:3:124"},"nodeType":"YulFunctionCall","src":"2319:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2358:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2369:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2354:3:124"},"nodeType":"YulFunctionCall","src":"2354:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2335:18:124"},"nodeType":"YulFunctionCall","src":"2335:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2312:6:124"},"nodeType":"YulFunctionCall","src":"2312:63:124"},"nodeType":"YulExpressionStatement","src":"2312:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2395:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2402:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2391:3:124"},"nodeType":"YulFunctionCall","src":"2391:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2424:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2435:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2420:3:124"},"nodeType":"YulFunctionCall","src":"2420:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2407:12:124"},"nodeType":"YulFunctionCall","src":"2407:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2384:6:124"},"nodeType":"YulFunctionCall","src":"2384:57:124"},"nodeType":"YulExpressionStatement","src":"2384:57:124"},{"nodeType":"YulVariableDeclaration","src":"2450:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2460:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2454:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2483:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2490:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2479:3:124"},"nodeType":"YulFunctionCall","src":"2479:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2533:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2544:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2529:3:124"},"nodeType":"YulFunctionCall","src":"2529:18:124"}],"functionName":{"name":"abi_decode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"2496:32:124"},"nodeType":"YulFunctionCall","src":"2496:52:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2472:6:124"},"nodeType":"YulFunctionCall","src":"2472:77:124"},"nodeType":"YulExpressionStatement","src":"2472:77:124"},{"nodeType":"YulVariableDeclaration","src":"2558:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2568:3:124","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2562:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2591:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2598:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2587:3:124"},"nodeType":"YulFunctionCall","src":"2587:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2626:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2637:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2622:3:124"},"nodeType":"YulFunctionCall","src":"2622:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"2604:17:124"},"nodeType":"YulFunctionCall","src":"2604:37:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2580:6:124"},"nodeType":"YulFunctionCall","src":"2580:62:124"},"nodeType":"YulExpressionStatement","src":"2580:62:124"},{"nodeType":"YulVariableDeclaration","src":"2651:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2661:3:124","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"2655:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2684:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2691:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2680:3:124"},"nodeType":"YulFunctionCall","src":"2680:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2717:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"2728:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2713:3:124"},"nodeType":"YulFunctionCall","src":"2713:18:124"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"2697:15:124"},"nodeType":"YulFunctionCall","src":"2697:35:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2673:6:124"},"nodeType":"YulFunctionCall","src":"2673:60:124"},"nodeType":"YulExpressionStatement","src":"2673:60:124"},{"nodeType":"YulVariableDeclaration","src":"2742:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2752:3:124","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"2746:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2775:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2782:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2771:3:124"},"nodeType":"YulFunctionCall","src":"2771:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2805:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"2816:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2801:3:124"},"nodeType":"YulFunctionCall","src":"2801:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2788:12:124"},"nodeType":"YulFunctionCall","src":"2788:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2764:6:124"},"nodeType":"YulFunctionCall","src":"2764:57:124"},"nodeType":"YulExpressionStatement","src":"2764:57:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2841:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2848:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2837:3:124"},"nodeType":"YulFunctionCall","src":"2837:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2870:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2881:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2866:3:124"},"nodeType":"YulFunctionCall","src":"2866:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2853:12:124"},"nodeType":"YulFunctionCall","src":"2853:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2830:6:124"},"nodeType":"YulFunctionCall","src":"2830:56:124"},"nodeType":"YulExpressionStatement","src":"2830:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2906:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"2913:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2902:3:124"},"nodeType":"YulFunctionCall","src":"2902:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2941:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2952:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2937:3:124"},"nodeType":"YulFunctionCall","src":"2937:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2918:18:124"},"nodeType":"YulFunctionCall","src":"2918:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2895:6:124"},"nodeType":"YulFunctionCall","src":"2895:63:124"},"nodeType":"YulExpressionStatement","src":"2895:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2978:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"2985:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2974:3:124"},"nodeType":"YulFunctionCall","src":"2974:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3011:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3022:3:124","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3007:3:124"},"nodeType":"YulFunctionCall","src":"3007:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2990:16:124"},"nodeType":"YulFunctionCall","src":"2990:37:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2967:6:124"},"nodeType":"YulFunctionCall","src":"2967:61:124"},"nodeType":"YulExpressionStatement","src":"2967:61:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3048:5:124"},{"name":"_6","nodeType":"YulIdentifier","src":"3055:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3044:3:124"},"nodeType":"YulFunctionCall","src":"3044:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3083:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3094:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3079:3:124"},"nodeType":"YulFunctionCall","src":"3079:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3060:18:124"},"nodeType":"YulFunctionCall","src":"3060:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3037:6:124"},"nodeType":"YulFunctionCall","src":"3037:63:124"},"nodeType":"YulExpressionStatement","src":"3037:63:124"},{"nodeType":"YulAssignment","src":"3109:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3119:5:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3109:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteBorrowParams_$24027_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1646:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1657:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1669:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1677:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1685:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1693:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1701:6:124","type":""}],"src":"1367:1763:124"},{"body":{"nodeType":"YulBlock","src":"3410:1155:124","statements":[{"nodeType":"YulVariableDeclaration","src":"3420:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3434:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3443:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3430:3:124"},"nodeType":"YulFunctionCall","src":"3430:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3424:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3478:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3487:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3490:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3480:6:124"},"nodeType":"YulFunctionCall","src":"3480:12:124"},"nodeType":"YulExpressionStatement","src":"3480:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3469:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3473:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3465:3:124"},"nodeType":"YulFunctionCall","src":"3465:12:124"},"nodeType":"YulIf","src":"3462:32:124"},{"nodeType":"YulAssignment","src":"3503:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3526:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3513:12:124"},"nodeType":"YulFunctionCall","src":"3513:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3503:6:124"}]},{"nodeType":"YulAssignment","src":"3545:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3572:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3583:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3568:3:124"},"nodeType":"YulFunctionCall","src":"3568:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3555:12:124"},"nodeType":"YulFunctionCall","src":"3555:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3545:6:124"}]},{"nodeType":"YulAssignment","src":"3596:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3623:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3634:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3619:3:124"},"nodeType":"YulFunctionCall","src":"3619:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3606:12:124"},"nodeType":"YulFunctionCall","src":"3606:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3596:6:124"}]},{"body":{"nodeType":"YulBlock","src":"3737:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3746:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3749:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3739:6:124"},"nodeType":"YulFunctionCall","src":"3739:12:124"},"nodeType":"YulExpressionStatement","src":"3739:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3658:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3662:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3654:3:124"},"nodeType":"YulFunctionCall","src":"3654:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"3731:4:124","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3650:3:124"},"nodeType":"YulFunctionCall","src":"3650:86:124"},"nodeType":"YulIf","src":"3647:106:124"},{"nodeType":"YulVariableDeclaration","src":"3762:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3782:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3776:5:124"},"nodeType":"YulFunctionCall","src":"3776:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"3766:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3794:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3816:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3824:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3812:3:124"},"nodeType":"YulFunctionCall","src":"3812:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"3798:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3912:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3933:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3936:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3926:6:124"},"nodeType":"YulFunctionCall","src":"3926:88:124"},"nodeType":"YulExpressionStatement","src":"3926:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4034:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4037:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4027:6:124"},"nodeType":"YulFunctionCall","src":"4027:15:124"},"nodeType":"YulExpressionStatement","src":"4027:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4062:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4065:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4055:6:124"},"nodeType":"YulFunctionCall","src":"4055:15:124"},"nodeType":"YulExpressionStatement","src":"4055:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3847:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"3859:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3844:2:124"},"nodeType":"YulFunctionCall","src":"3844:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3883:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3895:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3880:2:124"},"nodeType":"YulFunctionCall","src":"3880:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3841:2:124"},"nodeType":"YulFunctionCall","src":"3841:62:124"},"nodeType":"YulIf","src":"3838:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4096:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4100:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4089:6:124"},"nodeType":"YulFunctionCall","src":"4089:22:124"},"nodeType":"YulExpressionStatement","src":"4089:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4127:6:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4158:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4169:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4154:3:124"},"nodeType":"YulFunctionCall","src":"4154:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4135:18:124"},"nodeType":"YulFunctionCall","src":"4135:38:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4120:6:124"},"nodeType":"YulFunctionCall","src":"4120:54:124"},"nodeType":"YulExpressionStatement","src":"4120:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4194:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4202:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4190:3:124"},"nodeType":"YulFunctionCall","src":"4190:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4224:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4235:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4220:3:124"},"nodeType":"YulFunctionCall","src":"4220:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4207:12:124"},"nodeType":"YulFunctionCall","src":"4207:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4183:6:124"},"nodeType":"YulFunctionCall","src":"4183:58:124"},"nodeType":"YulExpressionStatement","src":"4183:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4261:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4269:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4257:3:124"},"nodeType":"YulFunctionCall","src":"4257:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4311:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4322:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4307:3:124"},"nodeType":"YulFunctionCall","src":"4307:20:124"}],"functionName":{"name":"abi_decode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"4274:32:124"},"nodeType":"YulFunctionCall","src":"4274:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4250:6:124"},"nodeType":"YulFunctionCall","src":"4250:79:124"},"nodeType":"YulExpressionStatement","src":"4250:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4349:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4357:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4345:3:124"},"nodeType":"YulFunctionCall","src":"4345:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4385:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4396:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4381:3:124"},"nodeType":"YulFunctionCall","src":"4381:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4362:18:124"},"nodeType":"YulFunctionCall","src":"4362:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4338:6:124"},"nodeType":"YulFunctionCall","src":"4338:64:124"},"nodeType":"YulExpressionStatement","src":"4338:64:124"},{"nodeType":"YulVariableDeclaration","src":"4411:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4441:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4452:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4437:3:124"},"nodeType":"YulFunctionCall","src":"4437:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4424:12:124"},"nodeType":"YulFunctionCall","src":"4424:33:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4415:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4488:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"4466:21:124"},"nodeType":"YulFunctionCall","src":"4466:28:124"},"nodeType":"YulExpressionStatement","src":"4466:28:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4514:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4522:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4510:3:124"},"nodeType":"YulFunctionCall","src":"4510:16:124"},{"name":"value","nodeType":"YulIdentifier","src":"4528:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4503:6:124"},"nodeType":"YulFunctionCall","src":"4503:31:124"},"nodeType":"YulExpressionStatement","src":"4503:31:124"},{"nodeType":"YulAssignment","src":"4543:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4553:6:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4543:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteRepayParams_$24039_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3352:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3363:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3375:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3383:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3391:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3399:6:124","type":""}],"src":"3135:1430:124"},{"body":{"nodeType":"YulBlock","src":"4679:76:124","statements":[{"nodeType":"YulAssignment","src":"4689:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4701:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4712:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4697:3:124"},"nodeType":"YulFunctionCall","src":"4697:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4689:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4731:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"4742:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4724:6:124"},"nodeType":"YulFunctionCall","src":"4724:25:124"},"nodeType":"YulExpressionStatement","src":"4724:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4648:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4659:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4670:4:124","type":""}],"src":"4570:185:124"},{"body":{"nodeType":"YulBlock","src":"4895:224:124","statements":[{"body":{"nodeType":"YulBlock","src":"4941:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4950:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4953:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4943:6:124"},"nodeType":"YulFunctionCall","src":"4943:12:124"},"nodeType":"YulExpressionStatement","src":"4943:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4916:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4925:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4912:3:124"},"nodeType":"YulFunctionCall","src":"4912:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4937:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4908:3:124"},"nodeType":"YulFunctionCall","src":"4908:32:124"},"nodeType":"YulIf","src":"4905:52:124"},{"nodeType":"YulAssignment","src":"4966:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4989:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4976:12:124"},"nodeType":"YulFunctionCall","src":"4976:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4966:6:124"}]},{"nodeType":"YulAssignment","src":"5008:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5041:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5052:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5037:3:124"},"nodeType":"YulFunctionCall","src":"5037:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5018:18:124"},"nodeType":"YulFunctionCall","src":"5018:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5008:6:124"}]},{"nodeType":"YulAssignment","src":"5065:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5098:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5109:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5094:3:124"},"nodeType":"YulFunctionCall","src":"5094:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5075:18:124"},"nodeType":"YulFunctionCall","src":"5075:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5065:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4845:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4856:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4868:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4876:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4884:6:124","type":""}],"src":"4760:359:124"},{"body":{"nodeType":"YulBlock","src":"5338:290:124","statements":[{"body":{"nodeType":"YulBlock","src":"5385:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5394:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5397:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5387:6:124"},"nodeType":"YulFunctionCall","src":"5387:12:124"},"nodeType":"YulExpressionStatement","src":"5387:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5359:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5368:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5355:3:124"},"nodeType":"YulFunctionCall","src":"5355:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5380:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5351:3:124"},"nodeType":"YulFunctionCall","src":"5351:33:124"},"nodeType":"YulIf","src":"5348:53:124"},{"nodeType":"YulAssignment","src":"5410:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5433:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5420:12:124"},"nodeType":"YulFunctionCall","src":"5420:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5410:6:124"}]},{"nodeType":"YulAssignment","src":"5452:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5479:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5490:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5475:3:124"},"nodeType":"YulFunctionCall","src":"5475:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5462:12:124"},"nodeType":"YulFunctionCall","src":"5462:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5452:6:124"}]},{"nodeType":"YulAssignment","src":"5503:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5536:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5547:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5532:3:124"},"nodeType":"YulFunctionCall","src":"5532:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5513:18:124"},"nodeType":"YulFunctionCall","src":"5513:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5503:6:124"}]},{"nodeType":"YulAssignment","src":"5560:62:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5607:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5618:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5603:3:124"},"nodeType":"YulFunctionCall","src":"5603:18:124"}],"functionName":{"name":"abi_decode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"5570:32:124"},"nodeType":"YulFunctionCall","src":"5570:52:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5560:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_enum$_InterestRateMode_$23931","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5280:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5291:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5303:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5311:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5319:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5327:6:124","type":""}],"src":"5124:504:124"},{"body":{"nodeType":"YulBlock","src":"5665:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5682:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5685:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5675:6:124"},"nodeType":"YulFunctionCall","src":"5675:88:124"},"nodeType":"YulExpressionStatement","src":"5675:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5779:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5782:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5772:6:124"},"nodeType":"YulFunctionCall","src":"5772:15:124"},"nodeType":"YulExpressionStatement","src":"5772:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5803:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5806:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5796:6:124"},"nodeType":"YulFunctionCall","src":"5796:15:124"},"nodeType":"YulExpressionStatement","src":"5796:15:124"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"5633:184:124"},{"body":{"nodeType":"YulBlock","src":"6007:285:124","statements":[{"nodeType":"YulAssignment","src":"6017:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6029:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6040:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6025:3:124"},"nodeType":"YulFunctionCall","src":"6025:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6017:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"6053:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6063:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6057:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6121:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6136:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6144:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6132:3:124"},"nodeType":"YulFunctionCall","src":"6132:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6114:6:124"},"nodeType":"YulFunctionCall","src":"6114:34:124"},"nodeType":"YulExpressionStatement","src":"6114:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6164:3:124"},"nodeType":"YulFunctionCall","src":"6164:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6188:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6196:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6184:3:124"},"nodeType":"YulFunctionCall","src":"6184:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6157:6:124"},"nodeType":"YulFunctionCall","src":"6157:43:124"},"nodeType":"YulExpressionStatement","src":"6157:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6220:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6231:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6216:3:124"},"nodeType":"YulFunctionCall","src":"6216:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"6236:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6209:6:124"},"nodeType":"YulFunctionCall","src":"6209:34:124"},"nodeType":"YulExpressionStatement","src":"6209:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6263:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6274:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6259:3:124"},"nodeType":"YulFunctionCall","src":"6259:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"6279:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6252:6:124"},"nodeType":"YulFunctionCall","src":"6252:34:124"},"nodeType":"YulExpressionStatement","src":"6252:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5952:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5963:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5971:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5979:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5987:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5998:4:124","type":""}],"src":"5822:470:124"},{"body":{"nodeType":"YulBlock","src":"6409:255:124","statements":[{"body":{"nodeType":"YulBlock","src":"6455:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6464:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6467:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6457:6:124"},"nodeType":"YulFunctionCall","src":"6457:12:124"},"nodeType":"YulExpressionStatement","src":"6457:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6430:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6439:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6426:3:124"},"nodeType":"YulFunctionCall","src":"6426:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6451:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6422:3:124"},"nodeType":"YulFunctionCall","src":"6422:32:124"},"nodeType":"YulIf","src":"6419:52:124"},{"nodeType":"YulVariableDeclaration","src":"6480:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6499:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6493:5:124"},"nodeType":"YulFunctionCall","src":"6493:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6484:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6540:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"6518:21:124"},"nodeType":"YulFunctionCall","src":"6518:28:124"},"nodeType":"YulExpressionStatement","src":"6518:28:124"},{"nodeType":"YulAssignment","src":"6555:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6565:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6555:6:124"}]},{"nodeType":"YulAssignment","src":"6579:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6599:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6610:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6595:3:124"},"nodeType":"YulFunctionCall","src":"6595:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6589:5:124"},"nodeType":"YulFunctionCall","src":"6589:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6579:6:124"}]},{"nodeType":"YulAssignment","src":"6623:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6643:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6654:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6639:3:124"},"nodeType":"YulFunctionCall","src":"6639:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6633:5:124"},"nodeType":"YulFunctionCall","src":"6633:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6623:6:124"}]}]},"name":"abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6359:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6370:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6382:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6390:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6398:6:124","type":""}],"src":"6297:367:124"},{"body":{"nodeType":"YulBlock","src":"6764:211:124","statements":[{"body":{"nodeType":"YulBlock","src":"6810:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6819:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6822:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6812:6:124"},"nodeType":"YulFunctionCall","src":"6812:12:124"},"nodeType":"YulExpressionStatement","src":"6812:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6785:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6794:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6781:3:124"},"nodeType":"YulFunctionCall","src":"6781:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6806:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6777:3:124"},"nodeType":"YulFunctionCall","src":"6777:32:124"},"nodeType":"YulIf","src":"6774:52:124"},{"nodeType":"YulVariableDeclaration","src":"6835:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6854:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6848:5:124"},"nodeType":"YulFunctionCall","src":"6848:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6839:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6895:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"6873:21:124"},"nodeType":"YulFunctionCall","src":"6873:28:124"},"nodeType":"YulExpressionStatement","src":"6873:28:124"},{"nodeType":"YulAssignment","src":"6910:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6920:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6910:6:124"}]},{"nodeType":"YulAssignment","src":"6934:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6954:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6965:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6950:3:124"},"nodeType":"YulFunctionCall","src":"6950:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6944:5:124"},"nodeType":"YulFunctionCall","src":"6944:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6934:6:124"}]}]},"name":"abi_decode_tuple_t_boolt_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6722:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6733:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6745:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6753:6:124","type":""}],"src":"6669:306:124"},{"body":{"nodeType":"YulBlock","src":"7012:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7029:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7032:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7022:6:124"},"nodeType":"YulFunctionCall","src":"7022:88:124"},"nodeType":"YulExpressionStatement","src":"7022:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7126:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7129:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7119:6:124"},"nodeType":"YulFunctionCall","src":"7119:15:124"},"nodeType":"YulExpressionStatement","src":"7119:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7153:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7143:6:124"},"nodeType":"YulFunctionCall","src":"7143:15:124"},"nodeType":"YulExpressionStatement","src":"7143:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"6980:184:124"},{"body":{"nodeType":"YulBlock","src":"7218:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"7240:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7242:16:124"},"nodeType":"YulFunctionCall","src":"7242:18:124"},"nodeType":"YulExpressionStatement","src":"7242:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7234:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"7237:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7231:2:124"},"nodeType":"YulFunctionCall","src":"7231:8:124"},"nodeType":"YulIf","src":"7228:34:124"},{"nodeType":"YulAssignment","src":"7271:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7283:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"7286:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7279:3:124"},"nodeType":"YulFunctionCall","src":"7279:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"7271:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7200:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"7203:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"7209:4:124","type":""}],"src":"7169:125:124"},{"body":{"nodeType":"YulBlock","src":"7363:418:124","statements":[{"nodeType":"YulVariableDeclaration","src":"7373:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7388:1:124","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"7377:7:124","type":""}]},{"nodeType":"YulAssignment","src":"7398:16:124","value":{"name":"power_1","nodeType":"YulIdentifier","src":"7407:7:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7398:5:124"}]},{"nodeType":"YulAssignment","src":"7423:13:124","value":{"name":"_base","nodeType":"YulIdentifier","src":"7431:5:124"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"7423:4:124"}]},{"body":{"nodeType":"YulBlock","src":"7487:288:124","statements":[{"body":{"nodeType":"YulBlock","src":"7592:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7594:16:124"},"nodeType":"YulFunctionCall","src":"7594:18:124"},"nodeType":"YulExpressionStatement","src":"7594:18:124"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7507:4:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7517:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"7585:4:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7513:3:124"},"nodeType":"YulFunctionCall","src":"7513:77:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7504:2:124"},"nodeType":"YulFunctionCall","src":"7504:87:124"},"nodeType":"YulIf","src":"7501:113:124"},{"body":{"nodeType":"YulBlock","src":"7653:29:124","statements":[{"nodeType":"YulAssignment","src":"7655:25:124","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"7668:5:124"},{"name":"base","nodeType":"YulIdentifier","src":"7675:4:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7664:3:124"},"nodeType":"YulFunctionCall","src":"7664:16:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7655:5:124"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7634:8:124"},{"name":"power_1","nodeType":"YulIdentifier","src":"7644:7:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7630:3:124"},"nodeType":"YulFunctionCall","src":"7630:22:124"},"nodeType":"YulIf","src":"7627:55:124"},{"nodeType":"YulAssignment","src":"7695:23:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7707:4:124"},{"name":"base","nodeType":"YulIdentifier","src":"7713:4:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7703:3:124"},"nodeType":"YulFunctionCall","src":"7703:15:124"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"7695:4:124"}]},{"nodeType":"YulAssignment","src":"7731:34:124","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"7747:7:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"7756:8:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"7743:3:124"},"nodeType":"YulFunctionCall","src":"7743:22:124"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"7731:8:124"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7456:8:124"},{"name":"power_1","nodeType":"YulIdentifier","src":"7466:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7453:2:124"},"nodeType":"YulFunctionCall","src":"7453:21:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7475:3:124","statements":[]},"pre":{"nodeType":"YulBlock","src":"7449:3:124","statements":[]},"src":"7445:330:124"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"7327:5:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"7334:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"7347:5:124","type":""},{"name":"base","nodeType":"YulTypedName","src":"7354:4:124","type":""}],"src":"7299:482:124"},{"body":{"nodeType":"YulBlock","src":"7845:807:124","statements":[{"body":{"nodeType":"YulBlock","src":"7883:52:124","statements":[{"nodeType":"YulAssignment","src":"7897:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7906:1:124","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7897:5:124"}]},{"nodeType":"YulLeave","src":"7920:5:124"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7865:8:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7858:6:124"},"nodeType":"YulFunctionCall","src":"7858:16:124"},"nodeType":"YulIf","src":"7855:80:124"},{"body":{"nodeType":"YulBlock","src":"7968:52:124","statements":[{"nodeType":"YulAssignment","src":"7982:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7991:1:124","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7982:5:124"}]},{"nodeType":"YulLeave","src":"8005:5:124"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7954:4:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7947:6:124"},"nodeType":"YulFunctionCall","src":"7947:12:124"},"nodeType":"YulIf","src":"7944:76:124"},{"cases":[{"body":{"nodeType":"YulBlock","src":"8056:52:124","statements":[{"nodeType":"YulAssignment","src":"8070:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8079:1:124","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8070:5:124"}]},{"nodeType":"YulLeave","src":"8093:5:124"}]},"nodeType":"YulCase","src":"8049:59:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8054:1:124","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"8124:123:124","statements":[{"body":{"nodeType":"YulBlock","src":"8159:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8161:16:124"},"nodeType":"YulFunctionCall","src":"8161:18:124"},"nodeType":"YulExpressionStatement","src":"8161:18:124"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8144:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"8154:3:124","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8141:2:124"},"nodeType":"YulFunctionCall","src":"8141:17:124"},"nodeType":"YulIf","src":"8138:43:124"},{"nodeType":"YulAssignment","src":"8194:25:124","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8207:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"8217:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8203:3:124"},"nodeType":"YulFunctionCall","src":"8203:16:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8194:5:124"}]},{"nodeType":"YulLeave","src":"8232:5:124"}]},"nodeType":"YulCase","src":"8117:130:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8122:1:124","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"8036:4:124"},"nodeType":"YulSwitch","src":"8029:218:124"},{"body":{"nodeType":"YulBlock","src":"8345:70:124","statements":[{"nodeType":"YulAssignment","src":"8359:28:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8372:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"8378:8:124"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"8368:3:124"},"nodeType":"YulFunctionCall","src":"8368:19:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8359:5:124"}]},{"nodeType":"YulLeave","src":"8400:5:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8269:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"8275:2:124","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8266:2:124"},"nodeType":"YulFunctionCall","src":"8266:12:124"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8283:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"8293:2:124","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8280:2:124"},"nodeType":"YulFunctionCall","src":"8280:16:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8262:3:124"},"nodeType":"YulFunctionCall","src":"8262:35:124"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8306:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"8312:3:124","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8303:2:124"},"nodeType":"YulFunctionCall","src":"8303:13:124"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8321:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"8331:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8318:2:124"},"nodeType":"YulFunctionCall","src":"8318:16:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8299:3:124"},"nodeType":"YulFunctionCall","src":"8299:36:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"8259:2:124"},"nodeType":"YulFunctionCall","src":"8259:77:124"},"nodeType":"YulIf","src":"8256:159:124"},{"nodeType":"YulVariableDeclaration","src":"8424:57:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8466:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"8472:8:124"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"8447:18:124"},"nodeType":"YulFunctionCall","src":"8447:34:124"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"8428:7:124","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"8437:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8586:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8588:16:124"},"nodeType":"YulFunctionCall","src":"8588:18:124"},"nodeType":"YulExpressionStatement","src":"8588:18:124"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"8496:7:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8509:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"8577:6:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"8505:3:124"},"nodeType":"YulFunctionCall","src":"8505:79:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8493:2:124"},"nodeType":"YulFunctionCall","src":"8493:92:124"},"nodeType":"YulIf","src":"8490:118:124"},{"nodeType":"YulAssignment","src":"8617:29:124","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"8630:7:124"},{"name":"base_1","nodeType":"YulIdentifier","src":"8639:6:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"8626:3:124"},"nodeType":"YulFunctionCall","src":"8626:20:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8617:5:124"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"7816:4:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"7822:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"7835:5:124","type":""}],"src":"7786:866:124"},{"body":{"nodeType":"YulBlock","src":"8727:61:124","statements":[{"nodeType":"YulAssignment","src":"8737:45:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8767:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"8773:8:124"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"8746:20:124"},"nodeType":"YulFunctionCall","src":"8746:36:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8737:5:124"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"8698:4:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"8704:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"8717:5:124","type":""}],"src":"8657:131:124"},{"body":{"nodeType":"YulBlock","src":"8825:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8842:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8845:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8835:6:124"},"nodeType":"YulFunctionCall","src":"8835:88:124"},"nodeType":"YulExpressionStatement","src":"8835:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8939:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8942:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8932:6:124"},"nodeType":"YulFunctionCall","src":"8932:15:124"},"nodeType":"YulExpressionStatement","src":"8932:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8963:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8966:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8956:6:124"},"nodeType":"YulFunctionCall","src":"8956:15:124"},"nodeType":"YulExpressionStatement","src":"8956:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"8793:184:124"},{"body":{"nodeType":"YulBlock","src":"9028:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"9059:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9080:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9083:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9073:6:124"},"nodeType":"YulFunctionCall","src":"9073:88:124"},"nodeType":"YulExpressionStatement","src":"9073:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9181:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9184:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9174:6:124"},"nodeType":"YulFunctionCall","src":"9174:15:124"},"nodeType":"YulExpressionStatement","src":"9174:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9209:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9212:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9202:6:124"},"nodeType":"YulFunctionCall","src":"9202:15:124"},"nodeType":"YulExpressionStatement","src":"9202:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"9048:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9041:6:124"},"nodeType":"YulFunctionCall","src":"9041:9:124"},"nodeType":"YulIf","src":"9038:189:124"},{"nodeType":"YulAssignment","src":"9236:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9245:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"9248:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"9241:3:124"},"nodeType":"YulFunctionCall","src":"9241:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"9236:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9013:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"9016:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"9022:1:124","type":""}],"src":"8982:274:124"},{"body":{"nodeType":"YulBlock","src":"9309:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9319:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9329:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9323:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9372:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9387:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9390:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9383:3:124"},"nodeType":"YulFunctionCall","src":"9383:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"9376:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9402:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"9417:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9420:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9413:3:124"},"nodeType":"YulFunctionCall","src":"9413:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"9406:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9457:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9459:16:124"},"nodeType":"YulFunctionCall","src":"9459:18:124"},"nodeType":"YulExpressionStatement","src":"9459:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"9438:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"9447:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"9451:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9443:3:124"},"nodeType":"YulFunctionCall","src":"9443:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9435:2:124"},"nodeType":"YulFunctionCall","src":"9435:21:124"},"nodeType":"YulIf","src":"9432:47:124"},{"nodeType":"YulAssignment","src":"9488:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"9499:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"9504:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9495:3:124"},"nodeType":"YulFunctionCall","src":"9495:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"9488:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9292:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"9295:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"9301:3:124","type":""}],"src":"9261:253:124"},{"body":{"nodeType":"YulBlock","src":"9620:76:124","statements":[{"nodeType":"YulAssignment","src":"9630:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9642:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9653:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9638:3:124"},"nodeType":"YulFunctionCall","src":"9638:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9630:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9672:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"9683:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9665:6:124"},"nodeType":"YulFunctionCall","src":"9665:25:124"},"nodeType":"YulExpressionStatement","src":"9665:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9589:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9600:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9611:4:124","type":""}],"src":"9519:177:124"},{"body":{"nodeType":"YulBlock","src":"9830:168:124","statements":[{"nodeType":"YulAssignment","src":"9840:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9852:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9863:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9848:3:124"},"nodeType":"YulFunctionCall","src":"9848:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9840:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9882:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9897:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9905:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9893:3:124"},"nodeType":"YulFunctionCall","src":"9893:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9875:6:124"},"nodeType":"YulFunctionCall","src":"9875:74:124"},"nodeType":"YulExpressionStatement","src":"9875:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9969:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9980:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9965:3:124"},"nodeType":"YulFunctionCall","src":"9965:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"9985:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9958:6:124"},"nodeType":"YulFunctionCall","src":"9958:34:124"},"nodeType":"YulExpressionStatement","src":"9958:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9791:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9802:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9810:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9821:4:124","type":""}],"src":"9701:297:124"},{"body":{"nodeType":"YulBlock","src":"10061:243:124","statements":[{"body":{"nodeType":"YulBlock","src":"10103:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10124:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10127:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10117:6:124"},"nodeType":"YulFunctionCall","src":"10117:88:124"},"nodeType":"YulExpressionStatement","src":"10117:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10225:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10228:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10218:6:124"},"nodeType":"YulFunctionCall","src":"10218:15:124"},"nodeType":"YulExpressionStatement","src":"10218:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10253:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10256:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10246:6:124"},"nodeType":"YulFunctionCall","src":"10246:15:124"},"nodeType":"YulExpressionStatement","src":"10246:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10084:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"10091:1:124","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10081:2:124"},"nodeType":"YulFunctionCall","src":"10081:12:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10074:6:124"},"nodeType":"YulFunctionCall","src":"10074:20:124"},"nodeType":"YulIf","src":"10071:200:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10287:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"10292:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10280:6:124"},"nodeType":"YulFunctionCall","src":"10280:18:124"},"nodeType":"YulExpressionStatement","src":"10280:18:124"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10045:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10052:3:124","type":""}],"src":"10003:301:124"},{"body":{"nodeType":"YulBlock","src":"10514:281:124","statements":[{"nodeType":"YulAssignment","src":"10524:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10536:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10547:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10532:3:124"},"nodeType":"YulFunctionCall","src":"10532:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10524:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10567:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10582:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10590:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10578:3:124"},"nodeType":"YulFunctionCall","src":"10578:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10560:6:124"},"nodeType":"YulFunctionCall","src":"10560:74:124"},"nodeType":"YulExpressionStatement","src":"10560:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10654:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10665:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10650:3:124"},"nodeType":"YulFunctionCall","src":"10650:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"10670:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10643:6:124"},"nodeType":"YulFunctionCall","src":"10643:34:124"},"nodeType":"YulExpressionStatement","src":"10643:34:124"},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10719:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10731:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10742:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10727:3:124"},"nodeType":"YulFunctionCall","src":"10727:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"10686:32:124"},"nodeType":"YulFunctionCall","src":"10686:60:124"},"nodeType":"YulExpressionStatement","src":"10686:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10766:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10777:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10762:3:124"},"nodeType":"YulFunctionCall","src":"10762:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"10782:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10755:6:124"},"nodeType":"YulFunctionCall","src":"10755:34:124"},"nodeType":"YulExpressionStatement","src":"10755:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10459:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10470:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10478:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10486:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10494:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10505:4:124","type":""}],"src":"10309:486:124"},{"body":{"nodeType":"YulBlock","src":"10901:125:124","statements":[{"nodeType":"YulAssignment","src":"10911:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10923:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10934:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10919:3:124"},"nodeType":"YulFunctionCall","src":"10919:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10911:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10953:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10968:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10976:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10964:3:124"},"nodeType":"YulFunctionCall","src":"10964:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10946:6:124"},"nodeType":"YulFunctionCall","src":"10946:74:124"},"nodeType":"YulExpressionStatement","src":"10946:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10870:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10881:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10892:4:124","type":""}],"src":"10800:226:124"},{"body":{"nodeType":"YulBlock","src":"11112:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"11158:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11167:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11170:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11160:6:124"},"nodeType":"YulFunctionCall","src":"11160:12:124"},"nodeType":"YulExpressionStatement","src":"11160:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11133:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11142:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11129:3:124"},"nodeType":"YulFunctionCall","src":"11129:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11154:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11125:3:124"},"nodeType":"YulFunctionCall","src":"11125:32:124"},"nodeType":"YulIf","src":"11122:52:124"},{"nodeType":"YulAssignment","src":"11183:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11199:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11193:5:124"},"nodeType":"YulFunctionCall","src":"11193:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11183:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11078:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11089:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11101:6:124","type":""}],"src":"11031:184:124"},{"body":{"nodeType":"YulBlock","src":"11318:147:124","statements":[{"body":{"nodeType":"YulBlock","src":"11364:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11373:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11376:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11366:6:124"},"nodeType":"YulFunctionCall","src":"11366:12:124"},"nodeType":"YulExpressionStatement","src":"11366:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11339:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11348:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11335:3:124"},"nodeType":"YulFunctionCall","src":"11335:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11360:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11331:3:124"},"nodeType":"YulFunctionCall","src":"11331:32:124"},"nodeType":"YulIf","src":"11328:52:124"},{"nodeType":"YulAssignment","src":"11389:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11405:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11399:5:124"},"nodeType":"YulFunctionCall","src":"11399:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11389:6:124"}]},{"nodeType":"YulAssignment","src":"11424:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11444:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11455:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11440:3:124"},"nodeType":"YulFunctionCall","src":"11440:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11434:5:124"},"nodeType":"YulFunctionCall","src":"11434:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"11424:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11276:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11287:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11299:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11307:6:124","type":""}],"src":"11220:245:124"},{"body":{"nodeType":"YulBlock","src":"11627:211:124","statements":[{"nodeType":"YulAssignment","src":"11637:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11649:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11660:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11645:3:124"},"nodeType":"YulFunctionCall","src":"11645:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11637:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11679:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11694:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11702:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11690:3:124"},"nodeType":"YulFunctionCall","src":"11690:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11672:6:124"},"nodeType":"YulFunctionCall","src":"11672:74:124"},"nodeType":"YulExpressionStatement","src":"11672:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11766:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11777:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11762:3:124"},"nodeType":"YulFunctionCall","src":"11762:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"11782:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11755:6:124"},"nodeType":"YulFunctionCall","src":"11755:34:124"},"nodeType":"YulExpressionStatement","src":"11755:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11809:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11820:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11805:3:124"},"nodeType":"YulFunctionCall","src":"11805:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"11825:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11798:6:124"},"nodeType":"YulFunctionCall","src":"11798:34:124"},"nodeType":"YulExpressionStatement","src":"11798:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11580:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11591:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11599:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11607:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11618:4:124","type":""}],"src":"11470:368:124"},{"body":{"nodeType":"YulBlock","src":"11891:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"11918:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11920:16:124"},"nodeType":"YulFunctionCall","src":"11920:18:124"},"nodeType":"YulExpressionStatement","src":"11920:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11907:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11914:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11910:3:124"},"nodeType":"YulFunctionCall","src":"11910:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11904:2:124"},"nodeType":"YulFunctionCall","src":"11904:13:124"},"nodeType":"YulIf","src":"11901:39:124"},{"nodeType":"YulAssignment","src":"11949:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11960:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11963:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11956:3:124"},"nodeType":"YulFunctionCall","src":"11956:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11949:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11874:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11877:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11883:3:124","type":""}],"src":"11843:128:124"},{"body":{"nodeType":"YulBlock","src":"12133:241:124","statements":[{"nodeType":"YulAssignment","src":"12143:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12155:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12166:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12151:3:124"},"nodeType":"YulFunctionCall","src":"12151:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12143:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"12178:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12188:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12182:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12246:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12261:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12269:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12257:3:124"},"nodeType":"YulFunctionCall","src":"12257:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12239:6:124"},"nodeType":"YulFunctionCall","src":"12239:34:124"},"nodeType":"YulExpressionStatement","src":"12239:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12293:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12304:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12289:3:124"},"nodeType":"YulFunctionCall","src":"12289:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12313:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12321:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12309:3:124"},"nodeType":"YulFunctionCall","src":"12309:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12282:6:124"},"nodeType":"YulFunctionCall","src":"12282:43:124"},"nodeType":"YulExpressionStatement","src":"12282:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12345:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12356:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12341:3:124"},"nodeType":"YulFunctionCall","src":"12341:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12361:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12334:6:124"},"nodeType":"YulFunctionCall","src":"12334:34:124"},"nodeType":"YulExpressionStatement","src":"12334:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12086:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12097:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12105:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12113:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12124:4:124","type":""}],"src":"11976:398:124"},{"body":{"nodeType":"YulBlock","src":"12502:135:124","statements":[{"nodeType":"YulAssignment","src":"12512:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12524:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12535:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12520:3:124"},"nodeType":"YulFunctionCall","src":"12520:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12512:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12554:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12565:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12547:6:124"},"nodeType":"YulFunctionCall","src":"12547:25:124"},"nodeType":"YulExpressionStatement","src":"12547:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12592:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12603:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12588:3:124"},"nodeType":"YulFunctionCall","src":"12588:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12622:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12615:6:124"},"nodeType":"YulFunctionCall","src":"12615:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12608:6:124"},"nodeType":"YulFunctionCall","src":"12608:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12581:6:124"},"nodeType":"YulFunctionCall","src":"12581:50:124"},"nodeType":"YulExpressionStatement","src":"12581:50:124"}]},"name":"abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12463:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12474:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12482:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12493:4:124","type":""}],"src":"12379:258:124"},{"body":{"nodeType":"YulBlock","src":"12827:326:124","statements":[{"nodeType":"YulAssignment","src":"12837:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12849:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12860:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12845:3:124"},"nodeType":"YulFunctionCall","src":"12845:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12837:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"12873:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12883:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12877:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12941:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12956:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12964:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12952:3:124"},"nodeType":"YulFunctionCall","src":"12952:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12934:6:124"},"nodeType":"YulFunctionCall","src":"12934:34:124"},"nodeType":"YulExpressionStatement","src":"12934:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12988:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12999:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12984:3:124"},"nodeType":"YulFunctionCall","src":"12984:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13008:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13016:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13004:3:124"},"nodeType":"YulFunctionCall","src":"13004:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12977:6:124"},"nodeType":"YulFunctionCall","src":"12977:43:124"},"nodeType":"YulExpressionStatement","src":"12977:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13040:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13051:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13036:3:124"},"nodeType":"YulFunctionCall","src":"13036:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"13056:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13029:6:124"},"nodeType":"YulFunctionCall","src":"13029:34:124"},"nodeType":"YulExpressionStatement","src":"13029:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13083:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13094:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13079:3:124"},"nodeType":"YulFunctionCall","src":"13079:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"13103:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13111:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13099:3:124"},"nodeType":"YulFunctionCall","src":"13099:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13072:6:124"},"nodeType":"YulFunctionCall","src":"13072:75:124"},"nodeType":"YulExpressionStatement","src":"13072:75:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint128__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12772:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12783:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12791:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12799:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12807:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12818:4:124","type":""}],"src":"12642:511:124"},{"body":{"nodeType":"YulBlock","src":"13279:102:124","statements":[{"nodeType":"YulAssignment","src":"13289:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13301:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13312:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13297:3:124"},"nodeType":"YulFunctionCall","src":"13297:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13289:4:124"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13357:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13365:9:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"13324:32:124"},"nodeType":"YulFunctionCall","src":"13324:51:124"},"nodeType":"YulExpressionStatement","src":"13324:51:124"}]},"name":"abi_encode_tuple_t_enum$_InterestRateMode_$23931__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13248:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13259:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13270:4:124","type":""}],"src":"13158:223:124"},{"body":{"nodeType":"YulBlock","src":"13517:335:124","statements":[{"body":{"nodeType":"YulBlock","src":"13564:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13573:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13576:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13566:6:124"},"nodeType":"YulFunctionCall","src":"13566:12:124"},"nodeType":"YulExpressionStatement","src":"13566:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13538:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13547:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13534:3:124"},"nodeType":"YulFunctionCall","src":"13534:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13559:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13530:3:124"},"nodeType":"YulFunctionCall","src":"13530:33:124"},"nodeType":"YulIf","src":"13527:53:124"},{"nodeType":"YulAssignment","src":"13589:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13605:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13599:5:124"},"nodeType":"YulFunctionCall","src":"13599:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13589:6:124"}]},{"nodeType":"YulAssignment","src":"13624:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13644:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13655:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13640:3:124"},"nodeType":"YulFunctionCall","src":"13640:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13634:5:124"},"nodeType":"YulFunctionCall","src":"13634:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13624:6:124"}]},{"nodeType":"YulAssignment","src":"13668:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13699:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13684:3:124"},"nodeType":"YulFunctionCall","src":"13684:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13678:5:124"},"nodeType":"YulFunctionCall","src":"13678:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"13668:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13712:38:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13735:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13746:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13731:3:124"},"nodeType":"YulFunctionCall","src":"13731:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13725:5:124"},"nodeType":"YulFunctionCall","src":"13725:25:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13716:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13806:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13815:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13818:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13808:6:124"},"nodeType":"YulFunctionCall","src":"13808:12:124"},"nodeType":"YulExpressionStatement","src":"13808:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13772:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13783:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"13790:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13779:3:124"},"nodeType":"YulFunctionCall","src":"13779:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13769:2:124"},"nodeType":"YulFunctionCall","src":"13769:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13762:6:124"},"nodeType":"YulFunctionCall","src":"13762:43:124"},"nodeType":"YulIf","src":"13759:63:124"},{"nodeType":"YulAssignment","src":"13831:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13841:5:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"13831:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13459:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13470:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13482:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13490:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13498:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13506:6:124","type":""}],"src":"13386:466:124"},{"body":{"nodeType":"YulBlock","src":"13978:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"13988:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13998:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13992:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14016:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"14027:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14009:6:124"},"nodeType":"YulFunctionCall","src":"14009:21:124"},"nodeType":"YulExpressionStatement","src":"14009:21:124"},{"nodeType":"YulVariableDeclaration","src":"14039:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14059:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14053:5:124"},"nodeType":"YulFunctionCall","src":"14053:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"14043:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14086:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"14097:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14082:3:124"},"nodeType":"YulFunctionCall","src":"14082:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"14102:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14075:6:124"},"nodeType":"YulFunctionCall","src":"14075:34:124"},"nodeType":"YulExpressionStatement","src":"14075:34:124"},{"nodeType":"YulVariableDeclaration","src":"14118:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"14127:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"14122:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"14187:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14216:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"14227:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14212:3:124"},"nodeType":"YulFunctionCall","src":"14212:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"14231:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14208:3:124"},"nodeType":"YulFunctionCall","src":"14208:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14250:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"14258:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14246:3:124"},"nodeType":"YulFunctionCall","src":"14246:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"14262:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14242:3:124"},"nodeType":"YulFunctionCall","src":"14242:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14236:5:124"},"nodeType":"YulFunctionCall","src":"14236:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14201:6:124"},"nodeType":"YulFunctionCall","src":"14201:66:124"},"nodeType":"YulExpressionStatement","src":"14201:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14148:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"14151:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14145:2:124"},"nodeType":"YulFunctionCall","src":"14145:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14159:19:124","statements":[{"nodeType":"YulAssignment","src":"14161:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14170:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"14173:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14166:3:124"},"nodeType":"YulFunctionCall","src":"14166:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"14161:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"14141:3:124","statements":[]},"src":"14137:140:124"},{"body":{"nodeType":"YulBlock","src":"14311:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14340:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"14351:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14336:3:124"},"nodeType":"YulFunctionCall","src":"14336:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"14360:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14332:3:124"},"nodeType":"YulFunctionCall","src":"14332:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"14365:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14325:6:124"},"nodeType":"YulFunctionCall","src":"14325:42:124"},"nodeType":"YulExpressionStatement","src":"14325:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14292:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"14295:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14289:2:124"},"nodeType":"YulFunctionCall","src":"14289:13:124"},"nodeType":"YulIf","src":"14286:91:124"},{"nodeType":"YulAssignment","src":"14386:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14402:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"14421:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14429:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14417:3:124"},"nodeType":"YulFunctionCall","src":"14417:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"14434:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14413:3:124"},"nodeType":"YulFunctionCall","src":"14413:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14398:3:124"},"nodeType":"YulFunctionCall","src":"14398:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"14504:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14394:3:124"},"nodeType":"YulFunctionCall","src":"14394:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14386:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13947:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13958:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13969:4:124","type":""}],"src":"13857:656:124"},{"body":{"nodeType":"YulBlock","src":"14596:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"14642:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14651:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14654:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14644:6:124"},"nodeType":"YulFunctionCall","src":"14644:12:124"},"nodeType":"YulExpressionStatement","src":"14644:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14617:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14626:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14613:3:124"},"nodeType":"YulFunctionCall","src":"14613:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14638:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14609:3:124"},"nodeType":"YulFunctionCall","src":"14609:32:124"},"nodeType":"YulIf","src":"14606:52:124"},{"nodeType":"YulVariableDeclaration","src":"14667:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14686:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14680:5:124"},"nodeType":"YulFunctionCall","src":"14680:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14671:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14727:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"14705:21:124"},"nodeType":"YulFunctionCall","src":"14705:28:124"},"nodeType":"YulExpressionStatement","src":"14705:28:124"},{"nodeType":"YulAssignment","src":"14742:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14752:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14742:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14562:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14573:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14585:6:124","type":""}],"src":"14518:245:124"},{"body":{"nodeType":"YulBlock","src":"14820:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"14939:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14941:16:124"},"nodeType":"YulFunctionCall","src":"14941:18:124"},"nodeType":"YulExpressionStatement","src":"14941:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14851:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14844:6:124"},"nodeType":"YulFunctionCall","src":"14844:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14837:6:124"},"nodeType":"YulFunctionCall","src":"14837:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"14859:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14866:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"14934:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"14862:3:124"},"nodeType":"YulFunctionCall","src":"14862:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14856:2:124"},"nodeType":"YulFunctionCall","src":"14856:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14833:3:124"},"nodeType":"YulFunctionCall","src":"14833:105:124"},"nodeType":"YulIf","src":"14830:131:124"},{"nodeType":"YulAssignment","src":"14970:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14985:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"14988:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14981:3:124"},"nodeType":"YulFunctionCall","src":"14981:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"14970:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14799:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"14802:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"14808:7:124","type":""}],"src":"14768:228:124"},{"body":{"nodeType":"YulBlock","src":"15175:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15192:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15203:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15185:6:124"},"nodeType":"YulFunctionCall","src":"15185:21:124"},"nodeType":"YulExpressionStatement","src":"15185:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15226:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15237:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15222:3:124"},"nodeType":"YulFunctionCall","src":"15222:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"15242:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15215:6:124"},"nodeType":"YulFunctionCall","src":"15215:30:124"},"nodeType":"YulExpressionStatement","src":"15215:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15265:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15276:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15261:3:124"},"nodeType":"YulFunctionCall","src":"15261:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"15281:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15254:6:124"},"nodeType":"YulFunctionCall","src":"15254:62:124"},"nodeType":"YulExpressionStatement","src":"15254:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15336:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15347:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15332:3:124"},"nodeType":"YulFunctionCall","src":"15332:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15352:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15325:6:124"},"nodeType":"YulFunctionCall","src":"15325:37:124"},"nodeType":"YulExpressionStatement","src":"15325:37:124"},{"nodeType":"YulAssignment","src":"15371:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15383:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15394:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15379:3:124"},"nodeType":"YulFunctionCall","src":"15379:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15371:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15152:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15166:4:124","type":""}],"src":"15001:403:124"},{"body":{"nodeType":"YulBlock","src":"15604:729:124","statements":[{"nodeType":"YulAssignment","src":"15614:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15626:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15637:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15622:3:124"},"nodeType":"YulFunctionCall","src":"15622:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15614:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15657:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15674:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15668:5:124"},"nodeType":"YulFunctionCall","src":"15668:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15650:6:124"},"nodeType":"YulFunctionCall","src":"15650:32:124"},"nodeType":"YulExpressionStatement","src":"15650:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15702:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15713:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15698:3:124"},"nodeType":"YulFunctionCall","src":"15698:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15730:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15738:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15726:3:124"},"nodeType":"YulFunctionCall","src":"15726:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15720:5:124"},"nodeType":"YulFunctionCall","src":"15720:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15691:6:124"},"nodeType":"YulFunctionCall","src":"15691:54:124"},"nodeType":"YulExpressionStatement","src":"15691:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15765:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15776:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15761:3:124"},"nodeType":"YulFunctionCall","src":"15761:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15793:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15801:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15789:3:124"},"nodeType":"YulFunctionCall","src":"15789:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15783:5:124"},"nodeType":"YulFunctionCall","src":"15783:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15754:6:124"},"nodeType":"YulFunctionCall","src":"15754:54:124"},"nodeType":"YulExpressionStatement","src":"15754:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15828:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15839:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15824:3:124"},"nodeType":"YulFunctionCall","src":"15824:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15856:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15864:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15852:3:124"},"nodeType":"YulFunctionCall","src":"15852:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15846:5:124"},"nodeType":"YulFunctionCall","src":"15846:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15817:6:124"},"nodeType":"YulFunctionCall","src":"15817:54:124"},"nodeType":"YulExpressionStatement","src":"15817:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15891:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15902:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15887:3:124"},"nodeType":"YulFunctionCall","src":"15887:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15919:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15927:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15915:3:124"},"nodeType":"YulFunctionCall","src":"15915:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15909:5:124"},"nodeType":"YulFunctionCall","src":"15909:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15880:6:124"},"nodeType":"YulFunctionCall","src":"15880:54:124"},"nodeType":"YulExpressionStatement","src":"15880:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15954:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15965:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15950:3:124"},"nodeType":"YulFunctionCall","src":"15950:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15982:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15990:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15978:3:124"},"nodeType":"YulFunctionCall","src":"15978:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15972:5:124"},"nodeType":"YulFunctionCall","src":"15972:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15943:6:124"},"nodeType":"YulFunctionCall","src":"15943:54:124"},"nodeType":"YulExpressionStatement","src":"15943:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16017:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16028:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16013:3:124"},"nodeType":"YulFunctionCall","src":"16013:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16045:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16053:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16041:3:124"},"nodeType":"YulFunctionCall","src":"16041:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16035:5:124"},"nodeType":"YulFunctionCall","src":"16035:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16006:6:124"},"nodeType":"YulFunctionCall","src":"16006:54:124"},"nodeType":"YulExpressionStatement","src":"16006:54:124"},{"nodeType":"YulVariableDeclaration","src":"16069:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16099:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16107:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16095:3:124"},"nodeType":"YulFunctionCall","src":"16095:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16089:5:124"},"nodeType":"YulFunctionCall","src":"16089:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"16073:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16122:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16132:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16126:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16194:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16205:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16190:3:124"},"nodeType":"YulFunctionCall","src":"16190:20:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"16216:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16230:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16212:3:124"},"nodeType":"YulFunctionCall","src":"16212:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16183:6:124"},"nodeType":"YulFunctionCall","src":"16183:51:124"},"nodeType":"YulExpressionStatement","src":"16183:51:124"},{"nodeType":"YulVariableDeclaration","src":"16243:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16253:6:124","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"16247:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16279:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"16290:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16275:3:124"},"nodeType":"YulFunctionCall","src":"16275:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16309:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"16317:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16305:3:124"},"nodeType":"YulFunctionCall","src":"16305:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16299:5:124"},"nodeType":"YulFunctionCall","src":"16299:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16323:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16295:3:124"},"nodeType":"YulFunctionCall","src":"16295:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16268:6:124"},"nodeType":"YulFunctionCall","src":"16268:59:124"},"nodeType":"YulExpressionStatement","src":"16268:59:124"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15573:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15584:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15595:4:124","type":""}],"src":"15409:924:124"},{"body":{"nodeType":"YulBlock","src":"16453:191:124","statements":[{"body":{"nodeType":"YulBlock","src":"16499:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16508:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16511:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16501:6:124"},"nodeType":"YulFunctionCall","src":"16501:12:124"},"nodeType":"YulExpressionStatement","src":"16501:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16474:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"16483:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16470:3:124"},"nodeType":"YulFunctionCall","src":"16470:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"16495:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16466:3:124"},"nodeType":"YulFunctionCall","src":"16466:32:124"},"nodeType":"YulIf","src":"16463:52:124"},{"nodeType":"YulAssignment","src":"16524:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16540:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16534:5:124"},"nodeType":"YulFunctionCall","src":"16534:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16524:6:124"}]},{"nodeType":"YulAssignment","src":"16559:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16579:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16590:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16575:3:124"},"nodeType":"YulFunctionCall","src":"16575:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16569:5:124"},"nodeType":"YulFunctionCall","src":"16569:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"16559:6:124"}]},{"nodeType":"YulAssignment","src":"16603:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16623:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16634:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16619:3:124"},"nodeType":"YulFunctionCall","src":"16619:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16613:5:124"},"nodeType":"YulFunctionCall","src":"16613:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"16603:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16403:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16414:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16426:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16434:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16442:6:124","type":""}],"src":"16338:306:124"},{"body":{"nodeType":"YulBlock","src":"16862:250:124","statements":[{"nodeType":"YulAssignment","src":"16872:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16884:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16895:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16880:3:124"},"nodeType":"YulFunctionCall","src":"16880:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16872:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16915:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"16926:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16908:6:124"},"nodeType":"YulFunctionCall","src":"16908:25:124"},"nodeType":"YulExpressionStatement","src":"16908:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16953:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16964:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16949:3:124"},"nodeType":"YulFunctionCall","src":"16949:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"16969:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16942:6:124"},"nodeType":"YulFunctionCall","src":"16942:34:124"},"nodeType":"YulExpressionStatement","src":"16942:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16996:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17007:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16992:3:124"},"nodeType":"YulFunctionCall","src":"16992:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"17012:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16985:6:124"},"nodeType":"YulFunctionCall","src":"16985:34:124"},"nodeType":"YulExpressionStatement","src":"16985:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17039:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17050:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17035:3:124"},"nodeType":"YulFunctionCall","src":"17035:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"17055:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17028:6:124"},"nodeType":"YulFunctionCall","src":"17028:34:124"},"nodeType":"YulExpressionStatement","src":"17028:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17082:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17093:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17078:3:124"},"nodeType":"YulFunctionCall","src":"17078:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"17099:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17071:6:124"},"nodeType":"YulFunctionCall","src":"17071:35:124"},"nodeType":"YulExpressionStatement","src":"17071:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16799:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"16810:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16818:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16826:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16834:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16842:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16853:4:124","type":""}],"src":"16649:463:124"},{"body":{"nodeType":"YulBlock","src":"17226:76:124","statements":[{"nodeType":"YulAssignment","src":"17236:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17248:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17259:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17244:3:124"},"nodeType":"YulFunctionCall","src":"17244:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17236:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17278:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"17289:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17271:6:124"},"nodeType":"YulFunctionCall","src":"17271:25:124"},"nodeType":"YulExpressionStatement","src":"17271:25:124"}]},"name":"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17195:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17206:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17217:4:124","type":""}],"src":"17117:185:124"},{"body":{"nodeType":"YulBlock","src":"17356:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"17366:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"17376:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17370:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17419:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17434:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"17437:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17430:3:124"},"nodeType":"YulFunctionCall","src":"17430:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"17423:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17449:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17464:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"17467:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17460:3:124"},"nodeType":"YulFunctionCall","src":"17460:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"17453:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"17495:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17497:16:124"},"nodeType":"YulFunctionCall","src":"17497:18:124"},"nodeType":"YulExpressionStatement","src":"17497:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"17485:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"17490:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17482:2:124"},"nodeType":"YulFunctionCall","src":"17482:12:124"},"nodeType":"YulIf","src":"17479:38:124"},{"nodeType":"YulAssignment","src":"17526:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"17538:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"17543:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17534:3:124"},"nodeType":"YulFunctionCall","src":"17534:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"17526:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17338:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"17341:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"17347:4:124","type":""}],"src":"17307:246:124"},{"body":{"nodeType":"YulBlock","src":"17732:175:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17760:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17742:6:124"},"nodeType":"YulFunctionCall","src":"17742:21:124"},"nodeType":"YulExpressionStatement","src":"17742:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17783:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17794:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17779:3:124"},"nodeType":"YulFunctionCall","src":"17779:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"17799:2:124","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17772:6:124"},"nodeType":"YulFunctionCall","src":"17772:30:124"},"nodeType":"YulExpressionStatement","src":"17772:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17833:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17818:3:124"},"nodeType":"YulFunctionCall","src":"17818:18:124"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"17838:27:124","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17811:6:124"},"nodeType":"YulFunctionCall","src":"17811:55:124"},"nodeType":"YulExpressionStatement","src":"17811:55:124"},{"nodeType":"YulAssignment","src":"17875:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17887:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17898:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17883:3:124"},"nodeType":"YulFunctionCall","src":"17883:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17875:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17709:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17723:4:124","type":""}],"src":"17558:349:124"}]},"contents":"{\n    { }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0180)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_enum_InterestRateMode(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(lt(value, 3)) { revert(0, 0) }\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_bool(value)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteBorrowParams_$24027_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 512) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let _2 := 0x0180\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80), _2) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_address(add(headStart, 128)))\n        mstore(add(value, 32), abi_decode_address(add(headStart, 160)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 192)))\n        mstore(add(value, 96), calldataload(add(headStart, 224)))\n        let _3 := 256\n        mstore(add(value, 128), abi_decode_enum_InterestRateMode(add(headStart, _3)))\n        let _4 := 288\n        mstore(add(value, 160), abi_decode_uint16(add(headStart, _4)))\n        let _5 := 320\n        mstore(add(value, 192), abi_decode_bool(add(headStart, _5)))\n        let _6 := 352\n        mstore(add(value, 224), calldataload(add(headStart, _6)))\n        mstore(add(value, _3), calldataload(add(headStart, _2)))\n        mstore(add(value, _4), abi_decode_address(add(headStart, 416)))\n        mstore(add(value, _5), abi_decode_uint8(add(headStart, 448)))\n        mstore(add(value, _6), abi_decode_address(add(headStart, 480)))\n        value4 := value\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteRepayParams_$24039_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 256) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0), 0xa0) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        mstore(memPtr, abi_decode_address(add(headStart, 96)))\n        mstore(add(memPtr, 32), calldataload(add(headStart, 128)))\n        mstore(add(memPtr, 64), abi_decode_enum_InterestRateMode(add(headStart, 0xa0)))\n        mstore(add(memPtr, 96), abi_decode_address(add(headStart, 192)))\n        let value := calldataload(add(headStart, 224))\n        validator_revert_bool(value)\n        mstore(add(memPtr, 128), value)\n        value3 := memPtr\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_enum$_InterestRateMode_$23931(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_enum_InterestRateMode(add(headStart, 96))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_boolt_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n        value1 := mload(add(headStart, 32))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        abi_encode_enum_InterestRateMode(value2, add(headStart, 64))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint128__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_enum$_InterestRateMode_$23931__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        abi_encode_enum_InterestRateMode(value0, headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80631e6473f91461005b57806340e95de61461007d5780636973f744146100af578063eac4d703146100cf575b600080fd5b81801561006757600080fd5b5061007b610076366004615124565b6100ef565b005b81801561008957600080fd5b5061009d610098366004615260565b610773565b60405190815260200160405180910390f35b8180156100bb57600080fd5b5061007b6100ca366004615360565b610cd9565b8180156100db57600080fd5b5061007b6100ea36600461539c565b610f6d565b805173ffffffffffffffffffffffffffffffffffffffff1660009081526020869052604081209061011f8261131d565b905061012b8282611536565b6040805160208101909152845481526000908190819061014c908b8b6115c1565b92509250925061027c8a8a8a604051806101c001604052808981526020018c60405180602001604052908160008201548152505081526020018b6000015173ffffffffffffffffffffffffffffffffffffffff1681526020018b6040015173ffffffffffffffffffffffffffffffffffffffff1681526020018b6060015181526020018b6080015160028111156101e5576101e56153e2565b81526020018b60e0015181526020018b610100015181526020018b610120015173ffffffffffffffffffffffffffffffffffffffff1681526020018b610140015160ff1681526020018b610160015173ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815250611679565b600080600188608001516002811115610297576102976153e2565b141561038657600387015461020087015160208a01516040808c015160608d015191517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152908316602482015260448101919091526fffffffffffffffffffffffffffffffff909316606484018190529450169063b3f1c93d906084016060604051808303816000875af1158015610351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103759190615411565b60a089015260c0880152905061044f565b61022086015160208901516040808b015160608c01516101408b015192517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015291841660248301526044820152606481019190915291169063b3f1c93d9060840160408051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190615448565b602088015290505b8015610484576003870154610484908a907501000000000000000000000000000000000000000000900461ffff1660016127a4565b84156105af576101c0860151516000906104ca9060029060301c60ff166104ab91906154a5565b6104b690600a6155dc565b8a606001516104c59190615617565b612839565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208f90526040812060090180549091906105149084906fffffffffffffffffffffffffffffffff16615652565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790556fffffffffffffffffffffffffffffffff1690508473ffffffffffffffffffffffffffffffffffffffff167faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5826040516105a591815260200190565b60405180910390a2505b6105da86896000015160008b60c001516105ca5760006105d0565b8b606001515b8b939291906128df565b8760c001511561067e576101e0860151602089015160608a01516040517f4efecaa500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152911690634efecaa590604401600060405180830381600087803b15801561066557600080fd5b505af1158015610679573d6000803e3d6000fd5b505050505b8760a0015161ffff16886040015173ffffffffffffffffffffffffffffffffffffffff16896000015173ffffffffffffffffffffffffffffffffffffffff167fb3d084820fb1a9decffb176436bd02558d15fac9b0ddfed8c465bc7359d7dce08b602001518c606001518d6080015160016002811115610700576107006153e2565b8f608001516002811115610716576107166153e2565b1461074b5760028e015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661074d565b885b60405161075d94939291906156c1565b60405180910390a4505050505050505050505050565b805173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120816107a38261131d565b90506107af8282611536565b6000806107c0866060015184612c20565b915091506107de838760200151886040015189606001518686612d5d565b60006001876040015160028111156107f8576107f86153e2565b146108035781610805565b825b90508660800151801561083b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8760200151145b156108db576101e08401516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156108b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d59190615701565b60208801525b80876020015110156108ee575060208601515b600187604001516002811115610906576109066153e2565b14156109be5761020084015160608801516040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101849052911690639dc29fac9060440160408051808303816000875af115801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af919061571a565b60a086015260c0850152610a76565b61022084015160608801516101408601516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101859052604481019190915291169063f5298aca906064016020604051808303816000875af1158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190615701565b60208501525b610a9c8488600001518960800151610a8e5783610a91565b60005b8892919060006128df565b80610aa7838561573e565b610ab191906154a5565b610ae4576003850154610ae49089907501000000000000000000000000000000000000000000900461ffff1660006127a4565b610af18a8a8a8785613075565b866080015115610ba2576101e08401516101008501516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909216602483018190526044830184905260648301919091529063d7020d0a90608401600060405180830381600087803b158015610b8557600080fd5b505af1158015610b99573d6000803e3d6000fd5b50505050610c69565b6101e08401518751610bcf9173ffffffffffffffffffffffffffffffffffffffff90911690339084613277565b6101e084015160608801516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015260448101849052911690636fd9767690606401600060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b505050505b606087015187516080890151604080518581529115156020830152339373ffffffffffffffffffffffffffffffffffffffff9081169316917fa534c8dbe71f871f9f3530e97a74601fea17b426cae02e1c5aee42c96c784051910160405180910390a49998505050505050505050565b6000610ce48461131d565b9050610cf08482611536565b610cfb848285613352565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908316906370a0823190602401602060405180830381865afa158015610d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d959190615701565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820183905291925090831690639dc29fac9060440160408051808303816000875af1158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e31919061571a565b505060038601546040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483018190526024830152604482018490526fffffffffffffffffffffffffffffffff90921660648201529083169063b3f1c93d906084016060604051808303816000875af1158015610ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef29190615411565b60a086015260c085015250610f0b8684876000806128df565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a3505050505050565b6000610f788561131d565b9050610f848582611536565b600080610f913384612c20565b91509150610fa38784888585896137a8565b6001846002811115610fb757610fb76153e2565b1415611121576102008301516040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac9060440160408051808303816000875af1158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a919061571a565b60a085015260c08401526102208301516101408401516040517fb3f1c93d0000000000000000000000000000000000000000000000000000000081523360048201819052602482015260448101859052606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063b3f1c93d9060840160408051808303816000875af11580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190615448565b6020850152506112a1565b6102208301516101408401516040517ff5298aca00000000000000000000000000000000000000000000000000000000815233600482015260248101849052604481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063f5298aca906064016020604051808303816000875af11580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd9190615701565b602084015261020083015160038801546040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018490526fffffffffffffffffffffffffffffffff909116606482015273ffffffffffffffffffffffffffffffffffffffff9091169063b3f1c93d906084016060604051808303816000875af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190615411565b60a086015260c0850152505b6112af8784876000806128df565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f7962b394d85a534033ba2efcf43cd36de57b7ebeb3de0ca4428965d9b3ddc4818660405161130c9190615756565b60405180910390a350505050505050565b611325614faf565b61132d614faf565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561145a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147e9190615701565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156114df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190615764565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415611565575050565b61156f8282613ca8565b6115798282613dc9565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b60008060006115cf86613f49565b15611666576000611600877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa613f90565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015611662576001955090935091506116709050565b5050505b5060009150819050805b93509350939050565b608081015160408051808201909152600281527f32360000000000000000000000000000000000000000000000000000000000006020820152906116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b60405180910390fd5b506117c8604051806102800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581526020016000151581526020016000151581526020016000151581526020016000151581525090565b81516101c09081015151671000000000000000811615156102008401526708000000000000008116151561024084015267040000000000000081161515610220840152670200000000000000811615156101e084015267010000000000000016151590820181905260408051808201909152600281527f323700000000000000000000000000000000000000000000000000000000000060208201529061189c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50806102000151156040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525090611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50806101e00151156040518060400160405280600281526020017f323800000000000000000000000000000000000000000000000000000000000081525090611988576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b508061022001516040518060400160405280600281526020017f3330000000000000000000000000000000000000000000000000000000000000815250906119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5061014082015173ffffffffffffffffffffffffffffffffffffffff161580611a95575081610140015173ffffffffffffffffffffffffffffffffffffffff166349aa2e816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615822565b6040518060400160405280600281526020017f353900000000000000000000000000000000000000000000000000000000000081525090611b03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060028260a001516002811115611b1c57611b1c6153e2565b1480611b3d575060018260a001516002811115611b3b57611b3b6153e2565b145b6040518060400160405280600281526020017f333300000000000000000000000000000000000000000000000000000000000081525090611bab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5081516101c001515160301c60ff1661010082015281516101c001515160501c640fffffffff166101208201819052610100820151600a0a61016083015215611cae5781516101408101519051611c0191613fdf565b60e082018190526080808401518451909101519091611c1f9161573e565b611c29919061573e565b60c0820181905261016082015161012083015160408051808201909152600281527f353000000000000000000000000000000000000000000000000000000000000060208201529291021015611cac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b505b81610160015115611e3f5781516101c00151516720000000000000001615156040518060400160405280600281526020017f363000000000000000000000000000000000000000000000000000000000000081525090611d3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50816101a00151611d716002836101000151611d5791906154a5565b611d6290600a6155dc565b84608001516104c59190615617565b61018084015173ffffffffffffffffffffffffffffffffffffffff16600090815260208890526040902060090154611dbb91906fffffffffffffffffffffffffffffffff16615652565b6fffffffffffffffffffffffffffffffff1611156040518060400160405280600281526020017f353300000000000000000000000000000000000000000000000000000000000081525090611e3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b505b61012082015160ff1615611f175761012082015182516101c001515160ff9182169160a89190911c16146040518060400160405280600281526020017f353800000000000000000000000000000000000000000000000000000000000081525090611ed7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5061012082015160ff166000908152602084905260409020546601000000000000900473ffffffffffffffffffffffffffffffffffffffff166101808201525b611f8e8585856040518060a00160405280876020015181526020018760e001518152602001876060015173ffffffffffffffffffffffffffffffffffffffff16815260200187610100015173ffffffffffffffffffffffffffffffffffffffff16815260200187610120015160ff16815250614036565b5060a0860152508352606083015260408083018290528051808201909152600281527f333400000000000000000000000000000000000000000000000000000000000060208201529061200e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50805160408051808201909152600281527f353700000000000000000000000000000000000000000000000000000000000060208201529061207d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50670de0b6b3a76400008160a00151116040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50816080015182610100015173ffffffffffffffffffffffffffffffffffffffff1663b3596f07600073ffffffffffffffffffffffffffffffffffffffff1684610180015173ffffffffffffffffffffffffffffffffffffffff16141561216657846040015161216d565b8361018001515b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156121d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fa9190615701565b612204919061583f565b610140820181815261016083015191829081612222576122226155e8565b049052508051610140820151606083015161224792916122419161573e565b906145a0565b60208083018290526040808401518151808301909252600282527f3336000000000000000000000000000000000000000000000000000000000000928201929092529111156122c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060018260a0015160028111156122dc576122dc6153e2565b141561260a578061024001516040518060400160405280600281526020017f333100000000000000000000000000000000000000000000000000000000000081525090612356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408281015173ffffffffffffffffffffffffffffffffffffffff166000908152602087815291902060030154908301516123ae917501000000000000000000000000000000000000000000900461ffff166145cb565b15806123c3575081516101c001515161ffff16155b8061246c575081516101e0015160608301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906370a0823190602401602060405180830381865afa158015612441573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124659190615701565b8260800151115b6040518060400160405280600281526020017f3337000000000000000000000000000000000000000000000000000000000000815250906124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408281015183516101e0015191517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116906370a0823190602401602060405180830381865afa158015612553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125779190615701565b6080820181905260c083015160009161258f9161464f565b905080836080015111156040518060400160405280600281526020017f333800000000000000000000000000000000000000000000000000000000000081525090612607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50505b6020820151517f5555555555555555555555555555555555555555555555555555555555555555161561279d576020820151612647908686614692565b73ffffffffffffffffffffffffffffffffffffffff166101a083015215801561026083015261271c57816040015173ffffffffffffffffffffffffffffffffffffffff16816101a0015173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383900000000000000000000000000000000000000000000000000000000000081525090612716576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5061279d565b81516101c001515160408051808201909152600281527f3839000000000000000000000000000000000000000000000000000000000000602082015290674000000000000000161561279b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b505b5050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310612813576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50600182811b1b811561282b57835481178455612833565b835481191684555b50505050565b60006fffffffffffffffffffffffffffffffff8211156128db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016116ea565b5090565b61290a6040518060800160405280600081526020016000815260200160008152602001600081525090565b610140850151602086015161291e91613fdf565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991612a7f9190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac0919061587c565b60408401526020830152808252612ad690612839565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151612b1990612839565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff929092169190911790556040810151612b6a90612839565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa158015612c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbb9190615701565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa158015612d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d529190615701565b915091509250929050565b60408051808201909152600281527f3236000000000000000000000000000000000000000000000000000000000000602082015285612dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85141580612e0e57503373ffffffffffffffffffffffffffffffffffffffff8416145b6040518060400160405280600281526020017f343000000000000000000000000000000000000000000000000000000000000081525090612e7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50600080612ed1886101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090612f47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115612fb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b508315801590612fd657506001866002811115612fd457612fd46153e2565b145b80612ffc57508215801590612ffc57506002866002811115612ffa57612ffa6153e2565b145b6040518060400160405280600281526020017f33390000000000000000000000000000000000000000000000000000000000008152509061306a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b505050505050505050565b60408051602081019091528354815260009081906130949088886115c1565b5091509150811561326e5773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff90911691906131119060029060301c60ff166130fc91906154a5565b61310790600a6155dc565b6104c59087615617565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16116131c15773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a261306a565b60006131cd82846158aa565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a25050505b50505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16132e2573d6000803e3d6000fd5b506132ec8561473e565b61279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016116ea565b6000806133a6846101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061341c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f32390000000000000000000000000000000000000000000000000000000000006020820152811561348a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50600084610220015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135019190615701565b85610200015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135759190615701565b61357f919061573e565b6007870154604080516101208101825260088a01546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104168152600060208201819052818301819052606082018190526080820185905260a082018190526101a08a015160c083015273ffffffffffffffffffffffffffffffffffffffff89811660e08401526101e08b0151811661010084015292517fa589870900000000000000000000000000000000000000000000000000000000815294955093919092169163a5898709916136d59190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa1580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613716919061587c565b5090915061372890508161232861464f565b86610160015111156040518060400160405280600281526020017f34340000000000000000000000000000000000000000000000000000000000008152509061379e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5050505050505050565b6000806000806137ff896101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b945094505093509350836040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090613877576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f3239000000000000000000000000000000000000000000000000000000000000602082015281156138e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528315613953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b506001856002811115613968576139686153e2565b14156139e05760408051808201909152600281527f34310000000000000000000000000000000000000000000000000000000000006020820152876139da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50613c9c565b60028560028111156139f4576139f46153e2565b1415613c375760408051808201909152600281527f3432000000000000000000000000000000000000000000000000000000000000602082015286613a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060408051808201909152600281527f3331000000000000000000000000000000000000000000000000000000000000602082015282613ad3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5060038a0154604080516020810190915289548152613b0e917501000000000000000000000000000000000000000000900461ffff166145cb565b1580613b2257506101c08901515161ffff16155b80613bc957506101e08901516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015613b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbd9190615701565b613bc7878961573e565b115b6040518060400160405280600281526020017f3337000000000000000000000000000000000000000000000000000000000000815250906139da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b604080518082018252600281527f3333000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526116ea91906004016157af565b50505050505050505050565b61016081015115613d38576000613cc982610160015183610240015161480a565b9050613ce28260e0015182613fdf90919063ffffffff16565b6101008301819052613cf390612839565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115613dc5576000613d5582610180015183610240015161484f565b9050613d6f82610120015182613fdf90919063ffffffff16565b6101408301819052613d8090612839565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b613e026040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a0820151613e1157505050565b6101208201518251613e2291613fdf565b60208201526101408201518251613e3891613fdf565b60408201526060820151610260830151610240840151613e6092919064ffffffffff16614858565b606082018190526040830151613e7591613fdf565b808252602082015160808401516040840151613e91919061573e565b613e9b91906154a5565b613ea591906154a5565b608082018190526101a0830151613ebc919061464f565b60a0820181905215613f4457613ee76104c58361010001518360a0015161499f90919063ffffffff16565b600884018054600090613f0d9084906fffffffffffffffffffffffffffffffff16615652565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa168015801590613f895750613f856001826154a5565b8116155b9392505050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c908115613fd457600101613fbf565b925050505b92915050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761401457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60008060008060008061404c8760000151511590565b156140885750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081614593565b61413760405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff161561417c57608088015160ff16600090815260208a905260409020606089015161416991906149de565b6101808401526101c08301526101a08201525b87602001518160c00151101561449b5760c0810151885161419c91614abd565b6141b05760c081018051600101905261417c565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff1661020082018190526141f65760c081018051600101905261417c565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a908301526101808201511580159061428c5750816101e00151896080015160ff16145b6143305760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015614307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061432b9190615701565b614337565b8161018001515b825260a082015115801590614357575060c08201518951614357916145cb565b156144475761437489604001518284600001518560200151614b42565b604083018190526101008301805161438d90839061573e565b90525060808901516101e08301516143a89160ff1690614c21565b15156102408301526080820151156143fe578161024001516143ce5781608001516143d5565b816101a001515b82604001516143e4919061583f565b82610140018181516143f6919061573e565b905250614407565b60016102208301525b81610240015161441b578160a00151614422565b816101c001515b8260400151614431919061583f565b8261016001818151614443919061573e565b9052505b60c0820151895161445791614c32565b1561448a5761447489604001518284600001518560200151614cb4565b8261012001818151614486919061573e565b9052505b5060c081018051600101905261417c565b6101008101516144ac5760006144c7565b806101000151816101400151816144c5576144c56155e8565b045b6101408201526101008101516144de5760006144f9565b806101000151816101600151816144f7576144f76155e8565b045b6101608201526101208101511561453b5761453681610120015161453083610160015184610100015161464f90919063ffffffff16565b90614e34565b61455d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b60008115612710600284041904841117156145ba57600080fd5b506127109190910260028204010490565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061463d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50509051600191821b82011c16151590565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761468457600080fd5b506127109102611388010490565b60008061469e85614e6b565b1561472f5760006146cf867f5555555555555555555555555555555555555555555555555555555555555555613f90565b6000818152602086815260408083205473ffffffffffffffffffffffffffffffffffffffff16808452898352928190208151928301909152549081905291925090674000000000000000161561472c576001935091506147369050565b50505b5060009050805b935093915050565b600061477e565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156147bd57602081146147f7576147b87f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f614745565b614804565b823b6147ee576147ee7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014614745565b60019150614804565b3d6000803e600051151591505b50919050565b60008061481e64ffffffffff8416426154a5565b614828908561583f565b6301e1338090049050614847816b033b2e3c9fd0803ce800000061573e565b949350505050565b6000613f898383425b60008061486c64ffffffffff8516846154a5565b905080614888576b033b2e3c9fd0803ce8000000915050613f89565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116148be5760006148c3565b600285035b925066038882915c40006148d78a80613fdf565b816148e4576148e46155e8565b0491506301e133806148f6838b613fdf565b81614903576149036155e8565b049050600082614913868861583f565b61491d919061583f565b60029004905060008285614931888a61583f565b61493b919061583f565b614945919061583f565b60069004905080826301e1338061495c8a8f61583f565b6149669190615617565b61497c906b033b2e3c9fd0803ce800000061573e565b614986919061573e565b614990919061573e565b9b9a5050505050505050505050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156149c357600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015614aa2576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015614a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a9f9190615701565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310614b2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b5050905160019190911b1c600316151590565b600080614b4e85614ea7565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792614bfa928692911690631da24f3e90602401602060405180830381865afa158015614bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf49190615701565b90613fdf565b614c04919061583f565b9050838181614c1557614c156155e8565b04979650505050505050565b60008215801590613f895750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310614ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea91906157af565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015614d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d4e9190615701565b90508015614d6c57614d69614d6286614f2b565b8290613fdf565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015614dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e029190615701565b614e0c908261573e565b9050614e18818561583f565b9050828181614e2957614e296155e8565b049695505050505050565b60008115670de0b6b3a764000060028404190484111715614e5457600080fd5b50670de0b6b3a76400009190910260028204010490565b80516000907f5555555555555555555555555555555555555555555555555555555555555555168015801590613f895750613f856001826154a5565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415614eed575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154613f89906fffffffffffffffffffffffffffffffff80821691614bf491700100000000000000000000000000000000909104168461480a565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415614f71575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154613f89906fffffffffffffffffffffffffffffffff80821691614bf491700100000000000000000000000000000000909104168461484f565b60405180610280016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016150336040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610180810167ffffffffffffffff811182821017156150a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff811681146150d157600080fd5b919050565b8035600381106150d157600080fd5b803561ffff811681146150d157600080fd5b801515811461510557600080fd5b50565b80356150d1816150f7565b803560ff811681146150d157600080fd5b600080600080600085870361020081121561513e57600080fd5b86359550602087013594506040870135935060608701359250610180807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301121561518957600080fd5b61519161505c565b915061519f608089016150ad565b82526151ad60a089016150ad565b60208301526151be60c089016150ad565b604083015260e088013560608301526101006151db818a016150d6565b60808401526101206151ee818b016150e5565b60a0850152610140615201818c01615108565b60c0860152610160808c013560e0870152848c0135848701526152276101a08d016150ad565b838701526152386101c08d01615113565b828701526152496101e08d016150ad565b818701525050505050809150509295509295909350565b60008060008084860361010081121561527857600080fd5b85359450602086013593506040860135925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0820112156152ba57600080fd5b5060405160a0810181811067ffffffffffffffff82111715615305577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052615314606087016150ad565b81526080860135602082015261532c60a087016150d6565b604082015261533d60c087016150ad565b606082015260e0860135615350816150f7565b6080820152939692955090935050565b60008060006060848603121561537557600080fd5b83359250615385602085016150ad565b9150615393604085016150ad565b90509250925092565b600080600080608085870312156153b257600080fd5b84359350602085013592506153c9604086016150ad565b91506153d7606086016150d6565b905092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008060006060848603121561542657600080fd5b8351615431816150f7565b602085015160409095015190969495509392505050565b6000806040838503121561545b57600080fd5b8251615466816150f7565b6020939093015192949293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156154b7576154b7615476565b500390565b600181815b8085111561551557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156154fb576154fb615476565b8085161561550857918102915b93841c93908002906154c1565b509250929050565b60008261552c57506001613fd9565b8161553957506000613fd9565b816001811461554f576002811461555957615575565b6001915050613fd9565b60ff84111561556a5761556a615476565b50506001821b613fd9565b5060208310610133831016604e8410600b8410161715615598575081810a613fd9565b6155a283836154bc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156155d4576155d4615476565b029392505050565b6000613f89838361551d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261564d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561567d5761567d615476565b01949350505050565b600381106156bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff8516815260208101849052608081016156f26040830185615686565b82606083015295945050505050565b60006020828403121561571357600080fd5b5051919050565b6000806040838503121561572d57600080fd5b505080516020909101519092909150565b6000821982111561575157615751615476565b500190565b60208101613fd98284615686565b6000806000806080858703121561577a57600080fd5b845193506020850151925060408501519150606085015164ffffffffff811681146157a457600080fd5b939692955090935050565b600060208083528351808285015260005b818110156157dc578581018301518582016040015282016157c0565b818111156157ee576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561583457600080fd5b8151613f89816150f7565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561587757615877615476565b500290565b60008060006060848603121561589157600080fd5b8351925060208401519150604084015190509250925092565b60006fffffffffffffffffffffffffffffffff838116908316818110156158d3576158d3615476565b03939250505056fea2646970667358221220a3d4fdb496f81003e5208f37b798bc2b09a2ff3ba728c227e902aac4c0fc188564736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1E6473F9 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x40E95DE6 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x6973F744 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xEAC4D703 EQ PUSH2 0xCF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x5124 JUMP JUMPDEST PUSH2 0xEF JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9D PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x5260 JUMP JUMPDEST PUSH2 0x773 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x5360 JUMP JUMPDEST PUSH2 0xCD9 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xEA CALLDATASIZE PUSH1 0x4 PUSH2 0x539C JUMP JUMPDEST PUSH2 0xF6D JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x11F DUP3 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0x12B DUP3 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x14C SWAP1 DUP12 DUP12 PUSH2 0x15C1 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x27C DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E5 JUMPI PUSH2 0x1E5 PUSH2 0x53E2 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x100 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x140 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE POP PUSH2 0x1679 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 DUP9 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x297 JUMPI PUSH2 0x297 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x386 JUMPI PUSH1 0x3 DUP8 ADD SLOAD PUSH2 0x200 DUP8 ADD MLOAD PUSH1 0x20 DUP11 ADD MLOAD PUSH1 0x40 DUP1 DUP13 ADD MLOAD PUSH1 0x60 DUP14 ADD MLOAD SWAP2 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x64 DUP5 ADD DUP2 SWAP1 MSTORE SWAP5 POP AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x351 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x375 SWAP2 SWAP1 PUSH2 0x5411 JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE SWAP1 POP PUSH2 0x44F JUMP JUMPDEST PUSH2 0x220 DUP7 ADD MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x40 DUP1 DUP12 ADD MLOAD PUSH1 0x60 DUP13 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD SWAP3 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x423 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x447 SWAP2 SWAP1 PUSH2 0x5448 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MSTORE SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x484 JUMPI PUSH1 0x3 DUP8 ADD SLOAD PUSH2 0x484 SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x27A4 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x5AF JUMPI PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x4CA SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x4B6 SWAP1 PUSH1 0xA PUSH2 0x55DC JUMP JUMPDEST DUP11 PUSH1 0x60 ADD MLOAD PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x5617 JUMP JUMPDEST PUSH2 0x2839 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP16 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x514 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5652 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 DUP3 PUSH1 0x40 MLOAD PUSH2 0x5A5 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST PUSH2 0x5DA DUP7 DUP10 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP12 PUSH1 0xC0 ADD MLOAD PUSH2 0x5CA JUMPI PUSH1 0x0 PUSH2 0x5D0 JUMP JUMPDEST DUP12 PUSH1 0x60 ADD MLOAD JUMPDEST DUP12 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x28DF JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD MLOAD ISZERO PUSH2 0x67E JUMPI PUSH2 0x1E0 DUP7 ADD MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x60 DUP11 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x4EFECAA5 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x665 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x679 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP8 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP9 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB3D084820FB1A9DECFFB176436BD02558D15FAC9B0DDFED8C465BC7359D7DCE0 DUP12 PUSH1 0x20 ADD MLOAD DUP13 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x700 JUMPI PUSH2 0x700 PUSH2 0x53E2 JUMP JUMPDEST DUP16 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x716 JUMPI PUSH2 0x716 PUSH2 0x53E2 JUMP JUMPDEST EQ PUSH2 0x74B JUMPI PUSH1 0x2 DUP15 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x74D JUMP JUMPDEST DUP9 JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x75D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x56C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x7A3 DUP3 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0x7AF DUP3 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x7C0 DUP7 PUSH1 0x60 ADD MLOAD DUP5 PUSH2 0x2C20 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x7DE DUP4 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP10 PUSH1 0x60 ADD MLOAD DUP7 DUP7 PUSH2 0x2D5D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x7F8 JUMPI PUSH2 0x7F8 PUSH2 0x53E2 JUMP JUMPDEST EQ PUSH2 0x803 JUMPI DUP2 PUSH2 0x805 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP DUP7 PUSH1 0x80 ADD MLOAD DUP1 ISZERO PUSH2 0x83B JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH1 0x20 ADD MLOAD EQ JUMPDEST ISZERO PUSH2 0x8DB JUMPI PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8D5 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MSTORE JUMPDEST DUP1 DUP8 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x8EE JUMPI POP PUSH1 0x20 DUP7 ADD MLOAD JUMPDEST PUSH1 0x1 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x906 JUMPI PUSH2 0x906 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x9BE JUMPI PUSH2 0x200 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x98B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AF SWAP2 SWAP1 PUSH2 0x571A JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0xA76 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x140 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA70 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE JUMPDEST PUSH2 0xA9C DUP5 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0xA8E JUMPI DUP4 PUSH2 0xA91 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP9 SWAP3 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x28DF JUMP JUMPDEST DUP1 PUSH2 0xAA7 DUP4 DUP6 PUSH2 0x573E JUMP JUMPDEST PUSH2 0xAB1 SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0xAE4 JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0xAE4 SWAP1 DUP10 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x27A4 JUMP JUMPDEST PUSH2 0xAF1 DUP11 DUP11 DUP11 DUP8 DUP6 PUSH2 0x3075 JUMP JUMPDEST DUP7 PUSH1 0x80 ADD MLOAD ISZERO PUSH2 0xBA2 JUMPI PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x64 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xC69 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD DUP8 MLOAD PUSH2 0xBCF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 CALLER SWAP1 DUP5 PUSH2 0x3277 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP8 MLOAD PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE CALLER SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP4 AND SWAP2 PUSH32 0xA534C8DBE71F871F9F3530E97A74601FEA17B426CAE02E1C5AEE42C96C784051 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE4 DUP5 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0xCF0 DUP5 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH2 0xCFB DUP5 DUP3 DUP6 PUSH2 0x3352 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD95 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 DUP4 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE31 SWAP2 SWAP1 PUSH2 0x571A JUMP JUMPDEST POP POP PUSH1 0x3 DUP7 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xECE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEF2 SWAP2 SWAP1 PUSH2 0x5411 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE POP PUSH2 0xF0B DUP7 DUP5 DUP8 PUSH1 0x0 DUP1 PUSH2 0x28DF JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9F439AE0C81E41A04D3FDFE07AED54E6A179FB0DB15BE7702EB66FA8EF6F5300 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF78 DUP6 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0xF84 DUP6 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF91 CALLER DUP5 PUSH2 0x2C20 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xFA3 DUP8 DUP5 DUP9 DUP6 DUP6 DUP10 PUSH2 0x37A8 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xFB7 JUMPI PUSH2 0xFB7 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x1121 JUMPI PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1036 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x105A SWAP2 SWAP1 PUSH2 0x571A JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x220 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1116 SWAP2 SWAP1 PUSH2 0x5448 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE POP PUSH2 0x12A1 JUMP JUMPDEST PUSH2 0x220 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11CD SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x3 DUP9 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1271 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1295 SWAP2 SWAP1 PUSH2 0x5411 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE POP JUMPDEST PUSH2 0x12AF DUP8 DUP5 DUP8 PUSH1 0x0 DUP1 PUSH2 0x28DF JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7962B394D85A534033BA2EFCF43CD36DE57B7EBEB3DE0CA4428965D9B3DDC481 DUP7 PUSH1 0x40 MLOAD PUSH2 0x130C SWAP2 SWAP1 PUSH2 0x5756 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1325 PUSH2 0x4FAF JUMP JUMPDEST PUSH2 0x132D PUSH2 0x4FAF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x145A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x147E SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1503 SWAP2 SWAP1 PUSH2 0x5764 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x1565 JUMPI POP POP JUMP JUMPDEST PUSH2 0x156F DUP3 DUP3 PUSH2 0x3CA8 JUMP JUMPDEST PUSH2 0x1579 DUP3 DUP3 PUSH2 0x3DC9 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x15CF DUP7 PUSH2 0x3F49 JUMP JUMPDEST ISZERO PUSH2 0x1666 JUMPI PUSH1 0x0 PUSH2 0x1600 DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x3F90 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1662 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x1670 SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x16F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x17C8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x1C0 SWAP1 DUP2 ADD MLOAD MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x200 DUP5 ADD MSTORE PUSH8 0x800000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x240 DUP5 ADD MSTORE PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x220 DUP5 ADD MSTORE PUSH8 0x200000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x1E0 DUP5 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP1 PUSH2 0x200 ADD MLOAD ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1912 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP1 PUSH2 0x1E0 ADD MLOAD ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1988 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP1 PUSH2 0x220 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x19FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH2 0x140 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO DUP1 PUSH2 0x1A95 JUMPI POP DUP2 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x49AA2E81 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A95 SWAP2 SWAP1 PUSH2 0x5822 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1B03 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x2 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1B1C JUMPI PUSH2 0x1B1C PUSH2 0x53E2 JUMP JUMPDEST EQ DUP1 PUSH2 0x1B3D JUMPI POP PUSH1 0x1 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1B3B JUMPI PUSH2 0x1B3B PUSH2 0x53E2 JUMP JUMPDEST EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1BAB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x100 DUP3 ADD MSTORE DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x120 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH1 0xA EXP PUSH2 0x160 DUP4 ADD MSTORE ISZERO PUSH2 0x1CAE JUMPI DUP2 MLOAD PUSH2 0x140 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x1C01 SWAP2 PUSH2 0x3FDF JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP1 DUP5 ADD MLOAD DUP5 MLOAD SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 PUSH2 0x1C1F SWAP2 PUSH2 0x573E JUMP JUMPDEST PUSH2 0x1C29 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3530000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 MUL LT ISZERO PUSH2 0x1CAC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP JUMPDEST DUP2 PUSH2 0x160 ADD MLOAD ISZERO PUSH2 0x1E3F JUMPI DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x2000000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3630000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1D3B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP2 PUSH2 0x1A0 ADD MLOAD PUSH2 0x1D71 PUSH1 0x2 DUP4 PUSH2 0x100 ADD MLOAD PUSH2 0x1D57 SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x1D62 SWAP1 PUSH1 0xA PUSH2 0x55DC JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x5617 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1DBB SWAP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5652 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3533000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1E3D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1F17 JUMPI PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0xFF SWAP2 DUP3 AND SWAP2 PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHR AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1ED7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x180 DUP3 ADD MSTORE JUMPDEST PUSH2 0x1F8E DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH2 0x120 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x4036 JUMP JUMPDEST POP PUSH1 0xA0 DUP7 ADD MSTORE POP DUP4 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3334000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x200E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x207D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP2 PUSH1 0xA0 ADD MLOAD GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x20FB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP2 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB3596F07 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH2 0x180 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2166 JUMPI DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x216D JUMP JUMPDEST DUP4 PUSH2 0x180 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21FA SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x2204 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x140 DUP3 ADD DUP2 DUP2 MSTORE PUSH2 0x160 DUP4 ADD MLOAD SWAP2 DUP3 SWAP1 DUP2 PUSH2 0x2222 JUMPI PUSH2 0x2222 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP1 MSTORE POP DUP1 MLOAD PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x2247 SWAP3 SWAP2 PUSH2 0x2241 SWAP2 PUSH2 0x573E JUMP JUMPDEST SWAP1 PUSH2 0x45A0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP5 ADD MLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH32 0x3336000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 GT ISZERO PUSH2 0x22C3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x1 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x22DC JUMPI PUSH2 0x22DC PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x260A JUMPI DUP1 PUSH2 0x240 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2356 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP3 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE SWAP2 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD SWAP1 DUP4 ADD MLOAD PUSH2 0x23AE SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x45CB JUMP JUMPDEST ISZERO DUP1 PUSH2 0x23C3 JUMPI POP DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST DUP1 PUSH2 0x246C JUMPI POP DUP2 MLOAD PUSH2 0x1E0 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2441 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2465 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST DUP3 PUSH1 0x80 ADD MLOAD GT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x24DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP3 DUP2 ADD MLOAD DUP4 MLOAD PUSH2 0x1E0 ADD MLOAD SWAP2 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2577 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x0 SWAP2 PUSH2 0x258F SWAP2 PUSH2 0x464F JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH1 0x80 ADD MLOAD GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3338000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2607 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD MLOAD PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO PUSH2 0x279D JUMPI PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x2647 SWAP1 DUP7 DUP7 PUSH2 0x4692 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1A0 DUP4 ADD MSTORE ISZERO DUP1 ISZERO PUSH2 0x260 DUP4 ADD MSTORE PUSH2 0x271C JUMPI DUP2 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH2 0x1A0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2716 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH2 0x279D JUMP JUMPDEST DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH8 0x4000000000000000 AND ISZERO PUSH2 0x279B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x2813 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL SHL DUP2 ISZERO PUSH2 0x282B JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x2833 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x28DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x16EA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x290A PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x291E SWAP2 PUSH2 0x3FDF JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x2A7F SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A9C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2AC0 SWAP2 SWAP1 PUSH2 0x587C JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x2AD6 SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2B19 SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x2B6A SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C97 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CBB SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D52 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP6 PUSH2 0x2DC9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 EQ ISZERO DUP1 PUSH2 0x2E0E JUMPI POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3430000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2E7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x2ED1 DUP9 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2F47 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x2FB5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP DUP4 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FD6 JUMPI POP PUSH1 0x1 DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2FD4 JUMPI PUSH2 0x2FD4 PUSH2 0x53E2 JUMP JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x2FFC JUMPI POP DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FFC JUMPI POP PUSH1 0x2 DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2FFA JUMPI PUSH2 0x2FFA PUSH2 0x53E2 JUMP JUMPDEST EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3339000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x306A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x3094 SWAP1 DUP9 DUP9 PUSH2 0x15C1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x326E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 PUSH2 0x3111 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x30FC SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x3107 SWAP1 PUSH1 0xA PUSH2 0x55DC JUMP JUMPDEST PUSH2 0x4C5 SWAP1 DUP8 PUSH2 0x5617 JUMP JUMPDEST SWAP1 POP DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT PUSH2 0x31C1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x306A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31CD DUP3 DUP5 PUSH2 0x58AA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP14 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 DUP6 OR SWAP1 SSTORE SWAP1 MLOAD DUP4 DUP2 MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x32E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x32EC DUP6 PUSH2 0x473E JUMP JUMPDEST PUSH2 0x279D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x16EA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x33A6 DUP5 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x341C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x348A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x0 DUP5 PUSH2 0x220 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3501 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST DUP6 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3551 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3575 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x357F SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST PUSH1 0x7 DUP8 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP11 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE DUP2 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP11 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1E0 DUP12 ADD MLOAD DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE SWAP3 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 SWAP6 POP SWAP4 SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x36D5 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3716 SWAP2 SWAP1 PUSH2 0x587C JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0x3728 SWAP1 POP DUP2 PUSH2 0x2328 PUSH2 0x464F JUMP JUMPDEST DUP7 PUSH2 0x160 ADD MLOAD GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3434000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x379E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x37FF DUP10 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP SWAP4 POP SWAP4 POP DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3877 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x38E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP4 ISZERO PUSH2 0x3953 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x1 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3968 JUMPI PUSH2 0x3968 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x39E0 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3431000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP8 PUSH2 0x39DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH2 0x3C9C JUMP JUMPDEST PUSH1 0x2 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x39F4 JUMPI PUSH2 0x39F4 PUSH2 0x53E2 JUMP JUMPDEST EQ ISZERO PUSH2 0x3C37 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3432000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP7 PUSH2 0x3A66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH2 0x3AD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP PUSH1 0x3 DUP11 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP10 SLOAD DUP2 MSTORE PUSH2 0x3B0E SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x45CB JUMP JUMPDEST ISZERO DUP1 PUSH2 0x3B22 JUMPI POP PUSH2 0x1C0 DUP10 ADD MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST DUP1 PUSH2 0x3BC9 JUMPI POP PUSH2 0x1E0 DUP10 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BBD SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x3BC7 DUP8 DUP10 PUSH2 0x573E JUMP JUMPDEST GT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x39DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH2 0x16EA SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x57AF JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x3D38 JUMPI PUSH1 0x0 PUSH2 0x3CC9 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x480A JUMP JUMPDEST SWAP1 POP PUSH2 0x3CE2 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x3FDF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x3CF3 SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3DC5 JUMPI PUSH1 0x0 PUSH2 0x3D55 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x484F JUMP JUMPDEST SWAP1 POP PUSH2 0x3D6F DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x3FDF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x3D80 SWAP1 PUSH2 0x2839 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3E02 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x3E11 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x3E22 SWAP2 PUSH2 0x3FDF JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x3E38 SWAP2 PUSH2 0x3FDF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x3E60 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x4858 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3E75 SWAP2 PUSH2 0x3FDF JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x3E91 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST PUSH2 0x3E9B SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x3EA5 SWAP2 SWAP1 PUSH2 0x54A5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x3EBC SWAP2 SWAP1 PUSH2 0x464F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x3F44 JUMPI PUSH2 0x3EE7 PUSH2 0x4C5 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x499F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x3F0D SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5652 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F89 JUMPI POP PUSH2 0x3F85 PUSH1 0x1 DUP3 PUSH2 0x54A5 JUMP JUMPDEST DUP2 AND ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x3FD4 JUMPI PUSH1 0x1 ADD PUSH2 0x3FBF JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4014 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x404C DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x4088 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x4593 JUMP JUMPDEST PUSH2 0x4137 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x417C JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x4169 SWAP2 SWAP1 PUSH2 0x49DE JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x449B JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x419C SWAP2 PUSH2 0x4ABD JUMP JUMPDEST PUSH2 0x41B0 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x417C JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x41F6 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x417C JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x428C JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x4330 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4307 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x432B SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x4337 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x4357 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x4357 SWAP2 PUSH2 0x45CB JUMP JUMPDEST ISZERO PUSH2 0x4447 JUMPI PUSH2 0x4374 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x4B42 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x438D SWAP1 DUP4 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x43A8 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x4C21 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x43FE JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x43CE JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x43D5 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x43E4 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x43F6 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x4407 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x441B JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x4422 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x4431 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x4443 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x4457 SWAP2 PUSH2 0x4C32 JUMP JUMPDEST ISZERO PUSH2 0x448A JUMPI PUSH2 0x4474 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x4CB4 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x4486 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x417C JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x44AC JUMPI PUSH1 0x0 PUSH2 0x44C7 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x44C5 JUMPI PUSH2 0x44C5 PUSH2 0x55E8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x44DE JUMPI PUSH1 0x0 PUSH2 0x44F9 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x44F7 JUMPI PUSH2 0x44F7 PUSH2 0x55E8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x453B JUMPI PUSH2 0x4536 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x4530 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x464F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x4E34 JUMP JUMPDEST PUSH2 0x455D JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x2710 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x45BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x463D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x469E DUP6 PUSH2 0x4E6B JUMP JUMPDEST ISZERO PUSH2 0x472F JUMPI PUSH1 0x0 PUSH2 0x46CF DUP7 PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 PUSH2 0x3F90 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP10 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH8 0x4000000000000000 AND ISZERO PUSH2 0x472C JUMPI PUSH1 0x1 SWAP4 POP SWAP2 POP PUSH2 0x4736 SWAP1 POP JUMP JUMPDEST POP POP JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x477E JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x47BD JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x47F7 JUMPI PUSH2 0x47B8 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x4745 JUMP JUMPDEST PUSH2 0x4804 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x47EE JUMPI PUSH2 0x47EE PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x4745 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x4804 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x481E PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x54A5 JUMP JUMPDEST PUSH2 0x4828 SWAP1 DUP6 PUSH2 0x583F JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x4847 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x573E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F89 DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x486C PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x54A5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x4888 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x3F89 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x48BE JUMPI PUSH1 0x0 PUSH2 0x48C3 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x48D7 DUP11 DUP1 PUSH2 0x3FDF JUMP JUMPDEST DUP2 PUSH2 0x48E4 JUMPI PUSH2 0x48E4 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x48F6 DUP4 DUP12 PUSH2 0x3FDF JUMP JUMPDEST DUP2 PUSH2 0x4903 JUMPI PUSH2 0x4903 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x4913 DUP7 DUP9 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x491D SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x4931 DUP9 DUP11 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x493B SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x4945 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x495C DUP11 DUP16 PUSH2 0x583F JUMP JUMPDEST PUSH2 0x4966 SWAP2 SWAP1 PUSH2 0x5617 JUMP JUMPDEST PUSH2 0x497C SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x573E JUMP JUMPDEST PUSH2 0x4986 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST PUSH2 0x4990 SWAP2 SWAP1 PUSH2 0x573E JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x49C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x4AA2 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A7B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A9F SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x4B2F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4B4E DUP6 PUSH2 0x4EA7 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x4BFA SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4BD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4BF4 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST SWAP1 PUSH2 0x3FDF JUMP JUMPDEST PUSH2 0x4C04 SWAP2 SWAP1 PUSH2 0x583F JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x4C15 JUMPI PUSH2 0x4C15 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F89 JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x4CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16EA SWAP2 SWAP1 PUSH2 0x57AF JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4D2A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4D4E SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x4D6C JUMPI PUSH2 0x4D69 PUSH2 0x4D62 DUP7 PUSH2 0x4F2B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x3FDF JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4DDE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4E02 SWAP2 SWAP1 PUSH2 0x5701 JUMP JUMPDEST PUSH2 0x4E0C SWAP1 DUP3 PUSH2 0x573E JUMP JUMPDEST SWAP1 POP PUSH2 0x4E18 DUP2 DUP6 PUSH2 0x583F JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x4E29 JUMPI PUSH2 0x4E29 PUSH2 0x55E8 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x4E54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F89 JUMPI POP PUSH2 0x3F85 PUSH1 0x1 DUP3 PUSH2 0x54A5 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x4EED JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x3F89 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x4BF4 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x480A JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x4F71 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x3F89 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x4BF4 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x484F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x5033 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x180 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x50A7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x50D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x50D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x50D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x50D1 DUP2 PUSH2 0x50F7 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x50D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x200 DUP2 SLT ISZERO PUSH2 0x513E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x180 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x5189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5191 PUSH2 0x505C JUMP JUMPDEST SWAP2 POP PUSH2 0x519F PUSH1 0x80 DUP10 ADD PUSH2 0x50AD JUMP JUMPDEST DUP3 MSTORE PUSH2 0x51AD PUSH1 0xA0 DUP10 ADD PUSH2 0x50AD JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x51BE PUSH1 0xC0 DUP10 ADD PUSH2 0x50AD JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x51DB DUP2 DUP11 ADD PUSH2 0x50D6 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x120 PUSH2 0x51EE DUP2 DUP12 ADD PUSH2 0x50E5 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x140 PUSH2 0x5201 DUP2 DUP13 ADD PUSH2 0x5108 JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x160 DUP1 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP8 ADD MSTORE DUP5 DUP13 ADD CALLDATALOAD DUP5 DUP8 ADD MSTORE PUSH2 0x5227 PUSH2 0x1A0 DUP14 ADD PUSH2 0x50AD JUMP JUMPDEST DUP4 DUP8 ADD MSTORE PUSH2 0x5238 PUSH2 0x1C0 DUP14 ADD PUSH2 0x5113 JUMP JUMPDEST DUP3 DUP8 ADD MSTORE PUSH2 0x5249 PUSH2 0x1E0 DUP14 ADD PUSH2 0x50AD JUMP JUMPDEST DUP2 DUP8 ADD MSTORE POP POP POP POP POP DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x5278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP3 ADD SLT ISZERO PUSH2 0x52BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x5305 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x5314 PUSH1 0x60 DUP8 ADD PUSH2 0x50AD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x532C PUSH1 0xA0 DUP8 ADD PUSH2 0x50D6 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x533D PUSH1 0xC0 DUP8 ADD PUSH2 0x50AD JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xE0 DUP7 ADD CALLDATALOAD PUSH2 0x5350 DUP2 PUSH2 0x50F7 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x5385 PUSH1 0x20 DUP6 ADD PUSH2 0x50AD JUMP JUMPDEST SWAP2 POP PUSH2 0x5393 PUSH1 0x40 DUP6 ADD PUSH2 0x50AD JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x53B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x53C9 PUSH1 0x40 DUP7 ADD PUSH2 0x50AD JUMP JUMPDEST SWAP2 POP PUSH2 0x53D7 PUSH1 0x60 DUP7 ADD PUSH2 0x50D6 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x5431 DUP2 PUSH2 0x50F7 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x545B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5466 DUP2 PUSH2 0x50F7 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x54B7 JUMPI PUSH2 0x54B7 PUSH2 0x5476 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x5515 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x54FB JUMPI PUSH2 0x54FB PUSH2 0x5476 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x5508 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x54C1 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x552C JUMPI POP PUSH1 0x1 PUSH2 0x3FD9 JUMP JUMPDEST DUP2 PUSH2 0x5539 JUMPI POP PUSH1 0x0 PUSH2 0x3FD9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x554F JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x5559 JUMPI PUSH2 0x5575 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x3FD9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x556A JUMPI PUSH2 0x556A PUSH2 0x5476 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x3FD9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x5598 JUMPI POP DUP2 DUP2 EXP PUSH2 0x3FD9 JUMP JUMPDEST PUSH2 0x55A2 DUP4 DUP4 PUSH2 0x54BC JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x55D4 JUMPI PUSH2 0x55D4 PUSH2 0x5476 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F89 DUP4 DUP4 PUSH2 0x551D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x564D JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x567D JUMPI PUSH2 0x567D PUSH2 0x5476 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x56BD JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x56F2 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5686 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5713 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x572D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5751 JUMPI PUSH2 0x5751 PUSH2 0x5476 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3FD9 DUP3 DUP5 PUSH2 0x5686 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x577A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x57A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x57DC JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x57C0 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x57EE JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3F89 DUP2 PUSH2 0x50F7 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5877 JUMPI PUSH2 0x5877 PUSH2 0x5476 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x58D3 JUMPI PUSH2 0x58D3 PUSH2 0x5476 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 0xD4 REVERT 0xB4 SWAP7 0xF8 LT SUB 0xE5 KECCAK256 DUP16 CALLDATACOPY 0xB7 SWAP9 0xBC 0x2B MULMOD LOG2 SELFDESTRUCT EXTCODESIZE 0xA7 0x28 0xC2 0x27 0xE9 MUL 0xAA 0xC4 0xC0 0xFC XOR DUP6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1076:11976:92:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2781:3383;;;;;;;;;;-1:-1:-1;2781:3383:92;;;;;:::i;:::-;;:::i;:::-;;6819:2688;;;;;;;;;;-1:-1:-1;6819:2688:92;;;;;:::i;:::-;;:::i;:::-;;;4724:25:124;;;4712:2;4697:18;6819:2688:92;;;;;;;10119:825;;;;;;;;;;-1:-1:-1;10119:825:92;;;;;:::i;:::-;;:::i;11423:1627::-;;;;;;;;;;-1:-1:-1;11423:1627:92;;;;;:::i;:::-;;:::i;2781:3383::-;3171:12;;3158:26;;3118:37;3158:26;;;;;;;;;;;3235:15;3158:26;3235:13;:15::i;:::-;3190:60;-1:-1:-1;3257:33:92;:7;3190:60;3257:19;:33::i;:::-;3424:32;;;;;;;;;;;;;3305:24;;;;;;3424:60;;3457:12;3471;3424:32;:60::i;:::-;3297:187;;;;;;3491:803;3529:12;3549;3569:15;3592:696;;;;;;;;3647:12;3592:696;;;;3681:10;3592:696;;;;;;;;;;;;;;;;;;;;;3708:6;:12;;;3592:696;;;;;;3743:6;:17;;;3592:696;;;;;;3778:6;:13;;;3592:696;;;;3819:6;:23;;;3592:696;;;;;;;;:::i;:::-;;;;;3874:6;:37;;;3592:696;;;;3936:6;:20;;;3592:696;;;;3974:6;:13;;;3592:696;;;;;;4016:6;:24;;;3592:696;;;;;;4071:6;:26;;;3592:696;;;;;;4128:19;3592:696;;;;;;4189:30;3592:696;;;;;;4255:24;3592:696;;;3491:30;:803::i;:::-;4301:25;;4403:33;4376:6;:23;;;:60;;;;;;;;:::i;:::-;;4372:672;;;4466:31;;;;4648:35;;;;4699:11;;;;4720:17;;;;;4747:13;;;;4631:164;;;;;:58;6132:15:124;;;4631:164:92;;;6114:34:124;6184:15;;;6164:18;;;6157:43;6216:18;;;6209:34;;;;4466:31:92;;;;6259:18:124;;;6252:34;;;4466:31:92;-1:-1:-1;4631:58:92;;;;6025:19:124;;4631:164:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4584:36;;;4506:289;4542:32;;;4506:289;;-1:-1:-1;4372:672:92;;;4902:37;;;;4953:11;;;;4966:17;;;;;4985:13;;;;5000:36;;;;4874:163;;;;;:78;6132:15:124;;;4874:163:92;;;6114:34:124;6184:15;;;6164:18;;;6157:43;6216:18;;;6209:34;6259:18;;;6252:34;;;;4874:78:92;;;;;6025:19:124;;4874:163:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4835:35;;;4816:221;;-1:-1:-1;4372:672:92;5054:16;5050:78;;;5104:10;;;;5080:41;;:10;;5104;;;;;5116:4;5080:23;:41::i;:::-;5138:19;5134:443;;;5326:33;;;;8368:9:88;5167:34:92;;5284:160;;5235:1:88;;3439:2;8367:67;;;5326:104:92;;;;:::i;:::-;5309:122;;:2;:122;:::i;:::-;5285:6;:13;;;:146;;;;:::i;:::-;5284:158;:160::i;:::-;5204:44;;;;;;;;;;;;;;:76;;:240;;:76;;:44;:240;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;5167:277;;;;5496:30;5457:113;;;5536:26;5457:113;;;;4724:25:124;;4712:2;4697:18;;4570:185;5457:113:92;;;;;;;;5159:418;5134:443;5583:134;5618:12;5638:6;:12;;;5658:1;5667:6;:24;;;:44;;5710:1;5667:44;;;5694:6;:13;;;5667:44;5583:7;;:134;;;:27;:134::i;:::-;5728:6;:24;;;5724:129;;;5770:26;;;;5819:11;;;;5832:13;;;;5762:84;;;;;:56;9893:55:124;;;5762:84:92;;;9875:74:124;9965:18;;;9958:34;;;;5762:56:92;;;;;9848:18:124;;5762:84:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5724:129;6134:6;:19;;;5864:295;;5917:6;:17;;;5864:295;;5878:6;:12;;;5864:295;;;5898:6;:11;;;5942:6;:13;;;5963:6;:23;;;6021:33;5994:60;;;;;;;;:::i;:::-;:6;:23;;;:60;;;;;;;;:::i;:::-;;:132;;6093:33;;;;;;;;;5994:132;;;6065:17;5994:132;5864:295;;;;;;;;;:::i;:::-;;;;;;;;3112:3052;;;;;;;2781:3383;;;;;:::o;6819:2688::-;7156:12;;7143:26;;7088:7;7143:26;;;;;;;;;;7088:7;7220:15;7143:26;7220:13;:15::i;:::-;7175:60;-1:-1:-1;7241:33:92;:7;7175:60;7241:19;:33::i;:::-;7282:18;7302:20;7326:77;7360:6;:17;;;7385:12;7326:26;:77::i;:::-;7281:122;;;;7410:170;7447:12;7467:6;:13;;;7488:6;:23;;;7519:6;:17;;;7544:10;7562:12;7410:29;:170::i;:::-;7587:21;7638:33;7611:6;:23;;;:60;;;;;;;;:::i;:::-;;:100;;7699:12;7611:100;;;7680:10;7611:100;7587:124;;7801:6;:17;;;:55;;;;;7839:17;7822:6;:13;;;:34;7801:55;7797:149;;;7890:26;;;;7882:57;;;;;7928:10;7882:57;;;10946:74:124;7882:45:92;;;;;;;10919:18:124;;7882:57:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7866:13;;;:73;7797:149;7972:13;7956:6;:13;;;:29;7952:79;;;-1:-1:-1;8011:13:92;;;;7952:79;8068:33;8041:6;:23;;;:60;;;;;;;;:::i;:::-;;8037:473;;;8212:35;;;;8261:17;;;;8186:108;;;;;:74;9893:55:124;;;8186:108:92;;;9875:74:124;9965:18;;;9958:34;;;8186:74:92;;;;;9848:18:124;;8186:108:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8146:36;;;8111:183;8112:32;;;8111:183;8037:473;;;8381:37;;;;8432:17;;;;8466:36;;;;8353:150;;;;;:78;11690:55:124;;;8353:150:92;;;11672:74:124;11762:18;;;11755:34;;;11805:18;;;11798:34;;;;8353:78:92;;;;;11645:18:124;;8353:150:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8315:35;;;:188;8037:473;8516:127;8551:12;8571:6;:12;;;8591:6;:17;;;:37;;8615:13;8591:37;;;8611:1;8591:37;8516:7;;:127;;8636:1;8516:27;:127::i;:::-;8682:13;8654:25;8667:12;8654:10;:25;:::i;:::-;:41;;;;:::i;:::-;8650:109;;8734:10;;;;8710:42;;:10;;8734;;;;;8746:5;8710:23;:42::i;:::-;8765:152;8820:12;8840;8860:10;8878:12;8898:13;8765:47;:152::i;:::-;8928:6;:17;;;8924:456;;;8963:26;;;;9084:31;;;;8955:168;;;;;9005:10;8955:168;;;6114:34:124;8955:40:92;;;;6164:18:124;;;6157:43;;;6216:18;;;6209:34;;;6259:18;;;6252:34;;;;8955:40:92;;;6025:19:124;;8955:168:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8924:456;;;9194:26;;;;9151:12;;9144:92;;:37;;;;;9182:10;;9222:13;9144:37;:92::i;:::-;9252:26;;;;9325:17;;;;9244:129;;;;;9305:10;9244:129;;;12239:34:124;9244:51:92;12309:15:124;;;12289:18;;;12282:43;12341:18;;;12334:34;;;9244:51:92;;;;;12151:18:124;;9244:129:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8924:456;9411:17;;;;9397:12;;9457:17;;;;9391:84;;;12547:25:124;;;12615:14;;12608:22;12603:2;12588:18;;12581:50;9430:10:92;;9391:84;;;;;;;;;12520:18:124;9391:84:92;;;;;;;9489:13;6819:2688;-1:-1:-1;;;;;;;;;6819:2688:92:o;10119:825::-;10260:42;10305:15;:7;:13;:15::i;:::-;10260:60;-1:-1:-1;10326:33:92;:7;10260:60;10326:19;:33::i;:::-;10366:79;10416:7;10425:12;10439:5;10366:49;:79::i;:::-;10504:35;;;;10567:48;;;;;:42;10964:55:124;;;10567:48:92;;;10946:74:124;10452:32:92;;10567:42;;;;;;10919:18:124;;10567:48:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10622:38;;;;;:20;9893:55:124;;;10622:38:92;;;9875:74:124;9965:18;;;9958:34;;;10546:69:92;;-1:-1:-1;10622:20:92;;;;;;9848:18:124;;10622:38:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;10796:31:92;;;;10744:84;;;;;:27;12952:15:124;;;10744:84:92;;;12934:34:124;;;12984:18;;;12977:43;13036:18;;;13029:34;;;10796:31:92;;;;13079:18:124;;;13072:75;10744:27:92;;;;;;12845:19:124;;10744:84:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10704:36;;;10667:161;10670:32;;;10667:161;-1:-1:-1;10835:54:92;:7;10670:12;10877:5;-1:-1:-1;;10835:27:92;:54::i;:::-;10934:4;10901:38;;10927:5;10901:38;;;;;;;;;;;;10254:690;;;10119:825;;;:::o;11423:1627::-;11643:42;11688:15;:7;:13;:15::i;:::-;11643:60;-1:-1:-1;11710:33:92;:7;11643:60;11710:19;:33::i;:::-;11751:18;11771:20;11795:70;11829:10;11847:12;11795:26;:70::i;:::-;11750:115;;;;11872:157;11916:7;11931:12;11951:10;11969;11987:12;12007:16;11872:36;:157::i;:::-;12060:33;12040:16;:53;;;;;;;;:::i;:::-;;12036:882;;;12204:35;;;;12178:98;;;;;12253:10;12178:98;;;9875:74:124;9965:18;;;9958:34;;;12178:74:92;;;;;;;9848:18:124;;12178:98:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12138:36;;;12103:173;12104:32;;;12103:173;12355:37;;;;12442:36;;;;12327:152;;;;;12406:10;12327:152;;;6114:34:124;;;6164:18;;;6157:43;6216:18;;;6209:34;;;6259:18;;;6252:34;;;;12327:78:92;;;;;;;6025:19:124;;12327:152:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12288:35;;;12285:194;-1:-1:-1;12036:882:92;;;12566:37;;;;12643:36;;;;12538:142;;;;;12617:10;12538:142;;;11672:74:124;11762:18;;;11755:34;;;11805:18;;;11798:34;;;;12538:78:92;;;;;;;11645:18:124;;12538:142:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12500:35;;;:180;12792:35;;;;12879:31;;;;12766:145;;;;;12841:10;12766:145;;;12934:34:124;;;12984:18;;;12977:43;13036:18;;;13029:34;;;12879:31:92;;;;13079:18:124;;;13072:75;12766:74:92;;;;;;;12845:19:124;;12766:145:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12726:36;;;12689:222;12692:32;;;12689:222;-1:-1:-1;12036:882:92;12924:54;:7;12952:12;12966:5;12973:1;;12924:27;:54::i;:::-;13016:10;12990:55;;13009:5;12990:55;;;13028:16;12990:55;;;;;;:::i;:::-;;;;;;;;11637:1413;;;11423:1627;;;;:::o;12460:1739:102:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:88;15237:71;;;;12694:26:102;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:102;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:102;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:102:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:102;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;6625:625:89:-;6853:4;6859:7;6868;6887:28;6910:4;6887:22;:28::i;:::-;6883:328;;;6925:15;6943:45;6966:4;620:66;6943:22;:45::i;:::-;6997:20;7020:21;;;;;;;;;;;;;;7067:26;;;;;;;;;:55;;;;;;;;;;;;;;7020:21;;-1:-1:-1;4478:3:88;17633:67;;;7049:75:89;-1:-1:-1;7136:12:89;;7132:73;;7168:4;;-1:-1:-1;7174:12:89;;-1:-1:-1;7188:7:89;-1:-1:-1;7160:36:89;;-1:-1:-1;7160:36:89;7132:73;6917:294;;;6883:328;-1:-1:-1;7224:5:89;;-1:-1:-1;7224:5:89;;-1:-1:-1;7224:5:89;6625:625;;;;;;;;:::o;5531:6352:104:-;5830:13;;;;5850:21;;;;;;;;;;;;;;;;;;5822:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5879:35;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35:104;6061:19;;:40;;;;;21735:9:88;21948:12;21936:24;;21935:31;;6039:13:104;;;5921:191;21899:22:88;21887:34;;21886:41;;6000:31:104;;;5921:191;21857:15:88;21845:27;;21844:34;;5971:21:104;;;5921:191;21818:12:88;21806:24;;21805:31;;5950:13:104;;;5921:191;21779:12:88;21767:24;21766:31;;5929:13:104;;;5921:191;;;-1:-1:-1;6142:23:104;;;;;;;;;;;;-1:-1:-1;6142:23:104;;;;6119:47;;;;;;;;;;;;;:::i;:::-;;6181:4;:13;;;6180:14;6196:21;;;;;;;;;;;;;;;;;6172:46;;;;;;;;;;;;;;:::i;:::-;;6233:4;:13;;;6232:14;6248:21;;;;;;;;;;;;;;;;;6224:46;;;;;;;;;;;;;;:::i;:::-;;6284:4;:21;;;6307:28;;;;;;;;;;;;;;;;;6276:60;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6358:26:104;;;;:40;;;;:118;;;6431:6;:26;;;6410:64;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6484:41;;;;;;;;;;;;;;;;;6343:188;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6614:35:104;6587:6;:23;;;:62;;;;;;;;:::i;:::-;;:134;;;-1:-1:-1;6688:33:104;6661:6;:23;;;:60;;;;;;;;:::i;:::-;;6587:134;6729:42;;;;;;;;;;;;;;;;;6572:205;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6807:19:104;;:40;;;8368:9:88;3439:2;8367:67;;;6784:20:104;;;:77;6884:19;;:40;;;16004:9:88;4127:2;16003:63;;;6867:14:104;;;:72;;;6986:20;;;;6980:2;:26;6963:14;;;:43;7023:19;7019:440;;7142:19;;:43;;;;7083:42;;:110;;:49;:110::i;:::-;7052:28;;;:141;;;7316:13;;;;;7227:19;;:39;;;;7316:13;;7227:78;;;:::i;:::-;:102;;;;:::i;:::-;7202:14;;;:127;;;7401:14;;;;7384;;;;7417:26;;;;;;;;;;;;;;;;;;7384:31;;-1:-1:-1;7366:49:104;7358:86;;;;;;;;;;;;;:::i;:::-;;7019:440;7469:6;:26;;;7465:676;;;7677:19;;:40;;;11852:9:88;11864:29;11852:41;11851:48;;7754:40:104;;;;;;;;;;;;;;;;;7660:142;;;;;;;;;;;;;;:::i;:::-;;8057:6;:31;;;7915:128;5235:1:88;7951:4:104;:20;;;:65;;;;:::i;:::-;7944:73;;:2;:73;:::i;:::-;7916:6;:13;;;:101;;;;:::i;7915:128::-;7841:37;;;;7828:51;;;;;;;;;;;;;:74;;;:215;;;:74;;:215;:::i;:::-;:260;;;;8098:28;;;;;;;;;;;;;;;;;7811:323;;;;;;;;;;;;;;:::i;:::-;;7465:676;8151:24;;;;:29;;;8147:291;;8270:24;;;;8207:19;;:40;;;20324:9:88;8207:87:104;;;;;4339:3:88;20323:71;;;;;8207:87:104;8304:34;;;;;;;;;;;;;;;;;8190:156;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8394:24:104;;;;8378:41;;;;;;;;;;;;;:53;;;;;;8354:21;;;:77;8147:291;8587:366;8632:12;8652;8672:15;8695:252;;;;;;;;8758:6;:17;;;8695:252;;;;8800:6;:20;;;8695:252;;;;8836:6;:18;;;8695:252;;;;;;8872:6;:13;;;8695:252;;;;;;8914:6;:24;;;8695:252;;;;;8587:37;:366::i;:::-;-1:-1:-1;8559:17:104;;;8444:509;-1:-1:-1;8444:509:104;;8493:27;;;8444:509;8452:33;;;;8444:509;;;9008:33;;;;;;;;;;;;-1:-1:-1;9008:33:104;;;;8960:82;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9056:15:104;;9078:28;;;;;;;;;;;;;;;;;;9048:59;;;;;;;;;;;;;:::i;:::-;;2677:4;9129;:17;;;:55;9192:53;;;;;;;;;;;;;;;;;9114:137;;;;;;;;;;;;;;:::i;:::-;;9440:6;:13;;;9311:6;:13;;;9292:47;;;9382:1;9349:35;;:4;:21;;;:35;;;;:74;;9411:6;:12;;;9349:74;;;9387:4;:21;;;9349:74;9292:139;;;;;;;;;;10976:42:124;10964:55;;;9292:139:104;;;10946:74:124;10919:18;;9292:139:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:161;;;;:::i;:::-;9258:25;;;:195;;;9506:14;;;;;;;;9477:43;;;;:::i;:::-;;;;-1:-1:-1;9759:15:104;;9714:25;;;;9684:27;;;;9683:92;;9759:15;9684:55;;;:::i;:::-;9683:75;;:92::i;:::-;9645:35;;;;:130;;;9870:33;;;;;9911:41;;;;;;;;;;;;;;;;;;;;9831:72;;9816:142;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;10392:33:104;10365:6;:23;;;:60;;;;;;;;:::i;:::-;;10361:1001;;;10543:4;:31;;;10576:35;;;;;;;;;;;;;;;;;10535:77;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;10690:12:104;;;;;10677:26;;;;;;;;;;;;;:29;;;10639:17;;;;:68;;10677:29;;;;;10639:37;:68::i;:::-;10638:69;:137;;;-1:-1:-1;10721:19:104;;:40;;;5872:9:88;5884;5872:21;10721:54:104;10638:137;:238;;;-1:-1:-1;10812:19:104;;:33;;;10857:18;;;;10805:71;;;;;:51;10964:55:124;;;10805:71:104;;;10946:74:124;10805:51:104;;;;;10919:18:124;;10805:71:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10789:6;:13;;;:87;10638:238;10886:44;;;;;;;;;;;;;;;;;10621:317;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;10980:12:104;;;;;11004:19;;:33;;;10973:65;;;;;:30;10964:55:124;;;10973:65:104;;;10946:74:124;10973:30:104;;;;;10919:18:124;;10973:65:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10947:23;;;:91;;;11227:27;;;;11164:25;;11192:63;;:34;:63::i;:::-;11164:91;;11289:17;11272:6;:13;;;:34;;11308:46;;;;;;;;;;;;;;;;;11264:91;;;;;;;;;;;;;;:::i;:::-;;10427:935;10361:1001;11372:17;;;;5817:9:89;502:66;5817:26;:31;11368:511:104;;11477:26;;;;:87;;11537:12;11551;11477:59;:87::i;:::-;11416:148;;11446:27;;;11416:148;;;;11417:27;;;11416:148;11573:300;;11655:6;:12;;;11624:43;;:4;:27;;;:43;;;11669:33;;;;;;;;;;;;;;;;;11616:87;;;;;;;;;;;;;;:::i;:::-;;11573:300;;;11748:19;;:40;;;12837:9:88;11821:33:104;;;;;;;;;;;;;;;;;;12849:22:88;12837:34;12836:41;11728:136:104;;;;;;;;;;;;;:::i;:::-;;11573:300;5816:6067;5531:6352;;;;:::o;972:403:89:-;1190:28;;;;;;;;;;;;;;;;;5284:3:88;1134:54:89;;1126:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1263:1:89;1247:17;;;1241:24;1273:92;;;;1298:16;;;;;;1273:92;;;1339:17;;1352:4;;1339:17;;;1273:92;1108:263;972:403;;;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;15203:2:124;1635:78:12;;;15185:21:124;15242:2;15222:18;;;15215:30;15281:34;15261:18;;;15254:62;15352:9;15332:18;;;15325:37;15379:19;;1635:78:12;15001:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;6827:1514:102:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:102;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:102;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:102;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;15595:4:124;15637:3;15626:9;15622:19;15614:27;;15674:6;15668:13;15657:9;15650:32;15738:4;15730:6;15726:17;15720:24;15713:4;15702:9;15698:20;15691:54;15801:4;15793:6;15789:17;15783:24;15776:4;15765:9;15761:20;15754:54;15864:4;15856:6;15852:17;15846:24;15839:4;15828:9;15824:20;15817:54;15927:4;15919:6;15915:17;15909:24;15902:4;15891:9;15887:20;15880:54;15990:4;15982:6;15978:17;15972:24;15965:4;15954:9;15950:20;15943:54;16053:4;16045:6;16041:17;16035:24;16028:4;16017:9;16013:20;16006:54;16107:4;16099:6;16095:17;16089:24;16132:42;16230:2;16216:12;16212:21;16205:4;16194:9;16190:20;16183:51;16253:6;16243:16;;16323:2;16317;16309:6;16305:15;16299:22;16295:31;16290:2;16279:9;16275:18;16268:59;;;15409:924;;;;;7316:575:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;16908:25:124;;;16949:18;;;16942:34;;;;16992:18;;;16985:34;17050:2;17035:18;;17028:34;17093:3;17078:19;;17071:35;8121:215:102;;;;;;16895:3:124;16880:19;8121:215:102;;;;;;;7044:1297;6827:1514;;;;;:::o;512:299:91:-;679:35;;;;672:59;;;;;:53;10964:55:124;;;672:59:91;;;10946:74:124;633:7:91;;;;672:53;;;;;10919:18:124;;672:59:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;746:37;;;;739:61;;;;;:55;10964::124;;;739:61:91;;;10946:74:124;739:55:91;;;;;;10919:18:124;;739:61:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;657:149;;;;512:299;;;;;:::o;12348:848:104:-;12615:21;;;;;;;;;;;;;;;;;12598:15;12590:47;;;;;;;;;;;;;:::i;:::-;;12672:17;12658:10;:31;;:59;;;-1:-1:-1;12693:10:104;:24;;;;12658:59;12725:44;;;;;;;;;;;;;;;;;12643:132;;;;;;;;;;;;;;:::i;:::-;;12783:13;12804;12821:44;:12;:33;;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;12821:44:104;12782:83;;;;;;;12879:8;12889:23;;;;;;;;;;;;;;;;;12871:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12938:21:104;;;;;;;;;;;;;;;;;12927:9;;12919:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12983:15:104;;;;;:72;;-1:-1:-1;13022:33:104;13002:16;:53;;;;;;;;:::i;:::-;;12983:72;12982:164;;;-1:-1:-1;13069:17:104;;;;;:76;;-1:-1:-1;13110:35:104;13090:16;:55;;;;;;;;:::i;:::-;;13069:76;13154:31;;;;;;;;;;;;;;;;;12967:224;;;;;;;;;;;;;;:::i;:::-;;12584:612;;12348:848;;;;;;:::o;1230:1498:99:-;1608:39;;;;;;;;;;;;;1538:24;;;;1608:67;;1648:12;1662;1608:39;:67::i;:::-;1537:138;;;;;1686:19;1682:1042;;;1748:44;;;1715:30;1748:44;;;;;;;;;;:76;;;1902:33;;;;8368:9:88;1748:76:99;;;;;1715:30;1862:158;;5235:1:88;;3439:2;8367:67;;;1902:104:99;;;;:::i;:::-;1885:122;;:2;:122;:::i;:::-;1863:144;;:11;:144;:::i;1862:158::-;1833:187;;2209:18;2183:44;;:22;:44;;;2179:539;;2239:44;;;2309:1;2239:44;;;;;;;;;;;:67;;:71;;;;;;2325:64;4724:25:124;;;2325:64:99;;4697:18:124;2325:64:99;;;;;;;2179:539;;;2414:34;2532:43;2557:18;2532:22;:43;:::i;:::-;2451:44;;;;;;;;;;;;;;;;:78;;:124;;;;;;;;;;;;;;2590:119;;4724:25:124;;;2451:124:99;;-1:-1:-1;2451:44:99;;2590:119;;4697:18:124;2590:119:99;;;;;;;2404:314;1707:1017;;1682:1042;1531:1197;;1230:1498;;;;;:::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;17760:2:124;1937:66:1;;;17742:21:124;17799:2;17779:18;;;17772:30;17838:27;17818:18;;;17811:55;17883:18;;1937:66:1;17558:349:124;15809:1286:104;15996:13;16017;16034:44;:12;:33;;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;16034:44:104;15995:83;;;;;;;16092:8;16102:23;;;;;;;;;;;;;;;;;16084:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16151:21:104;;;;;;;;;;;;;;;;;16140:9;;16132:41;;;;;;;;;;;;;:::i;:::-;;16180:17;16273:12;:37;;;16266:57;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16207:12;:35;;;16200:55;;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:125;;;;:::i;:::-;16414:35;;;;16488:388;;;;;;;;16549:16;;;;;;;;;;16488:388;;16333:37;16488:388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16758:26;;;;16488:388;;;;16414:35;16488:388;;;-1:-1:-1;16488:388:104;;;16839:26;;;;16488:388;;16414:35;16488:388;;;16378:506;;;;;16180:145;;-1:-1:-1;16333:37:104;16414:35;;;;;16378:100;;:506;;16488:388;16378:506;;15595:4:124;15637:3;15626:9;15622:19;15614:27;;15674:6;15668:13;15657:9;15650:32;15738:4;15730:6;15726:17;15720:24;15713:4;15702:9;15698:20;15691:54;15801:4;15793:6;15789:17;15783:24;15776:4;15765:9;15761:20;15754:54;15864:4;15856:6;15852:17;15846:24;15839:4;15828:9;15824:20;15817:54;15927:4;15919:6;15915:17;15909:24;15902:4;15891:9;15887:20;15880:54;15990:4;15982:6;15978:17;15972:24;15965:4;15954:9;15950:20;15943:54;16053:4;16045:6;16041:17;16035:24;16028:4;16017:9;16013:20;16006:54;16107:4;16099:6;16095:17;16089:24;16132:42;16230:2;16216:12;16212:21;16205:4;16194:9;16190:20;16183:51;16253:6;16243:16;;16323:2;16317;16309:6;16305:15;16299:22;16295:31;16290:2;16279:9;16275:18;16268:59;;;15409:924;;;;;16378:506:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16332:552:104;;-1:-1:-1;16948:79:104;;-1:-1:-1;16332:552:104;2311:5;16948:40;:79::i;:::-;16906:12;:30;;;:121;;17035:49;;;;;;;;;;;;;;;;;16891:199;;;;;;;;;;;;;;:::i;:::-;;15989:1106;;;;15809:1286;;;:::o;13625:1655::-;13924:13;13939;13956:22;13980:13;13997:58;:12;:40;;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;13997:58:104;13923:132;;;;;;;;;14069:8;14079:23;;;;;;;;;;;;;;;;;14061:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14128:21:104;;;;;;;;;;;;;;;;;14117:9;;14109:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14175:21:104;;;;;;;;;;;;;;;;;14164:9;;14156:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14227:33:104;14208:15;:52;;;;;;;;:::i;:::-;;14204:1072;;;14295:33;;;;;;;;;;;;;;;;;14278:15;14270:59;;;;;;;;;;;;;:::i;:::-;;14204:1072;;;14365:35;14346:15;:54;;;;;;;;:::i;:::-;;14342:934;;;14437:35;;;;;;;;;;;;;;;;;14418:17;14410:63;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14872:35:104;;;;;;;;;;;;;;;;;14853:17;14845:63;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14966:10:104;;;;14935:30;;;;;;;;;;;;;:42;;14966:10;;;;;14935:30;:42::i;:::-;14934:43;:104;;;-1:-1:-1;14991:33:104;;;;5872:9:88;5884;5872:21;14991:47:104;14934:104;:202;;;-1:-1:-1;15087:26:104;;;;15080:56;;;;;15125:10;15080:56;;;10946:74:124;15080:44:104;;;;;;;10919:18:124;;15080:56:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15052:25;15065:12;15052:10;:25;:::i;:::-;:84;14934:202;15146:44;;;;;;;;;;;;;;;;;14917:281;;;;;;;;;;;;;;:::i;14342:934::-;15226:42;;;;;;;;;;;;;;;;15219:50;;;;;;;15226:42;15219:50;;;:::i;14342:934::-;13917:1363;;;;13625:1655;;;;;;:::o;10657:1542:102:-;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:102;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;-1:-1:-1;11728:467:102;10657:1542;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:102;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:96::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10267:168;8972:1467;8841:1598;;:::o;4304:256:89:-;4448:9;;4411:4;;620:66;4448:27;4488:19;;;;;:67;;-1:-1:-1;4530:18:89;4547:1;4530:14;:18;:::i;:::-;4512:37;;:42;4488:67;4481:74;4304:256;-1:-1:-1;;;4304:256:89:o;8422:382::-;8601:9;;8547:7;;8601:16;;8669:14;;;8667:17;8654:30;;8547:7;8711:66;8742:1;8719:24;;;;;8718:31;;8711:66;;8767:1;8761:7;8711:66;;;8791:2;-1:-1:-1;;;8422:382:89;;;;;:::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;2633:3723:98:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:89;:14;;6091:122;3008:27:98;3004:93;;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3065:17:98;;-1:-1:-1;3053:1:98;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:98;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:88;4339:3;23023:71;;;;;4004:23:98;;;3898:180;3439:2:88;22869:67;;;;3971:13:98;;;3898:180;;;22674:9:88;3298:2;22691:85;;;;;3926:25:98;;;3898:180;22662:21:88;;;3908:8:98;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:98;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;10964:55:124;;;4308:75:98;;;10946:74:124;4308:47:98;;;;;10919:18:124;;4308:75:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:98;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:98;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:98;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:98;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:98;-1:-1:-1;5573:6:98;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:98;;-1:-1:-1;6240:11:98;-1:-1:-1;6259:28:98;;-1:-1:-1;5921:220:98;-1:-1:-1;6320:25:98;-1:-1:-1;2633:3723:98;;;;;;;;;;;;:::o;1874:472:106:-;1952:14;2098:18;;2187:17;2182:1;2166:18;;2154:31;2150:55;2140:66;;2086:130;2083:164;;;2237:1;2234;2227:12;2083:164;-1:-1:-1;2284:17:106;2273:29;;;;2320:1;2304:18;;2269:54;2265:71;;1874:472::o;3638:328:89:-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:88;3806:54:89;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:89;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;1005:496:106:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;7592:563:89:-;7822:4;7828:7;7847:20;7862:4;7847:14;:20::i;:::-;7843:275;;;7877:15;7895:44;7918:4;502:66;7895:22;:44::i;:::-;7947:20;7970:21;;;;;;;;;;;;;;8003:26;;;;;;;;;;:59;;;;;;;;;;;;;7970:21;;-1:-1:-1;7970:21:89;12849:22:88;12837:34;12836:41;7999:113:89;;8084:4;;-1:-1:-1;8090:12:89;-1:-1:-1;8076:27:89;;-1:-1:-1;8076:27:89;7999:113;7869:249;;7843:275;-1:-1:-1;8132:5:89;;-1:-1:-1;8132:5:89;7592:563;;;;;;;:::o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:105:o;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;1780:972;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;3336:442:96:-;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;10964:55:124;;;3653:38:96;;;10946:74:124;3653:20:96;;;;;10919:18:124;;3653:38:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:96;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:96;-1:-1:-1;;;3336:442:96:o;2435:333:89:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:88;2614:54:89;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:89;;2745:1;2729:17;;;;2715:32;2751:1;2714:38;:43;;;2435:333::o;9524:446:98:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;10964:55:124;;;9800:64:98;;;10946:74:124;;;;9712:56:98;;-1:-1:-1;9774:15:98;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;10919:18:124;;9800:64:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:71;;:89::i;:::-;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;;9524:446;-1:-1:-1;;;;;;;9524:446:98:o;4133:208:96:-;4250:4;4270:22;;;;;:65;;-1:-1:-1;;4296:39:96;;4133:208::o;3046:314:89:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:88;3206:54:89;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:89;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;8150:645:98:-;8409:32;;;;8389:87;;;;;8409:32;10964:55:124;;;8389:87:98;;;10946:74:124;8320:7:98;;;;8409:32;;;8389:69;;10919:18:124;;8389:87:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:98;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;10964:55:124;;;8624:54:98;;;10946:74:124;8631:30:98;;;;8624:48;;10919:18:124;;8624:54:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:98;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:98:o;1660:322:107:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:107;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;5270:235:89:-;5397:9;;5361:4;;502:66;5397:26;5436:18;;;;;:64;;-1:-1:-1;5476:17:89;5492:1;5476:13;:17;:::i;1895:528:102:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;2809:545::-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:404:124:-;81:2;75:9;123:6;111:19;;160:18;145:34;;181:22;;;142:62;139:242;;;237:77;234:1;227:88;338:4;335:1;328:15;366:4;363:1;356:15;139:242;397:2;390:22;14:404;:::o;423:196::-;491:20;;551:42;540:54;;530:65;;520:93;;609:1;606;599:12;520:93;423:196;;;:::o;624:157::-;706:20;;755:1;745:12;;735:40;;771:1;768;761:12;786:159;853:20;;913:6;902:18;;892:29;;882:57;;935:1;932;925:12;950:118;1036:5;1029:13;1022:21;1015:5;1012:32;1002:60;;1058:1;1055;1048:12;1002:60;950:118;:::o;1073:128::-;1138:20;;1167:28;1138:20;1167:28;:::i;1206:156::-;1272:20;;1332:4;1321:16;;1311:27;;1301:55;;1352:1;1349;1342:12;1367:1763;1669:6;1677;1685;1693;1701;1745:9;1736:7;1732:23;1775:3;1771:2;1767:12;1764:32;;;1792:1;1789;1782:12;1764:32;1828:9;1815:23;1805:33;;1885:2;1874:9;1870:18;1857:32;1847:42;;1936:2;1925:9;1921:18;1908:32;1898:42;;1987:2;1976:9;1972:18;1959:32;1949:42;;2010:6;2109:2;2040:66;2036:2;2032:75;2028:84;2025:104;;;2125:1;2122;2115:12;2025:104;2151:17;;:::i;:::-;2138:30;;2191:39;2225:3;2214:9;2210:19;2191:39;:::i;:::-;2184:5;2177:54;2263:39;2297:3;2286:9;2282:19;2263:39;:::i;:::-;2258:2;2251:5;2247:14;2240:63;2335:39;2369:3;2358:9;2354:19;2335:39;:::i;:::-;2330:2;2323:5;2319:14;2312:63;2435:3;2424:9;2420:19;2407:33;2402:2;2395:5;2391:14;2384:57;2460:3;2496:52;2544:2;2533:9;2529:18;2496:52;:::i;:::-;2490:3;2483:5;2479:15;2472:77;2568:3;2604:37;2637:2;2626:9;2622:18;2604:37;:::i;:::-;2598:3;2591:5;2587:15;2580:62;2661:3;2697:35;2728:2;2717:9;2713:18;2697:35;:::i;:::-;2691:3;2684:5;2680:15;2673:60;2752:3;2816:2;2805:9;2801:18;2788:32;2782:3;2775:5;2771:15;2764:57;2881:2;2870:9;2866:18;2853:32;2848:2;2841:5;2837:14;2830:56;2918:39;2952:3;2941:9;2937:19;2918:39;:::i;:::-;2913:2;2906:5;2902:14;2895:63;2990:37;3022:3;3011:9;3007:19;2990:37;:::i;:::-;2985:2;2978:5;2974:14;2967:61;3060:39;3094:3;3083:9;3079:19;3060:39;:::i;:::-;3055:2;3048:5;3044:14;3037:63;;;;;;3119:5;3109:15;;;1367:1763;;;;;;;;:::o;3135:1430::-;3375:6;3383;3391;3399;3443:9;3434:7;3430:23;3473:3;3469:2;3465:12;3462:32;;;3490:1;3487;3480:12;3462:32;3526:9;3513:23;3503:33;;3583:2;3572:9;3568:18;3555:32;3545:42;;3634:2;3623:9;3619:18;3606:32;3596:42;;3731:4;3662:66;3658:2;3654:75;3650:86;3647:106;;;3749:1;3746;3739:12;3647:106;;3782:2;3776:9;3824:4;3816:6;3812:17;3895:6;3883:10;3880:22;3859:18;3847:10;3844:34;3841:62;3838:242;;;3936:77;3933:1;3926:88;4037:4;4034:1;4027:15;4065:4;4062:1;4055:15;3838:242;4096:2;4089:22;4135:38;4169:2;4154:18;;4135:38;:::i;:::-;4127:6;4120:54;4235:3;4224:9;4220:19;4207:33;4202:2;4194:6;4190:15;4183:58;4274:54;4322:4;4311:9;4307:20;4274:54;:::i;:::-;4269:2;4261:6;4257:15;4250:79;4362:39;4396:3;4385:9;4381:19;4362:39;:::i;:::-;4357:2;4349:6;4345:15;4338:64;4452:3;4441:9;4437:19;4424:33;4466:28;4488:5;4466:28;:::i;:::-;4522:3;4510:16;;4503:31;3135:1430;;;;-1:-1:-1;3135:1430:124;;-1:-1:-1;;3135:1430:124:o;4760:359::-;4868:6;4876;4884;4937:2;4925:9;4916:7;4912:23;4908:32;4905:52;;;4953:1;4950;4943:12;4905:52;4989:9;4976:23;4966:33;;5018:38;5052:2;5041:9;5037:18;5018:38;:::i;:::-;5008:48;;5075:38;5109:2;5098:9;5094:18;5075:38;:::i;:::-;5065:48;;4760:359;;;;;:::o;5124:504::-;5303:6;5311;5319;5327;5380:3;5368:9;5359:7;5355:23;5351:33;5348:53;;;5397:1;5394;5387:12;5348:53;5433:9;5420:23;5410:33;;5490:2;5479:9;5475:18;5462:32;5452:42;;5513:38;5547:2;5536:9;5532:18;5513:38;:::i;:::-;5503:48;;5570:52;5618:2;5607:9;5603:18;5570:52;:::i;:::-;5560:62;;5124:504;;;;;;;:::o;5633:184::-;5685:77;5682:1;5675:88;5782:4;5779:1;5772:15;5806:4;5803:1;5796:15;6297:367;6382:6;6390;6398;6451:2;6439:9;6430:7;6426:23;6422:32;6419:52;;;6467:1;6464;6457:12;6419:52;6499:9;6493:16;6518:28;6540:5;6518:28;:::i;:::-;6610:2;6595:18;;6589:25;6654:2;6639:18;;;6633:25;6565:5;;6589:25;;-1:-1:-1;6633:25:124;6297:367;-1:-1:-1;;;6297:367:124:o;6669:306::-;6745:6;6753;6806:2;6794:9;6785:7;6781:23;6777:32;6774:52;;;6822:1;6819;6812:12;6774:52;6854:9;6848:16;6873:28;6895:5;6873:28;:::i;:::-;6965:2;6950:18;;;;6944:25;6920:5;;6944:25;;-1:-1:-1;;;6669:306:124:o;6980:184::-;7032:77;7029:1;7022:88;7129:4;7126:1;7119:15;7153:4;7150:1;7143:15;7169:125;7209:4;7237:1;7234;7231:8;7228:34;;;7242:18;;:::i;:::-;-1:-1:-1;7279:9:124;;7169:125::o;7299:482::-;7388:1;7431:5;7388:1;7445:330;7466:7;7456:8;7453:21;7445:330;;;7585:4;7517:66;7513:77;7507:4;7504:87;7501:113;;;7594:18;;:::i;:::-;7644:7;7634:8;7630:22;7627:55;;;7664:16;;;;7627:55;7743:22;;;;7703:15;;;;7445:330;;;7449:3;7299:482;;;;;:::o;7786:866::-;7835:5;7865:8;7855:80;;-1:-1:-1;7906:1:124;7920:5;;7855:80;7954:4;7944:76;;-1:-1:-1;7991:1:124;8005:5;;7944:76;8036:4;8054:1;8049:59;;;;8122:1;8117:130;;;;8029:218;;8049:59;8079:1;8070:10;;8093:5;;;8117:130;8154:3;8144:8;8141:17;8138:43;;;8161:18;;:::i;:::-;-1:-1:-1;;8217:1:124;8203:16;;8232:5;;8029:218;;8331:2;8321:8;8318:16;8312:3;8306:4;8303:13;8299:36;8293:2;8283:8;8280:16;8275:2;8269:4;8266:12;8262:35;8259:77;8256:159;;;-1:-1:-1;8368:19:124;;;8400:5;;8256:159;8447:34;8472:8;8466:4;8447:34;:::i;:::-;8577:6;8509:66;8505:79;8496:7;8493:92;8490:118;;;8588:18;;:::i;:::-;8626:20;;7786:866;-1:-1:-1;;;7786:866:124:o;8657:131::-;8717:5;8746:36;8773:8;8767:4;8746:36;:::i;8793:184::-;8845:77;8842:1;8835:88;8942:4;8939:1;8932:15;8966:4;8963:1;8956:15;8982:274;9022:1;9048;9038:189;;9083:77;9080:1;9073:88;9184:4;9181:1;9174:15;9212:4;9209:1;9202:15;9038:189;-1:-1:-1;9241:9:124;;8982:274::o;9261:253::-;9301:3;9329:34;9390:2;9387:1;9383:10;9420:2;9417:1;9413:10;9451:3;9447:2;9443:12;9438:3;9435:21;9432:47;;;9459:18;;:::i;:::-;9495:13;;9261:253;-1:-1:-1;;;;9261:253:124:o;10003:301::-;10091:1;10084:5;10081:12;10071:200;;10127:77;10124:1;10117:88;10228:4;10225:1;10218:15;10256:4;10253:1;10246:15;10071:200;10280:18;;10003:301::o;10309:486::-;10590:42;10578:55;;10560:74;;10665:2;10650:18;;10643:34;;;10547:3;10532:19;;10686:60;10742:2;10727:18;;10719:6;10686:60;:::i;:::-;10782:6;10777:2;10766:9;10762:18;10755:34;10309:486;;;;;;;:::o;11031:184::-;11101:6;11154:2;11142:9;11133:7;11129:23;11125:32;11122:52;;;11170:1;11167;11160:12;11122:52;-1:-1:-1;11193:16:124;;11031:184;-1:-1:-1;11031:184:124:o;11220:245::-;11299:6;11307;11360:2;11348:9;11339:7;11335:23;11331:32;11328:52;;;11376:1;11373;11366:12;11328:52;-1:-1:-1;;11399:16:124;;11455:2;11440:18;;;11434:25;11399:16;;11434:25;;-1:-1:-1;11220:245:124:o;11843:128::-;11883:3;11914:1;11910:6;11907:1;11904:13;11901:39;;;11920:18;;:::i;:::-;-1:-1:-1;11956:9:124;;11843:128::o;13158:223::-;13312:2;13297:18;;13324:51;13301:9;13357:6;13324:51;:::i;13386:466::-;13482:6;13490;13498;13506;13559:3;13547:9;13538:7;13534:23;13530:33;13527:53;;;13576:1;13573;13566:12;13527:53;13605:9;13599:16;13589:26;;13655:2;13644:9;13640:18;13634:25;13624:35;;13699:2;13688:9;13684:18;13678:25;13668:35;;13746:2;13735:9;13731:18;13725:25;13790:12;13783:5;13779:24;13772:5;13769:35;13759:63;;13818:1;13815;13808:12;13759:63;13386:466;;;;-1:-1:-1;13386:466:124;;-1:-1:-1;;13386:466:124:o;13857:656::-;13969:4;13998:2;14027;14016:9;14009:21;14059:6;14053:13;14102:6;14097:2;14086:9;14082:18;14075:34;14127:1;14137:140;14151:6;14148:1;14145:13;14137:140;;;14246:14;;;14242:23;;14236:30;14212:17;;;14231:2;14208:26;14201:66;14166:10;;14137:140;;;14295:6;14292:1;14289:13;14286:91;;;14365:1;14360:2;14351:6;14340:9;14336:22;14332:31;14325:42;14286:91;-1:-1:-1;14429:2:124;14417:15;14434:66;14413:88;14398:104;;;;14504:2;14394:113;;13857:656;-1:-1:-1;;;13857:656:124:o;14518:245::-;14585:6;14638:2;14626:9;14617:7;14613:23;14609:32;14606:52;;;14654:1;14651;14644:12;14606:52;14686:9;14680:16;14705:28;14727:5;14705:28;:::i;14768:228::-;14808:7;14934:1;14866:66;14862:74;14859:1;14856:81;14851:1;14844:9;14837:17;14833:105;14830:131;;;14941:18;;:::i;:::-;-1:-1:-1;14981:9:124;;14768:228::o;16338:306::-;16426:6;16434;16442;16495:2;16483:9;16474:7;16470:23;16466:32;16463:52;;;16511:1;16508;16501:12;16463:52;16540:9;16534:16;16524:26;;16590:2;16579:9;16575:18;16569:25;16559:35;;16634:2;16623:9;16619:18;16613:25;16603:35;;16338:306;;;;;:::o;17307:246::-;17347:4;17376:34;17460:10;;;;17430;;17482:12;;;17479:38;;;17497:18;;:::i;:::-;17534:13;;17307:246;-1:-1:-1;;;17307:246:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"4560200","executionCost":"5352","totalCost":"4565552"},"external":{"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)":"infinite","executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)":"infinite","executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)":"infinite","executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)":"infinite"}},"methodIdentifiers":{"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)":"1e6473f9","executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)":"6973f744","executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)":"40e95de6","executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)":"eac4d703"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)\":{\"details\":\"Emits the `Borrow()` event\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the borrow function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}},\"executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)\":{\"details\":\"The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`Emits the `RebalanceStableBorrowRate()` event\",\"params\":{\"asset\":\"The asset of the position being rebalanced\",\"reserve\":\"The state of the reserve of the asset being repaid\",\"user\":\"The user being rebalanced\"}},\"executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)\":{\"details\":\"Emits the `Repay()` event\",\"params\":{\"params\":\"The additional parameters needed to execute the repay function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"},\"returns\":{\"_0\":\"The actual amount being repaid\"}},\"executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)\":{\"details\":\"Emits the `Swap()` event\",\"params\":{\"asset\":\"The asset of the position being swapped\",\"interestRateMode\":\"The current interest rate mode of the position being swapped\",\"reserve\":\"The of the reserve of the asset being repaid\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}}},\"title\":\"BorrowLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)\":{\"notice\":\"Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the isolated debt.\"},\"executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)\":{\"notice\":\"Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\"},\"executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)\":{\"notice\":\"Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also reduces the isolated debt.\"},\"executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)\":{\"notice\":\"Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\"}},\"notice\":\"Implements the base logic for all the actions related to borrowing\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/BorrowLogic.sol\":\"BorrowLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)":{"notice":"Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the isolated debt."},"executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)":{"notice":"Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs."},"executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)":{"notice":"Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also reduces the isolated debt."},"executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)":{"notice":"Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time."}},"notice":"Implements the base logic for all the actions related to borrowing","version":1}}},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"}],"devdoc":{"kind":"dev","methods":{"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)":{"details":"It is not possible to back more than the existing unbacked amount of the reserveEmits the `BackUnbacked` event","params":{"amount":"The amount to back","asset":"The address of the underlying asset to repay","fee":"The amount paid in fees","protocolFeeBps":"The fraction of fees in basis points paid to the protocol","reserve":"The reserve to back unbacked for"},"returns":{"_0":"The backed amount"}},"executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)":{"details":"Essentially a supply without transferring the underlying.Emits the `MintUnbacked` eventEmits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral","params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint aTokens of","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6122e261003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80630413c86f146100455780638e74324814610067575b600080fd5b81801561005157600080fd5b50610065610060366004611e11565b610099565b005b81801561007357600080fd5b50610087610082366004611e8a565b6103f7565b60405190815260200160405180910390f35b73ffffffffffffffffffffffffffffffffffffffff84166000908152602088905260408120906100c8826106ee565b90506100d48282610907565b6100df818387610992565b6101c08101515160b081901c640fffffffff169060301c60ff16600061010488610d2a565b60088601805460109061013e90849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790556fffffffffffffffffffffffffffffffff16905081600a6101949190612055565b61019e9084612061565b8111156040518060400160405280600281526020017f353200000000000000000000000000000000000000000000000000000000000081525090610218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b60405180910390fd5b5061022785858b600080610dd0565b6101e08401516101008501516040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8a81166024830152604482018c90526064820192909252600092919091169063b3f1c93d906084016020604051808303816000875af11580156102bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102df9190612111565b9050801561038c576102fe8d8d8d886101c00151896101e00151611111565b1561038c576003860154610332908c907501000000000000000000000000000000000000000000900461ffff166001611351565b8773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b60408051338152602081018b905261ffff89169173ffffffffffffffffffffffffffffffffffffffff808c1692908e16917ff25af37b3d3ec226063dc9bdc103ece7eb110a50f340fe854bb7bc1b0676d7d0910160405180910390a450505050505050505050505050565b600080610403876106ee565b905061040f8782610907565b600887015460009070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16861061047357600888015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16610475565b855b9050600061048386866113e8565b905060006104918288612133565b9050600061049f888561214a565b61010086015160088d0154919250610555916104cf916fffffffffffffffffffffffffffffffff9091169061142b565b866101e0015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190612162565b61054d919061214a565b8c9084611482565b61010086018190526105719061056c908590611522565b610d2a565b60088c0180546000906105979084906fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506105d684610d2a565b60088c01805460109061061090849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661217b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550610660858b8360008f610dd090949392919063ffffffff16565b6101e085015161068a9073ffffffffffffffffffffffffffffffffffffffff8c1690339084611561565b60408051858152602081018a9052339173ffffffffffffffffffffffffffffffffffffffff8d16917f281596e92b2d974beb7d4f124df30a0b39067b096893e95011ce4bdad798b759910160405180910390a3509193505050505b95945050505050565b6106f6611d3f565b6106fe611d3f565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f9190612162565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906121ac565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610936575050565b6109408282611643565b61094a8282611764565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b60408051808201909152600281527f32360000000000000000000000000000000000000000000000000000000000006020820152816109fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b506000806000610a55866101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9450505092509250826040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090610acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115610b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528215610ba8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b506101c08601515160741c640fffffffff16801580610cb257506101c08701515160301c60ff16610bda90600a612055565b610be49082612061565b85610ca58961010001518960080160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168b6101e0015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190612162565b610c9f919061214a565b9061142b565b610caf919061214a565b11155b6040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525090610d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5050505050505050565b60006fffffffffffffffffffffffffffffffff821115610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161020f565b5090565b610dfb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151610e0f9161142b565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991610f709190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb191906121f7565b60408401526020830152808252610fc790610d2a565b6001870180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055602081015161100a90610d2a565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161105b90610d2a565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b815160009060d41c64ffffffffff161561133b5760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190612225565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112049190612225565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112759190612225565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612111565b6113395760009150506106e5565b505b611347868686866118e4565b9695505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152608083106113c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b50600182811b81011b81156113da578354811784556113e2565b835481191684555b50505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761141d57600080fd5b506127109102611388010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761146057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600183015460009081906114ca906fffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce8000000610c956114bb88611981565b6114c488611981565b90611522565b90506114d581610d2a565b6001860180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905590505b9392505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561154657600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16115cc573d6000803e3d6000fd5b506115d68561199c565b61163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d00000000000000604482015260640161020f565b5050505050565b610160810151156116d3576000611664826101600151836102400151611a68565b905061167d8260e001518261142b90919063ffffffff16565b610100830181905261168e90610d2a565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b8051156117605760006116f0826101800151836102400151611aaf565b905061170a8261012001518261142b90919063ffffffff16565b610140830181905261171b90610d2a565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b61179d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a08201516117ac57505050565b61012082015182516117bd9161142b565b602082015261014082015182516117d39161142b565b604082015260608201516102608301516102408401516117fb92919064ffffffffff16611ab8565b6060820181905260408301516118109161142b565b80825260208201516080840151604084015161182c919061214a565b6118369190612133565b6118409190612133565b608082018190526101a083015161185791906113e8565b60a08201819052156118df5761188261056c8361010001518360a0015161152290919063ffffffff16565b6008840180546000906118a89084906fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b60006118f2825161ffff1690565b6118fe57506000611979565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1661193d57506001611979565b60408051602081019091528354815260009061195a908787611bff565b50509050801580156119755750825160d41c64ffffffffff16155b9150505b949350505050565b633b9aca00818102908104821461199757600080fd5b919050565b60006119dc565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611a1b5760208114611a5557611a167f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6119a3565b611a62565b823b611a4c57611a4c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146119a3565b60019150611a62565b3d6000803e600051151591505b50919050565b600080611a7c64ffffffffff841642612133565b611a869085612061565b6301e1338090049050611aa5816b033b2e3c9fd0803ce800000061214a565b9150505b92915050565b600061151b8383425b600080611acc64ffffffffff851684612133565b905080611ae8576b033b2e3c9fd0803ce800000091505061151b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611b1e576000611b23565b600285035b925066038882915c4000611b378a8061142b565b81611b4457611b44612242565b0491506301e13380611b56838b61142b565b81611b6357611b63612242565b049050600082611b738688612061565b611b7d9190612061565b60029004905060008285611b91888a612061565b611b9b9190612061565b611ba59190612061565b60069004905080826301e13380611bbc8a8f612061565b611bc69190612271565b611bdc906b033b2e3c9fd0803ce800000061214a565b611be6919061214a565b611bf0919061214a565b9b9a5050505050505050505050565b6000806000611c0d86611cb7565b15611ca4576000611c3e877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa611cfb565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015611ca057600195509093509150611cae9050565b5050505b5060009150819050805b93509350939050565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa16801580159061151b5750611cf3600182612133565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156106e557600101611d2a565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001611dc36040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b73ffffffffffffffffffffffffffffffffffffffff81168114611e0e57600080fd5b50565b600080600080600080600060e0888a031215611e2c57600080fd5b8735965060208801359550604088013594506060880135611e4c81611dec565b93506080880135925060a0880135611e6381611dec565b915060c088013561ffff81168114611e7a57600080fd5b8091505092959891949750929550565b600080600080600060a08688031215611ea257600080fd5b853594506020860135611eb481611dec565b94979496505050506040830135926060810135926080909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006fffffffffffffffffffffffffffffffff808316818516808303821115611f2c57611f2c611ed2565b01949350505050565b600181815b80851115611f8e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611f7457611f74611ed2565b80851615611f8157918102915b93841c9390800290611f3a565b509250929050565b600082611fa557506001611aa9565b81611fb257506000611aa9565b8160018114611fc85760028114611fd257611fee565b6001915050611aa9565b60ff841115611fe357611fe3611ed2565b50506001821b611aa9565b5060208310610133831016604e8410600b8410161715612011575081810a611aa9565b61201b8383611f35565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561204d5761204d611ed2565b029392505050565b600061151b8383611f96565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561209957612099611ed2565b500290565b600060208083528351808285015260005b818110156120cb578581018301518582016040015282016120af565b818111156120dd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561212357600080fd5b8151801515811461151b57600080fd5b60008282101561214557612145611ed2565b500390565b6000821982111561215d5761215d611ed2565b500190565b60006020828403121561217457600080fd5b5051919050565b60006fffffffffffffffffffffffffffffffff838116908316818110156121a4576121a4611ed2565b039392505050565b600080600080608085870312156121c257600080fd5b845193506020850151925060408501519150606085015164ffffffffff811681146121ec57600080fd5b939692955090935050565b60008060006060848603121561220c57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561223757600080fd5b815161151b81611dec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826122a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220cee3e27afab70c3d80fa0ed71ff4a16129e046d54609375c52a4db847dacbba164736f6c634300080a0033","opcodes":"PUSH2 0x22E2 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x413C86F EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0x8E743248 EQ PUSH2 0x67 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x60 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E11 JUMP JUMPDEST PUSH2 0x99 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x87 PUSH2 0x82 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E8A JUMP JUMPDEST PUSH2 0x3F7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xC8 DUP3 PUSH2 0x6EE JUMP JUMPDEST SWAP1 POP PUSH2 0xD4 DUP3 DUP3 PUSH2 0x907 JUMP JUMPDEST PUSH2 0xDF DUP2 DUP4 DUP8 PUSH2 0x992 JUMP JUMPDEST PUSH2 0x1C0 DUP2 ADD MLOAD MLOAD PUSH1 0xB0 DUP2 SWAP1 SHR PUSH5 0xFFFFFFFFF AND SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0x0 PUSH2 0x104 DUP9 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP7 ADD DUP1 SLOAD PUSH1 0x10 SWAP1 PUSH2 0x13E SWAP1 DUP5 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0xA PUSH2 0x194 SWAP2 SWAP1 PUSH2 0x2055 JUMP JUMPDEST PUSH2 0x19E SWAP1 DUP5 PUSH2 0x2061 JUMP JUMPDEST DUP2 GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3532000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x218 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x227 DUP6 DUP6 DUP12 PUSH1 0x0 DUP1 PUSH2 0xDD0 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2BB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DF SWAP2 SWAP1 PUSH2 0x2111 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x38C JUMPI PUSH2 0x2FE DUP14 DUP14 DUP14 DUP9 PUSH2 0x1C0 ADD MLOAD DUP10 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1111 JUMP JUMPDEST ISZERO PUSH2 0x38C JUMPI PUSH1 0x3 DUP7 ADD SLOAD PUSH2 0x332 SWAP1 DUP13 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x1351 JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE PUSH2 0xFFFF DUP10 AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP3 SWAP1 DUP15 AND SWAP2 PUSH32 0xF25AF37B3D3EC226063DC9BDC103ECE7EB110A50F340FE854BB7BC1B0676D7D0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x403 DUP8 PUSH2 0x6EE JUMP JUMPDEST SWAP1 POP PUSH2 0x40F DUP8 DUP3 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x8 DUP8 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 LT PUSH2 0x473 JUMPI PUSH1 0x8 DUP9 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x475 JUMP JUMPDEST DUP6 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x483 DUP7 DUP7 PUSH2 0x13E8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x491 DUP3 DUP9 PUSH2 0x2133 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x49F DUP9 DUP6 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x100 DUP7 ADD MLOAD PUSH1 0x8 DUP14 ADD SLOAD SWAP2 SWAP3 POP PUSH2 0x555 SWAP2 PUSH2 0x4CF SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH2 0x142B JUMP JUMPDEST DUP7 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x543 SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x54D SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST DUP13 SWAP1 DUP5 PUSH2 0x1482 JUMP JUMPDEST PUSH2 0x100 DUP7 ADD DUP2 SWAP1 MSTORE PUSH2 0x571 SWAP1 PUSH2 0x56C SWAP1 DUP6 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP13 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x597 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x5D6 DUP5 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP13 ADD DUP1 SLOAD PUSH1 0x10 SWAP1 PUSH2 0x610 SWAP1 DUP5 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x217B JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x660 DUP6 DUP12 DUP4 PUSH1 0x0 DUP16 PUSH2 0xDD0 SWAP1 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1E0 DUP6 ADD MLOAD PUSH2 0x68A SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 CALLER SWAP1 DUP5 PUSH2 0x1561 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP11 SWAP1 MSTORE CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP2 PUSH32 0x281596E92B2D974BEB7D4F124DF30A0B39067B096893E95011CE4BDAD798B759 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP2 SWAP4 POP POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x6F6 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x6FE PUSH2 0x1D3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x82B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84F SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8D4 SWAP2 SWAP1 PUSH2 0x21AC JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x936 JUMPI POP POP JUMP JUMPDEST PUSH2 0x940 DUP3 DUP3 PUSH2 0x1643 JUMP JUMPDEST PUSH2 0x94A DUP3 DUP3 PUSH2 0x1764 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x9FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xA55 DUP7 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP SWAP3 POP SWAP3 POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xACC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0xB3A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0xBA8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND DUP1 ISZERO DUP1 PUSH2 0xCB2 JUMPI POP PUSH2 0x1C0 DUP8 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0xBDA SWAP1 PUSH1 0xA PUSH2 0x2055 JUMP JUMPDEST PUSH2 0xBE4 SWAP1 DUP3 PUSH2 0x2061 JUMP JUMPDEST DUP6 PUSH2 0xCA5 DUP10 PUSH2 0x100 ADD MLOAD DUP10 PUSH1 0x8 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC95 SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xC9F SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST SWAP1 PUSH2 0x142B JUMP JUMPDEST PUSH2 0xCAF SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST GT ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xD20 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xDCC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x20F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xDFB PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0xE0F SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0xF70 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF8D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFB1 SWAP2 SWAP1 PUSH2 0x21F7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0xFC7 SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x100A SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x105B SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x133B JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1196 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1204 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1251 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1275 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1307 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x132B SWAP2 SWAP1 PUSH2 0x2111 JUMP JUMPDEST PUSH2 0x1339 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x6E5 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1347 DUP7 DUP7 DUP7 DUP7 PUSH2 0x18E4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x13C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x13DA JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x13E2 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x141D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x14CA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0xC95 PUSH2 0x14BB DUP9 PUSH2 0x1981 JUMP JUMPDEST PUSH2 0x14C4 DUP9 PUSH2 0x1981 JUMP JUMPDEST SWAP1 PUSH2 0x1522 JUMP JUMPDEST SWAP1 POP PUSH2 0x14D5 DUP2 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x15CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x15D6 DUP6 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x163C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x20F JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x16D3 JUMPI PUSH1 0x0 PUSH2 0x1664 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1A68 JUMP JUMPDEST SWAP1 POP PUSH2 0x167D DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x142B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x168E SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1760 JUMPI PUSH1 0x0 PUSH2 0x16F0 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1AAF JUMP JUMPDEST SWAP1 POP PUSH2 0x170A DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x142B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x171B SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x179D PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x17AC JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x17BD SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x17D3 SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x17FB SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1AB8 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1810 SWAP2 PUSH2 0x142B JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x182C SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1836 SWAP2 SWAP1 PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x1840 SWAP2 SWAP1 PUSH2 0x2133 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x1857 SWAP2 SWAP1 PUSH2 0x13E8 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x18DF JUMPI PUSH2 0x1882 PUSH2 0x56C DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x1522 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x18A8 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18F2 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x18FE JUMPI POP PUSH1 0x0 PUSH2 0x1979 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x193D JUMPI POP PUSH1 0x1 PUSH2 0x1979 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x195A SWAP1 DUP8 DUP8 PUSH2 0x1BFF JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1975 JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DC JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1A1B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1A55 JUMPI PUSH2 0x1A16 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x19A3 JUMP JUMPDEST PUSH2 0x1A62 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1A4C JUMPI PUSH2 0x1A4C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x19A3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1A62 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1A7C PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x1A86 SWAP1 DUP6 PUSH2 0x2061 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1AA5 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x214A JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x151B DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1ACC PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2133 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1AE8 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x151B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1B1E JUMPI PUSH1 0x0 PUSH2 0x1B23 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1B37 DUP11 DUP1 PUSH2 0x142B JUMP JUMPDEST DUP2 PUSH2 0x1B44 JUMPI PUSH2 0x1B44 PUSH2 0x2242 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1B56 DUP4 DUP12 PUSH2 0x142B JUMP JUMPDEST DUP2 PUSH2 0x1B63 JUMPI PUSH2 0x1B63 PUSH2 0x2242 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1B73 DUP7 DUP9 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1B7D SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1B91 DUP9 DUP11 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1B9B SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1BA5 SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1BBC DUP11 DUP16 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1BC6 SWAP2 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x1BDC SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1BE6 SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1BF0 SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C0D DUP7 PUSH2 0x1CB7 JUMP JUMPDEST ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x0 PUSH2 0x1C3E DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1CA0 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x1CAE SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x151B JUMPI POP PUSH2 0x1CF3 PUSH1 0x1 DUP3 PUSH2 0x2133 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x1 ADD PUSH2 0x1D2A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1DC3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1E0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1E2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x1E4C DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH2 0x1E63 DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1E7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x1EB4 DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x1F2C JUMPI PUSH2 0x1F2C PUSH2 0x1ED2 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x1F8E JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x1F74 JUMPI PUSH2 0x1F74 PUSH2 0x1ED2 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x1F81 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x1F3A JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1FA5 JUMPI POP PUSH1 0x1 PUSH2 0x1AA9 JUMP JUMPDEST DUP2 PUSH2 0x1FB2 JUMPI POP PUSH1 0x0 PUSH2 0x1AA9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x1FC8 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1FD2 JUMPI PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1FE3 JUMPI PUSH2 0x1FE3 PUSH2 0x1ED2 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1AA9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2011 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1AA9 JUMP JUMPDEST PUSH2 0x201B DUP4 DUP4 PUSH2 0x1F35 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x204D JUMPI PUSH2 0x204D PUSH2 0x1ED2 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x151B DUP4 DUP4 PUSH2 0x1F96 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2099 JUMPI PUSH2 0x2099 PUSH2 0x1ED2 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x20CB JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x20AF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x20DD JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x151B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2145 JUMPI PUSH2 0x2145 PUSH2 0x1ED2 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x215D JUMPI PUSH2 0x215D PUSH2 0x1ED2 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x21A4 JUMPI PUSH2 0x21A4 PUSH2 0x1ED2 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x21C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x21EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x220C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2237 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x151B DUP2 PUSH2 0x1DEC JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x22A7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE 0xE3 0xE2 PUSH27 0xFAB70C3D80FA0ED71FF4A16129E046D54609375C52A4DB847DACBB LOG1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"837:4930:93:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;837:4930:93;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_accrueToTreasury_20746":{"entryPoint":5988,"id":20746,"parameterSlots":2,"returnSlots":0},"@_getFirstAssetIdByMask_14544":{"entryPoint":7419,"id":14544,"parameterSlots":2,"returnSlots":1},"@_updateIndexes_20827":{"entryPoint":5699,"id":20827,"parameterSlots":2,"returnSlots":0},"@cache_20970":{"entryPoint":1774,"id":20970,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_23673":{"entryPoint":6840,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":6831,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":6760,"id":23550,"parameterSlots":2,"returnSlots":1},"@cumulateToLiquidityIndex_20430":{"entryPoint":5250,"id":20430,"parameterSlots":3,"returnSlots":1},"@executeBackUnbacked_16096":{"entryPoint":1015,"id":16096,"parameterSlots":5,"returnSlots":1},"@executeMintUnbacked_15957":{"entryPoint":153,"id":15957,"parameterSlots":7,"returnSlots":0},"@getDebtCeiling_13668":{"entryPoint":null,"id":13668,"parameterSlots":1,"returnSlots":1},"@getDecimals_13110":{"entryPoint":null,"id":13110,"parameterSlots":1,"returnSlots":1},"@getFlags_13934":{"entryPoint":null,"id":13934,"parameterSlots":1,"returnSlots":5},"@getIsolationModeState_14439":{"entryPoint":7167,"id":14439,"parameterSlots":3,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":6556,"id":117,"parameterSlots":1,"returnSlots":1},"@getLtv_12954":{"entryPoint":null,"id":12954,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_13512":{"entryPoint":null,"id":13512,"parameterSlots":1,"returnSlots":1},"@getSupplyCap_13616":{"entryPoint":null,"id":13616,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_13772":{"entryPoint":null,"id":13772,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralAny_14308":{"entryPoint":null,"id":14308,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOne_14291":{"entryPoint":7351,"id":14291,"parameterSlots":1,"returnSlots":1},"@percentMul_23713":{"entryPoint":5096,"id":23713,"parameterSlots":2,"returnSlots":1},"@rayDiv_23792":{"entryPoint":5410,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":5163,"id":23780,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":5473,"id":106,"parameterSlots":4,"returnSlots":0},"@setUsingAsCollateral_14152":{"entryPoint":4945,"id":14152,"parameterSlots":3,"returnSlots":0},"@toUint128_1626":{"entryPoint":3370,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_20618":{"entryPoint":3536,"id":20618,"parameterSlots":5,"returnSlots":0},"@updateState_20387":{"entryPoint":2311,"id":20387,"parameterSlots":2,"returnSlots":0},"@validateAutomaticUseAsCollateral_23501":{"entryPoint":4369,"id":23501,"parameterSlots":5,"returnSlots":1},"@validateSupply_21871":{"entryPoint":2450,"id":21871,"parameterSlots":3,"returnSlots":0},"@validateUseAsCollateral_23438":{"entryPoint":6372,"id":23438,"parameterSlots":4,"returnSlots":1},"@wadToRay_23812":{"entryPoint":6529,"id":23812,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":8465,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":8741,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_uint256t_addresst_uint16":{"entryPoint":7697,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_addresst_uint256t_uint256t_uint256":{"entryPoint":7818,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8546,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":8695,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":8620,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8350,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":7937,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":8522,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":8817,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":7989,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":8277,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":8086,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":8289,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":8571,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":8499,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":7890,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":8770,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7660,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:11245:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:124"},"nodeType":"YulFunctionCall","src":"148:12:124"},"nodeType":"YulExpressionStatement","src":"148:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:124"},"nodeType":"YulFunctionCall","src":"89:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:124"},"nodeType":"YulFunctionCall","src":"79:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:124"},"nodeType":"YulFunctionCall","src":"72:73:124"},"nodeType":"YulIf","src":"69:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:124","type":""}],"src":"14:154:124"},{"body":{"nodeType":"YulBlock","src":"461:661:124","statements":[{"body":{"nodeType":"YulBlock","src":"508:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"517:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"520:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"510:6:124"},"nodeType":"YulFunctionCall","src":"510:12:124"},"nodeType":"YulExpressionStatement","src":"510:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"482:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"491:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"478:3:124"},"nodeType":"YulFunctionCall","src":"478:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"503:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"474:3:124"},"nodeType":"YulFunctionCall","src":"474:33:124"},"nodeType":"YulIf","src":"471:53:124"},{"nodeType":"YulAssignment","src":"533:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"556:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"543:12:124"},"nodeType":"YulFunctionCall","src":"543:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"533:6:124"}]},{"nodeType":"YulAssignment","src":"575:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"602:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"613:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"598:3:124"},"nodeType":"YulFunctionCall","src":"598:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"585:12:124"},"nodeType":"YulFunctionCall","src":"585:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"575:6:124"}]},{"nodeType":"YulAssignment","src":"626:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"653:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"664:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:124"},"nodeType":"YulFunctionCall","src":"649:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"636:12:124"},"nodeType":"YulFunctionCall","src":"636:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"626:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"677:45:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"707:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"718:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"703:3:124"},"nodeType":"YulFunctionCall","src":"703:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"690:12:124"},"nodeType":"YulFunctionCall","src":"690:32:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"681:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"756:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"731:24:124"},"nodeType":"YulFunctionCall","src":"731:31:124"},"nodeType":"YulExpressionStatement","src":"731:31:124"},{"nodeType":"YulAssignment","src":"771:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"781:5:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"771:6:124"}]},{"nodeType":"YulAssignment","src":"795:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"833:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"818:3:124"},"nodeType":"YulFunctionCall","src":"818:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"805:12:124"},"nodeType":"YulFunctionCall","src":"805:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"795:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"847:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"879:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"890:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"875:3:124"},"nodeType":"YulFunctionCall","src":"875:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"862:12:124"},"nodeType":"YulFunctionCall","src":"862:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"851:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"929:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"904:24:124"},"nodeType":"YulFunctionCall","src":"904:33:124"},"nodeType":"YulExpressionStatement","src":"904:33:124"},{"nodeType":"YulAssignment","src":"946:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"956:7:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"946:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"972:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1004:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1015:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1000:3:124"},"nodeType":"YulFunctionCall","src":"1000:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"987:12:124"},"nodeType":"YulFunctionCall","src":"987:33:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"976:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1074:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1083:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1086:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1076:6:124"},"nodeType":"YulFunctionCall","src":"1076:12:124"},"nodeType":"YulExpressionStatement","src":"1076:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"1042:7:124"},{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"1055:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"1064:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1051:3:124"},"nodeType":"YulFunctionCall","src":"1051:20:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1039:2:124"},"nodeType":"YulFunctionCall","src":"1039:33:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1032:6:124"},"nodeType":"YulFunctionCall","src":"1032:41:124"},"nodeType":"YulIf","src":"1029:61:124"},{"nodeType":"YulAssignment","src":"1099:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"1109:7:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1099:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"379:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"390:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"402:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"410:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"418:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"426:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"434:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"442:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"450:6:124","type":""}],"src":"173:949:124"},{"body":{"nodeType":"YulBlock","src":"1296:383:124","statements":[{"body":{"nodeType":"YulBlock","src":"1343:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1352:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1355:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1345:6:124"},"nodeType":"YulFunctionCall","src":"1345:12:124"},"nodeType":"YulExpressionStatement","src":"1345:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1317:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1326:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1313:3:124"},"nodeType":"YulFunctionCall","src":"1313:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1338:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1309:3:124"},"nodeType":"YulFunctionCall","src":"1309:33:124"},"nodeType":"YulIf","src":"1306:53:124"},{"nodeType":"YulAssignment","src":"1368:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1391:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1378:12:124"},"nodeType":"YulFunctionCall","src":"1378:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1368:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1410:45:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1440:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1451:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1436:3:124"},"nodeType":"YulFunctionCall","src":"1436:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1423:12:124"},"nodeType":"YulFunctionCall","src":"1423:32:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1414:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1489:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1464:24:124"},"nodeType":"YulFunctionCall","src":"1464:31:124"},"nodeType":"YulExpressionStatement","src":"1464:31:124"},{"nodeType":"YulAssignment","src":"1504:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1514:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1504:6:124"}]},{"nodeType":"YulAssignment","src":"1528:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1555:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1566:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1551:3:124"},"nodeType":"YulFunctionCall","src":"1551:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1538:12:124"},"nodeType":"YulFunctionCall","src":"1538:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1528:6:124"}]},{"nodeType":"YulAssignment","src":"1579:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1606:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1617:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1602:3:124"},"nodeType":"YulFunctionCall","src":"1602:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1589:12:124"},"nodeType":"YulFunctionCall","src":"1589:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1579:6:124"}]},{"nodeType":"YulAssignment","src":"1630:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1657:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1668:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1653:3:124"},"nodeType":"YulFunctionCall","src":"1653:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1640:12:124"},"nodeType":"YulFunctionCall","src":"1640:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1630:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1230:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1241:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1253:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1261:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1269:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1277:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1285:6:124","type":""}],"src":"1127:552:124"},{"body":{"nodeType":"YulBlock","src":"1793:76:124","statements":[{"nodeType":"YulAssignment","src":"1803:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1815:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1826:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1811:3:124"},"nodeType":"YulFunctionCall","src":"1811:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1803:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1845:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1856:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1838:6:124"},"nodeType":"YulFunctionCall","src":"1838:25:124"},"nodeType":"YulExpressionStatement","src":"1838:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1762:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1773:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1784:4:124","type":""}],"src":"1684:185:124"},{"body":{"nodeType":"YulBlock","src":"1906:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1916:6:124"},"nodeType":"YulFunctionCall","src":"1916:88:124"},"nodeType":"YulExpressionStatement","src":"1916:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2020:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2023:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2013:6:124"},"nodeType":"YulFunctionCall","src":"2013:15:124"},"nodeType":"YulExpressionStatement","src":"2013:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2044:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2047:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2037:6:124"},"nodeType":"YulFunctionCall","src":"2037:15:124"},"nodeType":"YulExpressionStatement","src":"2037:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"1874:184:124"},{"body":{"nodeType":"YulBlock","src":"2111:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2121:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2131:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2125:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2174:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2189:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2192:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2185:3:124"},"nodeType":"YulFunctionCall","src":"2185:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"2178:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2204:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2219:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2222:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2215:3:124"},"nodeType":"YulFunctionCall","src":"2215:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"2208:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2259:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2261:16:124"},"nodeType":"YulFunctionCall","src":"2261:18:124"},"nodeType":"YulExpressionStatement","src":"2261:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"2240:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2249:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"2253:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2245:3:124"},"nodeType":"YulFunctionCall","src":"2245:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2237:2:124"},"nodeType":"YulFunctionCall","src":"2237:21:124"},"nodeType":"YulIf","src":"2234:47:124"},{"nodeType":"YulAssignment","src":"2290:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"2301:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"2306:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2297:3:124"},"nodeType":"YulFunctionCall","src":"2297:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2290:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2094:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"2097:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2103:3:124","type":""}],"src":"2063:253:124"},{"body":{"nodeType":"YulBlock","src":"2385:418:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2395:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2410:1:124","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"2399:7:124","type":""}]},{"nodeType":"YulAssignment","src":"2420:16:124","value":{"name":"power_1","nodeType":"YulIdentifier","src":"2429:7:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"2420:5:124"}]},{"nodeType":"YulAssignment","src":"2445:13:124","value":{"name":"_base","nodeType":"YulIdentifier","src":"2453:5:124"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"2445:4:124"}]},{"body":{"nodeType":"YulBlock","src":"2509:288:124","statements":[{"body":{"nodeType":"YulBlock","src":"2614:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2616:16:124"},"nodeType":"YulFunctionCall","src":"2616:18:124"},"nodeType":"YulExpressionStatement","src":"2616:18:124"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"2529:4:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2539:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"2607:4:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2535:3:124"},"nodeType":"YulFunctionCall","src":"2535:77:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2526:2:124"},"nodeType":"YulFunctionCall","src":"2526:87:124"},"nodeType":"YulIf","src":"2523:113:124"},{"body":{"nodeType":"YulBlock","src":"2675:29:124","statements":[{"nodeType":"YulAssignment","src":"2677:25:124","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"2690:5:124"},{"name":"base","nodeType":"YulIdentifier","src":"2697:4:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2686:3:124"},"nodeType":"YulFunctionCall","src":"2686:16:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"2677:5:124"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"2656:8:124"},{"name":"power_1","nodeType":"YulIdentifier","src":"2666:7:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2652:3:124"},"nodeType":"YulFunctionCall","src":"2652:22:124"},"nodeType":"YulIf","src":"2649:55:124"},{"nodeType":"YulAssignment","src":"2717:23:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"2729:4:124"},{"name":"base","nodeType":"YulIdentifier","src":"2735:4:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2725:3:124"},"nodeType":"YulFunctionCall","src":"2725:15:124"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"2717:4:124"}]},{"nodeType":"YulAssignment","src":"2753:34:124","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"2769:7:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"2778:8:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2765:3:124"},"nodeType":"YulFunctionCall","src":"2765:22:124"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"2753:8:124"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"2478:8:124"},{"name":"power_1","nodeType":"YulIdentifier","src":"2488:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2475:2:124"},"nodeType":"YulFunctionCall","src":"2475:21:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2497:3:124","statements":[]},"pre":{"nodeType":"YulBlock","src":"2471:3:124","statements":[]},"src":"2467:330:124"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"2349:5:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"2356:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"2369:5:124","type":""},{"name":"base","nodeType":"YulTypedName","src":"2376:4:124","type":""}],"src":"2321:482:124"},{"body":{"nodeType":"YulBlock","src":"2867:807:124","statements":[{"body":{"nodeType":"YulBlock","src":"2905:52:124","statements":[{"nodeType":"YulAssignment","src":"2919:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2928:1:124","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"2919:5:124"}]},{"nodeType":"YulLeave","src":"2942:5:124"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"2887:8:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2880:6:124"},"nodeType":"YulFunctionCall","src":"2880:16:124"},"nodeType":"YulIf","src":"2877:80:124"},{"body":{"nodeType":"YulBlock","src":"2990:52:124","statements":[{"nodeType":"YulAssignment","src":"3004:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3013:1:124","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3004:5:124"}]},{"nodeType":"YulLeave","src":"3027:5:124"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"2976:4:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2969:6:124"},"nodeType":"YulFunctionCall","src":"2969:12:124"},"nodeType":"YulIf","src":"2966:76:124"},{"cases":[{"body":{"nodeType":"YulBlock","src":"3078:52:124","statements":[{"nodeType":"YulAssignment","src":"3092:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3101:1:124","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3092:5:124"}]},{"nodeType":"YulLeave","src":"3115:5:124"}]},"nodeType":"YulCase","src":"3071:59:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3076:1:124","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"3146:123:124","statements":[{"body":{"nodeType":"YulBlock","src":"3181:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3183:16:124"},"nodeType":"YulFunctionCall","src":"3183:18:124"},"nodeType":"YulExpressionStatement","src":"3183:18:124"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3166:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"3176:3:124","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3163:2:124"},"nodeType":"YulFunctionCall","src":"3163:17:124"},"nodeType":"YulIf","src":"3160:43:124"},{"nodeType":"YulAssignment","src":"3216:25:124","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3229:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"3239:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3225:3:124"},"nodeType":"YulFunctionCall","src":"3225:16:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3216:5:124"}]},{"nodeType":"YulLeave","src":"3254:5:124"}]},"nodeType":"YulCase","src":"3139:130:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3144:1:124","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"3058:4:124"},"nodeType":"YulSwitch","src":"3051:218:124"},{"body":{"nodeType":"YulBlock","src":"3367:70:124","statements":[{"nodeType":"YulAssignment","src":"3381:28:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3394:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"3400:8:124"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"3390:3:124"},"nodeType":"YulFunctionCall","src":"3390:19:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3381:5:124"}]},{"nodeType":"YulLeave","src":"3422:5:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3291:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"3297:2:124","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3288:2:124"},"nodeType":"YulFunctionCall","src":"3288:12:124"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3305:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"3315:2:124","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3302:2:124"},"nodeType":"YulFunctionCall","src":"3302:16:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3284:3:124"},"nodeType":"YulFunctionCall","src":"3284:35:124"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3328:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"3334:3:124","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3325:2:124"},"nodeType":"YulFunctionCall","src":"3325:13:124"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3343:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"3353:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3340:2:124"},"nodeType":"YulFunctionCall","src":"3340:16:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3321:3:124"},"nodeType":"YulFunctionCall","src":"3321:36:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3281:2:124"},"nodeType":"YulFunctionCall","src":"3281:77:124"},"nodeType":"YulIf","src":"3278:159:124"},{"nodeType":"YulVariableDeclaration","src":"3446:57:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3488:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"3494:8:124"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"3469:18:124"},"nodeType":"YulFunctionCall","src":"3469:34:124"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"3450:7:124","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"3459:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3608:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3610:16:124"},"nodeType":"YulFunctionCall","src":"3610:18:124"},"nodeType":"YulExpressionStatement","src":"3610:18:124"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"3518:7:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3531:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"3599:6:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3527:3:124"},"nodeType":"YulFunctionCall","src":"3527:79:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3515:2:124"},"nodeType":"YulFunctionCall","src":"3515:92:124"},"nodeType":"YulIf","src":"3512:118:124"},{"nodeType":"YulAssignment","src":"3639:29:124","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"3652:7:124"},{"name":"base_1","nodeType":"YulIdentifier","src":"3661:6:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3648:3:124"},"nodeType":"YulFunctionCall","src":"3648:20:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3639:5:124"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"2838:4:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"2844:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"2857:5:124","type":""}],"src":"2808:866:124"},{"body":{"nodeType":"YulBlock","src":"3749:61:124","statements":[{"nodeType":"YulAssignment","src":"3759:45:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3789:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"3795:8:124"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"3768:20:124"},"nodeType":"YulFunctionCall","src":"3768:36:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3759:5:124"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"3720:4:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"3726:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"3739:5:124","type":""}],"src":"3679:131:124"},{"body":{"nodeType":"YulBlock","src":"3867:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"3986:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3988:16:124"},"nodeType":"YulFunctionCall","src":"3988:18:124"},"nodeType":"YulExpressionStatement","src":"3988:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3898:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3891:6:124"},"nodeType":"YulFunctionCall","src":"3891:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3884:6:124"},"nodeType":"YulFunctionCall","src":"3884:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3906:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3913:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"3981:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3909:3:124"},"nodeType":"YulFunctionCall","src":"3909:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3903:2:124"},"nodeType":"YulFunctionCall","src":"3903:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3880:3:124"},"nodeType":"YulFunctionCall","src":"3880:105:124"},"nodeType":"YulIf","src":"3877:131:124"},{"nodeType":"YulAssignment","src":"4017:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4032:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"4035:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4028:3:124"},"nodeType":"YulFunctionCall","src":"4028:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"4017:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3846:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3849:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"3855:7:124","type":""}],"src":"3815:228:124"},{"body":{"nodeType":"YulBlock","src":"4169:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"4179:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4189:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4183:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4207:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4218:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4200:6:124"},"nodeType":"YulFunctionCall","src":"4200:21:124"},"nodeType":"YulExpressionStatement","src":"4200:21:124"},{"nodeType":"YulVariableDeclaration","src":"4230:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4250:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4244:5:124"},"nodeType":"YulFunctionCall","src":"4244:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4234:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4277:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4288:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4273:3:124"},"nodeType":"YulFunctionCall","src":"4273:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"4293:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4266:6:124"},"nodeType":"YulFunctionCall","src":"4266:34:124"},"nodeType":"YulExpressionStatement","src":"4266:34:124"},{"nodeType":"YulVariableDeclaration","src":"4309:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4318:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4313:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4378:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4407:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"4418:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4403:3:124"},"nodeType":"YulFunctionCall","src":"4403:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"4422:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4399:3:124"},"nodeType":"YulFunctionCall","src":"4399:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4441:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"4449:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4437:3:124"},"nodeType":"YulFunctionCall","src":"4437:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4453:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4433:3:124"},"nodeType":"YulFunctionCall","src":"4433:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4427:5:124"},"nodeType":"YulFunctionCall","src":"4427:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4392:6:124"},"nodeType":"YulFunctionCall","src":"4392:66:124"},"nodeType":"YulExpressionStatement","src":"4392:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4339:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"4342:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4336:2:124"},"nodeType":"YulFunctionCall","src":"4336:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4350:19:124","statements":[{"nodeType":"YulAssignment","src":"4352:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4361:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4364:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4357:3:124"},"nodeType":"YulFunctionCall","src":"4357:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4352:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"4332:3:124","statements":[]},"src":"4328:140:124"},{"body":{"nodeType":"YulBlock","src":"4502:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4531:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"4542:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4527:3:124"},"nodeType":"YulFunctionCall","src":"4527:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"4551:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4523:3:124"},"nodeType":"YulFunctionCall","src":"4523:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"4556:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4516:6:124"},"nodeType":"YulFunctionCall","src":"4516:42:124"},"nodeType":"YulExpressionStatement","src":"4516:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4483:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"4486:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4480:2:124"},"nodeType":"YulFunctionCall","src":"4480:13:124"},"nodeType":"YulIf","src":"4477:91:124"},{"nodeType":"YulAssignment","src":"4577:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4593:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4612:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4620:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4608:3:124"},"nodeType":"YulFunctionCall","src":"4608:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"4625:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4604:3:124"},"nodeType":"YulFunctionCall","src":"4604:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4589:3:124"},"nodeType":"YulFunctionCall","src":"4589:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"4695:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4585:3:124"},"nodeType":"YulFunctionCall","src":"4585:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4577:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4138:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4149:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4160:4:124","type":""}],"src":"4048:656:124"},{"body":{"nodeType":"YulBlock","src":"4894:285:124","statements":[{"nodeType":"YulAssignment","src":"4904:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4916:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4927:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4912:3:124"},"nodeType":"YulFunctionCall","src":"4912:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4904:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"4940:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4950:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4944:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5008:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5023:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5031:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5019:3:124"},"nodeType":"YulFunctionCall","src":"5019:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5001:6:124"},"nodeType":"YulFunctionCall","src":"5001:34:124"},"nodeType":"YulExpressionStatement","src":"5001:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5055:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5066:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5051:3:124"},"nodeType":"YulFunctionCall","src":"5051:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5075:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5083:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5071:3:124"},"nodeType":"YulFunctionCall","src":"5071:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5044:6:124"},"nodeType":"YulFunctionCall","src":"5044:43:124"},"nodeType":"YulExpressionStatement","src":"5044:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5107:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5118:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5103:3:124"},"nodeType":"YulFunctionCall","src":"5103:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"5123:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5096:6:124"},"nodeType":"YulFunctionCall","src":"5096:34:124"},"nodeType":"YulExpressionStatement","src":"5096:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5150:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5161:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5146:3:124"},"nodeType":"YulFunctionCall","src":"5146:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"5166:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5139:6:124"},"nodeType":"YulFunctionCall","src":"5139:34:124"},"nodeType":"YulExpressionStatement","src":"5139:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4839:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4850:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4858:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4866:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4874:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4885:4:124","type":""}],"src":"4709:470:124"},{"body":{"nodeType":"YulBlock","src":"5262:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"5308:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5317:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5320:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5310:6:124"},"nodeType":"YulFunctionCall","src":"5310:12:124"},"nodeType":"YulExpressionStatement","src":"5310:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5283:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5292:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5279:3:124"},"nodeType":"YulFunctionCall","src":"5279:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5304:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5275:3:124"},"nodeType":"YulFunctionCall","src":"5275:32:124"},"nodeType":"YulIf","src":"5272:52:124"},{"nodeType":"YulVariableDeclaration","src":"5333:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5352:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5346:5:124"},"nodeType":"YulFunctionCall","src":"5346:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5337:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5415:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5424:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5427:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5417:6:124"},"nodeType":"YulFunctionCall","src":"5417:12:124"},"nodeType":"YulExpressionStatement","src":"5417:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5384:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5405:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5398:6:124"},"nodeType":"YulFunctionCall","src":"5398:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5391:6:124"},"nodeType":"YulFunctionCall","src":"5391:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5381:2:124"},"nodeType":"YulFunctionCall","src":"5381:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5374:6:124"},"nodeType":"YulFunctionCall","src":"5374:40:124"},"nodeType":"YulIf","src":"5371:60:124"},{"nodeType":"YulAssignment","src":"5440:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5450:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5440:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5228:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5239:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5251:6:124","type":""}],"src":"5184:277:124"},{"body":{"nodeType":"YulBlock","src":"5595:168:124","statements":[{"nodeType":"YulAssignment","src":"5605:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5617:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5628:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5613:3:124"},"nodeType":"YulFunctionCall","src":"5613:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5605:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5647:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5662:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5670:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5658:3:124"},"nodeType":"YulFunctionCall","src":"5658:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5640:6:124"},"nodeType":"YulFunctionCall","src":"5640:74:124"},"nodeType":"YulExpressionStatement","src":"5640:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5734:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5745:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5730:3:124"},"nodeType":"YulFunctionCall","src":"5730:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"5750:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5723:6:124"},"nodeType":"YulFunctionCall","src":"5723:34:124"},"nodeType":"YulExpressionStatement","src":"5723:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5556:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5567:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5575:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5586:4:124","type":""}],"src":"5466:297:124"},{"body":{"nodeType":"YulBlock","src":"5817:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"5839:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5841:16:124"},"nodeType":"YulFunctionCall","src":"5841:18:124"},"nodeType":"YulExpressionStatement","src":"5841:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5833:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"5836:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5830:2:124"},"nodeType":"YulFunctionCall","src":"5830:8:124"},"nodeType":"YulIf","src":"5827:34:124"},{"nodeType":"YulAssignment","src":"5870:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5882:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"5885:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5878:3:124"},"nodeType":"YulFunctionCall","src":"5878:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"5870:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5799:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"5802:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"5808:4:124","type":""}],"src":"5768:125:124"},{"body":{"nodeType":"YulBlock","src":"5946:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"5973:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5975:16:124"},"nodeType":"YulFunctionCall","src":"5975:18:124"},"nodeType":"YulExpressionStatement","src":"5975:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5962:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5969:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"5965:3:124"},"nodeType":"YulFunctionCall","src":"5965:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5959:2:124"},"nodeType":"YulFunctionCall","src":"5959:13:124"},"nodeType":"YulIf","src":"5956:39:124"},{"nodeType":"YulAssignment","src":"6004:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6015:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"6018:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6011:3:124"},"nodeType":"YulFunctionCall","src":"6011:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"6004:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5929:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"5932:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"5938:3:124","type":""}],"src":"5898:128:124"},{"body":{"nodeType":"YulBlock","src":"6112:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"6158:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6167:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6170:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6160:6:124"},"nodeType":"YulFunctionCall","src":"6160:12:124"},"nodeType":"YulExpressionStatement","src":"6160:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6133:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6142:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6129:3:124"},"nodeType":"YulFunctionCall","src":"6129:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6154:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6125:3:124"},"nodeType":"YulFunctionCall","src":"6125:32:124"},"nodeType":"YulIf","src":"6122:52:124"},{"nodeType":"YulAssignment","src":"6183:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6199:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6193:5:124"},"nodeType":"YulFunctionCall","src":"6193:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6183:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6078:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6089:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6101:6:124","type":""}],"src":"6031:184:124"},{"body":{"nodeType":"YulBlock","src":"6269:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"6279:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6289:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6283:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6332:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6347:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6350:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6343:3:124"},"nodeType":"YulFunctionCall","src":"6343:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"6336:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6362:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6377:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6380:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6373:3:124"},"nodeType":"YulFunctionCall","src":"6373:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"6366:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6408:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6410:16:124"},"nodeType":"YulFunctionCall","src":"6410:18:124"},"nodeType":"YulExpressionStatement","src":"6410:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"6398:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"6403:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6395:2:124"},"nodeType":"YulFunctionCall","src":"6395:12:124"},"nodeType":"YulIf","src":"6392:38:124"},{"nodeType":"YulAssignment","src":"6439:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"6451:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"6456:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6447:3:124"},"nodeType":"YulFunctionCall","src":"6447:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"6439:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6251:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"6254:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"6260:4:124","type":""}],"src":"6220:246:124"},{"body":{"nodeType":"YulBlock","src":"6600:119:124","statements":[{"nodeType":"YulAssignment","src":"6610:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6622:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6633:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6618:3:124"},"nodeType":"YulFunctionCall","src":"6618:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6610:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6652:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"6663:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6645:6:124"},"nodeType":"YulFunctionCall","src":"6645:25:124"},"nodeType":"YulExpressionStatement","src":"6645:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6690:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6701:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6686:3:124"},"nodeType":"YulFunctionCall","src":"6686:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"6706:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6679:6:124"},"nodeType":"YulFunctionCall","src":"6679:34:124"},"nodeType":"YulExpressionStatement","src":"6679:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6561:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6572:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6580:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6591:4:124","type":""}],"src":"6471:248:124"},{"body":{"nodeType":"YulBlock","src":"6855:335:124","statements":[{"body":{"nodeType":"YulBlock","src":"6902:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6911:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6914:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6904:6:124"},"nodeType":"YulFunctionCall","src":"6904:12:124"},"nodeType":"YulExpressionStatement","src":"6904:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6876:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6885:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6872:3:124"},"nodeType":"YulFunctionCall","src":"6872:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6897:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6868:3:124"},"nodeType":"YulFunctionCall","src":"6868:33:124"},"nodeType":"YulIf","src":"6865:53:124"},{"nodeType":"YulAssignment","src":"6927:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6943:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6937:5:124"},"nodeType":"YulFunctionCall","src":"6937:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6927:6:124"}]},{"nodeType":"YulAssignment","src":"6962:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6982:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6993:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6978:3:124"},"nodeType":"YulFunctionCall","src":"6978:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6972:5:124"},"nodeType":"YulFunctionCall","src":"6972:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6962:6:124"}]},{"nodeType":"YulAssignment","src":"7006:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7026:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7037:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7022:3:124"},"nodeType":"YulFunctionCall","src":"7022:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7016:5:124"},"nodeType":"YulFunctionCall","src":"7016:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7006:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7050:38:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7073:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7084:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7069:3:124"},"nodeType":"YulFunctionCall","src":"7069:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7063:5:124"},"nodeType":"YulFunctionCall","src":"7063:25:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7054:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7144:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7153:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7156:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7146:6:124"},"nodeType":"YulFunctionCall","src":"7146:12:124"},"nodeType":"YulExpressionStatement","src":"7146:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7110:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7121:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7128:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7117:3:124"},"nodeType":"YulFunctionCall","src":"7117:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7107:2:124"},"nodeType":"YulFunctionCall","src":"7107:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7100:6:124"},"nodeType":"YulFunctionCall","src":"7100:43:124"},"nodeType":"YulIf","src":"7097:63:124"},{"nodeType":"YulAssignment","src":"7169:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7179:5:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7169:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6797:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6808:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6820:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6828:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6836:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6844:6:124","type":""}],"src":"6724:466:124"},{"body":{"nodeType":"YulBlock","src":"7369:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7386:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7397:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7379:6:124"},"nodeType":"YulFunctionCall","src":"7379:21:124"},"nodeType":"YulExpressionStatement","src":"7379:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7420:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7431:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7416:3:124"},"nodeType":"YulFunctionCall","src":"7416:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"7436:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7409:6:124"},"nodeType":"YulFunctionCall","src":"7409:30:124"},"nodeType":"YulExpressionStatement","src":"7409:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7459:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7470:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7455:3:124"},"nodeType":"YulFunctionCall","src":"7455:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"7475:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7448:6:124"},"nodeType":"YulFunctionCall","src":"7448:62:124"},"nodeType":"YulExpressionStatement","src":"7448:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7530:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7541:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7526:3:124"},"nodeType":"YulFunctionCall","src":"7526:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"7546:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7519:6:124"},"nodeType":"YulFunctionCall","src":"7519:37:124"},"nodeType":"YulExpressionStatement","src":"7519:37:124"},{"nodeType":"YulAssignment","src":"7565:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7577:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7588:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7573:3:124"},"nodeType":"YulFunctionCall","src":"7573:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7565:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7346:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7360:4:124","type":""}],"src":"7195:403:124"},{"body":{"nodeType":"YulBlock","src":"7798:729:124","statements":[{"nodeType":"YulAssignment","src":"7808:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7820:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7831:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7816:3:124"},"nodeType":"YulFunctionCall","src":"7816:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7808:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7851:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7868:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7862:5:124"},"nodeType":"YulFunctionCall","src":"7862:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7844:6:124"},"nodeType":"YulFunctionCall","src":"7844:32:124"},"nodeType":"YulExpressionStatement","src":"7844:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7896:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7907:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7892:3:124"},"nodeType":"YulFunctionCall","src":"7892:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7924:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7932:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7920:3:124"},"nodeType":"YulFunctionCall","src":"7920:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7914:5:124"},"nodeType":"YulFunctionCall","src":"7914:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7885:6:124"},"nodeType":"YulFunctionCall","src":"7885:54:124"},"nodeType":"YulExpressionStatement","src":"7885:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7959:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7970:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7955:3:124"},"nodeType":"YulFunctionCall","src":"7955:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7987:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7995:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7983:3:124"},"nodeType":"YulFunctionCall","src":"7983:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7977:5:124"},"nodeType":"YulFunctionCall","src":"7977:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7948:6:124"},"nodeType":"YulFunctionCall","src":"7948:54:124"},"nodeType":"YulExpressionStatement","src":"7948:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8022:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8033:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8018:3:124"},"nodeType":"YulFunctionCall","src":"8018:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8050:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8058:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8046:3:124"},"nodeType":"YulFunctionCall","src":"8046:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8040:5:124"},"nodeType":"YulFunctionCall","src":"8040:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8011:6:124"},"nodeType":"YulFunctionCall","src":"8011:54:124"},"nodeType":"YulExpressionStatement","src":"8011:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8085:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8096:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8081:3:124"},"nodeType":"YulFunctionCall","src":"8081:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8113:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8121:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8109:3:124"},"nodeType":"YulFunctionCall","src":"8109:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8103:5:124"},"nodeType":"YulFunctionCall","src":"8103:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8074:6:124"},"nodeType":"YulFunctionCall","src":"8074:54:124"},"nodeType":"YulExpressionStatement","src":"8074:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8148:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8159:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8144:3:124"},"nodeType":"YulFunctionCall","src":"8144:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8184:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8172:3:124"},"nodeType":"YulFunctionCall","src":"8172:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8166:5:124"},"nodeType":"YulFunctionCall","src":"8166:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8137:6:124"},"nodeType":"YulFunctionCall","src":"8137:54:124"},"nodeType":"YulExpressionStatement","src":"8137:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8211:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8222:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8207:3:124"},"nodeType":"YulFunctionCall","src":"8207:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8239:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8247:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8235:3:124"},"nodeType":"YulFunctionCall","src":"8235:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8229:5:124"},"nodeType":"YulFunctionCall","src":"8229:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8200:6:124"},"nodeType":"YulFunctionCall","src":"8200:54:124"},"nodeType":"YulExpressionStatement","src":"8200:54:124"},{"nodeType":"YulVariableDeclaration","src":"8263:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8293:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8301:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8289:3:124"},"nodeType":"YulFunctionCall","src":"8289:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8283:5:124"},"nodeType":"YulFunctionCall","src":"8283:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"8267:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8316:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8326:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8320:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8388:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8384:3:124"},"nodeType":"YulFunctionCall","src":"8384:20:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"8410:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8424:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8406:3:124"},"nodeType":"YulFunctionCall","src":"8406:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8377:6:124"},"nodeType":"YulFunctionCall","src":"8377:51:124"},"nodeType":"YulExpressionStatement","src":"8377:51:124"},{"nodeType":"YulVariableDeclaration","src":"8437:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8447:6:124","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8441:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8473:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"8484:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8469:3:124"},"nodeType":"YulFunctionCall","src":"8469:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8503:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"8511:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8499:3:124"},"nodeType":"YulFunctionCall","src":"8499:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8493:5:124"},"nodeType":"YulFunctionCall","src":"8493:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8517:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8489:3:124"},"nodeType":"YulFunctionCall","src":"8489:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8462:6:124"},"nodeType":"YulFunctionCall","src":"8462:59:124"},"nodeType":"YulExpressionStatement","src":"8462:59:124"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7767:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7778:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7789:4:124","type":""}],"src":"7603:924:124"},{"body":{"nodeType":"YulBlock","src":"8647:191:124","statements":[{"body":{"nodeType":"YulBlock","src":"8693:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8702:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8705:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8695:6:124"},"nodeType":"YulFunctionCall","src":"8695:12:124"},"nodeType":"YulExpressionStatement","src":"8695:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8668:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8677:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8664:3:124"},"nodeType":"YulFunctionCall","src":"8664:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8689:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8660:3:124"},"nodeType":"YulFunctionCall","src":"8660:32:124"},"nodeType":"YulIf","src":"8657:52:124"},{"nodeType":"YulAssignment","src":"8718:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8734:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8728:5:124"},"nodeType":"YulFunctionCall","src":"8728:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8718:6:124"}]},{"nodeType":"YulAssignment","src":"8753:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8773:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8784:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8769:3:124"},"nodeType":"YulFunctionCall","src":"8769:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8763:5:124"},"nodeType":"YulFunctionCall","src":"8763:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8753:6:124"}]},{"nodeType":"YulAssignment","src":"8797:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8817:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8828:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8813:3:124"},"nodeType":"YulFunctionCall","src":"8813:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8807:5:124"},"nodeType":"YulFunctionCall","src":"8807:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8797:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8597:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8608:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8620:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8628:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8636:6:124","type":""}],"src":"8532:306:124"},{"body":{"nodeType":"YulBlock","src":"9056:250:124","statements":[{"nodeType":"YulAssignment","src":"9066:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9078:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9089:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9074:3:124"},"nodeType":"YulFunctionCall","src":"9074:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9066:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9109:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"9120:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9102:6:124"},"nodeType":"YulFunctionCall","src":"9102:25:124"},"nodeType":"YulExpressionStatement","src":"9102:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9147:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9158:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9143:3:124"},"nodeType":"YulFunctionCall","src":"9143:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"9163:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9136:6:124"},"nodeType":"YulFunctionCall","src":"9136:34:124"},"nodeType":"YulExpressionStatement","src":"9136:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9190:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9201:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9186:3:124"},"nodeType":"YulFunctionCall","src":"9186:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"9206:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9179:6:124"},"nodeType":"YulFunctionCall","src":"9179:34:124"},"nodeType":"YulExpressionStatement","src":"9179:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9233:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9244:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9229:3:124"},"nodeType":"YulFunctionCall","src":"9229:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"9249:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9222:6:124"},"nodeType":"YulFunctionCall","src":"9222:34:124"},"nodeType":"YulExpressionStatement","src":"9222:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9276:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9287:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9272:3:124"},"nodeType":"YulFunctionCall","src":"9272:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"9293:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9265:6:124"},"nodeType":"YulFunctionCall","src":"9265:35:124"},"nodeType":"YulExpressionStatement","src":"9265:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8993:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9004:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9012:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9020:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9028:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9036:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9047:4:124","type":""}],"src":"8843:463:124"},{"body":{"nodeType":"YulBlock","src":"9406:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"9452:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9461:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9464:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9454:6:124"},"nodeType":"YulFunctionCall","src":"9454:12:124"},"nodeType":"YulExpressionStatement","src":"9454:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9427:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9436:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9423:3:124"},"nodeType":"YulFunctionCall","src":"9423:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9448:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9419:3:124"},"nodeType":"YulFunctionCall","src":"9419:32:124"},"nodeType":"YulIf","src":"9416:52:124"},{"nodeType":"YulVariableDeclaration","src":"9477:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9496:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9490:5:124"},"nodeType":"YulFunctionCall","src":"9490:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9481:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9540:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9515:24:124"},"nodeType":"YulFunctionCall","src":"9515:31:124"},"nodeType":"YulExpressionStatement","src":"9515:31:124"},{"nodeType":"YulAssignment","src":"9555:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9565:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9555:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9372:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9383:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9395:6:124","type":""}],"src":"9311:265:124"},{"body":{"nodeType":"YulBlock","src":"9693:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"9739:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9748:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9751:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9741:6:124"},"nodeType":"YulFunctionCall","src":"9741:12:124"},"nodeType":"YulExpressionStatement","src":"9741:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9714:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9723:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9710:3:124"},"nodeType":"YulFunctionCall","src":"9710:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9735:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9706:3:124"},"nodeType":"YulFunctionCall","src":"9706:32:124"},"nodeType":"YulIf","src":"9703:52:124"},{"nodeType":"YulVariableDeclaration","src":"9764:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9783:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9777:5:124"},"nodeType":"YulFunctionCall","src":"9777:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9768:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9827:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9802:24:124"},"nodeType":"YulFunctionCall","src":"9802:31:124"},"nodeType":"YulExpressionStatement","src":"9802:31:124"},{"nodeType":"YulAssignment","src":"9842:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9852:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9842:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9659:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9670:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9682:6:124","type":""}],"src":"9581:282:124"},{"body":{"nodeType":"YulBlock","src":"9949:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"9995:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10004:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10007:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9997:6:124"},"nodeType":"YulFunctionCall","src":"9997:12:124"},"nodeType":"YulExpressionStatement","src":"9997:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9970:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9979:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9966:3:124"},"nodeType":"YulFunctionCall","src":"9966:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9991:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9962:3:124"},"nodeType":"YulFunctionCall","src":"9962:32:124"},"nodeType":"YulIf","src":"9959:52:124"},{"nodeType":"YulVariableDeclaration","src":"10020:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10039:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10033:5:124"},"nodeType":"YulFunctionCall","src":"10033:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10024:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10083:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10058:24:124"},"nodeType":"YulFunctionCall","src":"10058:31:124"},"nodeType":"YulExpressionStatement","src":"10058:31:124"},{"nodeType":"YulAssignment","src":"10098:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10108:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10098:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9915:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9926:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9938:6:124","type":""}],"src":"9868:251:124"},{"body":{"nodeType":"YulBlock","src":"10253:168:124","statements":[{"nodeType":"YulAssignment","src":"10263:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10275:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10286:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10271:3:124"},"nodeType":"YulFunctionCall","src":"10271:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10263:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10305:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"10316:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10298:6:124"},"nodeType":"YulFunctionCall","src":"10298:25:124"},"nodeType":"YulExpressionStatement","src":"10298:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10343:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10354:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10339:3:124"},"nodeType":"YulFunctionCall","src":"10339:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10363:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10371:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10359:3:124"},"nodeType":"YulFunctionCall","src":"10359:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10332:6:124"},"nodeType":"YulFunctionCall","src":"10332:83:124"},"nodeType":"YulExpressionStatement","src":"10332:83:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10214:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10225:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10233:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10244:4:124","type":""}],"src":"10124:297:124"},{"body":{"nodeType":"YulBlock","src":"10600:175:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10617:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10628:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10610:6:124"},"nodeType":"YulFunctionCall","src":"10610:21:124"},"nodeType":"YulExpressionStatement","src":"10610:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10651:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10662:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10647:3:124"},"nodeType":"YulFunctionCall","src":"10647:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"10667:2:124","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10640:6:124"},"nodeType":"YulFunctionCall","src":"10640:30:124"},"nodeType":"YulExpressionStatement","src":"10640:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10690:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10701:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10686:3:124"},"nodeType":"YulFunctionCall","src":"10686:18:124"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"10706:27:124","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10679:6:124"},"nodeType":"YulFunctionCall","src":"10679:55:124"},"nodeType":"YulExpressionStatement","src":"10679:55:124"},{"nodeType":"YulAssignment","src":"10743:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10755:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10766:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10751:3:124"},"nodeType":"YulFunctionCall","src":"10751:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10743:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10577:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10591:4:124","type":""}],"src":"10426:349:124"},{"body":{"nodeType":"YulBlock","src":"10812:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10829:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10832:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10822:6:124"},"nodeType":"YulFunctionCall","src":"10822:88:124"},"nodeType":"YulExpressionStatement","src":"10822:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10926:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10929:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10919:6:124"},"nodeType":"YulFunctionCall","src":"10919:15:124"},"nodeType":"YulExpressionStatement","src":"10919:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10950:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10953:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10943:6:124"},"nodeType":"YulFunctionCall","src":"10943:15:124"},"nodeType":"YulExpressionStatement","src":"10943:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"10780:184:124"},{"body":{"nodeType":"YulBlock","src":"11015:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"11046:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11067:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11070:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11060:6:124"},"nodeType":"YulFunctionCall","src":"11060:88:124"},"nodeType":"YulExpressionStatement","src":"11060:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11168:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11171:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11161:6:124"},"nodeType":"YulFunctionCall","src":"11161:15:124"},"nodeType":"YulExpressionStatement","src":"11161:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11196:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11199:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11189:6:124"},"nodeType":"YulFunctionCall","src":"11189:15:124"},"nodeType":"YulExpressionStatement","src":"11189:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11035:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11028:6:124"},"nodeType":"YulFunctionCall","src":"11028:9:124"},"nodeType":"YulIf","src":"11025:189:124"},{"nodeType":"YulAssignment","src":"11223:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11232:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11235:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"11228:3:124"},"nodeType":"YulFunctionCall","src":"11228:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"11223:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11000:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11003:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"11009:1:124","type":""}],"src":"10969:274:124"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value := calldataload(add(headStart, 96))\n        validator_revert_address(value)\n        value3 := value\n        value4 := calldataload(add(headStart, 128))\n        let value_1 := calldataload(add(headStart, 160))\n        validator_revert_address(value_1)\n        value5 := value_1\n        let value_2 := calldataload(add(headStart, 192))\n        if iszero(eq(value_2, and(value_2, 0xffff))) { revert(0, 0) }\n        value6 := value_2\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80630413c86f146100455780638e74324814610067575b600080fd5b81801561005157600080fd5b50610065610060366004611e11565b610099565b005b81801561007357600080fd5b50610087610082366004611e8a565b6103f7565b60405190815260200160405180910390f35b73ffffffffffffffffffffffffffffffffffffffff84166000908152602088905260408120906100c8826106ee565b90506100d48282610907565b6100df818387610992565b6101c08101515160b081901c640fffffffff169060301c60ff16600061010488610d2a565b60088601805460109061013e90849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790556fffffffffffffffffffffffffffffffff16905081600a6101949190612055565b61019e9084612061565b8111156040518060400160405280600281526020017f353200000000000000000000000000000000000000000000000000000000000081525090610218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b60405180910390fd5b5061022785858b600080610dd0565b6101e08401516101008501516040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8a81166024830152604482018c90526064820192909252600092919091169063b3f1c93d906084016020604051808303816000875af11580156102bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102df9190612111565b9050801561038c576102fe8d8d8d886101c00151896101e00151611111565b1561038c576003860154610332908c907501000000000000000000000000000000000000000000900461ffff166001611351565b8773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b60408051338152602081018b905261ffff89169173ffffffffffffffffffffffffffffffffffffffff808c1692908e16917ff25af37b3d3ec226063dc9bdc103ece7eb110a50f340fe854bb7bc1b0676d7d0910160405180910390a450505050505050505050505050565b600080610403876106ee565b905061040f8782610907565b600887015460009070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16861061047357600888015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16610475565b855b9050600061048386866113e8565b905060006104918288612133565b9050600061049f888561214a565b61010086015160088d0154919250610555916104cf916fffffffffffffffffffffffffffffffff9091169061142b565b866101e0015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190612162565b61054d919061214a565b8c9084611482565b61010086018190526105719061056c908590611522565b610d2a565b60088c0180546000906105979084906fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506105d684610d2a565b60088c01805460109061061090849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661217b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550610660858b8360008f610dd090949392919063ffffffff16565b6101e085015161068a9073ffffffffffffffffffffffffffffffffffffffff8c1690339084611561565b60408051858152602081018a9052339173ffffffffffffffffffffffffffffffffffffffff8d16917f281596e92b2d974beb7d4f124df30a0b39067b096893e95011ce4bdad798b759910160405180910390a3509193505050505b95945050505050565b6106f6611d3f565b6106fe611d3f565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f9190612162565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906121ac565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610936575050565b6109408282611643565b61094a8282611764565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b60408051808201909152600281527f32360000000000000000000000000000000000000000000000000000000000006020820152816109fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b506000806000610a55866101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9450505092509250826040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090610acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115610b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528215610ba8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b506101c08601515160741c640fffffffff16801580610cb257506101c08701515160301c60ff16610bda90600a612055565b610be49082612061565b85610ca58961010001518960080160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168b6101e0015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190612162565b610c9f919061214a565b9061142b565b610caf919061214a565b11155b6040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525090610d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5050505050505050565b60006fffffffffffffffffffffffffffffffff821115610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161020f565b5090565b610dfb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151610e0f9161142b565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991610f709190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb191906121f7565b60408401526020830152808252610fc790610d2a565b6001870180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055602081015161100a90610d2a565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161105b90610d2a565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b815160009060d41c64ffffffffff161561133b5760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190612225565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112049190612225565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112759190612225565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612111565b6113395760009150506106e5565b505b611347868686866118e4565b9695505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152608083106113c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b50600182811b81011b81156113da578354811784556113e2565b835481191684555b50505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761141d57600080fd5b506127109102611388010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761146057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600183015460009081906114ca906fffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce8000000610c956114bb88611981565b6114c488611981565b90611522565b90506114d581610d2a565b6001860180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905590505b9392505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561154657600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16115cc573d6000803e3d6000fd5b506115d68561199c565b61163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d00000000000000604482015260640161020f565b5050505050565b610160810151156116d3576000611664826101600151836102400151611a68565b905061167d8260e001518261142b90919063ffffffff16565b610100830181905261168e90610d2a565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b8051156117605760006116f0826101800151836102400151611aaf565b905061170a8261012001518261142b90919063ffffffff16565b610140830181905261171b90610d2a565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b61179d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a08201516117ac57505050565b61012082015182516117bd9161142b565b602082015261014082015182516117d39161142b565b604082015260608201516102608301516102408401516117fb92919064ffffffffff16611ab8565b6060820181905260408301516118109161142b565b80825260208201516080840151604084015161182c919061214a565b6118369190612133565b6118409190612133565b608082018190526101a083015161185791906113e8565b60a08201819052156118df5761188261056c8361010001518360a0015161152290919063ffffffff16565b6008840180546000906118a89084906fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b60006118f2825161ffff1690565b6118fe57506000611979565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1661193d57506001611979565b60408051602081019091528354815260009061195a908787611bff565b50509050801580156119755750825160d41c64ffffffffff16155b9150505b949350505050565b633b9aca00818102908104821461199757600080fd5b919050565b60006119dc565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611a1b5760208114611a5557611a167f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6119a3565b611a62565b823b611a4c57611a4c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146119a3565b60019150611a62565b3d6000803e600051151591505b50919050565b600080611a7c64ffffffffff841642612133565b611a869085612061565b6301e1338090049050611aa5816b033b2e3c9fd0803ce800000061214a565b9150505b92915050565b600061151b8383425b600080611acc64ffffffffff851684612133565b905080611ae8576b033b2e3c9fd0803ce800000091505061151b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611b1e576000611b23565b600285035b925066038882915c4000611b378a8061142b565b81611b4457611b44612242565b0491506301e13380611b56838b61142b565b81611b6357611b63612242565b049050600082611b738688612061565b611b7d9190612061565b60029004905060008285611b91888a612061565b611b9b9190612061565b611ba59190612061565b60069004905080826301e13380611bbc8a8f612061565b611bc69190612271565b611bdc906b033b2e3c9fd0803ce800000061214a565b611be6919061214a565b611bf0919061214a565b9b9a5050505050505050505050565b6000806000611c0d86611cb7565b15611ca4576000611c3e877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa611cfb565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015611ca057600195509093509150611cae9050565b5050505b5060009150819050805b93509350939050565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa16801580159061151b5750611cf3600182612133565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156106e557600101611d2a565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001611dc36040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b73ffffffffffffffffffffffffffffffffffffffff81168114611e0e57600080fd5b50565b600080600080600080600060e0888a031215611e2c57600080fd5b8735965060208801359550604088013594506060880135611e4c81611dec565b93506080880135925060a0880135611e6381611dec565b915060c088013561ffff81168114611e7a57600080fd5b8091505092959891949750929550565b600080600080600060a08688031215611ea257600080fd5b853594506020860135611eb481611dec565b94979496505050506040830135926060810135926080909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006fffffffffffffffffffffffffffffffff808316818516808303821115611f2c57611f2c611ed2565b01949350505050565b600181815b80851115611f8e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611f7457611f74611ed2565b80851615611f8157918102915b93841c9390800290611f3a565b509250929050565b600082611fa557506001611aa9565b81611fb257506000611aa9565b8160018114611fc85760028114611fd257611fee565b6001915050611aa9565b60ff841115611fe357611fe3611ed2565b50506001821b611aa9565b5060208310610133831016604e8410600b8410161715612011575081810a611aa9565b61201b8383611f35565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561204d5761204d611ed2565b029392505050565b600061151b8383611f96565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561209957612099611ed2565b500290565b600060208083528351808285015260005b818110156120cb578581018301518582016040015282016120af565b818111156120dd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561212357600080fd5b8151801515811461151b57600080fd5b60008282101561214557612145611ed2565b500390565b6000821982111561215d5761215d611ed2565b500190565b60006020828403121561217457600080fd5b5051919050565b60006fffffffffffffffffffffffffffffffff838116908316818110156121a4576121a4611ed2565b039392505050565b600080600080608085870312156121c257600080fd5b845193506020850151925060408501519150606085015164ffffffffff811681146121ec57600080fd5b939692955090935050565b60008060006060848603121561220c57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561223757600080fd5b815161151b81611dec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826122a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220cee3e27afab70c3d80fa0ed71ff4a16129e046d54609375c52a4db847dacbba164736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x413C86F EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0x8E743248 EQ PUSH2 0x67 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x60 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E11 JUMP JUMPDEST PUSH2 0x99 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x87 PUSH2 0x82 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E8A JUMP JUMPDEST PUSH2 0x3F7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xC8 DUP3 PUSH2 0x6EE JUMP JUMPDEST SWAP1 POP PUSH2 0xD4 DUP3 DUP3 PUSH2 0x907 JUMP JUMPDEST PUSH2 0xDF DUP2 DUP4 DUP8 PUSH2 0x992 JUMP JUMPDEST PUSH2 0x1C0 DUP2 ADD MLOAD MLOAD PUSH1 0xB0 DUP2 SWAP1 SHR PUSH5 0xFFFFFFFFF AND SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0x0 PUSH2 0x104 DUP9 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP7 ADD DUP1 SLOAD PUSH1 0x10 SWAP1 PUSH2 0x13E SWAP1 DUP5 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0xA PUSH2 0x194 SWAP2 SWAP1 PUSH2 0x2055 JUMP JUMPDEST PUSH2 0x19E SWAP1 DUP5 PUSH2 0x2061 JUMP JUMPDEST DUP2 GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3532000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x218 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x227 DUP6 DUP6 DUP12 PUSH1 0x0 DUP1 PUSH2 0xDD0 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2BB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DF SWAP2 SWAP1 PUSH2 0x2111 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x38C JUMPI PUSH2 0x2FE DUP14 DUP14 DUP14 DUP9 PUSH2 0x1C0 ADD MLOAD DUP10 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1111 JUMP JUMPDEST ISZERO PUSH2 0x38C JUMPI PUSH1 0x3 DUP7 ADD SLOAD PUSH2 0x332 SWAP1 DUP13 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x1351 JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE PUSH2 0xFFFF DUP10 AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP3 SWAP1 DUP15 AND SWAP2 PUSH32 0xF25AF37B3D3EC226063DC9BDC103ECE7EB110A50F340FE854BB7BC1B0676D7D0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x403 DUP8 PUSH2 0x6EE JUMP JUMPDEST SWAP1 POP PUSH2 0x40F DUP8 DUP3 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x8 DUP8 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 LT PUSH2 0x473 JUMPI PUSH1 0x8 DUP9 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x475 JUMP JUMPDEST DUP6 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x483 DUP7 DUP7 PUSH2 0x13E8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x491 DUP3 DUP9 PUSH2 0x2133 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x49F DUP9 DUP6 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x100 DUP7 ADD MLOAD PUSH1 0x8 DUP14 ADD SLOAD SWAP2 SWAP3 POP PUSH2 0x555 SWAP2 PUSH2 0x4CF SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH2 0x142B JUMP JUMPDEST DUP7 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x543 SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x54D SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST DUP13 SWAP1 DUP5 PUSH2 0x1482 JUMP JUMPDEST PUSH2 0x100 DUP7 ADD DUP2 SWAP1 MSTORE PUSH2 0x571 SWAP1 PUSH2 0x56C SWAP1 DUP6 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP13 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x597 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x5D6 DUP5 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP13 ADD DUP1 SLOAD PUSH1 0x10 SWAP1 PUSH2 0x610 SWAP1 DUP5 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x217B JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x660 DUP6 DUP12 DUP4 PUSH1 0x0 DUP16 PUSH2 0xDD0 SWAP1 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1E0 DUP6 ADD MLOAD PUSH2 0x68A SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 CALLER SWAP1 DUP5 PUSH2 0x1561 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP11 SWAP1 MSTORE CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP2 PUSH32 0x281596E92B2D974BEB7D4F124DF30A0B39067B096893E95011CE4BDAD798B759 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP2 SWAP4 POP POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x6F6 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x6FE PUSH2 0x1D3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x82B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84F SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8D4 SWAP2 SWAP1 PUSH2 0x21AC JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x936 JUMPI POP POP JUMP JUMPDEST PUSH2 0x940 DUP3 DUP3 PUSH2 0x1643 JUMP JUMPDEST PUSH2 0x94A DUP3 DUP3 PUSH2 0x1764 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x9FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xA55 DUP7 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP SWAP3 POP SWAP3 POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xACC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0xB3A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0xBA8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND DUP1 ISZERO DUP1 PUSH2 0xCB2 JUMPI POP PUSH2 0x1C0 DUP8 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0xBDA SWAP1 PUSH1 0xA PUSH2 0x2055 JUMP JUMPDEST PUSH2 0xBE4 SWAP1 DUP3 PUSH2 0x2061 JUMP JUMPDEST DUP6 PUSH2 0xCA5 DUP10 PUSH2 0x100 ADD MLOAD DUP10 PUSH1 0x8 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC95 SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xC9F SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST SWAP1 PUSH2 0x142B JUMP JUMPDEST PUSH2 0xCAF SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST GT ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xD20 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xDCC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x20F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xDFB PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0xE0F SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0xF70 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF8D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFB1 SWAP2 SWAP1 PUSH2 0x21F7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0xFC7 SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x100A SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x105B SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x133B JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1196 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1204 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1251 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1275 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1307 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x132B SWAP2 SWAP1 PUSH2 0x2111 JUMP JUMPDEST PUSH2 0x1339 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x6E5 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1347 DUP7 DUP7 DUP7 DUP7 PUSH2 0x18E4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x13C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x13DA JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x13E2 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x141D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x14CA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0xC95 PUSH2 0x14BB DUP9 PUSH2 0x1981 JUMP JUMPDEST PUSH2 0x14C4 DUP9 PUSH2 0x1981 JUMP JUMPDEST SWAP1 PUSH2 0x1522 JUMP JUMPDEST SWAP1 POP PUSH2 0x14D5 DUP2 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x15CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x15D6 DUP6 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x163C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x20F JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x16D3 JUMPI PUSH1 0x0 PUSH2 0x1664 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1A68 JUMP JUMPDEST SWAP1 POP PUSH2 0x167D DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x142B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x168E SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1760 JUMPI PUSH1 0x0 PUSH2 0x16F0 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1AAF JUMP JUMPDEST SWAP1 POP PUSH2 0x170A DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x142B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x171B SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x179D PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x17AC JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x17BD SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x17D3 SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x17FB SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1AB8 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1810 SWAP2 PUSH2 0x142B JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x182C SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1836 SWAP2 SWAP1 PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x1840 SWAP2 SWAP1 PUSH2 0x2133 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x1857 SWAP2 SWAP1 PUSH2 0x13E8 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x18DF JUMPI PUSH2 0x1882 PUSH2 0x56C DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x1522 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x18A8 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18F2 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x18FE JUMPI POP PUSH1 0x0 PUSH2 0x1979 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x193D JUMPI POP PUSH1 0x1 PUSH2 0x1979 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x195A SWAP1 DUP8 DUP8 PUSH2 0x1BFF JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1975 JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DC JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1A1B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1A55 JUMPI PUSH2 0x1A16 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x19A3 JUMP JUMPDEST PUSH2 0x1A62 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1A4C JUMPI PUSH2 0x1A4C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x19A3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1A62 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1A7C PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x1A86 SWAP1 DUP6 PUSH2 0x2061 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1AA5 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x214A JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x151B DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1ACC PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2133 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1AE8 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x151B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1B1E JUMPI PUSH1 0x0 PUSH2 0x1B23 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1B37 DUP11 DUP1 PUSH2 0x142B JUMP JUMPDEST DUP2 PUSH2 0x1B44 JUMPI PUSH2 0x1B44 PUSH2 0x2242 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1B56 DUP4 DUP12 PUSH2 0x142B JUMP JUMPDEST DUP2 PUSH2 0x1B63 JUMPI PUSH2 0x1B63 PUSH2 0x2242 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1B73 DUP7 DUP9 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1B7D SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1B91 DUP9 DUP11 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1B9B SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1BA5 SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1BBC DUP11 DUP16 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1BC6 SWAP2 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x1BDC SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1BE6 SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1BF0 SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C0D DUP7 PUSH2 0x1CB7 JUMP JUMPDEST ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x0 PUSH2 0x1C3E DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1CA0 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x1CAE SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x151B JUMPI POP PUSH2 0x1CF3 PUSH1 0x1 DUP3 PUSH2 0x2133 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x1 ADD PUSH2 0x1D2A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1DC3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1E0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1E2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x1E4C DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH2 0x1E63 DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1E7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x1EB4 DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x1F2C JUMPI PUSH2 0x1F2C PUSH2 0x1ED2 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x1F8E JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x1F74 JUMPI PUSH2 0x1F74 PUSH2 0x1ED2 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x1F81 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x1F3A JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1FA5 JUMPI POP PUSH1 0x1 PUSH2 0x1AA9 JUMP JUMPDEST DUP2 PUSH2 0x1FB2 JUMPI POP PUSH1 0x0 PUSH2 0x1AA9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x1FC8 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1FD2 JUMPI PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1FE3 JUMPI PUSH2 0x1FE3 PUSH2 0x1ED2 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1AA9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2011 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1AA9 JUMP JUMPDEST PUSH2 0x201B DUP4 DUP4 PUSH2 0x1F35 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x204D JUMPI PUSH2 0x204D PUSH2 0x1ED2 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x151B DUP4 DUP4 PUSH2 0x1F96 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2099 JUMPI PUSH2 0x2099 PUSH2 0x1ED2 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x20CB JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x20AF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x20DD JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x151B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2145 JUMPI PUSH2 0x2145 PUSH2 0x1ED2 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x215D JUMPI PUSH2 0x215D PUSH2 0x1ED2 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x21A4 JUMPI PUSH2 0x21A4 PUSH2 0x1ED2 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x21C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x21EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x220C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2237 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x151B DUP2 PUSH2 0x1DEC JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x22A7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE 0xE3 0xE2 PUSH27 0xFAB70C3D80FA0ED71FF4A16129E046D54609375C52A4DB847DACBB LOG1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"837:4930:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2476:1608;;;;;;;;;;-1:-1:-1;2476:1608:93;;;;;:::i;:::-;;:::i;:::-;;4610:1155;;;;;;;;;;-1:-1:-1;4610:1155:93;;;;;:::i;:::-;;:::i;:::-;;;1838:25:124;;;1826:2;1811:18;4610:1155:93;;;;;;;2476:1608;2829:19;;;2789:37;2829:19;;;;;;;;;;;2899:15;2829:19;2899:13;:15::i;:::-;2854:60;-1:-1:-1;2921:33:93;:7;2854:60;2921:19;:33::i;:::-;2961:61;2992:12;3006:7;3015:6;2961:30;:61::i;:::-;3055:33;;;;19491:9:88;4411:3;19490:77;;;;;;3439:2;8367:67;;;3029:23:93;3234:18;:6;:16;:18::i;:::-;3214:16;;;:38;;:16;;:38;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;3195:57;;;;3311:15;3305:2;:21;;;;:::i;:::-;3286:41;;:15;:41;:::i;:::-;3274:8;:53;;3335:33;;;;;;;;;;;;;;;;;3259:115;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;3381:54:93;:7;3409:12;3423:5;3430:1;;3381:27;:54::i;:::-;3471:26;;;;3561:31;;;;3463:135;;;;;3511:10;3463:135;;;5001:34:124;3463:40:93;5071:15:124;;;5051:18;;;5044:43;5103:18;;;5096:34;;;5146:18;;;5139:34;;;;3442:18:93;;3463:40;;;;;;;4912:19:124;;3463:135:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3442:156;;3609:13;3605:398;;;3645:211;3705:12;3729;3753:10;3775:12;:33;;;3820:12;:26;;;3645:48;:211::i;:::-;3632:365;;;3907:10;;;;3875:49;;:10;;3907;;;;;3919:4;3875:31;:49::i;:::-;3977:10;3939:49;;3970:5;3939:49;;;;;;;;;;;;3632:365;4014:65;;;4034:10;5640:74:124;;5745:2;5730:18;;5723:34;;;4014:65:93;;;;;;;;;;;;;;;5613:18:124;4014:65:93;;;;;;;2783:1301;;;;;;2476:1608;;;;;;;:::o;4610:1155::-;4788:7;4803:42;4848:15;:7;:13;:15::i;:::-;4803:60;-1:-1:-1;4870:33:93;:7;4803:60;4870:19;:33::i;:::-;4944:16;;;;4910:21;;4944:16;;;;;4935:25;;4934:55;;4973:16;;;;;;;;;4934:55;;;4964:6;4934:55;4910:79;-1:-1:-1;4996:21:93;5020:30;:3;5035:14;5020;:30::i;:::-;4996:54;-1:-1:-1;5056:15:93;5074:19;4996:54;5074:3;:19;:::i;:::-;5056:37;-1:-1:-1;5099:13:93;5115:19;5131:3;5115:13;:19;:::i;:::-;5316:31;;;;5282:25;;;;5099:35;;-1:-1:-1;5175:194:93;;5274:74;;5282:25;;;;;5274:41;:74::i;:::-;5222:12;:26;;;5215:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:133;;;;:::i;:::-;5175:7;;5356;5175:32;:194::i;:::-;5141:31;;;:228;;;5405:65;;:53;;:13;;:20;:53::i;:::-;:63;:65::i;:::-;5376:25;;;:94;;:25;;:94;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5497:25;:13;:23;:25::i;:::-;5477:16;;;:45;;:16;;:45;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5528:58;5556:12;5570:5;5577;5584:1;5528:7;:27;;:58;;;;;;;:::i;:::-;5636:26;;;;5593:77;;:30;;;;5624:10;;5664:5;5593:30;:77::i;:::-;5682:51;;;6645:25:124;;;6701:2;6686:18;;6679:34;;;5702:10:93;;5682:51;;;;;;6618:18:124;5682:51:93;;;;;;;-1:-1:-1;5747:13:93;;-1:-1:-1;;;;4610:1155:93;;;;;;;;:::o;12460:1739:102:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:88;15237:71;;;;12694:26:102;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:102;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:102;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:102:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:102;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;3050:862:104:-;3230:21;;;;;;;;;;;;;;;;;3217:11;3209:43;;;;;;;;;;;;;:::i;:::-;;3260:13;3275;3294;3311:58;:12;:40;;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;3311:58:104;3259:110;;;;;;;;3383:8;3393:23;;;;;;;;;;;;;;;;;3375:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3442:21:104;;;;;;;;;;;;;;;;;3431:9;;3423:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3489:21:104;;;;;;;;;;;;;;;;;3478:9;;3470:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3538:33:104;;;;16762:9:88;4191:3;16761:63;;;3607:14:104;;;:260;;-1:-1:-1;3819:33:104;;;;8368:9:88;3439:2;8367:67;;;3813:53:104;;:2;:53;:::i;:::-;3800:67;;:9;:67;:::i;:::-;3781:6;3634:144;3746:12;:31;;;3711:7;:25;;;;;;;;;;;;3703:34;;3643:12;:26;;;3635:53;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:102;;;;:::i;:::-;3634:111;;:144::i;:::-;:153;;;;:::i;:::-;3633:234;;3607:260;3875:26;;;;;;;;;;;;;;;;;3592:315;;;;;;;;;;;;;;:::i;:::-;;3203:709;;;;3050:862;;;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;7397:2:124;1635:78:12;;;7379:21:124;7436:2;7416:18;;;7409:30;7475:34;7455:18;;;7448:62;7546:9;7526:18;;;7519:37;7573:19;;1635:78:12;7195:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;6827:1514:102:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:102;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:102;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:102;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;7789:4:124;7831:3;7820:9;7816:19;7808:27;;7868:6;7862:13;7851:9;7844:32;7932:4;7924:6;7920:17;7914:24;7907:4;7896:9;7892:20;7885:54;7995:4;7987:6;7983:17;7977:24;7970:4;7959:9;7955:20;7948:54;8058:4;8050:6;8046:17;8040:24;8033:4;8022:9;8018:20;8011:54;8121:4;8113:6;8109:17;8103:24;8096:4;8085:9;8081:20;8074:54;8184:4;8176:6;8172:17;8166:24;8159:4;8148:9;8144:20;8137:54;8247:4;8239:6;8235:17;8229:24;8222:4;8211:9;8207:20;8200:54;8301:4;8293:6;8289:17;8283:24;8326:42;8424:2;8410:12;8406:21;8399:4;8388:9;8384:20;8377:51;8447:6;8437:16;;8517:2;8511;8503:6;8499:15;8493:22;8489:31;8484:2;8473:9;8469:18;8462:59;;;7603:924;;;;;7316:575:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;9102:25:124;;;9143:18;;;9136:34;;;;9186:18;;;9179:34;9244:2;9229:18;;9222:34;9287:3;9272:19;;9265:35;8121:215:102;;;;;;9089:3:124;9074:19;8121:215:102;;;;;;;7044:1297;6827:1514;;;;;:::o;28482:904:104:-;17634:9:88;;28815:4:104;;4478:3:88;17633:67;;;28831:35:104;28827:464;;28986:40;29047:13;29029:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28986:121;;29144:17;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29129:134;;;;;2851:41;29129:134;;;10298:25:124;29243:10:104;10339:18:124;;;10332:83;29129:57:104;;;;;;;;10271:18:124;;29129:134:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29115:169;;29279:5;29272:12;;;;;29115:169;28868:423;28827:464;29303:78;29327:12;29341;29355:10;29367:13;29303:23;:78::i;:::-;29296:85;28482:904;-1:-1:-1;;;;;;28482:904:104:o;1688:433:89:-;1922:28;;;;;;;;;;;;;;;;;5284:3:88;1866:54:89;;1858:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1996:1:89;1980:17;;;1979:23;;1973:30;2011:100;;;;2044:16;;;;;;2011:100;;;2085:17;;2098:4;;2085:17;;;2011:100;1840:277;1688:433;;;:::o;1005:496:106:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;4496:534:102:-;4929:22;;;;4643:7;;;;4844:113;;4929:22;;704:4:107;4845:51:102;4870:25;:14;:23;:25::i;:::-;4845:17;:6;:15;:17::i;:::-;:24;;:51::i;4844:113::-;4827:130;;4988:18;:6;:16;:18::i;:::-;4963:22;;;:43;;;;;;;;;;;;;;;5019:6;-1:-1:-1;4496:534:102;;;;;;:::o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;10628:2:124;1937:66:1;;;10610:21:124;10667:2;10647:18;;;10640:30;10706:27;10686:18;;;10679:55;10751:18;;1937:66:1;10426:349:124;1937:66:1;1318:690;1228:780;;;;:::o;10657:1542:102:-;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:102;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;-1:-1:-1;11728:467:102;10657:1542;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:102;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:96::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10267:168;8972:1467;8841:1598;;:::o;27289:620:104:-;27586:4;27602:22;:13;5872:9:88;5884;5872:21;;5764:134;27602:22:104;27598:60;;-1:-1:-1;27646:5:104;27639:12;;27598:60;27668:33;;;;;;;;;;;;;;;620:66:89;4911:27;27663:68:104;;-1:-1:-1;27720:4:104;27713:11;;27663:68;27769:32;;;;;;;;;;;;;27737:24;;27769:60;;27802:12;27816;27769:32;:60::i;:::-;27736:93;;;;27845:19;27844:20;:59;;;;-1:-1:-1;17634:9:88;;4478:3;17633:67;;;27868:35:104;27844:59;27836:68;;;27289:620;;;;;;;:::o;3901:247:107:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;:::-;999:30;;;700:334;;;;;:::o;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;1780:972;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;6625:625:89:-;6853:4;6859:7;6868;6887:28;6910:4;6887:22;:28::i;:::-;6883:328;;;6925:15;6943:45;6966:4;620:66;6943:22;:45::i;:::-;6997:20;7020:21;;;;;;;;;;;;;;7067:26;;;;;;;;;:55;;;;;;;;;;;;;;7020:21;;-1:-1:-1;4478:3:88;17633:67;;;7049:75:89;-1:-1:-1;7136:12:89;;7132:73;;7168:4;;-1:-1:-1;7174:12:89;;-1:-1:-1;7188:7:89;-1:-1:-1;7160:36:89;;-1:-1:-1;7160:36:89;7132:73;6917:294;;;6883:328;-1:-1:-1;7224:5:89;;-1:-1:-1;7224:5:89;;-1:-1:-1;7224:5:89;6625:625;;;;;;;;:::o;4304:256::-;4448:9;;4411:4;;620:66;4448:27;4488:19;;;;;:67;;-1:-1:-1;4530:18:89;4547:1;4530:14;:18;:::i;:::-;4512:37;:42;;4481:74;-1:-1:-1;;4304:256:89:o;8422:382::-;8601:9;;8547:7;;8601:16;;8669:14;;;8667:17;8654:30;;8547:7;8711:66;8742:1;8719:24;;;;;8718:31;;8711:66;;8767:1;8761:7;8711:66;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:154:124:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:949::-;402:6;410;418;426;434;442;450;503:3;491:9;482:7;478:23;474:33;471:53;;;520:1;517;510:12;471:53;556:9;543:23;533:33;;613:2;602:9;598:18;585:32;575:42;;664:2;653:9;649:18;636:32;626:42;;718:2;707:9;703:18;690:32;731:31;756:5;731:31;:::i;:::-;781:5;-1:-1:-1;833:3:124;818:19;;805:33;;-1:-1:-1;890:3:124;875:19;;862:33;904;862;904;:::i;:::-;956:7;-1:-1:-1;1015:3:124;1000:19;;987:33;1064:6;1051:20;;1039:33;;1029:61;;1086:1;1083;1076:12;1029:61;1109:7;1099:17;;;173:949;;;;;;;;;;:::o;1127:552::-;1253:6;1261;1269;1277;1285;1338:3;1326:9;1317:7;1313:23;1309:33;1306:53;;;1355:1;1352;1345:12;1306:53;1391:9;1378:23;1368:33;;1451:2;1440:9;1436:18;1423:32;1464:31;1489:5;1464:31;:::i;:::-;1127:552;;1514:5;;-1:-1:-1;;;;1566:2:124;1551:18;;1538:32;;1617:2;1602:18;;1589:32;;1668:3;1653:19;;;1640:33;;-1:-1:-1;1127:552:124:o;1874:184::-;1926:77;1923:1;1916:88;2023:4;2020:1;2013:15;2047:4;2044:1;2037:15;2063:253;2103:3;2131:34;2192:2;2189:1;2185:10;2222:2;2219:1;2215:10;2253:3;2249:2;2245:12;2240:3;2237:21;2234:47;;;2261:18;;:::i;:::-;2297:13;;2063:253;-1:-1:-1;;;;2063:253:124:o;2321:482::-;2410:1;2453:5;2410:1;2467:330;2488:7;2478:8;2475:21;2467:330;;;2607:4;2539:66;2535:77;2529:4;2526:87;2523:113;;;2616:18;;:::i;:::-;2666:7;2656:8;2652:22;2649:55;;;2686:16;;;;2649:55;2765:22;;;;2725:15;;;;2467:330;;;2471:3;2321:482;;;;;:::o;2808:866::-;2857:5;2887:8;2877:80;;-1:-1:-1;2928:1:124;2942:5;;2877:80;2976:4;2966:76;;-1:-1:-1;3013:1:124;3027:5;;2966:76;3058:4;3076:1;3071:59;;;;3144:1;3139:130;;;;3051:218;;3071:59;3101:1;3092:10;;3115:5;;;3139:130;3176:3;3166:8;3163:17;3160:43;;;3183:18;;:::i;:::-;-1:-1:-1;;3239:1:124;3225:16;;3254:5;;3051:218;;3353:2;3343:8;3340:16;3334:3;3328:4;3325:13;3321:36;3315:2;3305:8;3302:16;3297:2;3291:4;3288:12;3284:35;3281:77;3278:159;;;-1:-1:-1;3390:19:124;;;3422:5;;3278:159;3469:34;3494:8;3488:4;3469:34;:::i;:::-;3599:6;3531:66;3527:79;3518:7;3515:92;3512:118;;;3610:18;;:::i;:::-;3648:20;;2808:866;-1:-1:-1;;;2808:866:124:o;3679:131::-;3739:5;3768:36;3795:8;3789:4;3768:36;:::i;3815:228::-;3855:7;3981:1;3913:66;3909:74;3906:1;3903:81;3898:1;3891:9;3884:17;3880:105;3877:131;;;3988:18;;:::i;:::-;-1:-1:-1;4028:9:124;;3815:228::o;4048:656::-;4160:4;4189:2;4218;4207:9;4200:21;4250:6;4244:13;4293:6;4288:2;4277:9;4273:18;4266:34;4318:1;4328:140;4342:6;4339:1;4336:13;4328:140;;;4437:14;;;4433:23;;4427:30;4403:17;;;4422:2;4399:26;4392:66;4357:10;;4328:140;;;4486:6;4483:1;4480:13;4477:91;;;4556:1;4551:2;4542:6;4531:9;4527:22;4523:31;4516:42;4477:91;-1:-1:-1;4620:2:124;4608:15;4625:66;4604:88;4589:104;;;;4695:2;4585:113;;4048:656;-1:-1:-1;;;4048:656:124:o;5184:277::-;5251:6;5304:2;5292:9;5283:7;5279:23;5275:32;5272:52;;;5320:1;5317;5310:12;5272:52;5352:9;5346:16;5405:5;5398:13;5391:21;5384:5;5381:32;5371:60;;5427:1;5424;5417:12;5768:125;5808:4;5836:1;5833;5830:8;5827:34;;;5841:18;;:::i;:::-;-1:-1:-1;5878:9:124;;5768:125::o;5898:128::-;5938:3;5969:1;5965:6;5962:1;5959:13;5956:39;;;5975:18;;:::i;:::-;-1:-1:-1;6011:9:124;;5898:128::o;6031:184::-;6101:6;6154:2;6142:9;6133:7;6129:23;6125:32;6122:52;;;6170:1;6167;6160:12;6122:52;-1:-1:-1;6193:16:124;;6031:184;-1:-1:-1;6031:184:124:o;6220:246::-;6260:4;6289:34;6373:10;;;;6343;;6395:12;;;6392:38;;;6410:18;;:::i;:::-;6447:13;;6220:246;-1:-1:-1;;;6220:246:124:o;6724:466::-;6820:6;6828;6836;6844;6897:3;6885:9;6876:7;6872:23;6868:33;6865:53;;;6914:1;6911;6904:12;6865:53;6943:9;6937:16;6927:26;;6993:2;6982:9;6978:18;6972:25;6962:35;;7037:2;7026:9;7022:18;7016:25;7006:35;;7084:2;7073:9;7069:18;7063:25;7128:12;7121:5;7117:24;7110:5;7107:35;7097:63;;7156:1;7153;7146:12;7097:63;6724:466;;;;-1:-1:-1;6724:466:124;;-1:-1:-1;;6724:466:124:o;8532:306::-;8620:6;8628;8636;8689:2;8677:9;8668:7;8664:23;8660:32;8657:52;;;8705:1;8702;8695:12;8657:52;8734:9;8728:16;8718:26;;8784:2;8773:9;8769:18;8763:25;8753:35;;8828:2;8817:9;8813:18;8807:25;8797:35;;8532:306;;;;;:::o;9311:265::-;9395:6;9448:2;9436:9;9427:7;9423:23;9419:32;9416:52;;;9464:1;9461;9454:12;9416:52;9496:9;9490:16;9515:31;9540:5;9515:31;:::i;10780:184::-;10832:77;10829:1;10822:88;10929:4;10926:1;10919:15;10953:4;10950:1;10943:15;10969:274;11009:1;11035;11025:189;;11070:77;11067:1;11060:88;11171:4;11168:1;11161:15;11199:4;11196:1;11189:15;11025:189;-1:-1:-1;11228:9:124;;10969:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"1786000","executionCost":"1915","totalCost":"1787915"},"external":{"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)":"infinite","executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)":"infinite"}},"methodIdentifiers":{"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)":"8e743248","executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)":"0413c86f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)\":{\"details\":\"It is not possible to back more than the existing unbacked amount of the reserveEmits the `BackUnbacked` event\",\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to repay\",\"fee\":\"The amount paid in fees\",\"protocolFeeBps\":\"The fraction of fees in basis points paid to the protocol\",\"reserve\":\"The reserve to back unbacked for\"},\"returns\":{\"_0\":\"The backed amount\"}},\"executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)\":{\"details\":\"Essentially a supply without transferring the underlying.Emits the `MintUnbacked` eventEmits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\",\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint aTokens of\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)\":{\"notice\":\"Back the current unbacked with `amount` and pay `fee`.\"},\"executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)\":{\"notice\":\"Mint unbacked aTokens to a user and updates the unbacked for the reserve.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/BridgeLogic.sol\":\"BridgeLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)":{"notice":"Back the current unbacked with `amount` and pay `fee`."},"executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)":{"notice":"Mint unbacked aTokens to a user and updates the unbacked for the reserve."}},"version":1}}},"contracts/protocol/libraries/logic/CalldataLogic.sol":{"CalldataLogic":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"CalldataLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a9902ec83f3d32c6c1c8c535cd2ea0aa78c00e320e6c79511fc6d9a4f70084b264736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA9 SWAP1 0x2E 0xC8 EXTCODEHASH RETURNDATASIZE ORIGIN 0xC6 0xC1 0xC8 0xC5 CALLDATALOAD 0xCD 0x2E LOG0 0xAA PUSH25 0xC00E320E6C79511FC6D9A4F70084B264736F6C634300080A00 CALLER ","sourceMap":"230:8867:94:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;230:8867:94;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a9902ec83f3d32c6c1c8c535cd2ea0aa78c00e320e6c79511fc6d9a4f70084b264736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA9 SWAP1 0x2E 0xC8 EXTCODEHASH RETURNDATASIZE ORIGIN 0xC6 0xC1 0xC8 0xC5 CALLDATALOAD 0xCD 0x2E LOG0 0xAA PUSH25 0xC00E320E6C79511FC6D9A4F70084B264736F6C634300080A00 CALLER ","sourceMap":"230:8867:94:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"decodeBorrowParams(mapping(uint256 => address),bytes32)":"infinite","decodeLiquidationCallParams(mapping(uint256 => address),bytes32,bytes32)":"infinite","decodeRebalanceStableBorrowRateParams(mapping(uint256 => address),bytes32)":"infinite","decodeRepayParams(mapping(uint256 => address),bytes32)":"infinite","decodeRepayWithPermitParams(mapping(uint256 => address),bytes32)":"infinite","decodeSetUserUseReserveAsCollateralParams(mapping(uint256 => address),bytes32)":"infinite","decodeSupplyParams(mapping(uint256 => address),bytes32)":"infinite","decodeSupplyWithPermitParams(mapping(uint256 => address),bytes32)":"infinite","decodeSwapBorrowRateModeParams(mapping(uint256 => address),bytes32)":"infinite","decodeWithdrawParams(mapping(uint256 => address),bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"CalldataLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to decode calldata, used to optimize calldata size in L2Pool for transaction cost reduction\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/CalldataLogic.sol\":\"CalldataLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/logic/CalldataLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title CalldataLogic library\\n * @author Aave\\n * @notice Library to decode calldata, used to optimize calldata size in L2Pool for transaction cost reduction\\n */\\nlibrary CalldataLogic {\\n  /**\\n   * @notice Decodes compressed supply params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed supply params\\n   * @return The address of the underlying reserve\\n   * @return The amount to supply\\n   * @return The referralCode\\n   */\\n  function decodeSupplyParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint16) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint16 referralCode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      referralCode := and(shr(144, args), 0xFFFF)\\n    }\\n    return (reservesList[assetId], amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed supply params to standard params along with permit params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed supply with permit params\\n   * @return The address of the underlying reserve\\n   * @return The amount to supply\\n   * @return The referralCode\\n   * @return The deadline of the permit\\n   * @return The V value of the permit signature\\n   */\\n  function decodeSupplyWithPermitParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint16, uint256, uint8) {\\n    uint256 deadline;\\n    uint8 permitV;\\n\\n    assembly {\\n      deadline := and(shr(160, args), 0xFFFFFFFF)\\n      permitV := and(shr(192, args), 0xFF)\\n    }\\n    (address asset, uint256 amount, uint16 referralCode) = decodeSupplyParams(reservesList, args);\\n\\n    return (asset, amount, referralCode, deadline, permitV);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed withdraw params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed withdraw params\\n   * @return The address of the underlying reserve\\n   * @return The amount to withdraw\\n   */\\n  function decodeWithdrawParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256) {\\n    uint16 assetId;\\n    uint256 amount;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n    }\\n    if (amount == type(uint128).max) {\\n      amount = type(uint256).max;\\n    }\\n    return (reservesList[assetId], amount);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed borrow params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed borrow params\\n   * @return The address of the underlying reserve\\n   * @return The amount to borrow\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   * @return The referralCode\\n   */\\n  function decodeBorrowParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256, uint16) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint256 interestRateMode;\\n    uint16 referralCode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      interestRateMode := and(shr(144, args), 0xFF)\\n      referralCode := and(shr(152, args), 0xFFFF)\\n    }\\n\\n    return (reservesList[assetId], amount, interestRateMode, referralCode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed repay params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed repay params\\n   * @return The address of the underlying reserve\\n   * @return The amount to repay\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   */\\n  function decodeRepayParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint256 interestRateMode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      interestRateMode := and(shr(144, args), 0xFF)\\n    }\\n\\n    if (amount == type(uint128).max) {\\n      amount = type(uint256).max;\\n    }\\n\\n    return (reservesList[assetId], amount, interestRateMode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed repay params to standard params along with permit params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed repay with permit params\\n   * @return The address of the underlying reserve\\n   * @return The amount to repay\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   * @return The deadline of the permit\\n   * @return The V value of the permit signature\\n   */\\n  function decodeRepayWithPermitParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256, uint256, uint8) {\\n    uint256 deadline;\\n    uint8 permitV;\\n\\n    (address asset, uint256 amount, uint256 interestRateMode) = decodeRepayParams(\\n      reservesList,\\n      args\\n    );\\n\\n    assembly {\\n      deadline := and(shr(152, args), 0xFFFFFFFF)\\n      permitV := and(shr(184, args), 0xFF)\\n    }\\n\\n    return (asset, amount, interestRateMode, deadline, permitV);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed swap borrow rate mode params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed swap borrow rate mode params\\n   * @return The address of the underlying reserve\\n   * @return The interest rate mode, 1 for stable 2 for variable debt\\n   */\\n  function decodeSwapBorrowRateModeParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256) {\\n    uint16 assetId;\\n    uint256 interestRateMode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      interestRateMode := and(shr(16, args), 0xFF)\\n    }\\n\\n    return (reservesList[assetId], interestRateMode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed rebalance stable borrow rate params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed rabalance stable borrow rate params\\n   * @return The address of the underlying reserve\\n   * @return The address of the user to rebalance\\n   */\\n  function decodeRebalanceStableBorrowRateParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, address) {\\n    uint16 assetId;\\n    address user;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      user := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n    }\\n    return (reservesList[assetId], user);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed set user use reserve as collateral params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed set user use reserve as collateral params\\n   * @return The address of the underlying reserve\\n   * @return True if to set using as collateral, false otherwise\\n   */\\n  function decodeSetUserUseReserveAsCollateralParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, bool) {\\n    uint16 assetId;\\n    bool useAsCollateral;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      useAsCollateral := and(shr(16, args), 0x1)\\n    }\\n    return (reservesList[assetId], useAsCollateral);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed liquidation call params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args1 The first half of packed liquidation call params\\n   * @param args2 The second half of the packed liquidation call params\\n   * @return The address of the underlying collateral asset\\n   * @return The address of the underlying debt asset\\n   * @return The address of the user to liquidate\\n   * @return The amount of debt to cover\\n   * @return True if receiving aTokens, false otherwise\\n   */\\n  function decodeLiquidationCallParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args1,\\n    bytes32 args2\\n  ) internal view returns (address, address, address, uint256, bool) {\\n    uint16 collateralAssetId;\\n    uint16 debtAssetId;\\n    address user;\\n    uint256 debtToCover;\\n    bool receiveAToken;\\n\\n    assembly {\\n      collateralAssetId := and(args1, 0xFFFF)\\n      debtAssetId := and(shr(16, args1), 0xFFFF)\\n      user := and(shr(32, args1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n\\n      debtToCover := and(args2, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      receiveAToken := and(shr(128, args2), 0x1)\\n    }\\n\\n    if (debtToCover == type(uint128).max) {\\n      debtToCover = type(uint256).max;\\n    }\\n\\n    return (\\n      reservesList[collateralAssetId],\\n      reservesList[debtAssetId],\\n      user,\\n      debtToCover,\\n      receiveAToken\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x9c12dfdab51ccb9f9c00489d0a06e67e2adcbcb7eef98e4585af62060f2d60b5\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Library to decode calldata, used to optimize calldata size in L2Pool for transaction cost reduction","version":1}}},"contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"ConfiguratorLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ATokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"aToken","type":"address"},{"indexed":false,"internalType":"address","name":"stableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"variableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"ReserveInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"StableDebtTokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"VariableDebtTokenUpgraded","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)":{"details":"Emits the `ReserveInitialized` event","params":{"input":"The needed parameters for the initialization","pool":"The Pool in which the reserve will be initialized"}},"executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)":{"details":"Emits the `ATokenUpgraded` event","params":{"cachedPool":"The Pool containing the reserve with the aToken","input":"The parameters needed for the initialize call"}},"executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":{"details":"Emits the `StableDebtTokenUpgraded` event","params":{"cachedPool":"The Pool containing the reserve with the stable debt token","input":"The parameters needed for the initialize call"}},"executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":{"details":"Emits the `VariableDebtTokenUpgraded` event","params":{"cachedPool":"The Pool containing the reserve with the variable debt token","input":"The parameters needed for the initialize call"}}},"title":"ConfiguratorLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"61221c61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063b0f093551461005b578063b13c96a81461007d578063df59b8b21461009d578063f5b50e70146100bd575b600080fd5b81801561006757600080fd5b5061007b61007636600461117d565b6100dd565b005b81801561008957600080fd5b5061007b6100983660046111d4565b610439565b8180156100a957600080fd5b5061007b6100b8366004611220565b6106c6565b8180156100c957600080fd5b5061007b6100d836600461117d565b610bd3565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610108602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa158015610172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019691906113a2565b9050600061028573ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906114c5565b5161ffff80821692601083901c821692602081901c83169260ff603083901c811693604084901c9092169260a81c1690565b50909450600093507fc222ec8a0000000000000000000000000000000000000000000000000000000092508791506102c29050602087018761126d565b6102d2604088016020890161126d565b856102e060408a018a6114e1565b6102ed60608c018c6114e1565b6102fa60a08e018e6114e1565b6040516024016103139a99989796959493929190611596565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526101408401519091506103b3906103ad60a087016080880161126d565b83610e6a565b6103c360a085016080860161126d565b61014084015173ffffffffffffffffffffffffffffffffffffffff91821691166103f0602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167f9439658a562a5c46b1173589df89cf001483d685bad28aedaff4a88656292d8160405160405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610464602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f291906113a2565b9050600061052273ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b50509350505050600063183fb41360e01b85856020016020810190610547919061126d565b610554602088018861126d565b6105646060890160408a0161126d565b8661057260608b018b6114e1565b61057f60808d018d6114e1565b61058c60c08f018f6114e1565b6040516024016105a69b9a99989796959493929190611617565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610100840151909150610640906103ad60c0870160a0880161126d565b61065060c0850160a0860161126d565b61010084015173ffffffffffffffffffffffffffffffffffffffff918216911661067d602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167fa76f65411ec66a7fb6bc467432eb14767900449ae4469fa295e4441fe5e1cb7360405160405180910390a45050505050565b60006108016106d8602084018461126d565b7f183fb413000000000000000000000000000000000000000000000000000000008561070a60e0870160c0880161126d565b61071a60c0880160a0890161126d565b61072b610100890160e08a0161126d565b61073b60808a0160608b016116a4565b6107496101008b018b6114e1565b6107576101208d018d6114e1565b6107656101c08f018f6114e1565b60405160240161077f9b9a999897969594939291906116c7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610ef8565b905060006108ae610818604085016020860161126d565b7fc222ec8a000000000000000000000000000000000000000000000000000000008661084a60c0880160a0890161126d565b61085b610100890160e08a0161126d565b61086b60808a0160608b016116a4565b6108796101808b018b6114e1565b6108876101a08d018d6114e1565b6108956101c08f018f6114e1565b60405160240161077f9a9998979695949392919061171b565b905060006109456108c5606086016040870161126d565b7fc222ec8a00000000000000000000000000000000000000000000000000000000876108f760c0890160a08a0161126d565b6109086101008a0160e08b0161126d565b61091860808b0160608c016116a4565b6109266101408c018c6114e1565b6109346101608e018e6114e1565b8e806101c0019061089591906114e1565b905073ffffffffffffffffffffffffffffffffffffffff8516637a708e9261097360c0870160a0880161126d565b85858561098660a08b0160808c0161126d565b60405160e087901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b158015610a0b57600080fd5b505af1158015610a1f573d6000803e3d6000fd5b50506040805160208101909152600081529150610a519050610a4760808701606088016116a4565b829060ff16610fd3565b610a5c81600161107c565b610a678160006110c1565b610a72816000611106565b73ffffffffffffffffffffffffffffffffffffffff861663f51e435b610a9e60c0880160a0890161126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015283516024820152604401600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff85169050610b4b60c0870160a0880161126d565b73ffffffffffffffffffffffffffffffffffffffff167f3a0ca721fc364424566385a1aa271ed508cc2c0949c2272575fb3013a163a45f8585610b9460a08b0160808c0161126d565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292168183015290519081900360600190a3505050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610bfe602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c91906113a2565b90506000610cbc73ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b50909450600093507fc222ec8a000000000000000000000000000000000000000000000000000000009250879150610cf99050602087018761126d565b610d09604088016020890161126d565b85610d1760408a018a6114e1565b610d2460608c018c6114e1565b610d3160a08e018e6114e1565b604051602401610d4a9a99989796959493929190611596565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610120840151909150610de4906103ad60a087016080880161126d565b610df460a085016080860161126d565b61012084015173ffffffffffffffffffffffffffffffffffffffff9182169116610e21602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167f7a943a5b6c214bf7726c069a878b1e2a8e7371981d516048b84e03743e67bc2860405160405180910390a45050505050565b6040517f4f1ef286000000000000000000000000000000000000000000000000000000008152839073ffffffffffffffffffffffffffffffffffffffff821690634f1ef28690610ec090869086906004016117d1565b600060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b5050505050505050565b60008030604051610f089061114b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610f41573d6000803e3d6000fd5b506040517fd1f5789400000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063d1f5789490610f9990879087906004016117d1565b600060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b50929695505050505050565b60408051808201909152600281527f3636000000000000000000000000000000000000000000000000000000000000602082015260ff82111561104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110439190611808565b60405180910390fd5b5081517fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff1660309190911b179052565b60388161108a57600061108d565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff1660ff9190911690911b1790915250565b603c816110cf5760006110d2565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff1660ff9190911690911b1790915250565b603981611114576000611117565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b6109cb8061181c83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461117a57600080fd5b50565b6000806040838503121561119057600080fd5b823561119b81611158565b9150602083013567ffffffffffffffff8111156111b757600080fd5b830160c081860312156111c957600080fd5b809150509250929050565b600080604083850312156111e757600080fd5b82356111f281611158565b9150602083013567ffffffffffffffff81111561120e57600080fd5b830160e081860312156111c957600080fd5b6000806040838503121561123357600080fd5b823561123e81611158565b9150602083013567ffffffffffffffff81111561125a57600080fd5b83016101e081860312156111c957600080fd5b60006020828403121561127f57600080fd5b813561128a81611158565b9392505050565b6040516101e0810167ffffffffffffffff811182821017156112dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000602082840312156112f457600080fd5b6040516020810181811067ffffffffffffffff8211171561133e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461136b57600080fd5b919050565b805164ffffffffff8116811461136b57600080fd5b805161ffff8116811461136b57600080fd5b805161136b81611158565b60006101e082840312156113b557600080fd5b6113bd611291565b6113c784846112e2565b81526113d56020840161134b565b60208201526113e66040840161134b565b60408201526113f76060840161134b565b60608201526114086080840161134b565b608082015261141960a0840161134b565b60a082015261142a60c08401611370565b60c082015261143b60e08401611385565b60e082015261010061144e818501611397565b90820152610120611460848201611397565b90820152610140611472848201611397565b90820152610160611484848201611397565b9082015261018061149684820161134b565b908201526101a06114a884820161134b565b908201526101c06114ba84820161134b565b908201529392505050565b6000602082840312156114d757600080fd5b61128a83836112e2565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261151657600080fd5b83018035915067ffffffffffffffff82111561153157600080fd5b60200191503681900382131561154657600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808d168352808c166020840152808b1660408401525088606083015260e060808301526115de60e08301888a61154d565b82810360a08401526115f181878961154d565b905082810360c084015261160681858761154d565b9d9c50505050505050505050505050565b600061010073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152808d166040850152808c166060850152508960808401528060a0840152611668818401898b61154d565b905082810360c084015261167d81878961154d565b905082810360e084015261169281858761154d565b9e9d5050505050505050505050505050565b6000602082840312156116b657600080fd5b813560ff8116811461128a57600080fd5b600061010073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152808d166040850152808c1660608501525060ff8a1660808401528060a0840152611668818401898b61154d565b600073ffffffffffffffffffffffffffffffffffffffff808d168352808c166020840152808b1660408401525060ff8916606083015260e060808301526115de60e08301888a61154d565b6000815180845260005b8181101561178c57602081850181015186830182015201611770565b8181111561179e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006118006040830184611766565b949350505050565b60208152600061128a602083018461176656fe60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220899ba9574e8c52c72539176723d8c74a8618334587150196e2029371e7486a8464736f6c634300080a0033a2646970667358221220722c61fe2602f4b3008e7a9a899fcb2eaf1517e82305577945d327c6cdb6b63864736f6c634300080a0033","opcodes":"PUSH2 0x221C PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB0F09355 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xB13C96A8 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0xDF59B8B2 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xF5B50E70 EQ PUSH2 0xBD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x117D JUMP JUMPDEST PUSH2 0xDD JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x11D4 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x6C6 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xD8 CALLDATASIZE PUSH1 0x4 PUSH2 0x117D JUMP JUMPDEST PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0x108 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196 SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x285 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x253 SWAP2 SWAP1 PUSH2 0x14C5 JUMP JUMPDEST MLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP3 PUSH1 0x10 DUP4 SWAP1 SHR DUP3 AND SWAP3 PUSH1 0x20 DUP2 SWAP1 SHR DUP4 AND SWAP3 PUSH1 0xFF PUSH1 0x30 DUP4 SWAP1 SHR DUP2 AND SWAP4 PUSH1 0x40 DUP5 SWAP1 SHR SWAP1 SWAP3 AND SWAP3 PUSH1 0xA8 SHR AND SWAP1 JUMP JUMPDEST POP SWAP1 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 SWAP3 POP DUP8 SWAP2 POP PUSH2 0x2C2 SWAP1 POP PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x2D2 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 PUSH2 0x2E0 PUSH1 0x40 DUP11 ADD DUP11 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x2ED PUSH1 0x60 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x2FA PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x313 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1596 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x3B3 SWAP1 PUSH2 0x3AD PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST DUP4 PUSH2 0xE6A JUMP JUMPDEST PUSH2 0x3C3 PUSH1 0xA0 DUP6 ADD PUSH1 0x80 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0x3F0 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9439658A562A5C46B1173589DF89CF001483D685BAD28AEDAFF4A88656292D81 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0x464 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F2 SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x522 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH4 0x183FB413 PUSH1 0xE0 SHL DUP6 DUP6 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x547 SWAP2 SWAP1 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x554 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x564 PUSH1 0x60 DUP10 ADD PUSH1 0x40 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST DUP7 PUSH2 0x572 PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x57F PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x58C PUSH1 0xC0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x5A6 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1617 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x100 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x640 SWAP1 PUSH2 0x3AD PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x650 PUSH1 0xC0 DUP6 ADD PUSH1 0xA0 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0x67D PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA76F65411EC66A7FB6BC467432EB14767900449AE4469FA295E4441FE5E1CB73 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x801 PUSH2 0x6D8 PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x126D JUMP JUMPDEST PUSH32 0x183FB41300000000000000000000000000000000000000000000000000000000 DUP6 PUSH2 0x70A PUSH1 0xE0 DUP8 ADD PUSH1 0xC0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x71A PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x72B PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x73B PUSH1 0x80 DUP11 ADD PUSH1 0x60 DUP12 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x749 PUSH2 0x100 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x757 PUSH2 0x120 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x765 PUSH2 0x1C0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x77F SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x16C7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0xEF8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8AE PUSH2 0x818 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 DUP7 PUSH2 0x84A PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x85B PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x86B PUSH1 0x80 DUP11 ADD PUSH1 0x60 DUP12 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x879 PUSH2 0x180 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x887 PUSH2 0x1A0 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x895 PUSH2 0x1C0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x77F SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x171B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x945 PUSH2 0x8C5 PUSH1 0x60 DUP7 ADD PUSH1 0x40 DUP8 ADD PUSH2 0x126D JUMP JUMPDEST PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 DUP8 PUSH2 0x8F7 PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x908 PUSH2 0x100 DUP11 ADD PUSH1 0xE0 DUP12 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x918 PUSH1 0x80 DUP12 ADD PUSH1 0x60 DUP13 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x926 PUSH2 0x140 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x934 PUSH2 0x160 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST DUP15 DUP1 PUSH2 0x1C0 ADD SWAP1 PUSH2 0x895 SWAP2 SWAP1 PUSH2 0x14E1 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0x7A708E92 PUSH2 0x973 PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 DUP6 DUP6 PUSH2 0x986 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP8 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP6 AND PUSH1 0x24 DUP6 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x44 DUP5 ADD MSTORE DUP4 AND PUSH1 0x64 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP2 POP PUSH2 0xA51 SWAP1 POP PUSH2 0xA47 PUSH1 0x80 DUP8 ADD PUSH1 0x60 DUP9 ADD PUSH2 0x16A4 JUMP JUMPDEST DUP3 SWAP1 PUSH1 0xFF AND PUSH2 0xFD3 JUMP JUMPDEST PUSH2 0xA5C DUP2 PUSH1 0x1 PUSH2 0x107C JUMP JUMPDEST PUSH2 0xA67 DUP2 PUSH1 0x0 PUSH2 0x10C1 JUMP JUMPDEST PUSH2 0xA72 DUP2 PUSH1 0x0 PUSH2 0x1106 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH4 0xF51E435B PUSH2 0xA9E PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 POP PUSH2 0xB4B PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3A0CA721FC364424566385A1AA271ED508CC2C0949C2272575FB3013A163A45F DUP6 DUP6 PUSH2 0xB94 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0xBFE PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xCBC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST POP SWAP1 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 SWAP3 POP DUP8 SWAP2 POP PUSH2 0xCF9 SWAP1 POP PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH2 0xD09 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 PUSH2 0xD17 PUSH1 0x40 DUP11 ADD DUP11 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0xD24 PUSH1 0x60 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0xD31 PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD4A SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1596 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0xDE4 SWAP1 PUSH2 0x3AD PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0xDF4 PUSH1 0xA0 DUP6 ADD PUSH1 0x80 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x120 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0xE21 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7A943A5B6C214BF7726C069A878B1E2A8E7371981D516048B84E03743E67BC28 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 PUSH2 0xEC0 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x17D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 ADDRESS PUSH1 0x40 MLOAD PUSH2 0xF08 SWAP1 PUSH2 0x114B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0xF41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xD1F5789400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xD1F57894 SWAP1 PUSH2 0xF99 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x17D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0x104C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1043 SWAP2 SWAP1 PUSH2 0x1808 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF AND PUSH1 0x30 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x38 DUP2 PUSH2 0x108A JUMPI PUSH1 0x0 PUSH2 0x108D JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x3C DUP2 PUSH2 0x10CF JUMPI PUSH1 0x0 PUSH2 0x10D2 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0x1114 JUMPI PUSH1 0x0 PUSH2 0x1117 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH2 0x9CB DUP1 PUSH2 0x181C DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x117A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x119B DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xC0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x11F2 DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x120E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xE0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x123E DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x125A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH2 0x1E0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x127F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x128A DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x12DC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x133E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x136B DUP2 PUSH2 0x1158 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13BD PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x13C7 DUP5 DUP5 PUSH2 0x12E2 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x13D5 PUSH1 0x20 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x13E6 PUSH1 0x40 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x13F7 PUSH1 0x60 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1408 PUSH1 0x80 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1419 PUSH1 0xA0 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x142A PUSH1 0xC0 DUP5 ADD PUSH2 0x1370 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x143B PUSH1 0xE0 DUP5 ADD PUSH2 0x1385 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x144E DUP2 DUP6 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x1460 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x1472 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x1484 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x1496 DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x14A8 DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x14BA DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x128A DUP4 DUP4 PUSH2 0x12E2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x1546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND DUP4 MSTORE DUP1 DUP13 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP12 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP9 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x15DE PUSH1 0xE0 DUP4 ADD DUP9 DUP11 PUSH2 0x154D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x15F1 DUP2 DUP8 DUP10 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1606 DUP2 DUP6 DUP8 PUSH2 0x154D JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND DUP5 MSTORE DUP1 DUP15 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 DUP14 AND PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP13 AND PUSH1 0x60 DUP6 ADD MSTORE POP DUP10 PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x1668 DUP2 DUP5 ADD DUP10 DUP12 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x167D DUP2 DUP8 DUP10 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1692 DUP2 DUP6 DUP8 PUSH2 0x154D JUMP JUMPDEST SWAP15 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x128A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND DUP5 MSTORE DUP1 DUP15 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 DUP14 AND PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP13 AND PUSH1 0x60 DUP6 ADD MSTORE POP PUSH1 0xFF DUP11 AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x1668 DUP2 DUP5 ADD DUP10 DUP12 PUSH2 0x154D JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND DUP4 MSTORE DUP1 DUP13 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP12 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x15DE PUSH1 0xE0 DUP4 ADD DUP9 DUP11 PUSH2 0x154D JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x178C JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1770 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x179E JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1800 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1766 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x128A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1766 JUMP INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 SWAP12 0xA9 JUMPI 0x4E DUP13 MSTORE 0xC7 0x25 CODECOPY OR PUSH8 0x23D8C74A86183345 DUP8 ISZERO ADD SWAP7 0xE2 MUL SWAP4 PUSH18 0xE7486A8464736F6C634300080A0033A26469 PUSH17 0x667358221220722C61FE2602F4B3008E7A SWAP11 DUP10 SWAP16 0xCB 0x2E 0xAF ISZERO OR 0xE8 0x23 SDIV JUMPI PUSH26 0x45D327C6CDB6B63864736F6C634300080A003300000000000000 ","sourceMap":"786:7674:95:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;786:7674:95;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_initTokenWithProxy_16974":{"entryPoint":3832,"id":16974,"parameterSlots":2,"returnSlots":1},"@_upgradeTokenImplementation_17002":{"entryPoint":3690,"id":17002,"parameterSlots":3,"returnSlots":0},"@executeInitReserve_16727":{"entryPoint":1734,"id":16727,"parameterSlots":2,"returnSlots":0},"@executeUpdateAToken_16799":{"entryPoint":1081,"id":16799,"parameterSlots":2,"returnSlots":0},"@executeUpdateStableDebtToken_16869":{"entryPoint":3027,"id":16869,"parameterSlots":2,"returnSlots":0},"@executeUpdateVariableDebtToken_16939":{"entryPoint":221,"id":16939,"parameterSlots":2,"returnSlots":0},"@getParams_14000":{"entryPoint":null,"id":14000,"parameterSlots":1,"returnSlots":6},"@setActive_13141":{"entryPoint":4220,"id":13141,"parameterSlots":2,"returnSlots":0},"@setDecimals_13091":{"entryPoint":4051,"id":13091,"parameterSlots":2,"returnSlots":0},"@setFrozen_13191":{"entryPoint":4358,"id":13191,"parameterSlots":2,"returnSlots":0},"@setPaused_13241":{"entryPoint":4289,"id":13241,"parameterSlots":2,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":5015,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":4834,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":4717,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_struct$_InitReserveInput_$23846_calldata_ptr":{"entryPoint":4640,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_IPool_$5073t_struct$_UpdateATokenInput_$23861_calldata_ptr":{"entryPoint":4564,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_IPool_$5073t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr":{"entryPoint":4477,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory":{"entryPoint":5317,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory":{"entryPoint":5026,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8":{"entryPoint":5796,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":4939,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":4997,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":4976,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":5990,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":5453,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":6097,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5655,"id":null,"parameterSlots":12,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5831,"id":null,"parameterSlots":12,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5526,"id":null,"parameterSlots":11,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5915,"id":null,"parameterSlots":11,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":6152,"id":null,"parameterSlots":2,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_string_calldata_ptr":{"entryPoint":5345,"id":null,"parameterSlots":2,"returnSlots":2},"allocate_memory":{"entryPoint":4753,"id":null,"parameterSlots":0,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":4440,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:14525:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"153:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"162:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"165:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"155:6:124"},"nodeType":"YulFunctionCall","src":"155:12:124"},"nodeType":"YulExpressionStatement","src":"155:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"107:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:73:124"},"nodeType":"YulIf","src":"76:93:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:161:124"},{"body":{"nodeType":"YulBlock","src":"322:415:124","statements":[{"body":{"nodeType":"YulBlock","src":"368:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"377:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"380:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"370:6:124"},"nodeType":"YulFunctionCall","src":"370:12:124"},"nodeType":"YulExpressionStatement","src":"370:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"343:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"352:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"339:3:124"},"nodeType":"YulFunctionCall","src":"339:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"364:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"335:3:124"},"nodeType":"YulFunctionCall","src":"335:32:124"},"nodeType":"YulIf","src":"332:52:124"},{"nodeType":"YulVariableDeclaration","src":"393:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"419:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"406:12:124"},"nodeType":"YulFunctionCall","src":"406:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"397:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"470:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"438:31:124"},"nodeType":"YulFunctionCall","src":"438:38:124"},"nodeType":"YulExpressionStatement","src":"438:38:124"},{"nodeType":"YulAssignment","src":"485:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"495:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"485:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"509:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"540:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"551:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"536:3:124"},"nodeType":"YulFunctionCall","src":"536:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"523:12:124"},"nodeType":"YulFunctionCall","src":"523:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"513:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"598:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"607:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"610:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"600:6:124"},"nodeType":"YulFunctionCall","src":"600:12:124"},"nodeType":"YulExpressionStatement","src":"600:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"570:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"578:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"567:2:124"},"nodeType":"YulFunctionCall","src":"567:30:124"},"nodeType":"YulIf","src":"564:50:124"},{"nodeType":"YulVariableDeclaration","src":"623:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"637:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"648:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"633:3:124"},"nodeType":"YulFunctionCall","src":"633:22:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"627:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"694:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"703:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"706:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"696:6:124"},"nodeType":"YulFunctionCall","src":"696:12:124"},"nodeType":"YulExpressionStatement","src":"696:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"675:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"684:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"671:3:124"},"nodeType":"YulFunctionCall","src":"671:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"689:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"667:3:124"},"nodeType":"YulFunctionCall","src":"667:26:124"},"nodeType":"YulIf","src":"664:46:124"},{"nodeType":"YulAssignment","src":"719:12:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"729:2:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"719:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"280:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"291:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"303:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"311:6:124","type":""}],"src":"180:557:124"},{"body":{"nodeType":"YulBlock","src":"881:415:124","statements":[{"body":{"nodeType":"YulBlock","src":"927:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"936:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"939:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"929:6:124"},"nodeType":"YulFunctionCall","src":"929:12:124"},"nodeType":"YulExpressionStatement","src":"929:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"902:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"911:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"898:3:124"},"nodeType":"YulFunctionCall","src":"898:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"923:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"894:3:124"},"nodeType":"YulFunctionCall","src":"894:32:124"},"nodeType":"YulIf","src":"891:52:124"},{"nodeType":"YulVariableDeclaration","src":"952:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"965:12:124"},"nodeType":"YulFunctionCall","src":"965:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"956:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1029:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"997:31:124"},"nodeType":"YulFunctionCall","src":"997:38:124"},"nodeType":"YulExpressionStatement","src":"997:38:124"},{"nodeType":"YulAssignment","src":"1044:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1054:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1044:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1068:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1099:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1110:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1095:3:124"},"nodeType":"YulFunctionCall","src":"1095:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1082:12:124"},"nodeType":"YulFunctionCall","src":"1082:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1072:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1157:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1166:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1169:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1159:6:124"},"nodeType":"YulFunctionCall","src":"1159:12:124"},"nodeType":"YulExpressionStatement","src":"1159:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1129:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1137:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1126:2:124"},"nodeType":"YulFunctionCall","src":"1126:30:124"},"nodeType":"YulIf","src":"1123:50:124"},{"nodeType":"YulVariableDeclaration","src":"1182:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1196:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1207:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1192:3:124"},"nodeType":"YulFunctionCall","src":"1192:22:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1186:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1253:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1262:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1265:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1255:6:124"},"nodeType":"YulFunctionCall","src":"1255:12:124"},"nodeType":"YulExpressionStatement","src":"1255:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1234:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1243:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1230:3:124"},"nodeType":"YulFunctionCall","src":"1230:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"1248:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1226:3:124"},"nodeType":"YulFunctionCall","src":"1226:26:124"},"nodeType":"YulIf","src":"1223:46:124"},{"nodeType":"YulAssignment","src":"1278:12:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"1288:2:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1278:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_struct$_UpdateATokenInput_$23861_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"839:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"850:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"862:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"870:6:124","type":""}],"src":"742:554:124"},{"body":{"nodeType":"YulBlock","src":"1439:415:124","statements":[{"body":{"nodeType":"YulBlock","src":"1485:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1494:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1497:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1487:6:124"},"nodeType":"YulFunctionCall","src":"1487:12:124"},"nodeType":"YulExpressionStatement","src":"1487:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1460:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1469:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1456:3:124"},"nodeType":"YulFunctionCall","src":"1456:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1481:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1452:3:124"},"nodeType":"YulFunctionCall","src":"1452:32:124"},"nodeType":"YulIf","src":"1449:52:124"},{"nodeType":"YulVariableDeclaration","src":"1510:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1536:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1523:12:124"},"nodeType":"YulFunctionCall","src":"1523:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1514:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1587:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"1555:31:124"},"nodeType":"YulFunctionCall","src":"1555:38:124"},"nodeType":"YulExpressionStatement","src":"1555:38:124"},{"nodeType":"YulAssignment","src":"1602:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1612:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1602:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1626:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1657:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1668:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1653:3:124"},"nodeType":"YulFunctionCall","src":"1653:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1640:12:124"},"nodeType":"YulFunctionCall","src":"1640:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1630:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1715:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1724:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1727:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1717:6:124"},"nodeType":"YulFunctionCall","src":"1717:12:124"},"nodeType":"YulExpressionStatement","src":"1717:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1687:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1695:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1684:2:124"},"nodeType":"YulFunctionCall","src":"1684:30:124"},"nodeType":"YulIf","src":"1681:50:124"},{"nodeType":"YulVariableDeclaration","src":"1740:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1754:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"1765:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1750:3:124"},"nodeType":"YulFunctionCall","src":"1750:22:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1744:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1811:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1820:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1823:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1813:6:124"},"nodeType":"YulFunctionCall","src":"1813:12:124"},"nodeType":"YulExpressionStatement","src":"1813:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1792:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1801:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1788:3:124"},"nodeType":"YulFunctionCall","src":"1788:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"1806:3:124","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1784:3:124"},"nodeType":"YulFunctionCall","src":"1784:26:124"},"nodeType":"YulIf","src":"1781:46:124"},{"nodeType":"YulAssignment","src":"1836:12:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"1846:2:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1836:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_struct$_InitReserveInput_$23846_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1408:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1420:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1428:6:124","type":""}],"src":"1301:553:124"},{"body":{"nodeType":"YulBlock","src":"1929:184:124","statements":[{"body":{"nodeType":"YulBlock","src":"1975:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1984:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1987:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1977:6:124"},"nodeType":"YulFunctionCall","src":"1977:12:124"},"nodeType":"YulExpressionStatement","src":"1977:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1950:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1959:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1946:3:124"},"nodeType":"YulFunctionCall","src":"1946:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1971:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1942:3:124"},"nodeType":"YulFunctionCall","src":"1942:32:124"},"nodeType":"YulIf","src":"1939:52:124"},{"nodeType":"YulVariableDeclaration","src":"2000:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2026:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2013:12:124"},"nodeType":"YulFunctionCall","src":"2013:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2004:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2077:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"2045:31:124"},"nodeType":"YulFunctionCall","src":"2045:38:124"},"nodeType":"YulExpressionStatement","src":"2045:38:124"},{"nodeType":"YulAssignment","src":"2092:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2102:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2092:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1895:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1906:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1918:6:124","type":""}],"src":"1859:254:124"},{"body":{"nodeType":"YulBlock","src":"2219:125:124","statements":[{"nodeType":"YulAssignment","src":"2229:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2241:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2252:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2237:3:124"},"nodeType":"YulFunctionCall","src":"2237:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2229:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2271:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2286:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2294:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2282:3:124"},"nodeType":"YulFunctionCall","src":"2282:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2264:6:124"},"nodeType":"YulFunctionCall","src":"2264:74:124"},"nodeType":"YulExpressionStatement","src":"2264:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2188:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2199:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2210:4:124","type":""}],"src":"2118:226:124"},{"body":{"nodeType":"YulBlock","src":"2390:360:124","statements":[{"nodeType":"YulAssignment","src":"2400:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2416:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2410:5:124"},"nodeType":"YulFunctionCall","src":"2410:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2400:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2428:34:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2450:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2458:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2446:3:124"},"nodeType":"YulFunctionCall","src":"2446:16:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2432:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2545:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2566:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2569:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2559:6:124"},"nodeType":"YulFunctionCall","src":"2559:88:124"},"nodeType":"YulExpressionStatement","src":"2559:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2667:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2670:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2660:6:124"},"nodeType":"YulFunctionCall","src":"2660:15:124"},"nodeType":"YulExpressionStatement","src":"2660:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2695:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2698:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2688:6:124"},"nodeType":"YulFunctionCall","src":"2688:15:124"},"nodeType":"YulExpressionStatement","src":"2688:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2480:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"2492:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2477:2:124"},"nodeType":"YulFunctionCall","src":"2477:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2516:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2528:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2513:2:124"},"nodeType":"YulFunctionCall","src":"2513:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2474:2:124"},"nodeType":"YulFunctionCall","src":"2474:62:124"},"nodeType":"YulIf","src":"2471:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2729:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2733:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2722:6:124"},"nodeType":"YulFunctionCall","src":"2722:22:124"},"nodeType":"YulExpressionStatement","src":"2722:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2379:6:124","type":""}],"src":"2349:401:124"},{"body":{"nodeType":"YulBlock","src":"2846:489:124","statements":[{"body":{"nodeType":"YulBlock","src":"2890:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2899:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2902:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2892:6:124"},"nodeType":"YulFunctionCall","src":"2892:12:124"},"nodeType":"YulExpressionStatement","src":"2892:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"2867:3:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2872:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2863:3:124"},"nodeType":"YulFunctionCall","src":"2863:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"2884:4:124","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2859:3:124"},"nodeType":"YulFunctionCall","src":"2859:30:124"},"nodeType":"YulIf","src":"2856:50:124"},{"nodeType":"YulVariableDeclaration","src":"2915:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2935:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2929:5:124"},"nodeType":"YulFunctionCall","src":"2929:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2919:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2947:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2969:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2977:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2965:3:124"},"nodeType":"YulFunctionCall","src":"2965:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2951:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3065:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3086:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3089:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3079:6:124"},"nodeType":"YulFunctionCall","src":"3079:88:124"},"nodeType":"YulExpressionStatement","src":"3079:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3187:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3190:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3180:6:124"},"nodeType":"YulFunctionCall","src":"3180:15:124"},"nodeType":"YulExpressionStatement","src":"3180:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3218:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3208:6:124"},"nodeType":"YulFunctionCall","src":"3208:15:124"},"nodeType":"YulExpressionStatement","src":"3208:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3000:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"3012:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2997:2:124"},"nodeType":"YulFunctionCall","src":"2997:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3036:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3048:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3033:2:124"},"nodeType":"YulFunctionCall","src":"3033:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2994:2:124"},"nodeType":"YulFunctionCall","src":"2994:62:124"},"nodeType":"YulIf","src":"2991:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3249:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3253:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3242:6:124"},"nodeType":"YulFunctionCall","src":"3242:22:124"},"nodeType":"YulExpressionStatement","src":"3242:22:124"},{"nodeType":"YulAssignment","src":"3273:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3282:6:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3273:5:124"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3304:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3318:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3312:5:124"},"nodeType":"YulFunctionCall","src":"3312:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3297:6:124"},"nodeType":"YulFunctionCall","src":"3297:32:124"},"nodeType":"YulExpressionStatement","src":"3297:32:124"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2817:9:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2828:3:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2836:5:124","type":""}],"src":"2755:580:124"},{"body":{"nodeType":"YulBlock","src":"3400:132:124","statements":[{"nodeType":"YulAssignment","src":"3410:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3425:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3419:5:124"},"nodeType":"YulFunctionCall","src":"3419:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3410:5:124"}]},{"body":{"nodeType":"YulBlock","src":"3510:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:124"},"nodeType":"YulFunctionCall","src":"3512:12:124"},"nodeType":"YulExpressionStatement","src":"3512:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3454:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3465:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3472:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3461:3:124"},"nodeType":"YulFunctionCall","src":"3461:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3451:2:124"},"nodeType":"YulFunctionCall","src":"3451:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3444:6:124"},"nodeType":"YulFunctionCall","src":"3444:65:124"},"nodeType":"YulIf","src":"3441:85:124"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3379:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3390:5:124","type":""}],"src":"3340:192:124"},{"body":{"nodeType":"YulBlock","src":"3596:110:124","statements":[{"nodeType":"YulAssignment","src":"3606:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3621:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3615:5:124"},"nodeType":"YulFunctionCall","src":"3615:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3606:5:124"}]},{"body":{"nodeType":"YulBlock","src":"3684:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3693:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3696:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3686:6:124"},"nodeType":"YulFunctionCall","src":"3686:12:124"},"nodeType":"YulExpressionStatement","src":"3686:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3650:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3661:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3668:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3657:3:124"},"nodeType":"YulFunctionCall","src":"3657:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3647:2:124"},"nodeType":"YulFunctionCall","src":"3647:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3640:6:124"},"nodeType":"YulFunctionCall","src":"3640:43:124"},"nodeType":"YulIf","src":"3637:63:124"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3575:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3586:5:124","type":""}],"src":"3537:169:124"},{"body":{"nodeType":"YulBlock","src":"3770:104:124","statements":[{"nodeType":"YulAssignment","src":"3780:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3795:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3789:5:124"},"nodeType":"YulFunctionCall","src":"3789:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3780:5:124"}]},{"body":{"nodeType":"YulBlock","src":"3852:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3861:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3864:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3854:6:124"},"nodeType":"YulFunctionCall","src":"3854:12:124"},"nodeType":"YulExpressionStatement","src":"3854:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3824:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3835:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3842:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3831:3:124"},"nodeType":"YulFunctionCall","src":"3831:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3821:2:124"},"nodeType":"YulFunctionCall","src":"3821:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3814:6:124"},"nodeType":"YulFunctionCall","src":"3814:37:124"},"nodeType":"YulIf","src":"3811:57:124"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3749:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3760:5:124","type":""}],"src":"3711:163:124"},{"body":{"nodeType":"YulBlock","src":"3939:85:124","statements":[{"nodeType":"YulAssignment","src":"3949:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3964:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3958:5:124"},"nodeType":"YulFunctionCall","src":"3958:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3949:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4012:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"3980:31:124"},"nodeType":"YulFunctionCall","src":"3980:38:124"},"nodeType":"YulExpressionStatement","src":"3980:38:124"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3918:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3929:5:124","type":""}],"src":"3879:145:124"},{"body":{"nodeType":"YulBlock","src":"4140:1536:124","statements":[{"body":{"nodeType":"YulBlock","src":"4187:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4196:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4199:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4189:6:124"},"nodeType":"YulFunctionCall","src":"4189:12:124"},"nodeType":"YulExpressionStatement","src":"4189:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4161:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4157:3:124"},"nodeType":"YulFunctionCall","src":"4157:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4182:3:124","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4153:3:124"},"nodeType":"YulFunctionCall","src":"4153:33:124"},"nodeType":"YulIf","src":"4150:53:124"},{"nodeType":"YulVariableDeclaration","src":"4212:30:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4225:15:124"},"nodeType":"YulFunctionCall","src":"4225:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4216:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4258:5:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4318:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4329:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"4265:52:124"},"nodeType":"YulFunctionCall","src":"4265:72:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4251:6:124"},"nodeType":"YulFunctionCall","src":"4251:87:124"},"nodeType":"YulExpressionStatement","src":"4251:87:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4358:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4365:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4354:3:124"},"nodeType":"YulFunctionCall","src":"4354:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4404:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4415:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4400:3:124"},"nodeType":"YulFunctionCall","src":"4400:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4370:29:124"},"nodeType":"YulFunctionCall","src":"4370:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4347:6:124"},"nodeType":"YulFunctionCall","src":"4347:73:124"},"nodeType":"YulExpressionStatement","src":"4347:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4440:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4447:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4436:3:124"},"nodeType":"YulFunctionCall","src":"4436:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4486:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4497:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4482:3:124"},"nodeType":"YulFunctionCall","src":"4482:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4452:29:124"},"nodeType":"YulFunctionCall","src":"4452:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4429:6:124"},"nodeType":"YulFunctionCall","src":"4429:73:124"},"nodeType":"YulExpressionStatement","src":"4429:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4522:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4529:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4518:3:124"},"nodeType":"YulFunctionCall","src":"4518:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4568:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4579:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4564:3:124"},"nodeType":"YulFunctionCall","src":"4564:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4534:29:124"},"nodeType":"YulFunctionCall","src":"4534:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4511:6:124"},"nodeType":"YulFunctionCall","src":"4511:73:124"},"nodeType":"YulExpressionStatement","src":"4511:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4604:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4611:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4600:3:124"},"nodeType":"YulFunctionCall","src":"4600:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4651:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4662:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4647:3:124"},"nodeType":"YulFunctionCall","src":"4647:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4617:29:124"},"nodeType":"YulFunctionCall","src":"4617:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4593:6:124"},"nodeType":"YulFunctionCall","src":"4593:75:124"},"nodeType":"YulExpressionStatement","src":"4593:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4688:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4695:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4684:3:124"},"nodeType":"YulFunctionCall","src":"4684:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4735:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4746:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4731:3:124"},"nodeType":"YulFunctionCall","src":"4731:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4701:29:124"},"nodeType":"YulFunctionCall","src":"4701:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4677:6:124"},"nodeType":"YulFunctionCall","src":"4677:75:124"},"nodeType":"YulExpressionStatement","src":"4677:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4772:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4779:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4768:3:124"},"nodeType":"YulFunctionCall","src":"4768:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4818:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4829:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4814:3:124"},"nodeType":"YulFunctionCall","src":"4814:19:124"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"4785:28:124"},"nodeType":"YulFunctionCall","src":"4785:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4761:6:124"},"nodeType":"YulFunctionCall","src":"4761:74:124"},"nodeType":"YulExpressionStatement","src":"4761:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4855:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4862:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4851:3:124"},"nodeType":"YulFunctionCall","src":"4851:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4901:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4912:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4897:3:124"},"nodeType":"YulFunctionCall","src":"4897:19:124"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"4868:28:124"},"nodeType":"YulFunctionCall","src":"4868:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4844:6:124"},"nodeType":"YulFunctionCall","src":"4844:74:124"},"nodeType":"YulExpressionStatement","src":"4844:74:124"},{"nodeType":"YulVariableDeclaration","src":"4927:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4937:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4931:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4960:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4967:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4956:3:124"},"nodeType":"YulFunctionCall","src":"4956:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5006:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5017:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5002:3:124"},"nodeType":"YulFunctionCall","src":"5002:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"4972:29:124"},"nodeType":"YulFunctionCall","src":"4972:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4949:6:124"},"nodeType":"YulFunctionCall","src":"4949:73:124"},"nodeType":"YulExpressionStatement","src":"4949:73:124"},{"nodeType":"YulVariableDeclaration","src":"5031:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5041:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5035:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5064:5:124"},{"name":"_2","nodeType":"YulIdentifier","src":"5071:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5060:3:124"},"nodeType":"YulFunctionCall","src":"5060:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5110:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"5121:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5106:3:124"},"nodeType":"YulFunctionCall","src":"5106:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"5076:29:124"},"nodeType":"YulFunctionCall","src":"5076:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5053:6:124"},"nodeType":"YulFunctionCall","src":"5053:73:124"},"nodeType":"YulExpressionStatement","src":"5053:73:124"},{"nodeType":"YulVariableDeclaration","src":"5135:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5145:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5139:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5168:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"5175:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5164:3:124"},"nodeType":"YulFunctionCall","src":"5164:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5214:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"5225:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5210:3:124"},"nodeType":"YulFunctionCall","src":"5210:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"5180:29:124"},"nodeType":"YulFunctionCall","src":"5180:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5157:6:124"},"nodeType":"YulFunctionCall","src":"5157:73:124"},"nodeType":"YulExpressionStatement","src":"5157:73:124"},{"nodeType":"YulVariableDeclaration","src":"5239:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5249:3:124","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"5243:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5272:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"5279:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5268:3:124"},"nodeType":"YulFunctionCall","src":"5268:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5318:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"5329:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5314:3:124"},"nodeType":"YulFunctionCall","src":"5314:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"5284:29:124"},"nodeType":"YulFunctionCall","src":"5284:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5261:6:124"},"nodeType":"YulFunctionCall","src":"5261:73:124"},"nodeType":"YulExpressionStatement","src":"5261:73:124"},{"nodeType":"YulVariableDeclaration","src":"5343:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5353:3:124","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"5347:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5376:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"5383:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5372:3:124"},"nodeType":"YulFunctionCall","src":"5372:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5422:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"5433:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5418:3:124"},"nodeType":"YulFunctionCall","src":"5418:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"5388:29:124"},"nodeType":"YulFunctionCall","src":"5388:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5365:6:124"},"nodeType":"YulFunctionCall","src":"5365:73:124"},"nodeType":"YulExpressionStatement","src":"5365:73:124"},{"nodeType":"YulVariableDeclaration","src":"5447:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5457:3:124","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"5451:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5480:5:124"},{"name":"_6","nodeType":"YulIdentifier","src":"5487:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5476:3:124"},"nodeType":"YulFunctionCall","src":"5476:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5526:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"5537:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5522:3:124"},"nodeType":"YulFunctionCall","src":"5522:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"5492:29:124"},"nodeType":"YulFunctionCall","src":"5492:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5469:6:124"},"nodeType":"YulFunctionCall","src":"5469:73:124"},"nodeType":"YulExpressionStatement","src":"5469:73:124"},{"nodeType":"YulVariableDeclaration","src":"5551:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5561:3:124","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"5555:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5584:5:124"},{"name":"_7","nodeType":"YulIdentifier","src":"5591:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5580:3:124"},"nodeType":"YulFunctionCall","src":"5580:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5630:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"5641:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5626:3:124"},"nodeType":"YulFunctionCall","src":"5626:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"5596:29:124"},"nodeType":"YulFunctionCall","src":"5596:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5573:6:124"},"nodeType":"YulFunctionCall","src":"5573:73:124"},"nodeType":"YulExpressionStatement","src":"5573:73:124"},{"nodeType":"YulAssignment","src":"5655:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5665:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5655:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4106:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4117:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4129:6:124","type":""}],"src":"4029:1647:124"},{"body":{"nodeType":"YulBlock","src":"5804:159:124","statements":[{"body":{"nodeType":"YulBlock","src":"5850:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5859:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5862:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5852:6:124"},"nodeType":"YulFunctionCall","src":"5852:12:124"},"nodeType":"YulExpressionStatement","src":"5852:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5825:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5834:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5821:3:124"},"nodeType":"YulFunctionCall","src":"5821:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5846:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5817:3:124"},"nodeType":"YulFunctionCall","src":"5817:32:124"},"nodeType":"YulIf","src":"5814:52:124"},{"nodeType":"YulAssignment","src":"5875:82:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5938:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5949:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"5885:52:124"},"nodeType":"YulFunctionCall","src":"5885:72:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5875:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5770:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5781:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5793:6:124","type":""}],"src":"5681:282:124"},{"body":{"nodeType":"YulBlock","src":"6063:486:124","statements":[{"nodeType":"YulVariableDeclaration","src":"6073:51:124","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"6112:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6099:12:124"},"nodeType":"YulFunctionCall","src":"6099:25:124"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"6077:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6272:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6281:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6284:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6274:6:124"},"nodeType":"YulFunctionCall","src":"6274:12:124"},"nodeType":"YulExpressionStatement","src":"6274:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6147:18:124"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6175:12:124"},"nodeType":"YulFunctionCall","src":"6175:14:124"},{"name":"base_ref","nodeType":"YulIdentifier","src":"6191:8:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6171:3:124"},"nodeType":"YulFunctionCall","src":"6171:29:124"},{"kind":"number","nodeType":"YulLiteral","src":"6202:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6167:3:124"},"nodeType":"YulFunctionCall","src":"6167:102:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6143:3:124"},"nodeType":"YulFunctionCall","src":"6143:127:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6136:6:124"},"nodeType":"YulFunctionCall","src":"6136:135:124"},"nodeType":"YulIf","src":"6133:155:124"},{"nodeType":"YulVariableDeclaration","src":"6297:47:124","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"6315:8:124"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6325:18:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6311:3:124"},"nodeType":"YulFunctionCall","src":"6311:33:124"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"6301:6:124","type":""}]},{"nodeType":"YulAssignment","src":"6353:30:124","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"6376:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6363:12:124"},"nodeType":"YulFunctionCall","src":"6363:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"6353:6:124"}]},{"body":{"nodeType":"YulBlock","src":"6426:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6435:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6438:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6428:6:124"},"nodeType":"YulFunctionCall","src":"6428:12:124"},"nodeType":"YulExpressionStatement","src":"6428:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6398:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6406:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6395:2:124"},"nodeType":"YulFunctionCall","src":"6395:30:124"},"nodeType":"YulIf","src":"6392:50:124"},{"nodeType":"YulAssignment","src":"6451:25:124","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"6463:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6471:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6459:3:124"},"nodeType":"YulFunctionCall","src":"6459:17:124"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"6451:4:124"}]},{"body":{"nodeType":"YulBlock","src":"6527:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6536:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6539:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6529:6:124"},"nodeType":"YulFunctionCall","src":"6529:12:124"},"nodeType":"YulExpressionStatement","src":"6529:12:124"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"6492:4:124"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6502:12:124"},"nodeType":"YulFunctionCall","src":"6502:14:124"},{"name":"length","nodeType":"YulIdentifier","src":"6518:6:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6498:3:124"},"nodeType":"YulFunctionCall","src":"6498:27:124"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"6488:3:124"},"nodeType":"YulFunctionCall","src":"6488:38:124"},"nodeType":"YulIf","src":"6485:58:124"}]},"name":"access_calldata_tail_t_string_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"6020:8:124","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"6030:11:124","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"6046:4:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"6052:6:124","type":""}],"src":"5968:581:124"},{"body":{"nodeType":"YulBlock","src":"6648:486:124","statements":[{"nodeType":"YulVariableDeclaration","src":"6658:51:124","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"6697:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6684:12:124"},"nodeType":"YulFunctionCall","src":"6684:25:124"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"6662:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6857:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6866:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6869:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6859:6:124"},"nodeType":"YulFunctionCall","src":"6859:12:124"},"nodeType":"YulExpressionStatement","src":"6859:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6732:18:124"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6760:12:124"},"nodeType":"YulFunctionCall","src":"6760:14:124"},{"name":"base_ref","nodeType":"YulIdentifier","src":"6776:8:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6756:3:124"},"nodeType":"YulFunctionCall","src":"6756:29:124"},{"kind":"number","nodeType":"YulLiteral","src":"6787:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6752:3:124"},"nodeType":"YulFunctionCall","src":"6752:102:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6728:3:124"},"nodeType":"YulFunctionCall","src":"6728:127:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6721:6:124"},"nodeType":"YulFunctionCall","src":"6721:135:124"},"nodeType":"YulIf","src":"6718:155:124"},{"nodeType":"YulVariableDeclaration","src":"6882:47:124","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"6900:8:124"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6910:18:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6896:3:124"},"nodeType":"YulFunctionCall","src":"6896:33:124"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"6886:6:124","type":""}]},{"nodeType":"YulAssignment","src":"6938:30:124","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"6961:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6948:12:124"},"nodeType":"YulFunctionCall","src":"6948:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"6938:6:124"}]},{"body":{"nodeType":"YulBlock","src":"7011:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7020:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7023:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7013:6:124"},"nodeType":"YulFunctionCall","src":"7013:12:124"},"nodeType":"YulExpressionStatement","src":"7013:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6983:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6991:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6980:2:124"},"nodeType":"YulFunctionCall","src":"6980:30:124"},"nodeType":"YulIf","src":"6977:50:124"},{"nodeType":"YulAssignment","src":"7036:25:124","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"7048:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7056:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7044:3:124"},"nodeType":"YulFunctionCall","src":"7044:17:124"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"7036:4:124"}]},{"body":{"nodeType":"YulBlock","src":"7112:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7121:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7124:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7114:6:124"},"nodeType":"YulFunctionCall","src":"7114:12:124"},"nodeType":"YulExpressionStatement","src":"7114:12:124"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"7077:4:124"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7087:12:124"},"nodeType":"YulFunctionCall","src":"7087:14:124"},{"name":"length","nodeType":"YulIdentifier","src":"7103:6:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7083:3:124"},"nodeType":"YulFunctionCall","src":"7083:27:124"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"7073:3:124"},"nodeType":"YulFunctionCall","src":"7073:38:124"},"nodeType":"YulIf","src":"7070:58:124"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"6605:8:124","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"6615:11:124","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"6631:4:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"6637:6:124","type":""}],"src":"6554:580:124"},{"body":{"nodeType":"YulBlock","src":"7206:259:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7223:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"7228:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7216:6:124"},"nodeType":"YulFunctionCall","src":"7216:19:124"},"nodeType":"YulExpressionStatement","src":"7216:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7261:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"7266:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7257:3:124"},"nodeType":"YulFunctionCall","src":"7257:14:124"},{"name":"start","nodeType":"YulIdentifier","src":"7273:5:124"},{"name":"length","nodeType":"YulIdentifier","src":"7280:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"7244:12:124"},"nodeType":"YulFunctionCall","src":"7244:43:124"},"nodeType":"YulExpressionStatement","src":"7244:43:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7311:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"7316:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7307:3:124"},"nodeType":"YulFunctionCall","src":"7307:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"7325:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7303:3:124"},"nodeType":"YulFunctionCall","src":"7303:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"7332:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7296:6:124"},"nodeType":"YulFunctionCall","src":"7296:38:124"},"nodeType":"YulExpressionStatement","src":"7296:38:124"},{"nodeType":"YulAssignment","src":"7343:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7358:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7371:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7379:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7367:3:124"},"nodeType":"YulFunctionCall","src":"7367:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"7384:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7363:3:124"},"nodeType":"YulFunctionCall","src":"7363:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7354:3:124"},"nodeType":"YulFunctionCall","src":"7354:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"7454:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7350:3:124"},"nodeType":"YulFunctionCall","src":"7350:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7343:3:124"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"7175:5:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7182:6:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7190:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7198:3:124","type":""}],"src":"7139:326:124"},{"body":{"nodeType":"YulBlock","src":"7841:645:124","statements":[{"nodeType":"YulVariableDeclaration","src":"7851:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7855:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7919:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7934:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7942:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7930:3:124"},"nodeType":"YulFunctionCall","src":"7930:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7912:6:124"},"nodeType":"YulFunctionCall","src":"7912:34:124"},"nodeType":"YulExpressionStatement","src":"7912:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7966:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7977:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7962:3:124"},"nodeType":"YulFunctionCall","src":"7962:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7986:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7994:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7982:3:124"},"nodeType":"YulFunctionCall","src":"7982:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7955:6:124"},"nodeType":"YulFunctionCall","src":"7955:43:124"},"nodeType":"YulExpressionStatement","src":"7955:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8018:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8029:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8014:3:124"},"nodeType":"YulFunctionCall","src":"8014:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8038:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8046:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8034:3:124"},"nodeType":"YulFunctionCall","src":"8034:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8007:6:124"},"nodeType":"YulFunctionCall","src":"8007:43:124"},"nodeType":"YulExpressionStatement","src":"8007:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8070:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8081:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8066:3:124"},"nodeType":"YulFunctionCall","src":"8066:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"8086:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8059:6:124"},"nodeType":"YulFunctionCall","src":"8059:34:124"},"nodeType":"YulExpressionStatement","src":"8059:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8113:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8124:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8109:3:124"},"nodeType":"YulFunctionCall","src":"8109:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"8130:3:124","type":"","value":"224"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8102:6:124"},"nodeType":"YulFunctionCall","src":"8102:32:124"},"nodeType":"YulExpressionStatement","src":"8102:32:124"},{"nodeType":"YulVariableDeclaration","src":"8143:77:124","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"8184:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"8192:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8204:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8215:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8200:3:124"},"nodeType":"YulFunctionCall","src":"8200:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"8157:26:124"},"nodeType":"YulFunctionCall","src":"8157:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8147:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8240:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8251:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8236:3:124"},"nodeType":"YulFunctionCall","src":"8236:19:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8261:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8269:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8257:3:124"},"nodeType":"YulFunctionCall","src":"8257:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8229:6:124"},"nodeType":"YulFunctionCall","src":"8229:51:124"},"nodeType":"YulExpressionStatement","src":"8229:51:124"},{"nodeType":"YulVariableDeclaration","src":"8289:64:124","value":{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"8330:6:124"},{"name":"value7","nodeType":"YulIdentifier","src":"8338:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8346:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"8303:26:124"},"nodeType":"YulFunctionCall","src":"8303:50:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"8293:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8373:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8384:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8369:3:124"},"nodeType":"YulFunctionCall","src":"8369:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8394:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8402:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8390:3:124"},"nodeType":"YulFunctionCall","src":"8390:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8362:6:124"},"nodeType":"YulFunctionCall","src":"8362:51:124"},"nodeType":"YulExpressionStatement","src":"8362:51:124"},{"nodeType":"YulAssignment","src":"8422:58:124","value":{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"8457:6:124"},{"name":"value9","nodeType":"YulIdentifier","src":"8465:6:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"8473:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"8430:26:124"},"nodeType":"YulFunctionCall","src":"8430:50:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8422:4:124"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7738:9:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"7749:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"7757:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"7765:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"7773:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7781:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7789:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7797:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7805:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7813:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7821:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7832:4:124","type":""}],"src":"7470:1016:124"},{"body":{"nodeType":"YulBlock","src":"8891:719:124","statements":[{"nodeType":"YulVariableDeclaration","src":"8901:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8911:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8905:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8923:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8933:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8927:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8991:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9006:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"9014:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9002:3:124"},"nodeType":"YulFunctionCall","src":"9002:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8984:6:124"},"nodeType":"YulFunctionCall","src":"8984:34:124"},"nodeType":"YulExpressionStatement","src":"8984:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9038:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9049:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9034:3:124"},"nodeType":"YulFunctionCall","src":"9034:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9058:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"9066:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9054:3:124"},"nodeType":"YulFunctionCall","src":"9054:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9027:6:124"},"nodeType":"YulFunctionCall","src":"9027:43:124"},"nodeType":"YulExpressionStatement","src":"9027:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9090:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9101:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9086:3:124"},"nodeType":"YulFunctionCall","src":"9086:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"9110:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"9118:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9106:3:124"},"nodeType":"YulFunctionCall","src":"9106:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9079:6:124"},"nodeType":"YulFunctionCall","src":"9079:43:124"},"nodeType":"YulExpressionStatement","src":"9079:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9142:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9153:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9138:3:124"},"nodeType":"YulFunctionCall","src":"9138:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"9162:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"9170:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9158:3:124"},"nodeType":"YulFunctionCall","src":"9158:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9131:6:124"},"nodeType":"YulFunctionCall","src":"9131:43:124"},"nodeType":"YulExpressionStatement","src":"9131:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9194:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9205:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9190:3:124"},"nodeType":"YulFunctionCall","src":"9190:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"9211:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9183:6:124"},"nodeType":"YulFunctionCall","src":"9183:35:124"},"nodeType":"YulExpressionStatement","src":"9183:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9238:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9249:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9234:3:124"},"nodeType":"YulFunctionCall","src":"9234:19:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9255:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9227:6:124"},"nodeType":"YulFunctionCall","src":"9227:31:124"},"nodeType":"YulExpressionStatement","src":"9227:31:124"},{"nodeType":"YulVariableDeclaration","src":"9267:76:124","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"9308:6:124"},{"name":"value6","nodeType":"YulIdentifier","src":"9316:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9328:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9339:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9324:3:124"},"nodeType":"YulFunctionCall","src":"9324:18:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"9281:26:124"},"nodeType":"YulFunctionCall","src":"9281:62:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"9271:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9363:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9374:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9359:3:124"},"nodeType":"YulFunctionCall","src":"9359:19:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"9384:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9392:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9380:3:124"},"nodeType":"YulFunctionCall","src":"9380:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9352:6:124"},"nodeType":"YulFunctionCall","src":"9352:51:124"},"nodeType":"YulExpressionStatement","src":"9352:51:124"},{"nodeType":"YulVariableDeclaration","src":"9412:64:124","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"9453:6:124"},{"name":"value8","nodeType":"YulIdentifier","src":"9461:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"9469:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"9426:26:124"},"nodeType":"YulFunctionCall","src":"9426:50:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"9416:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9496:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9507:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9492:3:124"},"nodeType":"YulFunctionCall","src":"9492:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9517:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9525:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9513:3:124"},"nodeType":"YulFunctionCall","src":"9513:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9485:6:124"},"nodeType":"YulFunctionCall","src":"9485:51:124"},"nodeType":"YulExpressionStatement","src":"9485:51:124"},{"nodeType":"YulAssignment","src":"9545:59:124","value":{"arguments":[{"name":"value9","nodeType":"YulIdentifier","src":"9580:6:124"},{"name":"value10","nodeType":"YulIdentifier","src":"9588:7:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"9597:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"9553:26:124"},"nodeType":"YulFunctionCall","src":"9553:51:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9545:4:124"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8779:9:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"8790:7:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"8799:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"8807:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"8815:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"8823:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8831:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8839:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8847:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8855:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8863:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8871:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8882:4:124","type":""}],"src":"8491:1119:124"},{"body":{"nodeType":"YulBlock","src":"9683:201:124","statements":[{"body":{"nodeType":"YulBlock","src":"9729:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9738:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9741:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9731:6:124"},"nodeType":"YulFunctionCall","src":"9731:12:124"},"nodeType":"YulExpressionStatement","src":"9731:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9704:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9713:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9700:3:124"},"nodeType":"YulFunctionCall","src":"9700:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9725:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9696:3:124"},"nodeType":"YulFunctionCall","src":"9696:32:124"},"nodeType":"YulIf","src":"9693:52:124"},{"nodeType":"YulVariableDeclaration","src":"9754:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9780:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9767:12:124"},"nodeType":"YulFunctionCall","src":"9767:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9758:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9838:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9847:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9850:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9840:6:124"},"nodeType":"YulFunctionCall","src":"9840:12:124"},"nodeType":"YulExpressionStatement","src":"9840:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9812:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9823:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9830:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9819:3:124"},"nodeType":"YulFunctionCall","src":"9819:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9809:2:124"},"nodeType":"YulFunctionCall","src":"9809:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9802:6:124"},"nodeType":"YulFunctionCall","src":"9802:35:124"},"nodeType":"YulIf","src":"9799:55:124"},{"nodeType":"YulAssignment","src":"9863:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9873:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9863:6:124"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9649:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9660:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9672:6:124","type":""}],"src":"9615:269:124"},{"body":{"nodeType":"YulBlock","src":"10285:730:124","statements":[{"nodeType":"YulVariableDeclaration","src":"10295:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10305:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10299:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10317:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10327:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10321:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10385:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10400:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10408:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10396:3:124"},"nodeType":"YulFunctionCall","src":"10396:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10378:6:124"},"nodeType":"YulFunctionCall","src":"10378:34:124"},"nodeType":"YulExpressionStatement","src":"10378:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10432:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10443:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10428:3:124"},"nodeType":"YulFunctionCall","src":"10428:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10452:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10460:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10448:3:124"},"nodeType":"YulFunctionCall","src":"10448:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10421:6:124"},"nodeType":"YulFunctionCall","src":"10421:43:124"},"nodeType":"YulExpressionStatement","src":"10421:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10484:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10495:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10480:3:124"},"nodeType":"YulFunctionCall","src":"10480:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10504:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10512:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10500:3:124"},"nodeType":"YulFunctionCall","src":"10500:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10473:6:124"},"nodeType":"YulFunctionCall","src":"10473:43:124"},"nodeType":"YulExpressionStatement","src":"10473:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10536:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10547:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10532:3:124"},"nodeType":"YulFunctionCall","src":"10532:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10556:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10564:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10552:3:124"},"nodeType":"YulFunctionCall","src":"10552:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10525:6:124"},"nodeType":"YulFunctionCall","src":"10525:43:124"},"nodeType":"YulExpressionStatement","src":"10525:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10599:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10584:3:124"},"nodeType":"YulFunctionCall","src":"10584:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"10609:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10617:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10605:3:124"},"nodeType":"YulFunctionCall","src":"10605:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10577:6:124"},"nodeType":"YulFunctionCall","src":"10577:46:124"},"nodeType":"YulExpressionStatement","src":"10577:46:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10643:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10654:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10639:3:124"},"nodeType":"YulFunctionCall","src":"10639:19:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10660:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10632:6:124"},"nodeType":"YulFunctionCall","src":"10632:31:124"},"nodeType":"YulExpressionStatement","src":"10632:31:124"},{"nodeType":"YulVariableDeclaration","src":"10672:76:124","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10713:6:124"},{"name":"value6","nodeType":"YulIdentifier","src":"10721:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10733:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10744:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10729:3:124"},"nodeType":"YulFunctionCall","src":"10729:18:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10686:26:124"},"nodeType":"YulFunctionCall","src":"10686:62:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10676:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10768:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10779:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10764:3:124"},"nodeType":"YulFunctionCall","src":"10764:19:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10789:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10797:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10785:3:124"},"nodeType":"YulFunctionCall","src":"10785:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10757:6:124"},"nodeType":"YulFunctionCall","src":"10757:51:124"},"nodeType":"YulExpressionStatement","src":"10757:51:124"},{"nodeType":"YulVariableDeclaration","src":"10817:64:124","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10858:6:124"},{"name":"value8","nodeType":"YulIdentifier","src":"10866:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10874:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10831:26:124"},"nodeType":"YulFunctionCall","src":"10831:50:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10821:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10901:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10912:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10897:3:124"},"nodeType":"YulFunctionCall","src":"10897:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10922:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10930:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10918:3:124"},"nodeType":"YulFunctionCall","src":"10918:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10890:6:124"},"nodeType":"YulFunctionCall","src":"10890:51:124"},"nodeType":"YulExpressionStatement","src":"10890:51:124"},{"nodeType":"YulAssignment","src":"10950:59:124","value":{"arguments":[{"name":"value9","nodeType":"YulIdentifier","src":"10985:6:124"},{"name":"value10","nodeType":"YulIdentifier","src":"10993:7:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"11002:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10958:26:124"},"nodeType":"YulFunctionCall","src":"10958:51:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10950:4:124"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10173:9:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"10184:7:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"10193:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"10201:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"10209:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"10217:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"10225:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10233:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10241:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10249:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10257:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10265:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10276:4:124","type":""}],"src":"9889:1126:124"},{"body":{"nodeType":"YulBlock","src":"11387:656:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11397:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11407:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11401:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11465:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11480:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11488:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11476:3:124"},"nodeType":"YulFunctionCall","src":"11476:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11458:6:124"},"nodeType":"YulFunctionCall","src":"11458:34:124"},"nodeType":"YulExpressionStatement","src":"11458:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11512:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11523:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11508:3:124"},"nodeType":"YulFunctionCall","src":"11508:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11532:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11540:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11528:3:124"},"nodeType":"YulFunctionCall","src":"11528:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11501:6:124"},"nodeType":"YulFunctionCall","src":"11501:43:124"},"nodeType":"YulExpressionStatement","src":"11501:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11564:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11575:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11560:3:124"},"nodeType":"YulFunctionCall","src":"11560:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11584:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11592:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11580:3:124"},"nodeType":"YulFunctionCall","src":"11580:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11553:6:124"},"nodeType":"YulFunctionCall","src":"11553:43:124"},"nodeType":"YulExpressionStatement","src":"11553:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11616:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11627:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11612:3:124"},"nodeType":"YulFunctionCall","src":"11612:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"11636:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11644:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11632:3:124"},"nodeType":"YulFunctionCall","src":"11632:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11605:6:124"},"nodeType":"YulFunctionCall","src":"11605:45:124"},"nodeType":"YulExpressionStatement","src":"11605:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11670:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11681:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11666:3:124"},"nodeType":"YulFunctionCall","src":"11666:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"11687:3:124","type":"","value":"224"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11659:6:124"},"nodeType":"YulFunctionCall","src":"11659:32:124"},"nodeType":"YulExpressionStatement","src":"11659:32:124"},{"nodeType":"YulVariableDeclaration","src":"11700:77:124","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"11741:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"11749:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11761:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11772:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11757:3:124"},"nodeType":"YulFunctionCall","src":"11757:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11714:26:124"},"nodeType":"YulFunctionCall","src":"11714:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"11704:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11797:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11808:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11793:3:124"},"nodeType":"YulFunctionCall","src":"11793:19:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"11818:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11826:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11814:3:124"},"nodeType":"YulFunctionCall","src":"11814:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11786:6:124"},"nodeType":"YulFunctionCall","src":"11786:51:124"},"nodeType":"YulExpressionStatement","src":"11786:51:124"},{"nodeType":"YulVariableDeclaration","src":"11846:64:124","value":{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"11887:6:124"},{"name":"value7","nodeType":"YulIdentifier","src":"11895:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"11903:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11860:26:124"},"nodeType":"YulFunctionCall","src":"11860:50:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"11850:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11930:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11941:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11926:3:124"},"nodeType":"YulFunctionCall","src":"11926:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11951:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11959:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11947:3:124"},"nodeType":"YulFunctionCall","src":"11947:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11919:6:124"},"nodeType":"YulFunctionCall","src":"11919:51:124"},"nodeType":"YulExpressionStatement","src":"11919:51:124"},{"nodeType":"YulAssignment","src":"11979:58:124","value":{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"12014:6:124"},{"name":"value9","nodeType":"YulIdentifier","src":"12022:6:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"12030:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11987:26:124"},"nodeType":"YulFunctionCall","src":"11987:50:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11979:4:124"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11284:9:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"11295:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"11303:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"11311:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"11319:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11327:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11335:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11343:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11351:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11359:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11367:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11378:4:124","type":""}],"src":"11020:1023:124"},{"body":{"nodeType":"YulBlock","src":"12261:356:124","statements":[{"nodeType":"YulAssignment","src":"12271:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12283:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12294:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12279:3:124"},"nodeType":"YulFunctionCall","src":"12279:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12271:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"12307:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12317:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12311:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12375:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12390:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12398:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12386:3:124"},"nodeType":"YulFunctionCall","src":"12386:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12368:6:124"},"nodeType":"YulFunctionCall","src":"12368:34:124"},"nodeType":"YulExpressionStatement","src":"12368:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12422:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12433:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12418:3:124"},"nodeType":"YulFunctionCall","src":"12418:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12442:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12450:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12438:3:124"},"nodeType":"YulFunctionCall","src":"12438:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12411:6:124"},"nodeType":"YulFunctionCall","src":"12411:43:124"},"nodeType":"YulExpressionStatement","src":"12411:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12474:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12485:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12470:3:124"},"nodeType":"YulFunctionCall","src":"12470:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12494:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12502:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12490:3:124"},"nodeType":"YulFunctionCall","src":"12490:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12463:6:124"},"nodeType":"YulFunctionCall","src":"12463:43:124"},"nodeType":"YulExpressionStatement","src":"12463:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12526:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12537:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12522:3:124"},"nodeType":"YulFunctionCall","src":"12522:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"12546:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12554:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12542:3:124"},"nodeType":"YulFunctionCall","src":"12542:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12515:6:124"},"nodeType":"YulFunctionCall","src":"12515:43:124"},"nodeType":"YulExpressionStatement","src":"12515:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12578:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12589:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12574:3:124"},"nodeType":"YulFunctionCall","src":"12574:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"12599:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12607:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12595:3:124"},"nodeType":"YulFunctionCall","src":"12595:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12567:6:124"},"nodeType":"YulFunctionCall","src":"12567:44:124"},"nodeType":"YulExpressionStatement","src":"12567:44:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12198:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12209:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12217:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12225:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12233:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12241:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12252:4:124","type":""}],"src":"12048:569:124"},{"body":{"nodeType":"YulBlock","src":"12835:175:124","statements":[{"nodeType":"YulAssignment","src":"12845:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12857:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12868:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12853:3:124"},"nodeType":"YulFunctionCall","src":"12853:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12845:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12887:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12902:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12910:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12898:3:124"},"nodeType":"YulFunctionCall","src":"12898:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12880:6:124"},"nodeType":"YulFunctionCall","src":"12880:74:124"},"nodeType":"YulExpressionStatement","src":"12880:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12974:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12985:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12970:3:124"},"nodeType":"YulFunctionCall","src":"12970:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12996:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12990:5:124"},"nodeType":"YulFunctionCall","src":"12990:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12963:6:124"},"nodeType":"YulFunctionCall","src":"12963:41:124"},"nodeType":"YulExpressionStatement","src":"12963:41:124"}]},"name":"abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12796:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12807:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12815:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12826:4:124","type":""}],"src":"12622:388:124"},{"body":{"nodeType":"YulBlock","src":"13172:250:124","statements":[{"nodeType":"YulAssignment","src":"13182:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13194:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13205:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13190:3:124"},"nodeType":"YulFunctionCall","src":"13190:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13182:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"13217:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13227:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13221:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13285:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13300:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13308:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13296:3:124"},"nodeType":"YulFunctionCall","src":"13296:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13278:6:124"},"nodeType":"YulFunctionCall","src":"13278:34:124"},"nodeType":"YulExpressionStatement","src":"13278:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13332:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13343:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13328:3:124"},"nodeType":"YulFunctionCall","src":"13328:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13352:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13360:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13348:3:124"},"nodeType":"YulFunctionCall","src":"13348:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13321:6:124"},"nodeType":"YulFunctionCall","src":"13321:43:124"},"nodeType":"YulExpressionStatement","src":"13321:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13384:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13395:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13380:3:124"},"nodeType":"YulFunctionCall","src":"13380:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"13404:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13412:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13400:3:124"},"nodeType":"YulFunctionCall","src":"13400:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13373:6:124"},"nodeType":"YulFunctionCall","src":"13373:43:124"},"nodeType":"YulExpressionStatement","src":"13373:43:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13125:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13136:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13144:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13152:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13163:4:124","type":""}],"src":"13015:407:124"},{"body":{"nodeType":"YulBlock","src":"13476:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"13486:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13506:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13500:5:124"},"nodeType":"YulFunctionCall","src":"13500:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"13490:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13528:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"13533:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13521:6:124"},"nodeType":"YulFunctionCall","src":"13521:19:124"},"nodeType":"YulExpressionStatement","src":"13521:19:124"},{"nodeType":"YulVariableDeclaration","src":"13549:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13558:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"13553:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13620:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"13634:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13644:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13638:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13676:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"13681:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13672:3:124"},"nodeType":"YulFunctionCall","src":"13672:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13685:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13668:3:124"},"nodeType":"YulFunctionCall","src":"13668:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13704:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"13711:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13700:3:124"},"nodeType":"YulFunctionCall","src":"13700:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13715:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13696:3:124"},"nodeType":"YulFunctionCall","src":"13696:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13690:5:124"},"nodeType":"YulFunctionCall","src":"13690:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13661:6:124"},"nodeType":"YulFunctionCall","src":"13661:59:124"},"nodeType":"YulExpressionStatement","src":"13661:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13579:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"13582:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13576:2:124"},"nodeType":"YulFunctionCall","src":"13576:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"13590:21:124","statements":[{"nodeType":"YulAssignment","src":"13592:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13601:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"13604:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13597:3:124"},"nodeType":"YulFunctionCall","src":"13597:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"13592:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"13572:3:124","statements":[]},"src":"13568:162:124"},{"body":{"nodeType":"YulBlock","src":"13764:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13793:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"13798:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13789:3:124"},"nodeType":"YulFunctionCall","src":"13789:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"13807:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13785:3:124"},"nodeType":"YulFunctionCall","src":"13785:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"13814:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13778:6:124"},"nodeType":"YulFunctionCall","src":"13778:38:124"},"nodeType":"YulExpressionStatement","src":"13778:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13745:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"13748:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13742:2:124"},"nodeType":"YulFunctionCall","src":"13742:13:124"},"nodeType":"YulIf","src":"13739:87:124"},{"nodeType":"YulAssignment","src":"13835:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13850:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13863:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13871:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13859:3:124"},"nodeType":"YulFunctionCall","src":"13859:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"13876:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13855:3:124"},"nodeType":"YulFunctionCall","src":"13855:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13846:3:124"},"nodeType":"YulFunctionCall","src":"13846:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"13946:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13842:3:124"},"nodeType":"YulFunctionCall","src":"13842:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"13835:3:124"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"13453:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"13460:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"13468:3:124","type":""}],"src":"13427:530:124"},{"body":{"nodeType":"YulBlock","src":"14109:190:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14126:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14141:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14149:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14137:3:124"},"nodeType":"YulFunctionCall","src":"14137:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14119:6:124"},"nodeType":"YulFunctionCall","src":"14119:74:124"},"nodeType":"YulExpressionStatement","src":"14119:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14213:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14224:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14209:3:124"},"nodeType":"YulFunctionCall","src":"14209:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14229:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14202:6:124"},"nodeType":"YulFunctionCall","src":"14202:30:124"},"nodeType":"YulExpressionStatement","src":"14202:30:124"},{"nodeType":"YulAssignment","src":"14241:52:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14266:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14278:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14289:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14274:3:124"},"nodeType":"YulFunctionCall","src":"14274:18:124"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14249:16:124"},"nodeType":"YulFunctionCall","src":"14249:44:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14241:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14070:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14081:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14089:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14100:4:124","type":""}],"src":"13962:337:124"},{"body":{"nodeType":"YulBlock","src":"14425:98:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14442:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14453:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14435:6:124"},"nodeType":"YulFunctionCall","src":"14435:21:124"},"nodeType":"YulExpressionStatement","src":"14435:21:124"},{"nodeType":"YulAssignment","src":"14465:52:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14490:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14502:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14513:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14498:3:124"},"nodeType":"YulFunctionCall","src":"14498:18:124"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14473:16:124"},"nodeType":"YulFunctionCall","src":"14473:44:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14465:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14394:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14405:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14416:4:124","type":""}],"src":"14304:219:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 192) { revert(0, 0) }\n        value1 := _1\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_struct$_UpdateATokenInput_$23861_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 224) { revert(0, 0) }\n        value1 := _1\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_struct$_InitReserveInput_$23846_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 480) { revert(0, 0) }\n        value1 := _1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IPool(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function access_calldata_tail_t_string_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 224)\n        let tail_1 := abi_encode_string_calldata(value4, value5, add(headStart, 224))\n        mstore(add(headStart, 160), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value6, value7, tail_1)\n        mstore(add(headStart, 192), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value8, value9, tail_2)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value10, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 256\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _2))\n        mstore(add(headStart, 32), and(value1, _2))\n        mstore(add(headStart, 64), and(value2, _2))\n        mstore(add(headStart, 96), and(value3, _2))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), _1)\n        let tail_1 := abi_encode_string_calldata(value5, value6, add(headStart, _1))\n        mstore(add(headStart, 192), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value7, value8, tail_1)\n        mstore(add(headStart, 224), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value9, value10, tail_2)\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value10, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 256\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _2))\n        mstore(add(headStart, 32), and(value1, _2))\n        mstore(add(headStart, 64), and(value2, _2))\n        mstore(add(headStart, 96), and(value3, _2))\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), _1)\n        let tail_1 := abi_encode_string_calldata(value5, value6, add(headStart, _1))\n        mstore(add(headStart, 192), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value7, value8, tail_1)\n        mstore(add(headStart, 224), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value9, value10, tail_2)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xff))\n        mstore(add(headStart, 128), 224)\n        let tail_1 := abi_encode_string_calldata(value4, value5, add(headStart, 224))\n        mstore(add(headStart, 160), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value6, value7, tail_1)\n        mstore(add(headStart, 192), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value8, value9, tail_2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), mload(value1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063b0f093551461005b578063b13c96a81461007d578063df59b8b21461009d578063f5b50e70146100bd575b600080fd5b81801561006757600080fd5b5061007b61007636600461117d565b6100dd565b005b81801561008957600080fd5b5061007b6100983660046111d4565b610439565b8180156100a957600080fd5b5061007b6100b8366004611220565b6106c6565b8180156100c957600080fd5b5061007b6100d836600461117d565b610bd3565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610108602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa158015610172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019691906113a2565b9050600061028573ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906114c5565b5161ffff80821692601083901c821692602081901c83169260ff603083901c811693604084901c9092169260a81c1690565b50909450600093507fc222ec8a0000000000000000000000000000000000000000000000000000000092508791506102c29050602087018761126d565b6102d2604088016020890161126d565b856102e060408a018a6114e1565b6102ed60608c018c6114e1565b6102fa60a08e018e6114e1565b6040516024016103139a99989796959493929190611596565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526101408401519091506103b3906103ad60a087016080880161126d565b83610e6a565b6103c360a085016080860161126d565b61014084015173ffffffffffffffffffffffffffffffffffffffff91821691166103f0602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167f9439658a562a5c46b1173589df89cf001483d685bad28aedaff4a88656292d8160405160405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610464602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f291906113a2565b9050600061052273ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b50509350505050600063183fb41360e01b85856020016020810190610547919061126d565b610554602088018861126d565b6105646060890160408a0161126d565b8661057260608b018b6114e1565b61057f60808d018d6114e1565b61058c60c08f018f6114e1565b6040516024016105a69b9a99989796959493929190611617565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610100840151909150610640906103ad60c0870160a0880161126d565b61065060c0850160a0860161126d565b61010084015173ffffffffffffffffffffffffffffffffffffffff918216911661067d602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167fa76f65411ec66a7fb6bc467432eb14767900449ae4469fa295e4441fe5e1cb7360405160405180910390a45050505050565b60006108016106d8602084018461126d565b7f183fb413000000000000000000000000000000000000000000000000000000008561070a60e0870160c0880161126d565b61071a60c0880160a0890161126d565b61072b610100890160e08a0161126d565b61073b60808a0160608b016116a4565b6107496101008b018b6114e1565b6107576101208d018d6114e1565b6107656101c08f018f6114e1565b60405160240161077f9b9a999897969594939291906116c7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610ef8565b905060006108ae610818604085016020860161126d565b7fc222ec8a000000000000000000000000000000000000000000000000000000008661084a60c0880160a0890161126d565b61085b610100890160e08a0161126d565b61086b60808a0160608b016116a4565b6108796101808b018b6114e1565b6108876101a08d018d6114e1565b6108956101c08f018f6114e1565b60405160240161077f9a9998979695949392919061171b565b905060006109456108c5606086016040870161126d565b7fc222ec8a00000000000000000000000000000000000000000000000000000000876108f760c0890160a08a0161126d565b6109086101008a0160e08b0161126d565b61091860808b0160608c016116a4565b6109266101408c018c6114e1565b6109346101608e018e6114e1565b8e806101c0019061089591906114e1565b905073ffffffffffffffffffffffffffffffffffffffff8516637a708e9261097360c0870160a0880161126d565b85858561098660a08b0160808c0161126d565b60405160e087901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b158015610a0b57600080fd5b505af1158015610a1f573d6000803e3d6000fd5b50506040805160208101909152600081529150610a519050610a4760808701606088016116a4565b829060ff16610fd3565b610a5c81600161107c565b610a678160006110c1565b610a72816000611106565b73ffffffffffffffffffffffffffffffffffffffff861663f51e435b610a9e60c0880160a0890161126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015283516024820152604401600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff85169050610b4b60c0870160a0880161126d565b73ffffffffffffffffffffffffffffffffffffffff167f3a0ca721fc364424566385a1aa271ed508cc2c0949c2272575fb3013a163a45f8585610b9460a08b0160808c0161126d565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292168183015290519081900360600190a3505050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610bfe602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c91906113a2565b90506000610cbc73ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b50909450600093507fc222ec8a000000000000000000000000000000000000000000000000000000009250879150610cf99050602087018761126d565b610d09604088016020890161126d565b85610d1760408a018a6114e1565b610d2460608c018c6114e1565b610d3160a08e018e6114e1565b604051602401610d4a9a99989796959493929190611596565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610120840151909150610de4906103ad60a087016080880161126d565b610df460a085016080860161126d565b61012084015173ffffffffffffffffffffffffffffffffffffffff9182169116610e21602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167f7a943a5b6c214bf7726c069a878b1e2a8e7371981d516048b84e03743e67bc2860405160405180910390a45050505050565b6040517f4f1ef286000000000000000000000000000000000000000000000000000000008152839073ffffffffffffffffffffffffffffffffffffffff821690634f1ef28690610ec090869086906004016117d1565b600060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b5050505050505050565b60008030604051610f089061114b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610f41573d6000803e3d6000fd5b506040517fd1f5789400000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063d1f5789490610f9990879087906004016117d1565b600060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b50929695505050505050565b60408051808201909152600281527f3636000000000000000000000000000000000000000000000000000000000000602082015260ff82111561104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110439190611808565b60405180910390fd5b5081517fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff1660309190911b179052565b60388161108a57600061108d565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff1660ff9190911690911b1790915250565b603c816110cf5760006110d2565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff1660ff9190911690911b1790915250565b603981611114576000611117565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b6109cb8061181c83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461117a57600080fd5b50565b6000806040838503121561119057600080fd5b823561119b81611158565b9150602083013567ffffffffffffffff8111156111b757600080fd5b830160c081860312156111c957600080fd5b809150509250929050565b600080604083850312156111e757600080fd5b82356111f281611158565b9150602083013567ffffffffffffffff81111561120e57600080fd5b830160e081860312156111c957600080fd5b6000806040838503121561123357600080fd5b823561123e81611158565b9150602083013567ffffffffffffffff81111561125a57600080fd5b83016101e081860312156111c957600080fd5b60006020828403121561127f57600080fd5b813561128a81611158565b9392505050565b6040516101e0810167ffffffffffffffff811182821017156112dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000602082840312156112f457600080fd5b6040516020810181811067ffffffffffffffff8211171561133e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461136b57600080fd5b919050565b805164ffffffffff8116811461136b57600080fd5b805161ffff8116811461136b57600080fd5b805161136b81611158565b60006101e082840312156113b557600080fd5b6113bd611291565b6113c784846112e2565b81526113d56020840161134b565b60208201526113e66040840161134b565b60408201526113f76060840161134b565b60608201526114086080840161134b565b608082015261141960a0840161134b565b60a082015261142a60c08401611370565b60c082015261143b60e08401611385565b60e082015261010061144e818501611397565b90820152610120611460848201611397565b90820152610140611472848201611397565b90820152610160611484848201611397565b9082015261018061149684820161134b565b908201526101a06114a884820161134b565b908201526101c06114ba84820161134b565b908201529392505050565b6000602082840312156114d757600080fd5b61128a83836112e2565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261151657600080fd5b83018035915067ffffffffffffffff82111561153157600080fd5b60200191503681900382131561154657600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808d168352808c166020840152808b1660408401525088606083015260e060808301526115de60e08301888a61154d565b82810360a08401526115f181878961154d565b905082810360c084015261160681858761154d565b9d9c50505050505050505050505050565b600061010073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152808d166040850152808c166060850152508960808401528060a0840152611668818401898b61154d565b905082810360c084015261167d81878961154d565b905082810360e084015261169281858761154d565b9e9d5050505050505050505050505050565b6000602082840312156116b657600080fd5b813560ff8116811461128a57600080fd5b600061010073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152808d166040850152808c1660608501525060ff8a1660808401528060a0840152611668818401898b61154d565b600073ffffffffffffffffffffffffffffffffffffffff808d168352808c166020840152808b1660408401525060ff8916606083015260e060808301526115de60e08301888a61154d565b6000815180845260005b8181101561178c57602081850181015186830182015201611770565b8181111561179e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006118006040830184611766565b949350505050565b60208152600061128a602083018461176656fe60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220899ba9574e8c52c72539176723d8c74a8618334587150196e2029371e7486a8464736f6c634300080a0033a2646970667358221220722c61fe2602f4b3008e7a9a899fcb2eaf1517e82305577945d327c6cdb6b63864736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB0F09355 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xB13C96A8 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0xDF59B8B2 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xF5B50E70 EQ PUSH2 0xBD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x117D JUMP JUMPDEST PUSH2 0xDD JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x11D4 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x6C6 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xD8 CALLDATASIZE PUSH1 0x4 PUSH2 0x117D JUMP JUMPDEST PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0x108 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196 SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x285 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x253 SWAP2 SWAP1 PUSH2 0x14C5 JUMP JUMPDEST MLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP3 PUSH1 0x10 DUP4 SWAP1 SHR DUP3 AND SWAP3 PUSH1 0x20 DUP2 SWAP1 SHR DUP4 AND SWAP3 PUSH1 0xFF PUSH1 0x30 DUP4 SWAP1 SHR DUP2 AND SWAP4 PUSH1 0x40 DUP5 SWAP1 SHR SWAP1 SWAP3 AND SWAP3 PUSH1 0xA8 SHR AND SWAP1 JUMP JUMPDEST POP SWAP1 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 SWAP3 POP DUP8 SWAP2 POP PUSH2 0x2C2 SWAP1 POP PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x2D2 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 PUSH2 0x2E0 PUSH1 0x40 DUP11 ADD DUP11 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x2ED PUSH1 0x60 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x2FA PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x313 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1596 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x3B3 SWAP1 PUSH2 0x3AD PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST DUP4 PUSH2 0xE6A JUMP JUMPDEST PUSH2 0x3C3 PUSH1 0xA0 DUP6 ADD PUSH1 0x80 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0x3F0 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9439658A562A5C46B1173589DF89CF001483D685BAD28AEDAFF4A88656292D81 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0x464 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F2 SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x522 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH4 0x183FB413 PUSH1 0xE0 SHL DUP6 DUP6 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x547 SWAP2 SWAP1 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x554 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x564 PUSH1 0x60 DUP10 ADD PUSH1 0x40 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST DUP7 PUSH2 0x572 PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x57F PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x58C PUSH1 0xC0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x5A6 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1617 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x100 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x640 SWAP1 PUSH2 0x3AD PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x650 PUSH1 0xC0 DUP6 ADD PUSH1 0xA0 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0x67D PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA76F65411EC66A7FB6BC467432EB14767900449AE4469FA295E4441FE5E1CB73 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x801 PUSH2 0x6D8 PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x126D JUMP JUMPDEST PUSH32 0x183FB41300000000000000000000000000000000000000000000000000000000 DUP6 PUSH2 0x70A PUSH1 0xE0 DUP8 ADD PUSH1 0xC0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x71A PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x72B PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x73B PUSH1 0x80 DUP11 ADD PUSH1 0x60 DUP12 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x749 PUSH2 0x100 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x757 PUSH2 0x120 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x765 PUSH2 0x1C0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x77F SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x16C7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0xEF8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8AE PUSH2 0x818 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 DUP7 PUSH2 0x84A PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x85B PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x86B PUSH1 0x80 DUP11 ADD PUSH1 0x60 DUP12 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x879 PUSH2 0x180 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x887 PUSH2 0x1A0 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x895 PUSH2 0x1C0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x77F SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x171B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x945 PUSH2 0x8C5 PUSH1 0x60 DUP7 ADD PUSH1 0x40 DUP8 ADD PUSH2 0x126D JUMP JUMPDEST PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 DUP8 PUSH2 0x8F7 PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x908 PUSH2 0x100 DUP11 ADD PUSH1 0xE0 DUP12 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x918 PUSH1 0x80 DUP12 ADD PUSH1 0x60 DUP13 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x926 PUSH2 0x140 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x934 PUSH2 0x160 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST DUP15 DUP1 PUSH2 0x1C0 ADD SWAP1 PUSH2 0x895 SWAP2 SWAP1 PUSH2 0x14E1 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0x7A708E92 PUSH2 0x973 PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 DUP6 DUP6 PUSH2 0x986 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP8 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP6 AND PUSH1 0x24 DUP6 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x44 DUP5 ADD MSTORE DUP4 AND PUSH1 0x64 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP2 POP PUSH2 0xA51 SWAP1 POP PUSH2 0xA47 PUSH1 0x80 DUP8 ADD PUSH1 0x60 DUP9 ADD PUSH2 0x16A4 JUMP JUMPDEST DUP3 SWAP1 PUSH1 0xFF AND PUSH2 0xFD3 JUMP JUMPDEST PUSH2 0xA5C DUP2 PUSH1 0x1 PUSH2 0x107C JUMP JUMPDEST PUSH2 0xA67 DUP2 PUSH1 0x0 PUSH2 0x10C1 JUMP JUMPDEST PUSH2 0xA72 DUP2 PUSH1 0x0 PUSH2 0x1106 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH4 0xF51E435B PUSH2 0xA9E PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 POP PUSH2 0xB4B PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3A0CA721FC364424566385A1AA271ED508CC2C0949C2272575FB3013A163A45F DUP6 DUP6 PUSH2 0xB94 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0xBFE PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xCBC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST POP SWAP1 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 SWAP3 POP DUP8 SWAP2 POP PUSH2 0xCF9 SWAP1 POP PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH2 0xD09 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 PUSH2 0xD17 PUSH1 0x40 DUP11 ADD DUP11 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0xD24 PUSH1 0x60 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0xD31 PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD4A SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1596 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0xDE4 SWAP1 PUSH2 0x3AD PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0xDF4 PUSH1 0xA0 DUP6 ADD PUSH1 0x80 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x120 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0xE21 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7A943A5B6C214BF7726C069A878B1E2A8E7371981D516048B84E03743E67BC28 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 PUSH2 0xEC0 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x17D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 ADDRESS PUSH1 0x40 MLOAD PUSH2 0xF08 SWAP1 PUSH2 0x114B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0xF41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xD1F5789400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xD1F57894 SWAP1 PUSH2 0xF99 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x17D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0x104C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1043 SWAP2 SWAP1 PUSH2 0x1808 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF AND PUSH1 0x30 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x38 DUP2 PUSH2 0x108A JUMPI PUSH1 0x0 PUSH2 0x108D JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x3C DUP2 PUSH2 0x10CF JUMPI PUSH1 0x0 PUSH2 0x10D2 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0x1114 JUMPI PUSH1 0x0 PUSH2 0x1117 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH2 0x9CB DUP1 PUSH2 0x181C DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x117A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x119B DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xC0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x11F2 DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x120E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xE0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x123E DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x125A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH2 0x1E0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x127F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x128A DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x12DC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x133E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x136B DUP2 PUSH2 0x1158 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13BD PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x13C7 DUP5 DUP5 PUSH2 0x12E2 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x13D5 PUSH1 0x20 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x13E6 PUSH1 0x40 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x13F7 PUSH1 0x60 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1408 PUSH1 0x80 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1419 PUSH1 0xA0 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x142A PUSH1 0xC0 DUP5 ADD PUSH2 0x1370 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x143B PUSH1 0xE0 DUP5 ADD PUSH2 0x1385 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x144E DUP2 DUP6 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x1460 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x1472 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x1484 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x1496 DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x14A8 DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x14BA DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x128A DUP4 DUP4 PUSH2 0x12E2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x1546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND DUP4 MSTORE DUP1 DUP13 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP12 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP9 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x15DE PUSH1 0xE0 DUP4 ADD DUP9 DUP11 PUSH2 0x154D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x15F1 DUP2 DUP8 DUP10 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1606 DUP2 DUP6 DUP8 PUSH2 0x154D JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND DUP5 MSTORE DUP1 DUP15 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 DUP14 AND PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP13 AND PUSH1 0x60 DUP6 ADD MSTORE POP DUP10 PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x1668 DUP2 DUP5 ADD DUP10 DUP12 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x167D DUP2 DUP8 DUP10 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1692 DUP2 DUP6 DUP8 PUSH2 0x154D JUMP JUMPDEST SWAP15 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x128A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND DUP5 MSTORE DUP1 DUP15 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 DUP14 AND PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP13 AND PUSH1 0x60 DUP6 ADD MSTORE POP PUSH1 0xFF DUP11 AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x1668 DUP2 DUP5 ADD DUP10 DUP12 PUSH2 0x154D JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND DUP4 MSTORE DUP1 DUP13 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP12 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x15DE PUSH1 0xE0 DUP4 ADD DUP9 DUP11 PUSH2 0x154D JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x178C JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1770 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x179E JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1800 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1766 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x128A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1766 JUMP INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 SWAP12 0xA9 JUMPI 0x4E DUP13 MSTORE 0xC7 0x25 CODECOPY OR PUSH8 0x23D8C74A86183345 DUP8 ISZERO ADD SWAP7 0xE2 MUL SWAP4 PUSH18 0xE7486A8464736F6C634300080A0033A26469 PUSH17 0x667358221220722C61FE2602F4B3008E7A SWAP11 DUP10 SWAP16 0xCB 0x2E 0xAF ISZERO OR 0xE8 0x23 SDIV JUMPI PUSH26 0x45D327C6CDB6B63864736F6C634300080A003300000000000000 ","sourceMap":"786:7674:95:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6318:842;;;;;;;;;;-1:-1:-1;6318:842:95;;;;;:::i;:::-;;:::i;:::-;;4130:766;;;;;;;;;;-1:-1:-1;4130:766:95;;;;;:::i;:::-;;:::i;1796:2074::-;;;;;;;;;;-1:-1:-1;1796:2074:95;;;;;:::i;:::-;;:::i;5187:834::-;;;;;;;;;;-1:-1:-1;5187:834:95;;;;;:::i;:::-;;:::i;6318:842::-;6461:40;6504:25;;;;6530:11;;;;:5;:11;:::i;:::-;6504:38;;;;;;;;;;2294:42:124;2282:55;;;6504:38:95;;;2264:74:124;2237:18;;6504:38:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6461:81;-1:-1:-1;6556:16:95;6580:52;:27;;;;6608:11;;;;:5;:11;:::i;:::-;6580:40;;;;;;;;;;2294:42:124;2282:55;;;6580:40:95;;;2264:74:124;2237:18;;6580:40:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22631:9:88;22674;22662:21;;;;3298:2;22691:85;;;;;;3369:2;22784:77;;;;;;22869:67;3439:2;22869:67;;;;;;4063:2;22944:71;;;;;;;4339:3;23023:71;;;22454:651;6580:52:95;-1:-1:-1;6549:83:95;;-1:-1:-1;6639:24:95;;-1:-1:-1;6696:43:95;;-1:-1:-1;6747:10:95;;-1:-1:-1;6765:11:95;;-1:-1:-1;6765:11:95;;;:5;:11;:::i;:::-;6784:26;;;;;;;;:::i;:::-;6818:8;6834:10;;;;:5;:10;:::i;:::-;6852:12;;;;:5;:12;:::i;:::-;6872;;;;:5;:12;:::i;:::-;6666:224;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6932:36;;;;6666:224;;-1:-1:-1;6897:124:95;;6976:20;;;;;;;;:::i;:::-;7004:11;6897:27;:124::i;:::-;7129:20;;;;;;;;:::i;:::-;7085:36;;;;7033:122;;;;;;7066:11;;;;:5;:11;:::i;:::-;7033:122;;;;;;;;;;;;6455:705;;;6318:842;;:::o;4130:766::-;4259:40;4302:25;;;;4328:11;;;;:5;:11;:::i;:::-;4302:38;;;;;;;;;;2294:42:124;2282:55;;;4302:38:95;;;2264:74:124;2237:18;;4302:38:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4259:81;-1:-1:-1;4354:16:95;4378:52;:27;;;;4406:11;;;;:5;:11;:::i;4378:52::-;4347:83;;;;;;;4437:24;4494:40;;;4542:10;4560:5;:14;;;;;;;;;;:::i;:::-;4582:11;;;;:5;:11;:::i;:::-;4601:26;;;;;;;;:::i;:::-;4635:8;4651:10;;;;:5;:10;:::i;:::-;4669:12;;;;:5;:12;:::i;:::-;4689;;;;:5;:12;:::i;:::-;4464:243;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4742:25;;;;4464:243;;-1:-1:-1;4714:89:95;;4769:20;;;;;;;;:::i;4714:89::-;4870:20;;;;;;;;:::i;:::-;4843:25;;;;4815:76;;;;;;4830:11;;;;:5;:11;:::i;:::-;4815:76;;;;;;;;;;;;4253:643;;;4130:766;;:::o;1796:2074::-;1917:26;1946:357;1973:16;;;;:5;:16;:::i;:::-;2029:40;2079:4;2093:14;2029:40;2093:14;;;;;;:::i;:::-;2117:21;;;;;;;;:::i;:::-;2148:26;;;;;;;;:::i;:::-;2184:29;;;;;;;;:::i;:::-;2223:16;;;;:5;:16;:::i;:::-;2249:18;;;;:5;:18;:::i;:::-;2277:12;;;;:5;:12;:::i;:::-;1997:300;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1946:19;:357::i;:::-;1917:386;-1:-1:-1;2310:35:95;2348:363;2375:25;;;;;;;;:::i;:::-;2440:43;2493:4;2507:21;;;;;;;;:::i;:::-;2538:26;;;;;;;;:::i;:::-;2574:29;;;;;;;;:::i;:::-;2613:25;;;;:5;:25;:::i;:::-;2648:27;;;;:5;:27;:::i;:::-;2685:12;;;;:5;:12;:::i;:::-;2408:297;;;;;;;;;;;;;;;;;:::i;2348:363::-;2310:401;-1:-1:-1;2718:37:95;2758:369;2785:27;;;;;;;;:::i;:::-;2852:43;2905:4;2919:21;;;;;;;;:::i;:::-;2950:26;;;;;;;;:::i;:::-;2986:29;;;;;;;;:::i;:::-;3025:27;;;;:5;:27;:::i;:::-;3062:29;;;;:5;:29;:::i;:::-;3101:5;:12;;;;;;;;:::i;2758:369::-;2718:409;-1:-1:-1;3134:16:95;;;;3158:21;;;;;;;;:::i;:::-;3187:18;3213:27;3248:29;3285:33;;;;;;;;:::i;:::-;3134:190;;;;;;;;;;12317:42:124;12386:15;;;3134:190:95;;;12368:34:124;12438:15;;;12418:18;;;12411:43;12490:15;;;12470:18;;;12463:43;12542:15;;12522:18;;;12515:43;12595:15;;;12574:19;;;12567:44;12279:19;;3134:190:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3388:36:95;;;;;;;;;3331:54;3388:36;;;-1:-1:-1;3431:56:95;;-1:-1:-1;3457:29:95;;;;;;;;:::i;:::-;3431:13;;:56;;:25;:56::i;:::-;3494:29;:13;3518:4;3494:23;:29::i;:::-;3529:30;:13;3553:5;3529:23;:30::i;:::-;3565;:13;3589:5;3565:23;:30::i;:::-;3602:21;;;;3624;;;;;;;;:::i;:::-;3602:59;;;;;;;;;;12910:42:124;12898:55;;;3602:59:95;;;12880:74:124;12990:13;;12970:18;;;12963:41;12853:18;;3602:59:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3673:192:95;;;;-1:-1:-1;3699:21:95;;;;;;;;:::i;:::-;3673:192;;;3754:27;3789:29;3826:33;;;;;;;;:::i;:::-;3673:192;;;13227:42:124;13296:15;;;13278:34;;13348:15;;;13343:2;13328:18;;13321:43;13400:15;;13380:18;;;13373:43;3673:192:95;;;;;;13205:2:124;3673:192:95;;;1911:1959;;;;1796:2074;;:::o;5187:834::-;5328:40;5371:25;;;;5397:11;;;;:5;:11;:::i;:::-;5371:38;;;;;;;;;;2294:42:124;2282:55;;;5371:38:95;;;2264:74:124;2237:18;;5371:38:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5328:81;-1:-1:-1;5423:16:95;5447:52;:27;;;;5475:11;;;;:5;:11;:::i;5447:52::-;-1:-1:-1;5416:83:95;;-1:-1:-1;5506:24:95;;-1:-1:-1;5563:43:95;;-1:-1:-1;5614:10:95;;-1:-1:-1;5632:11:95;;-1:-1:-1;5632:11:95;;;:5;:11;:::i;:::-;5651:26;;;;;;;;:::i;:::-;5685:8;5701:10;;;;:5;:10;:::i;:::-;5719:12;;;;:5;:12;:::i;:::-;5739;;;;:5;:12;:::i;:::-;5533:224;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5799:34;;;;5533:224;;-1:-1:-1;5764:122:95;;5841:20;;;;;;;;:::i;5764:122::-;5990:20;;;;;;;;:::i;:::-;5948:34;;;;5898:118;;;;;;5929:11;;;;:5;:11;:::i;:::-;5898:118;;;;;;;;;;;;5322:699;;;5187:834;;:::o;8117:341::-;8403:50;;;;;8375:12;;8403:22;;;;;;:50;;8426:14;;8442:10;;8403:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8250:208;8117:341;;;:::o;7440:343::-;7548:7;7563:52;7686:4;7618:81;;;;;:::i;:::-;2294:42:124;2282:55;;;2264:74;;2252:2;2237:18;7618:81:95;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7706:44:95;;;;;7563:136;;-1:-1:-1;7706:16:95;;;;;;:44;;7723:14;;7739:10;;7706:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7772:5:95;;7440:343;-1:-1:-1;;;;;;7440:343:95:o;7793:285:88:-;7951:23;;;;;;;;;;;;;;;;;4718:3;7919:30;;;7911:64;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;7995:9:88;;833:66;7995:25;3439:2;8025:47;;;;7994:79;7982:91;;7793:285::o;8584:213::-;3502:2;8744:6;:14;;8757:1;8744:14;;;8753:1;8744:14;8702:9;;981:66;8702:23;8736;;;;;:55;;;8701:91;8683:109;;;-1:-1:-1;8584:213:88:o;9866:::-;3777:2;10026:6;:14;;10039:1;10026:14;;;10035:1;10026:14;9984:9;;1573:66;9984:23;10018;;;;;:55;;;9983:91;9965:109;;;-1:-1:-1;9866:213:88:o;9225:::-;3565:2;9385:6;:14;;9398:1;9385:14;;;9394:1;9385:14;9343:9;;1129:66;9343:23;9377;;;;;:55;;;9342:91;9324:109;;;-1:-1:-1;9225:213:88:o;-1:-1:-1:-;;;;;;;;:::o;14:161:124:-;107:42;100:5;96:54;89:5;86:65;76:93;;165:1;162;155:12;76:93;14:161;:::o;180:557::-;303:6;311;364:2;352:9;343:7;339:23;335:32;332:52;;;380:1;377;370:12;332:52;419:9;406:23;438:38;470:5;438:38;:::i;:::-;495:5;-1:-1:-1;551:2:124;536:18;;523:32;578:18;567:30;;564:50;;;610:1;607;600:12;564:50;633:22;;689:3;671:16;;;667:26;664:46;;;706:1;703;696:12;664:46;729:2;719:12;;;180:557;;;;;:::o;742:554::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;978:9;965:23;997:38;1029:5;997:38;:::i;:::-;1054:5;-1:-1:-1;1110:2:124;1095:18;;1082:32;1137:18;1126:30;;1123:50;;;1169:1;1166;1159:12;1123:50;1192:22;;1248:3;1230:16;;;1226:26;1223:46;;;1265:1;1262;1255:12;1301:553;1420:6;1428;1481:2;1469:9;1460:7;1456:23;1452:32;1449:52;;;1497:1;1494;1487:12;1449:52;1536:9;1523:23;1555:38;1587:5;1555:38;:::i;:::-;1612:5;-1:-1:-1;1668:2:124;1653:18;;1640:32;1695:18;1684:30;;1681:50;;;1727:1;1724;1717:12;1681:50;1750:22;;1806:3;1788:16;;;1784:26;1781:46;;;1823:1;1820;1813:12;1859:254;1918:6;1971:2;1959:9;1950:7;1946:23;1942:32;1939:52;;;1987:1;1984;1977:12;1939:52;2026:9;2013:23;2045:38;2077:5;2045:38;:::i;:::-;2102:5;1859:254;-1:-1:-1;;;1859:254:124:o;2349:401::-;2416:2;2410:9;2458:3;2446:16;;2492:18;2477:34;;2513:22;;;2474:62;2471:242;;;2569:77;2566:1;2559:88;2670:4;2667:1;2660:15;2698:4;2695:1;2688:15;2471:242;2729:2;2722:22;2349:401;:::o;2755:580::-;2836:5;2884:4;2872:9;2867:3;2863:19;2859:30;2856:50;;;2902:1;2899;2892:12;2856:50;2935:2;2929:9;2977:4;2969:6;2965:17;3048:6;3036:10;3033:22;3012:18;3000:10;2997:34;2994:62;2991:242;;;3089:77;3086:1;3079:88;3190:4;3187:1;3180:15;3218:4;3215:1;3208:15;2991:242;3249:2;3242:22;3312:16;;3297:32;;-1:-1:-1;3282:6:124;2755:580;-1:-1:-1;2755:580:124:o;3340:192::-;3419:13;;3472:34;3461:46;;3451:57;;3441:85;;3522:1;3519;3512:12;3441:85;3340:192;;;:::o;3537:169::-;3615:13;;3668:12;3657:24;;3647:35;;3637:63;;3696:1;3693;3686:12;3711:163;3789:13;;3842:6;3831:18;;3821:29;;3811:57;;3864:1;3861;3854:12;3879:145;3958:13;;3980:38;3958:13;3980:38;:::i;4029:1647::-;4129:6;4182:3;4170:9;4161:7;4157:23;4153:33;4150:53;;;4199:1;4196;4189:12;4150:53;4225:17;;:::i;:::-;4265:72;4329:7;4318:9;4265:72;:::i;:::-;4258:5;4251:87;4370:49;4415:2;4404:9;4400:18;4370:49;:::i;:::-;4365:2;4358:5;4354:14;4347:73;4452:49;4497:2;4486:9;4482:18;4452:49;:::i;:::-;4447:2;4440:5;4436:14;4429:73;4534:49;4579:2;4568:9;4564:18;4534:49;:::i;:::-;4529:2;4522:5;4518:14;4511:73;4617:50;4662:3;4651:9;4647:19;4617:50;:::i;:::-;4611:3;4604:5;4600:15;4593:75;4701:50;4746:3;4735:9;4731:19;4701:50;:::i;:::-;4695:3;4688:5;4684:15;4677:75;4785:49;4829:3;4818:9;4814:19;4785:49;:::i;:::-;4779:3;4772:5;4768:15;4761:74;4868:49;4912:3;4901:9;4897:19;4868:49;:::i;:::-;4862:3;4855:5;4851:15;4844:74;4937:3;4972:49;5017:2;5006:9;5002:18;4972:49;:::i;:::-;4956:14;;;4949:73;5041:3;5076:49;5106:18;;;5076:49;:::i;:::-;5060:14;;;5053:73;5145:3;5180:49;5210:18;;;5180:49;:::i;:::-;5164:14;;;5157:73;5249:3;5284:49;5314:18;;;5284:49;:::i;:::-;5268:14;;;5261:73;5353:3;5388:49;5418:18;;;5388:49;:::i;:::-;5372:14;;;5365:73;5457:3;5492:49;5522:18;;;5492:49;:::i;:::-;5476:14;;;5469:73;5561:3;5596:49;5626:18;;;5596:49;:::i;:::-;5580:14;;;5573:73;5584:5;4029:1647;-1:-1:-1;;;4029:1647:124:o;5681:282::-;5793:6;5846:2;5834:9;5825:7;5821:23;5817:32;5814:52;;;5862:1;5859;5852:12;5814:52;5885:72;5949:7;5938:9;5885:72;:::i;5968:581::-;6046:4;6052:6;6112:11;6099:25;6202:66;6191:8;6175:14;6171:29;6167:102;6147:18;6143:127;6133:155;;6284:1;6281;6274:12;6133:155;6311:33;;6363:20;;;-1:-1:-1;6406:18:124;6395:30;;6392:50;;;6438:1;6435;6428:12;6392:50;6471:4;6459:17;;-1:-1:-1;6502:14:124;6498:27;;;6488:38;;6485:58;;;6539:1;6536;6529:12;6485:58;5968:581;;;;;:::o;7139:326::-;7228:6;7223:3;7216:19;7280:6;7273:5;7266:4;7261:3;7257:14;7244:43;;7332:1;7325:4;7316:6;7311:3;7307:16;7303:27;7296:38;7198:3;7454:4;7384:66;7379:2;7371:6;7367:15;7363:88;7358:3;7354:98;7350:109;7343:116;;7139:326;;;;:::o;7470:1016::-;7832:4;7861:42;7942:2;7934:6;7930:15;7919:9;7912:34;7994:2;7986:6;7982:15;7977:2;7966:9;7962:18;7955:43;8046:2;8038:6;8034:15;8029:2;8018:9;8014:18;8007:43;;8086:6;8081:2;8070:9;8066:18;8059:34;8130:3;8124;8113:9;8109:19;8102:32;8157:63;8215:3;8204:9;8200:19;8192:6;8184;8157:63;:::i;:::-;8269:9;8261:6;8257:22;8251:3;8240:9;8236:19;8229:51;8303:50;8346:6;8338;8330;8303:50;:::i;:::-;8289:64;;8402:9;8394:6;8390:22;8384:3;8373:9;8369:19;8362:51;8430:50;8473:6;8465;8457;8430:50;:::i;:::-;8422:58;7470:1016;-1:-1:-1;;;;;;;;;;;;;7470:1016:124:o;8491:1119::-;8882:4;8911:3;8933:42;9014:2;9006:6;9002:15;8991:9;8984:34;9066:2;9058:6;9054:15;9049:2;9038:9;9034:18;9027:43;9118:2;9110:6;9106:15;9101:2;9090:9;9086:18;9079:43;9170:2;9162:6;9158:15;9153:2;9142:9;9138:18;9131:43;;9211:6;9205:3;9194:9;9190:19;9183:35;9255:2;9249:3;9238:9;9234:19;9227:31;9281:62;9339:2;9328:9;9324:18;9316:6;9308;9281:62;:::i;:::-;9267:76;;9392:9;9384:6;9380:22;9374:3;9363:9;9359:19;9352:51;9426:50;9469:6;9461;9453;9426:50;:::i;:::-;9412:64;;9525:9;9517:6;9513:22;9507:3;9496:9;9492:19;9485:51;9553;9597:6;9588:7;9580:6;9553:51;:::i;:::-;9545:59;8491:1119;-1:-1:-1;;;;;;;;;;;;;;8491:1119:124:o;9615:269::-;9672:6;9725:2;9713:9;9704:7;9700:23;9696:32;9693:52;;;9741:1;9738;9731:12;9693:52;9780:9;9767:23;9830:4;9823:5;9819:16;9812:5;9809:27;9799:55;;9850:1;9847;9840:12;9889:1126;10276:4;10305:3;10327:42;10408:2;10400:6;10396:15;10385:9;10378:34;10460:2;10452:6;10448:15;10443:2;10432:9;10428:18;10421:43;10512:2;10504:6;10500:15;10495:2;10484:9;10480:18;10473:43;10564:2;10556:6;10552:15;10547:2;10536:9;10532:18;10525:43;;10617:4;10609:6;10605:17;10599:3;10588:9;10584:19;10577:46;10660:2;10654:3;10643:9;10639:19;10632:31;10686:62;10744:2;10733:9;10729:18;10721:6;10713;10686:62;:::i;11020:1023::-;11378:4;11407:42;11488:2;11480:6;11476:15;11465:9;11458:34;11540:2;11532:6;11528:15;11523:2;11512:9;11508:18;11501:43;11592:2;11584:6;11580:15;11575:2;11564:9;11560:18;11553:43;;11644:4;11636:6;11632:17;11627:2;11616:9;11612:18;11605:45;11687:3;11681;11670:9;11666:19;11659:32;11714:63;11772:3;11761:9;11757:19;11749:6;11741;11714:63;:::i;13427:530::-;13468:3;13506:5;13500:12;13533:6;13528:3;13521:19;13558:1;13568:162;13582:6;13579:1;13576:13;13568:162;;;13644:4;13700:13;;;13696:22;;13690:29;13672:11;;;13668:20;;13661:59;13597:12;13568:162;;;13748:6;13745:1;13742:13;13739:87;;;13814:1;13807:4;13798:6;13793:3;13789:16;13785:27;13778:38;13739:87;-1:-1:-1;13871:2:124;13859:15;13876:66;13855:88;13846:98;;;;13946:4;13842:109;;13427:530;-1:-1:-1;;13427:530:124:o;13962:337::-;14149:42;14141:6;14137:55;14126:9;14119:74;14229:2;14224;14213:9;14209:18;14202:30;14100:4;14249:44;14289:2;14278:9;14274:18;14266:6;14249:44;:::i;:::-;14241:52;13962:337;-1:-1:-1;;;;13962:337:124:o;14304:219::-;14453:2;14442:9;14435:21;14416:4;14473:44;14513:2;14502:9;14498:18;14490:6;14473:44;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"1746400","executionCost":"1869","totalCost":"1748269"},"external":{"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)":"infinite","executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)":"infinite","executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":"infinite","executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":"infinite"},"internal":{"_initTokenWithProxy(address,bytes memory)":"infinite","_upgradeTokenImplementation(address,address,bytes memory)":"infinite"}},"methodIdentifiers":{"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)":"df59b8b2","executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)":"b13c96a8","executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":"f5b50e70","executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":"b0f09355"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ATokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"variableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"ReserveInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"StableDebtTokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"VariableDebtTokenUpgraded\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)\":{\"details\":\"Emits the `ReserveInitialized` event\",\"params\":{\"input\":\"The needed parameters for the initialization\",\"pool\":\"The Pool in which the reserve will be initialized\"}},\"executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)\":{\"details\":\"Emits the `ATokenUpgraded` event\",\"params\":{\"cachedPool\":\"The Pool containing the reserve with the aToken\",\"input\":\"The parameters needed for the initialize call\"}},\"executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)\":{\"details\":\"Emits the `StableDebtTokenUpgraded` event\",\"params\":{\"cachedPool\":\"The Pool containing the reserve with the stable debt token\",\"input\":\"The parameters needed for the initialize call\"}},\"executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)\":{\"details\":\"Emits the `VariableDebtTokenUpgraded` event\",\"params\":{\"cachedPool\":\"The Pool containing the reserve with the variable debt token\",\"input\":\"The parameters needed for the initialize call\"}}},\"title\":\"ConfiguratorLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)\":{\"notice\":\"Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\"},\"executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)\":{\"notice\":\"Updates the aToken implementation and initializes it\"},\"executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)\":{\"notice\":\"Updates the stable debt token implementation and initializes it\"},\"executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)\":{\"notice\":\"Updates the variable debt token implementation and initializes it\"}},\"notice\":\"Implements the functions to initialize reserves and update aTokens and debtTokens\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/ConfiguratorLogic.sol\":\"ConfiguratorLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ConfiguratorLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';\\nimport {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';\\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title ConfiguratorLogic library\\n * @author Aave\\n * @notice Implements the functions to initialize reserves and update aTokens and debtTokens\\n */\\nlibrary ConfiguratorLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPoolConfigurator` for descriptions\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\\n   * @dev Emits the `ReserveInitialized` event\\n   * @param pool The Pool in which the reserve will be initialized\\n   * @param input The needed parameters for the initialization\\n   */\\n  function executeInitReserve(\\n    IPool pool,\\n    ConfiguratorInputTypes.InitReserveInput calldata input\\n  ) public {\\n    address aTokenProxyAddress = _initTokenWithProxy(\\n      input.aTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableAToken.initialize.selector,\\n        pool,\\n        input.treasury,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.aTokenName,\\n        input.aTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address stableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.stableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.stableDebtTokenName,\\n        input.stableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address variableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.variableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.variableDebtTokenName,\\n        input.variableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    pool.initReserve(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);\\n\\n    currentConfig.setDecimals(input.underlyingAssetDecimals);\\n\\n    currentConfig.setActive(true);\\n    currentConfig.setPaused(false);\\n    currentConfig.setFrozen(false);\\n\\n    pool.setConfiguration(input.underlyingAsset, currentConfig);\\n\\n    emit ReserveInitialized(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the aToken implementation and initializes it\\n   * @dev Emits the `ATokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the aToken\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateAToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableAToken.initialize.selector,\\n      cachedPool,\\n      input.treasury,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);\\n\\n    emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);\\n  }\\n\\n  /**\\n   * @notice Updates the stable debt token implementation and initializes it\\n   * @dev Emits the `StableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the stable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateStableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit StableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the variable debt token implementation and initializes it\\n   * @dev Emits the `VariableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the variable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateVariableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit VariableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Creates a new proxy and initializes the implementation\\n   * @param implementation The address of the implementation\\n   * @param initParams The parameters that is passed to the implementation to initialize\\n   * @return The address of initialized proxy\\n   */\\n  function _initTokenWithProxy(\\n    address implementation,\\n    bytes memory initParams\\n  ) internal returns (address) {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(\\n        address(this)\\n      );\\n\\n    proxy.initialize(implementation, initParams);\\n\\n    return address(proxy);\\n  }\\n\\n  /**\\n   * @notice Upgrades the implementation and makes call to the proxy\\n   * @dev The call is used to initialize the new implementation.\\n   * @param proxyAddress The address of the proxy\\n   * @param implementation The address of the new implementation\\n   * @param  initParams The parameters to the call after the upgrade\\n   */\\n  function _upgradeTokenImplementation(\\n    address proxyAddress,\\n    address implementation,\\n    bytes memory initParams\\n  ) internal {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(\\n        payable(proxyAddress)\\n      );\\n\\n    proxy.upgradeToAndCall(implementation, initParams);\\n  }\\n}\\n\",\"keccak256\":\"0xfbf8cf6a8cbfb4c0624f76f1607ec76a58b7320e662309806ee79d6728b78fb7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)":{"notice":"Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token"},"executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)":{"notice":"Updates the aToken implementation and initializes it"},"executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":{"notice":"Updates the stable debt token implementation and initializes it"},"executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":{"notice":"Updates the variable debt token implementation and initializes it"}},"notice":"Implements the functions to initialize reserves and update aTokens and debtTokens","version":1}}},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)":{"details":"Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLDEmits the `UserEModeSet` event","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the setUserEMode function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets","usersEModeCategory":"The state of all users efficiency mode category"}}},"title":"EModeLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"61146e61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80635d5dc3131461003a575b600080fd5b81801561004657600080fd5b5061005a610055366004611192565b61005c565b005b60408051602081018252835481528251918301516100809289928992899290610145565b336000908152602084905260409081902080549183015160ff9081167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008416179091551680156100fe576100fb87878786604051806020016040529081600082015481525050338760400151886000015189602001516102e0565b50505b604080830151905160ff909116815233907fd728da875fc88944cbf17638bcbe4af0eedaef63becd1d1c57cc097eb4608d849060200160405180910390a250505050505050565b60ff81161580610170575060ff811660009081526020859052604090205462010000900461ffff1615155b6040518060400160405280600281526020017f3538000000000000000000000000000000000000000000000000000000000000815250906101e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b60405180910390fd5b5082516101f3576102d8565b60ff8116156102d85760005b828110156102d65761021184826103db565b156102ce576000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168352898252918290208251918201909252905480825260ff8481169160a81c16146040518060400160405280600281526020017f3538000000000000000000000000000000000000000000000000000000000000815250906102cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50505b6001016101ff565b505b505050505050565b6000806000806103478c8c8c6040518060a001604052808e81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018c60ff1681525061045d565b9550955050505050670de0b6b3a76400008210156040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906103c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50909b909a5098505050505050505050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50509051600191821b1c16151590565b6000806000806000806104738760000151511590565b156104af5750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050816109ba565b61055e60405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff16156105a357608088015160ff16600090815260208a905260409020606089015161059091906109c7565b6101808401526101c08301526101a08201525b87602001518160c0015110156108c25760c081015188516105c391610aa6565b6105d75760c08101805160010190526105a3565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff16610200820181905261061d5760c08101805160010190526105a3565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a90830152610180820151158015906106b35750816101e00151896080015160ff16145b6107575760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa15801561072e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610752919061131a565b61075e565b8161018001515b825260a08201511580159061077e575060c0820151895161077e91610b2b565b1561086e5761079b89604001518284600001518560200151610baf565b60408301819052610100830180516107b4908390611362565b90525060808901516101e08301516107cf9160ff1690610c8e565b1515610240830152608082015115610825578161024001516107f55781608001516107fc565b816101a001515b826040015161080b919061137a565b826101400181815161081d9190611362565b90525061082e565b60016102208301525b816102400151610842578160a00151610849565b816101c001515b8260400151610858919061137a565b826101600181815161086a9190611362565b9052505b60c0820151895161087e916103db565b156108b15761089b89604001518284600001518560200151610ca5565b82610120018181516108ad9190611362565b9052505b5060c08101805160010190526105a3565b6101008101516108d35760006108ee565b806101000151816101400151816108ec576108ec6113b7565b045b610140820152610100810151610905576000610920565b8061010001518161016001518161091e5761091e6113b7565b045b610160820152610120810151156109625761095d816101200151610957836101600151846101000151610e2590919063ffffffff16565b90610e68565b610984565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015610a8b576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015610a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a88919061131a565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310610b18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b5050905160019190911b1c600316151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310610b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50509051600191821b82011c16151590565b600080610bbb85610e9f565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792610c67928692911690631da24f3e90602401602060405180830381865afa158015610c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c61919061131a565b90610f23565b610c71919061137a565b9050838181610c8257610c826113b7565b04979650505050505050565b60008215801590610c9e57508282145b9392505050565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f919061131a565b90508015610d5d57610d5a610d5386610f7a565b8290610f23565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df3919061131a565b610dfd9082611362565b9050610e09818561137a565b9050828181610e1a57610e1a6113b7565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610e5a57600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715610e8857600080fd5b50670de0b6b3a76400009190910260028204010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415610ee5575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154610c9e906fffffffffffffffffffffffffffffffff80821691610c61917001000000000000000000000000000000009091041684610ffe565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517610f5857600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415610fc0575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154610c9e906fffffffffffffffffffffffffffffffff80821691610c61917001000000000000000000000000000000009091041684611043565b60008061101264ffffffffff8416426113e6565b61101c908561137a565b6301e133809004905061103b816b033b2e3c9fd0803ce8000000611362565b949350505050565b6000610c9e83834260008061105f64ffffffffff8516846113e6565b90508061107b576b033b2e3c9fd0803ce8000000915050610c9e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116110b15760006110b6565b600285035b925066038882915c40006110ca8a80610f23565b816110d7576110d76113b7565b0491506301e133806110e9838b610f23565b816110f6576110f66113b7565b049050600082611106868861137a565b611110919061137a565b60029004905060008285611124888a61137a565b61112e919061137a565b611138919061137a565b60069004905080826301e1338061114f8a8f61137a565b61115991906113fd565b61116f906b033b2e3c9fd0803ce8000000611362565b6111799190611362565b6111839190611362565b9b9a5050505050505050505050565b6000806000806000808688036101008112156111ad57600080fd5b873596506020880135955060408801359450606088013593506080880135925060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60820112156111fd57600080fd5b506040516060810181811067ffffffffffffffff82111715611248577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405260a0880135815260c088013573ffffffffffffffffffffffffffffffffffffffff8116811461127957600080fd5b602082015260e088013560ff8116811461129257600080fd5b80604083015250809150509295509295509295565b600060208083528351808285015260005b818110156112d4578581018301518582016040015282016112b8565b818111156112e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561132c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561137557611375611333565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156113b2576113b2611333565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000828210156113f8576113f8611333565b500390565b600082611433577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212202c62f8da245632d62b473e996662e92326dfe4623b6e5bc5fe41492f6033e41764736f6c634300080a0033","opcodes":"PUSH2 0x146E PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5D5DC313 EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5A PUSH2 0x55 CALLDATASIZE PUSH1 0x4 PUSH2 0x1192 JUMP JUMPDEST PUSH2 0x5C JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP4 SLOAD DUP2 MSTORE DUP3 MLOAD SWAP2 DUP4 ADD MLOAD PUSH2 0x80 SWAP3 DUP10 SWAP3 DUP10 SWAP3 DUP10 SWAP3 SWAP1 PUSH2 0x145 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0xFF SWAP1 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP5 AND OR SWAP1 SWAP2 SSTORE AND DUP1 ISZERO PUSH2 0xFE JUMPI PUSH2 0xFB DUP8 DUP8 DUP8 DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP CALLER DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD PUSH2 0x2E0 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE CALLER SWAP1 PUSH32 0xD728DA875FC88944CBF17638BCBE4AF0EEDAEF63BECD1D1C57CC097EB4608D84 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND ISZERO DUP1 PUSH2 0x170 JUMPI POP PUSH1 0xFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP3 MLOAD PUSH2 0x1F3 JUMPI PUSH2 0x2D8 JUMP JUMPDEST PUSH1 0xFF DUP2 AND ISZERO PUSH2 0x2D8 JUMPI PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH2 0x211 DUP5 DUP3 PUSH2 0x3DB JUMP JUMPDEST ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP10 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD DUP1 DUP3 MSTORE PUSH1 0xFF DUP5 DUP2 AND SWAP2 PUSH1 0xA8 SHR AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1FF JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x347 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x45D JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP SWAP1 SWAP12 SWAP1 SWAP11 POP SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x44D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x473 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x4AF JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x9BA JUMP JUMPDEST PUSH2 0x55E PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x590 SWAP2 SWAP1 PUSH2 0x9C7 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x8C2 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x5C3 SWAP2 PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x5D7 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x61D JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x6B3 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x757 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x752 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST PUSH2 0x75E JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x77E JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x77E SWAP2 PUSH2 0xB2B JUMP JUMPDEST ISZERO PUSH2 0x86E JUMPI PUSH2 0x79B DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xBAF JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x7B4 SWAP1 DUP4 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x7CF SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0xC8E JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x825 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x7F5 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x7FC JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x80B SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x81D SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x82E JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x842 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x849 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x858 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x86A SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x87E SWAP2 PUSH2 0x3DB JUMP JUMPDEST ISZERO PUSH2 0x8B1 JUMPI PUSH2 0x89B DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA5 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x8AD SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x8D3 JUMPI PUSH1 0x0 PUSH2 0x8EE JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x8EC JUMPI PUSH2 0x8EC PUSH2 0x13B7 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x905 JUMPI PUSH1 0x0 PUSH2 0x920 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x91E JUMPI PUSH2 0x91E PUSH2 0x13B7 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x962 JUMPI PUSH2 0x95D DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x957 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0xE25 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0xE68 JUMP JUMPDEST PUSH2 0x984 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0xA8B JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA88 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0xB18 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0xB9D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBBB DUP6 PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0xC67 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC61 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP1 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0xC71 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0xC82 JUMPI PUSH2 0xC82 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xC9E JUMPI POP DUP3 DUP3 EQ JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD3F SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xD5D JUMPI PUSH2 0xD5A PUSH2 0xD53 DUP7 PUSH2 0xF7A JUMP JUMPDEST DUP3 SWAP1 PUSH2 0xF23 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST PUSH2 0xDFD SWAP1 DUP3 PUSH2 0x1362 JUMP JUMPDEST SWAP1 POP PUSH2 0xE09 DUP2 DUP6 PUSH2 0x137A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0xE1A JUMPI PUSH2 0xE1A PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xE5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0xE88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0xEE5 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0xC9E SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0xC61 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0xFFE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xF58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0xFC0 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0xC9E SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0xC61 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x1043 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1012 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x101C SWAP1 DUP6 PUSH2 0x137A JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x103B DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x1362 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC9E DUP4 DUP4 TIMESTAMP PUSH1 0x0 DUP1 PUSH2 0x105F PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x13E6 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x107B JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0xC9E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x10B1 JUMPI PUSH1 0x0 PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x10CA DUP11 DUP1 PUSH2 0xF23 JUMP JUMPDEST DUP2 PUSH2 0x10D7 JUMPI PUSH2 0x10D7 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x10E9 DUP4 DUP12 PUSH2 0xF23 JUMP JUMPDEST DUP2 PUSH2 0x10F6 JUMPI PUSH2 0x10F6 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1106 DUP7 DUP9 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1110 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1124 DUP9 DUP11 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x112E SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1138 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x114F DUP11 DUP16 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1159 SWAP2 SWAP1 PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x116F SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x1362 JUMP JUMPDEST PUSH2 0x1179 SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST PUSH2 0x1183 SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP7 DUP9 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x11AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP3 ADD SLT ISZERO PUSH2 0x11FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1248 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0xA0 DUP9 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MSTORE POP DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12D4 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x12B8 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x12E6 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x132C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1375 JUMPI PUSH2 0x1375 PUSH2 0x1333 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x13B2 JUMPI PUSH2 0x13B2 PUSH2 0x1333 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x13F8 JUMPI PUSH2 0x13F8 PUSH2 0x1333 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1433 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C PUSH3 0xF8DA24 JUMP ORIGIN 0xD6 0x2B SELFBALANCE RETURNDATACOPY SWAP10 PUSH7 0x62E92326DFE462 EXTCODESIZE PUSH15 0x5BC5FE41492F6033E41764736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"826:3517:96:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;826:3517:96;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_getUserBalanceInBaseCurrency_18448":{"entryPoint":2991,"id":18448,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_18405":{"entryPoint":3237,"id":18405,"parameterSlots":4,"returnSlots":1},"@calculateCompoundedInterest_23673":{"entryPoint":null,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":4163,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":4094,"id":23550,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_18307":{"entryPoint":1117,"id":18307,"parameterSlots":4,"returnSlots":6},"@executeSetUserEMode_17140":{"entryPoint":92,"id":17140,"parameterSlots":6,"returnSlots":0},"@getEModeCategory_13824":{"entryPoint":null,"id":13824,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_17188":{"entryPoint":2503,"id":17188,"parameterSlots":2,"returnSlots":3},"@getNormalizedDebt_20345":{"entryPoint":3962,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":3743,"id":20309,"parameterSlots":1,"returnSlots":1},"@getParams_14000":{"entryPoint":null,"id":14000,"parameterSlots":1,"returnSlots":6},"@isBorrowing_14222":{"entryPoint":987,"id":14222,"parameterSlots":2,"returnSlots":1},"@isEmpty_14371":{"entryPoint":null,"id":14371,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_17208":{"entryPoint":3214,"id":17208,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_14187":{"entryPoint":2726,"id":14187,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_14260":{"entryPoint":2859,"id":14260,"parameterSlots":2,"returnSlots":1},"@percentMul_23713":{"entryPoint":3621,"id":23713,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":3875,"id":23780,"parameterSlots":2,"returnSlots":1},"@validateHealthFactor_23118":{"entryPoint":736,"id":23118,"parameterSlots":8,"returnSlots":2},"@validateSetUserEMode_23381":{"entryPoint":325,"id":23381,"parameterSlots":6,"returnSlots":0},"@wadDiv_23768":{"entryPoint":3688,"id":23768,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_mapping$_t_address_$_t_uint8_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr":{"entryPoint":4498,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":4890,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4775,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4962,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":5117,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":4986,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":5094,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":4915,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":5047,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4081:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"405:1251:124","statements":[{"nodeType":"YulVariableDeclaration","src":"415:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"429:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"438:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"425:3:124"},"nodeType":"YulFunctionCall","src":"425:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"419:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"473:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"482:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"485:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"475:6:124"},"nodeType":"YulFunctionCall","src":"475:12:124"},"nodeType":"YulExpressionStatement","src":"475:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"464:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"468:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"460:3:124"},"nodeType":"YulFunctionCall","src":"460:12:124"},"nodeType":"YulIf","src":"457:32:124"},{"nodeType":"YulAssignment","src":"498:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"521:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"508:12:124"},"nodeType":"YulFunctionCall","src":"508:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"498:6:124"}]},{"nodeType":"YulAssignment","src":"540:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"567:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"578:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"550:12:124"},"nodeType":"YulFunctionCall","src":"550:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"540:6:124"}]},{"nodeType":"YulAssignment","src":"591:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"618:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"629:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"614:3:124"},"nodeType":"YulFunctionCall","src":"614:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"601:12:124"},"nodeType":"YulFunctionCall","src":"601:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"591:6:124"}]},{"nodeType":"YulAssignment","src":"642:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"669:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"680:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"665:3:124"},"nodeType":"YulFunctionCall","src":"665:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"652:12:124"},"nodeType":"YulFunctionCall","src":"652:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"642:6:124"}]},{"nodeType":"YulAssignment","src":"693:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"720:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"731:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"716:3:124"},"nodeType":"YulFunctionCall","src":"716:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"703:12:124"},"nodeType":"YulFunctionCall","src":"703:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"693:6:124"}]},{"body":{"nodeType":"YulBlock","src":"833:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"842:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"845:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"835:6:124"},"nodeType":"YulFunctionCall","src":"835:12:124"},"nodeType":"YulExpressionStatement","src":"835:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"756:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"752:3:124"},"nodeType":"YulFunctionCall","src":"752:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"829:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"748:3:124"},"nodeType":"YulFunctionCall","src":"748:84:124"},"nodeType":"YulIf","src":"745:104:124"},{"nodeType":"YulVariableDeclaration","src":"858:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"878:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"872:5:124"},"nodeType":"YulFunctionCall","src":"872:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"862:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"890:33:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"912:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"920:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"908:3:124"},"nodeType":"YulFunctionCall","src":"908:15:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"894:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1006:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1027:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1030:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1020:6:124"},"nodeType":"YulFunctionCall","src":"1020:88:124"},"nodeType":"YulExpressionStatement","src":"1020:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1128:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1131:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1121:6:124"},"nodeType":"YulFunctionCall","src":"1121:15:124"},"nodeType":"YulExpressionStatement","src":"1121:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1156:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1159:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1149:6:124"},"nodeType":"YulFunctionCall","src":"1149:15:124"},"nodeType":"YulExpressionStatement","src":"1149:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"941:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"953:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"938:2:124"},"nodeType":"YulFunctionCall","src":"938:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"977:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"989:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"974:2:124"},"nodeType":"YulFunctionCall","src":"974:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"935:2:124"},"nodeType":"YulFunctionCall","src":"935:62:124"},"nodeType":"YulIf","src":"932:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1190:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1194:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1183:6:124"},"nodeType":"YulFunctionCall","src":"1183:22:124"},"nodeType":"YulExpressionStatement","src":"1183:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1221:6:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1246:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1257:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1242:3:124"},"nodeType":"YulFunctionCall","src":"1242:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1229:12:124"},"nodeType":"YulFunctionCall","src":"1229:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1214:6:124"},"nodeType":"YulFunctionCall","src":"1214:49:124"},"nodeType":"YulExpressionStatement","src":"1214:49:124"},{"nodeType":"YulVariableDeclaration","src":"1272:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1302:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1313:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1298:3:124"},"nodeType":"YulFunctionCall","src":"1298:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1285:12:124"},"nodeType":"YulFunctionCall","src":"1285:33:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1276:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1404:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1413:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1416:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1406:6:124"},"nodeType":"YulFunctionCall","src":"1406:12:124"},"nodeType":"YulExpressionStatement","src":"1406:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1340:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1351:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1358:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1347:3:124"},"nodeType":"YulFunctionCall","src":"1347:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1337:2:124"},"nodeType":"YulFunctionCall","src":"1337:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1330:6:124"},"nodeType":"YulFunctionCall","src":"1330:73:124"},"nodeType":"YulIf","src":"1327:93:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1440:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1448:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1436:3:124"},"nodeType":"YulFunctionCall","src":"1436:15:124"},{"name":"value","nodeType":"YulIdentifier","src":"1453:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1429:6:124"},"nodeType":"YulFunctionCall","src":"1429:30:124"},"nodeType":"YulExpressionStatement","src":"1429:30:124"},{"nodeType":"YulVariableDeclaration","src":"1468:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1500:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1511:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1496:3:124"},"nodeType":"YulFunctionCall","src":"1496:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1483:12:124"},"nodeType":"YulFunctionCall","src":"1483:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1472:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1568:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1577:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1580:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1570:6:124"},"nodeType":"YulFunctionCall","src":"1570:12:124"},"nodeType":"YulExpressionStatement","src":"1570:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1538:7:124"},{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1551:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"1560:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1547:3:124"},"nodeType":"YulFunctionCall","src":"1547:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1535:2:124"},"nodeType":"YulFunctionCall","src":"1535:31:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1528:6:124"},"nodeType":"YulFunctionCall","src":"1528:39:124"},"nodeType":"YulIf","src":"1525:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1604:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1612:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1600:3:124"},"nodeType":"YulFunctionCall","src":"1600:15:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"1617:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1593:6:124"},"nodeType":"YulFunctionCall","src":"1593:32:124"},"nodeType":"YulExpressionStatement","src":"1593:32:124"},{"nodeType":"YulAssignment","src":"1634:16:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1644:6:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1634:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_mapping$_t_address_$_t_uint8_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"331:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"342:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"354:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"362:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"370:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"378:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"386:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"394:6:124","type":""}],"src":"14:1642:124"},{"body":{"nodeType":"YulBlock","src":"1758:87:124","statements":[{"nodeType":"YulAssignment","src":"1768:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1780:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1791:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1776:3:124"},"nodeType":"YulFunctionCall","src":"1776:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1768:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1810:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1825:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1833:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1821:3:124"},"nodeType":"YulFunctionCall","src":"1821:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1803:6:124"},"nodeType":"YulFunctionCall","src":"1803:36:124"},"nodeType":"YulExpressionStatement","src":"1803:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1727:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1738:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1749:4:124","type":""}],"src":"1661:184:124"},{"body":{"nodeType":"YulBlock","src":"1971:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"1981:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1991:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1985:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2009:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2020:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2002:6:124"},"nodeType":"YulFunctionCall","src":"2002:21:124"},"nodeType":"YulExpressionStatement","src":"2002:21:124"},{"nodeType":"YulVariableDeclaration","src":"2032:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2052:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2046:5:124"},"nodeType":"YulFunctionCall","src":"2046:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2036:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2079:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2090:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2075:3:124"},"nodeType":"YulFunctionCall","src":"2075:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"2095:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2068:6:124"},"nodeType":"YulFunctionCall","src":"2068:34:124"},"nodeType":"YulExpressionStatement","src":"2068:34:124"},{"nodeType":"YulVariableDeclaration","src":"2111:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2120:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2115:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2180:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2209:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"2220:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2205:3:124"},"nodeType":"YulFunctionCall","src":"2205:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2201:3:124"},"nodeType":"YulFunctionCall","src":"2201:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2243:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"2251:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2239:3:124"},"nodeType":"YulFunctionCall","src":"2239:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2255:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2235:3:124"},"nodeType":"YulFunctionCall","src":"2235:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2229:5:124"},"nodeType":"YulFunctionCall","src":"2229:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2194:6:124"},"nodeType":"YulFunctionCall","src":"2194:66:124"},"nodeType":"YulExpressionStatement","src":"2194:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2141:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2144:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2138:2:124"},"nodeType":"YulFunctionCall","src":"2138:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2152:19:124","statements":[{"nodeType":"YulAssignment","src":"2154:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2163:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2166:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2159:3:124"},"nodeType":"YulFunctionCall","src":"2159:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2154:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2134:3:124","statements":[]},"src":"2130:140:124"},{"body":{"nodeType":"YulBlock","src":"2304:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2333:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"2344:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2329:3:124"},"nodeType":"YulFunctionCall","src":"2329:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"2353:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2325:3:124"},"nodeType":"YulFunctionCall","src":"2325:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"2358:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2318:6:124"},"nodeType":"YulFunctionCall","src":"2318:42:124"},"nodeType":"YulExpressionStatement","src":"2318:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2285:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"2288:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2282:2:124"},"nodeType":"YulFunctionCall","src":"2282:13:124"},"nodeType":"YulIf","src":"2279:91:124"},{"nodeType":"YulAssignment","src":"2379:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2395:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2414:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2422:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2410:3:124"},"nodeType":"YulFunctionCall","src":"2410:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"2427:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2406:3:124"},"nodeType":"YulFunctionCall","src":"2406:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2391:3:124"},"nodeType":"YulFunctionCall","src":"2391:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"2497:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2387:3:124"},"nodeType":"YulFunctionCall","src":"2387:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2379:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1940:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1951:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1962:4:124","type":""}],"src":"1850:656:124"},{"body":{"nodeType":"YulBlock","src":"2612:125:124","statements":[{"nodeType":"YulAssignment","src":"2622:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2634:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2645:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2630:3:124"},"nodeType":"YulFunctionCall","src":"2630:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2622:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2664:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2679:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2687:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2675:3:124"},"nodeType":"YulFunctionCall","src":"2675:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2657:6:124"},"nodeType":"YulFunctionCall","src":"2657:74:124"},"nodeType":"YulExpressionStatement","src":"2657:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2581:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2592:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2603:4:124","type":""}],"src":"2511:226:124"},{"body":{"nodeType":"YulBlock","src":"2823:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"2869:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2878:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2881:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2871:6:124"},"nodeType":"YulFunctionCall","src":"2871:12:124"},"nodeType":"YulExpressionStatement","src":"2871:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2844:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2853:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2840:3:124"},"nodeType":"YulFunctionCall","src":"2840:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2865:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2836:3:124"},"nodeType":"YulFunctionCall","src":"2836:32:124"},"nodeType":"YulIf","src":"2833:52:124"},{"nodeType":"YulAssignment","src":"2894:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2910:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2904:5:124"},"nodeType":"YulFunctionCall","src":"2904:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2894:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2789:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2800:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2812:6:124","type":""}],"src":"2742:184:124"},{"body":{"nodeType":"YulBlock","src":"2963:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2980:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2983:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2973:6:124"},"nodeType":"YulFunctionCall","src":"2973:88:124"},"nodeType":"YulExpressionStatement","src":"2973:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3077:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3080:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3070:6:124"},"nodeType":"YulFunctionCall","src":"3070:15:124"},"nodeType":"YulExpressionStatement","src":"3070:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3101:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3104:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3094:6:124"},"nodeType":"YulFunctionCall","src":"3094:15:124"},"nodeType":"YulExpressionStatement","src":"3094:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2931:184:124"},{"body":{"nodeType":"YulBlock","src":"3168:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"3195:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3197:16:124"},"nodeType":"YulFunctionCall","src":"3197:18:124"},"nodeType":"YulExpressionStatement","src":"3197:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3184:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3191:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3187:3:124"},"nodeType":"YulFunctionCall","src":"3187:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3181:2:124"},"nodeType":"YulFunctionCall","src":"3181:13:124"},"nodeType":"YulIf","src":"3178:39:124"},{"nodeType":"YulAssignment","src":"3226:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3237:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3240:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3233:3:124"},"nodeType":"YulFunctionCall","src":"3233:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"3226:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3151:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3154:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"3160:3:124","type":""}],"src":"3120:128:124"},{"body":{"nodeType":"YulBlock","src":"3305:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"3424:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3426:16:124"},"nodeType":"YulFunctionCall","src":"3426:18:124"},"nodeType":"YulExpressionStatement","src":"3426:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3336:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3329:6:124"},"nodeType":"YulFunctionCall","src":"3329:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3322:6:124"},"nodeType":"YulFunctionCall","src":"3322:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3344:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3351:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"3419:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3347:3:124"},"nodeType":"YulFunctionCall","src":"3347:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3341:2:124"},"nodeType":"YulFunctionCall","src":"3341:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3318:3:124"},"nodeType":"YulFunctionCall","src":"3318:105:124"},"nodeType":"YulIf","src":"3315:131:124"},{"nodeType":"YulAssignment","src":"3455:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3470:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3473:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3466:3:124"},"nodeType":"YulFunctionCall","src":"3466:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"3455:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3284:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3287:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"3293:7:124","type":""}],"src":"3253:228:124"},{"body":{"nodeType":"YulBlock","src":"3518:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3535:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3538:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3528:6:124"},"nodeType":"YulFunctionCall","src":"3528:88:124"},"nodeType":"YulExpressionStatement","src":"3528:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3632:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3635:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3625:6:124"},"nodeType":"YulFunctionCall","src":"3625:15:124"},"nodeType":"YulExpressionStatement","src":"3625:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3656:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3659:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3649:6:124"},"nodeType":"YulFunctionCall","src":"3649:15:124"},"nodeType":"YulExpressionStatement","src":"3649:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"3486:184:124"},{"body":{"nodeType":"YulBlock","src":"3724:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"3746:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3748:16:124"},"nodeType":"YulFunctionCall","src":"3748:18:124"},"nodeType":"YulExpressionStatement","src":"3748:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3740:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3743:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3737:2:124"},"nodeType":"YulFunctionCall","src":"3737:8:124"},"nodeType":"YulIf","src":"3734:34:124"},{"nodeType":"YulAssignment","src":"3777:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3789:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3792:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3785:3:124"},"nodeType":"YulFunctionCall","src":"3785:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3777:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3706:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3709:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3715:4:124","type":""}],"src":"3675:125:124"},{"body":{"nodeType":"YulBlock","src":"3851:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"3882:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3903:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3906:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3896:6:124"},"nodeType":"YulFunctionCall","src":"3896:88:124"},"nodeType":"YulExpressionStatement","src":"3896:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4004:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4007:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3997:6:124"},"nodeType":"YulFunctionCall","src":"3997:15:124"},"nodeType":"YulExpressionStatement","src":"3997:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4032:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4035:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4025:6:124"},"nodeType":"YulFunctionCall","src":"4025:15:124"},"nodeType":"YulExpressionStatement","src":"4025:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3871:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3864:6:124"},"nodeType":"YulFunctionCall","src":"3864:9:124"},"nodeType":"YulIf","src":"3861:189:124"},{"nodeType":"YulAssignment","src":"4059:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4068:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"4071:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4064:3:124"},"nodeType":"YulFunctionCall","src":"4064:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"4059:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3836:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3839:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"3845:1:124","type":""}],"src":"3805:274:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_mapping$_t_address_$_t_uint8_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 256) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60), 96) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 96)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        mstore(memPtr, calldataload(add(headStart, 160)))\n        let value := calldataload(add(headStart, 192))\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        mstore(add(memPtr, 32), value)\n        let value_1 := calldataload(add(headStart, 224))\n        if iszero(eq(value_1, and(value_1, 0xff))) { revert(0, 0) }\n        mstore(add(memPtr, 64), value_1)\n        value5 := memPtr\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80635d5dc3131461003a575b600080fd5b81801561004657600080fd5b5061005a610055366004611192565b61005c565b005b60408051602081018252835481528251918301516100809289928992899290610145565b336000908152602084905260409081902080549183015160ff9081167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008416179091551680156100fe576100fb87878786604051806020016040529081600082015481525050338760400151886000015189602001516102e0565b50505b604080830151905160ff909116815233907fd728da875fc88944cbf17638bcbe4af0eedaef63becd1d1c57cc097eb4608d849060200160405180910390a250505050505050565b60ff81161580610170575060ff811660009081526020859052604090205462010000900461ffff1615155b6040518060400160405280600281526020017f3538000000000000000000000000000000000000000000000000000000000000815250906101e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b60405180910390fd5b5082516101f3576102d8565b60ff8116156102d85760005b828110156102d65761021184826103db565b156102ce576000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168352898252918290208251918201909252905480825260ff8481169160a81c16146040518060400160405280600281526020017f3538000000000000000000000000000000000000000000000000000000000000815250906102cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50505b6001016101ff565b505b505050505050565b6000806000806103478c8c8c6040518060a001604052808e81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018c60ff1681525061045d565b9550955050505050670de0b6b3a76400008210156040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906103c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50909b909a5098505050505050505050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50509051600191821b1c16151590565b6000806000806000806104738760000151511590565b156104af5750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050816109ba565b61055e60405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff16156105a357608088015160ff16600090815260208a905260409020606089015161059091906109c7565b6101808401526101c08301526101a08201525b87602001518160c0015110156108c25760c081015188516105c391610aa6565b6105d75760c08101805160010190526105a3565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff16610200820181905261061d5760c08101805160010190526105a3565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a90830152610180820151158015906106b35750816101e00151896080015160ff16145b6107575760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa15801561072e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610752919061131a565b61075e565b8161018001515b825260a08201511580159061077e575060c0820151895161077e91610b2b565b1561086e5761079b89604001518284600001518560200151610baf565b60408301819052610100830180516107b4908390611362565b90525060808901516101e08301516107cf9160ff1690610c8e565b1515610240830152608082015115610825578161024001516107f55781608001516107fc565b816101a001515b826040015161080b919061137a565b826101400181815161081d9190611362565b90525061082e565b60016102208301525b816102400151610842578160a00151610849565b816101c001515b8260400151610858919061137a565b826101600181815161086a9190611362565b9052505b60c0820151895161087e916103db565b156108b15761089b89604001518284600001518560200151610ca5565b82610120018181516108ad9190611362565b9052505b5060c08101805160010190526105a3565b6101008101516108d35760006108ee565b806101000151816101400151816108ec576108ec6113b7565b045b610140820152610100810151610905576000610920565b8061010001518161016001518161091e5761091e6113b7565b045b610160820152610120810151156109625761095d816101200151610957836101600151846101000151610e2590919063ffffffff16565b90610e68565b610984565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015610a8b576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015610a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a88919061131a565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310610b18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b5050905160019190911b1c600316151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310610b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50509051600191821b82011c16151590565b600080610bbb85610e9f565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792610c67928692911690631da24f3e90602401602060405180830381865afa158015610c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c61919061131a565b90610f23565b610c71919061137a565b9050838181610c8257610c826113b7565b04979650505050505050565b60008215801590610c9e57508282145b9392505050565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f919061131a565b90508015610d5d57610d5a610d5386610f7a565b8290610f23565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df3919061131a565b610dfd9082611362565b9050610e09818561137a565b9050828181610e1a57610e1a6113b7565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610e5a57600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715610e8857600080fd5b50670de0b6b3a76400009190910260028204010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415610ee5575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154610c9e906fffffffffffffffffffffffffffffffff80821691610c61917001000000000000000000000000000000009091041684610ffe565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517610f5857600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415610fc0575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154610c9e906fffffffffffffffffffffffffffffffff80821691610c61917001000000000000000000000000000000009091041684611043565b60008061101264ffffffffff8416426113e6565b61101c908561137a565b6301e133809004905061103b816b033b2e3c9fd0803ce8000000611362565b949350505050565b6000610c9e83834260008061105f64ffffffffff8516846113e6565b90508061107b576b033b2e3c9fd0803ce8000000915050610c9e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116110b15760006110b6565b600285035b925066038882915c40006110ca8a80610f23565b816110d7576110d76113b7565b0491506301e133806110e9838b610f23565b816110f6576110f66113b7565b049050600082611106868861137a565b611110919061137a565b60029004905060008285611124888a61137a565b61112e919061137a565b611138919061137a565b60069004905080826301e1338061114f8a8f61137a565b61115991906113fd565b61116f906b033b2e3c9fd0803ce8000000611362565b6111799190611362565b6111839190611362565b9b9a5050505050505050505050565b6000806000806000808688036101008112156111ad57600080fd5b873596506020880135955060408801359450606088013593506080880135925060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60820112156111fd57600080fd5b506040516060810181811067ffffffffffffffff82111715611248577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405260a0880135815260c088013573ffffffffffffffffffffffffffffffffffffffff8116811461127957600080fd5b602082015260e088013560ff8116811461129257600080fd5b80604083015250809150509295509295509295565b600060208083528351808285015260005b818110156112d4578581018301518582016040015282016112b8565b818111156112e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561132c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561137557611375611333565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156113b2576113b2611333565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000828210156113f8576113f8611333565b500390565b600082611433577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212202c62f8da245632d62b473e996662e92326dfe4623b6e5bc5fe41492f6033e41764736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5D5DC313 EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5A PUSH2 0x55 CALLDATASIZE PUSH1 0x4 PUSH2 0x1192 JUMP JUMPDEST PUSH2 0x5C JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP4 SLOAD DUP2 MSTORE DUP3 MLOAD SWAP2 DUP4 ADD MLOAD PUSH2 0x80 SWAP3 DUP10 SWAP3 DUP10 SWAP3 DUP10 SWAP3 SWAP1 PUSH2 0x145 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0xFF SWAP1 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP5 AND OR SWAP1 SWAP2 SSTORE AND DUP1 ISZERO PUSH2 0xFE JUMPI PUSH2 0xFB DUP8 DUP8 DUP8 DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP CALLER DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD PUSH2 0x2E0 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE CALLER SWAP1 PUSH32 0xD728DA875FC88944CBF17638BCBE4AF0EEDAEF63BECD1D1C57CC097EB4608D84 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND ISZERO DUP1 PUSH2 0x170 JUMPI POP PUSH1 0xFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP3 MLOAD PUSH2 0x1F3 JUMPI PUSH2 0x2D8 JUMP JUMPDEST PUSH1 0xFF DUP2 AND ISZERO PUSH2 0x2D8 JUMPI PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH2 0x211 DUP5 DUP3 PUSH2 0x3DB JUMP JUMPDEST ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP10 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD DUP1 DUP3 MSTORE PUSH1 0xFF DUP5 DUP2 AND SWAP2 PUSH1 0xA8 SHR AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1FF JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x347 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x45D JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP SWAP1 SWAP12 SWAP1 SWAP11 POP SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x44D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x473 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x4AF JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x9BA JUMP JUMPDEST PUSH2 0x55E PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x590 SWAP2 SWAP1 PUSH2 0x9C7 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x8C2 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x5C3 SWAP2 PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x5D7 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x61D JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x6B3 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x757 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x752 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST PUSH2 0x75E JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x77E JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x77E SWAP2 PUSH2 0xB2B JUMP JUMPDEST ISZERO PUSH2 0x86E JUMPI PUSH2 0x79B DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xBAF JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x7B4 SWAP1 DUP4 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x7CF SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0xC8E JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x825 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x7F5 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x7FC JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x80B SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x81D SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x82E JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x842 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x849 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x858 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x86A SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x87E SWAP2 PUSH2 0x3DB JUMP JUMPDEST ISZERO PUSH2 0x8B1 JUMPI PUSH2 0x89B DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA5 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x8AD SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x8D3 JUMPI PUSH1 0x0 PUSH2 0x8EE JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x8EC JUMPI PUSH2 0x8EC PUSH2 0x13B7 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x905 JUMPI PUSH1 0x0 PUSH2 0x920 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x91E JUMPI PUSH2 0x91E PUSH2 0x13B7 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x962 JUMPI PUSH2 0x95D DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x957 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0xE25 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0xE68 JUMP JUMPDEST PUSH2 0x984 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0xA8B JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA88 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0xB18 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0xB9D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBBB DUP6 PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0xC67 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC61 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP1 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0xC71 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0xC82 JUMPI PUSH2 0xC82 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xC9E JUMPI POP DUP3 DUP3 EQ JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD3F SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xD5D JUMPI PUSH2 0xD5A PUSH2 0xD53 DUP7 PUSH2 0xF7A JUMP JUMPDEST DUP3 SWAP1 PUSH2 0xF23 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST PUSH2 0xDFD SWAP1 DUP3 PUSH2 0x1362 JUMP JUMPDEST SWAP1 POP PUSH2 0xE09 DUP2 DUP6 PUSH2 0x137A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0xE1A JUMPI PUSH2 0xE1A PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xE5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0xE88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0xEE5 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0xC9E SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0xC61 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0xFFE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xF58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0xFC0 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0xC9E SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0xC61 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x1043 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1012 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x101C SWAP1 DUP6 PUSH2 0x137A JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x103B DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x1362 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC9E DUP4 DUP4 TIMESTAMP PUSH1 0x0 DUP1 PUSH2 0x105F PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x13E6 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x107B JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0xC9E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x10B1 JUMPI PUSH1 0x0 PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x10CA DUP11 DUP1 PUSH2 0xF23 JUMP JUMPDEST DUP2 PUSH2 0x10D7 JUMPI PUSH2 0x10D7 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x10E9 DUP4 DUP12 PUSH2 0xF23 JUMP JUMPDEST DUP2 PUSH2 0x10F6 JUMPI PUSH2 0x10F6 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1106 DUP7 DUP9 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1110 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1124 DUP9 DUP11 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x112E SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1138 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x114F DUP11 DUP16 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1159 SWAP2 SWAP1 PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x116F SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x1362 JUMP JUMPDEST PUSH2 0x1179 SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST PUSH2 0x1183 SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP7 DUP9 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x11AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP3 ADD SLT ISZERO PUSH2 0x11FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1248 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0xA0 DUP9 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MSTORE POP DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12D4 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x12B8 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x12E6 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x132C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1375 JUMPI PUSH2 0x1375 PUSH2 0x1333 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x13B2 JUMPI PUSH2 0x13B2 PUSH2 0x1333 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x13F8 JUMPI PUSH2 0x13F8 PUSH2 0x1333 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1433 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C PUSH3 0xF8DA24 JUMP ORIGIN 0xD6 0x2B SELFBALANCE RETURNDATACOPY SWAP10 PUSH7 0x62E92326DFE462 EXTCODESIZE PUSH15 0x5BC5FE41492F6033E41764736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"826:3517:96:-:0;;;;;;;;;;;;;;;;;;;;;;;;1909:1039;;;;;;;;;;-1:-1:-1;1909:1039:96;;;;;:::i;:::-;;:::i;:::-;;;2318:176;;;;;;;;;;;;2443:20;;2471:17;;;;2318:176;;2362:12;;2382;;2402:15;;2443:20;2318:36;:176::i;:::-;2543:10;2501:20;2524:30;;;;;;;;;;;;;;2593:17;;;;2524:30;2560:50;;;;;;;;;;2524:30;2621:19;;2617:273;;2650:233;2696:12;2718;2740:15;2765:10;2650:233;;;;;;;;;;;;;;;;;2785:10;2805:6;:17;;;2832:6;:20;;;2862:6;:13;;;2650:36;:233::i;:::-;;;2617:273;2925:17;;;;;2900:43;;1833:4:124;1821:17;;;1803:36;;2913:10:96;;2900:43;;1791:2:124;1776:18;2900:43:96;;;;;;;2312:636;1909:1039;;;;;;:::o;25523:1287:104:-;25947:15;;;;;:72;;-1:-1:-1;25966:27:104;;;;;;;;;;;;;;:48;;;;;;:53;;25947:72;26027:34;;;;;;;;;;;;;;;;;25932:135;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;6194:9:89;;26146:47:104;;26180:7;;26146:47;26361:15;;;;26357:449;;26411:9;26406:386;26430:13;26426:1;:17;26406:386;;;26466:25;:10;26489:1;26466:22;:25::i;:::-;26462:320;;;26507:54;26577:15;;;;;;;;;;;;;;26564:29;;;;;;;;;26507:115;;;;;;;;;;;;;26659:46;;;;;4339:3:88;20323:71;;26659:46:104;26721:34;;;;;;;;;;;;;;;;;26636:133;;;;;;;;;;;;;;:::i;:::-;;26493:289;26462:320;26445:3;;26406:386;;;;26357:449;25523:1287;;;;;;:::o;21356:1027::-;21754:7;21763:4;21784:20;21806:25;21835:353;21889:12;21911;21933:15;21958:222;;;;;;;;22023:10;21958:222;;;;22060:13;21958:222;;;;22091:4;21958:222;;;;;;22115:6;21958:222;;;;;;22152:17;21958:222;;;;;21835:44;:353::i;:::-;21775:413;;;;;;;;2677:4;22210:12;:51;;22269:53;;;;;;;;;;;;;;;;;22195:133;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22343:12:104;;;;-1:-1:-1;21356:1027:104;-1:-1:-1;;;;;;;;;21356:1027:104:o;3046:314:89:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:88;3206:54:89;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:89;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;2633:3723:98:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:89;:14;;6091:122;3008:27:98;3004:93;;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3065:17:98;;-1:-1:-1;3053:1:98;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:98;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:88;4339:3;23023:71;;;;;4004:23:98;;;3898:180;3439:2:88;22869:67;;;;3971:13:98;;;3898:180;;;22674:9:88;3298:2;22691:85;;;;;3926:25:98;;;3898:180;22662:21:88;;;3908:8:98;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:98;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;2675:55:124;;;4308:75:98;;;2657:74:124;4308:47:98;;;;;2630:18:124;;4308:75:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:98;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:98;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:98;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:98;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:98;-1:-1:-1;5573:6:98;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:98;;-1:-1:-1;6240:11:98;-1:-1:-1;6259:28:98;;-1:-1:-1;5921:220:98;-1:-1:-1;6320:25:98;-1:-1:-1;2633:3723:98;;;;;;;;;;;;:::o;3336:442:96:-;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;2675:55:124;;;3653:38:96;;;2657:74:124;3653:20:96;;;;;2630:18:124;;3653:38:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:96;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:96;-1:-1:-1;;;3336:442:96:o;2435:333:89:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:88;2614:54:89;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:89;;2745:1;2729:17;;;;2715:32;2751:1;2714:38;:43;;;2435:333::o;3638:328::-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:88;3806:54:89;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:89;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;9524:446:98:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;2675:55:124;;;9800:64:98;;;2657:74:124;;;;9712:56:98;;-1:-1:-1;9774:15:98;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;2630:18:124;;9800:64:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:71;;:89::i;:::-;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;;9524:446;-1:-1:-1;;;;;;;9524:446:98:o;4133:208:96:-;4250:4;4270:22;;;;;:65;;;4318:17;4296:18;:39;4270:65;4262:74;4133:208;-1:-1:-1;;;4133:208:96:o;8150:645:98:-;8409:32;;;;8389:87;;;;;8409:32;2675:55:124;;;8389:87:98;;;2657:74:124;8320:7:98;;;;8409:32;;;8389:69;;2630:18:124;;8389:87:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:98;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;2675:55:124;;;8624:54:98;;;2657:74:124;8631:30:98;;;;8624:48;;2630:18:124;;8624:54:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:98;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:98:o;1005:496:106:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;1660:322:107:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:107;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;1895:528:102:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;2809:545:102:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:105:o;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;14:1642:124:-;354:6;362;370;378;386;394;438:9;429:7;425:23;468:3;464:2;460:12;457:32;;;485:1;482;475:12;457:32;521:9;508:23;498:33;;578:2;567:9;563:18;550:32;540:42;;629:2;618:9;614:18;601:32;591:42;;680:2;669:9;665:18;652:32;642:42;;731:3;720:9;716:19;703:33;693:43;;829:2;760:66;756:2;752:75;748:84;745:104;;;845:1;842;835:12;745:104;;878:2;872:9;920:2;912:6;908:15;989:6;977:10;974:22;953:18;941:10;938:34;935:62;932:242;;;1030:77;1027:1;1020:88;1131:4;1128:1;1121:15;1159:4;1156:1;1149:15;932:242;1190:2;1183:22;1257:3;1242:19;;1229:33;1214:49;;1313:3;1298:19;;1285:33;1358:42;1347:54;;1337:65;;1327:93;;1416:1;1413;1406:12;1327:93;1448:2;1436:15;;1429:30;1511:3;1496:19;;1483:33;1560:4;1547:18;;1535:31;;1525:59;;1580:1;1577;1570:12;1525:59;1617:7;1612:2;1604:6;1600:15;1593:32;;1644:6;1634:16;;;14:1642;;;;;;;;:::o;1850:656::-;1962:4;1991:2;2020;2009:9;2002:21;2052:6;2046:13;2095:6;2090:2;2079:9;2075:18;2068:34;2120:1;2130:140;2144:6;2141:1;2138:13;2130:140;;;2239:14;;;2235:23;;2229:30;2205:17;;;2224:2;2201:26;2194:66;2159:10;;2130:140;;;2288:6;2285:1;2282:13;2279:91;;;2358:1;2353:2;2344:6;2333:9;2329:22;2325:31;2318:42;2279:91;-1:-1:-1;2422:2:124;2410:15;2427:66;2406:88;2391:104;;;;2497:2;2387:113;;1850:656;-1:-1:-1;;;1850:656:124:o;2742:184::-;2812:6;2865:2;2853:9;2844:7;2840:23;2836:32;2833:52;;;2881:1;2878;2871:12;2833:52;-1:-1:-1;2904:16:124;;2742:184;-1:-1:-1;2742:184:124:o;2931:::-;2983:77;2980:1;2973:88;3080:4;3077:1;3070:15;3104:4;3101:1;3094:15;3120:128;3160:3;3191:1;3187:6;3184:1;3181:13;3178:39;;;3197:18;;:::i;:::-;-1:-1:-1;3233:9:124;;3120:128::o;3253:228::-;3293:7;3419:1;3351:66;3347:74;3344:1;3341:81;3336:1;3329:9;3322:17;3318:105;3315:131;;;3426:18;;:::i;:::-;-1:-1:-1;3466:9:124;;3253:228::o;3486:184::-;3538:77;3535:1;3528:88;3635:4;3632:1;3625:15;3659:4;3656:1;3649:15;3675:125;3715:4;3743:1;3740;3737:8;3734:34;;;3748:18;;:::i;:::-;-1:-1:-1;3785:9:124;;3675:125::o;3805:274::-;3845:1;3871;3861:189;;3906:77;3903:1;3896:88;4007:4;4004:1;3997:15;4035:4;4032:1;4025:15;3861:189;-1:-1:-1;4064:9:124;;3805:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"1046000","executionCost":"1118","totalCost":"1047118"},"external":{"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)":"infinite"},"internal":{"getEModeConfiguration(struct DataTypes.EModeCategory storage pointer,contract IPriceOracleGetter)":"infinite","isInEModeCategory(uint256,uint256)":"64"}},"methodIdentifiers":{"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)":"5d5dc313"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)\":{\"details\":\"Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLDEmits the `UserEModeSet` event\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the setUserEMode function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\",\"usersEModeCategory\":\"The state of all users efficiency mode category\"}}},\"title\":\"EModeLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)\":{\"notice\":\"Updates the user efficiency mode category\"}},\"notice\":\"Implements the base logic for all the actions related to the eMode\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/EModeLogic.sol\":\"EModeLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)":{"notice":"Updates the user efficiency mode category"}},"notice":"Implements the base logic for all the actions related to the eMode","version":1}}},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)":{"details":"For authorized flashborrowers the fee is waivedAt the end of the transaction the pool will pull amount borrowed + fee from the receiver, if the receiver have not approved the pool the transaction will revert.Emits the `FlashLoan()` event","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the flashloan function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}},"executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)":{"details":"Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gasAt the end of the transaction the pool will pull amount borrowed + fee from the receiver, if the receiver have not approved the pool the transaction will revert.Emits the `FlashLoan()` event","params":{"params":"The additional parameters needed to execute the simple flashloan function","reserve":"The state of the flashloaned reserve"}}},"title":"FlashLoanLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":1636}]}},"object":"612b8761003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80632e7263ea14610045578063a1fe0e8d14610067575b600080fd5b81801561005157600080fd5b506100656100603660046122ee565b610087565b005b81801561007357600080fd5b5061006561008236600461248b565b61097c565b61009a8582602001518360400151610be8565b6101066040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160008152602001600081525090565b81602001515167ffffffffffffffff81111561012457610124612036565b60405190808252806020026020018201604052801561014d578160200160208202803683370190505b506080820152815173ffffffffffffffffffffffffffffffffffffffff1681526101a0820151610187578161010001518260e0015161018b565b6000805b60c083015260a0820152600060208201525b8160200151518160200151101561034f5781604001518160200151815181106101c8576101c8612555565b60209081029190910101516060820152600082606001518260200151815181106101f4576101f4612555565b6020026020010151600281111561020d5761020d612584565b600281111561021e5761021e612584565b1461022a57600061023d565b60a0810151606082015161023d91610cd9565b816080015182602001518151811061025757610257612555565b602002602001018181525050856000836020015183602001518151811061028057610280612555565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000206004908101548551606086015193517f4efecaa5000000000000000000000000000000000000000000000000000000008152908516928101929092526024820192909252911690634efecaa590604401600060405180830381600087803b15801561031f57600080fd5b505af1158015610333573d6000803e3d6000fd5b5050506020820180519150610347826125e2565b90525061019d565b806000015173ffffffffffffffffffffffffffffffffffffffff1663920f5c84836020015184604001518460800151338760a001516040518663ffffffff1660e01b81526004016103a49594939291906126c1565b6020604051808303816000875af11580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e79190612775565b6040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152509061045e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b60405180910390fd5b50600060208201525b8160200151518160200151101561097457816020015181602001518151811061049257610492612555565b6020026020010151816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081604001518160200151815181106104eb576104eb612555565b602090810291909101015160608201526000826060015182602001518151811061051757610517612555565b6020026020010151600281111561053057610530612584565b600281111561054157610541612584565b141561062857610623866000836040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808460600151815260200184608001518560200151815181106105bb576105bb612555565b602002602001015181526020018460c001518152602001846040015173ffffffffffffffffffffffffffffffffffffffff168152602001856000015173ffffffffffffffffffffffffffffffffffffffff1681526020018560c0015161ffff16815250610d1c565b61095c565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f987878787604051806101800160405280886040015173ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001896080015173ffffffffffffffffffffffffffffffffffffffff1681526020018860600151815260200189606001518960200151815181106106d2576106d2612555565b602002602001015160028111156106eb576106eb612584565b60028111156106fc576106fc612584565b81526020018960c0015161ffff1681526020016000151581526020018961012001518152602001896101400151815260200189610160015173ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a291906127a5565b73ffffffffffffffffffffffffffffffffffffffff16815260200189610180015160ff16815260200189610160015173ffffffffffffffffffffffffffffffffffffffff16635eb88d3d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f91906127a5565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b81526004016108789594939291906127fd565b60006040518083038186803b15801561089057600080fd5b505af41580156108a4573d6000803e3d6000fd5b505050508160c0015161ffff16816040015173ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff167fefefaba5e921573100900a3ad9cf29f222d995fb3b6045797eaea7521bd8d6f0338560600151876060015187602001518151811061092857610928612555565b6020026020010151600281111561094157610941612584565b60006040516109539493929190612925565b60405180910390a45b6020810180519061096c826125e2565b905250610467565b505050505050565b61098582611030565b805160c0820151604083015160009161099e9190610cd9565b600480860154855160408088015190517f4efecaa500000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff90921693634efecaa593610a1f93910173ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050506020830151604080850151606086015191517f1b11d0ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861693631b11d0ff93610ab693919287913391600401612965565b6020604051808303816000875af1158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190612775565b6040518060400160405280600281526020017f313300000000000000000000000000000000000000000000000000000000000081525090610b67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b50610be2846040518060c00160405280866040015181526020018481526020018660a001518152602001866020015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015161ffff16815250610d1c565b50505050565b80518251146040518060400160405280600281526020017f343900000000000000000000000000000000000000000000000000000000000081525090610c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5060005b8251811015610be257610cc7846000858481518110610c8057610c80612555565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611030565b80610cd1816125e2565b915050610c5f565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610d0e57600080fd5b506127109102611388010490565b6000610d3982604001518360200151610cd990919063ffffffff16565b90506000818360200151610d4d91906129b5565b9050600083602001518460000151610d6591906129cc565b90506000610d72866111ba565b9050610d7e86826113d3565b6101008101516008870154610e2f91610da9916fffffffffffffffffffffffffffffffff169061145e565b826101e0015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1d91906129e4565b610e2791906129cc565b8790856114b5565b6101008201819052610e4b90610e46908690611565565b6115a4565b600887018054600090610e719084906fffffffffffffffffffffffffffffffff166129fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550610ec58186606001518460008a61164a90949392919063ffffffff16565b60808501516101e08201516060870151610ef89273ffffffffffffffffffffffffffffffffffffffff909116918561198b565b6101e081015160808601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052602482015260448101859052911690636fd9767690606401600060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505050508460a0015161ffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866080015173ffffffffffffffffffffffffffffffffffffffff167fefefaba5e921573100900a3ad9cf29f222d995fb3b6045797eaea7521bd8d6f03389600001516000600281111561100b5761100b612584565b8b602001516040516110209493929190612925565b60405180910390a4505050505050565b60408051602081019091528154808252671000000000000000161515156040518060400160405280600281526020017f3239000000000000000000000000000000000000000000000000000000000000815250906110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5080516701000000000000001615156040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090611138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5080516780000000000000001615156040518060400160405280600281526020017f3931000000000000000000000000000000000000000000000000000000000000815250906111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b505050565b6111c2611f89565b6111ca611f89565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa1580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131b91906129e4565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190612a31565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415611402575050565b61140c8282611a6d565b6114168282611b8e565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761149357600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6001830154600090819061150d906fffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce80000006114fd6114ee88611d0d565b6114f788611d0d565b90611565565b61150791906129cc565b9061145e565b9050611518816115a4565b6001860180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905590505b9392505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561158957600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610455565b5090565b6116756040518060800160405280600081526020016000815260200160008152602001600081525090565b61014085015160208601516116899161145e565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916117ea9190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182b9190612a7c565b60408401526020830152808252611841906115a4565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611884906115a4565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516118d5906115a4565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16119f6573d6000803e3d6000fd5b50611a0085611d28565b611a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401610455565b5050505050565b61016081015115611afd576000611a8e826101600151836102400151611df4565b9050611aa78260e001518261145e90919063ffffffff16565b6101008301819052611ab8906115a4565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611b8a576000611b1a826101800151836102400151611e39565b9050611b348261012001518261145e90919063ffffffff16565b6101408301819052611b45906115a4565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b611bc76040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a0820151611bd657505050565b6101208201518251611be79161145e565b60208201526101408201518251611bfd9161145e565b60408201526060820151610260830151610240840151611c2592919064ffffffffff16611e42565b606082018190526040830151611c3a9161145e565b808252602082015160808401516040840151611c5691906129cc565b611c6091906129b5565b611c6a91906129b5565b608082018190526101a0830151611c819190610cd9565b60a08201819052156111b557611cac610e468361010001518360a0015161156590919063ffffffff16565b600884018054600090611cd29084906fffffffffffffffffffffffffffffffff166129fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050565b633b9aca008181029081048214611d2357600080fd5b919050565b6000611d68565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611da75760208114611de157611da27f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611d2f565b611dee565b823b611dd857611dd87f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611d2f565b60019150611dee565b3d6000803e600051151591505b50919050565b600080611e0864ffffffffff8416426129b5565b611e129085612aaa565b6301e1338090049050611e31816b033b2e3c9fd0803ce80000006129cc565b949350505050565b600061155e8383425b600080611e5664ffffffffff8516846129b5565b905080611e72576b033b2e3c9fd0803ce800000091505061155e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611ea8576000611ead565b600285035b925066038882915c4000611ec18a8061145e565b81611ece57611ece612ae7565b0491506301e13380611ee0838b61145e565b81611eed57611eed612ae7565b049050600082611efd8688612aaa565b611f079190612aaa565b60029004905060008285611f1b888a612aaa565b611f259190612aaa565b611f2f9190612aaa565b60069004905080826301e13380611f468a8f612aaa565b611f509190612b16565b611f66906b033b2e3c9fd0803ce80000006129cc565b611f7091906129cc565b611f7a91906129cc565b9b9a5050505050505050505050565b604051806102800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161200d6040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101c0810167ffffffffffffffff8111828210171561208957612089612036565b60405290565b60405160e0810167ffffffffffffffff8111828210171561208957612089612036565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156120f9576120f9612036565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461212357600080fd5b50565b8035611d2381612101565b600067ffffffffffffffff82111561214b5761214b612036565b5060051b60200190565b600082601f83011261216657600080fd5b8135602061217b61217683612131565b6120b2565b82815260059290921b8401810191818101908684111561219a57600080fd5b8286015b848110156121be5780356121b181612101565b835291830191830161219e565b509695505050505050565b600082601f8301126121da57600080fd5b813560206121ea61217683612131565b82815260059290921b8401810191818101908684111561220957600080fd5b8286015b848110156121be578035835291830191830161220d565b600082601f83011261223557600080fd5b813567ffffffffffffffff81111561224f5761224f612036565b61228060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016120b2565b81815284602083860101111561229557600080fd5b816020850160208301376000918101602001919091529392505050565b803561ffff81168114611d2357600080fd5b803560ff81168114611d2357600080fd5b801515811461212357600080fd5b8035611d23816122d5565b600080600080600060a0868803121561230657600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff8082111561233a57600080fd5b908701906101c0828a03121561234f57600080fd5b612357612065565b61236083612126565b815260208301358281111561237457600080fd5b6123808b828601612155565b60208301525060408301358281111561239857600080fd5b6123a48b8286016121c9565b6040830152506060830135828111156123bc57600080fd5b6123c88b8286016121c9565b6060830152506123da60808401612126565b608082015260a0830135828111156123f157600080fd5b6123fd8b828601612224565b60a08301525061240f60c084016122b2565b60c082015260e08381013590820152610100808401359082015261012080840135908201526101408084013590820152610160915061244f828401612126565b8282015261018091506124638284016122c4565b828201526101a091506124778284016122e3565b828201528093505050509295509295909350565b6000806040838503121561249e57600080fd5b82359150602083013567ffffffffffffffff808211156124bd57600080fd5b9084019060e082870312156124d157600080fd5b6124d961208f565b6124e283612126565b81526124f060208401612126565b60208201526040830135604082015260608301358281111561251157600080fd5b61251d88828601612224565b60608301525061252f608084016122b2565b608082015260a083013560a082015260c083013560c08201528093505050509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612614576126146125b3565b5060010190565b600081518084526020808501945080840160005b8381101561264b5781518752958201959082019060010161262f565b509495945050505050565b6000815180845260005b8181101561267c57602081850181015186830182015201612660565b8181111561268e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561271057815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016126de565b50505083810382850152612724818961261b565b9150508281036040840152612739818761261b565b905073ffffffffffffffffffffffffffffffffffffffff8516606084015282810360808401526127698185612656565b98975050505050505050565b60006020828403121561278757600080fd5b815161155e816122d5565b60208152600061155e6020830184612656565b6000602082840312156127b757600080fd5b815161155e81612101565b600381106127f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e08301526080830151610100612899818501836127c2565b60a085015191506101206128b28186018461ffff169052565b60c086015192506101406128c98187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e085015290506121be565b73ffffffffffffffffffffffffffffffffffffffff85168152602081018490526080810161295660408301856127c2565b82606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835286602084015285604084015280851660608401525060a060808301526129aa60a0830184612656565b979650505050505050565b6000828210156129c7576129c76125b3565b500390565b600082198211156129df576129df6125b3565b500190565b6000602082840312156129f657600080fd5b5051919050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a2857612a286125b3565b01949350505050565b60008060008060808587031215612a4757600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114612a7157600080fd5b939692955090935050565b600080600060608486031215612a9157600080fd5b8351925060208401519150604084015190509250925092565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ae257612ae26125b3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612b4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220114b3e84e7f6d93d65fd9f68c597d16555867d36e9d3e0154e656d89caa7d35564736f6c634300080a0033","opcodes":"PUSH2 0x2B87 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2E7263EA EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0xA1FE0E8D EQ PUSH2 0x67 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x60 CALLDATASIZE PUSH1 0x4 PUSH2 0x22EE JUMP JUMPDEST PUSH2 0x87 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x82 CALLDATASIZE PUSH1 0x4 PUSH2 0x248B JUMP JUMPDEST PUSH2 0x97C JUMP JUMPDEST PUSH2 0x9A DUP6 DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0xBE8 JUMP JUMPDEST PUSH2 0x106 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x124 JUMPI PUSH2 0x124 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x14D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x80 DUP3 ADD MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x187 JUMPI DUP2 PUSH2 0x100 ADD MLOAD DUP3 PUSH1 0xE0 ADD MLOAD PUSH2 0x18B JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x34F JUMPI DUP2 PUSH1 0x40 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x1C8 JUMPI PUSH2 0x1C8 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x1F4 JUMPI PUSH2 0x1F4 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x20D JUMPI PUSH2 0x20D PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21E JUMPI PUSH2 0x21E PUSH2 0x2584 JUMP JUMPDEST EQ PUSH2 0x22A JUMPI PUSH1 0x0 PUSH2 0x23D JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x23D SWAP2 PUSH2 0xCD9 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x257 JUMPI PUSH2 0x257 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x280 JUMPI PUSH2 0x280 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 KECCAK256 PUSH1 0x4 SWAP1 DUP2 ADD SLOAD DUP6 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP4 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP6 AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 AND SWAP1 PUSH4 0x4EFECAA5 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x333 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 DUP3 ADD DUP1 MLOAD SWAP2 POP PUSH2 0x347 DUP3 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x19D JUMP JUMPDEST DUP1 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x920F5C84 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD DUP5 PUSH1 0x80 ADD MLOAD CALLER DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A4 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x26C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E7 SWAP2 SWAP1 PUSH2 0x2775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x45E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x974 JUMPI DUP2 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x492 JUMPI PUSH2 0x492 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x40 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 PUSH1 0x40 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x4EB JUMPI PUSH2 0x4EB PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x517 JUMPI PUSH2 0x517 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x530 JUMPI PUSH2 0x530 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x541 JUMPI PUSH2 0x541 PUSH2 0x2584 JUMP JUMPDEST EQ ISZERO PUSH2 0x628 JUMPI PUSH2 0x623 DUP7 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x80 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x5BB JUMPI PUSH2 0x5BB PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH2 0xD1C JUMP JUMPDEST PUSH2 0x95C JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x60 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x6D2 JUMPI PUSH2 0x6D2 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x6EB JUMPI PUSH2 0x6EB PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x6FC JUMPI PUSH2 0x6FC PUSH2 0x2584 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x120 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x140 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x77E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7A2 SWAP2 SWAP1 PUSH2 0x27A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x180 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EB88D3D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x81B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x83F SWAP2 SWAP1 PUSH2 0x27A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x878 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x8A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xEFEFABA5E921573100900A3AD9CF29F222D995FB3B6045797EAEA7521BD8D6F0 CALLER DUP6 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x928 JUMPI PUSH2 0x928 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x941 JUMPI PUSH2 0x941 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x953 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST PUSH1 0x20 DUP2 ADD DUP1 MLOAD SWAP1 PUSH2 0x96C DUP3 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x467 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x985 DUP3 PUSH2 0x1030 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x0 SWAP2 PUSH2 0x99E SWAP2 SWAP1 PUSH2 0xCD9 JUMP JUMPDEST PUSH1 0x4 DUP1 DUP7 ADD SLOAD DUP6 MLOAD PUSH1 0x40 DUP1 DUP9 ADD MLOAD SWAP1 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 SWAP6 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP4 PUSH4 0x4EFECAA5 SWAP4 PUSH2 0xA1F SWAP4 SWAP2 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA4D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP2 MLOAD PUSH32 0x1B11D0FF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP4 PUSH4 0x1B11D0FF SWAP4 PUSH2 0xAB6 SWAP4 SWAP2 SWAP3 DUP8 SWAP2 CALLER SWAP2 PUSH1 0x4 ADD PUSH2 0x2965 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAD5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF9 SWAP2 SWAP1 PUSH2 0x2775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xB67 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP PUSH2 0xBE2 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x80 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH2 0xD1C JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3439000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xC5B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH2 0xCC7 DUP5 PUSH1 0x0 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xC80 JUMPI PUSH2 0xC80 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH2 0x1030 JUMP JUMPDEST DUP1 PUSH2 0xCD1 DUP2 PUSH2 0x25E2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC5F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xD0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD39 DUP3 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xCD9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xD4D SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0xD65 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD72 DUP7 PUSH2 0x11BA JUMP JUMPDEST SWAP1 POP PUSH2 0xD7E DUP7 DUP3 PUSH2 0x13D3 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH1 0x8 DUP8 ADD SLOAD PUSH2 0xE2F SWAP2 PUSH2 0xDA9 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x145E JUMP JUMPDEST DUP3 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE1D SWAP2 SWAP1 PUSH2 0x29E4 JUMP JUMPDEST PUSH2 0xE27 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST DUP8 SWAP1 DUP6 PUSH2 0x14B5 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xE4B SWAP1 PUSH2 0xE46 SWAP1 DUP7 SWAP1 PUSH2 0x1565 JUMP JUMPDEST PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x8 DUP8 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xE71 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29FD JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0xEC5 DUP2 DUP7 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x0 DUP11 PUSH2 0x164A SWAP1 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1E0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0xEF8 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 DUP6 PUSH2 0x198B JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF8E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP6 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xEFEFABA5E921573100900A3AD9CF29F222D995FB3B6045797EAEA7521BD8D6F0 CALLER DUP10 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x100B JUMPI PUSH2 0x100B PUSH2 0x2584 JUMP JUMPDEST DUP12 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x1020 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP2 SLOAD DUP1 DUP3 MSTORE PUSH8 0x1000000000000000 AND ISZERO ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP DUP1 MLOAD PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1138 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP DUP1 MLOAD PUSH8 0x8000000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3931000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x11C2 PUSH2 0x1F89 JUMP JUMPDEST PUSH2 0x11CA PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x131B SWAP2 SWAP1 PUSH2 0x29E4 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A0 SWAP2 SWAP1 PUSH2 0x2A31 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x1402 JUMPI POP POP JUMP JUMPDEST PUSH2 0x140C DUP3 DUP3 PUSH2 0x1A6D JUMP JUMPDEST PUSH2 0x1416 DUP3 DUP3 PUSH2 0x1B8E JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x150D SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x14FD PUSH2 0x14EE DUP9 PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x14F7 DUP9 PUSH2 0x1D0D JUMP JUMPDEST SWAP1 PUSH2 0x1565 JUMP JUMPDEST PUSH2 0x1507 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP1 PUSH2 0x145E JUMP JUMPDEST SWAP1 POP PUSH2 0x1518 DUP2 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1646 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x455 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1675 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1689 SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x17EA SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1807 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x182B SWAP2 SWAP1 PUSH2 0x2A7C JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1841 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x1884 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x18D5 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x19F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1A00 DUP6 PUSH2 0x1D28 JUMP JUMPDEST PUSH2 0x1A66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x455 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x1AFD JUMPI PUSH1 0x0 PUSH2 0x1A8E DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1DF4 JUMP JUMPDEST SWAP1 POP PUSH2 0x1AA7 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x145E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x1AB8 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1B8A JUMPI PUSH1 0x0 PUSH2 0x1B1A DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1E39 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B34 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x145E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x1B45 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1BC7 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x1BD6 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1BE7 SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1BFD SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x1C25 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1C3A SWAP2 PUSH2 0x145E JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x1C56 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1C60 SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST PUSH2 0x1C6A SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x1C81 SWAP2 SWAP1 PUSH2 0xCD9 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x11B5 JUMPI PUSH2 0x1CAC PUSH2 0xE46 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x1565 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1CD2 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29FD JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D68 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1DA7 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1DE1 JUMPI PUSH2 0x1DA2 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1D2F JUMP JUMPDEST PUSH2 0x1DEE JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1DD8 JUMPI PUSH2 0x1DD8 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1D2F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1DEE JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E08 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x29B5 JUMP JUMPDEST PUSH2 0x1E12 SWAP1 DUP6 PUSH2 0x2AAA JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1E31 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x29CC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x155E DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E56 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x29B5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1E72 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x155E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1EA8 JUMPI PUSH1 0x0 PUSH2 0x1EAD JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1EC1 DUP11 DUP1 PUSH2 0x145E JUMP JUMPDEST DUP2 PUSH2 0x1ECE JUMPI PUSH2 0x1ECE PUSH2 0x2AE7 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1EE0 DUP4 DUP12 PUSH2 0x145E JUMP JUMPDEST DUP2 PUSH2 0x1EED JUMPI PUSH2 0x1EED PUSH2 0x2AE7 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1EFD DUP7 DUP9 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F07 SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1F1B DUP9 DUP11 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F25 SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F2F SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1F46 DUP11 DUP16 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F50 SWAP2 SWAP1 PUSH2 0x2B16 JUMP JUMPDEST PUSH2 0x1F66 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1F70 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1F7A SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x200D PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2089 JUMPI PUSH2 0x2089 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2089 JUMPI PUSH2 0x2089 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20F9 JUMPI PUSH2 0x20F9 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x214B JUMPI PUSH2 0x214B PUSH2 0x2036 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x217B PUSH2 0x2176 DUP4 PUSH2 0x2131 JUMP JUMPDEST PUSH2 0x20B2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x219A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x21BE JUMPI DUP1 CALLDATALOAD PUSH2 0x21B1 DUP2 PUSH2 0x2101 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x219E JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x21DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x21EA PUSH2 0x2176 DUP4 PUSH2 0x2131 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x2209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x21BE JUMPI DUP1 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x220D JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x224F JUMPI PUSH2 0x224F PUSH2 0x2036 JUMP JUMPDEST PUSH2 0x2280 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x20B2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x2295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x233A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP8 ADD SWAP1 PUSH2 0x1C0 DUP3 DUP11 SUB SLT ISZERO PUSH2 0x234F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2357 PUSH2 0x2065 JUMP JUMPDEST PUSH2 0x2360 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2380 DUP12 DUP3 DUP7 ADD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2398 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23A4 DUP12 DUP3 DUP7 ADD PUSH2 0x21C9 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x23BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23C8 DUP12 DUP3 DUP7 ADD PUSH2 0x21C9 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH2 0x23DA PUSH1 0x80 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x23F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23FD DUP12 DUP3 DUP7 ADD PUSH2 0x2224 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH2 0x240F PUSH1 0xC0 DUP5 ADD PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 SWAP2 POP PUSH2 0x244F DUP3 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH2 0x180 SWAP2 POP PUSH2 0x2463 DUP3 DUP5 ADD PUSH2 0x22C4 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP2 POP PUSH2 0x2477 DUP3 DUP5 ADD PUSH2 0x22E3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x249E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x24BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP5 ADD SWAP1 PUSH1 0xE0 DUP3 DUP8 SUB SLT ISZERO PUSH2 0x24D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24D9 PUSH2 0x208F JUMP JUMPDEST PUSH2 0x24E2 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x24F0 PUSH1 0x20 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x251D DUP9 DUP3 DUP7 ADD PUSH2 0x2224 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH2 0x252F PUSH1 0x80 DUP5 ADD PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2614 JUMPI PUSH2 0x2614 PUSH2 0x25B3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x264B JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x262F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x267C JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2660 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x268E JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xA0 DUP1 DUP3 MSTORE DUP7 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0xC0 DUP5 ADD SWAP1 DUP3 DUP11 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2710 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x26DE JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x2724 DUP2 DUP10 PUSH2 0x261B JUMP JUMPDEST SWAP2 POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x2739 DUP2 DUP8 PUSH2 0x261B JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2769 DUP2 DUP6 PUSH2 0x2656 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2787 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x155E DUP2 PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x155E PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2656 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x155E DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x27F9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x2899 DUP2 DUP6 ADD DUP4 PUSH2 0x27C2 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x28B2 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x28C9 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x21BE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x2956 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x27C2 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x29AA PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x2656 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x29C7 JUMPI PUSH2 0x29C7 PUSH2 0x25B3 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x29DF JUMPI PUSH2 0x29DF PUSH2 0x25B3 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x2A28 JUMPI PUSH2 0x2A28 PUSH2 0x25B3 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2A71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2AE2 JUMPI PUSH2 0x2AE2 PUSH2 0x25B3 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2B4C JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GT 0x4B RETURNDATACOPY DUP5 0xE7 0xF6 0xD9 RETURNDATASIZE PUSH6 0xFD9F68C597D1 PUSH6 0x55867D36E9D3 0xE0 ISZERO 0x4E PUSH6 0x6D89CAA7D355 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1270:9574:97:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1270:9574:97;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_accrueToTreasury_20746":{"entryPoint":7054,"id":20746,"parameterSlots":2,"returnSlots":0},"@_handleFlashLoanRepayment_17843":{"entryPoint":3356,"id":17843,"parameterSlots":2,"returnSlots":0},"@_updateIndexes_20827":{"entryPoint":6765,"id":20827,"parameterSlots":2,"returnSlots":0},"@cache_20970":{"entryPoint":4538,"id":20970,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_23673":{"entryPoint":7746,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":7737,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":7668,"id":23550,"parameterSlots":2,"returnSlots":1},"@cumulateToLiquidityIndex_20430":{"entryPoint":5301,"id":20430,"parameterSlots":3,"returnSlots":1},"@executeFlashLoanSimple_17703":{"entryPoint":2428,"id":17703,"parameterSlots":2,"returnSlots":0},"@executeFlashLoan_17623":{"entryPoint":135,"id":17623,"parameterSlots":5,"returnSlots":0},"@getActive_13160":{"entryPoint":null,"id":13160,"parameterSlots":1,"returnSlots":1},"@getFlashLoanEnabled_13874":{"entryPoint":null,"id":13874,"parameterSlots":1,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":7464,"id":117,"parameterSlots":1,"returnSlots":1},"@getPaused_13260":{"entryPoint":null,"id":13260,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_13512":{"entryPoint":null,"id":13512,"parameterSlots":1,"returnSlots":1},"@percentMul_23713":{"entryPoint":3289,"id":23713,"parameterSlots":2,"returnSlots":1},"@rayDiv_23792":{"entryPoint":5477,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":5214,"id":23780,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":6539,"id":106,"parameterSlots":4,"returnSlots":0},"@toUint128_1626":{"entryPoint":5540,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_20618":{"entryPoint":5706,"id":20618,"parameterSlots":5,"returnSlots":0},"@updateState_20387":{"entryPoint":5075,"id":20387,"parameterSlots":2,"returnSlots":0},"@validateFlashloanSimple_22911":{"entryPoint":4144,"id":22911,"parameterSlots":1,"returnSlots":0},"@validateFlashloan_22870":{"entryPoint":3048,"id":22870,"parameterSlots":3,"returnSlots":0},"@wadToRay_23812":{"entryPoint":7437,"id":23812,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":8486,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":8533,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":8649,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool":{"entryPoint":8931,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":8740,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10101,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_FlashloanParams_$24110_memory_ptr":{"entryPoint":8942,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_struct$_FlashloanSimpleParams_$24125_memory_ptr":{"entryPoint":9355,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":10724,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":10876,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":10801,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint16":{"entryPoint":8882,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":8900,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_uint256_dyn":{"entryPoint":9755,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":9814,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_InterestRateMode":{"entryPoint":10178,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_rational_0_by_1__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed":{"entryPoint":10533,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":10597,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":9921,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed":{"entryPoint":10237,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":10130,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":8370,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_2626":{"entryPoint":8293,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2628":{"entryPoint":8335,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":8497,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":10749,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":10700,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":11030,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":10922,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10677,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":9698,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":9651,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":10983,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":9604,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":9557,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8246,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":8449,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":8917,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:20727:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"66:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:124"},"nodeType":"YulFunctionCall","src":"56:88:124"},"nodeType":"YulExpressionStatement","src":"56:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"160:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"163:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"153:6:124"},"nodeType":"YulFunctionCall","src":"153:15:124"},"nodeType":"YulExpressionStatement","src":"153:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"184:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"187:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"177:6:124"},"nodeType":"YulFunctionCall","src":"177:15:124"},"nodeType":"YulExpressionStatement","src":"177:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:184:124"},{"body":{"nodeType":"YulBlock","src":"249:209:124","statements":[{"nodeType":"YulAssignment","src":"259:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"275:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"269:5:124"},"nodeType":"YulFunctionCall","src":"269:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"259:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"287:37:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"309:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"317:6:124","type":"","value":"0x01c0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"305:3:124"},"nodeType":"YulFunctionCall","src":"305:19:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"291:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"399:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"401:16:124"},"nodeType":"YulFunctionCall","src":"401:18:124"},"nodeType":"YulExpressionStatement","src":"401:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"342:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"354:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"339:2:124"},"nodeType":"YulFunctionCall","src":"339:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"378:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"390:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"375:2:124"},"nodeType":"YulFunctionCall","src":"375:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"336:2:124"},"nodeType":"YulFunctionCall","src":"336:62:124"},"nodeType":"YulIf","src":"333:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"437:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"441:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"430:6:124"},"nodeType":"YulFunctionCall","src":"430:22:124"},"nodeType":"YulExpressionStatement","src":"430:22:124"}]},"name":"allocate_memory_2626","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"238:6:124","type":""}],"src":"203:255:124"},{"body":{"nodeType":"YulBlock","src":"509:207:124","statements":[{"nodeType":"YulAssignment","src":"519:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"535:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"529:5:124"},"nodeType":"YulFunctionCall","src":"529:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"519:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"547:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"569:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"577:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"565:3:124"},"nodeType":"YulFunctionCall","src":"565:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"551:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"657:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"659:16:124"},"nodeType":"YulFunctionCall","src":"659:18:124"},"nodeType":"YulExpressionStatement","src":"659:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"600:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"612:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"597:2:124"},"nodeType":"YulFunctionCall","src":"597:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"636:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"648:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"633:2:124"},"nodeType":"YulFunctionCall","src":"633:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"594:2:124"},"nodeType":"YulFunctionCall","src":"594:62:124"},"nodeType":"YulIf","src":"591:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"695:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"699:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"688:6:124"},"nodeType":"YulFunctionCall","src":"688:22:124"},"nodeType":"YulExpressionStatement","src":"688:22:124"}]},"name":"allocate_memory_2628","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"498:6:124","type":""}],"src":"463:253:124"},{"body":{"nodeType":"YulBlock","src":"766:289:124","statements":[{"nodeType":"YulAssignment","src":"776:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"792:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"786:5:124"},"nodeType":"YulFunctionCall","src":"786:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"776:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"804:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"826:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"842:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"848:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"838:3:124"},"nodeType":"YulFunctionCall","src":"838:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"853:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"834:3:124"},"nodeType":"YulFunctionCall","src":"834:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"822:3:124"},"nodeType":"YulFunctionCall","src":"822:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"808:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"996:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"998:16:124"},"nodeType":"YulFunctionCall","src":"998:18:124"},"nodeType":"YulExpressionStatement","src":"998:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"939:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"951:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"936:2:124"},"nodeType":"YulFunctionCall","src":"936:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"975:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"987:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"972:2:124"},"nodeType":"YulFunctionCall","src":"972:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"933:2:124"},"nodeType":"YulFunctionCall","src":"933:62:124"},"nodeType":"YulIf","src":"930:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1034:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1038:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1027:6:124"},"nodeType":"YulFunctionCall","src":"1027:22:124"},"nodeType":"YulExpressionStatement","src":"1027:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"746:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"755:6:124","type":""}],"src":"721:334:124"},{"body":{"nodeType":"YulBlock","src":"1105:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"1192:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1201:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1204:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1194:6:124"},"nodeType":"YulFunctionCall","src":"1194:12:124"},"nodeType":"YulExpressionStatement","src":"1194:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1128:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1139:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1146:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1135:3:124"},"nodeType":"YulFunctionCall","src":"1135:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1125:2:124"},"nodeType":"YulFunctionCall","src":"1125:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1118:6:124"},"nodeType":"YulFunctionCall","src":"1118:73:124"},"nodeType":"YulIf","src":"1115:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1094:5:124","type":""}],"src":"1060:154:124"},{"body":{"nodeType":"YulBlock","src":"1268:85:124","statements":[{"nodeType":"YulAssignment","src":"1278:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1300:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1287:12:124"},"nodeType":"YulFunctionCall","src":"1287:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1278:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1341:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1316:24:124"},"nodeType":"YulFunctionCall","src":"1316:31:124"},"nodeType":"YulExpressionStatement","src":"1316:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1247:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1258:5:124","type":""}],"src":"1219:134:124"},{"body":{"nodeType":"YulBlock","src":"1427:114:124","statements":[{"body":{"nodeType":"YulBlock","src":"1471:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1473:16:124"},"nodeType":"YulFunctionCall","src":"1473:18:124"},"nodeType":"YulExpressionStatement","src":"1473:18:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1443:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1451:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1440:2:124"},"nodeType":"YulFunctionCall","src":"1440:30:124"},"nodeType":"YulIf","src":"1437:56:124"},{"nodeType":"YulAssignment","src":"1502:33:124","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1518:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1521:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1514:3:124"},"nodeType":"YulFunctionCall","src":"1514:14:124"},{"kind":"number","nodeType":"YulLiteral","src":"1530:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1510:3:124"},"nodeType":"YulFunctionCall","src":"1510:25:124"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1502:4:124"}]}]},"name":"array_allocation_size_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"1407:6:124","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"1418:4:124","type":""}],"src":"1358:183:124"},{"body":{"nodeType":"YulBlock","src":"1610:673:124","statements":[{"body":{"nodeType":"YulBlock","src":"1659:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1668:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1671:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1661:6:124"},"nodeType":"YulFunctionCall","src":"1661:12:124"},"nodeType":"YulExpressionStatement","src":"1661:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1638:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1646:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1634:3:124"},"nodeType":"YulFunctionCall","src":"1634:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"1653:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1630:3:124"},"nodeType":"YulFunctionCall","src":"1630:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1623:6:124"},"nodeType":"YulFunctionCall","src":"1623:35:124"},"nodeType":"YulIf","src":"1620:55:124"},{"nodeType":"YulVariableDeclaration","src":"1684:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1707:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1694:12:124"},"nodeType":"YulFunctionCall","src":"1694:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1688:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1723:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1733:4:124","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1727:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1746:71:124","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1813:2:124"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nodeType":"YulIdentifier","src":"1773:39:124"},"nodeType":"YulFunctionCall","src":"1773:43:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1757:15:124"},"nodeType":"YulFunctionCall","src":"1757:60:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1750:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1826:16:124","value":{"name":"dst","nodeType":"YulIdentifier","src":"1839:3:124"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"1830:5:124","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1858:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1863:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1851:6:124"},"nodeType":"YulFunctionCall","src":"1851:15:124"},"nodeType":"YulExpressionStatement","src":"1851:15:124"},{"nodeType":"YulAssignment","src":"1875:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1886:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1891:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1882:3:124"},"nodeType":"YulFunctionCall","src":"1882:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1875:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"1903:46:124","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1925:6:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1937:1:124","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"1940:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1933:3:124"},"nodeType":"YulFunctionCall","src":"1933:10:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1921:3:124"},"nodeType":"YulFunctionCall","src":"1921:23:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1946:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1917:3:124"},"nodeType":"YulFunctionCall","src":"1917:32:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1907:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1977:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1986:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1989:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1979:6:124"},"nodeType":"YulFunctionCall","src":"1979:12:124"},"nodeType":"YulExpressionStatement","src":"1979:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"1964:6:124"},{"name":"end","nodeType":"YulIdentifier","src":"1972:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1961:2:124"},"nodeType":"YulFunctionCall","src":"1961:15:124"},"nodeType":"YulIf","src":"1958:35:124"},{"nodeType":"YulVariableDeclaration","src":"2002:26:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2017:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2025:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2013:3:124"},"nodeType":"YulFunctionCall","src":"2013:15:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2006:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2093:161:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2107:30:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2133:3:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2120:12:124"},"nodeType":"YulFunctionCall","src":"2120:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2111:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2175:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2150:24:124"},"nodeType":"YulFunctionCall","src":"2150:31:124"},"nodeType":"YulExpressionStatement","src":"2150:31:124"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2201:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"2206:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2194:6:124"},"nodeType":"YulFunctionCall","src":"2194:18:124"},"nodeType":"YulExpressionStatement","src":"2194:18:124"},{"nodeType":"YulAssignment","src":"2225:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2236:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2241:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2232:3:124"},"nodeType":"YulFunctionCall","src":"2232:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2225:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2048:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2053:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2045:2:124"},"nodeType":"YulFunctionCall","src":"2045:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2061:23:124","statements":[{"nodeType":"YulAssignment","src":"2063:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2074:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2079:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2070:3:124"},"nodeType":"YulFunctionCall","src":"2070:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2063:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2041:3:124","statements":[]},"src":"2037:217:124"},{"nodeType":"YulAssignment","src":"2263:14:124","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2272:5:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2263:5:124"}]}]},"name":"abi_decode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1584:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"1592:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1600:5:124","type":""}],"src":"1546:737:124"},{"body":{"nodeType":"YulBlock","src":"2352:598:124","statements":[{"body":{"nodeType":"YulBlock","src":"2401:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2410:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2413:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2403:6:124"},"nodeType":"YulFunctionCall","src":"2403:12:124"},"nodeType":"YulExpressionStatement","src":"2403:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2380:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2388:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2376:3:124"},"nodeType":"YulFunctionCall","src":"2376:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"2395:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2372:3:124"},"nodeType":"YulFunctionCall","src":"2372:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2365:6:124"},"nodeType":"YulFunctionCall","src":"2365:35:124"},"nodeType":"YulIf","src":"2362:55:124"},{"nodeType":"YulVariableDeclaration","src":"2426:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2449:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2436:12:124"},"nodeType":"YulFunctionCall","src":"2436:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2430:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2465:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2475:4:124","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2469:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2488:71:124","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2555:2:124"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nodeType":"YulIdentifier","src":"2515:39:124"},"nodeType":"YulFunctionCall","src":"2515:43:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2499:15:124"},"nodeType":"YulFunctionCall","src":"2499:60:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"2492:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2568:16:124","value":{"name":"dst","nodeType":"YulIdentifier","src":"2581:3:124"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"2572:5:124","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2600:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"2605:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2593:6:124"},"nodeType":"YulFunctionCall","src":"2593:15:124"},"nodeType":"YulExpressionStatement","src":"2593:15:124"},{"nodeType":"YulAssignment","src":"2617:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2628:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2633:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2624:3:124"},"nodeType":"YulFunctionCall","src":"2624:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2617:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"2645:46:124","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2667:6:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2679:1:124","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"2682:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2675:3:124"},"nodeType":"YulFunctionCall","src":"2675:10:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2663:3:124"},"nodeType":"YulFunctionCall","src":"2663:23:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2688:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2659:3:124"},"nodeType":"YulFunctionCall","src":"2659:32:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"2649:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2719:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2728:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2731:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2721:6:124"},"nodeType":"YulFunctionCall","src":"2721:12:124"},"nodeType":"YulExpressionStatement","src":"2721:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2706:6:124"},{"name":"end","nodeType":"YulIdentifier","src":"2714:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2703:2:124"},"nodeType":"YulFunctionCall","src":"2703:15:124"},"nodeType":"YulIf","src":"2700:35:124"},{"nodeType":"YulVariableDeclaration","src":"2744:26:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2759:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2767:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2755:3:124"},"nodeType":"YulFunctionCall","src":"2755:15:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2748:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2835:86:124","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2856:3:124"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2874:3:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2861:12:124"},"nodeType":"YulFunctionCall","src":"2861:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2849:6:124"},"nodeType":"YulFunctionCall","src":"2849:30:124"},"nodeType":"YulExpressionStatement","src":"2849:30:124"},{"nodeType":"YulAssignment","src":"2892:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2903:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2908:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2899:3:124"},"nodeType":"YulFunctionCall","src":"2899:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2892:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2790:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2795:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2787:2:124"},"nodeType":"YulFunctionCall","src":"2787:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2803:23:124","statements":[{"nodeType":"YulAssignment","src":"2805:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2816:3:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2821:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2812:3:124"},"nodeType":"YulFunctionCall","src":"2812:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2805:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"2783:3:124","statements":[]},"src":"2779:142:124"},{"nodeType":"YulAssignment","src":"2930:14:124","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2939:5:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2930:5:124"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2326:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2334:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2342:5:124","type":""}],"src":"2288:662:124"},{"body":{"nodeType":"YulBlock","src":"3007:537:124","statements":[{"body":{"nodeType":"YulBlock","src":"3056:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3065:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3068:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3058:6:124"},"nodeType":"YulFunctionCall","src":"3058:12:124"},"nodeType":"YulExpressionStatement","src":"3058:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3035:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3043:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3031:3:124"},"nodeType":"YulFunctionCall","src":"3031:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"3050:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3027:3:124"},"nodeType":"YulFunctionCall","src":"3027:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3020:6:124"},"nodeType":"YulFunctionCall","src":"3020:35:124"},"nodeType":"YulIf","src":"3017:55:124"},{"nodeType":"YulVariableDeclaration","src":"3081:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3104:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3091:12:124"},"nodeType":"YulFunctionCall","src":"3091:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3085:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3150:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3152:16:124"},"nodeType":"YulFunctionCall","src":"3152:18:124"},"nodeType":"YulExpressionStatement","src":"3152:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3126:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3130:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3123:2:124"},"nodeType":"YulFunctionCall","src":"3123:26:124"},"nodeType":"YulIf","src":"3120:52:124"},{"nodeType":"YulVariableDeclaration","src":"3181:129:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3224:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3228:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3220:3:124"},"nodeType":"YulFunctionCall","src":"3220:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"3235:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3216:3:124"},"nodeType":"YulFunctionCall","src":"3216:86:124"},{"kind":"number","nodeType":"YulLiteral","src":"3304:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3212:3:124"},"nodeType":"YulFunctionCall","src":"3212:97:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3196:15:124"},"nodeType":"YulFunctionCall","src":"3196:114:124"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"3185:7:124","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3326:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3335:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3319:6:124"},"nodeType":"YulFunctionCall","src":"3319:19:124"},"nodeType":"YulExpressionStatement","src":"3319:19:124"},{"body":{"nodeType":"YulBlock","src":"3386:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3395:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3398:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3388:6:124"},"nodeType":"YulFunctionCall","src":"3388:12:124"},"nodeType":"YulExpressionStatement","src":"3388:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3361:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3369:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3357:3:124"},"nodeType":"YulFunctionCall","src":"3357:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"3374:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3353:3:124"},"nodeType":"YulFunctionCall","src":"3353:26:124"},{"name":"end","nodeType":"YulIdentifier","src":"3381:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3350:2:124"},"nodeType":"YulFunctionCall","src":"3350:35:124"},"nodeType":"YulIf","src":"3347:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3428:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"3437:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3424:3:124"},"nodeType":"YulFunctionCall","src":"3424:18:124"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3448:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3456:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3444:3:124"},"nodeType":"YulFunctionCall","src":"3444:17:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3463:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3411:12:124"},"nodeType":"YulFunctionCall","src":"3411:55:124"},"nodeType":"YulExpressionStatement","src":"3411:55:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3490:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3499:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3486:3:124"},"nodeType":"YulFunctionCall","src":"3486:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"3504:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3482:3:124"},"nodeType":"YulFunctionCall","src":"3482:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"3511:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3475:6:124"},"nodeType":"YulFunctionCall","src":"3475:38:124"},"nodeType":"YulExpressionStatement","src":"3475:38:124"},{"nodeType":"YulAssignment","src":"3522:16:124","value":{"name":"array_1","nodeType":"YulIdentifier","src":"3531:7:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3522:5:124"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2981:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2989:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2997:5:124","type":""}],"src":"2955:589:124"},{"body":{"nodeType":"YulBlock","src":"3597:111:124","statements":[{"nodeType":"YulAssignment","src":"3607:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3629:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3616:12:124"},"nodeType":"YulFunctionCall","src":"3616:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3607:5:124"}]},{"body":{"nodeType":"YulBlock","src":"3686:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3695:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3698:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3688:6:124"},"nodeType":"YulFunctionCall","src":"3688:12:124"},"nodeType":"YulExpressionStatement","src":"3688:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3658:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3669:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3676:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3665:3:124"},"nodeType":"YulFunctionCall","src":"3665:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3655:2:124"},"nodeType":"YulFunctionCall","src":"3655:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3648:6:124"},"nodeType":"YulFunctionCall","src":"3648:37:124"},"nodeType":"YulIf","src":"3645:57:124"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3576:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3587:5:124","type":""}],"src":"3549:159:124"},{"body":{"nodeType":"YulBlock","src":"3760:109:124","statements":[{"nodeType":"YulAssignment","src":"3770:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3792:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3779:12:124"},"nodeType":"YulFunctionCall","src":"3779:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3770:5:124"}]},{"body":{"nodeType":"YulBlock","src":"3847:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3856:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3859:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3849:6:124"},"nodeType":"YulFunctionCall","src":"3849:12:124"},"nodeType":"YulExpressionStatement","src":"3849:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3821:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3832:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3839:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3828:3:124"},"nodeType":"YulFunctionCall","src":"3828:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3818:2:124"},"nodeType":"YulFunctionCall","src":"3818:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3811:6:124"},"nodeType":"YulFunctionCall","src":"3811:35:124"},"nodeType":"YulIf","src":"3808:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3739:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3750:5:124","type":""}],"src":"3713:156:124"},{"body":{"nodeType":"YulBlock","src":"3916:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"3970:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3979:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3982:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3972:6:124"},"nodeType":"YulFunctionCall","src":"3972:12:124"},"nodeType":"YulExpressionStatement","src":"3972:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3939:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3960:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3953:6:124"},"nodeType":"YulFunctionCall","src":"3953:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3946:6:124"},"nodeType":"YulFunctionCall","src":"3946:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3936:2:124"},"nodeType":"YulFunctionCall","src":"3936:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3929:6:124"},"nodeType":"YulFunctionCall","src":"3929:40:124"},"nodeType":"YulIf","src":"3926:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3905:5:124","type":""}],"src":"3874:118:124"},{"body":{"nodeType":"YulBlock","src":"4043:82:124","statements":[{"nodeType":"YulAssignment","src":"4053:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4075:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4062:12:124"},"nodeType":"YulFunctionCall","src":"4062:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4053:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4113:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"4091:21:124"},"nodeType":"YulFunctionCall","src":"4091:28:124"},"nodeType":"YulExpressionStatement","src":"4091:28:124"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4022:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4033:5:124","type":""}],"src":"3997:128:124"},{"body":{"nodeType":"YulBlock","src":"4471:2023:124","statements":[{"body":{"nodeType":"YulBlock","src":"4518:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4527:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4530:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4520:6:124"},"nodeType":"YulFunctionCall","src":"4520:12:124"},"nodeType":"YulExpressionStatement","src":"4520:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4492:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4501:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4488:3:124"},"nodeType":"YulFunctionCall","src":"4488:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4513:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4484:3:124"},"nodeType":"YulFunctionCall","src":"4484:33:124"},"nodeType":"YulIf","src":"4481:53:124"},{"nodeType":"YulAssignment","src":"4543:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4566:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4553:12:124"},"nodeType":"YulFunctionCall","src":"4553:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4543:6:124"}]},{"nodeType":"YulAssignment","src":"4585:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4612:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4623:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4608:3:124"},"nodeType":"YulFunctionCall","src":"4608:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4595:12:124"},"nodeType":"YulFunctionCall","src":"4595:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4585:6:124"}]},{"nodeType":"YulAssignment","src":"4636:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4663:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4674:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4659:3:124"},"nodeType":"YulFunctionCall","src":"4659:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4646:12:124"},"nodeType":"YulFunctionCall","src":"4646:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4636:6:124"}]},{"nodeType":"YulAssignment","src":"4687:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4714:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4725:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4710:3:124"},"nodeType":"YulFunctionCall","src":"4710:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4697:12:124"},"nodeType":"YulFunctionCall","src":"4697:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4687:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4738:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4769:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4780:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4765:3:124"},"nodeType":"YulFunctionCall","src":"4765:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4752:12:124"},"nodeType":"YulFunctionCall","src":"4752:33:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4742:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4794:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4804:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4798:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4849:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4858:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4861:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4851:6:124"},"nodeType":"YulFunctionCall","src":"4851:12:124"},"nodeType":"YulExpressionStatement","src":"4851:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4837:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4845:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4834:2:124"},"nodeType":"YulFunctionCall","src":"4834:14:124"},"nodeType":"YulIf","src":"4831:34:124"},{"nodeType":"YulVariableDeclaration","src":"4874:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4888:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"4899:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4884:3:124"},"nodeType":"YulFunctionCall","src":"4884:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4878:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4948:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4957:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4960:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4950:6:124"},"nodeType":"YulFunctionCall","src":"4950:12:124"},"nodeType":"YulExpressionStatement","src":"4950:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4926:7:124"},{"name":"_2","nodeType":"YulIdentifier","src":"4935:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4922:3:124"},"nodeType":"YulFunctionCall","src":"4922:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"4940:6:124","type":"","value":"0x01c0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4918:3:124"},"nodeType":"YulFunctionCall","src":"4918:29:124"},"nodeType":"YulIf","src":"4915:49:124"},{"nodeType":"YulVariableDeclaration","src":"4973:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_2626","nodeType":"YulIdentifier","src":"4986:20:124"},"nodeType":"YulFunctionCall","src":"4986:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4977:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5024:5:124"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5050:2:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5031:18:124"},"nodeType":"YulFunctionCall","src":"5031:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5017:6:124"},"nodeType":"YulFunctionCall","src":"5017:37:124"},"nodeType":"YulExpressionStatement","src":"5017:37:124"},{"nodeType":"YulVariableDeclaration","src":"5063:41:124","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5096:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5100:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5092:3:124"},"nodeType":"YulFunctionCall","src":"5092:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5079:12:124"},"nodeType":"YulFunctionCall","src":"5079:25:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"5067:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5133:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5142:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5145:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5135:6:124"},"nodeType":"YulFunctionCall","src":"5135:12:124"},"nodeType":"YulExpressionStatement","src":"5135:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"5119:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5129:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5116:2:124"},"nodeType":"YulFunctionCall","src":"5116:16:124"},"nodeType":"YulIf","src":"5113:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5169:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5176:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5165:3:124"},"nodeType":"YulFunctionCall","src":"5165:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5214:2:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"5218:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5210:3:124"},"nodeType":"YulFunctionCall","src":"5210:17:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5229:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn","nodeType":"YulIdentifier","src":"5181:28:124"},"nodeType":"YulFunctionCall","src":"5181:56:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5158:6:124"},"nodeType":"YulFunctionCall","src":"5158:80:124"},"nodeType":"YulExpressionStatement","src":"5158:80:124"},{"nodeType":"YulVariableDeclaration","src":"5247:41:124","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5280:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5284:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5276:3:124"},"nodeType":"YulFunctionCall","src":"5276:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5263:12:124"},"nodeType":"YulFunctionCall","src":"5263:25:124"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"5251:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5317:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5326:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5329:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5319:6:124"},"nodeType":"YulFunctionCall","src":"5319:12:124"},"nodeType":"YulExpressionStatement","src":"5319:12:124"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"5303:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5313:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5300:2:124"},"nodeType":"YulFunctionCall","src":"5300:16:124"},"nodeType":"YulIf","src":"5297:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5353:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5360:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5349:3:124"},"nodeType":"YulFunctionCall","src":"5349:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5398:2:124"},{"name":"offset_2","nodeType":"YulIdentifier","src":"5402:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5394:3:124"},"nodeType":"YulFunctionCall","src":"5394:17:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5413:7:124"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"5365:28:124"},"nodeType":"YulFunctionCall","src":"5365:56:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5342:6:124"},"nodeType":"YulFunctionCall","src":"5342:80:124"},"nodeType":"YulExpressionStatement","src":"5342:80:124"},{"nodeType":"YulVariableDeclaration","src":"5431:41:124","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5464:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5468:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5460:3:124"},"nodeType":"YulFunctionCall","src":"5460:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5447:12:124"},"nodeType":"YulFunctionCall","src":"5447:25:124"},"variables":[{"name":"offset_3","nodeType":"YulTypedName","src":"5435:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5501:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5510:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5513:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5503:6:124"},"nodeType":"YulFunctionCall","src":"5503:12:124"},"nodeType":"YulExpressionStatement","src":"5503:12:124"}]},"condition":{"arguments":[{"name":"offset_3","nodeType":"YulIdentifier","src":"5487:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5497:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5484:2:124"},"nodeType":"YulFunctionCall","src":"5484:16:124"},"nodeType":"YulIf","src":"5481:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5537:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5544:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5533:3:124"},"nodeType":"YulFunctionCall","src":"5533:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5582:2:124"},{"name":"offset_3","nodeType":"YulIdentifier","src":"5586:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5578:3:124"},"nodeType":"YulFunctionCall","src":"5578:17:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5597:7:124"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"5549:28:124"},"nodeType":"YulFunctionCall","src":"5549:56:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5526:6:124"},"nodeType":"YulFunctionCall","src":"5526:80:124"},"nodeType":"YulExpressionStatement","src":"5526:80:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5626:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5633:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5622:3:124"},"nodeType":"YulFunctionCall","src":"5622:15:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5662:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5666:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5658:3:124"},"nodeType":"YulFunctionCall","src":"5658:12:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5639:18:124"},"nodeType":"YulFunctionCall","src":"5639:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5615:6:124"},"nodeType":"YulFunctionCall","src":"5615:57:124"},"nodeType":"YulExpressionStatement","src":"5615:57:124"},{"nodeType":"YulVariableDeclaration","src":"5681:42:124","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5714:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5718:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5710:3:124"},"nodeType":"YulFunctionCall","src":"5710:12:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5697:12:124"},"nodeType":"YulFunctionCall","src":"5697:26:124"},"variables":[{"name":"offset_4","nodeType":"YulTypedName","src":"5685:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5752:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5761:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5764:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5754:6:124"},"nodeType":"YulFunctionCall","src":"5754:12:124"},"nodeType":"YulExpressionStatement","src":"5754:12:124"}]},"condition":{"arguments":[{"name":"offset_4","nodeType":"YulIdentifier","src":"5738:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5748:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5735:2:124"},"nodeType":"YulFunctionCall","src":"5735:16:124"},"nodeType":"YulIf","src":"5732:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5788:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5795:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5784:3:124"},"nodeType":"YulFunctionCall","src":"5784:15:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5822:2:124"},{"name":"offset_4","nodeType":"YulIdentifier","src":"5826:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5818:3:124"},"nodeType":"YulFunctionCall","src":"5818:17:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5837:7:124"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5801:16:124"},"nodeType":"YulFunctionCall","src":"5801:44:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5777:6:124"},"nodeType":"YulFunctionCall","src":"5777:69:124"},"nodeType":"YulExpressionStatement","src":"5777:69:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5866:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5873:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5862:3:124"},"nodeType":"YulFunctionCall","src":"5862:15:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5901:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5905:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5897:3:124"},"nodeType":"YulFunctionCall","src":"5897:12:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"5879:17:124"},"nodeType":"YulFunctionCall","src":"5879:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5855:6:124"},"nodeType":"YulFunctionCall","src":"5855:56:124"},"nodeType":"YulExpressionStatement","src":"5855:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5931:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5938:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5927:3:124"},"nodeType":"YulFunctionCall","src":"5927:15:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5961:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5965:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5957:3:124"},"nodeType":"YulFunctionCall","src":"5957:12:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5944:12:124"},"nodeType":"YulFunctionCall","src":"5944:26:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5920:6:124"},"nodeType":"YulFunctionCall","src":"5920:51:124"},"nodeType":"YulExpressionStatement","src":"5920:51:124"},{"nodeType":"YulVariableDeclaration","src":"5980:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5990:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5984:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6013:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6020:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6009:3:124"},"nodeType":"YulFunctionCall","src":"6009:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6042:2:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6046:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6038:3:124"},"nodeType":"YulFunctionCall","src":"6038:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6025:12:124"},"nodeType":"YulFunctionCall","src":"6025:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6002:6:124"},"nodeType":"YulFunctionCall","src":"6002:49:124"},"nodeType":"YulExpressionStatement","src":"6002:49:124"},{"nodeType":"YulVariableDeclaration","src":"6060:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6070:3:124","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6064:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6093:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6100:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6089:3:124"},"nodeType":"YulFunctionCall","src":"6089:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6122:2:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6126:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6118:3:124"},"nodeType":"YulFunctionCall","src":"6118:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6105:12:124"},"nodeType":"YulFunctionCall","src":"6105:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6082:6:124"},"nodeType":"YulFunctionCall","src":"6082:49:124"},"nodeType":"YulExpressionStatement","src":"6082:49:124"},{"nodeType":"YulVariableDeclaration","src":"6140:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6150:3:124","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6144:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6173:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6180:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6169:3:124"},"nodeType":"YulFunctionCall","src":"6169:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6202:2:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6206:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6198:3:124"},"nodeType":"YulFunctionCall","src":"6198:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6185:12:124"},"nodeType":"YulFunctionCall","src":"6185:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6162:6:124"},"nodeType":"YulFunctionCall","src":"6162:49:124"},"nodeType":"YulExpressionStatement","src":"6162:49:124"},{"nodeType":"YulVariableDeclaration","src":"6220:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6230:3:124","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6224:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6253:5:124"},{"name":"_6","nodeType":"YulIdentifier","src":"6260:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6249:3:124"},"nodeType":"YulFunctionCall","src":"6249:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6288:2:124"},{"name":"_6","nodeType":"YulIdentifier","src":"6292:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6284:3:124"},"nodeType":"YulFunctionCall","src":"6284:11:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6265:18:124"},"nodeType":"YulFunctionCall","src":"6265:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6242:6:124"},"nodeType":"YulFunctionCall","src":"6242:55:124"},"nodeType":"YulExpressionStatement","src":"6242:55:124"},{"nodeType":"YulVariableDeclaration","src":"6306:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6316:3:124","type":"","value":"384"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"6310:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6339:5:124"},{"name":"_7","nodeType":"YulIdentifier","src":"6346:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6335:3:124"},"nodeType":"YulFunctionCall","src":"6335:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6372:2:124"},{"name":"_7","nodeType":"YulIdentifier","src":"6376:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6368:3:124"},"nodeType":"YulFunctionCall","src":"6368:11:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"6351:16:124"},"nodeType":"YulFunctionCall","src":"6351:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6328:6:124"},"nodeType":"YulFunctionCall","src":"6328:53:124"},"nodeType":"YulExpressionStatement","src":"6328:53:124"},{"nodeType":"YulVariableDeclaration","src":"6390:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6400:3:124","type":"","value":"416"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"6394:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6423:5:124"},{"name":"_8","nodeType":"YulIdentifier","src":"6430:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6419:3:124"},"nodeType":"YulFunctionCall","src":"6419:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6455:2:124"},{"name":"_8","nodeType":"YulIdentifier","src":"6459:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6451:3:124"},"nodeType":"YulFunctionCall","src":"6451:11:124"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"6435:15:124"},"nodeType":"YulFunctionCall","src":"6435:28:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6412:6:124"},"nodeType":"YulFunctionCall","src":"6412:52:124"},"nodeType":"YulExpressionStatement","src":"6412:52:124"},{"nodeType":"YulAssignment","src":"6473:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6483:5:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"6473:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_FlashloanParams_$24110_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4405:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4416:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4428:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4436:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4444:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4452:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4460:6:124","type":""}],"src":"4130:2364:124"},{"body":{"nodeType":"YulBlock","src":"6657:935:124","statements":[{"body":{"nodeType":"YulBlock","src":"6703:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6712:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6715:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6705:6:124"},"nodeType":"YulFunctionCall","src":"6705:12:124"},"nodeType":"YulExpressionStatement","src":"6705:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6678:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6687:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6674:3:124"},"nodeType":"YulFunctionCall","src":"6674:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6699:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6670:3:124"},"nodeType":"YulFunctionCall","src":"6670:32:124"},"nodeType":"YulIf","src":"6667:52:124"},{"nodeType":"YulAssignment","src":"6728:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6751:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6738:12:124"},"nodeType":"YulFunctionCall","src":"6738:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6728:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6770:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6801:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6812:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6797:3:124"},"nodeType":"YulFunctionCall","src":"6797:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6784:12:124"},"nodeType":"YulFunctionCall","src":"6784:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6774:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6825:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6835:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6829:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6880:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6889:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6892:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6882:6:124"},"nodeType":"YulFunctionCall","src":"6882:12:124"},"nodeType":"YulExpressionStatement","src":"6882:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6868:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6876:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6865:2:124"},"nodeType":"YulFunctionCall","src":"6865:14:124"},"nodeType":"YulIf","src":"6862:34:124"},{"nodeType":"YulVariableDeclaration","src":"6905:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6919:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"6930:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6915:3:124"},"nodeType":"YulFunctionCall","src":"6915:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6909:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6977:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6986:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6989:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6979:6:124"},"nodeType":"YulFunctionCall","src":"6979:12:124"},"nodeType":"YulExpressionStatement","src":"6979:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6957:7:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6966:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6953:3:124"},"nodeType":"YulFunctionCall","src":"6953:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"6971:4:124","type":"","value":"0xe0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6949:3:124"},"nodeType":"YulFunctionCall","src":"6949:27:124"},"nodeType":"YulIf","src":"6946:47:124"},{"nodeType":"YulVariableDeclaration","src":"7002:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_2628","nodeType":"YulIdentifier","src":"7015:20:124"},"nodeType":"YulFunctionCall","src":"7015:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7006:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7053:5:124"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7079:2:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7060:18:124"},"nodeType":"YulFunctionCall","src":"7060:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7046:6:124"},"nodeType":"YulFunctionCall","src":"7046:37:124"},"nodeType":"YulExpressionStatement","src":"7046:37:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7103:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7110:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7099:3:124"},"nodeType":"YulFunctionCall","src":"7099:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7138:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"7142:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7134:3:124"},"nodeType":"YulFunctionCall","src":"7134:11:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7115:18:124"},"nodeType":"YulFunctionCall","src":"7115:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7092:6:124"},"nodeType":"YulFunctionCall","src":"7092:55:124"},"nodeType":"YulExpressionStatement","src":"7092:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7167:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7174:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:124"},"nodeType":"YulFunctionCall","src":"7163:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7196:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"7200:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7192:3:124"},"nodeType":"YulFunctionCall","src":"7192:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7179:12:124"},"nodeType":"YulFunctionCall","src":"7179:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7156:6:124"},"nodeType":"YulFunctionCall","src":"7156:49:124"},"nodeType":"YulExpressionStatement","src":"7156:49:124"},{"nodeType":"YulVariableDeclaration","src":"7214:41:124","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7247:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"7251:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7243:3:124"},"nodeType":"YulFunctionCall","src":"7243:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7230:12:124"},"nodeType":"YulFunctionCall","src":"7230:25:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"7218:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7284:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7293:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7296:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7286:6:124"},"nodeType":"YulFunctionCall","src":"7286:12:124"},"nodeType":"YulExpressionStatement","src":"7286:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"7270:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7280:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7267:2:124"},"nodeType":"YulFunctionCall","src":"7267:16:124"},"nodeType":"YulIf","src":"7264:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7320:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7327:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7316:3:124"},"nodeType":"YulFunctionCall","src":"7316:14:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7353:2:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"7357:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7349:3:124"},"nodeType":"YulFunctionCall","src":"7349:17:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7368:7:124"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"7332:16:124"},"nodeType":"YulFunctionCall","src":"7332:44:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7309:6:124"},"nodeType":"YulFunctionCall","src":"7309:68:124"},"nodeType":"YulExpressionStatement","src":"7309:68:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7397:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7404:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7393:3:124"},"nodeType":"YulFunctionCall","src":"7393:15:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7432:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"7436:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7428:3:124"},"nodeType":"YulFunctionCall","src":"7428:12:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"7410:17:124"},"nodeType":"YulFunctionCall","src":"7410:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7386:6:124"},"nodeType":"YulFunctionCall","src":"7386:56:124"},"nodeType":"YulExpressionStatement","src":"7386:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7462:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7469:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7458:3:124"},"nodeType":"YulFunctionCall","src":"7458:15:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7492:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"7496:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7488:3:124"},"nodeType":"YulFunctionCall","src":"7488:12:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7475:12:124"},"nodeType":"YulFunctionCall","src":"7475:26:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7451:6:124"},"nodeType":"YulFunctionCall","src":"7451:51:124"},"nodeType":"YulExpressionStatement","src":"7451:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7522:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7529:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7518:3:124"},"nodeType":"YulFunctionCall","src":"7518:15:124"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7552:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"7556:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7548:3:124"},"nodeType":"YulFunctionCall","src":"7548:12:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7535:12:124"},"nodeType":"YulFunctionCall","src":"7535:26:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7511:6:124"},"nodeType":"YulFunctionCall","src":"7511:51:124"},"nodeType":"YulExpressionStatement","src":"7511:51:124"},{"nodeType":"YulAssignment","src":"7571:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7581:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7571:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_struct$_FlashloanSimpleParams_$24125_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6615:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6626:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6638:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6646:6:124","type":""}],"src":"6499:1093:124"},{"body":{"nodeType":"YulBlock","src":"7629:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7646:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7649:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7639:6:124"},"nodeType":"YulFunctionCall","src":"7639:88:124"},"nodeType":"YulExpressionStatement","src":"7639:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7743:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7746:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7736:6:124"},"nodeType":"YulFunctionCall","src":"7736:15:124"},"nodeType":"YulExpressionStatement","src":"7736:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7767:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7770:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7760:6:124"},"nodeType":"YulFunctionCall","src":"7760:15:124"},"nodeType":"YulExpressionStatement","src":"7760:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"7597:184:124"},{"body":{"nodeType":"YulBlock","src":"7818:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7835:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7838:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7828:6:124"},"nodeType":"YulFunctionCall","src":"7828:88:124"},"nodeType":"YulExpressionStatement","src":"7828:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7932:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7935:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7925:6:124"},"nodeType":"YulFunctionCall","src":"7925:15:124"},"nodeType":"YulExpressionStatement","src":"7925:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7956:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7959:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7949:6:124"},"nodeType":"YulFunctionCall","src":"7949:15:124"},"nodeType":"YulExpressionStatement","src":"7949:15:124"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"7786:184:124"},{"body":{"nodeType":"YulBlock","src":"8019:83:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8036:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8045:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8052:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8041:3:124"},"nodeType":"YulFunctionCall","src":"8041:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8029:6:124"},"nodeType":"YulFunctionCall","src":"8029:67:124"},"nodeType":"YulExpressionStatement","src":"8029:67:124"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8003:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8010:3:124","type":""}],"src":"7975:127:124"},{"body":{"nodeType":"YulBlock","src":"8236:168:124","statements":[{"nodeType":"YulAssignment","src":"8246:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8258:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8269:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8254:3:124"},"nodeType":"YulFunctionCall","src":"8254:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8246:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8288:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8303:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8311:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8299:3:124"},"nodeType":"YulFunctionCall","src":"8299:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8281:6:124"},"nodeType":"YulFunctionCall","src":"8281:74:124"},"nodeType":"YulExpressionStatement","src":"8281:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8375:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8386:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8371:3:124"},"nodeType":"YulFunctionCall","src":"8371:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"8391:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8364:6:124"},"nodeType":"YulFunctionCall","src":"8364:34:124"},"nodeType":"YulExpressionStatement","src":"8364:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8197:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8208:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8216:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8227:4:124","type":""}],"src":"8107:297:124"},{"body":{"nodeType":"YulBlock","src":"8441:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8458:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8461:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8451:6:124"},"nodeType":"YulFunctionCall","src":"8451:88:124"},"nodeType":"YulExpressionStatement","src":"8451:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8555:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8558:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8548:6:124"},"nodeType":"YulFunctionCall","src":"8548:15:124"},"nodeType":"YulExpressionStatement","src":"8548:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8579:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8582:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8572:6:124"},"nodeType":"YulFunctionCall","src":"8572:15:124"},"nodeType":"YulExpressionStatement","src":"8572:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"8409:184:124"},{"body":{"nodeType":"YulBlock","src":"8645:148:124","statements":[{"body":{"nodeType":"YulBlock","src":"8736:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8738:16:124"},"nodeType":"YulFunctionCall","src":"8738:18:124"},"nodeType":"YulExpressionStatement","src":"8738:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8661:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8668:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8658:2:124"},"nodeType":"YulFunctionCall","src":"8658:77:124"},"nodeType":"YulIf","src":"8655:103:124"},{"nodeType":"YulAssignment","src":"8767:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8778:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8785:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8774:3:124"},"nodeType":"YulFunctionCall","src":"8774:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8767:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8627:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8637:3:124","type":""}],"src":"8598:195:124"},{"body":{"nodeType":"YulBlock","src":"8859:374:124","statements":[{"nodeType":"YulVariableDeclaration","src":"8869:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8889:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8883:5:124"},"nodeType":"YulFunctionCall","src":"8883:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"8873:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8911:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"8916:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8904:6:124"},"nodeType":"YulFunctionCall","src":"8904:19:124"},"nodeType":"YulExpressionStatement","src":"8904:19:124"},{"nodeType":"YulVariableDeclaration","src":"8932:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8942:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8936:2:124","type":""}]},{"nodeType":"YulAssignment","src":"8955:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8966:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8971:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8962:3:124"},"nodeType":"YulFunctionCall","src":"8962:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"8955:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"8983:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9001:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9008:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8997:3:124"},"nodeType":"YulFunctionCall","src":"8997:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"8987:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9020:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9029:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9024:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9088:120:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9109:3:124"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9120:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9114:5:124"},"nodeType":"YulFunctionCall","src":"9114:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9102:6:124"},"nodeType":"YulFunctionCall","src":"9102:26:124"},"nodeType":"YulExpressionStatement","src":"9102:26:124"},{"nodeType":"YulAssignment","src":"9141:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9152:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9157:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9148:3:124"},"nodeType":"YulFunctionCall","src":"9148:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"9141:3:124"}]},{"nodeType":"YulAssignment","src":"9173:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9187:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9195:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9183:3:124"},"nodeType":"YulFunctionCall","src":"9183:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9173:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9050:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"9053:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9047:2:124"},"nodeType":"YulFunctionCall","src":"9047:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9061:18:124","statements":[{"nodeType":"YulAssignment","src":"9063:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9072:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"9075:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9068:3:124"},"nodeType":"YulFunctionCall","src":"9068:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9063:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"9043:3:124","statements":[]},"src":"9039:169:124"},{"nodeType":"YulAssignment","src":"9217:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"9224:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9217:3:124"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8836:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8843:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8851:3:124","type":""}],"src":"8798:435:124"},{"body":{"nodeType":"YulBlock","src":"9287:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9297:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9317:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9311:5:124"},"nodeType":"YulFunctionCall","src":"9311:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9301:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9339:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9344:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9332:6:124"},"nodeType":"YulFunctionCall","src":"9332:19:124"},"nodeType":"YulExpressionStatement","src":"9332:19:124"},{"nodeType":"YulVariableDeclaration","src":"9360:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9369:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9364:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9431:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9445:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9455:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9449:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9487:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"9492:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9483:3:124"},"nodeType":"YulFunctionCall","src":"9483:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9496:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9479:3:124"},"nodeType":"YulFunctionCall","src":"9479:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9515:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"9522:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9511:3:124"},"nodeType":"YulFunctionCall","src":"9511:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9526:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9507:3:124"},"nodeType":"YulFunctionCall","src":"9507:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9501:5:124"},"nodeType":"YulFunctionCall","src":"9501:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9472:6:124"},"nodeType":"YulFunctionCall","src":"9472:59:124"},"nodeType":"YulExpressionStatement","src":"9472:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9390:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"9393:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9387:2:124"},"nodeType":"YulFunctionCall","src":"9387:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9401:21:124","statements":[{"nodeType":"YulAssignment","src":"9403:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9412:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"9415:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9408:3:124"},"nodeType":"YulFunctionCall","src":"9408:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9403:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"9383:3:124","statements":[]},"src":"9379:162:124"},{"body":{"nodeType":"YulBlock","src":"9575:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9604:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9609:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9600:3:124"},"nodeType":"YulFunctionCall","src":"9600:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"9618:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9596:3:124"},"nodeType":"YulFunctionCall","src":"9596:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"9625:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9589:6:124"},"nodeType":"YulFunctionCall","src":"9589:38:124"},"nodeType":"YulExpressionStatement","src":"9589:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9556:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"9559:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9553:2:124"},"nodeType":"YulFunctionCall","src":"9553:13:124"},"nodeType":"YulIf","src":"9550:87:124"},{"nodeType":"YulAssignment","src":"9646:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9661:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9674:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9682:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9670:3:124"},"nodeType":"YulFunctionCall","src":"9670:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"9687:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9666:3:124"},"nodeType":"YulFunctionCall","src":"9666:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9657:3:124"},"nodeType":"YulFunctionCall","src":"9657:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"9757:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9653:3:124"},"nodeType":"YulFunctionCall","src":"9653:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9646:3:124"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9264:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9271:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9279:3:124","type":""}],"src":"9238:530:124"},{"body":{"nodeType":"YulBlock","src":"10154:962:124","statements":[{"nodeType":"YulVariableDeclaration","src":"10164:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10182:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10193:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10178:3:124"},"nodeType":"YulFunctionCall","src":"10178:19:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10213:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10224:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10206:6:124"},"nodeType":"YulFunctionCall","src":"10206:22:124"},"nodeType":"YulExpressionStatement","src":"10206:22:124"},{"nodeType":"YulVariableDeclaration","src":"10237:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"10248:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"10241:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10263:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10283:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10277:5:124"},"nodeType":"YulFunctionCall","src":"10277:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10267:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10306:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"10314:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10299:6:124"},"nodeType":"YulFunctionCall","src":"10299:22:124"},"nodeType":"YulExpressionStatement","src":"10299:22:124"},{"nodeType":"YulAssignment","src":"10330:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10341:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10352:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10337:3:124"},"nodeType":"YulFunctionCall","src":"10337:19:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10330:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"10365:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10375:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10369:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10388:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10406:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10414:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10402:3:124"},"nodeType":"YulFunctionCall","src":"10402:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"10392:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10426:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10435:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10430:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"10494:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10515:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10530:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10524:5:124"},"nodeType":"YulFunctionCall","src":"10524:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"10539:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10520:3:124"},"nodeType":"YulFunctionCall","src":"10520:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10508:6:124"},"nodeType":"YulFunctionCall","src":"10508:75:124"},"nodeType":"YulExpressionStatement","src":"10508:75:124"},{"nodeType":"YulAssignment","src":"10596:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10607:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10612:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10603:3:124"},"nodeType":"YulFunctionCall","src":"10603:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10596:3:124"}]},{"nodeType":"YulAssignment","src":"10628:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10642:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10650:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10638:3:124"},"nodeType":"YulFunctionCall","src":"10638:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10628:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10456:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"10459:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10453:2:124"},"nodeType":"YulFunctionCall","src":"10453:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10467:18:124","statements":[{"nodeType":"YulAssignment","src":"10469:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10478:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"10481:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10474:3:124"},"nodeType":"YulFunctionCall","src":"10474:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10469:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"10449:3:124","statements":[]},"src":"10445:218:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10683:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10694:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10679:3:124"},"nodeType":"YulFunctionCall","src":"10679:18:124"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10703:3:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10708:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10699:3:124"},"nodeType":"YulFunctionCall","src":"10699:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10672:6:124"},"nodeType":"YulFunctionCall","src":"10672:47:124"},"nodeType":"YulExpressionStatement","src":"10672:47:124"},{"nodeType":"YulVariableDeclaration","src":"10728:55:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10771:6:124"},{"name":"pos","nodeType":"YulIdentifier","src":"10779:3:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"10742:28:124"},"nodeType":"YulFunctionCall","src":"10742:41:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10732:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10803:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10814:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10799:3:124"},"nodeType":"YulFunctionCall","src":"10799:18:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10823:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10831:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10819:3:124"},"nodeType":"YulFunctionCall","src":"10819:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10792:6:124"},"nodeType":"YulFunctionCall","src":"10792:50:124"},"nodeType":"YulExpressionStatement","src":"10792:50:124"},{"nodeType":"YulVariableDeclaration","src":"10851:58:124","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10894:6:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10902:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"10865:28:124"},"nodeType":"YulFunctionCall","src":"10865:44:124"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"10855:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10929:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10940:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10925:3:124"},"nodeType":"YulFunctionCall","src":"10925:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10949:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10957:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10945:3:124"},"nodeType":"YulFunctionCall","src":"10945:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10918:6:124"},"nodeType":"YulFunctionCall","src":"10918:83:124"},"nodeType":"YulExpressionStatement","src":"10918:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11021:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11032:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11017:3:124"},"nodeType":"YulFunctionCall","src":"11017:19:124"},{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"11042:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11050:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11038:3:124"},"nodeType":"YulFunctionCall","src":"11038:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11010:6:124"},"nodeType":"YulFunctionCall","src":"11010:51:124"},"nodeType":"YulExpressionStatement","src":"11010:51:124"},{"nodeType":"YulAssignment","src":"11070:40:124","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"11095:6:124"},{"name":"tail_3","nodeType":"YulIdentifier","src":"11103:6:124"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"11078:16:124"},"nodeType":"YulFunctionCall","src":"11078:32:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11070:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10091:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10102:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10110:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10118:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10126:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10134:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10145:4:124","type":""}],"src":"9773:1343:124"},{"body":{"nodeType":"YulBlock","src":"11199:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"11245:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11254:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11257:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11247:6:124"},"nodeType":"YulFunctionCall","src":"11247:12:124"},"nodeType":"YulExpressionStatement","src":"11247:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11220:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11229:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11216:3:124"},"nodeType":"YulFunctionCall","src":"11216:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11241:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11212:3:124"},"nodeType":"YulFunctionCall","src":"11212:32:124"},"nodeType":"YulIf","src":"11209:52:124"},{"nodeType":"YulVariableDeclaration","src":"11270:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11289:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11283:5:124"},"nodeType":"YulFunctionCall","src":"11283:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11274:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11330:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"11308:21:124"},"nodeType":"YulFunctionCall","src":"11308:28:124"},"nodeType":"YulExpressionStatement","src":"11308:28:124"},{"nodeType":"YulAssignment","src":"11345:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11355:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11345:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11165:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11176:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11188:6:124","type":""}],"src":"11121:245:124"},{"body":{"nodeType":"YulBlock","src":"11492:98:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11509:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11520:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11502:6:124"},"nodeType":"YulFunctionCall","src":"11502:21:124"},"nodeType":"YulExpressionStatement","src":"11502:21:124"},{"nodeType":"YulAssignment","src":"11532:52:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11557:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11569:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11580:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11565:3:124"},"nodeType":"YulFunctionCall","src":"11565:18:124"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"11540:16:124"},"nodeType":"YulFunctionCall","src":"11540:44:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11532:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11461:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11472:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11483:4:124","type":""}],"src":"11371:219:124"},{"body":{"nodeType":"YulBlock","src":"11676:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"11722:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11731:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11734:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11724:6:124"},"nodeType":"YulFunctionCall","src":"11724:12:124"},"nodeType":"YulExpressionStatement","src":"11724:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11697:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11706:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11693:3:124"},"nodeType":"YulFunctionCall","src":"11693:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11718:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11689:3:124"},"nodeType":"YulFunctionCall","src":"11689:32:124"},"nodeType":"YulIf","src":"11686:52:124"},{"nodeType":"YulVariableDeclaration","src":"11747:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11766:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11760:5:124"},"nodeType":"YulFunctionCall","src":"11760:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11751:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11810:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11785:24:124"},"nodeType":"YulFunctionCall","src":"11785:31:124"},"nodeType":"YulExpressionStatement","src":"11785:31:124"},{"nodeType":"YulAssignment","src":"11825:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11835:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11825:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11642:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11653:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11665:6:124","type":""}],"src":"11595:251:124"},{"body":{"nodeType":"YulBlock","src":"11909:243:124","statements":[{"body":{"nodeType":"YulBlock","src":"11951:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11972:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11975:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11965:6:124"},"nodeType":"YulFunctionCall","src":"11965:88:124"},"nodeType":"YulExpressionStatement","src":"11965:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12073:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12076:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12066:6:124"},"nodeType":"YulFunctionCall","src":"12066:15:124"},"nodeType":"YulExpressionStatement","src":"12066:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12101:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12104:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12094:6:124"},"nodeType":"YulFunctionCall","src":"12094:15:124"},"nodeType":"YulExpressionStatement","src":"12094:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11932:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"11939:1:124","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11929:2:124"},"nodeType":"YulFunctionCall","src":"11929:12:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11922:6:124"},"nodeType":"YulFunctionCall","src":"11922:20:124"},"nodeType":"YulIf","src":"11919:200:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12135:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"12140:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12128:6:124"},"nodeType":"YulFunctionCall","src":"12128:18:124"},"nodeType":"YulExpressionStatement","src":"12128:18:124"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11893:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"11900:3:124","type":""}],"src":"11851:301:124"},{"body":{"nodeType":"YulBlock","src":"12200:47:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12217:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12226:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"12233:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12222:3:124"},"nodeType":"YulFunctionCall","src":"12222:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12210:6:124"},"nodeType":"YulFunctionCall","src":"12210:31:124"},"nodeType":"YulExpressionStatement","src":"12210:31:124"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12184:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12191:3:124","type":""}],"src":"12157:90:124"},{"body":{"nodeType":"YulBlock","src":"12293:50:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12310:3:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12329:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12322:6:124"},"nodeType":"YulFunctionCall","src":"12322:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12315:6:124"},"nodeType":"YulFunctionCall","src":"12315:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12303:6:124"},"nodeType":"YulFunctionCall","src":"12303:34:124"},"nodeType":"YulExpressionStatement","src":"12303:34:124"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12277:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12284:3:124","type":""}],"src":"12252:91:124"},{"body":{"nodeType":"YulBlock","src":"12390:33:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12399:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12408:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"12415:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12404:3:124"},"nodeType":"YulFunctionCall","src":"12404:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12392:6:124"},"nodeType":"YulFunctionCall","src":"12392:29:124"},"nodeType":"YulExpressionStatement","src":"12392:29:124"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12374:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12381:3:124","type":""}],"src":"12348:75:124"},{"body":{"nodeType":"YulBlock","src":"12894:1498:124","statements":[{"nodeType":"YulAssignment","src":"12904:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12916:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12927:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12912:3:124"},"nodeType":"YulFunctionCall","src":"12912:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12904:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12947:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12958:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12940:6:124"},"nodeType":"YulFunctionCall","src":"12940:25:124"},"nodeType":"YulExpressionStatement","src":"12940:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12985:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12996:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12981:3:124"},"nodeType":"YulFunctionCall","src":"12981:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"13001:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12974:6:124"},"nodeType":"YulFunctionCall","src":"12974:34:124"},"nodeType":"YulExpressionStatement","src":"12974:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13028:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13039:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13024:3:124"},"nodeType":"YulFunctionCall","src":"13024:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"13044:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13017:6:124"},"nodeType":"YulFunctionCall","src":"13017:34:124"},"nodeType":"YulExpressionStatement","src":"13017:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13071:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13082:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13067:3:124"},"nodeType":"YulFunctionCall","src":"13067:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"13087:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13060:6:124"},"nodeType":"YulFunctionCall","src":"13060:34:124"},"nodeType":"YulExpressionStatement","src":"13060:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13128:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13122:5:124"},"nodeType":"YulFunctionCall","src":"13122:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13141:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13152:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13137:3:124"},"nodeType":"YulFunctionCall","src":"13137:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"13103:18:124"},"nodeType":"YulFunctionCall","src":"13103:54:124"},"nodeType":"YulExpressionStatement","src":"13103:54:124"},{"nodeType":"YulVariableDeclaration","src":"13166:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13196:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13204:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13192:3:124"},"nodeType":"YulFunctionCall","src":"13192:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13186:5:124"},"nodeType":"YulFunctionCall","src":"13186:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"13170:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"13236:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13254:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13265:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13250:3:124"},"nodeType":"YulFunctionCall","src":"13250:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"13217:18:124"},"nodeType":"YulFunctionCall","src":"13217:53:124"},"nodeType":"YulExpressionStatement","src":"13217:53:124"},{"nodeType":"YulVariableDeclaration","src":"13279:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13311:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13319:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13307:3:124"},"nodeType":"YulFunctionCall","src":"13307:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13301:5:124"},"nodeType":"YulFunctionCall","src":"13301:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"13283:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"13351:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13371:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13382:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13367:3:124"},"nodeType":"YulFunctionCall","src":"13367:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"13332:18:124"},"nodeType":"YulFunctionCall","src":"13332:55:124"},"nodeType":"YulExpressionStatement","src":"13332:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13407:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13418:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13403:3:124"},"nodeType":"YulFunctionCall","src":"13403:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13434:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13442:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13430:3:124"},"nodeType":"YulFunctionCall","src":"13430:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13424:5:124"},"nodeType":"YulFunctionCall","src":"13424:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13396:6:124"},"nodeType":"YulFunctionCall","src":"13396:51:124"},"nodeType":"YulExpressionStatement","src":"13396:51:124"},{"nodeType":"YulVariableDeclaration","src":"13456:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13488:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13496:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13484:3:124"},"nodeType":"YulFunctionCall","src":"13484:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13478:5:124"},"nodeType":"YulFunctionCall","src":"13478:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"13460:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13510:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13520:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13514:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"13565:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13585:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"13596:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13581:3:124"},"nodeType":"YulFunctionCall","src":"13581:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"13532:32:124"},"nodeType":"YulFunctionCall","src":"13532:68:124"},"nodeType":"YulExpressionStatement","src":"13532:68:124"},{"nodeType":"YulVariableDeclaration","src":"13609:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13641:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13649:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13637:3:124"},"nodeType":"YulFunctionCall","src":"13637:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13631:5:124"},"nodeType":"YulFunctionCall","src":"13631:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"13613:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13663:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13673:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13667:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"13703:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13723:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"13734:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13719:3:124"},"nodeType":"YulFunctionCall","src":"13719:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"13685:17:124"},"nodeType":"YulFunctionCall","src":"13685:53:124"},"nodeType":"YulExpressionStatement","src":"13685:53:124"},{"nodeType":"YulVariableDeclaration","src":"13747:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13779:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13787:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13775:3:124"},"nodeType":"YulFunctionCall","src":"13775:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13769:5:124"},"nodeType":"YulFunctionCall","src":"13769:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"13751:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13801:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13811:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"13805:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"13839:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13859:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"13870:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13855:3:124"},"nodeType":"YulFunctionCall","src":"13855:18:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"13823:15:124"},"nodeType":"YulFunctionCall","src":"13823:51:124"},"nodeType":"YulExpressionStatement","src":"13823:51:124"},{"nodeType":"YulVariableDeclaration","src":"13883:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13903:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13911:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13899:3:124"},"nodeType":"YulFunctionCall","src":"13899:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13893:5:124"},"nodeType":"YulFunctionCall","src":"13893:23:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"13887:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13925:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"13935:3:124","type":"","value":"352"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"13929:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13958:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"13969:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13954:3:124"},"nodeType":"YulFunctionCall","src":"13954:18:124"},{"name":"_4","nodeType":"YulIdentifier","src":"13974:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13947:6:124"},"nodeType":"YulFunctionCall","src":"13947:30:124"},"nodeType":"YulExpressionStatement","src":"13947:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13997:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14008:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13993:3:124"},"nodeType":"YulFunctionCall","src":"13993:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14024:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"14032:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14020:3:124"},"nodeType":"YulFunctionCall","src":"14020:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14014:5:124"},"nodeType":"YulFunctionCall","src":"14014:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13986:6:124"},"nodeType":"YulFunctionCall","src":"13986:51:124"},"nodeType":"YulExpressionStatement","src":"13986:51:124"},{"nodeType":"YulVariableDeclaration","src":"14046:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14078:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"14086:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14074:3:124"},"nodeType":"YulFunctionCall","src":"14074:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14068:5:124"},"nodeType":"YulFunctionCall","src":"14068:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"14050:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"14118:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14138:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14149:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14134:3:124"},"nodeType":"YulFunctionCall","src":"14134:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"14099:18:124"},"nodeType":"YulFunctionCall","src":"14099:55:124"},"nodeType":"YulExpressionStatement","src":"14099:55:124"},{"nodeType":"YulVariableDeclaration","src":"14163:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14195:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"14203:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14191:3:124"},"nodeType":"YulFunctionCall","src":"14191:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14185:5:124"},"nodeType":"YulFunctionCall","src":"14185:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"14167:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"14233:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14253:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14264:3:124","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14249:3:124"},"nodeType":"YulFunctionCall","src":"14249:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"14216:16:124"},"nodeType":"YulFunctionCall","src":"14216:53:124"},"nodeType":"YulExpressionStatement","src":"14216:53:124"},{"nodeType":"YulVariableDeclaration","src":"14278:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14310:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"14318:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14306:3:124"},"nodeType":"YulFunctionCall","src":"14306:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14300:5:124"},"nodeType":"YulFunctionCall","src":"14300:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"14282:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"14350:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14370:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14381:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14366:3:124"},"nodeType":"YulFunctionCall","src":"14366:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"14331:18:124"},"nodeType":"YulFunctionCall","src":"14331:55:124"},"nodeType":"YulExpressionStatement","src":"14331:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12831:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12842:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12850:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12858:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12866:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12874:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12885:4:124","type":""}],"src":"12428:1964:124"},{"body":{"nodeType":"YulBlock","src":"14610:281:124","statements":[{"nodeType":"YulAssignment","src":"14620:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14632:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14643:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14628:3:124"},"nodeType":"YulFunctionCall","src":"14628:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14620:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14663:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14678:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14686:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14674:3:124"},"nodeType":"YulFunctionCall","src":"14674:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14656:6:124"},"nodeType":"YulFunctionCall","src":"14656:74:124"},"nodeType":"YulExpressionStatement","src":"14656:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14750:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14761:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14746:3:124"},"nodeType":"YulFunctionCall","src":"14746:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14766:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14739:6:124"},"nodeType":"YulFunctionCall","src":"14739:34:124"},"nodeType":"YulExpressionStatement","src":"14739:34:124"},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"14815:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14827:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14838:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14823:3:124"},"nodeType":"YulFunctionCall","src":"14823:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"14782:32:124"},"nodeType":"YulFunctionCall","src":"14782:60:124"},"nodeType":"YulExpressionStatement","src":"14782:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14862:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14873:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14858:3:124"},"nodeType":"YulFunctionCall","src":"14858:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"14878:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14851:6:124"},"nodeType":"YulFunctionCall","src":"14851:34:124"},"nodeType":"YulExpressionStatement","src":"14851:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_rational_0_by_1__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14555:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14566:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14574:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14582:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14590:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14601:4:124","type":""}],"src":"14397:494:124"},{"body":{"nodeType":"YulBlock","src":"15127:352:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15137:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15147:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15141:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15205:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15220:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15228:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15216:3:124"},"nodeType":"YulFunctionCall","src":"15216:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15198:6:124"},"nodeType":"YulFunctionCall","src":"15198:34:124"},"nodeType":"YulExpressionStatement","src":"15198:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15252:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15263:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15248:3:124"},"nodeType":"YulFunctionCall","src":"15248:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"15268:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15241:6:124"},"nodeType":"YulFunctionCall","src":"15241:34:124"},"nodeType":"YulExpressionStatement","src":"15241:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15295:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15306:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15291:3:124"},"nodeType":"YulFunctionCall","src":"15291:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"15311:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15284:6:124"},"nodeType":"YulFunctionCall","src":"15284:34:124"},"nodeType":"YulExpressionStatement","src":"15284:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15338:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15349:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15334:3:124"},"nodeType":"YulFunctionCall","src":"15334:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"15358:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15366:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15354:3:124"},"nodeType":"YulFunctionCall","src":"15354:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15327:6:124"},"nodeType":"YulFunctionCall","src":"15327:43:124"},"nodeType":"YulExpressionStatement","src":"15327:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15390:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15401:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15386:3:124"},"nodeType":"YulFunctionCall","src":"15386:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"15407:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15379:6:124"},"nodeType":"YulFunctionCall","src":"15379:32:124"},"nodeType":"YulExpressionStatement","src":"15379:32:124"},{"nodeType":"YulAssignment","src":"15420:53:124","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"15445:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15457:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15468:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15453:3:124"},"nodeType":"YulFunctionCall","src":"15453:19:124"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"15428:16:124"},"nodeType":"YulFunctionCall","src":"15428:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15420:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15064:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15075:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15083:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15091:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15099:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15107:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15118:4:124","type":""}],"src":"14896:583:124"},{"body":{"nodeType":"YulBlock","src":"15533:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"15555:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15557:16:124"},"nodeType":"YulFunctionCall","src":"15557:18:124"},"nodeType":"YulExpressionStatement","src":"15557:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15549:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"15552:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15546:2:124"},"nodeType":"YulFunctionCall","src":"15546:8:124"},"nodeType":"YulIf","src":"15543:34:124"},{"nodeType":"YulAssignment","src":"15586:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15598:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"15601:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15594:3:124"},"nodeType":"YulFunctionCall","src":"15594:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15586:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15515:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15518:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15524:4:124","type":""}],"src":"15484:125:124"},{"body":{"nodeType":"YulBlock","src":"15662:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"15689:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15691:16:124"},"nodeType":"YulFunctionCall","src":"15691:18:124"},"nodeType":"YulExpressionStatement","src":"15691:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15678:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15685:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"15681:3:124"},"nodeType":"YulFunctionCall","src":"15681:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15675:2:124"},"nodeType":"YulFunctionCall","src":"15675:13:124"},"nodeType":"YulIf","src":"15672:39:124"},{"nodeType":"YulAssignment","src":"15720:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15731:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"15734:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15727:3:124"},"nodeType":"YulFunctionCall","src":"15727:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15720:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15645:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15648:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15654:3:124","type":""}],"src":"15614:128:124"},{"body":{"nodeType":"YulBlock","src":"15828:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"15874:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15883:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15886:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15876:6:124"},"nodeType":"YulFunctionCall","src":"15876:12:124"},"nodeType":"YulExpressionStatement","src":"15876:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15849:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"15858:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15845:3:124"},"nodeType":"YulFunctionCall","src":"15845:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"15870:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15841:3:124"},"nodeType":"YulFunctionCall","src":"15841:32:124"},"nodeType":"YulIf","src":"15838:52:124"},{"nodeType":"YulAssignment","src":"15899:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15915:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15909:5:124"},"nodeType":"YulFunctionCall","src":"15909:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15899:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15794:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15805:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15817:6:124","type":""}],"src":"15747:184:124"},{"body":{"nodeType":"YulBlock","src":"15984:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15994:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16004:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15998:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16047:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16062:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16065:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16058:3:124"},"nodeType":"YulFunctionCall","src":"16058:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"16051:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16077:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16092:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16095:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16088:3:124"},"nodeType":"YulFunctionCall","src":"16088:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16081:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16132:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16134:16:124"},"nodeType":"YulFunctionCall","src":"16134:18:124"},"nodeType":"YulExpressionStatement","src":"16134:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16113:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"16122:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16126:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16118:3:124"},"nodeType":"YulFunctionCall","src":"16118:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16110:2:124"},"nodeType":"YulFunctionCall","src":"16110:21:124"},"nodeType":"YulIf","src":"16107:47:124"},{"nodeType":"YulAssignment","src":"16163:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16174:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16179:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16170:3:124"},"nodeType":"YulFunctionCall","src":"16170:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"16163:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15967:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15970:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15976:3:124","type":""}],"src":"15936:253:124"},{"body":{"nodeType":"YulBlock","src":"16351:241:124","statements":[{"nodeType":"YulAssignment","src":"16361:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16373:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16384:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16369:3:124"},"nodeType":"YulFunctionCall","src":"16369:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16361:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"16396:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16406:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16400:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16464:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16479:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16487:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16475:3:124"},"nodeType":"YulFunctionCall","src":"16475:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16457:6:124"},"nodeType":"YulFunctionCall","src":"16457:34:124"},"nodeType":"YulExpressionStatement","src":"16457:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16511:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16522:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16507:3:124"},"nodeType":"YulFunctionCall","src":"16507:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"16531:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16539:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16527:3:124"},"nodeType":"YulFunctionCall","src":"16527:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16500:6:124"},"nodeType":"YulFunctionCall","src":"16500:43:124"},"nodeType":"YulExpressionStatement","src":"16500:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16563:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16574:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16559:3:124"},"nodeType":"YulFunctionCall","src":"16559:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"16579:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16552:6:124"},"nodeType":"YulFunctionCall","src":"16552:34:124"},"nodeType":"YulExpressionStatement","src":"16552:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16304:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16315:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16323:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16331:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16342:4:124","type":""}],"src":"16194:398:124"},{"body":{"nodeType":"YulBlock","src":"16802:281:124","statements":[{"nodeType":"YulAssignment","src":"16812:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16824:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16835:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16820:3:124"},"nodeType":"YulFunctionCall","src":"16820:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16812:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16855:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16870:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16878:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16866:3:124"},"nodeType":"YulFunctionCall","src":"16866:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16848:6:124"},"nodeType":"YulFunctionCall","src":"16848:74:124"},"nodeType":"YulExpressionStatement","src":"16848:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16942:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16953:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16938:3:124"},"nodeType":"YulFunctionCall","src":"16938:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"16958:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16931:6:124"},"nodeType":"YulFunctionCall","src":"16931:34:124"},"nodeType":"YulExpressionStatement","src":"16931:34:124"},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"17007:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17019:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17030:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17015:3:124"},"nodeType":"YulFunctionCall","src":"17015:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"16974:32:124"},"nodeType":"YulFunctionCall","src":"16974:60:124"},"nodeType":"YulExpressionStatement","src":"16974:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17054:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17065:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17050:3:124"},"nodeType":"YulFunctionCall","src":"17050:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"17070:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17043:6:124"},"nodeType":"YulFunctionCall","src":"17043:34:124"},"nodeType":"YulExpressionStatement","src":"17043:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16747:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16758:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16766:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16774:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16782:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16793:4:124","type":""}],"src":"16597:486:124"},{"body":{"nodeType":"YulBlock","src":"17219:335:124","statements":[{"body":{"nodeType":"YulBlock","src":"17266:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17275:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17278:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17268:6:124"},"nodeType":"YulFunctionCall","src":"17268:12:124"},"nodeType":"YulExpressionStatement","src":"17268:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17240:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"17249:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17236:3:124"},"nodeType":"YulFunctionCall","src":"17236:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"17261:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17232:3:124"},"nodeType":"YulFunctionCall","src":"17232:33:124"},"nodeType":"YulIf","src":"17229:53:124"},{"nodeType":"YulAssignment","src":"17291:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17307:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17301:5:124"},"nodeType":"YulFunctionCall","src":"17301:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17291:6:124"}]},{"nodeType":"YulAssignment","src":"17326:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17346:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17357:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17342:3:124"},"nodeType":"YulFunctionCall","src":"17342:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17336:5:124"},"nodeType":"YulFunctionCall","src":"17336:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"17326:6:124"}]},{"nodeType":"YulAssignment","src":"17370:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17390:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17401:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17386:3:124"},"nodeType":"YulFunctionCall","src":"17386:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17380:5:124"},"nodeType":"YulFunctionCall","src":"17380:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"17370:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"17414:38:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17437:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17448:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17433:3:124"},"nodeType":"YulFunctionCall","src":"17433:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17427:5:124"},"nodeType":"YulFunctionCall","src":"17427:25:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17418:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"17508:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17517:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17520:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17510:6:124"},"nodeType":"YulFunctionCall","src":"17510:12:124"},"nodeType":"YulExpressionStatement","src":"17510:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17474:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17485:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"17492:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17481:3:124"},"nodeType":"YulFunctionCall","src":"17481:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"17471:2:124"},"nodeType":"YulFunctionCall","src":"17471:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17464:6:124"},"nodeType":"YulFunctionCall","src":"17464:43:124"},"nodeType":"YulIf","src":"17461:63:124"},{"nodeType":"YulAssignment","src":"17533:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"17543:5:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"17533:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17161:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17172:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17184:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17192:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17200:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"17208:6:124","type":""}],"src":"17088:466:124"},{"body":{"nodeType":"YulBlock","src":"17733:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17750:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17761:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17743:6:124"},"nodeType":"YulFunctionCall","src":"17743:21:124"},"nodeType":"YulExpressionStatement","src":"17743:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17784:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17795:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17780:3:124"},"nodeType":"YulFunctionCall","src":"17780:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"17800:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17773:6:124"},"nodeType":"YulFunctionCall","src":"17773:30:124"},"nodeType":"YulExpressionStatement","src":"17773:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17823:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17834:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17819:3:124"},"nodeType":"YulFunctionCall","src":"17819:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"17839:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17812:6:124"},"nodeType":"YulFunctionCall","src":"17812:62:124"},"nodeType":"YulExpressionStatement","src":"17812:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17894:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17905:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17890:3:124"},"nodeType":"YulFunctionCall","src":"17890:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"17910:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17883:6:124"},"nodeType":"YulFunctionCall","src":"17883:37:124"},"nodeType":"YulExpressionStatement","src":"17883:37:124"},{"nodeType":"YulAssignment","src":"17929:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17941:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17952:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17937:3:124"},"nodeType":"YulFunctionCall","src":"17937:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17929:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17710:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17724:4:124","type":""}],"src":"17559:403:124"},{"body":{"nodeType":"YulBlock","src":"18162:729:124","statements":[{"nodeType":"YulAssignment","src":"18172:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18184:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18195:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18180:3:124"},"nodeType":"YulFunctionCall","src":"18180:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18172:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18215:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18232:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18226:5:124"},"nodeType":"YulFunctionCall","src":"18226:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18208:6:124"},"nodeType":"YulFunctionCall","src":"18208:32:124"},"nodeType":"YulExpressionStatement","src":"18208:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18260:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18271:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18256:3:124"},"nodeType":"YulFunctionCall","src":"18256:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18288:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"18296:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18284:3:124"},"nodeType":"YulFunctionCall","src":"18284:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18278:5:124"},"nodeType":"YulFunctionCall","src":"18278:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18249:6:124"},"nodeType":"YulFunctionCall","src":"18249:54:124"},"nodeType":"YulExpressionStatement","src":"18249:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18323:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18334:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18319:3:124"},"nodeType":"YulFunctionCall","src":"18319:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18351:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"18359:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18347:3:124"},"nodeType":"YulFunctionCall","src":"18347:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18341:5:124"},"nodeType":"YulFunctionCall","src":"18341:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18312:6:124"},"nodeType":"YulFunctionCall","src":"18312:54:124"},"nodeType":"YulExpressionStatement","src":"18312:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18386:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18397:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18382:3:124"},"nodeType":"YulFunctionCall","src":"18382:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18414:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"18422:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18410:3:124"},"nodeType":"YulFunctionCall","src":"18410:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18404:5:124"},"nodeType":"YulFunctionCall","src":"18404:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18375:6:124"},"nodeType":"YulFunctionCall","src":"18375:54:124"},"nodeType":"YulExpressionStatement","src":"18375:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18449:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18460:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18445:3:124"},"nodeType":"YulFunctionCall","src":"18445:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18477:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"18485:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18473:3:124"},"nodeType":"YulFunctionCall","src":"18473:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18467:5:124"},"nodeType":"YulFunctionCall","src":"18467:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18438:6:124"},"nodeType":"YulFunctionCall","src":"18438:54:124"},"nodeType":"YulExpressionStatement","src":"18438:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18512:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18523:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18508:3:124"},"nodeType":"YulFunctionCall","src":"18508:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18540:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"18548:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18536:3:124"},"nodeType":"YulFunctionCall","src":"18536:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18530:5:124"},"nodeType":"YulFunctionCall","src":"18530:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18501:6:124"},"nodeType":"YulFunctionCall","src":"18501:54:124"},"nodeType":"YulExpressionStatement","src":"18501:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18575:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18586:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18571:3:124"},"nodeType":"YulFunctionCall","src":"18571:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18603:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"18611:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18599:3:124"},"nodeType":"YulFunctionCall","src":"18599:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18593:5:124"},"nodeType":"YulFunctionCall","src":"18593:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18564:6:124"},"nodeType":"YulFunctionCall","src":"18564:54:124"},"nodeType":"YulExpressionStatement","src":"18564:54:124"},{"nodeType":"YulVariableDeclaration","src":"18627:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18657:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"18665:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18653:3:124"},"nodeType":"YulFunctionCall","src":"18653:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18647:5:124"},"nodeType":"YulFunctionCall","src":"18647:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"18631:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18680:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18690:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18684:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18752:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18763:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18748:3:124"},"nodeType":"YulFunctionCall","src":"18748:20:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"18774:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18788:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18770:3:124"},"nodeType":"YulFunctionCall","src":"18770:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18741:6:124"},"nodeType":"YulFunctionCall","src":"18741:51:124"},"nodeType":"YulExpressionStatement","src":"18741:51:124"},{"nodeType":"YulVariableDeclaration","src":"18801:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18811:6:124","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"18805:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18837:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"18848:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18833:3:124"},"nodeType":"YulFunctionCall","src":"18833:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18867:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"18875:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18863:3:124"},"nodeType":"YulFunctionCall","src":"18863:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18857:5:124"},"nodeType":"YulFunctionCall","src":"18857:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18881:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18853:3:124"},"nodeType":"YulFunctionCall","src":"18853:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18826:6:124"},"nodeType":"YulFunctionCall","src":"18826:59:124"},"nodeType":"YulExpressionStatement","src":"18826:59:124"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18131:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18142:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18153:4:124","type":""}],"src":"17967:924:124"},{"body":{"nodeType":"YulBlock","src":"19011:191:124","statements":[{"body":{"nodeType":"YulBlock","src":"19057:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19066:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19069:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19059:6:124"},"nodeType":"YulFunctionCall","src":"19059:12:124"},"nodeType":"YulExpressionStatement","src":"19059:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19032:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"19041:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19028:3:124"},"nodeType":"YulFunctionCall","src":"19028:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"19053:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19024:3:124"},"nodeType":"YulFunctionCall","src":"19024:32:124"},"nodeType":"YulIf","src":"19021:52:124"},{"nodeType":"YulAssignment","src":"19082:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19098:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19092:5:124"},"nodeType":"YulFunctionCall","src":"19092:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19082:6:124"}]},{"nodeType":"YulAssignment","src":"19117:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19137:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19148:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19133:3:124"},"nodeType":"YulFunctionCall","src":"19133:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19127:5:124"},"nodeType":"YulFunctionCall","src":"19127:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"19117:6:124"}]},{"nodeType":"YulAssignment","src":"19161:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19181:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19192:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19177:3:124"},"nodeType":"YulFunctionCall","src":"19177:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19171:5:124"},"nodeType":"YulFunctionCall","src":"19171:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"19161:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18961:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18972:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18984:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18992:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19000:6:124","type":""}],"src":"18896:306:124"},{"body":{"nodeType":"YulBlock","src":"19420:250:124","statements":[{"nodeType":"YulAssignment","src":"19430:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19442:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19453:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19438:3:124"},"nodeType":"YulFunctionCall","src":"19438:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19430:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19473:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"19484:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19466:6:124"},"nodeType":"YulFunctionCall","src":"19466:25:124"},"nodeType":"YulExpressionStatement","src":"19466:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19511:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19522:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19507:3:124"},"nodeType":"YulFunctionCall","src":"19507:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"19527:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19500:6:124"},"nodeType":"YulFunctionCall","src":"19500:34:124"},"nodeType":"YulExpressionStatement","src":"19500:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19554:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19565:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19550:3:124"},"nodeType":"YulFunctionCall","src":"19550:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"19570:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19543:6:124"},"nodeType":"YulFunctionCall","src":"19543:34:124"},"nodeType":"YulExpressionStatement","src":"19543:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19597:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19608:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19593:3:124"},"nodeType":"YulFunctionCall","src":"19593:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"19613:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19586:6:124"},"nodeType":"YulFunctionCall","src":"19586:34:124"},"nodeType":"YulExpressionStatement","src":"19586:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19651:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19636:3:124"},"nodeType":"YulFunctionCall","src":"19636:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"19657:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19629:6:124"},"nodeType":"YulFunctionCall","src":"19629:35:124"},"nodeType":"YulExpressionStatement","src":"19629:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19357:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"19368:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"19376:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19384:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19392:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19400:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19411:4:124","type":""}],"src":"19207:463:124"},{"body":{"nodeType":"YulBlock","src":"19849:175:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19866:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19877:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19859:6:124"},"nodeType":"YulFunctionCall","src":"19859:21:124"},"nodeType":"YulExpressionStatement","src":"19859:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19900:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19911:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19896:3:124"},"nodeType":"YulFunctionCall","src":"19896:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"19916:2:124","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19889:6:124"},"nodeType":"YulFunctionCall","src":"19889:30:124"},"nodeType":"YulExpressionStatement","src":"19889:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19939:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19950:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19935:3:124"},"nodeType":"YulFunctionCall","src":"19935:18:124"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"19955:27:124","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19928:6:124"},"nodeType":"YulFunctionCall","src":"19928:55:124"},"nodeType":"YulExpressionStatement","src":"19928:55:124"},{"nodeType":"YulAssignment","src":"19992:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20004:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"20015:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20000:3:124"},"nodeType":"YulFunctionCall","src":"20000:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19992:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19826:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19840:4:124","type":""}],"src":"19675:349:124"},{"body":{"nodeType":"YulBlock","src":"20081:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"20200:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"20202:16:124"},"nodeType":"YulFunctionCall","src":"20202:18:124"},"nodeType":"YulExpressionStatement","src":"20202:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20112:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20105:6:124"},"nodeType":"YulFunctionCall","src":"20105:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20098:6:124"},"nodeType":"YulFunctionCall","src":"20098:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"20120:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20127:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"20195:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"20123:3:124"},"nodeType":"YulFunctionCall","src":"20123:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20117:2:124"},"nodeType":"YulFunctionCall","src":"20117:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20094:3:124"},"nodeType":"YulFunctionCall","src":"20094:105:124"},"nodeType":"YulIf","src":"20091:131:124"},{"nodeType":"YulAssignment","src":"20231:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20246:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"20249:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"20242:3:124"},"nodeType":"YulFunctionCall","src":"20242:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"20231:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"20060:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"20063:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"20069:7:124","type":""}],"src":"20029:228:124"},{"body":{"nodeType":"YulBlock","src":"20294:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20311:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20314:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20304:6:124"},"nodeType":"YulFunctionCall","src":"20304:88:124"},"nodeType":"YulExpressionStatement","src":"20304:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20408:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"20411:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20401:6:124"},"nodeType":"YulFunctionCall","src":"20401:15:124"},"nodeType":"YulExpressionStatement","src":"20401:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20432:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20435:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20425:6:124"},"nodeType":"YulFunctionCall","src":"20425:15:124"},"nodeType":"YulExpressionStatement","src":"20425:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"20262:184:124"},{"body":{"nodeType":"YulBlock","src":"20497:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"20528:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20549:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20552:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20542:6:124"},"nodeType":"YulFunctionCall","src":"20542:88:124"},"nodeType":"YulExpressionStatement","src":"20542:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20650:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"20653:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20643:6:124"},"nodeType":"YulFunctionCall","src":"20643:15:124"},"nodeType":"YulExpressionStatement","src":"20643:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20678:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20681:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20671:6:124"},"nodeType":"YulFunctionCall","src":"20671:15:124"},"nodeType":"YulExpressionStatement","src":"20671:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"20517:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20510:6:124"},"nodeType":"YulFunctionCall","src":"20510:9:124"},"nodeType":"YulIf","src":"20507:189:124"},{"nodeType":"YulAssignment","src":"20705:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20714:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"20717:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"20710:3:124"},"nodeType":"YulFunctionCall","src":"20710:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"20705:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"20482:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"20485:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"20491:1:124","type":""}],"src":"20451:274:124"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_2626() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x01c0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_2628() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xe0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function array_allocation_size_array_address_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_array_address_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            let value := calldataload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_bool(value)\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_FlashloanParams_$24110_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0x01c0) { revert(0, 0) }\n        let value := allocate_memory_2626()\n        mstore(value, abi_decode_address(_2))\n        let offset_1 := calldataload(add(_2, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        mstore(add(value, 32), abi_decode_array_address_dyn(add(_2, offset_1), dataEnd))\n        let offset_2 := calldataload(add(_2, 64))\n        if gt(offset_2, _1) { revert(0, 0) }\n        mstore(add(value, 64), abi_decode_array_uint256_dyn(add(_2, offset_2), dataEnd))\n        let offset_3 := calldataload(add(_2, 96))\n        if gt(offset_3, _1) { revert(0, 0) }\n        mstore(add(value, 96), abi_decode_array_uint256_dyn(add(_2, offset_3), dataEnd))\n        mstore(add(value, 128), abi_decode_address(add(_2, 128)))\n        let offset_4 := calldataload(add(_2, 160))\n        if gt(offset_4, _1) { revert(0, 0) }\n        mstore(add(value, 160), abi_decode_bytes(add(_2, offset_4), dataEnd))\n        mstore(add(value, 192), abi_decode_uint16(add(_2, 192)))\n        mstore(add(value, 224), calldataload(add(_2, 224)))\n        let _3 := 256\n        mstore(add(value, _3), calldataload(add(_2, _3)))\n        let _4 := 288\n        mstore(add(value, _4), calldataload(add(_2, _4)))\n        let _5 := 320\n        mstore(add(value, _5), calldataload(add(_2, _5)))\n        let _6 := 352\n        mstore(add(value, _6), abi_decode_address(add(_2, _6)))\n        let _7 := 384\n        mstore(add(value, _7), abi_decode_uint8(add(_2, _7)))\n        let _8 := 416\n        mstore(add(value, _8), abi_decode_bool(add(_2, _8)))\n        value4 := value\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_storage_ptrt_struct$_FlashloanSimpleParams_$24125_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0xe0) { revert(0, 0) }\n        let value := allocate_memory_2628()\n        mstore(value, abi_decode_address(_2))\n        mstore(add(value, 32), abi_decode_address(add(_2, 32)))\n        mstore(add(value, 64), calldataload(add(_2, 64)))\n        let offset_1 := calldataload(add(_2, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        mstore(add(value, 96), abi_decode_bytes(add(_2, offset_1), dataEnd))\n        mstore(add(value, 128), abi_decode_uint16(add(_2, 128)))\n        mstore(add(value, 160), calldataload(add(_2, 160)))\n        mstore(add(value, 192), calldataload(add(_2, 192)))\n        value1 := value\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 160)\n        mstore(headStart, 160)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 192)\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        mstore(add(headStart, _1), sub(pos, headStart))\n        let tail_2 := abi_encode_array_uint256_dyn(value1, pos)\n        mstore(add(headStart, 64), sub(tail_2, headStart))\n        let tail_3 := abi_encode_array_uint256_dyn(value2, tail_2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 128), sub(tail_3, headStart))\n        tail := abi_encode_bytes(value4, tail_3)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_ptr_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 512)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        abi_encode_address(mload(value4), add(headStart, 128))\n        let memberValue0 := mload(add(value4, 32))\n        abi_encode_address(memberValue0, add(headStart, 160))\n        let memberValue0_1 := mload(add(value4, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let memberValue0_2 := mload(add(value4, 128))\n        let _1 := 256\n        abi_encode_enum_InterestRateMode(memberValue0_2, add(headStart, _1))\n        let memberValue0_3 := mload(add(value4, 160))\n        let _2 := 288\n        abi_encode_uint16(memberValue0_3, add(headStart, _2))\n        let memberValue0_4 := mload(add(value4, 192))\n        let _3 := 320\n        abi_encode_bool(memberValue0_4, add(headStart, _3))\n        let _4 := mload(add(value4, 224))\n        let _5 := 352\n        mstore(add(headStart, _5), _4)\n        mstore(add(headStart, 384), mload(add(value4, _1)))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 416))\n        let memberValue0_6 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_6, add(headStart, 448))\n        let memberValue0_7 := mload(add(value4, _5))\n        abi_encode_address(memberValue0_7, add(headStart, 480))\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_rational_0_by_1__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        abi_encode_enum_InterestRateMode(value2, add(headStart, 64))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_bytes(value4, add(headStart, 160))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$23931_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        abi_encode_enum_InterestRateMode(value2, add(headStart, 64))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":1578}]}},"object":"73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80632e7263ea14610045578063a1fe0e8d14610067575b600080fd5b81801561005157600080fd5b506100656100603660046122ee565b610087565b005b81801561007357600080fd5b5061006561008236600461248b565b61097c565b61009a8582602001518360400151610be8565b6101066040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160008152602001600081525090565b81602001515167ffffffffffffffff81111561012457610124612036565b60405190808252806020026020018201604052801561014d578160200160208202803683370190505b506080820152815173ffffffffffffffffffffffffffffffffffffffff1681526101a0820151610187578161010001518260e0015161018b565b6000805b60c083015260a0820152600060208201525b8160200151518160200151101561034f5781604001518160200151815181106101c8576101c8612555565b60209081029190910101516060820152600082606001518260200151815181106101f4576101f4612555565b6020026020010151600281111561020d5761020d612584565b600281111561021e5761021e612584565b1461022a57600061023d565b60a0810151606082015161023d91610cd9565b816080015182602001518151811061025757610257612555565b602002602001018181525050856000836020015183602001518151811061028057610280612555565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000206004908101548551606086015193517f4efecaa5000000000000000000000000000000000000000000000000000000008152908516928101929092526024820192909252911690634efecaa590604401600060405180830381600087803b15801561031f57600080fd5b505af1158015610333573d6000803e3d6000fd5b5050506020820180519150610347826125e2565b90525061019d565b806000015173ffffffffffffffffffffffffffffffffffffffff1663920f5c84836020015184604001518460800151338760a001516040518663ffffffff1660e01b81526004016103a49594939291906126c1565b6020604051808303816000875af11580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e79190612775565b6040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152509061045e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b60405180910390fd5b50600060208201525b8160200151518160200151101561097457816020015181602001518151811061049257610492612555565b6020026020010151816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081604001518160200151815181106104eb576104eb612555565b602090810291909101015160608201526000826060015182602001518151811061051757610517612555565b6020026020010151600281111561053057610530612584565b600281111561054157610541612584565b141561062857610623866000836040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808460600151815260200184608001518560200151815181106105bb576105bb612555565b602002602001015181526020018460c001518152602001846040015173ffffffffffffffffffffffffffffffffffffffff168152602001856000015173ffffffffffffffffffffffffffffffffffffffff1681526020018560c0015161ffff16815250610d1c565b61095c565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f987878787604051806101800160405280886040015173ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001896080015173ffffffffffffffffffffffffffffffffffffffff1681526020018860600151815260200189606001518960200151815181106106d2576106d2612555565b602002602001015160028111156106eb576106eb612584565b60028111156106fc576106fc612584565b81526020018960c0015161ffff1681526020016000151581526020018961012001518152602001896101400151815260200189610160015173ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a291906127a5565b73ffffffffffffffffffffffffffffffffffffffff16815260200189610180015160ff16815260200189610160015173ffffffffffffffffffffffffffffffffffffffff16635eb88d3d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f91906127a5565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b81526004016108789594939291906127fd565b60006040518083038186803b15801561089057600080fd5b505af41580156108a4573d6000803e3d6000fd5b505050508160c0015161ffff16816040015173ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff167fefefaba5e921573100900a3ad9cf29f222d995fb3b6045797eaea7521bd8d6f0338560600151876060015187602001518151811061092857610928612555565b6020026020010151600281111561094157610941612584565b60006040516109539493929190612925565b60405180910390a45b6020810180519061096c826125e2565b905250610467565b505050505050565b61098582611030565b805160c0820151604083015160009161099e9190610cd9565b600480860154855160408088015190517f4efecaa500000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff90921693634efecaa593610a1f93910173ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050506020830151604080850151606086015191517f1b11d0ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861693631b11d0ff93610ab693919287913391600401612965565b6020604051808303816000875af1158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190612775565b6040518060400160405280600281526020017f313300000000000000000000000000000000000000000000000000000000000081525090610b67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b50610be2846040518060c00160405280866040015181526020018481526020018660a001518152602001866020015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015161ffff16815250610d1c565b50505050565b80518251146040518060400160405280600281526020017f343900000000000000000000000000000000000000000000000000000000000081525090610c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5060005b8251811015610be257610cc7846000858481518110610c8057610c80612555565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611030565b80610cd1816125e2565b915050610c5f565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610d0e57600080fd5b506127109102611388010490565b6000610d3982604001518360200151610cd990919063ffffffff16565b90506000818360200151610d4d91906129b5565b9050600083602001518460000151610d6591906129cc565b90506000610d72866111ba565b9050610d7e86826113d3565b6101008101516008870154610e2f91610da9916fffffffffffffffffffffffffffffffff169061145e565b826101e0015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1d91906129e4565b610e2791906129cc565b8790856114b5565b6101008201819052610e4b90610e46908690611565565b6115a4565b600887018054600090610e719084906fffffffffffffffffffffffffffffffff166129fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550610ec58186606001518460008a61164a90949392919063ffffffff16565b60808501516101e08201516060870151610ef89273ffffffffffffffffffffffffffffffffffffffff909116918561198b565b6101e081015160808601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052602482015260448101859052911690636fd9767690606401600060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505050508460a0015161ffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866080015173ffffffffffffffffffffffffffffffffffffffff167fefefaba5e921573100900a3ad9cf29f222d995fb3b6045797eaea7521bd8d6f03389600001516000600281111561100b5761100b612584565b8b602001516040516110209493929190612925565b60405180910390a4505050505050565b60408051602081019091528154808252671000000000000000161515156040518060400160405280600281526020017f3239000000000000000000000000000000000000000000000000000000000000815250906110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5080516701000000000000001615156040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090611138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5080516780000000000000001615156040518060400160405280600281526020017f3931000000000000000000000000000000000000000000000000000000000000815250906111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b505050565b6111c2611f89565b6111ca611f89565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa1580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131b91906129e4565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190612a31565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415611402575050565b61140c8282611a6d565b6114168282611b8e565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761149357600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6001830154600090819061150d906fffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce80000006114fd6114ee88611d0d565b6114f788611d0d565b90611565565b61150791906129cc565b9061145e565b9050611518816115a4565b6001860180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905590505b9392505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561158957600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610455565b5090565b6116756040518060800160405280600081526020016000815260200160008152602001600081525090565b61014085015160208601516116899161145e565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916117ea9190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182b9190612a7c565b60408401526020830152808252611841906115a4565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611884906115a4565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516118d5906115a4565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16119f6573d6000803e3d6000fd5b50611a0085611d28565b611a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401610455565b5050505050565b61016081015115611afd576000611a8e826101600151836102400151611df4565b9050611aa78260e001518261145e90919063ffffffff16565b6101008301819052611ab8906115a4565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611b8a576000611b1a826101800151836102400151611e39565b9050611b348261012001518261145e90919063ffffffff16565b6101408301819052611b45906115a4565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b611bc76040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a0820151611bd657505050565b6101208201518251611be79161145e565b60208201526101408201518251611bfd9161145e565b60408201526060820151610260830151610240840151611c2592919064ffffffffff16611e42565b606082018190526040830151611c3a9161145e565b808252602082015160808401516040840151611c5691906129cc565b611c6091906129b5565b611c6a91906129b5565b608082018190526101a0830151611c819190610cd9565b60a08201819052156111b557611cac610e468361010001518360a0015161156590919063ffffffff16565b600884018054600090611cd29084906fffffffffffffffffffffffffffffffff166129fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050565b633b9aca008181029081048214611d2357600080fd5b919050565b6000611d68565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611da75760208114611de157611da27f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611d2f565b611dee565b823b611dd857611dd87f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611d2f565b60019150611dee565b3d6000803e600051151591505b50919050565b600080611e0864ffffffffff8416426129b5565b611e129085612aaa565b6301e1338090049050611e31816b033b2e3c9fd0803ce80000006129cc565b949350505050565b600061155e8383425b600080611e5664ffffffffff8516846129b5565b905080611e72576b033b2e3c9fd0803ce800000091505061155e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611ea8576000611ead565b600285035b925066038882915c4000611ec18a8061145e565b81611ece57611ece612ae7565b0491506301e13380611ee0838b61145e565b81611eed57611eed612ae7565b049050600082611efd8688612aaa565b611f079190612aaa565b60029004905060008285611f1b888a612aaa565b611f259190612aaa565b611f2f9190612aaa565b60069004905080826301e13380611f468a8f612aaa565b611f509190612b16565b611f66906b033b2e3c9fd0803ce80000006129cc565b611f7091906129cc565b611f7a91906129cc565b9b9a5050505050505050505050565b604051806102800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161200d6040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101c0810167ffffffffffffffff8111828210171561208957612089612036565b60405290565b60405160e0810167ffffffffffffffff8111828210171561208957612089612036565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156120f9576120f9612036565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461212357600080fd5b50565b8035611d2381612101565b600067ffffffffffffffff82111561214b5761214b612036565b5060051b60200190565b600082601f83011261216657600080fd5b8135602061217b61217683612131565b6120b2565b82815260059290921b8401810191818101908684111561219a57600080fd5b8286015b848110156121be5780356121b181612101565b835291830191830161219e565b509695505050505050565b600082601f8301126121da57600080fd5b813560206121ea61217683612131565b82815260059290921b8401810191818101908684111561220957600080fd5b8286015b848110156121be578035835291830191830161220d565b600082601f83011261223557600080fd5b813567ffffffffffffffff81111561224f5761224f612036565b61228060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016120b2565b81815284602083860101111561229557600080fd5b816020850160208301376000918101602001919091529392505050565b803561ffff81168114611d2357600080fd5b803560ff81168114611d2357600080fd5b801515811461212357600080fd5b8035611d23816122d5565b600080600080600060a0868803121561230657600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff8082111561233a57600080fd5b908701906101c0828a03121561234f57600080fd5b612357612065565b61236083612126565b815260208301358281111561237457600080fd5b6123808b828601612155565b60208301525060408301358281111561239857600080fd5b6123a48b8286016121c9565b6040830152506060830135828111156123bc57600080fd5b6123c88b8286016121c9565b6060830152506123da60808401612126565b608082015260a0830135828111156123f157600080fd5b6123fd8b828601612224565b60a08301525061240f60c084016122b2565b60c082015260e08381013590820152610100808401359082015261012080840135908201526101408084013590820152610160915061244f828401612126565b8282015261018091506124638284016122c4565b828201526101a091506124778284016122e3565b828201528093505050509295509295909350565b6000806040838503121561249e57600080fd5b82359150602083013567ffffffffffffffff808211156124bd57600080fd5b9084019060e082870312156124d157600080fd5b6124d961208f565b6124e283612126565b81526124f060208401612126565b60208201526040830135604082015260608301358281111561251157600080fd5b61251d88828601612224565b60608301525061252f608084016122b2565b608082015260a083013560a082015260c083013560c08201528093505050509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612614576126146125b3565b5060010190565b600081518084526020808501945080840160005b8381101561264b5781518752958201959082019060010161262f565b509495945050505050565b6000815180845260005b8181101561267c57602081850181015186830182015201612660565b8181111561268e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561271057815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016126de565b50505083810382850152612724818961261b565b9150508281036040840152612739818761261b565b905073ffffffffffffffffffffffffffffffffffffffff8516606084015282810360808401526127698185612656565b98975050505050505050565b60006020828403121561278757600080fd5b815161155e816122d5565b60208152600061155e6020830184612656565b6000602082840312156127b757600080fd5b815161155e81612101565b600381106127f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e08301526080830151610100612899818501836127c2565b60a085015191506101206128b28186018461ffff169052565b60c086015192506101406128c98187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e085015290506121be565b73ffffffffffffffffffffffffffffffffffffffff85168152602081018490526080810161295660408301856127c2565b82606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835286602084015285604084015280851660608401525060a060808301526129aa60a0830184612656565b979650505050505050565b6000828210156129c7576129c76125b3565b500390565b600082198211156129df576129df6125b3565b500190565b6000602082840312156129f657600080fd5b5051919050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a2857612a286125b3565b01949350505050565b60008060008060808587031215612a4757600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114612a7157600080fd5b939692955090935050565b600080600060608486031215612a9157600080fd5b8351925060208401519150604084015190509250925092565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ae257612ae26125b3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612b4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220114b3e84e7f6d93d65fd9f68c597d16555867d36e9d3e0154e656d89caa7d35564736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2E7263EA EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0xA1FE0E8D EQ PUSH2 0x67 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x60 CALLDATASIZE PUSH1 0x4 PUSH2 0x22EE JUMP JUMPDEST PUSH2 0x87 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x82 CALLDATASIZE PUSH1 0x4 PUSH2 0x248B JUMP JUMPDEST PUSH2 0x97C JUMP JUMPDEST PUSH2 0x9A DUP6 DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0xBE8 JUMP JUMPDEST PUSH2 0x106 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x124 JUMPI PUSH2 0x124 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x14D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x80 DUP3 ADD MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x187 JUMPI DUP2 PUSH2 0x100 ADD MLOAD DUP3 PUSH1 0xE0 ADD MLOAD PUSH2 0x18B JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x34F JUMPI DUP2 PUSH1 0x40 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x1C8 JUMPI PUSH2 0x1C8 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x1F4 JUMPI PUSH2 0x1F4 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x20D JUMPI PUSH2 0x20D PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21E JUMPI PUSH2 0x21E PUSH2 0x2584 JUMP JUMPDEST EQ PUSH2 0x22A JUMPI PUSH1 0x0 PUSH2 0x23D JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x23D SWAP2 PUSH2 0xCD9 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x257 JUMPI PUSH2 0x257 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x280 JUMPI PUSH2 0x280 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 KECCAK256 PUSH1 0x4 SWAP1 DUP2 ADD SLOAD DUP6 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP4 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP6 AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 AND SWAP1 PUSH4 0x4EFECAA5 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x333 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 DUP3 ADD DUP1 MLOAD SWAP2 POP PUSH2 0x347 DUP3 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x19D JUMP JUMPDEST DUP1 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x920F5C84 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD DUP5 PUSH1 0x80 ADD MLOAD CALLER DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A4 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x26C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E7 SWAP2 SWAP1 PUSH2 0x2775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x45E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x974 JUMPI DUP2 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x492 JUMPI PUSH2 0x492 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x40 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 PUSH1 0x40 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x4EB JUMPI PUSH2 0x4EB PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x517 JUMPI PUSH2 0x517 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x530 JUMPI PUSH2 0x530 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x541 JUMPI PUSH2 0x541 PUSH2 0x2584 JUMP JUMPDEST EQ ISZERO PUSH2 0x628 JUMPI PUSH2 0x623 DUP7 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x80 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x5BB JUMPI PUSH2 0x5BB PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH2 0xD1C JUMP JUMPDEST PUSH2 0x95C JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x60 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x6D2 JUMPI PUSH2 0x6D2 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x6EB JUMPI PUSH2 0x6EB PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x6FC JUMPI PUSH2 0x6FC PUSH2 0x2584 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x120 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x140 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x77E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7A2 SWAP2 SWAP1 PUSH2 0x27A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x180 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EB88D3D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x81B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x83F SWAP2 SWAP1 PUSH2 0x27A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x878 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x8A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xEFEFABA5E921573100900A3AD9CF29F222D995FB3B6045797EAEA7521BD8D6F0 CALLER DUP6 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x928 JUMPI PUSH2 0x928 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x941 JUMPI PUSH2 0x941 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x953 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST PUSH1 0x20 DUP2 ADD DUP1 MLOAD SWAP1 PUSH2 0x96C DUP3 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x467 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x985 DUP3 PUSH2 0x1030 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x0 SWAP2 PUSH2 0x99E SWAP2 SWAP1 PUSH2 0xCD9 JUMP JUMPDEST PUSH1 0x4 DUP1 DUP7 ADD SLOAD DUP6 MLOAD PUSH1 0x40 DUP1 DUP9 ADD MLOAD SWAP1 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 SWAP6 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP4 PUSH4 0x4EFECAA5 SWAP4 PUSH2 0xA1F SWAP4 SWAP2 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA4D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP2 MLOAD PUSH32 0x1B11D0FF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP4 PUSH4 0x1B11D0FF SWAP4 PUSH2 0xAB6 SWAP4 SWAP2 SWAP3 DUP8 SWAP2 CALLER SWAP2 PUSH1 0x4 ADD PUSH2 0x2965 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAD5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF9 SWAP2 SWAP1 PUSH2 0x2775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xB67 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP PUSH2 0xBE2 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x80 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH2 0xD1C JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3439000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xC5B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH2 0xCC7 DUP5 PUSH1 0x0 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xC80 JUMPI PUSH2 0xC80 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH2 0x1030 JUMP JUMPDEST DUP1 PUSH2 0xCD1 DUP2 PUSH2 0x25E2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC5F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xD0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD39 DUP3 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xCD9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xD4D SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0xD65 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD72 DUP7 PUSH2 0x11BA JUMP JUMPDEST SWAP1 POP PUSH2 0xD7E DUP7 DUP3 PUSH2 0x13D3 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH1 0x8 DUP8 ADD SLOAD PUSH2 0xE2F SWAP2 PUSH2 0xDA9 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x145E JUMP JUMPDEST DUP3 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE1D SWAP2 SWAP1 PUSH2 0x29E4 JUMP JUMPDEST PUSH2 0xE27 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST DUP8 SWAP1 DUP6 PUSH2 0x14B5 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xE4B SWAP1 PUSH2 0xE46 SWAP1 DUP7 SWAP1 PUSH2 0x1565 JUMP JUMPDEST PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x8 DUP8 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xE71 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29FD JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0xEC5 DUP2 DUP7 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x0 DUP11 PUSH2 0x164A SWAP1 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1E0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0xEF8 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 DUP6 PUSH2 0x198B JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF8E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP6 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xEFEFABA5E921573100900A3AD9CF29F222D995FB3B6045797EAEA7521BD8D6F0 CALLER DUP10 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x100B JUMPI PUSH2 0x100B PUSH2 0x2584 JUMP JUMPDEST DUP12 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x1020 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP2 SLOAD DUP1 DUP3 MSTORE PUSH8 0x1000000000000000 AND ISZERO ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP DUP1 MLOAD PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1138 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP DUP1 MLOAD PUSH8 0x8000000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3931000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x11C2 PUSH2 0x1F89 JUMP JUMPDEST PUSH2 0x11CA PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x131B SWAP2 SWAP1 PUSH2 0x29E4 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A0 SWAP2 SWAP1 PUSH2 0x2A31 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x1402 JUMPI POP POP JUMP JUMPDEST PUSH2 0x140C DUP3 DUP3 PUSH2 0x1A6D JUMP JUMPDEST PUSH2 0x1416 DUP3 DUP3 PUSH2 0x1B8E JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x150D SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x14FD PUSH2 0x14EE DUP9 PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x14F7 DUP9 PUSH2 0x1D0D JUMP JUMPDEST SWAP1 PUSH2 0x1565 JUMP JUMPDEST PUSH2 0x1507 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP1 PUSH2 0x145E JUMP JUMPDEST SWAP1 POP PUSH2 0x1518 DUP2 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1646 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x455 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1675 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1689 SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x17EA SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1807 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x182B SWAP2 SWAP1 PUSH2 0x2A7C JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1841 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x1884 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x18D5 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x19F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1A00 DUP6 PUSH2 0x1D28 JUMP JUMPDEST PUSH2 0x1A66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x455 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x1AFD JUMPI PUSH1 0x0 PUSH2 0x1A8E DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1DF4 JUMP JUMPDEST SWAP1 POP PUSH2 0x1AA7 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x145E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x1AB8 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1B8A JUMPI PUSH1 0x0 PUSH2 0x1B1A DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1E39 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B34 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x145E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x1B45 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1BC7 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x1BD6 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1BE7 SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1BFD SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x1C25 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1C3A SWAP2 PUSH2 0x145E JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x1C56 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1C60 SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST PUSH2 0x1C6A SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x1C81 SWAP2 SWAP1 PUSH2 0xCD9 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x11B5 JUMPI PUSH2 0x1CAC PUSH2 0xE46 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x1565 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1CD2 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29FD JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D68 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1DA7 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1DE1 JUMPI PUSH2 0x1DA2 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1D2F JUMP JUMPDEST PUSH2 0x1DEE JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1DD8 JUMPI PUSH2 0x1DD8 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1D2F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1DEE JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E08 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x29B5 JUMP JUMPDEST PUSH2 0x1E12 SWAP1 DUP6 PUSH2 0x2AAA JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1E31 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x29CC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x155E DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E56 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x29B5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1E72 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x155E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1EA8 JUMPI PUSH1 0x0 PUSH2 0x1EAD JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1EC1 DUP11 DUP1 PUSH2 0x145E JUMP JUMPDEST DUP2 PUSH2 0x1ECE JUMPI PUSH2 0x1ECE PUSH2 0x2AE7 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1EE0 DUP4 DUP12 PUSH2 0x145E JUMP JUMPDEST DUP2 PUSH2 0x1EED JUMPI PUSH2 0x1EED PUSH2 0x2AE7 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1EFD DUP7 DUP9 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F07 SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1F1B DUP9 DUP11 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F25 SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F2F SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1F46 DUP11 DUP16 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F50 SWAP2 SWAP1 PUSH2 0x2B16 JUMP JUMPDEST PUSH2 0x1F66 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1F70 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1F7A SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x200D PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2089 JUMPI PUSH2 0x2089 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2089 JUMPI PUSH2 0x2089 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20F9 JUMPI PUSH2 0x20F9 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x214B JUMPI PUSH2 0x214B PUSH2 0x2036 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x217B PUSH2 0x2176 DUP4 PUSH2 0x2131 JUMP JUMPDEST PUSH2 0x20B2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x219A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x21BE JUMPI DUP1 CALLDATALOAD PUSH2 0x21B1 DUP2 PUSH2 0x2101 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x219E JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x21DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x21EA PUSH2 0x2176 DUP4 PUSH2 0x2131 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x2209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x21BE JUMPI DUP1 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x220D JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x224F JUMPI PUSH2 0x224F PUSH2 0x2036 JUMP JUMPDEST PUSH2 0x2280 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x20B2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x2295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x233A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP8 ADD SWAP1 PUSH2 0x1C0 DUP3 DUP11 SUB SLT ISZERO PUSH2 0x234F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2357 PUSH2 0x2065 JUMP JUMPDEST PUSH2 0x2360 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2380 DUP12 DUP3 DUP7 ADD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2398 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23A4 DUP12 DUP3 DUP7 ADD PUSH2 0x21C9 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x23BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23C8 DUP12 DUP3 DUP7 ADD PUSH2 0x21C9 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH2 0x23DA PUSH1 0x80 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x23F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23FD DUP12 DUP3 DUP7 ADD PUSH2 0x2224 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH2 0x240F PUSH1 0xC0 DUP5 ADD PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 SWAP2 POP PUSH2 0x244F DUP3 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH2 0x180 SWAP2 POP PUSH2 0x2463 DUP3 DUP5 ADD PUSH2 0x22C4 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP2 POP PUSH2 0x2477 DUP3 DUP5 ADD PUSH2 0x22E3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x249E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x24BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP5 ADD SWAP1 PUSH1 0xE0 DUP3 DUP8 SUB SLT ISZERO PUSH2 0x24D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24D9 PUSH2 0x208F JUMP JUMPDEST PUSH2 0x24E2 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x24F0 PUSH1 0x20 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x251D DUP9 DUP3 DUP7 ADD PUSH2 0x2224 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH2 0x252F PUSH1 0x80 DUP5 ADD PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2614 JUMPI PUSH2 0x2614 PUSH2 0x25B3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x264B JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x262F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x267C JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2660 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x268E JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xA0 DUP1 DUP3 MSTORE DUP7 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0xC0 DUP5 ADD SWAP1 DUP3 DUP11 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2710 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x26DE JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x2724 DUP2 DUP10 PUSH2 0x261B JUMP JUMPDEST SWAP2 POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x2739 DUP2 DUP8 PUSH2 0x261B JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2769 DUP2 DUP6 PUSH2 0x2656 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2787 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x155E DUP2 PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x155E PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2656 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x155E DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x27F9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x2899 DUP2 DUP6 ADD DUP4 PUSH2 0x27C2 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x28B2 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x28C9 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x21BE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x2956 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x27C2 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x29AA PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x2656 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x29C7 JUMPI PUSH2 0x29C7 PUSH2 0x25B3 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x29DF JUMPI PUSH2 0x29DF PUSH2 0x25B3 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x2A28 JUMPI PUSH2 0x2A28 PUSH2 0x25B3 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2A71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2AE2 JUMPI PUSH2 0x2AE2 PUSH2 0x25B3 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2B4C JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GT 0x4B RETURNDATACOPY DUP5 0xE7 0xF6 0xD9 RETURNDATASIZE PUSH6 0xFD9F68C597D1 PUSH6 0x55867D36E9D3 0xE0 ISZERO 0x4E PUSH6 0x6D89CAA7D355 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1270:9574:97:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3037:4017;;;;;;;;;;-1:-1:-1;3037:4017:97;;;;;:::i;:::-;;:::i;:::-;;7731:1375;;;;;;;;;;-1:-1:-1;7731:1375:97;;;;;:::i;:::-;;:::i;3037:4017::-;3699:78;3733:12;3747:6;:13;;;3762:6;:14;;;3699:33;:78::i;:::-;3784:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3784:30:97;3856:6;:13;;;:20;3842:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3842:35:97;-1:-1:-1;3821:18:97;;;:56;3919:22;;3884:58;;;;4012:32;;;;:121;;4069:6;:28;;;4099:6;:33;;;4012:121;;;4054:1;4057;4012:121;3977:31;;;3948:185;3949:26;;;3948:185;-1:-1:-1;;4145:6:97;;:10;4140:491;4166:6;:13;;;:20;4157:4;:6;;;:29;4140:491;;;4227:6;:14;;;4242:4;:6;;;4227:22;;;;;;;;:::i;:::-;;;;;;;;;;;4206:18;;;:43;4358:31;4313:6;:24;;;4338:4;:6;;;4313:32;;;;;;;;:::i;:::-;;;;;;;4286:60;;;;;;;;:::i;:::-;:103;;;;;;;;:::i;:::-;;:183;;4468:1;4286:183;;;4430:26;;;;4400:18;;;;:57;;:29;:57::i;:::-;4257:4;:18;;;4276:4;:6;;;4257:26;;;;;;;;:::i;:::-;;;;;;:212;;;;;4485:12;:35;4498:6;:13;;;4512:4;:6;;;4498:21;;;;;;;;:::i;:::-;;;;;;;;;;;;4485:35;;;;;;;;;;;;;;;;;-1:-1:-1;4485:35:97;:49;;;;;4566:22;;4598:18;;;;4477:147;;;;;8299:55:124;;;4477:147:97;;;8281:74:124;;;;8371:18;;;8364:34;;;;4485:49:97;;;4477:79;;8254:18:124;;4477:147:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4188:6:97;;;:8;;;-1:-1:-1;4188:8:97;;;:::i;:::-;;;-1:-1:-1;4140:491:97;;;4652:4;:13;;;:30;;;4692:6;:13;;;4715:6;:14;;;4739:4;:18;;;4767:10;4787:6;:13;;;4652:156;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4816:40;;;;;;;;;;;;;;;;;4637:225;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;4883:1:97;4874:6;;;:10;4869:2181;4895:6;:13;;;:20;4886:4;:6;;;:29;4869:2181;;;4955:6;:13;;;4969:4;:6;;;4955:21;;;;;;;;:::i;:::-;;;;;;;4935:4;:17;;:41;;;;;;;;;;;5005:6;:14;;;5020:4;:6;;;5005:22;;;;;;;;:::i;:::-;;;;;;;;;;;4984:18;;;:43;5121:31;5076:6;:24;;;5101:4;:6;;;5076:32;;;;;;;;:::i;:::-;;;;;;;5049:60;;;;;;;;:::i;:::-;:103;;;;;;;;:::i;:::-;;5036:2008;;;5171:443;5208:12;:31;5221:4;:17;;;5208:31;;;;;;;;;;;;;;;5251:353;;;;;;;;5399:4;:18;;;5251:353;;;;5445:4;:18;;;5464:4;:6;;;5445:26;;;;;;;;:::i;:::-;;;;;;;5251:353;;;;5513:4;:31;;;5251:353;;;;5307:4;:17;;;5251:353;;;;;;5355:6;:22;;;5251:353;;;;;;5572:6;:19;;;5251:353;;;;;5171:25;:443::i;:::-;5036:2008;;;5789:11;:25;5826:12;5850;5874:15;5901:10;5923:770;;;;;;;;5974:4;:17;;;5923:770;;;;;;6011:10;5923:770;;;;;;6047:6;:17;;;5923:770;;;;;;6086:4;:18;;;5923:770;;;;6163:6;:24;;;6188:4;:6;;;6163:32;;;;;;;;:::i;:::-;;;;;;;6136:60;;;;;;;;:::i;:::-;5923:770;;;;;;;;:::i;:::-;;;;;6224:6;:19;;;5923:770;;;;;;6276:5;5923:770;;;;;;6327:6;:37;;;5923:770;;;;6393:6;:20;;;5923:770;;;;6458:6;:24;;;6435:63;;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5923:770;;;;;;6533:6;:24;;;5923:770;;;;;;6615:6;:24;;;6592:86;;;:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5923:770;;;;;5789:914;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7006:6;:19;;;6785:250;;6862:4;:17;;;6785:250;;6806:6;:22;;;6785:250;;;6840:10;6891:4;:18;;;6948:6;:24;;;6973:4;:6;;;6948:32;;;;;;;;:::i;:::-;;;;;;;6921:60;;;;;;;;:::i;:::-;6993:1;6785:250;;;;;;;;;:::i;:::-;;;;;;;;5036:2008;4917:6;;;:8;;;;;;:::i;:::-;;;-1:-1:-1;4869:2181:97;;;3369:3685;3037:4017;;;;;:::o;7731:1375::-;8200:48;8240:7;8200:39;:48::i;:::-;8316:22;;8393:28;;;;8368:13;;;;8255:33;;8368:54;;:13;:24;:54::i;:::-;8436:21;;;;;8480:22;;8504:13;;;;;8428:90;;;;;8345:77;;-1:-1:-1;8436:21:97;;;;;8428:51;;:90;;8504:13;8428:90;8311:42:124;8299:55;;;;8281:74;;8386:2;8371:18;;8364:34;8269:2;8254:18;;8107:297;8428:90:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;8575:12:97;;;;8597:13;;;;;8662;;;;8540:143;;;;;:25;;;;;;:143;;8575:12;;8620;;8642:10;;8540:143;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8691:40;;;;;;;;;;;;;;;;;8525:212;;;;;;;;;;;;;;:::i;:::-;;8744:357;8777:7;8792:303;;;;;;;;8923:6;:13;;;8792:303;;;;8960:12;8792:303;;;;9010:6;:33;;;8792:303;;;;8844:6;:12;;;8792:303;;;;;;8883:6;:22;;;8792:303;;;;;;9067:6;:19;;;8792:303;;;;;8744:25;:357::i;:::-;7870:1236;;7731:1375;;:::o;17898:373:104:-;18101:7;:14;18084:6;:13;:31;18117:36;;;;;;;;;;;;;;;;;18076:78;;;;;;;;;;;;;;:::i;:::-;;18165:9;18160:107;18184:6;:13;18180:1;:17;18160:107;;;18212:48;18236:12;:23;18249:6;18256:1;18249:9;;;;;;;;:::i;:::-;;;;;;;18236:23;;;;;;;;;;;;;;;18212;:48::i;:::-;18199:3;;;;:::i;:::-;;;;18160:107;;1005:496:106;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;9415:1427:97:-;9566:25;9594:65;9625:6;:33;;;9594:6;:19;;;:30;;:65;;;;:::i;:::-;9566:93;;9665:19;9709:17;9687:6;:19;;;:39;;;;:::i;:::-;9665:61;;9732:25;9776:6;:19;;;9760:6;:13;;;:35;;;;:::i;:::-;9732:63;;9802:42;9847:15;:7;:13;:15::i;:::-;9802:60;-1:-1:-1;9868:33:97;:7;9802:60;9868:19;:33::i;:::-;10082:31;;;;10048:25;;;;9941:198;;10040:74;;10048:25;;;10040:41;:74::i;:::-;9988:12;:26;;;9981:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:133;;;;:::i;:::-;9941:7;;10122:11;9941:32;:198::i;:::-;9907:31;;;:232;;;10175:83;;:64;;:17;;:31;:64::i;:::-;:81;:83::i;:::-;10146:25;;;:112;;:25;;:112;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10265:77;10293:12;10307:6;:12;;;10321:17;10340:1;10265:7;:27;;:77;;;;;;;:::i;:::-;10394:22;;;;10424:26;;;;10356:12;;;;10349:132;;:37;;;;;10458:17;10349:37;:132::i;:::-;10496:26;;;;10547:22;;;;10488:142;;;;;:51;16475:15:124;;;10488:142:97;;;16457:34:124;;;16507:18;;;16500:43;16559:18;;;16552:34;;;10488:51:97;;;;;16369:18:124;;10488:142:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10812:6;:19;;;10642:195;;10707:6;:12;;;10642:195;;10659:6;:22;;;10642:195;;;10689:10;10727:6;:13;;;10775:1;10748:29;;;;;;;;:::i;:::-;10785:6;:19;;;10642:195;;;;;;;;;:::i;:::-;;;;;;;;9560:1282;;;;9415:1427;;:::o;18375:381:104:-;18467:78;;;;;;;;;;;;;;10339:12:88;10327:24;10326:31;;18559:26:104;18587:21;;;;;;;;;;;;;;;;;18551:58;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9045:9:88;;9057:12;9045:24;9044:31;;18650:23:104;;;;;;;;;;;;;;;;;18615:59;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21149:9:88;;21161:23;21149:35;21148:42;;18725:25:104;;;;;;;;;;;;;;;;;18680:71;;;;;;;;;;;;;;:::i;:::-;;18461:295;18375:381;:::o;12460:1739:102:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:88;15237:71;;;;12694:26:102;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:102;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:102;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:102:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:102;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;4496:534:102:-;4929:22;;;;4643:7;;;;4844:113;;4929:22;;704:4:107;4845:51:102;4870:25;:14;:23;:25::i;:::-;4845:17;:6;:15;:17::i;:::-;:24;;:51::i;:::-;:68;;;;:::i;:::-;4844:77;;:113::i;:::-;4827:130;;4988:18;:6;:16;:18::i;:::-;4963:22;;;:43;;;;;;;;;;;;;;;5019:6;-1:-1:-1;4496:534:102;;;;;;:::o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;17761:2:124;1635:78:12;;;17743:21:124;17800:2;17780:18;;;17773:30;17839:34;17819:18;;;17812:62;17910:9;17890:18;;;17883:37;17937:19;;1635:78:12;17559:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;6827:1514:102:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:102;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:102;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:102;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;18153:4:124;18195:3;18184:9;18180:19;18172:27;;18232:6;18226:13;18215:9;18208:32;18296:4;18288:6;18284:17;18278:24;18271:4;18260:9;18256:20;18249:54;18359:4;18351:6;18347:17;18341:24;18334:4;18323:9;18319:20;18312:54;18422:4;18414:6;18410:17;18404:24;18397:4;18386:9;18382:20;18375:54;18485:4;18477:6;18473:17;18467:24;18460:4;18449:9;18445:20;18438:54;18548:4;18540:6;18536:17;18530:24;18523:4;18512:9;18508:20;18501:54;18611:4;18603:6;18599:17;18593:24;18586:4;18575:9;18571:20;18564:54;18665:4;18657:6;18653:17;18647:24;18690:42;18788:2;18774:12;18770:21;18763:4;18752:9;18748:20;18741:51;18811:6;18801:16;;18881:2;18875;18867:6;18863:15;18857:22;18853:31;18848:2;18837:9;18833:18;18826:59;;;17967:924;;;;;7316:575:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;19466:25:124;;;19507:18;;;19500:34;;;;19550:18;;;19543:34;19608:2;19593:18;;19586:34;19651:3;19636:19;;19629:35;8121:215:102;;;;;;19453:3:124;19438:19;8121:215:102;;;;;;;7044:1297;6827:1514;;;;;:::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;19877:2:124;1937:66:1;;;19859:21:124;19916:2;19896:18;;;19889:30;19955:27;19935:18;;;19928:55;20000:18;;1937:66:1;19675:349:124;1937:66:1;1318:690;1228:780;;;;:::o;10657:1542:102:-;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:102;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;-1:-1:-1;11728:467:102;10657:1542;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:102;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:96::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8972:1467;8841:1598;;:::o;3901:247:107:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:105:o;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;1780:972;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:184:124:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:255;275:2;269:9;317:6;305:19;;354:18;339:34;;375:22;;;336:62;333:88;;;401:18;;:::i;:::-;437:2;430:22;203:255;:::o;463:253::-;535:2;529:9;577:4;565:17;;612:18;597:34;;633:22;;;594:62;591:88;;;659:18;;:::i;721:334::-;792:2;786:9;848:2;838:13;;853:66;834:86;822:99;;951:18;936:34;;972:22;;;933:62;930:88;;;998:18;;:::i;:::-;1034:2;1027:22;721:334;;-1:-1:-1;721:334:124:o;1060:154::-;1146:42;1139:5;1135:54;1128:5;1125:65;1115:93;;1204:1;1201;1194:12;1115:93;1060:154;:::o;1219:134::-;1287:20;;1316:31;1287:20;1316:31;:::i;1358:183::-;1418:4;1451:18;1443:6;1440:30;1437:56;;;1473:18;;:::i;:::-;-1:-1:-1;1518:1:124;1514:14;1530:4;1510:25;;1358:183::o;1546:737::-;1600:5;1653:3;1646:4;1638:6;1634:17;1630:27;1620:55;;1671:1;1668;1661:12;1620:55;1707:6;1694:20;1733:4;1757:60;1773:43;1813:2;1773:43;:::i;:::-;1757:60;:::i;:::-;1851:15;;;1937:1;1933:10;;;;1921:23;;1917:32;;;1882:12;;;;1961:15;;;1958:35;;;1989:1;1986;1979:12;1958:35;2025:2;2017:6;2013:15;2037:217;2053:6;2048:3;2045:15;2037:217;;;2133:3;2120:17;2150:31;2175:5;2150:31;:::i;:::-;2194:18;;2232:12;;;;2070;;2037:217;;;-1:-1:-1;2272:5:124;1546:737;-1:-1:-1;;;;;;1546:737:124:o;2288:662::-;2342:5;2395:3;2388:4;2380:6;2376:17;2372:27;2362:55;;2413:1;2410;2403:12;2362:55;2449:6;2436:20;2475:4;2499:60;2515:43;2555:2;2515:43;:::i;2499:60::-;2593:15;;;2679:1;2675:10;;;;2663:23;;2659:32;;;2624:12;;;;2703:15;;;2700:35;;;2731:1;2728;2721:12;2700:35;2767:2;2759:6;2755:15;2779:142;2795:6;2790:3;2787:15;2779:142;;;2861:17;;2849:30;;2899:12;;;;2812;;2779:142;;2955:589;2997:5;3050:3;3043:4;3035:6;3031:17;3027:27;3017:55;;3068:1;3065;3058:12;3017:55;3104:6;3091:20;3130:18;3126:2;3123:26;3120:52;;;3152:18;;:::i;:::-;3196:114;3304:4;3235:66;3228:4;3224:2;3220:13;3216:86;3212:97;3196:114;:::i;:::-;3335:2;3326:7;3319:19;3381:3;3374:4;3369:2;3361:6;3357:15;3353:26;3350:35;3347:55;;;3398:1;3395;3388:12;3347:55;3463:2;3456:4;3448:6;3444:17;3437:4;3428:7;3424:18;3411:55;3511:1;3486:16;;;3504:4;3482:27;3475:38;;;;3490:7;2955:589;-1:-1:-1;;;2955:589:124:o;3549:159::-;3616:20;;3676:6;3665:18;;3655:29;;3645:57;;3698:1;3695;3688:12;3713:156;3779:20;;3839:4;3828:16;;3818:27;;3808:55;;3859:1;3856;3849:12;3874:118;3960:5;3953:13;3946:21;3939:5;3936:32;3926:60;;3982:1;3979;3972:12;3997:128;4062:20;;4091:28;4062:20;4091:28;:::i;4130:2364::-;4428:6;4436;4444;4452;4460;4513:3;4501:9;4492:7;4488:23;4484:33;4481:53;;;4530:1;4527;4520:12;4481:53;4566:9;4553:23;4543:33;;4623:2;4612:9;4608:18;4595:32;4585:42;;4674:2;4663:9;4659:18;4646:32;4636:42;;4725:2;4714:9;4710:18;4697:32;4687:42;;4780:3;4769:9;4765:19;4752:33;4804:18;4845:2;4837:6;4834:14;4831:34;;;4861:1;4858;4851:12;4831:34;4884:22;;;;4940:6;4922:16;;;4918:29;4915:49;;;4960:1;4957;4950:12;4915:49;4986:22;;:::i;:::-;5031;5050:2;5031:22;:::i;:::-;5024:5;5017:37;5100:2;5096;5092:11;5079:25;5129:2;5119:8;5116:16;5113:36;;;5145:1;5142;5135:12;5113:36;5181:56;5229:7;5218:8;5214:2;5210:17;5181:56;:::i;:::-;5176:2;5169:5;5165:14;5158:80;;5284:2;5280;5276:11;5263:25;5313:2;5303:8;5300:16;5297:36;;;5329:1;5326;5319:12;5297:36;5365:56;5413:7;5402:8;5398:2;5394:17;5365:56;:::i;:::-;5360:2;5353:5;5349:14;5342:80;;5468:2;5464;5460:11;5447:25;5497:2;5487:8;5484:16;5481:36;;;5513:1;5510;5503:12;5481:36;5549:56;5597:7;5586:8;5582:2;5578:17;5549:56;:::i;:::-;5544:2;5537:5;5533:14;5526:80;;5639:32;5666:3;5662:2;5658:12;5639:32;:::i;:::-;5633:3;5626:5;5622:15;5615:57;5718:3;5714:2;5710:12;5697:26;5748:2;5738:8;5735:16;5732:36;;;5764:1;5761;5754:12;5732:36;5801:44;5837:7;5826:8;5822:2;5818:17;5801:44;:::i;:::-;5795:3;5788:5;5784:15;5777:69;;5879:31;5905:3;5901:2;5897:12;5879:31;:::i;:::-;5873:3;5862:15;;5855:56;5965:3;5957:12;;;5944:26;5927:15;;;5920:51;5990:3;6038:11;;;6025:25;6009:14;;;6002:49;6070:3;6118:11;;;6105:25;6089:14;;;6082:49;6150:3;6198:11;;;6185:25;6169:14;;;6162:49;6230:3;;-1:-1:-1;6265:31:124;6284:11;;;6265:31;:::i;:::-;6260:2;6253:5;6249:14;6242:55;6316:3;6306:13;;6351:29;6376:2;6372;6368:11;6351:29;:::i;:::-;6346:2;6339:5;6335:14;6328:53;6400:3;6390:13;;6435:28;6459:2;6455;6451:11;6435:28;:::i;:::-;6430:2;6423:5;6419:14;6412:52;6483:5;6473:15;;;;;4130:2364;;;;;;;;:::o;6499:1093::-;6638:6;6646;6699:2;6687:9;6678:7;6674:23;6670:32;6667:52;;;6715:1;6712;6705:12;6667:52;6751:9;6738:23;6728:33;;6812:2;6801:9;6797:18;6784:32;6835:18;6876:2;6868:6;6865:14;6862:34;;;6892:1;6889;6882:12;6862:34;6915:22;;;;6971:4;6953:16;;;6949:27;6946:47;;;6989:1;6986;6979:12;6946:47;7015:22;;:::i;:::-;7060;7079:2;7060:22;:::i;:::-;7053:5;7046:37;7115:31;7142:2;7138;7134:11;7115:31;:::i;:::-;7110:2;7103:5;7099:14;7092:55;7200:2;7196;7192:11;7179:25;7174:2;7167:5;7163:14;7156:49;7251:2;7247;7243:11;7230:25;7280:2;7270:8;7267:16;7264:36;;;7296:1;7293;7286:12;7264:36;7332:44;7368:7;7357:8;7353:2;7349:17;7332:44;:::i;:::-;7327:2;7320:5;7316:14;7309:68;;7410:31;7436:3;7432:2;7428:12;7410:31;:::i;:::-;7404:3;7397:5;7393:15;7386:56;7496:3;7492:2;7488:12;7475:26;7469:3;7462:5;7458:15;7451:51;7556:3;7552:2;7548:12;7535:26;7529:3;7522:5;7518:15;7511:51;7581:5;7571:15;;;;;6499:1093;;;;;:::o;7597:184::-;7649:77;7646:1;7639:88;7746:4;7743:1;7736:15;7770:4;7767:1;7760:15;7786:184;7838:77;7835:1;7828:88;7935:4;7932:1;7925:15;7959:4;7956:1;7949:15;8409:184;8461:77;8458:1;8451:88;8558:4;8555:1;8548:15;8582:4;8579:1;8572:15;8598:195;8637:3;8668:66;8661:5;8658:77;8655:103;;;8738:18;;:::i;:::-;-1:-1:-1;8785:1:124;8774:13;;8598:195::o;8798:435::-;8851:3;8889:5;8883:12;8916:6;8911:3;8904:19;8942:4;8971:2;8966:3;8962:12;8955:19;;9008:2;9001:5;8997:14;9029:1;9039:169;9053:6;9050:1;9047:13;9039:169;;;9114:13;;9102:26;;9148:12;;;;9183:15;;;;9075:1;9068:9;9039:169;;;-1:-1:-1;9224:3:124;;8798:435;-1:-1:-1;;;;;8798:435:124:o;9238:530::-;9279:3;9317:5;9311:12;9344:6;9339:3;9332:19;9369:1;9379:162;9393:6;9390:1;9387:13;9379:162;;;9455:4;9511:13;;;9507:22;;9501:29;9483:11;;;9479:20;;9472:59;9408:12;9379:162;;;9559:6;9556:1;9553:13;9550:87;;;9625:1;9618:4;9609:6;9604:3;9600:16;9596:27;9589:38;9550:87;-1:-1:-1;9682:2:124;9670:15;9687:66;9666:88;9657:98;;;;9757:4;9653:109;;9238:530;-1:-1:-1;;9238:530:124:o;9773:1343::-;10193:3;10206:22;;;10277:13;;10178:19;;;10299:22;;;10145:4;;10375;;10352:3;10337:19;;;10402:15;;;10145:4;10445:218;10459:6;10456:1;10453:13;10445:218;;;10524:13;;10539:42;10520:62;10508:75;;10603:12;;;;10638:15;;;;10481:1;10474:9;10445:218;;;10449:3;;;10708:9;10703:3;10699:19;10694:2;10683:9;10679:18;10672:47;10742:41;10779:3;10771:6;10742:41;:::i;:::-;10728:55;;;10831:9;10823:6;10819:22;10814:2;10803:9;10799:18;10792:50;10865:44;10902:6;10894;10865:44;:::i;:::-;10851:58;;10957:42;10949:6;10945:55;10940:2;10929:9;10925:18;10918:83;11050:9;11042:6;11038:22;11032:3;11021:9;11017:19;11010:51;11078:32;11103:6;11095;11078:32;:::i;:::-;11070:40;9773:1343;-1:-1:-1;;;;;;;;9773:1343:124:o;11121:245::-;11188:6;11241:2;11229:9;11220:7;11216:23;11212:32;11209:52;;;11257:1;11254;11247:12;11209:52;11289:9;11283:16;11308:28;11330:5;11308:28;:::i;11371:219::-;11520:2;11509:9;11502:21;11483:4;11540:44;11580:2;11569:9;11565:18;11557:6;11540:44;:::i;11595:251::-;11665:6;11718:2;11706:9;11697:7;11693:23;11689:32;11686:52;;;11734:1;11731;11724:12;11686:52;11766:9;11760:16;11785:31;11810:5;11785:31;:::i;11851:301::-;11939:1;11932:5;11929:12;11919:200;;11975:77;11972:1;11965:88;12076:4;12073:1;12066:15;12104:4;12101:1;12094:15;11919:200;12128:18;;11851:301::o;12428:1964::-;12940:25;;;12996:2;12981:18;;12974:34;;;13039:2;13024:18;;13017:34;;;13082:2;13067:18;;13060:34;;;13122:13;;8052:42;8041:54;13152:3;13137:19;;8029:67;12927:3;12912:19;;13204:2;13192:15;;13186:22;8052:42;8041:54;;13265:3;13250:19;;8029:67;-1:-1:-1;13319:2:124;13307:15;;13301:22;8052:42;8041:54;;13382:3;13367:19;;8029:67;13332:55;13442:2;13434:6;13430:15;13424:22;13418:3;13407:9;13403:19;13396:51;13496:3;13488:6;13484:16;13478:23;13520:3;13532:68;13596:2;13585:9;13581:18;13565:14;13532:68;:::i;:::-;13649:3;13641:6;13637:16;13631:23;13609:45;;13673:3;13685:53;13734:2;13723:9;13719:18;13703:14;12233:6;12222:18;12210:31;;12157:90;13685:53;13787:3;13779:6;13775:16;13769:23;13747:45;;13811:3;13823:51;13870:2;13859:9;13855:18;13839:14;12322:13;12315:21;12303:34;;12252:91;13823:51;13911:3;13899:16;;13893:23;13935:3;13954:18;;;13947:30;;;;14020:15;;;14014:22;14008:3;13993:19;;13986:51;14074:15;;;14068:22;8052:42;8041:54;;;14149:3;14134:19;;8029:67;14191:15;;;14185:22;12415:4;12404:16;14264:3;14249:19;;12392:29;14306:15;;;14300:22;8041:54;;;14381:3;14366:19;;8029:67;14300:22;-1:-1:-1;14331:55:124;7975:127;14397:494;14686:42;14674:55;;14656:74;;14761:2;14746:18;;14739:34;;;14643:3;14628:19;;14782:60;14838:2;14823:18;;14815:6;14782:60;:::i;:::-;14878:6;14873:2;14862:9;14858:18;14851:34;14397:494;;;;;;;:::o;14896:583::-;15118:4;15147:42;15228:2;15220:6;15216:15;15205:9;15198:34;15268:6;15263:2;15252:9;15248:18;15241:34;15311:6;15306:2;15295:9;15291:18;15284:34;15366:2;15358:6;15354:15;15349:2;15338:9;15334:18;15327:43;;15407:3;15401;15390:9;15386:19;15379:32;15428:45;15468:3;15457:9;15453:19;15445:6;15428:45;:::i;:::-;15420:53;14896:583;-1:-1:-1;;;;;;;14896:583:124:o;15484:125::-;15524:4;15552:1;15549;15546:8;15543:34;;;15557:18;;:::i;:::-;-1:-1:-1;15594:9:124;;15484:125::o;15614:128::-;15654:3;15685:1;15681:6;15678:1;15675:13;15672:39;;;15691:18;;:::i;:::-;-1:-1:-1;15727:9:124;;15614:128::o;15747:184::-;15817:6;15870:2;15858:9;15849:7;15845:23;15841:32;15838:52;;;15886:1;15883;15876:12;15838:52;-1:-1:-1;15909:16:124;;15747:184;-1:-1:-1;15747:184:124:o;15936:253::-;15976:3;16004:34;16065:2;16062:1;16058:10;16095:2;16092:1;16088:10;16126:3;16122:2;16118:12;16113:3;16110:21;16107:47;;;16134:18;;:::i;:::-;16170:13;;15936:253;-1:-1:-1;;;;15936:253:124:o;17088:466::-;17184:6;17192;17200;17208;17261:3;17249:9;17240:7;17236:23;17232:33;17229:53;;;17278:1;17275;17268:12;17229:53;17307:9;17301:16;17291:26;;17357:2;17346:9;17342:18;17336:25;17326:35;;17401:2;17390:9;17386:18;17380:25;17370:35;;17448:2;17437:9;17433:18;17427:25;17492:12;17485:5;17481:24;17474:5;17471:35;17461:63;;17520:1;17517;17510:12;17461:63;17088:466;;;;-1:-1:-1;17088:466:124;;-1:-1:-1;;17088:466:124:o;18896:306::-;18984:6;18992;19000;19053:2;19041:9;19032:7;19028:23;19024:32;19021:52;;;19069:1;19066;19059:12;19021:52;19098:9;19092:16;19082:26;;19148:2;19137:9;19133:18;19127:25;19117:35;;19192:2;19181:9;19177:18;19171:25;19161:35;;18896:306;;;;;:::o;20029:228::-;20069:7;20195:1;20127:66;20123:74;20120:1;20117:81;20112:1;20105:9;20098:17;20094:105;20091:131;;;20202:18;;:::i;:::-;-1:-1:-1;20242:9:124;;20029:228::o;20262:184::-;20314:77;20311:1;20304:88;20411:4;20408:1;20401:15;20435:4;20432:1;20425:15;20451:274;20491:1;20517;20507:189;;20552:77;20549:1;20542:88;20653:4;20650:1;20643:15;20681:4;20678:1;20671:15;20507:189;-1:-1:-1;20710:9:124;;20451:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"2228600","executionCost":"2413","totalCost":"2231013"},"external":{"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)":"infinite","executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)":"infinite"},"internal":{"_handleFlashLoanRepayment(struct DataTypes.ReserveData storage pointer,struct DataTypes.FlashLoanRepaymentParams memory)":"infinite"}},"methodIdentifiers":{"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)":"2e7263ea","executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)":"a1fe0e8d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)\":{\"details\":\"For authorized flashborrowers the fee is waivedAt the end of the transaction the pool will pull amount borrowed + fee from the receiver, if the receiver have not approved the pool the transaction will revert.Emits the `FlashLoan()` event\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the flashloan function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}},\"executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)\":{\"details\":\"Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gasAt the end of the transaction the pool will pull amount borrowed + fee from the receiver, if the receiver have not approved the pool the transaction will revert.Emits the `FlashLoan()` event\",\"params\":{\"params\":\"The additional parameters needed to execute the simple flashloan function\",\"reserve\":\"The state of the flashloaned reserve\"}}},\"title\":\"FlashLoanLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)\":{\"notice\":\"Implements the flashloan feature that allow users to access liquidity of the pool for one transaction as long as the amount taken plus fee is returned or debt is opened.\"},\"executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)\":{\"notice\":\"Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one transaction as long as the amount taken plus fee is returned.\"}},\"notice\":\"Implements the logic for the flash loans\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/FlashLoanLogic.sol\":\"FlashLoanLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)":{"notice":"Implements the flashloan feature that allow users to access liquidity of the pool for one transaction as long as the amount taken plus fee is returned or debt is opened."},"executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)":{"notice":"Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one transaction as long as the amount taken plus fee is returned."}},"notice":"Implements the logic for the flash loans","version":1}}},"contracts/protocol/libraries/logic/GenericLogic.sol":{"GenericLogic":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"GenericLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220609aa472592808ee9f070e6e9af020868b8140bfe904600845c71596d107a71864736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH1 0x9A LOG4 PUSH19 0x592808EE9F070E6E9AF020868B8140BFE90460 ADDMOD GASLIMIT 0xC7 ISZERO SWAP7 0xD1 SMOD 0xA7 XOR PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"856:9116:98:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;856:9116:98;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220609aa472592808ee9f070e6e9af020868b8140bfe904600845c71596d107a71864736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH1 0x9A LOG4 PUSH19 0x592808EE9F070E6E9AF020868B8140BFE90460 ADDMOD GASLIMIT 0xC7 ISZERO SWAP7 0xD1 SMOD 0xA7 XOR PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"856:9116:98:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_getUserBalanceInBaseCurrency(address,struct DataTypes.ReserveData storage pointer,uint256,uint256)":"infinite","_getUserDebtInBaseCurrency(address,struct DataTypes.ReserveData storage pointer,uint256,uint256)":"infinite","calculateAvailableBorrows(uint256,uint256,uint256)":"infinite","calculateUserAccountData(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"GenericLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements protocol-level logic to calculate and validate the state of a user\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/GenericLogic.sol\":\"GenericLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements protocol-level logic to calculate and validate the state of a user","version":1}}},"contracts/protocol/libraries/logic/IsolationModeLogic.sol":{"IsolationModeLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"IsolationModeLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d2215214a28d82a7052ab556d4e217d1af346b5c73c03fd2d835b0da1773a2ab64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0x21 MSTORE EQ LOG2 DUP14 DUP3 0xA7 SDIV 0x2A 0xB5 JUMP 0xD4 0xE2 OR 0xD1 0xAF CALLVALUE PUSH12 0x5C73C03FD2D835B0DA1773A2 0xAB PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"512:2218:99:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;512:2218:99;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d2215214a28d82a7052ab556d4e217d1af346b5c73c03fd2d835b0da1773a2ab64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0x21 MSTORE EQ LOG2 DUP14 DUP3 0xA7 SDIV 0x2A 0xB5 JUMP 0xD4 0xE2 OR 0xD1 0xAF CALLVALUE PUSH12 0x5C73C03FD2D835B0DA1773A2 0xAB PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"512:2218:99:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"updateIsolatedDebtIfIsolated(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveCache memory,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IsolationModeLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements the base logic for handling repayments for assets borrowed in isolation mode\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":\"IsolationModeLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements the base logic for handling repayments for assets borrowed in isolation mode","version":1}}},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"inputs":[],"name":"CLOSE_FACTOR_HF_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LIQUIDATION_CLOSE_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)":{"details":"Emits the `LiquidationCall()` event","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the liquidation function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","usersConfig":"The users configuration mapping that track the supplied/borrowed assets"}}},"stateVariables":{"CLOSE_FACTOR_HF_THRESHOLD":{"details":"This constant represents below which health factor value it is possible to liquidate an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`. A value of 0.95e18 results in 0.95"},"DEFAULT_LIQUIDATION_CLOSE_FACTOR":{"details":"Default percentage of borrower's debt to be repaid in a liquidation.Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD` Expressed in bps, a value of 0.5e4 results in 50.00%"},"MAX_LIQUIDATION_CLOSE_FACTOR":{"details":"Maximum percentage of borrower's debt to be repaid in a liquidationPercentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD` Expressed in bps, a value of 1e4 results in 100.00%"}},"title":"LiquidationLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"61402261003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c806383c1087d14610050578063a18964a514610072578063d246754414610093575b600080fd5b81801561005c57600080fd5b5061007061006b366004613aea565b61009c565b005b610081670d2f13f7789f000081565b60405190815260200160405180910390f35b61008161271081565b6100a46138e5565b60408083015173ffffffffffffffffffffffffffffffffffffffff9081166000908152602089815283822060608701518416835284832060808801519094168352908890529290206100f582610832565b6101608501819052610108908390610a4b565b61018e8989886040518060a001604052808660405180602001604052908160008201548152505081526020018a6000015181526020018a6080015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60e0015160ff16815250610ad6565b5060c089018190526101608901516101ad955093508992509050611040565b86602001876040018860600183815250838152508381525050505061021b818460405180608001604052808861016001518152602001886040015181526020018860c00151815260200189610100015173ffffffffffffffffffffffffffffffffffffffff168152506110c6565b610226868487611575565b60a088015273ffffffffffffffffffffffffffffffffffffffff908116610120880152908116610100870152908116610140860181905260808701516040517f70a0823100000000000000000000000000000000000000000000000000000000815292166004830152906370a0823190602401602060405180830381865afa1580156102b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102da9190613bf3565b808552610160850151610100860151610120870151606088015160a089015160c08b015161030f968a969594939290916116a9565b60e08701526060860181905260808601919091526040850151141561035d57600382015461035d9082907501000000000000000000000000000000000000000000900461ffff166000611a09565b835160e085015160808601516103739190613c3b565b141561040b5760038301546103a89082907501000000000000000000000000000000000000000000900461ffff166000611a9e565b846080015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b6104158585611b27565b6101608401516060808701519086015161043492859290916000611db8565b61044a89898387610160015188606001516120f9565b8460a001511561046757610462898989868989612301565b610472565b61047283868661250d565b60e08401511561067c576000610487846125e5565b905060006104a2828760e0015161267c90919063ffffffff16565b61014087015160808901516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350600092911690631da24f3e90602401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190613bf3565b90508082111561055d5761055781846126bb565b60e08801525b86610140015173ffffffffffffffffffffffffffffffffffffffff1663f866c319896080015189610140015173ffffffffffffffffffffffffffffffffffffffff1663ae1673356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190613c53565b8a60e001516040518463ffffffff1660e01b81526004016106469392919073ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050505050505b6106bb338561016001516101e001518660600151886060015173ffffffffffffffffffffffffffffffffffffffff16612712909392919063ffffffff16565b6101608401516101e00151608086015160608601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff92831660248201526044810191909152911690636fd9767690606401600060405180830381600087803b15801561074757600080fd5b505af115801561075b573d6000803e3d6000fd5b50505050846080015173ffffffffffffffffffffffffffffffffffffffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff167fe413a321e8681d831f4dbccbca790d2952b56f977908e45be37335533e00528687606001518860800151338b60a0015160405161081f9493929190938452602084019290925273ffffffffffffffffffffffffffffffffffffffff1660408301521515606082015260800190565b60405180910390a4505050505050505050565b61083a61398d565b61084261398d565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190613bf3565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156109f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a189190613c70565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610a7a575050565b610a8482826127ed565b610a8e828261290f565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600080600080600080610aec8760000151511590565b15610b285750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081611033565b610bd760405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610c1c57608088015160ff16600090815260208a9052604090206060890151610c099190612a8f565b6101808401526101c08301526101a08201525b87602001518160c001511015610f3b5760c08101518851610c3c91612b6e565b610c505760c0810180516001019052610c1c565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610c965760c0810180516001019052610c1c565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610d2c5750816101e00151896080015160ff16145b610dd05760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190613bf3565b610dd7565b8161018001515b825260a082015115801590610df7575060c08201518951610df791612bf6565b15610ee757610e1489604001518284600001518560200151612c7a565b6040830181905261010083018051610e2d908390613c3b565b90525060808901516101e0830151610e489160ff1690612d55565b1515610240830152608082015115610e9e57816102400151610e6e578160800151610e75565b816101a001515b8260400151610e849190613cbb565b8261014001818151610e969190613c3b565b905250610ea7565b60016102208301525b816102400151610ebb578160a00151610ec2565b816101c001515b8260400151610ed19190613cbb565b8261016001818151610ee39190613c3b565b9052505b60c08201518951610ef791612d66565b15610f2a57610f1489604001518284600001518560200151612de8565b8261012001818151610f269190613c3b565b9052505b5060c0810180516001019052610c1c565b610100810151610f4c576000610f67565b80610100015181610140015181610f6557610f65613cf8565b045b610140820152610100810151610f7e576000610f99565b80610100015181610160015181610f9757610f97613cf8565b045b61016082015261012081015115610fdb57610fd6816101200151610fd0836101600151846101000151612f6890919063ffffffff16565b90612fab565b610ffd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b6000806000806000611056876080015189612fe2565b909250905060006110678284613c3b565b90506000670d2f13f7789f0000881161108257612710611086565b6113885b905060006110948383612f68565b90506000818b60200151116110ad578a602001516110af565b815b949850929650929450505050505b93509350939050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260408051602081019091528354815261114c9051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b1515602086015250505015801580835283516101c0015151671000000000000000811615156060850152670100000000000000161515604084015290611193575080604001515b6040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b60405180910390fd5b50806020015115801561121f57508060600151155b6040518060400160405280600281526020017f32390000000000000000000000000000000000000000000000000000000000008152509061128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50606082015173ffffffffffffffffffffffffffffffffffffffff1615806112c05750670d2f13f7789f00008260400151105b806113395750816060015173ffffffffffffffffffffffffffffffffffffffff16637a5d20ea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190613d9a565b6040518060400160405280600281526020017f3539000000000000000000000000000000000000000000000000000000000000815250906113a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50670de0b6b3a76400008260400151106040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525090611425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50604080516020810190915283549081905260101c61ffff161580159061148157506003830154604080516020810190915285548152611481917501000000000000000000000000000000000000000000900461ffff16612bf6565b15156080820181905260408051808201909152600281527f34360000000000000000000000000000000000000000000000000000000000006020820152906114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b508160200151600014156040518060400160405280600281526020017f34370000000000000000000000000000000000000000000000000000000000008152509061156e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b5050505050565b6004820154604080516020808201835285549182905291840151606085015160e086015160009586958695869573ffffffffffffffffffffffffffffffffffffffff90931694911c61ffff169260ff16156116985760e08901805160ff908116600090815260208e815260409182902054935182519182019092528d5490819052660100000000000090930473ffffffffffffffffffffffffffffffffffffffff169261162c929182169160a89190911c16612d55565b156116765760e08a015160ff16600090815260208d90526040902054640100000000900461ffff16935073ffffffffffffffffffffffffffffffffffffffff811615611676578092505b73ffffffffffffffffffffffffffffffffffffffff811615611696578091505b505b929a90995091975095509350505050565b6000806000611719604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015286169063b3596f0790602401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190613bf3565b81526040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015286169063b3596f0790602401602060405180830381865afa158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190613bf3565b6020828101919091526040805191820190528c549081905260301c60ff1660c08201526101c08b01515160301c60ff1660a0820181905260c0820151600a90810a60e08401520a61010082015260408051602081019091528c549081905260981c61ffff1661016082015261010081015181516118b89190613cbb565b8160e001518983602001516118cd9190613cbb565b6118d79190613cbb565b6118e19190613db7565b606082018190526118f29087612f68565b6040820181905287101561195f57610120810187905260e081015160208201516119549188916119229190613cbb565b610100840151610120850151855161193a9190613cbb565b6119449190613cbb565b61194e9190613db7565b9061311f565b610140820152611973565b604081015161012082015261014081018890525b610160810151156119e55761012081015161198e908761311f565b81610120015161199e9190613df2565b608082018190526101608201516119b59190612f68565b61018082018190526101208201516119cd9190613df2565b816101400151826101800151935093509350506119fb565b8061012001518161014001516000935093509350505b985098509895505050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50600182811b1b8115611a9057835481178455611a98565b835481191684555b50505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611b0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50600182811b81011b8115611a9057835481178455611a98565b8060600151816020015110611bff5761016081015161022081015160808401516060840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190613bf3565b610160820151602001525050565b602081015115611ccf5761016081015161022081015160808401516020840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190613bf3565b610160820151602001525b806101600151610200015173ffffffffffffffffffffffffffffffffffffffff16639dc29fac836080015183602001518460600151611d0e9190613df2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440160408051808303816000875af1158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190613e09565b61016083015160a081019190915260c001525b5050565b611de36040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151611df7916126bb565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991611f589190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f999190613e2d565b60408401526020830152808252611faf9061314a565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611ff29061314a565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516120439061314a565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051602081019091528354815260009081906121189088886131f0565b509150915081156122f85773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff909116919061219a9060029060301c60ff166121809190613df2565b61218b90600a613f7b565b6121959087613db7565b61314a565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161161224a5773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a26122f5565b60006122568284613f87565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a2505b50505b50505050505050565b6101408101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123979190613bf3565b610140830151608080860151908501516040517ff866c31900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201523360248201526044810191909152929350169063f866c31990606401600060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050505080600014156122f85733600090815260208681526040918290208251918201909252855481526004860154612488918a918a91859173ffffffffffffffffffffffffffffffffffffffff166132a5565b156125035760038501546124bc9082907501000000000000000000000000000000000000000000900461ffff166001611a9e565b6040808501519051339173ffffffffffffffffffffffffffffffffffffffff16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a35b5050505050505050565b600061251884610832565b90506125248482610a4b565b6040830151608083015161253f918691849190600090611db8565b610140820151608080850151908401516101008401516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201523360248201526044810192909252606482015291169063d7020d0a90608401600060405180830381600087803b1580156125d157600080fd5b505af1158015612503573d6000803e3d6000fd5b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561262b575050600101546fffffffffffffffffffffffffffffffff1690565b600183015461266f906fffffffffffffffffffffffffffffffff808216916126699170010000000000000000000000000000000090910416846134e7565b906126bb565b9392505050565b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126a057600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff839004841115176126f057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af161277d573d6000803e3d6000fd5b5061278785613524565b61156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401611201565b6101608101511561287d57600061280e8261016001518361024001516134e7565b90506128278260e00151826126bb90919063ffffffff16565b61010083018190526128389061314a565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611db457600061289a8261018001518361024001516135ee565b90506128b4826101200151826126bb90919063ffffffff16565b61014083018190526128c59061314a565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b6129486040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161295757505050565b6101208201518251612968916126bb565b6020820152610140820151825161297e916126bb565b604082015260608201516102608301516102408401516129a692919064ffffffffff166135f7565b6060820181905260408301516129bb916126bb565b8082526020820151608084015160408401516129d79190613c3b565b6129e19190613df2565b6129eb9190613df2565b608082018190526101a0830151612a029190612f68565b60a0820181905215612a8a57612a2d6121958361010001518360a0015161267c90919063ffffffff16565b600884018054600090612a539084906fffffffffffffffffffffffffffffffff16613fb8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015612b53576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015612b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b509190613bf3565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612be0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50508151600182901b1c60031615155b92915050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612c68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50509051600191821b82011c16151590565b600080612c86856125e5565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792612d2c928692911690631da24f3e90602401602060405180830381865afa158015612d08573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126699190613bf3565b612d369190613cbb565b9050838181612d4757612d47613cf8565b04925050505b949350505050565b6000821580159061266f5750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e829190613bf3565b90508015612ea057612e9d612e968661373e565b82906126bb565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015612f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f369190613bf3565b612f409082613c3b565b9050612f4c8185613cbb565b9050828181612f5d57612f5d613cf8565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517612f9d57600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715612fcb57600080fd5b50670de0b6b3a76400009190910260028204010490565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa158015613059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307d9190613bf3565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa1580156130f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131149190613bf3565b915091509250929050565b600081156127106002840419048411171561313957600080fd5b506127109190910260028204010490565b60006fffffffffffffffffffffffffffffffff8211156131ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401611201565b5090565b60008060006131fe866137c2565b1561329557600061322f877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa613806565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015613291576001955090935091506110bd9050565b5050505b5060009586955085945092505050565b815160009060d41c64ffffffffff16156134cf5760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332a9190613c53565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133989190613c53565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134099190613c53565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa15801561349b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bf9190613d9a565b6134cd5760009150506134de565b505b6134db8686868661384a565b90505b95945050505050565b6000806134fb64ffffffffff841642613df2565b6135059085613cbb565b6301e1338090049050612d4d816b033b2e3c9fd0803ce8000000613c3b565b6000613564565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156135a357602081146135dd5761359e7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f61352b565b612676565b823b6135d4576135d47f475076323a206e6f74206120636f6e7472616374000000000000000000000000601461352b565b60019150612676565b3d6000803e50506000511515919050565b600061266f8383425b60008061360b64ffffffffff851684613df2565b905080613627576b033b2e3c9fd0803ce800000091505061266f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161365d576000613662565b600285035b925066038882915c40006136768a806126bb565b8161368357613683613cf8565b0491506301e13380613695838b6126bb565b816136a2576136a2613cf8565b0490506000826136b28688613cbb565b6136bc9190613cbb565b600290049050600082856136d0888a613cbb565b6136da9190613cbb565b6136e49190613cbb565b60069004905080826301e133806136fb8a8f613cbb565b6137059190613db7565b61371b906b033b2e3c9fd0803ce8000000613c3b565b6137259190613c3b565b61372f9190613c3b565b9b9a5050505050505050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613784575050600201546fffffffffffffffffffffffffffffffff1690565b600283015461266f906fffffffffffffffffffffffffffffffff808216916126699170010000000000000000000000000000000090910416846135ee565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa16801580159061266f57506137fe600182613df2565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156134de57600101613835565b6000613858825161ffff1690565b61386457506000612d4d565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166138a357506001612d4d565b6040805160208101909152835481526000906138c09087876131f0565b50509050801580156138db5750825160d41c64ffffffffff16155b9695505050505050565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200161398861398d565b905290565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613a116040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610120810167ffffffffffffffff81118282101715613a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b73ffffffffffffffffffffffffffffffffffffffff81168114613aad57600080fd5b50565b8035613abb81613a8b565b919050565b8015158114613aad57600080fd5b8035613abb81613ac0565b803560ff81168114613abb57600080fd5b60008060008060008587036101a0811215613b0457600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083011215613b4f57600080fd5b613b57613a3a565b91506080880135825260a08801356020830152613b7660c08901613ab0565b6040830152613b8760e08901613ab0565b6060830152610100613b9a818a01613ab0565b6080840152613baa828a01613ace565b60a0840152613bbc6101408a01613ab0565b60c0840152613bce6101608a01613ad9565b60e0840152613be06101808a01613ab0565b9083015250949793965091945092919050565b600060208284031215613c0557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613c4e57613c4e613c0c565b500190565b600060208284031215613c6557600080fd5b815161266f81613a8b565b60008060008060808587031215613c8657600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613cb057600080fd5b939692955090935050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cf357613cf3613c0c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208083528351808285015260005b81811015613d5457858101830151858201604001528201613d38565b81811115613d66576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215613dac57600080fd5b815161266f81613ac0565b600082613ded577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015613e0457613e04613c0c565b500390565b60008060408385031215613e1c57600080fd5b505080516020909101519092909150565b600080600060608486031215613e4257600080fd5b8351925060208401519150604084015190509250925092565b600181815b80851115613eb457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613e9a57613e9a613c0c565b80851615613ea757918102915b93841c9390800290613e60565b509250929050565b600082613ecb57506001612bf0565b81613ed857506000612bf0565b8160018114613eee5760028114613ef857613f14565b6001915050612bf0565b60ff841115613f0957613f09613c0c565b50506001821b612bf0565b5060208310610133831016604e8410600b8410161715613f37575081810a612bf0565b613f418383613e5b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613f7357613f73613c0c565b029392505050565b600061266f8383613ebc565b60006fffffffffffffffffffffffffffffffff83811690831681811015613fb057613fb0613c0c565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613fe357613fe3613c0c565b0194935050505056fea264697066735822122055058f30d079326d08acced39bc803044f67c109a7c9f8f4943e229d773970f364736f6c634300080a0033","opcodes":"PUSH2 0x4022 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x83C1087D EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xA18964A5 EQ PUSH2 0x72 JUMPI DUP1 PUSH4 0xD2467544 EQ PUSH2 0x93 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x3AEA JUMP JUMPDEST PUSH2 0x9C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x81 PUSH8 0xD2F13F7789F0000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x81 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0xA4 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE DUP4 DUP3 KECCAK256 PUSH1 0x60 DUP8 ADD MLOAD DUP5 AND DUP4 MSTORE DUP5 DUP4 KECCAK256 PUSH1 0x80 DUP9 ADD MLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP1 DUP9 SWAP1 MSTORE SWAP3 SWAP1 KECCAK256 PUSH2 0xF5 DUP3 PUSH2 0x832 JUMP JUMPDEST PUSH2 0x160 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x108 SWAP1 DUP4 SWAP1 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x18E DUP10 DUP10 DUP9 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0xC0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0xE0 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0xAD6 JUMP JUMPDEST POP PUSH1 0xC0 DUP10 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP10 ADD MLOAD PUSH2 0x1AD SWAP6 POP SWAP4 POP DUP10 SWAP3 POP SWAP1 POP PUSH2 0x1040 JUMP JUMPDEST DUP7 PUSH1 0x20 ADD DUP8 PUSH1 0x40 ADD DUP9 PUSH1 0x60 ADD DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP POP POP POP PUSH2 0x21B DUP2 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH2 0x160 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x10C6 JUMP JUMPDEST PUSH2 0x226 DUP7 DUP5 DUP8 PUSH2 0x1575 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x120 DUP9 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x100 DUP8 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DA SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x100 DUP7 ADD MLOAD PUSH2 0x120 DUP8 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0xA0 DUP10 ADD MLOAD PUSH1 0xC0 DUP12 ADD MLOAD PUSH2 0x30F SWAP7 DUP11 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP1 SWAP2 PUSH2 0x16A9 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP6 ADD MLOAD EQ ISZERO PUSH2 0x35D JUMPI PUSH1 0x3 DUP3 ADD SLOAD PUSH2 0x35D SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x1A09 JUMP JUMPDEST DUP4 MLOAD PUSH1 0xE0 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x373 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST EQ ISZERO PUSH2 0x40B JUMPI PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0x3A8 SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH2 0x415 DUP6 DUP6 PUSH2 0x1B27 JUMP JUMPDEST PUSH2 0x160 DUP5 ADD MLOAD PUSH1 0x60 DUP1 DUP8 ADD MLOAD SWAP1 DUP7 ADD MLOAD PUSH2 0x434 SWAP3 DUP6 SWAP3 SWAP1 SWAP2 PUSH1 0x0 PUSH2 0x1DB8 JUMP JUMPDEST PUSH2 0x44A DUP10 DUP10 DUP4 DUP8 PUSH2 0x160 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH2 0x20F9 JUMP JUMPDEST DUP5 PUSH1 0xA0 ADD MLOAD ISZERO PUSH2 0x467 JUMPI PUSH2 0x462 DUP10 DUP10 DUP10 DUP7 DUP10 DUP10 PUSH2 0x2301 JUMP JUMPDEST PUSH2 0x472 JUMP JUMPDEST PUSH2 0x472 DUP4 DUP7 DUP7 PUSH2 0x250D JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MLOAD ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 PUSH2 0x487 DUP5 PUSH2 0x25E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4A2 DUP3 DUP8 PUSH1 0xE0 ADD MLOAD PUSH2 0x267C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP8 ADD MLOAD PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x543 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x55D JUMPI PUSH2 0x557 DUP2 DUP5 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE JUMPDEST DUP7 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF866C319 DUP10 PUSH1 0x80 ADD MLOAD DUP10 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE167335 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5F7 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST DUP11 PUSH1 0xE0 ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x646 SWAP4 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x660 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x674 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMPDEST PUSH2 0x6BB CALLER DUP6 PUSH2 0x160 ADD MLOAD PUSH2 0x1E0 ADD MLOAD DUP7 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2712 SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x160 DUP5 ADD MLOAD PUSH2 0x1E0 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x747 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x75B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE413A321E8681D831F4DBCCBCA790D2952B56F977908E45BE37335533E005286 DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD CALLER DUP12 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x81F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x83A PUSH2 0x398D JUMP JUMPDEST PUSH2 0x842 PUSH2 0x398D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x96F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x993 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA18 SWAP2 SWAP1 PUSH2 0x3C70 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0xA7A JUMPI POP POP JUMP JUMPDEST PUSH2 0xA84 DUP3 DUP3 PUSH2 0x27ED JUMP JUMPDEST PUSH2 0xA8E DUP3 DUP3 PUSH2 0x290F JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xAEC DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0xB28 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x1033 JUMP JUMPDEST PUSH2 0xBD7 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC1C JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0xC09 SWAP2 SWAP1 PUSH2 0x2A8F JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0xF3B JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0xC3C SWAP2 PUSH2 0x2B6E JUMP JUMPDEST PUSH2 0xC50 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xC96 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD2C JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0xDD0 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDA7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDCB SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0xDD7 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xDF7 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xDF7 SWAP2 PUSH2 0x2BF6 JUMP JUMPDEST ISZERO PUSH2 0xEE7 JUMPI PUSH2 0xE14 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x2C7A JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0xE2D SWAP1 DUP4 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0xE48 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x2D55 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0xE9E JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xE6E JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xE75 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xE84 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0xE96 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xEA7 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xEBB JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0xEC2 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xED1 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0xEE3 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xEF7 SWAP2 PUSH2 0x2D66 JUMP JUMPDEST ISZERO PUSH2 0xF2A JUMPI PUSH2 0xF14 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x2DE8 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0xF26 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xF4C JUMPI PUSH1 0x0 PUSH2 0xF67 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0xF65 JUMPI PUSH2 0xF65 PUSH2 0x3CF8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xF7E JUMPI PUSH1 0x0 PUSH2 0xF99 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0xF97 JUMPI PUSH2 0xF97 PUSH2 0x3CF8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0xFDB JUMPI PUSH2 0xFD6 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0xFD0 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x2F68 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2FAB JUMP JUMPDEST PUSH2 0xFFD JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1056 DUP8 PUSH1 0x80 ADD MLOAD DUP10 PUSH2 0x2FE2 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0x1067 DUP3 DUP5 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH8 0xD2F13F7789F0000 DUP9 GT PUSH2 0x1082 JUMPI PUSH2 0x2710 PUSH2 0x1086 JUMP JUMPDEST PUSH2 0x1388 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1094 DUP4 DUP4 PUSH2 0x2F68 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP12 PUSH1 0x20 ADD MLOAD GT PUSH2 0x10AD JUMPI DUP11 PUSH1 0x20 ADD MLOAD PUSH2 0x10AF JUMP JUMPDEST DUP2 JUMPDEST SWAP5 SWAP9 POP SWAP3 SWAP7 POP SWAP3 SWAP5 POP POP POP POP POP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH2 0x114C SWAP1 MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE POP POP POP ISZERO DUP1 ISZERO DUP1 DUP4 MSTORE DUP4 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH1 0x40 DUP5 ADD MSTORE SWAP1 PUSH2 0x1193 JUMPI POP DUP1 PUSH1 0x40 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x120A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH1 0x20 ADD MLOAD ISZERO DUP1 ISZERO PUSH2 0x121F JUMPI POP DUP1 PUSH1 0x60 ADD MLOAD ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x128D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO DUP1 PUSH2 0x12C0 JUMPI POP PUSH8 0xD2F13F7789F0000 DUP3 PUSH1 0x40 ADD MLOAD LT JUMPDEST DUP1 PUSH2 0x1339 JUMPI POP DUP2 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7A5D20EA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1315 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1339 SWAP2 SWAP1 PUSH2 0x3D9A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x13A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP3 PUSH1 0x40 ADD MLOAD LT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3435000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1425 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x10 SHR PUSH2 0xFFFF AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1481 JUMPI POP PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH2 0x1481 SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x2BF6 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3436000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x14F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x0 EQ ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3437000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x156E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP6 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP2 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0x0 SWAP6 DUP7 SWAP6 DUP7 SWAP6 DUP7 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP5 SWAP2 SHR PUSH2 0xFFFF AND SWAP3 PUSH1 0xFF AND ISZERO PUSH2 0x1698 JUMPI PUSH1 0xE0 DUP10 ADD DUP1 MLOAD PUSH1 0xFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP15 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP4 MLOAD DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP14 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP4 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 PUSH2 0x162C SWAP3 SWAP2 DUP3 AND SWAP2 PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHR AND PUSH2 0x2D55 JUMP JUMPDEST ISZERO PUSH2 0x1676 JUMPI PUSH1 0xE0 DUP11 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP14 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0x100000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1676 JUMPI DUP1 SWAP3 POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1696 JUMPI DUP1 SWAP2 POP JUMPDEST POP JUMPDEST SWAP3 SWAP11 SWAP1 SWAP10 POP SWAP2 SWAP8 POP SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1719 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1785 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17A9 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1817 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x183B SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 ADD SWAP1 MSTORE DUP13 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1C0 DUP12 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0xA SWAP1 DUP2 EXP PUSH1 0xE0 DUP5 ADD MSTORE EXP PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP13 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD DUP2 MLOAD PUSH2 0x18B8 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD MLOAD DUP10 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x18CD SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x18D7 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x18E1 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x18F2 SWAP1 DUP8 PUSH2 0x2F68 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE DUP8 LT ISZERO PUSH2 0x195F JUMPI PUSH2 0x120 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1954 SWAP2 DUP9 SWAP2 PUSH2 0x1922 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH2 0x120 DUP6 ADD MLOAD DUP6 MLOAD PUSH2 0x193A SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x1944 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x194E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 PUSH2 0x311F JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x1973 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x140 DUP2 ADD DUP9 SWAP1 MSTORE JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x19E5 JUMPI PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x198E SWAP1 DUP8 PUSH2 0x311F JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x199E SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD MLOAD PUSH2 0x19B5 SWAP2 SWAP1 PUSH2 0x2F68 JUMP JUMPDEST PUSH2 0x180 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD MLOAD PUSH2 0x19CD SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD MLOAD DUP3 PUSH2 0x180 ADD MLOAD SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x19FB JUMP JUMPDEST DUP1 PUSH2 0x120 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP JUMPDEST SWAP9 POP SWAP9 POP SWAP9 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x1A78 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL SHL DUP2 ISZERO PUSH2 0x1A90 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x1A98 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x1B0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x1A90 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x1A98 JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT PUSH2 0x1BFF JUMPI PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x220 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x140 SWAP1 SWAP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP5 ADD MSTORE AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BF1 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x160 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x1CCF JUMPI PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x220 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x140 SWAP1 SWAP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP5 ADD MSTORE AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CC4 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x160 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST DUP1 PUSH2 0x160 ADD MLOAD PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC DUP4 PUSH1 0x80 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x1D0E SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DA1 SWAP2 SWAP1 PUSH2 0x3E09 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MLOAD PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 ADD MSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1DE3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1DF7 SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x1F58 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F99 SWAP2 SWAP1 PUSH2 0x3E2D JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1FAF SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x1FF2 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x2043 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x2118 SWAP1 DUP9 DUP9 PUSH2 0x31F0 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x22F8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 PUSH2 0x219A SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x2180 SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x218B SWAP1 PUSH1 0xA PUSH2 0x3F7B JUMP JUMPDEST PUSH2 0x2195 SWAP1 DUP8 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x314A JUMP JUMPDEST SWAP1 POP DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT PUSH2 0x224A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x22F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2256 DUP3 DUP5 PUSH2 0x3F87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP14 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 DUP6 OR SWAP1 SSTORE SWAP1 MLOAD DUP4 DUP2 MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x140 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2373 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2397 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x80 DUP1 DUP7 ADD MLOAD SWAP1 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF866C31900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP4 POP AND SWAP1 PUSH4 0xF866C319 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2434 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x22F8 JUMPI CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH1 0x4 DUP7 ADD SLOAD PUSH2 0x2488 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP6 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x32A5 JUMP JUMPDEST ISZERO PUSH2 0x2503 JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0x24BC SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x1A9E JUMP JUMPDEST PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 MLOAD CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2518 DUP5 PUSH2 0x832 JUMP JUMPDEST SWAP1 POP PUSH2 0x2524 DUP5 DUP3 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x253F SWAP2 DUP7 SWAP2 DUP5 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x1DB8 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x80 DUP1 DUP6 ADD MLOAD SWAP1 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2503 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x262B JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x266F SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x2669 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x34E7 JUMP JUMPDEST SWAP1 PUSH2 0x26BB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x26F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x277D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x2787 DUP6 PUSH2 0x3524 JUMP JUMPDEST PUSH2 0x156E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1201 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x287D JUMPI PUSH1 0x0 PUSH2 0x280E DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x34E7 JUMP JUMPDEST SWAP1 POP PUSH2 0x2827 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x26BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x2838 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1DB4 JUMPI PUSH1 0x0 PUSH2 0x289A DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x35EE JUMP JUMPDEST SWAP1 POP PUSH2 0x28B4 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x26BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x28C5 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x2948 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x2957 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x2968 SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x297E SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x29A6 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x35F7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x29BB SWAP2 PUSH2 0x26BB JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x29D7 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x29E1 SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x29EB SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x2A02 SWAP2 SWAP1 PUSH2 0x2F68 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x2A8A JUMPI PUSH2 0x2A2D PUSH2 0x2195 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x267C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2A53 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3FB8 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x2B53 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B2C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B50 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2BE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x1 DUP3 SWAP1 SHL SHR PUSH1 0x3 AND ISZERO ISZERO JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2C68 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C86 DUP6 PUSH2 0x25E5 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x2D2C SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2669 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x2D36 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x2D47 JUMPI PUSH2 0x2D47 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x266F JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2DD8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E82 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2EA0 JUMPI PUSH2 0x2E9D PUSH2 0x2E96 DUP7 PUSH2 0x373E JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x26BB JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F36 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x2F40 SWAP1 DUP3 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 POP PUSH2 0x2F4C DUP2 DUP6 PUSH2 0x3CBB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x2F5D JUMPI PUSH2 0x2F5D PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x2F9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2FCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3059 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x307D SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3114 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x2710 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x3139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x31EC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1201 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x31FE DUP7 PUSH2 0x37C2 JUMP JUMPDEST ISZERO PUSH2 0x3295 JUMPI PUSH1 0x0 PUSH2 0x322F DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x3291 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x10BD SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP6 DUP7 SWAP6 POP DUP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x34CF JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3306 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x332A SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3374 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3398 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3409 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x349B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34BF SWAP2 SWAP1 PUSH2 0x3D9A JUMP JUMPDEST PUSH2 0x34CD JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x34DE JUMP JUMPDEST POP JUMPDEST PUSH2 0x34DB DUP7 DUP7 DUP7 DUP7 PUSH2 0x384A JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x34FB PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x3505 SWAP1 DUP6 PUSH2 0x3CBB JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x2D4D DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C3B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3564 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x35A3 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x35DD JUMPI PUSH2 0x359E PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x352B JUMP JUMPDEST PUSH2 0x2676 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x35D4 JUMPI PUSH2 0x35D4 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x352B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2676 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY POP POP PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x266F DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x360B PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x3DF2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3627 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x266F JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x365D JUMPI PUSH1 0x0 PUSH2 0x3662 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3676 DUP11 DUP1 PUSH2 0x26BB JUMP JUMPDEST DUP2 PUSH2 0x3683 JUMPI PUSH2 0x3683 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3695 DUP4 DUP12 PUSH2 0x26BB JUMP JUMPDEST DUP2 PUSH2 0x36A2 JUMPI PUSH2 0x36A2 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x36B2 DUP7 DUP9 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36BC SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x36D0 DUP9 DUP11 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36DA SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36E4 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x36FB DUP11 DUP16 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x3705 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x371B SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x3725 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x372F SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3784 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x266F SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x2669 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x35EE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x266F JUMPI POP PUSH2 0x37FE PUSH1 0x1 DUP3 PUSH2 0x3DF2 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x34DE JUMPI PUSH1 0x1 ADD PUSH2 0x3835 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3858 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3864 JUMPI POP PUSH1 0x0 PUSH2 0x2D4D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x38A3 JUMPI POP PUSH1 0x1 PUSH2 0x2D4D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x38C0 SWAP1 DUP8 DUP8 PUSH2 0x31F0 JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x38DB JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3988 PUSH2 0x398D JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3A11 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3A85 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3ABB DUP2 PUSH2 0x3A8B JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3ABB DUP2 PUSH2 0x3AC0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3ABB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x1A0 DUP2 SLT ISZERO PUSH2 0x3B04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x120 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x3B4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3B57 PUSH2 0x3A3A JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD DUP3 MSTORE PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x3B76 PUSH1 0xC0 DUP10 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3B87 PUSH1 0xE0 DUP10 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x3B9A DUP2 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x3BAA DUP3 DUP11 ADD PUSH2 0x3ACE JUMP JUMPDEST PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3BBC PUSH2 0x140 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x3BCE PUSH2 0x160 DUP11 ADD PUSH2 0x3AD9 JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x3BE0 PUSH2 0x180 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE POP SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 POP SWAP3 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3C4E JUMPI PUSH2 0x3C4E PUSH2 0x3C0C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x266F DUP2 PUSH2 0x3A8B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3C86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3CF3 JUMPI PUSH2 0x3CF3 PUSH2 0x3C0C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D54 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3D38 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3D66 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x266F DUP2 PUSH2 0x3AC0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3DED JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3E04 JUMPI PUSH2 0x3E04 PUSH2 0x3C0C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x3EB4 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3E9A JUMPI PUSH2 0x3E9A PUSH2 0x3C0C JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x3EA7 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x3E60 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3ECB JUMPI POP PUSH1 0x1 PUSH2 0x2BF0 JUMP JUMPDEST DUP2 PUSH2 0x3ED8 JUMPI POP PUSH1 0x0 PUSH2 0x2BF0 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3EEE JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3EF8 JUMPI PUSH2 0x3F14 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x2BF0 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3F09 JUMPI PUSH2 0x3F09 PUSH2 0x3C0C JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x2BF0 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3F37 JUMPI POP DUP2 DUP2 EXP PUSH2 0x2BF0 JUMP JUMPDEST PUSH2 0x3F41 DUP4 DUP4 PUSH2 0x3E5B JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3F73 JUMPI PUSH2 0x3F73 PUSH2 0x3C0C JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x266F DUP4 DUP4 PUSH2 0x3EBC JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3FB0 JUMPI PUSH2 0x3FB0 PUSH2 0x3C0C JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3FE3 JUMPI PUSH2 0x3FE3 PUSH2 0x3C0C JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE SDIV DUP16 ADDRESS 0xD0 PUSH26 0x326D08ACCED39BC803044F67C109A7C9F8F4943E229D773970F3 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1399:19850:100:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1399:19850:100;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@CLOSE_FACTOR_HF_THRESHOLD_18675":{"entryPoint":null,"id":18675,"parameterSlots":0,"returnSlots":0},"@MAX_LIQUIDATION_CLOSE_FACTOR_18671":{"entryPoint":null,"id":18671,"parameterSlots":0,"returnSlots":0},"@_accrueToTreasury_20746":{"entryPoint":10511,"id":20746,"parameterSlots":2,"returnSlots":0},"@_burnCollateralATokens_19141":{"entryPoint":9485,"id":19141,"parameterSlots":3,"returnSlots":0},"@_burnDebtTokens_19327":{"entryPoint":6951,"id":19327,"parameterSlots":2,"returnSlots":0},"@_calculateAvailableCollateralToLiquidate_19764":{"entryPoint":5801,"id":19764,"parameterSlots":8,"returnSlots":3},"@_calculateDebt_19395":{"entryPoint":4160,"id":19395,"parameterSlots":3,"returnSlots":3},"@_getConfigurationData_19508":{"entryPoint":5493,"id":19508,"parameterSlots":3,"returnSlots":4},"@_getFirstAssetIdByMask_14544":{"entryPoint":14342,"id":14544,"parameterSlots":2,"returnSlots":1},"@_getUserBalanceInBaseCurrency_18448":{"entryPoint":11386,"id":18448,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_18405":{"entryPoint":11752,"id":18405,"parameterSlots":4,"returnSlots":1},"@_liquidateATokens_19235":{"entryPoint":8961,"id":19235,"parameterSlots":6,"returnSlots":0},"@_updateIndexes_20827":{"entryPoint":10221,"id":20827,"parameterSlots":2,"returnSlots":0},"@cache_20970":{"entryPoint":2098,"id":20970,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_23673":{"entryPoint":13815,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":13806,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":13543,"id":23550,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_18307":{"entryPoint":2774,"id":18307,"parameterSlots":4,"returnSlots":6},"@executeLiquidationCall_19086":{"entryPoint":156,"id":19086,"parameterSlots":5,"returnSlots":0},"@getDebtCeiling_13668":{"entryPoint":null,"id":13668,"parameterSlots":1,"returnSlots":1},"@getDecimals_13110":{"entryPoint":null,"id":13110,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_13824":{"entryPoint":null,"id":13824,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_17188":{"entryPoint":10895,"id":17188,"parameterSlots":2,"returnSlots":3},"@getFlags_13934":{"entryPoint":null,"id":13934,"parameterSlots":1,"returnSlots":5},"@getIsolationModeState_14439":{"entryPoint":12784,"id":14439,"parameterSlots":3,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":13604,"id":117,"parameterSlots":1,"returnSlots":1},"@getLiquidationBonus_13058":{"entryPoint":null,"id":13058,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_13720":{"entryPoint":null,"id":13720,"parameterSlots":1,"returnSlots":1},"@getLiquidationThreshold_13006":{"entryPoint":null,"id":13006,"parameterSlots":1,"returnSlots":1},"@getLtv_12954":{"entryPoint":null,"id":12954,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_20345":{"entryPoint":14142,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":9701,"id":20309,"parameterSlots":1,"returnSlots":1},"@getParams_14000":{"entryPoint":null,"id":14000,"parameterSlots":1,"returnSlots":6},"@getReserveFactor_13512":{"entryPoint":null,"id":13512,"parameterSlots":1,"returnSlots":1},"@getUserCurrentDebt_14856":{"entryPoint":12258,"id":14856,"parameterSlots":2,"returnSlots":2},"@isBorrowing_14222":{"entryPoint":11622,"id":14222,"parameterSlots":2,"returnSlots":1},"@isEmpty_14371":{"entryPoint":null,"id":14371,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_17208":{"entryPoint":11605,"id":17208,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralAny_14308":{"entryPoint":null,"id":14308,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOne_14291":{"entryPoint":14274,"id":14291,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_14187":{"entryPoint":11118,"id":14187,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_14260":{"entryPoint":11254,"id":14260,"parameterSlots":2,"returnSlots":1},"@percentDiv_23725":{"entryPoint":12575,"id":23725,"parameterSlots":2,"returnSlots":1},"@percentMul_23713":{"entryPoint":12136,"id":23713,"parameterSlots":2,"returnSlots":1},"@rayDiv_23792":{"entryPoint":9852,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":9915,"id":23780,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":10002,"id":106,"parameterSlots":4,"returnSlots":0},"@setBorrowing_14101":{"entryPoint":6665,"id":14101,"parameterSlots":3,"returnSlots":0},"@setUsingAsCollateral_14152":{"entryPoint":6814,"id":14152,"parameterSlots":3,"returnSlots":0},"@toUint128_1626":{"entryPoint":12618,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_20618":{"entryPoint":7608,"id":20618,"parameterSlots":5,"returnSlots":0},"@updateIsolatedDebtIfIsolated_18571":{"entryPoint":8441,"id":18571,"parameterSlots":5,"returnSlots":0},"@updateState_20387":{"entryPoint":2635,"id":20387,"parameterSlots":2,"returnSlots":0},"@validateAutomaticUseAsCollateral_23501":{"entryPoint":12965,"id":23501,"parameterSlots":5,"returnSlots":1},"@validateLiquidationCall_23053":{"entryPoint":4294,"id":23053,"parameterSlots":3,"returnSlots":0},"@validateUseAsCollateral_23438":{"entryPoint":14410,"id":23438,"parameterSlots":4,"returnSlots":1},"@wadDiv_23768":{"entryPoint":12203,"id":23768,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":15024,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool":{"entryPoint":15054,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":15443,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":15770,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr":{"entryPoint":15082,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":15347,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256_fromMemory":{"entryPoint":15881,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":15917,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":15472,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint8":{"entryPoint":15065,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15655,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_address_t_bool__to_t_uint256_t_uint256_t_address_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"allocate_memory":{"entryPoint":14906,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":16312,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":15419,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":15799,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":15963,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":16251,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":16060,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":15547,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":16263,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":15858,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":15372,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":15608,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":14987,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":15040,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:14010:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"55:363:124","statements":[{"nodeType":"YulAssignment","src":"65:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"81:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"75:5:124"},"nodeType":"YulFunctionCall","src":"75:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"65:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"93:37:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"115:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"123:6:124","type":"","value":"0x0120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:19:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"97:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"213:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"234:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"237:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"227:6:124"},"nodeType":"YulFunctionCall","src":"227:88:124"},"nodeType":"YulExpressionStatement","src":"227:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"335:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"338:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"328:6:124"},"nodeType":"YulFunctionCall","src":"328:15:124"},"nodeType":"YulExpressionStatement","src":"328:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"363:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"366:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"356:6:124"},"nodeType":"YulFunctionCall","src":"356:15:124"},"nodeType":"YulExpressionStatement","src":"356:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"148:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"160:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"145:2:124"},"nodeType":"YulFunctionCall","src":"145:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"184:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"196:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"181:2:124"},"nodeType":"YulFunctionCall","src":"181:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"142:2:124"},"nodeType":"YulFunctionCall","src":"142:62:124"},"nodeType":"YulIf","src":"139:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"397:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"401:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"390:6:124"},"nodeType":"YulFunctionCall","src":"390:22:124"},"nodeType":"YulExpressionStatement","src":"390:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"44:6:124","type":""}],"src":"14:404:124"},{"body":{"nodeType":"YulBlock","src":"468:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"555:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"564:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"567:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"557:6:124"},"nodeType":"YulFunctionCall","src":"557:12:124"},"nodeType":"YulExpressionStatement","src":"557:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"491:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"502:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"509:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"498:3:124"},"nodeType":"YulFunctionCall","src":"498:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"488:2:124"},"nodeType":"YulFunctionCall","src":"488:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"481:6:124"},"nodeType":"YulFunctionCall","src":"481:73:124"},"nodeType":"YulIf","src":"478:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"457:5:124","type":""}],"src":"423:154:124"},{"body":{"nodeType":"YulBlock","src":"631:85:124","statements":[{"nodeType":"YulAssignment","src":"641:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"663:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"650:12:124"},"nodeType":"YulFunctionCall","src":"650:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"641:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"704:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"679:24:124"},"nodeType":"YulFunctionCall","src":"679:31:124"},"nodeType":"YulExpressionStatement","src":"679:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"610:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}],"src":"582:134:124"},{"body":{"nodeType":"YulBlock","src":"763:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"817:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"826:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"829:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"819:6:124"},"nodeType":"YulFunctionCall","src":"819:12:124"},"nodeType":"YulExpressionStatement","src":"819:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"786:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"807:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"800:6:124"},"nodeType":"YulFunctionCall","src":"800:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"793:6:124"},"nodeType":"YulFunctionCall","src":"793:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"783:2:124"},"nodeType":"YulFunctionCall","src":"783:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"776:6:124"},"nodeType":"YulFunctionCall","src":"776:40:124"},"nodeType":"YulIf","src":"773:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"752:5:124","type":""}],"src":"721:118:124"},{"body":{"nodeType":"YulBlock","src":"890:82:124","statements":[{"nodeType":"YulAssignment","src":"900:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"922:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"909:12:124"},"nodeType":"YulFunctionCall","src":"909:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"900:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"960:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"938:21:124"},"nodeType":"YulFunctionCall","src":"938:28:124"},"nodeType":"YulExpressionStatement","src":"938:28:124"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"869:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"880:5:124","type":""}],"src":"844:128:124"},{"body":{"nodeType":"YulBlock","src":"1024:109:124","statements":[{"nodeType":"YulAssignment","src":"1034:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1056:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1043:12:124"},"nodeType":"YulFunctionCall","src":"1043:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1034:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1111:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1120:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1123:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1113:6:124"},"nodeType":"YulFunctionCall","src":"1113:12:124"},"nodeType":"YulExpressionStatement","src":"1113:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1085:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1096:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1103:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1092:3:124"},"nodeType":"YulFunctionCall","src":"1092:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1082:2:124"},"nodeType":"YulFunctionCall","src":"1082:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1075:6:124"},"nodeType":"YulFunctionCall","src":"1075:35:124"},"nodeType":"YulIf","src":"1072:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1003:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1014:5:124","type":""}],"src":"977:156:124"},{"body":{"nodeType":"YulBlock","src":"1513:1132:124","statements":[{"nodeType":"YulVariableDeclaration","src":"1523:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1537:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1546:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1533:3:124"},"nodeType":"YulFunctionCall","src":"1533:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1527:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1581:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1590:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1593:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1583:6:124"},"nodeType":"YulFunctionCall","src":"1583:12:124"},"nodeType":"YulExpressionStatement","src":"1583:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1572:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1576:3:124","type":"","value":"416"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1568:3:124"},"nodeType":"YulFunctionCall","src":"1568:12:124"},"nodeType":"YulIf","src":"1565:32:124"},{"nodeType":"YulAssignment","src":"1606:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1629:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1616:12:124"},"nodeType":"YulFunctionCall","src":"1616:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1606:6:124"}]},{"nodeType":"YulAssignment","src":"1648:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1675:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1686:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1671:3:124"},"nodeType":"YulFunctionCall","src":"1671:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1658:12:124"},"nodeType":"YulFunctionCall","src":"1658:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1648:6:124"}]},{"nodeType":"YulAssignment","src":"1699:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1726:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1737:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1722:3:124"},"nodeType":"YulFunctionCall","src":"1722:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1709:12:124"},"nodeType":"YulFunctionCall","src":"1709:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1699:6:124"}]},{"nodeType":"YulAssignment","src":"1750:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1777:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1788:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1773:3:124"},"nodeType":"YulFunctionCall","src":"1773:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1760:12:124"},"nodeType":"YulFunctionCall","src":"1760:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1750:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1801:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1811:6:124","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1805:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1914:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1916:6:124"},"nodeType":"YulFunctionCall","src":"1916:12:124"},"nodeType":"YulExpressionStatement","src":"1916:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1837:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"1841:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1833:3:124"},"nodeType":"YulFunctionCall","src":"1833:75:124"},{"name":"_2","nodeType":"YulIdentifier","src":"1910:2:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1829:3:124"},"nodeType":"YulFunctionCall","src":"1829:84:124"},"nodeType":"YulIf","src":"1826:104:124"},{"nodeType":"YulVariableDeclaration","src":"1939:30:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1952:15:124"},"nodeType":"YulFunctionCall","src":"1952:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1943:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1985:5:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2009:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2020:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2005:3:124"},"nodeType":"YulFunctionCall","src":"2005:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1992:12:124"},"nodeType":"YulFunctionCall","src":"1992:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1978:6:124"},"nodeType":"YulFunctionCall","src":"1978:48:124"},"nodeType":"YulExpressionStatement","src":"1978:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2046:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2053:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2042:3:124"},"nodeType":"YulFunctionCall","src":"2042:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2086:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2071:3:124"},"nodeType":"YulFunctionCall","src":"2071:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2058:12:124"},"nodeType":"YulFunctionCall","src":"2058:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2035:6:124"},"nodeType":"YulFunctionCall","src":"2035:57:124"},"nodeType":"YulExpressionStatement","src":"2035:57:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2112:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2119:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2108:3:124"},"nodeType":"YulFunctionCall","src":"2108:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2147:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2158:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2143:3:124"},"nodeType":"YulFunctionCall","src":"2143:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2124:18:124"},"nodeType":"YulFunctionCall","src":"2124:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2101:6:124"},"nodeType":"YulFunctionCall","src":"2101:63:124"},"nodeType":"YulExpressionStatement","src":"2101:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2184:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2191:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2180:3:124"},"nodeType":"YulFunctionCall","src":"2180:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2219:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2230:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2215:3:124"},"nodeType":"YulFunctionCall","src":"2215:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2196:18:124"},"nodeType":"YulFunctionCall","src":"2196:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2173:6:124"},"nodeType":"YulFunctionCall","src":"2173:63:124"},"nodeType":"YulExpressionStatement","src":"2173:63:124"},{"nodeType":"YulVariableDeclaration","src":"2245:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"2255:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2249:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2278:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2285:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2274:3:124"},"nodeType":"YulFunctionCall","src":"2274:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2314:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2325:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2310:3:124"},"nodeType":"YulFunctionCall","src":"2310:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2291:18:124"},"nodeType":"YulFunctionCall","src":"2291:38:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2267:6:124"},"nodeType":"YulFunctionCall","src":"2267:63:124"},"nodeType":"YulExpressionStatement","src":"2267:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2350:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2357:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2346:3:124"},"nodeType":"YulFunctionCall","src":"2346:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2383:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"2394:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2379:3:124"},"nodeType":"YulFunctionCall","src":"2379:18:124"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"2363:15:124"},"nodeType":"YulFunctionCall","src":"2363:35:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2339:6:124"},"nodeType":"YulFunctionCall","src":"2339:60:124"},"nodeType":"YulExpressionStatement","src":"2339:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2419:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2426:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2415:3:124"},"nodeType":"YulFunctionCall","src":"2415:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2455:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2466:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2451:3:124"},"nodeType":"YulFunctionCall","src":"2451:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2432:18:124"},"nodeType":"YulFunctionCall","src":"2432:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2408:6:124"},"nodeType":"YulFunctionCall","src":"2408:64:124"},"nodeType":"YulExpressionStatement","src":"2408:64:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2492:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2499:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2488:3:124"},"nodeType":"YulFunctionCall","src":"2488:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2526:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2537:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2522:3:124"},"nodeType":"YulFunctionCall","src":"2522:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2505:16:124"},"nodeType":"YulFunctionCall","src":"2505:37:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2481:6:124"},"nodeType":"YulFunctionCall","src":"2481:62:124"},"nodeType":"YulExpressionStatement","src":"2481:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2563:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"2570:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2559:3:124"},"nodeType":"YulFunctionCall","src":"2559:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2598:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2609:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2594:3:124"},"nodeType":"YulFunctionCall","src":"2594:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2575:18:124"},"nodeType":"YulFunctionCall","src":"2575:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2552:6:124"},"nodeType":"YulFunctionCall","src":"2552:63:124"},"nodeType":"YulExpressionStatement","src":"2552:63:124"},{"nodeType":"YulAssignment","src":"2624:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2634:5:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2624:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1447:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1458:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1470:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1478:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1486:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1494:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1502:6:124","type":""}],"src":"1138:1507:124"},{"body":{"nodeType":"YulBlock","src":"2759:76:124","statements":[{"nodeType":"YulAssignment","src":"2769:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2781:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2792:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2777:3:124"},"nodeType":"YulFunctionCall","src":"2777:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2769:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2811:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2822:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2804:6:124"},"nodeType":"YulFunctionCall","src":"2804:25:124"},"nodeType":"YulExpressionStatement","src":"2804:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2728:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2739:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2750:4:124","type":""}],"src":"2650:185:124"},{"body":{"nodeType":"YulBlock","src":"2941:125:124","statements":[{"nodeType":"YulAssignment","src":"2951:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2963:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2974:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2959:3:124"},"nodeType":"YulFunctionCall","src":"2959:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2951:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2993:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3008:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3016:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3004:3:124"},"nodeType":"YulFunctionCall","src":"3004:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2986:6:124"},"nodeType":"YulFunctionCall","src":"2986:74:124"},"nodeType":"YulExpressionStatement","src":"2986:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2910:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2921:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2932:4:124","type":""}],"src":"2840:226:124"},{"body":{"nodeType":"YulBlock","src":"3152:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"3198:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3207:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3210:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3200:6:124"},"nodeType":"YulFunctionCall","src":"3200:12:124"},"nodeType":"YulExpressionStatement","src":"3200:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3173:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3169:3:124"},"nodeType":"YulFunctionCall","src":"3169:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3194:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3165:3:124"},"nodeType":"YulFunctionCall","src":"3165:32:124"},"nodeType":"YulIf","src":"3162:52:124"},{"nodeType":"YulAssignment","src":"3223:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3239:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3233:5:124"},"nodeType":"YulFunctionCall","src":"3233:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3223:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3141:6:124","type":""}],"src":"3071:184:124"},{"body":{"nodeType":"YulBlock","src":"3292:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3309:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3312:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3302:6:124"},"nodeType":"YulFunctionCall","src":"3302:88:124"},"nodeType":"YulExpressionStatement","src":"3302:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3406:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3409:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3399:6:124"},"nodeType":"YulFunctionCall","src":"3399:15:124"},"nodeType":"YulExpressionStatement","src":"3399:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3430:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3433:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3423:6:124"},"nodeType":"YulFunctionCall","src":"3423:15:124"},"nodeType":"YulExpressionStatement","src":"3423:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"3260:184:124"},{"body":{"nodeType":"YulBlock","src":"3497:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"3524:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3526:16:124"},"nodeType":"YulFunctionCall","src":"3526:18:124"},"nodeType":"YulExpressionStatement","src":"3526:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3513:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3520:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3516:3:124"},"nodeType":"YulFunctionCall","src":"3516:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3510:2:124"},"nodeType":"YulFunctionCall","src":"3510:13:124"},"nodeType":"YulIf","src":"3507:39:124"},{"nodeType":"YulAssignment","src":"3555:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3566:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3569:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3562:3:124"},"nodeType":"YulFunctionCall","src":"3562:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"3555:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3480:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3483:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"3489:3:124","type":""}],"src":"3449:128:124"},{"body":{"nodeType":"YulBlock","src":"3663:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"3709:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3718:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3721:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3711:6:124"},"nodeType":"YulFunctionCall","src":"3711:12:124"},"nodeType":"YulExpressionStatement","src":"3711:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3684:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3693:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3680:3:124"},"nodeType":"YulFunctionCall","src":"3680:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3705:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3676:3:124"},"nodeType":"YulFunctionCall","src":"3676:32:124"},"nodeType":"YulIf","src":"3673:52:124"},{"nodeType":"YulVariableDeclaration","src":"3734:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3753:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3747:5:124"},"nodeType":"YulFunctionCall","src":"3747:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3738:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3797:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3772:24:124"},"nodeType":"YulFunctionCall","src":"3772:31:124"},"nodeType":"YulExpressionStatement","src":"3772:31:124"},{"nodeType":"YulAssignment","src":"3812:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3822:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3812:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3629:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3640:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3652:6:124","type":""}],"src":"3582:251:124"},{"body":{"nodeType":"YulBlock","src":"3995:241:124","statements":[{"nodeType":"YulAssignment","src":"4005:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4017:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4028:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4013:3:124"},"nodeType":"YulFunctionCall","src":"4013:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4005:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"4040:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"4050:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4044:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4108:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4123:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4131:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4119:3:124"},"nodeType":"YulFunctionCall","src":"4119:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4101:6:124"},"nodeType":"YulFunctionCall","src":"4101:34:124"},"nodeType":"YulExpressionStatement","src":"4101:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4155:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4166:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4151:3:124"},"nodeType":"YulFunctionCall","src":"4151:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4175:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4183:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4171:3:124"},"nodeType":"YulFunctionCall","src":"4171:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4144:6:124"},"nodeType":"YulFunctionCall","src":"4144:43:124"},"nodeType":"YulExpressionStatement","src":"4144:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4207:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4218:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4203:3:124"},"nodeType":"YulFunctionCall","src":"4203:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"4223:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4196:6:124"},"nodeType":"YulFunctionCall","src":"4196:34:124"},"nodeType":"YulExpressionStatement","src":"4196:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3948:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3959:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3967:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3975:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3986:4:124","type":""}],"src":"3838:398:124"},{"body":{"nodeType":"YulBlock","src":"4420:271:124","statements":[{"nodeType":"YulAssignment","src":"4430:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4442:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4453:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4438:3:124"},"nodeType":"YulFunctionCall","src":"4438:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4430:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4473:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"4484:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4466:6:124"},"nodeType":"YulFunctionCall","src":"4466:25:124"},"nodeType":"YulExpressionStatement","src":"4466:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4511:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4522:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4507:3:124"},"nodeType":"YulFunctionCall","src":"4507:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"4527:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4500:6:124"},"nodeType":"YulFunctionCall","src":"4500:34:124"},"nodeType":"YulExpressionStatement","src":"4500:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4554:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4565:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4550:3:124"},"nodeType":"YulFunctionCall","src":"4550:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"4574:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4582:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4570:3:124"},"nodeType":"YulFunctionCall","src":"4570:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4543:6:124"},"nodeType":"YulFunctionCall","src":"4543:83:124"},"nodeType":"YulExpressionStatement","src":"4543:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4646:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4657:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4642:3:124"},"nodeType":"YulFunctionCall","src":"4642:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"4676:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4669:6:124"},"nodeType":"YulFunctionCall","src":"4669:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4662:6:124"},"nodeType":"YulFunctionCall","src":"4662:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4635:6:124"},"nodeType":"YulFunctionCall","src":"4635:50:124"},"nodeType":"YulExpressionStatement","src":"4635:50:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_address_t_bool__to_t_uint256_t_uint256_t_address_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4365:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4376:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4384:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4392:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4400:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4411:4:124","type":""}],"src":"4241:450:124"},{"body":{"nodeType":"YulBlock","src":"4827:335:124","statements":[{"body":{"nodeType":"YulBlock","src":"4874:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4883:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4886:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4876:6:124"},"nodeType":"YulFunctionCall","src":"4876:12:124"},"nodeType":"YulExpressionStatement","src":"4876:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4848:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4857:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4844:3:124"},"nodeType":"YulFunctionCall","src":"4844:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4869:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4840:3:124"},"nodeType":"YulFunctionCall","src":"4840:33:124"},"nodeType":"YulIf","src":"4837:53:124"},{"nodeType":"YulAssignment","src":"4899:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4915:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4909:5:124"},"nodeType":"YulFunctionCall","src":"4909:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4899:6:124"}]},{"nodeType":"YulAssignment","src":"4934:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4954:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4965:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4950:3:124"},"nodeType":"YulFunctionCall","src":"4950:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4944:5:124"},"nodeType":"YulFunctionCall","src":"4944:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4934:6:124"}]},{"nodeType":"YulAssignment","src":"4978:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4998:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5009:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4994:3:124"},"nodeType":"YulFunctionCall","src":"4994:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4988:5:124"},"nodeType":"YulFunctionCall","src":"4988:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4978:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5022:38:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5045:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5056:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5041:3:124"},"nodeType":"YulFunctionCall","src":"5041:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5035:5:124"},"nodeType":"YulFunctionCall","src":"5035:25:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5026:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5116:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5125:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5128:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5118:6:124"},"nodeType":"YulFunctionCall","src":"5118:12:124"},"nodeType":"YulExpressionStatement","src":"5118:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5082:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5093:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5100:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5089:3:124"},"nodeType":"YulFunctionCall","src":"5089:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5079:2:124"},"nodeType":"YulFunctionCall","src":"5079:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5072:6:124"},"nodeType":"YulFunctionCall","src":"5072:43:124"},"nodeType":"YulIf","src":"5069:63:124"},{"nodeType":"YulAssignment","src":"5141:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5151:5:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5141:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4769:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4780:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4792:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4800:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4808:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4816:6:124","type":""}],"src":"4696:466:124"},{"body":{"nodeType":"YulBlock","src":"5219:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"5338:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5340:16:124"},"nodeType":"YulFunctionCall","src":"5340:18:124"},"nodeType":"YulExpressionStatement","src":"5340:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5250:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5243:6:124"},"nodeType":"YulFunctionCall","src":"5243:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5236:6:124"},"nodeType":"YulFunctionCall","src":"5236:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5258:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5265:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"5333:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"5261:3:124"},"nodeType":"YulFunctionCall","src":"5261:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5255:2:124"},"nodeType":"YulFunctionCall","src":"5255:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5232:3:124"},"nodeType":"YulFunctionCall","src":"5232:105:124"},"nodeType":"YulIf","src":"5229:131:124"},{"nodeType":"YulAssignment","src":"5369:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5384:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"5387:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"5380:3:124"},"nodeType":"YulFunctionCall","src":"5380:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"5369:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5198:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"5201:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"5207:7:124","type":""}],"src":"5167:228:124"},{"body":{"nodeType":"YulBlock","src":"5432:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5449:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5452:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5442:6:124"},"nodeType":"YulFunctionCall","src":"5442:88:124"},"nodeType":"YulExpressionStatement","src":"5442:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5546:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5549:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5539:6:124"},"nodeType":"YulFunctionCall","src":"5539:15:124"},"nodeType":"YulExpressionStatement","src":"5539:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5570:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5573:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5563:6:124"},"nodeType":"YulFunctionCall","src":"5563:15:124"},"nodeType":"YulExpressionStatement","src":"5563:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"5400:184:124"},{"body":{"nodeType":"YulBlock","src":"5710:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"5720:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5730:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5724:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5748:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5759:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5741:6:124"},"nodeType":"YulFunctionCall","src":"5741:21:124"},"nodeType":"YulExpressionStatement","src":"5741:21:124"},{"nodeType":"YulVariableDeclaration","src":"5771:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5791:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5785:5:124"},"nodeType":"YulFunctionCall","src":"5785:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5775:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5818:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5829:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5814:3:124"},"nodeType":"YulFunctionCall","src":"5814:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"5834:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5807:6:124"},"nodeType":"YulFunctionCall","src":"5807:34:124"},"nodeType":"YulExpressionStatement","src":"5807:34:124"},{"nodeType":"YulVariableDeclaration","src":"5850:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5859:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5854:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5919:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5948:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"5959:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5944:3:124"},"nodeType":"YulFunctionCall","src":"5944:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"5963:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5940:3:124"},"nodeType":"YulFunctionCall","src":"5940:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5982:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"5990:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5978:3:124"},"nodeType":"YulFunctionCall","src":"5978:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5994:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5974:3:124"},"nodeType":"YulFunctionCall","src":"5974:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5968:5:124"},"nodeType":"YulFunctionCall","src":"5968:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5933:6:124"},"nodeType":"YulFunctionCall","src":"5933:66:124"},"nodeType":"YulExpressionStatement","src":"5933:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5880:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"5883:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5877:2:124"},"nodeType":"YulFunctionCall","src":"5877:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5891:19:124","statements":[{"nodeType":"YulAssignment","src":"5893:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5902:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5905:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5898:3:124"},"nodeType":"YulFunctionCall","src":"5898:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5893:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"5873:3:124","statements":[]},"src":"5869:140:124"},{"body":{"nodeType":"YulBlock","src":"6043:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6072:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"6083:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6068:3:124"},"nodeType":"YulFunctionCall","src":"6068:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"6092:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6064:3:124"},"nodeType":"YulFunctionCall","src":"6064:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"6097:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6057:6:124"},"nodeType":"YulFunctionCall","src":"6057:42:124"},"nodeType":"YulExpressionStatement","src":"6057:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6024:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"6027:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6021:2:124"},"nodeType":"YulFunctionCall","src":"6021:13:124"},"nodeType":"YulIf","src":"6018:91:124"},{"nodeType":"YulAssignment","src":"6118:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6134:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6153:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6161:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6149:3:124"},"nodeType":"YulFunctionCall","src":"6149:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"6166:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6145:3:124"},"nodeType":"YulFunctionCall","src":"6145:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6130:3:124"},"nodeType":"YulFunctionCall","src":"6130:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"6236:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6126:3:124"},"nodeType":"YulFunctionCall","src":"6126:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6118:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5679:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5690:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5701:4:124","type":""}],"src":"5589:656:124"},{"body":{"nodeType":"YulBlock","src":"6328:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"6374:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6383:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6386:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6376:6:124"},"nodeType":"YulFunctionCall","src":"6376:12:124"},"nodeType":"YulExpressionStatement","src":"6376:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6349:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6358:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6345:3:124"},"nodeType":"YulFunctionCall","src":"6345:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6370:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6341:3:124"},"nodeType":"YulFunctionCall","src":"6341:32:124"},"nodeType":"YulIf","src":"6338:52:124"},{"nodeType":"YulVariableDeclaration","src":"6399:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6418:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6412:5:124"},"nodeType":"YulFunctionCall","src":"6412:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6403:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6459:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"6437:21:124"},"nodeType":"YulFunctionCall","src":"6437:28:124"},"nodeType":"YulExpressionStatement","src":"6437:28:124"},{"nodeType":"YulAssignment","src":"6474:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6484:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6474:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6294:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6305:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6317:6:124","type":""}],"src":"6250:245:124"},{"body":{"nodeType":"YulBlock","src":"6546:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"6577:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6598:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6601:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6591:6:124"},"nodeType":"YulFunctionCall","src":"6591:88:124"},"nodeType":"YulExpressionStatement","src":"6591:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6699:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6702:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6692:6:124"},"nodeType":"YulFunctionCall","src":"6692:15:124"},"nodeType":"YulExpressionStatement","src":"6692:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6727:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6730:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6720:6:124"},"nodeType":"YulFunctionCall","src":"6720:15:124"},"nodeType":"YulExpressionStatement","src":"6720:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6566:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6559:6:124"},"nodeType":"YulFunctionCall","src":"6559:9:124"},"nodeType":"YulIf","src":"6556:189:124"},{"nodeType":"YulAssignment","src":"6754:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6763:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"6766:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6759:3:124"},"nodeType":"YulFunctionCall","src":"6759:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"6754:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6531:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"6534:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"6540:1:124","type":""}],"src":"6500:274:124"},{"body":{"nodeType":"YulBlock","src":"6828:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"6850:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6852:16:124"},"nodeType":"YulFunctionCall","src":"6852:18:124"},"nodeType":"YulExpressionStatement","src":"6852:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6844:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"6847:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6841:2:124"},"nodeType":"YulFunctionCall","src":"6841:8:124"},"nodeType":"YulIf","src":"6838:34:124"},{"nodeType":"YulAssignment","src":"6881:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6893:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"6896:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6889:3:124"},"nodeType":"YulFunctionCall","src":"6889:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"6881:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6810:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"6813:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"6819:4:124","type":""}],"src":"6779:125:124"},{"body":{"nodeType":"YulBlock","src":"7066:211:124","statements":[{"nodeType":"YulAssignment","src":"7076:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7088:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7099:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7084:3:124"},"nodeType":"YulFunctionCall","src":"7084:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7076:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7118:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7133:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7141:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7129:3:124"},"nodeType":"YulFunctionCall","src":"7129:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7111:6:124"},"nodeType":"YulFunctionCall","src":"7111:74:124"},"nodeType":"YulExpressionStatement","src":"7111:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7205:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7216:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7201:3:124"},"nodeType":"YulFunctionCall","src":"7201:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"7221:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7194:6:124"},"nodeType":"YulFunctionCall","src":"7194:34:124"},"nodeType":"YulExpressionStatement","src":"7194:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7248:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7259:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7244:3:124"},"nodeType":"YulFunctionCall","src":"7244:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"7264:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7237:6:124"},"nodeType":"YulFunctionCall","src":"7237:34:124"},"nodeType":"YulExpressionStatement","src":"7237:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7019:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7030:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7038:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7046:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7057:4:124","type":""}],"src":"6909:368:124"},{"body":{"nodeType":"YulBlock","src":"7411:168:124","statements":[{"nodeType":"YulAssignment","src":"7421:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7433:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7444:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7429:3:124"},"nodeType":"YulFunctionCall","src":"7429:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7421:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7463:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7478:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7486:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7474:3:124"},"nodeType":"YulFunctionCall","src":"7474:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7456:6:124"},"nodeType":"YulFunctionCall","src":"7456:74:124"},"nodeType":"YulExpressionStatement","src":"7456:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7550:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7561:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7546:3:124"},"nodeType":"YulFunctionCall","src":"7546:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"7566:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7539:6:124"},"nodeType":"YulFunctionCall","src":"7539:34:124"},"nodeType":"YulExpressionStatement","src":"7539:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7372:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7383:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7391:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7402:4:124","type":""}],"src":"7282:297:124"},{"body":{"nodeType":"YulBlock","src":"7682:147:124","statements":[{"body":{"nodeType":"YulBlock","src":"7728:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7737:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7740:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7730:6:124"},"nodeType":"YulFunctionCall","src":"7730:12:124"},"nodeType":"YulExpressionStatement","src":"7730:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7703:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7712:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7699:3:124"},"nodeType":"YulFunctionCall","src":"7699:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7724:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7695:3:124"},"nodeType":"YulFunctionCall","src":"7695:32:124"},"nodeType":"YulIf","src":"7692:52:124"},{"nodeType":"YulAssignment","src":"7753:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7769:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7763:5:124"},"nodeType":"YulFunctionCall","src":"7763:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7753:6:124"}]},{"nodeType":"YulAssignment","src":"7788:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7808:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7819:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7804:3:124"},"nodeType":"YulFunctionCall","src":"7804:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7798:5:124"},"nodeType":"YulFunctionCall","src":"7798:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7788:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7640:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7651:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7663:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7671:6:124","type":""}],"src":"7584:245:124"},{"body":{"nodeType":"YulBlock","src":"8029:729:124","statements":[{"nodeType":"YulAssignment","src":"8039:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8062:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8047:3:124"},"nodeType":"YulFunctionCall","src":"8047:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8039:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8082:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8099:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8093:5:124"},"nodeType":"YulFunctionCall","src":"8093:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8075:6:124"},"nodeType":"YulFunctionCall","src":"8075:32:124"},"nodeType":"YulExpressionStatement","src":"8075:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8127:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8138:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8123:3:124"},"nodeType":"YulFunctionCall","src":"8123:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8155:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8163:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8151:3:124"},"nodeType":"YulFunctionCall","src":"8151:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8145:5:124"},"nodeType":"YulFunctionCall","src":"8145:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8116:6:124"},"nodeType":"YulFunctionCall","src":"8116:54:124"},"nodeType":"YulExpressionStatement","src":"8116:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8190:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8201:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8186:3:124"},"nodeType":"YulFunctionCall","src":"8186:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8218:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8226:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8214:3:124"},"nodeType":"YulFunctionCall","src":"8214:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8208:5:124"},"nodeType":"YulFunctionCall","src":"8208:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8179:6:124"},"nodeType":"YulFunctionCall","src":"8179:54:124"},"nodeType":"YulExpressionStatement","src":"8179:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8253:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8264:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8249:3:124"},"nodeType":"YulFunctionCall","src":"8249:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8281:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8289:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8277:3:124"},"nodeType":"YulFunctionCall","src":"8277:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8271:5:124"},"nodeType":"YulFunctionCall","src":"8271:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8242:6:124"},"nodeType":"YulFunctionCall","src":"8242:54:124"},"nodeType":"YulExpressionStatement","src":"8242:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8316:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8327:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8312:3:124"},"nodeType":"YulFunctionCall","src":"8312:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8344:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8352:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8340:3:124"},"nodeType":"YulFunctionCall","src":"8340:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8334:5:124"},"nodeType":"YulFunctionCall","src":"8334:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8305:6:124"},"nodeType":"YulFunctionCall","src":"8305:54:124"},"nodeType":"YulExpressionStatement","src":"8305:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8379:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8390:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8375:3:124"},"nodeType":"YulFunctionCall","src":"8375:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8407:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8415:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8403:3:124"},"nodeType":"YulFunctionCall","src":"8403:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8397:5:124"},"nodeType":"YulFunctionCall","src":"8397:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8368:6:124"},"nodeType":"YulFunctionCall","src":"8368:54:124"},"nodeType":"YulExpressionStatement","src":"8368:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8442:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8453:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8438:3:124"},"nodeType":"YulFunctionCall","src":"8438:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8470:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8478:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8466:3:124"},"nodeType":"YulFunctionCall","src":"8466:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8460:5:124"},"nodeType":"YulFunctionCall","src":"8460:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8431:6:124"},"nodeType":"YulFunctionCall","src":"8431:54:124"},"nodeType":"YulExpressionStatement","src":"8431:54:124"},{"nodeType":"YulVariableDeclaration","src":"8494:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8524:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8532:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8520:3:124"},"nodeType":"YulFunctionCall","src":"8520:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8514:5:124"},"nodeType":"YulFunctionCall","src":"8514:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"8498:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8547:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8557:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8551:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8619:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8630:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8615:3:124"},"nodeType":"YulFunctionCall","src":"8615:20:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"8641:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8655:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8637:3:124"},"nodeType":"YulFunctionCall","src":"8637:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8608:6:124"},"nodeType":"YulFunctionCall","src":"8608:51:124"},"nodeType":"YulExpressionStatement","src":"8608:51:124"},{"nodeType":"YulVariableDeclaration","src":"8668:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8678:6:124","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8672:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8704:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"8715:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8700:3:124"},"nodeType":"YulFunctionCall","src":"8700:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8734:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"8742:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8730:3:124"},"nodeType":"YulFunctionCall","src":"8730:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8724:5:124"},"nodeType":"YulFunctionCall","src":"8724:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8748:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8720:3:124"},"nodeType":"YulFunctionCall","src":"8720:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8693:6:124"},"nodeType":"YulFunctionCall","src":"8693:59:124"},"nodeType":"YulExpressionStatement","src":"8693:59:124"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7998:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8009:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8020:4:124","type":""}],"src":"7834:924:124"},{"body":{"nodeType":"YulBlock","src":"8878:191:124","statements":[{"body":{"nodeType":"YulBlock","src":"8924:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8933:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8936:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8926:6:124"},"nodeType":"YulFunctionCall","src":"8926:12:124"},"nodeType":"YulExpressionStatement","src":"8926:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8899:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8908:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8895:3:124"},"nodeType":"YulFunctionCall","src":"8895:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8920:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8891:3:124"},"nodeType":"YulFunctionCall","src":"8891:32:124"},"nodeType":"YulIf","src":"8888:52:124"},{"nodeType":"YulAssignment","src":"8949:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8965:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8959:5:124"},"nodeType":"YulFunctionCall","src":"8959:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8949:6:124"}]},{"nodeType":"YulAssignment","src":"8984:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9004:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9015:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9000:3:124"},"nodeType":"YulFunctionCall","src":"9000:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8994:5:124"},"nodeType":"YulFunctionCall","src":"8994:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8984:6:124"}]},{"nodeType":"YulAssignment","src":"9028:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9048:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9059:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9044:3:124"},"nodeType":"YulFunctionCall","src":"9044:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9038:5:124"},"nodeType":"YulFunctionCall","src":"9038:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9028:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8828:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8839:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8851:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8859:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8867:6:124","type":""}],"src":"8763:306:124"},{"body":{"nodeType":"YulBlock","src":"9287:250:124","statements":[{"nodeType":"YulAssignment","src":"9297:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9309:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9320:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9305:3:124"},"nodeType":"YulFunctionCall","src":"9305:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9297:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9340:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"9351:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9333:6:124"},"nodeType":"YulFunctionCall","src":"9333:25:124"},"nodeType":"YulExpressionStatement","src":"9333:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9378:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9389:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9374:3:124"},"nodeType":"YulFunctionCall","src":"9374:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"9394:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9367:6:124"},"nodeType":"YulFunctionCall","src":"9367:34:124"},"nodeType":"YulExpressionStatement","src":"9367:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9421:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9432:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9417:3:124"},"nodeType":"YulFunctionCall","src":"9417:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"9437:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9410:6:124"},"nodeType":"YulFunctionCall","src":"9410:34:124"},"nodeType":"YulExpressionStatement","src":"9410:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9464:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9475:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9460:3:124"},"nodeType":"YulFunctionCall","src":"9460:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"9480:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9453:6:124"},"nodeType":"YulFunctionCall","src":"9453:34:124"},"nodeType":"YulExpressionStatement","src":"9453:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9507:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9518:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9503:3:124"},"nodeType":"YulFunctionCall","src":"9503:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"9524:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9496:6:124"},"nodeType":"YulFunctionCall","src":"9496:35:124"},"nodeType":"YulExpressionStatement","src":"9496:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9224:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9235:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9243:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9251:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9259:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9267:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9278:4:124","type":""}],"src":"9074:463:124"},{"body":{"nodeType":"YulBlock","src":"9606:418:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9616:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9631:1:124","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"9620:7:124","type":""}]},{"nodeType":"YulAssignment","src":"9641:16:124","value":{"name":"power_1","nodeType":"YulIdentifier","src":"9650:7:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"9641:5:124"}]},{"nodeType":"YulAssignment","src":"9666:13:124","value":{"name":"_base","nodeType":"YulIdentifier","src":"9674:5:124"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"9666:4:124"}]},{"body":{"nodeType":"YulBlock","src":"9730:288:124","statements":[{"body":{"nodeType":"YulBlock","src":"9835:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9837:16:124"},"nodeType":"YulFunctionCall","src":"9837:18:124"},"nodeType":"YulExpressionStatement","src":"9837:18:124"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"9750:4:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9760:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"9828:4:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"9756:3:124"},"nodeType":"YulFunctionCall","src":"9756:77:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9747:2:124"},"nodeType":"YulFunctionCall","src":"9747:87:124"},"nodeType":"YulIf","src":"9744:113:124"},{"body":{"nodeType":"YulBlock","src":"9896:29:124","statements":[{"nodeType":"YulAssignment","src":"9898:25:124","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"9911:5:124"},{"name":"base","nodeType":"YulIdentifier","src":"9918:4:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"9907:3:124"},"nodeType":"YulFunctionCall","src":"9907:16:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"9898:5:124"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"9877:8:124"},{"name":"power_1","nodeType":"YulIdentifier","src":"9887:7:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9873:3:124"},"nodeType":"YulFunctionCall","src":"9873:22:124"},"nodeType":"YulIf","src":"9870:55:124"},{"nodeType":"YulAssignment","src":"9938:23:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"9950:4:124"},{"name":"base","nodeType":"YulIdentifier","src":"9956:4:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"9946:3:124"},"nodeType":"YulFunctionCall","src":"9946:15:124"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"9938:4:124"}]},{"nodeType":"YulAssignment","src":"9974:34:124","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"9990:7:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"9999:8:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9986:3:124"},"nodeType":"YulFunctionCall","src":"9986:22:124"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"9974:8:124"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"9699:8:124"},{"name":"power_1","nodeType":"YulIdentifier","src":"9709:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9696:2:124"},"nodeType":"YulFunctionCall","src":"9696:21:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9718:3:124","statements":[]},"pre":{"nodeType":"YulBlock","src":"9692:3:124","statements":[]},"src":"9688:330:124"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"9570:5:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"9577:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"9590:5:124","type":""},{"name":"base","nodeType":"YulTypedName","src":"9597:4:124","type":""}],"src":"9542:482:124"},{"body":{"nodeType":"YulBlock","src":"10088:807:124","statements":[{"body":{"nodeType":"YulBlock","src":"10126:52:124","statements":[{"nodeType":"YulAssignment","src":"10140:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10149:1:124","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10140:5:124"}]},{"nodeType":"YulLeave","src":"10163:5:124"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10108:8:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10101:6:124"},"nodeType":"YulFunctionCall","src":"10101:16:124"},"nodeType":"YulIf","src":"10098:80:124"},{"body":{"nodeType":"YulBlock","src":"10211:52:124","statements":[{"nodeType":"YulAssignment","src":"10225:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10234:1:124","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10225:5:124"}]},{"nodeType":"YulLeave","src":"10248:5:124"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10197:4:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10190:6:124"},"nodeType":"YulFunctionCall","src":"10190:12:124"},"nodeType":"YulIf","src":"10187:76:124"},{"cases":[{"body":{"nodeType":"YulBlock","src":"10299:52:124","statements":[{"nodeType":"YulAssignment","src":"10313:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10322:1:124","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10313:5:124"}]},{"nodeType":"YulLeave","src":"10336:5:124"}]},"nodeType":"YulCase","src":"10292:59:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10297:1:124","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"10367:123:124","statements":[{"body":{"nodeType":"YulBlock","src":"10402:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10404:16:124"},"nodeType":"YulFunctionCall","src":"10404:18:124"},"nodeType":"YulExpressionStatement","src":"10404:18:124"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10387:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"10397:3:124","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10384:2:124"},"nodeType":"YulFunctionCall","src":"10384:17:124"},"nodeType":"YulIf","src":"10381:43:124"},{"nodeType":"YulAssignment","src":"10437:25:124","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10450:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"10460:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10446:3:124"},"nodeType":"YulFunctionCall","src":"10446:16:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10437:5:124"}]},{"nodeType":"YulLeave","src":"10475:5:124"}]},"nodeType":"YulCase","src":"10360:130:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10365:1:124","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"10279:4:124"},"nodeType":"YulSwitch","src":"10272:218:124"},{"body":{"nodeType":"YulBlock","src":"10588:70:124","statements":[{"nodeType":"YulAssignment","src":"10602:28:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10615:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"10621:8:124"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"10611:3:124"},"nodeType":"YulFunctionCall","src":"10611:19:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10602:5:124"}]},{"nodeType":"YulLeave","src":"10643:5:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10512:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"10518:2:124","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10509:2:124"},"nodeType":"YulFunctionCall","src":"10509:12:124"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10526:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"10536:2:124","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10523:2:124"},"nodeType":"YulFunctionCall","src":"10523:16:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10505:3:124"},"nodeType":"YulFunctionCall","src":"10505:35:124"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10549:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"10555:3:124","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10546:2:124"},"nodeType":"YulFunctionCall","src":"10546:13:124"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10564:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"10574:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10561:2:124"},"nodeType":"YulFunctionCall","src":"10561:16:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10542:3:124"},"nodeType":"YulFunctionCall","src":"10542:36:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"10502:2:124"},"nodeType":"YulFunctionCall","src":"10502:77:124"},"nodeType":"YulIf","src":"10499:159:124"},{"nodeType":"YulVariableDeclaration","src":"10667:57:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10709:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"10715:8:124"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"10690:18:124"},"nodeType":"YulFunctionCall","src":"10690:34:124"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"10671:7:124","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"10680:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"10829:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10831:16:124"},"nodeType":"YulFunctionCall","src":"10831:18:124"},"nodeType":"YulExpressionStatement","src":"10831:18:124"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"10739:7:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10752:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"10820:6:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"10748:3:124"},"nodeType":"YulFunctionCall","src":"10748:79:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10736:2:124"},"nodeType":"YulFunctionCall","src":"10736:92:124"},"nodeType":"YulIf","src":"10733:118:124"},{"nodeType":"YulAssignment","src":"10860:29:124","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"10873:7:124"},{"name":"base_1","nodeType":"YulIdentifier","src":"10882:6:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"10869:3:124"},"nodeType":"YulFunctionCall","src":"10869:20:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10860:5:124"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"10059:4:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"10065:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"10078:5:124","type":""}],"src":"10029:866:124"},{"body":{"nodeType":"YulBlock","src":"10970:61:124","statements":[{"nodeType":"YulAssignment","src":"10980:45:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"11010:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"11016:8:124"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"10989:20:124"},"nodeType":"YulFunctionCall","src":"10989:36:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10980:5:124"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"10941:4:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"10947:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"10960:5:124","type":""}],"src":"10900:131:124"},{"body":{"nodeType":"YulBlock","src":"11145:76:124","statements":[{"nodeType":"YulAssignment","src":"11155:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11167:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11178:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11163:3:124"},"nodeType":"YulFunctionCall","src":"11163:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11155:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11197:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11208:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11190:6:124"},"nodeType":"YulFunctionCall","src":"11190:25:124"},"nodeType":"YulExpressionStatement","src":"11190:25:124"}]},"name":"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11114:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11125:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11136:4:124","type":""}],"src":"11036:185:124"},{"body":{"nodeType":"YulBlock","src":"11275:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11285:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11295:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11289:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11338:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11353:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11356:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11349:3:124"},"nodeType":"YulFunctionCall","src":"11349:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"11342:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11368:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11383:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11386:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11379:3:124"},"nodeType":"YulFunctionCall","src":"11379:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"11372:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11414:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11416:16:124"},"nodeType":"YulFunctionCall","src":"11416:18:124"},"nodeType":"YulExpressionStatement","src":"11416:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"11404:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"11409:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11401:2:124"},"nodeType":"YulFunctionCall","src":"11401:12:124"},"nodeType":"YulIf","src":"11398:38:124"},{"nodeType":"YulAssignment","src":"11445:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"11457:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"11462:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11453:3:124"},"nodeType":"YulFunctionCall","src":"11453:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11445:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11257:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11260:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11266:4:124","type":""}],"src":"11226:246:124"},{"body":{"nodeType":"YulBlock","src":"11578:76:124","statements":[{"nodeType":"YulAssignment","src":"11588:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11600:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11611:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11596:3:124"},"nodeType":"YulFunctionCall","src":"11596:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11588:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11630:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11641:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11623:6:124"},"nodeType":"YulFunctionCall","src":"11623:25:124"},"nodeType":"YulExpressionStatement","src":"11623:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11547:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11558:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11569:4:124","type":""}],"src":"11477:177:124"},{"body":{"nodeType":"YulBlock","src":"11844:285:124","statements":[{"nodeType":"YulAssignment","src":"11854:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11866:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11877:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11862:3:124"},"nodeType":"YulFunctionCall","src":"11862:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11854:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"11890:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11900:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11894:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11958:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11973:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11981:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11969:3:124"},"nodeType":"YulFunctionCall","src":"11969:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11951:6:124"},"nodeType":"YulFunctionCall","src":"11951:34:124"},"nodeType":"YulExpressionStatement","src":"11951:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12005:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12016:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12001:3:124"},"nodeType":"YulFunctionCall","src":"12001:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12025:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12033:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12021:3:124"},"nodeType":"YulFunctionCall","src":"12021:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11994:6:124"},"nodeType":"YulFunctionCall","src":"11994:43:124"},"nodeType":"YulExpressionStatement","src":"11994:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12057:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12068:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12053:3:124"},"nodeType":"YulFunctionCall","src":"12053:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12073:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12046:6:124"},"nodeType":"YulFunctionCall","src":"12046:34:124"},"nodeType":"YulExpressionStatement","src":"12046:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12100:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12111:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12096:3:124"},"nodeType":"YulFunctionCall","src":"12096:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12116:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12089:6:124"},"nodeType":"YulFunctionCall","src":"12089:34:124"},"nodeType":"YulExpressionStatement","src":"12089:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11789:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11800:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11808:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11816:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11824:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11835:4:124","type":""}],"src":"11659:470:124"},{"body":{"nodeType":"YulBlock","src":"12308:175:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12325:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12336:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12318:6:124"},"nodeType":"YulFunctionCall","src":"12318:21:124"},"nodeType":"YulExpressionStatement","src":"12318:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12359:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12370:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12355:3:124"},"nodeType":"YulFunctionCall","src":"12355:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"12375:2:124","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12348:6:124"},"nodeType":"YulFunctionCall","src":"12348:30:124"},"nodeType":"YulExpressionStatement","src":"12348:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12398:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12409:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12394:3:124"},"nodeType":"YulFunctionCall","src":"12394:18:124"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"12414:27:124","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12387:6:124"},"nodeType":"YulFunctionCall","src":"12387:55:124"},"nodeType":"YulExpressionStatement","src":"12387:55:124"},{"nodeType":"YulAssignment","src":"12451:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12463:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12474:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12459:3:124"},"nodeType":"YulFunctionCall","src":"12459:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12451:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12285:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12299:4:124","type":""}],"src":"12134:349:124"},{"body":{"nodeType":"YulBlock","src":"12536:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"12546:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12556:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12550:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12599:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12614:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12617:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12610:3:124"},"nodeType":"YulFunctionCall","src":"12610:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"12603:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12629:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"12644:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12647:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12640:3:124"},"nodeType":"YulFunctionCall","src":"12640:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"12633:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"12684:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12686:16:124"},"nodeType":"YulFunctionCall","src":"12686:18:124"},"nodeType":"YulExpressionStatement","src":"12686:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"12665:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"12674:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"12678:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12670:3:124"},"nodeType":"YulFunctionCall","src":"12670:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12662:2:124"},"nodeType":"YulFunctionCall","src":"12662:21:124"},"nodeType":"YulIf","src":"12659:47:124"},{"nodeType":"YulAssignment","src":"12715:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"12726:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"12731:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12722:3:124"},"nodeType":"YulFunctionCall","src":"12722:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"12715:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12519:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"12522:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"12528:3:124","type":""}],"src":"12488:253:124"},{"body":{"nodeType":"YulBlock","src":"12920:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12937:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12948:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12930:6:124"},"nodeType":"YulFunctionCall","src":"12930:21:124"},"nodeType":"YulExpressionStatement","src":"12930:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12971:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12982:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12967:3:124"},"nodeType":"YulFunctionCall","src":"12967:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"12987:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12960:6:124"},"nodeType":"YulFunctionCall","src":"12960:30:124"},"nodeType":"YulExpressionStatement","src":"12960:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13010:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13021:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13006:3:124"},"nodeType":"YulFunctionCall","src":"13006:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"13026:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12999:6:124"},"nodeType":"YulFunctionCall","src":"12999:62:124"},"nodeType":"YulExpressionStatement","src":"12999:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13081:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13092:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13077:3:124"},"nodeType":"YulFunctionCall","src":"13077:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"13097:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13070:6:124"},"nodeType":"YulFunctionCall","src":"13070:37:124"},"nodeType":"YulExpressionStatement","src":"13070:37:124"},{"nodeType":"YulAssignment","src":"13116:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13128:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13139:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13124:3:124"},"nodeType":"YulFunctionCall","src":"13124:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13116:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12897:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12911:4:124","type":""}],"src":"12746:403:124"},{"body":{"nodeType":"YulBlock","src":"13249:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"13295:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13304:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13307:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13297:6:124"},"nodeType":"YulFunctionCall","src":"13297:12:124"},"nodeType":"YulExpressionStatement","src":"13297:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13270:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13279:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13266:3:124"},"nodeType":"YulFunctionCall","src":"13266:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13291:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13262:3:124"},"nodeType":"YulFunctionCall","src":"13262:32:124"},"nodeType":"YulIf","src":"13259:52:124"},{"nodeType":"YulVariableDeclaration","src":"13320:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13339:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13333:5:124"},"nodeType":"YulFunctionCall","src":"13333:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13324:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13383:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13358:24:124"},"nodeType":"YulFunctionCall","src":"13358:31:124"},"nodeType":"YulExpressionStatement","src":"13358:31:124"},{"nodeType":"YulAssignment","src":"13398:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13408:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13398:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13215:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13226:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13238:6:124","type":""}],"src":"13154:265:124"},{"body":{"nodeType":"YulBlock","src":"13536:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"13582:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13591:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13594:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13584:6:124"},"nodeType":"YulFunctionCall","src":"13584:12:124"},"nodeType":"YulExpressionStatement","src":"13584:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13557:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13566:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13553:3:124"},"nodeType":"YulFunctionCall","src":"13553:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13578:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13549:3:124"},"nodeType":"YulFunctionCall","src":"13549:32:124"},"nodeType":"YulIf","src":"13546:52:124"},{"nodeType":"YulVariableDeclaration","src":"13607:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13626:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13620:5:124"},"nodeType":"YulFunctionCall","src":"13620:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13611:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13670:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13645:24:124"},"nodeType":"YulFunctionCall","src":"13645:31:124"},"nodeType":"YulExpressionStatement","src":"13645:31:124"},{"nodeType":"YulAssignment","src":"13685:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13695:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13685:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13502:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13513:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13525:6:124","type":""}],"src":"13424:282:124"},{"body":{"nodeType":"YulBlock","src":"13840:168:124","statements":[{"nodeType":"YulAssignment","src":"13850:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13862:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13873:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13858:3:124"},"nodeType":"YulFunctionCall","src":"13858:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13850:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13892:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"13903:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13885:6:124"},"nodeType":"YulFunctionCall","src":"13885:25:124"},"nodeType":"YulExpressionStatement","src":"13885:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13930:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13941:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13926:3:124"},"nodeType":"YulFunctionCall","src":"13926:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13950:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13958:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13946:3:124"},"nodeType":"YulFunctionCall","src":"13946:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13919:6:124"},"nodeType":"YulFunctionCall","src":"13919:83:124"},"nodeType":"YulExpressionStatement","src":"13919:83:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13801:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13812:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13820:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13831:4:124","type":""}],"src":"13711:297:124"}]},"contents":"{\n    { }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0120)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_bool(value)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 416) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let _2 := 0x0120\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80), _2) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, calldataload(add(headStart, 128)))\n        mstore(add(value, 32), calldataload(add(headStart, 160)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 192)))\n        mstore(add(value, 96), abi_decode_address(add(headStart, 224)))\n        let _3 := 256\n        mstore(add(value, 128), abi_decode_address(add(headStart, _3)))\n        mstore(add(value, 160), abi_decode_bool(add(headStart, _2)))\n        mstore(add(value, 192), abi_decode_address(add(headStart, 320)))\n        mstore(add(value, 224), abi_decode_uint8(add(headStart, 352)))\n        mstore(add(value, _3), abi_decode_address(add(headStart, 384)))\n        value4 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_address_t_bool__to_t_uint256_t_uint256_t_address_t_bool__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 96), iszero(iszero(value3)))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c806383c1087d14610050578063a18964a514610072578063d246754414610093575b600080fd5b81801561005c57600080fd5b5061007061006b366004613aea565b61009c565b005b610081670d2f13f7789f000081565b60405190815260200160405180910390f35b61008161271081565b6100a46138e5565b60408083015173ffffffffffffffffffffffffffffffffffffffff9081166000908152602089815283822060608701518416835284832060808801519094168352908890529290206100f582610832565b6101608501819052610108908390610a4b565b61018e8989886040518060a001604052808660405180602001604052908160008201548152505081526020018a6000015181526020018a6080015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60e0015160ff16815250610ad6565b5060c089018190526101608901516101ad955093508992509050611040565b86602001876040018860600183815250838152508381525050505061021b818460405180608001604052808861016001518152602001886040015181526020018860c00151815260200189610100015173ffffffffffffffffffffffffffffffffffffffff168152506110c6565b610226868487611575565b60a088015273ffffffffffffffffffffffffffffffffffffffff908116610120880152908116610100870152908116610140860181905260808701516040517f70a0823100000000000000000000000000000000000000000000000000000000815292166004830152906370a0823190602401602060405180830381865afa1580156102b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102da9190613bf3565b808552610160850151610100860151610120870151606088015160a089015160c08b015161030f968a969594939290916116a9565b60e08701526060860181905260808601919091526040850151141561035d57600382015461035d9082907501000000000000000000000000000000000000000000900461ffff166000611a09565b835160e085015160808601516103739190613c3b565b141561040b5760038301546103a89082907501000000000000000000000000000000000000000000900461ffff166000611a9e565b846080015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b6104158585611b27565b6101608401516060808701519086015161043492859290916000611db8565b61044a89898387610160015188606001516120f9565b8460a001511561046757610462898989868989612301565b610472565b61047283868661250d565b60e08401511561067c576000610487846125e5565b905060006104a2828760e0015161267c90919063ffffffff16565b61014087015160808901516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350600092911690631da24f3e90602401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190613bf3565b90508082111561055d5761055781846126bb565b60e08801525b86610140015173ffffffffffffffffffffffffffffffffffffffff1663f866c319896080015189610140015173ffffffffffffffffffffffffffffffffffffffff1663ae1673356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190613c53565b8a60e001516040518463ffffffff1660e01b81526004016106469392919073ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050505050505b6106bb338561016001516101e001518660600151886060015173ffffffffffffffffffffffffffffffffffffffff16612712909392919063ffffffff16565b6101608401516101e00151608086015160608601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff92831660248201526044810191909152911690636fd9767690606401600060405180830381600087803b15801561074757600080fd5b505af115801561075b573d6000803e3d6000fd5b50505050846080015173ffffffffffffffffffffffffffffffffffffffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff167fe413a321e8681d831f4dbccbca790d2952b56f977908e45be37335533e00528687606001518860800151338b60a0015160405161081f9493929190938452602084019290925273ffffffffffffffffffffffffffffffffffffffff1660408301521515606082015260800190565b60405180910390a4505050505050505050565b61083a61398d565b61084261398d565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190613bf3565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156109f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a189190613c70565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610a7a575050565b610a8482826127ed565b610a8e828261290f565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600080600080600080610aec8760000151511590565b15610b285750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081611033565b610bd760405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610c1c57608088015160ff16600090815260208a9052604090206060890151610c099190612a8f565b6101808401526101c08301526101a08201525b87602001518160c001511015610f3b5760c08101518851610c3c91612b6e565b610c505760c0810180516001019052610c1c565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610c965760c0810180516001019052610c1c565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610d2c5750816101e00151896080015160ff16145b610dd05760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190613bf3565b610dd7565b8161018001515b825260a082015115801590610df7575060c08201518951610df791612bf6565b15610ee757610e1489604001518284600001518560200151612c7a565b6040830181905261010083018051610e2d908390613c3b565b90525060808901516101e0830151610e489160ff1690612d55565b1515610240830152608082015115610e9e57816102400151610e6e578160800151610e75565b816101a001515b8260400151610e849190613cbb565b8261014001818151610e969190613c3b565b905250610ea7565b60016102208301525b816102400151610ebb578160a00151610ec2565b816101c001515b8260400151610ed19190613cbb565b8261016001818151610ee39190613c3b565b9052505b60c08201518951610ef791612d66565b15610f2a57610f1489604001518284600001518560200151612de8565b8261012001818151610f269190613c3b565b9052505b5060c0810180516001019052610c1c565b610100810151610f4c576000610f67565b80610100015181610140015181610f6557610f65613cf8565b045b610140820152610100810151610f7e576000610f99565b80610100015181610160015181610f9757610f97613cf8565b045b61016082015261012081015115610fdb57610fd6816101200151610fd0836101600151846101000151612f6890919063ffffffff16565b90612fab565b610ffd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b6000806000806000611056876080015189612fe2565b909250905060006110678284613c3b565b90506000670d2f13f7789f0000881161108257612710611086565b6113885b905060006110948383612f68565b90506000818b60200151116110ad578a602001516110af565b815b949850929650929450505050505b93509350939050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260408051602081019091528354815261114c9051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b1515602086015250505015801580835283516101c0015151671000000000000000811615156060850152670100000000000000161515604084015290611193575080604001515b6040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b60405180910390fd5b50806020015115801561121f57508060600151155b6040518060400160405280600281526020017f32390000000000000000000000000000000000000000000000000000000000008152509061128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50606082015173ffffffffffffffffffffffffffffffffffffffff1615806112c05750670d2f13f7789f00008260400151105b806113395750816060015173ffffffffffffffffffffffffffffffffffffffff16637a5d20ea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190613d9a565b6040518060400160405280600281526020017f3539000000000000000000000000000000000000000000000000000000000000815250906113a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50670de0b6b3a76400008260400151106040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525090611425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50604080516020810190915283549081905260101c61ffff161580159061148157506003830154604080516020810190915285548152611481917501000000000000000000000000000000000000000000900461ffff16612bf6565b15156080820181905260408051808201909152600281527f34360000000000000000000000000000000000000000000000000000000000006020820152906114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b508160200151600014156040518060400160405280600281526020017f34370000000000000000000000000000000000000000000000000000000000008152509061156e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b5050505050565b6004820154604080516020808201835285549182905291840151606085015160e086015160009586958695869573ffffffffffffffffffffffffffffffffffffffff90931694911c61ffff169260ff16156116985760e08901805160ff908116600090815260208e815260409182902054935182519182019092528d5490819052660100000000000090930473ffffffffffffffffffffffffffffffffffffffff169261162c929182169160a89190911c16612d55565b156116765760e08a015160ff16600090815260208d90526040902054640100000000900461ffff16935073ffffffffffffffffffffffffffffffffffffffff811615611676578092505b73ffffffffffffffffffffffffffffffffffffffff811615611696578091505b505b929a90995091975095509350505050565b6000806000611719604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015286169063b3596f0790602401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190613bf3565b81526040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015286169063b3596f0790602401602060405180830381865afa158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190613bf3565b6020828101919091526040805191820190528c549081905260301c60ff1660c08201526101c08b01515160301c60ff1660a0820181905260c0820151600a90810a60e08401520a61010082015260408051602081019091528c549081905260981c61ffff1661016082015261010081015181516118b89190613cbb565b8160e001518983602001516118cd9190613cbb565b6118d79190613cbb565b6118e19190613db7565b606082018190526118f29087612f68565b6040820181905287101561195f57610120810187905260e081015160208201516119549188916119229190613cbb565b610100840151610120850151855161193a9190613cbb565b6119449190613cbb565b61194e9190613db7565b9061311f565b610140820152611973565b604081015161012082015261014081018890525b610160810151156119e55761012081015161198e908761311f565b81610120015161199e9190613df2565b608082018190526101608201516119b59190612f68565b61018082018190526101208201516119cd9190613df2565b816101400151826101800151935093509350506119fb565b8061012001518161014001516000935093509350505b985098509895505050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50600182811b1b8115611a9057835481178455611a98565b835481191684555b50505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611b0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50600182811b81011b8115611a9057835481178455611a98565b8060600151816020015110611bff5761016081015161022081015160808401516060840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190613bf3565b610160820151602001525050565b602081015115611ccf5761016081015161022081015160808401516020840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190613bf3565b610160820151602001525b806101600151610200015173ffffffffffffffffffffffffffffffffffffffff16639dc29fac836080015183602001518460600151611d0e9190613df2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440160408051808303816000875af1158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190613e09565b61016083015160a081019190915260c001525b5050565b611de36040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151611df7916126bb565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991611f589190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f999190613e2d565b60408401526020830152808252611faf9061314a565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611ff29061314a565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516120439061314a565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051602081019091528354815260009081906121189088886131f0565b509150915081156122f85773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff909116919061219a9060029060301c60ff166121809190613df2565b61218b90600a613f7b565b6121959087613db7565b61314a565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161161224a5773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a26122f5565b60006122568284613f87565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a2505b50505b50505050505050565b6101408101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123979190613bf3565b610140830151608080860151908501516040517ff866c31900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201523360248201526044810191909152929350169063f866c31990606401600060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050505080600014156122f85733600090815260208681526040918290208251918201909252855481526004860154612488918a918a91859173ffffffffffffffffffffffffffffffffffffffff166132a5565b156125035760038501546124bc9082907501000000000000000000000000000000000000000000900461ffff166001611a9e565b6040808501519051339173ffffffffffffffffffffffffffffffffffffffff16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a35b5050505050505050565b600061251884610832565b90506125248482610a4b565b6040830151608083015161253f918691849190600090611db8565b610140820151608080850151908401516101008401516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201523360248201526044810192909252606482015291169063d7020d0a90608401600060405180830381600087803b1580156125d157600080fd5b505af1158015612503573d6000803e3d6000fd5b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561262b575050600101546fffffffffffffffffffffffffffffffff1690565b600183015461266f906fffffffffffffffffffffffffffffffff808216916126699170010000000000000000000000000000000090910416846134e7565b906126bb565b9392505050565b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126a057600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff839004841115176126f057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af161277d573d6000803e3d6000fd5b5061278785613524565b61156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401611201565b6101608101511561287d57600061280e8261016001518361024001516134e7565b90506128278260e00151826126bb90919063ffffffff16565b61010083018190526128389061314a565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611db457600061289a8261018001518361024001516135ee565b90506128b4826101200151826126bb90919063ffffffff16565b61014083018190526128c59061314a565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b6129486040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161295757505050565b6101208201518251612968916126bb565b6020820152610140820151825161297e916126bb565b604082015260608201516102608301516102408401516129a692919064ffffffffff166135f7565b6060820181905260408301516129bb916126bb565b8082526020820151608084015160408401516129d79190613c3b565b6129e19190613df2565b6129eb9190613df2565b608082018190526101a0830151612a029190612f68565b60a0820181905215612a8a57612a2d6121958361010001518360a0015161267c90919063ffffffff16565b600884018054600090612a539084906fffffffffffffffffffffffffffffffff16613fb8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015612b53576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015612b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b509190613bf3565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612be0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50508151600182901b1c60031615155b92915050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612c68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50509051600191821b82011c16151590565b600080612c86856125e5565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792612d2c928692911690631da24f3e90602401602060405180830381865afa158015612d08573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126699190613bf3565b612d369190613cbb565b9050838181612d4757612d47613cf8565b04925050505b949350505050565b6000821580159061266f5750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e829190613bf3565b90508015612ea057612e9d612e968661373e565b82906126bb565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015612f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f369190613bf3565b612f409082613c3b565b9050612f4c8185613cbb565b9050828181612f5d57612f5d613cf8565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517612f9d57600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715612fcb57600080fd5b50670de0b6b3a76400009190910260028204010490565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa158015613059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307d9190613bf3565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa1580156130f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131149190613bf3565b915091509250929050565b600081156127106002840419048411171561313957600080fd5b506127109190910260028204010490565b60006fffffffffffffffffffffffffffffffff8211156131ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401611201565b5090565b60008060006131fe866137c2565b1561329557600061322f877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa613806565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015613291576001955090935091506110bd9050565b5050505b5060009586955085945092505050565b815160009060d41c64ffffffffff16156134cf5760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332a9190613c53565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133989190613c53565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134099190613c53565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa15801561349b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bf9190613d9a565b6134cd5760009150506134de565b505b6134db8686868661384a565b90505b95945050505050565b6000806134fb64ffffffffff841642613df2565b6135059085613cbb565b6301e1338090049050612d4d816b033b2e3c9fd0803ce8000000613c3b565b6000613564565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156135a357602081146135dd5761359e7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f61352b565b612676565b823b6135d4576135d47f475076323a206e6f74206120636f6e7472616374000000000000000000000000601461352b565b60019150612676565b3d6000803e50506000511515919050565b600061266f8383425b60008061360b64ffffffffff851684613df2565b905080613627576b033b2e3c9fd0803ce800000091505061266f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161365d576000613662565b600285035b925066038882915c40006136768a806126bb565b8161368357613683613cf8565b0491506301e13380613695838b6126bb565b816136a2576136a2613cf8565b0490506000826136b28688613cbb565b6136bc9190613cbb565b600290049050600082856136d0888a613cbb565b6136da9190613cbb565b6136e49190613cbb565b60069004905080826301e133806136fb8a8f613cbb565b6137059190613db7565b61371b906b033b2e3c9fd0803ce8000000613c3b565b6137259190613c3b565b61372f9190613c3b565b9b9a5050505050505050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613784575050600201546fffffffffffffffffffffffffffffffff1690565b600283015461266f906fffffffffffffffffffffffffffffffff808216916126699170010000000000000000000000000000000090910416846135ee565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa16801580159061266f57506137fe600182613df2565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156134de57600101613835565b6000613858825161ffff1690565b61386457506000612d4d565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166138a357506001612d4d565b6040805160208101909152835481526000906138c09087876131f0565b50509050801580156138db5750825160d41c64ffffffffff16155b9695505050505050565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200161398861398d565b905290565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613a116040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610120810167ffffffffffffffff81118282101715613a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b73ffffffffffffffffffffffffffffffffffffffff81168114613aad57600080fd5b50565b8035613abb81613a8b565b919050565b8015158114613aad57600080fd5b8035613abb81613ac0565b803560ff81168114613abb57600080fd5b60008060008060008587036101a0811215613b0457600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083011215613b4f57600080fd5b613b57613a3a565b91506080880135825260a08801356020830152613b7660c08901613ab0565b6040830152613b8760e08901613ab0565b6060830152610100613b9a818a01613ab0565b6080840152613baa828a01613ace565b60a0840152613bbc6101408a01613ab0565b60c0840152613bce6101608a01613ad9565b60e0840152613be06101808a01613ab0565b9083015250949793965091945092919050565b600060208284031215613c0557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613c4e57613c4e613c0c565b500190565b600060208284031215613c6557600080fd5b815161266f81613a8b565b60008060008060808587031215613c8657600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613cb057600080fd5b939692955090935050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cf357613cf3613c0c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208083528351808285015260005b81811015613d5457858101830151858201604001528201613d38565b81811115613d66576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215613dac57600080fd5b815161266f81613ac0565b600082613ded577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015613e0457613e04613c0c565b500390565b60008060408385031215613e1c57600080fd5b505080516020909101519092909150565b600080600060608486031215613e4257600080fd5b8351925060208401519150604084015190509250925092565b600181815b80851115613eb457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613e9a57613e9a613c0c565b80851615613ea757918102915b93841c9390800290613e60565b509250929050565b600082613ecb57506001612bf0565b81613ed857506000612bf0565b8160018114613eee5760028114613ef857613f14565b6001915050612bf0565b60ff841115613f0957613f09613c0c565b50506001821b612bf0565b5060208310610133831016604e8410600b8410161715613f37575081810a612bf0565b613f418383613e5b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613f7357613f73613c0c565b029392505050565b600061266f8383613ebc565b60006fffffffffffffffffffffffffffffffff83811690831681811015613fb057613fb0613c0c565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613fe357613fe3613c0c565b0194935050505056fea264697066735822122055058f30d079326d08acced39bc803044f67c109a7c9f8f4943e229d773970f364736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x83C1087D EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xA18964A5 EQ PUSH2 0x72 JUMPI DUP1 PUSH4 0xD2467544 EQ PUSH2 0x93 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x3AEA JUMP JUMPDEST PUSH2 0x9C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x81 PUSH8 0xD2F13F7789F0000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x81 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0xA4 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE DUP4 DUP3 KECCAK256 PUSH1 0x60 DUP8 ADD MLOAD DUP5 AND DUP4 MSTORE DUP5 DUP4 KECCAK256 PUSH1 0x80 DUP9 ADD MLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP1 DUP9 SWAP1 MSTORE SWAP3 SWAP1 KECCAK256 PUSH2 0xF5 DUP3 PUSH2 0x832 JUMP JUMPDEST PUSH2 0x160 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x108 SWAP1 DUP4 SWAP1 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x18E DUP10 DUP10 DUP9 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0xC0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0xE0 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0xAD6 JUMP JUMPDEST POP PUSH1 0xC0 DUP10 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP10 ADD MLOAD PUSH2 0x1AD SWAP6 POP SWAP4 POP DUP10 SWAP3 POP SWAP1 POP PUSH2 0x1040 JUMP JUMPDEST DUP7 PUSH1 0x20 ADD DUP8 PUSH1 0x40 ADD DUP9 PUSH1 0x60 ADD DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP POP POP POP PUSH2 0x21B DUP2 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH2 0x160 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x10C6 JUMP JUMPDEST PUSH2 0x226 DUP7 DUP5 DUP8 PUSH2 0x1575 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x120 DUP9 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x100 DUP8 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DA SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x100 DUP7 ADD MLOAD PUSH2 0x120 DUP8 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0xA0 DUP10 ADD MLOAD PUSH1 0xC0 DUP12 ADD MLOAD PUSH2 0x30F SWAP7 DUP11 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP1 SWAP2 PUSH2 0x16A9 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP6 ADD MLOAD EQ ISZERO PUSH2 0x35D JUMPI PUSH1 0x3 DUP3 ADD SLOAD PUSH2 0x35D SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x1A09 JUMP JUMPDEST DUP4 MLOAD PUSH1 0xE0 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x373 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST EQ ISZERO PUSH2 0x40B JUMPI PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0x3A8 SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH2 0x415 DUP6 DUP6 PUSH2 0x1B27 JUMP JUMPDEST PUSH2 0x160 DUP5 ADD MLOAD PUSH1 0x60 DUP1 DUP8 ADD MLOAD SWAP1 DUP7 ADD MLOAD PUSH2 0x434 SWAP3 DUP6 SWAP3 SWAP1 SWAP2 PUSH1 0x0 PUSH2 0x1DB8 JUMP JUMPDEST PUSH2 0x44A DUP10 DUP10 DUP4 DUP8 PUSH2 0x160 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH2 0x20F9 JUMP JUMPDEST DUP5 PUSH1 0xA0 ADD MLOAD ISZERO PUSH2 0x467 JUMPI PUSH2 0x462 DUP10 DUP10 DUP10 DUP7 DUP10 DUP10 PUSH2 0x2301 JUMP JUMPDEST PUSH2 0x472 JUMP JUMPDEST PUSH2 0x472 DUP4 DUP7 DUP7 PUSH2 0x250D JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MLOAD ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 PUSH2 0x487 DUP5 PUSH2 0x25E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4A2 DUP3 DUP8 PUSH1 0xE0 ADD MLOAD PUSH2 0x267C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP8 ADD MLOAD PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x543 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x55D JUMPI PUSH2 0x557 DUP2 DUP5 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE JUMPDEST DUP7 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF866C319 DUP10 PUSH1 0x80 ADD MLOAD DUP10 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE167335 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5F7 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST DUP11 PUSH1 0xE0 ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x646 SWAP4 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x660 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x674 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMPDEST PUSH2 0x6BB CALLER DUP6 PUSH2 0x160 ADD MLOAD PUSH2 0x1E0 ADD MLOAD DUP7 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2712 SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x160 DUP5 ADD MLOAD PUSH2 0x1E0 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x747 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x75B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE413A321E8681D831F4DBCCBCA790D2952B56F977908E45BE37335533E005286 DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD CALLER DUP12 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x81F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x83A PUSH2 0x398D JUMP JUMPDEST PUSH2 0x842 PUSH2 0x398D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x96F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x993 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA18 SWAP2 SWAP1 PUSH2 0x3C70 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0xA7A JUMPI POP POP JUMP JUMPDEST PUSH2 0xA84 DUP3 DUP3 PUSH2 0x27ED JUMP JUMPDEST PUSH2 0xA8E DUP3 DUP3 PUSH2 0x290F JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xAEC DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0xB28 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x1033 JUMP JUMPDEST PUSH2 0xBD7 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC1C JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0xC09 SWAP2 SWAP1 PUSH2 0x2A8F JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0xF3B JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0xC3C SWAP2 PUSH2 0x2B6E JUMP JUMPDEST PUSH2 0xC50 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xC96 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD2C JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0xDD0 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDA7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDCB SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0xDD7 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xDF7 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xDF7 SWAP2 PUSH2 0x2BF6 JUMP JUMPDEST ISZERO PUSH2 0xEE7 JUMPI PUSH2 0xE14 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x2C7A JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0xE2D SWAP1 DUP4 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0xE48 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x2D55 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0xE9E JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xE6E JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xE75 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xE84 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0xE96 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xEA7 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xEBB JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0xEC2 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xED1 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0xEE3 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xEF7 SWAP2 PUSH2 0x2D66 JUMP JUMPDEST ISZERO PUSH2 0xF2A JUMPI PUSH2 0xF14 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x2DE8 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0xF26 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xF4C JUMPI PUSH1 0x0 PUSH2 0xF67 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0xF65 JUMPI PUSH2 0xF65 PUSH2 0x3CF8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xF7E JUMPI PUSH1 0x0 PUSH2 0xF99 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0xF97 JUMPI PUSH2 0xF97 PUSH2 0x3CF8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0xFDB JUMPI PUSH2 0xFD6 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0xFD0 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x2F68 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2FAB JUMP JUMPDEST PUSH2 0xFFD JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1056 DUP8 PUSH1 0x80 ADD MLOAD DUP10 PUSH2 0x2FE2 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0x1067 DUP3 DUP5 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH8 0xD2F13F7789F0000 DUP9 GT PUSH2 0x1082 JUMPI PUSH2 0x2710 PUSH2 0x1086 JUMP JUMPDEST PUSH2 0x1388 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1094 DUP4 DUP4 PUSH2 0x2F68 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP12 PUSH1 0x20 ADD MLOAD GT PUSH2 0x10AD JUMPI DUP11 PUSH1 0x20 ADD MLOAD PUSH2 0x10AF JUMP JUMPDEST DUP2 JUMPDEST SWAP5 SWAP9 POP SWAP3 SWAP7 POP SWAP3 SWAP5 POP POP POP POP POP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH2 0x114C SWAP1 MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE POP POP POP ISZERO DUP1 ISZERO DUP1 DUP4 MSTORE DUP4 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH1 0x40 DUP5 ADD MSTORE SWAP1 PUSH2 0x1193 JUMPI POP DUP1 PUSH1 0x40 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x120A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH1 0x20 ADD MLOAD ISZERO DUP1 ISZERO PUSH2 0x121F JUMPI POP DUP1 PUSH1 0x60 ADD MLOAD ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x128D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO DUP1 PUSH2 0x12C0 JUMPI POP PUSH8 0xD2F13F7789F0000 DUP3 PUSH1 0x40 ADD MLOAD LT JUMPDEST DUP1 PUSH2 0x1339 JUMPI POP DUP2 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7A5D20EA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1315 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1339 SWAP2 SWAP1 PUSH2 0x3D9A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x13A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP3 PUSH1 0x40 ADD MLOAD LT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3435000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1425 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x10 SHR PUSH2 0xFFFF AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1481 JUMPI POP PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH2 0x1481 SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x2BF6 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3436000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x14F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x0 EQ ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3437000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x156E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP6 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP2 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0x0 SWAP6 DUP7 SWAP6 DUP7 SWAP6 DUP7 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP5 SWAP2 SHR PUSH2 0xFFFF AND SWAP3 PUSH1 0xFF AND ISZERO PUSH2 0x1698 JUMPI PUSH1 0xE0 DUP10 ADD DUP1 MLOAD PUSH1 0xFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP15 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP4 MLOAD DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP14 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP4 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 PUSH2 0x162C SWAP3 SWAP2 DUP3 AND SWAP2 PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHR AND PUSH2 0x2D55 JUMP JUMPDEST ISZERO PUSH2 0x1676 JUMPI PUSH1 0xE0 DUP11 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP14 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0x100000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1676 JUMPI DUP1 SWAP3 POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1696 JUMPI DUP1 SWAP2 POP JUMPDEST POP JUMPDEST SWAP3 SWAP11 SWAP1 SWAP10 POP SWAP2 SWAP8 POP SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1719 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1785 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17A9 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1817 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x183B SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 ADD SWAP1 MSTORE DUP13 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1C0 DUP12 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0xA SWAP1 DUP2 EXP PUSH1 0xE0 DUP5 ADD MSTORE EXP PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP13 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD DUP2 MLOAD PUSH2 0x18B8 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD MLOAD DUP10 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x18CD SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x18D7 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x18E1 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x18F2 SWAP1 DUP8 PUSH2 0x2F68 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE DUP8 LT ISZERO PUSH2 0x195F JUMPI PUSH2 0x120 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1954 SWAP2 DUP9 SWAP2 PUSH2 0x1922 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH2 0x120 DUP6 ADD MLOAD DUP6 MLOAD PUSH2 0x193A SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x1944 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x194E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 PUSH2 0x311F JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x1973 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x140 DUP2 ADD DUP9 SWAP1 MSTORE JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x19E5 JUMPI PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x198E SWAP1 DUP8 PUSH2 0x311F JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x199E SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD MLOAD PUSH2 0x19B5 SWAP2 SWAP1 PUSH2 0x2F68 JUMP JUMPDEST PUSH2 0x180 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD MLOAD PUSH2 0x19CD SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD MLOAD DUP3 PUSH2 0x180 ADD MLOAD SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x19FB JUMP JUMPDEST DUP1 PUSH2 0x120 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP JUMPDEST SWAP9 POP SWAP9 POP SWAP9 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x1A78 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL SHL DUP2 ISZERO PUSH2 0x1A90 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x1A98 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x1B0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x1A90 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x1A98 JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT PUSH2 0x1BFF JUMPI PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x220 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x140 SWAP1 SWAP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP5 ADD MSTORE AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BF1 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x160 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x1CCF JUMPI PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x220 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x140 SWAP1 SWAP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP5 ADD MSTORE AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CC4 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x160 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST DUP1 PUSH2 0x160 ADD MLOAD PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC DUP4 PUSH1 0x80 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x1D0E SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DA1 SWAP2 SWAP1 PUSH2 0x3E09 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MLOAD PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 ADD MSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1DE3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1DF7 SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x1F58 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F99 SWAP2 SWAP1 PUSH2 0x3E2D JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1FAF SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x1FF2 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x2043 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x2118 SWAP1 DUP9 DUP9 PUSH2 0x31F0 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x22F8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 PUSH2 0x219A SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x2180 SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x218B SWAP1 PUSH1 0xA PUSH2 0x3F7B JUMP JUMPDEST PUSH2 0x2195 SWAP1 DUP8 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x314A JUMP JUMPDEST SWAP1 POP DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT PUSH2 0x224A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x22F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2256 DUP3 DUP5 PUSH2 0x3F87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP14 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 DUP6 OR SWAP1 SSTORE SWAP1 MLOAD DUP4 DUP2 MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x140 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2373 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2397 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x80 DUP1 DUP7 ADD MLOAD SWAP1 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF866C31900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP4 POP AND SWAP1 PUSH4 0xF866C319 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2434 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x22F8 JUMPI CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH1 0x4 DUP7 ADD SLOAD PUSH2 0x2488 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP6 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x32A5 JUMP JUMPDEST ISZERO PUSH2 0x2503 JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0x24BC SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x1A9E JUMP JUMPDEST PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 MLOAD CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2518 DUP5 PUSH2 0x832 JUMP JUMPDEST SWAP1 POP PUSH2 0x2524 DUP5 DUP3 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x253F SWAP2 DUP7 SWAP2 DUP5 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x1DB8 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x80 DUP1 DUP6 ADD MLOAD SWAP1 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2503 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x262B JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x266F SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x2669 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x34E7 JUMP JUMPDEST SWAP1 PUSH2 0x26BB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x26F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x277D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x2787 DUP6 PUSH2 0x3524 JUMP JUMPDEST PUSH2 0x156E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1201 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x287D JUMPI PUSH1 0x0 PUSH2 0x280E DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x34E7 JUMP JUMPDEST SWAP1 POP PUSH2 0x2827 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x26BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x2838 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1DB4 JUMPI PUSH1 0x0 PUSH2 0x289A DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x35EE JUMP JUMPDEST SWAP1 POP PUSH2 0x28B4 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x26BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x28C5 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x2948 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x2957 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x2968 SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x297E SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x29A6 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x35F7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x29BB SWAP2 PUSH2 0x26BB JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x29D7 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x29E1 SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x29EB SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x2A02 SWAP2 SWAP1 PUSH2 0x2F68 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x2A8A JUMPI PUSH2 0x2A2D PUSH2 0x2195 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x267C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2A53 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3FB8 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x2B53 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B2C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B50 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2BE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x1 DUP3 SWAP1 SHL SHR PUSH1 0x3 AND ISZERO ISZERO JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2C68 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C86 DUP6 PUSH2 0x25E5 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x2D2C SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2669 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x2D36 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x2D47 JUMPI PUSH2 0x2D47 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x266F JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2DD8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E82 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2EA0 JUMPI PUSH2 0x2E9D PUSH2 0x2E96 DUP7 PUSH2 0x373E JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x26BB JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F36 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x2F40 SWAP1 DUP3 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 POP PUSH2 0x2F4C DUP2 DUP6 PUSH2 0x3CBB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x2F5D JUMPI PUSH2 0x2F5D PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x2F9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2FCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3059 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x307D SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3114 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x2710 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x3139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x31EC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1201 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x31FE DUP7 PUSH2 0x37C2 JUMP JUMPDEST ISZERO PUSH2 0x3295 JUMPI PUSH1 0x0 PUSH2 0x322F DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x3291 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x10BD SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP6 DUP7 SWAP6 POP DUP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x34CF JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3306 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x332A SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3374 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3398 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3409 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x349B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34BF SWAP2 SWAP1 PUSH2 0x3D9A JUMP JUMPDEST PUSH2 0x34CD JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x34DE JUMP JUMPDEST POP JUMPDEST PUSH2 0x34DB DUP7 DUP7 DUP7 DUP7 PUSH2 0x384A JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x34FB PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x3505 SWAP1 DUP6 PUSH2 0x3CBB JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x2D4D DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C3B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3564 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x35A3 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x35DD JUMPI PUSH2 0x359E PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x352B JUMP JUMPDEST PUSH2 0x2676 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x35D4 JUMPI PUSH2 0x35D4 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x352B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2676 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY POP POP PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x266F DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x360B PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x3DF2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3627 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x266F JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x365D JUMPI PUSH1 0x0 PUSH2 0x3662 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3676 DUP11 DUP1 PUSH2 0x26BB JUMP JUMPDEST DUP2 PUSH2 0x3683 JUMPI PUSH2 0x3683 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3695 DUP4 DUP12 PUSH2 0x26BB JUMP JUMPDEST DUP2 PUSH2 0x36A2 JUMPI PUSH2 0x36A2 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x36B2 DUP7 DUP9 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36BC SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x36D0 DUP9 DUP11 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36DA SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36E4 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x36FB DUP11 DUP16 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x3705 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x371B SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x3725 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x372F SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3784 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x266F SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x2669 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x35EE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x266F JUMPI POP PUSH2 0x37FE PUSH1 0x1 DUP3 PUSH2 0x3DF2 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x34DE JUMPI PUSH1 0x1 ADD PUSH2 0x3835 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3858 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3864 JUMPI POP PUSH1 0x0 PUSH2 0x2D4D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x38A3 JUMPI POP PUSH1 0x1 PUSH2 0x2D4D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x38C0 SWAP1 DUP8 DUP8 PUSH2 0x31F0 JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x38DB JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3988 PUSH2 0x398D JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3A11 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3A85 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3ABB DUP2 PUSH2 0x3A8B JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3ABB DUP2 PUSH2 0x3AC0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3ABB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x1A0 DUP2 SLT ISZERO PUSH2 0x3B04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x120 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x3B4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3B57 PUSH2 0x3A3A JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD DUP3 MSTORE PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x3B76 PUSH1 0xC0 DUP10 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3B87 PUSH1 0xE0 DUP10 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x3B9A DUP2 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x3BAA DUP3 DUP11 ADD PUSH2 0x3ACE JUMP JUMPDEST PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3BBC PUSH2 0x140 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x3BCE PUSH2 0x160 DUP11 ADD PUSH2 0x3AD9 JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x3BE0 PUSH2 0x180 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE POP SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 POP SWAP3 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3C4E JUMPI PUSH2 0x3C4E PUSH2 0x3C0C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x266F DUP2 PUSH2 0x3A8B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3C86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3CF3 JUMPI PUSH2 0x3CF3 PUSH2 0x3C0C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D54 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3D38 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3D66 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x266F DUP2 PUSH2 0x3AC0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3DED JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3E04 JUMPI PUSH2 0x3E04 PUSH2 0x3C0C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x3EB4 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3E9A JUMPI PUSH2 0x3E9A PUSH2 0x3C0C JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x3EA7 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x3E60 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3ECB JUMPI POP PUSH1 0x1 PUSH2 0x2BF0 JUMP JUMPDEST DUP2 PUSH2 0x3ED8 JUMPI POP PUSH1 0x0 PUSH2 0x2BF0 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3EEE JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3EF8 JUMPI PUSH2 0x3F14 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x2BF0 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3F09 JUMPI PUSH2 0x3F09 PUSH2 0x3C0C JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x2BF0 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3F37 JUMPI POP DUP2 DUP2 EXP PUSH2 0x2BF0 JUMP JUMPDEST PUSH2 0x3F41 DUP4 DUP4 PUSH2 0x3E5B JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3F73 JUMPI PUSH2 0x3F73 PUSH2 0x3C0C JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x266F DUP4 DUP4 PUSH2 0x3EBC JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3FB0 JUMPI PUSH2 0x3FB0 PUSH2 0x3C0C JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3FE3 JUMPI PUSH2 0x3FE3 PUSH2 0x3C0C JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE SDIV DUP16 ADDRESS 0xD0 PUSH26 0x326D08ACCED39BC803044F67C109A7C9F8F4943E229D773970F3 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1399:19850:100:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4278:4956;;;;;;;;;;-1:-1:-1;4278:4956:100;;;;;:::i;:::-;;:::i;:::-;;3043:59;;3095:7;3043:59;;;;;2804:25:124;;;2792:2;2777:18;3043:59:100;;;;;;;2761:58;;2816:3;2761:58;;4278:4956;4656:36;;:::i;:::-;4762:22;;;;;4749:36;;;;4699:47;4749:36;;;;;;;;;;4848:16;;;;4835:30;;;;;;;4935:11;;;;4923:24;;;;;;;;;;;;4977:19;4835:30;4977:17;:19::i;:::-;4953:21;;;:43;;;5002:46;;:11;;:23;:46::i;:::-;5087:357;5132:12;5152;5172:15;5195:243;;;;;;;;5258:10;5195:243;;;;;;;;;;;;;;;;;;;;;5293:6;:20;;;5195:243;;;;5329:6;:11;;;5195:243;;;;;;5358:6;:18;;;5195:243;;;;;;5405:6;:24;;;5195:243;;;;;5087:37;:357::i;:::-;-1:-1:-1;5064:17:100;;;5055:389;;;5547:21;;;;5525:88;;-1:-1:-1;5547:21:100;-1:-1:-1;5576:6:100;;-1:-1:-1;5055:389:100;-1:-1:-1;5525:14:100;:88::i;:::-;5452:4;:21;;5475:4;:18;;5495:4;:26;;5451:162;;;;;;;;;;;;;;;5620:331;5667:10;5685:17;5710:235;;;;;;;;5778:4;:21;;;5710:235;;;;5820:4;:18;;;5710:235;;;;5862:4;:17;;;5710:235;;;;5910:6;:26;;;5710:235;;;;;5620:39;:331::i;:::-;6087:65;6109:15;6126:17;6145:6;6087:21;:65::i;:::-;6057:21;;;5958:194;;;;;6029:20;;;5958:194;;;;5995:26;;;5958:194;;;;5966:21;;;5958:194;;;6220:11;;;;6188:44;;;;;3004:55:124;;6188:44:100;;;2986:74:124;5958:194:100;6188:31;;2959:18:124;;6188:44:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6159:73;;;6436:21;;;;6465:26;;;;6499:20;;;;6527:26;;;;6595:21;;;;6643:18;;;;6363:305;;6411:17;;6436:21;6465:26;6499:20;6527:26;6159:73;;6363:40;:305::i;:::-;6321:33;;;6239:429;6287:26;;;6239:429;;;6247:32;;;6239:429;;;;6679:18;;;;:48;6675:115;;;6761:14;;;;6737:46;;:10;;6761:14;;;;;6777:5;6737:23;:46::i;:::-;7024:26;;6981:33;;;;6946:32;;;;:68;;6981:33;6946:68;:::i;:::-;:104;6935:278;;;7097:20;;;;7065:60;;:10;;7097:20;;;;;7119:5;7065:31;:60::i;:::-;7194:6;:11;;;7138:68;;7170:6;:22;;;7138:68;;;;;;;;;;;;6935:278;7219:29;7235:6;7243:4;7219:15;:29::i;:::-;7294:21;;;;7323:16;;;;;7347:26;;;;7255:133;;:11;;7294:21;;7381:1;7255:31;:133::i;:::-;7395:174;7450:12;7470;7490:10;7508:4;:21;;;7537:4;:26;;;7395:47;:174::i;:::-;7580:6;:20;;;7576:208;;;7610:91;7628:12;7642;7656:11;7669:17;7688:6;7696:4;7610:17;:91::i;:::-;7576:208;;;7722:55;7745:17;7764:6;7772:4;7722:22;:55::i;:::-;7844:33;;;;:38;7840:783;;7892:22;7917:39;:17;:37;:39::i;:::-;7892:64;;7964:40;8007:72;8057:14;8007:4;:33;;;:40;;:72;;;;:::i;:::-;8119:21;;;;8157:11;;;;8119:50;;;;;:37;3004:55:124;;;8119:50:100;;;2986:74:124;7964:115:100;;-1:-1:-1;8087:29:100;;8119:37;;;;;2959:18:124;;8119:50:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8087:82;;8314:21;8279:32;:56;8275:161;;;8383:44;:21;8412:14;8383:28;:44::i;:::-;8347:33;;;:80;8275:161;8443:4;:21;;;:43;;;8496:6;:11;;;8517:4;:21;;;:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8575:4;:33;;;8443:173;;;;;;;;;;;;;;;;4050:42:124;4119:15;;;4101:34;;4171:15;;;;4166:2;4151:18;;4144:43;4218:2;4203:18;;4196:34;;;;4028:2;4013:18;;3838:398;8443:173:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7884:739;;;7840:783;8717:142;8766:10;8784:4;:21;;;:35;;;8827:4;:26;;;8724:6;:16;;;8717:41;;;;:142;;;;;;:::i;:::-;8874:21;;;;:35;;;8952:11;;;;8971:26;;;;8866:137;;;;;8934:10;8866:137;;;4101:34:124;8866:60:100;4171:15:124;;;4151:18;;;4144:43;4203:18;;;4196:34;;;;8866:60:100;;;;;4013:18:124;;8866:137:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9092:6;:11;;;9015:214;;9068:6;:16;;;9015:214;;9038:6;:22;;;9015:214;;;9111:4;:26;;;9145:4;:32;;;9185:10;9203:6;:20;;;9015:214;;;;;;;;4466:25:124;;;4522:2;4507:18;;4500:34;;;;4582:42;4570:55;4565:2;4550:18;;4543:83;4669:14;4662:22;4657:2;4642:18;;4635:50;4453:3;4438:19;;4241:450;9015:214:100;;;;;;;;4650:4584;;;;4278:4956;;;;;:::o;12460:1739:102:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:88;15237:71;;;;12694:26:102;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:102;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:102;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:102:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:102;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;2633:3723:98:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:89;:14;;6091:122;3008:27:98;3004:93;;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3065:17:98;;-1:-1:-1;3053:1:98;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:98;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:88;4339:3;23023:71;;;;;4004:23:98;;;3898:180;3439:2:88;22869:67;;;;3971:13:98;;;3898:180;;;22674:9:88;3298:2;22691:85;;;;;3926:25:98;;;3898:180;22662:21:88;;;3908:8:98;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:98;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;3004:55:124;;;4308:75:98;;;2986:74:124;4308:47:98;;;;;2959:18:124;;4308:75:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:98;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:98;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:98;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:98;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:98;-1:-1:-1;5573:6:98;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:98;;-1:-1:-1;6240:11:98;-1:-1:-1;6259:28:98;;-1:-1:-1;5921:220:98;-1:-1:-1;6320:25:98;-1:-1:-1;2633:3723:98;;;;;;;;;;;;:::o;14520:842:100:-;14707:7;14716;14725;14741:22;14765:24;14793:75;14827:6;:11;;;14846:16;14793:26;:75::i;:::-;14740:128;;-1:-1:-1;14740:128:100;-1:-1:-1;14875:21:100;14899:33;14740:128;;14899:33;:::i;:::-;14875:57;;14939:19;3095:7;14961:12;:40;:118;;2816:3;14961:118;;;2509:5;14961:118;14939:140;-1:-1:-1;15086:27:100;15116:37;:13;14939:140;15116:24;:37::i;:::-;15086:67;;15160:29;15213:19;15192:6;:18;;;:40;:95;;15269:6;:18;;;15192:95;;;15241:19;15192:95;15302:16;;-1:-1:-1;15320:13:100;;-1:-1:-1;15160:127:100;;-1:-1:-1;;;;;14520:842:100;;;;;;;;:::o;19218:1573:104:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19562:54:104;;;;;;;;;;;;;:56;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;19562:56:104;19493:125;;19530:28;;;19493:125;-1:-1:-1;;;19493:125:104;;;;;;19692:30;;:58;;;21735:9:88;21948:12;21936:24;;21935:31;;19661:27:104;;;19625:143;21779:12:88;21767:24;21766:31;;19626:27:104;;;19625:143;19493:125;19783:59;;;19815:4;:27;;;19783:59;19844:23;;;;;;;;;;;;;;;;;19775:93;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19883:4;:28;;;19882:29;:61;;;;;19916:4;:27;;;19915:28;19882:61;19945:21;;;;;;;;;;;;;;;;;19874:93;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19989:26:104;;;;:40;;;;:117;;;2489:7;20041:6;:19;;;:65;19989:117;:200;;;;20139:6;:26;;;20118:69;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20197:41;;;;;;;;;;;;;;;;;19974:270;;;;;;;;;;;;;;:::i;:::-;;2677:4;20266:6;:19;;;:57;20331:40;;;;;;;;;;;;;;;;;20251:126;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20417:55:104;;;;;;;;;;;;;;;3298:2:88;6706:85;;;20417:62:104;;;;:124;;-1:-1:-1;20520:20:104;;;;20489:30;;;;;;;;;;;;;:52;;20520:20;;;;;20489:30;:52::i;:::-;20384:157;;:24;;;:157;;;20663:38;;;;;;;;;;;;;;;;;;20629:73;;;;;;;;;;;;;:::i;:::-;;20716:6;:16;;;20736:1;20716:21;;20739:46;;;;;;;;;;;;;;;;;20708:78;;;;;;;;;;;;;;:::i;:::-;;19436:1355;19218:1573;;;:::o;15926:1348:100:-;16243:31;;;;16308:51;;;;;;;;;;;;;;;16400:22;;;;16454:16;;;;16481:24;;;;-1:-1:-1;;;;;;;;16243:31:100;;;;;7548:77:88;;;;;16481:29:100;;;16477:703;;16563:24;;;;;16547:41;;;;16520:24;16547:41;;;;;;;;;;;;:53;16662:24;;16698:48;;;;;;;;;;;;;;16547:53;;;;;;;16622:136;;;;;;4339:3:88;20323:71;;;;;16622:28:100;:136::i;:::-;16609:363;;;16812:24;;;;16796:41;;;;;;;;;;;;;:58;;;;;;;-1:-1:-1;16869:30:100;;;;16865:99;;16937:16;16913:40;;16865:99;17089:30;;;;17085:89;;17149:16;17131:34;;17085:89;16512:668;16477:703;17194:16;;17212:21;;-1:-1:-1;17194:16:100;;-1:-1:-1;17235:15:100;-1:-1:-1;15926:1348:100;-1:-1:-1;;;;15926:1348:100:o;18966:2281::-;19321:7;19330;19339;19354:51;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19354:51:100;19435:37;;;;;:20;3004:55:124;;;19435:37:100;;;2986:74:124;19435:20:100;;;;;2959:18:124;;19435:37:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19412:60;;19500:31;;;;;:20;3004:55:124;;;19500:31:100;;;2986:74:124;19500:20:100;;;;;2959:18:124;;19500:31:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19478:19;;;;:53;;;;19564:43;;;;;;;;;;;;;;3439:2:88;8367:67;;;19538:23:100;;;:71;19640:37;;;;8368:9:88;3439:2;8367:67;;;19615:22:100;;;:76;;;19749:23;;;;19743:2;:29;;;19716:24;;;:56;19801:28;19780:18;;;:49;19882:71;;;;;;;;;;;;;;;4270:3:88;18603:91;;;19842:37:100;;;:113;20168:18;;;;20145:20;;:41;;20168:18;20145:41;:::i;:::-;20109:4;:24;;;20095:11;20073:4;:19;;;:33;;;;:::i;:::-;:60;;;;:::i;:::-;20071:116;;;;:::i;:::-;20043:19;;;:144;;;20226:48;;20257:16;20226:30;:48::i;:::-;20194:29;;;:80;;;20285:53;-1:-1:-1;20281:425:100;;;20348:21;;;:45;;;20527:24;;;;20505:19;;;;20425:157;;20565:16;;20505:46;;20527:24;20505:46;:::i;:::-;20474:18;;;;20450:21;;;;20427:20;;:44;;20450:21;20427:44;:::i;:::-;:65;;;;:::i;:::-;20426:126;;;;:::i;:::-;20425:139;;:157::i;:::-;20401:21;;;:181;20281:425;;;20627:29;;;;20603:21;;;:53;20664:21;;;:35;;;20281:425;20716:37;;;;:42;20712:531;;20831:21;;;;:50;;20864:16;20831:32;:50::i;:::-;20799:4;:21;;;:82;;;;:::i;:::-;20768:20;;;:113;;;20961:37;;;;20920:86;;20768:113;20920:31;:86::i;:::-;20890:27;;;:116;;;21032:21;;;;:51;;20890:116;21032:51;:::i;:::-;21093:4;:21;;;21124:4;:27;;;21015:144;;;;;;;;;20712:531;21188:4;:21;;;21211:4;:21;;;21234:1;21180:56;;;;;;;18966:2281;;;;;;;;;;;;;:::o;972:403:89:-;1190:28;;;;;;;;;;;;;;;;;5284:3:88;1134:54:89;;1126:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1263:1:89;1247:17;;;1241:24;1273:92;;;;1298:16;;;;;;1273:92;;;1339:17;;1352:4;;1339:17;;;1273:92;1108:263;972:403;;;:::o;1688:433::-;1922:28;;;;;;;;;;;;;;;;;5284:3:88;1866:54:89;;1858:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1996:1:89;1980:17;;;1979:23;;1973:30;2011:100;;;;2044:16;;;;;;2011:100;;12689:1148:100;12862:4;:26;;;12837:4;:21;;;:51;12833:1000;;12973:21;;;;:46;;;;13044:11;;;;13067:26;;;;13105:45;;;;;12945:215;;;;;:87;7129:55:124;;;12945:215:100;;;7111:74:124;7201:18;;;7194:34;;;;7244:18;;;7237:34;12945:87:100;;;;7084:18:124;;12945:215:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12898:21;;;;:44;;:262;12689:1148;;:::o;12833:1000::-;13278:21;;;;:26;13274:272;;13393:21;;;;:46;;;;13455:11;;;;13468:21;;;;13491:45;;;;;13363:174;;;;;:91;7129:55:124;;;13363:174:100;;;7111:74:124;7201:18;;;7194:34;;;;7244:18;;;7237:34;13363:91:100;;;;7084:18:124;;13363:174:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13316:21;;;;:44;;:221;13274:272;13687:4;:21;;;:44;;;13670:67;;;13747:6;:11;;;13797:4;:21;;;13768:4;:26;;;:50;;;;:::i;:::-;13670:156;;;;;;;;;;7486:42:124;7474:55;;;13670:156:100;;;7456:74:124;7546:18;;;7539:34;7429:18;;13670:156:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13563:21;;;;13614:45;;;13553:273;;;;13563:41;;13553:273;12833:1000;12689:1148;;:::o;6827:1514:102:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:102;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:102;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:102;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;8020:4:124;8062:3;8051:9;8047:19;8039:27;;8099:6;8093:13;8082:9;8075:32;8163:4;8155:6;8151:17;8145:24;8138:4;8127:9;8123:20;8116:54;8226:4;8218:6;8214:17;8208:24;8201:4;8190:9;8186:20;8179:54;8289:4;8281:6;8277:17;8271:24;8264:4;8253:9;8249:20;8242:54;8352:4;8344:6;8340:17;8334:24;8327:4;8316:9;8312:20;8305:54;8415:4;8407:6;8403:17;8397:24;8390:4;8379:9;8375:20;8368:54;8478:4;8470:6;8466:17;8460:24;8453:4;8442:9;8438:20;8431:54;8532:4;8524:6;8520:17;8514:24;8557:42;8655:2;8641:12;8637:21;8630:4;8619:9;8615:20;8608:51;8678:6;8668:16;;8748:2;8742;8734:6;8730:15;8724:22;8720:31;8715:2;8704:9;8700:18;8693:59;;;7834:924;;;;;7316:575:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;9333:25:124;;;9374:18;;;9367:34;;;;9417:18;;;9410:34;9475:2;9460:18;;9453:34;9518:3;9503:19;;9496:35;8121:215:102;;;;;;9320:3:124;9305:19;8121:215:102;;;;;;;7044:1297;6827:1514;;;;;:::o;1230:1498:99:-;1608:39;;;;;;;;;;;;;1538:24;;;;1608:67;;1648:12;1662;1608:39;:67::i;:::-;1537:138;;;;;1686:19;1682:1042;;;1748:44;;;1715:30;1748:44;;;;;;;;;;:76;;;1902:33;;;;8368:9:88;1748:76:99;;;;;1715:30;1862:158;;5235:1:88;;3439:2;8367:67;;;1902:104:99;;;;:::i;:::-;1885:122;;:2;:122;:::i;:::-;1863:144;;:11;:144;:::i;:::-;1862:156;:158::i;:::-;1833:187;;2209:18;2183:44;;:22;:44;;;2179:539;;2239:44;;;2309:1;2239:44;;;;;;;;;;;:67;;:71;;;;;;2325:64;2804:25:124;;;2325:64:99;;2777:18:124;2325:64:99;;;;;;;2179:539;;;2414:34;2532:43;2557:18;2532:22;:43;:::i;:::-;2451:44;;;;;;;;;;;;;;;;:78;;:124;;;;;;;;;;;;;;2590:119;;2804:25:124;;;2451:124:99;;-1:-1:-1;2451:44:99;;2590:119;;2777:18:124;2590:119:99;;;;;;;2404:314;2179:539;1707:1017;;1682:1042;1531:1197;;1230:1498;;;;;:::o;11136:1185:100:-;11582:21;;;;11575:51;;;;;11615:10;11575:51;;;2986:74:124;11533:39:100;;11575;;;;;2959:18:124;;11575:51:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11632:21;;;;11683:11;;;;;11720:32;;;;11632:126;;;;;:43;4119:15:124;;;11632:126:100;;;4101:34:124;11702:10:100;4151:18:124;;;4144:43;4203:18;;;4196:34;;;;11533:93:100;;-1:-1:-1;11632:43:100;;;;4013:18:124;;11632:126:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11769:31;11804:1;11769:36;11765:552;;;11885:10;11815:55;11873:23;;;;;;;;;;;;11917:220;;;;;;;;;;;;12096:31;;;;11917:220;;11977:12;;12001;;11873:23;;;12096:31;11917:48;:220::i;:::-;11904:407;;;12194:20;;;;12156:65;;:16;;12194:20;;;;;12216:4;12156:37;:65::i;:::-;12267:22;;;;;12236:66;;12291:10;;12236:66;;;;;;;;11904:407;11807:510;11527:794;11136:1185;;;;;;:::o;9656:757::-;9860:52;9915:25;:17;:23;:25::i;:::-;9860:80;-1:-1:-1;9946:53:100;:17;9860:80;9946:29;:53::i;:::-;10080:22;;;;10119:32;;;;10005:152;;:17;;10050:22;;10080;10110:1;;10005:37;:152::i;:::-;10250:21;;;;10284:11;;;;;10321:32;;;;10361:41;;;;10250:158;;;;;:26;11969:15:124;;;10250:158:100;;;11951:34:124;10303:10:100;12001:18:124;;;11994:43;12053:18;;;12046:34;;;;12096:18;;;12089:34;10250:26:100;;;;;11862:19:124;;10250:158:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1895:528:102;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;:::-;:81;;:125::i;:::-;2272:140;1895:528;-1:-1:-1;;;1895:528:102:o;2093:326::-;2003:420;1895:528;;;:::o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;2253:319::-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;12336:2:124;1937:66:1;;;12318:21:124;12375:2;12355:18;;;12348:30;12414:27;12394:18;;;12387:55;12459:18;;1937:66:1;12134:349:124;10657:1542:102;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:102;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;;;-1:-1:-1;10657:1542:102;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:102;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:96::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10267:168;8972:1467;8841:1598;;:::o;3336:442:96:-;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;3004:55:124;;;3653:38:96;;;2986:74:124;3653:20:96;;;;;2959:18:124;;3653:38:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:96;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:96;-1:-1:-1;;;3336:442:96:o;2435:333:89:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:88;2614:54:89;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:89;;2745:1;2729:17;;;2715:32;2751:1;2714:38;:43;;2435:333;;;;;:::o;3638:328::-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:88;3806:54:89;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:89;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;9524:446:98:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;3004:55:124;;;9800:64:98;;;2986:74:124;;;;9712:56:98;;-1:-1:-1;9774:15:98;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;2959:18:124;;9800:64:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:89::-;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;9933:26;;;;9524:446;;;;;;;:::o;4133:208:96:-;4250:4;4270:22;;;;;:65;;-1:-1:-1;;4296:39:96;;4133:208::o;3046:314:89:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:88;3206:54:89;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:89;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;8150:645:98:-;8409:32;;;;8389:87;;;;;8409:32;3004:55:124;;;8389:87:98;;;2986:74:124;8320:7:98;;;;8409:32;;;8389:69;;2959:18:124;;8389:87:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:98;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;3004:55:124;;;8624:54:98;;;2986:74:124;8631:30:98;;;;8624:48;;2959:18:124;;8624:54:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:98;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:98:o;1005:496:106:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;1660:322:107:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:107;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;512:299:91:-;679:35;;;;672:59;;;;;:53;3004:55:124;;;672:59:91;;;2986:74:124;633:7:91;;;;672:53;;;;;2959:18:124;;672:59:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;746:37;;;;739:61;;;;;:55;3004::124;;;739:61:91;;;2986:74:124;739:55:91;;;;;;2959:18:124;;739:61:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;657:149;;;;512:299;;;;;:::o;1874:472:106:-;1952:14;2098:18;;2187:17;2182:1;2166:18;;2154:31;2150:55;2140:66;;2086:130;2083:164;;;2237:1;2234;2227:12;2083:164;-1:-1:-1;2284:17:106;2273:29;;;;2320:1;2304:18;;2269:54;2265:71;;1874:472::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;12948:2:124;1635:78:12;;;12930:21:124;12987:2;12967:18;;;12960:30;13026:34;13006:18;;;12999:62;13097:9;13077:18;;;13070:37;13124:19;;1635:78:12;12746:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;6625:625:89:-;6853:4;6859:7;6868;6887:28;6910:4;6887:22;:28::i;:::-;6883:328;;;6925:15;6943:45;6966:4;620:66;6943:22;:45::i;:::-;6997:20;7020:21;;;;;;;;;;;;;;7067:26;;;;;;;;;:55;;;;;;;;;;;;;;7020:21;;-1:-1:-1;4478:3:88;17633:67;;;7049:75:89;-1:-1:-1;7136:12:89;;7132:73;;7168:4;;-1:-1:-1;7174:12:89;;-1:-1:-1;7188:7:89;-1:-1:-1;7160:36:89;;-1:-1:-1;7160:36:89;7132:73;6917:294;;;6883:328;-1:-1:-1;7224:5:89;;;;-1:-1:-1;7224:5:89;;-1:-1:-1;6625:625:89;-1:-1:-1;;;6625:625:89:o;28482:904:104:-;17634:9:88;;28815:4:104;;4478:3:88;17633:67;;;28831:35:104;28827:464;;28986:40;29047:13;29029:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28986:121;;29144:17;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29129:134;;;;;2851:41;29129:134;;;13885:25:124;29243:10:104;13926:18:124;;;13919:83;29129:57:104;;;;;;;;13858:18:124;;29129:134:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29115:169;;29279:5;29272:12;;;;;29115:169;28868:423;28827:464;29303:78;29327:12;29341;29355:10;29367:13;29303:23;:78::i;:::-;29296:85;;28482:904;;;;;;;;:::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;-1:-1:-1;;4611:1:1;4605:8;4598:16;4591:24;;2198:2524;-1:-1:-1;2198:2524:1:o;3142:212:105:-;3256:7;3278:71;3306:4;3312:19;3333:15;1780:972;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;2809:545:102:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;4304:256:89:-;4448:9;;4411:4;;620:66;4448:27;4488:19;;;;;:67;;-1:-1:-1;4530:18:89;4547:1;4530:14;:18;:::i;:::-;4512:37;:42;;4481:74;-1:-1:-1;;4304:256:89:o;8422:382::-;8601:9;;8547:7;;8601:16;;8669:14;;;8667:17;8654:30;;8547:7;8711:66;8742:1;8719:24;;;;;8718:31;;8711:66;;8767:1;8761:7;8711:66;;27289:620:104;27586:4;27602:22;:13;5872:9:88;5884;5872:21;;5764:134;27602:22:104;27598:60;;-1:-1:-1;27646:5:104;27639:12;;27598:60;27668:33;;;;;;;;;;;;;;;620:66:89;4911:27;27663:68:104;;-1:-1:-1;27720:4:104;27713:11;;27663:68;27769:32;;;;;;;;;;;;;27737:24;;27769:60;;27802:12;27816;27769:32;:60::i;:::-;27736:93;;;;27845:19;27844:20;:59;;;;-1:-1:-1;17634:9:88;;4478:3;17633:67;;;27868:35:104;27844:59;27836:68;27289:620;-1:-1:-1;;;;;;27289:620:104:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:404:124:-;81:2;75:9;123:6;111:19;;160:18;145:34;;181:22;;;142:62;139:242;;;237:77;234:1;227:88;338:4;335:1;328:15;366:4;363:1;356:15;139:242;397:2;390:22;14:404;:::o;423:154::-;509:42;502:5;498:54;491:5;488:65;478:93;;567:1;564;557:12;478:93;423:154;:::o;582:134::-;650:20;;679:31;650:20;679:31;:::i;:::-;582:134;;;:::o;721:118::-;807:5;800:13;793:21;786:5;783:32;773:60;;829:1;826;819:12;844:128;909:20;;938:28;909:20;938:28;:::i;977:156::-;1043:20;;1103:4;1092:16;;1082:27;;1072:55;;1123:1;1120;1113:12;1138:1507;1470:6;1478;1486;1494;1502;1546:9;1537:7;1533:23;1576:3;1572:2;1568:12;1565:32;;;1593:1;1590;1583:12;1565:32;1629:9;1616:23;1606:33;;1686:2;1675:9;1671:18;1658:32;1648:42;;1737:2;1726:9;1722:18;1709:32;1699:42;;1788:2;1777:9;1773:18;1760:32;1750:42;;1811:6;1910:2;1841:66;1837:2;1833:75;1829:84;1826:104;;;1926:1;1923;1916:12;1826:104;1952:17;;:::i;:::-;1939:30;;2020:3;2009:9;2005:19;1992:33;1985:5;1978:48;2086:3;2075:9;2071:19;2058:33;2053:2;2046:5;2042:14;2035:57;2124:39;2158:3;2147:9;2143:19;2124:39;:::i;:::-;2119:2;2112:5;2108:14;2101:63;2196:39;2230:3;2219:9;2215:19;2196:39;:::i;:::-;2191:2;2184:5;2180:14;2173:63;2255:3;2291:38;2325:2;2314:9;2310:18;2291:38;:::i;:::-;2285:3;2278:5;2274:15;2267:63;2363:35;2394:2;2383:9;2379:18;2363:35;:::i;:::-;2357:3;2350:5;2346:15;2339:60;2432:39;2466:3;2455:9;2451:19;2432:39;:::i;:::-;2426:3;2419:5;2415:15;2408:64;2505:37;2537:3;2526:9;2522:19;2505:37;:::i;:::-;2499:3;2492:5;2488:15;2481:62;2575:39;2609:3;2598:9;2594:19;2575:39;:::i;:::-;2559:14;;;2552:63;-1:-1:-1;1138:1507:124;;;;-1:-1:-1;1138:1507:124;;-1:-1:-1;1138:1507:124;2563:5;1138:1507;-1:-1:-1;1138:1507:124:o;3071:184::-;3141:6;3194:2;3182:9;3173:7;3169:23;3165:32;3162:52;;;3210:1;3207;3200:12;3162:52;-1:-1:-1;3233:16:124;;3071:184;-1:-1:-1;3071:184:124:o;3260:::-;3312:77;3309:1;3302:88;3409:4;3406:1;3399:15;3433:4;3430:1;3423:15;3449:128;3489:3;3520:1;3516:6;3513:1;3510:13;3507:39;;;3526:18;;:::i;:::-;-1:-1:-1;3562:9:124;;3449:128::o;3582:251::-;3652:6;3705:2;3693:9;3684:7;3680:23;3676:32;3673:52;;;3721:1;3718;3711:12;3673:52;3753:9;3747:16;3772:31;3797:5;3772:31;:::i;4696:466::-;4792:6;4800;4808;4816;4869:3;4857:9;4848:7;4844:23;4840:33;4837:53;;;4886:1;4883;4876:12;4837:53;4915:9;4909:16;4899:26;;4965:2;4954:9;4950:18;4944:25;4934:35;;5009:2;4998:9;4994:18;4988:25;4978:35;;5056:2;5045:9;5041:18;5035:25;5100:12;5093:5;5089:24;5082:5;5079:35;5069:63;;5128:1;5125;5118:12;5069:63;4696:466;;;;-1:-1:-1;4696:466:124;;-1:-1:-1;;4696:466:124:o;5167:228::-;5207:7;5333:1;5265:66;5261:74;5258:1;5255:81;5250:1;5243:9;5236:17;5232:105;5229:131;;;5340:18;;:::i;:::-;-1:-1:-1;5380:9:124;;5167:228::o;5400:184::-;5452:77;5449:1;5442:88;5549:4;5546:1;5539:15;5573:4;5570:1;5563:15;5589:656;5701:4;5730:2;5759;5748:9;5741:21;5791:6;5785:13;5834:6;5829:2;5818:9;5814:18;5807:34;5859:1;5869:140;5883:6;5880:1;5877:13;5869:140;;;5978:14;;;5974:23;;5968:30;5944:17;;;5963:2;5940:26;5933:66;5898:10;;5869:140;;;6027:6;6024:1;6021:13;6018:91;;;6097:1;6092:2;6083:6;6072:9;6068:22;6064:31;6057:42;6018:91;-1:-1:-1;6161:2:124;6149:15;6166:66;6145:88;6130:104;;;;6236:2;6126:113;;5589:656;-1:-1:-1;;;5589:656:124:o;6250:245::-;6317:6;6370:2;6358:9;6349:7;6345:23;6341:32;6338:52;;;6386:1;6383;6376:12;6338:52;6418:9;6412:16;6437:28;6459:5;6437:28;:::i;6500:274::-;6540:1;6566;6556:189;;6601:77;6598:1;6591:88;6702:4;6699:1;6692:15;6730:4;6727:1;6720:15;6556:189;-1:-1:-1;6759:9:124;;6500:274::o;6779:125::-;6819:4;6847:1;6844;6841:8;6838:34;;;6852:18;;:::i;:::-;-1:-1:-1;6889:9:124;;6779:125::o;7584:245::-;7663:6;7671;7724:2;7712:9;7703:7;7699:23;7695:32;7692:52;;;7740:1;7737;7730:12;7692:52;-1:-1:-1;;7763:16:124;;7819:2;7804:18;;;7798:25;7763:16;;7798:25;;-1:-1:-1;7584:245:124:o;8763:306::-;8851:6;8859;8867;8920:2;8908:9;8899:7;8895:23;8891:32;8888:52;;;8936:1;8933;8926:12;8888:52;8965:9;8959:16;8949:26;;9015:2;9004:9;9000:18;8994:25;8984:35;;9059:2;9048:9;9044:18;9038:25;9028:35;;8763:306;;;;;:::o;9542:482::-;9631:1;9674:5;9631:1;9688:330;9709:7;9699:8;9696:21;9688:330;;;9828:4;9760:66;9756:77;9750:4;9747:87;9744:113;;;9837:18;;:::i;:::-;9887:7;9877:8;9873:22;9870:55;;;9907:16;;;;9870:55;9986:22;;;;9946:15;;;;9688:330;;;9692:3;9542:482;;;;;:::o;10029:866::-;10078:5;10108:8;10098:80;;-1:-1:-1;10149:1:124;10163:5;;10098:80;10197:4;10187:76;;-1:-1:-1;10234:1:124;10248:5;;10187:76;10279:4;10297:1;10292:59;;;;10365:1;10360:130;;;;10272:218;;10292:59;10322:1;10313:10;;10336:5;;;10360:130;10397:3;10387:8;10384:17;10381:43;;;10404:18;;:::i;:::-;-1:-1:-1;;10460:1:124;10446:16;;10475:5;;10272:218;;10574:2;10564:8;10561:16;10555:3;10549:4;10546:13;10542:36;10536:2;10526:8;10523:16;10518:2;10512:4;10509:12;10505:35;10502:77;10499:159;;;-1:-1:-1;10611:19:124;;;10643:5;;10499:159;10690:34;10715:8;10709:4;10690:34;:::i;:::-;10820:6;10752:66;10748:79;10739:7;10736:92;10733:118;;;10831:18;;:::i;:::-;10869:20;;10029:866;-1:-1:-1;;;10029:866:124:o;10900:131::-;10960:5;10989:36;11016:8;11010:4;10989:36;:::i;11226:246::-;11266:4;11295:34;11379:10;;;;11349;;11401:12;;;11398:38;;;11416:18;;:::i;:::-;11453:13;;11226:246;-1:-1:-1;;;11226:246:124:o;12488:253::-;12528:3;12556:34;12617:2;12614:1;12610:10;12647:2;12644:1;12640:10;12678:3;12674:2;12670:12;12665:3;12662:21;12659:47;;;12686:18;;:::i;:::-;12722:13;;12488:253;-1:-1:-1;;;;12488:253:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"3283600","executionCost":"3682","totalCost":"3287282"},"external":{"CLOSE_FACTOR_HF_THRESHOLD()":"167","MAX_LIQUIDATION_CLOSE_FACTOR()":"189","executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)":"infinite"},"internal":{"_burnCollateralATokens(struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)":"infinite","_burnDebtTokens(struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)":"infinite","_calculateAvailableCollateralToLiquidate(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,address,uint256,uint256,uint256,contract IPriceOracleGetter)":"infinite","_calculateDebt(struct DataTypes.ReserveCache memory,struct DataTypes.ExecuteLiquidationCallParams memory,uint256)":"infinite","_getConfigurationData(mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory)":"infinite","_liquidateATokens(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(address => struct DataTypes.UserConfigurationMap storage ref),struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)":"infinite"}},"methodIdentifiers":{"CLOSE_FACTOR_HF_THRESHOLD()":"a18964a5","MAX_LIQUIDATION_CLOSE_FACTOR()":"d2467544","executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)":"83c1087d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CLOSE_FACTOR_HF_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_LIQUIDATION_CLOSE_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)\":{\"details\":\"Emits the `LiquidationCall()` event\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the liquidation function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"usersConfig\":\"The users configuration mapping that track the supplied/borrowed assets\"}}},\"stateVariables\":{\"CLOSE_FACTOR_HF_THRESHOLD\":{\"details\":\"This constant represents below which health factor value it is possible to liquidate an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`. A value of 0.95e18 results in 0.95\"},\"DEFAULT_LIQUIDATION_CLOSE_FACTOR\":{\"details\":\"Default percentage of borrower's debt to be repaid in a liquidation.Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD` Expressed in bps, a value of 0.5e4 results in 50.00%\"},\"MAX_LIQUIDATION_CLOSE_FACTOR\":{\"details\":\"Maximum percentage of borrower's debt to be repaid in a liquidationPercentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD` Expressed in bps, a value of 1e4 results in 100.00%\"}},\"title\":\"LiquidationLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)\":{\"notice\":\"Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives a proportional amount of the `collateralAsset` plus a bonus to cover market risk\"}},\"notice\":\"Implements actions involving management of collateral in the protocol, the main one being the liquidations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/LiquidationLogic.sol\":\"LiquidationLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)":{"notice":"Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives a proportional amount of the `collateralAsset` plus a bonus to cover market risk"}},"notice":"Implements actions involving management of collateral in the protocol, the main one being the liquidations","version":1}}},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)":{"params":{"asset":"The address of the underlying asset of the reserve","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves"}},"executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)":{"params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"Additional params needed for the calculation","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)":{"params":{"params":"Additional parameters needed for initiation","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves"},"returns":{"_0":"true if appended, false if inserted at existing empty spot"}},"executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed","reservesData":"The state of all the reserves"}},"executeRescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt","reservesData":"The state of all the reserves"}}},"title":"PoolLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6125cf61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061007c5760003560e01c806369fc1bdf1161005a57806369fc1bdf1461010857806387b322b2146101385780639cf570231461015857600080fd5b80631e3b41451461008157806326ec273f146100a357806348c2ca8c146100e8575b600080fd5b81801561008d57600080fd5b506100a161009c366004611f9d565b610178565b005b6100b66100b13660046120ad565b6102b0565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b8180156100f457600080fd5b506100a1610103366004612186565b6102ed565b81801561011457600080fd5b50610128610123366004612217565b6104d3565b60405190151581526020016100df565b81801561014457600080fd5b506100a16101533660046122f2565b6108cc565b81801561016457600080fd5b506100a161017336600461232e565b6108f2565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020838152604091829020825191820190925290549081905260d41c64ffffffffff1660408051808201909152600281527f38310000000000000000000000000000000000000000000000000000000000006020820152901561022d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff811660008181526020848152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a25050565b6000806000806000806102c58a8a8a8a610a33565b50939950919750909450925090506102de868684610f9d565b93509499939850945094509450565b60005b818110156104cd57600083838381811061030c5761030c6123d6565b90506020020160208101906103219190612405565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208781526040918290208251918201909252815490819052919250906701000000000000001661036f5750506104bb565b60088101546fffffffffffffffffffffffffffffffff1680156104b7576008820180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905560006103c183610fd1565b905060006103cf8383611061565b6004808601546040517f7df5bd3b00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff1691637df5bd3b91610432918591879101918252602082015260400190565b600060405180830381600087803b15801561044c57600080fd5b505af1158015610460573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fbfa21aa5d5f9a1f0120a95e7c0749f389863cbdbfff531aa7339077a5bc919de826040516104ac91815260200190565b60405180910390a250505b5050505b806104c58161244f565b9150506102f0565b50505050565b805160408051808201909152600181527f390000000000000000000000000000000000000000000000000000000000000060208201526000913b610544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060208083015160408085015160608601516080870151875173ffffffffffffffffffffffffffffffffffffffff166000908152958a90529290942061058c949093926110b8565b815173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120600301547501000000000000000000000000000000000000000000900461ffff161515806106085750825160008080526020869052604090205473ffffffffffffffffffffffffffffffffffffffff9081169116145b905080156040518060400160405280600281526020017f31340000000000000000000000000000000000000000000000000000000000008152509061067a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060005b8360a0015161ffff168161ffff1610156107885761ffff811660009081526020869052604090205473ffffffffffffffffffffffffffffffffffffffff1661077657835173ffffffffffffffffffffffffffffffffffffffff90811660009081526020888152604080832060030180547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000061ffff97909716968702179055875194835290889052812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169390921692909217905591506108c59050565b8061078081612488565b91505061067e565b508260c0015161ffff168360a0015161ffff16106040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152509061080a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50505060a081018051825173ffffffffffffffffffffffffffffffffffffffff90811660009081526020878152604080832060030180547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000061ffff978816021790558651955190941682528690529190912080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169290911691909117905560015b9392505050565b6108ed73ffffffffffffffffffffffffffffffffffffffff8416838361120b565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020849052604090206109228382846112de565b5073ffffffffffffffffffffffffffffffffffffffff166000818152602084815260408083206003810180547501000000000000000000000000000000000000000000900461ffff16855295835290832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155938352949052808455600184018190556002840181905582547fffffffffffffffffff0000000000000000000000000000000000000000000000169092556004830180548216905560058301805482169055600683018054821690556007830180549091169055600882015560090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055565b600080600080600080610a498760000151511590565b15610a855750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081610f90565b610b3460405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610b7957608088015160ff16600090815260208a9052604090206060890151610b669190611749565b6101808401526101c08301526101a08201525b87602001518160c001511015610e985760c08101518851610b9991611828565b610bad5760c0810180516001019052610b79565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610bf35760c0810180516001019052610b79565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610c895750816101e00151896080015160ff16145b610d2d5760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2891906124aa565b610d34565b8161018001515b825260a082015115801590610d54575060c08201518951610d54916118ad565b15610e4457610d7189604001518284600001518560200151611931565b6040830181905261010083018051610d8a9083906124c3565b90525060808901516101e0830151610da59160ff1690611a0a565b1515610240830152608082015115610dfb57816102400151610dcb578160800151610dd2565b816101a001515b8260400151610de191906124db565b8261014001818151610df391906124c3565b905250610e04565b60016102208301525b816102400151610e18578160a00151610e1f565b816101c001515b8260400151610e2e91906124db565b8261016001818151610e4091906124c3565b9052505b60c08201518951610e5491611a1b565b15610e8757610e7189604001518284600001518560200151611a9d565b8261012001818151610e8391906124c3565b9052505b5060c0810180516001019052610b79565b610100810151610ea9576000610ec4565b80610100015181610140015181610ec257610ec2612518565b045b610140820152610100810151610edb576000610ef6565b80610100015181610160015181610ef457610ef4612518565b045b61016082015261012081015115610f3857610f33816101200151610f2d836101600151846101000151611c1d90919063ffffffff16565b90611c60565b610f5a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b600080610faa8584611c1d565b905083811015610fbe5760009150506108c5565b610fc88482612547565b95945050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415611017575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546108c5906fffffffffffffffffffffffffffffffff80821691611055917001000000000000000000000000000000009091041684611c97565b90611061565b50919050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761109657600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600485015460408051808201909152600281527f363100000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1615611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b506001850180546b033b2e3c9fd0803ce80000007fffffffffffffffffffffffffffffffff00000000000000000000000000000000918216811790925560028701805490911690911790556004850180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff968716179091556005860180548216948616949094179093556006850180548416928516929092179091556007909301805490911692909116919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af161126e573d6000803e3d6000fd5b5061127884611cdc565b6104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610224565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060038201547501000000000000000000000000000000000000000000900461ffff161515806113b6575060008080526020849052604090205473ffffffffffffffffffffffffffffffffffffffff8281169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090611424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b508160050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b891906124aa565b60408051808201909152600281527f353500000000000000000000000000000000000000000000000000000000000060208201529015611525576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b508160060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b991906124aa565b60408051808201909152600281527f353600000000000000000000000000000000000000000000000000000000000060208201529015611626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50600480830154604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926318160ddd9282820192602092908290030181865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba91906124aa565b1580156116db575060088201546fffffffffffffffffffffffffffffffff16155b6040518060400160405280600281526020017f3534000000000000000000000000000000000000000000000000000000000000815250906104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff16801561180d576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a91906124aa565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061189a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5050905160019190911b1c600316151590565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50509051600191821b82011c16151590565b60008061193d85610fd1565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81169382019390935292935060009287926119e3928692911690631da24f3e90602401602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105591906124aa565b6119ed91906124db565b90508381816119fe576119fe612518565b04979650505050505050565b600082158015906108c55750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310611a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015611b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3791906124aa565b90508015611b5557611b52611b4b86611da6565b8290611061565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb91906124aa565b611bf590826124c3565b9050611c0181856124db565b9050828181611c1257611c12612518565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517611c5257600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715611c8057600080fd5b50670de0b6b3a76400009190910260028204010490565b600080611cab64ffffffffff841642612547565b611cb590856124db565b6301e1338090049050611cd4816b033b2e3c9fd0803ce80000006124c3565b949350505050565b6000611d1c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611d5b5760208114611d9557611d567f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611ce3565b61105b565b823b611d8c57611d8c7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611ce3565b6001915061105b565b3d6000803e50506000511515919050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415611dec575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546108c5906fffffffffffffffffffffffffffffffff8082169161105591700100000000000000000000000000000000909104168460006108c5838342600080611e4164ffffffffff851684612547565b905080611e5d576b033b2e3c9fd0803ce80000009150506108c5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611e93576000611e98565b600285035b925066038882915c4000611eac8a80611061565b81611eb957611eb9612518565b0491506301e13380611ecb838b611061565b81611ed857611ed8612518565b049050600082611ee886886124db565b611ef291906124db565b60029004905060008285611f06888a6124db565b611f1091906124db565b611f1a91906124db565b60069004905080826301e13380611f318a8f6124db565b611f3b919061255e565b611f51906b033b2e3c9fd0803ce80000006124c3565b611f5b91906124c3565b611f6591906124c3565b9b9a5050505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f9857600080fd5b919050565b60008060408385031215611fb057600080fd5b82359150611fc060208401611f74565b90509250929050565b60405160a0810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516020810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000808486036101008112156120c557600080fd5b8535945060208601359350604086013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa00160a081121561210757600080fd5b61210f611fc9565b602082121561211d57600080fd5b612125612019565b9150606087013582528181526080870135602082015261214760a08801611f74565b604082015261215860c08801611f74565b606082015260e0870135915060ff8216821461217357600080fd5b6080810191909152939692955090935050565b60008060006040848603121561219b57600080fd5b83359250602084013567ffffffffffffffff808211156121ba57600080fd5b818601915086601f8301126121ce57600080fd5b8135818111156121dd57600080fd5b8760208260051b85010111156121f257600080fd5b6020830194508093505050509250925092565b803561ffff81168114611f9857600080fd5b600080600083850361012081121561222e57600080fd5b843593506020850135925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561226957600080fd5b50612272612063565b61227e60408601611f74565b815261228c60608601611f74565b602082015261229d60808601611f74565b60408201526122ae60a08601611f74565b60608201526122bf60c08601611f74565b60808201526122d060e08601612205565b60a08201526122e26101008601612205565b60c0820152809150509250925092565b60008060006060848603121561230757600080fd5b61231084611f74565b925061231e60208501611f74565b9150604084013590509250925092565b60008060006060848603121561234357600080fd5b833592506020840135915061235a60408501611f74565b90509250925092565b600060208083528351808285015260005b8181101561239057858101830151858201604001528201612374565b818111156123a2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561241757600080fd5b6108c582611f74565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561248157612481612420565b5060010190565b600061ffff808316818114156124a0576124a0612420565b6001019392505050565b6000602082840312156124bc57600080fd5b5051919050565b600082198211156124d6576124d6612420565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561251357612513612420565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008282101561255957612559612420565b500390565b600082612594577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ccb254251cdf1be59d8b5ed3d58ad7750a1beb388e4d59d169f5b6b07622337364736f6c634300080a0033","opcodes":"PUSH2 0x25CF PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x69FC1BDF GT PUSH2 0x5A JUMPI DUP1 PUSH4 0x69FC1BDF EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0x87B322B2 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x9CF57023 EQ PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E3B4145 EQ PUSH2 0x81 JUMPI DUP1 PUSH4 0x26EC273F EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x48C2CA8C EQ PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x9C CALLDATASIZE PUSH1 0x4 PUSH2 0x1F9D JUMP JUMPDEST PUSH2 0x178 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB6 PUSH2 0xB1 CALLDATASIZE PUSH1 0x4 PUSH2 0x20AD JUMP JUMPDEST PUSH2 0x2B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x2186 JUMP JUMPDEST PUSH2 0x2ED JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x128 PUSH2 0x123 CALLDATASIZE PUSH1 0x4 PUSH2 0x2217 JUMP JUMPDEST PUSH2 0x4D3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDF JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x153 CALLDATASIZE PUSH1 0x4 PUSH2 0x22F2 JUMP JUMPDEST PUSH2 0x8CC JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0x232E JUMP JUMPDEST PUSH2 0x8F2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3831000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x22D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2C5 DUP11 DUP11 DUP11 DUP11 PUSH2 0xA33 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP2 SWAP8 POP SWAP1 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x2DE DUP7 DUP7 DUP5 PUSH2 0xF9D JUMP JUMPDEST SWAP4 POP SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x30C JUMPI PUSH2 0x30C PUSH2 0x23D6 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x321 SWAP2 SWAP1 PUSH2 0x2405 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP2 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH8 0x100000000000000 AND PUSH2 0x36F JUMPI POP POP PUSH2 0x4BB JUMP JUMPDEST PUSH1 0x8 DUP2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x4B7 JUMPI PUSH1 0x8 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH2 0x3C1 DUP4 PUSH2 0xFD1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CF DUP4 DUP4 PUSH2 0x1061 JUMP JUMPDEST PUSH1 0x4 DUP1 DUP7 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x7DF5BD3B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x7DF5BD3B SWAP2 PUSH2 0x432 SWAP2 DUP6 SWAP2 DUP8 SWAP2 ADD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x460 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBFA21AA5D5F9A1F0120A95E7C0749F389863CBDBFFF531AA7339077A5BC919DE DUP3 PUSH1 0x40 MLOAD PUSH2 0x4AC SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST POP POP POP JUMPDEST DUP1 PUSH2 0x4C5 DUP2 PUSH2 0x244F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2F0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 EXTCODESIZE PUSH2 0x544 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD DUP8 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP6 DUP11 SWAP1 MSTORE SWAP3 SWAP1 SWAP5 KECCAK256 PUSH2 0x58C SWAP5 SWAP1 SWAP4 SWAP3 PUSH2 0x10B8 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x608 JUMPI POP DUP3 MLOAD PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP1 POP DUP1 ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3134000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x67A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP2 PUSH2 0xFFFF AND LT ISZERO PUSH2 0x788 JUMPI PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x776 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH22 0x1000000000000000000000000000000000000000000 PUSH2 0xFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP8 MUL OR SWAP1 SSTORE DUP8 MLOAD SWAP5 DUP4 MSTORE SWAP1 DUP9 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE SWAP2 POP PUSH2 0x8C5 SWAP1 POP JUMP JUMPDEST DUP1 PUSH2 0x780 DUP2 PUSH2 0x2488 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x67E JUMP JUMPDEST POP DUP3 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND LT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3135000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x80A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP POP PUSH1 0xA0 DUP2 ADD DUP1 MLOAD DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH22 0x1000000000000000000000000000000000000000000 PUSH2 0xFFFF SWAP8 DUP9 AND MUL OR SWAP1 SSTORE DUP7 MLOAD SWAP6 MLOAD SWAP1 SWAP5 AND DUP3 MSTORE DUP7 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x8ED PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x120B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x922 DUP4 DUP3 DUP5 PUSH2 0x12DE JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP6 MSTORE SWAP6 DUP4 MSTORE SWAP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE SWAP5 SWAP1 MSTORE DUP1 DUP5 SSTORE PUSH1 0x1 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x2 DUP5 ADD DUP2 SWAP1 SSTORE DUP3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 AND SWAP1 SWAP3 SSTORE PUSH1 0x4 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x5 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x6 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x7 DUP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x8 DUP3 ADD SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xA49 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0xA85 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0xF90 JUMP JUMPDEST PUSH2 0xB34 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB79 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0xB66 SWAP2 SWAP1 PUSH2 0x1749 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0xE98 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0xB99 SWAP2 PUSH2 0x1828 JUMP JUMPDEST PUSH2 0xBAD JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xBF3 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xC89 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0xD2D JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD28 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0xD34 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD54 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xD54 SWAP2 PUSH2 0x18AD JUMP JUMPDEST ISZERO PUSH2 0xE44 JUMPI PUSH2 0xD71 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1931 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0xD8A SWAP1 DUP4 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0xDA5 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x1A0A JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0xDFB JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xDCB JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xDD2 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xDE1 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xE04 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xE18 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0xE1F JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xE2E SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0xE40 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xE54 SWAP2 PUSH2 0x1A1B JUMP JUMPDEST ISZERO PUSH2 0xE87 JUMPI PUSH2 0xE71 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1A9D JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0xE83 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xEA9 JUMPI PUSH1 0x0 PUSH2 0xEC4 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0xEC2 JUMPI PUSH2 0xEC2 PUSH2 0x2518 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xEDB JUMPI PUSH1 0x0 PUSH2 0xEF6 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0xEF4 JUMPI PUSH2 0xEF4 PUSH2 0x2518 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0xF38 JUMPI PUSH2 0xF33 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0xF2D DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x1C1D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x1C60 JUMP JUMPDEST PUSH2 0xF5A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFAA DUP6 DUP5 PUSH2 0x1C1D JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xFBE JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x8C5 JUMP JUMPDEST PUSH2 0xFC8 DUP5 DUP3 PUSH2 0x2547 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x1017 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x8C5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1055 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x1C97 JUMP JUMPDEST SWAP1 PUSH2 0x1061 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3631000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1140 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x1 DUP6 ADD DUP1 SLOAD PUSH12 0x33B2E3C9FD0803CE8000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE PUSH1 0x2 DUP8 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP7 ADD DUP1 SLOAD DUP3 AND SWAP5 DUP7 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x6 DUP6 ADD DUP1 SLOAD DUP5 AND SWAP3 DUP6 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x7 SWAP1 SWAP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x126E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1278 DUP5 PUSH2 0x1CDC JUMP JUMPDEST PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x1360 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x3 DUP3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x13B6 JUMPI POP PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1424 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP DUP2 PUSH1 0x5 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1494 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14B8 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3535000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x1525 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP DUP2 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1595 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15B9 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3536000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x1626 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x4 DUP1 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x18160DDD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x18160DDD SWAP3 DUP3 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16BA SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x16DB JUMPI POP PUSH1 0x8 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3534000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x180D JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x180A SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x189A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x191F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x193D DUP6 PUSH2 0xFD1 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x19E3 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1055 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0x19ED SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x19FE JUMPI PUSH2 0x19FE PUSH2 0x2518 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x8C5 JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x1A8D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B37 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1B55 JUMPI PUSH2 0x1B52 PUSH2 0x1B4B DUP7 PUSH2 0x1DA6 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1061 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BEB SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0x1BF5 SWAP1 DUP3 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 POP PUSH2 0x1C01 DUP2 DUP6 PUSH2 0x24DB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x1C12 JUMPI PUSH2 0x1C12 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1C52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1C80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CAB PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x2547 JUMP JUMPDEST PUSH2 0x1CB5 SWAP1 DUP6 PUSH2 0x24DB JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1CD4 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x24C3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1D5B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1D95 JUMPI PUSH2 0x1D56 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1CE3 JUMP JUMPDEST PUSH2 0x105B JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1D8C JUMPI PUSH2 0x1D8C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1CE3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x105B JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY POP POP PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x1DEC JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x8C5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1055 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH1 0x0 PUSH2 0x8C5 DUP4 DUP4 TIMESTAMP PUSH1 0x0 DUP1 PUSH2 0x1E41 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2547 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1E5D JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x8C5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1E93 JUMPI PUSH1 0x0 PUSH2 0x1E98 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1EAC DUP11 DUP1 PUSH2 0x1061 JUMP JUMPDEST DUP2 PUSH2 0x1EB9 JUMPI PUSH2 0x1EB9 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1ECB DUP4 DUP12 PUSH2 0x1061 JUMP JUMPDEST DUP2 PUSH2 0x1ED8 JUMPI PUSH2 0x1ED8 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1EE8 DUP7 DUP9 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1EF2 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1F06 DUP9 DUP11 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F10 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F1A SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1F31 DUP11 DUP16 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F3B SWAP2 SWAP1 PUSH2 0x255E JUMP JUMPDEST PUSH2 0x1F51 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1F5B SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1F65 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x1FC0 PUSH1 0x20 DUP5 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x20C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 ADD PUSH1 0xA0 DUP2 SLT ISZERO PUSH2 0x2107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x210F PUSH2 0x1FC9 JUMP JUMPDEST PUSH1 0x20 DUP3 SLT ISZERO PUSH2 0x211D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2125 PUSH2 0x2019 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD DUP3 MSTORE DUP2 DUP2 MSTORE PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2147 PUSH1 0xA0 DUP9 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2158 PUSH1 0xC0 DUP9 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xE0 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xFF DUP3 AND DUP3 EQ PUSH2 0x2173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x219B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x21CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x21F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x120 DUP2 SLT ISZERO PUSH2 0x222E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP3 ADD SLT ISZERO PUSH2 0x2269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2272 PUSH2 0x2063 JUMP JUMPDEST PUSH2 0x227E PUSH1 0x40 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x228C PUSH1 0x60 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x229D PUSH1 0x80 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x22AE PUSH1 0xA0 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x22BF PUSH1 0xC0 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x22D0 PUSH1 0xE0 DUP7 ADD PUSH2 0x2205 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x22E2 PUSH2 0x100 DUP7 ADD PUSH2 0x2205 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2310 DUP5 PUSH2 0x1F74 JUMP JUMPDEST SWAP3 POP PUSH2 0x231E PUSH1 0x20 DUP6 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x235A PUSH1 0x40 DUP6 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2390 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x2374 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x23A2 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8C5 DUP3 PUSH2 0x1F74 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2481 JUMPI PUSH2 0x2481 PUSH2 0x2420 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x24A0 JUMPI PUSH2 0x24A0 PUSH2 0x2420 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x24D6 JUMPI PUSH2 0x24D6 PUSH2 0x2420 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2513 JUMPI PUSH2 0x2513 PUSH2 0x2420 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2559 JUMPI PUSH2 0x2559 PUSH2 0x2420 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2594 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC 0xB2 SLOAD 0x25 SHR 0xDF SHL 0xE5 SWAP14 DUP12 0x5E 0xD3 0xD5 DUP11 0xD7 PUSH22 0xA1BEB388E4D59D169F5B6B07622337364736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"863:6419:101:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;863:6419:101;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_getUserBalanceInBaseCurrency_18448":{"entryPoint":6449,"id":18448,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_18405":{"entryPoint":6813,"id":18405,"parameterSlots":4,"returnSlots":1},"@calculateAvailableBorrows_18342":{"entryPoint":3997,"id":18342,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23673":{"entryPoint":null,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":null,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":7319,"id":23550,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_18307":{"entryPoint":2611,"id":18307,"parameterSlots":4,"returnSlots":6},"@executeDropReserve_20152":{"entryPoint":2290,"id":20152,"parameterSlots":3,"returnSlots":0},"@executeGetUserAccountData_20210":{"entryPoint":688,"id":20210,"parameterSlots":4,"returnSlots":6},"@executeInitReserve_19954":{"entryPoint":1235,"id":19954,"parameterSlots":3,"returnSlots":1},"@executeMintToTreasury_20065":{"entryPoint":749,"id":20065,"parameterSlots":3,"returnSlots":0},"@executeRescueTokens_19973":{"entryPoint":2252,"id":19973,"parameterSlots":3,"returnSlots":0},"@executeResetIsolationModeTotalDebt_20102":{"entryPoint":376,"id":20102,"parameterSlots":2,"returnSlots":0},"@getActive_13160":{"entryPoint":null,"id":13160,"parameterSlots":1,"returnSlots":1},"@getDebtCeiling_13668":{"entryPoint":null,"id":13668,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_17188":{"entryPoint":5961,"id":17188,"parameterSlots":2,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":7388,"id":117,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_20345":{"entryPoint":7590,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":4049,"id":20309,"parameterSlots":1,"returnSlots":1},"@getParams_14000":{"entryPoint":null,"id":14000,"parameterSlots":1,"returnSlots":6},"@init_20502":{"entryPoint":4280,"id":20502,"parameterSlots":5,"returnSlots":0},"@isBorrowing_14222":{"entryPoint":6683,"id":14222,"parameterSlots":2,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@isEmpty_14371":{"entryPoint":null,"id":14371,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_17208":{"entryPoint":6666,"id":17208,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_14187":{"entryPoint":6184,"id":14187,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_14260":{"entryPoint":6317,"id":14260,"parameterSlots":2,"returnSlots":1},"@percentMul_23713":{"entryPoint":7197,"id":23713,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":4193,"id":23780,"parameterSlots":2,"returnSlots":1},"@safeTransfer_78":{"entryPoint":4619,"id":78,"parameterSlots":3,"returnSlots":0},"@validateDropReserve_23288":{"entryPoint":4830,"id":23288,"parameterSlots":3,"returnSlots":0},"@wadDiv_23768":{"entryPoint":7264,"id":23768,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":8052,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":9221,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":8946,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_address":{"entryPoint":8093,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":8582,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_address":{"entryPoint":9006,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr":{"entryPoint":8365,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_InitReserveParams_$24226_memory_ptr":{"entryPoint":8727,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":9386,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint16":{"entryPoint":8709,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":9059,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"allocate_memory":{"entryPoint":8217,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_1302":{"entryPoint":8137,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_1305":{"entryPoint":8291,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":9411,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":9566,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":9435,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9543,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint16":{"entryPoint":9352,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":9295,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":9248,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":9496,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":9174,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10504:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:124","statements":[{"nodeType":"YulAssignment","src":"73:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:124"},"nodeType":"YulFunctionCall","src":"82:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:124"}]},{"body":{"nodeType":"YulBlock","src":"188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:124"},"nodeType":"YulFunctionCall","src":"190:12:124"},"nodeType":"YulExpressionStatement","src":"190:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:124"},"nodeType":"YulFunctionCall","src":"131:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:124"},"nodeType":"YulFunctionCall","src":"121:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:124"},"nodeType":"YulFunctionCall","src":"114:73:124"},"nodeType":"YulIf","src":"111:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:124","type":""}],"src":"14:196:124"},{"body":{"nodeType":"YulBlock","src":"354:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"400:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"409:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"412:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"402:6:124"},"nodeType":"YulFunctionCall","src":"402:12:124"},"nodeType":"YulExpressionStatement","src":"402:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"375:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"384:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"371:3:124"},"nodeType":"YulFunctionCall","src":"371:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"396:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"367:3:124"},"nodeType":"YulFunctionCall","src":"367:32:124"},"nodeType":"YulIf","src":"364:52:124"},{"nodeType":"YulAssignment","src":"425:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"448:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"435:12:124"},"nodeType":"YulFunctionCall","src":"435:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"425:6:124"}]},{"nodeType":"YulAssignment","src":"467:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"496:3:124"},"nodeType":"YulFunctionCall","src":"496:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"477:18:124"},"nodeType":"YulFunctionCall","src":"477:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"467:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"312:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"323:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"335:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"343:6:124","type":""}],"src":"215:306:124"},{"body":{"nodeType":"YulBlock","src":"572:361:124","statements":[{"nodeType":"YulAssignment","src":"582:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"598:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"592:5:124"},"nodeType":"YulFunctionCall","src":"592:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"582:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"610:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"632:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"640:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"628:3:124"},"nodeType":"YulFunctionCall","src":"628:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"614:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"728:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"749:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"752:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"742:6:124"},"nodeType":"YulFunctionCall","src":"742:88:124"},"nodeType":"YulExpressionStatement","src":"742:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"850:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"853:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"843:6:124"},"nodeType":"YulFunctionCall","src":"843:15:124"},"nodeType":"YulExpressionStatement","src":"843:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"878:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"881:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"871:6:124"},"nodeType":"YulFunctionCall","src":"871:15:124"},"nodeType":"YulExpressionStatement","src":"871:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"663:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"675:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"660:2:124"},"nodeType":"YulFunctionCall","src":"660:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"699:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"711:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"696:2:124"},"nodeType":"YulFunctionCall","src":"696:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"657:2:124"},"nodeType":"YulFunctionCall","src":"657:62:124"},"nodeType":"YulIf","src":"654:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"912:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"916:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"905:6:124"},"nodeType":"YulFunctionCall","src":"905:22:124"},"nodeType":"YulExpressionStatement","src":"905:22:124"}]},"name":"allocate_memory_1302","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"561:6:124","type":""}],"src":"526:407:124"},{"body":{"nodeType":"YulBlock","src":"979:359:124","statements":[{"nodeType":"YulAssignment","src":"989:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1005:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"999:5:124"},"nodeType":"YulFunctionCall","src":"999:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"989:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1017:33:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1039:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1047:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1035:3:124"},"nodeType":"YulFunctionCall","src":"1035:15:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1021:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1133:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1154:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1157:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1147:6:124"},"nodeType":"YulFunctionCall","src":"1147:88:124"},"nodeType":"YulExpressionStatement","src":"1147:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1255:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1258:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1248:6:124"},"nodeType":"YulFunctionCall","src":"1248:15:124"},"nodeType":"YulExpressionStatement","src":"1248:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1283:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1286:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1276:6:124"},"nodeType":"YulFunctionCall","src":"1276:15:124"},"nodeType":"YulExpressionStatement","src":"1276:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1068:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1080:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1065:2:124"},"nodeType":"YulFunctionCall","src":"1065:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1116:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1101:2:124"},"nodeType":"YulFunctionCall","src":"1101:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1062:2:124"},"nodeType":"YulFunctionCall","src":"1062:62:124"},"nodeType":"YulIf","src":"1059:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1317:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1321:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1310:6:124"},"nodeType":"YulFunctionCall","src":"1310:22:124"},"nodeType":"YulExpressionStatement","src":"1310:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"968:6:124","type":""}],"src":"938:400:124"},{"body":{"nodeType":"YulBlock","src":"1389:361:124","statements":[{"nodeType":"YulAssignment","src":"1399:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1415:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1409:5:124"},"nodeType":"YulFunctionCall","src":"1409:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1399:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1427:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1449:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1457:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1445:3:124"},"nodeType":"YulFunctionCall","src":"1445:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1431:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1545:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1566:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1569:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1559:6:124"},"nodeType":"YulFunctionCall","src":"1559:88:124"},"nodeType":"YulExpressionStatement","src":"1559:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1667:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1670:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1660:6:124"},"nodeType":"YulFunctionCall","src":"1660:15:124"},"nodeType":"YulExpressionStatement","src":"1660:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1695:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1698:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1688:6:124"},"nodeType":"YulFunctionCall","src":"1688:15:124"},"nodeType":"YulExpressionStatement","src":"1688:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1480:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"1492:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1477:2:124"},"nodeType":"YulFunctionCall","src":"1477:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1516:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1528:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1513:2:124"},"nodeType":"YulFunctionCall","src":"1513:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1474:2:124"},"nodeType":"YulFunctionCall","src":"1474:62:124"},"nodeType":"YulIf","src":"1471:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1729:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1733:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1722:6:124"},"nodeType":"YulFunctionCall","src":"1722:22:124"},"nodeType":"YulExpressionStatement","src":"1722:22:124"}]},"name":"allocate_memory_1305","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1378:6:124","type":""}],"src":"1343:407:124"},{"body":{"nodeType":"YulBlock","src":"2054:985:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2064:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2078:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2087:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2074:3:124"},"nodeType":"YulFunctionCall","src":"2074:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2068:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2122:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2131:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2134:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2124:6:124"},"nodeType":"YulFunctionCall","src":"2124:12:124"},"nodeType":"YulExpressionStatement","src":"2124:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2113:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2117:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2109:3:124"},"nodeType":"YulFunctionCall","src":"2109:12:124"},"nodeType":"YulIf","src":"2106:32:124"},{"nodeType":"YulAssignment","src":"2147:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2170:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2157:12:124"},"nodeType":"YulFunctionCall","src":"2157:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2147:6:124"}]},{"nodeType":"YulAssignment","src":"2189:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2216:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2227:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2212:3:124"},"nodeType":"YulFunctionCall","src":"2212:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2199:12:124"},"nodeType":"YulFunctionCall","src":"2199:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2189:6:124"}]},{"nodeType":"YulAssignment","src":"2240:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2267:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2278:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2263:3:124"},"nodeType":"YulFunctionCall","src":"2263:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2250:12:124"},"nodeType":"YulFunctionCall","src":"2250:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2240:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2291:85:124","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2305:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2309:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2301:3:124"},"nodeType":"YulFunctionCall","src":"2301:75:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2295:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2402:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2411:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2414:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2404:6:124"},"nodeType":"YulFunctionCall","src":"2404:12:124"},"nodeType":"YulExpressionStatement","src":"2404:12:124"}]},"condition":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2392:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2396:4:124","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2388:3:124"},"nodeType":"YulFunctionCall","src":"2388:13:124"},"nodeType":"YulIf","src":"2385:33:124"},{"nodeType":"YulVariableDeclaration","src":"2427:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_1302","nodeType":"YulIdentifier","src":"2440:20:124"},"nodeType":"YulFunctionCall","src":"2440:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2431:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2486:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2495:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2498:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2488:6:124"},"nodeType":"YulFunctionCall","src":"2488:12:124"},"nodeType":"YulExpressionStatement","src":"2488:12:124"}]},"condition":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2478:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2482:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2474:3:124"},"nodeType":"YulFunctionCall","src":"2474:11:124"},"nodeType":"YulIf","src":"2471:31:124"},{"nodeType":"YulVariableDeclaration","src":"2511:32:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2526:15:124"},"nodeType":"YulFunctionCall","src":"2526:17:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2515:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2559:7:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2585:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2596:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2581:3:124"},"nodeType":"YulFunctionCall","src":"2581:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2568:12:124"},"nodeType":"YulFunctionCall","src":"2568:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2552:6:124"},"nodeType":"YulFunctionCall","src":"2552:49:124"},"nodeType":"YulExpressionStatement","src":"2552:49:124"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2617:5:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"2624:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2610:6:124"},"nodeType":"YulFunctionCall","src":"2610:22:124"},"nodeType":"YulExpressionStatement","src":"2610:22:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2652:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2659:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2648:3:124"},"nodeType":"YulFunctionCall","src":"2648:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2681:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2692:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2677:3:124"},"nodeType":"YulFunctionCall","src":"2677:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2664:12:124"},"nodeType":"YulFunctionCall","src":"2664:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2641:6:124"},"nodeType":"YulFunctionCall","src":"2641:57:124"},"nodeType":"YulExpressionStatement","src":"2641:57:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2718:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2725:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2714:3:124"},"nodeType":"YulFunctionCall","src":"2714:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2753:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2764:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2749:3:124"},"nodeType":"YulFunctionCall","src":"2749:20:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2730:18:124"},"nodeType":"YulFunctionCall","src":"2730:40:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2707:6:124"},"nodeType":"YulFunctionCall","src":"2707:64:124"},"nodeType":"YulExpressionStatement","src":"2707:64:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2791:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2798:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2787:3:124"},"nodeType":"YulFunctionCall","src":"2787:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2826:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2837:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2822:3:124"},"nodeType":"YulFunctionCall","src":"2822:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2803:18:124"},"nodeType":"YulFunctionCall","src":"2803:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2780:6:124"},"nodeType":"YulFunctionCall","src":"2780:63:124"},"nodeType":"YulExpressionStatement","src":"2780:63:124"},{"nodeType":"YulVariableDeclaration","src":"2852:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2884:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2895:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2880:3:124"},"nodeType":"YulFunctionCall","src":"2880:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2867:12:124"},"nodeType":"YulFunctionCall","src":"2867:33:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"2856:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2952:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2961:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2964:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2954:6:124"},"nodeType":"YulFunctionCall","src":"2954:12:124"},"nodeType":"YulExpressionStatement","src":"2954:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2922:7:124"},{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2935:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"2944:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2931:3:124"},"nodeType":"YulFunctionCall","src":"2931:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2919:2:124"},"nodeType":"YulFunctionCall","src":"2919:31:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2912:6:124"},"nodeType":"YulFunctionCall","src":"2912:39:124"},"nodeType":"YulIf","src":"2909:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2988:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2995:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2984:3:124"},"nodeType":"YulFunctionCall","src":"2984:15:124"},{"name":"value_2","nodeType":"YulIdentifier","src":"3001:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2977:6:124"},"nodeType":"YulFunctionCall","src":"2977:32:124"},"nodeType":"YulExpressionStatement","src":"2977:32:124"},{"nodeType":"YulAssignment","src":"3018:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3028:5:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3018:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1996:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2007:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2019:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2027:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2035:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2043:6:124","type":""}],"src":"1755:1284:124"},{"body":{"nodeType":"YulBlock","src":"3293:294:124","statements":[{"nodeType":"YulAssignment","src":"3303:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3315:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3326:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3311:3:124"},"nodeType":"YulFunctionCall","src":"3311:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3303:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3346:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3357:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3339:6:124"},"nodeType":"YulFunctionCall","src":"3339:25:124"},"nodeType":"YulExpressionStatement","src":"3339:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3384:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3395:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3380:3:124"},"nodeType":"YulFunctionCall","src":"3380:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"3400:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3373:6:124"},"nodeType":"YulFunctionCall","src":"3373:34:124"},"nodeType":"YulExpressionStatement","src":"3373:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3427:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3438:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3423:3:124"},"nodeType":"YulFunctionCall","src":"3423:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"3443:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3416:6:124"},"nodeType":"YulFunctionCall","src":"3416:34:124"},"nodeType":"YulExpressionStatement","src":"3416:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3470:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3481:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3466:3:124"},"nodeType":"YulFunctionCall","src":"3466:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"3486:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3459:6:124"},"nodeType":"YulFunctionCall","src":"3459:34:124"},"nodeType":"YulExpressionStatement","src":"3459:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3513:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3524:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3509:3:124"},"nodeType":"YulFunctionCall","src":"3509:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"3530:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3502:6:124"},"nodeType":"YulFunctionCall","src":"3502:35:124"},"nodeType":"YulExpressionStatement","src":"3502:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3557:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3568:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3553:3:124"},"nodeType":"YulFunctionCall","src":"3553:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"3574:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3546:6:124"},"nodeType":"YulFunctionCall","src":"3546:35:124"},"nodeType":"YulExpressionStatement","src":"3546:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3222:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3233:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3241:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3249:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3257:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3265:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3273:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3284:4:124","type":""}],"src":"3044:543:124"},{"body":{"nodeType":"YulBlock","src":"3766:561:124","statements":[{"body":{"nodeType":"YulBlock","src":"3812:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3821:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3824:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3814:6:124"},"nodeType":"YulFunctionCall","src":"3814:12:124"},"nodeType":"YulExpressionStatement","src":"3814:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3787:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3796:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3783:3:124"},"nodeType":"YulFunctionCall","src":"3783:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3808:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3779:3:124"},"nodeType":"YulFunctionCall","src":"3779:32:124"},"nodeType":"YulIf","src":"3776:52:124"},{"nodeType":"YulAssignment","src":"3837:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3860:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3847:12:124"},"nodeType":"YulFunctionCall","src":"3847:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3837:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3879:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3910:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3921:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3906:3:124"},"nodeType":"YulFunctionCall","src":"3906:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3893:12:124"},"nodeType":"YulFunctionCall","src":"3893:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3883:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3934:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3944:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3938:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3989:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3998:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4001:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3991:6:124"},"nodeType":"YulFunctionCall","src":"3991:12:124"},"nodeType":"YulExpressionStatement","src":"3991:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3977:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3985:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3974:2:124"},"nodeType":"YulFunctionCall","src":"3974:14:124"},"nodeType":"YulIf","src":"3971:34:124"},{"nodeType":"YulVariableDeclaration","src":"4014:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4028:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"4039:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4024:3:124"},"nodeType":"YulFunctionCall","src":"4024:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4018:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4094:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4103:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4106:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4096:6:124"},"nodeType":"YulFunctionCall","src":"4096:12:124"},"nodeType":"YulExpressionStatement","src":"4096:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4073:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"4077:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4069:3:124"},"nodeType":"YulFunctionCall","src":"4069:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4084:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4065:3:124"},"nodeType":"YulFunctionCall","src":"4065:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4058:6:124"},"nodeType":"YulFunctionCall","src":"4058:35:124"},"nodeType":"YulIf","src":"4055:55:124"},{"nodeType":"YulVariableDeclaration","src":"4119:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4146:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4133:12:124"},"nodeType":"YulFunctionCall","src":"4133:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4123:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4176:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4185:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4188:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4178:6:124"},"nodeType":"YulFunctionCall","src":"4178:12:124"},"nodeType":"YulExpressionStatement","src":"4178:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4164:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4172:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4161:2:124"},"nodeType":"YulFunctionCall","src":"4161:14:124"},"nodeType":"YulIf","src":"4158:34:124"},{"body":{"nodeType":"YulBlock","src":"4250:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4259:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4262:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4252:6:124"},"nodeType":"YulFunctionCall","src":"4252:12:124"},"nodeType":"YulExpressionStatement","src":"4252:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4215:2:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4223:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"4226:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4219:3:124"},"nodeType":"YulFunctionCall","src":"4219:14:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4211:3:124"},"nodeType":"YulFunctionCall","src":"4211:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4236:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4207:3:124"},"nodeType":"YulFunctionCall","src":"4207:32:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4241:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4204:2:124"},"nodeType":"YulFunctionCall","src":"4204:45:124"},"nodeType":"YulIf","src":"4201:65:124"},{"nodeType":"YulAssignment","src":"4275:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4289:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"4293:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4285:3:124"},"nodeType":"YulFunctionCall","src":"4285:11:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4275:6:124"}]},{"nodeType":"YulAssignment","src":"4305:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"4315:6:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4305:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3716:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3727:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3739:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3747:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3755:6:124","type":""}],"src":"3592:735:124"},{"body":{"nodeType":"YulBlock","src":"4380:111:124","statements":[{"nodeType":"YulAssignment","src":"4390:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4412:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4399:12:124"},"nodeType":"YulFunctionCall","src":"4399:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4390:5:124"}]},{"body":{"nodeType":"YulBlock","src":"4469:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4478:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4481:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4471:6:124"},"nodeType":"YulFunctionCall","src":"4471:12:124"},"nodeType":"YulExpressionStatement","src":"4471:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4441:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4452:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4459:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4448:3:124"},"nodeType":"YulFunctionCall","src":"4448:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4438:2:124"},"nodeType":"YulFunctionCall","src":"4438:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4431:6:124"},"nodeType":"YulFunctionCall","src":"4431:37:124"},"nodeType":"YulIf","src":"4428:57:124"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4359:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4370:5:124","type":""}],"src":"4332:159:124"},{"body":{"nodeType":"YulBlock","src":"4713:861:124","statements":[{"nodeType":"YulVariableDeclaration","src":"4723:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4737:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4746:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4733:3:124"},"nodeType":"YulFunctionCall","src":"4733:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4727:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4781:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4790:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4793:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4783:6:124"},"nodeType":"YulFunctionCall","src":"4783:12:124"},"nodeType":"YulExpressionStatement","src":"4783:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4772:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"4776:3:124","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4768:3:124"},"nodeType":"YulFunctionCall","src":"4768:12:124"},"nodeType":"YulIf","src":"4765:32:124"},{"nodeType":"YulAssignment","src":"4806:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4829:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4816:12:124"},"nodeType":"YulFunctionCall","src":"4816:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4806:6:124"}]},{"nodeType":"YulAssignment","src":"4848:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4875:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4886:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4871:3:124"},"nodeType":"YulFunctionCall","src":"4871:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4858:12:124"},"nodeType":"YulFunctionCall","src":"4858:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4848:6:124"}]},{"body":{"nodeType":"YulBlock","src":"4989:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4998:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5001:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4991:6:124"},"nodeType":"YulFunctionCall","src":"4991:12:124"},"nodeType":"YulExpressionStatement","src":"4991:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4910:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"4914:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4906:3:124"},"nodeType":"YulFunctionCall","src":"4906:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"4983:4:124","type":"","value":"0xe0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4902:3:124"},"nodeType":"YulFunctionCall","src":"4902:86:124"},"nodeType":"YulIf","src":"4899:106:124"},{"nodeType":"YulVariableDeclaration","src":"5014:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_1305","nodeType":"YulIdentifier","src":"5027:20:124"},"nodeType":"YulFunctionCall","src":"5027:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5018:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5065:5:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5095:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5106:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5091:3:124"},"nodeType":"YulFunctionCall","src":"5091:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5072:18:124"},"nodeType":"YulFunctionCall","src":"5072:38:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5058:6:124"},"nodeType":"YulFunctionCall","src":"5058:53:124"},"nodeType":"YulExpressionStatement","src":"5058:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5131:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5138:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5127:3:124"},"nodeType":"YulFunctionCall","src":"5127:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5166:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5177:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5162:3:124"},"nodeType":"YulFunctionCall","src":"5162:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5143:18:124"},"nodeType":"YulFunctionCall","src":"5143:38:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5120:6:124"},"nodeType":"YulFunctionCall","src":"5120:62:124"},"nodeType":"YulExpressionStatement","src":"5120:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5202:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5209:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5198:3:124"},"nodeType":"YulFunctionCall","src":"5198:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5237:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5248:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5233:3:124"},"nodeType":"YulFunctionCall","src":"5233:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5214:18:124"},"nodeType":"YulFunctionCall","src":"5214:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5191:6:124"},"nodeType":"YulFunctionCall","src":"5191:63:124"},"nodeType":"YulExpressionStatement","src":"5191:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5274:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5281:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5270:3:124"},"nodeType":"YulFunctionCall","src":"5270:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5309:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5320:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5305:3:124"},"nodeType":"YulFunctionCall","src":"5305:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5286:18:124"},"nodeType":"YulFunctionCall","src":"5286:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5263:6:124"},"nodeType":"YulFunctionCall","src":"5263:63:124"},"nodeType":"YulExpressionStatement","src":"5263:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5346:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5353:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5342:3:124"},"nodeType":"YulFunctionCall","src":"5342:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5382:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5393:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5378:3:124"},"nodeType":"YulFunctionCall","src":"5378:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5359:18:124"},"nodeType":"YulFunctionCall","src":"5359:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5335:6:124"},"nodeType":"YulFunctionCall","src":"5335:64:124"},"nodeType":"YulExpressionStatement","src":"5335:64:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5419:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5426:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5415:3:124"},"nodeType":"YulFunctionCall","src":"5415:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5454:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5465:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5450:3:124"},"nodeType":"YulFunctionCall","src":"5450:20:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"5432:17:124"},"nodeType":"YulFunctionCall","src":"5432:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5408:6:124"},"nodeType":"YulFunctionCall","src":"5408:64:124"},"nodeType":"YulExpressionStatement","src":"5408:64:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5492:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5499:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5488:3:124"},"nodeType":"YulFunctionCall","src":"5488:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5527:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5538:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5523:3:124"},"nodeType":"YulFunctionCall","src":"5523:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"5505:17:124"},"nodeType":"YulFunctionCall","src":"5505:38:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5481:6:124"},"nodeType":"YulFunctionCall","src":"5481:63:124"},"nodeType":"YulExpressionStatement","src":"5481:63:124"},{"nodeType":"YulAssignment","src":"5553:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5563:5:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5553:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_InitReserveParams_$24226_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4663:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4674:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4686:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4694:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4702:6:124","type":""}],"src":"4496:1078:124"},{"body":{"nodeType":"YulBlock","src":"5682:92:124","statements":[{"nodeType":"YulAssignment","src":"5692:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5704:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5715:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5700:3:124"},"nodeType":"YulFunctionCall","src":"5700:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5692:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5734:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5759:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5752:6:124"},"nodeType":"YulFunctionCall","src":"5752:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5745:6:124"},"nodeType":"YulFunctionCall","src":"5745:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5727:6:124"},"nodeType":"YulFunctionCall","src":"5727:41:124"},"nodeType":"YulExpressionStatement","src":"5727:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5651:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5662:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5673:4:124","type":""}],"src":"5579:195:124"},{"body":{"nodeType":"YulBlock","src":"5883:224:124","statements":[{"body":{"nodeType":"YulBlock","src":"5929:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5938:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5941:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5931:6:124"},"nodeType":"YulFunctionCall","src":"5931:12:124"},"nodeType":"YulExpressionStatement","src":"5931:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5904:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5913:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5900:3:124"},"nodeType":"YulFunctionCall","src":"5900:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5925:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5896:3:124"},"nodeType":"YulFunctionCall","src":"5896:32:124"},"nodeType":"YulIf","src":"5893:52:124"},{"nodeType":"YulAssignment","src":"5954:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5983:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5964:18:124"},"nodeType":"YulFunctionCall","src":"5964:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5954:6:124"}]},{"nodeType":"YulAssignment","src":"6002:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6035:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6046:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6031:3:124"},"nodeType":"YulFunctionCall","src":"6031:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6012:18:124"},"nodeType":"YulFunctionCall","src":"6012:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6002:6:124"}]},{"nodeType":"YulAssignment","src":"6059:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6086:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6097:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6082:3:124"},"nodeType":"YulFunctionCall","src":"6082:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6069:12:124"},"nodeType":"YulFunctionCall","src":"6069:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6059:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5833:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5844:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5856:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5864:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5872:6:124","type":""}],"src":"5779:328:124"},{"body":{"nodeType":"YulBlock","src":"6293:218:124","statements":[{"body":{"nodeType":"YulBlock","src":"6339:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6348:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6351:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6341:6:124"},"nodeType":"YulFunctionCall","src":"6341:12:124"},"nodeType":"YulExpressionStatement","src":"6341:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6314:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6323:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6310:3:124"},"nodeType":"YulFunctionCall","src":"6310:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6335:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6306:3:124"},"nodeType":"YulFunctionCall","src":"6306:32:124"},"nodeType":"YulIf","src":"6303:52:124"},{"nodeType":"YulAssignment","src":"6364:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6387:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6374:12:124"},"nodeType":"YulFunctionCall","src":"6374:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6364:6:124"}]},{"nodeType":"YulAssignment","src":"6406:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6433:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6444:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6429:3:124"},"nodeType":"YulFunctionCall","src":"6429:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6416:12:124"},"nodeType":"YulFunctionCall","src":"6416:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6406:6:124"}]},{"nodeType":"YulAssignment","src":"6457:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6490:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6501:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6486:3:124"},"nodeType":"YulFunctionCall","src":"6486:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6467:18:124"},"nodeType":"YulFunctionCall","src":"6467:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6457:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6243:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6254:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6266:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6274:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6282:6:124","type":""}],"src":"6112:399:124"},{"body":{"nodeType":"YulBlock","src":"6637:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"6647:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6657:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6651:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6675:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6686:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6668:6:124"},"nodeType":"YulFunctionCall","src":"6668:21:124"},"nodeType":"YulExpressionStatement","src":"6668:21:124"},{"nodeType":"YulVariableDeclaration","src":"6698:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6718:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6712:5:124"},"nodeType":"YulFunctionCall","src":"6712:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6702:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6745:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6756:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6741:3:124"},"nodeType":"YulFunctionCall","src":"6741:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"6761:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6734:6:124"},"nodeType":"YulFunctionCall","src":"6734:34:124"},"nodeType":"YulExpressionStatement","src":"6734:34:124"},{"nodeType":"YulVariableDeclaration","src":"6777:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6786:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6781:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6846:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6875:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"6886:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6871:3:124"},"nodeType":"YulFunctionCall","src":"6871:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"6890:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6867:3:124"},"nodeType":"YulFunctionCall","src":"6867:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6909:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"6917:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6905:3:124"},"nodeType":"YulFunctionCall","src":"6905:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6921:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6901:3:124"},"nodeType":"YulFunctionCall","src":"6901:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6895:5:124"},"nodeType":"YulFunctionCall","src":"6895:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6860:6:124"},"nodeType":"YulFunctionCall","src":"6860:66:124"},"nodeType":"YulExpressionStatement","src":"6860:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6807:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"6810:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6804:2:124"},"nodeType":"YulFunctionCall","src":"6804:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6818:19:124","statements":[{"nodeType":"YulAssignment","src":"6820:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6829:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6832:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6825:3:124"},"nodeType":"YulFunctionCall","src":"6825:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6820:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"6800:3:124","statements":[]},"src":"6796:140:124"},{"body":{"nodeType":"YulBlock","src":"6970:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6999:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"7010:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6995:3:124"},"nodeType":"YulFunctionCall","src":"6995:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"7019:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6991:3:124"},"nodeType":"YulFunctionCall","src":"6991:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"7024:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6984:6:124"},"nodeType":"YulFunctionCall","src":"6984:42:124"},"nodeType":"YulExpressionStatement","src":"6984:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6951:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"6954:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6948:2:124"},"nodeType":"YulFunctionCall","src":"6948:13:124"},"nodeType":"YulIf","src":"6945:91:124"},{"nodeType":"YulAssignment","src":"7045:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7061:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7080:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7088:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7076:3:124"},"nodeType":"YulFunctionCall","src":"7076:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"7093:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7072:3:124"},"nodeType":"YulFunctionCall","src":"7072:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7057:3:124"},"nodeType":"YulFunctionCall","src":"7057:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"7163:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7053:3:124"},"nodeType":"YulFunctionCall","src":"7053:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7045:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6606:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6617:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6628:4:124","type":""}],"src":"6516:656:124"},{"body":{"nodeType":"YulBlock","src":"7286:76:124","statements":[{"nodeType":"YulAssignment","src":"7296:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7308:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7319:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7304:3:124"},"nodeType":"YulFunctionCall","src":"7304:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7296:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7338:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"7349:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7331:6:124"},"nodeType":"YulFunctionCall","src":"7331:25:124"},"nodeType":"YulExpressionStatement","src":"7331:25:124"}]},"name":"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7255:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7266:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7277:4:124","type":""}],"src":"7177:185:124"},{"body":{"nodeType":"YulBlock","src":"7399:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7416:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7419:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7409:6:124"},"nodeType":"YulFunctionCall","src":"7409:88:124"},"nodeType":"YulExpressionStatement","src":"7409:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7513:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7516:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7506:6:124"},"nodeType":"YulFunctionCall","src":"7506:15:124"},"nodeType":"YulExpressionStatement","src":"7506:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7537:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7540:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7530:6:124"},"nodeType":"YulFunctionCall","src":"7530:15:124"},"nodeType":"YulExpressionStatement","src":"7530:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"7367:184:124"},{"body":{"nodeType":"YulBlock","src":"7626:116:124","statements":[{"body":{"nodeType":"YulBlock","src":"7672:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7681:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7684:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7674:6:124"},"nodeType":"YulFunctionCall","src":"7674:12:124"},"nodeType":"YulExpressionStatement","src":"7674:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7647:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7656:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7643:3:124"},"nodeType":"YulFunctionCall","src":"7643:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7668:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7639:3:124"},"nodeType":"YulFunctionCall","src":"7639:32:124"},"nodeType":"YulIf","src":"7636:52:124"},{"nodeType":"YulAssignment","src":"7697:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7726:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7707:18:124"},"nodeType":"YulFunctionCall","src":"7707:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7697:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7592:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7603:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7615:6:124","type":""}],"src":"7556:186:124"},{"body":{"nodeType":"YulBlock","src":"7876:119:124","statements":[{"nodeType":"YulAssignment","src":"7886:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7898:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7909:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7894:3:124"},"nodeType":"YulFunctionCall","src":"7894:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7886:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7928:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"7939:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7921:6:124"},"nodeType":"YulFunctionCall","src":"7921:25:124"},"nodeType":"YulExpressionStatement","src":"7921:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7966:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7977:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7962:3:124"},"nodeType":"YulFunctionCall","src":"7962:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"7982:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7955:6:124"},"nodeType":"YulFunctionCall","src":"7955:34:124"},"nodeType":"YulExpressionStatement","src":"7955:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7837:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7848:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7856:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7867:4:124","type":""}],"src":"7747:248:124"},{"body":{"nodeType":"YulBlock","src":"8101:76:124","statements":[{"nodeType":"YulAssignment","src":"8111:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8123:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8134:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8119:3:124"},"nodeType":"YulFunctionCall","src":"8119:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8111:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8153:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"8164:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8146:6:124"},"nodeType":"YulFunctionCall","src":"8146:25:124"},"nodeType":"YulExpressionStatement","src":"8146:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8070:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8081:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8092:4:124","type":""}],"src":"8000:177:124"},{"body":{"nodeType":"YulBlock","src":"8214:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8231:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8234:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8224:6:124"},"nodeType":"YulFunctionCall","src":"8224:88:124"},"nodeType":"YulExpressionStatement","src":"8224:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8328:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8331:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8321:6:124"},"nodeType":"YulFunctionCall","src":"8321:15:124"},"nodeType":"YulExpressionStatement","src":"8321:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8352:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8355:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8345:6:124"},"nodeType":"YulFunctionCall","src":"8345:15:124"},"nodeType":"YulExpressionStatement","src":"8345:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"8182:184:124"},{"body":{"nodeType":"YulBlock","src":"8418:148:124","statements":[{"body":{"nodeType":"YulBlock","src":"8509:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8511:16:124"},"nodeType":"YulFunctionCall","src":"8511:18:124"},"nodeType":"YulExpressionStatement","src":"8511:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8434:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8441:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8431:2:124"},"nodeType":"YulFunctionCall","src":"8431:77:124"},"nodeType":"YulIf","src":"8428:103:124"},{"nodeType":"YulAssignment","src":"8540:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8551:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"8558:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8547:3:124"},"nodeType":"YulFunctionCall","src":"8547:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8540:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8400:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8410:3:124","type":""}],"src":"8371:195:124"},{"body":{"nodeType":"YulBlock","src":"8617:151:124","statements":[{"nodeType":"YulVariableDeclaration","src":"8627:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8637:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8631:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8652:29:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8671:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8678:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8667:3:124"},"nodeType":"YulFunctionCall","src":"8667:14:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"8656:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8709:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8711:16:124"},"nodeType":"YulFunctionCall","src":"8711:18:124"},"nodeType":"YulExpressionStatement","src":"8711:18:124"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8696:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8705:2:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8693:2:124"},"nodeType":"YulFunctionCall","src":"8693:15:124"},"nodeType":"YulIf","src":"8690:41:124"},{"nodeType":"YulAssignment","src":"8740:22:124","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8751:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"8760:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8747:3:124"},"nodeType":"YulFunctionCall","src":"8747:15:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8740:3:124"}]}]},"name":"increment_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8599:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8609:3:124","type":""}],"src":"8571:197:124"},{"body":{"nodeType":"YulBlock","src":"8874:125:124","statements":[{"nodeType":"YulAssignment","src":"8884:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8896:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8907:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8892:3:124"},"nodeType":"YulFunctionCall","src":"8892:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8884:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8926:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8941:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8949:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8937:3:124"},"nodeType":"YulFunctionCall","src":"8937:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8919:6:124"},"nodeType":"YulFunctionCall","src":"8919:74:124"},"nodeType":"YulExpressionStatement","src":"8919:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8843:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8854:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8865:4:124","type":""}],"src":"8773:226:124"},{"body":{"nodeType":"YulBlock","src":"9085:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"9131:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9140:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9143:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9133:6:124"},"nodeType":"YulFunctionCall","src":"9133:12:124"},"nodeType":"YulExpressionStatement","src":"9133:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9106:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9115:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9102:3:124"},"nodeType":"YulFunctionCall","src":"9102:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9127:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9098:3:124"},"nodeType":"YulFunctionCall","src":"9098:32:124"},"nodeType":"YulIf","src":"9095:52:124"},{"nodeType":"YulAssignment","src":"9156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9172:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9166:5:124"},"nodeType":"YulFunctionCall","src":"9166:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9156:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9051:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9062:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9074:6:124","type":""}],"src":"9004:184:124"},{"body":{"nodeType":"YulBlock","src":"9241:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"9268:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9270:16:124"},"nodeType":"YulFunctionCall","src":"9270:18:124"},"nodeType":"YulExpressionStatement","src":"9270:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9257:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"9264:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9260:3:124"},"nodeType":"YulFunctionCall","src":"9260:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9254:2:124"},"nodeType":"YulFunctionCall","src":"9254:13:124"},"nodeType":"YulIf","src":"9251:39:124"},{"nodeType":"YulAssignment","src":"9299:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9310:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"9313:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9306:3:124"},"nodeType":"YulFunctionCall","src":"9306:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"9299:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9224:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"9227:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"9233:3:124","type":""}],"src":"9193:128:124"},{"body":{"nodeType":"YulBlock","src":"9378:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"9497:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9499:16:124"},"nodeType":"YulFunctionCall","src":"9499:18:124"},"nodeType":"YulExpressionStatement","src":"9499:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9409:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9402:6:124"},"nodeType":"YulFunctionCall","src":"9402:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9395:6:124"},"nodeType":"YulFunctionCall","src":"9395:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"9417:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9424:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"9492:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"9420:3:124"},"nodeType":"YulFunctionCall","src":"9420:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9414:2:124"},"nodeType":"YulFunctionCall","src":"9414:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9391:3:124"},"nodeType":"YulFunctionCall","src":"9391:105:124"},"nodeType":"YulIf","src":"9388:131:124"},{"nodeType":"YulAssignment","src":"9528:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9543:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"9546:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"9539:3:124"},"nodeType":"YulFunctionCall","src":"9539:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"9528:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9357:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"9360:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"9366:7:124","type":""}],"src":"9326:228:124"},{"body":{"nodeType":"YulBlock","src":"9591:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9608:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9611:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9601:6:124"},"nodeType":"YulFunctionCall","src":"9601:88:124"},"nodeType":"YulExpressionStatement","src":"9601:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9705:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9708:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9698:6:124"},"nodeType":"YulFunctionCall","src":"9698:15:124"},"nodeType":"YulExpressionStatement","src":"9698:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9729:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9732:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9722:6:124"},"nodeType":"YulFunctionCall","src":"9722:15:124"},"nodeType":"YulExpressionStatement","src":"9722:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"9559:184:124"},{"body":{"nodeType":"YulBlock","src":"9797:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"9819:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9821:16:124"},"nodeType":"YulFunctionCall","src":"9821:18:124"},"nodeType":"YulExpressionStatement","src":"9821:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9813:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"9816:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9810:2:124"},"nodeType":"YulFunctionCall","src":"9810:8:124"},"nodeType":"YulIf","src":"9807:34:124"},{"nodeType":"YulAssignment","src":"9850:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9862:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"9865:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9858:3:124"},"nodeType":"YulFunctionCall","src":"9858:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"9850:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9779:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"9782:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"9788:4:124","type":""}],"src":"9748:125:124"},{"body":{"nodeType":"YulBlock","src":"10052:171:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10069:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10080:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10062:6:124"},"nodeType":"YulFunctionCall","src":"10062:21:124"},"nodeType":"YulExpressionStatement","src":"10062:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10103:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10114:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10099:3:124"},"nodeType":"YulFunctionCall","src":"10099:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"10119:2:124","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10092:6:124"},"nodeType":"YulFunctionCall","src":"10092:30:124"},"nodeType":"YulExpressionStatement","src":"10092:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10142:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10153:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10138:3:124"},"nodeType":"YulFunctionCall","src":"10138:18:124"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"10158:23:124","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10131:6:124"},"nodeType":"YulFunctionCall","src":"10131:51:124"},"nodeType":"YulExpressionStatement","src":"10131:51:124"},{"nodeType":"YulAssignment","src":"10191:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10203:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10214:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10199:3:124"},"nodeType":"YulFunctionCall","src":"10199:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10191:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10029:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10043:4:124","type":""}],"src":"9878:345:124"},{"body":{"nodeType":"YulBlock","src":"10274:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"10305:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10326:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10329:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10319:6:124"},"nodeType":"YulFunctionCall","src":"10319:88:124"},"nodeType":"YulExpressionStatement","src":"10319:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10427:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10430:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10420:6:124"},"nodeType":"YulFunctionCall","src":"10420:15:124"},"nodeType":"YulExpressionStatement","src":"10420:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10455:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10458:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10448:6:124"},"nodeType":"YulFunctionCall","src":"10448:15:124"},"nodeType":"YulExpressionStatement","src":"10448:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10294:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10287:6:124"},"nodeType":"YulFunctionCall","src":"10287:9:124"},"nodeType":"YulIf","src":"10284:189:124"},{"nodeType":"YulAssignment","src":"10482:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10491:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10494:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"10487:3:124"},"nodeType":"YulFunctionCall","src":"10487:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"10482:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10259:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"10262:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"10268:1:124","type":""}],"src":"10228:274:124"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function allocate_memory_1302() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 32)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_1305() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xe0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 256) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let _2 := add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0)\n        if slt(_2, 0xa0) { revert(0, 0) }\n        let value := allocate_memory_1302()\n        if slt(_2, 32) { revert(0, 0) }\n        let value_1 := allocate_memory()\n        mstore(value_1, calldataload(add(headStart, 96)))\n        mstore(value, value_1)\n        mstore(add(value, 32), calldataload(add(headStart, 128)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 0xa0)))\n        mstore(add(value, 96), abi_decode_address(add(headStart, 192)))\n        let value_2 := calldataload(add(headStart, 224))\n        if iszero(eq(value_2, and(value_2, 0xff))) { revert(0, 0) }\n        mstore(add(value, 128), value_2)\n        value3 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_InitReserveParams_$24226_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 288) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0), 0xe0) { revert(0, 0) }\n        let value := allocate_memory_1305()\n        mstore(value, abi_decode_address(add(headStart, 64)))\n        mstore(add(value, 32), abi_decode_address(add(headStart, 96)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 128)))\n        mstore(add(value, 96), abi_decode_address(add(headStart, 160)))\n        mstore(add(value, 128), abi_decode_address(add(headStart, 192)))\n        mstore(add(value, 160), abi_decode_uint16(add(headStart, 0xe0)))\n        mstore(add(value, 192), abi_decode_uint16(add(headStart, 256)))\n        value2 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function increment_t_uint16(value) -> ret\n    {\n        let _1 := 0xffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361061007c5760003560e01c806369fc1bdf1161005a57806369fc1bdf1461010857806387b322b2146101385780639cf570231461015857600080fd5b80631e3b41451461008157806326ec273f146100a357806348c2ca8c146100e8575b600080fd5b81801561008d57600080fd5b506100a161009c366004611f9d565b610178565b005b6100b66100b13660046120ad565b6102b0565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b8180156100f457600080fd5b506100a1610103366004612186565b6102ed565b81801561011457600080fd5b50610128610123366004612217565b6104d3565b60405190151581526020016100df565b81801561014457600080fd5b506100a16101533660046122f2565b6108cc565b81801561016457600080fd5b506100a161017336600461232e565b6108f2565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020838152604091829020825191820190925290549081905260d41c64ffffffffff1660408051808201909152600281527f38310000000000000000000000000000000000000000000000000000000000006020820152901561022d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff811660008181526020848152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a25050565b6000806000806000806102c58a8a8a8a610a33565b50939950919750909450925090506102de868684610f9d565b93509499939850945094509450565b60005b818110156104cd57600083838381811061030c5761030c6123d6565b90506020020160208101906103219190612405565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208781526040918290208251918201909252815490819052919250906701000000000000001661036f5750506104bb565b60088101546fffffffffffffffffffffffffffffffff1680156104b7576008820180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905560006103c183610fd1565b905060006103cf8383611061565b6004808601546040517f7df5bd3b00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff1691637df5bd3b91610432918591879101918252602082015260400190565b600060405180830381600087803b15801561044c57600080fd5b505af1158015610460573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fbfa21aa5d5f9a1f0120a95e7c0749f389863cbdbfff531aa7339077a5bc919de826040516104ac91815260200190565b60405180910390a250505b5050505b806104c58161244f565b9150506102f0565b50505050565b805160408051808201909152600181527f390000000000000000000000000000000000000000000000000000000000000060208201526000913b610544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060208083015160408085015160608601516080870151875173ffffffffffffffffffffffffffffffffffffffff166000908152958a90529290942061058c949093926110b8565b815173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120600301547501000000000000000000000000000000000000000000900461ffff161515806106085750825160008080526020869052604090205473ffffffffffffffffffffffffffffffffffffffff9081169116145b905080156040518060400160405280600281526020017f31340000000000000000000000000000000000000000000000000000000000008152509061067a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060005b8360a0015161ffff168161ffff1610156107885761ffff811660009081526020869052604090205473ffffffffffffffffffffffffffffffffffffffff1661077657835173ffffffffffffffffffffffffffffffffffffffff90811660009081526020888152604080832060030180547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000061ffff97909716968702179055875194835290889052812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169390921692909217905591506108c59050565b8061078081612488565b91505061067e565b508260c0015161ffff168360a0015161ffff16106040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152509061080a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50505060a081018051825173ffffffffffffffffffffffffffffffffffffffff90811660009081526020878152604080832060030180547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000061ffff978816021790558651955190941682528690529190912080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169290911691909117905560015b9392505050565b6108ed73ffffffffffffffffffffffffffffffffffffffff8416838361120b565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020849052604090206109228382846112de565b5073ffffffffffffffffffffffffffffffffffffffff166000818152602084815260408083206003810180547501000000000000000000000000000000000000000000900461ffff16855295835290832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155938352949052808455600184018190556002840181905582547fffffffffffffffffff0000000000000000000000000000000000000000000000169092556004830180548216905560058301805482169055600683018054821690556007830180549091169055600882015560090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055565b600080600080600080610a498760000151511590565b15610a855750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081610f90565b610b3460405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610b7957608088015160ff16600090815260208a9052604090206060890151610b669190611749565b6101808401526101c08301526101a08201525b87602001518160c001511015610e985760c08101518851610b9991611828565b610bad5760c0810180516001019052610b79565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610bf35760c0810180516001019052610b79565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610c895750816101e00151896080015160ff16145b610d2d5760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2891906124aa565b610d34565b8161018001515b825260a082015115801590610d54575060c08201518951610d54916118ad565b15610e4457610d7189604001518284600001518560200151611931565b6040830181905261010083018051610d8a9083906124c3565b90525060808901516101e0830151610da59160ff1690611a0a565b1515610240830152608082015115610dfb57816102400151610dcb578160800151610dd2565b816101a001515b8260400151610de191906124db565b8261014001818151610df391906124c3565b905250610e04565b60016102208301525b816102400151610e18578160a00151610e1f565b816101c001515b8260400151610e2e91906124db565b8261016001818151610e4091906124c3565b9052505b60c08201518951610e5491611a1b565b15610e8757610e7189604001518284600001518560200151611a9d565b8261012001818151610e8391906124c3565b9052505b5060c0810180516001019052610b79565b610100810151610ea9576000610ec4565b80610100015181610140015181610ec257610ec2612518565b045b610140820152610100810151610edb576000610ef6565b80610100015181610160015181610ef457610ef4612518565b045b61016082015261012081015115610f3857610f33816101200151610f2d836101600151846101000151611c1d90919063ffffffff16565b90611c60565b610f5a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b600080610faa8584611c1d565b905083811015610fbe5760009150506108c5565b610fc88482612547565b95945050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415611017575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546108c5906fffffffffffffffffffffffffffffffff80821691611055917001000000000000000000000000000000009091041684611c97565b90611061565b50919050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761109657600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600485015460408051808201909152600281527f363100000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1615611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b506001850180546b033b2e3c9fd0803ce80000007fffffffffffffffffffffffffffffffff00000000000000000000000000000000918216811790925560028701805490911690911790556004850180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff968716179091556005860180548216948616949094179093556006850180548416928516929092179091556007909301805490911692909116919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af161126e573d6000803e3d6000fd5b5061127884611cdc565b6104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610224565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060038201547501000000000000000000000000000000000000000000900461ffff161515806113b6575060008080526020849052604090205473ffffffffffffffffffffffffffffffffffffffff8281169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090611424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b508160050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b891906124aa565b60408051808201909152600281527f353500000000000000000000000000000000000000000000000000000000000060208201529015611525576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b508160060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b991906124aa565b60408051808201909152600281527f353600000000000000000000000000000000000000000000000000000000000060208201529015611626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50600480830154604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926318160ddd9282820192602092908290030181865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba91906124aa565b1580156116db575060088201546fffffffffffffffffffffffffffffffff16155b6040518060400160405280600281526020017f3534000000000000000000000000000000000000000000000000000000000000815250906104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff16801561180d576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a91906124aa565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061189a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5050905160019190911b1c600316151590565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50509051600191821b82011c16151590565b60008061193d85610fd1565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81169382019390935292935060009287926119e3928692911690631da24f3e90602401602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105591906124aa565b6119ed91906124db565b90508381816119fe576119fe612518565b04979650505050505050565b600082158015906108c55750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310611a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015611b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3791906124aa565b90508015611b5557611b52611b4b86611da6565b8290611061565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb91906124aa565b611bf590826124c3565b9050611c0181856124db565b9050828181611c1257611c12612518565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517611c5257600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715611c8057600080fd5b50670de0b6b3a76400009190910260028204010490565b600080611cab64ffffffffff841642612547565b611cb590856124db565b6301e1338090049050611cd4816b033b2e3c9fd0803ce80000006124c3565b949350505050565b6000611d1c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611d5b5760208114611d9557611d567f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611ce3565b61105b565b823b611d8c57611d8c7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611ce3565b6001915061105b565b3d6000803e50506000511515919050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415611dec575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546108c5906fffffffffffffffffffffffffffffffff8082169161105591700100000000000000000000000000000000909104168460006108c5838342600080611e4164ffffffffff851684612547565b905080611e5d576b033b2e3c9fd0803ce80000009150506108c5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611e93576000611e98565b600285035b925066038882915c4000611eac8a80611061565b81611eb957611eb9612518565b0491506301e13380611ecb838b611061565b81611ed857611ed8612518565b049050600082611ee886886124db565b611ef291906124db565b60029004905060008285611f06888a6124db565b611f1091906124db565b611f1a91906124db565b60069004905080826301e13380611f318a8f6124db565b611f3b919061255e565b611f51906b033b2e3c9fd0803ce80000006124c3565b611f5b91906124c3565b611f6591906124c3565b9b9a5050505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f9857600080fd5b919050565b60008060408385031215611fb057600080fd5b82359150611fc060208401611f74565b90509250929050565b60405160a0810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516020810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000808486036101008112156120c557600080fd5b8535945060208601359350604086013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa00160a081121561210757600080fd5b61210f611fc9565b602082121561211d57600080fd5b612125612019565b9150606087013582528181526080870135602082015261214760a08801611f74565b604082015261215860c08801611f74565b606082015260e0870135915060ff8216821461217357600080fd5b6080810191909152939692955090935050565b60008060006040848603121561219b57600080fd5b83359250602084013567ffffffffffffffff808211156121ba57600080fd5b818601915086601f8301126121ce57600080fd5b8135818111156121dd57600080fd5b8760208260051b85010111156121f257600080fd5b6020830194508093505050509250925092565b803561ffff81168114611f9857600080fd5b600080600083850361012081121561222e57600080fd5b843593506020850135925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561226957600080fd5b50612272612063565b61227e60408601611f74565b815261228c60608601611f74565b602082015261229d60808601611f74565b60408201526122ae60a08601611f74565b60608201526122bf60c08601611f74565b60808201526122d060e08601612205565b60a08201526122e26101008601612205565b60c0820152809150509250925092565b60008060006060848603121561230757600080fd5b61231084611f74565b925061231e60208501611f74565b9150604084013590509250925092565b60008060006060848603121561234357600080fd5b833592506020840135915061235a60408501611f74565b90509250925092565b600060208083528351808285015260005b8181101561239057858101830151858201604001528201612374565b818111156123a2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561241757600080fd5b6108c582611f74565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561248157612481612420565b5060010190565b600061ffff808316818114156124a0576124a0612420565b6001019392505050565b6000602082840312156124bc57600080fd5b5051919050565b600082198211156124d6576124d6612420565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561251357612513612420565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008282101561255957612559612420565b500390565b600082612594577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ccb254251cdf1be59d8b5ed3d58ad7750a1beb388e4d59d169f5b6b07622337364736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x69FC1BDF GT PUSH2 0x5A JUMPI DUP1 PUSH4 0x69FC1BDF EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0x87B322B2 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x9CF57023 EQ PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E3B4145 EQ PUSH2 0x81 JUMPI DUP1 PUSH4 0x26EC273F EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x48C2CA8C EQ PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x9C CALLDATASIZE PUSH1 0x4 PUSH2 0x1F9D JUMP JUMPDEST PUSH2 0x178 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB6 PUSH2 0xB1 CALLDATASIZE PUSH1 0x4 PUSH2 0x20AD JUMP JUMPDEST PUSH2 0x2B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x2186 JUMP JUMPDEST PUSH2 0x2ED JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x128 PUSH2 0x123 CALLDATASIZE PUSH1 0x4 PUSH2 0x2217 JUMP JUMPDEST PUSH2 0x4D3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDF JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x153 CALLDATASIZE PUSH1 0x4 PUSH2 0x22F2 JUMP JUMPDEST PUSH2 0x8CC JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0x232E JUMP JUMPDEST PUSH2 0x8F2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3831000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x22D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2C5 DUP11 DUP11 DUP11 DUP11 PUSH2 0xA33 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP2 SWAP8 POP SWAP1 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x2DE DUP7 DUP7 DUP5 PUSH2 0xF9D JUMP JUMPDEST SWAP4 POP SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x30C JUMPI PUSH2 0x30C PUSH2 0x23D6 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x321 SWAP2 SWAP1 PUSH2 0x2405 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP2 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH8 0x100000000000000 AND PUSH2 0x36F JUMPI POP POP PUSH2 0x4BB JUMP JUMPDEST PUSH1 0x8 DUP2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x4B7 JUMPI PUSH1 0x8 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH2 0x3C1 DUP4 PUSH2 0xFD1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CF DUP4 DUP4 PUSH2 0x1061 JUMP JUMPDEST PUSH1 0x4 DUP1 DUP7 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x7DF5BD3B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x7DF5BD3B SWAP2 PUSH2 0x432 SWAP2 DUP6 SWAP2 DUP8 SWAP2 ADD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x460 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBFA21AA5D5F9A1F0120A95E7C0749F389863CBDBFFF531AA7339077A5BC919DE DUP3 PUSH1 0x40 MLOAD PUSH2 0x4AC SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST POP POP POP JUMPDEST DUP1 PUSH2 0x4C5 DUP2 PUSH2 0x244F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2F0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 EXTCODESIZE PUSH2 0x544 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD DUP8 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP6 DUP11 SWAP1 MSTORE SWAP3 SWAP1 SWAP5 KECCAK256 PUSH2 0x58C SWAP5 SWAP1 SWAP4 SWAP3 PUSH2 0x10B8 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x608 JUMPI POP DUP3 MLOAD PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP1 POP DUP1 ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3134000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x67A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP2 PUSH2 0xFFFF AND LT ISZERO PUSH2 0x788 JUMPI PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x776 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH22 0x1000000000000000000000000000000000000000000 PUSH2 0xFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP8 MUL OR SWAP1 SSTORE DUP8 MLOAD SWAP5 DUP4 MSTORE SWAP1 DUP9 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE SWAP2 POP PUSH2 0x8C5 SWAP1 POP JUMP JUMPDEST DUP1 PUSH2 0x780 DUP2 PUSH2 0x2488 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x67E JUMP JUMPDEST POP DUP3 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND LT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3135000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x80A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP POP PUSH1 0xA0 DUP2 ADD DUP1 MLOAD DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH22 0x1000000000000000000000000000000000000000000 PUSH2 0xFFFF SWAP8 DUP9 AND MUL OR SWAP1 SSTORE DUP7 MLOAD SWAP6 MLOAD SWAP1 SWAP5 AND DUP3 MSTORE DUP7 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x8ED PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x120B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x922 DUP4 DUP3 DUP5 PUSH2 0x12DE JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP6 MSTORE SWAP6 DUP4 MSTORE SWAP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE SWAP5 SWAP1 MSTORE DUP1 DUP5 SSTORE PUSH1 0x1 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x2 DUP5 ADD DUP2 SWAP1 SSTORE DUP3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 AND SWAP1 SWAP3 SSTORE PUSH1 0x4 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x5 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x6 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x7 DUP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x8 DUP3 ADD SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xA49 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0xA85 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0xF90 JUMP JUMPDEST PUSH2 0xB34 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB79 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0xB66 SWAP2 SWAP1 PUSH2 0x1749 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0xE98 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0xB99 SWAP2 PUSH2 0x1828 JUMP JUMPDEST PUSH2 0xBAD JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xBF3 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xC89 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0xD2D JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD28 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0xD34 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD54 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xD54 SWAP2 PUSH2 0x18AD JUMP JUMPDEST ISZERO PUSH2 0xE44 JUMPI PUSH2 0xD71 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1931 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0xD8A SWAP1 DUP4 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0xDA5 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x1A0A JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0xDFB JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xDCB JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xDD2 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xDE1 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xE04 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xE18 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0xE1F JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xE2E SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0xE40 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xE54 SWAP2 PUSH2 0x1A1B JUMP JUMPDEST ISZERO PUSH2 0xE87 JUMPI PUSH2 0xE71 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1A9D JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0xE83 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xEA9 JUMPI PUSH1 0x0 PUSH2 0xEC4 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0xEC2 JUMPI PUSH2 0xEC2 PUSH2 0x2518 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xEDB JUMPI PUSH1 0x0 PUSH2 0xEF6 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0xEF4 JUMPI PUSH2 0xEF4 PUSH2 0x2518 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0xF38 JUMPI PUSH2 0xF33 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0xF2D DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x1C1D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x1C60 JUMP JUMPDEST PUSH2 0xF5A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFAA DUP6 DUP5 PUSH2 0x1C1D JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xFBE JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x8C5 JUMP JUMPDEST PUSH2 0xFC8 DUP5 DUP3 PUSH2 0x2547 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x1017 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x8C5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1055 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x1C97 JUMP JUMPDEST SWAP1 PUSH2 0x1061 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3631000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1140 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x1 DUP6 ADD DUP1 SLOAD PUSH12 0x33B2E3C9FD0803CE8000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE PUSH1 0x2 DUP8 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP7 ADD DUP1 SLOAD DUP3 AND SWAP5 DUP7 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x6 DUP6 ADD DUP1 SLOAD DUP5 AND SWAP3 DUP6 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x7 SWAP1 SWAP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x126E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1278 DUP5 PUSH2 0x1CDC JUMP JUMPDEST PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x1360 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x3 DUP3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x13B6 JUMPI POP PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1424 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP DUP2 PUSH1 0x5 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1494 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14B8 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3535000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x1525 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP DUP2 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1595 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15B9 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3536000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x1626 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x4 DUP1 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x18160DDD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x18160DDD SWAP3 DUP3 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16BA SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x16DB JUMPI POP PUSH1 0x8 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3534000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x180D JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x180A SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x189A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x191F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x193D DUP6 PUSH2 0xFD1 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x19E3 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1055 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0x19ED SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x19FE JUMPI PUSH2 0x19FE PUSH2 0x2518 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x8C5 JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x1A8D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B37 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1B55 JUMPI PUSH2 0x1B52 PUSH2 0x1B4B DUP7 PUSH2 0x1DA6 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1061 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BEB SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0x1BF5 SWAP1 DUP3 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 POP PUSH2 0x1C01 DUP2 DUP6 PUSH2 0x24DB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x1C12 JUMPI PUSH2 0x1C12 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1C52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1C80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CAB PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x2547 JUMP JUMPDEST PUSH2 0x1CB5 SWAP1 DUP6 PUSH2 0x24DB JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1CD4 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x24C3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1D5B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1D95 JUMPI PUSH2 0x1D56 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1CE3 JUMP JUMPDEST PUSH2 0x105B JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1D8C JUMPI PUSH2 0x1D8C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1CE3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x105B JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY POP POP PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x1DEC JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x8C5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1055 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH1 0x0 PUSH2 0x8C5 DUP4 DUP4 TIMESTAMP PUSH1 0x0 DUP1 PUSH2 0x1E41 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2547 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1E5D JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x8C5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1E93 JUMPI PUSH1 0x0 PUSH2 0x1E98 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1EAC DUP11 DUP1 PUSH2 0x1061 JUMP JUMPDEST DUP2 PUSH2 0x1EB9 JUMPI PUSH2 0x1EB9 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1ECB DUP4 DUP12 PUSH2 0x1061 JUMP JUMPDEST DUP2 PUSH2 0x1ED8 JUMPI PUSH2 0x1ED8 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1EE8 DUP7 DUP9 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1EF2 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1F06 DUP9 DUP11 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F10 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F1A SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1F31 DUP11 DUP16 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F3B SWAP2 SWAP1 PUSH2 0x255E JUMP JUMPDEST PUSH2 0x1F51 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1F5B SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1F65 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x1FC0 PUSH1 0x20 DUP5 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x20C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 ADD PUSH1 0xA0 DUP2 SLT ISZERO PUSH2 0x2107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x210F PUSH2 0x1FC9 JUMP JUMPDEST PUSH1 0x20 DUP3 SLT ISZERO PUSH2 0x211D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2125 PUSH2 0x2019 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD DUP3 MSTORE DUP2 DUP2 MSTORE PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2147 PUSH1 0xA0 DUP9 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2158 PUSH1 0xC0 DUP9 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xE0 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xFF DUP3 AND DUP3 EQ PUSH2 0x2173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x219B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x21CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x21F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x120 DUP2 SLT ISZERO PUSH2 0x222E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP3 ADD SLT ISZERO PUSH2 0x2269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2272 PUSH2 0x2063 JUMP JUMPDEST PUSH2 0x227E PUSH1 0x40 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x228C PUSH1 0x60 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x229D PUSH1 0x80 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x22AE PUSH1 0xA0 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x22BF PUSH1 0xC0 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x22D0 PUSH1 0xE0 DUP7 ADD PUSH2 0x2205 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x22E2 PUSH2 0x100 DUP7 ADD PUSH2 0x2205 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2310 DUP5 PUSH2 0x1F74 JUMP JUMPDEST SWAP3 POP PUSH2 0x231E PUSH1 0x20 DUP6 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x235A PUSH1 0x40 DUP6 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2390 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x2374 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x23A2 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8C5 DUP3 PUSH2 0x1F74 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2481 JUMPI PUSH2 0x2481 PUSH2 0x2420 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x24A0 JUMPI PUSH2 0x24A0 PUSH2 0x2420 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x24D6 JUMPI PUSH2 0x24D6 PUSH2 0x2420 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2513 JUMPI PUSH2 0x2513 PUSH2 0x2420 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2559 JUMPI PUSH2 0x2559 PUSH2 0x2420 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2594 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC 0xB2 SLOAD 0x25 SHR 0xDF SHL 0xE5 SWAP14 DUP12 0x5E 0xD3 0xD5 DUP11 0xD7 PUSH22 0xA1BEB388E4D59D169F5B6B07622337364736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"863:6419:101:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4536:351;;;;;;;;;;-1:-1:-1;4536:351:101;;;;;:::i;:::-;;:::i;:::-;;6396:884;;;;;;:::i;:::-;;:::i;:::-;;;;3339:25:124;;;3395:2;3380:18;;3373:34;;;;3423:18;;;3416:34;;;;3481:2;3466:18;;3459:34;3524:3;3509:19;;3502:35;3568:3;3553:19;;3546:35;3326:3;3311:19;6396:884:101;;;;;;;;3312:926;;;;;;;;;;-1:-1:-1;3312:926:101;;;;;:::i;:::-;;:::i;1610:1096::-;;;;;;;;;;-1:-1:-1;1610:1096:101;;;;;:::i;:::-;;:::i;:::-;;;5752:14:124;;5745:22;5727:41;;5715:2;5700:18;1610:1096:101;5579:195:124;2924:130:101;;;;;;;;;;-1:-1:-1;2924:130:101;;;;;:::i;:::-;;:::i;5121:410::-;;;;;;;;;;-1:-1:-1;5121:410:101;;;;;:::i;:::-;;:::i;4536:351::-;4694:19;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;4478:3:88;17633:67;;;4751:28:101;;;;;;;;;;;;;;;;;;4694:55;4686:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;4786:19:101;;;4831:1;4786:19;;;;;;;;;;;:42;;:46;;;;;;4843:39;7331:25:124;;;4843:39:101;;7304:18:124;4843:39:101;;;;;;;4536:351;;:::o;6396:884::-;6730:27;6765:21;6794:28;6830:35;6873:11;6892:20;7052:90;7090:12;7104;7118:15;7135:6;7052:37;:90::i;:::-;-1:-1:-1;6927:215:101;;-1:-1:-1;6927:215:101;;-1:-1:-1;6927:215:101;;-1:-1:-1;6927:215:101;-1:-1:-1;6927:215:101;-1:-1:-1;7172:103:101;6927:215;;;7172:38;:103::i;:::-;7149:126;;6396:884;;;;;;;;;;;:::o;3312:926::-;3466:9;3461:773;3481:17;;;3461:773;;;3513:20;3536:6;;3543:1;3536:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3594:26;;;3554:37;3594:26;;;;;;;;;;;;3732:31;;;;;;;;;;;;;;3594:26;;-1:-1:-1;3594:26:101;9057:12:88;9045:24;3727:67:101;;3777:8;;;;3727:67;3830:25;;;;;;3868:22;;3864:364;;3902:25;;;:29;;;;;;3930:1;3968:29;3902:7;3968:27;:29::i;:::-;3941:56;-1:-1:-1;4007:20:101;4030:42;:17;3941:56;4030:24;:42::i;:::-;4090:21;;;;;4082:77;;;;;4007:65;;-1:-1:-1;4090:21:101;;;4082:45;;:77;;4007:65;;4142:16;;4082:77;7921:25:124;;;7977:2;7962:18;;7955:34;7909:2;7894:18;;7747:248;4082:77:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4192:12;4175:44;;;4206:12;4175:44;;;;7331:25:124;;7319:2;7304:18;;7177:185;4175:44:101;;;;;;;;3892:336;;3864:364;3505:729;;;3461:773;3500:3;;;;:::i;:::-;;;;3461:773;;;;3312:926;;;:::o;1610:1096::-;1868:12;;1883:19;;;;;;;;;;;;;;;;;1829:4;;1025:20:3;1841:62:101;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1948:20:101;;;;;1976:24;;;;;2008:26;;;;2042:34;;;;1922:12;;1909:26;;;;;;;;;;;;;;:173;;:26;;1948:20;1909:31;:173::i;:::-;2129:12;;2116:26;;2089:24;2116:26;;;;;;;;;;:29;;;;;;;;:34;;;:75;;-1:-1:-1;2179:12:101;;;2160:15;;;;;;;;;;;:31;:15;;;:31;;;2116:75;2089:102;;2206:19;2205:20;2227:28;;;;;;;;;;;;;;;;;2197:59;;;;;;;;;;;;;;:::i;:::-;;2268:8;2263:213;2286:6;:20;;;2282:24;;:1;:24;;;2263:213;;;2325:15;;;2352:1;2325:15;;;;;;;;;;;:29;:15;2321:149;;2379:12;;2366:26;;;;;;;;;;;;;;;;:29;;:33;;;;;;;;;;;;;;;;2427:12;;2409:15;;;;;;;;;:30;;;;;;;;;;;;;;2366:26;-1:-1:-1;2449:12:101;;-1:-1:-1;2449:12:101;2321:149;2308:3;;;;:::i;:::-;;;;2263:213;;;;2513:6;:24;;;2490:47;;:6;:20;;;:47;;;2539:31;;;;;;;;;;;;;;;;;2482:89;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;2609:20:101;;;;;2590:12;;2577:26;;;;;;;;;;;;;;;;:29;;:52;;;;;;;;;;;;;2672:12;;2648:20;;2635:34;;;;;;;;;;;;:49;;;;;;;;;;;;;;-1:-1:-1;1610:1096:101;;;;;;:::o;2924:130::-;3011:38;:26;;;3038:2;3042:6;3011:26;:38::i;:::-;2924:130;;;:::o;5121:410::-;5349:19;;;5309:37;5349:19;;;;;;;;;;5374:65;5410:12;5349:19;5362:5;5374:35;:65::i;:::-;-1:-1:-1;5458:19:101;;5492:1;5458:19;;;;;;;;;;;:22;;;;;;;;;;5445:36;;;;;;;;:49;;;;;;;;;5507:19;;;;;;5500:26;;;-1:-1:-1;5500:26:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5121:410::o;2633:3723:98:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:89;:14;;6091:122;3008:27:98;3004:93;;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3065:17:98;;-1:-1:-1;3053:1:98;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:98;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:88;4339:3;23023:71;;;;;4004:23:98;;;3898:180;3439:2:88;22869:67;;;;3971:13:98;;;3898:180;;;22674:9:88;3298:2;22691:85;;;;;3926:25:98;;;3898:180;22662:21:88;;;3908:8:98;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:98;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;8937:55:124;;;4308:75:98;;;8919:74:124;4308:47:98;;;;;8892:18:124;;4308:75:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:98;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:98;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:98;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:98;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:98;-1:-1:-1;5573:6:98;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:98;;-1:-1:-1;6240:11:98;-1:-1:-1;6259:28:98;;-1:-1:-1;5921:220:98;-1:-1:-1;6320:25:98;-1:-1:-1;2633:3723:98;;;;;;;;;;;;:::o;6874:495::-;7033:7;;7089:45;:29;7130:3;7089:40;:45::i;:::-;7048:86;;7178:23;7145:30;:56;7141:85;;;7218:1;7211:8;;;;;7141:85;7265:56;7298:23;7265:30;:56;:::i;:::-;7232:89;6874:495;-1:-1:-1;;;;;6874:495:98:o;1895:528:102:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;:::-;:81;;:125::i;2093:326::-;2003:420;1895:528;;;:::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;5469:657:102:-;5695:21;;;;5732:34;;;;;;;;;;;;;;;;;;5695:35;:21;:35;5687:80;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5774:22:102;;;:48;;704:4:107;5774:48:102;;;;;;;;;5828:27;;;:53;;;;;;;;;;5887:21;;;:37;;;;;;;;;;;;;;5930:30;;;:55;;;;;;;;;;;;;;5991:32;;;:59;;;;;;;;;;;;;;6056:35;;;;:65;;;;;;;;;;;;;;;5469:657::o;441::1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;10080:2:124;1031:62:1;;;10062:21:124;10119:2;10099:18;;;10092:30;10158:23;10138:18;;;10131:51;10199:18;;1031:62:1;9878:345:124;24368:707:104;24566:29;;;;;;;;;;;;;;;;;24545:19;;;24537:59;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24610:10:104;;;;;;;;;:15;;;:43;;-1:-1:-1;24629:15:104;;;;;;;;;;;;:24;;;;:15;;:24;24610:43;24655:23;;;;;;;;;;;;;;;;;24602:77;;;;;;;;;;;;;;:::i;:::-;;24700:7;:30;;;;;;;;;;;;24693:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24752:27;;;;;;;;;;;;;;;;;;24693:57;24685:95;;;;;;;;;;;;;:::i;:::-;;24808:7;:32;;;;;;;;;;;;24801:52;;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24868:36;;;;;;;;;;;;;;;;;;24801:59;24786:124;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24938:21:104;;;;;24931:43;;;;;;;;24938:21;;;;;24931:41;;:43;;;;;;;;;;;;24938:21;24931:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;:82;;;;-1:-1:-1;24983:25:104;;;;;;:30;24931:82;25021:43;;;;;;;;;;;;;;;;;24916:154;;;;;;;;;;;;;;:::i;3336:442:96:-;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;8937:55:124;;;3653:38:96;;;8919:74:124;3653:20:96;;;;;8892:18:124;;3653:38:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:96;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:96;-1:-1:-1;;;3336:442:96:o;2435:333:89:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:88;2614:54:89;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:89;;2745:1;2729:17;;;;2715:32;2751:1;2714:38;:43;;;2435:333::o;3638:328::-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:88;3806:54:89;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:89;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;9524:446:98:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;8937:55:124;;;9800:64:98;;;8919:74:124;;;;9712:56:98;;-1:-1:-1;9774:15:98;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;8892:18:124;;9800:64:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:89::-;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;;9524:446;-1:-1:-1;;;;;;;9524:446:98:o;4133:208:96:-;4250:4;4270:22;;;;;:65;;-1:-1:-1;;4296:39:96;;4133:208::o;3046:314:89:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:88;3206:54:89;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:89;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;8150:645:98:-;8409:32;;;;8389:87;;;;;8409:32;8937:55:124;;;8389:87:98;;;8919:74:124;8320:7:98;;;;8409:32;;;8389:69;;8892:18:124;;8389:87:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:98;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;8937:55:124;;;8624:54:98;;;8919:74:124;8631:30:98;;;;8624:48;;8892:18:124;;8624:54:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:98;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:98:o;1005:496:106:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;1660:322:107:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:107;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:105:o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;-1:-1:-1;;4611:1:1;4605:8;4598:16;4591:24;;2198:2524;-1:-1:-1;2198:2524:1:o;2809:545:102:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3256:7:105;3278:71;3306:4;3312:19;3333:15;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;14:196:124:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:306::-;335:6;343;396:2;384:9;375:7;371:23;367:32;364:52;;;412:1;409;402:12;364:52;448:9;435:23;425:33;;477:38;511:2;500:9;496:18;477:38;:::i;:::-;467:48;;215:306;;;;;:::o;526:407::-;598:2;592:9;640:4;628:17;;675:18;660:34;;696:22;;;657:62;654:242;;;752:77;749:1;742:88;853:4;850:1;843:15;881:4;878:1;871:15;654:242;912:2;905:22;526:407;:::o;938:400::-;1005:2;999:9;1047:2;1035:15;;1080:18;1065:34;;1101:22;;;1062:62;1059:242;;;1157:77;1154:1;1147:88;1258:4;1255:1;1248:15;1286:4;1283:1;1276:15;1343:407;1415:2;1409:9;1457:4;1445:17;;1492:18;1477:34;;1513:22;;;1474:62;1471:242;;;1569:77;1566:1;1559:88;1670:4;1667:1;1660:15;1698:4;1695:1;1688:15;1755:1284;2019:6;2027;2035;2043;2087:9;2078:7;2074:23;2117:3;2113:2;2109:12;2106:32;;;2134:1;2131;2124:12;2106:32;2157:23;;;-1:-1:-1;2227:2:124;2212:18;;2199:32;;-1:-1:-1;2278:2:124;2263:18;;2250:32;;-1:-1:-1;2309:66:124;2301:75;2396:4;2388:13;;2385:33;;;2414:1;2411;2404:12;2385:33;2440:22;;:::i;:::-;2482:2;2478;2474:11;2471:31;;;2498:1;2495;2488:12;2471:31;2526:17;;:::i;:::-;2511:32;;2596:2;2585:9;2581:18;2568:32;2559:7;2552:49;2624:7;2617:5;2610:22;2692:3;2681:9;2677:19;2664:33;2659:2;2652:5;2648:14;2641:57;2730:40;2764:4;2753:9;2749:20;2730:40;:::i;:::-;2725:2;2718:5;2714:14;2707:64;2803:39;2837:3;2826:9;2822:19;2803:39;:::i;:::-;2798:2;2791:5;2787:14;2780:63;2895:3;2884:9;2880:19;2867:33;2852:48;;2944:4;2935:7;2931:18;2922:7;2919:31;2909:59;;2964:1;2961;2954:12;2909:59;2995:3;2984:15;;2977:32;;;;1755:1284;;;;-1:-1:-1;1755:1284:124;;-1:-1:-1;;1755:1284:124:o;3592:735::-;3739:6;3747;3755;3808:2;3796:9;3787:7;3783:23;3779:32;3776:52;;;3824:1;3821;3814:12;3776:52;3860:9;3847:23;3837:33;;3921:2;3910:9;3906:18;3893:32;3944:18;3985:2;3977:6;3974:14;3971:34;;;4001:1;3998;3991:12;3971:34;4039:6;4028:9;4024:22;4014:32;;4084:7;4077:4;4073:2;4069:13;4065:27;4055:55;;4106:1;4103;4096:12;4055:55;4146:2;4133:16;4172:2;4164:6;4161:14;4158:34;;;4188:1;4185;4178:12;4158:34;4241:7;4236:2;4226:6;4223:1;4219:14;4215:2;4211:23;4207:32;4204:45;4201:65;;;4262:1;4259;4252:12;4201:65;4293:2;4289;4285:11;4275:21;;4315:6;4305:16;;;;;3592:735;;;;;:::o;4332:159::-;4399:20;;4459:6;4448:18;;4438:29;;4428:57;;4481:1;4478;4471:12;4496:1078;4686:6;4694;4702;4746:9;4737:7;4733:23;4776:3;4772:2;4768:12;4765:32;;;4793:1;4790;4783:12;4765:32;4829:9;4816:23;4806:33;;4886:2;4875:9;4871:18;4858:32;4848:42;;4983:4;4914:66;4910:2;4906:75;4902:86;4899:106;;;5001:1;4998;4991:12;4899:106;;5027:22;;:::i;:::-;5072:38;5106:2;5095:9;5091:18;5072:38;:::i;:::-;5065:5;5058:53;5143:38;5177:2;5166:9;5162:18;5143:38;:::i;:::-;5138:2;5131:5;5127:14;5120:62;5214:39;5248:3;5237:9;5233:19;5214:39;:::i;:::-;5209:2;5202:5;5198:14;5191:63;5286:39;5320:3;5309:9;5305:19;5286:39;:::i;:::-;5281:2;5274:5;5270:14;5263:63;5359:39;5393:3;5382:9;5378:19;5359:39;:::i;:::-;5353:3;5346:5;5342:15;5335:64;5432:39;5465:4;5454:9;5450:20;5432:39;:::i;:::-;5426:3;5419:5;5415:15;5408:64;5505:38;5538:3;5527:9;5523:19;5505:38;:::i;:::-;5499:3;5492:5;5488:15;5481:63;5563:5;5553:15;;;4496:1078;;;;;:::o;5779:328::-;5856:6;5864;5872;5925:2;5913:9;5904:7;5900:23;5896:32;5893:52;;;5941:1;5938;5931:12;5893:52;5964:29;5983:9;5964:29;:::i;:::-;5954:39;;6012:38;6046:2;6035:9;6031:18;6012:38;:::i;:::-;6002:48;;6097:2;6086:9;6082:18;6069:32;6059:42;;5779:328;;;;;:::o;6112:399::-;6266:6;6274;6282;6335:2;6323:9;6314:7;6310:23;6306:32;6303:52;;;6351:1;6348;6341:12;6303:52;6387:9;6374:23;6364:33;;6444:2;6433:9;6429:18;6416:32;6406:42;;6467:38;6501:2;6490:9;6486:18;6467:38;:::i;:::-;6457:48;;6112:399;;;;;:::o;6516:656::-;6628:4;6657:2;6686;6675:9;6668:21;6718:6;6712:13;6761:6;6756:2;6745:9;6741:18;6734:34;6786:1;6796:140;6810:6;6807:1;6804:13;6796:140;;;6905:14;;;6901:23;;6895:30;6871:17;;;6890:2;6867:26;6860:66;6825:10;;6796:140;;;6954:6;6951:1;6948:13;6945:91;;;7024:1;7019:2;7010:6;6999:9;6995:22;6991:31;6984:42;6945:91;-1:-1:-1;7088:2:124;7076:15;7093:66;7072:88;7057:104;;;;7163:2;7053:113;;6516:656;-1:-1:-1;;;6516:656:124:o;7367:184::-;7419:77;7416:1;7409:88;7516:4;7513:1;7506:15;7540:4;7537:1;7530:15;7556:186;7615:6;7668:2;7656:9;7647:7;7643:23;7639:32;7636:52;;;7684:1;7681;7674:12;7636:52;7707:29;7726:9;7707:29;:::i;8182:184::-;8234:77;8231:1;8224:88;8331:4;8328:1;8321:15;8355:4;8352:1;8345:15;8371:195;8410:3;8441:66;8434:5;8431:77;8428:103;;;8511:18;;:::i;:::-;-1:-1:-1;8558:1:124;8547:13;;8371:195::o;8571:197::-;8609:3;8637:6;8678:2;8671:5;8667:14;8705:2;8696:7;8693:15;8690:41;;;8711:18;;:::i;:::-;8760:1;8747:15;;8571:197;-1:-1:-1;;;8571:197:124:o;9004:184::-;9074:6;9127:2;9115:9;9106:7;9102:23;9098:32;9095:52;;;9143:1;9140;9133:12;9095:52;-1:-1:-1;9166:16:124;;9004:184;-1:-1:-1;9004:184:124:o;9193:128::-;9233:3;9264:1;9260:6;9257:1;9254:13;9251:39;;;9270:18;;:::i;:::-;-1:-1:-1;9306:9:124;;9193:128::o;9326:228::-;9366:7;9492:1;9424:66;9420:74;9417:1;9414:81;9409:1;9402:9;9395:17;9391:105;9388:131;;;9499:18;;:::i;:::-;-1:-1:-1;9539:9:124;;9326:228::o;9559:184::-;9611:77;9608:1;9601:88;9708:4;9705:1;9698:15;9732:4;9729:1;9722:15;9748:125;9788:4;9816:1;9813;9810:8;9807:34;;;9821:18;;:::i;:::-;-1:-1:-1;9858:9:124;;9748:125::o;10228:274::-;10268:1;10294;10284:189;;10329:77;10326:1;10319:88;10430:4;10427:1;10420:15;10458:4;10455:1;10448:15;10284:189;-1:-1:-1;10487:9:124;;10228:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"1935800","executionCost":"2079","totalCost":"1937879"},"external":{"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)":"infinite","executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)":"infinite","executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)":"infinite","executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])":"infinite","executeRescueTokens(address,address,uint256)":"infinite","executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)":"infinite"}},"methodIdentifiers":{"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)":"9cf57023","executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)":"26ec273f","executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)":"69fc1bdf","executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])":"48c2ca8c","executeRescueTokens(address,address,uint256)":"87b322b2","executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)":"1e3b4145"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\"}},\"executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)\":{\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"Additional params needed for the calculation\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)\":{\"params\":{\"params\":\"Additional parameters needed for initiation\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\"},\"returns\":{\"_0\":\"true if appended, false if inserted at existing empty spot\"}},\"executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\",\"reservesData\":\"The state of all the reserves\"}},\"executeRescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\",\"reservesData\":\"The state of all the reserves\"}}},\"title\":\"PoolLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)\":{\"notice\":\"Drop a reserve\"},\"executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)\":{\"notice\":\"Initialize an asset reserve and add the reserve to the list of reserves\"},\"executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"executeRescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"}},\"notice\":\"Implements the logic for Pool specific functions\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/PoolLogic.sol\":\"PoolLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)":{"notice":"Drop a reserve"},"executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)":{"notice":"Returns the user account data across all the reserves"},"executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)":{"notice":"Initialize an asset reserve and add the reserve to the list of reserves"},"executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"executeRescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"}},"notice":"Implements the logic for Pool specific functions","version":1}}},"contracts/protocol/libraries/logic/ReserveLogic.sol":{"ReserveLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"ReserveLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b67b48e38d0b6703d367ce4558f5085a19bced7f68aeb09d1e6a84ae221ac48e64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 PUSH28 0x48E38D0B6703D367CE4558F5085A19BCED7F68AEB09D1E6A84AE221A 0xC4 DUP15 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1020:13181:102:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1020:13181:102;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b67b48e38d0b6703d367ce4558f5085a19bced7f68aeb09d1e6a84ae221ac48e64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 PUSH28 0x48E38D0B6703D367CE4558F5085A19BCED7F68AEB09D1E6A84AE221A 0xC4 DUP15 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1020:13181:102:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_accrueToTreasury(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)":"infinite","_updateIndexes(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)":"infinite","cache(struct DataTypes.ReserveData storage pointer)":"infinite","cumulateToLiquidityIndex(struct DataTypes.ReserveData storage pointer,uint256,uint256)":"infinite","getNormalizedDebt(struct DataTypes.ReserveData storage pointer)":"infinite","getNormalizedIncome(struct DataTypes.ReserveData storage pointer)":"infinite","init(struct DataTypes.ReserveData storage pointer,address,address,address,address)":"infinite","updateInterestRates(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)":"infinite","updateState(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ReserveLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements the logic to update the reserves state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/ReserveLogic.sol\":\"ReserveLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements the logic to update the reserves state","version":1}}},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)":{"details":"Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as collateral.In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the finalizeTransfer function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","usersConfig":"The users configuration mapping that track the supplied/borrowed assets"}},"executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)":{"details":"Emits the `Supply()` event.In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as collateral.","params":{"params":"The additional parameters needed to execute the supply function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}},"executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)":{"details":"Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.","params":{"asset":"The address of the asset being configured as collateral","eModeCategories":"The configuration of all the efficiency mode categories","priceOracle":"The address of the price oracle","reservesCount":"The number of initialized reserves","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","useAsCollateral":"True if the user wants to set the asset as collateral, false otherwise","userConfig":"The users configuration mapping that track the supplied/borrowed assets","userEModeCategory":"The eMode category chosen by the user"}},"executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)":{"details":"Emits the `Withdraw()` event.If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the withdraw function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"},"returns":{"_0":"The actual amount withdrawn"}}},"title":"SupplyLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"613da061003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063186dea441461005b5780631913f1611461008d5780638a5dadd1146100af578063bf697a26146100cf575b600080fd5b81801561006757600080fd5b5061007b6100763660046136a7565b6100ef565b60405190815260200160405180910390f35b81801561009957600080fd5b506100ad6100a836600461377e565b6104a2565b005b8180156100bb57600080fd5b506100ad6100ca366004613832565b610751565b8180156100db57600080fd5b506100ad6100ea36600461393b565b610a2d565b805173ffffffffffffffffffffffffffffffffffffffff1660009081526020869052604081208161011f82610cf9565b905061012b8282610f12565b6101008101516101e08201516040517f1da24f3e0000000000000000000000000000000000000000000000000000000081523360048201526000926101d692909173ffffffffffffffffffffffffffffffffffffffff90911690631da24f3e906024015b602060405180830381865afa1580156101ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d091906139c6565b90610f9d565b60208601519091507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114156102095750805b610214838284610ff4565b85516102269085908590600085611211565b600384015460408051602081019091528854815260009161026491907501000000000000000000000000000000000000000000900461ffff16611552565b905080801561027257508282145b156102eb5760038501546102a69089907501000000000000000000000000000000000000000000900461ffff1660006115dd565b8651604051339173ffffffffffffffffffffffffffffffffffffffff16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b6101e084015160408089015161010087015191517fd7020d0a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91821660248201526044810186905260648101929092529091169063d7020d0a90608401600060405180830381600087803b15801561037b57600080fd5b505af115801561038f573d6000803e3d6000fd5b505050508080156103d1575060408051602081019091528854908190527f55555555555555555555555555555555555555555555555555555555555555551615155b1561040c5761040c8b8b8b8b6040518060200160405290816000820154815250508b60000151338d606001518e608001518f60a00151611674565b866040015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16886000015173ffffffffffffffffffffffffffffffffffffffff167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78560405161048a91815260200190565b60405180910390a45093505050505b95945050505050565b805173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120906104d282610cf9565b90506104de8282610f12565b6104ed81838560200151611830565b825160208401516105049184918491906000611211565b6101e0810151602084015184516105369273ffffffffffffffffffffffffffffffffffffffff90911691339190611bb8565b6101e0810151604080850151602086015161010085015192517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff928316602482015260448101919091526064810192909252600092169063b3f1c93d906084016020604051808303816000875af11580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f691906139df565b905080156106ab57610615878787856101c00151866101e00151611c9a565b156106ab5760038301546106499086907501000000000000000000000000000000000000000000900461ffff1660016115dd565b836040015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b836060015161ffff16846040015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f2b627736bca15cd5381dcf80b0bf11fd197d01a037c52b927a881a10fb73ba6133886020015160405161074092919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450505050505050565b805173ffffffffffffffffffffffffffffffffffffffff16600090815260208690526040902061078081611eda565b600381015460408301516020840151750100000000000000000000000000000000000000000090920461ffff169173ffffffffffffffffffffffffffffffffffffffff9182169116148015906107d95750606083015115155b15610a245760208084015173ffffffffffffffffffffffffffffffffffffffff1660009081528582526040908190208151928301909152805482529061081f9083611552565b156109575760408051602081019091528154908190527f555555555555555555555555555555555555555555555555555555555555555516156108d8576108d8888888886000896020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806020016040529081600082015481525050886000015189602001518a60c001518b60e001518c6101000151611674565b836060015184608001511415610957576108f4818360006115dd565b836020015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b60a0840151610a225760408085015173ffffffffffffffffffffffffffffffffffffffff908116600090815260208881529083902083519182019093528554815260048601546109ad928c928c92869216611c9a565b15610a20576109be818460016115dd565b846040015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b505b505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208a90526040812090610a5c82610cf9565b6101e08101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015291925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af791906139c6565b9050610b038282611f62565b600383015460408051602081019091528a548152610b3d917501000000000000000000000000000000000000000000900461ffff16611552565b15158715151415610b5057505050610a20565b8615610c5557610b678c8c8b856101c00151612107565b6040518060400160405280600281526020017f363200000000000000000000000000000000000000000000000000000000000081525090610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b60405180910390fd5b506003830154610c0e908a907501000000000000000000000000000000000000000000900461ffff1660016115dd565b604051339073ffffffffffffffffffffffffffffffffffffffff8a16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610ceb565b6003830154610c84908a907501000000000000000000000000000000000000000000900461ffff1660006115dd565b604080516020810190915289548152610ca7908d908d908d908c338c8c8c611674565b604051339073ffffffffffffffffffffffffffffffffffffffff8a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050505050505050505050565b610d016134cf565b610d096134cf565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a91906139c6565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190613a6f565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610f41575050565b610f4b82826121a4565b610f5582826122c6565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517610fd257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60408051808201909152600281527f3236000000000000000000000000000000000000000000000000000000000000602082015282611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f33320000000000000000000000000000000000000000000000000000000000006020820152818311156110d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600080611125856101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061119b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b505050505050565b61123c6040518060800160405280600081526020016000815260200160008152602001600081525090565b610140850151602086015161125091610f9d565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916113b19190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa1580156113ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f29190613aba565b604084015260208301528082526114089061244b565b6001870180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055602081015161144b9061244b565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161149c9061244b565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106115c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50508151600182811b81019190911c1615155b92915050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526080831061164c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600182811b81011b81156116665783548117845561166e565b835481191684555b50505050565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260208b8152604080832081516102008101835281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821695830195909552700100000000000000000000000000000000908190048516938201939093526002820154808516606083015283900484166080820152600382015480851660a083015283810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015486166101008201526005820154861661012082015260068201548616610140820152600782015490951661016086015260088101548084166101808701529190910482166101a085015260090154166101c08301526117ae8b8b8b8b8a888b8b6124f1565b9150508015806117c2575081515161ffff16155b6040518060400160405280600281526020017f353700000000000000000000000000000000000000000000000000000000000081525090610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b60408051808201909152600281527f323600000000000000000000000000000000000000000000000000000000000060208201528161189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060008060006118f3866101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9450505092509250826040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061196a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f3239000000000000000000000000000000000000000000000000000000000000602082015281156119d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528215611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b506101c08601515160741c640fffffffff16801580611b4a57506101c08701515160301c60ff16611a7890600a613c37565b611a829082613c43565b85611b3d8961010001518960080160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168b6101e0015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3391906139c6565b6101d09190613c80565b611b479190613c80565b11155b6040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525090610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1611c23573d6000803e3d6000fd5b50611c2d856125ec565b611c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401610bd5565b5050505050565b815160009060d41c64ffffffffff1615611ec45760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1f9190613c98565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190613c98565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfe9190613c98565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa158015611e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb491906139df565b611ec2576000915050610499565b505b611ed086868686612107565b9695505050505050565b60408051602080820183528354918290528251808401909352600283527f3239000000000000000000000000000000000000000000000000000000000000908301526710000000000000001615611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5050565b60408051808201909152600281527f3433000000000000000000000000000000000000000000000000000000000000602082015281611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600080612023846101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090612099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b6000612115825161ffff1690565b6121215750600061219c565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166121605750600161219c565b60408051602081019091528354815260009061217d9087876126b8565b50509050801580156121985750825160d41c64ffffffffff16155b9150505b949350505050565b610160810151156122345760006121c5826101600151836102400151612770565b90506121de8260e0015182610f9d90919063ffffffff16565b61010083018190526121ef9061244b565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611f5e5760006122518261018001518361024001516127ad565b905061226b82610120015182610f9d90919063ffffffff16565b610140830181905261227c9061244b565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b6122ff6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161230e57505050565b610120820151825161231f91610f9d565b6020820152610140820151825161233591610f9d565b6040820152606082015161026083015161024084015161235d92919064ffffffffff166127c1565b60608201819052604083015161237291610f9d565b80825260208201516080840151604084015161238e9190613c80565b6123989190613cb5565b6123a29190613cb5565b608082018190526101a08301516123b99190612908565b60a0820181905215612446576123e96123e48361010001518360a0015161294b90919063ffffffff16565b61244b565b60088401805460009061240f9084906fffffffffffffffffffffffffffffffff16613ccc565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b60006fffffffffffffffffffffffffffffffff8211156124ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610bd5565b5090565b6000806000806125588c8c8c6040518060a001604052808e81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018c60ff1681525061298a565b9550955050505050670de0b6b3a76400008210156040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906125da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50909b909a5098505050505050505050565b600061262c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d801561266b57602081146126a5576126667f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125f3565b6126b2565b823b61269c5761269c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125f3565b600191506126b2565b3d6000803e600051151591505b50919050565b60008060006126c686612ef4565b1561275d5760006126f7877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa612f38565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015612759576001955090935091506127679050565b5050505b5060009150819050805b93509350939050565b60008061278464ffffffffff841642613cb5565b61278e9085613c43565b6301e133809004905061219c816b033b2e3c9fd0803ce8000000613c80565b60006127ba8383426127c1565b9392505050565b6000806127d564ffffffffff851684613cb5565b9050806127f1576b033b2e3c9fd0803ce80000009150506127ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161282757600061282c565b600285035b925066038882915c40006128408a80610f9d565b8161284d5761284d613d00565b0491506301e1338061285f838b610f9d565b8161286c5761286c613d00565b04905060008261287c8688613c43565b6128869190613c43565b6002900490506000828561289a888a613c43565b6128a49190613c43565b6128ae9190613c43565b60069004905080826301e133806128c58a8f613c43565b6128cf9190613d2f565b6128e5906b033b2e3c9fd0803ce8000000613c80565b6128ef9190613c80565b6128f99190613c80565b9b9a5050505050505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761293d57600080fd5b506127109102611388010490565b600081156b033b2e3c9fd0803ce80000006002840419048411171561296f57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6000806000806000806129a08760000151511590565b156129dc5750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081612ee7565b612a8b60405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615612ad057608088015160ff16600090815260208a9052604090206060890151612abd9190612f7c565b6101808401526101c08301526101a08201525b87602001518160c001511015612def5760c08101518851612af09161305b565b612b045760c0810180516001019052612ad0565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052612b4a5760c0810180516001019052612ad0565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590612be05750816101e00151896080015160ff16145b612c845760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7f91906139c6565b612c8b565b8161018001515b825260a082015115801590612cab575060c08201518951612cab91611552565b15612d9b57612cc8896040015182846000015185602001516130e0565b6040830181905261010083018051612ce1908390613c80565b90525060808901516101e0830151612cfc9160ff169061317d565b1515610240830152608082015115612d5257816102400151612d22578160800151612d29565b816101a001515b8260400151612d389190613c43565b8261014001818151612d4a9190613c80565b905250612d5b565b60016102208301525b816102400151612d6f578160a00151612d76565b816101c001515b8260400151612d859190613c43565b8261016001818151612d979190613c80565b9052505b60c08201518951612dab9161318e565b15612dde57612dc889604001518284600001518560200151613210565b8261012001818151612dda9190613c80565b9052505b5060c0810180516001019052612ad0565b610100810151612e00576000612e1b565b80610100015181610140015181612e1957612e19613d00565b045b610140820152610100810151612e32576000612e4d565b80610100015181610160015181612e4b57612e4b613d00565b045b61016082015261012081015115612e8f57612e8a816101200151612e8483610160015184610100015161290890919063ffffffff16565b90613390565b612eb1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1680158015906127ba5750612f30600182613cb5565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c90811561049957600101612f67565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015613040576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015613019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303d91906139c6565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106130cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5050905160019190911b1c600316151590565b6000806130ec856133c7565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792613156928692911690631da24f3e9060240161018f565b6131609190613c43565b905083818161317157613171613d00565b04979650505050505050565b600082158015906127ba5750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310613200576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015613286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132aa91906139c6565b905080156132c8576132c56132be8661344b565b8290610f9d565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa15801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e91906139c6565b6133689082613c80565b90506133748185613c43565b905082818161338557613385613d00565b049695505050505050565b60008115670de0b6b3a7640000600284041904841117156133b057600080fd5b50670de0b6b3a76400009190910260028204010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561340d575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546127ba906fffffffffffffffffffffffffffffffff808216916101d0917001000000000000000000000000000000009091041684612770565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613491575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546127ba906fffffffffffffffffffffffffffffffff808216916101d09170010000000000000000000000000000000090910416846127ad565b60405180610280016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016135536040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b60405160c0810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516080810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461368357600080fd5b50565b803561369181613661565b919050565b803560ff8116811461369157600080fd5b60008060008060008587036101408112156136c157600080fd5b8635955060208701359450604087013593506060870135925060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808201121561370a57600080fd5b5061371361357c565b608087013561372181613661565b815260a0870135602082015260c087013561373b81613661565b604082015260e0870135606082015261010087013561375981613661565b608082015261376b6101208801613696565b60a0820152809150509295509295909350565b60008060008084860360e081121561379557600080fd5b85359450602086013593506040860135925060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0820112156137d757600080fd5b506137e06135cc565b60608601356137ee81613661565b81526080860135602082015260a086013561380881613661565b604082015260c086013561ffff8116811461382257600080fd5b6060820152939692955090935050565b60008060008060008587036101a081121561384c57600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301121561389757600080fd5b61389f613616565b91506138ad60808901613686565b82526138bb60a08901613686565b60208301526138cc60c08901613686565b604083015260e088013560608301526101008089013560808401528189013560a084015261014089013560c08401526139086101608a01613686565b60e084015261391a6101808a01613696565b9083015250949793965091945092919050565b801515811461368357600080fd5b60008060008060008060008060006101208a8c03121561395a57600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a013561398181613661565b945060a08a01356139918161392d565b935060c08a0135925060e08a01356139a881613661565b91506139b76101008b01613696565b90509295985092959850929598565b6000602082840312156139d857600080fd5b5051919050565b6000602082840312156139f157600080fd5b81516127ba8161392d565b600060208083528351808285015260005b81811015613a2957858101830151858201604001528201613a0d565b81811115613a3b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060008060808587031215613a8557600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613aaf57600080fd5b939692955090935050565b600080600060608486031215613acf57600080fd5b8351925060208401519150604084015190509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115613b7057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613b5657613b56613ae8565b80851615613b6357918102915b93841c9390800290613b1c565b509250929050565b600082613b87575060016115d7565b81613b94575060006115d7565b8160018114613baa5760028114613bb457613bd0565b60019150506115d7565b60ff841115613bc557613bc5613ae8565b50506001821b6115d7565b5060208310610133831016604e8410600b8410161715613bf3575081810a6115d7565b613bfd8383613b17565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613c2f57613c2f613ae8565b029392505050565b60006127ba8383613b78565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7b57613c7b613ae8565b500290565b60008219821115613c9357613c93613ae8565b500190565b600060208284031215613caa57600080fd5b81516127ba81613661565b600082821015613cc757613cc7613ae8565b500390565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613cf757613cf7613ae8565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613d65577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea264697066735822122084824e7acd190a976cdc9a030eadf0d5ef4b64ea3edb3ca4034ffa814dcbe68564736f6c634300080a0033","opcodes":"PUSH2 0x3DA0 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x186DEA44 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x1913F161 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x8A5DADD1 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xBF697A26 EQ PUSH2 0xCF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x36A7 JUMP JUMPDEST PUSH2 0xEF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x377E JUMP JUMPDEST PUSH2 0x4A2 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x3832 JUMP JUMPDEST PUSH2 0x751 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xEA CALLDATASIZE PUSH1 0x4 PUSH2 0x393B JUMP JUMPDEST PUSH2 0xA2D JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x11F DUP3 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP PUSH2 0x12B DUP3 DUP3 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x1E0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP3 PUSH2 0x1D6 SWAP3 SWAP1 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D0 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO PUSH2 0x209 JUMPI POP DUP1 JUMPDEST PUSH2 0x214 DUP4 DUP3 DUP5 PUSH2 0xFF4 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x226 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x0 DUP6 PUSH2 0x1211 JUMP JUMPDEST PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP9 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x264 SWAP2 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x1552 JUMP JUMPDEST SWAP1 POP DUP1 DUP1 ISZERO PUSH2 0x272 JUMPI POP DUP3 DUP3 EQ JUMPDEST ISZERO PUSH2 0x2EB JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0x2A6 SWAP1 DUP10 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH2 0x100 DUP8 ADD MLOAD SWAP2 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 ISZERO PUSH2 0x3D1 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP9 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x40C JUMPI PUSH2 0x40C DUP12 DUP12 DUP12 DUP12 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP12 PUSH1 0x0 ADD MLOAD CALLER DUP14 PUSH1 0x60 ADD MLOAD DUP15 PUSH1 0x80 ADD MLOAD DUP16 PUSH1 0xA0 ADD MLOAD PUSH2 0x1674 JUMP JUMPDEST DUP7 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3115D1449A7B732C986CBA18244E897A450F61E1BB8D589CD2E69E6C8924F9F7 DUP6 PUSH1 0x40 MLOAD PUSH2 0x48A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP4 POP POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x4D2 DUP3 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4DE DUP3 DUP3 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x4ED DUP2 DUP4 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1830 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x504 SWAP2 DUP5 SWAP2 DUP5 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x1211 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD DUP5 MLOAD PUSH2 0x536 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 CALLER SWAP2 SWAP1 PUSH2 0x1BB8 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD SWAP3 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x64 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5F6 SWAP2 SWAP1 PUSH2 0x39DF JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x6AB JUMPI PUSH2 0x615 DUP8 DUP8 DUP8 DUP6 PUSH2 0x1C0 ADD MLOAD DUP7 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1C9A JUMP JUMPDEST ISZERO PUSH2 0x6AB JUMPI PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0x649 SWAP1 DUP7 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0xFFFF AND DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2B627736BCA15CD5381DCF80B0BF11FD197D01A037C52B927A881A10FB73BA61 CALLER DUP9 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x740 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x780 DUP2 PUSH2 0x1EDA JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 SWAP3 DIV PUSH2 0xFFFF AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x7D9 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xA24 JUMPI PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE DUP6 DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 SLOAD DUP3 MSTORE SWAP1 PUSH2 0x81F SWAP1 DUP4 PUSH2 0x1552 JUMP JUMPDEST ISZERO PUSH2 0x957 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP2 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO PUSH2 0x8D8 JUMPI PUSH2 0x8D8 DUP9 DUP9 DUP9 DUP9 PUSH1 0x0 DUP10 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD PUSH2 0x1674 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x80 ADD MLOAD EQ ISZERO PUSH2 0x957 JUMPI PUSH2 0x8F4 DUP2 DUP4 PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0xA22 JUMPI PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH1 0x4 DUP7 ADD SLOAD PUSH2 0x9AD SWAP3 DUP13 SWAP3 DUP13 SWAP3 DUP7 SWAP3 AND PUSH2 0x1C9A JUMP JUMPDEST ISZERO PUSH2 0xA20 JUMPI PUSH2 0x9BE DUP2 DUP5 PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST POP JUMPDEST POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xA5C DUP3 PUSH2 0xCF9 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF7 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 POP PUSH2 0xB03 DUP3 DUP3 PUSH2 0x1F62 JUMP JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP11 SLOAD DUP2 MSTORE PUSH2 0xB3D SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x1552 JUMP JUMPDEST ISZERO ISZERO DUP8 ISZERO ISZERO EQ ISZERO PUSH2 0xB50 JUMPI POP POP POP PUSH2 0xA20 JUMP JUMPDEST DUP7 ISZERO PUSH2 0xC55 JUMPI PUSH2 0xB67 DUP13 DUP13 DUP12 DUP6 PUSH2 0x1C0 ADD MLOAD PUSH2 0x2107 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3632000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xBDE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0xC0E SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0xC84 SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP10 SLOAD DUP2 MSTORE PUSH2 0xCA7 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP13 CALLER DUP13 DUP13 DUP13 PUSH2 0x1674 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD01 PUSH2 0x34CF JUMP JUMPDEST PUSH2 0xD09 PUSH2 0x34CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE5A SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEDF SWAP2 SWAP1 PUSH2 0x3A6F JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0xF41 JUMPI POP POP JUMP JUMPDEST PUSH2 0xF4B DUP3 DUP3 PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0xF55 DUP3 DUP3 PUSH2 0x22C6 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xFD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH2 0x1060 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3332000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 DUP4 GT ISZERO PUSH2 0x10D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x1125 DUP6 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x119B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x1209 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x123C PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1250 SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x13B1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F2 SWAP2 SWAP1 PUSH2 0x3ABA JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1408 SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x144B SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x149C SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x15C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SWAP2 SWAP1 SWAP2 SHR AND ISZERO ISZERO JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x164C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x1666 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x166E JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x200 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP6 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP6 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP6 AND PUSH1 0x60 DUP4 ADD MSTORE DUP4 SWAP1 DIV DUP5 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP6 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP4 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP7 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP7 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP7 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP6 AND PUSH2 0x160 DUP7 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP5 AND PUSH2 0x180 DUP8 ADD MSTORE SWAP2 SWAP1 SWAP2 DIV DUP3 AND PUSH2 0x1A0 DUP6 ADD MSTORE PUSH1 0x9 ADD SLOAD AND PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x17AE DUP12 DUP12 DUP12 DUP12 DUP11 DUP9 DUP12 DUP12 PUSH2 0x24F1 JUMP JUMPDEST SWAP2 POP POP DUP1 ISZERO DUP1 PUSH2 0x17C2 JUMPI POP DUP2 MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xCEB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18F3 DUP7 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP SWAP3 POP SWAP3 POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x196A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x19D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND DUP1 ISZERO DUP1 PUSH2 0x1B4A JUMPI POP PUSH2 0x1C0 DUP8 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x1A78 SWAP1 PUSH1 0xA PUSH2 0x3C37 JUMP JUMPDEST PUSH2 0x1A82 SWAP1 DUP3 PUSH2 0x3C43 JUMP JUMPDEST DUP6 PUSH2 0x1B3D DUP10 PUSH2 0x100 ADD MLOAD DUP10 PUSH1 0x8 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B33 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x1D0 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x1B47 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST GT ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x1C23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1C2D DUP6 PUSH2 0x25EC JUMP JUMPDEST PUSH2 0x1C93 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xBD5 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x1EC4 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D1F SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D8D SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DFE SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EB4 SWAP2 SWAP1 PUSH2 0x39DF JUMP JUMPDEST PUSH2 0x1EC2 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x499 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1ED0 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2107 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP4 SLOAD SWAP2 DUP3 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP4 ADD MSTORE PUSH8 0x1000000000000000 AND ISZERO PUSH2 0x1F5E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3433000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x1FCE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x2023 DUP5 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2099 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x1C93 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2115 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2121 JUMPI POP PUSH1 0x0 PUSH2 0x219C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x2160 JUMPI POP PUSH1 0x1 PUSH2 0x219C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x217D SWAP1 DUP8 DUP8 PUSH2 0x26B8 JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x2198 JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x2234 JUMPI PUSH1 0x0 PUSH2 0x21C5 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP PUSH2 0x21DE DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0xF9D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x21EF SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1F5E JUMPI PUSH1 0x0 PUSH2 0x2251 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x27AD JUMP JUMPDEST SWAP1 POP PUSH2 0x226B DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0xF9D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x227C SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x22FF PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x230E JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x231F SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x2335 SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x235D SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x27C1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x2372 SWAP2 PUSH2 0xF9D JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x238E SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x2398 SWAP2 SWAP1 PUSH2 0x3CB5 JUMP JUMPDEST PUSH2 0x23A2 SWAP2 SWAP1 PUSH2 0x3CB5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x23B9 SWAP2 SWAP1 PUSH2 0x2908 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x2446 JUMPI PUSH2 0x23E9 PUSH2 0x23E4 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x294B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x244B JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x240F SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3CCC JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x24ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xBD5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2558 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x298A JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x25DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP SWAP1 SWAP12 SWAP1 SWAP11 POP SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x262C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x266B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x26A5 JUMPI PUSH2 0x2666 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25F3 JUMP JUMPDEST PUSH2 0x26B2 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x269C JUMPI PUSH2 0x269C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25F3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x26B2 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x26C6 DUP7 PUSH2 0x2EF4 JUMP JUMPDEST ISZERO PUSH2 0x275D JUMPI PUSH1 0x0 PUSH2 0x26F7 DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x2F38 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x2759 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x2767 SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2784 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x3CB5 JUMP JUMPDEST PUSH2 0x278E SWAP1 DUP6 PUSH2 0x3C43 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x219C DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27BA DUP4 DUP4 TIMESTAMP PUSH2 0x27C1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x27D5 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x3CB5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x27F1 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x27BA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2827 JUMPI PUSH1 0x0 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x2840 DUP11 DUP1 PUSH2 0xF9D JUMP JUMPDEST DUP2 PUSH2 0x284D JUMPI PUSH2 0x284D PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x285F DUP4 DUP12 PUSH2 0xF9D JUMP JUMPDEST DUP2 PUSH2 0x286C JUMPI PUSH2 0x286C PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x287C DUP7 DUP9 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x2886 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x289A DUP9 DUP11 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28A4 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28AE SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x28C5 DUP11 DUP16 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28CF SWAP2 SWAP1 PUSH2 0x3D2F JUMP JUMPDEST PUSH2 0x28E5 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x28EF SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x28F9 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x293D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x296F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x29A0 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x29DC JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x2EE7 JUMP JUMPDEST PUSH2 0x2A8B PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2AD0 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x2ABD SWAP2 SWAP1 PUSH2 0x2F7C JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x2DEF JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x2AF0 SWAP2 PUSH2 0x305B JUMP JUMPDEST PUSH2 0x2B04 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x2B4A JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2BE0 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x2C84 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C7F SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x2C8B JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2CAB JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x2CAB SWAP2 PUSH2 0x1552 JUMP JUMPDEST ISZERO PUSH2 0x2D9B JUMPI PUSH2 0x2CC8 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x30E0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x2CE1 SWAP1 DUP4 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x2CFC SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x317D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x2D52 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x2D22 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x2D29 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x2D38 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x2D4A SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x2D5B JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x2D6F JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x2D76 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x2D85 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x2D97 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x2DAB SWAP2 PUSH2 0x318E JUMP JUMPDEST ISZERO PUSH2 0x2DDE JUMPI PUSH2 0x2DC8 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x3210 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x2DDA SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x2E00 JUMPI PUSH1 0x0 PUSH2 0x2E1B JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x2E19 JUMPI PUSH2 0x2E19 PUSH2 0x3D00 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x2E32 JUMPI PUSH1 0x0 PUSH2 0x2E4D JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x2E4B JUMPI PUSH2 0x2E4B PUSH2 0x3D00 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x2E8F JUMPI PUSH2 0x2E8A DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x2E84 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x2908 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x3390 JUMP JUMPDEST PUSH2 0x2EB1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x27BA JUMPI POP PUSH2 0x2F30 PUSH1 0x1 DUP3 PUSH2 0x3CB5 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x499 JUMPI PUSH1 0x1 ADD PUSH2 0x2F67 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x3040 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3019 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x303D SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x30CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30EC DUP6 PUSH2 0x33C7 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x3156 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH2 0x18F JUMP JUMPDEST PUSH2 0x3160 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x3171 JUMPI PUSH2 0x3171 PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x27BA JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x3200 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3286 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32AA SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x32C8 JUMPI PUSH2 0x32C5 PUSH2 0x32BE DUP7 PUSH2 0x344B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0xF9D JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x333A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x335E SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x3368 SWAP1 DUP3 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 POP PUSH2 0x3374 DUP2 DUP6 PUSH2 0x3C43 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x3385 JUMPI PUSH2 0x3385 PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x33B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x340D JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x27BA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1D0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x2770 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3491 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x27BA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1D0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x27AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3553 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3691 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3691 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x140 DUP2 SLT ISZERO PUSH2 0x36C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP3 ADD SLT ISZERO PUSH2 0x370A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3713 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH2 0x3721 DUP2 PUSH2 0x3661 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 DUP8 ADD CALLDATALOAD PUSH2 0x373B DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xE0 DUP8 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x100 DUP8 ADD CALLDATALOAD PUSH2 0x3759 DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x376B PUSH2 0x120 DUP9 ADD PUSH2 0x3696 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH1 0xE0 DUP2 SLT ISZERO PUSH2 0x3795 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP3 ADD SLT ISZERO PUSH2 0x37D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37E0 PUSH2 0x35CC JUMP JUMPDEST PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x37EE DUP2 PUSH2 0x3661 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH2 0x3808 DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x1A0 DUP2 SLT ISZERO PUSH2 0x384C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x120 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x3897 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x389F PUSH2 0x3616 JUMP JUMPDEST SWAP2 POP PUSH2 0x38AD PUSH1 0x80 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x38BB PUSH1 0xA0 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x38CC PUSH1 0xC0 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE DUP2 DUP10 ADD CALLDATALOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x140 DUP10 ADD CALLDATALOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x3908 PUSH2 0x160 DUP11 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x391A PUSH2 0x180 DUP11 ADD PUSH2 0x3696 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE POP SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 POP SWAP3 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x395A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 CALLDATALOAD SWAP9 POP PUSH1 0x20 DUP11 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD SWAP7 POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD PUSH2 0x3981 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD PUSH2 0x3991 DUP2 PUSH2 0x392D JUMP JUMPDEST SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD PUSH2 0x39A8 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP2 POP PUSH2 0x39B7 PUSH2 0x100 DUP12 ADD PUSH2 0x3696 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x27BA DUP2 PUSH2 0x392D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3A29 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3A0D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3A3B JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3A85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3ACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x3B70 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3B56 JUMPI PUSH2 0x3B56 PUSH2 0x3AE8 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x3B63 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x3B1C JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3B87 JUMPI POP PUSH1 0x1 PUSH2 0x15D7 JUMP JUMPDEST DUP2 PUSH2 0x3B94 JUMPI POP PUSH1 0x0 PUSH2 0x15D7 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3BAA JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3BB4 JUMPI PUSH2 0x3BD0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x15D7 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3BC5 JUMPI PUSH2 0x3BC5 PUSH2 0x3AE8 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x15D7 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3BF3 JUMPI POP DUP2 DUP2 EXP PUSH2 0x15D7 JUMP JUMPDEST PUSH2 0x3BFD DUP4 DUP4 PUSH2 0x3B17 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3C2F JUMPI PUSH2 0x3C2F PUSH2 0x3AE8 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27BA DUP4 DUP4 PUSH2 0x3B78 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3C7B JUMPI PUSH2 0x3C7B PUSH2 0x3AE8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3C93 JUMPI PUSH2 0x3C93 PUSH2 0x3AE8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3CAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x27BA DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3CC7 JUMPI PUSH2 0x3CC7 PUSH2 0x3AE8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3CF7 JUMPI PUSH2 0x3CF7 PUSH2 0x3AE8 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3D65 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP5 DUP3 0x4E PUSH27 0xCD190A976CDC9A030EADF0D5EF4B64EA3EDB3CA4034FFA814DCBE6 DUP6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"864:10771:103:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;864:10771:103;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_accrueToTreasury_20746":{"entryPoint":8902,"id":20746,"parameterSlots":2,"returnSlots":0},"@_getFirstAssetIdByMask_14544":{"entryPoint":12088,"id":14544,"parameterSlots":2,"returnSlots":1},"@_getUserBalanceInBaseCurrency_18448":{"entryPoint":12512,"id":18448,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_18405":{"entryPoint":12816,"id":18405,"parameterSlots":4,"returnSlots":1},"@_updateIndexes_20827":{"entryPoint":8612,"id":20827,"parameterSlots":2,"returnSlots":0},"@cache_20970":{"entryPoint":3321,"id":20970,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_23673":{"entryPoint":10177,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":10157,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":10096,"id":23550,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_18307":{"entryPoint":10634,"id":18307,"parameterSlots":4,"returnSlots":6},"@executeFinalizeTransfer_21546":{"entryPoint":1873,"id":21546,"parameterSlots":5,"returnSlots":0},"@executeSupply_21194":{"entryPoint":1186,"id":21194,"parameterSlots":4,"returnSlots":0},"@executeUseReserveAsCollateral_21683":{"entryPoint":2605,"id":21683,"parameterSlots":9,"returnSlots":0},"@executeWithdraw_21380":{"entryPoint":239,"id":21380,"parameterSlots":5,"returnSlots":1},"@getDebtCeiling_13668":{"entryPoint":null,"id":13668,"parameterSlots":1,"returnSlots":1},"@getDecimals_13110":{"entryPoint":null,"id":13110,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_17188":{"entryPoint":12156,"id":17188,"parameterSlots":2,"returnSlots":3},"@getFlags_13934":{"entryPoint":null,"id":13934,"parameterSlots":1,"returnSlots":5},"@getIsolationModeState_14439":{"entryPoint":9912,"id":14439,"parameterSlots":3,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":9708,"id":117,"parameterSlots":1,"returnSlots":1},"@getLtv_12954":{"entryPoint":null,"id":12954,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_20345":{"entryPoint":13387,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":13255,"id":20309,"parameterSlots":1,"returnSlots":1},"@getParams_14000":{"entryPoint":null,"id":14000,"parameterSlots":1,"returnSlots":6},"@getPaused_13260":{"entryPoint":null,"id":13260,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_13512":{"entryPoint":null,"id":13512,"parameterSlots":1,"returnSlots":1},"@getSupplyCap_13616":{"entryPoint":null,"id":13616,"parameterSlots":1,"returnSlots":1},"@isBorrowingAny_14356":{"entryPoint":null,"id":14356,"parameterSlots":1,"returnSlots":1},"@isBorrowing_14222":{"entryPoint":12686,"id":14222,"parameterSlots":2,"returnSlots":1},"@isEmpty_14371":{"entryPoint":null,"id":14371,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_17208":{"entryPoint":12669,"id":17208,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralAny_14308":{"entryPoint":null,"id":14308,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOne_14291":{"entryPoint":12020,"id":14291,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_14187":{"entryPoint":12379,"id":14187,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_14260":{"entryPoint":5458,"id":14260,"parameterSlots":2,"returnSlots":1},"@percentMul_23713":{"entryPoint":10504,"id":23713,"parameterSlots":2,"returnSlots":1},"@rayDiv_23792":{"entryPoint":10571,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":3997,"id":23780,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":7096,"id":106,"parameterSlots":4,"returnSlots":0},"@setUsingAsCollateral_14152":{"entryPoint":5597,"id":14152,"parameterSlots":3,"returnSlots":0},"@toUint128_1626":{"entryPoint":9291,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_20618":{"entryPoint":4625,"id":20618,"parameterSlots":5,"returnSlots":0},"@updateState_20387":{"entryPoint":3858,"id":20387,"parameterSlots":2,"returnSlots":0},"@validateAutomaticUseAsCollateral_23501":{"entryPoint":7322,"id":23501,"parameterSlots":5,"returnSlots":1},"@validateHFAndLtv_23186":{"entryPoint":5748,"id":23186,"parameterSlots":9,"returnSlots":0},"@validateHealthFactor_23118":{"entryPoint":9457,"id":23118,"parameterSlots":8,"returnSlots":2},"@validateSetUseReserveAsCollateral_22823":{"entryPoint":8034,"id":22823,"parameterSlots":2,"returnSlots":0},"@validateSupply_21871":{"entryPoint":6192,"id":21871,"parameterSlots":3,"returnSlots":0},"@validateTransfer_23204":{"entryPoint":7898,"id":23204,"parameterSlots":1,"returnSlots":0},"@validateUseAsCollateral_23438":{"entryPoint":8455,"id":23438,"parameterSlots":4,"returnSlots":1},"@validateWithdraw_21921":{"entryPoint":4084,"id":21921,"parameterSlots":3,"returnSlots":0},"@wadDiv_23768":{"entryPoint":13200,"id":23768,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":13958,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":14815,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":15512,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$t_struct$_FinalizeTransferParams_$24078_memory_ptr":{"entryPoint":14386,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_boolt_uint256t_addresst_uint8":{"entryPoint":14651,"id":null,"parameterSlots":2,"returnSlots":9},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteWithdrawParams_$24052_memory_ptr":{"entryPoint":13991,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteSupplyParams_$24001_memory_ptr":{"entryPoint":14206,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":14790,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":15034,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":14959,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint8":{"entryPoint":13974,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14844,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"allocate_memory":{"entryPoint":13846,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2073":{"entryPoint":13692,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2075":{"entryPoint":13772,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":15564,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":15488,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":15663,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":15127,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":15415,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":15224,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":15427,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":15541,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":15080,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":15616,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":13921,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":14637,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16510:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"60:361:124","statements":[{"nodeType":"YulAssignment","src":"70:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"86:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"80:5:124"},"nodeType":"YulFunctionCall","src":"80:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"70:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"98:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"120:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"128:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"116:3:124"},"nodeType":"YulFunctionCall","src":"116:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"102:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"216:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"237:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"240:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"230:6:124"},"nodeType":"YulFunctionCall","src":"230:88:124"},"nodeType":"YulExpressionStatement","src":"230:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"338:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"341:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"331:6:124"},"nodeType":"YulFunctionCall","src":"331:15:124"},"nodeType":"YulExpressionStatement","src":"331:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"366:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"369:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"359:6:124"},"nodeType":"YulFunctionCall","src":"359:15:124"},"nodeType":"YulExpressionStatement","src":"359:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"151:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"163:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"148:2:124"},"nodeType":"YulFunctionCall","src":"148:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"187:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"199:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"184:2:124"},"nodeType":"YulFunctionCall","src":"184:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"145:2:124"},"nodeType":"YulFunctionCall","src":"145:62:124"},"nodeType":"YulIf","src":"142:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"400:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"404:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"393:6:124"},"nodeType":"YulFunctionCall","src":"393:22:124"},"nodeType":"YulExpressionStatement","src":"393:22:124"}]},"name":"allocate_memory_2073","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"49:6:124","type":""}],"src":"14:407:124"},{"body":{"nodeType":"YulBlock","src":"472:361:124","statements":[{"nodeType":"YulAssignment","src":"482:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"498:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"492:5:124"},"nodeType":"YulFunctionCall","src":"492:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"482:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"510:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"532:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"540:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"528:3:124"},"nodeType":"YulFunctionCall","src":"528:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"514:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"628:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"649:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"652:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"642:6:124"},"nodeType":"YulFunctionCall","src":"642:88:124"},"nodeType":"YulExpressionStatement","src":"642:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"753:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"743:6:124"},"nodeType":"YulFunctionCall","src":"743:15:124"},"nodeType":"YulExpressionStatement","src":"743:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"778:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"781:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"771:6:124"},"nodeType":"YulFunctionCall","src":"771:15:124"},"nodeType":"YulExpressionStatement","src":"771:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"563:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"575:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"560:2:124"},"nodeType":"YulFunctionCall","src":"560:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"599:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"611:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"596:2:124"},"nodeType":"YulFunctionCall","src":"596:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"557:2:124"},"nodeType":"YulFunctionCall","src":"557:62:124"},"nodeType":"YulIf","src":"554:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"812:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"816:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"805:6:124"},"nodeType":"YulFunctionCall","src":"805:22:124"},"nodeType":"YulExpressionStatement","src":"805:22:124"}]},"name":"allocate_memory_2075","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"461:6:124","type":""}],"src":"426:407:124"},{"body":{"nodeType":"YulBlock","src":"879:363:124","statements":[{"nodeType":"YulAssignment","src":"889:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"905:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"899:5:124"},"nodeType":"YulFunctionCall","src":"899:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"889:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"917:37:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"939:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"947:6:124","type":"","value":"0x0120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"935:3:124"},"nodeType":"YulFunctionCall","src":"935:19:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"921:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1037:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1058:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1061:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1051:6:124"},"nodeType":"YulFunctionCall","src":"1051:88:124"},"nodeType":"YulExpressionStatement","src":"1051:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1159:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1162:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1152:6:124"},"nodeType":"YulFunctionCall","src":"1152:15:124"},"nodeType":"YulExpressionStatement","src":"1152:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1187:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1190:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1180:6:124"},"nodeType":"YulFunctionCall","src":"1180:15:124"},"nodeType":"YulExpressionStatement","src":"1180:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"972:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"984:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"969:2:124"},"nodeType":"YulFunctionCall","src":"969:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1008:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1020:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1005:2:124"},"nodeType":"YulFunctionCall","src":"1005:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"966:2:124"},"nodeType":"YulFunctionCall","src":"966:62:124"},"nodeType":"YulIf","src":"963:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1221:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1225:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1214:6:124"},"nodeType":"YulFunctionCall","src":"1214:22:124"},"nodeType":"YulExpressionStatement","src":"1214:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"868:6:124","type":""}],"src":"838:404:124"},{"body":{"nodeType":"YulBlock","src":"1292:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"1379:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1388:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1391:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1381:6:124"},"nodeType":"YulFunctionCall","src":"1381:12:124"},"nodeType":"YulExpressionStatement","src":"1381:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1315:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1333:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1322:3:124"},"nodeType":"YulFunctionCall","src":"1322:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1312:2:124"},"nodeType":"YulFunctionCall","src":"1312:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1305:6:124"},"nodeType":"YulFunctionCall","src":"1305:73:124"},"nodeType":"YulIf","src":"1302:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1281:5:124","type":""}],"src":"1247:154:124"},{"body":{"nodeType":"YulBlock","src":"1455:85:124","statements":[{"nodeType":"YulAssignment","src":"1465:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1487:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1474:12:124"},"nodeType":"YulFunctionCall","src":"1474:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1528:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1503:24:124"},"nodeType":"YulFunctionCall","src":"1503:31:124"},"nodeType":"YulExpressionStatement","src":"1503:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1434:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1445:5:124","type":""}],"src":"1406:134:124"},{"body":{"nodeType":"YulBlock","src":"1592:109:124","statements":[{"nodeType":"YulAssignment","src":"1602:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1624:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1611:12:124"},"nodeType":"YulFunctionCall","src":"1611:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1602:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1679:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1688:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1691:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1681:6:124"},"nodeType":"YulFunctionCall","src":"1681:12:124"},"nodeType":"YulExpressionStatement","src":"1681:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1653:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1664:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1671:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1660:3:124"},"nodeType":"YulFunctionCall","src":"1660:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1650:2:124"},"nodeType":"YulFunctionCall","src":"1650:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1643:6:124"},"nodeType":"YulFunctionCall","src":"1643:35:124"},"nodeType":"YulIf","src":"1640:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1571:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1582:5:124","type":""}],"src":"1545:156:124"},{"body":{"nodeType":"YulBlock","src":"2053:1081:124","statements":[{"nodeType":"YulVariableDeclaration","src":"2063:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2077:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2086:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2073:3:124"},"nodeType":"YulFunctionCall","src":"2073:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2067:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"2121:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2130:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2133:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2123:6:124"},"nodeType":"YulFunctionCall","src":"2123:12:124"},"nodeType":"YulExpressionStatement","src":"2123:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2112:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2116:3:124","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2108:3:124"},"nodeType":"YulFunctionCall","src":"2108:12:124"},"nodeType":"YulIf","src":"2105:32:124"},{"nodeType":"YulAssignment","src":"2146:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2169:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2156:12:124"},"nodeType":"YulFunctionCall","src":"2156:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2146:6:124"}]},{"nodeType":"YulAssignment","src":"2188:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:124"},"nodeType":"YulFunctionCall","src":"2211:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2198:12:124"},"nodeType":"YulFunctionCall","src":"2198:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2188:6:124"}]},{"nodeType":"YulAssignment","src":"2239:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2266:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2277:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2262:3:124"},"nodeType":"YulFunctionCall","src":"2262:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2249:12:124"},"nodeType":"YulFunctionCall","src":"2249:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2239:6:124"}]},{"nodeType":"YulAssignment","src":"2290:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2317:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2328:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2313:3:124"},"nodeType":"YulFunctionCall","src":"2313:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2300:12:124"},"nodeType":"YulFunctionCall","src":"2300:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2290:6:124"}]},{"body":{"nodeType":"YulBlock","src":"2431:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2440:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2443:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2433:6:124"},"nodeType":"YulFunctionCall","src":"2433:12:124"},"nodeType":"YulExpressionStatement","src":"2433:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2352:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"2356:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2348:3:124"},"nodeType":"YulFunctionCall","src":"2348:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"2425:4:124","type":"","value":"0xc0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2344:3:124"},"nodeType":"YulFunctionCall","src":"2344:86:124"},"nodeType":"YulIf","src":"2341:106:124"},{"nodeType":"YulVariableDeclaration","src":"2456:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_2073","nodeType":"YulIdentifier","src":"2469:20:124"},"nodeType":"YulFunctionCall","src":"2469:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2460:5:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2500:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2532:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2543:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2528:3:124"},"nodeType":"YulFunctionCall","src":"2528:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2515:12:124"},"nodeType":"YulFunctionCall","src":"2515:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2504:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2582:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2557:24:124"},"nodeType":"YulFunctionCall","src":"2557:33:124"},"nodeType":"YulExpressionStatement","src":"2557:33:124"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2606:5:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"2613:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2599:6:124"},"nodeType":"YulFunctionCall","src":"2599:22:124"},"nodeType":"YulExpressionStatement","src":"2599:22:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2641:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2648:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2637:3:124"},"nodeType":"YulFunctionCall","src":"2637:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2670:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2681:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2666:3:124"},"nodeType":"YulFunctionCall","src":"2666:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2653:12:124"},"nodeType":"YulFunctionCall","src":"2653:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2630:6:124"},"nodeType":"YulFunctionCall","src":"2630:57:124"},"nodeType":"YulExpressionStatement","src":"2630:57:124"},{"nodeType":"YulVariableDeclaration","src":"2696:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2728:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2739:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2724:3:124"},"nodeType":"YulFunctionCall","src":"2724:20:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2711:12:124"},"nodeType":"YulFunctionCall","src":"2711:34:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"2700:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2779:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2754:24:124"},"nodeType":"YulFunctionCall","src":"2754:33:124"},"nodeType":"YulExpressionStatement","src":"2754:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2807:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2814:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2803:3:124"},"nodeType":"YulFunctionCall","src":"2803:14:124"},{"name":"value_2","nodeType":"YulIdentifier","src":"2819:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2796:6:124"},"nodeType":"YulFunctionCall","src":"2796:31:124"},"nodeType":"YulExpressionStatement","src":"2796:31:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2847:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2854:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2843:3:124"},"nodeType":"YulFunctionCall","src":"2843:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2876:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2887:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2872:3:124"},"nodeType":"YulFunctionCall","src":"2872:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2859:12:124"},"nodeType":"YulFunctionCall","src":"2859:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2836:6:124"},"nodeType":"YulFunctionCall","src":"2836:57:124"},"nodeType":"YulExpressionStatement","src":"2836:57:124"},{"nodeType":"YulVariableDeclaration","src":"2902:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2934:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2945:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2930:3:124"},"nodeType":"YulFunctionCall","src":"2930:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2917:12:124"},"nodeType":"YulFunctionCall","src":"2917:33:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"2906:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"2984:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2959:24:124"},"nodeType":"YulFunctionCall","src":"2959:33:124"},"nodeType":"YulExpressionStatement","src":"2959:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3012:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3019:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3008:3:124"},"nodeType":"YulFunctionCall","src":"3008:15:124"},{"name":"value_3","nodeType":"YulIdentifier","src":"3025:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3001:6:124"},"nodeType":"YulFunctionCall","src":"3001:32:124"},"nodeType":"YulExpressionStatement","src":"3001:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3053:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"3060:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3049:3:124"},"nodeType":"YulFunctionCall","src":"3049:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3087:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3098:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3083:3:124"},"nodeType":"YulFunctionCall","src":"3083:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3066:16:124"},"nodeType":"YulFunctionCall","src":"3066:37:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3042:6:124"},"nodeType":"YulFunctionCall","src":"3042:62:124"},"nodeType":"YulExpressionStatement","src":"3042:62:124"},{"nodeType":"YulAssignment","src":"3113:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3123:5:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3113:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteWithdrawParams_$24052_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1987:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1998:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2010:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2018:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2026:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2034:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2042:6:124","type":""}],"src":"1706:1428:124"},{"body":{"nodeType":"YulBlock","src":"3248:76:124","statements":[{"nodeType":"YulAssignment","src":"3258:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3270:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3281:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3266:3:124"},"nodeType":"YulFunctionCall","src":"3266:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3258:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3300:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3311:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3293:6:124"},"nodeType":"YulFunctionCall","src":"3293:25:124"},"nodeType":"YulExpressionStatement","src":"3293:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3217:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3228:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3239:4:124","type":""}],"src":"3139:185:124"},{"body":{"nodeType":"YulBlock","src":"3605:919:124","statements":[{"nodeType":"YulVariableDeclaration","src":"3615:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3629:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3638:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3625:3:124"},"nodeType":"YulFunctionCall","src":"3625:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3619:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3673:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3682:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3685:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3675:6:124"},"nodeType":"YulFunctionCall","src":"3675:12:124"},"nodeType":"YulExpressionStatement","src":"3675:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3664:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3668:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3660:3:124"},"nodeType":"YulFunctionCall","src":"3660:12:124"},"nodeType":"YulIf","src":"3657:32:124"},{"nodeType":"YulAssignment","src":"3698:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3721:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3708:12:124"},"nodeType":"YulFunctionCall","src":"3708:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3698:6:124"}]},{"nodeType":"YulAssignment","src":"3740:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3767:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3778:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3763:3:124"},"nodeType":"YulFunctionCall","src":"3763:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3750:12:124"},"nodeType":"YulFunctionCall","src":"3750:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3740:6:124"}]},{"nodeType":"YulAssignment","src":"3791:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3818:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3829:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3814:3:124"},"nodeType":"YulFunctionCall","src":"3814:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3801:12:124"},"nodeType":"YulFunctionCall","src":"3801:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3791:6:124"}]},{"body":{"nodeType":"YulBlock","src":"3932:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3941:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3944:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3934:6:124"},"nodeType":"YulFunctionCall","src":"3934:12:124"},"nodeType":"YulExpressionStatement","src":"3934:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3853:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"3857:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3849:3:124"},"nodeType":"YulFunctionCall","src":"3849:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"3926:4:124","type":"","value":"0x80"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3845:3:124"},"nodeType":"YulFunctionCall","src":"3845:86:124"},"nodeType":"YulIf","src":"3842:106:124"},{"nodeType":"YulVariableDeclaration","src":"3957:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_2075","nodeType":"YulIdentifier","src":"3970:20:124"},"nodeType":"YulFunctionCall","src":"3970:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3961:5:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4001:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4033:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4044:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4029:3:124"},"nodeType":"YulFunctionCall","src":"4029:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4016:12:124"},"nodeType":"YulFunctionCall","src":"4016:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4005:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4082:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4057:24:124"},"nodeType":"YulFunctionCall","src":"4057:33:124"},"nodeType":"YulExpressionStatement","src":"4057:33:124"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4106:5:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"4113:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4099:6:124"},"nodeType":"YulFunctionCall","src":"4099:22:124"},"nodeType":"YulExpressionStatement","src":"4099:22:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4141:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4148:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4137:3:124"},"nodeType":"YulFunctionCall","src":"4137:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4181:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4166:3:124"},"nodeType":"YulFunctionCall","src":"4166:20:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4153:12:124"},"nodeType":"YulFunctionCall","src":"4153:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4130:6:124"},"nodeType":"YulFunctionCall","src":"4130:58:124"},"nodeType":"YulExpressionStatement","src":"4130:58:124"},{"nodeType":"YulVariableDeclaration","src":"4197:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4229:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4240:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4225:3:124"},"nodeType":"YulFunctionCall","src":"4225:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4212:12:124"},"nodeType":"YulFunctionCall","src":"4212:33:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"4201:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"4279:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4254:24:124"},"nodeType":"YulFunctionCall","src":"4254:33:124"},"nodeType":"YulExpressionStatement","src":"4254:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4307:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4314:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4303:3:124"},"nodeType":"YulFunctionCall","src":"4303:14:124"},{"name":"value_2","nodeType":"YulIdentifier","src":"4319:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4296:6:124"},"nodeType":"YulFunctionCall","src":"4296:31:124"},"nodeType":"YulExpressionStatement","src":"4296:31:124"},{"nodeType":"YulVariableDeclaration","src":"4336:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4368:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4379:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4364:3:124"},"nodeType":"YulFunctionCall","src":"4364:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4351:12:124"},"nodeType":"YulFunctionCall","src":"4351:33:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"4340:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4438:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4447:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4450:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4440:6:124"},"nodeType":"YulFunctionCall","src":"4440:12:124"},"nodeType":"YulExpressionStatement","src":"4440:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"4406:7:124"},{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"4419:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"4428:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4415:3:124"},"nodeType":"YulFunctionCall","src":"4415:20:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4403:2:124"},"nodeType":"YulFunctionCall","src":"4403:33:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4396:6:124"},"nodeType":"YulFunctionCall","src":"4396:41:124"},"nodeType":"YulIf","src":"4393:61:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4474:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4481:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4470:3:124"},"nodeType":"YulFunctionCall","src":"4470:14:124"},{"name":"value_3","nodeType":"YulIdentifier","src":"4486:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4463:6:124"},"nodeType":"YulFunctionCall","src":"4463:31:124"},"nodeType":"YulExpressionStatement","src":"4463:31:124"},{"nodeType":"YulAssignment","src":"4503:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4513:5:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4503:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteSupplyParams_$24001_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3547:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3558:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3570:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3578:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3586:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3594:6:124","type":""}],"src":"3329:1195:124"},{"body":{"nodeType":"YulBlock","src":"4898:1123:124","statements":[{"nodeType":"YulVariableDeclaration","src":"4908:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4922:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4931:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4918:3:124"},"nodeType":"YulFunctionCall","src":"4918:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4912:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4966:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4975:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4978:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4968:6:124"},"nodeType":"YulFunctionCall","src":"4968:12:124"},"nodeType":"YulExpressionStatement","src":"4968:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4957:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"4961:3:124","type":"","value":"416"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4953:3:124"},"nodeType":"YulFunctionCall","src":"4953:12:124"},"nodeType":"YulIf","src":"4950:32:124"},{"nodeType":"YulAssignment","src":"4991:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5014:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5001:12:124"},"nodeType":"YulFunctionCall","src":"5001:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4991:6:124"}]},{"nodeType":"YulAssignment","src":"5033:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5060:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5071:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5056:3:124"},"nodeType":"YulFunctionCall","src":"5056:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5043:12:124"},"nodeType":"YulFunctionCall","src":"5043:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5033:6:124"}]},{"nodeType":"YulAssignment","src":"5084:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5111:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5122:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5107:3:124"},"nodeType":"YulFunctionCall","src":"5107:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5094:12:124"},"nodeType":"YulFunctionCall","src":"5094:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5084:6:124"}]},{"nodeType":"YulAssignment","src":"5135:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5162:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5173:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5158:3:124"},"nodeType":"YulFunctionCall","src":"5158:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5145:12:124"},"nodeType":"YulFunctionCall","src":"5145:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5135:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5186:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5196:6:124","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5190:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5299:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5308:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5311:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5301:6:124"},"nodeType":"YulFunctionCall","src":"5301:12:124"},"nodeType":"YulExpressionStatement","src":"5301:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5222:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5226:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5218:3:124"},"nodeType":"YulFunctionCall","src":"5218:75:124"},{"name":"_2","nodeType":"YulIdentifier","src":"5295:2:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5214:3:124"},"nodeType":"YulFunctionCall","src":"5214:84:124"},"nodeType":"YulIf","src":"5211:104:124"},{"nodeType":"YulVariableDeclaration","src":"5324:30:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"5337:15:124"},"nodeType":"YulFunctionCall","src":"5337:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5328:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5370:5:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5400:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5411:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5396:3:124"},"nodeType":"YulFunctionCall","src":"5396:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5377:18:124"},"nodeType":"YulFunctionCall","src":"5377:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5363:6:124"},"nodeType":"YulFunctionCall","src":"5363:54:124"},"nodeType":"YulExpressionStatement","src":"5363:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5437:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5444:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5433:3:124"},"nodeType":"YulFunctionCall","src":"5433:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5472:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5483:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5468:3:124"},"nodeType":"YulFunctionCall","src":"5468:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5449:18:124"},"nodeType":"YulFunctionCall","src":"5449:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5426:6:124"},"nodeType":"YulFunctionCall","src":"5426:63:124"},"nodeType":"YulExpressionStatement","src":"5426:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5509:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5516:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5505:3:124"},"nodeType":"YulFunctionCall","src":"5505:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5544:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5555:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5540:3:124"},"nodeType":"YulFunctionCall","src":"5540:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5521:18:124"},"nodeType":"YulFunctionCall","src":"5521:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5498:6:124"},"nodeType":"YulFunctionCall","src":"5498:63:124"},"nodeType":"YulExpressionStatement","src":"5498:63:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5581:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5588:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5577:3:124"},"nodeType":"YulFunctionCall","src":"5577:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5610:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5621:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5606:3:124"},"nodeType":"YulFunctionCall","src":"5606:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5593:12:124"},"nodeType":"YulFunctionCall","src":"5593:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5570:6:124"},"nodeType":"YulFunctionCall","src":"5570:57:124"},"nodeType":"YulExpressionStatement","src":"5570:57:124"},{"nodeType":"YulVariableDeclaration","src":"5636:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5646:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5640:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5669:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5676:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5665:3:124"},"nodeType":"YulFunctionCall","src":"5665:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5699:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"5710:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5695:3:124"},"nodeType":"YulFunctionCall","src":"5695:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5682:12:124"},"nodeType":"YulFunctionCall","src":"5682:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5658:6:124"},"nodeType":"YulFunctionCall","src":"5658:57:124"},"nodeType":"YulExpressionStatement","src":"5658:57:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5735:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5742:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5731:3:124"},"nodeType":"YulFunctionCall","src":"5731:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5765:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"5776:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5761:3:124"},"nodeType":"YulFunctionCall","src":"5761:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5748:12:124"},"nodeType":"YulFunctionCall","src":"5748:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5724:6:124"},"nodeType":"YulFunctionCall","src":"5724:57:124"},"nodeType":"YulExpressionStatement","src":"5724:57:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5801:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5808:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5797:3:124"},"nodeType":"YulFunctionCall","src":"5797:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5831:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5842:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5827:3:124"},"nodeType":"YulFunctionCall","src":"5827:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5814:12:124"},"nodeType":"YulFunctionCall","src":"5814:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5790:6:124"},"nodeType":"YulFunctionCall","src":"5790:58:124"},"nodeType":"YulExpressionStatement","src":"5790:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5868:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5875:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5864:3:124"},"nodeType":"YulFunctionCall","src":"5864:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5904:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5915:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5900:3:124"},"nodeType":"YulFunctionCall","src":"5900:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5881:18:124"},"nodeType":"YulFunctionCall","src":"5881:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5857:6:124"},"nodeType":"YulFunctionCall","src":"5857:64:124"},"nodeType":"YulExpressionStatement","src":"5857:64:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5941:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"5948:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5937:3:124"},"nodeType":"YulFunctionCall","src":"5937:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5974:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5985:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5970:3:124"},"nodeType":"YulFunctionCall","src":"5970:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"5953:16:124"},"nodeType":"YulFunctionCall","src":"5953:37:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5930:6:124"},"nodeType":"YulFunctionCall","src":"5930:61:124"},"nodeType":"YulExpressionStatement","src":"5930:61:124"},{"nodeType":"YulAssignment","src":"6000:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6010:5:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"6000:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$t_struct$_FinalizeTransferParams_$24078_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4832:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4843:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4855:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4863:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4871:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4879:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4887:6:124","type":""}],"src":"4529:1492:124"},{"body":{"nodeType":"YulBlock","src":"6068:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"6122:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6131:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6134:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6124:6:124"},"nodeType":"YulFunctionCall","src":"6124:12:124"},"nodeType":"YulExpressionStatement","src":"6124:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6091:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6112:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6105:6:124"},"nodeType":"YulFunctionCall","src":"6105:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6098:6:124"},"nodeType":"YulFunctionCall","src":"6098:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6088:2:124"},"nodeType":"YulFunctionCall","src":"6088:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6081:6:124"},"nodeType":"YulFunctionCall","src":"6081:40:124"},"nodeType":"YulIf","src":"6078:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6057:5:124","type":""}],"src":"6026:118:124"},{"body":{"nodeType":"YulBlock","src":"6519:738:124","statements":[{"body":{"nodeType":"YulBlock","src":"6566:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6575:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6578:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6568:6:124"},"nodeType":"YulFunctionCall","src":"6568:12:124"},"nodeType":"YulExpressionStatement","src":"6568:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6540:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6549:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6536:3:124"},"nodeType":"YulFunctionCall","src":"6536:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6561:3:124","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6532:3:124"},"nodeType":"YulFunctionCall","src":"6532:33:124"},"nodeType":"YulIf","src":"6529:53:124"},{"nodeType":"YulAssignment","src":"6591:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6614:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6601:12:124"},"nodeType":"YulFunctionCall","src":"6601:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6591:6:124"}]},{"nodeType":"YulAssignment","src":"6633:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6660:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6671:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6656:3:124"},"nodeType":"YulFunctionCall","src":"6656:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6643:12:124"},"nodeType":"YulFunctionCall","src":"6643:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6633:6:124"}]},{"nodeType":"YulAssignment","src":"6684:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6711:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6722:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6707:3:124"},"nodeType":"YulFunctionCall","src":"6707:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6694:12:124"},"nodeType":"YulFunctionCall","src":"6694:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6684:6:124"}]},{"nodeType":"YulAssignment","src":"6735:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6762:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6773:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6758:3:124"},"nodeType":"YulFunctionCall","src":"6758:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6745:12:124"},"nodeType":"YulFunctionCall","src":"6745:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6735:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6786:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6816:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6827:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6812:3:124"},"nodeType":"YulFunctionCall","src":"6812:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6799:12:124"},"nodeType":"YulFunctionCall","src":"6799:33:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6790:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6866:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6841:24:124"},"nodeType":"YulFunctionCall","src":"6841:31:124"},"nodeType":"YulExpressionStatement","src":"6841:31:124"},{"nodeType":"YulAssignment","src":"6881:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6891:5:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"6881:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6905:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6937:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6948:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6933:3:124"},"nodeType":"YulFunctionCall","src":"6933:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6920:12:124"},"nodeType":"YulFunctionCall","src":"6920:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6909:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6984:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"6962:21:124"},"nodeType":"YulFunctionCall","src":"6962:30:124"},"nodeType":"YulExpressionStatement","src":"6962:30:124"},{"nodeType":"YulAssignment","src":"7001:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7011:7:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7001:6:124"}]},{"nodeType":"YulAssignment","src":"7027:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7054:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7065:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7050:3:124"},"nodeType":"YulFunctionCall","src":"7050:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7037:12:124"},"nodeType":"YulFunctionCall","src":"7037:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7027:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7079:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7111:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7122:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7107:3:124"},"nodeType":"YulFunctionCall","src":"7107:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7094:12:124"},"nodeType":"YulFunctionCall","src":"7094:33:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"7083:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"7161:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7136:24:124"},"nodeType":"YulFunctionCall","src":"7136:33:124"},"nodeType":"YulExpressionStatement","src":"7136:33:124"},{"nodeType":"YulAssignment","src":"7178:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"7188:7:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"7178:6:124"}]},{"nodeType":"YulAssignment","src":"7204:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7235:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7246:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7231:3:124"},"nodeType":"YulFunctionCall","src":"7231:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7214:16:124"},"nodeType":"YulFunctionCall","src":"7214:37:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"7204:6:124"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_boolt_uint256t_addresst_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6421:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6432:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6444:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6452:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6460:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6468:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6476:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6484:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6492:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"6500:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"6508:6:124","type":""}],"src":"6149:1108:124"},{"body":{"nodeType":"YulBlock","src":"7363:125:124","statements":[{"nodeType":"YulAssignment","src":"7373:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7385:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7396:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7381:3:124"},"nodeType":"YulFunctionCall","src":"7381:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7373:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7415:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7430:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7438:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7426:3:124"},"nodeType":"YulFunctionCall","src":"7426:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7408:6:124"},"nodeType":"YulFunctionCall","src":"7408:74:124"},"nodeType":"YulExpressionStatement","src":"7408:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7332:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7343:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7354:4:124","type":""}],"src":"7262:226:124"},{"body":{"nodeType":"YulBlock","src":"7574:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"7620:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7629:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7632:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7622:6:124"},"nodeType":"YulFunctionCall","src":"7622:12:124"},"nodeType":"YulExpressionStatement","src":"7622:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7595:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7604:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7591:3:124"},"nodeType":"YulFunctionCall","src":"7591:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7616:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7587:3:124"},"nodeType":"YulFunctionCall","src":"7587:32:124"},"nodeType":"YulIf","src":"7584:52:124"},{"nodeType":"YulAssignment","src":"7645:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7661:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7655:5:124"},"nodeType":"YulFunctionCall","src":"7655:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7645:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7540:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7551:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7563:6:124","type":""}],"src":"7493:184:124"},{"body":{"nodeType":"YulBlock","src":"7867:285:124","statements":[{"nodeType":"YulAssignment","src":"7877:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7889:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7900:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7885:3:124"},"nodeType":"YulFunctionCall","src":"7885:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7877:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"7913:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7923:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7917:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7981:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7996:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8004:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7992:3:124"},"nodeType":"YulFunctionCall","src":"7992:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7974:6:124"},"nodeType":"YulFunctionCall","src":"7974:34:124"},"nodeType":"YulExpressionStatement","src":"7974:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8028:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8039:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8024:3:124"},"nodeType":"YulFunctionCall","src":"8024:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8048:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8056:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8044:3:124"},"nodeType":"YulFunctionCall","src":"8044:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8017:6:124"},"nodeType":"YulFunctionCall","src":"8017:43:124"},"nodeType":"YulExpressionStatement","src":"8017:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8080:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8091:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8076:3:124"},"nodeType":"YulFunctionCall","src":"8076:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"8096:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8069:6:124"},"nodeType":"YulFunctionCall","src":"8069:34:124"},"nodeType":"YulExpressionStatement","src":"8069:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8123:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8134:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8119:3:124"},"nodeType":"YulFunctionCall","src":"8119:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"8139:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8112:6:124"},"nodeType":"YulFunctionCall","src":"8112:34:124"},"nodeType":"YulExpressionStatement","src":"8112:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7812:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7823:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7831:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7839:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7847:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7858:4:124","type":""}],"src":"7682:470:124"},{"body":{"nodeType":"YulBlock","src":"8258:76:124","statements":[{"nodeType":"YulAssignment","src":"8268:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8280:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8291:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8276:3:124"},"nodeType":"YulFunctionCall","src":"8276:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8268:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8310:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"8321:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8303:6:124"},"nodeType":"YulFunctionCall","src":"8303:25:124"},"nodeType":"YulExpressionStatement","src":"8303:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8227:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8238:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8249:4:124","type":""}],"src":"8157:177:124"},{"body":{"nodeType":"YulBlock","src":"8417:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"8463:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8472:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8475:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8465:6:124"},"nodeType":"YulFunctionCall","src":"8465:12:124"},"nodeType":"YulExpressionStatement","src":"8465:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8438:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8447:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8434:3:124"},"nodeType":"YulFunctionCall","src":"8434:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8459:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8430:3:124"},"nodeType":"YulFunctionCall","src":"8430:32:124"},"nodeType":"YulIf","src":"8427:52:124"},{"nodeType":"YulVariableDeclaration","src":"8488:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8507:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8501:5:124"},"nodeType":"YulFunctionCall","src":"8501:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8492:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8548:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"8526:21:124"},"nodeType":"YulFunctionCall","src":"8526:28:124"},"nodeType":"YulExpressionStatement","src":"8526:28:124"},{"nodeType":"YulAssignment","src":"8563:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"8573:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8563:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8383:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8394:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8406:6:124","type":""}],"src":"8339:245:124"},{"body":{"nodeType":"YulBlock","src":"8718:168:124","statements":[{"nodeType":"YulAssignment","src":"8728:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8740:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8751:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8736:3:124"},"nodeType":"YulFunctionCall","src":"8736:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8728:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8770:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8785:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8793:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8781:3:124"},"nodeType":"YulFunctionCall","src":"8781:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8763:6:124"},"nodeType":"YulFunctionCall","src":"8763:74:124"},"nodeType":"YulExpressionStatement","src":"8763:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8857:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8868:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8853:3:124"},"nodeType":"YulFunctionCall","src":"8853:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"8873:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8846:6:124"},"nodeType":"YulFunctionCall","src":"8846:34:124"},"nodeType":"YulExpressionStatement","src":"8846:34:124"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8679:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8690:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8698:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8709:4:124","type":""}],"src":"8589:297:124"},{"body":{"nodeType":"YulBlock","src":"9012:535:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9022:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9032:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9026:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9050:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9061:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9043:6:124"},"nodeType":"YulFunctionCall","src":"9043:21:124"},"nodeType":"YulExpressionStatement","src":"9043:21:124"},{"nodeType":"YulVariableDeclaration","src":"9073:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9093:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9087:5:124"},"nodeType":"YulFunctionCall","src":"9087:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9077:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9120:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9131:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9116:3:124"},"nodeType":"YulFunctionCall","src":"9116:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"9136:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9109:6:124"},"nodeType":"YulFunctionCall","src":"9109:34:124"},"nodeType":"YulExpressionStatement","src":"9109:34:124"},{"nodeType":"YulVariableDeclaration","src":"9152:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9161:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9156:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9221:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9250:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"9261:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9246:3:124"},"nodeType":"YulFunctionCall","src":"9246:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"9265:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9242:3:124"},"nodeType":"YulFunctionCall","src":"9242:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9284:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"9292:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9280:3:124"},"nodeType":"YulFunctionCall","src":"9280:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9296:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9276:3:124"},"nodeType":"YulFunctionCall","src":"9276:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9270:5:124"},"nodeType":"YulFunctionCall","src":"9270:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9235:6:124"},"nodeType":"YulFunctionCall","src":"9235:66:124"},"nodeType":"YulExpressionStatement","src":"9235:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9182:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"9185:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9179:2:124"},"nodeType":"YulFunctionCall","src":"9179:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9193:19:124","statements":[{"nodeType":"YulAssignment","src":"9195:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9204:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9207:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9200:3:124"},"nodeType":"YulFunctionCall","src":"9200:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9195:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"9175:3:124","statements":[]},"src":"9171:140:124"},{"body":{"nodeType":"YulBlock","src":"9345:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9374:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"9385:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9370:3:124"},"nodeType":"YulFunctionCall","src":"9370:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"9394:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:124"},"nodeType":"YulFunctionCall","src":"9366:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"9399:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9359:6:124"},"nodeType":"YulFunctionCall","src":"9359:42:124"},"nodeType":"YulExpressionStatement","src":"9359:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9326:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"9329:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9323:2:124"},"nodeType":"YulFunctionCall","src":"9323:13:124"},"nodeType":"YulIf","src":"9320:91:124"},{"nodeType":"YulAssignment","src":"9420:121:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9436:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9455:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9463:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9451:3:124"},"nodeType":"YulFunctionCall","src":"9451:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"9468:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9447:3:124"},"nodeType":"YulFunctionCall","src":"9447:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9432:3:124"},"nodeType":"YulFunctionCall","src":"9432:104:124"},{"kind":"number","nodeType":"YulLiteral","src":"9538:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9428:3:124"},"nodeType":"YulFunctionCall","src":"9428:113:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9420:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8981:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8992:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9003:4:124","type":""}],"src":"8891:656:124"},{"body":{"nodeType":"YulBlock","src":"9683:335:124","statements":[{"body":{"nodeType":"YulBlock","src":"9730:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9739:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9742:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9732:6:124"},"nodeType":"YulFunctionCall","src":"9732:12:124"},"nodeType":"YulExpressionStatement","src":"9732:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9704:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9713:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9700:3:124"},"nodeType":"YulFunctionCall","src":"9700:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9725:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9696:3:124"},"nodeType":"YulFunctionCall","src":"9696:33:124"},"nodeType":"YulIf","src":"9693:53:124"},{"nodeType":"YulAssignment","src":"9755:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9771:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9765:5:124"},"nodeType":"YulFunctionCall","src":"9765:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9755:6:124"}]},{"nodeType":"YulAssignment","src":"9790:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9810:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9821:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9806:3:124"},"nodeType":"YulFunctionCall","src":"9806:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9800:5:124"},"nodeType":"YulFunctionCall","src":"9800:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9790:6:124"}]},{"nodeType":"YulAssignment","src":"9834:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9854:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9865:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9850:3:124"},"nodeType":"YulFunctionCall","src":"9850:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9844:5:124"},"nodeType":"YulFunctionCall","src":"9844:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9834:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9878:38:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9901:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9912:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9897:3:124"},"nodeType":"YulFunctionCall","src":"9897:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9891:5:124"},"nodeType":"YulFunctionCall","src":"9891:25:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9882:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9972:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9981:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9984:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9974:6:124"},"nodeType":"YulFunctionCall","src":"9974:12:124"},"nodeType":"YulExpressionStatement","src":"9974:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9938:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9949:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"9956:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9945:3:124"},"nodeType":"YulFunctionCall","src":"9945:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9935:2:124"},"nodeType":"YulFunctionCall","src":"9935:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9928:6:124"},"nodeType":"YulFunctionCall","src":"9928:43:124"},"nodeType":"YulIf","src":"9925:63:124"},{"nodeType":"YulAssignment","src":"9997:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10007:5:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9997:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9625:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9636:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9648:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9656:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9664:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9672:6:124","type":""}],"src":"9552:466:124"},{"body":{"nodeType":"YulBlock","src":"10218:729:124","statements":[{"nodeType":"YulAssignment","src":"10228:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10240:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10251:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10236:3:124"},"nodeType":"YulFunctionCall","src":"10236:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10228:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10271:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10288:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10282:5:124"},"nodeType":"YulFunctionCall","src":"10282:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10264:6:124"},"nodeType":"YulFunctionCall","src":"10264:32:124"},"nodeType":"YulExpressionStatement","src":"10264:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10316:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10327:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10312:3:124"},"nodeType":"YulFunctionCall","src":"10312:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10344:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10352:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10340:3:124"},"nodeType":"YulFunctionCall","src":"10340:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10334:5:124"},"nodeType":"YulFunctionCall","src":"10334:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10305:6:124"},"nodeType":"YulFunctionCall","src":"10305:54:124"},"nodeType":"YulExpressionStatement","src":"10305:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10379:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10390:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10375:3:124"},"nodeType":"YulFunctionCall","src":"10375:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10407:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10415:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10403:3:124"},"nodeType":"YulFunctionCall","src":"10403:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10397:5:124"},"nodeType":"YulFunctionCall","src":"10397:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10368:6:124"},"nodeType":"YulFunctionCall","src":"10368:54:124"},"nodeType":"YulExpressionStatement","src":"10368:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10442:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10453:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10438:3:124"},"nodeType":"YulFunctionCall","src":"10438:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10470:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10478:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10466:3:124"},"nodeType":"YulFunctionCall","src":"10466:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10460:5:124"},"nodeType":"YulFunctionCall","src":"10460:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10431:6:124"},"nodeType":"YulFunctionCall","src":"10431:54:124"},"nodeType":"YulExpressionStatement","src":"10431:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10505:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10516:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10501:3:124"},"nodeType":"YulFunctionCall","src":"10501:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10533:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10541:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10529:3:124"},"nodeType":"YulFunctionCall","src":"10529:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10523:5:124"},"nodeType":"YulFunctionCall","src":"10523:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10494:6:124"},"nodeType":"YulFunctionCall","src":"10494:54:124"},"nodeType":"YulExpressionStatement","src":"10494:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10568:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10579:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10564:3:124"},"nodeType":"YulFunctionCall","src":"10564:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10596:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10604:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10592:3:124"},"nodeType":"YulFunctionCall","src":"10592:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10586:5:124"},"nodeType":"YulFunctionCall","src":"10586:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10557:6:124"},"nodeType":"YulFunctionCall","src":"10557:54:124"},"nodeType":"YulExpressionStatement","src":"10557:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10642:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10627:3:124"},"nodeType":"YulFunctionCall","src":"10627:20:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10659:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10667:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10655:3:124"},"nodeType":"YulFunctionCall","src":"10655:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10649:5:124"},"nodeType":"YulFunctionCall","src":"10649:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10620:6:124"},"nodeType":"YulFunctionCall","src":"10620:54:124"},"nodeType":"YulExpressionStatement","src":"10620:54:124"},{"nodeType":"YulVariableDeclaration","src":"10683:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10713:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10721:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10709:3:124"},"nodeType":"YulFunctionCall","src":"10709:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10703:5:124"},"nodeType":"YulFunctionCall","src":"10703:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"10687:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10736:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10746:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10740:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10808:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10819:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10804:3:124"},"nodeType":"YulFunctionCall","src":"10804:20:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"10830:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10844:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10826:3:124"},"nodeType":"YulFunctionCall","src":"10826:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10797:6:124"},"nodeType":"YulFunctionCall","src":"10797:51:124"},"nodeType":"YulExpressionStatement","src":"10797:51:124"},{"nodeType":"YulVariableDeclaration","src":"10857:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10867:6:124","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10861:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10893:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10904:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10889:3:124"},"nodeType":"YulFunctionCall","src":"10889:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10923:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10931:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10919:3:124"},"nodeType":"YulFunctionCall","src":"10919:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10913:5:124"},"nodeType":"YulFunctionCall","src":"10913:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10937:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10909:3:124"},"nodeType":"YulFunctionCall","src":"10909:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10882:6:124"},"nodeType":"YulFunctionCall","src":"10882:59:124"},"nodeType":"YulExpressionStatement","src":"10882:59:124"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10187:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10198:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10209:4:124","type":""}],"src":"10023:924:124"},{"body":{"nodeType":"YulBlock","src":"11067:191:124","statements":[{"body":{"nodeType":"YulBlock","src":"11113:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11122:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11125:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11115:6:124"},"nodeType":"YulFunctionCall","src":"11115:12:124"},"nodeType":"YulExpressionStatement","src":"11115:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11088:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11097:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11084:3:124"},"nodeType":"YulFunctionCall","src":"11084:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11109:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11080:3:124"},"nodeType":"YulFunctionCall","src":"11080:32:124"},"nodeType":"YulIf","src":"11077:52:124"},{"nodeType":"YulAssignment","src":"11138:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11154:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11148:5:124"},"nodeType":"YulFunctionCall","src":"11148:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11138:6:124"}]},{"nodeType":"YulAssignment","src":"11173:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11193:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11204:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11189:3:124"},"nodeType":"YulFunctionCall","src":"11189:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11183:5:124"},"nodeType":"YulFunctionCall","src":"11183:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"11173:6:124"}]},{"nodeType":"YulAssignment","src":"11217:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11237:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11248:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11233:3:124"},"nodeType":"YulFunctionCall","src":"11233:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11227:5:124"},"nodeType":"YulFunctionCall","src":"11227:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"11217:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11017:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11028:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11040:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11048:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11056:6:124","type":""}],"src":"10952:306:124"},{"body":{"nodeType":"YulBlock","src":"11476:250:124","statements":[{"nodeType":"YulAssignment","src":"11486:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11498:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11509:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11494:3:124"},"nodeType":"YulFunctionCall","src":"11494:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11486:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11529:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11540:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11522:6:124"},"nodeType":"YulFunctionCall","src":"11522:25:124"},"nodeType":"YulExpressionStatement","src":"11522:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11567:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11578:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11563:3:124"},"nodeType":"YulFunctionCall","src":"11563:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"11583:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11556:6:124"},"nodeType":"YulFunctionCall","src":"11556:34:124"},"nodeType":"YulExpressionStatement","src":"11556:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11610:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11621:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11606:3:124"},"nodeType":"YulFunctionCall","src":"11606:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"11626:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11599:6:124"},"nodeType":"YulFunctionCall","src":"11599:34:124"},"nodeType":"YulExpressionStatement","src":"11599:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11653:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11664:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11649:3:124"},"nodeType":"YulFunctionCall","src":"11649:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"11669:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11642:6:124"},"nodeType":"YulFunctionCall","src":"11642:34:124"},"nodeType":"YulExpressionStatement","src":"11642:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11696:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11707:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11692:3:124"},"nodeType":"YulFunctionCall","src":"11692:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"11713:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11685:6:124"},"nodeType":"YulFunctionCall","src":"11685:35:124"},"nodeType":"YulExpressionStatement","src":"11685:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11413:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11424:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11432:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11440:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11448:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11456:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11467:4:124","type":""}],"src":"11263:463:124"},{"body":{"nodeType":"YulBlock","src":"11763:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11780:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11783:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11773:6:124"},"nodeType":"YulFunctionCall","src":"11773:88:124"},"nodeType":"YulExpressionStatement","src":"11773:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11877:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11880:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11870:6:124"},"nodeType":"YulFunctionCall","src":"11870:15:124"},"nodeType":"YulExpressionStatement","src":"11870:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11901:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11904:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11894:6:124"},"nodeType":"YulFunctionCall","src":"11894:15:124"},"nodeType":"YulExpressionStatement","src":"11894:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11731:184:124"},{"body":{"nodeType":"YulBlock","src":"11984:418:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11994:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12009:1:124","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"11998:7:124","type":""}]},{"nodeType":"YulAssignment","src":"12019:16:124","value":{"name":"power_1","nodeType":"YulIdentifier","src":"12028:7:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12019:5:124"}]},{"nodeType":"YulAssignment","src":"12044:13:124","value":{"name":"_base","nodeType":"YulIdentifier","src":"12052:5:124"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"12044:4:124"}]},{"body":{"nodeType":"YulBlock","src":"12108:288:124","statements":[{"body":{"nodeType":"YulBlock","src":"12213:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12215:16:124"},"nodeType":"YulFunctionCall","src":"12215:18:124"},"nodeType":"YulExpressionStatement","src":"12215:18:124"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12128:4:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12138:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"12206:4:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"12134:3:124"},"nodeType":"YulFunctionCall","src":"12134:77:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12125:2:124"},"nodeType":"YulFunctionCall","src":"12125:87:124"},"nodeType":"YulIf","src":"12122:113:124"},{"body":{"nodeType":"YulBlock","src":"12274:29:124","statements":[{"nodeType":"YulAssignment","src":"12276:25:124","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"12289:5:124"},{"name":"base","nodeType":"YulIdentifier","src":"12296:4:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"12285:3:124"},"nodeType":"YulFunctionCall","src":"12285:16:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12276:5:124"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12255:8:124"},{"name":"power_1","nodeType":"YulIdentifier","src":"12265:7:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12251:3:124"},"nodeType":"YulFunctionCall","src":"12251:22:124"},"nodeType":"YulIf","src":"12248:55:124"},{"nodeType":"YulAssignment","src":"12316:23:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12328:4:124"},{"name":"base","nodeType":"YulIdentifier","src":"12334:4:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"12324:3:124"},"nodeType":"YulFunctionCall","src":"12324:15:124"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"12316:4:124"}]},{"nodeType":"YulAssignment","src":"12352:34:124","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"12368:7:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"12377:8:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"12364:3:124"},"nodeType":"YulFunctionCall","src":"12364:22:124"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"12352:8:124"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12077:8:124"},{"name":"power_1","nodeType":"YulIdentifier","src":"12087:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12074:2:124"},"nodeType":"YulFunctionCall","src":"12074:21:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12096:3:124","statements":[]},"pre":{"nodeType":"YulBlock","src":"12070:3:124","statements":[]},"src":"12066:330:124"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"11948:5:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"11955:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"11968:5:124","type":""},{"name":"base","nodeType":"YulTypedName","src":"11975:4:124","type":""}],"src":"11920:482:124"},{"body":{"nodeType":"YulBlock","src":"12466:807:124","statements":[{"body":{"nodeType":"YulBlock","src":"12504:52:124","statements":[{"nodeType":"YulAssignment","src":"12518:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12527:1:124","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12518:5:124"}]},{"nodeType":"YulLeave","src":"12541:5:124"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12486:8:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12479:6:124"},"nodeType":"YulFunctionCall","src":"12479:16:124"},"nodeType":"YulIf","src":"12476:80:124"},{"body":{"nodeType":"YulBlock","src":"12589:52:124","statements":[{"nodeType":"YulAssignment","src":"12603:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12612:1:124","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12603:5:124"}]},{"nodeType":"YulLeave","src":"12626:5:124"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12575:4:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12568:6:124"},"nodeType":"YulFunctionCall","src":"12568:12:124"},"nodeType":"YulIf","src":"12565:76:124"},{"cases":[{"body":{"nodeType":"YulBlock","src":"12677:52:124","statements":[{"nodeType":"YulAssignment","src":"12691:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12700:1:124","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12691:5:124"}]},{"nodeType":"YulLeave","src":"12714:5:124"}]},"nodeType":"YulCase","src":"12670:59:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12675:1:124","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"12745:123:124","statements":[{"body":{"nodeType":"YulBlock","src":"12780:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12782:16:124"},"nodeType":"YulFunctionCall","src":"12782:18:124"},"nodeType":"YulExpressionStatement","src":"12782:18:124"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12765:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"12775:3:124","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12762:2:124"},"nodeType":"YulFunctionCall","src":"12762:17:124"},"nodeType":"YulIf","src":"12759:43:124"},{"nodeType":"YulAssignment","src":"12815:25:124","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12828:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"12838:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12824:3:124"},"nodeType":"YulFunctionCall","src":"12824:16:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12815:5:124"}]},{"nodeType":"YulLeave","src":"12853:5:124"}]},"nodeType":"YulCase","src":"12738:130:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12743:1:124","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"12657:4:124"},"nodeType":"YulSwitch","src":"12650:218:124"},{"body":{"nodeType":"YulBlock","src":"12966:70:124","statements":[{"nodeType":"YulAssignment","src":"12980:28:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12993:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"12999:8:124"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"12989:3:124"},"nodeType":"YulFunctionCall","src":"12989:19:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12980:5:124"}]},{"nodeType":"YulLeave","src":"13021:5:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12890:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"12896:2:124","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12887:2:124"},"nodeType":"YulFunctionCall","src":"12887:12:124"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12904:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"12914:2:124","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12901:2:124"},"nodeType":"YulFunctionCall","src":"12901:16:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12883:3:124"},"nodeType":"YulFunctionCall","src":"12883:35:124"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12927:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"12933:3:124","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12924:2:124"},"nodeType":"YulFunctionCall","src":"12924:13:124"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12942:8:124"},{"kind":"number","nodeType":"YulLiteral","src":"12952:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12939:2:124"},"nodeType":"YulFunctionCall","src":"12939:16:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12920:3:124"},"nodeType":"YulFunctionCall","src":"12920:36:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"12880:2:124"},"nodeType":"YulFunctionCall","src":"12880:77:124"},"nodeType":"YulIf","src":"12877:159:124"},{"nodeType":"YulVariableDeclaration","src":"13045:57:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"13087:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"13093:8:124"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"13068:18:124"},"nodeType":"YulFunctionCall","src":"13068:34:124"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"13049:7:124","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"13058:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13207:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13209:16:124"},"nodeType":"YulFunctionCall","src":"13209:18:124"},"nodeType":"YulExpressionStatement","src":"13209:18:124"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"13117:7:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13130:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"13198:6:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"13126:3:124"},"nodeType":"YulFunctionCall","src":"13126:79:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13114:2:124"},"nodeType":"YulFunctionCall","src":"13114:92:124"},"nodeType":"YulIf","src":"13111:118:124"},{"nodeType":"YulAssignment","src":"13238:29:124","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"13251:7:124"},{"name":"base_1","nodeType":"YulIdentifier","src":"13260:6:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"13247:3:124"},"nodeType":"YulFunctionCall","src":"13247:20:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"13238:5:124"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"12437:4:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"12443:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"12456:5:124","type":""}],"src":"12407:866:124"},{"body":{"nodeType":"YulBlock","src":"13348:61:124","statements":[{"nodeType":"YulAssignment","src":"13358:45:124","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"13388:4:124"},{"name":"exponent","nodeType":"YulIdentifier","src":"13394:8:124"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"13367:20:124"},"nodeType":"YulFunctionCall","src":"13367:36:124"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"13358:5:124"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"13319:4:124","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"13325:8:124","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"13338:5:124","type":""}],"src":"13278:131:124"},{"body":{"nodeType":"YulBlock","src":"13466:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"13585:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13587:16:124"},"nodeType":"YulFunctionCall","src":"13587:18:124"},"nodeType":"YulExpressionStatement","src":"13587:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13497:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13490:6:124"},"nodeType":"YulFunctionCall","src":"13490:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13483:6:124"},"nodeType":"YulFunctionCall","src":"13483:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13505:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13512:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"13580:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"13508:3:124"},"nodeType":"YulFunctionCall","src":"13508:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13502:2:124"},"nodeType":"YulFunctionCall","src":"13502:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13479:3:124"},"nodeType":"YulFunctionCall","src":"13479:105:124"},"nodeType":"YulIf","src":"13476:131:124"},{"nodeType":"YulAssignment","src":"13616:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13631:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"13634:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"13627:3:124"},"nodeType":"YulFunctionCall","src":"13627:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"13616:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13445:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"13448:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"13454:7:124","type":""}],"src":"13414:228:124"},{"body":{"nodeType":"YulBlock","src":"13695:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"13722:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13724:16:124"},"nodeType":"YulFunctionCall","src":"13724:18:124"},"nodeType":"YulExpressionStatement","src":"13724:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13711:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13718:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"13714:3:124"},"nodeType":"YulFunctionCall","src":"13714:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13708:2:124"},"nodeType":"YulFunctionCall","src":"13708:13:124"},"nodeType":"YulIf","src":"13705:39:124"},{"nodeType":"YulAssignment","src":"13753:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13764:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"13767:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13760:3:124"},"nodeType":"YulFunctionCall","src":"13760:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"13753:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13678:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"13681:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"13687:3:124","type":""}],"src":"13647:128:124"},{"body":{"nodeType":"YulBlock","src":"13954:175:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13971:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13982:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13964:6:124"},"nodeType":"YulFunctionCall","src":"13964:21:124"},"nodeType":"YulExpressionStatement","src":"13964:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14005:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14016:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14001:3:124"},"nodeType":"YulFunctionCall","src":"14001:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14021:2:124","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13994:6:124"},"nodeType":"YulFunctionCall","src":"13994:30:124"},"nodeType":"YulExpressionStatement","src":"13994:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14044:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14055:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14040:3:124"},"nodeType":"YulFunctionCall","src":"14040:18:124"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"14060:27:124","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14033:6:124"},"nodeType":"YulFunctionCall","src":"14033:55:124"},"nodeType":"YulExpressionStatement","src":"14033:55:124"},{"nodeType":"YulAssignment","src":"14097:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14109:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14120:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14105:3:124"},"nodeType":"YulFunctionCall","src":"14105:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14097:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13931:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13945:4:124","type":""}],"src":"13780:349:124"},{"body":{"nodeType":"YulBlock","src":"14229:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"14275:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14284:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14287:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14277:6:124"},"nodeType":"YulFunctionCall","src":"14277:12:124"},"nodeType":"YulExpressionStatement","src":"14277:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14250:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14259:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14246:3:124"},"nodeType":"YulFunctionCall","src":"14246:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14271:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14242:3:124"},"nodeType":"YulFunctionCall","src":"14242:32:124"},"nodeType":"YulIf","src":"14239:52:124"},{"nodeType":"YulVariableDeclaration","src":"14300:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14319:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14313:5:124"},"nodeType":"YulFunctionCall","src":"14313:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14304:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14363:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14338:24:124"},"nodeType":"YulFunctionCall","src":"14338:31:124"},"nodeType":"YulExpressionStatement","src":"14338:31:124"},{"nodeType":"YulAssignment","src":"14378:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14388:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14378:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14195:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14206:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14218:6:124","type":""}],"src":"14134:265:124"},{"body":{"nodeType":"YulBlock","src":"14516:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"14562:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14571:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14574:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14564:6:124"},"nodeType":"YulFunctionCall","src":"14564:12:124"},"nodeType":"YulExpressionStatement","src":"14564:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14537:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14546:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14533:3:124"},"nodeType":"YulFunctionCall","src":"14533:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14558:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14529:3:124"},"nodeType":"YulFunctionCall","src":"14529:32:124"},"nodeType":"YulIf","src":"14526:52:124"},{"nodeType":"YulVariableDeclaration","src":"14587:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14606:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14600:5:124"},"nodeType":"YulFunctionCall","src":"14600:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14591:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14650:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14625:24:124"},"nodeType":"YulFunctionCall","src":"14625:31:124"},"nodeType":"YulExpressionStatement","src":"14625:31:124"},{"nodeType":"YulAssignment","src":"14665:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14675:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14665:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14482:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14493:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14505:6:124","type":""}],"src":"14404:282:124"},{"body":{"nodeType":"YulBlock","src":"14772:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"14818:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14827:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14830:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14820:6:124"},"nodeType":"YulFunctionCall","src":"14820:12:124"},"nodeType":"YulExpressionStatement","src":"14820:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14793:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14802:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14789:3:124"},"nodeType":"YulFunctionCall","src":"14789:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14814:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14785:3:124"},"nodeType":"YulFunctionCall","src":"14785:32:124"},"nodeType":"YulIf","src":"14782:52:124"},{"nodeType":"YulVariableDeclaration","src":"14843:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14862:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14856:5:124"},"nodeType":"YulFunctionCall","src":"14856:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14847:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14906:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14881:24:124"},"nodeType":"YulFunctionCall","src":"14881:31:124"},"nodeType":"YulExpressionStatement","src":"14881:31:124"},{"nodeType":"YulAssignment","src":"14921:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14931:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14921:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14738:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14749:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14761:6:124","type":""}],"src":"14691:251:124"},{"body":{"nodeType":"YulBlock","src":"15076:168:124","statements":[{"nodeType":"YulAssignment","src":"15086:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15098:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15109:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15094:3:124"},"nodeType":"YulFunctionCall","src":"15094:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15086:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15128:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"15139:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15121:6:124"},"nodeType":"YulFunctionCall","src":"15121:25:124"},"nodeType":"YulExpressionStatement","src":"15121:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15166:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15177:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15162:3:124"},"nodeType":"YulFunctionCall","src":"15162:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15186:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15194:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15182:3:124"},"nodeType":"YulFunctionCall","src":"15182:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15155:6:124"},"nodeType":"YulFunctionCall","src":"15155:83:124"},"nodeType":"YulExpressionStatement","src":"15155:83:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15037:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15048:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15056:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15067:4:124","type":""}],"src":"14947:297:124"},{"body":{"nodeType":"YulBlock","src":"15298:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"15320:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15322:16:124"},"nodeType":"YulFunctionCall","src":"15322:18:124"},"nodeType":"YulExpressionStatement","src":"15322:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15314:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"15317:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15311:2:124"},"nodeType":"YulFunctionCall","src":"15311:8:124"},"nodeType":"YulIf","src":"15308:34:124"},{"nodeType":"YulAssignment","src":"15351:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15363:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"15366:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15359:3:124"},"nodeType":"YulFunctionCall","src":"15359:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15351:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15280:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15283:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15289:4:124","type":""}],"src":"15249:125:124"},{"body":{"nodeType":"YulBlock","src":"15427:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15437:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15447:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15441:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15490:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15505:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15508:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15501:3:124"},"nodeType":"YulFunctionCall","src":"15501:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15494:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15520:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15535:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15538:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15531:3:124"},"nodeType":"YulFunctionCall","src":"15531:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15524:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15575:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15577:16:124"},"nodeType":"YulFunctionCall","src":"15577:18:124"},"nodeType":"YulExpressionStatement","src":"15577:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15556:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15565:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15569:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15561:3:124"},"nodeType":"YulFunctionCall","src":"15561:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15553:2:124"},"nodeType":"YulFunctionCall","src":"15553:21:124"},"nodeType":"YulIf","src":"15550:47:124"},{"nodeType":"YulAssignment","src":"15606:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15617:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15622:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15613:3:124"},"nodeType":"YulFunctionCall","src":"15613:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15606:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15410:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15413:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15419:3:124","type":""}],"src":"15379:253:124"},{"body":{"nodeType":"YulBlock","src":"15811:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15828:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15839:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15821:6:124"},"nodeType":"YulFunctionCall","src":"15821:21:124"},"nodeType":"YulExpressionStatement","src":"15821:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15862:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15873:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15858:3:124"},"nodeType":"YulFunctionCall","src":"15858:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"15878:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15851:6:124"},"nodeType":"YulFunctionCall","src":"15851:30:124"},"nodeType":"YulExpressionStatement","src":"15851:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15901:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15912:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15897:3:124"},"nodeType":"YulFunctionCall","src":"15897:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"15917:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15890:6:124"},"nodeType":"YulFunctionCall","src":"15890:62:124"},"nodeType":"YulExpressionStatement","src":"15890:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15972:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15983:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15968:3:124"},"nodeType":"YulFunctionCall","src":"15968:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15988:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15961:6:124"},"nodeType":"YulFunctionCall","src":"15961:37:124"},"nodeType":"YulExpressionStatement","src":"15961:37:124"},{"nodeType":"YulAssignment","src":"16007:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16019:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16030:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16015:3:124"},"nodeType":"YulFunctionCall","src":"16015:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16007:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15788:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15802:4:124","type":""}],"src":"15637:403:124"},{"body":{"nodeType":"YulBlock","src":"16077:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16094:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16097:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16087:6:124"},"nodeType":"YulFunctionCall","src":"16087:88:124"},"nodeType":"YulExpressionStatement","src":"16087:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16191:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16194:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16184:6:124"},"nodeType":"YulFunctionCall","src":"16184:15:124"},"nodeType":"YulExpressionStatement","src":"16184:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16218:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16208:6:124"},"nodeType":"YulFunctionCall","src":"16208:15:124"},"nodeType":"YulExpressionStatement","src":"16208:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"16045:184:124"},{"body":{"nodeType":"YulBlock","src":"16280:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"16311:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16332:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16335:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16325:6:124"},"nodeType":"YulFunctionCall","src":"16325:88:124"},"nodeType":"YulExpressionStatement","src":"16325:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16433:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16436:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16426:6:124"},"nodeType":"YulFunctionCall","src":"16426:15:124"},"nodeType":"YulExpressionStatement","src":"16426:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16461:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16464:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16454:6:124"},"nodeType":"YulFunctionCall","src":"16454:15:124"},"nodeType":"YulExpressionStatement","src":"16454:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16300:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16293:6:124"},"nodeType":"YulFunctionCall","src":"16293:9:124"},"nodeType":"YulIf","src":"16290:189:124"},{"nodeType":"YulAssignment","src":"16488:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16497:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"16500:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"16493:3:124"},"nodeType":"YulFunctionCall","src":"16493:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"16488:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"16265:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"16268:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"16274:1:124","type":""}],"src":"16234:274:124"}]},"contents":"{\n    { }\n    function allocate_memory_2073() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xc0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_2075() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x80)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0120)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteWithdrawParams_$24052_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 320) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80), 0xc0) { revert(0, 0) }\n        let value := allocate_memory_2073()\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        mstore(value, value_1)\n        mstore(add(value, 32), calldataload(add(headStart, 160)))\n        let value_2 := calldataload(add(headStart, 0xc0))\n        validator_revert_address(value_2)\n        mstore(add(value, 64), value_2)\n        mstore(add(value, 96), calldataload(add(headStart, 224)))\n        let value_3 := calldataload(add(headStart, 256))\n        validator_revert_address(value_3)\n        mstore(add(value, 128), value_3)\n        mstore(add(value, 160), abi_decode_uint8(add(headStart, 288)))\n        value4 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_struct$_ExecuteSupplyParams_$24001_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 224) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0), 0x80) { revert(0, 0) }\n        let value := allocate_memory_2075()\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        mstore(value, value_1)\n        mstore(add(value, 32), calldataload(add(headStart, 0x80)))\n        let value_2 := calldataload(add(headStart, 160))\n        validator_revert_address(value_2)\n        mstore(add(value, 64), value_2)\n        let value_3 := calldataload(add(headStart, 192))\n        if iszero(eq(value_3, and(value_3, 0xffff))) { revert(0, 0) }\n        mstore(add(value, 96), value_3)\n        value3 := value\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$t_struct$_FinalizeTransferParams_$24078_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 416) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let _2 := 0x0120\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80), _2) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_address(add(headStart, 128)))\n        mstore(add(value, 32), abi_decode_address(add(headStart, 160)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 192)))\n        mstore(add(value, 96), calldataload(add(headStart, 224)))\n        let _3 := 256\n        mstore(add(value, 128), calldataload(add(headStart, _3)))\n        mstore(add(value, 160), calldataload(add(headStart, _2)))\n        mstore(add(value, 192), calldataload(add(headStart, 320)))\n        mstore(add(value, 224), abi_decode_address(add(headStart, 352)))\n        mstore(add(value, _3), abi_decode_uint8(add(headStart, 384)))\n        value4 := value\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$t_struct$_UserConfigurationMap_$23916_storage_ptrt_addresst_boolt_uint256t_addresst_uint8(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n    {\n        if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        validator_revert_address(value)\n        value4 := value\n        let value_1 := calldataload(add(headStart, 160))\n        validator_revert_bool(value_1)\n        value5 := value_1\n        value6 := calldataload(add(headStart, 192))\n        let value_2 := calldataload(add(headStart, 224))\n        validator_revert_address(value_2)\n        value7 := value_2\n        value8 := abi_decode_uint8(add(headStart, 256))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063186dea441461005b5780631913f1611461008d5780638a5dadd1146100af578063bf697a26146100cf575b600080fd5b81801561006757600080fd5b5061007b6100763660046136a7565b6100ef565b60405190815260200160405180910390f35b81801561009957600080fd5b506100ad6100a836600461377e565b6104a2565b005b8180156100bb57600080fd5b506100ad6100ca366004613832565b610751565b8180156100db57600080fd5b506100ad6100ea36600461393b565b610a2d565b805173ffffffffffffffffffffffffffffffffffffffff1660009081526020869052604081208161011f82610cf9565b905061012b8282610f12565b6101008101516101e08201516040517f1da24f3e0000000000000000000000000000000000000000000000000000000081523360048201526000926101d692909173ffffffffffffffffffffffffffffffffffffffff90911690631da24f3e906024015b602060405180830381865afa1580156101ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d091906139c6565b90610f9d565b60208601519091507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114156102095750805b610214838284610ff4565b85516102269085908590600085611211565b600384015460408051602081019091528854815260009161026491907501000000000000000000000000000000000000000000900461ffff16611552565b905080801561027257508282145b156102eb5760038501546102a69089907501000000000000000000000000000000000000000000900461ffff1660006115dd565b8651604051339173ffffffffffffffffffffffffffffffffffffffff16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b6101e084015160408089015161010087015191517fd7020d0a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91821660248201526044810186905260648101929092529091169063d7020d0a90608401600060405180830381600087803b15801561037b57600080fd5b505af115801561038f573d6000803e3d6000fd5b505050508080156103d1575060408051602081019091528854908190527f55555555555555555555555555555555555555555555555555555555555555551615155b1561040c5761040c8b8b8b8b6040518060200160405290816000820154815250508b60000151338d606001518e608001518f60a00151611674565b866040015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16886000015173ffffffffffffffffffffffffffffffffffffffff167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78560405161048a91815260200190565b60405180910390a45093505050505b95945050505050565b805173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120906104d282610cf9565b90506104de8282610f12565b6104ed81838560200151611830565b825160208401516105049184918491906000611211565b6101e0810151602084015184516105369273ffffffffffffffffffffffffffffffffffffffff90911691339190611bb8565b6101e0810151604080850151602086015161010085015192517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff928316602482015260448101919091526064810192909252600092169063b3f1c93d906084016020604051808303816000875af11580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f691906139df565b905080156106ab57610615878787856101c00151866101e00151611c9a565b156106ab5760038301546106499086907501000000000000000000000000000000000000000000900461ffff1660016115dd565b836040015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b836060015161ffff16846040015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f2b627736bca15cd5381dcf80b0bf11fd197d01a037c52b927a881a10fb73ba6133886020015160405161074092919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450505050505050565b805173ffffffffffffffffffffffffffffffffffffffff16600090815260208690526040902061078081611eda565b600381015460408301516020840151750100000000000000000000000000000000000000000090920461ffff169173ffffffffffffffffffffffffffffffffffffffff9182169116148015906107d95750606083015115155b15610a245760208084015173ffffffffffffffffffffffffffffffffffffffff1660009081528582526040908190208151928301909152805482529061081f9083611552565b156109575760408051602081019091528154908190527f555555555555555555555555555555555555555555555555555555555555555516156108d8576108d8888888886000896020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806020016040529081600082015481525050886000015189602001518a60c001518b60e001518c6101000151611674565b836060015184608001511415610957576108f4818360006115dd565b836020015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b60a0840151610a225760408085015173ffffffffffffffffffffffffffffffffffffffff908116600090815260208881529083902083519182019093528554815260048601546109ad928c928c92869216611c9a565b15610a20576109be818460016115dd565b846040015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b505b505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208a90526040812090610a5c82610cf9565b6101e08101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015291925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af791906139c6565b9050610b038282611f62565b600383015460408051602081019091528a548152610b3d917501000000000000000000000000000000000000000000900461ffff16611552565b15158715151415610b5057505050610a20565b8615610c5557610b678c8c8b856101c00151612107565b6040518060400160405280600281526020017f363200000000000000000000000000000000000000000000000000000000000081525090610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b60405180910390fd5b506003830154610c0e908a907501000000000000000000000000000000000000000000900461ffff1660016115dd565b604051339073ffffffffffffffffffffffffffffffffffffffff8a16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610ceb565b6003830154610c84908a907501000000000000000000000000000000000000000000900461ffff1660006115dd565b604080516020810190915289548152610ca7908d908d908d908c338c8c8c611674565b604051339073ffffffffffffffffffffffffffffffffffffffff8a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050505050505050505050565b610d016134cf565b610d096134cf565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a91906139c6565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190613a6f565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610f41575050565b610f4b82826121a4565b610f5582826122c6565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517610fd257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60408051808201909152600281527f3236000000000000000000000000000000000000000000000000000000000000602082015282611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f33320000000000000000000000000000000000000000000000000000000000006020820152818311156110d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600080611125856101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061119b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b505050505050565b61123c6040518060800160405280600081526020016000815260200160008152602001600081525090565b610140850151602086015161125091610f9d565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916113b19190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa1580156113ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f29190613aba565b604084015260208301528082526114089061244b565b6001870180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055602081015161144b9061244b565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161149c9061244b565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106115c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50508151600182811b81019190911c1615155b92915050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526080831061164c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600182811b81011b81156116665783548117845561166e565b835481191684555b50505050565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260208b8152604080832081516102008101835281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821695830195909552700100000000000000000000000000000000908190048516938201939093526002820154808516606083015283900484166080820152600382015480851660a083015283810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015486166101008201526005820154861661012082015260068201548616610140820152600782015490951661016086015260088101548084166101808701529190910482166101a085015260090154166101c08301526117ae8b8b8b8b8a888b8b6124f1565b9150508015806117c2575081515161ffff16155b6040518060400160405280600281526020017f353700000000000000000000000000000000000000000000000000000000000081525090610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b60408051808201909152600281527f323600000000000000000000000000000000000000000000000000000000000060208201528161189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060008060006118f3866101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9450505092509250826040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061196a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f3239000000000000000000000000000000000000000000000000000000000000602082015281156119d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528215611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b506101c08601515160741c640fffffffff16801580611b4a57506101c08701515160301c60ff16611a7890600a613c37565b611a829082613c43565b85611b3d8961010001518960080160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168b6101e0015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3391906139c6565b6101d09190613c80565b611b479190613c80565b11155b6040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525090610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1611c23573d6000803e3d6000fd5b50611c2d856125ec565b611c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401610bd5565b5050505050565b815160009060d41c64ffffffffff1615611ec45760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1f9190613c98565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190613c98565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfe9190613c98565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa158015611e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb491906139df565b611ec2576000915050610499565b505b611ed086868686612107565b9695505050505050565b60408051602080820183528354918290528251808401909352600283527f3239000000000000000000000000000000000000000000000000000000000000908301526710000000000000001615611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5050565b60408051808201909152600281527f3433000000000000000000000000000000000000000000000000000000000000602082015281611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600080612023846101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090612099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b6000612115825161ffff1690565b6121215750600061219c565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166121605750600161219c565b60408051602081019091528354815260009061217d9087876126b8565b50509050801580156121985750825160d41c64ffffffffff16155b9150505b949350505050565b610160810151156122345760006121c5826101600151836102400151612770565b90506121de8260e0015182610f9d90919063ffffffff16565b61010083018190526121ef9061244b565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611f5e5760006122518261018001518361024001516127ad565b905061226b82610120015182610f9d90919063ffffffff16565b610140830181905261227c9061244b565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b6122ff6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161230e57505050565b610120820151825161231f91610f9d565b6020820152610140820151825161233591610f9d565b6040820152606082015161026083015161024084015161235d92919064ffffffffff166127c1565b60608201819052604083015161237291610f9d565b80825260208201516080840151604084015161238e9190613c80565b6123989190613cb5565b6123a29190613cb5565b608082018190526101a08301516123b99190612908565b60a0820181905215612446576123e96123e48361010001518360a0015161294b90919063ffffffff16565b61244b565b60088401805460009061240f9084906fffffffffffffffffffffffffffffffff16613ccc565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b60006fffffffffffffffffffffffffffffffff8211156124ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610bd5565b5090565b6000806000806125588c8c8c6040518060a001604052808e81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018c60ff1681525061298a565b9550955050505050670de0b6b3a76400008210156040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906125da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50909b909a5098505050505050505050565b600061262c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d801561266b57602081146126a5576126667f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125f3565b6126b2565b823b61269c5761269c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125f3565b600191506126b2565b3d6000803e600051151591505b50919050565b60008060006126c686612ef4565b1561275d5760006126f7877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa612f38565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015612759576001955090935091506127679050565b5050505b5060009150819050805b93509350939050565b60008061278464ffffffffff841642613cb5565b61278e9085613c43565b6301e133809004905061219c816b033b2e3c9fd0803ce8000000613c80565b60006127ba8383426127c1565b9392505050565b6000806127d564ffffffffff851684613cb5565b9050806127f1576b033b2e3c9fd0803ce80000009150506127ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161282757600061282c565b600285035b925066038882915c40006128408a80610f9d565b8161284d5761284d613d00565b0491506301e1338061285f838b610f9d565b8161286c5761286c613d00565b04905060008261287c8688613c43565b6128869190613c43565b6002900490506000828561289a888a613c43565b6128a49190613c43565b6128ae9190613c43565b60069004905080826301e133806128c58a8f613c43565b6128cf9190613d2f565b6128e5906b033b2e3c9fd0803ce8000000613c80565b6128ef9190613c80565b6128f99190613c80565b9b9a5050505050505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761293d57600080fd5b506127109102611388010490565b600081156b033b2e3c9fd0803ce80000006002840419048411171561296f57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6000806000806000806129a08760000151511590565b156129dc5750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081612ee7565b612a8b60405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615612ad057608088015160ff16600090815260208a9052604090206060890151612abd9190612f7c565b6101808401526101c08301526101a08201525b87602001518160c001511015612def5760c08101518851612af09161305b565b612b045760c0810180516001019052612ad0565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052612b4a5760c0810180516001019052612ad0565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590612be05750816101e00151896080015160ff16145b612c845760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7f91906139c6565b612c8b565b8161018001515b825260a082015115801590612cab575060c08201518951612cab91611552565b15612d9b57612cc8896040015182846000015185602001516130e0565b6040830181905261010083018051612ce1908390613c80565b90525060808901516101e0830151612cfc9160ff169061317d565b1515610240830152608082015115612d5257816102400151612d22578160800151612d29565b816101a001515b8260400151612d389190613c43565b8261014001818151612d4a9190613c80565b905250612d5b565b60016102208301525b816102400151612d6f578160a00151612d76565b816101c001515b8260400151612d859190613c43565b8261016001818151612d979190613c80565b9052505b60c08201518951612dab9161318e565b15612dde57612dc889604001518284600001518560200151613210565b8261012001818151612dda9190613c80565b9052505b5060c0810180516001019052612ad0565b610100810151612e00576000612e1b565b80610100015181610140015181612e1957612e19613d00565b045b610140820152610100810151612e32576000612e4d565b80610100015181610160015181612e4b57612e4b613d00565b045b61016082015261012081015115612e8f57612e8a816101200151612e8483610160015184610100015161290890919063ffffffff16565b90613390565b612eb1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1680158015906127ba5750612f30600182613cb5565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c90811561049957600101612f67565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015613040576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015613019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303d91906139c6565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106130cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5050905160019190911b1c600316151590565b6000806130ec856133c7565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792613156928692911690631da24f3e9060240161018f565b6131609190613c43565b905083818161317157613171613d00565b04979650505050505050565b600082158015906127ba5750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310613200576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015613286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132aa91906139c6565b905080156132c8576132c56132be8661344b565b8290610f9d565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa15801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e91906139c6565b6133689082613c80565b90506133748185613c43565b905082818161338557613385613d00565b049695505050505050565b60008115670de0b6b3a7640000600284041904841117156133b057600080fd5b50670de0b6b3a76400009190910260028204010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561340d575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546127ba906fffffffffffffffffffffffffffffffff808216916101d0917001000000000000000000000000000000009091041684612770565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613491575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546127ba906fffffffffffffffffffffffffffffffff808216916101d09170010000000000000000000000000000000090910416846127ad565b60405180610280016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016135536040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b60405160c0810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516080810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461368357600080fd5b50565b803561369181613661565b919050565b803560ff8116811461369157600080fd5b60008060008060008587036101408112156136c157600080fd5b8635955060208701359450604087013593506060870135925060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808201121561370a57600080fd5b5061371361357c565b608087013561372181613661565b815260a0870135602082015260c087013561373b81613661565b604082015260e0870135606082015261010087013561375981613661565b608082015261376b6101208801613696565b60a0820152809150509295509295909350565b60008060008084860360e081121561379557600080fd5b85359450602086013593506040860135925060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0820112156137d757600080fd5b506137e06135cc565b60608601356137ee81613661565b81526080860135602082015260a086013561380881613661565b604082015260c086013561ffff8116811461382257600080fd5b6060820152939692955090935050565b60008060008060008587036101a081121561384c57600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301121561389757600080fd5b61389f613616565b91506138ad60808901613686565b82526138bb60a08901613686565b60208301526138cc60c08901613686565b604083015260e088013560608301526101008089013560808401528189013560a084015261014089013560c08401526139086101608a01613686565b60e084015261391a6101808a01613696565b9083015250949793965091945092919050565b801515811461368357600080fd5b60008060008060008060008060006101208a8c03121561395a57600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a013561398181613661565b945060a08a01356139918161392d565b935060c08a0135925060e08a01356139a881613661565b91506139b76101008b01613696565b90509295985092959850929598565b6000602082840312156139d857600080fd5b5051919050565b6000602082840312156139f157600080fd5b81516127ba8161392d565b600060208083528351808285015260005b81811015613a2957858101830151858201604001528201613a0d565b81811115613a3b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060008060808587031215613a8557600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613aaf57600080fd5b939692955090935050565b600080600060608486031215613acf57600080fd5b8351925060208401519150604084015190509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115613b7057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613b5657613b56613ae8565b80851615613b6357918102915b93841c9390800290613b1c565b509250929050565b600082613b87575060016115d7565b81613b94575060006115d7565b8160018114613baa5760028114613bb457613bd0565b60019150506115d7565b60ff841115613bc557613bc5613ae8565b50506001821b6115d7565b5060208310610133831016604e8410600b8410161715613bf3575081810a6115d7565b613bfd8383613b17565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613c2f57613c2f613ae8565b029392505050565b60006127ba8383613b78565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7b57613c7b613ae8565b500290565b60008219821115613c9357613c93613ae8565b500190565b600060208284031215613caa57600080fd5b81516127ba81613661565b600082821015613cc757613cc7613ae8565b500390565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613cf757613cf7613ae8565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613d65577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea264697066735822122084824e7acd190a976cdc9a030eadf0d5ef4b64ea3edb3ca4034ffa814dcbe68564736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x186DEA44 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x1913F161 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x8A5DADD1 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xBF697A26 EQ PUSH2 0xCF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x36A7 JUMP JUMPDEST PUSH2 0xEF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x377E JUMP JUMPDEST PUSH2 0x4A2 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x3832 JUMP JUMPDEST PUSH2 0x751 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xEA CALLDATASIZE PUSH1 0x4 PUSH2 0x393B JUMP JUMPDEST PUSH2 0xA2D JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x11F DUP3 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP PUSH2 0x12B DUP3 DUP3 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x1E0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP3 PUSH2 0x1D6 SWAP3 SWAP1 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D0 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO PUSH2 0x209 JUMPI POP DUP1 JUMPDEST PUSH2 0x214 DUP4 DUP3 DUP5 PUSH2 0xFF4 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x226 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x0 DUP6 PUSH2 0x1211 JUMP JUMPDEST PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP9 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x264 SWAP2 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x1552 JUMP JUMPDEST SWAP1 POP DUP1 DUP1 ISZERO PUSH2 0x272 JUMPI POP DUP3 DUP3 EQ JUMPDEST ISZERO PUSH2 0x2EB JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0x2A6 SWAP1 DUP10 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH2 0x100 DUP8 ADD MLOAD SWAP2 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 ISZERO PUSH2 0x3D1 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP9 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x40C JUMPI PUSH2 0x40C DUP12 DUP12 DUP12 DUP12 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP12 PUSH1 0x0 ADD MLOAD CALLER DUP14 PUSH1 0x60 ADD MLOAD DUP15 PUSH1 0x80 ADD MLOAD DUP16 PUSH1 0xA0 ADD MLOAD PUSH2 0x1674 JUMP JUMPDEST DUP7 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3115D1449A7B732C986CBA18244E897A450F61E1BB8D589CD2E69E6C8924F9F7 DUP6 PUSH1 0x40 MLOAD PUSH2 0x48A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP4 POP POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x4D2 DUP3 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4DE DUP3 DUP3 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x4ED DUP2 DUP4 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1830 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x504 SWAP2 DUP5 SWAP2 DUP5 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x1211 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD DUP5 MLOAD PUSH2 0x536 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 CALLER SWAP2 SWAP1 PUSH2 0x1BB8 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD SWAP3 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x64 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5F6 SWAP2 SWAP1 PUSH2 0x39DF JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x6AB JUMPI PUSH2 0x615 DUP8 DUP8 DUP8 DUP6 PUSH2 0x1C0 ADD MLOAD DUP7 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1C9A JUMP JUMPDEST ISZERO PUSH2 0x6AB JUMPI PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0x649 SWAP1 DUP7 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0xFFFF AND DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2B627736BCA15CD5381DCF80B0BF11FD197D01A037C52B927A881A10FB73BA61 CALLER DUP9 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x740 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x780 DUP2 PUSH2 0x1EDA JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 SWAP3 DIV PUSH2 0xFFFF AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x7D9 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xA24 JUMPI PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE DUP6 DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 SLOAD DUP3 MSTORE SWAP1 PUSH2 0x81F SWAP1 DUP4 PUSH2 0x1552 JUMP JUMPDEST ISZERO PUSH2 0x957 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP2 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO PUSH2 0x8D8 JUMPI PUSH2 0x8D8 DUP9 DUP9 DUP9 DUP9 PUSH1 0x0 DUP10 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD PUSH2 0x1674 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x80 ADD MLOAD EQ ISZERO PUSH2 0x957 JUMPI PUSH2 0x8F4 DUP2 DUP4 PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0xA22 JUMPI PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH1 0x4 DUP7 ADD SLOAD PUSH2 0x9AD SWAP3 DUP13 SWAP3 DUP13 SWAP3 DUP7 SWAP3 AND PUSH2 0x1C9A JUMP JUMPDEST ISZERO PUSH2 0xA20 JUMPI PUSH2 0x9BE DUP2 DUP5 PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST POP JUMPDEST POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xA5C DUP3 PUSH2 0xCF9 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF7 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 POP PUSH2 0xB03 DUP3 DUP3 PUSH2 0x1F62 JUMP JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP11 SLOAD DUP2 MSTORE PUSH2 0xB3D SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x1552 JUMP JUMPDEST ISZERO ISZERO DUP8 ISZERO ISZERO EQ ISZERO PUSH2 0xB50 JUMPI POP POP POP PUSH2 0xA20 JUMP JUMPDEST DUP7 ISZERO PUSH2 0xC55 JUMPI PUSH2 0xB67 DUP13 DUP13 DUP12 DUP6 PUSH2 0x1C0 ADD MLOAD PUSH2 0x2107 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3632000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xBDE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0xC0E SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0xC84 SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP10 SLOAD DUP2 MSTORE PUSH2 0xCA7 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP13 CALLER DUP13 DUP13 DUP13 PUSH2 0x1674 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD01 PUSH2 0x34CF JUMP JUMPDEST PUSH2 0xD09 PUSH2 0x34CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE5A SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEDF SWAP2 SWAP1 PUSH2 0x3A6F JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0xF41 JUMPI POP POP JUMP JUMPDEST PUSH2 0xF4B DUP3 DUP3 PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0xF55 DUP3 DUP3 PUSH2 0x22C6 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xFD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH2 0x1060 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3332000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 DUP4 GT ISZERO PUSH2 0x10D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x1125 DUP6 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x119B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x1209 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x123C PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1250 SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x13B1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F2 SWAP2 SWAP1 PUSH2 0x3ABA JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1408 SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x144B SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x149C SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x15C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SWAP2 SWAP1 SWAP2 SHR AND ISZERO ISZERO JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x164C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x1666 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x166E JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x200 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP6 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP6 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP6 AND PUSH1 0x60 DUP4 ADD MSTORE DUP4 SWAP1 DIV DUP5 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP6 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP4 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP7 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP7 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP7 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP6 AND PUSH2 0x160 DUP7 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP5 AND PUSH2 0x180 DUP8 ADD MSTORE SWAP2 SWAP1 SWAP2 DIV DUP3 AND PUSH2 0x1A0 DUP6 ADD MSTORE PUSH1 0x9 ADD SLOAD AND PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x17AE DUP12 DUP12 DUP12 DUP12 DUP11 DUP9 DUP12 DUP12 PUSH2 0x24F1 JUMP JUMPDEST SWAP2 POP POP DUP1 ISZERO DUP1 PUSH2 0x17C2 JUMPI POP DUP2 MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xCEB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18F3 DUP7 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP SWAP3 POP SWAP3 POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x196A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x19D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND DUP1 ISZERO DUP1 PUSH2 0x1B4A JUMPI POP PUSH2 0x1C0 DUP8 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x1A78 SWAP1 PUSH1 0xA PUSH2 0x3C37 JUMP JUMPDEST PUSH2 0x1A82 SWAP1 DUP3 PUSH2 0x3C43 JUMP JUMPDEST DUP6 PUSH2 0x1B3D DUP10 PUSH2 0x100 ADD MLOAD DUP10 PUSH1 0x8 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B33 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x1D0 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x1B47 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST GT ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x1C23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1C2D DUP6 PUSH2 0x25EC JUMP JUMPDEST PUSH2 0x1C93 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xBD5 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x1EC4 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D1F SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D8D SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DFE SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EB4 SWAP2 SWAP1 PUSH2 0x39DF JUMP JUMPDEST PUSH2 0x1EC2 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x499 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1ED0 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2107 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP4 SLOAD SWAP2 DUP3 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP4 ADD MSTORE PUSH8 0x1000000000000000 AND ISZERO PUSH2 0x1F5E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3433000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x1FCE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x2023 DUP5 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2099 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x1C93 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2115 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2121 JUMPI POP PUSH1 0x0 PUSH2 0x219C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x2160 JUMPI POP PUSH1 0x1 PUSH2 0x219C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x217D SWAP1 DUP8 DUP8 PUSH2 0x26B8 JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x2198 JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x2234 JUMPI PUSH1 0x0 PUSH2 0x21C5 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP PUSH2 0x21DE DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0xF9D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x21EF SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1F5E JUMPI PUSH1 0x0 PUSH2 0x2251 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x27AD JUMP JUMPDEST SWAP1 POP PUSH2 0x226B DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0xF9D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x227C SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x22FF PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x230E JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x231F SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x2335 SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x235D SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x27C1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x2372 SWAP2 PUSH2 0xF9D JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x238E SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x2398 SWAP2 SWAP1 PUSH2 0x3CB5 JUMP JUMPDEST PUSH2 0x23A2 SWAP2 SWAP1 PUSH2 0x3CB5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x23B9 SWAP2 SWAP1 PUSH2 0x2908 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x2446 JUMPI PUSH2 0x23E9 PUSH2 0x23E4 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x294B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x244B JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x240F SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3CCC JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x24ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xBD5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2558 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x298A JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x25DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP SWAP1 SWAP12 SWAP1 SWAP11 POP SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x262C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x266B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x26A5 JUMPI PUSH2 0x2666 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25F3 JUMP JUMPDEST PUSH2 0x26B2 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x269C JUMPI PUSH2 0x269C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25F3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x26B2 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x26C6 DUP7 PUSH2 0x2EF4 JUMP JUMPDEST ISZERO PUSH2 0x275D JUMPI PUSH1 0x0 PUSH2 0x26F7 DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x2F38 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x2759 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x2767 SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2784 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x3CB5 JUMP JUMPDEST PUSH2 0x278E SWAP1 DUP6 PUSH2 0x3C43 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x219C DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27BA DUP4 DUP4 TIMESTAMP PUSH2 0x27C1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x27D5 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x3CB5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x27F1 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x27BA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2827 JUMPI PUSH1 0x0 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x2840 DUP11 DUP1 PUSH2 0xF9D JUMP JUMPDEST DUP2 PUSH2 0x284D JUMPI PUSH2 0x284D PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x285F DUP4 DUP12 PUSH2 0xF9D JUMP JUMPDEST DUP2 PUSH2 0x286C JUMPI PUSH2 0x286C PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x287C DUP7 DUP9 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x2886 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x289A DUP9 DUP11 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28A4 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28AE SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x28C5 DUP11 DUP16 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28CF SWAP2 SWAP1 PUSH2 0x3D2F JUMP JUMPDEST PUSH2 0x28E5 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x28EF SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x28F9 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x293D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x296F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x29A0 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x29DC JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x2EE7 JUMP JUMPDEST PUSH2 0x2A8B PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2AD0 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x2ABD SWAP2 SWAP1 PUSH2 0x2F7C JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x2DEF JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x2AF0 SWAP2 PUSH2 0x305B JUMP JUMPDEST PUSH2 0x2B04 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x2B4A JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2BE0 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x2C84 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C7F SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x2C8B JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2CAB JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x2CAB SWAP2 PUSH2 0x1552 JUMP JUMPDEST ISZERO PUSH2 0x2D9B JUMPI PUSH2 0x2CC8 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x30E0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x2CE1 SWAP1 DUP4 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x2CFC SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x317D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x2D52 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x2D22 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x2D29 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x2D38 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x2D4A SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x2D5B JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x2D6F JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x2D76 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x2D85 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x2D97 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x2DAB SWAP2 PUSH2 0x318E JUMP JUMPDEST ISZERO PUSH2 0x2DDE JUMPI PUSH2 0x2DC8 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x3210 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x2DDA SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x2E00 JUMPI PUSH1 0x0 PUSH2 0x2E1B JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x2E19 JUMPI PUSH2 0x2E19 PUSH2 0x3D00 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x2E32 JUMPI PUSH1 0x0 PUSH2 0x2E4D JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x2E4B JUMPI PUSH2 0x2E4B PUSH2 0x3D00 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x2E8F JUMPI PUSH2 0x2E8A DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x2E84 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x2908 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x3390 JUMP JUMPDEST PUSH2 0x2EB1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x27BA JUMPI POP PUSH2 0x2F30 PUSH1 0x1 DUP3 PUSH2 0x3CB5 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x499 JUMPI PUSH1 0x1 ADD PUSH2 0x2F67 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x3040 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3019 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x303D SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x30CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30EC DUP6 PUSH2 0x33C7 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x3156 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH2 0x18F JUMP JUMPDEST PUSH2 0x3160 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x3171 JUMPI PUSH2 0x3171 PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x27BA JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x3200 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3286 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32AA SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x32C8 JUMPI PUSH2 0x32C5 PUSH2 0x32BE DUP7 PUSH2 0x344B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0xF9D JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x333A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x335E SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x3368 SWAP1 DUP3 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 POP PUSH2 0x3374 DUP2 DUP6 PUSH2 0x3C43 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x3385 JUMPI PUSH2 0x3385 PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x33B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x340D JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x27BA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1D0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x2770 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3491 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x27BA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1D0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x27AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3553 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3691 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3691 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x140 DUP2 SLT ISZERO PUSH2 0x36C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP3 ADD SLT ISZERO PUSH2 0x370A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3713 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH2 0x3721 DUP2 PUSH2 0x3661 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 DUP8 ADD CALLDATALOAD PUSH2 0x373B DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xE0 DUP8 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x100 DUP8 ADD CALLDATALOAD PUSH2 0x3759 DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x376B PUSH2 0x120 DUP9 ADD PUSH2 0x3696 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH1 0xE0 DUP2 SLT ISZERO PUSH2 0x3795 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP3 ADD SLT ISZERO PUSH2 0x37D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37E0 PUSH2 0x35CC JUMP JUMPDEST PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x37EE DUP2 PUSH2 0x3661 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH2 0x3808 DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x1A0 DUP2 SLT ISZERO PUSH2 0x384C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x120 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x3897 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x389F PUSH2 0x3616 JUMP JUMPDEST SWAP2 POP PUSH2 0x38AD PUSH1 0x80 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x38BB PUSH1 0xA0 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x38CC PUSH1 0xC0 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE DUP2 DUP10 ADD CALLDATALOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x140 DUP10 ADD CALLDATALOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x3908 PUSH2 0x160 DUP11 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x391A PUSH2 0x180 DUP11 ADD PUSH2 0x3696 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE POP SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 POP SWAP3 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x395A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 CALLDATALOAD SWAP9 POP PUSH1 0x20 DUP11 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD SWAP7 POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD PUSH2 0x3981 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD PUSH2 0x3991 DUP2 PUSH2 0x392D JUMP JUMPDEST SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD PUSH2 0x39A8 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP2 POP PUSH2 0x39B7 PUSH2 0x100 DUP12 ADD PUSH2 0x3696 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x27BA DUP2 PUSH2 0x392D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3A29 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3A0D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3A3B JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3A85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3ACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x3B70 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3B56 JUMPI PUSH2 0x3B56 PUSH2 0x3AE8 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x3B63 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x3B1C JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3B87 JUMPI POP PUSH1 0x1 PUSH2 0x15D7 JUMP JUMPDEST DUP2 PUSH2 0x3B94 JUMPI POP PUSH1 0x0 PUSH2 0x15D7 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3BAA JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3BB4 JUMPI PUSH2 0x3BD0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x15D7 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3BC5 JUMPI PUSH2 0x3BC5 PUSH2 0x3AE8 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x15D7 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3BF3 JUMPI POP DUP2 DUP2 EXP PUSH2 0x15D7 JUMP JUMPDEST PUSH2 0x3BFD DUP4 DUP4 PUSH2 0x3B17 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3C2F JUMPI PUSH2 0x3C2F PUSH2 0x3AE8 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27BA DUP4 DUP4 PUSH2 0x3B78 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3C7B JUMPI PUSH2 0x3C7B PUSH2 0x3AE8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3C93 JUMPI PUSH2 0x3C93 PUSH2 0x3AE8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3CAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x27BA DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3CC7 JUMPI PUSH2 0x3CC7 PUSH2 0x3AE8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3CF7 JUMPI PUSH2 0x3CF7 PUSH2 0x3AE8 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3D65 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP5 DUP3 0x4E PUSH27 0xCD190A976CDC9A030EADF0D5EF4B64EA3EDB3CA4034FFA814DCBE6 DUP6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"864:10771:103:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4403:1834;;;;;;;;;;-1:-1:-1;4403:1834:103;;;;;:::i;:::-;;:::i;:::-;;;3293:25:124;;;3281:2;3266:18;4403:1834:103;;;;;;;2269:1393;;;;;;;;;;-1:-1:-1;2269:1393:103;;;;;:::i;:::-;;:::i;:::-;;7050:1835;;;;;;;;;;-1:-1:-1;7050:1835:103;;;;;:::i;:::-;;:::i;10043:1590::-;;;;;;;;;;-1:-1:-1;10043:1590:103;;;;;:::i;:::-;;:::i;4403:1834::-;4817:12;;4804:26;;4749:7;4804:26;;;;;;;;;;4749:7;4881:15;4804:26;4881:13;:15::i;:::-;4836:60;-1:-1:-1;4903:33:103;:7;4836:60;4903:19;:33::i;:::-;5043:31;;;;4973:26;;;;4965:63;;;;;5017:10;4965:63;;;7408:74:124;4943:19:103;;4965:115;;5043:31;;4965:51;;;;;;;7381:18:124;;4965:63:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;:115::i;:::-;5114:13;;;;4943:137;;-1:-1:-1;5155:17:103;5138:34;;5134:85;;;-1:-1:-1;5201:11:103;5134:85;5225:77;5258:12;5272:16;5290:11;5225:32;:77::i;:::-;5351:12;;5309:76;;:7;;5337:12;;5351;5368:16;5309:27;:76::i;:::-;5443:10;;;;5412:30;;;;;;;;;;;;;-1:-1:-1;;5412:42:103;;:30;5443:10;;;;;5412:30;:42::i;:::-;5392:62;;5465:12;:47;;;;;5501:11;5481:16;:31;5465:47;5461:188;;;5554:10;;;;5522:50;;:10;;5554;;;;;5566:5;5522:31;:50::i;:::-;5617:12;;5585:57;;5631:10;;5585:57;;;;;5617:12;;5585:57;5461:188;5663:26;;;;5721:9;;;;;5762:31;;;;5655:144;;;;;5703:10;5655:144;;;7974:34:124;5655:40:103;8044:15:124;;;8024:18;;;8017:43;8076:18;;;8069:34;;;8119:18;;;8112:34;;;;5655:40:103;;;;;;7885:19:124;;5655:144:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5810:12;:43;;;;-1:-1:-1;5826:25:103;;;;;;;;;;;;;;;502:66:89;5817:26;:31;;5826:27:103;5806:322;;;5863:258;5905:12;5927;5949:15;5974:10;5863:258;;;;;;;;;;;;;;;;;5994:6;:12;;;6016:10;6036:6;:20;;;6066:6;:13;;;6089:6;:24;;;5863:32;:258::i;:::-;6174:6;:9;;;6139:63;;6162:10;6139:63;;6148:6;:12;;;6139:63;;;6185:16;6139:63;;;;3293:25:124;;3281:2;3266:18;;3139:185;6139:63:103;;;;;;;;-1:-1:-1;6216:16:103;-1:-1:-1;;;;4403:1834:103;;;;;;;;:::o;2269:1393::-;2590:12;;2577:26;;2537:37;2577:26;;;;;;;;;;;2654:15;2577:26;2654:13;:15::i;:::-;2609:60;-1:-1:-1;2676:33:103;:7;2609:60;2676:19;:33::i;:::-;2716:68;2747:12;2761:7;2770:6;:13;;;2716:30;:68::i;:::-;2833:12;;2847:13;;;;2791:73;;:7;;2819:12;;2833;;2791:27;:73::i;:::-;2921:26;;;;2949:13;;;;2878:12;;2871:92;;:37;;;;;2909:10;;2921:26;2871:37;:92::i;:::-;2999:26;;;;3057:17;;;;;3082:13;;;;3103:31;;;;2991:149;;;;;3039:10;2991:149;;;7974:34:124;2991:40:103;8044:15:124;;;8024:18;;;8017:43;8076:18;;;8069:34;;;;8119:18;;;8112:34;;;;2970:18:103;;2991:40;;;;7885:19:124;;2991:149:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2970:170;;3151:13;3147:412;;;3187:211;3247:12;3271;3295:10;3317:12;:33;;;3362:12;:26;;;3187:48;:211::i;:::-;3174:379;;;3449:10;;;;3417:49;;:10;;3449;;;;;3461:4;3417:31;:49::i;:::-;3526:6;:17;;;3481:63;;3512:6;:12;;;3481:63;;;;;;;;;;;;3174:379;3637:6;:19;;;3570:87;;3603:6;:17;;;3570:87;;3577:6;:12;;;3570:87;;;3591:10;3622:6;:13;;;3570:87;;;;;;8793:42:124;8781:55;;;;8763:74;;8868:2;8853:18;;8846:34;8751:2;8736:18;;8589:297;3570:87:103;;;;;;;;2531:1131;;;2269:1393;;;;:::o;7050:1835::-;7476:12;;7463:26;;7423:37;7463:26;;;;;;;;;;7496:41;7463:26;7496:32;:41::i;:::-;7564:10;;;;7600:9;;;;7585:11;;;;7564:10;;;;;;;7585:24;;;;;;;;;;:46;;-1:-1:-1;7613:13:103;;;;:18;;7585:46;7581:1300;;;7705:11;;;;;7693:24;;7641:49;7693:24;;;;;;;;;;;7730:30;;;;;;;;;;;;7693:24;7730:41;;7761:9;7730:30;:41::i;:::-;7726:637;;;7787:25;;;;;;;;;;;;;;;502:66:89;5817:26;:31;7783:369:103;;7828:313;7874:12;7900;7926:15;7955:11;:24;7967:6;:11;;;7955:24;;;;;;;;;;;;;;;7828:313;;;;;;;;;;;;;;;;;7993:6;:12;;;8019:6;:11;;;8044:6;:20;;;8078:6;:13;;;8105:6;:24;;;7828:32;:313::i;:::-;8193:6;:13;;;8165:6;:24;;;:41;8161:194;;;8220:49;:10;8252:9;8263:5;8220:31;:49::i;:::-;8332:6;:11;;;8286:58;;8318:6;:12;;;8286:58;;;;;;;;;;;;8161:194;8375:22;;;;8371:504;;8476:9;;;;;8464:22;;;;8414:47;8464:22;;;;;;;;;;;8511:204;;;;;;;;;;;;8682:21;;;;8511:204;;8573:12;;8599;;8464:22;;8682:21;8511:48;:204::i;:::-;8496:371;;;8738:46;:8;8768:9;8779:4;8738:29;:46::i;:::-;8846:6;:9;;;8801:55;;8832:6;:12;;;8801:55;;;;;;;;;;;;8496:371;8404:471;8371:504;7633:1248;7581:1300;7417:1468;;7050:1835;;;;;:::o;10043:1590::-;10515:19;;;10475:37;10515:19;;;;;;;;;;;10585:15;10515:19;10585:13;:15::i;:::-;10636:26;;;;10629:56;;;;;10674:10;10629:56;;;7408:74:124;10540:60:103;;-1:-1:-1;10607:19:103;;10629:44;;;;;;;7381:18:124;;10629:56:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10607:78;;10692:76;10742:12;10756:11;10692:49;:76::i;:::-;10829:10;;;;10798:30;;;;;;;;;;;;;:42;;10829:10;;;;;10798:30;:42::i;:::-;10779:61;;:15;:61;;;10775:74;;;10842:7;;;;;10775:74;10859:15;10855:774;;;10901:164;10952:12;10976;11000:10;11022:12;:33;;;10901:39;:164::i;:::-;11075:41;;;;;;;;;;;;;;;;;10884:240;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;11165:10:103;;;;11133:49;;:10;;11165;;;;;11177:4;11133:31;:49::i;:::-;11195;;11233:10;;11195:49;;;;;;;;;10855:774;;;11297:10;;;;11265:50;;:10;;11297;;;;;11309:5;11265:31;:50::i;:::-;11323:235;;;;;;;;;;;;;;;11365:12;;11387;;11409:15;;11454:5;11469:10;11489:13;11512:11;11533:17;11323:32;:235::i;:::-;11572:50;;11611:10;;11572:50;;;;;;;;;10855:774;10469:1164;;;10043:1590;;;;;;;;;:::o;12460:1739:102:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:88;15237:71;;;;12694:26:102;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:102;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:102;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:102:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:102;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;4120:454:104:-;4284:21;;;;;;;;;;;;;;;;;4271:11;4263:43;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4343:40:104;;;;;;;;;;;;;;;;;4320:21;;;;4312:72;;;;;;;;;;;;;:::i;:::-;;4392:13;4413;4430:44;:12;:33;;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;4430:44:104;4391:83;;;;;;;4488:8;4498:23;;;;;;;;;;;;;;;;;4480:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4547:21:104;;;;;;;;;;;;;;;;;4536:9;;4528:41;;;;;;;;;;;;;:::i;:::-;;4257:317;;4120:454;;;:::o;6827:1514:102:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:102;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:102;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:102;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;10209:4:124;10251:3;10240:9;10236:19;10228:27;;10288:6;10282:13;10271:9;10264:32;10352:4;10344:6;10340:17;10334:24;10327:4;10316:9;10312:20;10305:54;10415:4;10407:6;10403:17;10397:24;10390:4;10379:9;10375:20;10368:54;10478:4;10470:6;10466:17;10460:24;10453:4;10442:9;10438:20;10431:54;10541:4;10533:6;10529:17;10523:24;10516:4;10505:9;10501:20;10494:54;10604:4;10596:6;10592:17;10586:24;10579:4;10568:9;10564:20;10557:54;10667:4;10659:6;10655:17;10649:24;10642:4;10631:9;10627:20;10620:54;10721:4;10713:6;10709:17;10703:24;10746:42;10844:2;10830:12;10826:21;10819:4;10808:9;10804:20;10797:51;10867:6;10857:16;;10937:2;10931;10923:6;10919:15;10913:22;10909:31;10904:2;10893:9;10889:18;10882:59;;;10023:924;;;;;7316:575:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;11522:25:124;;;11563:18;;;11556:34;;;;11606:18;;;11599:34;11664:2;11649:18;;11642:34;11707:3;11692:19;;11685:35;8121:215:102;;;;;;11509:3:124;11494:19;8121:215:102;;;;;;;7044:1297;6827:1514;;;;;:::o;3638:328:89:-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:88;3806:54:89;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:89;;3938:1;3922:17;;;3921:23;;3907:38;;;;3906:44;:49;;3638:328;;;;;:::o;1688:433::-;1922:28;;;;;;;;;;;;;;;;;5284:3:88;1866:54:89;;1858:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1996:1:89;1980:17;;;1979:23;;1973:30;2011:100;;;;2044:16;;;;;;2011:100;;;2085:17;;2098:4;;2085:17;;;2011:100;1840:277;1688:433;;;:::o;23069:815:104:-;23518:19;;;;23479:36;23518:19;;;;;;;;;;;23479:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23479:58:104;;;;;;;;;-1:-1:-1;23479:58:104;;;;;;;;;-1:-1:-1;23479:58:104;;;;;;;;;;-1:-1:-1;23479:58:104;;;;;;;;;;-1:-1:-1;23479:58:104;;;;;;;;;-1:-1:-1;23479:58:104;;;;;;;-1:-1:-1;23479:58:104;;;23576:179;23518:19;23624:12;23644:15;23667:10;23685:4;23697:17;23722:13;23743:6;23576:20;:179::i;:::-;23544:211;;;23778:20;23777:21;:60;;;-1:-1:-1;23802:21:104;;5872:9:88;5884;5872:21;23802:35:104;23777:60;23845:28;;;;;;;;;;;;;;;;;23762:117;;;;;;;;;;;;;;:::i;3050:862::-;3230:21;;;;;;;;;;;;;;;;;3217:11;3209:43;;;;;;;;;;;;;:::i;:::-;;3260:13;3275;3294;3311:58;:12;:40;;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;3311:58:104;3259:110;;;;;;;;3383:8;3393:23;;;;;;;;;;;;;;;;;3375:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3442:21:104;;;;;;;;;;;;;;;;;3431:9;;3423:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3489:21:104;;;;;;;;;;;;;;;;;3478:9;;3470:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3538:33:104;;;;16762:9:88;4191:3;16761:63;;;3607:14:104;;;:260;;-1:-1:-1;3819:33:104;;;;8368:9:88;3439:2;8367:67;;;3813:53:104;;:2;:53;:::i;:::-;3800:67;;:9;:67;:::i;:::-;3781:6;3634:144;3746:12;:31;;;3711:7;:25;;;;;;;;;;;;3703:34;;3643:12;:26;;;3635:53;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:102;;;;:::i;3634:144::-;:153;;;;:::i;:::-;3633:234;;3607:260;3875:26;;;;;;;;;;;;;;;;;3592:315;;;;;;;;;;;;;;:::i;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;13982:2:124;1937:66:1;;;13964:21:124;14021:2;14001:18;;;13994:30;14060:27;14040:18;;;14033:55;14105:18;;1937:66:1;13780:349:124;1937:66:1;1318:690;1228:780;;;;:::o;28482:904:104:-;17634:9:88;;28815:4:104;;4478:3:88;17633:67;;;28831:35:104;28827:464;;28986:40;29047:13;29029:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28986:121;;29144:17;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29129:134;;;;;2851:41;29129:134;;;15121:25:124;29243:10:104;15162:18:124;;;15155:83;29129:57:104;;;;;;;;15094:18:124;;29129:134:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29115:169;;29279:5;29272:12;;;;;29115:169;28868:423;28827:464;29303:78;29327:12;29341;29355:10;29367:13;29303:23;:78::i;:::-;29296:85;28482:904;-1:-1:-1;;;;;;28482:904:104:o;23981:156::-;24075:31;;;;;;;;;;;;;;;24110:21;;;;;;;;;;;;;;;;10339:12:88;10327:24;10326:31;24066:66:104;;;;;;;;;;;;;:::i;:::-;;23981:156;:::o;17284:387::-;17450:30;;;;;;;;;;;;;;;;;17432:16;17424:57;;;;;;;;;;;;;:::i;:::-;;17489:13;17510;17527:44;:12;:33;;;21735:9:88;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;17527:44:104;17488:83;;;;;;;17585:8;17595:23;;;;;;;;;;;;;;;;;17577:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17644:21:104;;;;;;;;;;;;;;;;;17633:9;;17625:41;;;;;;;;;;;;;:::i;27289:620::-;27586:4;27602:22;:13;5872:9:88;5884;5872:21;;5764:134;27602:22:104;27598:60;;-1:-1:-1;27646:5:104;27639:12;;27598:60;27668:33;;;;;;;;;;;;;;;620:66:89;4911:27;27663:68:104;;-1:-1:-1;27720:4:104;27713:11;;27663:68;27769:32;;;;;;;;;;;;;27737:24;;27769:60;;27802:12;27816;27769:32;:60::i;:::-;27736:93;;;;27845:19;27844:20;:59;;;;-1:-1:-1;17634:9:88;;4478:3;17633:67;;;27868:35:104;27844:59;27836:68;;;27289:620;;;;;;;:::o;10657:1542:102:-;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:102;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;;;-1:-1:-1;10657:1542:102;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:102;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:::-;:94;:96::i;:::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10267:168;8972:1467;8841:1598;;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;15839:2:124;1635:78:12;;;15821:21:124;15878:2;15858:18;;;15851:30;15917:34;15897:18;;;15890:62;15988:9;15968:18;;;15961:37;16015:19;;1635:78:12;15637:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;21356:1027:104:-;21754:7;21763:4;21784:20;21806:25;21835:353;21889:12;21911;21933:15;21958:222;;;;;;;;22023:10;21958:222;;;;22060:13;21958:222;;;;22091:4;21958:222;;;;;;22115:6;21958:222;;;;;;22152:17;21958:222;;;;;21835:44;:353::i;:::-;21775:413;;;;;;;;2677:4;22210:12;:51;;22269:53;;;;;;;;;;;;;;;;;22195:133;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22343:12:104;;;;-1:-1:-1;21356:1027:104;-1:-1:-1;;;;;;;;;21356:1027:104:o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;6625:625:89:-;6853:4;6859:7;6868;6887:28;6910:4;6887:22;:28::i;:::-;6883:328;;;6925:15;6943:45;6966:4;620:66;6943:22;:45::i;:::-;6997:20;7020:21;;;;;;;;;;;;;;7067:26;;;;;;;;;:55;;;;;;;;;;;;;;7020:21;;-1:-1:-1;4478:3:88;17633:67;;;7049:75:89;-1:-1:-1;7136:12:89;;7132:73;;7168:4;;-1:-1:-1;7174:12:89;;-1:-1:-1;7188:7:89;-1:-1:-1;7160:36:89;;-1:-1:-1;7160:36:89;7132:73;6917:294;;;6883:328;-1:-1:-1;7224:5:89;;-1:-1:-1;7224:5:89;;-1:-1:-1;7224:5:89;6625:625;;;;;;;;:::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;:::-;3271:78;3142:212;-1:-1:-1;;;3142:212:105:o;1780:972::-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;1005:496:106:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;2633:3723:98:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:89;:14;;6091:122;3008:27:98;3004:93;;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3053:1:98;;-1:-1:-1;3065:17:98;;-1:-1:-1;3053:1:98;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:98;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:88;4339:3;23023:71;;;;;4004:23:98;;;3898:180;3439:2:88;22869:67;;;;3971:13:98;;;3898:180;;;22674:9:88;3298:2;22691:85;;;;;3926:25:98;;;3898:180;22662:21:88;;;3908:8:98;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:98;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;7426:55:124;;;4308:75:98;;;7408:74:124;4308:47:98;;;;;7381:18:124;;4308:75:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:98;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:98;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:98;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:98;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:98;-1:-1:-1;5573:6:98;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:98;;-1:-1:-1;6240:11:98;-1:-1:-1;6259:28:98;;-1:-1:-1;5921:220:98;-1:-1:-1;6320:25:98;-1:-1:-1;2633:3723:98;;;;;;;;;;;;:::o;4304:256:89:-;4448:9;;4411:4;;620:66;4448:27;4488:19;;;;;:67;;-1:-1:-1;4530:18:89;4547:1;4530:14;:18;:::i;:::-;4512:37;:42;;4481:74;-1:-1:-1;;4304:256:89:o;8422:382::-;8601:9;;8547:7;;8601:16;;8669:14;;;8667:17;8654:30;;8547:7;8711:66;8742:1;8719:24;;;;;8718:31;;8711:66;;8767:1;8761:7;8711:66;;3336:442:96;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;7426:55:124;;;3653:38:96;;;7408:74:124;3653:20:96;;;;;7381:18:124;;3653:38:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:96;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:96;-1:-1:-1;;;3336:442:96:o;2435:333:89:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:88;2614:54:89;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:89;;2745:1;2729:17;;;;2715:32;2751:1;2714:38;:43;;;2435:333::o;9524:446:98:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;7426:55:124;;;9800:64:98;;;7408:74:124;;;;9712:56:98;;-1:-1:-1;9774:15:98;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;7381:18:124;;9800:64:98;7262:226:124;9800:89:98;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;;9524:446;-1:-1:-1;;;;;;;9524:446:98:o;4133:208:96:-;4250:4;4270:22;;;;;:65;;-1:-1:-1;;4296:39:96;;4133:208::o;3046:314:89:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:88;3206:54:89;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:89;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;8150:645:98:-;8409:32;;;;8389:87;;;;;8409:32;7426:55:124;;;8389:87:98;;;7408:74:124;8320:7:98;;;;8409:32;;;8389:69;;7381:18:124;;8389:87:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:98;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;7426:55:124;;;8624:54:98;;;7408:74:124;8631:30:98;;;;8624:48;;7381:18:124;;8624:54:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:98;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:98:o;1660:322:107:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:107;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;1895:528:102:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;2809:545::-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:407:124:-;86:2;80:9;128:4;116:17;;163:18;148:34;;184:22;;;145:62;142:242;;;240:77;237:1;230:88;341:4;338:1;331:15;369:4;366:1;359:15;142:242;400:2;393:22;14:407;:::o;426:::-;498:2;492:9;540:4;528:17;;575:18;560:34;;596:22;;;557:62;554:242;;;652:77;649:1;642:88;753:4;750:1;743:15;781:4;778:1;771:15;838:404;905:2;899:9;947:6;935:19;;984:18;969:34;;1005:22;;;966:62;963:242;;;1061:77;1058:1;1051:88;1162:4;1159:1;1152:15;1190:4;1187:1;1180:15;1247:154;1333:42;1326:5;1322:54;1315:5;1312:65;1302:93;;1391:1;1388;1381:12;1302:93;1247:154;:::o;1406:134::-;1474:20;;1503:31;1474:20;1503:31;:::i;:::-;1406:134;;;:::o;1545:156::-;1611:20;;1671:4;1660:16;;1650:27;;1640:55;;1691:1;1688;1681:12;1706:1428;2010:6;2018;2026;2034;2042;2086:9;2077:7;2073:23;2116:3;2112:2;2108:12;2105:32;;;2133:1;2130;2123:12;2105:32;2169:9;2156:23;2146:33;;2226:2;2215:9;2211:18;2198:32;2188:42;;2277:2;2266:9;2262:18;2249:32;2239:42;;2328:2;2317:9;2313:18;2300:32;2290:42;;2425:4;2356:66;2352:2;2348:75;2344:86;2341:106;;;2443:1;2440;2433:12;2341:106;;2469:22;;:::i;:::-;2543:3;2532:9;2528:19;2515:33;2557;2582:7;2557:33;:::i;:::-;2599:22;;2681:3;2666:19;;2653:33;2648:2;2637:14;;2630:57;2739:4;2724:20;;2711:34;2754:33;2711:34;2754:33;:::i;:::-;2814:2;2803:14;;2796:31;2887:3;2872:19;;2859:33;2854:2;2843:14;;2836:57;2945:3;2930:19;;2917:33;2959;2917;2959;:::i;:::-;3019:3;3008:15;;3001:32;3066:37;3098:3;3083:19;;3066:37;:::i;:::-;3060:3;3053:5;3049:15;3042:62;3123:5;3113:15;;;1706:1428;;;;;;;;:::o;3329:1195::-;3570:6;3578;3586;3594;3638:9;3629:7;3625:23;3668:3;3664:2;3660:12;3657:32;;;3685:1;3682;3675:12;3657:32;3721:9;3708:23;3698:33;;3778:2;3767:9;3763:18;3750:32;3740:42;;3829:2;3818:9;3814:18;3801:32;3791:42;;3926:4;3857:66;3853:2;3849:75;3845:86;3842:106;;;3944:1;3941;3934:12;3842:106;;3970:22;;:::i;:::-;4044:2;4033:9;4029:18;4016:32;4057:33;4082:7;4057:33;:::i;:::-;4099:22;;4181:4;4166:20;;4153:34;4148:2;4137:14;;4130:58;4240:3;4225:19;;4212:33;4254;4212;4254;:::i;:::-;4314:2;4303:14;;4296:31;4379:3;4364:19;;4351:33;4428:6;4415:20;;4403:33;;4393:61;;4450:1;4447;4440:12;4393:61;4481:2;4470:14;;4463:31;3329:1195;;;;-1:-1:-1;3329:1195:124;;-1:-1:-1;;3329:1195:124:o;4529:1492::-;4855:6;4863;4871;4879;4887;4931:9;4922:7;4918:23;4961:3;4957:2;4953:12;4950:32;;;4978:1;4975;4968:12;4950:32;5014:9;5001:23;4991:33;;5071:2;5060:9;5056:18;5043:32;5033:42;;5122:2;5111:9;5107:18;5094:32;5084:42;;5173:2;5162:9;5158:18;5145:32;5135:42;;5196:6;5295:2;5226:66;5222:2;5218:75;5214:84;5211:104;;;5311:1;5308;5301:12;5211:104;5337:17;;:::i;:::-;5324:30;;5377:39;5411:3;5400:9;5396:19;5377:39;:::i;:::-;5370:5;5363:54;5449:39;5483:3;5472:9;5468:19;5449:39;:::i;:::-;5444:2;5437:5;5433:14;5426:63;5521:39;5555:3;5544:9;5540:19;5521:39;:::i;:::-;5516:2;5509:5;5505:14;5498:63;5621:3;5610:9;5606:19;5593:33;5588:2;5581:5;5577:14;5570:57;5646:3;5710:2;5699:9;5695:18;5682:32;5676:3;5669:5;5665:15;5658:57;5776:2;5765:9;5761:18;5748:32;5742:3;5735:5;5731:15;5724:57;5842:3;5831:9;5827:19;5814:33;5808:3;5801:5;5797:15;5790:58;5881:39;5915:3;5904:9;5900:19;5881:39;:::i;:::-;5875:3;5868:5;5864:15;5857:64;5953:37;5985:3;5974:9;5970:19;5953:37;:::i;:::-;5937:14;;;5930:61;-1:-1:-1;4529:1492:124;;;;-1:-1:-1;4529:1492:124;;-1:-1:-1;4529:1492:124;5941:5;4529:1492;-1:-1:-1;4529:1492:124:o;6026:118::-;6112:5;6105:13;6098:21;6091:5;6088:32;6078:60;;6134:1;6131;6124:12;6149:1108;6444:6;6452;6460;6468;6476;6484;6492;6500;6508;6561:3;6549:9;6540:7;6536:23;6532:33;6529:53;;;6578:1;6575;6568:12;6529:53;6614:9;6601:23;6591:33;;6671:2;6660:9;6656:18;6643:32;6633:42;;6722:2;6711:9;6707:18;6694:32;6684:42;;6773:2;6762:9;6758:18;6745:32;6735:42;;6827:3;6816:9;6812:19;6799:33;6841:31;6866:5;6841:31;:::i;:::-;6891:5;-1:-1:-1;6948:3:124;6933:19;;6920:33;6962:30;6920:33;6962:30;:::i;:::-;7011:7;-1:-1:-1;7065:3:124;7050:19;;7037:33;;-1:-1:-1;7122:3:124;7107:19;;7094:33;7136;7094;7136;:::i;:::-;7188:7;-1:-1:-1;7214:37:124;7246:3;7231:19;;7214:37;:::i;:::-;7204:47;;6149:1108;;;;;;;;;;;:::o;7493:184::-;7563:6;7616:2;7604:9;7595:7;7591:23;7587:32;7584:52;;;7632:1;7629;7622:12;7584:52;-1:-1:-1;7655:16:124;;7493:184;-1:-1:-1;7493:184:124:o;8339:245::-;8406:6;8459:2;8447:9;8438:7;8434:23;8430:32;8427:52;;;8475:1;8472;8465:12;8427:52;8507:9;8501:16;8526:28;8548:5;8526:28;:::i;8891:656::-;9003:4;9032:2;9061;9050:9;9043:21;9093:6;9087:13;9136:6;9131:2;9120:9;9116:18;9109:34;9161:1;9171:140;9185:6;9182:1;9179:13;9171:140;;;9280:14;;;9276:23;;9270:30;9246:17;;;9265:2;9242:26;9235:66;9200:10;;9171:140;;;9329:6;9326:1;9323:13;9320:91;;;9399:1;9394:2;9385:6;9374:9;9370:22;9366:31;9359:42;9320:91;-1:-1:-1;9463:2:124;9451:15;9468:66;9447:88;9432:104;;;;9538:2;9428:113;;8891:656;-1:-1:-1;;;8891:656:124:o;9552:466::-;9648:6;9656;9664;9672;9725:3;9713:9;9704:7;9700:23;9696:33;9693:53;;;9742:1;9739;9732:12;9693:53;9771:9;9765:16;9755:26;;9821:2;9810:9;9806:18;9800:25;9790:35;;9865:2;9854:9;9850:18;9844:25;9834:35;;9912:2;9901:9;9897:18;9891:25;9956:12;9949:5;9945:24;9938:5;9935:35;9925:63;;9984:1;9981;9974:12;9925:63;9552:466;;;;-1:-1:-1;9552:466:124;;-1:-1:-1;;9552:466:124:o;10952:306::-;11040:6;11048;11056;11109:2;11097:9;11088:7;11084:23;11080:32;11077:52;;;11125:1;11122;11115:12;11077:52;11154:9;11148:16;11138:26;;11204:2;11193:9;11189:18;11183:25;11173:35;;11248:2;11237:9;11233:18;11227:25;11217:35;;10952:306;;;;;:::o;11731:184::-;11783:77;11780:1;11773:88;11880:4;11877:1;11870:15;11904:4;11901:1;11894:15;11920:482;12009:1;12052:5;12009:1;12066:330;12087:7;12077:8;12074:21;12066:330;;;12206:4;12138:66;12134:77;12128:4;12125:87;12122:113;;;12215:18;;:::i;:::-;12265:7;12255:8;12251:22;12248:55;;;12285:16;;;;12248:55;12364:22;;;;12324:15;;;;12066:330;;;12070:3;11920:482;;;;;:::o;12407:866::-;12456:5;12486:8;12476:80;;-1:-1:-1;12527:1:124;12541:5;;12476:80;12575:4;12565:76;;-1:-1:-1;12612:1:124;12626:5;;12565:76;12657:4;12675:1;12670:59;;;;12743:1;12738:130;;;;12650:218;;12670:59;12700:1;12691:10;;12714:5;;;12738:130;12775:3;12765:8;12762:17;12759:43;;;12782:18;;:::i;:::-;-1:-1:-1;;12838:1:124;12824:16;;12853:5;;12650:218;;12952:2;12942:8;12939:16;12933:3;12927:4;12924:13;12920:36;12914:2;12904:8;12901:16;12896:2;12890:4;12887:12;12883:35;12880:77;12877:159;;;-1:-1:-1;12989:19:124;;;13021:5;;12877:159;13068:34;13093:8;13087:4;13068:34;:::i;:::-;13198:6;13130:66;13126:79;13117:7;13114:92;13111:118;;;13209:18;;:::i;:::-;13247:20;;12407:866;-1:-1:-1;;;12407:866:124:o;13278:131::-;13338:5;13367:36;13394:8;13388:4;13367:36;:::i;13414:228::-;13454:7;13580:1;13512:66;13508:74;13505:1;13502:81;13497:1;13490:9;13483:17;13479:105;13476:131;;;13587:18;;:::i;:::-;-1:-1:-1;13627:9:124;;13414:228::o;13647:128::-;13687:3;13718:1;13714:6;13711:1;13708:13;13705:39;;;13724:18;;:::i;:::-;-1:-1:-1;13760:9:124;;13647:128::o;14134:265::-;14218:6;14271:2;14259:9;14250:7;14246:23;14242:32;14239:52;;;14287:1;14284;14277:12;14239:52;14319:9;14313:16;14338:31;14363:5;14338:31;:::i;15249:125::-;15289:4;15317:1;15314;15311:8;15308:34;;;15322:18;;:::i;:::-;-1:-1:-1;15359:9:124;;15249:125::o;15379:253::-;15419:3;15447:34;15508:2;15505:1;15501:10;15538:2;15535:1;15531:10;15569:3;15565:2;15561:12;15556:3;15553:21;15550:47;;;15577:18;;:::i;:::-;15613:13;;15379:253;-1:-1:-1;;;;15379:253:124:o;16045:184::-;16097:77;16094:1;16087:88;16194:4;16191:1;16184:15;16218:4;16215:1;16208:15;16234:274;16274:1;16300;16290:189;;16335:77;16332:1;16325:88;16436:4;16433:1;16426:15;16464:4;16461:1;16454:15;16290:189;-1:-1:-1;16493:9:124;;16234:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"3155200","executionCost":"3519","totalCost":"3158719"},"external":{"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)":"infinite","executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)":"infinite","executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)":"infinite","executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)":"infinite"}},"methodIdentifiers":{"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)":"8a5dadd1","executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)":"1913f161","executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)":"bf697a26","executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)":"186dea44"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)\":{\"details\":\"Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as collateral.In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the finalizeTransfer function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"usersConfig\":\"The users configuration mapping that track the supplied/borrowed assets\"}},\"executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)\":{\"details\":\"Emits the `Supply()` event.In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as collateral.\",\"params\":{\"params\":\"The additional parameters needed to execute the supply function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}},\"executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)\":{\"details\":\"Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\",\"params\":{\"asset\":\"The address of the asset being configured as collateral\",\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"priceOracle\":\"The address of the price oracle\",\"reservesCount\":\"The number of initialized reserves\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"useAsCollateral\":\"True if the user wants to set the asset as collateral, false otherwise\",\"userConfig\":\"The users configuration mapping that track the supplied/borrowed assets\",\"userEModeCategory\":\"The eMode category chosen by the user\"}},\"executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)\":{\"details\":\"Emits the `Withdraw()` event.If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the withdraw function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"},\"returns\":{\"_0\":\"The actual amount withdrawn\"}}},\"title\":\"SupplyLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)\":{\"notice\":\"Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid collateralization constraints violation.\"},\"executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)\":{\"notice\":\"Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\"},\"executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)\":{\"notice\":\"Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor checks to ensure collateralization.\"},\"executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)\":{\"notice\":\"Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset previously supplied in the Aave protocol.\"}},\"notice\":\"Implements the base logic for supply/withdraw\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/SupplyLogic.sol\":\"SupplyLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)":{"notice":"Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid collateralization constraints violation."},"executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)":{"notice":"Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol."},"executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)":{"notice":"Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor checks to ensure collateralization."},"executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)":{"notice":"Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset previously supplied in the Aave protocol."}},"notice":"Implements the base logic for supply/withdraw","version":1}}},"contracts/protocol/libraries/logic/ValidationLogic.sol":{"ValidationLogic":{"abi":[{"inputs":[],"name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ISOLATED_COLLATERAL_SUPPLIER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"stateVariables":{"HEALTH_FACTOR_LIQUIDATION_THRESHOLD":{"details":"Minimum health factor to consider a user position healthy A value of 1e18 results in 1"},"ISOLATED_COLLATERAL_SUPPLIER_ROLE":{"details":"Role identifier for the role allowed to supply isolated reserves as collateral"}},"title":"ReserveLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60e8610039600b82828239805160001a60731461002c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060515760003560e01c80632b0139fa146056578063561cbec914608e578063abfcc86a14609c578063c3525c281460a4575b600080fd5b607c7fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc78281565b60405190815260200160405180910390f35b607c670d2f13f7789f000081565b607c61232881565b607c670de0b6b3a76400008156fea2646970667358221220013f70ccbd1294c7b972320f19ca52acb1df48273a65f89f3a3373f16569176a64736f6c634300080a0033","opcodes":"PUSH1 0xE8 PUSH2 0x39 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x51 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2B0139FA EQ PUSH1 0x56 JUMPI DUP1 PUSH4 0x561CBEC9 EQ PUSH1 0x8E JUMPI DUP1 PUSH4 0xABFCC86A EQ PUSH1 0x9C JUMPI DUP1 PUSH4 0xC3525C28 EQ PUSH1 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7C PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x7C PUSH8 0xD2F13F7789F0000 DUP2 JUMP JUMPDEST PUSH1 0x7C PUSH2 0x2328 DUP2 JUMP JUMPDEST PUSH1 0x7C PUSH8 0xDE0B6B3A7640000 DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD EXTCODEHASH PUSH17 0xCCBD1294C7B972320F19CA52ACB1DF4827 GASPRICE PUSH6 0xF89F3A3373F1 PUSH6 0x69176A64736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"1731:27657:104:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1731:27657:104;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@HEALTH_FACTOR_LIQUIDATION_THRESHOLD_21767":{"entryPoint":null,"id":21767,"parameterSlots":0,"returnSlots":0},"@ISOLATED_COLLATERAL_SUPPLIER_ROLE_21773":{"entryPoint":null,"id":21773,"parameterSlots":0,"returnSlots":0},"@MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD_21763":{"entryPoint":null,"id":21763,"parameterSlots":0,"returnSlots":0},"@REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD_21760":{"entryPoint":null,"id":21760,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:391:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"123:76:124","statements":[{"nodeType":"YulAssignment","src":"133:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"145:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"156:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"141:3:124"},"nodeType":"YulFunctionCall","src":"141:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"133:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"175:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"186:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"168:6:124"},"nodeType":"YulFunctionCall","src":"168:25:124"},"nodeType":"YulExpressionStatement","src":"168:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"103:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"114:4:124","type":""}],"src":"14:185:124"},{"body":{"nodeType":"YulBlock","src":"313:76:124","statements":[{"nodeType":"YulAssignment","src":"323:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"335:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"346:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"331:3:124"},"nodeType":"YulFunctionCall","src":"331:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"323:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"365:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"376:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:124"},"nodeType":"YulFunctionCall","src":"358:25:124"},"nodeType":"YulExpressionStatement","src":"358:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"282:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"293:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"304:4:124","type":""}],"src":"204:185:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361060515760003560e01c80632b0139fa146056578063561cbec914608e578063abfcc86a14609c578063c3525c281460a4575b600080fd5b607c7fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc78281565b60405190815260200160405180910390f35b607c670d2f13f7789f000081565b607c61232881565b607c670de0b6b3a76400008156fea2646970667358221220013f70ccbd1294c7b972320f19ca52acb1df48273a65f89f3a3373f16569176a64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x51 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2B0139FA EQ PUSH1 0x56 JUMPI DUP1 PUSH4 0x561CBEC9 EQ PUSH1 0x8E JUMPI DUP1 PUSH4 0xABFCC86A EQ PUSH1 0x9C JUMPI DUP1 PUSH4 0xC3525C28 EQ PUSH1 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7C PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x7C PUSH8 0xD2F13F7789F0000 DUP2 JUMP JUMPDEST PUSH1 0x7C PUSH2 0x2328 DUP2 JUMP JUMPDEST PUSH1 0x7C PUSH8 0xDE0B6B3A7640000 DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD EXTCODEHASH PUSH17 0xCCBD1294C7B972320F19CA52ACB1DF4827 GASPRICE PUSH6 0xF89F3A3373F1 PUSH6 0x69176A64736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"1731:27657:104:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:105;;2851:41;2787:105;;;;;168:25:124;;;156:2;141:18;2787:105:104;;;;;;;2419:77;;2489:7;2419:77;;2247:69;;2311:5;2247:69;;2615:66;;2677:4;2615:66;"},"gasEstimates":{"creation":{"codeDepositCost":"46400","executionCost":"130","totalCost":"46530"},"external":{"HEALTH_FACTOR_LIQUIDATION_THRESHOLD()":"211","ISOLATED_COLLATERAL_SUPPLIER_ROLE()":"145","MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD()":"167","REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD()":"189"},"internal":{"validateAutomaticUseAsCollateral(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address)":"infinite","validateBorrow(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ValidateBorrowParams memory)":"infinite","validateDropReserve(mapping(uint256 => address),struct DataTypes.ReserveData storage pointer,address)":"infinite","validateFlashloan(mapping(address => struct DataTypes.ReserveData storage ref),address[] memory,uint256[] memory)":"infinite","validateFlashloanSimple(struct DataTypes.ReserveData storage pointer)":"infinite","validateHFAndLtv(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,address,uint256,address,uint8)":"infinite","validateHealthFactor(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,uint8,uint256,address)":"infinite","validateLiquidationCall(struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveData storage pointer,struct DataTypes.ValidateLiquidationCallParams memory)":"infinite","validateRebalanceStableBorrowRate(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address)":"infinite","validateRepay(struct DataTypes.ReserveCache memory,uint256,enum DataTypes.InterestRateMode,address,uint256,uint256)":"infinite","validateSetUseReserveAsCollateral(struct DataTypes.ReserveCache memory,uint256)":"infinite","validateSetUserEMode(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,uint256,uint8)":"infinite","validateSupply(struct DataTypes.ReserveCache memory,struct DataTypes.ReserveData storage pointer,uint256)":"infinite","validateSwapRateMode(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,struct DataTypes.UserConfigurationMap storage pointer,uint256,uint256,enum DataTypes.InterestRateMode)":"infinite","validateTransfer(struct DataTypes.ReserveData storage pointer)":"infinite","validateUseAsCollateral(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory)":"infinite","validateWithdraw(struct DataTypes.ReserveCache memory,uint256,uint256)":"infinite"}},"methodIdentifiers":{"HEALTH_FACTOR_LIQUIDATION_THRESHOLD()":"c3525c28","ISOLATED_COLLATERAL_SUPPLIER_ROLE()":"2b0139fa","MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD()":"561cbec9","REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD()":"abfcc86a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"HEALTH_FACTOR_LIQUIDATION_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ISOLATED_COLLATERAL_SUPPLIER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"HEALTH_FACTOR_LIQUIDATION_THRESHOLD\":{\"details\":\"Minimum health factor to consider a user position healthy A value of 1e18 results in 1\"},\"ISOLATED_COLLATERAL_SUPPLIER_ROLE\":{\"details\":\"Role identifier for the role allowed to supply isolated reserves as collateral\"}},\"title\":\"ReserveLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements functions to validate the different actions of the protocol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/logic/ValidationLogic.sol\":\"ValidationLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements functions to validate the different actions of the protocol","version":1}}},"contracts/protocol/libraries/math/MathUtils.sol":{"MathUtils":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"stateVariables":{"SECONDS_PER_YEAR":{"details":"Ignoring leap years"}},"title":"MathUtils library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205a49d21aa3a4713d7e4358414b59e5fd30ba1095f034ca62a7a8e9f8b730471064736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GAS 0x49 0xD2 BYTE LOG3 LOG4 PUSH18 0x3D7E4358414B59E5FD30BA1095F034CA62A7 0xA8 0xE9 0xF8 0xB7 ADDRESS SELFBALANCE LT PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"245:3111:105:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;245:3111:105;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205a49d21aa3a4713d7e4358414b59e5fd30ba1095f034ca62a7a8e9f8b730471064736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GAS 0x49 0xD2 BYTE LOG3 LOG4 PUSH18 0x3D7E4358414B59E5FD30BA1095F034CA62A7 0xA8 0xE9 0xF8 0xB7 ADDRESS SELFBALANCE LT PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"245:3111:105:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"calculateCompoundedInterest(uint256,uint40)":"infinite","calculateCompoundedInterest(uint256,uint40,uint256)":"infinite","calculateLinearInterest(uint256,uint40)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"SECONDS_PER_YEAR\":{\"details\":\"Ignoring leap years\"}},\"title\":\"MathUtils library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions to perform linear and compounded interest calculations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/math/MathUtils.sol\":\"MathUtils\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Provides functions to perform linear and compounded interest calculations","version":1}}},"contracts/protocol/libraries/math/PercentageMath.sol":{"PercentageMath":{"abi":[],"devdoc":{"author":"Aave","details":"Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOROperations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.","kind":"dev","methods":{},"title":"PercentageMath library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e38ab78a02d4dfe04ecd9d1a9a99e7dd8935afe44fddf096d2325dd004c95ae364736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE3 DUP11 0xB7 DUP11 MUL 0xD4 0xDF 0xE0 0x4E 0xCD SWAP14 BYTE SWAP11 SWAP10 0xE7 0xDD DUP10 CALLDATALOAD 0xAF 0xE4 0x4F 0xDD CREATE SWAP7 0xD2 ORIGIN 0x5D 0xD0 DIV 0xC9 GAS 0xE3 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"410:1938:106:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;410:1938:106;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e38ab78a02d4dfe04ecd9d1a9a99e7dd8935afe44fddf096d2325dd004c95ae364736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE3 DUP11 0xB7 DUP11 MUL 0xD4 0xDF 0xE0 0x4E 0xCD SWAP14 BYTE SWAP11 SWAP10 0xE7 0xDD DUP10 CALLDATALOAD 0xAF 0xE4 0x4F 0xDD CREATE SWAP7 0xD2 ORIGIN 0x5D 0xD0 DIV 0xC9 GAS 0xE3 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"410:1938:106:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"percentDiv(uint256,uint256)":"infinite","percentMul(uint256,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOROperations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PercentageMath library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions to perform percentage calculations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/math/PercentageMath.sol\":\"PercentageMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Provides functions to perform percentage calculations","version":1}}},"contracts/protocol/libraries/math/WadRayMath.sol":{"WadRayMath":{"abi":[],"devdoc":{"author":"Aave","details":"Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers with 27 digits of precision)Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.","kind":"dev","methods":{},"title":"WadRayMath library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220462be9d4c644f34456aedaf7f2b65a438026f5d21591a6037f27c31319d6aa4164736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CHAINID 0x2B 0xE9 0xD4 0xC6 DIFFICULTY RETURN DIFFICULTY JUMP 0xAE 0xDA 0xF7 CALLCODE 0xB6 GAS NUMBER DUP1 0x26 CREATE2 0xD2 ISZERO SWAP2 0xA6 SUB PUSH32 0x27C31319D6AA4164736F6C634300080A00330000000000000000000000000000 ","sourceMap":"439:3711:107:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;439:3711:107;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220462be9d4c644f34456aedaf7f2b65a438026f5d21591a6037f27c31319d6aa4164736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CHAINID 0x2B 0xE9 0xD4 0xC6 DIFFICULTY RETURN DIFFICULTY JUMP 0xAE 0xDA 0xF7 CALLCODE 0xB6 GAS NUMBER DUP1 0x26 CREATE2 0xD2 ISZERO SWAP2 0xA6 SUB PUSH32 0x27C31319D6AA4164736F6C634300080A00330000000000000000000000000000 ","sourceMap":"439:3711:107:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"rayDiv(uint256,uint256)":"infinite","rayMul(uint256,uint256)":"infinite","rayToWad(uint256)":"infinite","wadDiv(uint256,uint256)":"infinite","wadMul(uint256,uint256)":"infinite","wadToRay(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers with 27 digits of precision)Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"WadRayMath library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions to perform calculations with Wad and Ray units\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/math/WadRayMath.sol\":\"WadRayMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Provides functions to perform calculations with Wad and Ray units","version":1}}},"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol":{"ConfiguratorInputTypes":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ba5f229b99ab2adcc0c166e837d390d9721bed3f87fcaaef629552bbf996faa664736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBA 0x5F 0x22 SWAP12 SWAP10 0xAB 0x2A 0xDC 0xC0 0xC1 PUSH7 0xE837D390D9721B 0xED EXTCODEHASH DUP8 0xFC 0xAA 0xEF PUSH3 0x9552BB 0xF9 SWAP7 STATICCALL 0xA6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"62:884:108:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;62:884:108;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ba5f229b99ab2adcc0c166e837d390d9721bed3f87fcaaef629552bbf996faa664736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBA 0x5F 0x22 SWAP12 SWAP10 0xAB 0x2A 0xDC 0xC0 0xC1 PUSH7 0xE837D390D9721B 0xED EXTCODEHASH DUP8 0xFC 0xAA 0xEF PUSH3 0x9552BB 0xF9 SWAP7 STATICCALL 0xA6 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"62:884:108:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":\"ConfiguratorInputTypes\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/protocol/libraries/types/DataTypes.sol":{"DataTypes":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bf6717de2bd3bd2b852d105de48edc331b12730cfd96f23fd9bdd8d7f3f722df64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBF PUSH8 0x17DE2BD3BD2B852D LT 0x5D 0xE4 DUP15 0xDC CALLER SHL SLT PUSH20 0xCFD96F23FD9BDD8D7F3F722DF64736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"62:7306:109:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;62:7306:109;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bf6717de2bd3bd2b852d105de48edc331b12730cfd96f23fd9bdd8d7f3f722df64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBF PUSH8 0x17DE2BD3BD2B852D LT 0x5D 0xE4 DUP15 0xDC CALLER SHL SLT PUSH20 0xCFD96F23FD9BDD8D7F3F722DF64736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"62:7306:109:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/libraries/types/DataTypes.sol\":\"DataTypes\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol":{"DefaultReserveInterestRateStrategy":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"uint256","name":"optimalUsageRatio","type":"uint256"},{"internalType":"uint256","name":"baseVariableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"baseStableRateOffset","type":"uint256"},{"internalType":"uint256","name":"stableRateExcessOffset","type":"uint256"},{"internalType":"uint256","name":"optimalStableToTotalDebtRatio","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"params","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseStableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateExcessOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","details":"The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO` point of usage and another from that one to 100%. - An instance of this same contract, can't be used across different Aave markets, due to the caching   of the PoolAddressesProvider","kind":"dev","methods":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"params":{"params":"The parameters needed to calculate interest rates"},"returns":{"_0":"liquidityRate The liquidity rate expressed in rays","_1":"stableBorrowRate The stable borrow rate expressed in rays","_2":"variableBorrowRate The variable borrow rate expressed in rays"}},"constructor":{"details":"Constructor.","params":{"baseStableRateOffset":"The premium on top of variable rate for base stable borrowing rate","baseVariableBorrowRate":"The base variable borrow rate","optimalStableToTotalDebtRatio":"The optimal stable debt to total debt ratio of the reserve","optimalUsageRatio":"The optimal usage ratio","provider":"The address of the PoolAddressesProvider contract","stableRateExcessOffset":"The premium on top of stable rate when there stable debt surpass the threshold","stableRateSlope1":"The stable rate slope below optimal usage ratio","stableRateSlope2":"The stable rate slope above optimal usage ratio","variableRateSlope1":"The variable rate slope below optimal usage ratio","variableRateSlope2":"The variable rate slope above optimal usage ratio"}},"getBaseStableBorrowRate()":{"returns":{"_0":"The base stable borrow rate, expressed in ray"}},"getBaseVariableBorrowRate()":{"returns":{"_0":"The base variable borrow rate, expressed in ray"}},"getMaxVariableBorrowRate()":{"returns":{"_0":"The maximum variable borrow rate, expressed in ray"}},"getStableRateExcessOffset()":{"details":"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","returns":{"_0":"The stable rate excess offset, expressed in ray"}},"getStableRateSlope1()":{"details":"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getStableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getVariableRateSlope1()":{"details":"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}},"getVariableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider contract","returns":{"_0":"The address of the PoolAddressesProvider contract"}},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO":{"details":"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)","return":"The max excess stable to total debt ratio, expressed in ray.","returns":{"_0":"The max excess stable to total debt ratio, expressed in ray."}},"MAX_EXCESS_USAGE_RATIO":{"details":"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)","return":"The max excess usage ratio, expressed in ray.","returns":{"_0":"The max excess usage ratio, expressed in ray."}},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO":{"return":"The optimal stable to total debt ratio, expressed in ray.","returns":{"_0":"The optimal stable to total debt ratio, expressed in ray."}},"OPTIMAL_USAGE_RATIO":{"return":"The optimal usage ratio, expressed in ray.","returns":{"_0":"The optimal usage ratio, expressed in ray."}}},"title":"DefaultReserveInterestRateStrategy contract","version":1},"evm":{"bytecode":{"functionDebugData":{"@_24381":{"entryPoint":null,"id":24381,"parameterSlots":10,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":326,"id":null,"parameterSlots":2,"returnSlots":10},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":465,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":550,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1722:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"279:612:124","statements":[{"body":{"nodeType":"YulBlock","src":"326:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"335:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"328:6:124"},"nodeType":"YulFunctionCall","src":"328:12:124"},"nodeType":"YulExpressionStatement","src":"328:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"300:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"309:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"296:3:124"},"nodeType":"YulFunctionCall","src":"296:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"321:3:124","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"292:3:124"},"nodeType":"YulFunctionCall","src":"292:33:124"},"nodeType":"YulIf","src":"289:53:124"},{"nodeType":"YulVariableDeclaration","src":"351:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"370:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"364:5:124"},"nodeType":"YulFunctionCall","src":"364:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"355:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"443:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"452:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"455:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"445:6:124"},"nodeType":"YulFunctionCall","src":"445:12:124"},"nodeType":"YulExpressionStatement","src":"445:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"402:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"413:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"428:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"433:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"424:3:124"},"nodeType":"YulFunctionCall","src":"424:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"437:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"420:3:124"},"nodeType":"YulFunctionCall","src":"420:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"409:3:124"},"nodeType":"YulFunctionCall","src":"409:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"399:2:124"},"nodeType":"YulFunctionCall","src":"399:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"392:6:124"},"nodeType":"YulFunctionCall","src":"392:50:124"},"nodeType":"YulIf","src":"389:70:124"},{"nodeType":"YulAssignment","src":"468:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"478:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"468:6:124"}]},{"nodeType":"YulAssignment","src":"492:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"512:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"523:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"508:3:124"},"nodeType":"YulFunctionCall","src":"508:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"502:5:124"},"nodeType":"YulFunctionCall","src":"502:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"492:6:124"}]},{"nodeType":"YulAssignment","src":"536:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"556:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"567:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"552:3:124"},"nodeType":"YulFunctionCall","src":"552:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"546:5:124"},"nodeType":"YulFunctionCall","src":"546:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"536:6:124"}]},{"nodeType":"YulAssignment","src":"580:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"600:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"611:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"596:3:124"},"nodeType":"YulFunctionCall","src":"596:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"590:5:124"},"nodeType":"YulFunctionCall","src":"590:25:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"580:6:124"}]},{"nodeType":"YulAssignment","src":"624:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"644:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"655:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"640:3:124"},"nodeType":"YulFunctionCall","src":"640:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"634:5:124"},"nodeType":"YulFunctionCall","src":"634:26:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"624:6:124"}]},{"nodeType":"YulAssignment","src":"669:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"689:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"700:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"685:3:124"},"nodeType":"YulFunctionCall","src":"685:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"679:5:124"},"nodeType":"YulFunctionCall","src":"679:26:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"669:6:124"}]},{"nodeType":"YulAssignment","src":"714:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"734:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"745:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"730:3:124"},"nodeType":"YulFunctionCall","src":"730:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"724:5:124"},"nodeType":"YulFunctionCall","src":"724:26:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"714:6:124"}]},{"nodeType":"YulAssignment","src":"759:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"779:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"790:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"775:3:124"},"nodeType":"YulFunctionCall","src":"775:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"769:5:124"},"nodeType":"YulFunctionCall","src":"769:26:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"759:6:124"}]},{"nodeType":"YulAssignment","src":"804:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"824:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"835:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"820:3:124"},"nodeType":"YulFunctionCall","src":"820:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"814:5:124"},"nodeType":"YulFunctionCall","src":"814:26:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"804:6:124"}]},{"nodeType":"YulAssignment","src":"849:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"869:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"880:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"865:3:124"},"nodeType":"YulFunctionCall","src":"865:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"859:5:124"},"nodeType":"YulFunctionCall","src":"859:26:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"849:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"173:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"184:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"196:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"204:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"212:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"220:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"228:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"236:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"244:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"252:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"260:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"268:6:124","type":""}],"src":"14:877:124"},{"body":{"nodeType":"YulBlock","src":"1017:476:124","statements":[{"nodeType":"YulVariableDeclaration","src":"1027:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1031:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1055:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1066:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1048:6:124"},"nodeType":"YulFunctionCall","src":"1048:21:124"},"nodeType":"YulExpressionStatement","src":"1048:21:124"},{"nodeType":"YulVariableDeclaration","src":"1078:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1098:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1092:5:124"},"nodeType":"YulFunctionCall","src":"1092:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1082:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1125:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1136:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1121:3:124"},"nodeType":"YulFunctionCall","src":"1121:18:124"},{"name":"length","nodeType":"YulIdentifier","src":"1141:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1114:6:124"},"nodeType":"YulFunctionCall","src":"1114:34:124"},"nodeType":"YulExpressionStatement","src":"1114:34:124"},{"nodeType":"YulVariableDeclaration","src":"1157:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1166:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1161:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"1226:90:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1255:9:124"},{"name":"i","nodeType":"YulIdentifier","src":"1266:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1251:3:124"},"nodeType":"YulFunctionCall","src":"1251:17:124"},{"kind":"number","nodeType":"YulLiteral","src":"1270:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1247:3:124"},"nodeType":"YulFunctionCall","src":"1247:26:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1289:6:124"},{"name":"i","nodeType":"YulIdentifier","src":"1297:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1285:3:124"},"nodeType":"YulFunctionCall","src":"1285:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1301:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1281:3:124"},"nodeType":"YulFunctionCall","src":"1281:23:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1275:5:124"},"nodeType":"YulFunctionCall","src":"1275:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1240:6:124"},"nodeType":"YulFunctionCall","src":"1240:66:124"},"nodeType":"YulExpressionStatement","src":"1240:66:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1187:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"1190:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1184:2:124"},"nodeType":"YulFunctionCall","src":"1184:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1198:19:124","statements":[{"nodeType":"YulAssignment","src":"1200:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1209:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1212:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1205:3:124"},"nodeType":"YulFunctionCall","src":"1205:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1200:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"1180:3:124","statements":[]},"src":"1176:140:124"},{"body":{"nodeType":"YulBlock","src":"1350:66:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1379:9:124"},{"name":"length","nodeType":"YulIdentifier","src":"1390:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1375:3:124"},"nodeType":"YulFunctionCall","src":"1375:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"1399:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1371:3:124"},"nodeType":"YulFunctionCall","src":"1371:31:124"},{"kind":"number","nodeType":"YulLiteral","src":"1404:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1364:6:124"},"nodeType":"YulFunctionCall","src":"1364:42:124"},"nodeType":"YulExpressionStatement","src":"1364:42:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1331:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"1334:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1328:2:124"},"nodeType":"YulFunctionCall","src":"1328:13:124"},"nodeType":"YulIf","src":"1325:91:124"},{"nodeType":"YulAssignment","src":"1425:62:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1441:9:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1460:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"1468:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1456:3:124"},"nodeType":"YulFunctionCall","src":"1456:15:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1477:2:124","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1473:3:124"},"nodeType":"YulFunctionCall","src":"1473:7:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1452:3:124"},"nodeType":"YulFunctionCall","src":"1452:29:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1437:3:124"},"nodeType":"YulFunctionCall","src":"1437:45:124"},{"kind":"number","nodeType":"YulLiteral","src":"1484:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1433:3:124"},"nodeType":"YulFunctionCall","src":"1433:54:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1425:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"986:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"997:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1008:4:124","type":""}],"src":"896:597:124"},{"body":{"nodeType":"YulBlock","src":"1547:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"1577:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1598:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1605:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1610:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1601:3:124"},"nodeType":"YulFunctionCall","src":"1601:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1591:6:124"},"nodeType":"YulFunctionCall","src":"1591:31:124"},"nodeType":"YulExpressionStatement","src":"1591:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1642:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1645:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1635:6:124"},"nodeType":"YulFunctionCall","src":"1635:15:124"},"nodeType":"YulExpressionStatement","src":"1635:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1670:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1673:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1663:6:124"},"nodeType":"YulFunctionCall","src":"1663:15:124"},"nodeType":"YulExpressionStatement","src":"1663:15:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1563:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1566:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1560:2:124"},"nodeType":"YulFunctionCall","src":"1560:8:124"},"nodeType":"YulIf","src":"1557:131:124"},{"nodeType":"YulAssignment","src":"1697:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1709:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"1712:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1705:3:124"},"nodeType":"YulFunctionCall","src":"1705:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1697:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1529:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"1532:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1538:4:124","type":""}],"src":"1498:222:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9\n    {\n        if slt(sub(dataEnd, headStart), 320) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := mload(add(headStart, 256))\n        value9 := mload(add(headStart, 288))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"61020060405234801561001157600080fd5b5060405162000f7538038062000f7583398101604081905261003291610146565b886b033b2e3c9fd0803ce8000000101560405180604001604052806002815260200161383360f01b815250906100845760405162461bcd60e51b815260040161007b91906101d1565b60405180910390fd5b50806b033b2e3c9fd0803ce80000001015604051806040016040528060028152602001610e0d60f21b815250906100ce5760405162461bcd60e51b815260040161007b91906101d1565b5060808990526100ea896b033b2e3c9fd0803ce8000000610226565b60c05260a0819052610108816b033b2e3c9fd0803ce8000000610226565b60e052506001600160a01b0390981661010052610120959095526101409390935261016091909152610180526101a0526101c052506101e05261024b565b6000806000806000806000806000806101408b8d03121561016657600080fd5b8a516001600160a01b038116811461017d57600080fd5b809a505060208b0151985060408b0151975060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b600060208083528351808285015260005b818110156101fe578581018301518582016040015282016101e2565b81811115610210576000604083870101525b50601f01601f1916929092016040019392505050565b60008282101561024657634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610c0d62000368600039600081816102710152610821015260006108c601526000818161017201526105ec0152600081816102970152818161061701526106ec0152600081816102bd0152818161030c0152610654015260008181610142015281816103300152818161067f0152818161075e01526108e70152600081816101980152818161035101526103fa0152600060f40152600081816102e601526107cb01526000818161024501526105900152600081816101e80152818161079a01526107ec0152600081816101c10152818161055f015281816105b1015281816106c301526107380152610c0d6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a58987091161008c578063bc62690811610066578063bc6269081461026f578063d5cd739114610295578063f4202409146102bb578063fe5fd698146102e157600080fd5b8063a589870914610212578063a9c622f814610240578063acd786861461026757600080fd5b806334762ca5116100c857806334762ca51461019657806354c365c6146101bc5780636fb92589146101e357806380031e371461020a57600080fd5b80630542975c146100ef5780630b3429a21461014057806314e32da414610170575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b604051908152602001610137565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b610162610308565b610225610220366004610adb565b610384565b60408051938452602084019290925290820152606001610137565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101626108bf565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006103757f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610b8f565b61037f9190610b8f565b905090565b60008060006103d86040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b846080015185606001516103ec9190610b8f565b6020820152600060808201527f000000000000000000000000000000000000000000000000000000000000000060408201526104266108bf565b606082015260208101511561055d57602081015160608601516104489161090b565b60e08083019190915260408087015160208801519288015161010089015192517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291939216906370a0823190602401602060405180830381865afa1580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190610ba7565b6105019190610b8f565b61050b9190610bc0565b808252602082015161051c91610b8f565b610100820181905260208201516105329161090b565b60a082015284516101008201516105579161054c91610b8f565b60208301519061090b565b60c08201525b7f00000000000000000000000000000000000000000000000000000000000000008160a0015111156106be5760006105e57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008460a001516105df9190610bc0565b9061090b565b90506106117f00000000000000000000000000000000000000000000000000000000000000008261094a565b61063b907f0000000000000000000000000000000000000000000000000000000000000000610b8f565b8260600181815161064c9190610b8f565b9052506106797f00000000000000000000000000000000000000000000000000000000000000008261094a565b6106a3907f0000000000000000000000000000000000000000000000000000000000000000610b8f565b826040018181516106b49190610b8f565b9052506107989050565b6107197f00000000000000000000000000000000000000000000000000000000000000006105df8360a001517f000000000000000000000000000000000000000000000000000000000000000061094a90919063ffffffff16565b8160600181815161072a9190610b8f565b90525060a0810151610783907f0000000000000000000000000000000000000000000000000000000000000000906105df907f00000000000000000000000000000000000000000000000000000000000000009061094a565b816040018181516107949190610b8f565b9052505b7f00000000000000000000000000000000000000000000000000000000000000008160e00151111561085c57600061081a7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008460e001516105df9190610bc0565b90506108467f00000000000000000000000000000000000000000000000000000000000000008261094a565b826060018181516108579190610b8f565b905250505b6108a18560c001516127106108719190610bc0565b61089b8360c0015161089589606001518a6080015187604001518c60a001516109a1565b9061094a565b90610a08565b60808201819052606082015160409092015190969195509350915050565b600061037f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610b8f565b600081156b033b2e3c9fd0803ce80000006002840419048411171561092f57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761097f57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6000806109ae8587610b8f565b9050806109bf576000915050610a00565b60006109ce8561089588610a4b565b905060006109df856108958a610a4b565b905060006109f96109ef85610a4b565b6105df8486610b8f565b9450505050505b949350505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610a3d57600080fd5b506127109102611388010490565b633b9aca008181029081048214610a6157600080fd5b919050565b604051610120810167ffffffffffffffff81118282101715610ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6157600080fd5b60006101208284031215610aee57600080fd5b610af6610a66565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c0820152610b4260e08401610ab7565b60e0820152610100610b55818501610ab7565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610ba257610ba2610b60565b500190565b600060208284031215610bb957600080fd5b5051919050565b600082821015610bd257610bd2610b60565b50039056fea2646970667358221220f1e92c2f40dc3cef47809ecfaf576df226cdd354a99c1d82b228c4c71b0e0dc164736f6c634300080a0033","opcodes":"PUSH2 0x200 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xF75 CODESIZE SUB DUP1 PUSH3 0xF75 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x32 SWAP2 PUSH2 0x146 JUMP JUMPDEST DUP9 PUSH12 0x33B2E3C9FD0803CE8000000 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3833 PUSH1 0xF0 SHL DUP2 MSTORE POP SWAP1 PUSH2 0x84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH12 0x33B2E3C9FD0803CE8000000 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE0D PUSH1 0xF2 SHL DUP2 MSTORE POP SWAP1 PUSH2 0xCE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST POP PUSH1 0x80 DUP10 SWAP1 MSTORE PUSH2 0xEA DUP10 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x226 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE PUSH2 0x108 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x226 JUMP JUMPDEST PUSH1 0xE0 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP9 AND PUSH2 0x100 MSTORE PUSH2 0x120 SWAP6 SWAP1 SWAP6 MSTORE PUSH2 0x140 SWAP4 SWAP1 SWAP4 MSTORE PUSH2 0x160 SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 MSTORE PUSH2 0x1A0 MSTORE PUSH2 0x1C0 MSTORE POP PUSH2 0x1E0 MSTORE PUSH2 0x24B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP12 DUP14 SUB SLT ISZERO PUSH2 0x166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x17D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP11 POP POP PUSH1 0x20 DUP12 ADD MLOAD SWAP9 POP PUSH1 0x40 DUP12 ADD MLOAD SWAP8 POP PUSH1 0x60 DUP12 ADD MLOAD SWAP7 POP PUSH1 0x80 DUP12 ADD MLOAD SWAP6 POP PUSH1 0xA0 DUP12 ADD MLOAD SWAP5 POP PUSH1 0xC0 DUP12 ADD MLOAD SWAP4 POP PUSH1 0xE0 DUP12 ADD MLOAD SWAP3 POP PUSH2 0x100 DUP12 ADD MLOAD SWAP2 POP PUSH2 0x120 DUP12 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP2 SWAP5 SWAP8 SWAP11 POP SWAP3 SWAP6 SWAP9 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1FE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1E2 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x210 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x246 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0xC0D PUSH3 0x368 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x271 ADD MSTORE PUSH2 0x821 ADD MSTORE PUSH1 0x0 PUSH2 0x8C6 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x172 ADD MSTORE PUSH2 0x5EC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x297 ADD MSTORE DUP2 DUP2 PUSH2 0x617 ADD MSTORE PUSH2 0x6EC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2BD ADD MSTORE DUP2 DUP2 PUSH2 0x30C ADD MSTORE PUSH2 0x654 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x142 ADD MSTORE DUP2 DUP2 PUSH2 0x330 ADD MSTORE DUP2 DUP2 PUSH2 0x67F ADD MSTORE DUP2 DUP2 PUSH2 0x75E ADD MSTORE PUSH2 0x8E7 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x198 ADD MSTORE DUP2 DUP2 PUSH2 0x351 ADD MSTORE PUSH2 0x3FA ADD MSTORE PUSH1 0x0 PUSH1 0xF4 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2E6 ADD MSTORE PUSH2 0x7CB ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x245 ADD MSTORE PUSH2 0x590 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1E8 ADD MSTORE DUP2 DUP2 PUSH2 0x79A ADD MSTORE PUSH2 0x7EC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1C1 ADD MSTORE DUP2 DUP2 PUSH2 0x55F ADD MSTORE DUP2 DUP2 PUSH2 0x5B1 ADD MSTORE DUP2 DUP2 PUSH2 0x6C3 ADD MSTORE PUSH2 0x738 ADD MSTORE PUSH2 0xC0D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA5898709 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xBC626908 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBC626908 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xD5CD7391 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xF4202409 EQ PUSH2 0x2BB JUMPI DUP1 PUSH4 0xFE5FD698 EQ PUSH2 0x2E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA5898709 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA9C622F8 EQ PUSH2 0x240 JUMPI DUP1 PUSH4 0xACD78686 EQ PUSH2 0x267 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34762CA5 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x34762CA5 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0x54C365C6 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x6FB92589 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x80031E37 EQ PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xB3429A2 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x14E32DA4 EQ PUSH2 0x170 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x116 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x225 PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0xADB JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x137 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x8BF JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x375 PUSH32 0x0 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x37F SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3D8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x426 PUSH2 0x8BF JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x55D JUMPI PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x448 SWAP2 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xE0 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP9 ADD MLOAD SWAP3 DUP9 ADD MLOAD PUSH2 0x100 DUP10 ADD MLOAD SWAP3 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP4 SWAP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F7 SWAP2 SWAP1 PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x501 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x50B SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x51C SWAP2 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x532 SWAP2 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP5 MLOAD PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x557 SWAP2 PUSH2 0x54C SWAP2 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD SWAP1 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE JUMPDEST PUSH32 0x0 DUP2 PUSH1 0xA0 ADD MLOAD GT ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 PUSH2 0x5E5 PUSH32 0x0 PUSH32 0x0 DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x5DF SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST SWAP1 PUSH2 0x90B JUMP JUMPDEST SWAP1 POP PUSH2 0x611 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x63B SWAP1 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP3 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x64C SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x679 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x6A3 SWAP1 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP3 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x6B4 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x798 SWAP1 POP JUMP JUMPDEST PUSH2 0x719 PUSH32 0x0 PUSH2 0x5DF DUP4 PUSH1 0xA0 ADD MLOAD PUSH32 0x0 PUSH2 0x94A SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x72A SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x783 SWAP1 PUSH32 0x0 SWAP1 PUSH2 0x5DF SWAP1 PUSH32 0x0 SWAP1 PUSH2 0x94A JUMP JUMPDEST DUP2 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x794 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH32 0x0 DUP2 PUSH1 0xE0 ADD MLOAD GT ISZERO PUSH2 0x85C JUMPI PUSH1 0x0 PUSH2 0x81A PUSH32 0x0 PUSH32 0x0 DUP5 PUSH1 0xE0 ADD MLOAD PUSH2 0x5DF SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST SWAP1 POP PUSH2 0x846 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST DUP3 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x857 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP POP JUMPDEST PUSH2 0x8A1 DUP6 PUSH1 0xC0 ADD MLOAD PUSH2 0x2710 PUSH2 0x871 SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST PUSH2 0x89B DUP4 PUSH1 0xC0 ADD MLOAD PUSH2 0x895 DUP10 PUSH1 0x60 ADD MLOAD DUP11 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP13 PUSH1 0xA0 ADD MLOAD PUSH2 0x9A1 JUMP JUMPDEST SWAP1 PUSH2 0x94A JUMP JUMPDEST SWAP1 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP7 SWAP2 SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F PUSH32 0x0 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x92F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x97F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x9AE DUP6 DUP8 PUSH2 0xB8F JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x9BF JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0xA00 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9CE DUP6 PUSH2 0x895 DUP9 PUSH2 0xA4B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9DF DUP6 PUSH2 0x895 DUP11 PUSH2 0xA4B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9F9 PUSH2 0x9EF DUP6 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x5DF DUP5 DUP7 PUSH2 0xB8F JUMP JUMPDEST SWAP5 POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xA3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xAB1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF6 PUSH2 0xA66 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xB42 PUSH1 0xE0 DUP5 ADD PUSH2 0xAB7 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0xB55 DUP2 DUP6 ADD PUSH2 0xAB7 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xBA2 JUMPI PUSH2 0xBA2 PUSH2 0xB60 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xBD2 JUMPI PUSH2 0xBD2 PUSH2 0xB60 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALL 0xE9 0x2C 0x2F BLOCKHASH 0xDC EXTCODECOPY 0xEF SELFBALANCE DUP1 SWAP15 0xCF 0xAF JUMPI PUSH14 0xF226CDD354A99C1D82B228C4C71B 0xE 0xD 0xC1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1117:9169:110:-:0;;;3632:1222;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4021:17;704:4:107;4003:35:110;;4040:34;;;;;;;;;;;;;-1:-1:-1;;;4040:34:110;;;3995:80;;;;;-1:-1:-1;;;3995:80:110;;;;;;;;:::i;:::-;;;;;;;;;;4114:29;704:4:107;4096:47:110;;4151:49;;;;;;;;;;;;;-1:-1:-1;;;4151:49:110;;;4081:125;;;;;-1:-1:-1;;;4081:125:110;;;;;;;;:::i;:::-;-1:-1:-1;4212:39:110;;;;4282:34;4234:17;704:4:107;4282:34:110;:::i;:::-;4257:59;;4322:66;;;;4434:46;4359:29;704:4:107;4434:46:110;:::i;:::-;4394:86;;-1:-1:-1;;;;;;4486:29:110;;;;;4521:48;;;;;4575:40;;;;;4621;;;;;4667:36;;4709;;4751:44;;-1:-1:-1;4801:48:110;;1117:9169;;14:877:124;196:6;204;212;220;228;236;244;252;260;268;321:3;309:9;300:7;296:23;292:33;289:53;;;338:1;335;328:12;289:53;364:16;;-1:-1:-1;;;;;409:31:124;;399:42;;389:70;;455:1;452;445:12;389:70;478:5;468:15;;;523:2;512:9;508:18;502:25;492:35;;567:2;556:9;552:18;546:25;536:35;;611:2;600:9;596:18;590:25;580:35;;655:3;644:9;640:19;634:26;624:36;;700:3;689:9;685:19;679:26;669:36;;745:3;734:9;730:19;724:26;714:36;;790:3;779:9;775:19;769:26;759:36;;835:3;824:9;820:19;814:26;804:36;;880:3;869:9;865:19;859:26;849:36;;14:877;;;;;;;;;;;;;:::o;896:597::-;1008:4;1037:2;1066;1055:9;1048:21;1098:6;1092:13;1141:6;1136:2;1125:9;1121:18;1114:34;1166:1;1176:140;1190:6;1187:1;1184:13;1176:140;;;1285:14;;;1281:23;;1275:30;1251:17;;;1270:2;1247:26;1240:66;1205:10;;1176:140;;;1334:6;1331:1;1328:13;1325:91;;;1404:1;1399:2;1390:6;1379:9;1375:22;1371:31;1364:42;1325:91;-1:-1:-1;1477:2:124;1456:15;-1:-1:-1;;1452:29:124;1437:45;;;;1484:2;1433:54;;896:597;-1:-1:-1;;;896:597:124:o;1498:222::-;1538:4;1566:1;1563;1560:8;1557:131;;;1610:10;1605:3;1601:20;1598:1;1591:31;1645:4;1642:1;1635:15;1673:4;1670:1;1663:15;1557:131;-1:-1:-1;1705:9:124;;1498:222::o;:::-;1117:9169:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_24269":{"entryPoint":null,"id":24269,"parameterSlots":0,"returnSlots":0},"@MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO_24266":{"entryPoint":null,"id":24266,"parameterSlots":0,"returnSlots":0},"@MAX_EXCESS_USAGE_RATIO_24263":{"entryPoint":null,"id":24263,"parameterSlots":0,"returnSlots":0},"@OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO_24260":{"entryPoint":null,"id":24260,"parameterSlots":0,"returnSlots":0},"@OPTIMAL_USAGE_RATIO_24257":{"entryPoint":null,"id":24257,"parameterSlots":0,"returnSlots":0},"@_getOverallBorrowRate_24784":{"entryPoint":2465,"id":24784,"parameterSlots":4,"returnSlots":1},"@calculateInterestRates_24725":{"entryPoint":900,"id":24725,"parameterSlots":1,"returnSlots":3},"@getBaseStableBorrowRate_24437":{"entryPoint":2239,"id":24437,"parameterSlots":0,"returnSlots":1},"@getBaseVariableBorrowRate_24447":{"entryPoint":null,"id":24447,"parameterSlots":0,"returnSlots":1},"@getMaxVariableBorrowRate_24461":{"entryPoint":776,"id":24461,"parameterSlots":0,"returnSlots":1},"@getStableRateExcessOffset_24426":{"entryPoint":null,"id":24426,"parameterSlots":0,"returnSlots":1},"@getStableRateSlope1_24408":{"entryPoint":null,"id":24408,"parameterSlots":0,"returnSlots":1},"@getStableRateSlope2_24417":{"entryPoint":null,"id":24417,"parameterSlots":0,"returnSlots":1},"@getVariableRateSlope1_24390":{"entryPoint":null,"id":24390,"parameterSlots":0,"returnSlots":1},"@getVariableRateSlope2_24399":{"entryPoint":null,"id":24399,"parameterSlots":0,"returnSlots":1},"@percentMul_23713":{"entryPoint":2568,"id":23713,"parameterSlots":2,"returnSlots":1},"@rayDiv_23792":{"entryPoint":2315,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":2378,"id":23780,"parameterSlots":2,"returnSlots":1},"@wadToRay_23812":{"entryPoint":2635,"id":23812,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":2743,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr":{"entryPoint":2779,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":2983,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"allocate_memory":{"entryPoint":2662,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2959,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3008,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":2912,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3121:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:124","statements":[{"nodeType":"YulAssignment","src":"156:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:124"},"nodeType":"YulFunctionCall","src":"164:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:124"},"nodeType":"YulFunctionCall","src":"209:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:124"},"nodeType":"YulFunctionCall","src":"191:74:124"},"nodeType":"YulExpressionStatement","src":"191:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:124","type":""}],"src":"14:257:124"},{"body":{"nodeType":"YulBlock","src":"377:76:124","statements":[{"nodeType":"YulAssignment","src":"387:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"399:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"410:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"395:3:124"},"nodeType":"YulFunctionCall","src":"395:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"387:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"429:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"440:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"422:6:124"},"nodeType":"YulFunctionCall","src":"422:25:124"},"nodeType":"YulExpressionStatement","src":"422:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"346:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"357:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"368:4:124","type":""}],"src":"276:177:124"},{"body":{"nodeType":"YulBlock","src":"499:360:124","statements":[{"nodeType":"YulAssignment","src":"509:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"525:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"519:5:124"},"nodeType":"YulFunctionCall","src":"519:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"509:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"537:34:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"559:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"567:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:124"},"nodeType":"YulFunctionCall","src":"555:16:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"541:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"654:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"675:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"678:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"668:6:124"},"nodeType":"YulFunctionCall","src":"668:88:124"},"nodeType":"YulExpressionStatement","src":"668:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"776:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"779:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"769:6:124"},"nodeType":"YulFunctionCall","src":"769:15:124"},"nodeType":"YulExpressionStatement","src":"769:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"804:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"807:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"797:6:124"},"nodeType":"YulFunctionCall","src":"797:15:124"},"nodeType":"YulExpressionStatement","src":"797:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"589:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"601:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"586:2:124"},"nodeType":"YulFunctionCall","src":"586:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"625:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"637:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"622:2:124"},"nodeType":"YulFunctionCall","src":"622:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"583:2:124"},"nodeType":"YulFunctionCall","src":"583:62:124"},"nodeType":"YulIf","src":"580:242:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"838:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"842:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"831:6:124"},"nodeType":"YulFunctionCall","src":"831:22:124"},"nodeType":"YulExpressionStatement","src":"831:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"488:6:124","type":""}],"src":"458:401:124"},{"body":{"nodeType":"YulBlock","src":"913:147:124","statements":[{"nodeType":"YulAssignment","src":"923:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"945:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"932:12:124"},"nodeType":"YulFunctionCall","src":"932:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"923:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1038:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1047:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1050:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1040:6:124"},"nodeType":"YulFunctionCall","src":"1040:12:124"},"nodeType":"YulExpressionStatement","src":"1040:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"974:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"985:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"992:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"981:3:124"},"nodeType":"YulFunctionCall","src":"981:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"971:2:124"},"nodeType":"YulFunctionCall","src":"971:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"964:6:124"},"nodeType":"YulFunctionCall","src":"964:73:124"},"nodeType":"YulIf","src":"961:93:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"892:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"903:5:124","type":""}],"src":"864:196:124"},{"body":{"nodeType":"YulBlock","src":"1182:741:124","statements":[{"body":{"nodeType":"YulBlock","src":"1229:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1238:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1241:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1231:6:124"},"nodeType":"YulFunctionCall","src":"1231:12:124"},"nodeType":"YulExpressionStatement","src":"1231:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1203:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1212:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1199:3:124"},"nodeType":"YulFunctionCall","src":"1199:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1224:3:124","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1195:3:124"},"nodeType":"YulFunctionCall","src":"1195:33:124"},"nodeType":"YulIf","src":"1192:53:124"},{"nodeType":"YulVariableDeclaration","src":"1254:30:124","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1267:15:124"},"nodeType":"YulFunctionCall","src":"1267:17:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1258:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1300:5:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1320:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1307:12:124"},"nodeType":"YulFunctionCall","src":"1307:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1293:6:124"},"nodeType":"YulFunctionCall","src":"1293:38:124"},"nodeType":"YulExpressionStatement","src":"1293:38:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1351:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1358:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1347:3:124"},"nodeType":"YulFunctionCall","src":"1347:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1380:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1391:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1376:3:124"},"nodeType":"YulFunctionCall","src":"1376:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1363:12:124"},"nodeType":"YulFunctionCall","src":"1363:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1340:6:124"},"nodeType":"YulFunctionCall","src":"1340:56:124"},"nodeType":"YulExpressionStatement","src":"1340:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1416:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1423:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1412:3:124"},"nodeType":"YulFunctionCall","src":"1412:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1445:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1456:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1441:3:124"},"nodeType":"YulFunctionCall","src":"1441:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1428:12:124"},"nodeType":"YulFunctionCall","src":"1428:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1405:6:124"},"nodeType":"YulFunctionCall","src":"1405:56:124"},"nodeType":"YulExpressionStatement","src":"1405:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1481:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1488:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1477:3:124"},"nodeType":"YulFunctionCall","src":"1477:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1493:12:124"},"nodeType":"YulFunctionCall","src":"1493:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1470:6:124"},"nodeType":"YulFunctionCall","src":"1470:56:124"},"nodeType":"YulExpressionStatement","src":"1470:56:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1546:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1553:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1542:3:124"},"nodeType":"YulFunctionCall","src":"1542:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1576:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1587:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1572:3:124"},"nodeType":"YulFunctionCall","src":"1572:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1559:12:124"},"nodeType":"YulFunctionCall","src":"1559:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1535:6:124"},"nodeType":"YulFunctionCall","src":"1535:58:124"},"nodeType":"YulExpressionStatement","src":"1535:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1613:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1620:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1609:3:124"},"nodeType":"YulFunctionCall","src":"1609:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1654:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1639:3:124"},"nodeType":"YulFunctionCall","src":"1639:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1626:12:124"},"nodeType":"YulFunctionCall","src":"1626:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1602:6:124"},"nodeType":"YulFunctionCall","src":"1602:58:124"},"nodeType":"YulExpressionStatement","src":"1602:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1680:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1687:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1676:3:124"},"nodeType":"YulFunctionCall","src":"1676:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1710:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1721:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1706:3:124"},"nodeType":"YulFunctionCall","src":"1706:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1693:12:124"},"nodeType":"YulFunctionCall","src":"1693:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1669:6:124"},"nodeType":"YulFunctionCall","src":"1669:58:124"},"nodeType":"YulExpressionStatement","src":"1669:58:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1747:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1754:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1743:3:124"},"nodeType":"YulFunctionCall","src":"1743:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1783:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1794:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1779:3:124"},"nodeType":"YulFunctionCall","src":"1779:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1760:18:124"},"nodeType":"YulFunctionCall","src":"1760:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1736:6:124"},"nodeType":"YulFunctionCall","src":"1736:64:124"},"nodeType":"YulExpressionStatement","src":"1736:64:124"},{"nodeType":"YulVariableDeclaration","src":"1809:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"1819:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1813:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1842:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1849:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1838:3:124"},"nodeType":"YulFunctionCall","src":"1838:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1877:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"1888:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1873:3:124"},"nodeType":"YulFunctionCall","src":"1873:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1854:18:124"},"nodeType":"YulFunctionCall","src":"1854:38:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1831:6:124"},"nodeType":"YulFunctionCall","src":"1831:62:124"},"nodeType":"YulExpressionStatement","src":"1831:62:124"},{"nodeType":"YulAssignment","src":"1902:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1912:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1902:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1148:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1159:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1171:6:124","type":""}],"src":"1065:858:124"},{"body":{"nodeType":"YulBlock","src":"2085:162:124","statements":[{"nodeType":"YulAssignment","src":"2095:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2107:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2118:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2103:3:124"},"nodeType":"YulFunctionCall","src":"2103:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2095:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2137:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2148:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2130:6:124"},"nodeType":"YulFunctionCall","src":"2130:25:124"},"nodeType":"YulExpressionStatement","src":"2130:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2175:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2186:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2171:3:124"},"nodeType":"YulFunctionCall","src":"2171:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2191:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2164:6:124"},"nodeType":"YulFunctionCall","src":"2164:34:124"},"nodeType":"YulExpressionStatement","src":"2164:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2218:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2229:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2214:3:124"},"nodeType":"YulFunctionCall","src":"2214:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"2234:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2207:6:124"},"nodeType":"YulFunctionCall","src":"2207:34:124"},"nodeType":"YulExpressionStatement","src":"2207:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2038:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2049:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2057:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2065:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2076:4:124","type":""}],"src":"1928:319:124"},{"body":{"nodeType":"YulBlock","src":"2284:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2301:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2304:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2294:6:124"},"nodeType":"YulFunctionCall","src":"2294:88:124"},"nodeType":"YulExpressionStatement","src":"2294:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2398:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2401:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:124"},"nodeType":"YulFunctionCall","src":"2391:15:124"},"nodeType":"YulExpressionStatement","src":"2391:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2422:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2425:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2415:6:124"},"nodeType":"YulFunctionCall","src":"2415:15:124"},"nodeType":"YulExpressionStatement","src":"2415:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2252:184:124"},{"body":{"nodeType":"YulBlock","src":"2489:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"2516:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2518:16:124"},"nodeType":"YulFunctionCall","src":"2518:18:124"},"nodeType":"YulExpressionStatement","src":"2518:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2505:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2512:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2508:3:124"},"nodeType":"YulFunctionCall","src":"2508:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2502:2:124"},"nodeType":"YulFunctionCall","src":"2502:13:124"},"nodeType":"YulIf","src":"2499:39:124"},{"nodeType":"YulAssignment","src":"2547:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2558:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"2561:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2554:3:124"},"nodeType":"YulFunctionCall","src":"2554:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2547:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2472:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"2475:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2481:3:124","type":""}],"src":"2441:128:124"},{"body":{"nodeType":"YulBlock","src":"2675:125:124","statements":[{"nodeType":"YulAssignment","src":"2685:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2697:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2708:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2693:3:124"},"nodeType":"YulFunctionCall","src":"2693:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2685:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2727:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2742:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2750:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2738:3:124"},"nodeType":"YulFunctionCall","src":"2738:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2720:6:124"},"nodeType":"YulFunctionCall","src":"2720:74:124"},"nodeType":"YulExpressionStatement","src":"2720:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2644:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2655:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2666:4:124","type":""}],"src":"2574:226:124"},{"body":{"nodeType":"YulBlock","src":"2886:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"2932:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2941:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2944:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2934:6:124"},"nodeType":"YulFunctionCall","src":"2934:12:124"},"nodeType":"YulExpressionStatement","src":"2934:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2907:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2916:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2903:3:124"},"nodeType":"YulFunctionCall","src":"2903:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2928:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2899:3:124"},"nodeType":"YulFunctionCall","src":"2899:32:124"},"nodeType":"YulIf","src":"2896:52:124"},{"nodeType":"YulAssignment","src":"2957:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2973:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2967:5:124"},"nodeType":"YulFunctionCall","src":"2967:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2957:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2852:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2863:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2875:6:124","type":""}],"src":"2805:184:124"},{"body":{"nodeType":"YulBlock","src":"3043:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"3065:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3067:16:124"},"nodeType":"YulFunctionCall","src":"3067:18:124"},"nodeType":"YulExpressionStatement","src":"3067:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3059:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3062:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3056:2:124"},"nodeType":"YulFunctionCall","src":"3056:8:124"},"nodeType":"YulIf","src":"3053:34:124"},{"nodeType":"YulAssignment","src":"3096:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3108:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"3111:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3104:3:124"},"nodeType":"YulFunctionCall","src":"3104:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3096:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3025:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"3028:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3034:4:124","type":""}],"src":"2994:125:124"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 288)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$24211_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, calldataload(headStart))\n        mstore(add(value, 32), calldataload(add(headStart, 32)))\n        mstore(add(value, 64), calldataload(add(headStart, 64)))\n        mstore(add(value, 96), calldataload(add(headStart, 96)))\n        mstore(add(value, 128), calldataload(add(headStart, 128)))\n        mstore(add(value, 160), calldataload(add(headStart, 160)))\n        mstore(add(value, 192), calldataload(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_address(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address(add(headStart, _1)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"24257":[{"length":32,"start":449},{"length":32,"start":1375},{"length":32,"start":1457},{"length":32,"start":1731},{"length":32,"start":1848}],"24260":[{"length":32,"start":488},{"length":32,"start":1946},{"length":32,"start":2028}],"24263":[{"length":32,"start":581},{"length":32,"start":1424}],"24266":[{"length":32,"start":742},{"length":32,"start":1995}],"24269":[{"length":32,"start":244}],"24271":[{"length":32,"start":408},{"length":32,"start":849},{"length":32,"start":1018}],"24273":[{"length":32,"start":322},{"length":32,"start":816},{"length":32,"start":1663},{"length":32,"start":1886},{"length":32,"start":2279}],"24275":[{"length":32,"start":701},{"length":32,"start":780},{"length":32,"start":1620}],"24277":[{"length":32,"start":663},{"length":32,"start":1559},{"length":32,"start":1772}],"24279":[{"length":32,"start":370},{"length":32,"start":1516}],"24281":[{"length":32,"start":2246}],"24283":[{"length":32,"start":625},{"length":32,"start":2081}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a58987091161008c578063bc62690811610066578063bc6269081461026f578063d5cd739114610295578063f4202409146102bb578063fe5fd698146102e157600080fd5b8063a589870914610212578063a9c622f814610240578063acd786861461026757600080fd5b806334762ca5116100c857806334762ca51461019657806354c365c6146101bc5780636fb92589146101e357806380031e371461020a57600080fd5b80630542975c146100ef5780630b3429a21461014057806314e32da414610170575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b604051908152602001610137565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b610162610308565b610225610220366004610adb565b610384565b60408051938452602084019290925290820152606001610137565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101626108bf565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006103757f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610b8f565b61037f9190610b8f565b905090565b60008060006103d86040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b846080015185606001516103ec9190610b8f565b6020820152600060808201527f000000000000000000000000000000000000000000000000000000000000000060408201526104266108bf565b606082015260208101511561055d57602081015160608601516104489161090b565b60e08083019190915260408087015160208801519288015161010089015192517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291939216906370a0823190602401602060405180830381865afa1580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190610ba7565b6105019190610b8f565b61050b9190610bc0565b808252602082015161051c91610b8f565b610100820181905260208201516105329161090b565b60a082015284516101008201516105579161054c91610b8f565b60208301519061090b565b60c08201525b7f00000000000000000000000000000000000000000000000000000000000000008160a0015111156106be5760006105e57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008460a001516105df9190610bc0565b9061090b565b90506106117f00000000000000000000000000000000000000000000000000000000000000008261094a565b61063b907f0000000000000000000000000000000000000000000000000000000000000000610b8f565b8260600181815161064c9190610b8f565b9052506106797f00000000000000000000000000000000000000000000000000000000000000008261094a565b6106a3907f0000000000000000000000000000000000000000000000000000000000000000610b8f565b826040018181516106b49190610b8f565b9052506107989050565b6107197f00000000000000000000000000000000000000000000000000000000000000006105df8360a001517f000000000000000000000000000000000000000000000000000000000000000061094a90919063ffffffff16565b8160600181815161072a9190610b8f565b90525060a0810151610783907f0000000000000000000000000000000000000000000000000000000000000000906105df907f00000000000000000000000000000000000000000000000000000000000000009061094a565b816040018181516107949190610b8f565b9052505b7f00000000000000000000000000000000000000000000000000000000000000008160e00151111561085c57600061081a7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008460e001516105df9190610bc0565b90506108467f00000000000000000000000000000000000000000000000000000000000000008261094a565b826060018181516108579190610b8f565b905250505b6108a18560c001516127106108719190610bc0565b61089b8360c0015161089589606001518a6080015187604001518c60a001516109a1565b9061094a565b90610a08565b60808201819052606082015160409092015190969195509350915050565b600061037f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610b8f565b600081156b033b2e3c9fd0803ce80000006002840419048411171561092f57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761097f57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6000806109ae8587610b8f565b9050806109bf576000915050610a00565b60006109ce8561089588610a4b565b905060006109df856108958a610a4b565b905060006109f96109ef85610a4b565b6105df8486610b8f565b9450505050505b949350505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610a3d57600080fd5b506127109102611388010490565b633b9aca008181029081048214610a6157600080fd5b919050565b604051610120810167ffffffffffffffff81118282101715610ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6157600080fd5b60006101208284031215610aee57600080fd5b610af6610a66565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c0820152610b4260e08401610ab7565b60e0820152610100610b55818501610ab7565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610ba257610ba2610b60565b500190565b600060208284031215610bb957600080fd5b5051919050565b600082821015610bd257610bd2610b60565b50039056fea2646970667358221220f1e92c2f40dc3cef47809ecfaf576df226cdd354a99c1d82b228c4c71b0e0dc164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA5898709 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xBC626908 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBC626908 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xD5CD7391 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xF4202409 EQ PUSH2 0x2BB JUMPI DUP1 PUSH4 0xFE5FD698 EQ PUSH2 0x2E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA5898709 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA9C622F8 EQ PUSH2 0x240 JUMPI DUP1 PUSH4 0xACD78686 EQ PUSH2 0x267 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34762CA5 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x34762CA5 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0x54C365C6 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x6FB92589 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x80031E37 EQ PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xB3429A2 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x14E32DA4 EQ PUSH2 0x170 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x116 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x225 PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0xADB JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x137 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x8BF JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x375 PUSH32 0x0 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x37F SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3D8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x426 PUSH2 0x8BF JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x55D JUMPI PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x448 SWAP2 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xE0 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP9 ADD MLOAD SWAP3 DUP9 ADD MLOAD PUSH2 0x100 DUP10 ADD MLOAD SWAP3 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP4 SWAP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F7 SWAP2 SWAP1 PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x501 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x50B SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x51C SWAP2 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x532 SWAP2 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP5 MLOAD PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x557 SWAP2 PUSH2 0x54C SWAP2 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD SWAP1 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE JUMPDEST PUSH32 0x0 DUP2 PUSH1 0xA0 ADD MLOAD GT ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 PUSH2 0x5E5 PUSH32 0x0 PUSH32 0x0 DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x5DF SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST SWAP1 PUSH2 0x90B JUMP JUMPDEST SWAP1 POP PUSH2 0x611 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x63B SWAP1 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP3 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x64C SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x679 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x6A3 SWAP1 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP3 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x6B4 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x798 SWAP1 POP JUMP JUMPDEST PUSH2 0x719 PUSH32 0x0 PUSH2 0x5DF DUP4 PUSH1 0xA0 ADD MLOAD PUSH32 0x0 PUSH2 0x94A SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x72A SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x783 SWAP1 PUSH32 0x0 SWAP1 PUSH2 0x5DF SWAP1 PUSH32 0x0 SWAP1 PUSH2 0x94A JUMP JUMPDEST DUP2 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x794 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH32 0x0 DUP2 PUSH1 0xE0 ADD MLOAD GT ISZERO PUSH2 0x85C JUMPI PUSH1 0x0 PUSH2 0x81A PUSH32 0x0 PUSH32 0x0 DUP5 PUSH1 0xE0 ADD MLOAD PUSH2 0x5DF SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST SWAP1 POP PUSH2 0x846 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST DUP3 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x857 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP POP JUMPDEST PUSH2 0x8A1 DUP6 PUSH1 0xC0 ADD MLOAD PUSH2 0x2710 PUSH2 0x871 SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST PUSH2 0x89B DUP4 PUSH1 0xC0 ADD MLOAD PUSH2 0x895 DUP10 PUSH1 0x60 ADD MLOAD DUP11 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP13 PUSH1 0xA0 ADD MLOAD PUSH2 0x9A1 JUMP JUMPDEST SWAP1 PUSH2 0x94A JUMP JUMPDEST SWAP1 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP7 SWAP2 SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F PUSH32 0x0 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x92F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x97F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x9AE DUP6 DUP8 PUSH2 0xB8F JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x9BF JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0xA00 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9CE DUP6 PUSH2 0x895 DUP9 PUSH2 0xA4B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9DF DUP6 PUSH2 0x895 DUP11 PUSH2 0xA4B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9F9 PUSH2 0x9EF DUP6 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x5DF DUP5 DUP7 PUSH2 0xB8F JUMP JUMPDEST SWAP5 POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xA3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xAB1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF6 PUSH2 0xA66 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xB42 PUSH1 0xE0 DUP5 ADD PUSH2 0xAB7 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0xB55 DUP2 DUP6 ADD PUSH2 0xAB7 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xBA2 JUMPI PUSH2 0xBA2 PUSH2 0xB60 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xBD2 JUMPI PUSH2 0xBD2 PUSH2 0xB60 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALL 0xE9 0x2C 0x2F BLOCKHASH 0xDC EXTCODECOPY 0xEF SELFBALANCE DUP1 SWAP15 0xCF 0xAF JUMPI PUSH14 0xF226CDD354A99C1D82B228C4C71B 0xE 0xD 0xC1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1117:9169:110:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1686:58;;;;;;;;221:42:124;209:55;;;191:74;;179:2;164:18;1686:58:110;;;;;;;;4905:102;4983:19;4905:102;;;422:25:124;;;410:2;395:18;4905:102:110;276:177:124;5360:98:110;5436:17;5360:98;;5847:119;5938:23;5847:119;;1313:44;;;;;1409:59;;;;;6017:162;;;:::i;6574:2504::-;;;;;;:::i;:::-;;:::i;:::-;;;;2130:25:124;;;2186:2;2171:18;;2164:34;;;;2214:18;;;2207:34;2118:2;2103:18;6574:2504:110;1928:319:124;1520:47:110;;;;;5670:126;;;:::i;5509:110::-;5591:23;5509:110;;5211:98;5287:17;5211:98;;5058:102;5136:19;5058:102;;1619:62;;;;;6017:162;6085:7;6155:19;6107:45;6133:19;6107:23;:45;:::i;:::-;:67;;;;:::i;:::-;6100:74;;6017:162;:::o;6574:2504::-;6698:7;6707;6716;6731:38;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6731:38:110;6818:6;:24;;;6793:6;:22;;;:49;;;;:::i;:::-;6776:14;;;:66;6877:1;6849:25;;;:29;6917:23;6884:30;;;:56;6977:25;:23;:25::i;:::-;6946:28;;;:56;7013:14;;;;:19;7009:557;;7102:14;;;;7072:22;;;;:45;;:29;:45::i;:::-;7042:27;;;;:75;;;;7249:21;;;;;7217;;;;7166:14;;;;7192:13;;;;7159:47;;;;;:32;209:55:124;;;7159:47:110;;;191:74:124;7249:21:110;;7217;7159:32;;;;164:18:124;;7159:47:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:79;;;;:::i;:::-;:111;;;;:::i;:::-;7125:145;;;7339:14;;;;7313:40;;;:::i;:::-;7279:31;;;:74;;;7385:14;;;;:54;;:21;:54::i;:::-;7361:21;;;:78;7536:15;;7502:31;;;;7471:88;;7502:49;;;:::i;:::-;7471:14;;;;;:21;:88::i;:::-;7447:21;;;:112;7009:557;7600:19;7576:4;:21;;;:43;7572:725;;;7629:30;7662:92;7724:22;7687:19;7663:4;:21;;;:43;;;;:::i;:::-;7662:52;;:92::i;:::-;7629:125;-1:-1:-1;7831:48:110;:17;7629:125;7831:24;:48::i;:::-;7803:76;;:17;:76;:::i;:::-;7763:4;:28;;:116;;;;;;;:::i;:::-;;;-1:-1:-1;7960:50:110;:19;7987:22;7960:26;:50::i;:::-;7930:80;;:19;:80;:::i;:::-;7888:4;:30;;:122;;;;;;;:::i;:::-;;;-1:-1:-1;7572:725:110;;-1:-1:-1;7572:725:110;;8063:91;8127:19;8063:47;8088:4;:21;;;8063:17;:24;;:47;;;;:::i;:91::-;8031:4;:28;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;8224:21:110;;;;8197:93;;8263:19;;8197:49;;:19;;:26;:49::i;:93::-;8163:4;:30;;:127;;;;;;;:::i;:::-;;;-1:-1:-1;7572:725:110;8337:34;8307:4;:27;;;:64;8303:330;;;8381:29;8413:120;8495:37;8452:34;8414:4;:27;;;:72;;;;:::i;8413:120::-;8381:152;-1:-1:-1;8573:53:110;:23;8381:152;8573:30;:53::i;:::-;8541:4;:28;;:85;;;;;;;:::i;:::-;;;-1:-1:-1;;8303:330:110;8667:279;8918:6;:20;;;524:3:106;8883:55:110;;;;:::i;:::-;8667:195;8840:4;:21;;;8667:165;8696:6;:22;;;8726:6;:24;;;8758:4;:30;;;8796:6;:30;;;8667:21;:165::i;:::-;:172;;:195::i;:::-;:206;;:279::i;:::-;8639:25;;;:307;;;9001:28;;;;9037:30;;;;;8639:307;;9001:28;;-1:-1:-1;9037:30:110;-1:-1:-1;6574:2504:110;-1:-1:-1;;6574:2504:110:o;5670:126::-;5726:7;5748:43;5770:21;5748:19;:43;:::i;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;2253:319::-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;9622:662:110:-;9823:7;;9858:35;9876:17;9858:15;:35;:::i;:::-;9838:55;-1:-1:-1;9904:14:110;9900:28;;9927:1;9920:8;;;;;9900:28;9935;9966:62;10002:25;9966:28;:17;:26;:28::i;:62::-;9935:93;;10035:26;10064:65;10098:30;10064:26;:15;:24;:26::i;:65::-;10035:94;;10136:25;10164:84;10222:20;:9;:18;:20::i;:::-;10165:41;10188:18;10165:20;:41;:::i;10164:84::-;10136:112;-1:-1:-1;;;;;9622:662:110;;;;;;;:::o;1005:496:106:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;3901:247:107:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;458:401:124:-;525:2;519:9;567:3;555:16;;601:18;586:34;;622:22;;;583:62;580:242;;;678:77;675:1;668:88;779:4;776:1;769:15;807:4;804:1;797:15;580:242;838:2;831:22;458:401;:::o;864:196::-;932:20;;992:42;981:54;;971:65;;961:93;;1050:1;1047;1040:12;1065:858;1171:6;1224:3;1212:9;1203:7;1199:23;1195:33;1192:53;;;1241:1;1238;1231:12;1192:53;1267:17;;:::i;:::-;1320:9;1307:23;1300:5;1293:38;1391:2;1380:9;1376:18;1363:32;1358:2;1351:5;1347:14;1340:56;1456:2;1445:9;1441:18;1428:32;1423:2;1416:5;1412:14;1405:56;1521:2;1510:9;1506:18;1493:32;1488:2;1481:5;1477:14;1470:56;1587:3;1576:9;1572:19;1559:33;1553:3;1546:5;1542:15;1535:58;1654:3;1643:9;1639:19;1626:33;1620:3;1613:5;1609:15;1602:58;1721:3;1710:9;1706:19;1693:33;1687:3;1680:5;1676:15;1669:58;1760:39;1794:3;1783:9;1779:19;1760:39;:::i;:::-;1754:3;1747:5;1743:15;1736:64;1819:3;1854:38;1888:2;1877:9;1873:18;1854:38;:::i;:::-;1838:14;;;1831:62;1842:5;1065:858;-1:-1:-1;;;1065:858:124:o;2252:184::-;2304:77;2301:1;2294:88;2401:4;2398:1;2391:15;2425:4;2422:1;2415:15;2441:128;2481:3;2512:1;2508:6;2505:1;2502:13;2499:39;;;2518:18;;:::i;:::-;-1:-1:-1;2554:9:124;;2441:128::o;2805:184::-;2875:6;2928:2;2916:9;2907:7;2903:23;2899:32;2896:52;;;2944:1;2941;2934:12;2896:52;-1:-1:-1;2967:16:124;;2805:184;-1:-1:-1;2805:184:124:o;2994:125::-;3034:4;3062:1;3059;3056:8;3053:34;;;3067:18;;:::i;:::-;-1:-1:-1;3104:9:124;;2994:125::o"},"gasEstimates":{"creation":{"codeDepositCost":"617000","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"infinite","MAX_EXCESS_USAGE_RATIO()":"infinite","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"infinite","OPTIMAL_USAGE_RATIO()":"infinite","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"infinite","getBaseStableBorrowRate()":"infinite","getBaseVariableBorrowRate()":"infinite","getMaxVariableBorrowRate()":"infinite","getStableRateExcessOffset()":"infinite","getStableRateSlope1()":"infinite","getStableRateSlope2()":"infinite","getVariableRateSlope1()":"infinite","getVariableRateSlope2()":"infinite"},"internal":{"_getOverallBorrowRate(uint256,uint256,uint256,uint256)":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"fe5fd698","MAX_EXCESS_USAGE_RATIO()":"a9c622f8","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"6fb92589","OPTIMAL_USAGE_RATIO()":"54c365c6","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"a5898709","getBaseStableBorrowRate()":"acd78686","getBaseVariableBorrowRate()":"34762ca5","getMaxVariableBorrowRate()":"80031e37","getStableRateExcessOffset()":"bc626908","getStableRateSlope1()":"d5cd7391","getStableRateSlope2()":"14e32da4","getVariableRateSlope1()":"0b3429a2","getVariableRateSlope2()":"f4202409"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"optimalUsageRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseStableRateOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateExcessOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optimalStableToTotalDebtRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"}],\"internalType\":\"struct DataTypes.CalculateInterestRatesParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseStableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateExcessOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO` point of usage and another from that one to 100%. - An instance of this same contract, can't be used across different Aave markets, due to the caching   of the PoolAddressesProvider\",\"kind\":\"dev\",\"methods\":{\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"params\":{\"params\":\"The parameters needed to calculate interest rates\"},\"returns\":{\"_0\":\"liquidityRate The liquidity rate expressed in rays\",\"_1\":\"stableBorrowRate The stable borrow rate expressed in rays\",\"_2\":\"variableBorrowRate The variable borrow rate expressed in rays\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"baseStableRateOffset\":\"The premium on top of variable rate for base stable borrowing rate\",\"baseVariableBorrowRate\":\"The base variable borrow rate\",\"optimalStableToTotalDebtRatio\":\"The optimal stable debt to total debt ratio of the reserve\",\"optimalUsageRatio\":\"The optimal usage ratio\",\"provider\":\"The address of the PoolAddressesProvider contract\",\"stableRateExcessOffset\":\"The premium on top of stable rate when there stable debt surpass the threshold\",\"stableRateSlope1\":\"The stable rate slope below optimal usage ratio\",\"stableRateSlope2\":\"The stable rate slope above optimal usage ratio\",\"variableRateSlope1\":\"The variable rate slope below optimal usage ratio\",\"variableRateSlope2\":\"The variable rate slope above optimal usage ratio\"}},\"getBaseStableBorrowRate()\":{\"returns\":{\"_0\":\"The base stable borrow rate, expressed in ray\"}},\"getBaseVariableBorrowRate()\":{\"returns\":{\"_0\":\"The base variable borrow rate, expressed in ray\"}},\"getMaxVariableBorrowRate()\":{\"returns\":{\"_0\":\"The maximum variable borrow rate, expressed in ray\"}},\"getStableRateExcessOffset()\":{\"details\":\"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"returns\":{\"_0\":\"The stable rate excess offset, expressed in ray\"}},\"getStableRateSlope1()\":{\"details\":\"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getStableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getVariableRateSlope1()\":{\"details\":\"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}},\"getVariableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\":{\"details\":\"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\",\"return\":\"The max excess stable to total debt ratio, expressed in ray.\",\"returns\":{\"_0\":\"The max excess stable to total debt ratio, expressed in ray.\"}},\"MAX_EXCESS_USAGE_RATIO\":{\"details\":\"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\",\"return\":\"The max excess usage ratio, expressed in ray.\",\"returns\":{\"_0\":\"The max excess usage ratio, expressed in ray.\"}},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\":{\"return\":\"The optimal stable to total debt ratio, expressed in ray.\",\"returns\":{\"_0\":\"The optimal stable to total debt ratio, expressed in ray.\"}},\"OPTIMAL_USAGE_RATIO\":{\"return\":\"The optimal usage ratio, expressed in ray.\",\"returns\":{\"_0\":\"The optimal usage ratio, expressed in ray.\"}}},\"title\":\"DefaultReserveInterestRateStrategy contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address of the PoolAddressesProvider\"},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the excess stable debt ratio above the optimal.\"},\"MAX_EXCESS_USAGE_RATIO()\":{\"notice\":\"Returns the excess usage ratio above the optimal.\"},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the optimal stable to total debt ratio of the reserve.\"},\"OPTIMAL_USAGE_RATIO()\":{\"notice\":\"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\"},\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"notice\":\"Calculates the interest rates depending on the reserve's state and configurations\"},\"getBaseStableBorrowRate()\":{\"notice\":\"Returns the base stable borrow rate\"},\"getBaseVariableBorrowRate()\":{\"notice\":\"Returns the base variable borrow rate\"},\"getMaxVariableBorrowRate()\":{\"notice\":\"Returns the maximum variable borrow rate\"},\"getStableRateExcessOffset()\":{\"notice\":\"Returns the stable rate excess offset\"},\"getStableRateSlope1()\":{\"notice\":\"Returns the stable rate slope below optimal usage ratio\"},\"getStableRateSlope2()\":{\"notice\":\"Returns the stable rate slope above optimal usage ratio\"},\"getVariableRateSlope1()\":{\"notice\":\"Returns the variable rate slope below optimal usage ratio\"},\"getVariableRateSlope2()\":{\"notice\":\"Returns the variable rate slope above optimal usage ratio\"}},\"notice\":\"Implements the calculation of the interest rates depending on the reserve state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol\":\"DefaultReserveInterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IDefaultInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IDefaultInterestRateStrategy\\n * @author Aave\\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\\n */\\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\\n  /**\\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\\n   * @return The optimal usage ratio, expressed in ray.\\n   */\\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\\n   * @return The optimal stable to total debt ratio, expressed in ray.\\n   */\\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess usage ratio above the optimal.\\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\\n   * @return The max excess usage ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess stable debt ratio above the optimal.\\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\\n   * @return The max excess stable to total debt ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the variable rate slope below optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the variable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope below optimal usage ratio\\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate excess offset\\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n   * @return The stable rate excess offset, expressed in ray\\n   */\\n  function getStableRateExcessOffset() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base stable borrow rate\\n   * @return The base stable borrow rate, expressed in ray\\n   */\\n  function getBaseStableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base variable borrow rate\\n   * @return The base variable borrow rate, expressed in ray\\n   */\\n  function getBaseVariableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the maximum variable borrow rate\\n   * @return The maximum variable borrow rate, expressed in ray\\n   */\\n  function getMaxVariableBorrowRate() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol';\\nimport {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\n\\n/**\\n * @title DefaultReserveInterestRateStrategy contract\\n * @author Aave\\n * @notice Implements the calculation of the interest rates depending on the reserve state\\n * @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO`\\n * point of usage and another from that one to 100%.\\n * - An instance of this same contract, can't be used across different Aave markets, due to the caching\\n *   of the PoolAddressesProvider\\n */\\ncontract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable OPTIMAL_USAGE_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable MAX_EXCESS_USAGE_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO;\\n\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  // Base variable borrow rate when usage rate = 0. Expressed in ray\\n  uint256 internal immutable _baseVariableBorrowRate;\\n\\n  // Slope of the variable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _variableRateSlope1;\\n\\n  // Slope of the variable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _variableRateSlope2;\\n\\n  // Slope of the stable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _stableRateSlope1;\\n\\n  // Slope of the stable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _stableRateSlope2;\\n\\n  // Premium on top of `_variableRateSlope1` for base stable borrowing rate\\n  uint256 internal immutable _baseStableRateOffset;\\n\\n  // Additional premium applied to stable rate when stable debt surpass `OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO`\\n  uint256 internal immutable _stableRateExcessOffset;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   * @param optimalUsageRatio The optimal usage ratio\\n   * @param baseVariableBorrowRate The base variable borrow rate\\n   * @param variableRateSlope1 The variable rate slope below optimal usage ratio\\n   * @param variableRateSlope2 The variable rate slope above optimal usage ratio\\n   * @param stableRateSlope1 The stable rate slope below optimal usage ratio\\n   * @param stableRateSlope2 The stable rate slope above optimal usage ratio\\n   * @param baseStableRateOffset The premium on top of variable rate for base stable borrowing rate\\n   * @param stableRateExcessOffset The premium on top of stable rate when there stable debt surpass the threshold\\n   * @param optimalStableToTotalDebtRatio The optimal stable debt to total debt ratio of the reserve\\n   */\\n  constructor(\\n    IPoolAddressesProvider provider,\\n    uint256 optimalUsageRatio,\\n    uint256 baseVariableBorrowRate,\\n    uint256 variableRateSlope1,\\n    uint256 variableRateSlope2,\\n    uint256 stableRateSlope1,\\n    uint256 stableRateSlope2,\\n    uint256 baseStableRateOffset,\\n    uint256 stableRateExcessOffset,\\n    uint256 optimalStableToTotalDebtRatio\\n  ) {\\n    require(WadRayMath.RAY >= optimalUsageRatio, Errors.INVALID_OPTIMAL_USAGE_RATIO);\\n    require(\\n      WadRayMath.RAY >= optimalStableToTotalDebtRatio,\\n      Errors.INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n    );\\n    OPTIMAL_USAGE_RATIO = optimalUsageRatio;\\n    MAX_EXCESS_USAGE_RATIO = WadRayMath.RAY - optimalUsageRatio;\\n    OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = optimalStableToTotalDebtRatio;\\n    MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = WadRayMath.RAY - optimalStableToTotalDebtRatio;\\n    ADDRESSES_PROVIDER = provider;\\n    _baseVariableBorrowRate = baseVariableBorrowRate;\\n    _variableRateSlope1 = variableRateSlope1;\\n    _variableRateSlope2 = variableRateSlope2;\\n    _stableRateSlope1 = stableRateSlope1;\\n    _stableRateSlope2 = stableRateSlope2;\\n    _baseStableRateOffset = baseStableRateOffset;\\n    _stableRateExcessOffset = stableRateExcessOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getVariableRateSlope1() external view returns (uint256) {\\n    return _variableRateSlope1;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getVariableRateSlope2() external view returns (uint256) {\\n    return _variableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateSlope1() external view returns (uint256) {\\n    return _stableRateSlope1;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateSlope2() external view returns (uint256) {\\n    return _stableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateExcessOffset() external view returns (uint256) {\\n    return _stableRateExcessOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getBaseStableBorrowRate() public view returns (uint256) {\\n    return _variableRateSlope1 + _baseStableRateOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getBaseVariableBorrowRate() external view override returns (uint256) {\\n    return _baseVariableBorrowRate;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getMaxVariableBorrowRate() external view override returns (uint256) {\\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\\n  }\\n\\n  struct CalcInterestRatesLocalVars {\\n    uint256 availableLiquidity;\\n    uint256 totalDebt;\\n    uint256 currentVariableBorrowRate;\\n    uint256 currentStableBorrowRate;\\n    uint256 currentLiquidityRate;\\n    uint256 borrowUsageRatio;\\n    uint256 supplyUsageRatio;\\n    uint256 stableToTotalDebtRatio;\\n    uint256 availableLiquidityPlusDebt;\\n  }\\n\\n  /// @inheritdoc IReserveInterestRateStrategy\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) public view override returns (uint256, uint256, uint256) {\\n    CalcInterestRatesLocalVars memory vars;\\n\\n    vars.totalDebt = params.totalStableDebt + params.totalVariableDebt;\\n\\n    vars.currentLiquidityRate = 0;\\n    vars.currentVariableBorrowRate = _baseVariableBorrowRate;\\n    vars.currentStableBorrowRate = getBaseStableBorrowRate();\\n\\n    if (vars.totalDebt != 0) {\\n      vars.stableToTotalDebtRatio = params.totalStableDebt.rayDiv(vars.totalDebt);\\n      vars.availableLiquidity =\\n        IERC20(params.reserve).balanceOf(params.aToken) +\\n        params.liquidityAdded -\\n        params.liquidityTaken;\\n\\n      vars.availableLiquidityPlusDebt = vars.availableLiquidity + vars.totalDebt;\\n      vars.borrowUsageRatio = vars.totalDebt.rayDiv(vars.availableLiquidityPlusDebt);\\n      vars.supplyUsageRatio = vars.totalDebt.rayDiv(\\n        vars.availableLiquidityPlusDebt + params.unbacked\\n      );\\n    }\\n\\n    if (vars.borrowUsageRatio > OPTIMAL_USAGE_RATIO) {\\n      uint256 excessBorrowUsageRatio = (vars.borrowUsageRatio - OPTIMAL_USAGE_RATIO).rayDiv(\\n        MAX_EXCESS_USAGE_RATIO\\n      );\\n\\n      vars.currentStableBorrowRate +=\\n        _stableRateSlope1 +\\n        _stableRateSlope2.rayMul(excessBorrowUsageRatio);\\n\\n      vars.currentVariableBorrowRate +=\\n        _variableRateSlope1 +\\n        _variableRateSlope2.rayMul(excessBorrowUsageRatio);\\n    } else {\\n      vars.currentStableBorrowRate += _stableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\\n        OPTIMAL_USAGE_RATIO\\n      );\\n\\n      vars.currentVariableBorrowRate += _variableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\\n        OPTIMAL_USAGE_RATIO\\n      );\\n    }\\n\\n    if (vars.stableToTotalDebtRatio > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO) {\\n      uint256 excessStableDebtRatio = (vars.stableToTotalDebtRatio -\\n        OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO).rayDiv(MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO);\\n      vars.currentStableBorrowRate += _stableRateExcessOffset.rayMul(excessStableDebtRatio);\\n    }\\n\\n    vars.currentLiquidityRate = _getOverallBorrowRate(\\n      params.totalStableDebt,\\n      params.totalVariableDebt,\\n      vars.currentVariableBorrowRate,\\n      params.averageStableBorrowRate\\n    ).rayMul(vars.supplyUsageRatio).percentMul(\\n        PercentageMath.PERCENTAGE_FACTOR - params.reserveFactor\\n      );\\n\\n    return (\\n      vars.currentLiquidityRate,\\n      vars.currentStableBorrowRate,\\n      vars.currentVariableBorrowRate\\n    );\\n  }\\n\\n  /**\\n   * @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable\\n   * debt\\n   * @param totalStableDebt The total borrowed from the reserve at a stable rate\\n   * @param totalVariableDebt The total borrowed from the reserve at a variable rate\\n   * @param currentVariableBorrowRate The current variable borrow rate of the reserve\\n   * @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\\n   * @return The weighted averaged borrow rate\\n   */\\n  function _getOverallBorrowRate(\\n    uint256 totalStableDebt,\\n    uint256 totalVariableDebt,\\n    uint256 currentVariableBorrowRate,\\n    uint256 currentAverageStableBorrowRate\\n  ) internal pure returns (uint256) {\\n    uint256 totalDebt = totalStableDebt + totalVariableDebt;\\n\\n    if (totalDebt == 0) return 0;\\n\\n    uint256 weightedVariableRate = totalVariableDebt.wadToRay().rayMul(currentVariableBorrowRate);\\n\\n    uint256 weightedStableRate = totalStableDebt.wadToRay().rayMul(currentAverageStableBorrowRate);\\n\\n    uint256 overallBorrowRate = (weightedVariableRate + weightedStableRate).rayDiv(\\n      totalDebt.wadToRay()\\n    );\\n\\n    return overallBorrowRate;\\n  }\\n}\\n\",\"keccak256\":\"0x01d746c72a9ace142997f4f66226b3a0005fbdc7b0e828915b837e156c4f520a\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address of the PoolAddressesProvider"},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the excess stable debt ratio above the optimal."},"MAX_EXCESS_USAGE_RATIO()":{"notice":"Returns the excess usage ratio above the optimal."},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the optimal stable to total debt ratio of the reserve."},"OPTIMAL_USAGE_RATIO()":{"notice":"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates."},"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"notice":"Calculates the interest rates depending on the reserve's state and configurations"},"getBaseStableBorrowRate()":{"notice":"Returns the base stable borrow rate"},"getBaseVariableBorrowRate()":{"notice":"Returns the base variable borrow rate"},"getMaxVariableBorrowRate()":{"notice":"Returns the maximum variable borrow rate"},"getStableRateExcessOffset()":{"notice":"Returns the stable rate excess offset"},"getStableRateSlope1()":{"notice":"Returns the stable rate slope below optimal usage ratio"},"getStableRateSlope2()":{"notice":"Returns the stable rate slope above optimal usage ratio"},"getVariableRateSlope1()":{"notice":"Returns the variable rate slope below optimal usage ratio"},"getVariableRateSlope2()":{"notice":"Returns the variable rate slope above optimal usage ratio"}},"notice":"Implements the calculation of the interest rates depending on the reserve state","version":1}}},"contracts/protocol/pool/L2Pool.sol":{"L2Pool":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"category","type":"tuple"}],"name":"configureEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"interestRateModes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoanSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"getEModeCategoryData","outputs":[{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"getReserveAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralBase","type":"uint256"},{"internalType":"uint256","name":"totalDebtBase","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsBase","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserEMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args1","type":"bytes32"},{"internalType":"bytes32","name":"args2","type":"bytes32"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"resetIsolationModeTotalDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"setUserEMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"flashLoanPremiumTotal","type":"uint128"},{"internalType":"uint128","name":"flashLoanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"args","type":"bytes32"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"BRIDGE_PROTOCOL_FEE()":{"returns":{"_0":"The bridge fee sent to the protocol treasury"}},"FLASHLOAN_PREMIUM_TOTAL()":{"returns":{"_0":"The total fee on flashloans"}},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"returns":{"_0":"The flashloan fee sent to the protocol treasury"}},"MAX_NUMBER_RESERVES()":{"returns":{"_0":"The maximum number of reserves supported"}},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"returns":{"_0":"The percentage of available liquidity to borrow, expressed in bps"}},"backUnbacked(address,uint256,uint256)":{"params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees"},"returns":{"_0":"The backed amount"}},"borrow(address,uint256,uint256,uint16,address)":{"params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"borrow(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the borrow function packed in one bytes32    88 bits       16 bits             8 bits                 128 bits       16 bits | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |"}},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"details":"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets","params":{"config":"The configuration of the category","id":"The id of the category"}},"constructor":{"details":"Constructor.","params":{"provider":"The address of the PoolAddressesProvider contract"}},"deposit(address,uint256,address,uint16)":{"details":"Deprecated: maintained for compatibility purposes","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"dropReserve(address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve"}},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"details":"Only callable by the overlying aToken of the `asset`","params":{"amount":"The amount being transferred/withdrawn","asset":"The address of the underlying asset of the aToken","balanceFromBefore":"The aToken balance of the `from` user before the transfer","balanceToBefore":"The aToken balance of the `to` user before the transfer","from":"The user from which the aTokens are transferred","to":"The user receiving the aTokens"}},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amounts":"The amounts of the assets being flash-borrowed","assets":"The addresses of the assets being flash-borrowed","interestRateModes":"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address","onBehalfOf":"The address  that will receive the debt in the case of using on `modes` 1 or 2","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amount":"The amount of the asset being flash-borrowed","asset":"The address of the asset being flash-borrowed","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"getConfiguration(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The configuration of the reserve"}},"getEModeCategoryData(uint8)":{"params":{"id":"The id of the category"},"returns":{"_0":"The configuration data of the category"}},"getReserveAddressById(uint16)":{"params":{"id":"The id of the reserve as stored in the DataTypes.ReserveData struct"},"returns":{"_0":"The address of the reserve associated with id"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The state and configuration data of the reserve"}},"getReserveNormalizedIncome(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve's normalized income"}},"getReserveNormalizedVariableDebt(address)":{"details":"WARNING: This function is intended to be used primarily by the protocol itself to get a \"dynamic\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve normalized variable debt"}},"getReservesList()":{"details":"It does not include dropped reserves","returns":{"_0":"The addresses of the underlying assets of the initialized reserves"}},"getUserAccountData(address)":{"params":{"user":"The address of the user"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"getUserConfiguration(address)":{"params":{"user":"The user address"},"returns":{"_0":"The configuration of the user"}},"getUserEMode(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The eMode id"}},"initReserve(address,address,address,address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"aTokenAddress":"The address of the aToken that will be assigned to the reserve","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy contract","stableDebtAddress":"The address of the StableDebtToken that will be assigned to the reserve","variableDebtAddress":"The address of the VariableDebtToken that will be assigned to the reserve"}},"initialize(address)":{"details":"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations","params":{"provider":"The address of the PoolAddressesProvider"}},"liquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"liquidationCall(bytes32,bytes32)":{"details":"the shortenedDebtToCover is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max","params":{"args1":"part of the arguments for the liquidationCall function packed in one bytes32    64 bits      160 bits       16 bits         16 bits | 0-padding | user address | debtAssetId | collateralAssetId |","args2":"part of the arguments for the liquidationCall function packed in one bytes32    127 bits       1 bit             128 bits | 0-padding | receiveAToken | shortenedDebtToCover |"}},"mintToTreasury(address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed"}},"mintUnbacked(address,uint256,address,uint16)":{"params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"rebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"}},"rebalanceStableBorrowRate(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the rebalanceStableBorrowRate function packed in one bytes32    80 bits      160 bits     16 bits | 0-padding | user address | assetId |"}},"repay(address,uint256,uint256,address)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed"},"returns":{"_0":"The final amount repaid"}},"repay(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repay function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(address,uint256,uint256)":{"details":"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repayWithATokens function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(bytes32,bytes32,bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the repayWithPermit function packed in one bytes32    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |","r":"The R parameter of ERC712 permit sig","s":"The S parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"resetIsolationModeTotalDebt(address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt"}},"setConfiguration(address,(uint256))":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","configuration":"The new configuration bitmap"}},"setReserveInterestRateStrategyAddress(address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","rateStrategyAddress":"The address of the interest rate strategy contract"}},"setUserEMode(uint8)":{"params":{"categoryId":"The id of the category"}},"setUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset supplied","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"}},"setUserUseReserveAsCollateral(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the setUserUseReserveAsCollateral function packed in one bytes32    239 bits         1 bit       16 bits | 0-padding | useAsCollateral | assetId |"}},"supply(address,uint256,address,uint16)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supply(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the supply function packed in one bytes32    96 bits       16 bits         128 bits      16 bits | 0-padding | referralCode | shortenedAmount | assetId |"}},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supplyWithPermit(bytes32,bytes32,bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the supply function packed in one bytes32    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |","r":"The R parameter of ERC712 permit sig","s":"The S parameter of ERC712 permit sig"}},"swapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"}},"swapBorrowRateMode(bytes32)":{"details":"assetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the swapBorrowRateMode function packed in one bytes32    232 bits            8 bits             16 bits | 0-padding | shortenedInterestRateMode | assetId |"}},"updateBridgeProtocolFee(uint256)":{"params":{"bridgeProtocolFee":"The part of the premium sent to the protocol treasury"}},"updateFlashloanPremiums(uint128,uint128)":{"details":"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract","params":{"flashLoanPremiumToProtocol":"The part of the premium sent to the protocol treasury, expressed in bps","flashLoanPremiumTotal":"The total premium, expressed in bps"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn"}},"withdraw(bytes32)":{"details":"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.","params":{"args":"Arguments for the withdraw function packed in one bytes32    112 bits       128 bits      16 bits | 0-padding | shortenedAmount | assetId |"},"returns":{"_0":"The final amount withdrawn"}}},"title":"L2Pool","version":1},"evm":{"bytecode":{"functionDebugData":{"@_24811":{"entryPoint":null,"id":24811,"parameterSlots":1,"returnSlots":0},"@_25291":{"entryPoint":null,"id":25291,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":74,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:124"},"nodeType":"YulFunctionCall","src":"174:12:124"},"nodeType":"YulExpressionStatement","src":"174:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:124"},"nodeType":"YulFunctionCall","src":"143:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:124"},"nodeType":"YulFunctionCall","src":"139:32:124"},"nodeType":"YulIf","src":"136:52:124"},{"nodeType":"YulVariableDeclaration","src":"197:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:124"},"nodeType":"YulFunctionCall","src":"291:12:124"},"nodeType":"YulExpressionStatement","src":"291:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:124"},"nodeType":"YulFunctionCall","src":"270:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:124"},"nodeType":"YulFunctionCall","src":"266:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:124"},"nodeType":"YulFunctionCall","src":"255:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:124"},"nodeType":"YulFunctionCall","src":"245:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:124"},"nodeType":"YulFunctionCall","src":"238:50:124"},"nodeType":"YulIf","src":"235:70:124"},{"nodeType":"YulAssignment","src":"314:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"src":"14:321:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":5123},{"length":20,"start":6055},{"length":20,"start":8861},{"length":20,"start":9024},{"length":20,"start":11949},{"length":20,"start":14309}]},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7966},{"length":20,"start":13774}]},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4642}]},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5850},{"length":20,"start":10605}]},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":3048}]},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":7205},{"length":20,"start":8324},{"length":20,"start":8977},{"length":20,"start":10914},{"length":20,"start":12074},{"length":20,"start":13925}]},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":4026},{"length":20,"start":6389},{"length":20,"start":7031},{"length":20,"start":7288},{"length":20,"start":13043}]}},"object":"60a0604052600080553480156200001557600080fd5b5060405162005c6c38038062005c6c83398101604081905262000038916200004a565b6001600160a01b03166080526200007c565b6000602082840312156200005d57600080fd5b81516001600160a01b03811681146200007557600080fd5b9392505050565b608051615b72620000fa600039600081816103cf01528181610b9801528181610c8a015281816111ae0152818161186d01528181611c40015281816123b301528181612484015281816126d7015281816129d201528181612c31015281816132a7015281816139c301528181613cbc0152613f090152615b726000f3fe608060405234801561001057600080fd5b50600436106103825760003560e01c80637a708e92116101de578063d1946dbc1161010f578063e82fec2f116100ad578063f51e435b1161007c578063f51e435b14610aa4578063f7a7384014610ab7578063f8119d5114610aca578063fd21ecff14610ad957600080fd5b8063e82fec2f14610a46578063e8eda9df1461079f578063eddf1b7914610a58578063ee3e210b14610a9157600080fd5b8063d5eed868116100e9578063d5eed868146109fa578063d65dc7a114610a0d578063dc7c0bff14610a20578063e43e88a114610a3357600080fd5b8063d1946dbc146109bf578063d579ea7d146109d4578063d5ed3933146109e757600080fd5b8063bcb6e5221161017c578063c4d66de811610156578063c4d66de814610973578063cd11238214610986578063cea9d26f14610999578063d15e0053146109ac57600080fd5b8063bcb6e522146108d1578063bf92857c146108e4578063c44b11f71461092457600080fd5b806394ba89a2116101b857806394ba89a2146108855780639cd1999614610898578063a415bcad146108ab578063ab9c4b5d146108be57600080fd5b80637a708e921461084c5780638e19899e1461085f57806394b576de1461087257600080fd5b806342b0b77c116102b8578063617ba0371161025657806369328dec1161023057806369328dec146107d857806369a933a5146107eb5780636a99c036146107fe5780636c6f6ae11461082c57600080fd5b8063617ba0371461079f57806363c9b860146107b2578063680dd47c146107c557600080fd5b80635275179711610292578063527517971461072c578063563dd61314610766578063573ade81146107795780635a3b74b91461078c57600080fd5b806342b0b77c146106a85780634417a583146106bb5780634d013f031461071957600080fd5b8063272d9072116103255780633036b439116102ff5780633036b439146104a157806335ea6a75146104b4578063386497fd14610682578063427da1771461069557600080fd5b8063272d90721461047357806328530a471461047b5780632dad97d41461048e57600080fd5b80630542975c116103615780630542975c146103ca578063074b2e43146104165780631d2118f91461044d5780631fe3c6f31461046057600080fd5b8062a718a9146103875780630148170e1461039c57806302c205f0146103b7575b600080fd5b61039a61039536600461449d565b610aec565b005b6103a4600181565b6040519081526020015b60405180910390f35b61039a6103c5366004614528565b610d67565b6103f17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ae565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016103ae565b61039a61045b3660046145a7565b610f17565b61039a61046e3660046145e0565b611105565b6039546103a4565b61039a6104893660046145f9565b611126565b6103a461049c366004614614565b611305565b61039a6104af3660046145e0565b611449565b6106756104c2366004614649565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091525073ffffffffffffffffffffffffffffffffffffffff90811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103ae9190614666565b6103a4610690366004614649565b611456565b61039a6106a33660046145e0565b61148a565b61039a6106b6366004614825565b6114c7565b61070a6106c9366004614649565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260358352819020815192830190915254815290565b604051905181526020016103ae565b61039a6107273660046145e0565b611641565b6103f161073a3660046148a7565b61ffff1660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6103a46107743660046145e0565b61167d565b6103a46107873660046148c2565b6116a9565b61039a61079a36600461490c565b6117f9565b61039a6107ad36600461493a565b6119ce565b61039a6107c0366004614649565b611ad1565b61039a6107d336600461498b565b611b4d565b6103a46107e63660046149b7565b611b7a565b61039a6107f936600461493a565b611d99565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661042c565b61083f61083a3660046145f9565b611e46565b6040516103ae9190614a64565b61039a61085a366004614ac7565b611f80565b6103a461086d3660046145e0565b61210c565b6103a461088036600461498b565b612133565b61039a610893366004614b2a565b61216e565b61039a6108a6366004614b9b565b6121ef565b61039a6108b9366004614bdd565b612244565b61039a6108cc366004614c1c565b61252a565b61039a6108df366004614d36565b6128e3565b6108f76108f2366004614649565b61291a565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016103ae565b61070a610932366004614649565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260348352819020815192830190915254815290565b61039a610981366004614649565b612b49565b61039a6109943660046145a7565b612d4c565b61039a6109a7366004614d69565b612dd5565b6103a46109ba366004614649565b612e82565b6109c7612eb0565b6040516103ae9190614daa565b61039a6109e2366004614eab565b612fec565b61039a6109f5366004614fe3565b613158565b61039a610a083660046145e0565b6133df565b6103a4610a1b366004614614565b613456565b6103a4610a2e3660046145e0565b6134f6565b61039a610a41366004614649565b613518565b603b5467ffffffffffffffff166103a4565b6103a4610a66366004614649565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205460ff1690565b6103a4610a9f366004615048565b61358d565b61039a610ab236600461508e565b613768565b61039a610ac53660046145e0565b613929565b604051608081526020016103ae565b61039a610ae73660046150ed565b61397f565b73__$f598c634f2d943205ac23f707b80075cbb$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c25919061510f565b73ffffffffffffffffffffffffffffffffffffffff90811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf7919061510f565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d3095949392919061512c565b60006040518083038186803b158015610d4857600080fd5b505af4158015610d5c573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e401600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff86811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e40160006040518083038186803b158015610ef557600080fd5b505af4158015610f09573d6000803e3d6000fd5b505050505050505050505050565b610f1f6139aa565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061104057506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906110ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600080611113603684613ad8565b91509150611121828261216e565b505050565b73__$e4b9550ff526a295e1233dea02821b9004$__635d5dc3136034603660376038603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b919061510f565b73ffffffffffffffffffffffffffffffffffffffff1681526020018960ff168152506040518763ffffffff1660e01b81526004016112d29695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a08501529182015173ffffffffffffffffffffffffffffffffffffffff1660c0840152015160ff1660e08201526101000190565b60006040518083038186803b1580156112ea57600080fd5b505af41580156112fe573d6000803e3d6000fd5b5050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018860028111156113a3576113a3615220565b60028111156113b4576113b4615220565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526113fe949392919060040161528a565b602060405180830381865af415801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906152fd565b90505b9392505050565b6114516139aa565b603955565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061148490613b12565b92915050565b61ffff811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff90811690601083901c166111218282612d4c565b60006040518060e001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116604080870191909152911660609094019390935273ffffffffffffffffffffffffffffffffffffffff8a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__9163a1fe0e8d91611608918590600401615316565b60006040518083038186803b15801561162057600080fd5b505af4158015611634573d6000803e3d6000fd5b5050505050505050505050565b61ffff811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff16601082901c60011661112182826117f9565b60008060008061168e603686613ba2565b9250925092506116a0838383336116a9565b95945050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561174757611747615220565b600281111561175857611758615220565b815273ffffffffffffffffffffffffffffffffffffffff891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526117b8949392919060040161528a565b602060405180830381865af41580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a091906152fd565b73__$db79717e66442ee197e8271d032a066e34$__63bf697a26603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208787603b60089054906101000a900461ffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061510f565b336000908152603860205260409081902054905160e08b901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019990995260248901979097526044880195909552606487019390935273ffffffffffffffffffffffffffffffffffffffff9182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b1580156119b257600080fd5b505af41580156119c6573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e4015b60006040518083038186803b158015611ab357600080fd5b505af4158015611ac7573d6000803e3d6000fd5b5050505050505050565b611ad96139aa565b6040517f9cf57023000000000000000000000000000000000000000000000000000000008152603460048201526036602482015273ffffffffffffffffffffffffffffffffffffffff8216604482015273__$563c746fa3df0f1858d85f6ef4258864be$__90639cf57023906064016112d2565b6000806000806000611b60603689613c30565b94509450945094509450611ac78585338686868d8d610d67565b600073__$db79717e66442ee197e8271d032a066e34$__63186dea44603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd919061510f565b73ffffffffffffffffffffffffffffffffffffffff9081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a0015116610124820152610144016113fe565b611da1613cba565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$b06080f092f400a43662c3f835a4d9baa8$__90630413c86f9060e401611a9b565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff8082168352620100008204811694830194909452640100000000810490931693810193909352660100000000000090910473ffffffffffffffffffffffffffffffffffffffff166060830152600181018054608084019190611ef7906153a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f23906153a1565b8015611f705780601f10611f4557610100808354040283529160200191611f70565b820191906000526020600020905b815481529060010190602001808311611f5357829003601f168201915b5050505050815250509050919050565b611f886139aa565b73__$563c746fa3df0f1858d85f6ef4258864be$__6369fc1bdf603460366040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff16815260200161205f608090565b61ffff168152506040518463ffffffff1660e01b8152600401612084939291906153ef565b602060405180830381865af41580156120a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c5919061547f565b156112fe57603b805468010000000000000000900461ffff169060086120ea836154cb565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b600080600061211c603685613e47565b9150915061212b828233611b7a565b949350505050565b60008060008060008061214760368a613ec7565b945094509450945094506121618585853386868e8e61358d565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603460209081526040808320338452603590925290912073__$c3724b8d563dc83a94e797176cddecb3b9$__9163eac4d70391858560028111156121d0576121d0615220565b6040518563ffffffff1660e01b815260040161199a94939291906154ed565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$563c746fa3df0f1858d85f6ef4258864be$__906348c2ca8c9061199a9060349086908690600401615524565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f9603460366037603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a600281111561231b5761231b615220565b600281111561232c5761232c615220565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a09093019273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa1580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f919061510f565b73ffffffffffffffffffffffffffffffffffffffff90811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa1580156124cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f1919061510f565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d30959493929190615589565b6000604051806101c001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a085015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa15801561276a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278e919061510f565b6040517ffa50f29700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063fa50f29790602401602060405180830381865afa1580156127fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281e919061547f565b1515905273ffffffffffffffffffffffffffffffffffffffff86166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__91632e7263ea916128a591603491603691603791908890600401615732565b60006040518083038186803b1580156128bd57600080fd5b505af41580156128d1573d6000803e3d6000fd5b50505050505050505050505050505050565b6128eb6139aa565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$563c746fa3df0f1858d85f6ef4258864be$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa158015612a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3c919061510f565b73ffffffffffffffffffffffffffffffffffffffff90811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af4158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3591906158d8565b949c939b5091995097509550909350915050565b6001805460ff1680612b5a5750303b155b80612b66575060005481115b612bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610fa1565b60015460ff16158015612c2f57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525090612cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c4179055801561112157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$c3724b8d563dc83a94e797176cddecb3b9$__90636973f7449060640161199a565b612ddd613f07565b6040517f87b322b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044810182905273__$563c746fa3df0f1858d85f6ef4258864be$__906387b322b29060640160006040518083038186803b158015612e6557600080fd5b505af4158015612e79573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061148490614094565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff811115612ee257612ee2614e04565b604051908082528060200260200182016040528015612f0b578160200160208202803683370190505b50905060005b83811015612fe25760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612fc25760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1682612f738584615922565b81518110612f8357612f83615939565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fd0565b82612fcc81615968565b9350505b80612fda81615968565b915050612f11565b5091038152919050565b612ff46139aa565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316613063576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5060ff8216600090815260376020908152604091829020835181548386015194860151606087015173ffffffffffffffffffffffffffffffffffffffff166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169290941691909117919091179490941617929092178255608083015180518493926112fe9260018501929101906143c4565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260346020908152604091829020600401548251808401909352600283527f31310000000000000000000000000000000000000000000000000000000000009183019190915290911633146131f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5073__$db79717e66442ee197e8271d032a066e34$__638a5dadd160346036603760356040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613310573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613334919061510f565b73ffffffffffffffffffffffffffffffffffffffff90811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526133a79594939291906004016159a1565b60006040518083038186803b1580156133bf57600080fd5b505af41580156133d3573d6000803e3d6000fd5b50505050505050505050565b60008060008061344160368661ffff818116600090815260209390935260409092205473ffffffffffffffffffffffffffffffffffffffff16926fffffffffffffffffffffffffffffffff601083901c169260ff609084901c169260981c1690565b93509350935093506112fe8484848433612244565b6000613460613cba565b73ffffffffffffffffffffffffffffffffffffffff84166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$b06080f092f400a43662c3f835a4d9baa8$__90638e7432489060a4016113fe565b600080600080613507603686613ba2565b9250925092506116a0838383611305565b6135206139aa565b6040517f1e3b41450000000000000000000000000000000000000000000000000000000081526034600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015273__$563c746fa3df0f1858d85f6ef4258864be$__90631e3b4145906044016112d2565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905260009073ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e401600060405180830381600087803b15801561362257600080fd5b505af1158015613636573d6000803e3d6000fd5b5050505060006040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561367b5761367b615220565b600281111561368c5761368c615220565b815273ffffffffffffffffffffffffffffffffffffffff89166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$c3724b8d563dc83a94e797176cddecb3b9$__916340e95de69161371991603491603691879060040161528a565b602060405180830381865af4158015613736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375a91906152fd565b9a9950505050505050505050565b6137706139aa565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166137f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061388857506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906138f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5073ffffffffffffffffffffffffffffffffffffffff821660009081526034602052604090208135815581905b50505050565b61ffff81811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690601083901c6fffffffffffffffffffffffffffffffff1690609084901c16613923838333846119ce565b600080600080600061399360368888614118565b94509450945094509450612e798585858585610aec565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a50919061510f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b50565b61ffff811660009081526020839052604090205473ffffffffffffffffffffffffffffffffffffffff16601082901c60ff165b9250929050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613b58575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154611442906fffffffffffffffffffffffffffffffff80821691613b969170010000000000000000000000000000000090910416846141dc565b906141e9565b50919050565b6000808061ffff84166fffffffffffffffffffffffffffffffff601086901c81169060ff609088901c1690821415613bf8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505b61ffff90921660009081526020889052604090205473ffffffffffffffffffffffffffffffffffffffff169450925090509250925092565b60008080808060a086901c63ffffffff1660c087901c60ff16828080613ca28c8c61ffff81811660009081526020849052604090205473ffffffffffffffffffffffffffffffffffffffff1690601083901c6fffffffffffffffffffffffffffffffff1690609084901c169250925092565b919e909d50909b509499509297509295505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d49919061510f565b6040517f726600ce00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063726600ce90602401602060405180830381865afa158015613db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd9919061547f565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b60008061ffff83166fffffffffffffffffffffffffffffffff601085901c811690811415613e9257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b61ffff91909116600090815260209590955260409094205473ffffffffffffffffffffffffffffffffffffffff169492505050565b600080600080600080600080600080613ee08c8c613ba2565b919e909d50909b609881901c63ffffffff169b5060b81c60ff169950975050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f96919061510f565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690637be53ca190602401602060405180830381865afa158015614002573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614026919061547f565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b6003810154600090700100000000000000000000000000000000900464ffffffffff16428114156140da575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154611442906fffffffffffffffffffffffffffffffff80821691613b96917001000000000000000000000000000000009091041684614240565b60008080808061ffff87811690601089901c16602089901c73ffffffffffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff8981169060808b901c6001169082141561418f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505b61ffff948516600090815260209d909d526040808e2054949095168d5293909b205473ffffffffffffffffffffffffffffffffffffffff9283169c92169a90995097509095509350505050565b600061144283834261427d565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761421e57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60008061425464ffffffffff841642615922565b61425e9085615a7d565b6301e133809004905061212b816b033b2e3c9fd0803ce8000000615ae9565b60008061429164ffffffffff851684615922565b9050806142ad576b033b2e3c9fd0803ce8000000915050611442565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116142e35760006142e8565b600285035b925066038882915c40006142fc8a806141e9565b8161430957614309615aba565b0491506301e1338061431b838b6141e9565b8161432857614328615aba565b0490506000826143388688615a7d565b6143429190615a7d565b60029004905060008285614356888a615a7d565b6143609190615a7d565b61436a9190615a7d565b60069004905080826301e133806143818a8f615a7d565b61438b9190615b01565b6143a1906b033b2e3c9fd0803ce8000000615ae9565b6143ab9190615ae9565b6143b59190615ae9565b9b9a5050505050505050505050565b8280546143d0906153a1565b90600052602060002090601f0160209004810192826143f25760008555614438565b82601f1061440b57805160ff1916838001178555614438565b82800160010185558215614438579182015b8281111561443857825182559160200191906001019061441d565b50614444929150614448565b5090565b5b808211156144445760008155600101614449565b73ffffffffffffffffffffffffffffffffffffffff81168114613ad557600080fd5b803561448a8161445d565b919050565b8015158114613ad557600080fd5b600080600080600060a086880312156144b557600080fd5b85356144c08161445d565b945060208601356144d08161445d565b935060408601356144e08161445d565b92506060860135915060808601356144f78161448f565b809150509295509295909350565b803561ffff8116811461448a57600080fd5b803560ff8116811461448a57600080fd5b600080600080600080600080610100898b03121561454557600080fd5b88356145508161445d565b97506020890135965060408901356145678161445d565b955061457560608a01614505565b94506080890135935061458a60a08a01614517565b925060c0890135915060e089013590509295985092959890939650565b600080604083850312156145ba57600080fd5b82356145c58161445d565b915060208301356145d58161445d565b809150509250929050565b6000602082840312156145f257600080fd5b5035919050565b60006020828403121561460b57600080fd5b61144282614517565b60008060006060848603121561462957600080fd5b83356146348161445d565b95602085013595506040909401359392505050565b60006020828403121561465b57600080fd5b81356114428161445d565b81515181526101e08101602083015161469360208401826fffffffffffffffffffffffffffffffff169052565b5060408301516146b760408401826fffffffffffffffffffffffffffffffff169052565b5060608301516146db60608401826fffffffffffffffffffffffffffffffff169052565b5060808301516146ff60808401826fffffffffffffffffffffffffffffffff169052565b5060a083015161472360a08401826fffffffffffffffffffffffffffffffff169052565b5060c083015161473c60c084018264ffffffffff169052565b5060e083015161475260e084018261ffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f8401126147f557600080fd5b50813567ffffffffffffffff81111561480d57600080fd5b602083019150836020828501011115613b0b57600080fd5b60008060008060008060a0878903121561483e57600080fd5b86356148498161445d565b955060208701356148598161445d565b945060408701359350606087013567ffffffffffffffff81111561487c57600080fd5b61488889828a016147e3565b909450925061489b905060808801614505565b90509295509295509295565b6000602082840312156148b957600080fd5b61144282614505565b600080600080608085870312156148d857600080fd5b84356148e38161445d565b9350602085013592506040850135915060608501356149018161445d565b939692955090935050565b6000806040838503121561491f57600080fd5b823561492a8161445d565b915060208301356145d58161448f565b6000806000806080858703121561495057600080fd5b843561495b8161445d565b93506020850135925060408501356149728161445d565b915061498060608601614505565b905092959194509250565b6000806000606084860312156149a057600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156149cc57600080fd5b83356149d78161445d565b92506020840135915060408401356149ee8161445d565b809150509250925092565b6000815180845260005b81811015614a1f57602081850181015186830182015201614a03565b81811115614a31576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff8084511660208401528060208501511660408401528060408501511660608401525073ffffffffffffffffffffffffffffffffffffffff6060840151166080830152608083015160a08084015261212b60c08401826149f9565b600080600080600060a08688031215614adf57600080fd5b8535614aea8161445d565b94506020860135614afa8161445d565b93506040860135614b0a8161445d565b92506060860135614b1a8161445d565b915060808601356144f78161445d565b60008060408385031215614b3d57600080fd5b8235614b488161445d565b946020939093013593505050565b60008083601f840112614b6857600080fd5b50813567ffffffffffffffff811115614b8057600080fd5b6020830191508360208260051b8501011115613b0b57600080fd5b60008060208385031215614bae57600080fd5b823567ffffffffffffffff811115614bc557600080fd5b614bd185828601614b56565b90969095509350505050565b600080600080600060a08688031215614bf557600080fd5b8535614c008161445d565b94506020860135935060408601359250614b1a60608701614505565b600080600080600080600080600080600060e08c8e031215614c3d57600080fd5b614c468c61447f565b9a5067ffffffffffffffff8060208e01351115614c6257600080fd5b614c728e60208f01358f01614b56565b909b50995060408d0135811015614c8857600080fd5b614c988e60408f01358f01614b56565b909950975060608d0135811015614cae57600080fd5b614cbe8e60608f01358f01614b56565b9097509550614ccf60808e0161447f565b94508060a08e01351115614ce257600080fd5b50614cf38d60a08e01358e016147e3565b9093509150614d0460c08d01614505565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff8116811461448a57600080fd5b60008060408385031215614d4957600080fd5b614d5283614d16565b9150614d6060208401614d16565b90509250929050565b600080600060608486031215614d7e57600080fd5b8335614d898161445d565b92506020840135614d998161445d565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b81811015614df857835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614dc6565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715614e5657614e56614e04565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ea357614ea3614e04565b604052919050565b60008060408385031215614ebe57600080fd5b614ec783614517565b915060208084013567ffffffffffffffff80821115614ee557600080fd5b9085019060a08288031215614ef957600080fd5b614f01614e33565b614f0a83614505565b8152614f17848401614505565b84820152614f2760408401614505565b60408201526060830135614f3a8161445d565b6060820152608083013582811115614f5157600080fd5b80840193505087601f840112614f6657600080fd5b823582811115614f7857614f78614e04565b614fa8857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614e5c565b92508083528885828601011115614fbe57600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c08789031215614ffc57600080fd5b86356150078161445d565b955060208701356150178161445d565b945060408701356150278161445d565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b03121561506557600080fd5b88356150708161445d565b9750602089013596506040890135955060608901356145758161445d565b60008082840360408112156150a257600080fd5b83356150ad8161445d565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156150df57600080fd5b506020830190509250929050565b6000806040838503121561510057600080fd5b50508035926020909101359150565b60006020828403121561512157600080fd5b81516114428161445d565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a0830152604083015173ffffffffffffffffffffffffffffffffffffffff80821660c08501528060608601511660e0850152505060808301516101006151b48185018373ffffffffffffffffffffffffffffffffffffffff169052565b60a0850151151561012085015260c085015173ffffffffffffffffffffffffffffffffffffffff90811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b60208152600061144260208301846149f9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110615286577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006101008201905085825284602083015283604083015273ffffffffffffffffffffffffffffffffffffffff8084511660608401526020840151608084015260408401516152dc60a085018261524f565b5060608401511660c0830152608090920151151560e0909101529392505050565b60006020828403121561530f57600080fd5b5051919050565b82815260406020820152600073ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401525060408301516080830152606083015160e060a08401526153716101208401826149f9565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c908216806153b557607f821691505b60208210811415613b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006101208201905084825283602083015273ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a083015161546560e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b60006020828403121561549157600080fd5b81516114428161448f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818114156154e3576154e361549c565b6001019392505050565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff83166040820152608081016116a0606083018461524f565b83815260406020808301829052908201839052600090849060608401835b8681101561557d5783356155558161445d565b73ffffffffffffffffffffffffffffffffffffffff1682529282019290820190600101615542565b50979650505050505050565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e083015260808301516101006156258185018361524f565b60a0850151915061012061563e8186018461ffff169052565b60c086015192506101406156558187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e08501529050615202565b600081518084526020808501945080840160005b838110156156f757815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016156c5565b509495945050505050565b600081518084526020808501945080840160005b838110156156f757815187529582019590820190600101615716565b85815284602082015283604082015282606082015260a0608082015261577160a08201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516101c08060c085015261578f6102608501836156b1565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e08701526157cb8483615702565b9350606087015191506101008187860301818801526157ea8584615702565b9450608088015192506101206158178189018573ffffffffffffffffffffffffffffffffffffffff169052565b60a089015193506101408389880301818a015261583487866149f9565b965060c08a015194506101609350615851848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b015196506158ab6102008b018873ffffffffffffffffffffffffffffffffffffffff169052565b8a015160ff81166102208b015295506158c2915050565b870151801515610240880152925061557d915050565b60008060008060008060c087890312156158f157600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000828210156159345761593461549c565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561599a5761599a61549c565b5060010190565b60006101a08201905086825285602083015284604083015283606083015273ffffffffffffffffffffffffffffffffffffffff8084511660808401528060208501511660a0840152506040830151615a1160c084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e08501519150615a6961016085018373ffffffffffffffffffffffffffffffffffffffff169052565b84015160ff81166101808501529050615202565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615ab557615ab561549c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008219821115615afc57615afc61549c565b500190565b600082615b37577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ae95a4d727c39b82255a9695906fa367a1bbcd5d90caa4e0d041bfb6d00c3d0564736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5C6C CODESIZE SUB DUP1 PUSH3 0x5C6C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x7C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x5B72 PUSH3 0xFA PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x3CF ADD MSTORE DUP2 DUP2 PUSH2 0xB98 ADD MSTORE DUP2 DUP2 PUSH2 0xC8A ADD MSTORE DUP2 DUP2 PUSH2 0x11AE ADD MSTORE DUP2 DUP2 PUSH2 0x186D ADD MSTORE DUP2 DUP2 PUSH2 0x1C40 ADD MSTORE DUP2 DUP2 PUSH2 0x23B3 ADD MSTORE DUP2 DUP2 PUSH2 0x2484 ADD MSTORE DUP2 DUP2 PUSH2 0x26D7 ADD MSTORE DUP2 DUP2 PUSH2 0x29D2 ADD MSTORE DUP2 DUP2 PUSH2 0x2C31 ADD MSTORE DUP2 DUP2 PUSH2 0x32A7 ADD MSTORE DUP2 DUP2 PUSH2 0x39C3 ADD MSTORE DUP2 DUP2 PUSH2 0x3CBC ADD MSTORE PUSH2 0x3F09 ADD MSTORE PUSH2 0x5B72 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x382 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A708E92 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0xD1946DBC GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xF51E435B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0xAA4 JUMPI DUP1 PUSH4 0xF7A73840 EQ PUSH2 0xAB7 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0xACA JUMPI DUP1 PUSH4 0xFD21ECFF EQ PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0xA46 JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0xA58 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0xA91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5EED868 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xD5EED868 EQ PUSH2 0x9FA JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xA0D JUMPI DUP1 PUSH4 0xDC7C0BFF EQ PUSH2 0xA20 JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0xA33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9BF JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x9D4 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0x9E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x973 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x986 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x9AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x8E4 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x924 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x94BA89A2 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x885 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x898 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x8AB JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x84C JUMPI DUP1 PUSH4 0x8E19899E EQ PUSH2 0x85F JUMPI DUP1 PUSH4 0x94B576DE EQ PUSH2 0x872 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42B0B77C GT PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x617BA037 GT PUSH2 0x256 JUMPI DUP1 PUSH4 0x69328DEC GT PUSH2 0x230 JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x7D8 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x7EB JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x7FE JUMPI DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x617BA037 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x7B2 JUMPI DUP1 PUSH4 0x680DD47C EQ PUSH2 0x7C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x292 JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x72C JUMPI DUP1 PUSH4 0x563DD613 EQ PUSH2 0x766 JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x6BB JUMPI DUP1 PUSH4 0x4D013F03 EQ PUSH2 0x719 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x272D9072 GT PUSH2 0x325 JUMPI DUP1 PUSH4 0x3036B439 GT PUSH2 0x2FF JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x4B4 JUMPI DUP1 PUSH4 0x386497FD EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0x427DA177 EQ PUSH2 0x695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x272D9072 EQ PUSH2 0x473 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C GT PUSH2 0x361 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x3CA JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x44D JUMPI DUP1 PUSH4 0x1FE3C6F3 EQ PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x3B7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x39A PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x449D JUMP JUMPDEST PUSH2 0xAEC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3A4 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x39A PUSH2 0x3C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4528 JUMP JUMPDEST PUSH2 0xD67 JUMP JUMPDEST PUSH2 0x3F1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x45B CALLDATASIZE PUSH1 0x4 PUSH2 0x45A7 JUMP JUMPDEST PUSH2 0xF17 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x46E CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x1105 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x3A4 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0x45F9 JUMP JUMPDEST PUSH2 0x1126 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x4614 JUMP JUMPDEST PUSH2 0x1305 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x4AF CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x1449 JUMP JUMPDEST PUSH2 0x675 PUSH2 0x4C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4666 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x690 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x1456 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x6A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x148A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x6B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4825 JUMP JUMPDEST PUSH2 0x14C7 JUMP JUMPDEST PUSH2 0x70A PUSH2 0x6C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x727 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x3F1 PUSH2 0x73A CALLDATASIZE PUSH1 0x4 PUSH2 0x48A7 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x167D JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x787 CALLDATASIZE PUSH1 0x4 PUSH2 0x48C2 JUMP JUMPDEST PUSH2 0x16A9 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x490C JUMP JUMPDEST PUSH2 0x17F9 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7AD CALLDATASIZE PUSH1 0x4 PUSH2 0x493A JUMP JUMPDEST PUSH2 0x19CE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x1AD1 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x498B JUMP JUMPDEST PUSH2 0x1B4D JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x7E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x49B7 JUMP JUMPDEST PUSH2 0x1B7A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x493A JUMP JUMPDEST PUSH2 0x1D99 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x42C JUMP JUMPDEST PUSH2 0x83F PUSH2 0x83A CALLDATASIZE PUSH1 0x4 PUSH2 0x45F9 JUMP JUMPDEST PUSH2 0x1E46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4A64 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x85A CALLDATASIZE PUSH1 0x4 PUSH2 0x4AC7 JUMP JUMPDEST PUSH2 0x1F80 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x86D CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x210C JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x880 CALLDATASIZE PUSH1 0x4 PUSH2 0x498B JUMP JUMPDEST PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x893 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B2A JUMP JUMPDEST PUSH2 0x216E JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B9B JUMP JUMPDEST PUSH2 0x21EF JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BDD JUMP JUMPDEST PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x252A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4D36 JUMP JUMPDEST PUSH2 0x28E3 JUMP JUMPDEST PUSH2 0x8F7 PUSH2 0x8F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x291A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x70A PUSH2 0x932 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x981 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x2B49 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x994 CALLDATASIZE PUSH1 0x4 PUSH2 0x45A7 JUMP JUMPDEST PUSH2 0x2D4C JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D69 JUMP JUMPDEST PUSH2 0x2DD5 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x2E82 JUMP JUMPDEST PUSH2 0x9C7 PUSH2 0x2EB0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4DAA JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4EAB JUMP JUMPDEST PUSH2 0x2FEC JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE3 JUMP JUMPDEST PUSH2 0x3158 JUMP JUMPDEST PUSH2 0x39A PUSH2 0xA08 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x33DF JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA1B CALLDATASIZE PUSH1 0x4 PUSH2 0x4614 JUMP JUMPDEST PUSH2 0x3456 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA2E CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x39A PUSH2 0xA41 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x3518 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x3A4 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA66 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA9F CALLDATASIZE PUSH1 0x4 PUSH2 0x5048 JUMP JUMPDEST PUSH2 0x358D JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAB2 CALLDATASIZE PUSH1 0x4 PUSH2 0x508E JUMP JUMPDEST PUSH2 0x3768 JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x3929 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAE7 CALLDATASIZE PUSH1 0x4 PUSH2 0x50ED JUMP JUMPDEST PUSH2 0x397F JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC25 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCF7 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD30 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x512C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xF09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xF1F PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xFAA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x1040 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1113 PUSH1 0x36 DUP5 PUSH2 0x3AD8 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1121 DUP3 DUP3 PUSH2 0x216E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1217 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x123B SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12D2 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x12FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13A3 JUMPI PUSH2 0x13A3 PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13B4 JUMPI PUSH2 0x13B4 PUSH2 0x5220 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x13FE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x528A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x141B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x143F SWAP2 SWAP1 PUSH2 0x52FD JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1451 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1484 SWAP1 PUSH2 0x3B12 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR AND PUSH2 0x1121 DUP3 DUP3 PUSH2 0x2D4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x1608 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5316 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1620 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1634 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x10 DUP3 SWAP1 SHR PUSH1 0x1 AND PUSH2 0x1121 DUP3 DUP3 PUSH2 0x17F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x168E PUSH1 0x36 DUP7 PUSH2 0x3BA2 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16A0 DUP4 DUP4 DUP4 CALLER PUSH2 0x16A9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1747 JUMPI PUSH2 0x1747 PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1758 JUMPI PUSH2 0x1758 PUSH2 0x5220 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x17B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x528A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16A0 SWAP2 SWAP1 PUSH2 0x52FD JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18FA SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x19C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1AC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1AD9 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9CF5702300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x9CF57023 SWAP1 PUSH1 0x64 ADD PUSH2 0x12D2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B60 PUSH1 0x36 DUP10 PUSH2 0x3C30 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x1AC7 DUP6 DUP6 CALLER DUP7 DUP7 DUP7 DUP14 DUP14 PUSH2 0xD67 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CCD SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x13FE JUMP JUMPDEST PUSH2 0x1DA1 PUSH2 0x3CBA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1A9B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1EF7 SWAP1 PUSH2 0x53A1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1F23 SWAP1 PUSH2 0x53A1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1F70 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F45 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1F70 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F53 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F88 PUSH2 0x39AA JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x205F PUSH1 0x80 SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2084 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53EF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C5 SWAP2 SWAP1 PUSH2 0x547F JUMP JUMPDEST ISZERO PUSH2 0x12FE JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x20EA DUP4 PUSH2 0x54CB JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x211C PUSH1 0x36 DUP6 PUSH2 0x3E47 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x212B DUP3 DUP3 CALLER PUSH2 0x1B7A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2147 PUSH1 0x36 DUP11 PUSH2 0x3EC7 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x2161 DUP6 DUP6 DUP6 CALLER DUP7 DUP7 DUP15 DUP15 PUSH2 0x358D JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21D0 JUMPI PUSH2 0x21D0 PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x199A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x54ED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x199A SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5524 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x231B JUMPI PUSH2 0x231B PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x232C JUMPI PUSH2 0x232C PUSH2 0x5220 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x241F SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24F1 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD30 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5589 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x276A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x278E SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x281E SWAP2 SWAP1 PUSH2 0x547F JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x28A5 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5732 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x28D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x28EB PUSH2 0x39AA JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A3C SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2B11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B35 SWAP2 SWAP1 PUSH2 0x58D8 JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2B5A JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x2B66 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2BF2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xFA1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2C2F JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CEC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1121 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x199A JUMP JUMPDEST PUSH2 0x2DDD PUSH2 0x3F07 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2E79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1484 SWAP1 PUSH2 0x4094 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2EE2 JUMPI PUSH2 0x2EE2 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2F0B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FE2 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2FC2 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH2 0x2F73 DUP6 DUP5 PUSH2 0x5922 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2F83 JUMPI PUSH2 0x2F83 PUSH2 0x5939 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2FD0 JUMP JUMPDEST DUP3 PUSH2 0x2FCC DUP2 PUSH2 0x5968 JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2FDA DUP2 PUSH2 0x5968 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2F11 JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2FF4 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x3063 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x12FE SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x43C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x31F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3310 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3334 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x33A7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x59A1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x33BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x33D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3441 PUSH1 0x36 DUP7 PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP4 SWAP1 SHR AND SWAP3 PUSH1 0xFF PUSH1 0x90 DUP5 SWAP1 SHR AND SWAP3 PUSH1 0x98 SHR AND SWAP1 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x12FE DUP5 DUP5 DUP5 DUP5 CALLER PUSH2 0x2244 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3460 PUSH2 0x3CBA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x13FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3507 PUSH1 0x36 DUP7 PUSH2 0x3BA2 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16A0 DUP4 DUP4 DUP4 PUSH2 0x1305 JUMP JUMPDEST PUSH2 0x3520 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x12D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3622 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3636 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x367B JUMPI PUSH2 0x367B PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x368C JUMPI PUSH2 0x368C PUSH2 0x5220 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x3719 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x528A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3736 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x375A SWAP2 SWAP1 PUSH2 0x52FD JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3770 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x37F2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x3888 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x38F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 CALLDATALOAD DUP2 SSTORE DUP2 SWAP1 JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x90 DUP5 SWAP1 SHR AND PUSH2 0x3923 DUP4 DUP4 CALLER DUP5 PUSH2 0x19CE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3993 PUSH1 0x36 DUP9 DUP9 PUSH2 0x4118 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x2E79 DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0xAEC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A2C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A50 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x10 DUP3 SWAP1 SHR PUSH1 0xFF AND JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3B58 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x1442 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x3B96 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x41DC JUMP JUMPDEST SWAP1 PUSH2 0x41E9 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xFFFF DUP5 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP7 SWAP1 SHR DUP2 AND SWAP1 PUSH1 0xFF PUSH1 0x90 DUP9 SWAP1 SHR AND SWAP1 DUP3 EQ ISZERO PUSH2 0x3BF8 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP JUMPDEST PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP SWAP3 POP SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH1 0xA0 DUP7 SWAP1 SHR PUSH4 0xFFFFFFFF AND PUSH1 0xC0 DUP8 SWAP1 SHR PUSH1 0xFF AND DUP3 DUP1 DUP1 PUSH2 0x3CA2 DUP13 DUP13 PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x90 DUP5 SWAP1 SHR AND SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP2 SWAP15 SWAP1 SWAP14 POP SWAP1 SWAP12 POP SWAP5 SWAP10 POP SWAP3 SWAP8 POP SWAP3 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D25 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D49 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3DB5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3DD9 SWAP2 SWAP1 PUSH2 0x547F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFFFF DUP4 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND SWAP1 DUP2 EQ ISZERO PUSH2 0x3E92 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 SWAP1 SWAP5 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3EE0 DUP13 DUP13 PUSH2 0x3BA2 JUMP JUMPDEST SWAP2 SWAP15 SWAP1 SWAP14 POP SWAP1 SWAP12 PUSH1 0x98 DUP2 SWAP1 SHR PUSH4 0xFFFFFFFF AND SWAP12 POP PUSH1 0xB8 SHR PUSH1 0xFF AND SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F72 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3F96 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4002 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4026 SWAP2 SWAP1 PUSH2 0x547F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x40DA JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x1442 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x3B96 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x4240 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH2 0xFFFF DUP8 DUP2 AND SWAP1 PUSH1 0x10 DUP10 SWAP1 SHR AND PUSH1 0x20 DUP10 SWAP1 SHR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND SWAP1 PUSH1 0x80 DUP12 SWAP1 SHR PUSH1 0x1 AND SWAP1 DUP3 EQ ISZERO PUSH2 0x418F JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP JUMPDEST PUSH2 0xFFFF SWAP5 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP14 SWAP1 SWAP14 MSTORE PUSH1 0x40 DUP1 DUP15 KECCAK256 SLOAD SWAP5 SWAP1 SWAP6 AND DUP14 MSTORE SWAP4 SWAP1 SWAP12 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP13 SWAP3 AND SWAP11 SWAP1 SWAP10 POP SWAP8 POP SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1442 DUP4 DUP4 TIMESTAMP PUSH2 0x427D JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x421E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4254 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5922 JUMP JUMPDEST PUSH2 0x425E SWAP1 DUP6 PUSH2 0x5A7D JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x212B DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5AE9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4291 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5922 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x42AD JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1442 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x42E3 JUMPI PUSH1 0x0 PUSH2 0x42E8 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x42FC DUP11 DUP1 PUSH2 0x41E9 JUMP JUMPDEST DUP2 PUSH2 0x4309 JUMPI PUSH2 0x4309 PUSH2 0x5ABA JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x431B DUP4 DUP12 PUSH2 0x41E9 JUMP JUMPDEST DUP2 PUSH2 0x4328 JUMPI PUSH2 0x4328 PUSH2 0x5ABA JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x4338 DUP7 DUP9 PUSH2 0x5A7D JUMP JUMPDEST PUSH2 0x4342 SWAP2 SWAP1 PUSH2 0x5A7D JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x4356 DUP9 DUP11 PUSH2 0x5A7D JUMP JUMPDEST PUSH2 0x4360 SWAP2 SWAP1 PUSH2 0x5A7D JUMP JUMPDEST PUSH2 0x436A SWAP2 SWAP1 PUSH2 0x5A7D JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x4381 DUP11 DUP16 PUSH2 0x5A7D JUMP JUMPDEST PUSH2 0x438B SWAP2 SWAP1 PUSH2 0x5B01 JUMP JUMPDEST PUSH2 0x43A1 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5AE9 JUMP JUMPDEST PUSH2 0x43AB SWAP2 SWAP1 PUSH2 0x5AE9 JUMP JUMPDEST PUSH2 0x43B5 SWAP2 SWAP1 PUSH2 0x5AE9 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x43D0 SWAP1 PUSH2 0x53A1 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x43F2 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x4438 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x440B JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x4438 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x4438 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x4438 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x441D JUMP JUMPDEST POP PUSH2 0x4444 SWAP3 SWAP2 POP PUSH2 0x4448 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x4444 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4449 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x448A DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x44B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x44C0 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x44D0 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x44E0 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x44F7 DUP2 PUSH2 0x448F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x448A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x448A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4545 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4550 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x4567 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 POP PUSH2 0x4575 PUSH1 0x60 DUP11 ADD PUSH2 0x4505 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x458A PUSH1 0xA0 DUP11 ADD PUSH2 0x4517 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x45C5 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x45D5 DUP2 PUSH2 0x445D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x45F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x460B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1442 DUP3 PUSH2 0x4517 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4634 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x465B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1442 DUP2 PUSH2 0x445D JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x4693 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x46B7 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x46DB PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x46FF PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4723 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x473C PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x4752 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x47F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x480D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3B0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x483E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x4849 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x4859 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x487C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4888 DUP10 DUP3 DUP11 ADD PUSH2 0x47E3 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x489B SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x4505 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x48B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1442 DUP3 PUSH2 0x4505 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x48D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x48E3 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4901 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x491F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x492A DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x45D5 DUP2 PUSH2 0x448F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4950 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x495B DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4972 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 POP PUSH2 0x4980 PUSH1 0x60 DUP7 ADD PUSH2 0x4505 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x49A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x49CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x49D7 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x49EE DUP2 PUSH2 0x445D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4A1F JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x4A03 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x4A31 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x212B PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x49F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4AEA DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4AFA DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4B0A DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4B1A DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x44F7 DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4B48 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4B68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4B80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3B0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4BAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4BC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4BD1 DUP6 DUP3 DUP7 ADD PUSH2 0x4B56 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4BF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4C00 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4B1A PUSH1 0x60 DUP8 ADD PUSH2 0x4505 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x4C3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C46 DUP13 PUSH2 0x447F JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4C62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C72 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B56 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4C88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C98 DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B56 JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4CAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4CBE DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B56 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x4CCF PUSH1 0x80 DUP15 ADD PUSH2 0x447F JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4CE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4CF3 DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x47E3 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x4D04 PUSH1 0xC0 DUP14 ADD PUSH2 0x4505 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x448A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4D52 DUP4 PUSH2 0x4D16 JUMP JUMPDEST SWAP2 POP PUSH2 0x4D60 PUSH1 0x20 DUP5 ADD PUSH2 0x4D16 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4D89 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4D99 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4DF8 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4DC6 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4E56 JUMPI PUSH2 0x4E56 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4EA3 JUMPI PUSH2 0x4EA3 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EC7 DUP4 PUSH2 0x4517 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4EE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x4EF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F01 PUSH2 0x4E33 JUMP JUMPDEST PUSH2 0x4F0A DUP4 PUSH2 0x4505 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4F17 DUP5 DUP5 ADD PUSH2 0x4505 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x4F27 PUSH1 0x40 DUP5 ADD PUSH2 0x4505 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x4F3A DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4F51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4F66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4F78 JUMPI PUSH2 0x4F78 PUSH2 0x4E04 JUMP JUMPDEST PUSH2 0x4FA8 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x4E5C JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x4FBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4FFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x5007 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x5017 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x5027 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x5065 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x5070 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x4575 DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x50A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x50AD DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x50DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1442 DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x51B4 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1442 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x49F9 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x5286 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x52DC PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x524F JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x530F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x5371 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x49F9 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x53B5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x3B9C JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x5465 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1442 DUP2 PUSH2 0x448F JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x54E3 JUMPI PUSH2 0x54E3 PUSH2 0x549C JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x16A0 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x524F JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x557D JUMPI DUP4 CALLDATALOAD PUSH2 0x5555 DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5542 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x5625 DUP2 DUP6 ADD DUP4 PUSH2 0x524F JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x563E DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x5655 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x5202 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x56F7 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x56C5 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x56F7 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5716 JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x5771 PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x578F PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x56B1 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x57CB DUP5 DUP4 PUSH2 0x5702 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x57EA DUP6 DUP5 PUSH2 0x5702 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x5817 DUP2 DUP10 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x5834 DUP8 DUP7 PUSH2 0x49F9 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x5851 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x58AB PUSH2 0x200 DUP12 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x58C2 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x557D SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x58F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5934 JUMPI PUSH2 0x5934 PUSH2 0x549C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x599A JUMPI PUSH2 0x599A PUSH2 0x549C JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5A11 PUSH1 0xC0 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x5A69 PUSH2 0x160 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x5202 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5AB5 JUMPI PUSH2 0x5AB5 PUSH2 0x549C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5AFC JUMPI PUSH2 0x5AFC PUSH2 0x549C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5B37 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE SWAP6 LOG4 0xD7 0x27 0xC3 SWAP12 DUP3 0x25 GAS SWAP7 SWAP6 SWAP1 PUSH16 0xA367A1BBCD5D90CAA4E0D041BFB6D00C RETURNDATASIZE SDIV PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"503:3703:111:-:0;;;928:1:87;886:43;;646:97:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3321:29:112;;;503:3703:111;;14:321:124;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:124;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:124:o;:::-;503:3703:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_25195":{"entryPoint":null,"id":25195,"parameterSlots":0,"returnSlots":0},"@BRIDGE_PROTOCOL_FEE_26159":{"entryPoint":null,"id":26159,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TOTAL_26169":{"entryPoint":null,"id":26169,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TO_PROTOCOL_26179":{"entryPoint":null,"id":26179,"parameterSlots":0,"returnSlots":1},"@MAX_NUMBER_RESERVES_26190":{"entryPoint":null,"id":26190,"parameterSlots":0,"returnSlots":1},"@MAX_STABLE_RATE_BORROW_SIZE_PERCENT_26149":{"entryPoint":null,"id":26149,"parameterSlots":0,"returnSlots":1},"@POOL_REVISION_25192":{"entryPoint":null,"id":25192,"parameterSlots":0,"returnSlots":0},"@_onlyBridge_25270":{"entryPoint":15546,"id":25270,"parameterSlots":0,"returnSlots":0},"@_onlyPoolAdmin_25252":{"entryPoint":16135,"id":25252,"parameterSlots":0,"returnSlots":0},"@_onlyPoolConfigurator_25234":{"entryPoint":14762,"id":25234,"parameterSlots":0,"returnSlots":0},"@backUnbacked_25370":{"entryPoint":13398,"id":25370,"parameterSlots":3,"returnSlots":1},"@borrow_24937":{"entryPoint":13279,"id":24937,"parameterSlots":1,"returnSlots":0},"@borrow_25548":{"entryPoint":8772,"id":25548,"parameterSlots":5,"returnSlots":0},"@calculateCompoundedInterest_23673":{"entryPoint":17021,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":16860,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":16960,"id":23550,"parameterSlots":2,"returnSlots":1},"@configureEModeCategory_26458":{"entryPoint":12268,"id":26458,"parameterSlots":2,"returnSlots":0},"@decodeBorrowParams_16265":{"entryPoint":null,"id":16265,"parameterSlots":2,"returnSlots":4},"@decodeLiquidationCallParams_16513":{"entryPoint":16664,"id":16513,"parameterSlots":3,"returnSlots":5},"@decodeRebalanceStableBorrowRateParams_16418":{"entryPoint":null,"id":16418,"parameterSlots":2,"returnSlots":2},"@decodeRepayParams_16316":{"entryPoint":15266,"id":16316,"parameterSlots":2,"returnSlots":3},"@decodeRepayWithPermitParams_16362":{"entryPoint":16071,"id":16362,"parameterSlots":2,"returnSlots":5},"@decodeSetUserUseReserveAsCollateralParams_16446":{"entryPoint":null,"id":16446,"parameterSlots":2,"returnSlots":2},"@decodeSupplyParams_16134":{"entryPoint":null,"id":16134,"parameterSlots":2,"returnSlots":3},"@decodeSupplyWithPermitParams_16180":{"entryPoint":15408,"id":16180,"parameterSlots":2,"returnSlots":5},"@decodeSwapBorrowRateModeParams_16390":{"entryPoint":15064,"id":16390,"parameterSlots":2,"returnSlots":2},"@decodeWithdrawParams_16225":{"entryPoint":15943,"id":16225,"parameterSlots":2,"returnSlots":2},"@deposit_26586":{"entryPoint":null,"id":26586,"parameterSlots":4,"returnSlots":0},"@dropReserve_26302":{"entryPoint":6865,"id":26302,"parameterSlots":1,"returnSlots":0},"@finalizeTransfer_26245":{"entryPoint":12632,"id":26245,"parameterSlots":6,"returnSlots":0},"@flashLoanSimple_25924":{"entryPoint":5319,"id":25924,"parameterSlots":6,"returnSlots":0},"@flashLoan_25883":{"entryPoint":9514,"id":25883,"parameterSlots":11,"returnSlots":0},"@getConfiguration_26012":{"entryPoint":null,"id":26012,"parameterSlots":1,"returnSlots":1},"@getEModeCategoryData_26473":{"entryPoint":7750,"id":26473,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_20345":{"entryPoint":15122,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":16532,"id":20309,"parameterSlots":1,"returnSlots":1},"@getReserveAddressById_26139":{"entryPoint":null,"id":26139,"parameterSlots":1,"returnSlots":1},"@getReserveData_25955":{"entryPoint":null,"id":25955,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedIncome_26043":{"entryPoint":11906,"id":26043,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedVariableDebt_26059":{"entryPoint":5206,"id":26059,"parameterSlots":1,"returnSlots":1},"@getReservesList_26126":{"entryPoint":11952,"id":26126,"parameterSlots":0,"returnSlots":1},"@getRevision_25279":{"entryPoint":null,"id":25279,"parameterSlots":0,"returnSlots":1},"@getUserAccountData_25996":{"entryPoint":10522,"id":25996,"parameterSlots":1,"returnSlots":6},"@getUserConfiguration_26027":{"entryPoint":null,"id":26027,"parameterSlots":1,"returnSlots":1},"@getUserEMode_26516":{"entryPoint":null,"id":26516,"parameterSlots":1,"returnSlots":1},"@initReserve_26284":{"entryPoint":8064,"id":26284,"parameterSlots":5,"returnSlots":0},"@initialize_25313":{"entryPoint":11081,"id":25313,"parameterSlots":1,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@liquidationCall_25141":{"entryPoint":14719,"id":25141,"parameterSlots":2,"returnSlots":0},"@liquidationCall_25812":{"entryPoint":2796,"id":25812,"parameterSlots":5,"returnSlots":0},"@mintToTreasury_25940":{"entryPoint":8687,"id":25940,"parameterSlots":2,"returnSlots":0},"@mintUnbacked_25343":{"entryPoint":7577,"id":25343,"parameterSlots":4,"returnSlots":0},"@rayMul_23780":{"entryPoint":16873,"id":23780,"parameterSlots":2,"returnSlots":1},"@rebalanceStableBorrowRate_25083":{"entryPoint":5258,"id":25083,"parameterSlots":1,"returnSlots":0},"@rebalanceStableBorrowRate_25737":{"entryPoint":11596,"id":25737,"parameterSlots":2,"returnSlots":0},"@repayWithATokens_25037":{"entryPoint":13558,"id":25037,"parameterSlots":1,"returnSlots":1},"@repayWithATokens_25690":{"entryPoint":4869,"id":25690,"parameterSlots":3,"returnSlots":1},"@repayWithPermit_25009":{"entryPoint":8499,"id":25009,"parameterSlots":3,"returnSlots":1},"@repayWithPermit_25654":{"entryPoint":13709,"id":25654,"parameterSlots":8,"returnSlots":1},"@repay_24967":{"entryPoint":5757,"id":24967,"parameterSlots":1,"returnSlots":1},"@repay_25584":{"entryPoint":5801,"id":25584,"parameterSlots":4,"returnSlots":1},"@rescueTokens_26555":{"entryPoint":11733,"id":26555,"parameterSlots":3,"returnSlots":0},"@resetIsolationModeTotalDebt_26533":{"entryPoint":13592,"id":26533,"parameterSlots":1,"returnSlots":0},"@setConfiguration_26397":{"entryPoint":14184,"id":26397,"parameterSlots":2,"returnSlots":0},"@setReserveInterestRateStrategyAddress_26349":{"entryPoint":3863,"id":26349,"parameterSlots":2,"returnSlots":0},"@setUserEMode_26502":{"entryPoint":4390,"id":26502,"parameterSlots":1,"returnSlots":0},"@setUserUseReserveAsCollateral_25106":{"entryPoint":5697,"id":25106,"parameterSlots":1,"returnSlots":0},"@setUserUseReserveAsCollateral_25769":{"entryPoint":6137,"id":25769,"parameterSlots":2,"returnSlots":0},"@supplyWithPermit_24879":{"entryPoint":6989,"id":24879,"parameterSlots":3,"returnSlots":0},"@supplyWithPermit_25457":{"entryPoint":3431,"id":25457,"parameterSlots":8,"returnSlots":0},"@supply_24839":{"entryPoint":14633,"id":24839,"parameterSlots":1,"returnSlots":0},"@supply_25401":{"entryPoint":6606,"id":25401,"parameterSlots":4,"returnSlots":0},"@swapBorrowRateMode_25060":{"entryPoint":4357,"id":25060,"parameterSlots":1,"returnSlots":0},"@swapBorrowRateMode_25717":{"entryPoint":8558,"id":25717,"parameterSlots":2,"returnSlots":0},"@updateBridgeProtocolFee_26411":{"entryPoint":5193,"id":26411,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiums_26431":{"entryPoint":10467,"id":26431,"parameterSlots":2,"returnSlots":0},"@withdraw_24906":{"entryPoint":8460,"id":24906,"parameterSlots":1,"returnSlots":1},"@withdraw_25496":{"entryPoint":7034,"id":25496,"parameterSlots":3,"returnSlots":1},"abi_decode_address":{"entryPoint":17535,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":19286,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_calldata":{"entryPoint":18403,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":17993,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":20751,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":17831,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address":{"entryPoint":19143,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool":{"entryPoint":17565,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256":{"entryPoint":20451,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":19817,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16":{"entryPoint":18469,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16":{"entryPoint":19484,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_addresst_bool":{"entryPoint":18700,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr":{"entryPoint":20622,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":19242,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_address":{"entryPoint":18871,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16":{"entryPoint":18746,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":17704,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":17940,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_uint256t_address":{"entryPoint":18626,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":20552,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address":{"entryPoint":19421,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":19355,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":21631,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":17888,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_bytes32":{"entryPoint":20717,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32t_bytes32t_bytes32":{"entryPoint":18827,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128t_uint128":{"entryPoint":19766,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint16":{"entryPoint":18599,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":21245,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":22744,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint8":{"entryPoint":17913,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr":{"entryPoint":20139,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint128":{"entryPoint":19734,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16":{"entryPoint":17669,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":17687,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn":{"entryPoint":22193,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":22274,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_InterestRateMode":{"entryPoint":21071,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":18937,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ReserveConfigurationMap":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":19882,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed":{"entryPoint":21796,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed":{"entryPoint":20780,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed":{"entryPoint":22945,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed":{"entryPoint":21897,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed":{"entryPoint":22322,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed":{"entryPoint":21487,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed":{"entryPoint":21130,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":21005,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed":{"entryPoint":19044,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed":{"entryPoint":18022,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed":{"entryPoint":21270,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":21741,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_uint128":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":20060,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_5657":{"entryPoint":20019,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":23273,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":23297,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":23165,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":22818,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":21409,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint16":{"entryPoint":21707,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":22888,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":21660,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":23226,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":21024,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":22841,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":19972,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_revert_address":{"entryPoint":17501,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":17551,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:51039:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:124"},"nodeType":"YulFunctionCall","src":"148:12:124"},"nodeType":"YulExpressionStatement","src":"148:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:124"},"nodeType":"YulFunctionCall","src":"89:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:124"},"nodeType":"YulFunctionCall","src":"79:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:124"},"nodeType":"YulFunctionCall","src":"72:73:124"},"nodeType":"YulIf","src":"69:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:124","type":""}],"src":"14:154:124"},{"body":{"nodeType":"YulBlock","src":"222:85:124","statements":[{"nodeType":"YulAssignment","src":"232:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"254:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:124"},"nodeType":"YulFunctionCall","src":"241:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"295:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"270:24:124"},"nodeType":"YulFunctionCall","src":"270:31:124"},"nodeType":"YulExpressionStatement","src":"270:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"201:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"212:5:124","type":""}],"src":"173:134:124"},{"body":{"nodeType":"YulBlock","src":"354:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:124"},"nodeType":"YulFunctionCall","src":"410:12:124"},"nodeType":"YulExpressionStatement","src":"410:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"377:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"398:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"391:6:124"},"nodeType":"YulFunctionCall","src":"391:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"384:6:124"},"nodeType":"YulFunctionCall","src":"384:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"374:2:124"},"nodeType":"YulFunctionCall","src":"374:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"367:6:124"},"nodeType":"YulFunctionCall","src":"367:40:124"},"nodeType":"YulIf","src":"364:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"343:5:124","type":""}],"src":"312:118:124"},{"body":{"nodeType":"YulBlock","src":"570:599:124","statements":[{"body":{"nodeType":"YulBlock","src":"617:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"626:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"629:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"619:6:124"},"nodeType":"YulFunctionCall","src":"619:12:124"},"nodeType":"YulExpressionStatement","src":"619:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"591:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"600:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"587:3:124"},"nodeType":"YulFunctionCall","src":"587:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"612:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"583:3:124"},"nodeType":"YulFunctionCall","src":"583:33:124"},"nodeType":"YulIf","src":"580:53:124"},{"nodeType":"YulVariableDeclaration","src":"642:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"668:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"655:12:124"},"nodeType":"YulFunctionCall","src":"655:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"646:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"687:24:124"},"nodeType":"YulFunctionCall","src":"687:31:124"},"nodeType":"YulExpressionStatement","src":"687:31:124"},{"nodeType":"YulAssignment","src":"727:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"737:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"727:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"751:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"783:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"794:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"779:3:124"},"nodeType":"YulFunctionCall","src":"779:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"766:12:124"},"nodeType":"YulFunctionCall","src":"766:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"755:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"832:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"807:24:124"},"nodeType":"YulFunctionCall","src":"807:33:124"},"nodeType":"YulExpressionStatement","src":"807:33:124"},{"nodeType":"YulAssignment","src":"849:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"859:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"849:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"875:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"907:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"918:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"903:3:124"},"nodeType":"YulFunctionCall","src":"903:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"890:12:124"},"nodeType":"YulFunctionCall","src":"890:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"879:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"956:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"931:24:124"},"nodeType":"YulFunctionCall","src":"931:33:124"},"nodeType":"YulExpressionStatement","src":"931:33:124"},{"nodeType":"YulAssignment","src":"973:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"983:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"973:6:124"}]},{"nodeType":"YulAssignment","src":"999:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1026:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1022:3:124"},"nodeType":"YulFunctionCall","src":"1022:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1009:12:124"},"nodeType":"YulFunctionCall","src":"1009:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"999:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1050:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1082:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1093:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1078:3:124"},"nodeType":"YulFunctionCall","src":"1078:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1065:12:124"},"nodeType":"YulFunctionCall","src":"1065:33:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"1054:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"1129:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1107:21:124"},"nodeType":"YulFunctionCall","src":"1107:30:124"},"nodeType":"YulExpressionStatement","src":"1107:30:124"},{"nodeType":"YulAssignment","src":"1146:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"1156:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1146:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"504:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"515:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"527:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"535:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"543:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"551:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"559:6:124","type":""}],"src":"435:734:124"},{"body":{"nodeType":"YulBlock","src":"1275:76:124","statements":[{"nodeType":"YulAssignment","src":"1285:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1297:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1293:3:124"},"nodeType":"YulFunctionCall","src":"1293:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1285:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1327:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1338:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:124"},"nodeType":"YulFunctionCall","src":"1320:25:124"},"nodeType":"YulExpressionStatement","src":"1320:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1244:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1255:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1266:4:124","type":""}],"src":"1174:177:124"},{"body":{"nodeType":"YulBlock","src":"1404:111:124","statements":[{"nodeType":"YulAssignment","src":"1414:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1436:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1423:12:124"},"nodeType":"YulFunctionCall","src":"1423:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1414:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1493:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1502:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1505:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1495:6:124"},"nodeType":"YulFunctionCall","src":"1495:12:124"},"nodeType":"YulExpressionStatement","src":"1495:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1476:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1483:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1472:3:124"},"nodeType":"YulFunctionCall","src":"1472:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1462:2:124"},"nodeType":"YulFunctionCall","src":"1462:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1455:6:124"},"nodeType":"YulFunctionCall","src":"1455:37:124"},"nodeType":"YulIf","src":"1452:57:124"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1383:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1394:5:124","type":""}],"src":"1356:159:124"},{"body":{"nodeType":"YulBlock","src":"1567:109:124","statements":[{"nodeType":"YulAssignment","src":"1577:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1599:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1586:12:124"},"nodeType":"YulFunctionCall","src":"1586:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1577:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1654:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1663:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1666:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1656:6:124"},"nodeType":"YulFunctionCall","src":"1656:12:124"},"nodeType":"YulExpressionStatement","src":"1656:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1628:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1639:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1646:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1635:3:124"},"nodeType":"YulFunctionCall","src":"1635:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1625:2:124"},"nodeType":"YulFunctionCall","src":"1625:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1618:6:124"},"nodeType":"YulFunctionCall","src":"1618:35:124"},"nodeType":"YulIf","src":"1615:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1546:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1557:5:124","type":""}],"src":"1520:156:124"},{"body":{"nodeType":"YulBlock","src":"1867:621:124","statements":[{"body":{"nodeType":"YulBlock","src":"1914:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1916:6:124"},"nodeType":"YulFunctionCall","src":"1916:12:124"},"nodeType":"YulExpressionStatement","src":"1916:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1888:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1897:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1884:3:124"},"nodeType":"YulFunctionCall","src":"1884:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1909:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1880:3:124"},"nodeType":"YulFunctionCall","src":"1880:33:124"},"nodeType":"YulIf","src":"1877:53:124"},{"nodeType":"YulVariableDeclaration","src":"1939:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1965:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1952:12:124"},"nodeType":"YulFunctionCall","src":"1952:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1943:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2009:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1984:24:124"},"nodeType":"YulFunctionCall","src":"1984:31:124"},"nodeType":"YulExpressionStatement","src":"1984:31:124"},{"nodeType":"YulAssignment","src":"2024:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2034:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2024:6:124"}]},{"nodeType":"YulAssignment","src":"2048:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2086:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2071:3:124"},"nodeType":"YulFunctionCall","src":"2071:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2058:12:124"},"nodeType":"YulFunctionCall","src":"2058:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2048:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2099:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2131:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2142:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2127:3:124"},"nodeType":"YulFunctionCall","src":"2127:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2114:12:124"},"nodeType":"YulFunctionCall","src":"2114:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2103:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2180:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2155:24:124"},"nodeType":"YulFunctionCall","src":"2155:33:124"},"nodeType":"YulExpressionStatement","src":"2155:33:124"},{"nodeType":"YulAssignment","src":"2197:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2207:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2197:6:124"}]},{"nodeType":"YulAssignment","src":"2223:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2255:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2266:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2251:3:124"},"nodeType":"YulFunctionCall","src":"2251:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"2233:17:124"},"nodeType":"YulFunctionCall","src":"2233:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2223:6:124"}]},{"nodeType":"YulAssignment","src":"2279:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2306:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2317:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2302:3:124"},"nodeType":"YulFunctionCall","src":"2302:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2289:12:124"},"nodeType":"YulFunctionCall","src":"2289:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2279:6:124"}]},{"nodeType":"YulAssignment","src":"2331:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2373:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2358:3:124"},"nodeType":"YulFunctionCall","src":"2358:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2341:16:124"},"nodeType":"YulFunctionCall","src":"2341:37:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2331:6:124"}]},{"nodeType":"YulAssignment","src":"2387:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2414:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2425:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2410:3:124"},"nodeType":"YulFunctionCall","src":"2410:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2397:12:124"},"nodeType":"YulFunctionCall","src":"2397:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2387:6:124"}]},{"nodeType":"YulAssignment","src":"2439:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2477:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:124"},"nodeType":"YulFunctionCall","src":"2462:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2449:12:124"},"nodeType":"YulFunctionCall","src":"2449:33:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"2439:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1788:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1800:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1808:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1816:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1824:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1832:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1840:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1848:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1856:6:124","type":""}],"src":"1681:807:124"},{"body":{"nodeType":"YulBlock","src":"2625:125:124","statements":[{"nodeType":"YulAssignment","src":"2635:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2647:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:124"},"nodeType":"YulFunctionCall","src":"2643:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2635:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2677:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2692:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2700:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2688:3:124"},"nodeType":"YulFunctionCall","src":"2688:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2670:6:124"},"nodeType":"YulFunctionCall","src":"2670:74:124"},"nodeType":"YulExpressionStatement","src":"2670:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2594:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2605:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2616:4:124","type":""}],"src":"2493:257:124"},{"body":{"nodeType":"YulBlock","src":"2799:75:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2816:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2825:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2832:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2821:3:124"},"nodeType":"YulFunctionCall","src":"2821:46:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2809:6:124"},"nodeType":"YulFunctionCall","src":"2809:59:124"},"nodeType":"YulExpressionStatement","src":"2809:59:124"}]},"name":"abi_encode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2783:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2790:3:124","type":""}],"src":"2755:119:124"},{"body":{"nodeType":"YulBlock","src":"2980:117:124","statements":[{"nodeType":"YulAssignment","src":"2990:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3002:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3013:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2998:3:124"},"nodeType":"YulFunctionCall","src":"2998:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2990:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3032:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3047:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3055:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3043:3:124"},"nodeType":"YulFunctionCall","src":"3043:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3025:6:124"},"nodeType":"YulFunctionCall","src":"3025:66:124"},"nodeType":"YulExpressionStatement","src":"3025:66:124"}]},"name":"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2949:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2960:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2971:4:124","type":""}],"src":"2879:218:124"},{"body":{"nodeType":"YulBlock","src":"3189:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"3235:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3244:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3247:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3237:6:124"},"nodeType":"YulFunctionCall","src":"3237:12:124"},"nodeType":"YulExpressionStatement","src":"3237:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3210:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3219:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3206:3:124"},"nodeType":"YulFunctionCall","src":"3206:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3231:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3202:3:124"},"nodeType":"YulFunctionCall","src":"3202:32:124"},"nodeType":"YulIf","src":"3199:52:124"},{"nodeType":"YulVariableDeclaration","src":"3260:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3273:12:124"},"nodeType":"YulFunctionCall","src":"3273:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3264:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3330:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3305:24:124"},"nodeType":"YulFunctionCall","src":"3305:31:124"},"nodeType":"YulExpressionStatement","src":"3305:31:124"},{"nodeType":"YulAssignment","src":"3345:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3355:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3345:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3369:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3412:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3397:3:124"},"nodeType":"YulFunctionCall","src":"3397:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3384:12:124"},"nodeType":"YulFunctionCall","src":"3384:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3373:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3450:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3425:24:124"},"nodeType":"YulFunctionCall","src":"3425:33:124"},"nodeType":"YulExpressionStatement","src":"3425:33:124"},{"nodeType":"YulAssignment","src":"3467:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3477:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3467:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3147:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3158:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3170:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3178:6:124","type":""}],"src":"3102:388:124"},{"body":{"nodeType":"YulBlock","src":"3565:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"3611:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3620:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3623:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3613:6:124"},"nodeType":"YulFunctionCall","src":"3613:12:124"},"nodeType":"YulExpressionStatement","src":"3613:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3586:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3595:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3582:3:124"},"nodeType":"YulFunctionCall","src":"3582:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3607:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3578:3:124"},"nodeType":"YulFunctionCall","src":"3578:32:124"},"nodeType":"YulIf","src":"3575:52:124"},{"nodeType":"YulAssignment","src":"3636:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3659:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3646:12:124"},"nodeType":"YulFunctionCall","src":"3646:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3636:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3531:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3542:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3554:6:124","type":""}],"src":"3495:180:124"},{"body":{"nodeType":"YulBlock","src":"3748:114:124","statements":[{"body":{"nodeType":"YulBlock","src":"3794:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3803:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3806:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3796:6:124"},"nodeType":"YulFunctionCall","src":"3796:12:124"},"nodeType":"YulExpressionStatement","src":"3796:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3769:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3778:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3765:3:124"},"nodeType":"YulFunctionCall","src":"3765:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3790:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3761:3:124"},"nodeType":"YulFunctionCall","src":"3761:32:124"},"nodeType":"YulIf","src":"3758:52:124"},{"nodeType":"YulAssignment","src":"3819:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3846:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3829:16:124"},"nodeType":"YulFunctionCall","src":"3829:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3819:6:124"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3714:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3725:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3737:6:124","type":""}],"src":"3680:182:124"},{"body":{"nodeType":"YulBlock","src":"3971:279:124","statements":[{"body":{"nodeType":"YulBlock","src":"4017:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4026:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4029:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4019:6:124"},"nodeType":"YulFunctionCall","src":"4019:12:124"},"nodeType":"YulExpressionStatement","src":"4019:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3992:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4001:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3988:3:124"},"nodeType":"YulFunctionCall","src":"3988:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4013:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3984:3:124"},"nodeType":"YulFunctionCall","src":"3984:32:124"},"nodeType":"YulIf","src":"3981:52:124"},{"nodeType":"YulVariableDeclaration","src":"4042:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4068:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4055:12:124"},"nodeType":"YulFunctionCall","src":"4055:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4046:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4112:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4087:24:124"},"nodeType":"YulFunctionCall","src":"4087:31:124"},"nodeType":"YulExpressionStatement","src":"4087:31:124"},{"nodeType":"YulAssignment","src":"4127:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4137:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4127:6:124"}]},{"nodeType":"YulAssignment","src":"4151:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4178:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4189:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4174:3:124"},"nodeType":"YulFunctionCall","src":"4174:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4161:12:124"},"nodeType":"YulFunctionCall","src":"4161:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4151:6:124"}]},{"nodeType":"YulAssignment","src":"4202:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4229:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4240:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4225:3:124"},"nodeType":"YulFunctionCall","src":"4225:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4212:12:124"},"nodeType":"YulFunctionCall","src":"4212:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4202:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3921:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3932:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3944:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3952:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3960:6:124","type":""}],"src":"3867:383:124"},{"body":{"nodeType":"YulBlock","src":"4325:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"4371:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4380:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4383:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4373:6:124"},"nodeType":"YulFunctionCall","src":"4373:12:124"},"nodeType":"YulExpressionStatement","src":"4373:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4346:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4355:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4342:3:124"},"nodeType":"YulFunctionCall","src":"4342:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4367:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4338:3:124"},"nodeType":"YulFunctionCall","src":"4338:32:124"},"nodeType":"YulIf","src":"4335:52:124"},{"nodeType":"YulAssignment","src":"4396:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4419:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4406:12:124"},"nodeType":"YulFunctionCall","src":"4406:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4396:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4291:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4302:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4314:6:124","type":""}],"src":"4255:180:124"},{"body":{"nodeType":"YulBlock","src":"4510:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"4556:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4565:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4568:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4558:6:124"},"nodeType":"YulFunctionCall","src":"4558:12:124"},"nodeType":"YulExpressionStatement","src":"4558:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4531:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4540:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4527:3:124"},"nodeType":"YulFunctionCall","src":"4527:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4552:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4523:3:124"},"nodeType":"YulFunctionCall","src":"4523:32:124"},"nodeType":"YulIf","src":"4520:52:124"},{"nodeType":"YulVariableDeclaration","src":"4581:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4607:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4594:12:124"},"nodeType":"YulFunctionCall","src":"4594:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4585:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4651:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4626:24:124"},"nodeType":"YulFunctionCall","src":"4626:31:124"},"nodeType":"YulExpressionStatement","src":"4626:31:124"},{"nodeType":"YulAssignment","src":"4666:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4676:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4666:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4476:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4487:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4499:6:124","type":""}],"src":"4440:247:124"},{"body":{"nodeType":"YulBlock","src":"4759:29:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4768:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4779:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4773:5:124"},"nodeType":"YulFunctionCall","src":"4773:12:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4761:6:124"},"nodeType":"YulFunctionCall","src":"4761:25:124"},"nodeType":"YulExpressionStatement","src":"4761:25:124"}]},"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4743:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4750:3:124","type":""}],"src":"4692:96:124"},{"body":{"nodeType":"YulBlock","src":"4836:53:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4853:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4862:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4869:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4858:3:124"},"nodeType":"YulFunctionCall","src":"4858:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4846:6:124"},"nodeType":"YulFunctionCall","src":"4846:37:124"},"nodeType":"YulExpressionStatement","src":"4846:37:124"}]},"name":"abi_encode_uint40","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4820:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4827:3:124","type":""}],"src":"4793:96:124"},{"body":{"nodeType":"YulBlock","src":"4937:47:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4954:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4963:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4970:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4959:3:124"},"nodeType":"YulFunctionCall","src":"4959:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4947:6:124"},"nodeType":"YulFunctionCall","src":"4947:31:124"},"nodeType":"YulExpressionStatement","src":"4947:31:124"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4921:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4928:3:124","type":""}],"src":"4894:90:124"},{"body":{"nodeType":"YulBlock","src":"5033:83:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5050:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5059:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"5066:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5055:3:124"},"nodeType":"YulFunctionCall","src":"5055:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5043:6:124"},"nodeType":"YulFunctionCall","src":"5043:67:124"},"nodeType":"YulExpressionStatement","src":"5043:67:124"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5017:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5024:3:124","type":""}],"src":"4989:127:124"},{"body":{"nodeType":"YulBlock","src":"5282:1948:124","statements":[{"nodeType":"YulAssignment","src":"5292:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5304:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5315:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5300:3:124"},"nodeType":"YulFunctionCall","src":"5300:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5292:4:124"}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5376:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5370:5:124"},"nodeType":"YulFunctionCall","src":"5370:13:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5385:9:124"}],"functionName":{"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulIdentifier","src":"5328:41:124"},"nodeType":"YulFunctionCall","src":"5328:67:124"},"nodeType":"YulExpressionStatement","src":"5328:67:124"},{"nodeType":"YulVariableDeclaration","src":"5404:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5434:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5442:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5430:3:124"},"nodeType":"YulFunctionCall","src":"5430:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5424:5:124"},"nodeType":"YulFunctionCall","src":"5424:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5408:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5476:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5494:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5505:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5490:3:124"},"nodeType":"YulFunctionCall","src":"5490:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5457:18:124"},"nodeType":"YulFunctionCall","src":"5457:54:124"},"nodeType":"YulExpressionStatement","src":"5457:54:124"},{"nodeType":"YulVariableDeclaration","src":"5520:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5552:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5560:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5548:3:124"},"nodeType":"YulFunctionCall","src":"5548:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5542:5:124"},"nodeType":"YulFunctionCall","src":"5542:24:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"5524:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"5594:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5614:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5625:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5610:3:124"},"nodeType":"YulFunctionCall","src":"5610:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5575:18:124"},"nodeType":"YulFunctionCall","src":"5575:56:124"},"nodeType":"YulExpressionStatement","src":"5575:56:124"},{"nodeType":"YulVariableDeclaration","src":"5640:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5672:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5680:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5668:3:124"},"nodeType":"YulFunctionCall","src":"5668:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5662:5:124"},"nodeType":"YulFunctionCall","src":"5662:24:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"5644:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"5714:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5734:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5745:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5730:3:124"},"nodeType":"YulFunctionCall","src":"5730:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5695:18:124"},"nodeType":"YulFunctionCall","src":"5695:56:124"},"nodeType":"YulExpressionStatement","src":"5695:56:124"},{"nodeType":"YulVariableDeclaration","src":"5760:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5792:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5800:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5788:3:124"},"nodeType":"YulFunctionCall","src":"5788:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5782:5:124"},"nodeType":"YulFunctionCall","src":"5782:24:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"5764:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"5834:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5854:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5865:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5850:3:124"},"nodeType":"YulFunctionCall","src":"5850:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5815:18:124"},"nodeType":"YulFunctionCall","src":"5815:56:124"},"nodeType":"YulExpressionStatement","src":"5815:56:124"},{"nodeType":"YulVariableDeclaration","src":"5880:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5912:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5920:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5908:3:124"},"nodeType":"YulFunctionCall","src":"5908:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5902:5:124"},"nodeType":"YulFunctionCall","src":"5902:24:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"5884:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"5954:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5974:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5985:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5970:3:124"},"nodeType":"YulFunctionCall","src":"5970:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5935:18:124"},"nodeType":"YulFunctionCall","src":"5935:56:124"},"nodeType":"YulExpressionStatement","src":"5935:56:124"},{"nodeType":"YulVariableDeclaration","src":"6000:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6032:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6040:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6028:3:124"},"nodeType":"YulFunctionCall","src":"6028:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6022:5:124"},"nodeType":"YulFunctionCall","src":"6022:24:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"6004:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"6073:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6093:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6104:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6089:3:124"},"nodeType":"YulFunctionCall","src":"6089:20:124"}],"functionName":{"name":"abi_encode_uint40","nodeType":"YulIdentifier","src":"6055:17:124"},"nodeType":"YulFunctionCall","src":"6055:55:124"},"nodeType":"YulExpressionStatement","src":"6055:55:124"},{"nodeType":"YulVariableDeclaration","src":"6119:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6151:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6159:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6147:3:124"},"nodeType":"YulFunctionCall","src":"6147:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6141:5:124"},"nodeType":"YulFunctionCall","src":"6141:24:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"6123:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"6192:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6212:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6223:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6208:3:124"},"nodeType":"YulFunctionCall","src":"6208:20:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"6174:17:124"},"nodeType":"YulFunctionCall","src":"6174:55:124"},"nodeType":"YulExpressionStatement","src":"6174:55:124"},{"nodeType":"YulVariableDeclaration","src":"6238:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6248:6:124","type":"","value":"0x0100"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6242:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6263:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6295:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6291:3:124"},"nodeType":"YulFunctionCall","src":"6291:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6285:5:124"},"nodeType":"YulFunctionCall","src":"6285:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"6267:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"6335:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6355:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6366:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6351:3:124"},"nodeType":"YulFunctionCall","src":"6351:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6316:18:124"},"nodeType":"YulFunctionCall","src":"6316:54:124"},"nodeType":"YulExpressionStatement","src":"6316:54:124"},{"nodeType":"YulVariableDeclaration","src":"6379:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6389:6:124","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6383:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6404:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6436:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6444:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6432:3:124"},"nodeType":"YulFunctionCall","src":"6432:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6426:5:124"},"nodeType":"YulFunctionCall","src":"6426:22:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"6408:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"6476:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6496:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6507:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6492:3:124"},"nodeType":"YulFunctionCall","src":"6492:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6457:18:124"},"nodeType":"YulFunctionCall","src":"6457:54:124"},"nodeType":"YulExpressionStatement","src":"6457:54:124"},{"nodeType":"YulVariableDeclaration","src":"6520:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6530:6:124","type":"","value":"0x0140"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6524:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6545:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6577:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6585:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6573:3:124"},"nodeType":"YulFunctionCall","src":"6573:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6567:5:124"},"nodeType":"YulFunctionCall","src":"6567:22:124"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"6549:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"6617:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6637:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6648:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6633:3:124"},"nodeType":"YulFunctionCall","src":"6633:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6598:18:124"},"nodeType":"YulFunctionCall","src":"6598:54:124"},"nodeType":"YulExpressionStatement","src":"6598:54:124"},{"nodeType":"YulVariableDeclaration","src":"6661:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6671:6:124","type":"","value":"0x0160"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6665:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6686:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6719:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6727:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6715:3:124"},"nodeType":"YulFunctionCall","src":"6715:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6709:5:124"},"nodeType":"YulFunctionCall","src":"6709:22:124"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"6690:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"6759:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6780:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6791:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6776:3:124"},"nodeType":"YulFunctionCall","src":"6776:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6740:18:124"},"nodeType":"YulFunctionCall","src":"6740:55:124"},"nodeType":"YulExpressionStatement","src":"6740:55:124"},{"nodeType":"YulVariableDeclaration","src":"6804:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6814:6:124","type":"","value":"0x0180"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6808:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6829:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6862:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6870:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6858:3:124"},"nodeType":"YulFunctionCall","src":"6858:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6852:5:124"},"nodeType":"YulFunctionCall","src":"6852:22:124"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"6833:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"6902:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6923:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6934:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6919:3:124"},"nodeType":"YulFunctionCall","src":"6919:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6883:18:124"},"nodeType":"YulFunctionCall","src":"6883:55:124"},"nodeType":"YulExpressionStatement","src":"6883:55:124"},{"nodeType":"YulVariableDeclaration","src":"6947:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6957:6:124","type":"","value":"0x01a0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6951:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6972:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7005:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"7013:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7001:3:124"},"nodeType":"YulFunctionCall","src":"7001:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6995:5:124"},"nodeType":"YulFunctionCall","src":"6995:22:124"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"6976:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"7045:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7066:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"7077:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7062:3:124"},"nodeType":"YulFunctionCall","src":"7062:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"7026:18:124"},"nodeType":"YulFunctionCall","src":"7026:55:124"},"nodeType":"YulExpressionStatement","src":"7026:55:124"},{"nodeType":"YulVariableDeclaration","src":"7090:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7100:6:124","type":"","value":"0x01c0"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"7094:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7115:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7148:6:124"},{"name":"_7","nodeType":"YulIdentifier","src":"7156:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7144:3:124"},"nodeType":"YulFunctionCall","src":"7144:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7138:5:124"},"nodeType":"YulFunctionCall","src":"7138:22:124"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"7119:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"7188:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7209:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"7220:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7205:3:124"},"nodeType":"YulFunctionCall","src":"7205:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"7169:18:124"},"nodeType":"YulFunctionCall","src":"7169:55:124"},"nodeType":"YulExpressionStatement","src":"7169:55:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5251:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5262:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5273:4:124","type":""}],"src":"5121:2109:124"},{"body":{"nodeType":"YulBlock","src":"7307:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"7356:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7365:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7368:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7358:6:124"},"nodeType":"YulFunctionCall","src":"7358:12:124"},"nodeType":"YulExpressionStatement","src":"7358:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7335:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7343:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7331:3:124"},"nodeType":"YulFunctionCall","src":"7331:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7350:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7327:3:124"},"nodeType":"YulFunctionCall","src":"7327:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7320:6:124"},"nodeType":"YulFunctionCall","src":"7320:35:124"},"nodeType":"YulIf","src":"7317:55:124"},{"nodeType":"YulAssignment","src":"7381:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7404:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7391:12:124"},"nodeType":"YulFunctionCall","src":"7391:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7381:6:124"}]},{"body":{"nodeType":"YulBlock","src":"7454:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7463:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7466:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7456:6:124"},"nodeType":"YulFunctionCall","src":"7456:12:124"},"nodeType":"YulExpressionStatement","src":"7456:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7426:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7434:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7423:2:124"},"nodeType":"YulFunctionCall","src":"7423:30:124"},"nodeType":"YulIf","src":"7420:50:124"},{"nodeType":"YulAssignment","src":"7479:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7495:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7503:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7491:3:124"},"nodeType":"YulFunctionCall","src":"7491:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7479:8:124"}]},{"body":{"nodeType":"YulBlock","src":"7560:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7569:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7572:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7562:6:124"},"nodeType":"YulFunctionCall","src":"7562:12:124"},"nodeType":"YulExpressionStatement","src":"7562:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7531:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"7539:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7527:3:124"},"nodeType":"YulFunctionCall","src":"7527:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"7548:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7523:3:124"},"nodeType":"YulFunctionCall","src":"7523:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"7555:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7520:2:124"},"nodeType":"YulFunctionCall","src":"7520:39:124"},"nodeType":"YulIf","src":"7517:59:124"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7270:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7278:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7286:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7296:6:124","type":""}],"src":"7235:347:124"},{"body":{"nodeType":"YulBlock","src":"7743:671:124","statements":[{"body":{"nodeType":"YulBlock","src":"7790:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7799:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7802:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7792:6:124"},"nodeType":"YulFunctionCall","src":"7792:12:124"},"nodeType":"YulExpressionStatement","src":"7792:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7764:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7773:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7760:3:124"},"nodeType":"YulFunctionCall","src":"7760:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7785:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7756:3:124"},"nodeType":"YulFunctionCall","src":"7756:33:124"},"nodeType":"YulIf","src":"7753:53:124"},{"nodeType":"YulVariableDeclaration","src":"7815:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7841:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7828:12:124"},"nodeType":"YulFunctionCall","src":"7828:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7819:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7885:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7860:24:124"},"nodeType":"YulFunctionCall","src":"7860:31:124"},"nodeType":"YulExpressionStatement","src":"7860:31:124"},{"nodeType":"YulAssignment","src":"7900:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7910:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7900:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7924:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7956:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7967:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7952:3:124"},"nodeType":"YulFunctionCall","src":"7952:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7939:12:124"},"nodeType":"YulFunctionCall","src":"7939:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7928:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8005:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7980:24:124"},"nodeType":"YulFunctionCall","src":"7980:33:124"},"nodeType":"YulExpressionStatement","src":"7980:33:124"},{"nodeType":"YulAssignment","src":"8022:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8032:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8022:6:124"}]},{"nodeType":"YulAssignment","src":"8048:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8086:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8071:3:124"},"nodeType":"YulFunctionCall","src":"8071:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8058:12:124"},"nodeType":"YulFunctionCall","src":"8058:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8048:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8099:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8130:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8141:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8126:3:124"},"nodeType":"YulFunctionCall","src":"8126:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8113:12:124"},"nodeType":"YulFunctionCall","src":"8113:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8103:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8188:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8197:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8200:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8190:6:124"},"nodeType":"YulFunctionCall","src":"8190:12:124"},"nodeType":"YulExpressionStatement","src":"8190:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8160:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8168:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8157:2:124"},"nodeType":"YulFunctionCall","src":"8157:30:124"},"nodeType":"YulIf","src":"8154:50:124"},{"nodeType":"YulVariableDeclaration","src":"8213:84:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8269:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"8280:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8265:3:124"},"nodeType":"YulFunctionCall","src":"8265:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8289:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8239:25:124"},"nodeType":"YulFunctionCall","src":"8239:58:124"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"8217:8:124","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"8227:8:124","type":""}]},{"nodeType":"YulAssignment","src":"8306:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"8316:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8306:6:124"}]},{"nodeType":"YulAssignment","src":"8333:18:124","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"8343:8:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8333:6:124"}]},{"nodeType":"YulAssignment","src":"8360:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8392:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8403:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8388:3:124"},"nodeType":"YulFunctionCall","src":"8388:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8370:17:124"},"nodeType":"YulFunctionCall","src":"8370:38:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8360:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7669:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7680:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7692:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7700:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7708:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7716:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7724:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7732:6:124","type":""}],"src":"7587:827:124"},{"body":{"nodeType":"YulBlock","src":"8598:83:124","statements":[{"nodeType":"YulAssignment","src":"8608:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8620:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8631:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8616:3:124"},"nodeType":"YulFunctionCall","src":"8616:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8608:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8650:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8667:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8661:5:124"},"nodeType":"YulFunctionCall","src":"8661:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8643:6:124"},"nodeType":"YulFunctionCall","src":"8643:32:124"},"nodeType":"YulExpressionStatement","src":"8643:32:124"}]},"name":"abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8567:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8578:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8589:4:124","type":""}],"src":"8419:262:124"},{"body":{"nodeType":"YulBlock","src":"8755:115:124","statements":[{"body":{"nodeType":"YulBlock","src":"8801:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8810:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8813:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8803:6:124"},"nodeType":"YulFunctionCall","src":"8803:12:124"},"nodeType":"YulExpressionStatement","src":"8803:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8776:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8785:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8772:3:124"},"nodeType":"YulFunctionCall","src":"8772:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8797:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8768:3:124"},"nodeType":"YulFunctionCall","src":"8768:32:124"},"nodeType":"YulIf","src":"8765:52:124"},{"nodeType":"YulAssignment","src":"8826:38:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8854:9:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8836:17:124"},"nodeType":"YulFunctionCall","src":"8836:28:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8826:6:124"}]}]},"name":"abi_decode_tuple_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8721:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8732:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8744:6:124","type":""}],"src":"8686:184:124"},{"body":{"nodeType":"YulBlock","src":"8976:125:124","statements":[{"nodeType":"YulAssignment","src":"8986:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8998:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9009:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8994:3:124"},"nodeType":"YulFunctionCall","src":"8994:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8986:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9028:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9043:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9051:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9039:3:124"},"nodeType":"YulFunctionCall","src":"9039:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9021:6:124"},"nodeType":"YulFunctionCall","src":"9021:74:124"},"nodeType":"YulExpressionStatement","src":"9021:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8945:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8956:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8967:4:124","type":""}],"src":"8875:226:124"},{"body":{"nodeType":"YulBlock","src":"9227:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"9274:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9283:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9286:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9276:6:124"},"nodeType":"YulFunctionCall","src":"9276:12:124"},"nodeType":"YulExpressionStatement","src":"9276:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9248:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9257:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9244:3:124"},"nodeType":"YulFunctionCall","src":"9244:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9269:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9240:3:124"},"nodeType":"YulFunctionCall","src":"9240:33:124"},"nodeType":"YulIf","src":"9237:53:124"},{"nodeType":"YulVariableDeclaration","src":"9299:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9325:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9312:12:124"},"nodeType":"YulFunctionCall","src":"9312:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9303:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9369:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9344:24:124"},"nodeType":"YulFunctionCall","src":"9344:31:124"},"nodeType":"YulExpressionStatement","src":"9344:31:124"},{"nodeType":"YulAssignment","src":"9384:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9394:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9384:6:124"}]},{"nodeType":"YulAssignment","src":"9408:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9446:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9431:3:124"},"nodeType":"YulFunctionCall","src":"9431:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9418:12:124"},"nodeType":"YulFunctionCall","src":"9418:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9408:6:124"}]},{"nodeType":"YulAssignment","src":"9459:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9486:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9497:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9482:3:124"},"nodeType":"YulFunctionCall","src":"9482:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9469:12:124"},"nodeType":"YulFunctionCall","src":"9469:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9459:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9510:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9542:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9553:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9538:3:124"},"nodeType":"YulFunctionCall","src":"9538:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9525:12:124"},"nodeType":"YulFunctionCall","src":"9525:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9514:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9591:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9566:24:124"},"nodeType":"YulFunctionCall","src":"9566:33:124"},"nodeType":"YulExpressionStatement","src":"9566:33:124"},{"nodeType":"YulAssignment","src":"9608:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9618:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9608:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9169:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9180:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9192:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9200:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9208:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9216:6:124","type":""}],"src":"9106:525:124"},{"body":{"nodeType":"YulBlock","src":"9720:298:124","statements":[{"body":{"nodeType":"YulBlock","src":"9766:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9775:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9778:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9768:6:124"},"nodeType":"YulFunctionCall","src":"9768:12:124"},"nodeType":"YulExpressionStatement","src":"9768:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9741:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9750:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9737:3:124"},"nodeType":"YulFunctionCall","src":"9737:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9762:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9733:3:124"},"nodeType":"YulFunctionCall","src":"9733:32:124"},"nodeType":"YulIf","src":"9730:52:124"},{"nodeType":"YulVariableDeclaration","src":"9791:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9817:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9804:12:124"},"nodeType":"YulFunctionCall","src":"9804:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9795:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9861:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9836:24:124"},"nodeType":"YulFunctionCall","src":"9836:31:124"},"nodeType":"YulExpressionStatement","src":"9836:31:124"},{"nodeType":"YulAssignment","src":"9876:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9886:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9876:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9900:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9932:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9943:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9928:3:124"},"nodeType":"YulFunctionCall","src":"9928:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9915:12:124"},"nodeType":"YulFunctionCall","src":"9915:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9904:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9978:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"9956:21:124"},"nodeType":"YulFunctionCall","src":"9956:30:124"},"nodeType":"YulExpressionStatement","src":"9956:30:124"},{"nodeType":"YulAssignment","src":"9995:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10005:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9995:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9678:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9689:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9701:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9709:6:124","type":""}],"src":"9636:382:124"},{"body":{"nodeType":"YulBlock","src":"10143:409:124","statements":[{"body":{"nodeType":"YulBlock","src":"10190:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10199:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10202:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10192:6:124"},"nodeType":"YulFunctionCall","src":"10192:12:124"},"nodeType":"YulExpressionStatement","src":"10192:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10164:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10173:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10160:3:124"},"nodeType":"YulFunctionCall","src":"10160:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10185:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10156:3:124"},"nodeType":"YulFunctionCall","src":"10156:33:124"},"nodeType":"YulIf","src":"10153:53:124"},{"nodeType":"YulVariableDeclaration","src":"10215:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10241:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10228:12:124"},"nodeType":"YulFunctionCall","src":"10228:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10219:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10285:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10260:24:124"},"nodeType":"YulFunctionCall","src":"10260:31:124"},"nodeType":"YulExpressionStatement","src":"10260:31:124"},{"nodeType":"YulAssignment","src":"10300:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10310:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10300:6:124"}]},{"nodeType":"YulAssignment","src":"10324:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10351:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10362:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10347:3:124"},"nodeType":"YulFunctionCall","src":"10347:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10334:12:124"},"nodeType":"YulFunctionCall","src":"10334:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10324:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"10375:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10407:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10418:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10403:3:124"},"nodeType":"YulFunctionCall","src":"10403:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10390:12:124"},"nodeType":"YulFunctionCall","src":"10390:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10379:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10456:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10431:24:124"},"nodeType":"YulFunctionCall","src":"10431:33:124"},"nodeType":"YulExpressionStatement","src":"10431:33:124"},{"nodeType":"YulAssignment","src":"10473:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10483:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10473:6:124"}]},{"nodeType":"YulAssignment","src":"10499:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10531:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10542:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10527:3:124"},"nodeType":"YulFunctionCall","src":"10527:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"10509:17:124"},"nodeType":"YulFunctionCall","src":"10509:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"10499:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10085:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10096:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10108:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10116:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10124:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10132:6:124","type":""}],"src":"10023:529:124"},{"body":{"nodeType":"YulBlock","src":"10661:212:124","statements":[{"body":{"nodeType":"YulBlock","src":"10707:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10716:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10719:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10709:6:124"},"nodeType":"YulFunctionCall","src":"10709:12:124"},"nodeType":"YulExpressionStatement","src":"10709:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10682:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10691:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10678:3:124"},"nodeType":"YulFunctionCall","src":"10678:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10703:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10674:3:124"},"nodeType":"YulFunctionCall","src":"10674:32:124"},"nodeType":"YulIf","src":"10671:52:124"},{"nodeType":"YulAssignment","src":"10732:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10755:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10742:12:124"},"nodeType":"YulFunctionCall","src":"10742:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10732:6:124"}]},{"nodeType":"YulAssignment","src":"10774:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10801:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10812:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10797:3:124"},"nodeType":"YulFunctionCall","src":"10797:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10784:12:124"},"nodeType":"YulFunctionCall","src":"10784:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10774:6:124"}]},{"nodeType":"YulAssignment","src":"10825:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10852:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10863:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10848:3:124"},"nodeType":"YulFunctionCall","src":"10848:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10835:12:124"},"nodeType":"YulFunctionCall","src":"10835:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10825:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10611:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10622:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10634:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10642:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10650:6:124","type":""}],"src":"10557:316:124"},{"body":{"nodeType":"YulBlock","src":"10982:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"11028:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11037:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11040:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11030:6:124"},"nodeType":"YulFunctionCall","src":"11030:12:124"},"nodeType":"YulExpressionStatement","src":"11030:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11003:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11012:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10999:3:124"},"nodeType":"YulFunctionCall","src":"10999:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11024:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10995:3:124"},"nodeType":"YulFunctionCall","src":"10995:32:124"},"nodeType":"YulIf","src":"10992:52:124"},{"nodeType":"YulVariableDeclaration","src":"11053:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11079:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11066:12:124"},"nodeType":"YulFunctionCall","src":"11066:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11057:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11123:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11098:24:124"},"nodeType":"YulFunctionCall","src":"11098:31:124"},"nodeType":"YulExpressionStatement","src":"11098:31:124"},{"nodeType":"YulAssignment","src":"11138:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11148:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11138:6:124"}]},{"nodeType":"YulAssignment","src":"11162:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11189:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11200:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11185:3:124"},"nodeType":"YulFunctionCall","src":"11185:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11172:12:124"},"nodeType":"YulFunctionCall","src":"11172:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"11162:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"11213:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11245:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11256:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11241:3:124"},"nodeType":"YulFunctionCall","src":"11241:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11228:12:124"},"nodeType":"YulFunctionCall","src":"11228:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"11217:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"11294:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11269:24:124"},"nodeType":"YulFunctionCall","src":"11269:33:124"},"nodeType":"YulExpressionStatement","src":"11269:33:124"},{"nodeType":"YulAssignment","src":"11311:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"11321:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"11311:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10932:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10943:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10955:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10963:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10971:6:124","type":""}],"src":"10878:456:124"},{"body":{"nodeType":"YulBlock","src":"11389:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11399:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11419:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11413:5:124"},"nodeType":"YulFunctionCall","src":"11413:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"11403:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11441:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"11446:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11434:6:124"},"nodeType":"YulFunctionCall","src":"11434:19:124"},"nodeType":"YulExpressionStatement","src":"11434:19:124"},{"nodeType":"YulVariableDeclaration","src":"11462:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11471:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"11466:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11533:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11547:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11557:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11551:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11589:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"11594:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11585:3:124"},"nodeType":"YulFunctionCall","src":"11585:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11598:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11581:3:124"},"nodeType":"YulFunctionCall","src":"11581:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11617:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"11624:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11613:3:124"},"nodeType":"YulFunctionCall","src":"11613:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11628:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11609:3:124"},"nodeType":"YulFunctionCall","src":"11609:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11603:5:124"},"nodeType":"YulFunctionCall","src":"11603:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11574:6:124"},"nodeType":"YulFunctionCall","src":"11574:59:124"},"nodeType":"YulExpressionStatement","src":"11574:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11492:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"11495:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11489:2:124"},"nodeType":"YulFunctionCall","src":"11489:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"11503:21:124","statements":[{"nodeType":"YulAssignment","src":"11505:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11514:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"11517:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11510:3:124"},"nodeType":"YulFunctionCall","src":"11510:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11505:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"11485:3:124","statements":[]},"src":"11481:162:124"},{"body":{"nodeType":"YulBlock","src":"11677:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11706:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"11711:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11702:3:124"},"nodeType":"YulFunctionCall","src":"11702:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"11720:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11698:3:124"},"nodeType":"YulFunctionCall","src":"11698:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"11727:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11691:6:124"},"nodeType":"YulFunctionCall","src":"11691:38:124"},"nodeType":"YulExpressionStatement","src":"11691:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11658:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"11661:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11655:2:124"},"nodeType":"YulFunctionCall","src":"11655:13:124"},"nodeType":"YulIf","src":"11652:87:124"},{"nodeType":"YulAssignment","src":"11748:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11763:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11776:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11784:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11772:3:124"},"nodeType":"YulFunctionCall","src":"11772:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"11789:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11768:3:124"},"nodeType":"YulFunctionCall","src":"11768:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11759:3:124"},"nodeType":"YulFunctionCall","src":"11759:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"11859:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11755:3:124"},"nodeType":"YulFunctionCall","src":"11755:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11748:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11366:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"11373:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"11381:3:124","type":""}],"src":"11339:531:124"},{"body":{"nodeType":"YulBlock","src":"12040:530:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12057:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12068:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12050:6:124"},"nodeType":"YulFunctionCall","src":"12050:21:124"},"nodeType":"YulExpressionStatement","src":"12050:21:124"},{"nodeType":"YulVariableDeclaration","src":"12080:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"12090:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12084:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12116:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12127:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12112:3:124"},"nodeType":"YulFunctionCall","src":"12112:18:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12142:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12136:5:124"},"nodeType":"YulFunctionCall","src":"12136:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12151:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12132:3:124"},"nodeType":"YulFunctionCall","src":"12132:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12105:6:124"},"nodeType":"YulFunctionCall","src":"12105:50:124"},"nodeType":"YulExpressionStatement","src":"12105:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12175:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12186:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12171:3:124"},"nodeType":"YulFunctionCall","src":"12171:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12205:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12213:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12201:3:124"},"nodeType":"YulFunctionCall","src":"12201:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12195:5:124"},"nodeType":"YulFunctionCall","src":"12195:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12219:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12191:3:124"},"nodeType":"YulFunctionCall","src":"12191:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12164:6:124"},"nodeType":"YulFunctionCall","src":"12164:59:124"},"nodeType":"YulExpressionStatement","src":"12164:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12243:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12254:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12239:3:124"},"nodeType":"YulFunctionCall","src":"12239:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12273:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12281:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12269:3:124"},"nodeType":"YulFunctionCall","src":"12269:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12263:5:124"},"nodeType":"YulFunctionCall","src":"12263:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"12287:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12259:3:124"},"nodeType":"YulFunctionCall","src":"12259:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12232:6:124"},"nodeType":"YulFunctionCall","src":"12232:59:124"},"nodeType":"YulExpressionStatement","src":"12232:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12311:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12322:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12307:3:124"},"nodeType":"YulFunctionCall","src":"12307:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12342:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12350:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12338:3:124"},"nodeType":"YulFunctionCall","src":"12338:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12332:5:124"},"nodeType":"YulFunctionCall","src":"12332:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"12356:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12328:3:124"},"nodeType":"YulFunctionCall","src":"12328:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12300:6:124"},"nodeType":"YulFunctionCall","src":"12300:100:124"},"nodeType":"YulExpressionStatement","src":"12300:100:124"},{"nodeType":"YulVariableDeclaration","src":"12409:43:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12439:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12447:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12435:3:124"},"nodeType":"YulFunctionCall","src":"12435:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12429:5:124"},"nodeType":"YulFunctionCall","src":"12429:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"12413:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12472:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12483:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12468:3:124"},"nodeType":"YulFunctionCall","src":"12468:20:124"},{"kind":"number","nodeType":"YulLiteral","src":"12490:4:124","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12461:6:124"},"nodeType":"YulFunctionCall","src":"12461:34:124"},"nodeType":"YulExpressionStatement","src":"12461:34:124"},{"nodeType":"YulAssignment","src":"12504:60:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"12530:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12548:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12559:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12544:3:124"},"nodeType":"YulFunctionCall","src":"12544:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12512:17:124"},"nodeType":"YulFunctionCall","src":"12512:52:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12504:4:124"}]}]},"name":"abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12009:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12020:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12031:4:124","type":""}],"src":"11875:695:124"},{"body":{"nodeType":"YulBlock","src":"12713:675:124","statements":[{"body":{"nodeType":"YulBlock","src":"12760:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12769:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12772:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12762:6:124"},"nodeType":"YulFunctionCall","src":"12762:12:124"},"nodeType":"YulExpressionStatement","src":"12762:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12734:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12743:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12730:3:124"},"nodeType":"YulFunctionCall","src":"12730:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"12755:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12726:3:124"},"nodeType":"YulFunctionCall","src":"12726:33:124"},"nodeType":"YulIf","src":"12723:53:124"},{"nodeType":"YulVariableDeclaration","src":"12785:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12811:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12798:12:124"},"nodeType":"YulFunctionCall","src":"12798:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12789:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12855:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12830:24:124"},"nodeType":"YulFunctionCall","src":"12830:31:124"},"nodeType":"YulExpressionStatement","src":"12830:31:124"},{"nodeType":"YulAssignment","src":"12870:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"12880:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12870:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12894:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12926:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12937:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12922:3:124"},"nodeType":"YulFunctionCall","src":"12922:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12909:12:124"},"nodeType":"YulFunctionCall","src":"12909:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12898:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12975:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12950:24:124"},"nodeType":"YulFunctionCall","src":"12950:33:124"},"nodeType":"YulExpressionStatement","src":"12950:33:124"},{"nodeType":"YulAssignment","src":"12992:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"13002:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"12992:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13018:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13050:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13061:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13046:3:124"},"nodeType":"YulFunctionCall","src":"13046:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13033:12:124"},"nodeType":"YulFunctionCall","src":"13033:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"13022:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"13099:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13074:24:124"},"nodeType":"YulFunctionCall","src":"13074:33:124"},"nodeType":"YulExpressionStatement","src":"13074:33:124"},{"nodeType":"YulAssignment","src":"13116:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"13126:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"13116:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13142:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13185:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13170:3:124"},"nodeType":"YulFunctionCall","src":"13170:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13157:12:124"},"nodeType":"YulFunctionCall","src":"13157:32:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"13146:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"13223:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13198:24:124"},"nodeType":"YulFunctionCall","src":"13198:33:124"},"nodeType":"YulExpressionStatement","src":"13198:33:124"},{"nodeType":"YulAssignment","src":"13240:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"13250:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"13240:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13266:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13298:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13309:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13294:3:124"},"nodeType":"YulFunctionCall","src":"13294:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13281:12:124"},"nodeType":"YulFunctionCall","src":"13281:33:124"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"13270:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"13348:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13323:24:124"},"nodeType":"YulFunctionCall","src":"13323:33:124"},"nodeType":"YulExpressionStatement","src":"13323:33:124"},{"nodeType":"YulAssignment","src":"13365:17:124","value":{"name":"value_4","nodeType":"YulIdentifier","src":"13375:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"13365:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12647:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12658:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12670:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12678:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12686:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12694:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12702:6:124","type":""}],"src":"12575:813:124"},{"body":{"nodeType":"YulBlock","src":"13480:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"13526:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13535:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13538:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13528:6:124"},"nodeType":"YulFunctionCall","src":"13528:12:124"},"nodeType":"YulExpressionStatement","src":"13528:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13501:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13510:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13497:3:124"},"nodeType":"YulFunctionCall","src":"13497:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13522:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13493:3:124"},"nodeType":"YulFunctionCall","src":"13493:32:124"},"nodeType":"YulIf","src":"13490:52:124"},{"nodeType":"YulVariableDeclaration","src":"13551:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13577:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13564:12:124"},"nodeType":"YulFunctionCall","src":"13564:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13555:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13621:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13596:24:124"},"nodeType":"YulFunctionCall","src":"13596:31:124"},"nodeType":"YulExpressionStatement","src":"13596:31:124"},{"nodeType":"YulAssignment","src":"13636:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13646:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13636:6:124"}]},{"nodeType":"YulAssignment","src":"13660:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13687:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13698:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13683:3:124"},"nodeType":"YulFunctionCall","src":"13683:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13670:12:124"},"nodeType":"YulFunctionCall","src":"13670:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13660:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13438:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13449:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13461:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13469:6:124","type":""}],"src":"13393:315:124"},{"body":{"nodeType":"YulBlock","src":"13797:283:124","statements":[{"body":{"nodeType":"YulBlock","src":"13846:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13855:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13858:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13848:6:124"},"nodeType":"YulFunctionCall","src":"13848:12:124"},"nodeType":"YulExpressionStatement","src":"13848:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13825:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13833:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13821:3:124"},"nodeType":"YulFunctionCall","src":"13821:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"13840:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13817:3:124"},"nodeType":"YulFunctionCall","src":"13817:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13810:6:124"},"nodeType":"YulFunctionCall","src":"13810:35:124"},"nodeType":"YulIf","src":"13807:55:124"},{"nodeType":"YulAssignment","src":"13871:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13894:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13881:12:124"},"nodeType":"YulFunctionCall","src":"13881:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"13871:6:124"}]},{"body":{"nodeType":"YulBlock","src":"13944:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13953:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13956:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13946:6:124"},"nodeType":"YulFunctionCall","src":"13946:12:124"},"nodeType":"YulExpressionStatement","src":"13946:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13916:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13924:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13913:2:124"},"nodeType":"YulFunctionCall","src":"13913:30:124"},"nodeType":"YulIf","src":"13910:50:124"},{"nodeType":"YulAssignment","src":"13969:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13985:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13993:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13981:3:124"},"nodeType":"YulFunctionCall","src":"13981:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"13969:8:124"}]},{"body":{"nodeType":"YulBlock","src":"14058:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14067:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14070:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14060:6:124"},"nodeType":"YulFunctionCall","src":"14060:12:124"},"nodeType":"YulExpressionStatement","src":"14060:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"14021:6:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14033:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"14036:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14029:3:124"},"nodeType":"YulFunctionCall","src":"14029:14:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14017:3:124"},"nodeType":"YulFunctionCall","src":"14017:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"14046:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14013:3:124"},"nodeType":"YulFunctionCall","src":"14013:38:124"},{"name":"end","nodeType":"YulIdentifier","src":"14053:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14010:2:124"},"nodeType":"YulFunctionCall","src":"14010:47:124"},"nodeType":"YulIf","src":"14007:67:124"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13760:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"13768:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"13776:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"13786:6:124","type":""}],"src":"13713:367:124"},{"body":{"nodeType":"YulBlock","src":"14190:332:124","statements":[{"body":{"nodeType":"YulBlock","src":"14236:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14245:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14248:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14238:6:124"},"nodeType":"YulFunctionCall","src":"14238:12:124"},"nodeType":"YulExpressionStatement","src":"14238:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14211:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14220:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14207:3:124"},"nodeType":"YulFunctionCall","src":"14207:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14232:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14203:3:124"},"nodeType":"YulFunctionCall","src":"14203:32:124"},"nodeType":"YulIf","src":"14200:52:124"},{"nodeType":"YulVariableDeclaration","src":"14261:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14288:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14275:12:124"},"nodeType":"YulFunctionCall","src":"14275:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"14265:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"14341:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14350:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14353:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14343:6:124"},"nodeType":"YulFunctionCall","src":"14343:12:124"},"nodeType":"YulExpressionStatement","src":"14343:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"14313:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14321:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14310:2:124"},"nodeType":"YulFunctionCall","src":"14310:30:124"},"nodeType":"YulIf","src":"14307:50:124"},{"nodeType":"YulVariableDeclaration","src":"14366:96:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14434:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"14445:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14430:3:124"},"nodeType":"YulFunctionCall","src":"14430:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14454:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"14392:37:124"},"nodeType":"YulFunctionCall","src":"14392:70:124"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"14370:8:124","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"14380:8:124","type":""}]},{"nodeType":"YulAssignment","src":"14471:18:124","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"14481:8:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14471:6:124"}]},{"nodeType":"YulAssignment","src":"14498:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"14508:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14498:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14148:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14159:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14171:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14179:6:124","type":""}],"src":"14085:437:124"},{"body":{"nodeType":"YulBlock","src":"14664:461:124","statements":[{"body":{"nodeType":"YulBlock","src":"14711:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14720:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14723:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14713:6:124"},"nodeType":"YulFunctionCall","src":"14713:12:124"},"nodeType":"YulExpressionStatement","src":"14713:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14685:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14694:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14681:3:124"},"nodeType":"YulFunctionCall","src":"14681:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14706:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14677:3:124"},"nodeType":"YulFunctionCall","src":"14677:33:124"},"nodeType":"YulIf","src":"14674:53:124"},{"nodeType":"YulVariableDeclaration","src":"14736:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14762:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14749:12:124"},"nodeType":"YulFunctionCall","src":"14749:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14740:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14806:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14781:24:124"},"nodeType":"YulFunctionCall","src":"14781:31:124"},"nodeType":"YulExpressionStatement","src":"14781:31:124"},{"nodeType":"YulAssignment","src":"14821:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14831:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14821:6:124"}]},{"nodeType":"YulAssignment","src":"14845:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14883:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14868:3:124"},"nodeType":"YulFunctionCall","src":"14868:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14855:12:124"},"nodeType":"YulFunctionCall","src":"14855:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14845:6:124"}]},{"nodeType":"YulAssignment","src":"14896:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14923:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14934:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14919:3:124"},"nodeType":"YulFunctionCall","src":"14919:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14906:12:124"},"nodeType":"YulFunctionCall","src":"14906:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"14896:6:124"}]},{"nodeType":"YulAssignment","src":"14947:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14979:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14990:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14975:3:124"},"nodeType":"YulFunctionCall","src":"14975:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"14957:17:124"},"nodeType":"YulFunctionCall","src":"14957:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"14947:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"15003:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15035:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15046:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15031:3:124"},"nodeType":"YulFunctionCall","src":"15031:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15018:12:124"},"nodeType":"YulFunctionCall","src":"15018:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"15007:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"15085:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"15060:24:124"},"nodeType":"YulFunctionCall","src":"15060:33:124"},"nodeType":"YulExpressionStatement","src":"15060:33:124"},{"nodeType":"YulAssignment","src":"15102:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"15112:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"15102:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14598:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14609:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14621:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14629:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14637:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14645:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14653:6:124","type":""}],"src":"14527:598:124"},{"body":{"nodeType":"YulBlock","src":"15426:1276:124","statements":[{"body":{"nodeType":"YulBlock","src":"15473:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15482:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15485:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15475:6:124"},"nodeType":"YulFunctionCall","src":"15475:12:124"},"nodeType":"YulExpressionStatement","src":"15475:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15447:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"15456:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15443:3:124"},"nodeType":"YulFunctionCall","src":"15443:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"15468:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15439:3:124"},"nodeType":"YulFunctionCall","src":"15439:33:124"},"nodeType":"YulIf","src":"15436:53:124"},{"nodeType":"YulAssignment","src":"15498:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15527:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15508:18:124"},"nodeType":"YulFunctionCall","src":"15508:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15498:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"15546:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15556:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15550:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15627:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15636:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15639:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15629:6:124"},"nodeType":"YulFunctionCall","src":"15629:12:124"},"nodeType":"YulExpressionStatement","src":"15629:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15606:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15617:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15602:3:124"},"nodeType":"YulFunctionCall","src":"15602:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15589:12:124"},"nodeType":"YulFunctionCall","src":"15589:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15623:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15586:2:124"},"nodeType":"YulFunctionCall","src":"15586:40:124"},"nodeType":"YulIf","src":"15583:60:124"},{"nodeType":"YulVariableDeclaration","src":"15652:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15720:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15748:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15759:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15744:3:124"},"nodeType":"YulFunctionCall","src":"15744:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15731:12:124"},"nodeType":"YulFunctionCall","src":"15731:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15716:3:124"},"nodeType":"YulFunctionCall","src":"15716:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15766:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15678:37:124"},"nodeType":"YulFunctionCall","src":"15678:96:124"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"15656:8:124","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"15666:8:124","type":""}]},{"nodeType":"YulAssignment","src":"15783:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"15793:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"15783:6:124"}]},{"nodeType":"YulAssignment","src":"15810:18:124","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"15820:8:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"15810:6:124"}]},{"body":{"nodeType":"YulBlock","src":"15881:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15890:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15893:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15883:6:124"},"nodeType":"YulFunctionCall","src":"15883:12:124"},"nodeType":"YulExpressionStatement","src":"15883:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15860:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15871:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15856:3:124"},"nodeType":"YulFunctionCall","src":"15856:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15843:12:124"},"nodeType":"YulFunctionCall","src":"15843:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15877:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15840:2:124"},"nodeType":"YulFunctionCall","src":"15840:40:124"},"nodeType":"YulIf","src":"15837:60:124"},{"nodeType":"YulVariableDeclaration","src":"15906:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15974:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16002:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16013:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15998:3:124"},"nodeType":"YulFunctionCall","src":"15998:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15985:12:124"},"nodeType":"YulFunctionCall","src":"15985:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15970:3:124"},"nodeType":"YulFunctionCall","src":"15970:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16020:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15932:37:124"},"nodeType":"YulFunctionCall","src":"15932:96:124"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"15910:8:124","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"15920:8:124","type":""}]},{"nodeType":"YulAssignment","src":"16037:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"16047:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"16037:6:124"}]},{"nodeType":"YulAssignment","src":"16064:18:124","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"16074:8:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"16064:6:124"}]},{"body":{"nodeType":"YulBlock","src":"16135:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16144:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16147:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16137:6:124"},"nodeType":"YulFunctionCall","src":"16137:12:124"},"nodeType":"YulExpressionStatement","src":"16137:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16114:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16125:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16110:3:124"},"nodeType":"YulFunctionCall","src":"16110:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16097:12:124"},"nodeType":"YulFunctionCall","src":"16097:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16131:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16094:2:124"},"nodeType":"YulFunctionCall","src":"16094:40:124"},"nodeType":"YulIf","src":"16091:60:124"},{"nodeType":"YulVariableDeclaration","src":"16160:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16228:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16256:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16267:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16252:3:124"},"nodeType":"YulFunctionCall","src":"16252:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16239:12:124"},"nodeType":"YulFunctionCall","src":"16239:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16224:3:124"},"nodeType":"YulFunctionCall","src":"16224:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16274:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"16186:37:124"},"nodeType":"YulFunctionCall","src":"16186:96:124"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"16164:8:124","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"16174:8:124","type":""}]},{"nodeType":"YulAssignment","src":"16291:18:124","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"16301:8:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"16291:6:124"}]},{"nodeType":"YulAssignment","src":"16318:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"16328:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"16318:6:124"}]},{"nodeType":"YulAssignment","src":"16345:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16378:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16389:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16374:3:124"},"nodeType":"YulFunctionCall","src":"16374:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"16355:18:124"},"nodeType":"YulFunctionCall","src":"16355:39:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"16345:6:124"}]},{"body":{"nodeType":"YulBlock","src":"16448:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16457:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16460:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16450:6:124"},"nodeType":"YulFunctionCall","src":"16450:12:124"},"nodeType":"YulExpressionStatement","src":"16450:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16426:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16437:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16422:3:124"},"nodeType":"YulFunctionCall","src":"16422:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16409:12:124"},"nodeType":"YulFunctionCall","src":"16409:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16444:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16406:2:124"},"nodeType":"YulFunctionCall","src":"16406:41:124"},"nodeType":"YulIf","src":"16403:61:124"},{"nodeType":"YulVariableDeclaration","src":"16473:111:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16529:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16557:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16568:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16553:3:124"},"nodeType":"YulFunctionCall","src":"16553:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16540:12:124"},"nodeType":"YulFunctionCall","src":"16540:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16525:3:124"},"nodeType":"YulFunctionCall","src":"16525:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16576:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"16499:25:124"},"nodeType":"YulFunctionCall","src":"16499:85:124"},"variables":[{"name":"value8_1","nodeType":"YulTypedName","src":"16477:8:124","type":""},{"name":"value9_1","nodeType":"YulTypedName","src":"16487:8:124","type":""}]},{"nodeType":"YulAssignment","src":"16593:18:124","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"16603:8:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"16593:6:124"}]},{"nodeType":"YulAssignment","src":"16620:18:124","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"16630:8:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"16620:6:124"}]},{"nodeType":"YulAssignment","src":"16647:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16680:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16691:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16676:3:124"},"nodeType":"YulFunctionCall","src":"16676:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"16658:17:124"},"nodeType":"YulFunctionCall","src":"16658:38:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"16647:7:124"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15311:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15322:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15334:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15342:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15350:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15358:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15366:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"15374:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"15382:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"15390:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"15398:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"15406:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"15414:7:124","type":""}],"src":"15130:1572:124"},{"body":{"nodeType":"YulBlock","src":"16756:139:124","statements":[{"nodeType":"YulAssignment","src":"16766:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"16788:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16775:12:124"},"nodeType":"YulFunctionCall","src":"16775:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16766:5:124"}]},{"body":{"nodeType":"YulBlock","src":"16873:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16882:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16885:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16875:6:124"},"nodeType":"YulFunctionCall","src":"16875:12:124"},"nodeType":"YulExpressionStatement","src":"16875:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16817:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16828:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16835:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16824:3:124"},"nodeType":"YulFunctionCall","src":"16824:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16814:2:124"},"nodeType":"YulFunctionCall","src":"16814:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16807:6:124"},"nodeType":"YulFunctionCall","src":"16807:65:124"},"nodeType":"YulIf","src":"16804:85:124"}]},"name":"abi_decode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"16735:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16746:5:124","type":""}],"src":"16707:188:124"},{"body":{"nodeType":"YulBlock","src":"16987:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"17033:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17042:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17045:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17035:6:124"},"nodeType":"YulFunctionCall","src":"17035:12:124"},"nodeType":"YulExpressionStatement","src":"17035:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17008:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"17017:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17004:3:124"},"nodeType":"YulFunctionCall","src":"17004:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"17029:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17000:3:124"},"nodeType":"YulFunctionCall","src":"17000:32:124"},"nodeType":"YulIf","src":"16997:52:124"},{"nodeType":"YulAssignment","src":"17058:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17087:9:124"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"17068:18:124"},"nodeType":"YulFunctionCall","src":"17068:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17058:6:124"}]},{"nodeType":"YulAssignment","src":"17106:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17139:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17150:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17135:3:124"},"nodeType":"YulFunctionCall","src":"17135:18:124"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"17116:18:124"},"nodeType":"YulFunctionCall","src":"17116:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"17106:6:124"}]}]},"name":"abi_decode_tuple_t_uint128t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16945:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16956:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16968:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16976:6:124","type":""}],"src":"16900:260:124"},{"body":{"nodeType":"YulBlock","src":"17406:294:124","statements":[{"nodeType":"YulAssignment","src":"17416:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17428:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17439:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17424:3:124"},"nodeType":"YulFunctionCall","src":"17424:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17416:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17459:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"17470:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17452:6:124"},"nodeType":"YulFunctionCall","src":"17452:25:124"},"nodeType":"YulExpressionStatement","src":"17452:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17497:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17508:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17493:3:124"},"nodeType":"YulFunctionCall","src":"17493:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"17513:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17486:6:124"},"nodeType":"YulFunctionCall","src":"17486:34:124"},"nodeType":"YulExpressionStatement","src":"17486:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17540:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17551:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17536:3:124"},"nodeType":"YulFunctionCall","src":"17536:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"17556:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17529:6:124"},"nodeType":"YulFunctionCall","src":"17529:34:124"},"nodeType":"YulExpressionStatement","src":"17529:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17583:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17594:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17579:3:124"},"nodeType":"YulFunctionCall","src":"17579:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"17599:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17572:6:124"},"nodeType":"YulFunctionCall","src":"17572:34:124"},"nodeType":"YulExpressionStatement","src":"17572:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17626:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17637:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17622:3:124"},"nodeType":"YulFunctionCall","src":"17622:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"17643:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17615:6:124"},"nodeType":"YulFunctionCall","src":"17615:35:124"},"nodeType":"YulExpressionStatement","src":"17615:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17670:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17681:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17666:3:124"},"nodeType":"YulFunctionCall","src":"17666:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"17687:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17659:6:124"},"nodeType":"YulFunctionCall","src":"17659:35:124"},"nodeType":"YulExpressionStatement","src":"17659:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17335:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"17346:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"17354:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"17362:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17370:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17378:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17386:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17397:4:124","type":""}],"src":"17165:535:124"},{"body":{"nodeType":"YulBlock","src":"17890:83:124","statements":[{"nodeType":"YulAssignment","src":"17900:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17912:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17923:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17908:3:124"},"nodeType":"YulFunctionCall","src":"17908:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17900:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17942:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17959:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17953:5:124"},"nodeType":"YulFunctionCall","src":"17953:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17935:6:124"},"nodeType":"YulFunctionCall","src":"17935:32:124"},"nodeType":"YulExpressionStatement","src":"17935:32:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17859:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17870:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17881:4:124","type":""}],"src":"17705:268:124"},{"body":{"nodeType":"YulBlock","src":"18079:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"18125:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18134:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18137:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18127:6:124"},"nodeType":"YulFunctionCall","src":"18127:12:124"},"nodeType":"YulExpressionStatement","src":"18127:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18100:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"18109:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18096:3:124"},"nodeType":"YulFunctionCall","src":"18096:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"18121:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18092:3:124"},"nodeType":"YulFunctionCall","src":"18092:32:124"},"nodeType":"YulIf","src":"18089:52:124"},{"nodeType":"YulVariableDeclaration","src":"18150:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18176:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18163:12:124"},"nodeType":"YulFunctionCall","src":"18163:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"18154:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18220:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18195:24:124"},"nodeType":"YulFunctionCall","src":"18195:31:124"},"nodeType":"YulExpressionStatement","src":"18195:31:124"},{"nodeType":"YulAssignment","src":"18235:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"18245:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18235:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18045:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18056:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18068:6:124","type":""}],"src":"17978:278:124"},{"body":{"nodeType":"YulBlock","src":"18365:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"18411:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18420:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18423:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18413:6:124"},"nodeType":"YulFunctionCall","src":"18413:12:124"},"nodeType":"YulExpressionStatement","src":"18413:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18386:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"18395:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18382:3:124"},"nodeType":"YulFunctionCall","src":"18382:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"18407:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18378:3:124"},"nodeType":"YulFunctionCall","src":"18378:32:124"},"nodeType":"YulIf","src":"18375:52:124"},{"nodeType":"YulVariableDeclaration","src":"18436:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18462:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18449:12:124"},"nodeType":"YulFunctionCall","src":"18449:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"18440:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18506:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18481:24:124"},"nodeType":"YulFunctionCall","src":"18481:31:124"},"nodeType":"YulExpressionStatement","src":"18481:31:124"},{"nodeType":"YulAssignment","src":"18521:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"18531:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18521:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"18545:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18577:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18588:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18573:3:124"},"nodeType":"YulFunctionCall","src":"18573:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18560:12:124"},"nodeType":"YulFunctionCall","src":"18560:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"18549:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"18626:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18601:24:124"},"nodeType":"YulFunctionCall","src":"18601:33:124"},"nodeType":"YulExpressionStatement","src":"18601:33:124"},{"nodeType":"YulAssignment","src":"18643:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"18653:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"18643:6:124"}]},{"nodeType":"YulAssignment","src":"18669:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18696:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18707:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18692:3:124"},"nodeType":"YulFunctionCall","src":"18692:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18679:12:124"},"nodeType":"YulFunctionCall","src":"18679:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"18669:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18315:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18326:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18338:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18346:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18354:6:124","type":""}],"src":"18261:456:124"},{"body":{"nodeType":"YulBlock","src":"18873:530:124","statements":[{"nodeType":"YulVariableDeclaration","src":"18883:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18893:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18887:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18904:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18922:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18933:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18918:3:124"},"nodeType":"YulFunctionCall","src":"18918:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"18908:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18952:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18963:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18945:6:124"},"nodeType":"YulFunctionCall","src":"18945:21:124"},"nodeType":"YulExpressionStatement","src":"18945:21:124"},{"nodeType":"YulVariableDeclaration","src":"18975:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"18986:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"18979:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19001:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19021:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19015:5:124"},"nodeType":"YulFunctionCall","src":"19015:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"19005:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"19044:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"19052:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19037:6:124"},"nodeType":"YulFunctionCall","src":"19037:22:124"},"nodeType":"YulExpressionStatement","src":"19037:22:124"},{"nodeType":"YulAssignment","src":"19068:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19079:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19090:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19075:3:124"},"nodeType":"YulFunctionCall","src":"19075:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"19068:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"19102:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19120:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19128:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19116:3:124"},"nodeType":"YulFunctionCall","src":"19116:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"19106:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19140:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"19149:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"19144:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"19208:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"19229:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"19244:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19238:5:124"},"nodeType":"YulFunctionCall","src":"19238:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"19253:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19234:3:124"},"nodeType":"YulFunctionCall","src":"19234:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19222:6:124"},"nodeType":"YulFunctionCall","src":"19222:75:124"},"nodeType":"YulExpressionStatement","src":"19222:75:124"},{"nodeType":"YulAssignment","src":"19310:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"19321:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19326:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19317:3:124"},"nodeType":"YulFunctionCall","src":"19317:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"19310:3:124"}]},{"nodeType":"YulAssignment","src":"19342:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"19356:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19364:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19352:3:124"},"nodeType":"YulFunctionCall","src":"19352:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"19342:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19170:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"19173:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19167:2:124"},"nodeType":"YulFunctionCall","src":"19167:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"19181:18:124","statements":[{"nodeType":"YulAssignment","src":"19183:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19192:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"19195:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19188:3:124"},"nodeType":"YulFunctionCall","src":"19188:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"19183:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"19163:3:124","statements":[]},"src":"19159:218:124"},{"nodeType":"YulAssignment","src":"19386:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"19394:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19386:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18842:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18853:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18864:4:124","type":""}],"src":"18722:681:124"},{"body":{"nodeType":"YulBlock","src":"19440:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19457:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19460:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19450:6:124"},"nodeType":"YulFunctionCall","src":"19450:88:124"},"nodeType":"YulExpressionStatement","src":"19450:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19554:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19557:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19547:6:124"},"nodeType":"YulFunctionCall","src":"19547:15:124"},"nodeType":"YulExpressionStatement","src":"19547:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19578:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19581:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19571:6:124"},"nodeType":"YulFunctionCall","src":"19571:15:124"},"nodeType":"YulExpressionStatement","src":"19571:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"19408:184:124"},{"body":{"nodeType":"YulBlock","src":"19643:207:124","statements":[{"nodeType":"YulAssignment","src":"19653:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19669:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19663:5:124"},"nodeType":"YulFunctionCall","src":"19663:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19653:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19681:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19703:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"19711:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19699:3:124"},"nodeType":"YulFunctionCall","src":"19699:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19685:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"19791:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19793:16:124"},"nodeType":"YulFunctionCall","src":"19793:18:124"},"nodeType":"YulExpressionStatement","src":"19793:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19734:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"19746:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19731:2:124"},"nodeType":"YulFunctionCall","src":"19731:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19770:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19782:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19767:2:124"},"nodeType":"YulFunctionCall","src":"19767:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19728:2:124"},"nodeType":"YulFunctionCall","src":"19728:62:124"},"nodeType":"YulIf","src":"19725:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19829:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19833:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19822:6:124"},"nodeType":"YulFunctionCall","src":"19822:22:124"},"nodeType":"YulExpressionStatement","src":"19822:22:124"}]},"name":"allocate_memory_5657","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19632:6:124","type":""}],"src":"19597:253:124"},{"body":{"nodeType":"YulBlock","src":"19900:289:124","statements":[{"nodeType":"YulAssignment","src":"19910:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19926:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19920:5:124"},"nodeType":"YulFunctionCall","src":"19920:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19910:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19938:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19960:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"19976:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"19982:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19972:3:124"},"nodeType":"YulFunctionCall","src":"19972:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"19987:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19968:3:124"},"nodeType":"YulFunctionCall","src":"19968:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19956:3:124"},"nodeType":"YulFunctionCall","src":"19956:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19942:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20130:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"20132:16:124"},"nodeType":"YulFunctionCall","src":"20132:18:124"},"nodeType":"YulExpressionStatement","src":"20132:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"20073:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"20085:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20070:2:124"},"nodeType":"YulFunctionCall","src":"20070:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"20109:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"20121:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20106:2:124"},"nodeType":"YulFunctionCall","src":"20106:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"20067:2:124"},"nodeType":"YulFunctionCall","src":"20067:62:124"},"nodeType":"YulIf","src":"20064:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20168:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"20172:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20161:6:124"},"nodeType":"YulFunctionCall","src":"20161:22:124"},"nodeType":"YulExpressionStatement","src":"20161:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"19880:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19889:6:124","type":""}],"src":"19855:334:124"},{"body":{"nodeType":"YulBlock","src":"20311:1371:124","statements":[{"body":{"nodeType":"YulBlock","src":"20357:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20366:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20369:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20359:6:124"},"nodeType":"YulFunctionCall","src":"20359:12:124"},"nodeType":"YulExpressionStatement","src":"20359:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20332:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"20341:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20328:3:124"},"nodeType":"YulFunctionCall","src":"20328:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"20353:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20324:3:124"},"nodeType":"YulFunctionCall","src":"20324:32:124"},"nodeType":"YulIf","src":"20321:52:124"},{"nodeType":"YulAssignment","src":"20382:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20409:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"20392:16:124"},"nodeType":"YulFunctionCall","src":"20392:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"20382:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"20428:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"20438:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20432:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20449:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20480:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20491:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20476:3:124"},"nodeType":"YulFunctionCall","src":"20476:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20463:12:124"},"nodeType":"YulFunctionCall","src":"20463:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"20453:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20504:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"20514:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"20508:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20559:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20568:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20571:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20561:6:124"},"nodeType":"YulFunctionCall","src":"20561:12:124"},"nodeType":"YulExpressionStatement","src":"20561:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20547:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20555:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20544:2:124"},"nodeType":"YulFunctionCall","src":"20544:14:124"},"nodeType":"YulIf","src":"20541:34:124"},{"nodeType":"YulVariableDeclaration","src":"20584:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20598:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"20609:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20594:3:124"},"nodeType":"YulFunctionCall","src":"20594:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"20588:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20658:6:124"},"nodeType":"YulFunctionCall","src":"20658:12:124"},"nodeType":"YulExpressionStatement","src":"20658:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20636:7:124"},{"name":"_3","nodeType":"YulIdentifier","src":"20645:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20632:3:124"},"nodeType":"YulFunctionCall","src":"20632:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"20650:4:124","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20628:3:124"},"nodeType":"YulFunctionCall","src":"20628:27:124"},"nodeType":"YulIf","src":"20625:47:124"},{"nodeType":"YulVariableDeclaration","src":"20681:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_5657","nodeType":"YulIdentifier","src":"20694:20:124"},"nodeType":"YulFunctionCall","src":"20694:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"20685:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20732:5:124"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20757:2:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20739:17:124"},"nodeType":"YulFunctionCall","src":"20739:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20725:6:124"},"nodeType":"YulFunctionCall","src":"20725:36:124"},"nodeType":"YulExpressionStatement","src":"20725:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20781:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20788:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20777:3:124"},"nodeType":"YulFunctionCall","src":"20777:14:124"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20815:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20819:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20811:3:124"},"nodeType":"YulFunctionCall","src":"20811:11:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20793:17:124"},"nodeType":"YulFunctionCall","src":"20793:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20770:6:124"},"nodeType":"YulFunctionCall","src":"20770:54:124"},"nodeType":"YulExpressionStatement","src":"20770:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20844:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"20851:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20840:3:124"},"nodeType":"YulFunctionCall","src":"20840:14:124"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20878:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20882:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20874:3:124"},"nodeType":"YulFunctionCall","src":"20874:11:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20856:17:124"},"nodeType":"YulFunctionCall","src":"20856:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20833:6:124"},"nodeType":"YulFunctionCall","src":"20833:54:124"},"nodeType":"YulExpressionStatement","src":"20833:54:124"},{"nodeType":"YulVariableDeclaration","src":"20896:40:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20928:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20932:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20924:3:124"},"nodeType":"YulFunctionCall","src":"20924:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20911:12:124"},"nodeType":"YulFunctionCall","src":"20911:25:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"20900:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20970:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20945:24:124"},"nodeType":"YulFunctionCall","src":"20945:33:124"},"nodeType":"YulExpressionStatement","src":"20945:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20998:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"21005:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20994:3:124"},"nodeType":"YulFunctionCall","src":"20994:14:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"21010:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20987:6:124"},"nodeType":"YulFunctionCall","src":"20987:31:124"},"nodeType":"YulExpressionStatement","src":"20987:31:124"},{"nodeType":"YulVariableDeclaration","src":"21027:42:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21060:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"21064:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21056:3:124"},"nodeType":"YulFunctionCall","src":"21056:12:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21043:12:124"},"nodeType":"YulFunctionCall","src":"21043:26:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"21031:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21098:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21107:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21110:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21100:6:124"},"nodeType":"YulFunctionCall","src":"21100:12:124"},"nodeType":"YulExpressionStatement","src":"21100:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"21084:8:124"},{"name":"_2","nodeType":"YulIdentifier","src":"21094:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21081:2:124"},"nodeType":"YulFunctionCall","src":"21081:16:124"},"nodeType":"YulIf","src":"21078:36:124"},{"nodeType":"YulVariableDeclaration","src":"21123:27:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21137:2:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"21141:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21133:3:124"},"nodeType":"YulFunctionCall","src":"21133:17:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"21127:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21198:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21207:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21210:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21200:6:124"},"nodeType":"YulFunctionCall","src":"21200:12:124"},"nodeType":"YulExpressionStatement","src":"21200:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21177:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"21181:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21173:3:124"},"nodeType":"YulFunctionCall","src":"21173:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21188:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21169:3:124"},"nodeType":"YulFunctionCall","src":"21169:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21162:6:124"},"nodeType":"YulFunctionCall","src":"21162:35:124"},"nodeType":"YulIf","src":"21159:55:124"},{"nodeType":"YulVariableDeclaration","src":"21223:26:124","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21246:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21233:12:124"},"nodeType":"YulFunctionCall","src":"21233:16:124"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"21227:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21272:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"21274:16:124"},"nodeType":"YulFunctionCall","src":"21274:18:124"},"nodeType":"YulExpressionStatement","src":"21274:18:124"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"21264:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"21268:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21261:2:124"},"nodeType":"YulFunctionCall","src":"21261:10:124"},"nodeType":"YulIf","src":"21258:36:124"},{"nodeType":"YulVariableDeclaration","src":"21303:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"21344:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"21348:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21340:3:124"},"nodeType":"YulFunctionCall","src":"21340:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"21355:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21336:3:124"},"nodeType":"YulFunctionCall","src":"21336:86:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21424:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21332:3:124"},"nodeType":"YulFunctionCall","src":"21332:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"21316:15:124"},"nodeType":"YulFunctionCall","src":"21316:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"21307:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21444:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21451:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21437:6:124"},"nodeType":"YulFunctionCall","src":"21437:17:124"},"nodeType":"YulExpressionStatement","src":"21437:17:124"},{"body":{"nodeType":"YulBlock","src":"21500:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21509:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21512:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21502:6:124"},"nodeType":"YulFunctionCall","src":"21502:12:124"},"nodeType":"YulExpressionStatement","src":"21502:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21477:2:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21481:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21473:3:124"},"nodeType":"YulFunctionCall","src":"21473:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21486:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21469:3:124"},"nodeType":"YulFunctionCall","src":"21469:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21491:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21466:2:124"},"nodeType":"YulFunctionCall","src":"21466:33:124"},"nodeType":"YulIf","src":"21463:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21542:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21549:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21538:3:124"},"nodeType":"YulFunctionCall","src":"21538:14:124"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21558:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21562:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21554:3:124"},"nodeType":"YulFunctionCall","src":"21554:11:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21567:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"21525:12:124"},"nodeType":"YulFunctionCall","src":"21525:45:124"},"nodeType":"YulExpressionStatement","src":"21525:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21594:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21601:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21590:3:124"},"nodeType":"YulFunctionCall","src":"21590:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21606:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21586:3:124"},"nodeType":"YulFunctionCall","src":"21586:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"21611:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21579:6:124"},"nodeType":"YulFunctionCall","src":"21579:34:124"},"nodeType":"YulExpressionStatement","src":"21579:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21633:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"21640:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21629:3:124"},"nodeType":"YulFunctionCall","src":"21629:15:124"},{"name":"array","nodeType":"YulIdentifier","src":"21646:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21622:6:124"},"nodeType":"YulFunctionCall","src":"21622:30:124"},"nodeType":"YulExpressionStatement","src":"21622:30:124"},{"nodeType":"YulAssignment","src":"21661:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"21671:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21661:6:124"}]}]},"name":"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20269:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"20280:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"20292:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20300:6:124","type":""}],"src":"20194:1488:124"},{"body":{"nodeType":"YulBlock","src":"21842:581:124","statements":[{"body":{"nodeType":"YulBlock","src":"21889:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21898:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21901:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21891:6:124"},"nodeType":"YulFunctionCall","src":"21891:12:124"},"nodeType":"YulExpressionStatement","src":"21891:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21863:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"21872:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21859:3:124"},"nodeType":"YulFunctionCall","src":"21859:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"21884:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21855:3:124"},"nodeType":"YulFunctionCall","src":"21855:33:124"},"nodeType":"YulIf","src":"21852:53:124"},{"nodeType":"YulVariableDeclaration","src":"21914:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21940:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21927:12:124"},"nodeType":"YulFunctionCall","src":"21927:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"21918:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21984:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21959:24:124"},"nodeType":"YulFunctionCall","src":"21959:31:124"},"nodeType":"YulExpressionStatement","src":"21959:31:124"},{"nodeType":"YulAssignment","src":"21999:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"22009:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21999:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"22023:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22055:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22066:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22051:3:124"},"nodeType":"YulFunctionCall","src":"22051:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22038:12:124"},"nodeType":"YulFunctionCall","src":"22038:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22027:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22104:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22079:24:124"},"nodeType":"YulFunctionCall","src":"22079:33:124"},"nodeType":"YulExpressionStatement","src":"22079:33:124"},{"nodeType":"YulAssignment","src":"22121:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"22131:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"22121:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"22147:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22179:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22190:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22175:3:124"},"nodeType":"YulFunctionCall","src":"22175:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22162:12:124"},"nodeType":"YulFunctionCall","src":"22162:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"22151:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"22228:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22203:24:124"},"nodeType":"YulFunctionCall","src":"22203:33:124"},"nodeType":"YulExpressionStatement","src":"22203:33:124"},{"nodeType":"YulAssignment","src":"22245:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"22255:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"22245:6:124"}]},{"nodeType":"YulAssignment","src":"22271:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22298:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22309:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22294:3:124"},"nodeType":"YulFunctionCall","src":"22294:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22281:12:124"},"nodeType":"YulFunctionCall","src":"22281:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"22271:6:124"}]},{"nodeType":"YulAssignment","src":"22322:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22349:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22360:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22345:3:124"},"nodeType":"YulFunctionCall","src":"22345:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22332:12:124"},"nodeType":"YulFunctionCall","src":"22332:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"22322:6:124"}]},{"nodeType":"YulAssignment","src":"22374:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22412:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22397:3:124"},"nodeType":"YulFunctionCall","src":"22397:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22384:12:124"},"nodeType":"YulFunctionCall","src":"22384:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"22374:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21768:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21779:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21791:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21799:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21807:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21815:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21823:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21831:6:124","type":""}],"src":"21687:736:124"},{"body":{"nodeType":"YulBlock","src":"22615:616:124","statements":[{"body":{"nodeType":"YulBlock","src":"22662:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22671:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22674:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22664:6:124"},"nodeType":"YulFunctionCall","src":"22664:12:124"},"nodeType":"YulExpressionStatement","src":"22664:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22636:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"22645:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22632:3:124"},"nodeType":"YulFunctionCall","src":"22632:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"22657:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22628:3:124"},"nodeType":"YulFunctionCall","src":"22628:33:124"},"nodeType":"YulIf","src":"22625:53:124"},{"nodeType":"YulVariableDeclaration","src":"22687:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22713:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22700:12:124"},"nodeType":"YulFunctionCall","src":"22700:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22691:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22757:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22732:24:124"},"nodeType":"YulFunctionCall","src":"22732:31:124"},"nodeType":"YulExpressionStatement","src":"22732:31:124"},{"nodeType":"YulAssignment","src":"22772:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"22782:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22772:6:124"}]},{"nodeType":"YulAssignment","src":"22796:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22823:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22834:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22819:3:124"},"nodeType":"YulFunctionCall","src":"22819:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22806:12:124"},"nodeType":"YulFunctionCall","src":"22806:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"22796:6:124"}]},{"nodeType":"YulAssignment","src":"22847:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22874:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22885:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22870:3:124"},"nodeType":"YulFunctionCall","src":"22870:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22857:12:124"},"nodeType":"YulFunctionCall","src":"22857:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"22847:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"22898:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22930:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22941:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22926:3:124"},"nodeType":"YulFunctionCall","src":"22926:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22913:12:124"},"nodeType":"YulFunctionCall","src":"22913:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22902:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22979:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22954:24:124"},"nodeType":"YulFunctionCall","src":"22954:33:124"},"nodeType":"YulExpressionStatement","src":"22954:33:124"},{"nodeType":"YulAssignment","src":"22996:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"23006:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"22996:6:124"}]},{"nodeType":"YulAssignment","src":"23022:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23049:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23060:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23045:3:124"},"nodeType":"YulFunctionCall","src":"23045:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23032:12:124"},"nodeType":"YulFunctionCall","src":"23032:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"23022:6:124"}]},{"nodeType":"YulAssignment","src":"23074:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23105:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23116:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23101:3:124"},"nodeType":"YulFunctionCall","src":"23101:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"23084:16:124"},"nodeType":"YulFunctionCall","src":"23084:37:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"23074:6:124"}]},{"nodeType":"YulAssignment","src":"23130:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23157:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23168:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23153:3:124"},"nodeType":"YulFunctionCall","src":"23153:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23140:12:124"},"nodeType":"YulFunctionCall","src":"23140:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"23130:6:124"}]},{"nodeType":"YulAssignment","src":"23182:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23209:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23220:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23205:3:124"},"nodeType":"YulFunctionCall","src":"23205:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23192:12:124"},"nodeType":"YulFunctionCall","src":"23192:33:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"23182:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22525:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22536:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22548:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22556:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22564:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22572:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22580:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22588:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"22596:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"22604:6:124","type":""}],"src":"22428:803:124"},{"body":{"nodeType":"YulBlock","src":"23367:348:124","statements":[{"nodeType":"YulVariableDeclaration","src":"23377:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23391:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"23400:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23387:3:124"},"nodeType":"YulFunctionCall","src":"23387:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"23381:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"23434:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23443:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23446:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23436:6:124"},"nodeType":"YulFunctionCall","src":"23436:12:124"},"nodeType":"YulExpressionStatement","src":"23436:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"23426:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"23430:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23422:3:124"},"nodeType":"YulFunctionCall","src":"23422:11:124"},"nodeType":"YulIf","src":"23419:31:124"},{"nodeType":"YulVariableDeclaration","src":"23459:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23485:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23472:12:124"},"nodeType":"YulFunctionCall","src":"23472:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23463:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23529:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"23504:24:124"},"nodeType":"YulFunctionCall","src":"23504:31:124"},"nodeType":"YulExpressionStatement","src":"23504:31:124"},{"nodeType":"YulAssignment","src":"23544:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"23554:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23544:6:124"}]},{"body":{"nodeType":"YulBlock","src":"23656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23658:6:124"},"nodeType":"YulFunctionCall","src":"23658:12:124"},"nodeType":"YulExpressionStatement","src":"23658:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"23579:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"23583:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23575:3:124"},"nodeType":"YulFunctionCall","src":"23575:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"23652:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23571:3:124"},"nodeType":"YulFunctionCall","src":"23571:84:124"},"nodeType":"YulIf","src":"23568:104:124"},{"nodeType":"YulAssignment","src":"23681:28:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23695:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23706:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23691:3:124"},"nodeType":"YulFunctionCall","src":"23691:18:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"23681:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23325:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23336:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23348:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23356:6:124","type":""}],"src":"23236:479:124"},{"body":{"nodeType":"YulBlock","src":"23819:89:124","statements":[{"nodeType":"YulAssignment","src":"23829:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23841:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23852:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23837:3:124"},"nodeType":"YulFunctionCall","src":"23837:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23829:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23871:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23886:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"23894:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23882:3:124"},"nodeType":"YulFunctionCall","src":"23882:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23864:6:124"},"nodeType":"YulFunctionCall","src":"23864:38:124"},"nodeType":"YulExpressionStatement","src":"23864:38:124"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23788:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23799:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23810:4:124","type":""}],"src":"23720:188:124"},{"body":{"nodeType":"YulBlock","src":"24000:161:124","statements":[{"body":{"nodeType":"YulBlock","src":"24046:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24055:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24058:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"24048:6:124"},"nodeType":"YulFunctionCall","src":"24048:12:124"},"nodeType":"YulExpressionStatement","src":"24048:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"24021:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"24030:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24017:3:124"},"nodeType":"YulFunctionCall","src":"24017:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"24042:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"24013:3:124"},"nodeType":"YulFunctionCall","src":"24013:32:124"},"nodeType":"YulIf","src":"24010:52:124"},{"nodeType":"YulAssignment","src":"24071:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24094:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"24081:12:124"},"nodeType":"YulFunctionCall","src":"24081:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"24071:6:124"}]},{"nodeType":"YulAssignment","src":"24113:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24140:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24151:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24136:3:124"},"nodeType":"YulFunctionCall","src":"24136:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"24123:12:124"},"nodeType":"YulFunctionCall","src":"24123:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"24113:6:124"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23958:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23969:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23981:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23989:6:124","type":""}],"src":"23913:248:124"},{"body":{"nodeType":"YulBlock","src":"24247:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"24293:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24302:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24305:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"24295:6:124"},"nodeType":"YulFunctionCall","src":"24295:12:124"},"nodeType":"YulExpressionStatement","src":"24295:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"24268:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"24277:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24264:3:124"},"nodeType":"YulFunctionCall","src":"24264:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"24289:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"24260:3:124"},"nodeType":"YulFunctionCall","src":"24260:32:124"},"nodeType":"YulIf","src":"24257:52:124"},{"nodeType":"YulVariableDeclaration","src":"24318:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24337:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24331:5:124"},"nodeType":"YulFunctionCall","src":"24331:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"24322:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"24381:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"24356:24:124"},"nodeType":"YulFunctionCall","src":"24356:31:124"},"nodeType":"YulExpressionStatement","src":"24356:31:124"},{"nodeType":"YulAssignment","src":"24396:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"24406:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"24396:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24213:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"24224:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"24236:6:124","type":""}],"src":"24166:251:124"},{"body":{"nodeType":"YulBlock","src":"24463:50:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"24480:3:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"24499:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24492:6:124"},"nodeType":"YulFunctionCall","src":"24492:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24485:6:124"},"nodeType":"YulFunctionCall","src":"24485:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24473:6:124"},"nodeType":"YulFunctionCall","src":"24473:34:124"},"nodeType":"YulExpressionStatement","src":"24473:34:124"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"24447:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"24454:3:124","type":""}],"src":"24422:91:124"},{"body":{"nodeType":"YulBlock","src":"24560:33:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"24569:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"24578:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"24585:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24574:3:124"},"nodeType":"YulFunctionCall","src":"24574:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24562:6:124"},"nodeType":"YulFunctionCall","src":"24562:29:124"},"nodeType":"YulExpressionStatement","src":"24562:29:124"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"24544:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"24551:3:124","type":""}],"src":"24518:75:124"},{"body":{"nodeType":"YulBlock","src":"25103:1162:124","statements":[{"nodeType":"YulAssignment","src":"25113:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25125:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25136:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25121:3:124"},"nodeType":"YulFunctionCall","src":"25121:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25113:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25156:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"25167:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25149:6:124"},"nodeType":"YulFunctionCall","src":"25149:25:124"},"nodeType":"YulExpressionStatement","src":"25149:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25194:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25205:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25190:3:124"},"nodeType":"YulFunctionCall","src":"25190:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"25210:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25183:6:124"},"nodeType":"YulFunctionCall","src":"25183:34:124"},"nodeType":"YulExpressionStatement","src":"25183:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25237:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25248:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25233:3:124"},"nodeType":"YulFunctionCall","src":"25233:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"25253:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25226:6:124"},"nodeType":"YulFunctionCall","src":"25226:34:124"},"nodeType":"YulExpressionStatement","src":"25226:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25280:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25291:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25276:3:124"},"nodeType":"YulFunctionCall","src":"25276:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"25296:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25269:6:124"},"nodeType":"YulFunctionCall","src":"25269:34:124"},"nodeType":"YulExpressionStatement","src":"25269:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25323:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25334:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25319:3:124"},"nodeType":"YulFunctionCall","src":"25319:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25346:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25340:5:124"},"nodeType":"YulFunctionCall","src":"25340:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25312:6:124"},"nodeType":"YulFunctionCall","src":"25312:42:124"},"nodeType":"YulExpressionStatement","src":"25312:42:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25374:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25385:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25370:3:124"},"nodeType":"YulFunctionCall","src":"25370:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25401:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25409:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25397:3:124"},"nodeType":"YulFunctionCall","src":"25397:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25391:5:124"},"nodeType":"YulFunctionCall","src":"25391:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25363:6:124"},"nodeType":"YulFunctionCall","src":"25363:51:124"},"nodeType":"YulExpressionStatement","src":"25363:51:124"},{"nodeType":"YulVariableDeclaration","src":"25423:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25453:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25461:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25449:3:124"},"nodeType":"YulFunctionCall","src":"25449:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25443:5:124"},"nodeType":"YulFunctionCall","src":"25443:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"25427:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"25474:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"25484:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25478:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25546:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25557:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25542:3:124"},"nodeType":"YulFunctionCall","src":"25542:19:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"25567:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25581:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25563:3:124"},"nodeType":"YulFunctionCall","src":"25563:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25535:6:124"},"nodeType":"YulFunctionCall","src":"25535:50:124"},"nodeType":"YulExpressionStatement","src":"25535:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25605:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25616:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25601:3:124"},"nodeType":"YulFunctionCall","src":"25601:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25636:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25644:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25632:3:124"},"nodeType":"YulFunctionCall","src":"25632:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25626:5:124"},"nodeType":"YulFunctionCall","src":"25626:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25650:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25622:3:124"},"nodeType":"YulFunctionCall","src":"25622:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25594:6:124"},"nodeType":"YulFunctionCall","src":"25594:60:124"},"nodeType":"YulExpressionStatement","src":"25594:60:124"},{"nodeType":"YulVariableDeclaration","src":"25663:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25695:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25703:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25691:3:124"},"nodeType":"YulFunctionCall","src":"25691:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25685:5:124"},"nodeType":"YulFunctionCall","src":"25685:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"25667:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"25717:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"25727:3:124","type":"","value":"256"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"25721:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"25758:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25778:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"25789:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25774:3:124"},"nodeType":"YulFunctionCall","src":"25774:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25739:18:124"},"nodeType":"YulFunctionCall","src":"25739:54:124"},"nodeType":"YulExpressionStatement","src":"25739:54:124"},{"nodeType":"YulVariableDeclaration","src":"25802:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25834:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25842:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25830:3:124"},"nodeType":"YulFunctionCall","src":"25830:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25824:5:124"},"nodeType":"YulFunctionCall","src":"25824:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"25806:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"25872:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25892:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25903:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25888:3:124"},"nodeType":"YulFunctionCall","src":"25888:19:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"25856:15:124"},"nodeType":"YulFunctionCall","src":"25856:52:124"},"nodeType":"YulExpressionStatement","src":"25856:52:124"},{"nodeType":"YulVariableDeclaration","src":"25917:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25949:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25957:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25945:3:124"},"nodeType":"YulFunctionCall","src":"25945:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25939:5:124"},"nodeType":"YulFunctionCall","src":"25939:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"25921:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"25990:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26010:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26021:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26006:3:124"},"nodeType":"YulFunctionCall","src":"26006:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25971:18:124"},"nodeType":"YulFunctionCall","src":"25971:55:124"},"nodeType":"YulExpressionStatement","src":"25971:55:124"},{"nodeType":"YulVariableDeclaration","src":"26035:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26067:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26075:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26063:3:124"},"nodeType":"YulFunctionCall","src":"26063:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26057:5:124"},"nodeType":"YulFunctionCall","src":"26057:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"26039:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"26106:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26126:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26137:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26122:3:124"},"nodeType":"YulFunctionCall","src":"26122:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"26089:16:124"},"nodeType":"YulFunctionCall","src":"26089:53:124"},"nodeType":"YulExpressionStatement","src":"26089:53:124"},{"nodeType":"YulVariableDeclaration","src":"26151:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26183:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"26191:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26179:3:124"},"nodeType":"YulFunctionCall","src":"26179:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26173:5:124"},"nodeType":"YulFunctionCall","src":"26173:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"26155:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"26223:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26243:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26254:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26239:3:124"},"nodeType":"YulFunctionCall","src":"26239:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"26204:18:124"},"nodeType":"YulFunctionCall","src":"26204:55:124"},"nodeType":"YulExpressionStatement","src":"26204:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25040:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"25051:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25059:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25067:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25075:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25083:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25094:4:124","type":""}],"src":"24598:1667:124"},{"body":{"nodeType":"YulBlock","src":"26535:428:124","statements":[{"nodeType":"YulAssignment","src":"26545:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26557:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26568:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26553:3:124"},"nodeType":"YulFunctionCall","src":"26553:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26545:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"26581:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"26591:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26585:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26649:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26664:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"26672:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26660:3:124"},"nodeType":"YulFunctionCall","src":"26660:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26642:6:124"},"nodeType":"YulFunctionCall","src":"26642:34:124"},"nodeType":"YulExpressionStatement","src":"26642:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26696:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26707:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26692:3:124"},"nodeType":"YulFunctionCall","src":"26692:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"26716:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"26724:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26712:3:124"},"nodeType":"YulFunctionCall","src":"26712:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26685:6:124"},"nodeType":"YulFunctionCall","src":"26685:43:124"},"nodeType":"YulExpressionStatement","src":"26685:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26748:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26759:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26744:3:124"},"nodeType":"YulFunctionCall","src":"26744:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"26764:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26737:6:124"},"nodeType":"YulFunctionCall","src":"26737:34:124"},"nodeType":"YulExpressionStatement","src":"26737:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26791:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26802:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26787:3:124"},"nodeType":"YulFunctionCall","src":"26787:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"26807:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26780:6:124"},"nodeType":"YulFunctionCall","src":"26780:34:124"},"nodeType":"YulExpressionStatement","src":"26780:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26834:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26845:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26830:3:124"},"nodeType":"YulFunctionCall","src":"26830:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26855:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26863:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26851:3:124"},"nodeType":"YulFunctionCall","src":"26851:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26823:6:124"},"nodeType":"YulFunctionCall","src":"26823:46:124"},"nodeType":"YulExpressionStatement","src":"26823:46:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26889:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26900:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26885:3:124"},"nodeType":"YulFunctionCall","src":"26885:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"26906:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26878:6:124"},"nodeType":"YulFunctionCall","src":"26878:35:124"},"nodeType":"YulExpressionStatement","src":"26878:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26933:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26944:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26929:3:124"},"nodeType":"YulFunctionCall","src":"26929:19:124"},{"name":"value6","nodeType":"YulIdentifier","src":"26950:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26922:6:124"},"nodeType":"YulFunctionCall","src":"26922:35:124"},"nodeType":"YulExpressionStatement","src":"26922:35:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26456:9:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"26467:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"26475:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"26483:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26491:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26499:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26507:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26515:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26526:4:124","type":""}],"src":"26270:693:124"},{"body":{"nodeType":"YulBlock","src":"27350:485:124","statements":[{"nodeType":"YulAssignment","src":"27360:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27372:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27383:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27368:3:124"},"nodeType":"YulFunctionCall","src":"27368:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27360:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27403:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"27414:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27396:6:124"},"nodeType":"YulFunctionCall","src":"27396:25:124"},"nodeType":"YulExpressionStatement","src":"27396:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27441:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27452:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27437:3:124"},"nodeType":"YulFunctionCall","src":"27437:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"27457:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27430:6:124"},"nodeType":"YulFunctionCall","src":"27430:34:124"},"nodeType":"YulExpressionStatement","src":"27430:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27484:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27495:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27480:3:124"},"nodeType":"YulFunctionCall","src":"27480:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"27500:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27473:6:124"},"nodeType":"YulFunctionCall","src":"27473:34:124"},"nodeType":"YulExpressionStatement","src":"27473:34:124"},{"nodeType":"YulVariableDeclaration","src":"27516:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"27526:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"27520:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27599:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27584:3:124"},"nodeType":"YulFunctionCall","src":"27584:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27614:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27608:5:124"},"nodeType":"YulFunctionCall","src":"27608:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"27623:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27604:3:124"},"nodeType":"YulFunctionCall","src":"27604:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27577:6:124"},"nodeType":"YulFunctionCall","src":"27577:50:124"},"nodeType":"YulExpressionStatement","src":"27577:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27647:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27658:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27643:3:124"},"nodeType":"YulFunctionCall","src":"27643:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27674:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"27682:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27670:3:124"},"nodeType":"YulFunctionCall","src":"27670:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27664:5:124"},"nodeType":"YulFunctionCall","src":"27664:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27636:6:124"},"nodeType":"YulFunctionCall","src":"27636:51:124"},"nodeType":"YulExpressionStatement","src":"27636:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27707:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27718:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27703:3:124"},"nodeType":"YulFunctionCall","src":"27703:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27738:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"27746:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27734:3:124"},"nodeType":"YulFunctionCall","src":"27734:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27728:5:124"},"nodeType":"YulFunctionCall","src":"27728:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"27752:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27724:3:124"},"nodeType":"YulFunctionCall","src":"27724:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27696:6:124"},"nodeType":"YulFunctionCall","src":"27696:60:124"},"nodeType":"YulExpressionStatement","src":"27696:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27776:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27787:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27772:3:124"},"nodeType":"YulFunctionCall","src":"27772:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27807:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"27815:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27803:3:124"},"nodeType":"YulFunctionCall","src":"27803:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27797:5:124"},"nodeType":"YulFunctionCall","src":"27797:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"27821:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27793:3:124"},"nodeType":"YulFunctionCall","src":"27793:35:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27765:6:124"},"nodeType":"YulFunctionCall","src":"27765:64:124"},"nodeType":"YulExpressionStatement","src":"27765:64:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27295:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"27306:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"27314:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"27322:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27330:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27341:4:124","type":""}],"src":"26968:867:124"},{"body":{"nodeType":"YulBlock","src":"27961:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27978:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27989:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27971:6:124"},"nodeType":"YulFunctionCall","src":"27971:21:124"},"nodeType":"YulExpressionStatement","src":"27971:21:124"},{"nodeType":"YulAssignment","src":"28001:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28027:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28039:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28050:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28035:3:124"},"nodeType":"YulFunctionCall","src":"28035:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"28009:17:124"},"nodeType":"YulFunctionCall","src":"28009:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28001:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27930:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27941:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27952:4:124","type":""}],"src":"27840:220:124"},{"body":{"nodeType":"YulBlock","src":"28590:481:124","statements":[{"nodeType":"YulAssignment","src":"28600:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28612:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28623:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28608:3:124"},"nodeType":"YulFunctionCall","src":"28608:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28600:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28643:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"28654:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28636:6:124"},"nodeType":"YulFunctionCall","src":"28636:25:124"},"nodeType":"YulExpressionStatement","src":"28636:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28681:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28692:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28677:3:124"},"nodeType":"YulFunctionCall","src":"28677:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"28697:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28670:6:124"},"nodeType":"YulFunctionCall","src":"28670:34:124"},"nodeType":"YulExpressionStatement","src":"28670:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28724:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28735:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28720:3:124"},"nodeType":"YulFunctionCall","src":"28720:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"28740:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28713:6:124"},"nodeType":"YulFunctionCall","src":"28713:34:124"},"nodeType":"YulExpressionStatement","src":"28713:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28767:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28778:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28763:3:124"},"nodeType":"YulFunctionCall","src":"28763:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"28783:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28756:6:124"},"nodeType":"YulFunctionCall","src":"28756:34:124"},"nodeType":"YulExpressionStatement","src":"28756:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28810:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28821:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28806:3:124"},"nodeType":"YulFunctionCall","src":"28806:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"28827:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28799:6:124"},"nodeType":"YulFunctionCall","src":"28799:35:124"},"nodeType":"YulExpressionStatement","src":"28799:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28854:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28865:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28850:3:124"},"nodeType":"YulFunctionCall","src":"28850:19:124"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28877:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28871:5:124"},"nodeType":"YulFunctionCall","src":"28871:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28843:6:124"},"nodeType":"YulFunctionCall","src":"28843:42:124"},"nodeType":"YulExpressionStatement","src":"28843:42:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28905:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28916:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28901:3:124"},"nodeType":"YulFunctionCall","src":"28901:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28936:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"28944:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28932:3:124"},"nodeType":"YulFunctionCall","src":"28932:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28926:5:124"},"nodeType":"YulFunctionCall","src":"28926:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"28950:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28922:3:124"},"nodeType":"YulFunctionCall","src":"28922:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28894:6:124"},"nodeType":"YulFunctionCall","src":"28894:100:124"},"nodeType":"YulExpressionStatement","src":"28894:100:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29014:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29025:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29010:3:124"},"nodeType":"YulFunctionCall","src":"29010:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"29045:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29053:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29041:3:124"},"nodeType":"YulFunctionCall","src":"29041:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29035:5:124"},"nodeType":"YulFunctionCall","src":"29035:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"29059:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29031:3:124"},"nodeType":"YulFunctionCall","src":"29031:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29003:6:124"},"nodeType":"YulFunctionCall","src":"29003:62:124"},"nodeType":"YulExpressionStatement","src":"29003:62:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"28519:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"28530:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"28538:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"28546:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"28554:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"28562:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"28570:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"28581:4:124","type":""}],"src":"28065:1006:124"},{"body":{"nodeType":"YulBlock","src":"29108:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29125:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29128:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29118:6:124"},"nodeType":"YulFunctionCall","src":"29118:88:124"},"nodeType":"YulExpressionStatement","src":"29118:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29222:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"29225:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29215:6:124"},"nodeType":"YulFunctionCall","src":"29215:15:124"},"nodeType":"YulExpressionStatement","src":"29215:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29246:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29249:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29239:6:124"},"nodeType":"YulFunctionCall","src":"29239:15:124"},"nodeType":"YulExpressionStatement","src":"29239:15:124"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"29076:184:124"},{"body":{"nodeType":"YulBlock","src":"29323:243:124","statements":[{"body":{"nodeType":"YulBlock","src":"29365:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29386:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29389:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29379:6:124"},"nodeType":"YulFunctionCall","src":"29379:88:124"},"nodeType":"YulExpressionStatement","src":"29379:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29487:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"29490:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29480:6:124"},"nodeType":"YulFunctionCall","src":"29480:15:124"},"nodeType":"YulExpressionStatement","src":"29480:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29515:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29518:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29508:6:124"},"nodeType":"YulFunctionCall","src":"29508:15:124"},"nodeType":"YulExpressionStatement","src":"29508:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"29346:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"29353:1:124","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"29343:2:124"},"nodeType":"YulFunctionCall","src":"29343:12:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29336:6:124"},"nodeType":"YulFunctionCall","src":"29336:20:124"},"nodeType":"YulIf","src":"29333:200:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"29549:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"29554:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29542:6:124"},"nodeType":"YulFunctionCall","src":"29542:18:124"},"nodeType":"YulExpressionStatement","src":"29542:18:124"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"29307:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"29314:3:124","type":""}],"src":"29265:301:124"},{"body":{"nodeType":"YulBlock","src":"29951:616:124","statements":[{"nodeType":"YulAssignment","src":"29961:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29973:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29984:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29969:3:124"},"nodeType":"YulFunctionCall","src":"29969:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29961:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30004:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"30015:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29997:6:124"},"nodeType":"YulFunctionCall","src":"29997:25:124"},"nodeType":"YulExpressionStatement","src":"29997:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30053:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30038:3:124"},"nodeType":"YulFunctionCall","src":"30038:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"30058:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30031:6:124"},"nodeType":"YulFunctionCall","src":"30031:34:124"},"nodeType":"YulExpressionStatement","src":"30031:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30085:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30096:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30081:3:124"},"nodeType":"YulFunctionCall","src":"30081:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"30101:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30074:6:124"},"nodeType":"YulFunctionCall","src":"30074:34:124"},"nodeType":"YulExpressionStatement","src":"30074:34:124"},{"nodeType":"YulVariableDeclaration","src":"30117:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"30127:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"30121:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30189:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30200:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30185:3:124"},"nodeType":"YulFunctionCall","src":"30185:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30215:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30209:5:124"},"nodeType":"YulFunctionCall","src":"30209:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"30224:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30205:3:124"},"nodeType":"YulFunctionCall","src":"30205:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30178:6:124"},"nodeType":"YulFunctionCall","src":"30178:50:124"},"nodeType":"YulExpressionStatement","src":"30178:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30248:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30259:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30244:3:124"},"nodeType":"YulFunctionCall","src":"30244:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30275:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30283:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30271:3:124"},"nodeType":"YulFunctionCall","src":"30271:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30265:5:124"},"nodeType":"YulFunctionCall","src":"30265:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30237:6:124"},"nodeType":"YulFunctionCall","src":"30237:51:124"},"nodeType":"YulExpressionStatement","src":"30237:51:124"},{"nodeType":"YulVariableDeclaration","src":"30297:42:124","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30327:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30335:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30323:3:124"},"nodeType":"YulFunctionCall","src":"30323:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30317:5:124"},"nodeType":"YulFunctionCall","src":"30317:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"30301:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"30381:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30399:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30410:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30395:3:124"},"nodeType":"YulFunctionCall","src":"30395:19:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"30348:32:124"},"nodeType":"YulFunctionCall","src":"30348:67:124"},"nodeType":"YulExpressionStatement","src":"30348:67:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30446:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30431:3:124"},"nodeType":"YulFunctionCall","src":"30431:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30466:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30474:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30462:3:124"},"nodeType":"YulFunctionCall","src":"30462:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30456:5:124"},"nodeType":"YulFunctionCall","src":"30456:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"30480:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30452:3:124"},"nodeType":"YulFunctionCall","src":"30452:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30424:6:124"},"nodeType":"YulFunctionCall","src":"30424:60:124"},"nodeType":"YulExpressionStatement","src":"30424:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30504:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30515:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30500:3:124"},"nodeType":"YulFunctionCall","src":"30500:19:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30545:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30553:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30541:3:124"},"nodeType":"YulFunctionCall","src":"30541:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30535:5:124"},"nodeType":"YulFunctionCall","src":"30535:23:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30528:6:124"},"nodeType":"YulFunctionCall","src":"30528:31:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30521:6:124"},"nodeType":"YulFunctionCall","src":"30521:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30493:6:124"},"nodeType":"YulFunctionCall","src":"30493:68:124"},"nodeType":"YulExpressionStatement","src":"30493:68:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29896:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29907:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29915:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29923:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29931:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29942:4:124","type":""}],"src":"29571:996:124"},{"body":{"nodeType":"YulBlock","src":"30653:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"30699:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30708:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30711:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"30701:6:124"},"nodeType":"YulFunctionCall","src":"30701:12:124"},"nodeType":"YulExpressionStatement","src":"30701:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"30674:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"30683:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30670:3:124"},"nodeType":"YulFunctionCall","src":"30670:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"30695:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"30666:3:124"},"nodeType":"YulFunctionCall","src":"30666:32:124"},"nodeType":"YulIf","src":"30663:52:124"},{"nodeType":"YulAssignment","src":"30724:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30740:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30734:5:124"},"nodeType":"YulFunctionCall","src":"30734:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"30724:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30619:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"30630:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"30642:6:124","type":""}],"src":"30572:184:124"},{"body":{"nodeType":"YulBlock","src":"31005:716:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31022:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"31033:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31015:6:124"},"nodeType":"YulFunctionCall","src":"31015:25:124"},"nodeType":"YulExpressionStatement","src":"31015:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31060:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31071:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31056:3:124"},"nodeType":"YulFunctionCall","src":"31056:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"31076:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31049:6:124"},"nodeType":"YulFunctionCall","src":"31049:30:124"},"nodeType":"YulExpressionStatement","src":"31049:30:124"},{"nodeType":"YulVariableDeclaration","src":"31088:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"31098:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"31092:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31160:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31171:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31156:3:124"},"nodeType":"YulFunctionCall","src":"31156:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31186:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31180:5:124"},"nodeType":"YulFunctionCall","src":"31180:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"31195:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31176:3:124"},"nodeType":"YulFunctionCall","src":"31176:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31149:6:124"},"nodeType":"YulFunctionCall","src":"31149:50:124"},"nodeType":"YulExpressionStatement","src":"31149:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31219:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31230:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31215:3:124"},"nodeType":"YulFunctionCall","src":"31215:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31249:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31257:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31245:3:124"},"nodeType":"YulFunctionCall","src":"31245:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31239:5:124"},"nodeType":"YulFunctionCall","src":"31239:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"31263:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31235:3:124"},"nodeType":"YulFunctionCall","src":"31235:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31208:6:124"},"nodeType":"YulFunctionCall","src":"31208:59:124"},"nodeType":"YulExpressionStatement","src":"31208:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31287:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31298:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31283:3:124"},"nodeType":"YulFunctionCall","src":"31283:19:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31314:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31322:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31310:3:124"},"nodeType":"YulFunctionCall","src":"31310:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31304:5:124"},"nodeType":"YulFunctionCall","src":"31304:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31276:6:124"},"nodeType":"YulFunctionCall","src":"31276:51:124"},"nodeType":"YulExpressionStatement","src":"31276:51:124"},{"nodeType":"YulVariableDeclaration","src":"31336:42:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31366:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31374:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31362:3:124"},"nodeType":"YulFunctionCall","src":"31362:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31356:5:124"},"nodeType":"YulFunctionCall","src":"31356:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"31340:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31398:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31409:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31394:3:124"},"nodeType":"YulFunctionCall","src":"31394:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"31415:4:124","type":"","value":"0xe0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31387:6:124"},"nodeType":"YulFunctionCall","src":"31387:33:124"},"nodeType":"YulExpressionStatement","src":"31387:33:124"},{"nodeType":"YulVariableDeclaration","src":"31429:66:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"31461:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31479:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31490:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31475:3:124"},"nodeType":"YulFunctionCall","src":"31475:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"31443:17:124"},"nodeType":"YulFunctionCall","src":"31443:52:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"31433:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31515:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31526:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31511:3:124"},"nodeType":"YulFunctionCall","src":"31511:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31546:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31554:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31542:3:124"},"nodeType":"YulFunctionCall","src":"31542:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31536:5:124"},"nodeType":"YulFunctionCall","src":"31536:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"31561:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31532:3:124"},"nodeType":"YulFunctionCall","src":"31532:36:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31504:6:124"},"nodeType":"YulFunctionCall","src":"31504:65:124"},"nodeType":"YulExpressionStatement","src":"31504:65:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31589:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31600:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31585:3:124"},"nodeType":"YulFunctionCall","src":"31585:20:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31617:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31625:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31613:3:124"},"nodeType":"YulFunctionCall","src":"31613:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31607:5:124"},"nodeType":"YulFunctionCall","src":"31607:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31578:6:124"},"nodeType":"YulFunctionCall","src":"31578:53:124"},"nodeType":"YulExpressionStatement","src":"31578:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31651:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31662:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31647:3:124"},"nodeType":"YulFunctionCall","src":"31647:19:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31678:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31686:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31674:3:124"},"nodeType":"YulFunctionCall","src":"31674:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"31668:5:124"},"nodeType":"YulFunctionCall","src":"31668:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31640:6:124"},"nodeType":"YulFunctionCall","src":"31640:52:124"},"nodeType":"YulExpressionStatement","src":"31640:52:124"},{"nodeType":"YulAssignment","src":"31701:14:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"31709:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31701:4:124"}]}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30966:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"30977:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"30985:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30996:4:124","type":""}],"src":"30761:960:124"},{"body":{"nodeType":"YulBlock","src":"32213:545:124","statements":[{"nodeType":"YulAssignment","src":"32223:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32235:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32246:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32231:3:124"},"nodeType":"YulFunctionCall","src":"32231:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32223:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32266:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"32277:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32259:6:124"},"nodeType":"YulFunctionCall","src":"32259:25:124"},"nodeType":"YulExpressionStatement","src":"32259:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32304:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32315:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32300:3:124"},"nodeType":"YulFunctionCall","src":"32300:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"32320:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32293:6:124"},"nodeType":"YulFunctionCall","src":"32293:34:124"},"nodeType":"YulExpressionStatement","src":"32293:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32347:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32358:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32343:3:124"},"nodeType":"YulFunctionCall","src":"32343:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"32363:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32336:6:124"},"nodeType":"YulFunctionCall","src":"32336:34:124"},"nodeType":"YulExpressionStatement","src":"32336:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32390:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32401:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32386:3:124"},"nodeType":"YulFunctionCall","src":"32386:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"32406:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32379:6:124"},"nodeType":"YulFunctionCall","src":"32379:34:124"},"nodeType":"YulExpressionStatement","src":"32379:34:124"},{"nodeType":"YulVariableDeclaration","src":"32422:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"32432:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"32426:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32494:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32505:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32490:3:124"},"nodeType":"YulFunctionCall","src":"32490:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32515:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"32523:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32511:3:124"},"nodeType":"YulFunctionCall","src":"32511:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32483:6:124"},"nodeType":"YulFunctionCall","src":"32483:44:124"},"nodeType":"YulExpressionStatement","src":"32483:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32547:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32558:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32543:3:124"},"nodeType":"YulFunctionCall","src":"32543:19:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"32578:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"32571:6:124"},"nodeType":"YulFunctionCall","src":"32571:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"32564:6:124"},"nodeType":"YulFunctionCall","src":"32564:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32536:6:124"},"nodeType":"YulFunctionCall","src":"32536:51:124"},"nodeType":"YulExpressionStatement","src":"32536:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32607:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32618:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32603:3:124"},"nodeType":"YulFunctionCall","src":"32603:19:124"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"32628:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"32636:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32624:3:124"},"nodeType":"YulFunctionCall","src":"32624:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32596:6:124"},"nodeType":"YulFunctionCall","src":"32596:48:124"},"nodeType":"YulExpressionStatement","src":"32596:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32664:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32675:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32660:3:124"},"nodeType":"YulFunctionCall","src":"32660:19:124"},{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"32685:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"32693:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32681:3:124"},"nodeType":"YulFunctionCall","src":"32681:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32653:6:124"},"nodeType":"YulFunctionCall","src":"32653:44:124"},"nodeType":"YulExpressionStatement","src":"32653:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32717:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32728:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32713:3:124"},"nodeType":"YulFunctionCall","src":"32713:19:124"},{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"32738:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"32746:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32734:3:124"},"nodeType":"YulFunctionCall","src":"32734:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32706:6:124"},"nodeType":"YulFunctionCall","src":"32706:46:124"},"nodeType":"YulExpressionStatement","src":"32706:46:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32118:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"32129:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"32137:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"32145:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"32153:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"32161:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"32169:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32177:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32185:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32193:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32204:4:124","type":""}],"src":"31726:1032:124"},{"body":{"nodeType":"YulBlock","src":"33005:211:124","statements":[{"nodeType":"YulAssignment","src":"33015:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33027:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33038:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33023:3:124"},"nodeType":"YulFunctionCall","src":"33023:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33015:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33057:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"33068:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33050:6:124"},"nodeType":"YulFunctionCall","src":"33050:25:124"},"nodeType":"YulExpressionStatement","src":"33050:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33095:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33106:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33091:3:124"},"nodeType":"YulFunctionCall","src":"33091:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"33111:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33084:6:124"},"nodeType":"YulFunctionCall","src":"33084:34:124"},"nodeType":"YulExpressionStatement","src":"33084:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33138:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33149:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33134:3:124"},"nodeType":"YulFunctionCall","src":"33134:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"33158:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33166:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33154:3:124"},"nodeType":"YulFunctionCall","src":"33154:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33127:6:124"},"nodeType":"YulFunctionCall","src":"33127:83:124"},"nodeType":"YulExpressionStatement","src":"33127:83:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32958:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32969:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32977:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32985:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32996:4:124","type":""}],"src":"32763:453:124"},{"body":{"nodeType":"YulBlock","src":"33687:658:124","statements":[{"nodeType":"YulAssignment","src":"33697:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33709:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33720:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33705:3:124"},"nodeType":"YulFunctionCall","src":"33705:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33697:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33740:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"33751:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33733:6:124"},"nodeType":"YulFunctionCall","src":"33733:25:124"},"nodeType":"YulExpressionStatement","src":"33733:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33778:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33789:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33774:3:124"},"nodeType":"YulFunctionCall","src":"33774:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"33794:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33767:6:124"},"nodeType":"YulFunctionCall","src":"33767:34:124"},"nodeType":"YulExpressionStatement","src":"33767:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33821:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33832:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33817:3:124"},"nodeType":"YulFunctionCall","src":"33817:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"33837:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33810:6:124"},"nodeType":"YulFunctionCall","src":"33810:34:124"},"nodeType":"YulExpressionStatement","src":"33810:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33864:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33875:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33860:3:124"},"nodeType":"YulFunctionCall","src":"33860:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"33880:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33853:6:124"},"nodeType":"YulFunctionCall","src":"33853:34:124"},"nodeType":"YulExpressionStatement","src":"33853:34:124"},{"nodeType":"YulVariableDeclaration","src":"33896:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"33906:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"33900:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33968:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33979:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33964:3:124"},"nodeType":"YulFunctionCall","src":"33964:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33995:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33989:5:124"},"nodeType":"YulFunctionCall","src":"33989:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34004:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33985:3:124"},"nodeType":"YulFunctionCall","src":"33985:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33957:6:124"},"nodeType":"YulFunctionCall","src":"33957:51:124"},"nodeType":"YulExpressionStatement","src":"33957:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34028:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34039:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34024:3:124"},"nodeType":"YulFunctionCall","src":"34024:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34055:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34063:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34051:3:124"},"nodeType":"YulFunctionCall","src":"34051:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34045:5:124"},"nodeType":"YulFunctionCall","src":"34045:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34017:6:124"},"nodeType":"YulFunctionCall","src":"34017:51:124"},"nodeType":"YulExpressionStatement","src":"34017:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34088:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34099:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34084:3:124"},"nodeType":"YulFunctionCall","src":"34084:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34119:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34127:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34115:3:124"},"nodeType":"YulFunctionCall","src":"34115:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34109:5:124"},"nodeType":"YulFunctionCall","src":"34109:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34133:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34105:3:124"},"nodeType":"YulFunctionCall","src":"34105:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34077:6:124"},"nodeType":"YulFunctionCall","src":"34077:60:124"},"nodeType":"YulExpressionStatement","src":"34077:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34157:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34168:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34153:3:124"},"nodeType":"YulFunctionCall","src":"34153:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34184:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34192:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34180:3:124"},"nodeType":"YulFunctionCall","src":"34180:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34174:5:124"},"nodeType":"YulFunctionCall","src":"34174:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34146:6:124"},"nodeType":"YulFunctionCall","src":"34146:51:124"},"nodeType":"YulExpressionStatement","src":"34146:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34217:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34228:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34213:3:124"},"nodeType":"YulFunctionCall","src":"34213:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34248:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34256:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34244:3:124"},"nodeType":"YulFunctionCall","src":"34244:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34238:5:124"},"nodeType":"YulFunctionCall","src":"34238:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34263:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34234:3:124"},"nodeType":"YulFunctionCall","src":"34234:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34206:6:124"},"nodeType":"YulFunctionCall","src":"34206:61:124"},"nodeType":"YulExpressionStatement","src":"34206:61:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34287:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34298:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34283:3:124"},"nodeType":"YulFunctionCall","src":"34283:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"34318:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34326:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34314:3:124"},"nodeType":"YulFunctionCall","src":"34314:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34308:5:124"},"nodeType":"YulFunctionCall","src":"34308:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"34333:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34304:3:124"},"nodeType":"YulFunctionCall","src":"34304:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34276:6:124"},"nodeType":"YulFunctionCall","src":"34276:63:124"},"nodeType":"YulExpressionStatement","src":"34276:63:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33624:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"33635:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"33643:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"33651:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"33659:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"33667:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33678:4:124","type":""}],"src":"33221:1124:124"},{"body":{"nodeType":"YulBlock","src":"34738:430:124","statements":[{"nodeType":"YulAssignment","src":"34748:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34760:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34771:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34756:3:124"},"nodeType":"YulFunctionCall","src":"34756:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"34748:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34791:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"34802:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34784:6:124"},"nodeType":"YulFunctionCall","src":"34784:25:124"},"nodeType":"YulExpressionStatement","src":"34784:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34829:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34840:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34825:3:124"},"nodeType":"YulFunctionCall","src":"34825:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"34845:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34818:6:124"},"nodeType":"YulFunctionCall","src":"34818:34:124"},"nodeType":"YulExpressionStatement","src":"34818:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34883:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34868:3:124"},"nodeType":"YulFunctionCall","src":"34868:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"34888:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34861:6:124"},"nodeType":"YulFunctionCall","src":"34861:34:124"},"nodeType":"YulExpressionStatement","src":"34861:34:124"},{"nodeType":"YulVariableDeclaration","src":"34904:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"34914:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"34908:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34976:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34987:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34972:3:124"},"nodeType":"YulFunctionCall","src":"34972:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"34996:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35004:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34992:3:124"},"nodeType":"YulFunctionCall","src":"34992:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34965:6:124"},"nodeType":"YulFunctionCall","src":"34965:43:124"},"nodeType":"YulExpressionStatement","src":"34965:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35028:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35039:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35024:3:124"},"nodeType":"YulFunctionCall","src":"35024:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"35045:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35017:6:124"},"nodeType":"YulFunctionCall","src":"35017:35:124"},"nodeType":"YulExpressionStatement","src":"35017:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35072:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35083:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35068:3:124"},"nodeType":"YulFunctionCall","src":"35068:19:124"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"35093:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35101:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35089:3:124"},"nodeType":"YulFunctionCall","src":"35089:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35061:6:124"},"nodeType":"YulFunctionCall","src":"35061:44:124"},"nodeType":"YulExpressionStatement","src":"35061:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35125:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35136:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35121:3:124"},"nodeType":"YulFunctionCall","src":"35121:19:124"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"35146:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35154:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35142:3:124"},"nodeType":"YulFunctionCall","src":"35142:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35114:6:124"},"nodeType":"YulFunctionCall","src":"35114:48:124"},"nodeType":"YulExpressionStatement","src":"35114:48:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"34659:9:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"34670:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"34678:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"34686:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"34694:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"34702:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"34710:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"34718:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"34729:4:124","type":""}],"src":"34350:818:124"},{"body":{"nodeType":"YulBlock","src":"35228:382:124","statements":[{"nodeType":"YulAssignment","src":"35238:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35252:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"35255:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"35248:3:124"},"nodeType":"YulFunctionCall","src":"35248:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"35238:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"35269:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"35299:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"35305:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35295:3:124"},"nodeType":"YulFunctionCall","src":"35295:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"35273:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"35346:31:124","statements":[{"nodeType":"YulAssignment","src":"35348:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"35362:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35370:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35358:3:124"},"nodeType":"YulFunctionCall","src":"35358:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"35348:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"35326:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"35319:6:124"},"nodeType":"YulFunctionCall","src":"35319:26:124"},"nodeType":"YulIf","src":"35316:61:124"},{"body":{"nodeType":"YulBlock","src":"35436:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35457:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35460:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35450:6:124"},"nodeType":"YulFunctionCall","src":"35450:88:124"},"nodeType":"YulExpressionStatement","src":"35450:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35558:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"35561:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35551:6:124"},"nodeType":"YulFunctionCall","src":"35551:15:124"},"nodeType":"YulExpressionStatement","src":"35551:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35586:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35589:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"35579:6:124"},"nodeType":"YulFunctionCall","src":"35579:15:124"},"nodeType":"YulExpressionStatement","src":"35579:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"35392:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"35415:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35423:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"35412:2:124"},"nodeType":"YulFunctionCall","src":"35412:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"35389:2:124"},"nodeType":"YulFunctionCall","src":"35389:38:124"},"nodeType":"YulIf","src":"35386:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"35208:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"35217:6:124","type":""}],"src":"35173:437:124"},{"body":{"nodeType":"YulBlock","src":"35929:746:124","statements":[{"nodeType":"YulAssignment","src":"35939:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35951:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35962:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35947:3:124"},"nodeType":"YulFunctionCall","src":"35947:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"35939:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35982:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"35993:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35975:6:124"},"nodeType":"YulFunctionCall","src":"35975:25:124"},"nodeType":"YulExpressionStatement","src":"35975:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36020:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36031:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36016:3:124"},"nodeType":"YulFunctionCall","src":"36016:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"36036:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36009:6:124"},"nodeType":"YulFunctionCall","src":"36009:34:124"},"nodeType":"YulExpressionStatement","src":"36009:34:124"},{"nodeType":"YulVariableDeclaration","src":"36052:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"36062:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"36056:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36124:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36135:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36120:3:124"},"nodeType":"YulFunctionCall","src":"36120:18:124"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36150:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36144:5:124"},"nodeType":"YulFunctionCall","src":"36144:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36159:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36140:3:124"},"nodeType":"YulFunctionCall","src":"36140:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36113:6:124"},"nodeType":"YulFunctionCall","src":"36113:50:124"},"nodeType":"YulExpressionStatement","src":"36113:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36194:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36179:3:124"},"nodeType":"YulFunctionCall","src":"36179:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36213:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36221:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36209:3:124"},"nodeType":"YulFunctionCall","src":"36209:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36203:5:124"},"nodeType":"YulFunctionCall","src":"36203:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36227:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36199:3:124"},"nodeType":"YulFunctionCall","src":"36199:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36172:6:124"},"nodeType":"YulFunctionCall","src":"36172:59:124"},"nodeType":"YulExpressionStatement","src":"36172:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36251:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36262:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36247:3:124"},"nodeType":"YulFunctionCall","src":"36247:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36282:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36290:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36278:3:124"},"nodeType":"YulFunctionCall","src":"36278:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36272:5:124"},"nodeType":"YulFunctionCall","src":"36272:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36296:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36268:3:124"},"nodeType":"YulFunctionCall","src":"36268:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36240:6:124"},"nodeType":"YulFunctionCall","src":"36240:60:124"},"nodeType":"YulExpressionStatement","src":"36240:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36320:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36331:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36316:3:124"},"nodeType":"YulFunctionCall","src":"36316:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36351:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36359:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36347:3:124"},"nodeType":"YulFunctionCall","src":"36347:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36341:5:124"},"nodeType":"YulFunctionCall","src":"36341:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36365:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36337:3:124"},"nodeType":"YulFunctionCall","src":"36337:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36309:6:124"},"nodeType":"YulFunctionCall","src":"36309:60:124"},"nodeType":"YulExpressionStatement","src":"36309:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36389:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36400:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36385:3:124"},"nodeType":"YulFunctionCall","src":"36385:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36420:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36428:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36416:3:124"},"nodeType":"YulFunctionCall","src":"36416:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36410:5:124"},"nodeType":"YulFunctionCall","src":"36410:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36435:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36406:3:124"},"nodeType":"YulFunctionCall","src":"36406:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36378:6:124"},"nodeType":"YulFunctionCall","src":"36378:61:124"},"nodeType":"YulExpressionStatement","src":"36378:61:124"},{"nodeType":"YulVariableDeclaration","src":"36448:43:124","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36478:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36486:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36474:3:124"},"nodeType":"YulFunctionCall","src":"36474:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36468:5:124"},"nodeType":"YulFunctionCall","src":"36468:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"36452:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"36518:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36536:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36547:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36532:3:124"},"nodeType":"YulFunctionCall","src":"36532:19:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"36500:17:124"},"nodeType":"YulFunctionCall","src":"36500:52:124"},"nodeType":"YulExpressionStatement","src":"36500:52:124"},{"nodeType":"YulVariableDeclaration","src":"36561:45:124","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36593:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"36601:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36589:3:124"},"nodeType":"YulFunctionCall","src":"36589:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36583:5:124"},"nodeType":"YulFunctionCall","src":"36583:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"36565:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"36633:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36653:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36664:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36649:3:124"},"nodeType":"YulFunctionCall","src":"36649:19:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"36615:17:124"},"nodeType":"YulFunctionCall","src":"36615:54:124"},"nodeType":"YulExpressionStatement","src":"36615:54:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35882:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"35893:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"35901:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"35909:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"35920:4:124","type":""}],"src":"35615:1060:124"},{"body":{"nodeType":"YulBlock","src":"36758:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"36804:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36813:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36816:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"36806:6:124"},"nodeType":"YulFunctionCall","src":"36806:12:124"},"nodeType":"YulExpressionStatement","src":"36806:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"36779:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"36788:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36775:3:124"},"nodeType":"YulFunctionCall","src":"36775:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"36800:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"36771:3:124"},"nodeType":"YulFunctionCall","src":"36771:32:124"},"nodeType":"YulIf","src":"36768:52:124"},{"nodeType":"YulVariableDeclaration","src":"36829:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36848:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36842:5:124"},"nodeType":"YulFunctionCall","src":"36842:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"36833:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"36889:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"36867:21:124"},"nodeType":"YulFunctionCall","src":"36867:28:124"},"nodeType":"YulExpressionStatement","src":"36867:28:124"},{"nodeType":"YulAssignment","src":"36904:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"36914:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"36904:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36724:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"36735:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"36747:6:124","type":""}],"src":"36680:245:124"},{"body":{"nodeType":"YulBlock","src":"36962:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36979:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36982:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36972:6:124"},"nodeType":"YulFunctionCall","src":"36972:88:124"},"nodeType":"YulExpressionStatement","src":"36972:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37076:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"37079:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37069:6:124"},"nodeType":"YulFunctionCall","src":"37069:15:124"},"nodeType":"YulExpressionStatement","src":"37069:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"37100:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"37103:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"37093:6:124"},"nodeType":"YulFunctionCall","src":"37093:15:124"},"nodeType":"YulExpressionStatement","src":"37093:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"36930:184:124"},{"body":{"nodeType":"YulBlock","src":"37165:151:124","statements":[{"nodeType":"YulVariableDeclaration","src":"37175:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"37185:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"37179:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"37200:29:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37219:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37226:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37215:3:124"},"nodeType":"YulFunctionCall","src":"37215:14:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"37204:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"37257:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"37259:16:124"},"nodeType":"YulFunctionCall","src":"37259:18:124"},"nodeType":"YulExpressionStatement","src":"37259:18:124"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"37244:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37253:2:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"37241:2:124"},"nodeType":"YulFunctionCall","src":"37241:15:124"},"nodeType":"YulIf","src":"37238:41:124"},{"nodeType":"YulAssignment","src":"37288:22:124","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"37299:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"37308:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37295:3:124"},"nodeType":"YulFunctionCall","src":"37295:15:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"37288:3:124"}]}]},"name":"increment_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"37147:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"37157:3:124","type":""}],"src":"37119:197:124"},{"body":{"nodeType":"YulBlock","src":"37597:281:124","statements":[{"nodeType":"YulAssignment","src":"37607:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37619:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37630:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37615:3:124"},"nodeType":"YulFunctionCall","src":"37615:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37607:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37650:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"37661:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37643:6:124"},"nodeType":"YulFunctionCall","src":"37643:25:124"},"nodeType":"YulExpressionStatement","src":"37643:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37699:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37684:3:124"},"nodeType":"YulFunctionCall","src":"37684:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"37704:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37677:6:124"},"nodeType":"YulFunctionCall","src":"37677:34:124"},"nodeType":"YulExpressionStatement","src":"37677:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37731:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37742:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37727:3:124"},"nodeType":"YulFunctionCall","src":"37727:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"37751:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"37759:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37747:3:124"},"nodeType":"YulFunctionCall","src":"37747:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37720:6:124"},"nodeType":"YulFunctionCall","src":"37720:83:124"},"nodeType":"YulExpressionStatement","src":"37720:83:124"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"37845:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37857:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37868:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37853:3:124"},"nodeType":"YulFunctionCall","src":"37853:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"37812:32:124"},"nodeType":"YulFunctionCall","src":"37812:60:124"},"nodeType":"YulExpressionStatement","src":"37812:60:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37542:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"37553:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"37561:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"37569:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"37577:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37588:4:124","type":""}],"src":"37321:557:124"},{"body":{"nodeType":"YulBlock","src":"38132:610:124","statements":[{"nodeType":"YulVariableDeclaration","src":"38142:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38160:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38171:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38156:3:124"},"nodeType":"YulFunctionCall","src":"38156:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"38146:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38190:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"38201:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38183:6:124"},"nodeType":"YulFunctionCall","src":"38183:25:124"},"nodeType":"YulExpressionStatement","src":"38183:25:124"},{"nodeType":"YulVariableDeclaration","src":"38217:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"38227:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"38221:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38249:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"38260:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38245:3:124"},"nodeType":"YulFunctionCall","src":"38245:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"38265:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38238:6:124"},"nodeType":"YulFunctionCall","src":"38238:30:124"},"nodeType":"YulExpressionStatement","src":"38238:30:124"},{"nodeType":"YulVariableDeclaration","src":"38277:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"38288:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"38281:3:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"38310:6:124"},{"name":"value2","nodeType":"YulIdentifier","src":"38318:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38303:6:124"},"nodeType":"YulFunctionCall","src":"38303:22:124"},"nodeType":"YulExpressionStatement","src":"38303:22:124"},{"nodeType":"YulAssignment","src":"38334:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38345:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38356:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38341:3:124"},"nodeType":"YulFunctionCall","src":"38341:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"38334:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"38368:20:124","value":{"name":"value1","nodeType":"YulIdentifier","src":"38382:6:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"38372:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"38397:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"38406:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"38401:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"38465:251:124","statements":[{"nodeType":"YulVariableDeclaration","src":"38479:33:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"38505:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"38492:12:124"},"nodeType":"YulFunctionCall","src":"38492:20:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"38483:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"38550:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"38525:24:124"},"nodeType":"YulFunctionCall","src":"38525:31:124"},"nodeType":"YulExpressionStatement","src":"38525:31:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"38576:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"38585:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"38592:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"38581:3:124"},"nodeType":"YulFunctionCall","src":"38581:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38569:6:124"},"nodeType":"YulFunctionCall","src":"38569:67:124"},"nodeType":"YulExpressionStatement","src":"38569:67:124"},{"nodeType":"YulAssignment","src":"38649:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"38660:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"38665:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38656:3:124"},"nodeType":"YulFunctionCall","src":"38656:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"38649:3:124"}]},{"nodeType":"YulAssignment","src":"38681:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"38695:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"38703:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38691:3:124"},"nodeType":"YulFunctionCall","src":"38691:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"38681:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"38427:1:124"},{"name":"value2","nodeType":"YulIdentifier","src":"38430:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"38424:2:124"},"nodeType":"YulFunctionCall","src":"38424:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"38438:18:124","statements":[{"nodeType":"YulAssignment","src":"38440:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"38449:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"38452:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38445:3:124"},"nodeType":"YulFunctionCall","src":"38445:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"38440:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"38420:3:124","statements":[]},"src":"38416:300:124"},{"nodeType":"YulAssignment","src":"38725:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"38733:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"38725:4:124"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"38085:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"38096:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"38104:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"38112:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"38123:4:124","type":""}],"src":"37883:859:124"},{"body":{"nodeType":"YulBlock","src":"39209:1498:124","statements":[{"nodeType":"YulAssignment","src":"39219:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39231:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39242:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39227:3:124"},"nodeType":"YulFunctionCall","src":"39227:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"39219:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39262:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"39273:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39255:6:124"},"nodeType":"YulFunctionCall","src":"39255:25:124"},"nodeType":"YulExpressionStatement","src":"39255:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39300:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39311:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39296:3:124"},"nodeType":"YulFunctionCall","src":"39296:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"39316:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39289:6:124"},"nodeType":"YulFunctionCall","src":"39289:34:124"},"nodeType":"YulExpressionStatement","src":"39289:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39343:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39354:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39339:3:124"},"nodeType":"YulFunctionCall","src":"39339:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"39359:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39332:6:124"},"nodeType":"YulFunctionCall","src":"39332:34:124"},"nodeType":"YulExpressionStatement","src":"39332:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39386:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39397:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39382:3:124"},"nodeType":"YulFunctionCall","src":"39382:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"39402:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39375:6:124"},"nodeType":"YulFunctionCall","src":"39375:34:124"},"nodeType":"YulExpressionStatement","src":"39375:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39443:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39437:5:124"},"nodeType":"YulFunctionCall","src":"39437:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39456:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39467:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39452:3:124"},"nodeType":"YulFunctionCall","src":"39452:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39418:18:124"},"nodeType":"YulFunctionCall","src":"39418:54:124"},"nodeType":"YulExpressionStatement","src":"39418:54:124"},{"nodeType":"YulVariableDeclaration","src":"39481:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39511:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39519:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39507:3:124"},"nodeType":"YulFunctionCall","src":"39507:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39501:5:124"},"nodeType":"YulFunctionCall","src":"39501:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"39485:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"39551:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39569:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39580:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39565:3:124"},"nodeType":"YulFunctionCall","src":"39565:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39532:18:124"},"nodeType":"YulFunctionCall","src":"39532:53:124"},"nodeType":"YulExpressionStatement","src":"39532:53:124"},{"nodeType":"YulVariableDeclaration","src":"39594:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39626:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39634:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39622:3:124"},"nodeType":"YulFunctionCall","src":"39622:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39616:5:124"},"nodeType":"YulFunctionCall","src":"39616:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"39598:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"39666:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39686:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39697:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39682:3:124"},"nodeType":"YulFunctionCall","src":"39682:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39647:18:124"},"nodeType":"YulFunctionCall","src":"39647:55:124"},"nodeType":"YulExpressionStatement","src":"39647:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39722:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39733:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39718:3:124"},"nodeType":"YulFunctionCall","src":"39718:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39749:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39757:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39745:3:124"},"nodeType":"YulFunctionCall","src":"39745:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39739:5:124"},"nodeType":"YulFunctionCall","src":"39739:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39711:6:124"},"nodeType":"YulFunctionCall","src":"39711:51:124"},"nodeType":"YulExpressionStatement","src":"39711:51:124"},{"nodeType":"YulVariableDeclaration","src":"39771:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39803:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39811:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39799:3:124"},"nodeType":"YulFunctionCall","src":"39799:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39793:5:124"},"nodeType":"YulFunctionCall","src":"39793:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"39775:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39825:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39835:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"39829:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"39880:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39900:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39911:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39896:3:124"},"nodeType":"YulFunctionCall","src":"39896:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"39847:32:124"},"nodeType":"YulFunctionCall","src":"39847:68:124"},"nodeType":"YulExpressionStatement","src":"39847:68:124"},{"nodeType":"YulVariableDeclaration","src":"39924:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39956:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39964:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39952:3:124"},"nodeType":"YulFunctionCall","src":"39952:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39946:5:124"},"nodeType":"YulFunctionCall","src":"39946:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"39928:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39978:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39988:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"39982:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"40018:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40038:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"40049:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40034:3:124"},"nodeType":"YulFunctionCall","src":"40034:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"40000:17:124"},"nodeType":"YulFunctionCall","src":"40000:53:124"},"nodeType":"YulExpressionStatement","src":"40000:53:124"},{"nodeType":"YulVariableDeclaration","src":"40062:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40094:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"40102:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40090:3:124"},"nodeType":"YulFunctionCall","src":"40090:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40084:5:124"},"nodeType":"YulFunctionCall","src":"40084:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"40066:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40116:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40126:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"40120:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"40154:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40174:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"40185:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40170:3:124"},"nodeType":"YulFunctionCall","src":"40170:18:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"40138:15:124"},"nodeType":"YulFunctionCall","src":"40138:51:124"},"nodeType":"YulExpressionStatement","src":"40138:51:124"},{"nodeType":"YulVariableDeclaration","src":"40198:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40218:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"40226:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40214:3:124"},"nodeType":"YulFunctionCall","src":"40214:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40208:5:124"},"nodeType":"YulFunctionCall","src":"40208:23:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"40202:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40240:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40250:3:124","type":"","value":"352"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"40244:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40273:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"40284:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40269:3:124"},"nodeType":"YulFunctionCall","src":"40269:18:124"},{"name":"_4","nodeType":"YulIdentifier","src":"40289:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40262:6:124"},"nodeType":"YulFunctionCall","src":"40262:30:124"},"nodeType":"YulExpressionStatement","src":"40262:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40312:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40323:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40308:3:124"},"nodeType":"YulFunctionCall","src":"40308:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40339:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40347:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40335:3:124"},"nodeType":"YulFunctionCall","src":"40335:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40329:5:124"},"nodeType":"YulFunctionCall","src":"40329:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40301:6:124"},"nodeType":"YulFunctionCall","src":"40301:51:124"},"nodeType":"YulExpressionStatement","src":"40301:51:124"},{"nodeType":"YulVariableDeclaration","src":"40361:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40393:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"40401:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40389:3:124"},"nodeType":"YulFunctionCall","src":"40389:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40383:5:124"},"nodeType":"YulFunctionCall","src":"40383:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"40365:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"40433:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40453:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40464:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40449:3:124"},"nodeType":"YulFunctionCall","src":"40449:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"40414:18:124"},"nodeType":"YulFunctionCall","src":"40414:55:124"},"nodeType":"YulExpressionStatement","src":"40414:55:124"},{"nodeType":"YulVariableDeclaration","src":"40478:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40510:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"40518:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40506:3:124"},"nodeType":"YulFunctionCall","src":"40506:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40500:5:124"},"nodeType":"YulFunctionCall","src":"40500:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"40482:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"40548:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40568:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40579:3:124","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40564:3:124"},"nodeType":"YulFunctionCall","src":"40564:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"40531:16:124"},"nodeType":"YulFunctionCall","src":"40531:53:124"},"nodeType":"YulExpressionStatement","src":"40531:53:124"},{"nodeType":"YulVariableDeclaration","src":"40593:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"40625:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"40633:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40621:3:124"},"nodeType":"YulFunctionCall","src":"40621:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40615:5:124"},"nodeType":"YulFunctionCall","src":"40615:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"40597:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"40665:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40685:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"40696:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40681:3:124"},"nodeType":"YulFunctionCall","src":"40681:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"40646:18:124"},"nodeType":"YulFunctionCall","src":"40646:55:124"},"nodeType":"YulExpressionStatement","src":"40646:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"39146:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"39157:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"39165:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"39173:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"39181:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"39189:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"39200:4:124","type":""}],"src":"38747:1960:124"},{"body":{"nodeType":"YulBlock","src":"40773:423:124","statements":[{"nodeType":"YulVariableDeclaration","src":"40783:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40803:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40797:5:124"},"nodeType":"YulFunctionCall","src":"40797:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"40787:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40825:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"40830:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40818:6:124"},"nodeType":"YulFunctionCall","src":"40818:19:124"},"nodeType":"YulExpressionStatement","src":"40818:19:124"},{"nodeType":"YulVariableDeclaration","src":"40846:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40856:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"40850:2:124","type":""}]},{"nodeType":"YulAssignment","src":"40869:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40880:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40885:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40876:3:124"},"nodeType":"YulFunctionCall","src":"40876:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40869:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"40897:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40915:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40922:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40911:3:124"},"nodeType":"YulFunctionCall","src":"40911:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"40901:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40934:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40943:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"40938:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"41002:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41023:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41038:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41032:5:124"},"nodeType":"YulFunctionCall","src":"41032:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"41047:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"41028:3:124"},"nodeType":"YulFunctionCall","src":"41028:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41016:6:124"},"nodeType":"YulFunctionCall","src":"41016:75:124"},"nodeType":"YulExpressionStatement","src":"41016:75:124"},{"nodeType":"YulAssignment","src":"41104:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41115:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41120:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41111:3:124"},"nodeType":"YulFunctionCall","src":"41111:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"41104:3:124"}]},{"nodeType":"YulAssignment","src":"41136:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41150:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41158:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41146:3:124"},"nodeType":"YulFunctionCall","src":"41146:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41136:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40964:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"40967:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"40961:2:124"},"nodeType":"YulFunctionCall","src":"40961:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"40975:18:124","statements":[{"nodeType":"YulAssignment","src":"40977:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40986:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"40989:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40982:3:124"},"nodeType":"YulFunctionCall","src":"40982:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"40977:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"40957:3:124","statements":[]},"src":"40953:218:124"},{"nodeType":"YulAssignment","src":"41180:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"41187:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"41180:3:124"}]}]},"name":"abi_encode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"40750:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"40757:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"40765:3:124","type":""}],"src":"40712:484:124"},{"body":{"nodeType":"YulBlock","src":"41262:374:124","statements":[{"nodeType":"YulVariableDeclaration","src":"41272:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"41292:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41286:5:124"},"nodeType":"YulFunctionCall","src":"41286:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"41276:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41314:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"41319:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41307:6:124"},"nodeType":"YulFunctionCall","src":"41307:19:124"},"nodeType":"YulExpressionStatement","src":"41307:19:124"},{"nodeType":"YulVariableDeclaration","src":"41335:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41345:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"41339:2:124","type":""}]},{"nodeType":"YulAssignment","src":"41358:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41369:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41374:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41365:3:124"},"nodeType":"YulFunctionCall","src":"41365:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"41358:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"41386:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"41404:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41411:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41400:3:124"},"nodeType":"YulFunctionCall","src":"41400:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"41390:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41423:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41432:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"41427:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"41491:120:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41512:3:124"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41523:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41517:5:124"},"nodeType":"YulFunctionCall","src":"41517:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41505:6:124"},"nodeType":"YulFunctionCall","src":"41505:26:124"},"nodeType":"YulExpressionStatement","src":"41505:26:124"},{"nodeType":"YulAssignment","src":"41544:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"41555:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41560:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41551:3:124"},"nodeType":"YulFunctionCall","src":"41551:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"41544:3:124"}]},{"nodeType":"YulAssignment","src":"41576:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41590:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41598:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41586:3:124"},"nodeType":"YulFunctionCall","src":"41586:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"41576:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"41453:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"41456:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"41450:2:124"},"nodeType":"YulFunctionCall","src":"41450:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"41464:18:124","statements":[{"nodeType":"YulAssignment","src":"41466:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"41475:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"41478:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41471:3:124"},"nodeType":"YulFunctionCall","src":"41471:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"41466:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"41446:3:124","statements":[]},"src":"41442:169:124"},{"nodeType":"YulAssignment","src":"41620:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"41627:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"41620:3:124"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41239:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"41246:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"41254:3:124","type":""}],"src":"41201:435:124"},{"body":{"nodeType":"YulBlock","src":"42095:2157:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42112:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"42123:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42105:6:124"},"nodeType":"YulFunctionCall","src":"42105:25:124"},"nodeType":"YulExpressionStatement","src":"42105:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42150:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42161:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42146:3:124"},"nodeType":"YulFunctionCall","src":"42146:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"42166:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42139:6:124"},"nodeType":"YulFunctionCall","src":"42139:34:124"},"nodeType":"YulExpressionStatement","src":"42139:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42193:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42204:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42189:3:124"},"nodeType":"YulFunctionCall","src":"42189:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"42209:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42182:6:124"},"nodeType":"YulFunctionCall","src":"42182:34:124"},"nodeType":"YulExpressionStatement","src":"42182:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42236:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42247:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42232:3:124"},"nodeType":"YulFunctionCall","src":"42232:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"42252:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42225:6:124"},"nodeType":"YulFunctionCall","src":"42225:34:124"},"nodeType":"YulExpressionStatement","src":"42225:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42279:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42290:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42275:3:124"},"nodeType":"YulFunctionCall","src":"42275:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"42296:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42268:6:124"},"nodeType":"YulFunctionCall","src":"42268:32:124"},"nodeType":"YulExpressionStatement","src":"42268:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42334:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42328:5:124"},"nodeType":"YulFunctionCall","src":"42328:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42347:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42358:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42343:3:124"},"nodeType":"YulFunctionCall","src":"42343:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"42309:18:124"},"nodeType":"YulFunctionCall","src":"42309:54:124"},"nodeType":"YulExpressionStatement","src":"42309:54:124"},{"nodeType":"YulVariableDeclaration","src":"42372:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42402:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42410:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42398:3:124"},"nodeType":"YulFunctionCall","src":"42398:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42392:5:124"},"nodeType":"YulFunctionCall","src":"42392:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"42376:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42423:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42433:6:124","type":"","value":"0x01c0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"42427:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42459:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42470:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42455:3:124"},"nodeType":"YulFunctionCall","src":"42455:19:124"},{"name":"_1","nodeType":"YulIdentifier","src":"42476:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42448:6:124"},"nodeType":"YulFunctionCall","src":"42448:31:124"},"nodeType":"YulExpressionStatement","src":"42448:31:124"},{"nodeType":"YulVariableDeclaration","src":"42488:77:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"42531:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42549:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42560:3:124","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42545:3:124"},"nodeType":"YulFunctionCall","src":"42545:19:124"}],"functionName":{"name":"abi_encode_array_address_dyn","nodeType":"YulIdentifier","src":"42502:28:124"},"nodeType":"YulFunctionCall","src":"42502:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"42492:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42574:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42606:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42614:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42602:3:124"},"nodeType":"YulFunctionCall","src":"42602:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42596:5:124"},"nodeType":"YulFunctionCall","src":"42596:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"42578:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42627:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42637:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"42631:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42723:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"42734:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42719:3:124"},"nodeType":"YulFunctionCall","src":"42719:19:124"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"42748:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"42756:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42744:3:124"},"nodeType":"YulFunctionCall","src":"42744:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"42768:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42740:3:124"},"nodeType":"YulFunctionCall","src":"42740:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42712:6:124"},"nodeType":"YulFunctionCall","src":"42712:60:124"},"nodeType":"YulExpressionStatement","src":"42712:60:124"},{"nodeType":"YulVariableDeclaration","src":"42781:66:124","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"42824:14:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"42840:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"42795:28:124"},"nodeType":"YulFunctionCall","src":"42795:52:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"42785:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42856:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42888:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42896:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42884:3:124"},"nodeType":"YulFunctionCall","src":"42884:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42878:5:124"},"nodeType":"YulFunctionCall","src":"42878:22:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"42860:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42909:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42919:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"42913:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42942:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"42953:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42938:3:124"},"nodeType":"YulFunctionCall","src":"42938:18:124"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"42966:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"42974:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42962:3:124"},"nodeType":"YulFunctionCall","src":"42962:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"42986:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42958:3:124"},"nodeType":"YulFunctionCall","src":"42958:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42931:6:124"},"nodeType":"YulFunctionCall","src":"42931:59:124"},"nodeType":"YulExpressionStatement","src":"42931:59:124"},{"nodeType":"YulVariableDeclaration","src":"42999:66:124","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"43042:14:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"43058:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"43013:28:124"},"nodeType":"YulFunctionCall","src":"43013:52:124"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"43003:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43074:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43106:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43114:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43102:3:124"},"nodeType":"YulFunctionCall","src":"43102:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43096:5:124"},"nodeType":"YulFunctionCall","src":"43096:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"43078:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43128:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43138:3:124","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"43132:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"43169:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43189:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"43200:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43185:3:124"},"nodeType":"YulFunctionCall","src":"43185:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"43150:18:124"},"nodeType":"YulFunctionCall","src":"43150:54:124"},"nodeType":"YulExpressionStatement","src":"43150:54:124"},{"nodeType":"YulVariableDeclaration","src":"43213:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43245:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43253:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43241:3:124"},"nodeType":"YulFunctionCall","src":"43241:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43235:5:124"},"nodeType":"YulFunctionCall","src":"43235:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"43217:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43267:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43277:3:124","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"43271:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43300:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"43311:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43296:3:124"},"nodeType":"YulFunctionCall","src":"43296:18:124"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"43324:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"43332:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"43320:3:124"},"nodeType":"YulFunctionCall","src":"43320:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"43344:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43316:3:124"},"nodeType":"YulFunctionCall","src":"43316:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43289:6:124"},"nodeType":"YulFunctionCall","src":"43289:59:124"},"nodeType":"YulExpressionStatement","src":"43289:59:124"},{"nodeType":"YulVariableDeclaration","src":"43357:55:124","value":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"43389:14:124"},{"name":"tail_3","nodeType":"YulIdentifier","src":"43405:6:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"43371:17:124"},"nodeType":"YulFunctionCall","src":"43371:41:124"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"43361:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43421:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43453:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43461:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43449:3:124"},"nodeType":"YulFunctionCall","src":"43449:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43443:5:124"},"nodeType":"YulFunctionCall","src":"43443:23:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"43425:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43475:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43485:3:124","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"43479:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"43515:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43535:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"43546:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43531:3:124"},"nodeType":"YulFunctionCall","src":"43531:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"43497:17:124"},"nodeType":"YulFunctionCall","src":"43497:53:124"},"nodeType":"YulExpressionStatement","src":"43497:53:124"},{"nodeType":"YulVariableDeclaration","src":"43559:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43579:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"43587:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43575:3:124"},"nodeType":"YulFunctionCall","src":"43575:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43569:5:124"},"nodeType":"YulFunctionCall","src":"43569:23:124"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"43563:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43601:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43611:3:124","type":"","value":"384"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"43605:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43634:9:124"},{"name":"_8","nodeType":"YulIdentifier","src":"43645:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43630:3:124"},"nodeType":"YulFunctionCall","src":"43630:18:124"},{"name":"_7","nodeType":"YulIdentifier","src":"43650:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43623:6:124"},"nodeType":"YulFunctionCall","src":"43623:30:124"},"nodeType":"YulExpressionStatement","src":"43623:30:124"},{"nodeType":"YulVariableDeclaration","src":"43662:32:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43682:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"43690:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43678:3:124"},"nodeType":"YulFunctionCall","src":"43678:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43672:5:124"},"nodeType":"YulFunctionCall","src":"43672:22:124"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"43666:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43703:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"43714:3:124","type":"","value":"416"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"43707:3:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43737:9:124"},{"name":"_10","nodeType":"YulIdentifier","src":"43748:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43733:3:124"},"nodeType":"YulFunctionCall","src":"43733:19:124"},{"name":"_9","nodeType":"YulIdentifier","src":"43754:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43726:6:124"},"nodeType":"YulFunctionCall","src":"43726:31:124"},"nodeType":"YulExpressionStatement","src":"43726:31:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43777:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"43788:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43773:3:124"},"nodeType":"YulFunctionCall","src":"43773:18:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43803:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"43811:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43799:3:124"},"nodeType":"YulFunctionCall","src":"43799:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43793:5:124"},"nodeType":"YulFunctionCall","src":"43793:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43766:6:124"},"nodeType":"YulFunctionCall","src":"43766:50:124"},"nodeType":"YulExpressionStatement","src":"43766:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43836:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43847:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43832:3:124"},"nodeType":"YulFunctionCall","src":"43832:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43863:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"43871:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43859:3:124"},"nodeType":"YulFunctionCall","src":"43859:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43853:5:124"},"nodeType":"YulFunctionCall","src":"43853:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43825:6:124"},"nodeType":"YulFunctionCall","src":"43825:51:124"},"nodeType":"YulExpressionStatement","src":"43825:51:124"},{"nodeType":"YulVariableDeclaration","src":"43885:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43917:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"43925:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43913:3:124"},"nodeType":"YulFunctionCall","src":"43913:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43907:5:124"},"nodeType":"YulFunctionCall","src":"43907:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"43889:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"43957:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43977:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43988:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43973:3:124"},"nodeType":"YulFunctionCall","src":"43973:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"43938:18:124"},"nodeType":"YulFunctionCall","src":"43938:55:124"},"nodeType":"YulExpressionStatement","src":"43938:55:124"},{"nodeType":"YulVariableDeclaration","src":"44002:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"44034:6:124"},{"name":"_8","nodeType":"YulIdentifier","src":"44042:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44030:3:124"},"nodeType":"YulFunctionCall","src":"44030:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44024:5:124"},"nodeType":"YulFunctionCall","src":"44024:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"44006:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"44072:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44092:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44103:3:124","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44088:3:124"},"nodeType":"YulFunctionCall","src":"44088:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"44055:16:124"},"nodeType":"YulFunctionCall","src":"44055:53:124"},"nodeType":"YulExpressionStatement","src":"44055:53:124"},{"nodeType":"YulVariableDeclaration","src":"44117:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"44149:6:124"},{"name":"_10","nodeType":"YulIdentifier","src":"44157:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44145:3:124"},"nodeType":"YulFunctionCall","src":"44145:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44139:5:124"},"nodeType":"YulFunctionCall","src":"44139:23:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"44121:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"44187:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44207:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44218:3:124","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44203:3:124"},"nodeType":"YulFunctionCall","src":"44203:19:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"44171:15:124"},"nodeType":"YulFunctionCall","src":"44171:52:124"},"nodeType":"YulExpressionStatement","src":"44171:52:124"},{"nodeType":"YulAssignment","src":"44232:14:124","value":{"name":"tail_4","nodeType":"YulIdentifier","src":"44240:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"44232:4:124"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"42032:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"42043:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"42051:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"42059:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"42067:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"42075:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"42086:4:124","type":""}],"src":"41641:2611:124"},{"body":{"nodeType":"YulBlock","src":"44677:592:124","statements":[{"nodeType":"YulAssignment","src":"44687:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44699:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44710:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44695:3:124"},"nodeType":"YulFunctionCall","src":"44695:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"44687:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44730:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"44741:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44723:6:124"},"nodeType":"YulFunctionCall","src":"44723:25:124"},"nodeType":"YulExpressionStatement","src":"44723:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44768:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44779:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44764:3:124"},"nodeType":"YulFunctionCall","src":"44764:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"44784:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44757:6:124"},"nodeType":"YulFunctionCall","src":"44757:34:124"},"nodeType":"YulExpressionStatement","src":"44757:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44822:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44807:3:124"},"nodeType":"YulFunctionCall","src":"44807:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"44827:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44800:6:124"},"nodeType":"YulFunctionCall","src":"44800:34:124"},"nodeType":"YulExpressionStatement","src":"44800:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44854:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44865:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44850:3:124"},"nodeType":"YulFunctionCall","src":"44850:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44882:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44876:5:124"},"nodeType":"YulFunctionCall","src":"44876:13:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44870:5:124"},"nodeType":"YulFunctionCall","src":"44870:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44843:6:124"},"nodeType":"YulFunctionCall","src":"44843:48:124"},"nodeType":"YulExpressionStatement","src":"44843:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44911:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44922:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44907:3:124"},"nodeType":"YulFunctionCall","src":"44907:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44938:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44946:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44934:3:124"},"nodeType":"YulFunctionCall","src":"44934:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44928:5:124"},"nodeType":"YulFunctionCall","src":"44928:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44900:6:124"},"nodeType":"YulFunctionCall","src":"44900:51:124"},"nodeType":"YulExpressionStatement","src":"44900:51:124"},{"nodeType":"YulVariableDeclaration","src":"44960:42:124","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44990:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44998:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44986:3:124"},"nodeType":"YulFunctionCall","src":"44986:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44980:5:124"},"nodeType":"YulFunctionCall","src":"44980:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"44964:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"45011:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"45021:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"45015:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45083:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45094:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45079:3:124"},"nodeType":"YulFunctionCall","src":"45079:19:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"45104:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45118:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45100:3:124"},"nodeType":"YulFunctionCall","src":"45100:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45072:6:124"},"nodeType":"YulFunctionCall","src":"45072:50:124"},"nodeType":"YulExpressionStatement","src":"45072:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45142:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45153:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45138:3:124"},"nodeType":"YulFunctionCall","src":"45138:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"45173:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"45181:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45169:3:124"},"nodeType":"YulFunctionCall","src":"45169:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45163:5:124"},"nodeType":"YulFunctionCall","src":"45163:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45187:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45159:3:124"},"nodeType":"YulFunctionCall","src":"45159:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45131:6:124"},"nodeType":"YulFunctionCall","src":"45131:60:124"},"nodeType":"YulExpressionStatement","src":"45131:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45211:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45222:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45207:3:124"},"nodeType":"YulFunctionCall","src":"45207:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"45242:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"45250:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45238:3:124"},"nodeType":"YulFunctionCall","src":"45238:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45232:5:124"},"nodeType":"YulFunctionCall","src":"45232:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"45257:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45228:3:124"},"nodeType":"YulFunctionCall","src":"45228:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45200:6:124"},"nodeType":"YulFunctionCall","src":"45200:63:124"},"nodeType":"YulExpressionStatement","src":"45200:63:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"44622:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"44633:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"44641:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"44649:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"44657:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"44668:4:124","type":""}],"src":"44257:1012:124"},{"body":{"nodeType":"YulBlock","src":"45440:326:124","statements":[{"body":{"nodeType":"YulBlock","src":"45487:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"45496:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"45499:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"45489:6:124"},"nodeType":"YulFunctionCall","src":"45489:12:124"},"nodeType":"YulExpressionStatement","src":"45489:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"45461:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"45470:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"45457:3:124"},"nodeType":"YulFunctionCall","src":"45457:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"45482:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"45453:3:124"},"nodeType":"YulFunctionCall","src":"45453:33:124"},"nodeType":"YulIf","src":"45450:53:124"},{"nodeType":"YulAssignment","src":"45512:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45528:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45522:5:124"},"nodeType":"YulFunctionCall","src":"45522:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"45512:6:124"}]},{"nodeType":"YulAssignment","src":"45547:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45567:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45578:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45563:3:124"},"nodeType":"YulFunctionCall","src":"45563:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45557:5:124"},"nodeType":"YulFunctionCall","src":"45557:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"45547:6:124"}]},{"nodeType":"YulAssignment","src":"45591:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45611:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45622:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45607:3:124"},"nodeType":"YulFunctionCall","src":"45607:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45601:5:124"},"nodeType":"YulFunctionCall","src":"45601:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"45591:6:124"}]},{"nodeType":"YulAssignment","src":"45635:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45655:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45666:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45651:3:124"},"nodeType":"YulFunctionCall","src":"45651:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45645:5:124"},"nodeType":"YulFunctionCall","src":"45645:25:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"45635:6:124"}]},{"nodeType":"YulAssignment","src":"45679:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45699:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45710:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45695:3:124"},"nodeType":"YulFunctionCall","src":"45695:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45689:5:124"},"nodeType":"YulFunctionCall","src":"45689:26:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"45679:6:124"}]},{"nodeType":"YulAssignment","src":"45724:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45744:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45755:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45740:3:124"},"nodeType":"YulFunctionCall","src":"45740:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"45734:5:124"},"nodeType":"YulFunctionCall","src":"45734:26:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"45724:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45366:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"45377:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"45389:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"45397:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45405:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"45413:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"45421:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"45429:6:124","type":""}],"src":"45274:492:124"},{"body":{"nodeType":"YulBlock","src":"45945:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45962:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45973:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45955:6:124"},"nodeType":"YulFunctionCall","src":"45955:21:124"},"nodeType":"YulExpressionStatement","src":"45955:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45996:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46007:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45992:3:124"},"nodeType":"YulFunctionCall","src":"45992:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"46012:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45985:6:124"},"nodeType":"YulFunctionCall","src":"45985:30:124"},"nodeType":"YulExpressionStatement","src":"45985:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46035:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46046:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46031:3:124"},"nodeType":"YulFunctionCall","src":"46031:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"46051:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46024:6:124"},"nodeType":"YulFunctionCall","src":"46024:62:124"},"nodeType":"YulExpressionStatement","src":"46024:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46106:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46117:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46102:3:124"},"nodeType":"YulFunctionCall","src":"46102:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"46122:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46095:6:124"},"nodeType":"YulFunctionCall","src":"46095:44:124"},"nodeType":"YulExpressionStatement","src":"46095:44:124"},{"nodeType":"YulAssignment","src":"46148:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46160:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46171:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46156:3:124"},"nodeType":"YulFunctionCall","src":"46156:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46148:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45922:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45936:4:124","type":""}],"src":"45771:410:124"},{"body":{"nodeType":"YulBlock","src":"46378:241:124","statements":[{"nodeType":"YulAssignment","src":"46388:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46400:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46411:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46396:3:124"},"nodeType":"YulFunctionCall","src":"46396:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46388:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46430:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"46441:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46423:6:124"},"nodeType":"YulFunctionCall","src":"46423:25:124"},"nodeType":"YulExpressionStatement","src":"46423:25:124"},{"nodeType":"YulVariableDeclaration","src":"46457:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"46467:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"46461:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46529:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46540:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46525:3:124"},"nodeType":"YulFunctionCall","src":"46525:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"46549:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46557:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46545:3:124"},"nodeType":"YulFunctionCall","src":"46545:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46518:6:124"},"nodeType":"YulFunctionCall","src":"46518:43:124"},"nodeType":"YulExpressionStatement","src":"46518:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46581:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46592:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46577:3:124"},"nodeType":"YulFunctionCall","src":"46577:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"46601:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46609:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46597:3:124"},"nodeType":"YulFunctionCall","src":"46597:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46570:6:124"},"nodeType":"YulFunctionCall","src":"46570:43:124"},"nodeType":"YulExpressionStatement","src":"46570:43:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"46331:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"46342:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"46350:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"46358:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"46369:4:124","type":""}],"src":"46186:433:124"},{"body":{"nodeType":"YulBlock","src":"46789:241:124","statements":[{"nodeType":"YulAssignment","src":"46799:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46822:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46807:3:124"},"nodeType":"YulFunctionCall","src":"46807:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46799:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"46834:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"46844:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"46838:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46902:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"46917:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46925:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46913:3:124"},"nodeType":"YulFunctionCall","src":"46913:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46895:6:124"},"nodeType":"YulFunctionCall","src":"46895:34:124"},"nodeType":"YulExpressionStatement","src":"46895:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46949:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46960:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46945:3:124"},"nodeType":"YulFunctionCall","src":"46945:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"46969:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46977:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46965:3:124"},"nodeType":"YulFunctionCall","src":"46965:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46938:6:124"},"nodeType":"YulFunctionCall","src":"46938:43:124"},"nodeType":"YulExpressionStatement","src":"46938:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47001:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47012:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46997:3:124"},"nodeType":"YulFunctionCall","src":"46997:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"47017:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46990:6:124"},"nodeType":"YulFunctionCall","src":"46990:34:124"},"nodeType":"YulExpressionStatement","src":"46990:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"46742:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"46753:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"46761:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"46769:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"46780:4:124","type":""}],"src":"46624:406:124"},{"body":{"nodeType":"YulBlock","src":"47084:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"47106:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"47108:16:124"},"nodeType":"YulFunctionCall","src":"47108:18:124"},"nodeType":"YulExpressionStatement","src":"47108:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"47100:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"47103:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"47097:2:124"},"nodeType":"YulFunctionCall","src":"47097:8:124"},"nodeType":"YulIf","src":"47094:34:124"},{"nodeType":"YulAssignment","src":"47137:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"47149:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"47152:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"47145:3:124"},"nodeType":"YulFunctionCall","src":"47145:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"47137:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"47066:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"47069:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"47075:4:124","type":""}],"src":"47035:125:124"},{"body":{"nodeType":"YulBlock","src":"47197:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"47214:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"47217:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47207:6:124"},"nodeType":"YulFunctionCall","src":"47207:88:124"},"nodeType":"YulExpressionStatement","src":"47207:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"47311:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"47314:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47304:6:124"},"nodeType":"YulFunctionCall","src":"47304:15:124"},"nodeType":"YulExpressionStatement","src":"47304:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"47335:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"47338:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"47328:6:124"},"nodeType":"YulFunctionCall","src":"47328:15:124"},"nodeType":"YulExpressionStatement","src":"47328:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"47165:184:124"},{"body":{"nodeType":"YulBlock","src":"47401:148:124","statements":[{"body":{"nodeType":"YulBlock","src":"47492:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"47494:16:124"},"nodeType":"YulFunctionCall","src":"47494:18:124"},"nodeType":"YulExpressionStatement","src":"47494:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"47417:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"47424:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"47414:2:124"},"nodeType":"YulFunctionCall","src":"47414:77:124"},"nodeType":"YulIf","src":"47411:103:124"},{"nodeType":"YulAssignment","src":"47523:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"47534:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"47541:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47530:3:124"},"nodeType":"YulFunctionCall","src":"47530:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"47523:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"47383:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"47393:3:124","type":""}],"src":"47354:195:124"},{"body":{"nodeType":"YulBlock","src":"48047:1027:124","statements":[{"nodeType":"YulAssignment","src":"48057:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48069:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48080:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48065:3:124"},"nodeType":"YulFunctionCall","src":"48065:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"48057:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48100:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"48111:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48093:6:124"},"nodeType":"YulFunctionCall","src":"48093:25:124"},"nodeType":"YulExpressionStatement","src":"48093:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48138:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48149:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48134:3:124"},"nodeType":"YulFunctionCall","src":"48134:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"48154:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48127:6:124"},"nodeType":"YulFunctionCall","src":"48127:34:124"},"nodeType":"YulExpressionStatement","src":"48127:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48181:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48192:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48177:3:124"},"nodeType":"YulFunctionCall","src":"48177:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"48197:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48170:6:124"},"nodeType":"YulFunctionCall","src":"48170:34:124"},"nodeType":"YulExpressionStatement","src":"48170:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48224:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48235:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48220:3:124"},"nodeType":"YulFunctionCall","src":"48220:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"48240:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48213:6:124"},"nodeType":"YulFunctionCall","src":"48213:34:124"},"nodeType":"YulExpressionStatement","src":"48213:34:124"},{"nodeType":"YulVariableDeclaration","src":"48256:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"48266:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"48260:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48328:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48339:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48324:3:124"},"nodeType":"YulFunctionCall","src":"48324:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48355:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48349:5:124"},"nodeType":"YulFunctionCall","src":"48349:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"48364:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48345:3:124"},"nodeType":"YulFunctionCall","src":"48345:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48317:6:124"},"nodeType":"YulFunctionCall","src":"48317:51:124"},"nodeType":"YulExpressionStatement","src":"48317:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48388:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48399:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48384:3:124"},"nodeType":"YulFunctionCall","src":"48384:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48419:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48427:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48415:3:124"},"nodeType":"YulFunctionCall","src":"48415:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48409:5:124"},"nodeType":"YulFunctionCall","src":"48409:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"48433:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48405:3:124"},"nodeType":"YulFunctionCall","src":"48405:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48377:6:124"},"nodeType":"YulFunctionCall","src":"48377:60:124"},"nodeType":"YulExpressionStatement","src":"48377:60:124"},{"nodeType":"YulVariableDeclaration","src":"48446:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48476:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48484:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48472:3:124"},"nodeType":"YulFunctionCall","src":"48472:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48466:5:124"},"nodeType":"YulFunctionCall","src":"48466:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"48450:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"48516:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48534:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48545:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48530:3:124"},"nodeType":"YulFunctionCall","src":"48530:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"48497:18:124"},"nodeType":"YulFunctionCall","src":"48497:53:124"},"nodeType":"YulExpressionStatement","src":"48497:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48570:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48581:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48566:3:124"},"nodeType":"YulFunctionCall","src":"48566:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48597:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48605:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48593:3:124"},"nodeType":"YulFunctionCall","src":"48593:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48587:5:124"},"nodeType":"YulFunctionCall","src":"48587:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48559:6:124"},"nodeType":"YulFunctionCall","src":"48559:51:124"},"nodeType":"YulExpressionStatement","src":"48559:51:124"},{"nodeType":"YulVariableDeclaration","src":"48619:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48639:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48647:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48635:3:124"},"nodeType":"YulFunctionCall","src":"48635:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48629:5:124"},"nodeType":"YulFunctionCall","src":"48629:23:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"48623:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"48661:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"48671:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"48665:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48694:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"48705:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48690:3:124"},"nodeType":"YulFunctionCall","src":"48690:18:124"},{"name":"_2","nodeType":"YulIdentifier","src":"48710:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48683:6:124"},"nodeType":"YulFunctionCall","src":"48683:30:124"},"nodeType":"YulExpressionStatement","src":"48683:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48733:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48744:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48729:3:124"},"nodeType":"YulFunctionCall","src":"48729:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48760:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48768:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48756:3:124"},"nodeType":"YulFunctionCall","src":"48756:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48750:5:124"},"nodeType":"YulFunctionCall","src":"48750:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48722:6:124"},"nodeType":"YulFunctionCall","src":"48722:52:124"},"nodeType":"YulExpressionStatement","src":"48722:52:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48794:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48805:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48790:3:124"},"nodeType":"YulFunctionCall","src":"48790:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48821:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48829:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48817:3:124"},"nodeType":"YulFunctionCall","src":"48817:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48811:5:124"},"nodeType":"YulFunctionCall","src":"48811:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48783:6:124"},"nodeType":"YulFunctionCall","src":"48783:52:124"},"nodeType":"YulExpressionStatement","src":"48783:52:124"},{"nodeType":"YulVariableDeclaration","src":"48844:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48876:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48884:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48872:3:124"},"nodeType":"YulFunctionCall","src":"48872:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48866:5:124"},"nodeType":"YulFunctionCall","src":"48866:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"48848:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"48917:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48937:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48948:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48933:3:124"},"nodeType":"YulFunctionCall","src":"48933:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"48898:18:124"},"nodeType":"YulFunctionCall","src":"48898:55:124"},"nodeType":"YulExpressionStatement","src":"48898:55:124"},{"nodeType":"YulVariableDeclaration","src":"48962:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48994:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"49002:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48990:3:124"},"nodeType":"YulFunctionCall","src":"48990:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48984:5:124"},"nodeType":"YulFunctionCall","src":"48984:22:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"48966:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"49032:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49052:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49063:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49048:3:124"},"nodeType":"YulFunctionCall","src":"49048:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"49015:16:124"},"nodeType":"YulFunctionCall","src":"49015:53:124"},"nodeType":"YulExpressionStatement","src":"49015:53:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"47984:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"47995:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"48003:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"48011:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"48019:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"48027:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"48038:4:124","type":""}],"src":"47554:1520:124"},{"body":{"nodeType":"YulBlock","src":"49327:299:124","statements":[{"nodeType":"YulAssignment","src":"49337:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49349:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49360:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49345:3:124"},"nodeType":"YulFunctionCall","src":"49345:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"49337:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49380:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"49391:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49373:6:124"},"nodeType":"YulFunctionCall","src":"49373:25:124"},"nodeType":"YulExpressionStatement","src":"49373:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49418:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49429:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49414:3:124"},"nodeType":"YulFunctionCall","src":"49414:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"49438:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"49446:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49434:3:124"},"nodeType":"YulFunctionCall","src":"49434:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49407:6:124"},"nodeType":"YulFunctionCall","src":"49407:83:124"},"nodeType":"YulExpressionStatement","src":"49407:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49521:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49506:3:124"},"nodeType":"YulFunctionCall","src":"49506:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"49526:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49499:6:124"},"nodeType":"YulFunctionCall","src":"49499:34:124"},"nodeType":"YulExpressionStatement","src":"49499:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49553:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49564:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49549:3:124"},"nodeType":"YulFunctionCall","src":"49549:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"49569:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49542:6:124"},"nodeType":"YulFunctionCall","src":"49542:34:124"},"nodeType":"YulExpressionStatement","src":"49542:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49596:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49607:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49592:3:124"},"nodeType":"YulFunctionCall","src":"49592:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"49613:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49585:6:124"},"nodeType":"YulFunctionCall","src":"49585:35:124"},"nodeType":"YulExpressionStatement","src":"49585:35:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49264:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"49275:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"49283:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"49291:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"49299:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"49307:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"49318:4:124","type":""}],"src":"49079:547:124"},{"body":{"nodeType":"YulBlock","src":"49820:168:124","statements":[{"nodeType":"YulAssignment","src":"49830:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49842:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49853:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49838:3:124"},"nodeType":"YulFunctionCall","src":"49838:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"49830:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49872:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"49883:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49865:6:124"},"nodeType":"YulFunctionCall","src":"49865:25:124"},"nodeType":"YulExpressionStatement","src":"49865:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49910:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49921:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49906:3:124"},"nodeType":"YulFunctionCall","src":"49906:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"49930:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"49938:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49926:3:124"},"nodeType":"YulFunctionCall","src":"49926:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49899:6:124"},"nodeType":"YulFunctionCall","src":"49899:83:124"},"nodeType":"YulExpressionStatement","src":"49899:83:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49781:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"49792:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"49800:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"49811:4:124","type":""}],"src":"49631:357:124"},{"body":{"nodeType":"YulBlock","src":"50154:49:124","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"50171:4:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"50190:5:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"50177:12:124"},"nodeType":"YulFunctionCall","src":"50177:19:124"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"50164:6:124"},"nodeType":"YulFunctionCall","src":"50164:33:124"},"nodeType":"YulExpressionStatement","src":"50164:33:124"}]},"name":"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"50137:4:124","type":""},{"name":"value","nodeType":"YulTypedName","src":"50143:5:124","type":""}],"src":"49993:210:124"},{"body":{"nodeType":"YulBlock","src":"50260:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"50379:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"50381:16:124"},"nodeType":"YulFunctionCall","src":"50381:18:124"},"nodeType":"YulExpressionStatement","src":"50381:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50291:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"50284:6:124"},"nodeType":"YulFunctionCall","src":"50284:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"50277:6:124"},"nodeType":"YulFunctionCall","src":"50277:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"50299:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50306:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"50374:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"50302:3:124"},"nodeType":"YulFunctionCall","src":"50302:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"50296:2:124"},"nodeType":"YulFunctionCall","src":"50296:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"50273:3:124"},"nodeType":"YulFunctionCall","src":"50273:105:124"},"nodeType":"YulIf","src":"50270:131:124"},{"nodeType":"YulAssignment","src":"50410:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50425:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"50428:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"50421:3:124"},"nodeType":"YulFunctionCall","src":"50421:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"50410:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"50239:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"50242:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"50248:7:124","type":""}],"src":"50208:228:124"},{"body":{"nodeType":"YulBlock","src":"50473:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50490:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50493:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50483:6:124"},"nodeType":"YulFunctionCall","src":"50483:88:124"},"nodeType":"YulExpressionStatement","src":"50483:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50587:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"50590:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50580:6:124"},"nodeType":"YulFunctionCall","src":"50580:15:124"},"nodeType":"YulExpressionStatement","src":"50580:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50611:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50614:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"50604:6:124"},"nodeType":"YulFunctionCall","src":"50604:15:124"},"nodeType":"YulExpressionStatement","src":"50604:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"50441:184:124"},{"body":{"nodeType":"YulBlock","src":"50678:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"50705:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"50707:16:124"},"nodeType":"YulFunctionCall","src":"50707:18:124"},"nodeType":"YulExpressionStatement","src":"50707:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50694:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"50701:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"50697:3:124"},"nodeType":"YulFunctionCall","src":"50697:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"50691:2:124"},"nodeType":"YulFunctionCall","src":"50691:13:124"},"nodeType":"YulIf","src":"50688:39:124"},{"nodeType":"YulAssignment","src":"50736:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50747:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"50750:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"50743:3:124"},"nodeType":"YulFunctionCall","src":"50743:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"50736:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"50661:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"50664:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"50670:3:124","type":""}],"src":"50630:128:124"},{"body":{"nodeType":"YulBlock","src":"50809:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"50840:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50861:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50864:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50854:6:124"},"nodeType":"YulFunctionCall","src":"50854:88:124"},"nodeType":"YulExpressionStatement","src":"50854:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50962:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"50965:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50955:6:124"},"nodeType":"YulFunctionCall","src":"50955:15:124"},"nodeType":"YulExpressionStatement","src":"50955:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50990:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50993:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"50983:6:124"},"nodeType":"YulFunctionCall","src":"50983:15:124"},"nodeType":"YulExpressionStatement","src":"50983:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"50829:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"50822:6:124"},"nodeType":"YulFunctionCall","src":"50822:9:124"},"nodeType":"YulIf","src":"50819:189:124"},{"nodeType":"YulAssignment","src":"51017:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"51026:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"51029:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"51022:3:124"},"nodeType":"YulFunctionCall","src":"51022:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"51017:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"50794:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"50797:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"50803:1:124","type":""}],"src":"50763:274:124"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_bool(value_3)\n        value4 := value_3\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint128(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_struct_ReserveConfigurationMap(value, pos)\n    { mstore(pos, mload(value)) }\n    function abi_encode_uint40(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffff))\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 480)\n        abi_encode_struct_ReserveConfigurationMap(mload(value0), headStart)\n        let memberValue0 := mload(add(value0, 0x20))\n        abi_encode_uint128(memberValue0, add(headStart, 0x20))\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_uint128(memberValue0_1, add(headStart, 0x40))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_uint128(memberValue0_2, add(headStart, 0x60))\n        let memberValue0_3 := mload(add(value0, 0x80))\n        abi_encode_uint128(memberValue0_3, add(headStart, 0x80))\n        let memberValue0_4 := mload(add(value0, 0xa0))\n        abi_encode_uint128(memberValue0_4, add(headStart, 0xa0))\n        let memberValue0_5 := mload(add(value0, 0xc0))\n        abi_encode_uint40(memberValue0_5, add(headStart, 0xc0))\n        let memberValue0_6 := mload(add(value0, 0xe0))\n        abi_encode_uint16(memberValue0_6, add(headStart, 0xe0))\n        let _1 := 0x0100\n        let memberValue0_7 := mload(add(value0, _1))\n        abi_encode_address(memberValue0_7, add(headStart, _1))\n        let _2 := 0x0120\n        let memberValue0_8 := mload(add(value0, _2))\n        abi_encode_address(memberValue0_8, add(headStart, _2))\n        let _3 := 0x0140\n        let memberValue0_9 := mload(add(value0, _3))\n        abi_encode_address(memberValue0_9, add(headStart, _3))\n        let _4 := 0x0160\n        let memberValue0_10 := mload(add(value0, _4))\n        abi_encode_address(memberValue0_10, add(headStart, _4))\n        let _5 := 0x0180\n        let memberValue0_11 := mload(add(value0, _5))\n        abi_encode_uint128(memberValue0_11, add(headStart, _5))\n        let _6 := 0x01a0\n        let memberValue0_12 := mload(add(value0, _6))\n        abi_encode_uint128(memberValue0_12, add(headStart, _6))\n        let _7 := 0x01c0\n        let memberValue0_13 := mload(add(value0, _7))\n        abi_encode_uint128(memberValue0_13, add(headStart, _7))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := abi_decode_uint16(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint16(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let _1 := 0xffff\n        mstore(add(headStart, 32), and(mload(value0), _1))\n        mstore(add(headStart, 64), and(mload(add(value0, 32)), _1))\n        mstore(add(headStart, 96), and(mload(add(value0, 64)), _1))\n        mstore(add(headStart, 128), and(mload(add(value0, 96)), 0xffffffffffffffffffffffffffffffffffffffff))\n        let memberValue0 := mload(add(value0, 128))\n        mstore(add(headStart, 0xa0), 0xa0)\n        tail := abi_encode_string(memberValue0, add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        let value_3 := calldataload(add(headStart, 96))\n        validator_revert_address(value_3)\n        value3 := value_3\n        let value_4 := calldataload(add(headStart, 128))\n        validator_revert_address(value_4)\n        value4 := value_4\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_uint16(add(headStart, 96))\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        value4 := value_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 32)), _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 32))), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        if gt(calldataload(add(headStart, 64)), _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 64))), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        if gt(calldataload(add(headStart, 96)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 96))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        value7 := abi_decode_address(add(headStart, 128))\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value8_1, value9_1 := abi_decode_bytes_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value8 := value8_1\n        value9 := value9_1\n        value10 := abi_decode_uint16(add(headStart, 192))\n    }\n    function abi_decode_uint128(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint128t_uint128(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint128(headStart)\n        value1 := abi_decode_uint128(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_5657() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if slt(sub(dataEnd, _3), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_5657()\n        mstore(value, abi_decode_uint16(_3))\n        mstore(add(value, _1), abi_decode_uint16(add(_3, _1)))\n        mstore(add(value, 64), abi_decode_uint16(add(_3, 64)))\n        let value_1 := calldataload(add(_3, 96))\n        validator_revert_address(value_1)\n        mstore(add(value, 96), value_1)\n        let offset_1 := calldataload(add(_3, 128))\n        if gt(offset_1, _2) { revert(0, 0) }\n        let _4 := add(_3, offset_1)\n        if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n        let _5 := calldataload(_4)\n        if gt(_5, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_5, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _5)\n        if gt(add(add(_4, _5), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_4, _1), _5)\n        mstore(add(add(array, _5), _1), 0)\n        mstore(add(value, 128), array)\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32) { revert(0, 0) }\n        value1 := add(headStart, 32)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), mload(value4))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        let memberValue0 := mload(add(value4, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 192), and(memberValue0, _1))\n        mstore(add(headStart, 224), and(mload(add(value4, 96)), _1))\n        let memberValue0_1 := mload(add(value4, 128))\n        let _2 := 256\n        abi_encode_address(memberValue0_1, add(headStart, _2))\n        let memberValue0_2 := mload(add(value4, 160))\n        abi_encode_bool(memberValue0_2, add(headStart, 288))\n        let memberValue0_3 := mload(add(value4, 192))\n        abi_encode_address(memberValue0_3, add(headStart, 320))\n        let memberValue0_4 := mload(add(value4, 224))\n        abi_encode_uint8(memberValue0_4, add(headStart, 352))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        mstore(add(headStart, 160), and(mload(add(value3, 64)), _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), 0xffff))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), mload(value5))\n        mstore(add(headStart, 192), and(mload(add(value5, 32)), 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 224), and(mload(add(value5, 64)), 0xff))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        abi_encode_enum_InterestRateMode(memberValue0, add(headStart, 160))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), iszero(iszero(mload(add(value3, 128)))))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value1), _1))\n        mstore(add(headStart, 96), and(mload(add(value1, 32)), _1))\n        mstore(add(headStart, 128), mload(add(value1, 64)))\n        let memberValue0 := mload(add(value1, 96))\n        mstore(add(headStart, 160), 0xe0)\n        let tail_1 := abi_encode_string(memberValue0, add(headStart, 288))\n        mstore(add(headStart, 192), and(mload(add(value1, 128)), 0xffff))\n        mstore(add(headStart, 0xe0), mload(add(value1, 160)))\n        mstore(add(headStart, 256), mload(add(value1, 192)))\n        tail := tail_1\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(value4, _1))\n        mstore(add(headStart, 160), iszero(iszero(value5)))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n        mstore(add(headStart, 224), and(value7, _1))\n        mstore(add(headStart, 256), and(value8, 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 320)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        mstore(add(headStart, 192), and(mload(add(value4, 64)), _1))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        mstore(add(headStart, 256), and(mload(add(value4, 128)), _1))\n        mstore(add(headStart, 288), and(mload(add(value4, 160)), 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), and(value5, _1))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value2), _1))\n        mstore(add(headStart, 96), and(mload(add(value2, 32)), _1))\n        mstore(add(headStart, 128), and(mload(add(value2, 64)), _1))\n        mstore(add(headStart, 160), and(mload(add(value2, 96)), _1))\n        mstore(add(headStart, 192), and(mload(add(value2, 128)), _1))\n        let memberValue0 := mload(add(value2, 160))\n        abi_encode_uint16(memberValue0, add(headStart, 224))\n        let memberValue0_1 := mload(add(value2, 192))\n        abi_encode_uint16(memberValue0_1, add(headStart, 256))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint16(value) -> ret\n    {\n        let _1 := 0xffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        abi_encode_enum_InterestRateMode(value3, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        mstore(tail_1, value2)\n        pos := add(headStart, 96)\n        let srcPtr := value1\n        let i := 0\n        for { } lt(i, value2) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_address(value)\n            mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 512)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        abi_encode_address(mload(value4), add(headStart, 128))\n        let memberValue0 := mload(add(value4, 32))\n        abi_encode_address(memberValue0, add(headStart, 160))\n        let memberValue0_1 := mload(add(value4, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let memberValue0_2 := mload(add(value4, 128))\n        let _1 := 256\n        abi_encode_enum_InterestRateMode(memberValue0_2, add(headStart, _1))\n        let memberValue0_3 := mload(add(value4, 160))\n        let _2 := 288\n        abi_encode_uint16(memberValue0_3, add(headStart, _2))\n        let memberValue0_4 := mload(add(value4, 192))\n        let _3 := 320\n        abi_encode_bool(memberValue0_4, add(headStart, _3))\n        let _4 := mload(add(value4, 224))\n        let _5 := 352\n        mstore(add(headStart, _5), _4)\n        mstore(add(headStart, 384), mload(add(value4, _1)))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 416))\n        let memberValue0_6 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_6, add(headStart, 448))\n        let memberValue0_7 := mload(add(value4, _5))\n        abi_encode_address(memberValue0_7, add(headStart, 480))\n    }\n    function abi_encode_array_address_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 160)\n        abi_encode_address(mload(value4), add(headStart, 160))\n        let memberValue0 := mload(add(value4, 32))\n        let _1 := 0x01c0\n        mstore(add(headStart, 192), _1)\n        let tail_1 := abi_encode_array_address_dyn(memberValue0, add(headStart, 608))\n        let memberValue0_1 := mload(add(value4, 64))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60\n        mstore(add(headStart, 224), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_array_uint256_dyn(memberValue0_1, tail_1)\n        let memberValue0_2 := mload(add(value4, 96))\n        let _3 := 256\n        mstore(add(headStart, _3), add(sub(tail_2, headStart), _2))\n        let tail_3 := abi_encode_array_uint256_dyn(memberValue0_2, tail_2)\n        let memberValue0_3 := mload(add(value4, 128))\n        let _4 := 288\n        abi_encode_address(memberValue0_3, add(headStart, _4))\n        let memberValue0_4 := mload(add(value4, 160))\n        let _5 := 320\n        mstore(add(headStart, _5), add(sub(tail_3, headStart), _2))\n        let tail_4 := abi_encode_string(memberValue0_4, tail_3)\n        let memberValue0_5 := mload(add(value4, 192))\n        let _6 := 352\n        abi_encode_uint16(memberValue0_5, add(headStart, _6))\n        let _7 := mload(add(value4, 224))\n        let _8 := 384\n        mstore(add(headStart, _8), _7)\n        let _9 := mload(add(value4, _3))\n        let _10 := 416\n        mstore(add(headStart, _10), _9)\n        mstore(add(headStart, _1), mload(add(value4, _4)))\n        mstore(add(headStart, 480), mload(add(value4, _5)))\n        let memberValue0_6 := mload(add(value4, _6))\n        abi_encode_address(memberValue0_6, add(headStart, 512))\n        let memberValue0_7 := mload(add(value4, _8))\n        abi_encode_uint8(memberValue0_7, add(headStart, 544))\n        let memberValue0_8 := mload(add(value4, _10))\n        abi_encode_bool(memberValue0_8, add(headStart, 576))\n        tail := tail_4\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), mload(mload(value3)))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 160), and(memberValue0, _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), and(mload(add(value3, 128)), 0xff))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), and(mload(add(value4, 32)), _1))\n        let memberValue0 := mload(add(value4, 64))\n        abi_encode_address(memberValue0, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let _2 := mload(add(value4, 128))\n        let _3 := 256\n        mstore(add(headStart, _3), _2)\n        mstore(add(headStart, 288), mload(add(value4, 160)))\n        mstore(add(headStart, 320), mload(add(value4, 192)))\n        let memberValue0_1 := mload(add(value4, 224))\n        abi_encode_address(memberValue0_1, add(headStart, 352))\n        let memberValue0_2 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_2, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage(slot, value)\n    {\n        sstore(slot, calldataload(value))\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"25195":[{"length":32,"start":975},{"length":32,"start":2968},{"length":32,"start":3210},{"length":32,"start":4526},{"length":32,"start":6253},{"length":32,"start":7232},{"length":32,"start":9139},{"length":32,"start":9348},{"length":32,"start":9943},{"length":32,"start":10706},{"length":32,"start":11313},{"length":32,"start":12967},{"length":32,"start":14787},{"length":32,"start":15548},{"length":32,"start":16137}]},"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4873},{"length":20,"start":5805},{"length":20,"start":8611},{"length":20,"start":8774},{"length":20,"start":11699},{"length":20,"start":14059}]},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7716},{"length":20,"start":13524}]},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4392}]},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5600},{"length":20,"start":10355}]},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":2798}]},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":6955},{"length":20,"start":8074},{"length":20,"start":8727},{"length":20,"start":10664},{"length":20,"start":11824},{"length":20,"start":13675}]},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3776},{"length":20,"start":6139},{"length":20,"start":6781},{"length":20,"start":7038},{"length":20,"start":12793}]}},"object":"608060405234801561001057600080fd5b50600436106103825760003560e01c80637a708e92116101de578063d1946dbc1161010f578063e82fec2f116100ad578063f51e435b1161007c578063f51e435b14610aa4578063f7a7384014610ab7578063f8119d5114610aca578063fd21ecff14610ad957600080fd5b8063e82fec2f14610a46578063e8eda9df1461079f578063eddf1b7914610a58578063ee3e210b14610a9157600080fd5b8063d5eed868116100e9578063d5eed868146109fa578063d65dc7a114610a0d578063dc7c0bff14610a20578063e43e88a114610a3357600080fd5b8063d1946dbc146109bf578063d579ea7d146109d4578063d5ed3933146109e757600080fd5b8063bcb6e5221161017c578063c4d66de811610156578063c4d66de814610973578063cd11238214610986578063cea9d26f14610999578063d15e0053146109ac57600080fd5b8063bcb6e522146108d1578063bf92857c146108e4578063c44b11f71461092457600080fd5b806394ba89a2116101b857806394ba89a2146108855780639cd1999614610898578063a415bcad146108ab578063ab9c4b5d146108be57600080fd5b80637a708e921461084c5780638e19899e1461085f57806394b576de1461087257600080fd5b806342b0b77c116102b8578063617ba0371161025657806369328dec1161023057806369328dec146107d857806369a933a5146107eb5780636a99c036146107fe5780636c6f6ae11461082c57600080fd5b8063617ba0371461079f57806363c9b860146107b2578063680dd47c146107c557600080fd5b80635275179711610292578063527517971461072c578063563dd61314610766578063573ade81146107795780635a3b74b91461078c57600080fd5b806342b0b77c146106a85780634417a583146106bb5780634d013f031461071957600080fd5b8063272d9072116103255780633036b439116102ff5780633036b439146104a157806335ea6a75146104b4578063386497fd14610682578063427da1771461069557600080fd5b8063272d90721461047357806328530a471461047b5780632dad97d41461048e57600080fd5b80630542975c116103615780630542975c146103ca578063074b2e43146104165780631d2118f91461044d5780631fe3c6f31461046057600080fd5b8062a718a9146103875780630148170e1461039c57806302c205f0146103b7575b600080fd5b61039a61039536600461449d565b610aec565b005b6103a4600181565b6040519081526020015b60405180910390f35b61039a6103c5366004614528565b610d67565b6103f17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ae565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016103ae565b61039a61045b3660046145a7565b610f17565b61039a61046e3660046145e0565b611105565b6039546103a4565b61039a6104893660046145f9565b611126565b6103a461049c366004614614565b611305565b61039a6104af3660046145e0565b611449565b6106756104c2366004614649565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091525073ffffffffffffffffffffffffffffffffffffffff90811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103ae9190614666565b6103a4610690366004614649565b611456565b61039a6106a33660046145e0565b61148a565b61039a6106b6366004614825565b6114c7565b61070a6106c9366004614649565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260358352819020815192830190915254815290565b604051905181526020016103ae565b61039a6107273660046145e0565b611641565b6103f161073a3660046148a7565b61ffff1660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6103a46107743660046145e0565b61167d565b6103a46107873660046148c2565b6116a9565b61039a61079a36600461490c565b6117f9565b61039a6107ad36600461493a565b6119ce565b61039a6107c0366004614649565b611ad1565b61039a6107d336600461498b565b611b4d565b6103a46107e63660046149b7565b611b7a565b61039a6107f936600461493a565b611d99565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661042c565b61083f61083a3660046145f9565b611e46565b6040516103ae9190614a64565b61039a61085a366004614ac7565b611f80565b6103a461086d3660046145e0565b61210c565b6103a461088036600461498b565b612133565b61039a610893366004614b2a565b61216e565b61039a6108a6366004614b9b565b6121ef565b61039a6108b9366004614bdd565b612244565b61039a6108cc366004614c1c565b61252a565b61039a6108df366004614d36565b6128e3565b6108f76108f2366004614649565b61291a565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016103ae565b61070a610932366004614649565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260348352819020815192830190915254815290565b61039a610981366004614649565b612b49565b61039a6109943660046145a7565b612d4c565b61039a6109a7366004614d69565b612dd5565b6103a46109ba366004614649565b612e82565b6109c7612eb0565b6040516103ae9190614daa565b61039a6109e2366004614eab565b612fec565b61039a6109f5366004614fe3565b613158565b61039a610a083660046145e0565b6133df565b6103a4610a1b366004614614565b613456565b6103a4610a2e3660046145e0565b6134f6565b61039a610a41366004614649565b613518565b603b5467ffffffffffffffff166103a4565b6103a4610a66366004614649565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205460ff1690565b6103a4610a9f366004615048565b61358d565b61039a610ab236600461508e565b613768565b61039a610ac53660046145e0565b613929565b604051608081526020016103ae565b61039a610ae73660046150ed565b61397f565b73__$f598c634f2d943205ac23f707b80075cbb$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c25919061510f565b73ffffffffffffffffffffffffffffffffffffffff90811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf7919061510f565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d3095949392919061512c565b60006040518083038186803b158015610d4857600080fd5b505af4158015610d5c573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e401600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff86811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e40160006040518083038186803b158015610ef557600080fd5b505af4158015610f09573d6000803e3d6000fd5b505050505050505050505050565b610f1f6139aa565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061104057506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906110ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600080611113603684613ad8565b91509150611121828261216e565b505050565b73__$e4b9550ff526a295e1233dea02821b9004$__635d5dc3136034603660376038603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b919061510f565b73ffffffffffffffffffffffffffffffffffffffff1681526020018960ff168152506040518763ffffffff1660e01b81526004016112d29695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a08501529182015173ffffffffffffffffffffffffffffffffffffffff1660c0840152015160ff1660e08201526101000190565b60006040518083038186803b1580156112ea57600080fd5b505af41580156112fe573d6000803e3d6000fd5b5050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018860028111156113a3576113a3615220565b60028111156113b4576113b4615220565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526113fe949392919060040161528a565b602060405180830381865af415801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906152fd565b90505b9392505050565b6114516139aa565b603955565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061148490613b12565b92915050565b61ffff811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff90811690601083901c166111218282612d4c565b60006040518060e001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116604080870191909152911660609094019390935273ffffffffffffffffffffffffffffffffffffffff8a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__9163a1fe0e8d91611608918590600401615316565b60006040518083038186803b15801561162057600080fd5b505af4158015611634573d6000803e3d6000fd5b5050505050505050505050565b61ffff811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff16601082901c60011661112182826117f9565b60008060008061168e603686613ba2565b9250925092506116a0838383336116a9565b95945050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561174757611747615220565b600281111561175857611758615220565b815273ffffffffffffffffffffffffffffffffffffffff891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526117b8949392919060040161528a565b602060405180830381865af41580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a091906152fd565b73__$db79717e66442ee197e8271d032a066e34$__63bf697a26603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208787603b60089054906101000a900461ffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061510f565b336000908152603860205260409081902054905160e08b901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019990995260248901979097526044880195909552606487019390935273ffffffffffffffffffffffffffffffffffffffff9182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b1580156119b257600080fd5b505af41580156119c6573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e4015b60006040518083038186803b158015611ab357600080fd5b505af4158015611ac7573d6000803e3d6000fd5b5050505050505050565b611ad96139aa565b6040517f9cf57023000000000000000000000000000000000000000000000000000000008152603460048201526036602482015273ffffffffffffffffffffffffffffffffffffffff8216604482015273__$563c746fa3df0f1858d85f6ef4258864be$__90639cf57023906064016112d2565b6000806000806000611b60603689613c30565b94509450945094509450611ac78585338686868d8d610d67565b600073__$db79717e66442ee197e8271d032a066e34$__63186dea44603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd919061510f565b73ffffffffffffffffffffffffffffffffffffffff9081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a0015116610124820152610144016113fe565b611da1613cba565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$b06080f092f400a43662c3f835a4d9baa8$__90630413c86f9060e401611a9b565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff8082168352620100008204811694830194909452640100000000810490931693810193909352660100000000000090910473ffffffffffffffffffffffffffffffffffffffff166060830152600181018054608084019190611ef7906153a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f23906153a1565b8015611f705780601f10611f4557610100808354040283529160200191611f70565b820191906000526020600020905b815481529060010190602001808311611f5357829003601f168201915b5050505050815250509050919050565b611f886139aa565b73__$563c746fa3df0f1858d85f6ef4258864be$__6369fc1bdf603460366040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff16815260200161205f608090565b61ffff168152506040518463ffffffff1660e01b8152600401612084939291906153ef565b602060405180830381865af41580156120a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c5919061547f565b156112fe57603b805468010000000000000000900461ffff169060086120ea836154cb565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b600080600061211c603685613e47565b9150915061212b828233611b7a565b949350505050565b60008060008060008061214760368a613ec7565b945094509450945094506121618585853386868e8e61358d565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603460209081526040808320338452603590925290912073__$c3724b8d563dc83a94e797176cddecb3b9$__9163eac4d70391858560028111156121d0576121d0615220565b6040518563ffffffff1660e01b815260040161199a94939291906154ed565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$563c746fa3df0f1858d85f6ef4258864be$__906348c2ca8c9061199a9060349086908690600401615524565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f9603460366037603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a600281111561231b5761231b615220565b600281111561232c5761232c615220565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a09093019273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa1580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f919061510f565b73ffffffffffffffffffffffffffffffffffffffff90811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa1580156124cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f1919061510f565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610d30959493929190615589565b6000604051806101c001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a085015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa15801561276a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278e919061510f565b6040517ffa50f29700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063fa50f29790602401602060405180830381865afa1580156127fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281e919061547f565b1515905273ffffffffffffffffffffffffffffffffffffffff86166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__91632e7263ea916128a591603491603691603791908890600401615732565b60006040518083038186803b1580156128bd57600080fd5b505af41580156128d1573d6000803e3d6000fd5b50505050505050505050505050505050565b6128eb6139aa565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$563c746fa3df0f1858d85f6ef4258864be$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa158015612a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3c919061510f565b73ffffffffffffffffffffffffffffffffffffffff90811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af4158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3591906158d8565b949c939b5091995097509550909350915050565b6001805460ff1680612b5a5750303b155b80612b66575060005481115b612bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610fa1565b60015460ff16158015612c2f57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525090612cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c4179055801561112157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$c3724b8d563dc83a94e797176cddecb3b9$__90636973f7449060640161199a565b612ddd613f07565b6040517f87b322b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044810182905273__$563c746fa3df0f1858d85f6ef4258864be$__906387b322b29060640160006040518083038186803b158015612e6557600080fd5b505af4158015612e79573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061148490614094565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff811115612ee257612ee2614e04565b604051908082528060200260200182016040528015612f0b578160200160208202803683370190505b50905060005b83811015612fe25760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612fc25760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1682612f738584615922565b81518110612f8357612f83615939565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fd0565b82612fcc81615968565b9350505b80612fda81615968565b915050612f11565b5091038152919050565b612ff46139aa565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316613063576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5060ff8216600090815260376020908152604091829020835181548386015194860151606087015173ffffffffffffffffffffffffffffffffffffffff166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169290941691909117919091179490941617929092178255608083015180518493926112fe9260018501929101906143c4565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260346020908152604091829020600401548251808401909352600283527f31310000000000000000000000000000000000000000000000000000000000009183019190915290911633146131f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5073__$db79717e66442ee197e8271d032a066e34$__638a5dadd160346036603760356040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613310573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613334919061510f565b73ffffffffffffffffffffffffffffffffffffffff90811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526133a79594939291906004016159a1565b60006040518083038186803b1580156133bf57600080fd5b505af41580156133d3573d6000803e3d6000fd5b50505050505050505050565b60008060008061344160368661ffff818116600090815260209390935260409092205473ffffffffffffffffffffffffffffffffffffffff16926fffffffffffffffffffffffffffffffff601083901c169260ff609084901c169260981c1690565b93509350935093506112fe8484848433612244565b6000613460613cba565b73ffffffffffffffffffffffffffffffffffffffff84166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$b06080f092f400a43662c3f835a4d9baa8$__90638e7432489060a4016113fe565b600080600080613507603686613ba2565b9250925092506116a0838383611305565b6135206139aa565b6040517f1e3b41450000000000000000000000000000000000000000000000000000000081526034600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015273__$563c746fa3df0f1858d85f6ef4258864be$__90631e3b4145906044016112d2565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905260009073ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e401600060405180830381600087803b15801561362257600080fd5b505af1158015613636573d6000803e3d6000fd5b5050505060006040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561367b5761367b615220565b600281111561368c5761368c615220565b815273ffffffffffffffffffffffffffffffffffffffff89166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$c3724b8d563dc83a94e797176cddecb3b9$__916340e95de69161371991603491603691879060040161528a565b602060405180830381865af4158015613736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375a91906152fd565b9a9950505050505050505050565b6137706139aa565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166137f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061388857506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906138f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b5073ffffffffffffffffffffffffffffffffffffffff821660009081526034602052604090208135815581905b50505050565b61ffff81811660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690601083901c6fffffffffffffffffffffffffffffffff1690609084901c16613923838333846119ce565b600080600080600061399360368888614118565b94509450945094509450612e798585858585610aec565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a50919061510f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b50565b61ffff811660009081526020839052604090205473ffffffffffffffffffffffffffffffffffffffff16601082901c60ff165b9250929050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613b58575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154611442906fffffffffffffffffffffffffffffffff80821691613b969170010000000000000000000000000000000090910416846141dc565b906141e9565b50919050565b6000808061ffff84166fffffffffffffffffffffffffffffffff601086901c81169060ff609088901c1690821415613bf8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505b61ffff90921660009081526020889052604090205473ffffffffffffffffffffffffffffffffffffffff169450925090509250925092565b60008080808060a086901c63ffffffff1660c087901c60ff16828080613ca28c8c61ffff81811660009081526020849052604090205473ffffffffffffffffffffffffffffffffffffffff1690601083901c6fffffffffffffffffffffffffffffffff1690609084901c169250925092565b919e909d50909b509499509297509295505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d49919061510f565b6040517f726600ce00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063726600ce90602401602060405180830381865afa158015613db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd9919061547f565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b60008061ffff83166fffffffffffffffffffffffffffffffff601085901c811690811415613e9257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b61ffff91909116600090815260209590955260409094205473ffffffffffffffffffffffffffffffffffffffff169492505050565b600080600080600080600080600080613ee08c8c613ba2565b919e909d50909b609881901c63ffffffff169b5060b81c60ff169950975050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f96919061510f565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690637be53ca190602401602060405180830381865afa158015614002573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614026919061547f565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1919061520d565b6003810154600090700100000000000000000000000000000000900464ffffffffff16428114156140da575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154611442906fffffffffffffffffffffffffffffffff80821691613b96917001000000000000000000000000000000009091041684614240565b60008080808061ffff87811690601089901c16602089901c73ffffffffffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff8981169060808b901c6001169082141561418f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505b61ffff948516600090815260209d909d526040808e2054949095168d5293909b205473ffffffffffffffffffffffffffffffffffffffff9283169c92169a90995097509095509350505050565b600061144283834261427d565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761421e57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60008061425464ffffffffff841642615922565b61425e9085615a7d565b6301e133809004905061212b816b033b2e3c9fd0803ce8000000615ae9565b60008061429164ffffffffff851684615922565b9050806142ad576b033b2e3c9fd0803ce8000000915050611442565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116142e35760006142e8565b600285035b925066038882915c40006142fc8a806141e9565b8161430957614309615aba565b0491506301e1338061431b838b6141e9565b8161432857614328615aba565b0490506000826143388688615a7d565b6143429190615a7d565b60029004905060008285614356888a615a7d565b6143609190615a7d565b61436a9190615a7d565b60069004905080826301e133806143818a8f615a7d565b61438b9190615b01565b6143a1906b033b2e3c9fd0803ce8000000615ae9565b6143ab9190615ae9565b6143b59190615ae9565b9b9a5050505050505050505050565b8280546143d0906153a1565b90600052602060002090601f0160209004810192826143f25760008555614438565b82601f1061440b57805160ff1916838001178555614438565b82800160010185558215614438579182015b8281111561443857825182559160200191906001019061441d565b50614444929150614448565b5090565b5b808211156144445760008155600101614449565b73ffffffffffffffffffffffffffffffffffffffff81168114613ad557600080fd5b803561448a8161445d565b919050565b8015158114613ad557600080fd5b600080600080600060a086880312156144b557600080fd5b85356144c08161445d565b945060208601356144d08161445d565b935060408601356144e08161445d565b92506060860135915060808601356144f78161448f565b809150509295509295909350565b803561ffff8116811461448a57600080fd5b803560ff8116811461448a57600080fd5b600080600080600080600080610100898b03121561454557600080fd5b88356145508161445d565b97506020890135965060408901356145678161445d565b955061457560608a01614505565b94506080890135935061458a60a08a01614517565b925060c0890135915060e089013590509295985092959890939650565b600080604083850312156145ba57600080fd5b82356145c58161445d565b915060208301356145d58161445d565b809150509250929050565b6000602082840312156145f257600080fd5b5035919050565b60006020828403121561460b57600080fd5b61144282614517565b60008060006060848603121561462957600080fd5b83356146348161445d565b95602085013595506040909401359392505050565b60006020828403121561465b57600080fd5b81356114428161445d565b81515181526101e08101602083015161469360208401826fffffffffffffffffffffffffffffffff169052565b5060408301516146b760408401826fffffffffffffffffffffffffffffffff169052565b5060608301516146db60608401826fffffffffffffffffffffffffffffffff169052565b5060808301516146ff60808401826fffffffffffffffffffffffffffffffff169052565b5060a083015161472360a08401826fffffffffffffffffffffffffffffffff169052565b5060c083015161473c60c084018264ffffffffff169052565b5060e083015161475260e084018261ffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f8401126147f557600080fd5b50813567ffffffffffffffff81111561480d57600080fd5b602083019150836020828501011115613b0b57600080fd5b60008060008060008060a0878903121561483e57600080fd5b86356148498161445d565b955060208701356148598161445d565b945060408701359350606087013567ffffffffffffffff81111561487c57600080fd5b61488889828a016147e3565b909450925061489b905060808801614505565b90509295509295509295565b6000602082840312156148b957600080fd5b61144282614505565b600080600080608085870312156148d857600080fd5b84356148e38161445d565b9350602085013592506040850135915060608501356149018161445d565b939692955090935050565b6000806040838503121561491f57600080fd5b823561492a8161445d565b915060208301356145d58161448f565b6000806000806080858703121561495057600080fd5b843561495b8161445d565b93506020850135925060408501356149728161445d565b915061498060608601614505565b905092959194509250565b6000806000606084860312156149a057600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156149cc57600080fd5b83356149d78161445d565b92506020840135915060408401356149ee8161445d565b809150509250925092565b6000815180845260005b81811015614a1f57602081850181015186830182015201614a03565b81811115614a31576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff8084511660208401528060208501511660408401528060408501511660608401525073ffffffffffffffffffffffffffffffffffffffff6060840151166080830152608083015160a08084015261212b60c08401826149f9565b600080600080600060a08688031215614adf57600080fd5b8535614aea8161445d565b94506020860135614afa8161445d565b93506040860135614b0a8161445d565b92506060860135614b1a8161445d565b915060808601356144f78161445d565b60008060408385031215614b3d57600080fd5b8235614b488161445d565b946020939093013593505050565b60008083601f840112614b6857600080fd5b50813567ffffffffffffffff811115614b8057600080fd5b6020830191508360208260051b8501011115613b0b57600080fd5b60008060208385031215614bae57600080fd5b823567ffffffffffffffff811115614bc557600080fd5b614bd185828601614b56565b90969095509350505050565b600080600080600060a08688031215614bf557600080fd5b8535614c008161445d565b94506020860135935060408601359250614b1a60608701614505565b600080600080600080600080600080600060e08c8e031215614c3d57600080fd5b614c468c61447f565b9a5067ffffffffffffffff8060208e01351115614c6257600080fd5b614c728e60208f01358f01614b56565b909b50995060408d0135811015614c8857600080fd5b614c988e60408f01358f01614b56565b909950975060608d0135811015614cae57600080fd5b614cbe8e60608f01358f01614b56565b9097509550614ccf60808e0161447f565b94508060a08e01351115614ce257600080fd5b50614cf38d60a08e01358e016147e3565b9093509150614d0460c08d01614505565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff8116811461448a57600080fd5b60008060408385031215614d4957600080fd5b614d5283614d16565b9150614d6060208401614d16565b90509250929050565b600080600060608486031215614d7e57600080fd5b8335614d898161445d565b92506020840135614d998161445d565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b81811015614df857835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614dc6565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715614e5657614e56614e04565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ea357614ea3614e04565b604052919050565b60008060408385031215614ebe57600080fd5b614ec783614517565b915060208084013567ffffffffffffffff80821115614ee557600080fd5b9085019060a08288031215614ef957600080fd5b614f01614e33565b614f0a83614505565b8152614f17848401614505565b84820152614f2760408401614505565b60408201526060830135614f3a8161445d565b6060820152608083013582811115614f5157600080fd5b80840193505087601f840112614f6657600080fd5b823582811115614f7857614f78614e04565b614fa8857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614e5c565b92508083528885828601011115614fbe57600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c08789031215614ffc57600080fd5b86356150078161445d565b955060208701356150178161445d565b945060408701356150278161445d565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b03121561506557600080fd5b88356150708161445d565b9750602089013596506040890135955060608901356145758161445d565b60008082840360408112156150a257600080fd5b83356150ad8161445d565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156150df57600080fd5b506020830190509250929050565b6000806040838503121561510057600080fd5b50508035926020909101359150565b60006020828403121561512157600080fd5b81516114428161445d565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a0830152604083015173ffffffffffffffffffffffffffffffffffffffff80821660c08501528060608601511660e0850152505060808301516101006151b48185018373ffffffffffffffffffffffffffffffffffffffff169052565b60a0850151151561012085015260c085015173ffffffffffffffffffffffffffffffffffffffff90811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b60208152600061144260208301846149f9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110615286577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006101008201905085825284602083015283604083015273ffffffffffffffffffffffffffffffffffffffff8084511660608401526020840151608084015260408401516152dc60a085018261524f565b5060608401511660c0830152608090920151151560e0909101529392505050565b60006020828403121561530f57600080fd5b5051919050565b82815260406020820152600073ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401525060408301516080830152606083015160e060a08401526153716101208401826149f9565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c908216806153b557607f821691505b60208210811415613b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006101208201905084825283602083015273ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a083015161546560e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b60006020828403121561549157600080fd5b81516114428161448f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818114156154e3576154e361549c565b6001019392505050565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff83166040820152608081016116a0606083018461524f565b83815260406020808301829052908201839052600090849060608401835b8681101561557d5783356155558161445d565b73ffffffffffffffffffffffffffffffffffffffff1682529282019290820190600101615542565b50979650505050505050565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e083015260808301516101006156258185018361524f565b60a0850151915061012061563e8186018461ffff169052565b60c086015192506101406156558187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e08501529050615202565b600081518084526020808501945080840160005b838110156156f757815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016156c5565b509495945050505050565b600081518084526020808501945080840160005b838110156156f757815187529582019590820190600101615716565b85815284602082015283604082015282606082015260a0608082015261577160a08201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516101c08060c085015261578f6102608501836156b1565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e08701526157cb8483615702565b9350606087015191506101008187860301818801526157ea8584615702565b9450608088015192506101206158178189018573ffffffffffffffffffffffffffffffffffffffff169052565b60a089015193506101408389880301818a015261583487866149f9565b965060c08a015194506101609350615851848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b015196506158ab6102008b018873ffffffffffffffffffffffffffffffffffffffff169052565b8a015160ff81166102208b015295506158c2915050565b870151801515610240880152925061557d915050565b60008060008060008060c087890312156158f157600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000828210156159345761593461549c565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561599a5761599a61549c565b5060010190565b60006101a08201905086825285602083015284604083015283606083015273ffffffffffffffffffffffffffffffffffffffff8084511660808401528060208501511660a0840152506040830151615a1160c084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e08501519150615a6961016085018373ffffffffffffffffffffffffffffffffffffffff169052565b84015160ff81166101808501529050615202565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615ab557615ab561549c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008219821115615afc57615afc61549c565b500190565b600082615b37577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ae95a4d727c39b82255a9695906fa367a1bbcd5d90caa4e0d041bfb6d00c3d0564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x382 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A708E92 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0xD1946DBC GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xF51E435B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0xAA4 JUMPI DUP1 PUSH4 0xF7A73840 EQ PUSH2 0xAB7 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0xACA JUMPI DUP1 PUSH4 0xFD21ECFF EQ PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0xA46 JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0xA58 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0xA91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5EED868 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xD5EED868 EQ PUSH2 0x9FA JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xA0D JUMPI DUP1 PUSH4 0xDC7C0BFF EQ PUSH2 0xA20 JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0xA33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9BF JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x9D4 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0x9E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x973 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x986 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x9AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x8E4 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x924 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x94BA89A2 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x885 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x898 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x8AB JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x84C JUMPI DUP1 PUSH4 0x8E19899E EQ PUSH2 0x85F JUMPI DUP1 PUSH4 0x94B576DE EQ PUSH2 0x872 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42B0B77C GT PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x617BA037 GT PUSH2 0x256 JUMPI DUP1 PUSH4 0x69328DEC GT PUSH2 0x230 JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x7D8 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x7EB JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x7FE JUMPI DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x617BA037 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x7B2 JUMPI DUP1 PUSH4 0x680DD47C EQ PUSH2 0x7C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x292 JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x72C JUMPI DUP1 PUSH4 0x563DD613 EQ PUSH2 0x766 JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x6BB JUMPI DUP1 PUSH4 0x4D013F03 EQ PUSH2 0x719 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x272D9072 GT PUSH2 0x325 JUMPI DUP1 PUSH4 0x3036B439 GT PUSH2 0x2FF JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x4B4 JUMPI DUP1 PUSH4 0x386497FD EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0x427DA177 EQ PUSH2 0x695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x272D9072 EQ PUSH2 0x473 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C GT PUSH2 0x361 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x3CA JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x44D JUMPI DUP1 PUSH4 0x1FE3C6F3 EQ PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x3B7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x39A PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x449D JUMP JUMPDEST PUSH2 0xAEC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3A4 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x39A PUSH2 0x3C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4528 JUMP JUMPDEST PUSH2 0xD67 JUMP JUMPDEST PUSH2 0x3F1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x45B CALLDATASIZE PUSH1 0x4 PUSH2 0x45A7 JUMP JUMPDEST PUSH2 0xF17 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x46E CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x1105 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x3A4 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0x45F9 JUMP JUMPDEST PUSH2 0x1126 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x4614 JUMP JUMPDEST PUSH2 0x1305 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x4AF CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x1449 JUMP JUMPDEST PUSH2 0x675 PUSH2 0x4C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4666 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x690 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x1456 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x6A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x148A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x6B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4825 JUMP JUMPDEST PUSH2 0x14C7 JUMP JUMPDEST PUSH2 0x70A PUSH2 0x6C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x727 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x3F1 PUSH2 0x73A CALLDATASIZE PUSH1 0x4 PUSH2 0x48A7 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x167D JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x787 CALLDATASIZE PUSH1 0x4 PUSH2 0x48C2 JUMP JUMPDEST PUSH2 0x16A9 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x490C JUMP JUMPDEST PUSH2 0x17F9 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7AD CALLDATASIZE PUSH1 0x4 PUSH2 0x493A JUMP JUMPDEST PUSH2 0x19CE JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x1AD1 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x498B JUMP JUMPDEST PUSH2 0x1B4D JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x7E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x49B7 JUMP JUMPDEST PUSH2 0x1B7A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x7F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x493A JUMP JUMPDEST PUSH2 0x1D99 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x42C JUMP JUMPDEST PUSH2 0x83F PUSH2 0x83A CALLDATASIZE PUSH1 0x4 PUSH2 0x45F9 JUMP JUMPDEST PUSH2 0x1E46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4A64 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x85A CALLDATASIZE PUSH1 0x4 PUSH2 0x4AC7 JUMP JUMPDEST PUSH2 0x1F80 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x86D CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x210C JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x880 CALLDATASIZE PUSH1 0x4 PUSH2 0x498B JUMP JUMPDEST PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x893 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B2A JUMP JUMPDEST PUSH2 0x216E JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B9B JUMP JUMPDEST PUSH2 0x21EF JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BDD JUMP JUMPDEST PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x252A JUMP JUMPDEST PUSH2 0x39A PUSH2 0x8DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4D36 JUMP JUMPDEST PUSH2 0x28E3 JUMP JUMPDEST PUSH2 0x8F7 PUSH2 0x8F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x291A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x70A PUSH2 0x932 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x981 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x2B49 JUMP JUMPDEST PUSH2 0x39A PUSH2 0x994 CALLDATASIZE PUSH1 0x4 PUSH2 0x45A7 JUMP JUMPDEST PUSH2 0x2D4C JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D69 JUMP JUMPDEST PUSH2 0x2DD5 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x2E82 JUMP JUMPDEST PUSH2 0x9C7 PUSH2 0x2EB0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x4DAA JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4EAB JUMP JUMPDEST PUSH2 0x2FEC JUMP JUMPDEST PUSH2 0x39A PUSH2 0x9F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE3 JUMP JUMPDEST PUSH2 0x3158 JUMP JUMPDEST PUSH2 0x39A PUSH2 0xA08 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x33DF JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA1B CALLDATASIZE PUSH1 0x4 PUSH2 0x4614 JUMP JUMPDEST PUSH2 0x3456 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA2E CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x39A PUSH2 0xA41 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH2 0x3518 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x3A4 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA66 CALLDATASIZE PUSH1 0x4 PUSH2 0x4649 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0xA9F CALLDATASIZE PUSH1 0x4 PUSH2 0x5048 JUMP JUMPDEST PUSH2 0x358D JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAB2 CALLDATASIZE PUSH1 0x4 PUSH2 0x508E JUMP JUMPDEST PUSH2 0x3768 JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x45E0 JUMP JUMPDEST PUSH2 0x3929 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x39A PUSH2 0xAE7 CALLDATASIZE PUSH1 0x4 PUSH2 0x50ED JUMP JUMPDEST PUSH2 0x397F JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC25 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCF7 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD30 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x512C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xF09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xF1F PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xFAA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x1040 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1113 PUSH1 0x36 DUP5 PUSH2 0x3AD8 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1121 DUP3 DUP3 PUSH2 0x216E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1217 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x123B SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12D2 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x12FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13A3 JUMPI PUSH2 0x13A3 PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x13B4 JUMPI PUSH2 0x13B4 PUSH2 0x5220 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x13FE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x528A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x141B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x143F SWAP2 SWAP1 PUSH2 0x52FD JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1451 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1484 SWAP1 PUSH2 0x3B12 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR AND PUSH2 0x1121 DUP3 DUP3 PUSH2 0x2D4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x1608 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5316 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1620 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1634 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x10 DUP3 SWAP1 SHR PUSH1 0x1 AND PUSH2 0x1121 DUP3 DUP3 PUSH2 0x17F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x168E PUSH1 0x36 DUP7 PUSH2 0x3BA2 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16A0 DUP4 DUP4 DUP4 CALLER PUSH2 0x16A9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1747 JUMPI PUSH2 0x1747 PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1758 JUMPI PUSH2 0x1758 PUSH2 0x5220 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x17B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x528A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16A0 SWAP2 SWAP1 PUSH2 0x52FD JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18FA SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x19C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1AC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1AD9 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9CF5702300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x9CF57023 SWAP1 PUSH1 0x64 ADD PUSH2 0x12D2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B60 PUSH1 0x36 DUP10 PUSH2 0x3C30 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x1AC7 DUP6 DUP6 CALLER DUP7 DUP7 DUP7 DUP14 DUP14 PUSH2 0xD67 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CCD SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x13FE JUMP JUMPDEST PUSH2 0x1DA1 PUSH2 0x3CBA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1A9B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1EF7 SWAP1 PUSH2 0x53A1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1F23 SWAP1 PUSH2 0x53A1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1F70 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F45 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1F70 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F53 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F88 PUSH2 0x39AA JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x205F PUSH1 0x80 SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2084 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53EF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C5 SWAP2 SWAP1 PUSH2 0x547F JUMP JUMPDEST ISZERO PUSH2 0x12FE JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x20EA DUP4 PUSH2 0x54CB JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x211C PUSH1 0x36 DUP6 PUSH2 0x3E47 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x212B DUP3 DUP3 CALLER PUSH2 0x1B7A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2147 PUSH1 0x36 DUP11 PUSH2 0x3EC7 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x2161 DUP6 DUP6 DUP6 CALLER DUP7 DUP7 DUP15 DUP15 PUSH2 0x358D JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21D0 JUMPI PUSH2 0x21D0 PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x199A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x54ED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x199A SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5524 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x231B JUMPI PUSH2 0x231B PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x232C JUMPI PUSH2 0x232C PUSH2 0x5220 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x241F SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24F1 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD30 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5589 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x276A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x278E SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x281E SWAP2 SWAP1 PUSH2 0x547F JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x28A5 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5732 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x28D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x28EB PUSH2 0x39AA JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A3C SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2B11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B35 SWAP2 SWAP1 PUSH2 0x58D8 JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2B5A JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x2B66 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2BF2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xFA1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2C2F JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CEC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1121 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x199A JUMP JUMPDEST PUSH2 0x2DDD PUSH2 0x3F07 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2E79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1484 SWAP1 PUSH2 0x4094 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2EE2 JUMPI PUSH2 0x2EE2 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2F0B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FE2 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2FC2 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH2 0x2F73 DUP6 DUP5 PUSH2 0x5922 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2F83 JUMPI PUSH2 0x2F83 PUSH2 0x5939 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2FD0 JUMP JUMPDEST DUP3 PUSH2 0x2FCC DUP2 PUSH2 0x5968 JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2FDA DUP2 PUSH2 0x5968 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2F11 JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2FF4 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x3063 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x12FE SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x43C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x31F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3310 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3334 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x33A7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x59A1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x33BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x33D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3441 PUSH1 0x36 DUP7 PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP4 SWAP1 SHR AND SWAP3 PUSH1 0xFF PUSH1 0x90 DUP5 SWAP1 SHR AND SWAP3 PUSH1 0x98 SHR AND SWAP1 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x12FE DUP5 DUP5 DUP5 DUP5 CALLER PUSH2 0x2244 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3460 PUSH2 0x3CBA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x13FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3507 PUSH1 0x36 DUP7 PUSH2 0x3BA2 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16A0 DUP4 DUP4 DUP4 PUSH2 0x1305 JUMP JUMPDEST PUSH2 0x3520 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x12D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3622 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3636 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x367B JUMPI PUSH2 0x367B PUSH2 0x5220 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x368C JUMPI PUSH2 0x368C PUSH2 0x5220 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x3719 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x528A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3736 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x375A SWAP2 SWAP1 PUSH2 0x52FD JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3770 PUSH2 0x39AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x37F2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x3888 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x38F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 CALLDATALOAD DUP2 SSTORE DUP2 SWAP1 JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x90 DUP5 SWAP1 SHR AND PUSH2 0x3923 DUP4 DUP4 CALLER DUP5 PUSH2 0x19CE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3993 PUSH1 0x36 DUP9 DUP9 PUSH2 0x4118 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH2 0x2E79 DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0xAEC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A2C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A50 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x10 DUP3 SWAP1 SHR PUSH1 0xFF AND JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3B58 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x1442 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x3B96 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x41DC JUMP JUMPDEST SWAP1 PUSH2 0x41E9 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xFFFF DUP5 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP7 SWAP1 SHR DUP2 AND SWAP1 PUSH1 0xFF PUSH1 0x90 DUP9 SWAP1 SHR AND SWAP1 DUP3 EQ ISZERO PUSH2 0x3BF8 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP JUMPDEST PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP SWAP3 POP SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH1 0xA0 DUP7 SWAP1 SHR PUSH4 0xFFFFFFFF AND PUSH1 0xC0 DUP8 SWAP1 SHR PUSH1 0xFF AND DUP3 DUP1 DUP1 PUSH2 0x3CA2 DUP13 DUP13 PUSH2 0xFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x10 DUP4 SWAP1 SHR PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x90 DUP5 SWAP1 SHR AND SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP2 SWAP15 SWAP1 SWAP14 POP SWAP1 SWAP12 POP SWAP5 SWAP10 POP SWAP3 SWAP8 POP SWAP3 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D25 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D49 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3DB5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3DD9 SWAP2 SWAP1 PUSH2 0x547F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFFFF DUP4 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND SWAP1 DUP2 EQ ISZERO PUSH2 0x3E92 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 SWAP1 SWAP5 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3EE0 DUP13 DUP13 PUSH2 0x3BA2 JUMP JUMPDEST SWAP2 SWAP15 SWAP1 SWAP14 POP SWAP1 SWAP12 PUSH1 0x98 DUP2 SWAP1 SHR PUSH4 0xFFFFFFFF AND SWAP12 POP PUSH1 0xB8 SHR PUSH1 0xFF AND SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F72 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3F96 SWAP2 SWAP1 PUSH2 0x510F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4002 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4026 SWAP2 SWAP1 PUSH2 0x547F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3AD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xFA1 SWAP2 SWAP1 PUSH2 0x520D JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x40DA JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x1442 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x3B96 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x4240 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH2 0xFFFF DUP8 DUP2 AND SWAP1 PUSH1 0x10 DUP10 SWAP1 SHR AND PUSH1 0x20 DUP10 SWAP1 SHR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND SWAP1 PUSH1 0x80 DUP12 SWAP1 SHR PUSH1 0x1 AND SWAP1 DUP3 EQ ISZERO PUSH2 0x418F JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP JUMPDEST PUSH2 0xFFFF SWAP5 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP14 SWAP1 SWAP14 MSTORE PUSH1 0x40 DUP1 DUP15 KECCAK256 SLOAD SWAP5 SWAP1 SWAP6 AND DUP14 MSTORE SWAP4 SWAP1 SWAP12 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP13 SWAP3 AND SWAP11 SWAP1 SWAP10 POP SWAP8 POP SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1442 DUP4 DUP4 TIMESTAMP PUSH2 0x427D JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x421E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4254 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5922 JUMP JUMPDEST PUSH2 0x425E SWAP1 DUP6 PUSH2 0x5A7D JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x212B DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5AE9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4291 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5922 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x42AD JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1442 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x42E3 JUMPI PUSH1 0x0 PUSH2 0x42E8 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x42FC DUP11 DUP1 PUSH2 0x41E9 JUMP JUMPDEST DUP2 PUSH2 0x4309 JUMPI PUSH2 0x4309 PUSH2 0x5ABA JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x431B DUP4 DUP12 PUSH2 0x41E9 JUMP JUMPDEST DUP2 PUSH2 0x4328 JUMPI PUSH2 0x4328 PUSH2 0x5ABA JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x4338 DUP7 DUP9 PUSH2 0x5A7D JUMP JUMPDEST PUSH2 0x4342 SWAP2 SWAP1 PUSH2 0x5A7D JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x4356 DUP9 DUP11 PUSH2 0x5A7D JUMP JUMPDEST PUSH2 0x4360 SWAP2 SWAP1 PUSH2 0x5A7D JUMP JUMPDEST PUSH2 0x436A SWAP2 SWAP1 PUSH2 0x5A7D JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x4381 DUP11 DUP16 PUSH2 0x5A7D JUMP JUMPDEST PUSH2 0x438B SWAP2 SWAP1 PUSH2 0x5B01 JUMP JUMPDEST PUSH2 0x43A1 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5AE9 JUMP JUMPDEST PUSH2 0x43AB SWAP2 SWAP1 PUSH2 0x5AE9 JUMP JUMPDEST PUSH2 0x43B5 SWAP2 SWAP1 PUSH2 0x5AE9 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x43D0 SWAP1 PUSH2 0x53A1 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x43F2 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x4438 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x440B JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x4438 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x4438 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x4438 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x441D JUMP JUMPDEST POP PUSH2 0x4444 SWAP3 SWAP2 POP PUSH2 0x4448 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x4444 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4449 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x448A DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x44B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x44C0 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x44D0 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x44E0 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x44F7 DUP2 PUSH2 0x448F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x448A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x448A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4545 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4550 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x4567 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 POP PUSH2 0x4575 PUSH1 0x60 DUP11 ADD PUSH2 0x4505 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x458A PUSH1 0xA0 DUP11 ADD PUSH2 0x4517 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x45C5 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x45D5 DUP2 PUSH2 0x445D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x45F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x460B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1442 DUP3 PUSH2 0x4517 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4634 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x465B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1442 DUP2 PUSH2 0x445D JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x4693 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x46B7 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x46DB PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x46FF PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4723 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x473C PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x4752 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x47F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x480D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3B0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x483E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x4849 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x4859 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x487C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4888 DUP10 DUP3 DUP11 ADD PUSH2 0x47E3 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x489B SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x4505 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x48B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1442 DUP3 PUSH2 0x4505 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x48D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x48E3 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4901 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x491F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x492A DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x45D5 DUP2 PUSH2 0x448F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4950 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x495B DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4972 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 POP PUSH2 0x4980 PUSH1 0x60 DUP7 ADD PUSH2 0x4505 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x49A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x49CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x49D7 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x49EE DUP2 PUSH2 0x445D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4A1F JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x4A03 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x4A31 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x212B PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x49F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4AEA DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4AFA DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4B0A DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4B1A DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x44F7 DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4B48 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4B68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4B80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3B0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4BAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4BC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4BD1 DUP6 DUP3 DUP7 ADD PUSH2 0x4B56 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4BF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4C00 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4B1A PUSH1 0x60 DUP8 ADD PUSH2 0x4505 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x4C3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C46 DUP13 PUSH2 0x447F JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4C62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C72 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B56 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4C88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C98 DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B56 JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4CAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4CBE DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4B56 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x4CCF PUSH1 0x80 DUP15 ADD PUSH2 0x447F JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4CE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4CF3 DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x47E3 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x4D04 PUSH1 0xC0 DUP14 ADD PUSH2 0x4505 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x448A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4D52 DUP4 PUSH2 0x4D16 JUMP JUMPDEST SWAP2 POP PUSH2 0x4D60 PUSH1 0x20 DUP5 ADD PUSH2 0x4D16 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4D89 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4D99 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4DF8 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4DC6 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4E56 JUMPI PUSH2 0x4E56 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4EA3 JUMPI PUSH2 0x4EA3 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EC7 DUP4 PUSH2 0x4517 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4EE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x4EF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F01 PUSH2 0x4E33 JUMP JUMPDEST PUSH2 0x4F0A DUP4 PUSH2 0x4505 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4F17 DUP5 DUP5 ADD PUSH2 0x4505 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x4F27 PUSH1 0x40 DUP5 ADD PUSH2 0x4505 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x4F3A DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4F51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4F66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4F78 JUMPI PUSH2 0x4F78 PUSH2 0x4E04 JUMP JUMPDEST PUSH2 0x4FA8 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x4E5C JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x4FBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4FFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x5007 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x5017 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x5027 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x5065 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x5070 DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x4575 DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x50A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x50AD DUP2 PUSH2 0x445D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x50DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1442 DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x51B4 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1442 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x49F9 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x5286 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x52DC PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x524F JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x530F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x5371 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x49F9 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x53B5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x3B9C JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x5465 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1442 DUP2 PUSH2 0x448F JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x54E3 JUMPI PUSH2 0x54E3 PUSH2 0x549C JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x16A0 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x524F JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x557D JUMPI DUP4 CALLDATALOAD PUSH2 0x5555 DUP2 PUSH2 0x445D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5542 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x5625 DUP2 DUP6 ADD DUP4 PUSH2 0x524F JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x563E DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x5655 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x5202 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x56F7 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x56C5 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x56F7 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5716 JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x5771 PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x578F PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x56B1 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x57CB DUP5 DUP4 PUSH2 0x5702 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x57EA DUP6 DUP5 PUSH2 0x5702 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x5817 DUP2 DUP10 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x5834 DUP8 DUP7 PUSH2 0x49F9 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x5851 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x58AB PUSH2 0x200 DUP12 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x58C2 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x557D SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x58F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5934 JUMPI PUSH2 0x5934 PUSH2 0x549C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x599A JUMPI PUSH2 0x599A PUSH2 0x549C JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5A11 PUSH1 0xC0 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x5A69 PUSH2 0x160 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x5202 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5AB5 JUMPI PUSH2 0x5AB5 PUSH2 0x549C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5AFC JUMPI PUSH2 0x5AFC PUSH2 0x549C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5B37 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE SWAP6 LOG4 0xD7 0x27 0xC3 SWAP12 DUP3 0x25 GAS SWAP7 SWAP6 SWAP1 PUSH16 0xA367A1BBCD5D90CAA4E0D041BFB6D00C RETURNDATASIZE SDIV PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"503:3703:111:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755:112;;;;;;:::i;:::-;;:::i;:::-;;1941:43;;1981:3;1941:43;;;;;1320:25:124;;;1308:2;1293:18;1941:43:112;;;;;;;;5034:654;;;;;;:::i;:::-;;:::i;1988:58::-;;;;;;;;2700:42:124;2688:55;;;2670:74;;2658:2;2643:18;1988:58:112;2493:257:124;15738:122:112;15833:22;;;;15738:122;;;3055:34:124;3043:47;;;3025:66;;3013:2;2998:18;15738:122:112;2879:218:124;17958:385:112;;;;;;:::i;:::-;;:::i;2973:247:111:-;;;;;;:::i;:::-;;:::i;15596:114:112:-;15687:18;;15596:114;;19799:411;;;;;;:::i;:::-;;:::i;8616:509::-;;;;;;:::i;:::-;;:::i;18772:152::-;;;;;;:::i;:::-;;:::i;12875:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13005:16:112;;;;;;;;:9;:16;;;;;;;;;12998:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;12875:151;;;;;;;;:::i;14397:168::-;;;;;;:::i;:::-;;:::i;3250:244:111:-;;;;;;:::i;:::-;;:::i;12077:604:112:-;;;;;;:::i;:::-;;:::i;14010:167::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;14154:18:112;;;;;;;:12;:18;;;;;14147:25;;;;;;;;;;;;14010:167;;;;8661:13:124;;8643:32;;8631:2;8616:18;14010:167:112;8419:262:124;3524:275:111;;;;;;:::i;:::-;;:::i;15288:109:112:-;;;;;;:::i;:::-;15375:17;;15353:7;15375:17;;;:13;:17;;;;;;;;;15288:109;1947:270:111;;;;;;:::i;:::-;;:::i;7220:523:112:-;;;;;;:::i;:::-;;:::i;9651:404::-;;;;;;:::i;:::-;;:::i;4601:405::-;;;;;;:::i;:::-;;:::i;17775:155::-;;;;;;:::i;:::-;;:::i;1042:326:111:-;;;;;;:::i;:::-;;:::i;5716:559:112:-;;;;;;:::i;:::-;;:::i;3961:334::-;;;;;;:::i;:::-;;:::i;15888:133::-;15989:27;;;;;;;15888:133;;19613:158;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17013:734::-;;;;;;:::i;:::-;;:::i;1398:217:111:-;;;;;;:::i;:::-;;:::i;2247:386::-;;;;;;:::i;:::-;;:::i;9153:268:112:-;;;;;;:::i;:::-;;:::i;12709:138::-;;;;;;:::i;:::-;;:::i;6303:889::-;;;;;;:::i;:::-;;:::i;10866:1183::-;;;;;;:::i;:::-;;:::i;18952:278::-;;;;;;:::i;:::-;;:::i;13054:721::-;;;;;;:::i;:::-;;:::i;:::-;;;;17452:25:124;;;17508:2;17493:18;;17486:34;;;;17536:18;;;17529:34;;;;17594:2;17579:18;;17572:34;17637:3;17622:19;;17615:35;17681:3;17666:19;;17659:35;17439:3;17424:19;13054:721:112;17165:535:124;13803:179:112;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;13947:16:112;;;;;;;:9;:16;;;;;13940:37;;;;;;;;;;;;13803:179;3720:213;;;;;;:::i;:::-;;:::i;9449:174::-;;;;;;:::i;:::-;;:::i;20602:180::-;;;;;;:::i;:::-;;:::i;14205:164::-;;;;;;:::i;:::-;;:::i;14593:667::-;;;:::i;:::-;;;;;;;:::i;19258:327::-;;;;;;:::i;:::-;;:::i;16211:774::-;;;;;;:::i;:::-;;:::i;1645:272:111:-;;;;;;:::i;:::-;;:::i;4323:250:112:-;;;;;;:::i;:::-;;:::i;2663:280:111:-;;;;;;:::i;:::-;;:::i;20394:180:112:-;;;;;;:::i;:::-;;:::i;15425:143::-;15532:31;;;;15425:143;;20238:128;;;;;;:::i;:::-;20336:25;;20314:7;20336:25;;;:19;:25;;;;;;;;;20238:128;7771:817;;;;;;:::i;:::-;;:::i;18371:373::-;;;;;;:::i;:::-;;:::i;773:239:111:-;;;;;;:::i;:::-;;:::i;16049:134:112:-;;;5284:3:88;23864:38:124;;23852:2;23837:18;16049:134:112;23720:188:124;3829:375:111;;;;;;:::i;:::-;;:::i;10083:755:112:-;10261:16;:39;10308:9;10325:13;10346:12;10366:16;10390:437;;;;;;;;10454:14;;;;;;;;;;;10390:437;;;;;;10491:11;10390:437;;;;10529:15;10390:437;;;;;;10565:9;10390:437;;;;;;10590:4;10390:437;;;;;;10619:13;10390:437;;;;;;10655:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:437;;;;;;10719:25;;;;;;;:19;10390:437;10719:25;;;;;;;;;;;10390:437;;;;10775:43;;;;;;;10390:437;;;;;10775:18;:41;;;;;;:43;;;;;10390:437;10775:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:437;;;;;10261:572;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755;;;;;:::o;5034:654::-;5265:150;;;;;5303:10;5265:150;;;26642:34:124;5329:4:112;26692:18:124;;;26685:43;26744:18;;;26737:34;;;26787:18;;;26780:34;;;26863:4;26851:17;;26830:19;;;26823:46;26885:19;;;26878:35;;;26929:19;;;26922:35;;;5265:30:112;;;;;;26553:19:124;;5265:150:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;5492:24:112;;;;;;;;:12;:24;;;;;;;;;5524:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5421:262;;;;;5454:9;5421:262;;;27396:25:124;5471:13:112;27437:18:124;;;27430:34;27480:18;;;27473:34;;;;27608:13;;27604:22;;27584:18;;;27577:50;27664:22;27643:19;;;27636:51;27728:22;;27724:31;;;27703:19;;;27696:60;27797:22;27793:35;;;27772:19;;;27765:64;5421:11:112;;:25;;27368:19:124;;5421:262:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:654;;;;;;;;:::o;17958:385::-;2178:23;:21;:23::i;:::-;18143:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;18122:19:::1;::::0;::::1;18114:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;18187:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18215:16:112::1;::::0;;:13:::1;:16;::::0;;;:25:::1;::::0;;::::1;:16:::0;::::1;:25;18187:53;18242:23;;;;;;;;;;;;;;;;::::0;18179:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18272:16:112::1;::::0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:44:::1;;:66:::0;;;::::1;::::0;;;::::1;;::::0;;17958:385::o;2973:247:111:-;3040:13;3055:24;3083:83;3135:13;3156:4;3083:44;:83::i;:::-;3039:127;;;;3172:43;3191:5;3198:16;3172:18;:43::i;:::-;3033:187;;2973:247;:::o;19799:411:112:-;19871:10;:30;19909:9;19926:13;19947:16;19971:19;19998:12;:24;20011:10;19998:24;;;;;;;;;;;;;;;20030:169;;;;;;;;20091:14;;;;;;;;;;;20030:169;;;;;;20123:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20030:169;;;;;;20180:10;20030:169;;;;;19871:334;;;;;;;;;;;;;;;;;;;28636:25:124;;;28692:2;28677:18;;;28670:34;;;;28735:2;28720:18;;;28713:34;;;;28778:2;28763:18;;28756:34;;;;28821:3;28806:19;;28799:35;28871:13;;28865:3;28850:19;;28843:42;28932:15;;;28926:22;28950:42;28922:71;28916:3;28901:19;;28894:100;29041:15;29035:22;29059:4;29031:33;29025:3;29010:19;;29003:62;28623:3;28608:19;;28065:1006;19871:334:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19799:411;:::o;8616:509::-;8748:7;8776:11;:24;8810:9;8829:13;8852:12;:24;8865:10;8852:24;;;;;;;;;;;;;;;8886:226;;;;;;;;8934:5;8886:226;;;;;;8959:6;8886:226;;;;9022:16;8995:44;;;;;;;;:::i;:::-;8886:226;;;;;;;;:::i;:::-;;;9063:10;8886:226;;;;9097:4;8886:226;;;;;8776:344;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8763:357;;8616:509;;;;;;:::o;18772:152::-;2178:23;:21;:23::i;:::-;18887:18:::1;:32:::0;18772:152::o;14397:168::-;14524:16;;;14502:7;14524:16;;;:9;:16;;;;;:36;;:34;:36::i;:::-;14517:43;14397:168;-1:-1:-1;;14397:168:112:o;3250:244:111:-;6796:6:94;6786:17;;3324:13:111;6899:21:94;;;3414:13:111;6899:21:94;;;;;;6837:42;6899:21;;;;6826:2;6822:13;;;6818:62;3451:38:111;6899:21:94;6818:62;3451:25:111;:38::i;12077:604:112:-;12256:50;12309:293;;;;;;;;12366:15;12309:293;;;;;;12396:5;12309:293;;;;;;12417:6;12309:293;;;;12439:6;;12309:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12309:293:112;;;-1:-1:-1;;;12309:293:112;;;;;;;;;;;12515:27;;;;;;;;12309:293;;;;;;;;12573:22;;12309:293;;;;;;;;12646:16;;;;;:9;:16;;;;;12608:68;;;;;12256:346;;-1:-1:-1;12608:14:112;;:37;;:68;;12256:346;;12608:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12250:431;12077:604;;;;;;:::o;3524:275:111:-;7548:6:94;7538:17;;3602:13:111;7623:21:94;;;3704:13:111;7623:21:94;;;;;;;;7589:2;7585:13;;;7600:3;7581:23;3741:53:111;7623:21:94;7581:23;3741:29:111;:53::i;1947:270::-;2003:7;2019:13;2034:14;2050:24;2078:70;2117:13;2138:4;2078:31;:70::i;:::-;2018:130;;;;;;2162:50;2168:5;2175:6;2183:16;2201:10;2162:5;:50::i;:::-;2155:57;1947:270;-1:-1:-1;;;;;1947:270:111:o;7220:523:112:-;7365:7;7393:11;:24;7427:9;7446:13;7469:12;:24;7482:10;7469:24;;;;;;;;;;;;;;;7503:227;;;;;;;;7551:5;7503:227;;;;;;7576:6;7503:227;;;;7639:16;7612:44;;;;;;;;:::i;:::-;7503:227;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;7503:227:112;;;;;7393:345;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9651:404::-;9769:11;:41;9818:9;9835:13;9856:16;9880:12;:24;9893:10;9880:24;;;;;;;;;;;;;;;9912:5;9925:15;9948:14;;;;;;;;;;;9970:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10033:10;10013:31;;;;:19;:31;;;;;;;;9769:281;;;;;;;;;;;;;32259:25:124;;;;32300:18;;;32293:34;;;;32343:18;;;32336:34;;;;32386:18;;;32379:34;;;;32432:42;32511:15;;;32490:19;;;32483:44;32571:14;32564:22;32543:19;;;32536:51;32636:6;32624:19;;;32603;;;32596:48;32681:15;32660:19;;;32653:44;10013:31:112;;32713:19:124;;;32706:46;32231:19;;9769:281:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9651:404;;:::o;4601:405::-;4810:24;;;;;;;;:12;:24;;;;;;;;;4842:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:262;;;;;4772:9;4739:262;;;27396:25:124;4789:13:112;27437:18:124;;;27430:34;27480:18;;;27473:34;;;;27608:13;;27604:22;;27584:18;;;27577:50;27664:22;27643:19;;;27636:51;27728:22;;27724:31;;;27703:19;;;27696:60;27797:22;27793:35;;;27772:19;;;27765:64;4739:11:112;;:25;;27368:19:124;;4739:262:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:405;;;;:::o;17775:155::-;2178:23;:21;:23::i;:::-;17864:61:::1;::::0;;;;17893:9:::1;17864:61;::::0;::::1;33050:25:124::0;17904:13:112::1;33091:18:124::0;;;33084:34;33166:42;33154:55;;33134:18;;;33127:83;17864:9:112::1;::::0;:28:::1;::::0;33023:18:124;;17864:61:112::1;32763:453:124::0;1042:326:111;1129:13;1144:14;1160:19;1181:16;1199:7;1210:70;1260:13;1275:4;1210:49;:70::i;:::-;1128:152;;;;;;;;;;1287:76;1304:5;1311:6;1319:10;1331:12;1345:8;1355:1;1358;1361;1287:16;:76::i;5716:559:112:-;5826:7;5854:11;:27;5891:9;5910:13;5933:16;5959:12;:24;5972:10;5959:24;;;;;;;;;;;;;;;5993:269;;;;;;;;6044:5;5993:269;;;;;;6069:6;5993:269;;;;6091:2;5993:269;;;;;;6120:14;;;;;;;;;;;5993:269;;;;;;6154:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5993:269;;;;;;6240:10;6220:31;;;;:19;5993:269;6220:31;;;;;;;;;;;;;5993:269;;;;;;;5854:416;;;;;;;;;;;;;33733:25:124;;;;33774:18;;;33767:34;;;;33817:18;;;33810:34;;;;33860:18;;;33853:34;;;;33989:13;;33985:22;;33964:19;;;33957:51;34051:15;;;34045:22;34024:19;;;34017:51;34115:15;;;34109:22;34105:31;;34084:19;;;34077:60;33875:2;34180:15;;34174:22;34153:19;;;34146:51;33979:3;34244:16;;34238:23;34234:32;34213:19;;;34206:61;34039:3;34314:16;34308:23;34304:34;34283:19;;;34276:63;33705:19;;5854:416:112;33221:1124:124;3961:334:112;2468:13;:11;:13::i;:::-;4195:24:::1;::::0;;::::1;;::::0;;;:12:::1;:24;::::0;;;;;;4118:172;;;;;4157:9:::1;4118:172;::::0;::::1;34784:25:124::0;4174:13:112::1;34825:18:124::0;;;34818:34;34868:18;;;34861:34;;;;34992:15;;;34972:18;;;34965:43;35024:19;;;35017:35;;;35068:19;;;35061:44;35154:6;35142:19;;35121;;;35114:48;4118:11:112::1;::::0;:31:::1;::::0;34756:19:124;;4118:172:112::1;34350:818:124::0;19613:158:112;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19746:20:112;;;;;;;:16;:20;;;;;;;;;19739:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19613:158;;;:::o;17013:734::-;2178:23;:21;:23::i;:::-;17253:9:::1;:28;17291:9;17310:13;17333:364;;;;;;;;17380:5;17333:364;;;;;;17412:13;17333:364;;;;;;17456:17;17333:364;;;;;;17506:19;17333:364;;;;;;17566:27;17333:364;;;;;;17620:14;;;;;;;;;;;17333:364;;;;;;17665:21;5284:3:88::0;;16049:134:112;17665:21:::1;17333:364;;;;::::0;17253:452:::1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17242:501;;;17720:14;:16:::0;;;;::::1;;;::::0;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;17013:734:::0;;;;;:::o;1398:217:111:-;1457:7;1473:13;1488:14;1506:55;1541:13;1556:4;1506:34;:55::i;:::-;1472:89;;;;1575:35;1584:5;1591:6;1599:10;1575:8;:35::i;:::-;1568:42;1398:217;-1:-1:-1;;;;1398:217:111:o;2247:386::-;2335:7;2358:13;2379:14;2401:24;2433:16;2457:7;2473:62;2515:13;2530:4;2473:41;:62::i;:::-;2350:185;;;;;;;;;;2549:79;2565:5;2572:6;2580:16;2598:10;2610:8;2620:1;2623;2626;2549:15;:79::i;:::-;2542:86;2247:386;-1:-1:-1;;;;;;;;;2247:386:111:o;9153:268:112:-;9297:16;;;;;;;:9;:16;;;;;;;;9334:10;9321:24;;:12;:24;;;;;;9252:11;;:37;;9307:5;9393:16;9366:44;;;;;;;;:::i;:::-;9252:164;;;;;;;;;;;;;;;;;;:::i;12709:138::-;12792:50;;;;;:9;;:31;;:50;;12824:9;;12835:6;;;;12792:50;;;:::i;6303:889::-;6471:11;:25;6504:9;6521:13;6542:16;6566:12;:24;6579:10;6566:24;;;;;;;;;;;;;;;6598:583;;;;;;;;6645:5;6598:583;;;;;;6666:10;6598:583;;;;;;6698:10;6598:583;;;;;;6726:6;6598:583;;;;6787:16;6760:44;;;;;;;;:::i;:::-;6598:583;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;6869:4;6598:583;;;;;;;;6915:31;;;;;6598:583;;;;6971:14;;;;;;6598:583;;;;7003:35;;;;;;;6598:583;;;;;7003:33;:18;:33;;;;:35;;;;;6598:583;;7003:35;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6598:583;;;;;;7067:31;;;;;;;:19;6598:583;7067:31;;;;;;;;;;;6598:583;;;;7129:43;;;;;;;6598:583;;;;;7129:18;:41;;;;;;:43;;;;;6598:583;7129:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6598:583;;;;;6471:716;;;;;;;;;;;;;;;;;;;:::i;10866:1183::-;11129:44;11176:711;;;;;;;;11227:15;11176:711;;;;;;11258:6;;11176:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;11281:7;;;;;;11176:711;;;11281:7;;11176:711;11281:7;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;11315:17;;;;;;11176:711;;;11315:17;;11176:711;11315:17;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11378:6;;;;;;11176:711;;11378:6;;;;11176:711;;;;;;;;-1:-1:-1;11176:711:112;;;-1:-1:-1;;;11176:711:112;;;;;;;;;;;;11454:27;;;;;;;;11176:711;;;;;;;;11512:22;;11176:711;;;;11574:31;;;;;11176:711;;;;11628:14;;;;;;11176:711;;;;;11677:18;11176:711;;;;;;;;11723:31;;;;;:19;:31;;;;;;;;;11176:711;;;;11801:34;;;;;;;11454:27;11176:711;;;;11801:32;;:34;;;;;11176:711;11801:34;;;;;;11176:711;11801:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11789:91;;;;;11862:10;11789:91;;;2670:74:124;11789:63:112;;;;;;;;2643:18:124;;11789:91:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11176:711;;;;11995:24;;;;;;;:12;:24;;;;;;;11894:150;;;;;11129:758;;-1:-1:-1;11894:14:112;;:31;;:150;;11933:9;;11950:13;;11971:16;;11995:24;11129:758;;11894:150;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11123:926;10866:1183;;;;;;;;;;;:::o;18952:278::-;2178:23;:21;:23::i;:::-;19117:46:::1;19169:56:::0;;::::1;::::0;::::1;19117:46:::0;::::1;19169:56;19117:22;19169:56:::0;18952:278::o;13054:721::-;13494:268;;;13559:18;;;;13171:27;13559:18;;;:12;:18;;;;;;;13494:268;;;;;;;;;;;;;;13604:14;;;;;;;13494:268;;;;;;;;;;;13660:35;;;;;;;13171:27;;;;;;;;;;;;13381:9;;:35;;13426:9;;13445:13;;13468:16;;-1:-1:-1;13494:268:112;;;13660:18;:33;;;;:35;;;;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13494:268;;;;;;13726:25;;;;;;;:19;13494:268;13726:25;;;;;;;;;;;;;13494:268;;;;;;;13381:389;;;;;;;;;;;;;44723:25:124;;;;44764:18;;;44757:34;;;;44807:18;;;44800:34;;;;44876:13;;44870:20;44850:18;;;44843:48;44934:15;;;44928:22;44907:19;;;44900:51;44986:15;;;44980:22;45100:21;;45079:19;;;45072:50;44865:2;45169:15;;45163:22;45159:31;;;45138:19;;;45131:60;44922:3;45238:16;;;45232:23;45228:34;45207:19;;;45200:63;44695:19;;13381:389:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13368:402;;;;-1:-1:-1;13368:402:112;;-1:-1:-1;13368:402:112;-1:-1:-1;13368:402:112;-1:-1:-1;13368:402:112;;-1:-1:-1;13054:721:112;-1:-1:-1;;13054:721:112:o;3720:213::-;1981:3;1217:12:87;;;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;45973:2:124;1202:146:87;;;45955:21:124;46012:2;45992:18;;;45985:30;46051:34;46031:18;;;46024:62;46122:16;46102:18;;;46095:44;46156:19;;1202:146:87;45771:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;3828:18:112::1;3816:30;;:8;:30;;;3848:33;;;;;;;;;;;;;;;;::::0;3808:74:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3888:31:112::1;:40:::0;;;::::1;3922:6;3888:40;::::0;;1506:55:87;;;;1534:12;:20;;;;;;1158:407;;3720:213:112;:::o;9449:174::-;9588:16;;;;;;;;:9;:16;;;;;;;9543:75;;;;;;;;46423:25:124;;;;46525:18;;;46518:43;;;;46597:15;;;46577:18;;;46570:43;9543:11:112;;:44;;46396:18:124;;9543:75:112;46186:433:124;20602:180:112;2330:16;:14;:16::i;:::-;20729:48:::1;::::0;;;;46844:42:124;46913:15;;;20729:48:112::1;::::0;::::1;46895:34:124::0;46965:15;;46945:18;;;46938:43;46997:18;;;46990:34;;;20729:9:112::1;::::0;:29:::1;::::0;46807:18:124;;20729:48:112::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20602:180:::0;;;:::o;14205:164::-;14326:16;;;14304:7;14326:16;;;:9;:16;;;;;:38;;:36;:38::i;14593:667::-;14712:14;;14660:16;;14712:14;;;;;14684:25;;14712:14;14802:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14802:32:112;;14770:64;;14846:9;14841:221;14865:17;14861:1;:21;14841:221;;;14929:1;14901:16;;;:13;:16;;;;;;:30;:16;:30;14897:159;;14984:16;;;;:13;:16;;;;;;;;14943:12;14956:24;14960:20;14998:1;14956:24;:::i;:::-;14943:38;;;;;;;;:::i;:::-;;;;;;:57;;;;;;;;;;;14897:159;;;15025:22;;;;:::i;:::-;;;;14897:159;14884:3;;;;:::i;:::-;;;;14841:221;;;-1:-1:-1;15180:44:112;;15159:66;;15166:12;14593:667;-1:-1:-1;14593:667:112:o;19258:327::-;2178:23;:21;:23::i;:::-;19512:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;19503:7:::1;::::0;::::1;19495:48;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19549:20:112::1;::::0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;;;;:31;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19572:8;;19549:20;:31:::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;16211:774::-:0;16428:16;;;;;;;;:9;:16;;;;;;;;;:30;;;16460:24;;;;;;;;;;;;;;;;;;;;;16428:30;16414:10;:44;16406:79;;;;;;;;;;;;;:::i;:::-;;16491:11;:35;16534:9;16551:13;16572:16;16596:12;16616:358;;;;;;;;16666:5;16616:358;;;;;;16687:4;16616:358;;;;;;16705:2;16616:358;;;;;;16725:6;16616:358;;;;16760:17;16616:358;;;;16804:15;16616:358;;;;16844:14;;;;;;;;;;;16616:358;;;;;;16876:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16616:358;;;;;;16940:25;;;;;;:19;16616:358;16940:25;;;;;;;;;;;16616:358;;;;;;16491:489;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16211:774;;;;;;:::o;1645:272:111:-;1700:13;1715:14;1731:24;1757:19;1780:60;1820:13;1835:4;3345:6:94;3335:17;;;3170:7;3545:21;;;;;;;;;;;;;;;;3388:34;3377:2;3373:13;;;3369:54;;3470:4;3458:3;3454:14;;;3450:25;;3506:3;3502:14;3498:27;;3043:569;1780:60:111;1699:141;;;;;;;;1847:65;1854:5;1861:6;1869:16;1887:12;1901:10;1847:6;:65::i;4323:250:112:-;4451:7;2468:13;:11;:13::i;:::-;4511:16:::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;4549:18:::1;::::0;4479:89;;;;;::::1;::::0;::::1;49373:25:124::0;;;;49414:18;;;49407:83;;;;49506:18;;;49499:34;;;49549:18;;;49542:34;;;49592:19;;;49585:35;4479:11:112::1;::::0;:31:::1;::::0;49345:19:124;;4479:89:112::1;49079:547:124::0;2663:280:111;2730:7;2746:13;2761:14;2777:24;2805:70;2844:13;2865:4;2805:31;:70::i;:::-;2745:130;;;;;;2889:49;2906:5;2913:6;2921:16;2889;:49::i;20394:180:112:-;2178:23;:21;:23::i;:::-;20507:62:::1;::::0;;;;20552:9:::1;20507:62;::::0;::::1;49865:25:124::0;49938:42;49926:55;;49906:18;;;49899:83;20507:9:112::1;::::0;:44:::1;::::0;49838:18:124;;20507:62:112::1;49631:357:124::0;7771:817:112;8032:166;;;;;8072:10;8032:166;;;26642:34:124;8100:4:112;26692:18:124;;;26685:43;26744:18;;;26737:34;;;26787:18;;;26780:34;;;26863:4;26851:17;;26830:19;;;26823:46;26885:19;;;26878:35;;;26929:19;;;26922:35;;;8009:7:112;;8032:30;;;;;;26553:19:124;;8032:166:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8218:42;8263:215;;;;;;;;8309:5;8263:215;;;;;;8332:6;8263:215;;;;8393:16;8366:44;;;;;;;;:::i;:::-;8263:215;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;8263:215:112;;;;;;;8544:24;;;:12;:24;;;;;8493:84;;;;;8218:260;;-1:-1:-1;8493:11:112;;:24;;:84;;8518:9;;8529:13;;8218:260;;8493:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8486:91;7771:817;-1:-1:-1;;;;;;;;;;7771:817:112:o;18371:373::-;2178:23;:21;:23::i;:::-;18564:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;18543:19:::1;::::0;::::1;18535:59;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18608:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18636:16:112::1;::::0;;:13:::1;:16;::::0;;;:25:::1;::::0;;::::1;:16:::0;::::1;:25;18608:53;18663:23;;;;;;;;;;;;;;;;::::0;18600:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18693:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;50177:19:124;;50164:33;;18726:13:112;;18693:46:::1;-1:-1:-1::0;;;;18371:373:112:o;773:239:111:-;819:6:94;809:17;;;828:13:111;966:21:94;;;922:13:111;966:21:94;;;;;;;;;851:2;847:13;;;862:34;843:54;;928:3;924:14;;;920:27;960:47:111;966:21:94;843:54;982:10:111;920:27:94;960:6:111;:47::i;3829:375::-;3916:23;3947:17;3972:12;3992:19;4019:18;4046:70;4088:13;4103:5;4110;4046:41;:70::i;:::-;3908:208;;;;;;;;;;4122:77;4138:15;4155:9;4166:4;4172:11;4185:13;4122:15;:77::i;2497:184:112:-;2617:10;2573:54;;:18;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;2635:35;;;;;;;;;;;;;;;;;2558:118;;;;;;;;;;;;;;:::i;:::-;;2497:184::o;5841:375:94:-;6093:6;6083:17;;5980:7;6171:21;;;;;;;;;;;;;6135:2;6131:13;;;6146:4;6127:24;5841:375;;;;;;:::o;2809:545:102:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;:::-;:90;;:139::i;3005:345::-;2915:439;2809:545;;;:::o;3954:551:94:-;4080:7;;;4222:6;4212:17;;4265:34;4254:2;4250:13;;;4246:54;;;4347:4;4335:3;4331:14;;;4327:25;;4368:27;;4364:74;;;4414:17;4405:26;;4364:74;4452:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;4475:6:94;-1:-1:-1;4483:16:94;-1:-1:-1;3954:551:94;;;;;:::o;1445:501::-;1582:7;;;;;1709:3;1705:14;;;1721:10;1701:31;1758:3;1754:14;;;1770:4;1750:25;1582:7;;;1841:38;1860:12;1714:4;819:6;809:17;;;683:7;966:21;;;;;;;;;;;;;;851:2;847:13;;;862:34;843:54;;928:3;924:14;;;920:27;556:459;;;;;;1841:38;1786:93;;;;-1:-1:-1;1786:93:94;;-1:-1:-1;1923:8:94;;-1:-1:-1;1933:7:94;;-1:-1:-1;1445:501:94;;-1:-1:-1;;;;;;1445:501:94:o;2876:177:112:-;2954:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2942:68;;;;;2999:10;2942:68;;;2670:74:124;2942:56:112;;;;;;;;2643:18:124;;2942:68:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3018:24;;;;;;;;;;;;;;;;;2927:121;;;;;;;;;;;;;;:::i;2226:442:94:-;2355:7;;2457:6;2447:17;;2500:34;2489:2;2485:13;;;2481:54;;;2550:27;;2546:74;;;-1:-1:-1;2596:17:94;2546:74;2633:21;;;;;;;;;;;;;;;;;;;;;;2226:442;-1:-1:-1;;;2226:442:94:o;4973:528::-;5109:7;5118;5127;5136;5145:5;5158:16;5180:13;5201;5216:14;5232:24;5260:55;5285:12;5305:4;5260:17;:55::i;:::-;5200:115;;;;-1:-1:-1;5200:115:94;;5359:3;5355:14;;;5371:10;5351:31;;-1:-1:-1;5408:3:94;5404:14;5420:4;5400:25;;-1:-1:-1;5200:115:94;-1:-1:-1;;;;;;;;4973:528:94:o;2685:187:112:-;2766:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2754:71;;;;;2814:10;2754:71;;;2670:74:124;2754:59:112;;;;;;;;2643:18:124;;2754:71:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2833:28;;;;;;;;;;;;;;;;;2739:128;;;;;;;;;;;;;;:::i;1895:528:102:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;8224:871:94:-;8380:7;;;;;8599:6;8588:18;;;;8636:2;8632:14;;;8628:27;8678:2;8674:14;;;8690:42;8670:63;8767:34;8756:46;;;;8834:3;8830:15;;;8847:3;8826:25;;8867:32;;8863:84;;;8923:17;8909:31;;8863:84;8968:31;;;;;;;;;;;;;;;;;;9007:25;;;;;;;;;;;8968:31;;;;;9007:25;;;9040:4;;-1:-1:-1;9007:25:94;-1:-1:-1;9007:25:94;;-1:-1:-1;8224:871:94;-1:-1:-1;;;;8224:871:94:o;3142:212:105:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;1780:972::-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:154:124;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:134;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:118::-;398:5;391:13;384:21;377:5;374:32;364:60;;420:1;417;410:12;435:734;527:6;535;543;551;559;612:3;600:9;591:7;587:23;583:33;580:53;;;629:1;626;619:12;580:53;668:9;655:23;687:31;712:5;687:31;:::i;:::-;737:5;-1:-1:-1;794:2:124;779:18;;766:32;807:33;766:32;807:33;:::i;:::-;859:7;-1:-1:-1;918:2:124;903:18;;890:32;931:33;890:32;931:33;:::i;:::-;983:7;-1:-1:-1;1037:2:124;1022:18;;1009:32;;-1:-1:-1;1093:3:124;1078:19;;1065:33;1107:30;1065:33;1107:30;:::i;:::-;1156:7;1146:17;;;435:734;;;;;;;;:::o;1356:159::-;1423:20;;1483:6;1472:18;;1462:29;;1452:57;;1505:1;1502;1495:12;1520:156;1586:20;;1646:4;1635:16;;1625:27;;1615:55;;1666:1;1663;1656:12;1681:807;1800:6;1808;1816;1824;1832;1840;1848;1856;1909:3;1897:9;1888:7;1884:23;1880:33;1877:53;;;1926:1;1923;1916:12;1877:53;1965:9;1952:23;1984:31;2009:5;1984:31;:::i;:::-;2034:5;-1:-1:-1;2086:2:124;2071:18;;2058:32;;-1:-1:-1;2142:2:124;2127:18;;2114:32;2155:33;2114:32;2155:33;:::i;:::-;2207:7;-1:-1:-1;2233:37:124;2266:2;2251:18;;2233:37;:::i;:::-;2223:47;;2317:3;2306:9;2302:19;2289:33;2279:43;;2341:37;2373:3;2362:9;2358:19;2341:37;:::i;:::-;2331:47;;2425:3;2414:9;2410:19;2397:33;2387:43;;2477:3;2466:9;2462:19;2449:33;2439:43;;1681:807;;;;;;;;;;;:::o;3102:388::-;3170:6;3178;3231:2;3219:9;3210:7;3206:23;3202:32;3199:52;;;3247:1;3244;3237:12;3199:52;3286:9;3273:23;3305:31;3330:5;3305:31;:::i;:::-;3355:5;-1:-1:-1;3412:2:124;3397:18;;3384:32;3425:33;3384:32;3425:33;:::i;:::-;3477:7;3467:17;;;3102:388;;;;;:::o;3495:180::-;3554:6;3607:2;3595:9;3586:7;3582:23;3578:32;3575:52;;;3623:1;3620;3613:12;3575:52;-1:-1:-1;3646:23:124;;3495:180;-1:-1:-1;3495:180:124:o;3680:182::-;3737:6;3790:2;3778:9;3769:7;3765:23;3761:32;3758:52;;;3806:1;3803;3796:12;3758:52;3829:27;3846:9;3829:27;:::i;3867:383::-;3944:6;3952;3960;4013:2;4001:9;3992:7;3988:23;3984:32;3981:52;;;4029:1;4026;4019:12;3981:52;4068:9;4055:23;4087:31;4112:5;4087:31;:::i;:::-;4137:5;4189:2;4174:18;;4161:32;;-1:-1:-1;4240:2:124;4225:18;;;4212:32;;3867:383;-1:-1:-1;;;3867:383:124:o;4440:247::-;4499:6;4552:2;4540:9;4531:7;4527:23;4523:32;4520:52;;;4568:1;4565;4558:12;4520:52;4607:9;4594:23;4626:31;4651:5;4626:31;:::i;5121:2109::-;5370:13;;4773:12;4761:25;;5315:3;5300:19;;5442:4;5434:6;5430:17;5424:24;5457:54;5505:4;5494:9;5490:20;5476:12;2832:34;2821:46;2809:59;;2755:119;5457:54;;5560:4;5552:6;5548:17;5542:24;5575:56;5625:4;5614:9;5610:20;5594:14;2832:34;2821:46;2809:59;;2755:119;5575:56;;5680:4;5672:6;5668:17;5662:24;5695:56;5745:4;5734:9;5730:20;5714:14;2832:34;2821:46;2809:59;;2755:119;5695:56;;5800:4;5792:6;5788:17;5782:24;5815:56;5865:4;5854:9;5850:20;5834:14;2832:34;2821:46;2809:59;;2755:119;5815:56;;5920:4;5912:6;5908:17;5902:24;5935:56;5985:4;5974:9;5970:20;5954:14;2832:34;2821:46;2809:59;;2755:119;5935:56;;6040:4;6032:6;6028:17;6022:24;6055:55;6104:4;6093:9;6089:20;6073:14;4869:12;4858:24;4846:37;;4793:96;6055:55;;6159:4;6151:6;6147:17;6141:24;6174:55;6223:4;6212:9;6208:20;6192:14;4970:6;4959:18;4947:31;;4894:90;6174:55;-1:-1:-1;6248:6:124;6291:15;;;6285:22;5066:42;5055:54;;;6351:18;;;5043:67;;;;6389:6;6432:15;;;6426:22;5055:54;;6492:18;;;5043:67;6530:6;6573:15;;;6567:22;5055:54;;6633:18;;;5043:67;6671:6;6715:15;;;6709:22;5055:54;;;6776:18;;;5043:67;6814:6;6858:15;;;6852:22;2832:34;2821:46;;;6919:18;;;2809:59;;;;6957:6;7001:15;;;6995:22;2821:46;;7062:18;;;2809:59;7100:6;7144:15;;;7138:22;2821:46;7205:18;;;;2809:59;;;;5121:2109;:::o;7235:347::-;7286:8;7296:6;7350:3;7343:4;7335:6;7331:17;7327:27;7317:55;;7368:1;7365;7358:12;7317:55;-1:-1:-1;7391:20:124;;7434:18;7423:30;;7420:50;;;7466:1;7463;7456:12;7420:50;7503:4;7495:6;7491:17;7479:29;;7555:3;7548:4;7539:6;7531;7527:19;7523:30;7520:39;7517:59;;;7572:1;7569;7562:12;7587:827;7692:6;7700;7708;7716;7724;7732;7785:3;7773:9;7764:7;7760:23;7756:33;7753:53;;;7802:1;7799;7792:12;7753:53;7841:9;7828:23;7860:31;7885:5;7860:31;:::i;:::-;7910:5;-1:-1:-1;7967:2:124;7952:18;;7939:32;7980:33;7939:32;7980:33;:::i;:::-;8032:7;-1:-1:-1;8086:2:124;8071:18;;8058:32;;-1:-1:-1;8141:2:124;8126:18;;8113:32;8168:18;8157:30;;8154:50;;;8200:1;8197;8190:12;8154:50;8239:58;8289:7;8280:6;8269:9;8265:22;8239:58;:::i;:::-;8316:8;;-1:-1:-1;8213:84:124;-1:-1:-1;8370:38:124;;-1:-1:-1;8403:3:124;8388:19;;8370:38;:::i;:::-;8360:48;;7587:827;;;;;;;;:::o;8686:184::-;8744:6;8797:2;8785:9;8776:7;8772:23;8768:32;8765:52;;;8813:1;8810;8803:12;8765:52;8836:28;8854:9;8836:28;:::i;9106:525::-;9192:6;9200;9208;9216;9269:3;9257:9;9248:7;9244:23;9240:33;9237:53;;;9286:1;9283;9276:12;9237:53;9325:9;9312:23;9344:31;9369:5;9344:31;:::i;:::-;9394:5;-1:-1:-1;9446:2:124;9431:18;;9418:32;;-1:-1:-1;9497:2:124;9482:18;;9469:32;;-1:-1:-1;9553:2:124;9538:18;;9525:32;9566:33;9525:32;9566:33;:::i;:::-;9106:525;;;;-1:-1:-1;9106:525:124;;-1:-1:-1;;9106:525:124:o;9636:382::-;9701:6;9709;9762:2;9750:9;9741:7;9737:23;9733:32;9730:52;;;9778:1;9775;9768:12;9730:52;9817:9;9804:23;9836:31;9861:5;9836:31;:::i;:::-;9886:5;-1:-1:-1;9943:2:124;9928:18;;9915:32;9956:30;9915:32;9956:30;:::i;10023:529::-;10108:6;10116;10124;10132;10185:3;10173:9;10164:7;10160:23;10156:33;10153:53;;;10202:1;10199;10192:12;10153:53;10241:9;10228:23;10260:31;10285:5;10260:31;:::i;:::-;10310:5;-1:-1:-1;10362:2:124;10347:18;;10334:32;;-1:-1:-1;10418:2:124;10403:18;;10390:32;10431:33;10390:32;10431:33;:::i;:::-;10483:7;-1:-1:-1;10509:37:124;10542:2;10527:18;;10509:37;:::i;:::-;10499:47;;10023:529;;;;;;;:::o;10557:316::-;10634:6;10642;10650;10703:2;10691:9;10682:7;10678:23;10674:32;10671:52;;;10719:1;10716;10709:12;10671:52;-1:-1:-1;;10742:23:124;;;10812:2;10797:18;;10784:32;;-1:-1:-1;10863:2:124;10848:18;;;10835:32;;10557:316;-1:-1:-1;10557:316:124:o;10878:456::-;10955:6;10963;10971;11024:2;11012:9;11003:7;10999:23;10995:32;10992:52;;;11040:1;11037;11030:12;10992:52;11079:9;11066:23;11098:31;11123:5;11098:31;:::i;:::-;11148:5;-1:-1:-1;11200:2:124;11185:18;;11172:32;;-1:-1:-1;11256:2:124;11241:18;;11228:32;11269:33;11228:32;11269:33;:::i;:::-;11321:7;11311:17;;;10878:456;;;;;:::o;11339:531::-;11381:3;11419:5;11413:12;11446:6;11441:3;11434:19;11471:1;11481:162;11495:6;11492:1;11489:13;11481:162;;;11557:4;11613:13;;;11609:22;;11603:29;11585:11;;;11581:20;;11574:59;11510:12;11481:162;;;11661:6;11658:1;11655:13;11652:87;;;11727:1;11720:4;11711:6;11706:3;11702:16;11698:27;11691:38;11652:87;-1:-1:-1;11784:2:124;11772:15;11789:66;11768:88;11759:98;;;;11859:4;11755:109;;11339:531;-1:-1:-1;;11339:531:124:o;11875:695::-;12068:2;12057:9;12050:21;12031:4;12090:6;12151:2;12142:6;12136:13;12132:22;12127:2;12116:9;12112:18;12105:50;12219:2;12213;12205:6;12201:15;12195:22;12191:31;12186:2;12175:9;12171:18;12164:59;12287:2;12281;12273:6;12269:15;12263:22;12259:31;12254:2;12243:9;12239:18;12232:59;;12356:42;12350:2;12342:6;12338:15;12332:22;12328:71;12322:3;12311:9;12307:19;12300:100;12447:3;12439:6;12435:16;12429:23;12490:4;12483;12472:9;12468:20;12461:34;12512:52;12559:3;12548:9;12544:19;12530:12;12512:52;:::i;12575:813::-;12670:6;12678;12686;12694;12702;12755:3;12743:9;12734:7;12730:23;12726:33;12723:53;;;12772:1;12769;12762:12;12723:53;12811:9;12798:23;12830:31;12855:5;12830:31;:::i;:::-;12880:5;-1:-1:-1;12937:2:124;12922:18;;12909:32;12950:33;12909:32;12950:33;:::i;:::-;13002:7;-1:-1:-1;13061:2:124;13046:18;;13033:32;13074:33;13033:32;13074:33;:::i;:::-;13126:7;-1:-1:-1;13185:2:124;13170:18;;13157:32;13198:33;13157:32;13198:33;:::i;:::-;13250:7;-1:-1:-1;13309:3:124;13294:19;;13281:33;13323;13281;13323;:::i;13393:315::-;13461:6;13469;13522:2;13510:9;13501:7;13497:23;13493:32;13490:52;;;13538:1;13535;13528:12;13490:52;13577:9;13564:23;13596:31;13621:5;13596:31;:::i;:::-;13646:5;13698:2;13683:18;;;;13670:32;;-1:-1:-1;;;13393:315:124:o;13713:367::-;13776:8;13786:6;13840:3;13833:4;13825:6;13821:17;13817:27;13807:55;;13858:1;13855;13848:12;13807:55;-1:-1:-1;13881:20:124;;13924:18;13913:30;;13910:50;;;13956:1;13953;13946:12;13910:50;13993:4;13985:6;13981:17;13969:29;;14053:3;14046:4;14036:6;14033:1;14029:14;14021:6;14017:27;14013:38;14010:47;14007:67;;;14070:1;14067;14060:12;14085:437;14171:6;14179;14232:2;14220:9;14211:7;14207:23;14203:32;14200:52;;;14248:1;14245;14238:12;14200:52;14288:9;14275:23;14321:18;14313:6;14310:30;14307:50;;;14353:1;14350;14343:12;14307:50;14392:70;14454:7;14445:6;14434:9;14430:22;14392:70;:::i;:::-;14481:8;;14366:96;;-1:-1:-1;14085:437:124;-1:-1:-1;;;;14085:437:124:o;14527:598::-;14621:6;14629;14637;14645;14653;14706:3;14694:9;14685:7;14681:23;14677:33;14674:53;;;14723:1;14720;14713:12;14674:53;14762:9;14749:23;14781:31;14806:5;14781:31;:::i;:::-;14831:5;-1:-1:-1;14883:2:124;14868:18;;14855:32;;-1:-1:-1;14934:2:124;14919:18;;14906:32;;-1:-1:-1;14957:37:124;14990:2;14975:18;;14957:37;:::i;15130:1572::-;15334:6;15342;15350;15358;15366;15374;15382;15390;15398;15406;15414:7;15468:3;15456:9;15447:7;15443:23;15439:33;15436:53;;;15485:1;15482;15475:12;15436:53;15508:29;15527:9;15508:29;:::i;:::-;15498:39;;15556:18;15623:2;15617;15606:9;15602:18;15589:32;15586:40;15583:60;;;15639:1;15636;15629:12;15583:60;15678:96;15766:7;15759:2;15748:9;15744:18;15731:32;15720:9;15716:48;15678:96;:::i;:::-;15793:8;;-1:-1:-1;15820:8:124;-1:-1:-1;15871:2:124;15856:18;;15843:32;15840:40;-1:-1:-1;15837:60:124;;;15893:1;15890;15883:12;15837:60;15932:96;16020:7;16013:2;16002:9;15998:18;15985:32;15974:9;15970:48;15932:96;:::i;:::-;16047:8;;-1:-1:-1;16074:8:124;-1:-1:-1;16125:2:124;16110:18;;16097:32;16094:40;-1:-1:-1;16091:60:124;;;16147:1;16144;16137:12;16091:60;16186:96;16274:7;16267:2;16256:9;16252:18;16239:32;16228:9;16224:48;16186:96;:::i;:::-;16301:8;;-1:-1:-1;16328:8:124;-1:-1:-1;16355:39:124;16389:3;16374:19;;16355:39;:::i;:::-;16345:49;;16444:2;16437:3;16426:9;16422:19;16409:33;16406:41;16403:61;;;16460:1;16457;16450:12;16403:61;;16499:85;16576:7;16568:3;16557:9;16553:19;16540:33;16529:9;16525:49;16499:85;:::i;:::-;16603:8;;-1:-1:-1;16630:8:124;-1:-1:-1;16658:38:124;16691:3;16676:19;;16658:38;:::i;:::-;16647:49;;15130:1572;;;;;;;;;;;;;;:::o;16707:188::-;16775:20;;16835:34;16824:46;;16814:57;;16804:85;;16885:1;16882;16875:12;16900:260;16968:6;16976;17029:2;17017:9;17008:7;17004:23;17000:32;16997:52;;;17045:1;17042;17035:12;16997:52;17068:29;17087:9;17068:29;:::i;:::-;17058:39;;17116:38;17150:2;17139:9;17135:18;17116:38;:::i;:::-;17106:48;;16900:260;;;;;:::o;18261:456::-;18338:6;18346;18354;18407:2;18395:9;18386:7;18382:23;18378:32;18375:52;;;18423:1;18420;18413:12;18375:52;18462:9;18449:23;18481:31;18506:5;18481:31;:::i;:::-;18531:5;-1:-1:-1;18588:2:124;18573:18;;18560:32;18601:33;18560:32;18601:33;:::i;:::-;18261:456;;18653:7;;-1:-1:-1;;;18707:2:124;18692:18;;;;18679:32;;18261:456::o;18722:681::-;18893:2;18945:21;;;19015:13;;18918:18;;;19037:22;;;18864:4;;18893:2;19116:15;;;;19090:2;19075:18;;;18864:4;19159:218;19173:6;19170:1;19167:13;19159:218;;;19238:13;;19253:42;19234:62;19222:75;;19352:15;;;;19317:12;;;;19195:1;19188:9;19159:218;;;-1:-1:-1;19394:3:124;;18722:681;-1:-1:-1;;;;;;18722:681:124:o;19408:184::-;19460:77;19457:1;19450:88;19557:4;19554:1;19547:15;19581:4;19578:1;19571:15;19597:253;19669:2;19663:9;19711:4;19699:17;;19746:18;19731:34;;19767:22;;;19728:62;19725:88;;;19793:18;;:::i;:::-;19829:2;19822:22;19597:253;:::o;19855:334::-;19926:2;19920:9;19982:2;19972:13;;19987:66;19968:86;19956:99;;20085:18;20070:34;;20106:22;;;20067:62;20064:88;;;20132:18;;:::i;:::-;20168:2;20161:22;19855:334;;-1:-1:-1;19855:334:124:o;20194:1488::-;20292:6;20300;20353:2;20341:9;20332:7;20328:23;20324:32;20321:52;;;20369:1;20366;20359:12;20321:52;20392:27;20409:9;20392:27;:::i;:::-;20382:37;;20438:2;20491;20480:9;20476:18;20463:32;20514:18;20555:2;20547:6;20544:14;20541:34;;;20571:1;20568;20561:12;20541:34;20594:22;;;;20650:4;20632:16;;;20628:27;20625:47;;;20668:1;20665;20658:12;20625:47;20694:22;;:::i;:::-;20739:21;20757:2;20739:21;:::i;:::-;20732:5;20725:36;20793:30;20819:2;20815;20811:11;20793:30;:::i;:::-;20788:2;20781:5;20777:14;20770:54;20856:30;20882:2;20878;20874:11;20856:30;:::i;:::-;20851:2;20844:5;20840:14;20833:54;20932:2;20928;20924:11;20911:25;20945:33;20970:7;20945:33;:::i;:::-;21005:2;20994:14;;20987:31;21064:3;21056:12;;21043:26;21081:16;;;21078:36;;;21110:1;21107;21100:12;21078:36;21141:8;21137:2;21133:17;21123:27;;;21188:7;21181:4;21177:2;21173:13;21169:27;21159:55;;21210:1;21207;21200:12;21159:55;21246:2;21233:16;21268:2;21264;21261:10;21258:36;;;21274:18;;:::i;:::-;21316:112;21424:2;21355:66;21348:4;21344:2;21340:13;21336:86;21332:95;21316:112;:::i;:::-;21303:125;;21451:2;21444:5;21437:17;21491:7;21486:2;21481;21477;21473:11;21469:20;21466:33;21463:53;;;21512:1;21509;21502:12;21463:53;21567:2;21562;21558;21554:11;21549:2;21542:5;21538:14;21525:45;21611:1;21606:2;21601;21594:5;21590:14;21586:23;21579:34;;21646:5;21640:3;21633:5;21629:15;21622:30;21671:5;21661:15;;;;;;20194:1488;;;;;:::o;21687:736::-;21791:6;21799;21807;21815;21823;21831;21884:3;21872:9;21863:7;21859:23;21855:33;21852:53;;;21901:1;21898;21891:12;21852:53;21940:9;21927:23;21959:31;21984:5;21959:31;:::i;:::-;22009:5;-1:-1:-1;22066:2:124;22051:18;;22038:32;22079:33;22038:32;22079:33;:::i;:::-;22131:7;-1:-1:-1;22190:2:124;22175:18;;22162:32;22203:33;22162:32;22203:33;:::i;:::-;21687:736;;;;-1:-1:-1;22255:7:124;;22309:2;22294:18;;22281:32;;-1:-1:-1;22360:3:124;22345:19;;22332:33;;22412:3;22397:19;;;22384:33;;-1:-1:-1;21687:736:124;-1:-1:-1;;21687:736:124:o;22428:803::-;22548:6;22556;22564;22572;22580;22588;22596;22604;22657:3;22645:9;22636:7;22632:23;22628:33;22625:53;;;22674:1;22671;22664:12;22625:53;22713:9;22700:23;22732:31;22757:5;22732:31;:::i;:::-;22782:5;-1:-1:-1;22834:2:124;22819:18;;22806:32;;-1:-1:-1;22885:2:124;22870:18;;22857:32;;-1:-1:-1;22941:2:124;22926:18;;22913:32;22954:33;22913:32;22954:33;:::i;23236:479::-;23348:6;23356;23400:9;23391:7;23387:23;23430:2;23426;23422:11;23419:31;;;23446:1;23443;23436:12;23419:31;23485:9;23472:23;23504:31;23529:5;23504:31;:::i;:::-;23554:5;-1:-1:-1;23652:2:124;23583:66;23575:75;;23571:84;23568:104;;;23668:1;23665;23658:12;23568:104;;23706:2;23695:9;23691:18;23681:28;;23236:479;;;;;:::o;23913:248::-;23981:6;23989;24042:2;24030:9;24021:7;24017:23;24013:32;24010:52;;;24058:1;24055;24048:12;24010:52;-1:-1:-1;;24081:23:124;;;24151:2;24136:18;;;24123:32;;-1:-1:-1;23913:248:124:o;24166:251::-;24236:6;24289:2;24277:9;24268:7;24264:23;24260:32;24257:52;;;24305:1;24302;24295:12;24257:52;24337:9;24331:16;24356:31;24381:5;24356:31;:::i;24598:1667::-;25094:4;25136:3;25125:9;25121:19;25113:27;;25167:6;25156:9;25149:25;25210:6;25205:2;25194:9;25190:18;25183:34;25253:6;25248:2;25237:9;25233:18;25226:34;25296:6;25291:2;25280:9;25276:18;25269:34;25346:6;25340:13;25334:3;25323:9;25319:19;25312:42;25409:2;25401:6;25397:15;25391:22;25385:3;25374:9;25370:19;25363:51;25461:2;25453:6;25449:15;25443:22;25484:42;25581:2;25567:12;25563:21;25557:3;25546:9;25542:19;25535:50;25650:2;25644;25636:6;25632:15;25626:22;25622:31;25616:3;25605:9;25601:19;25594:60;;;25703:3;25695:6;25691:16;25685:23;25727:3;25739:54;25789:2;25778:9;25774:18;25758:14;5066:42;5055:54;5043:67;;4989:127;25739:54;25842:3;25830:16;;25824:23;24492:13;24485:21;25903:3;25888:19;;24473:34;25957:3;25945:16;;25939:23;5066:42;5055:54;;;26021:3;26006:19;;5043:67;26075:3;26063:16;;26057:23;24585:4;24574:16;26137:3;26122:19;;24562:29;26179:15;;;26173:22;5055:54;;;26254:3;26239:19;;5043:67;26173:22;-1:-1:-1;26204:55:124;;24598:1667;;;;;;;;:::o;27840:220::-;27989:2;27978:9;27971:21;27952:4;28009:45;28050:2;28039:9;28035:18;28027:6;28009:45;:::i;29076:184::-;29128:77;29125:1;29118:88;29225:4;29222:1;29215:15;29249:4;29246:1;29239:15;29265:301;29353:1;29346:5;29343:12;29333:200;;29389:77;29386:1;29379:88;29490:4;29487:1;29480:15;29518:4;29515:1;29508:15;29333:200;29542:18;;29265:301::o;29571:996::-;29942:4;29984:3;29973:9;29969:19;29961:27;;30015:6;30004:9;29997:25;30058:6;30053:2;30042:9;30038:18;30031:34;30101:6;30096:2;30085:9;30081:18;30074:34;30127:42;30224:2;30215:6;30209:13;30205:22;30200:2;30189:9;30185:18;30178:50;30283:2;30275:6;30271:15;30265:22;30259:3;30248:9;30244:19;30237:51;30335:2;30327:6;30323:15;30317:22;30348:67;30410:3;30399:9;30395:19;30381:12;30348:67;:::i;:::-;-1:-1:-1;30474:2:124;30462:15;;30456:22;30452:31;30446:3;30431:19;;30424:60;30553:3;30541:16;;;30535:23;30528:31;30521:39;30515:3;30500:19;;;30493:68;29571:996;;-1:-1:-1;;;29571:996:124:o;30572:184::-;30642:6;30695:2;30683:9;30674:7;30670:23;30666:32;30663:52;;;30711:1;30708;30701:12;30663:52;-1:-1:-1;30734:16:124;;30572:184;-1:-1:-1;30572:184:124:o;30761:960::-;31033:6;31022:9;31015:25;31076:2;31071;31060:9;31056:18;31049:30;30996:4;31098:42;31195:2;31186:6;31180:13;31176:22;31171:2;31160:9;31156:18;31149:50;31263:2;31257;31249:6;31245:15;31239:22;31235:31;31230:2;31219:9;31215:18;31208:59;;31322:2;31314:6;31310:15;31304:22;31298:3;31287:9;31283:19;31276:51;31374:2;31366:6;31362:15;31356:22;31415:4;31409:3;31398:9;31394:19;31387:33;31443:52;31490:3;31479:9;31475:19;31461:12;31443:52;:::i;:::-;31429:66;;31561:6;31554:3;31546:6;31542:16;31536:23;31532:36;31526:3;31515:9;31511:19;31504:65;31625:3;31617:6;31613:16;31607:23;31600:4;31589:9;31585:20;31578:53;31686:3;31678:6;31674:16;31668:23;31662:3;31651:9;31647:19;31640:52;31709:6;31701:14;;;30761:960;;;;;:::o;35173:437::-;35252:1;35248:12;;;;35295;;;35316:61;;35370:4;35362:6;35358:17;35348:27;;35316:61;35423:2;35415:6;35412:14;35392:18;35389:38;35386:218;;;35460:77;35457:1;35450:88;35561:4;35558:1;35551:15;35589:4;35586:1;35579:15;35615:1060;35920:4;35962:3;35951:9;35947:19;35939:27;;35993:6;35982:9;35975:25;36036:6;36031:2;36020:9;36016:18;36009:34;36062:42;36159:2;36150:6;36144:13;36140:22;36135:2;36124:9;36120:18;36113:50;36227:2;36221;36213:6;36209:15;36203:22;36199:31;36194:2;36183:9;36179:18;36172:59;36296:2;36290;36282:6;36278:15;36272:22;36268:31;36262:3;36251:9;36247:19;36240:60;36365:2;36359;36351:6;36347:15;36341:22;36337:31;36331:3;36320:9;36316:19;36309:60;36435:2;36428:3;36420:6;36416:16;36410:23;36406:32;36400:3;36389:9;36385:19;36378:61;;36486:3;36478:6;36474:16;36468:23;36500:52;36547:3;36536:9;36532:19;36518:12;4970:6;4959:18;4947:31;;4894:90;36500:52;-1:-1:-1;36601:3:124;36589:16;;36583:23;4970:6;4959:18;;36664:3;36649:19;;4947:31;36615:54;35615:1060;;;;;;:::o;36680:245::-;36747:6;36800:2;36788:9;36779:7;36775:23;36771:32;36768:52;;;36816:1;36813;36806:12;36768:52;36848:9;36842:16;36867:28;36889:5;36867:28;:::i;36930:184::-;36982:77;36979:1;36972:88;37079:4;37076:1;37069:15;37103:4;37100:1;37093:15;37119:197;37157:3;37185:6;37226:2;37219:5;37215:14;37253:2;37244:7;37241:15;37238:41;;;37259:18;;:::i;:::-;37308:1;37295:15;;37119:197;-1:-1:-1;;;37119:197:124:o;37321:557::-;37643:25;;;37699:2;37684:18;;37677:34;;;37759:42;37747:55;;37742:2;37727:18;;37720:83;37630:3;37615:19;;37812:60;37868:2;37853:18;;37845:6;37812:60;:::i;37883:859::-;38183:25;;;38171:2;38227;38245:18;;;38238:30;;;38156:18;;;38303:22;;;38123:4;;38382:6;;38356:2;38341:18;;38123:4;38416:300;38430:6;38427:1;38424:13;38416:300;;;38505:6;38492:20;38525:31;38550:5;38525:31;:::i;:::-;38592:42;38581:54;38569:67;;38691:15;;;;38656:12;;;;38452:1;38445:9;38416:300;;;-1:-1:-1;38733:3:124;37883:859;-1:-1:-1;;;;;;;37883:859:124:o;38747:1960::-;39255:25;;;39311:2;39296:18;;39289:34;;;39354:2;39339:18;;39332:34;;;39397:2;39382:18;;39375:34;;;39437:13;;5066:42;5055:54;39467:3;39452:19;;5043:67;39242:3;39227:19;;39519:2;39507:15;;39501:22;5066:42;5055:54;;39580:3;39565:19;;5043:67;-1:-1:-1;39634:2:124;39622:15;;39616:22;5066:42;5055:54;;39697:3;39682:19;;5043:67;39647:55;39757:2;39749:6;39745:15;39739:22;39733:3;39722:9;39718:19;39711:51;39811:3;39803:6;39799:16;39793:23;39835:3;39847:68;39911:2;39900:9;39896:18;39880:14;39847:68;:::i;:::-;39964:3;39956:6;39952:16;39946:23;39924:45;;39988:3;40000:53;40049:2;40038:9;40034:18;40018:14;4970:6;4959:18;4947:31;;4894:90;40000:53;40102:3;40094:6;40090:16;40084:23;40062:45;;40126:3;40138:51;40185:2;40174:9;40170:18;40154:14;24492:13;24485:21;24473:34;;24422:91;40138:51;40226:3;40214:16;;40208:23;40250:3;40269:18;;;40262:30;;;;40335:15;;;40329:22;40323:3;40308:19;;40301:51;40389:15;;;40383:22;5066:42;5055:54;;;40464:3;40449:19;;5043:67;40506:15;;;40500:22;24585:4;24574:16;40579:3;40564:19;;24562:29;40621:15;;;40615:22;5055:54;;;40696:3;40681:19;;5043:67;40615:22;-1:-1:-1;40646:55:124;4989:127;40712:484;40765:3;40803:5;40797:12;40830:6;40825:3;40818:19;40856:4;40885:2;40880:3;40876:12;40869:19;;40922:2;40915:5;40911:14;40943:1;40953:218;40967:6;40964:1;40961:13;40953:218;;;41032:13;;41047:42;41028:62;41016:75;;41111:12;;;;41146:15;;;;40989:1;40982:9;40953:218;;;-1:-1:-1;41187:3:124;;40712:484;-1:-1:-1;;;;;40712:484:124:o;41201:435::-;41254:3;41292:5;41286:12;41319:6;41314:3;41307:19;41345:4;41374:2;41369:3;41365:12;41358:19;;41411:2;41404:5;41400:14;41432:1;41442:169;41456:6;41453:1;41450:13;41442:169;;;41517:13;;41505:26;;41551:12;;;;41586:15;;;;41478:1;41471:9;41442:169;;41641:2611;42123:6;42112:9;42105:25;42166:6;42161:2;42150:9;42146:18;42139:34;42209:6;42204:2;42193:9;42189:18;42182:34;42252:6;42247:2;42236:9;42232:18;42225:34;42296:3;42290;42279:9;42275:19;42268:32;42309:54;42358:3;42347:9;42343:19;42334:6;42328:13;5066:42;5055:54;5043:67;;4989:127;42309:54;42086:4;42410:2;42402:6;42398:15;42392:22;42433:6;42476:2;42470:3;42459:9;42455:19;42448:31;42502:63;42560:3;42549:9;42545:19;42531:12;42502:63;:::i;:::-;42488:77;;42614:2;42606:6;42602:15;42596:22;42637:66;42768:2;42756:9;42748:6;42744:22;42740:31;42734:3;42723:9;42719:19;42712:60;42795:52;42840:6;42824:14;42795:52;:::i;:::-;42781:66;;42896:2;42888:6;42884:15;42878:22;42856:44;;42919:3;42986:2;42974:9;42966:6;42962:22;42958:31;42953:2;42942:9;42938:18;42931:59;43013:52;43058:6;43042:14;43013:52;:::i;:::-;42999:66;;43114:3;43106:6;43102:16;43096:23;43074:45;;43138:3;43150:54;43200:2;43189:9;43185:18;43169:14;5066:42;5055:54;5043:67;;4989:127;43150:54;43253:3;43245:6;43241:16;43235:23;43213:45;;43277:3;43344:2;43332:9;43324:6;43320:22;43316:31;43311:2;43300:9;43296:18;43289:59;43371:41;43405:6;43389:14;43371:41;:::i;:::-;43357:55;;43461:3;43453:6;43449:16;43443:23;43421:45;;43485:3;43475:13;;43497:53;43546:2;43535:9;43531:18;43515:14;4970:6;4959:18;4947:31;;4894:90;43497:53;43587:3;43579:6;43575:16;43569:23;43559:33;;43611:3;43650:2;43645;43634:9;43630:18;43623:30;43690:2;43682:6;43678:15;43672:22;43662:32;;43714:3;43703:14;;43754:2;43748:3;43737:9;43733:19;43726:31;43811:2;43803:6;43799:15;43793:22;43788:2;43777:9;43773:18;43766:50;43871:2;43863:6;43859:15;43853:22;43847:3;43836:9;43832:19;43825:51;43925:2;43917:6;43913:15;43907:22;43885:44;;43938:55;43988:3;43977:9;43973:19;43957:14;5066:42;5055:54;5043:67;;4989:127;43938:55;44030:15;;44024:22;24585:4;24574:16;;44103:3;44088:19;;24562:29;44024:22;-1:-1:-1;44055:53:124;;-1:-1:-1;;24518:75:124;44055:53;44145:16;;44139:23;24492:13;;24485:21;44218:3;44203:19;;24473:34;44139:23;-1:-1:-1;44171:52:124;;-1:-1:-1;;24422:91:124;45274:492;45389:6;45397;45405;45413;45421;45429;45482:3;45470:9;45461:7;45457:23;45453:33;45450:53;;;45499:1;45496;45489:12;45450:53;45528:9;45522:16;45512:26;;45578:2;45567:9;45563:18;45557:25;45547:35;;45622:2;45611:9;45607:18;45601:25;45591:35;;45666:2;45655:9;45651:18;45645:25;45635:35;;45710:3;45699:9;45695:19;45689:26;45679:36;;45755:3;45744:9;45740:19;45734:26;45724:36;;45274:492;;;;;;;;:::o;47035:125::-;47075:4;47103:1;47100;47097:8;47094:34;;;47108:18;;:::i;:::-;-1:-1:-1;47145:9:124;;47035:125::o;47165:184::-;47217:77;47214:1;47207:88;47314:4;47311:1;47304:15;47338:4;47335:1;47328:15;47354:195;47393:3;47424:66;47417:5;47414:77;47411:103;;;47494:18;;:::i;:::-;-1:-1:-1;47541:1:124;47530:13;;47354:195::o;47554:1520::-;48038:4;48080:3;48069:9;48065:19;48057:27;;48111:6;48100:9;48093:25;48154:6;48149:2;48138:9;48134:18;48127:34;48197:6;48192:2;48181:9;48177:18;48170:34;48240:6;48235:2;48224:9;48220:18;48213:34;48266:42;48364:2;48355:6;48349:13;48345:22;48339:3;48328:9;48324:19;48317:51;48433:2;48427;48419:6;48415:15;48409:22;48405:31;48399:3;48388:9;48384:19;48377:60;;48484:2;48476:6;48472:15;48466:22;48497:53;48545:3;48534:9;48530:19;48516:12;5066:42;5055:54;5043:67;;4989:127;48497:53;;48605:2;48597:6;48593:15;48587:22;48581:3;48570:9;48566:19;48559:51;48647:3;48639:6;48635:16;48629:23;48671:3;48710:2;48705;48694:9;48690:18;48683:30;48768:3;48760:6;48756:16;48750:23;48744:3;48733:9;48729:19;48722:52;48829:3;48821:6;48817:16;48811:23;48805:3;48794:9;48790:19;48783:52;48884:3;48876:6;48872:16;48866:23;48844:45;;48898:55;48948:3;48937:9;48933:19;48917:14;5066:42;5055:54;5043:67;;4989:127;48898:55;48990:15;;48984:22;24585:4;24574:16;;49063:3;49048:19;;24562:29;48984:22;-1:-1:-1;49015:53:124;24518:75;50208:228;50248:7;50374:1;50306:66;50302:74;50299:1;50296:81;50291:1;50284:9;50277:17;50273:105;50270:131;;;50381:18;;:::i;:::-;-1:-1:-1;50421:9:124;;50208:228::o;50441:184::-;50493:77;50490:1;50483:88;50590:4;50587:1;50580:15;50614:4;50611:1;50604:15;50630:128;50670:3;50701:1;50697:6;50694:1;50691:13;50688:39;;;50707:18;;:::i;:::-;-1:-1:-1;50743:9:124;;50630:128::o;50763:274::-;50803:1;50829;50819:189;;50864:77;50861:1;50854:88;50965:4;50962:1;50955:15;50993:4;50990:1;50983:15;50819:189;-1:-1:-1;51022:9:124;;50763:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"4682000","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","BRIDGE_PROTOCOL_FEE()":"2350","FLASHLOAN_PREMIUM_TOTAL()":"2387","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"2429","MAX_NUMBER_RESERVES()":"287","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"2354","POOL_REVISION()":"276","backUnbacked(address,uint256,uint256)":"infinite","borrow(address,uint256,uint256,uint16,address)":"infinite","borrow(bytes32)":"infinite","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"infinite","deposit(address,uint256,address,uint16)":"infinite","dropReserve(address)":"infinite","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"infinite","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"infinite","flashLoanSimple(address,address,uint256,bytes,uint16)":"infinite","getConfiguration(address)":"2703","getEModeCategoryData(uint8)":"infinite","getReserveAddressById(uint16)":"2596","getReserveData(address)":"23100","getReserveNormalizedIncome(address)":"infinite","getReserveNormalizedVariableDebt(address)":"infinite","getReservesList()":"infinite","getUserAccountData(address)":"infinite","getUserConfiguration(address)":"2682","getUserEMode(address)":"2613","initReserve(address,address,address,address,address)":"infinite","initialize(address)":"infinite","liquidationCall(address,address,address,uint256,bool)":"infinite","liquidationCall(bytes32,bytes32)":"infinite","mintToTreasury(address[])":"infinite","mintUnbacked(address,uint256,address,uint16)":"infinite","rebalanceStableBorrowRate(address,address)":"infinite","rebalanceStableBorrowRate(bytes32)":"infinite","repay(address,uint256,uint256,address)":"infinite","repay(bytes32)":"infinite","repayWithATokens(address,uint256,uint256)":"infinite","repayWithATokens(bytes32)":"infinite","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"infinite","repayWithPermit(bytes32,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","resetIsolationModeTotalDebt(address)":"infinite","setConfiguration(address,(uint256))":"infinite","setReserveInterestRateStrategyAddress(address,address)":"infinite","setUserEMode(uint8)":"infinite","setUserUseReserveAsCollateral(address,bool)":"infinite","setUserUseReserveAsCollateral(bytes32)":"infinite","supply(address,uint256,address,uint16)":"infinite","supply(bytes32)":"infinite","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"infinite","supplyWithPermit(bytes32,bytes32,bytes32)":"infinite","swapBorrowRateMode(address,uint256)":"infinite","swapBorrowRateMode(bytes32)":"infinite","updateBridgeProtocolFee(uint256)":"infinite","updateFlashloanPremiums(uint128,uint128)":"infinite","withdraw(address,uint256,address)":"infinite","withdraw(bytes32)":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BRIDGE_PROTOCOL_FEE()":"272d9072","FLASHLOAN_PREMIUM_TOTAL()":"074b2e43","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"6a99c036","MAX_NUMBER_RESERVES()":"f8119d51","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"e82fec2f","POOL_REVISION()":"0148170e","backUnbacked(address,uint256,uint256)":"d65dc7a1","borrow(address,uint256,uint256,uint16,address)":"a415bcad","borrow(bytes32)":"d5eed868","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"d579ea7d","deposit(address,uint256,address,uint16)":"e8eda9df","dropReserve(address)":"63c9b860","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"d5ed3933","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"ab9c4b5d","flashLoanSimple(address,address,uint256,bytes,uint16)":"42b0b77c","getConfiguration(address)":"c44b11f7","getEModeCategoryData(uint8)":"6c6f6ae1","getReserveAddressById(uint16)":"52751797","getReserveData(address)":"35ea6a75","getReserveNormalizedIncome(address)":"d15e0053","getReserveNormalizedVariableDebt(address)":"386497fd","getReservesList()":"d1946dbc","getUserAccountData(address)":"bf92857c","getUserConfiguration(address)":"4417a583","getUserEMode(address)":"eddf1b79","initReserve(address,address,address,address,address)":"7a708e92","initialize(address)":"c4d66de8","liquidationCall(address,address,address,uint256,bool)":"00a718a9","liquidationCall(bytes32,bytes32)":"fd21ecff","mintToTreasury(address[])":"9cd19996","mintUnbacked(address,uint256,address,uint16)":"69a933a5","rebalanceStableBorrowRate(address,address)":"cd112382","rebalanceStableBorrowRate(bytes32)":"427da177","repay(address,uint256,uint256,address)":"573ade81","repay(bytes32)":"563dd613","repayWithATokens(address,uint256,uint256)":"2dad97d4","repayWithATokens(bytes32)":"dc7c0bff","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"ee3e210b","repayWithPermit(bytes32,bytes32,bytes32)":"94b576de","rescueTokens(address,address,uint256)":"cea9d26f","resetIsolationModeTotalDebt(address)":"e43e88a1","setConfiguration(address,(uint256))":"f51e435b","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setUserEMode(uint8)":"28530a47","setUserUseReserveAsCollateral(address,bool)":"5a3b74b9","setUserUseReserveAsCollateral(bytes32)":"4d013f03","supply(address,uint256,address,uint16)":"617ba037","supply(bytes32)":"f7a73840","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"02c205f0","supplyWithPermit(bytes32,bytes32,bytes32)":"680dd47c","swapBorrowRateMode(address,uint256)":"94ba89a2","swapBorrowRateMode(bytes32)":"1fe3c6f3","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiums(uint128,uint128)":"bcb6e522","withdraw(address,uint256,address)":"69328dec","withdraw(bytes32)":"8e19899e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TOTAL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TO_PROTOCOL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUMBER_RESERVES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"category\",\"type\":\"tuple\"}],\"name\":\"configureEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"interestRateModes\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoanSimple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"}],\"name\":\"getEModeCategoryData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"getReserveAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentStableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"}],\"internalType\":\"struct DataTypes.ReserveData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserAccountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalCollateralBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebtBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableBorrowsBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.UserConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserEMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"args2\",\"type\":\"bytes32\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"resetIsolationModeTotalDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"setUserEMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumTotal\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiums\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"args\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"BRIDGE_PROTOCOL_FEE()\":{\"returns\":{\"_0\":\"The bridge fee sent to the protocol treasury\"}},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"returns\":{\"_0\":\"The total fee on flashloans\"}},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"returns\":{\"_0\":\"The flashloan fee sent to the protocol treasury\"}},\"MAX_NUMBER_RESERVES()\":{\"returns\":{\"_0\":\"The maximum number of reserves supported\"}},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"returns\":{\"_0\":\"The percentage of available liquidity to borrow, expressed in bps\"}},\"backUnbacked(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees\"},\"returns\":{\"_0\":\"The backed amount\"}},\"borrow(address,uint256,uint256,uint16,address)\":{\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"borrow(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the borrow function packed in one bytes32    88 bits       16 bits             8 bits                 128 bits       16 bits | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |\"}},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"details\":\"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets\",\"params\":{\"config\":\"The configuration of the category\",\"id\":\"The id of the category\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider contract\"}},\"deposit(address,uint256,address,uint16)\":{\"details\":\"Deprecated: maintained for compatibility purposes\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"dropReserve(address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Only callable by the overlying aToken of the `asset`\",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"asset\":\"The address of the underlying asset of the aToken\",\"balanceFromBefore\":\"The aToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The aToken balance of the `to` user before the transfer\",\"from\":\"The user from which the aTokens are transferred\",\"to\":\"The user receiving the aTokens\"}},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amounts\":\"The amounts of the assets being flash-borrowed\",\"assets\":\"The addresses of the assets being flash-borrowed\",\"interestRateModes\":\"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\",\"onBehalfOf\":\"The address  that will receive the debt in the case of using on `modes` 1 or 2\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amount\":\"The amount of the asset being flash-borrowed\",\"asset\":\"The address of the asset being flash-borrowed\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"getConfiguration(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve\"}},\"getEModeCategoryData(uint8)\":{\"params\":{\"id\":\"The id of the category\"},\"returns\":{\"_0\":\"The configuration data of the category\"}},\"getReserveAddressById(uint16)\":{\"params\":{\"id\":\"The id of the reserve as stored in the DataTypes.ReserveData struct\"},\"returns\":{\"_0\":\"The address of the reserve associated with id\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The state and configuration data of the reserve\"}},\"getReserveNormalizedIncome(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve's normalized income\"}},\"getReserveNormalizedVariableDebt(address)\":{\"details\":\"WARNING: This function is intended to be used primarily by the protocol itself to get a \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReservesList()\":{\"details\":\"It does not include dropped reserves\",\"returns\":{\"_0\":\"The addresses of the underlying assets of the initialized reserves\"}},\"getUserAccountData(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"getUserConfiguration(address)\":{\"params\":{\"user\":\"The user address\"},\"returns\":{\"_0\":\"The configuration of the user\"}},\"getUserEMode(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The eMode id\"}},\"initReserve(address,address,address,address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"aTokenAddress\":\"The address of the aToken that will be assigned to the reserve\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy contract\",\"stableDebtAddress\":\"The address of the StableDebtToken that will be assigned to the reserve\",\"variableDebtAddress\":\"The address of the VariableDebtToken that will be assigned to the reserve\"}},\"initialize(address)\":{\"details\":\"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider\"}},\"liquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"liquidationCall(bytes32,bytes32)\":{\"details\":\"the shortenedDebtToCover is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max\",\"params\":{\"args1\":\"part of the arguments for the liquidationCall function packed in one bytes32    64 bits      160 bits       16 bits         16 bits | 0-padding | user address | debtAssetId | collateralAssetId |\",\"args2\":\"part of the arguments for the liquidationCall function packed in one bytes32    127 bits       1 bit             128 bits | 0-padding | receiveAToken | shortenedDebtToCover |\"}},\"mintToTreasury(address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"rebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"}},\"rebalanceStableBorrowRate(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the rebalanceStableBorrowRate function packed in one bytes32    80 bits      160 bits     16 bits | 0-padding | user address | assetId |\"}},\"repay(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repay(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repay function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(address,uint256,uint256)\":{\"details\":\"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repayWithATokens function packed in one bytes32    104 bits             8 bits               128 bits       16 bits | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(bytes32,bytes32,bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the repayWithPermit function packed in one bytes32    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |\",\"r\":\"The R parameter of ERC712 permit sig\",\"s\":\"The S parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"resetIsolationModeTotalDebt(address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\"}},\"setConfiguration(address,(uint256))\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"configuration\":\"The new configuration bitmap\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"rateStrategyAddress\":\"The address of the interest rate strategy contract\"}},\"setUserEMode(uint8)\":{\"params\":{\"categoryId\":\"The id of the category\"}},\"setUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset supplied\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"}},\"setUserUseReserveAsCollateral(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the setUserUseReserveAsCollateral function packed in one bytes32    239 bits         1 bit       16 bits | 0-padding | useAsCollateral | assetId |\"}},\"supply(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supply(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the supply function packed in one bytes32    96 bits       16 bits         128 bits      16 bits | 0-padding | referralCode | shortenedAmount | assetId |\"}},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supplyWithPermit(bytes32,bytes32,bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the supply function packed in one bytes32    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |\",\"r\":\"The R parameter of ERC712 permit sig\",\"s\":\"The S parameter of ERC712 permit sig\"}},\"swapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"}},\"swapBorrowRateMode(bytes32)\":{\"details\":\"assetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the swapBorrowRateMode function packed in one bytes32    232 bits            8 bits             16 bits | 0-padding | shortenedInterestRateMode | assetId |\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"bridgeProtocolFee\":\"The part of the premium sent to the protocol treasury\"}},\"updateFlashloanPremiums(uint128,uint128)\":{\"details\":\"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract\",\"params\":{\"flashLoanPremiumToProtocol\":\"The part of the premium sent to the protocol treasury, expressed in bps\",\"flashLoanPremiumTotal\":\"The total premium, expressed in bps\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}},\"withdraw(bytes32)\":{\"details\":\"the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).maxassetId is the index of the asset in the reservesList.\",\"params\":{\"args\":\"Arguments for the withdraw function packed in one bytes32    112 bits       128 bits      16 bits | 0-padding | shortenedAmount | assetId |\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"title\":\"L2Pool\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider connected to this contract\"},\"BRIDGE_PROTOCOL_FEE()\":{\"notice\":\"Returns the part of the bridge fees sent to protocol\"},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"notice\":\"Returns the total fee on flash loans\"},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"notice\":\"Returns the part of the flashloan fees sent to protocol\"},\"MAX_NUMBER_RESERVES()\":{\"notice\":\"Returns the maximum number of reserves supported to be listed in this Pool\"},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"notice\":\"Returns the percentage of available liquidity that can be borrowed at once at stable rate\"},\"backUnbacked(address,uint256,uint256)\":{\"notice\":\"Back the current unbacked underlying with `amount` and pay `fee`.\"},\"borrow(address,uint256,uint256,uint16,address)\":{\"notice\":\"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`\"},\"borrow(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller\"},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"notice\":\"Configures a new category for the eMode.\"},\"deposit(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"dropReserve(address)\":{\"notice\":\"Drop a reserve\"},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Validates and finalizes an aToken transfer\"},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"getConfiguration(address)\":{\"notice\":\"Returns the configuration of the reserve\"},\"getEModeCategoryData(uint8)\":{\"notice\":\"Returns the data of an eMode category\"},\"getReserveAddressById(uint16)\":{\"notice\":\"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\"},\"getReserveData(address)\":{\"notice\":\"Returns the state and configuration of the reserve\"},\"getReserveNormalizedIncome(address)\":{\"notice\":\"Returns the normalized income of the reserve\"},\"getReserveNormalizedVariableDebt(address)\":{\"notice\":\"Returns the normalized variable debt per unit of asset\"},\"getReservesList()\":{\"notice\":\"Returns the list of the underlying assets of all the initialized reserves\"},\"getUserAccountData(address)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"getUserConfiguration(address)\":{\"notice\":\"Returns the configuration of the user across all the reserves\"},\"getUserEMode(address)\":{\"notice\":\"Returns the eMode the user is using\"},\"initReserve(address,address,address,address,address)\":{\"notice\":\"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy\"},\"initialize(address)\":{\"notice\":\"Initializes the Pool.\"},\"liquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\"},\"liquidationCall(bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the liquidationCall function\"},\"mintToTreasury(address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"mintUnbacked(address,uint256,address,uint16)\":{\"notice\":\"Mints an `amount` of aTokens to the `onBehalfOf`\"},\"rebalanceStableBorrowRate(address,address)\":{\"notice\":\"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough\"},\"rebalanceStableBorrowRate(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the rebalanceStableBorrowRate function\"},\"repay(address,uint256,uint256,address)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\"},\"repay(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repay function, repaying on behalf of the caller\"},\"repayWithATokens(address,uint256,uint256)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\"},\"repayWithATokens(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repayWithATokens function\"},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"repayWithPermit(bytes32,bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"resetIsolationModeTotalDebt(address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"},\"setConfiguration(address,(uint256))\":{\"notice\":\"Sets the configuration bitmap of the reserve as a whole\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Updates the address of the interest rate strategy contract\"},\"setUserEMode(uint8)\":{\"notice\":\"Allows a user to use the protocol in eMode\"},\"setUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Allows suppliers to enable/disable a specific supplied asset as collateral\"},\"setUserUseReserveAsCollateral(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the setUserUseReserveAsCollateral function\"},\"supply(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"supply(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the supply function on behalf of the caller\"},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"supplyWithPermit(bytes32,bytes32,bytes32)\":{\"notice\":\"Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller\"},\"swapBorrowRateMode(address,uint256)\":{\"notice\":\"Allows a borrower to swap his debt between stable and variable mode, or vice versa\"},\"swapBorrowRateMode(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the swapBorrowRateMode function\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the protocol fee on the bridging\"},\"updateFlashloanPremiums(uint128,uint128)\":{\"notice\":\"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury\"},\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"},\"withdraw(bytes32)\":{\"notice\":\"Calldata efficient wrapper of the withdraw function, withdrawing to the caller\"}},\"notice\":\"Calldata optimized extension of the Pool contract allowing users to pass compact calldata representation to reduce transaction costs on rollups.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/pool/L2Pool.sol\":\"L2Pool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IL2Pool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IL2Pool\\n * @author Aave\\n * @notice Defines the basic extension interface for an L2 Aave Pool.\\n */\\ninterface IL2Pool {\\n  /**\\n   * @notice Calldata efficient wrapper of the supply function on behalf of the caller\\n   * @param args Arguments for the supply function packed in one bytes32\\n   *    96 bits       16 bits         128 bits      16 bits\\n   * | 0-padding | referralCode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function supply(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller\\n   * @param args Arguments for the supply function packed in one bytes32\\n   *    56 bits    8 bits         32 bits           16 bits         128 bits      16 bits\\n   * | 0-padding | permitV | shortenedDeadline | referralCode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @param r The R parameter of ERC712 permit sig\\n   * @param s The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the withdraw function, withdrawing to the caller\\n   * @param args Arguments for the withdraw function packed in one bytes32\\n   *    112 bits       128 bits      16 bits\\n   * | 0-padding | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller\\n   * @param args Arguments for the borrow function packed in one bytes32\\n   *    88 bits       16 bits             8 bits                 128 bits       16 bits\\n   * | 0-padding | referralCode | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function borrow(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repay function, repaying on behalf of the caller\\n   * @param args Arguments for the repay function packed in one bytes32\\n   *    104 bits             8 bits               128 bits       16 bits\\n   * | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount repaid\\n   */\\n  function repay(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller\\n   * @param args Arguments for the repayWithPermit function packed in one bytes32\\n   *    64 bits    8 bits        32 bits                   8 bits               128 bits       16 bits\\n   * | 0-padding | permitV | shortenedDeadline | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @param r The R parameter of ERC712 permit sig\\n   * @param s The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(bytes32 args, bytes32 r, bytes32 s) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the repayWithATokens function\\n   * @param args Arguments for the repayWithATokens function packed in one bytes32\\n   *    104 bits             8 bits               128 bits       16 bits\\n   * | 0-padding | shortenedInterestRateMode | shortenedAmount | assetId |\\n   * @dev the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to\\n   * type(uint256).max\\n   * @dev assetId is the index of the asset in the reservesList.\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(bytes32 args) external returns (uint256);\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the swapBorrowRateMode function\\n   * @param args Arguments for the swapBorrowRateMode function packed in one bytes32\\n   *    232 bits            8 bits             16 bits\\n   * | 0-padding | shortenedInterestRateMode | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function swapBorrowRateMode(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the rebalanceStableBorrowRate function\\n   * @param args Arguments for the rebalanceStableBorrowRate function packed in one bytes32\\n   *    80 bits      160 bits     16 bits\\n   * | 0-padding | user address | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function rebalanceStableBorrowRate(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the setUserUseReserveAsCollateral function\\n   * @param args Arguments for the setUserUseReserveAsCollateral function packed in one bytes32\\n   *    239 bits         1 bit       16 bits\\n   * | 0-padding | useAsCollateral | assetId |\\n   * @dev assetId is the index of the asset in the reservesList.\\n   */\\n  function setUserUseReserveAsCollateral(bytes32 args) external;\\n\\n  /**\\n   * @notice Calldata efficient wrapper of the liquidationCall function\\n   * @param args1 part of the arguments for the liquidationCall function packed in one bytes32\\n   *    64 bits      160 bits       16 bits         16 bits\\n   * | 0-padding | user address | debtAssetId | collateralAssetId |\\n   * @param args2 part of the arguments for the liquidationCall function packed in one bytes32\\n   *    127 bits       1 bit             128 bits\\n   * | 0-padding | receiveAToken | shortenedDebtToCover |\\n   * @dev the shortenedDebtToCover is cast to 256 bits at decode time,\\n   * if type(uint128).max the value will be expanded to type(uint256).max\\n   */\\n  function liquidationCall(bytes32 args1, bytes32 args2) external;\\n}\\n\",\"keccak256\":\"0xc61a7956f4de0e7cd5691e4798d83e7b7a3fa4a22689af250f0e3aa7533d8fc7\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/CalldataLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title CalldataLogic library\\n * @author Aave\\n * @notice Library to decode calldata, used to optimize calldata size in L2Pool for transaction cost reduction\\n */\\nlibrary CalldataLogic {\\n  /**\\n   * @notice Decodes compressed supply params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed supply params\\n   * @return The address of the underlying reserve\\n   * @return The amount to supply\\n   * @return The referralCode\\n   */\\n  function decodeSupplyParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint16) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint16 referralCode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      referralCode := and(shr(144, args), 0xFFFF)\\n    }\\n    return (reservesList[assetId], amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed supply params to standard params along with permit params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed supply with permit params\\n   * @return The address of the underlying reserve\\n   * @return The amount to supply\\n   * @return The referralCode\\n   * @return The deadline of the permit\\n   * @return The V value of the permit signature\\n   */\\n  function decodeSupplyWithPermitParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint16, uint256, uint8) {\\n    uint256 deadline;\\n    uint8 permitV;\\n\\n    assembly {\\n      deadline := and(shr(160, args), 0xFFFFFFFF)\\n      permitV := and(shr(192, args), 0xFF)\\n    }\\n    (address asset, uint256 amount, uint16 referralCode) = decodeSupplyParams(reservesList, args);\\n\\n    return (asset, amount, referralCode, deadline, permitV);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed withdraw params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed withdraw params\\n   * @return The address of the underlying reserve\\n   * @return The amount to withdraw\\n   */\\n  function decodeWithdrawParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256) {\\n    uint16 assetId;\\n    uint256 amount;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n    }\\n    if (amount == type(uint128).max) {\\n      amount = type(uint256).max;\\n    }\\n    return (reservesList[assetId], amount);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed borrow params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed borrow params\\n   * @return The address of the underlying reserve\\n   * @return The amount to borrow\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   * @return The referralCode\\n   */\\n  function decodeBorrowParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256, uint16) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint256 interestRateMode;\\n    uint16 referralCode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      interestRateMode := and(shr(144, args), 0xFF)\\n      referralCode := and(shr(152, args), 0xFFFF)\\n    }\\n\\n    return (reservesList[assetId], amount, interestRateMode, referralCode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed repay params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed repay params\\n   * @return The address of the underlying reserve\\n   * @return The amount to repay\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   */\\n  function decodeRepayParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256) {\\n    uint16 assetId;\\n    uint256 amount;\\n    uint256 interestRateMode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      amount := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      interestRateMode := and(shr(144, args), 0xFF)\\n    }\\n\\n    if (amount == type(uint128).max) {\\n      amount = type(uint256).max;\\n    }\\n\\n    return (reservesList[assetId], amount, interestRateMode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed repay params to standard params along with permit params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed repay with permit params\\n   * @return The address of the underlying reserve\\n   * @return The amount to repay\\n   * @return The interestRateMode, 1 for stable or 2 for variable debt\\n   * @return The deadline of the permit\\n   * @return The V value of the permit signature\\n   */\\n  function decodeRepayWithPermitParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256, uint256, uint256, uint8) {\\n    uint256 deadline;\\n    uint8 permitV;\\n\\n    (address asset, uint256 amount, uint256 interestRateMode) = decodeRepayParams(\\n      reservesList,\\n      args\\n    );\\n\\n    assembly {\\n      deadline := and(shr(152, args), 0xFFFFFFFF)\\n      permitV := and(shr(184, args), 0xFF)\\n    }\\n\\n    return (asset, amount, interestRateMode, deadline, permitV);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed swap borrow rate mode params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed swap borrow rate mode params\\n   * @return The address of the underlying reserve\\n   * @return The interest rate mode, 1 for stable 2 for variable debt\\n   */\\n  function decodeSwapBorrowRateModeParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, uint256) {\\n    uint16 assetId;\\n    uint256 interestRateMode;\\n\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      interestRateMode := and(shr(16, args), 0xFF)\\n    }\\n\\n    return (reservesList[assetId], interestRateMode);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed rebalance stable borrow rate params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed rabalance stable borrow rate params\\n   * @return The address of the underlying reserve\\n   * @return The address of the user to rebalance\\n   */\\n  function decodeRebalanceStableBorrowRateParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, address) {\\n    uint16 assetId;\\n    address user;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      user := and(shr(16, args), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n    }\\n    return (reservesList[assetId], user);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed set user use reserve as collateral params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args The packed set user use reserve as collateral params\\n   * @return The address of the underlying reserve\\n   * @return True if to set using as collateral, false otherwise\\n   */\\n  function decodeSetUserUseReserveAsCollateralParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args\\n  ) internal view returns (address, bool) {\\n    uint16 assetId;\\n    bool useAsCollateral;\\n    assembly {\\n      assetId := and(args, 0xFFFF)\\n      useAsCollateral := and(shr(16, args), 0x1)\\n    }\\n    return (reservesList[assetId], useAsCollateral);\\n  }\\n\\n  /**\\n   * @notice Decodes compressed liquidation call params to standard params\\n   * @param reservesList The addresses of all the active reserves\\n   * @param args1 The first half of packed liquidation call params\\n   * @param args2 The second half of the packed liquidation call params\\n   * @return The address of the underlying collateral asset\\n   * @return The address of the underlying debt asset\\n   * @return The address of the user to liquidate\\n   * @return The amount of debt to cover\\n   * @return True if receiving aTokens, false otherwise\\n   */\\n  function decodeLiquidationCallParams(\\n    mapping(uint256 => address) storage reservesList,\\n    bytes32 args1,\\n    bytes32 args2\\n  ) internal view returns (address, address, address, uint256, bool) {\\n    uint16 collateralAssetId;\\n    uint16 debtAssetId;\\n    address user;\\n    uint256 debtToCover;\\n    bool receiveAToken;\\n\\n    assembly {\\n      collateralAssetId := and(args1, 0xFFFF)\\n      debtAssetId := and(shr(16, args1), 0xFFFF)\\n      user := and(shr(32, args1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n\\n      debtToCover := and(args2, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)\\n      receiveAToken := and(shr(128, args2), 0x1)\\n    }\\n\\n    if (debtToCover == type(uint128).max) {\\n      debtToCover = type(uint256).max;\\n    }\\n\\n    return (\\n      reservesList[collateralAssetId],\\n      reservesList[debtAssetId],\\n      user,\\n      debtToCover,\\n      receiveAToken\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x9c12dfdab51ccb9f9c00489d0a06e67e2adcbcb7eef98e4585af62060f2d60b5\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/L2Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Pool} from './Pool.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IL2Pool} from '../../interfaces/IL2Pool.sol';\\nimport {CalldataLogic} from '../libraries/logic/CalldataLogic.sol';\\n\\n/**\\n * @title L2Pool\\n * @author Aave\\n * @notice Calldata optimized extension of the Pool contract allowing users to pass compact calldata representation\\n * to reduce transaction costs on rollups.\\n */\\ncontract L2Pool is Pool, IL2Pool {\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) Pool(provider) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function supply(bytes32 args) external override {\\n    (address asset, uint256 amount, uint16 referralCode) = CalldataLogic.decodeSupplyParams(\\n      _reservesList,\\n      args\\n    );\\n\\n    supply(asset, amount, msg.sender, referralCode);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external override {\\n    (address asset, uint256 amount, uint16 referralCode, uint256 deadline, uint8 v) = CalldataLogic\\n      .decodeSupplyWithPermitParams(_reservesList, args);\\n\\n    supplyWithPermit(asset, amount, msg.sender, referralCode, deadline, v, r, s);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function withdraw(bytes32 args) external override returns (uint256) {\\n    (address asset, uint256 amount) = CalldataLogic.decodeWithdrawParams(_reservesList, args);\\n\\n    return withdraw(asset, amount, msg.sender);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function borrow(bytes32 args) external override {\\n    (address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode) = CalldataLogic\\n      .decodeBorrowParams(_reservesList, args);\\n\\n    borrow(asset, amount, interestRateMode, referralCode, msg.sender);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function repay(bytes32 args) external override returns (uint256) {\\n    (address asset, uint256 amount, uint256 interestRateMode) = CalldataLogic.decodeRepayParams(\\n      _reservesList,\\n      args\\n    );\\n\\n    return repay(asset, amount, interestRateMode, msg.sender);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function repayWithPermit(bytes32 args, bytes32 r, bytes32 s) external override returns (uint256) {\\n    (\\n      address asset,\\n      uint256 amount,\\n      uint256 interestRateMode,\\n      uint256 deadline,\\n      uint8 v\\n    ) = CalldataLogic.decodeRepayWithPermitParams(_reservesList, args);\\n\\n    return repayWithPermit(asset, amount, interestRateMode, msg.sender, deadline, v, r, s);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function repayWithATokens(bytes32 args) external override returns (uint256) {\\n    (address asset, uint256 amount, uint256 interestRateMode) = CalldataLogic.decodeRepayParams(\\n      _reservesList,\\n      args\\n    );\\n\\n    return repayWithATokens(asset, amount, interestRateMode);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function swapBorrowRateMode(bytes32 args) external override {\\n    (address asset, uint256 interestRateMode) = CalldataLogic.decodeSwapBorrowRateModeParams(\\n      _reservesList,\\n      args\\n    );\\n    swapBorrowRateMode(asset, interestRateMode);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function rebalanceStableBorrowRate(bytes32 args) external override {\\n    (address asset, address user) = CalldataLogic.decodeRebalanceStableBorrowRateParams(\\n      _reservesList,\\n      args\\n    );\\n    rebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function setUserUseReserveAsCollateral(bytes32 args) external override {\\n    (address asset, bool useAsCollateral) = CalldataLogic.decodeSetUserUseReserveAsCollateralParams(\\n      _reservesList,\\n      args\\n    );\\n    setUserUseReserveAsCollateral(asset, useAsCollateral);\\n  }\\n\\n  /// @inheritdoc IL2Pool\\n  function liquidationCall(bytes32 args1, bytes32 args2) external override {\\n    (\\n      address collateralAsset,\\n      address debtAsset,\\n      address user,\\n      uint256 debtToCover,\\n      bool receiveAToken\\n    ) = CalldataLogic.decodeLiquidationCallParams(_reservesList, args1, args2);\\n    liquidationCall(collateralAsset, debtAsset, user, debtToCover, receiveAToken);\\n  }\\n}\\n\",\"keccak256\":\"0x4f1742363bf75a7471b889f1877bff9fcdfdc1002adf1399842f388cb2093114\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {PoolStorage} from './PoolStorage.sol';\\n\\n/**\\n * @title Pool contract\\n * @author Aave\\n * @notice Main point of interaction with an Aave protocol's market\\n * - Users can:\\n *   # Supply\\n *   # Withdraw\\n *   # Borrow\\n *   # Repay\\n *   # Swap their loans between variable and stable rate\\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\\n *   # Liquidate positions\\n *   # Execute Flash Loans\\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\\n *   PoolAddressesProvider\\n */\\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\\n  using ReserveLogic for DataTypes.ReserveData;\\n\\n  uint256 public constant POOL_REVISION = 0x1;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Only pool configurator can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolConfigurator() {\\n    _onlyPoolConfigurator();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only bridge can call functions marked by this modifier.\\n   */\\n  modifier onlyBridge() {\\n    _onlyBridge();\\n    _;\\n  }\\n\\n  function _onlyPoolConfigurator() internal view virtual {\\n    require(\\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\\n    );\\n  }\\n\\n  function _onlyPoolAdmin() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyBridge() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\\n      Errors.CALLER_NOT_BRIDGE\\n    );\\n  }\\n\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return POOL_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /**\\n   * @notice Initializes the Pool.\\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\\n   * PoolAddressesProvider of the market.\\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\\n    _maxStableRateBorrowSizePercent = 0.25e4;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override onlyBridge {\\n    BridgeLogic.executeMintUnbacked(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      asset,\\n      amount,\\n      onBehalfOf,\\n      referralCode\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external virtual override onlyBridge returns (uint256) {\\n    return\\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supply(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) public virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override {\\n    IERC20WithPermit(asset).permit(\\n      msg.sender,\\n      address(this),\\n      amount,\\n      deadline,\\n      permitV,\\n      permitR,\\n      permitS\\n    );\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) public virtual override returns (uint256) {\\n    return\\n      SupplyLogic.executeWithdraw(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteWithdrawParams({\\n          asset: asset,\\n          amount: amount,\\n          to: to,\\n          reservesCount: _reservesCount,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[msg.sender]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) public virtual override {\\n    BorrowLogic.executeBorrow(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteBorrowParams({\\n        asset: asset,\\n        user: msg.sender,\\n        onBehalfOf: onBehalfOf,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        referralCode: referralCode,\\n        releaseUnderlying: true,\\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[onBehalfOf],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: onBehalfOf,\\n          useATokens: false\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override returns (uint256) {\\n    {\\n      IERC20WithPermit(asset).permit(\\n        msg.sender,\\n        address(this),\\n        amount,\\n        deadline,\\n        permitV,\\n        permitR,\\n        permitS\\n      );\\n    }\\n    {\\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\\n        asset: asset,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        onBehalfOf: onBehalfOf,\\n        useATokens: false\\n      });\\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: msg.sender,\\n          useATokens: true\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\\n    BorrowLogic.executeSwapBorrowRateMode(\\n      _reserves[asset],\\n      _usersConfig[msg.sender],\\n      asset,\\n      DataTypes.InterestRateMode(interestRateMode)\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) public virtual override {\\n    SupplyLogic.executeUseReserveAsCollateral(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[msg.sender],\\n      asset,\\n      useAsCollateral,\\n      _reservesCount,\\n      ADDRESSES_PROVIDER.getPriceOracle(),\\n      _usersEModeCategory[msg.sender]\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) public virtual override {\\n    LiquidationLogic.executeLiquidationCall(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig,\\n      _eModeCategories,\\n      DataTypes.ExecuteLiquidationCallParams({\\n        reservesCount: _reservesCount,\\n        debtToCover: debtToCover,\\n        collateralAsset: collateralAsset,\\n        debtAsset: debtAsset,\\n        user: user,\\n        receiveAToken: receiveAToken,\\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[user],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\\n      receiverAddress: receiverAddress,\\n      assets: assets,\\n      amounts: amounts,\\n      interestRateModes: interestRateModes,\\n      onBehalfOf: onBehalfOf,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n      reservesCount: _reservesCount,\\n      addressesProvider: address(ADDRESSES_PROVIDER),\\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\\n        msg.sender\\n      )\\n    });\\n\\n    FlashLoanLogic.executeFlashLoan(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      flashParams\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\\n      receiverAddress: receiverAddress,\\n      asset: asset,\\n      amount: amount,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\\n    });\\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintToTreasury(address[] calldata assets) external virtual override {\\n    PoolLogic.executeMintToTreasury(_reserves, assets);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveData(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\\n    return _reserves[asset];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    virtual\\n    override\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    return\\n      PoolLogic.executeGetUserAccountData(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: _usersConfig[user],\\n          reservesCount: _reservesCount,\\n          user: user,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[user]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getConfiguration(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\\n    return _reserves[asset].configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserConfiguration(\\n    address user\\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\\n    return _usersConfig[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedIncome(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedIncome();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedVariableDebt(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedDebt();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReservesList() external view virtual override returns (address[] memory) {\\n    uint256 reservesListCount = _reservesCount;\\n    uint256 droppedReservesCount = 0;\\n    address[] memory reservesList = new address[](reservesListCount);\\n\\n    for (uint256 i = 0; i < reservesListCount; i++) {\\n      if (_reservesList[i] != address(0)) {\\n        reservesList[i - droppedReservesCount] = _reservesList[i];\\n      } else {\\n        droppedReservesCount++;\\n      }\\n    }\\n\\n    // Reduces the length of the reserves array by `droppedReservesCount`\\n    assembly {\\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\\n    }\\n    return reservesList;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveAddressById(uint16 id) external view returns (address) {\\n    return _reservesList[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\\n    return _maxStableRateBorrowSizePercent;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\\n    return _bridgeProtocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumTotal;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external virtual override {\\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\\n    SupplyLogic.executeFinalizeTransfer(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig,\\n      DataTypes.FinalizeTransferParams({\\n        asset: asset,\\n        from: from,\\n        to: to,\\n        amount: amount,\\n        balanceFromBefore: balanceFromBefore,\\n        balanceToBefore: balanceToBefore,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        fromEModeCategory: _usersEModeCategory[from]\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    if (\\n      PoolLogic.executeInitReserve(\\n        _reserves,\\n        _reservesList,\\n        DataTypes.InitReserveParams({\\n          asset: asset,\\n          aTokenAddress: aTokenAddress,\\n          stableDebtAddress: stableDebtAddress,\\n          variableDebtAddress: variableDebtAddress,\\n          interestRateStrategyAddress: interestRateStrategyAddress,\\n          reservesCount: _reservesCount,\\n          maxNumberReserves: MAX_NUMBER_RESERVES()\\n        })\\n      )\\n    ) {\\n      _reservesCount++;\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].configuration = configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateBridgeProtocolFee(\\n    uint256 protocolFee\\n  ) external virtual override onlyPoolConfigurator {\\n    _bridgeProtocolFee = protocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external virtual override onlyPoolConfigurator {\\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function configureEModeCategory(\\n    uint8 id,\\n    DataTypes.EModeCategory memory category\\n  ) external virtual override onlyPoolConfigurator {\\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\\n    _eModeCategories[id] = category;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getEModeCategoryData(\\n    uint8 id\\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\\n    return _eModeCategories[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserEMode(uint8 categoryId) external virtual override {\\n    EModeLogic.executeSetUserEMode(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersEModeCategory,\\n      _usersConfig[msg.sender],\\n      DataTypes.ExecuteSetUserEModeParams({\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        categoryId: categoryId\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserEMode(address user) external view virtual override returns (uint256) {\\n    return _usersEModeCategory[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function resetIsolationModeTotalDebt(\\n    address asset\\n  ) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rescueTokens(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external virtual override onlyPoolAdmin {\\n    PoolLogic.executeRescueTokens(token, to, amount);\\n  }\\n\\n  /// @inheritdoc IPool\\n  /// @dev Deprecated: maintained for compatibility purposes\\n  function deposit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x3eeaa96fc9df64e0f7e85e48849549957d528ed005ebce43de9c277d662b1d37\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":28257,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_reserves","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(ReserveData)23909_storage)"},{"astId":28262,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_usersConfig","offset":0,"slot":"53","type":"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)"},{"astId":28266,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_reservesList","offset":0,"slot":"54","type":"t_mapping(t_uint256,t_address)"},{"astId":28271,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_eModeCategories","offset":0,"slot":"55","type":"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)"},{"astId":28275,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_usersEModeCategory","offset":0,"slot":"56","type":"t_mapping(t_address,t_uint8)"},{"astId":28277,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_bridgeProtocolFee","offset":0,"slot":"57","type":"t_uint256"},{"astId":28279,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_flashLoanPremiumTotal","offset":0,"slot":"58","type":"t_uint128"},{"astId":28281,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_flashLoanPremiumToProtocol","offset":16,"slot":"58","type":"t_uint128"},{"astId":28283,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_maxStableRateBorrowSizePercent","offset":0,"slot":"59","type":"t_uint64"},{"astId":28285,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"_reservesCount","offset":8,"slot":"59","type":"t_uint16"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_struct(ReserveData)23909_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.ReserveData)","numberOfBytes":"32","value":"t_struct(ReserveData)23909_storage"},"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.UserConfigurationMap)","numberOfBytes":"32","value":"t_struct(UserConfigurationMap)23916_storage"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)":{"encoding":"mapping","key":"t_uint8","label":"mapping(uint8 => struct DataTypes.EModeCategory)","numberOfBytes":"32","value":"t_struct(EModeCategory)23927_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(EModeCategory)23927_storage":{"encoding":"inplace","label":"struct DataTypes.EModeCategory","members":[{"astId":23918,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"ltv","offset":0,"slot":"0","type":"t_uint16"},{"astId":23920,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"liquidationThreshold","offset":2,"slot":"0","type":"t_uint16"},{"astId":23922,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"liquidationBonus","offset":4,"slot":"0","type":"t_uint16"},{"astId":23924,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"priceSource","offset":6,"slot":"0","type":"t_address"},{"astId":23926,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"label","offset":0,"slot":"1","type":"t_string_storage"}],"numberOfBytes":"64"},"t_struct(ReserveConfigurationMap)23912_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":23911,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_struct(ReserveData)23909_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveData","members":[{"astId":23880,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)23912_storage"},{"astId":23882,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"liquidityIndex","offset":0,"slot":"1","type":"t_uint128"},{"astId":23884,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"currentLiquidityRate","offset":16,"slot":"1","type":"t_uint128"},{"astId":23886,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"variableBorrowIndex","offset":0,"slot":"2","type":"t_uint128"},{"astId":23888,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"currentVariableBorrowRate","offset":16,"slot":"2","type":"t_uint128"},{"astId":23890,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"currentStableBorrowRate","offset":0,"slot":"3","type":"t_uint128"},{"astId":23892,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"lastUpdateTimestamp","offset":16,"slot":"3","type":"t_uint40"},{"astId":23894,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"id","offset":21,"slot":"3","type":"t_uint16"},{"astId":23896,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"aTokenAddress","offset":0,"slot":"4","type":"t_address"},{"astId":23898,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"stableDebtTokenAddress","offset":0,"slot":"5","type":"t_address"},{"astId":23900,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"variableDebtTokenAddress","offset":0,"slot":"6","type":"t_address"},{"astId":23902,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"interestRateStrategyAddress","offset":0,"slot":"7","type":"t_address"},{"astId":23904,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"accruedToTreasury","offset":0,"slot":"8","type":"t_uint128"},{"astId":23906,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"unbacked","offset":16,"slot":"8","type":"t_uint128"},{"astId":23908,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"isolationModeTotalDebt","offset":0,"slot":"9","type":"t_uint128"}],"numberOfBytes":"320"},"t_struct(UserConfigurationMap)23916_storage":{"encoding":"inplace","label":"struct DataTypes.UserConfigurationMap","members":[{"astId":23915,"contract":"contracts/protocol/pool/L2Pool.sol:L2Pool","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider connected to this contract"},"BRIDGE_PROTOCOL_FEE()":{"notice":"Returns the part of the bridge fees sent to protocol"},"FLASHLOAN_PREMIUM_TOTAL()":{"notice":"Returns the total fee on flash loans"},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"notice":"Returns the part of the flashloan fees sent to protocol"},"MAX_NUMBER_RESERVES()":{"notice":"Returns the maximum number of reserves supported to be listed in this Pool"},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"notice":"Returns the percentage of available liquidity that can be borrowed at once at stable rate"},"backUnbacked(address,uint256,uint256)":{"notice":"Back the current unbacked underlying with `amount` and pay `fee`."},"borrow(address,uint256,uint256,uint16,address)":{"notice":"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`"},"borrow(bytes32)":{"notice":"Calldata efficient wrapper of the borrow function, borrowing on behalf of the caller"},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"notice":"Configures a new category for the eMode."},"deposit(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"dropReserve(address)":{"notice":"Drop a reserve"},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"notice":"Validates and finalizes an aToken transfer"},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"getConfiguration(address)":{"notice":"Returns the configuration of the reserve"},"getEModeCategoryData(uint8)":{"notice":"Returns the data of an eMode category"},"getReserveAddressById(uint16)":{"notice":"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct"},"getReserveData(address)":{"notice":"Returns the state and configuration of the reserve"},"getReserveNormalizedIncome(address)":{"notice":"Returns the normalized income of the reserve"},"getReserveNormalizedVariableDebt(address)":{"notice":"Returns the normalized variable debt per unit of asset"},"getReservesList()":{"notice":"Returns the list of the underlying assets of all the initialized reserves"},"getUserAccountData(address)":{"notice":"Returns the user account data across all the reserves"},"getUserConfiguration(address)":{"notice":"Returns the configuration of the user across all the reserves"},"getUserEMode(address)":{"notice":"Returns the eMode the user is using"},"initReserve(address,address,address,address,address)":{"notice":"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy"},"initialize(address)":{"notice":"Initializes the Pool."},"liquidationCall(address,address,address,uint256,bool)":{"notice":"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk"},"liquidationCall(bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the liquidationCall function"},"mintToTreasury(address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"mintUnbacked(address,uint256,address,uint16)":{"notice":"Mints an `amount` of aTokens to the `onBehalfOf`"},"rebalanceStableBorrowRate(address,address)":{"notice":"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough"},"rebalanceStableBorrowRate(bytes32)":{"notice":"Calldata efficient wrapper of the rebalanceStableBorrowRate function"},"repay(address,uint256,uint256,address)":{"notice":"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address"},"repay(bytes32)":{"notice":"Calldata efficient wrapper of the repay function, repaying on behalf of the caller"},"repayWithATokens(address,uint256,uint256)":{"notice":"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens"},"repayWithATokens(bytes32)":{"notice":"Calldata efficient wrapper of the repayWithATokens function"},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"notice":"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"repayWithPermit(bytes32,bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the repayWithPermit function, repaying on behalf of the caller"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"resetIsolationModeTotalDebt(address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"},"setConfiguration(address,(uint256))":{"notice":"Sets the configuration bitmap of the reserve as a whole"},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Updates the address of the interest rate strategy contract"},"setUserEMode(uint8)":{"notice":"Allows a user to use the protocol in eMode"},"setUserUseReserveAsCollateral(address,bool)":{"notice":"Allows suppliers to enable/disable a specific supplied asset as collateral"},"setUserUseReserveAsCollateral(bytes32)":{"notice":"Calldata efficient wrapper of the setUserUseReserveAsCollateral function"},"supply(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"supply(bytes32)":{"notice":"Calldata efficient wrapper of the supply function on behalf of the caller"},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"supplyWithPermit(bytes32,bytes32,bytes32)":{"notice":"Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller"},"swapBorrowRateMode(address,uint256)":{"notice":"Allows a borrower to swap his debt between stable and variable mode, or vice versa"},"swapBorrowRateMode(bytes32)":{"notice":"Calldata efficient wrapper of the swapBorrowRateMode function"},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the protocol fee on the bridging"},"updateFlashloanPremiums(uint128,uint128)":{"notice":"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury"},"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"},"withdraw(bytes32)":{"notice":"Calldata efficient wrapper of the withdraw function, withdrawing to the caller"}},"notice":"Calldata optimized extension of the Pool contract allowing users to pass compact calldata representation to reduce transaction costs on rollups.","version":1}}},"contracts/protocol/pool/Pool.sol":{"Pool":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"category","type":"tuple"}],"name":"configureEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"interestRateModes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoanSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"getEModeCategoryData","outputs":[{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"getReserveAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralBase","type":"uint256"},{"internalType":"uint256","name":"totalDebtBase","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsBase","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserEMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"resetIsolationModeTotalDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"setUserEMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"flashLoanPremiumTotal","type":"uint128"},{"internalType":"uint128","name":"flashLoanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific marketAll admin functions are callable by the PoolConfigurator contract defined also in the   PoolAddressesProvider","kind":"dev","methods":{"BRIDGE_PROTOCOL_FEE()":{"returns":{"_0":"The bridge fee sent to the protocol treasury"}},"FLASHLOAN_PREMIUM_TOTAL()":{"returns":{"_0":"The total fee on flashloans"}},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"returns":{"_0":"The flashloan fee sent to the protocol treasury"}},"MAX_NUMBER_RESERVES()":{"returns":{"_0":"The maximum number of reserves supported"}},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"returns":{"_0":"The percentage of available liquidity to borrow, expressed in bps"}},"backUnbacked(address,uint256,uint256)":{"params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees"},"returns":{"_0":"The backed amount"}},"borrow(address,uint256,uint256,uint16,address)":{"params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"details":"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets","params":{"config":"The configuration of the category","id":"The id of the category"}},"constructor":{"details":"Constructor.","params":{"provider":"The address of the PoolAddressesProvider contract"}},"deposit(address,uint256,address,uint16)":{"details":"Deprecated: maintained for compatibility purposes","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"dropReserve(address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve"}},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"details":"Only callable by the overlying aToken of the `asset`","params":{"amount":"The amount being transferred/withdrawn","asset":"The address of the underlying asset of the aToken","balanceFromBefore":"The aToken balance of the `from` user before the transfer","balanceToBefore":"The aToken balance of the `to` user before the transfer","from":"The user from which the aTokens are transferred","to":"The user receiving the aTokens"}},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amounts":"The amounts of the assets being flash-borrowed","assets":"The addresses of the assets being flash-borrowed","interestRateModes":"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address","onBehalfOf":"The address  that will receive the debt in the case of using on `modes` 1 or 2","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amount":"The amount of the asset being flash-borrowed","asset":"The address of the asset being flash-borrowed","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"getConfiguration(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The configuration of the reserve"}},"getEModeCategoryData(uint8)":{"params":{"id":"The id of the category"},"returns":{"_0":"The configuration data of the category"}},"getReserveAddressById(uint16)":{"params":{"id":"The id of the reserve as stored in the DataTypes.ReserveData struct"},"returns":{"_0":"The address of the reserve associated with id"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The state and configuration data of the reserve"}},"getReserveNormalizedIncome(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve's normalized income"}},"getReserveNormalizedVariableDebt(address)":{"details":"WARNING: This function is intended to be used primarily by the protocol itself to get a \"dynamic\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve normalized variable debt"}},"getReservesList()":{"details":"It does not include dropped reserves","returns":{"_0":"The addresses of the underlying assets of the initialized reserves"}},"getUserAccountData(address)":{"params":{"user":"The address of the user"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"getUserConfiguration(address)":{"params":{"user":"The user address"},"returns":{"_0":"The configuration of the user"}},"getUserEMode(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The eMode id"}},"initReserve(address,address,address,address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"aTokenAddress":"The address of the aToken that will be assigned to the reserve","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy contract","stableDebtAddress":"The address of the StableDebtToken that will be assigned to the reserve","variableDebtAddress":"The address of the VariableDebtToken that will be assigned to the reserve"}},"initialize(address)":{"details":"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations","params":{"provider":"The address of the PoolAddressesProvider"}},"liquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"mintToTreasury(address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed"}},"mintUnbacked(address,uint256,address,uint16)":{"params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"rebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"}},"repay(address,uint256,uint256,address)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(address,uint256,uint256)":{"details":"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"resetIsolationModeTotalDebt(address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt"}},"setConfiguration(address,(uint256))":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","configuration":"The new configuration bitmap"}},"setReserveInterestRateStrategyAddress(address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","rateStrategyAddress":"The address of the interest rate strategy contract"}},"setUserEMode(uint8)":{"params":{"categoryId":"The id of the category"}},"setUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset supplied","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"}},"supply(address,uint256,address,uint16)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"swapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"}},"updateBridgeProtocolFee(uint256)":{"params":{"bridgeProtocolFee":"The part of the premium sent to the protocol treasury"}},"updateFlashloanPremiums(uint128,uint128)":{"details":"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract","params":{"flashLoanPremiumToProtocol":"The part of the premium sent to the protocol treasury, expressed in bps","flashLoanPremiumTotal":"The total premium, expressed in bps"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider","returns":{"_0":"The address of the PoolAddressesProvider"}}},"title":"Pool contract","version":1},"evm":{"bytecode":{"functionDebugData":{"@_25291":{"entryPoint":null,"id":25291,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":74,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:124","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:124"},"nodeType":"YulFunctionCall","src":"174:12:124"},"nodeType":"YulExpressionStatement","src":"174:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:124"},"nodeType":"YulFunctionCall","src":"143:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:124"},"nodeType":"YulFunctionCall","src":"139:32:124"},"nodeType":"YulIf","src":"136:52:124"},{"nodeType":"YulVariableDeclaration","src":"197:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:124"},"nodeType":"YulFunctionCall","src":"210:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:124"},"nodeType":"YulFunctionCall","src":"291:12:124"},"nodeType":"YulExpressionStatement","src":"291:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:124"},"nodeType":"YulFunctionCall","src":"270:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:124"},"nodeType":"YulFunctionCall","src":"266:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:124"},"nodeType":"YulFunctionCall","src":"255:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:124"},"nodeType":"YulFunctionCall","src":"245:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:124"},"nodeType":"YulFunctionCall","src":"238:50:124"},"nodeType":"YulIf","src":"235:70:124"},{"nodeType":"YulAssignment","src":"314:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:124","type":""}],"src":"14:321:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4760},{"length":20,"start":5527},{"length":20,"start":8199},{"length":20,"start":8362},{"length":20,"start":11288},{"length":20,"start":13495}]},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7402},{"length":20,"start":12994}]},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4279}]},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5426},{"length":20,"start":9943}]},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":2718}]},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":6686},{"length":20,"start":7760},{"length":20,"start":8315},{"length":20,"start":10252},{"length":20,"start":11413},{"length":20,"start":13111}]},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3696},{"length":20,"start":5870},{"length":20,"start":6512},{"length":20,"start":6724},{"length":20,"start":12382}]}},"object":"60a0604052600080553480156200001557600080fd5b50604051620055a3380380620055a383398101604081905262000038916200004a565b6001600160a01b03166080526200007c565b6000602082840312156200005d57600080fd5b81516001600160a01b03811681146200007557600080fd5b9392505050565b6080516154a9620000fa6000396000818161035601528181610a4e01528181610b40015281816110430152818161166601528181611a0c0152818161211d015281816121ee015281816124410152818161273c0152818161299b015281816130120152818161360f015281816137b6015261394301526154a96000f3fe608060405234801561001057600080fd5b50600436106103095760003560e01c80637a708e921161019c578063d15e0053116100ee578063e82fec2f11610097578063ee3e210b11610071578063ee3e210b1461096d578063f51e435b14610980578063f8119d511461099357600080fd5b8063e82fec2f14610922578063e8eda9df146106da578063eddf1b791461093457600080fd5b8063d5ed3933116100c8578063d5ed3933146108e9578063d65dc7a1146108fc578063e43e88a11461090f57600080fd5b8063d15e0053146108ae578063d1946dbc146108c1578063d579ea7d146108d657600080fd5b8063bcb6e52211610150578063c4d66de81161012a578063c4d66de814610875578063cd11238214610888578063cea9d26f1461089b57600080fd5b8063bcb6e522146107d3578063bf92857c146107e6578063c44b11f71461082657600080fd5b80639cd19996116101815780639cd199961461079a578063a415bcad146107ad578063ab9c4b5d146107c057600080fd5b80637a708e921461077457806394ba89a21461078757600080fd5b8063386497fd11610260578063617ba0371161020957806369a933a5116101e357806369a933a5146107135780636a99c036146107265780636c6f6ae11461075457600080fd5b8063617ba037146106da57806363c9b860146106ed57806369328dec1461070057600080fd5b8063527517971161023a578063527517971461067a578063573ade81146106b45780635a3b74b9146106c757600080fd5b8063386497fd146105f657806342b0b77c146106095780634417a5831461061c57600080fd5b80631d2118f9116102c25780632dad97d41161029c5780632dad97d4146104025780633036b4391461041557806335ea6a751461042857600080fd5b80631d2118f9146103d4578063272d9072146103e757806328530a47146103ef57600080fd5b806302c205f0116102f357806302c205f01461033e5780630542975c14610351578063074b2e431461039d57600080fd5b8062a718a91461030e5780630148170e14610323575b600080fd5b61032161031c366004613e1b565b6109a2565b005b61032b600181565b6040519081526020015b60405180910390f35b61032161034c366004613ea6565b610c1d565b6103787f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610335565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff9091168152602001610335565b6103216103e2366004613f25565b610dcd565b60395461032b565b6103216103fd366004613f5e565b610fbb565b61032b610410366004613f79565b61119a565b610321610423366004613fae565b6112de565b6105e9610436366004613fc7565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091525073ffffffffffffffffffffffffffffffffffffffff90811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103359190613fe4565b61032b610604366004613fc7565b6112eb565b6103216106173660046141aa565b61131f565b61066b61062a366004613fc7565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260358352819020815192830190915254815290565b60405190518152602001610335565b61037861068836600461422c565b61ffff1660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61032b6106c2366004614247565b611499565b6103216106d5366004614291565b6115f2565b6103216106e83660046142bf565b6117c7565b6103216106fb366004613fc7565b6118ca565b61032b61070e366004614310565b611946565b6103216107213660046142bf565b611b65565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166103b3565b610767610762366004613f5e565b611c12565b60405161033591906143bd565b610321610782366004614420565b611d4c565b610321610795366004614483565b611ed8565b6103216107a83660046144f4565b611f59565b6103216107bb366004614536565b611fae565b6103216107ce366004614575565b612294565b6103216107e136600461468f565b61264d565b6107f96107f4366004613fc7565b612684565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610335565b61066b610834366004613fc7565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260348352819020815192830190915254815290565b610321610883366004613fc7565b6128b3565b610321610896366004613f25565b612ab7565b6103216108a93660046146c2565b612b40565b61032b6108bc366004613fc7565b612bed565b6108c9612c1b565b6040516103359190614703565b6103216108e4366004614804565b612d57565b6103216108f736600461493c565b612ec3565b61032b61090a366004613f79565b61314a565b61032161091d366004613fc7565b6131ea565b603b5467ffffffffffffffff1661032b565b61032b610942366004613fc7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205460ff1690565b61032b61097b3660046149a1565b61325f565b61032161098e3660046149e7565b61343a565b60405160808152602001610335565b73__$f598c634f2d943205ac23f707b80075cbb$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adb9190614a46565b73ffffffffffffffffffffffffffffffffffffffff90811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190614a46565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610be6959493929190614a63565b60006040518083038186803b158015610bfe57600080fd5b505af4158015610c12573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e401600060405180830381600087803b158015610caf57600080fd5b505af1158015610cc3573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff86811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e40160006040518083038186803b158015610dab57600080fd5b505af4158015610dbf573d6000803e3d6000fd5b505050505050505050505050565b610dd56135f6565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff16151580610ef657506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73__$e4b9550ff526a295e1233dea02821b9004$__635d5dc3136034603660376038603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d09190614a46565b73ffffffffffffffffffffffffffffffffffffffff1681526020018960ff168152506040518763ffffffff1660e01b81526004016111679695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a08501529182015173ffffffffffffffffffffffffffffffffffffffff1660c0840152015160ff1660e08201526101000190565b60006040518083038186803b15801561117f57600080fd5b505af4158015611193573d6000803e3d6000fd5b5050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808a73ffffffffffffffffffffffffffffffffffffffff16815260200189815260200188600281111561123857611238614b57565b600281111561124957611249614b57565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526112939493929190600401614bc1565b602060405180830381865af41580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190614c34565b90505b9392505050565b6112e66135f6565b603955565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061131990613724565b92915050565b60006040518060e001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116604080870191909152911660609094019390935273ffffffffffffffffffffffffffffffffffffffff8a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__9163a1fe0e8d91611460918590600401614c4d565b60006040518083038186803b15801561147857600080fd5b505af415801561148c573d6000803e3d6000fd5b5050505050505050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561153757611537614b57565b600281111561154857611548614b57565b815273ffffffffffffffffffffffffffffffffffffffff891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526115a89493929190600401614bc1565b602060405180830381865af41580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190614c34565b95945050505050565b73__$db79717e66442ee197e8271d032a066e34$__63bf697a26603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208787603b60089054906101000a900461ffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f39190614a46565b336000908152603860205260409081902054905160e08b901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019990995260248901979097526044880195909552606487019390935273ffffffffffffffffffffffffffffffffffffffff9182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b1580156117ab57600080fd5b505af41580156117bf573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e4015b60006040518083038186803b1580156118ac57600080fd5b505af41580156118c0573d6000803e3d6000fd5b5050505050505050565b6118d26135f6565b6040517f9cf57023000000000000000000000000000000000000000000000000000000008152603460048201526036602482015273ffffffffffffffffffffffffffffffffffffffff8216604482015273__$563c746fa3df0f1858d85f6ef4258864be$__90639cf5702390606401611167565b600073__$db79717e66442ee197e8271d032a066e34$__63186dea44603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a999190614a46565b73ffffffffffffffffffffffffffffffffffffffff9081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a001511661012482015261014401611293565b611b6d6137b4565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$b06080f092f400a43662c3f835a4d9baa8$__90630413c86f9060e401611894565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff8082168352620100008204811694830194909452640100000000810490931693810193909352660100000000000090910473ffffffffffffffffffffffffffffffffffffffff166060830152600181018054608084019190611cc390614cd8565b80601f0160208091040260200160405190810160405280929190818152602001828054611cef90614cd8565b8015611d3c5780601f10611d1157610100808354040283529160200191611d3c565b820191906000526020600020905b815481529060010190602001808311611d1f57829003601f168201915b5050505050815250509050919050565b611d546135f6565b73__$563c746fa3df0f1858d85f6ef4258864be$__6369fc1bdf603460366040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff168152602001611e2b608090565b61ffff168152506040518463ffffffff1660e01b8152600401611e5093929190614d26565b602060405180830381865af4158015611e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e919190614db6565b1561119357603b805468010000000000000000900461ffff16906008611eb683614e02565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603460209081526040808320338452603590925290912073__$c3724b8d563dc83a94e797176cddecb3b9$__9163eac4d7039185856002811115611f3a57611f3a614b57565b6040518563ffffffff1660e01b81526004016117939493929190614e24565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$563c746fa3df0f1858d85f6ef4258864be$__906348c2ca8c906117939060349086908690600401614e5b565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f9603460366037603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a600281111561208557612085614b57565b600281111561209657612096614b57565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a09093019273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121899190614a46565b73ffffffffffffffffffffffffffffffffffffffff90811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190614a46565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610be6959493929190614ec0565b6000604051806101c001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a085015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa1580156124d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f89190614a46565b6040517ffa50f29700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063fa50f29790602401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190614db6565b1515905273ffffffffffffffffffffffffffffffffffffffff86166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__91632e7263ea9161260f91603491603691603791908890600401615069565b60006040518083038186803b15801561262757600080fd5b505af415801561263b573d6000803e3d6000fd5b50505050505050505050505050505050565b6126556135f6565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$563c746fa3df0f1858d85f6ef4258864be$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a69190614a46565b73ffffffffffffffffffffffffffffffffffffffff90811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af415801561287b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289f919061520f565b949c939b5091995097509550909350915050565b6001805460ff16806128c45750303b155b806128d0575060005481115b61295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610e57565b60015460ff1615801561299957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525090612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c41790558015612ab257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$c3724b8d563dc83a94e797176cddecb3b9$__90636973f74490606401611793565b612b48613941565b6040517f87b322b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044810182905273__$563c746fa3df0f1858d85f6ef4258864be$__906387b322b29060640160006040518083038186803b158015612bd057600080fd5b505af4158015612be4573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061131990613ace565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff811115612c4d57612c4d61475d565b604051908082528060200260200182016040528015612c76578160200160208202803683370190505b50905060005b83811015612d4d5760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612d2d5760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1682612cde8584615259565b81518110612cee57612cee615270565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d3b565b82612d378161529f565b9350505b80612d458161529f565b915050612c7c565b5091038152919050565b612d5f6135f6565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5060ff8216600090815260376020908152604091829020835181548386015194860151606087015173ffffffffffffffffffffffffffffffffffffffff166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416929094169190911791909117949094161792909217825560808301518051849392611193926001850192910190613d42565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260346020908152604091829020600401548251808401909352600283527f3131000000000000000000000000000000000000000000000000000000000000918301919091529091163314612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5073__$db79717e66442ee197e8271d032a066e34$__638a5dadd160346036603760356040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561307b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309f9190614a46565b73ffffffffffffffffffffffffffffffffffffffff90811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526131129594939291906004016152d8565b60006040518083038186803b15801561312a57600080fd5b505af415801561313e573d6000803e3d6000fd5b50505050505050505050565b60006131546137b4565b73ffffffffffffffffffffffffffffffffffffffff84166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$b06080f092f400a43662c3f835a4d9baa8$__90638e7432489060a401611293565b6131f26135f6565b6040517f1e3b41450000000000000000000000000000000000000000000000000000000081526034600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015273__$563c746fa3df0f1858d85f6ef4258864be$__90631e3b414590604401611167565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905260009073ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e401600060405180830381600087803b1580156132f457600080fd5b505af1158015613308573d6000803e3d6000fd5b5050505060006040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561334d5761334d614b57565b600281111561335e5761335e614b57565b815273ffffffffffffffffffffffffffffffffffffffff89166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$c3724b8d563dc83a94e797176cddecb3b9$__916340e95de6916133eb916034916036918790600401614bc1565b602060405180830381865af4158015613408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342c9190614c34565b9a9950505050505050505050565b6134426135f6565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166134c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061355a57506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906135c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5073ffffffffffffffffffffffffffffffffffffffff91909116600090815260346020526040902090359055565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369c9190614a46565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b50565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561376a575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546112d7906fffffffffffffffffffffffffffffffff808216916137a8917001000000000000000000000000000000009091041684613b52565b90613b5f565b50919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561381f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138439190614a46565b6040517f726600ce00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063726600ce90602401602060405180830381865afa1580156138af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d39190614db6565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d09190614a46565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690637be53ca190602401602060405180830381865afa158015613a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a609190614db6565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613b14575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546112d7906fffffffffffffffffffffffffffffffff808216916137a8917001000000000000000000000000000000009091041684613bb6565b60006112d7838342613bfb565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517613b9457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080613bca64ffffffffff841642615259565b613bd490856153b4565b6301e1338090049050613bf3816b033b2e3c9fd0803ce8000000615420565b949350505050565b600080613c0f64ffffffffff851684615259565b905080613c2b576b033b2e3c9fd0803ce80000009150506112d7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511613c61576000613c66565b600285035b925066038882915c4000613c7a8a80613b5f565b81613c8757613c876153f1565b0491506301e13380613c99838b613b5f565b81613ca657613ca66153f1565b049050600082613cb686886153b4565b613cc091906153b4565b60029004905060008285613cd4888a6153b4565b613cde91906153b4565b613ce891906153b4565b60069004905080826301e13380613cff8a8f6153b4565b613d099190615438565b613d1f906b033b2e3c9fd0803ce8000000615420565b613d299190615420565b613d339190615420565b9b9a5050505050505050505050565b828054613d4e90614cd8565b90600052602060002090601f016020900481019282613d705760008555613db6565b82601f10613d8957805160ff1916838001178555613db6565b82800160010185558215613db6579182015b82811115613db6578251825591602001919060010190613d9b565b50613dc2929150613dc6565b5090565b5b80821115613dc25760008155600101613dc7565b73ffffffffffffffffffffffffffffffffffffffff8116811461372157600080fd5b8035613e0881613ddb565b919050565b801515811461372157600080fd5b600080600080600060a08688031215613e3357600080fd5b8535613e3e81613ddb565b94506020860135613e4e81613ddb565b93506040860135613e5e81613ddb565b9250606086013591506080860135613e7581613e0d565b809150509295509295909350565b803561ffff81168114613e0857600080fd5b803560ff81168114613e0857600080fd5b600080600080600080600080610100898b031215613ec357600080fd5b8835613ece81613ddb565b9750602089013596506040890135613ee581613ddb565b9550613ef360608a01613e83565b945060808901359350613f0860a08a01613e95565b925060c0890135915060e089013590509295985092959890939650565b60008060408385031215613f3857600080fd5b8235613f4381613ddb565b91506020830135613f5381613ddb565b809150509250929050565b600060208284031215613f7057600080fd5b6112d782613e95565b600080600060608486031215613f8e57600080fd5b8335613f9981613ddb565b95602085013595506040909401359392505050565b600060208284031215613fc057600080fd5b5035919050565b600060208284031215613fd957600080fd5b81356112d781613ddb565b81515181526101e08101602083015161401160208401826fffffffffffffffffffffffffffffffff169052565b50604083015161403560408401826fffffffffffffffffffffffffffffffff169052565b50606083015161405960608401826fffffffffffffffffffffffffffffffff169052565b50608083015161407d60808401826fffffffffffffffffffffffffffffffff169052565b5060a08301516140a160a08401826fffffffffffffffffffffffffffffffff169052565b5060c08301516140ba60c084018264ffffffffff169052565b5060e08301516140d060e084018261ffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f84011261417357600080fd5b50813567ffffffffffffffff81111561418b57600080fd5b6020830191508360208285010111156141a357600080fd5b9250929050565b60008060008060008060a087890312156141c357600080fd5b86356141ce81613ddb565b955060208701356141de81613ddb565b945060408701359350606087013567ffffffffffffffff81111561420157600080fd5b61420d89828a01614161565b9094509250614220905060808801613e83565b90509295509295509295565b60006020828403121561423e57600080fd5b6112d782613e83565b6000806000806080858703121561425d57600080fd5b843561426881613ddb565b93506020850135925060408501359150606085013561428681613ddb565b939692955090935050565b600080604083850312156142a457600080fd5b82356142af81613ddb565b91506020830135613f5381613e0d565b600080600080608085870312156142d557600080fd5b84356142e081613ddb565b93506020850135925060408501356142f781613ddb565b915061430560608601613e83565b905092959194509250565b60008060006060848603121561432557600080fd5b833561433081613ddb565b925060208401359150604084013561434781613ddb565b809150509250925092565b6000815180845260005b818110156143785760208185018101518683018201520161435c565b8181111561438a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff8084511660208401528060208501511660408401528060408501511660608401525073ffffffffffffffffffffffffffffffffffffffff6060840151166080830152608083015160a080840152613bf360c0840182614352565b600080600080600060a0868803121561443857600080fd5b853561444381613ddb565b9450602086013561445381613ddb565b9350604086013561446381613ddb565b9250606086013561447381613ddb565b91506080860135613e7581613ddb565b6000806040838503121561449657600080fd5b82356144a181613ddb565b946020939093013593505050565b60008083601f8401126144c157600080fd5b50813567ffffffffffffffff8111156144d957600080fd5b6020830191508360208260051b85010111156141a357600080fd5b6000806020838503121561450757600080fd5b823567ffffffffffffffff81111561451e57600080fd5b61452a858286016144af565b90969095509350505050565b600080600080600060a0868803121561454e57600080fd5b853561455981613ddb565b9450602086013593506040860135925061447360608701613e83565b600080600080600080600080600080600060e08c8e03121561459657600080fd5b61459f8c613dfd565b9a5067ffffffffffffffff8060208e013511156145bb57600080fd5b6145cb8e60208f01358f016144af565b909b50995060408d01358110156145e157600080fd5b6145f18e60408f01358f016144af565b909950975060608d013581101561460757600080fd5b6146178e60608f01358f016144af565b909750955061462860808e01613dfd565b94508060a08e0135111561463b57600080fd5b5061464c8d60a08e01358e01614161565b909350915061465d60c08d01613e83565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff81168114613e0857600080fd5b600080604083850312156146a257600080fd5b6146ab8361466f565b91506146b96020840161466f565b90509250929050565b6000806000606084860312156146d757600080fd5b83356146e281613ddb565b925060208401356146f281613ddb565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561475157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161471f565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156147af576147af61475d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156147fc576147fc61475d565b604052919050565b6000806040838503121561481757600080fd5b61482083613e95565b915060208084013567ffffffffffffffff8082111561483e57600080fd5b9085019060a0828803121561485257600080fd5b61485a61478c565b61486383613e83565b8152614870848401613e83565b8482015261488060408401613e83565b6040820152606083013561489381613ddb565b60608201526080830135828111156148aa57600080fd5b80840193505087601f8401126148bf57600080fd5b8235828111156148d1576148d161475d565b614901857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016147b5565b9250808352888582860101111561491757600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c0878903121561495557600080fd5b863561496081613ddb565b9550602087013561497081613ddb565b9450604087013561498081613ddb565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b0312156149be57600080fd5b88356149c981613ddb565b975060208901359650604089013595506060890135613ef381613ddb565b60008082840360408112156149fb57600080fd5b8335614a0681613ddb565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215614a3857600080fd5b506020830190509250929050565b600060208284031215614a5857600080fd5b81516112d781613ddb565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a0830152604083015173ffffffffffffffffffffffffffffffffffffffff80821660c08501528060608601511660e085015250506080830151610100614aeb8185018373ffffffffffffffffffffffffffffffffffffffff169052565b60a0850151151561012085015260c085015173ffffffffffffffffffffffffffffffffffffffff90811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b6020815260006112d76020830184614352565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614bbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006101008201905085825284602083015283604083015273ffffffffffffffffffffffffffffffffffffffff808451166060840152602084015160808401526040840151614c1360a0850182614b86565b5060608401511660c0830152608090920151151560e0909101529392505050565b600060208284031215614c4657600080fd5b5051919050565b82815260406020820152600073ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401525060408301516080830152606083015160e060a0840152614ca8610120840182614352565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c90821680614cec57607f821691505b602082108114156137ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006101208201905084825283602083015273ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a0830151614d9c60e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b600060208284031215614dc857600080fd5b81516112d781613e0d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff80831681811415614e1a57614e1a614dd3565b6001019392505050565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff83166040820152608081016115e96060830184614b86565b83815260406020808301829052908201839052600090849060608401835b86811015614eb4578335614e8c81613ddb565b73ffffffffffffffffffffffffffffffffffffffff1682529282019290820190600101614e79565b50979650505050505050565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e08301526080830151610100614f5c81850183614b86565b60a08501519150610120614f758186018461ffff169052565b60c08601519250610140614f8c8187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e08501529050614b39565b600081518084526020808501945080840160005b8381101561502e57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614ffc565b509495945050505050565b600081518084526020808501945080840160005b8381101561502e5781518752958201959082019060010161504d565b85815284602082015283604082015282606082015260a060808201526150a860a08201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516101c08060c08501526150c6610260850183614fe8565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e08701526151028483615039565b9350606087015191506101008187860301818801526151218584615039565b94506080880151925061012061514e8189018573ffffffffffffffffffffffffffffffffffffffff169052565b60a089015193506101408389880301818a015261516b8786614352565b965060c08a015194506101609350615188848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b015196506151e26102008b018873ffffffffffffffffffffffffffffffffffffffff169052565b8a015160ff81166102208b015295506151f9915050565b8701518015156102408801529250614eb4915050565b60008060008060008060c0878903121561522857600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008282101561526b5761526b614dd3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152d1576152d1614dd3565b5060010190565b60006101a08201905086825285602083015284604083015283606083015273ffffffffffffffffffffffffffffffffffffffff8084511660808401528060208501511660a084015250604083015161534860c084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e085015191506153a061016085018373ffffffffffffffffffffffffffffffffffffffff169052565b84015160ff81166101808501529050614b39565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153ec576153ec614dd3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000821982111561543357615433614dd3565b500190565b60008261546e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea264697066735822122080aadf89d3e671d640d0df3da4ce810529e5e059dd15f51852bbce03f60f26c164736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x55A3 CODESIZE SUB DUP1 PUSH3 0x55A3 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x7C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x54A9 PUSH3 0xFA PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x356 ADD MSTORE DUP2 DUP2 PUSH2 0xA4E ADD MSTORE DUP2 DUP2 PUSH2 0xB40 ADD MSTORE DUP2 DUP2 PUSH2 0x1043 ADD MSTORE DUP2 DUP2 PUSH2 0x1666 ADD MSTORE DUP2 DUP2 PUSH2 0x1A0C ADD MSTORE DUP2 DUP2 PUSH2 0x211D ADD MSTORE DUP2 DUP2 PUSH2 0x21EE ADD MSTORE DUP2 DUP2 PUSH2 0x2441 ADD MSTORE DUP2 DUP2 PUSH2 0x273C ADD MSTORE DUP2 DUP2 PUSH2 0x299B ADD MSTORE DUP2 DUP2 PUSH2 0x3012 ADD MSTORE DUP2 DUP2 PUSH2 0x360F ADD MSTORE DUP2 DUP2 PUSH2 0x37B6 ADD MSTORE PUSH2 0x3943 ADD MSTORE PUSH2 0x54A9 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x309 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A708E92 GT PUSH2 0x19C JUMPI DUP1 PUSH4 0xD15E0053 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEE3E210B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0x96D JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0x980 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0x993 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0x922 JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x6DA JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0x934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5ED3933 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0x8E9 JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0x8FC JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0x90F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x8AE JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x8C1 JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x8D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x875 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x888 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x89B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x7D3 JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x826 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CD19996 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x79A JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x7AD JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x7C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x774 JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x787 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD GT PUSH2 0x260 JUMPI DUP1 PUSH4 0x617BA037 GT PUSH2 0x209 JUMPI DUP1 PUSH4 0x69A933A5 GT PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x726 JUMPI DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x617BA037 EQ PUSH2 0x6DA JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x6ED JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x700 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x23A JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x67A JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x6B4 JUMPI DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x6C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD EQ PUSH2 0x5F6 JUMPI DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x609 JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x61C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 GT PUSH2 0x2C2 JUMPI DUP1 PUSH4 0x2DAD97D4 GT PUSH2 0x29C JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x402 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x428 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x272D9072 EQ PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x3EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C205F0 GT PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x39D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x323 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x321 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x3E1B JUMP JUMPDEST PUSH2 0x9A2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x32B PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x321 PUSH2 0x34C CALLDATASIZE PUSH1 0x4 PUSH2 0x3EA6 JUMP JUMPDEST PUSH2 0xC1D JUMP JUMPDEST PUSH2 0x378 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x3E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F25 JUMP JUMPDEST PUSH2 0xDCD JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x32B JUMP JUMPDEST PUSH2 0x321 PUSH2 0x3FD CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5E JUMP JUMPDEST PUSH2 0xFBB JUMP JUMPDEST PUSH2 0x32B PUSH2 0x410 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F79 JUMP JUMPDEST PUSH2 0x119A JUMP JUMPDEST PUSH2 0x321 PUSH2 0x423 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FAE JUMP JUMPDEST PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x5E9 PUSH2 0x436 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x3FE4 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x604 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x12EB JUMP JUMPDEST PUSH2 0x321 PUSH2 0x617 CALLDATASIZE PUSH1 0x4 PUSH2 0x41AA JUMP JUMPDEST PUSH2 0x131F JUMP JUMPDEST PUSH2 0x66B PUSH2 0x62A CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x378 PUSH2 0x688 CALLDATASIZE PUSH1 0x4 PUSH2 0x422C JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x6C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4247 JUMP JUMPDEST PUSH2 0x1499 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4291 JUMP JUMPDEST PUSH2 0x15F2 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x42BF JUMP JUMPDEST PUSH2 0x17C7 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6FB CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x18CA JUMP JUMPDEST PUSH2 0x32B PUSH2 0x70E CALLDATASIZE PUSH1 0x4 PUSH2 0x4310 JUMP JUMPDEST PUSH2 0x1946 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x721 CALLDATASIZE PUSH1 0x4 PUSH2 0x42BF JUMP JUMPDEST PUSH2 0x1B65 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x767 PUSH2 0x762 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5E JUMP JUMPDEST PUSH2 0x1C12 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x43BD JUMP JUMPDEST PUSH2 0x321 PUSH2 0x782 CALLDATASIZE PUSH1 0x4 PUSH2 0x4420 JUMP JUMPDEST PUSH2 0x1D4C JUMP JUMPDEST PUSH2 0x321 PUSH2 0x795 CALLDATASIZE PUSH1 0x4 PUSH2 0x4483 JUMP JUMPDEST PUSH2 0x1ED8 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x44F4 JUMP JUMPDEST PUSH2 0x1F59 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7BB CALLDATASIZE PUSH1 0x4 PUSH2 0x4536 JUMP JUMPDEST PUSH2 0x1FAE JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7CE CALLDATASIZE PUSH1 0x4 PUSH2 0x4575 JUMP JUMPDEST PUSH2 0x2294 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x468F JUMP JUMPDEST PUSH2 0x264D JUMP JUMPDEST PUSH2 0x7F9 PUSH2 0x7F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x66B PUSH2 0x834 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x883 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x28B3 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x896 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F25 JUMP JUMPDEST PUSH2 0x2AB7 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0x2B40 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x8BC CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x2BED JUMP JUMPDEST PUSH2 0x8C9 PUSH2 0x2C1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x4703 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4804 JUMP JUMPDEST PUSH2 0x2D57 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x493C JUMP JUMPDEST PUSH2 0x2EC3 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x90A CALLDATASIZE PUSH1 0x4 PUSH2 0x3F79 JUMP JUMPDEST PUSH2 0x314A JUMP JUMPDEST PUSH2 0x321 PUSH2 0x91D CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x31EA JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x32B JUMP JUMPDEST PUSH2 0x32B PUSH2 0x942 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x97B CALLDATASIZE PUSH1 0x4 PUSH2 0x49A1 JUMP JUMPDEST PUSH2 0x325F JUMP JUMPDEST PUSH2 0x321 PUSH2 0x98E CALLDATASIZE PUSH1 0x4 PUSH2 0x49E7 JUMP JUMPDEST PUSH2 0x343A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xADB SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBAD SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBE6 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4A63 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xC12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xCC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xDBF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xDD5 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xE60 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0xEF6 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xF64 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10D0 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1167 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1193 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1238 JUMPI PUSH2 0x1238 PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1249 JUMPI PUSH2 0x1249 PUSH2 0x4B57 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1293 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4BC1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x12B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12D4 SWAP2 SWAP1 PUSH2 0x4C34 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x12E6 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1319 SWAP1 PUSH2 0x3724 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x1460 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4C4D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x148C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1537 JUMPI PUSH2 0x1537 PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1548 JUMPI PUSH2 0x1548 PUSH2 0x4B57 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x15A8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4BC1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x15C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15E9 SWAP2 SWAP1 PUSH2 0x4C34 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16F3 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x18C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18D2 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9CF5702300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x9CF57023 SWAP1 PUSH1 0x64 ADD PUSH2 0x1167 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A99 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x1B6D PUSH2 0x37B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1894 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1CC3 SWAP1 PUSH2 0x4CD8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1CEF SWAP1 PUSH2 0x4CD8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1D3C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1D11 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1D3C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1D1F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D54 PUSH2 0x35F6 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E2B PUSH1 0x80 SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E50 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D26 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1E6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E91 SWAP2 SWAP1 PUSH2 0x4DB6 JUMP JUMPDEST ISZERO PUSH2 0x1193 JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x1EB6 DUP4 PUSH2 0x4E02 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1F3A JUMPI PUSH2 0x1F3A PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1793 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4E24 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x1793 SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4E5B JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2085 JUMPI PUSH2 0x2085 PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2096 JUMPI PUSH2 0x2096 PUSH2 0x4B57 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2165 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2189 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2237 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x225B SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBE6 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4EC0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24F8 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2564 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2588 SWAP2 SWAP1 PUSH2 0x4DB6 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x260F SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5069 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2627 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x263B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2655 PUSH2 0x35F6 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2782 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27A6 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x287B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x289F SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x28C4 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x28D0 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x295C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xE57 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2999 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2A56 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2AB2 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x1793 JUMP JUMPDEST PUSH2 0x2B48 PUSH2 0x3941 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2BE4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1319 SWAP1 PUSH2 0x3ACE JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2C4D JUMPI PUSH2 0x2C4D PUSH2 0x475D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2C76 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2D4D JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2D2D JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH2 0x2CDE DUP6 DUP5 PUSH2 0x5259 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2CEE JUMPI PUSH2 0x2CEE PUSH2 0x5270 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2D3B JUMP JUMPDEST DUP3 PUSH2 0x2D37 DUP2 PUSH2 0x529F JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2D45 DUP2 PUSH2 0x529F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2C7C JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2D5F PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x2DCE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x1193 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x3D42 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x2F61 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x307B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x309F SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x3112 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x52D8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x312A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x313E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3154 PUSH2 0x37B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x31F2 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x1167 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3308 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x334D JUMPI PUSH2 0x334D PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x335E JUMPI PUSH2 0x335E PUSH2 0x4B57 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x33EB SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4BC1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3408 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x342C SWAP2 SWAP1 PUSH2 0x4C34 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3442 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x34C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x355A JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x35C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 CALLDATALOAD SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3678 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x369C SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3721 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x376A JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x12D7 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x37A8 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3B52 JUMP JUMPDEST SWAP1 PUSH2 0x3B5F JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x381F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3843 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38D3 SWAP2 SWAP1 PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3721 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39D0 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A3C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A60 SWAP2 SWAP1 PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3721 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3B14 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x12D7 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x37A8 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3BB6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12D7 DUP4 DUP4 TIMESTAMP PUSH2 0x3BFB JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3B94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3BCA PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5259 JUMP JUMPDEST PUSH2 0x3BD4 SWAP1 DUP6 PUSH2 0x53B4 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x3BF3 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5420 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3C0F PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5259 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3C2B JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x12D7 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x3C61 JUMPI PUSH1 0x0 PUSH2 0x3C66 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3C7A DUP11 DUP1 PUSH2 0x3B5F JUMP JUMPDEST DUP2 PUSH2 0x3C87 JUMPI PUSH2 0x3C87 PUSH2 0x53F1 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3C99 DUP4 DUP12 PUSH2 0x3B5F JUMP JUMPDEST DUP2 PUSH2 0x3CA6 JUMPI PUSH2 0x3CA6 PUSH2 0x53F1 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x3CB6 DUP7 DUP9 PUSH2 0x53B4 JUMP JUMPDEST PUSH2 0x3CC0 SWAP2 SWAP1 PUSH2 0x53B4 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x3CD4 DUP9 DUP11 PUSH2 0x53B4 JUMP JUMPDEST PUSH2 0x3CDE SWAP2 SWAP1 PUSH2 0x53B4 JUMP JUMPDEST PUSH2 0x3CE8 SWAP2 SWAP1 PUSH2 0x53B4 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x3CFF DUP11 DUP16 PUSH2 0x53B4 JUMP JUMPDEST PUSH2 0x3D09 SWAP2 SWAP1 PUSH2 0x5438 JUMP JUMPDEST PUSH2 0x3D1F SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5420 JUMP JUMPDEST PUSH2 0x3D29 SWAP2 SWAP1 PUSH2 0x5420 JUMP JUMPDEST PUSH2 0x3D33 SWAP2 SWAP1 PUSH2 0x5420 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x3D4E SWAP1 PUSH2 0x4CD8 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x3D70 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3DB6 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3D89 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3DB6 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3DB6 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3DB6 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3D9B JUMP JUMPDEST POP PUSH2 0x3DC2 SWAP3 SWAP2 POP PUSH2 0x3DC6 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x3DC2 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3DC7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3721 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3E08 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3721 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3E33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3E3E DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3E4E DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3E5E DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3E75 DUP2 PUSH2 0x3E0D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3E08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3E08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3EC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3ECE DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3EE5 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 POP PUSH2 0x3EF3 PUSH1 0x60 DUP11 ADD PUSH2 0x3E83 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3F08 PUSH1 0xA0 DUP11 ADD PUSH2 0x3E95 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3F43 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3F53 DUP2 PUSH2 0x3DDB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D7 DUP3 PUSH2 0x3E95 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3F8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3F99 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12D7 DUP2 PUSH2 0x3DDB JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x4011 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4035 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x4059 PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x407D PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x40A1 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x40BA PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x40D0 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x41A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x41C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x41CE DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x41DE DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4201 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x420D DUP10 DUP3 DUP11 ADD PUSH2 0x4161 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x4220 SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x3E83 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x423E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D7 DUP3 PUSH2 0x3E83 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x425D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4268 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4286 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x42A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x42AF DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3F53 DUP2 PUSH2 0x3E0D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x42D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x42E0 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x42F7 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 POP PUSH2 0x4305 PUSH1 0x60 DUP7 ADD PUSH2 0x3E83 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4330 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x4347 DUP2 PUSH2 0x3DDB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4378 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x435C JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x438A JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x3BF3 PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x4352 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4443 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4453 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4463 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4473 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3E75 DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x44A1 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x44C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x44D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x41A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4507 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x451E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x452A DUP6 DUP3 DUP7 ADD PUSH2 0x44AF JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x454E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4559 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4473 PUSH1 0x60 DUP8 ADD PUSH2 0x3E83 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x4596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x459F DUP13 PUSH2 0x3DFD JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x45BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45CB DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x44AF JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x45E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45F1 DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x44AF JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4607 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4617 DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x44AF JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x4628 PUSH1 0x80 DUP15 ADD PUSH2 0x3DFD JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x463B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x464C DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x4161 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x465D PUSH1 0xC0 DUP14 ADD PUSH2 0x3E83 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3E08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x46A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46AB DUP4 PUSH2 0x466F JUMP JUMPDEST SWAP2 POP PUSH2 0x46B9 PUSH1 0x20 DUP5 ADD PUSH2 0x466F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x46D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x46E2 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x46F2 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4751 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x471F JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x47AF JUMPI PUSH2 0x47AF PUSH2 0x475D JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x47FC JUMPI PUSH2 0x47FC PUSH2 0x475D JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4817 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4820 DUP4 PUSH2 0x3E95 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x483E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x4852 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x485A PUSH2 0x478C JUMP JUMPDEST PUSH2 0x4863 DUP4 PUSH2 0x3E83 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4870 DUP5 DUP5 ADD PUSH2 0x3E83 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x4880 PUSH1 0x40 DUP5 ADD PUSH2 0x3E83 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x4893 DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x48AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x48BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x48D1 JUMPI PUSH2 0x48D1 PUSH2 0x475D JUMP JUMPDEST PUSH2 0x4901 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x47B5 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x4917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4955 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x4960 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x4970 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x4980 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x49BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x49C9 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3EF3 DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x49FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4A06 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x4A38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4A58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12D7 DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4AEB DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x12D7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4352 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x4BBD JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x4C13 PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x4B86 JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x4CA8 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x4352 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x4CEC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x37AE JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4D9C PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4DC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12D7 DUP2 PUSH2 0x3E0D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4E1A JUMPI PUSH2 0x4E1A PUSH2 0x4DD3 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x15E9 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4B86 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x4EB4 JUMPI DUP4 CALLDATALOAD PUSH2 0x4E8C DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4E79 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4F5C DUP2 DUP6 ADD DUP4 PUSH2 0x4B86 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x4F75 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x4F8C DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x4B39 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x502E JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4FFC JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x502E JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x504D JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x50A8 PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x50C6 PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x4FE8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x5102 DUP5 DUP4 PUSH2 0x5039 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x5121 DUP6 DUP5 PUSH2 0x5039 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x514E DUP2 DUP10 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x516B DUP8 DUP7 PUSH2 0x4352 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x5188 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x51E2 PUSH2 0x200 DUP12 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x51F9 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x4EB4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x5228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x526B JUMPI PUSH2 0x526B PUSH2 0x4DD3 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x52D1 JUMPI PUSH2 0x52D1 PUSH2 0x4DD3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5348 PUSH1 0xC0 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x53A0 PUSH2 0x160 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x4B39 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x53EC JUMPI PUSH2 0x53EC PUSH2 0x4DD3 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5433 JUMPI PUSH2 0x5433 PUSH2 0x4DD3 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x546E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP1 0xAA 0xDF DUP10 0xD3 0xE6 PUSH18 0xD640D0DF3DA4CE810529E5E059DD15F51852 0xBB 0xCE SUB 0xF6 0xF 0x26 0xC1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1828:19453:112:-:0;;;928:1:87;886:43;;3270:85:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3321:29:112;;;1828:19453;;14:321:124;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:124;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:124:o;:::-;1828:19453:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_25195":{"entryPoint":null,"id":25195,"parameterSlots":0,"returnSlots":0},"@BRIDGE_PROTOCOL_FEE_26159":{"entryPoint":null,"id":26159,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TOTAL_26169":{"entryPoint":null,"id":26169,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TO_PROTOCOL_26179":{"entryPoint":null,"id":26179,"parameterSlots":0,"returnSlots":1},"@MAX_NUMBER_RESERVES_26190":{"entryPoint":null,"id":26190,"parameterSlots":0,"returnSlots":1},"@MAX_STABLE_RATE_BORROW_SIZE_PERCENT_26149":{"entryPoint":null,"id":26149,"parameterSlots":0,"returnSlots":1},"@POOL_REVISION_25192":{"entryPoint":null,"id":25192,"parameterSlots":0,"returnSlots":0},"@_onlyBridge_25270":{"entryPoint":14260,"id":25270,"parameterSlots":0,"returnSlots":0},"@_onlyPoolAdmin_25252":{"entryPoint":14657,"id":25252,"parameterSlots":0,"returnSlots":0},"@_onlyPoolConfigurator_25234":{"entryPoint":13814,"id":25234,"parameterSlots":0,"returnSlots":0},"@backUnbacked_25370":{"entryPoint":12618,"id":25370,"parameterSlots":3,"returnSlots":1},"@borrow_25548":{"entryPoint":8110,"id":25548,"parameterSlots":5,"returnSlots":0},"@calculateCompoundedInterest_23673":{"entryPoint":15355,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":15186,"id":23691,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_23550":{"entryPoint":15286,"id":23550,"parameterSlots":2,"returnSlots":1},"@configureEModeCategory_26458":{"entryPoint":11607,"id":26458,"parameterSlots":2,"returnSlots":0},"@deposit_26586":{"entryPoint":null,"id":26586,"parameterSlots":4,"returnSlots":0},"@dropReserve_26302":{"entryPoint":6346,"id":26302,"parameterSlots":1,"returnSlots":0},"@finalizeTransfer_26245":{"entryPoint":11971,"id":26245,"parameterSlots":6,"returnSlots":0},"@flashLoanSimple_25924":{"entryPoint":4895,"id":25924,"parameterSlots":6,"returnSlots":0},"@flashLoan_25883":{"entryPoint":8852,"id":25883,"parameterSlots":11,"returnSlots":0},"@getConfiguration_26012":{"entryPoint":null,"id":26012,"parameterSlots":1,"returnSlots":1},"@getEModeCategoryData_26473":{"entryPoint":7186,"id":26473,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_20345":{"entryPoint":14116,"id":20345,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_20309":{"entryPoint":15054,"id":20309,"parameterSlots":1,"returnSlots":1},"@getReserveAddressById_26139":{"entryPoint":null,"id":26139,"parameterSlots":1,"returnSlots":1},"@getReserveData_25955":{"entryPoint":null,"id":25955,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedIncome_26043":{"entryPoint":11245,"id":26043,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedVariableDebt_26059":{"entryPoint":4843,"id":26059,"parameterSlots":1,"returnSlots":1},"@getReservesList_26126":{"entryPoint":11291,"id":26126,"parameterSlots":0,"returnSlots":1},"@getRevision_25279":{"entryPoint":null,"id":25279,"parameterSlots":0,"returnSlots":1},"@getUserAccountData_25996":{"entryPoint":9860,"id":25996,"parameterSlots":1,"returnSlots":6},"@getUserConfiguration_26027":{"entryPoint":null,"id":26027,"parameterSlots":1,"returnSlots":1},"@getUserEMode_26516":{"entryPoint":null,"id":26516,"parameterSlots":1,"returnSlots":1},"@initReserve_26284":{"entryPoint":7500,"id":26284,"parameterSlots":5,"returnSlots":0},"@initialize_25313":{"entryPoint":10419,"id":25313,"parameterSlots":1,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@liquidationCall_25812":{"entryPoint":2466,"id":25812,"parameterSlots":5,"returnSlots":0},"@mintToTreasury_25940":{"entryPoint":8025,"id":25940,"parameterSlots":2,"returnSlots":0},"@mintUnbacked_25343":{"entryPoint":7013,"id":25343,"parameterSlots":4,"returnSlots":0},"@rayMul_23780":{"entryPoint":15199,"id":23780,"parameterSlots":2,"returnSlots":1},"@rebalanceStableBorrowRate_25737":{"entryPoint":10935,"id":25737,"parameterSlots":2,"returnSlots":0},"@repayWithATokens_25690":{"entryPoint":4506,"id":25690,"parameterSlots":3,"returnSlots":1},"@repayWithPermit_25654":{"entryPoint":12895,"id":25654,"parameterSlots":8,"returnSlots":1},"@repay_25584":{"entryPoint":5273,"id":25584,"parameterSlots":4,"returnSlots":1},"@rescueTokens_26555":{"entryPoint":11072,"id":26555,"parameterSlots":3,"returnSlots":0},"@resetIsolationModeTotalDebt_26533":{"entryPoint":12778,"id":26533,"parameterSlots":1,"returnSlots":0},"@setConfiguration_26397":{"entryPoint":13370,"id":26397,"parameterSlots":2,"returnSlots":0},"@setReserveInterestRateStrategyAddress_26349":{"entryPoint":3533,"id":26349,"parameterSlots":2,"returnSlots":0},"@setUserEMode_26502":{"entryPoint":4027,"id":26502,"parameterSlots":1,"returnSlots":0},"@setUserUseReserveAsCollateral_25769":{"entryPoint":5618,"id":25769,"parameterSlots":2,"returnSlots":0},"@supplyWithPermit_25457":{"entryPoint":3101,"id":25457,"parameterSlots":8,"returnSlots":0},"@supply_25401":{"entryPoint":6087,"id":25401,"parameterSlots":4,"returnSlots":0},"@swapBorrowRateMode_25717":{"entryPoint":7896,"id":25717,"parameterSlots":2,"returnSlots":0},"@updateBridgeProtocolFee_26411":{"entryPoint":4830,"id":26411,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiums_26431":{"entryPoint":9805,"id":26431,"parameterSlots":2,"returnSlots":0},"@withdraw_25496":{"entryPoint":6470,"id":25496,"parameterSlots":3,"returnSlots":1},"abi_decode_address":{"entryPoint":15869,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":17583,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_calldata":{"entryPoint":16737,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":16327,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":19014,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":16165,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address":{"entryPoint":17440,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool":{"entryPoint":15899,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256":{"entryPoint":18748,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":18114,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16":{"entryPoint":16810,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16":{"entryPoint":17781,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_addresst_bool":{"entryPoint":17041,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr":{"entryPoint":18919,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":17539,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_address":{"entryPoint":17168,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16":{"entryPoint":17087,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":16038,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":16249,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_uint256t_address":{"entryPoint":16967,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":18849,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address":{"entryPoint":17718,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":17652,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":19894,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128t_uint128":{"entryPoint":18063,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint16":{"entryPoint":16940,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":16302,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":19508,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":21007,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint8":{"entryPoint":16222,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr":{"entryPoint":18436,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint128":{"entryPoint":18031,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16":{"entryPoint":16003,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":16021,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn":{"entryPoint":20456,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":20537,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_InterestRateMode":{"entryPoint":19334,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":17234,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ReserveConfigurationMap":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":18179,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed":{"entryPoint":20059,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed":{"entryPoint":19043,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed":{"entryPoint":21208,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed":{"entryPoint":20160,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed":{"entryPoint":20585,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed":{"entryPoint":19750,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed":{"entryPoint":19393,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19268,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed":{"entryPoint":17341,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed":{"entryPoint":16356,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed":{"entryPoint":19533,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":20004,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_uint128":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":18357,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_5591":{"entryPoint":18316,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":21536,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":21560,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":21428,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":21081,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":19672,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint16":{"entryPoint":19970,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":21151,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":19923,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":21489,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":19287,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":21104,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":18269,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_revert_address":{"entryPoint":15835,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":15885,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:50280:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:124"},"nodeType":"YulFunctionCall","src":"148:12:124"},"nodeType":"YulExpressionStatement","src":"148:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:124"},"nodeType":"YulFunctionCall","src":"89:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:124"},"nodeType":"YulFunctionCall","src":"79:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:124"},"nodeType":"YulFunctionCall","src":"72:73:124"},"nodeType":"YulIf","src":"69:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:124","type":""}],"src":"14:154:124"},{"body":{"nodeType":"YulBlock","src":"222:85:124","statements":[{"nodeType":"YulAssignment","src":"232:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"254:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:124"},"nodeType":"YulFunctionCall","src":"241:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"295:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"270:24:124"},"nodeType":"YulFunctionCall","src":"270:31:124"},"nodeType":"YulExpressionStatement","src":"270:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"201:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"212:5:124","type":""}],"src":"173:134:124"},{"body":{"nodeType":"YulBlock","src":"354:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:124"},"nodeType":"YulFunctionCall","src":"410:12:124"},"nodeType":"YulExpressionStatement","src":"410:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"377:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"398:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"391:6:124"},"nodeType":"YulFunctionCall","src":"391:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"384:6:124"},"nodeType":"YulFunctionCall","src":"384:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"374:2:124"},"nodeType":"YulFunctionCall","src":"374:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"367:6:124"},"nodeType":"YulFunctionCall","src":"367:40:124"},"nodeType":"YulIf","src":"364:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"343:5:124","type":""}],"src":"312:118:124"},{"body":{"nodeType":"YulBlock","src":"570:599:124","statements":[{"body":{"nodeType":"YulBlock","src":"617:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"626:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"629:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"619:6:124"},"nodeType":"YulFunctionCall","src":"619:12:124"},"nodeType":"YulExpressionStatement","src":"619:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"591:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"600:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"587:3:124"},"nodeType":"YulFunctionCall","src":"587:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"612:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"583:3:124"},"nodeType":"YulFunctionCall","src":"583:33:124"},"nodeType":"YulIf","src":"580:53:124"},{"nodeType":"YulVariableDeclaration","src":"642:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"668:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"655:12:124"},"nodeType":"YulFunctionCall","src":"655:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"646:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"687:24:124"},"nodeType":"YulFunctionCall","src":"687:31:124"},"nodeType":"YulExpressionStatement","src":"687:31:124"},{"nodeType":"YulAssignment","src":"727:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"737:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"727:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"751:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"783:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"794:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"779:3:124"},"nodeType":"YulFunctionCall","src":"779:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"766:12:124"},"nodeType":"YulFunctionCall","src":"766:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"755:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"832:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"807:24:124"},"nodeType":"YulFunctionCall","src":"807:33:124"},"nodeType":"YulExpressionStatement","src":"807:33:124"},{"nodeType":"YulAssignment","src":"849:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"859:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"849:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"875:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"907:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"918:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"903:3:124"},"nodeType":"YulFunctionCall","src":"903:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"890:12:124"},"nodeType":"YulFunctionCall","src":"890:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"879:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"956:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"931:24:124"},"nodeType":"YulFunctionCall","src":"931:33:124"},"nodeType":"YulExpressionStatement","src":"931:33:124"},{"nodeType":"YulAssignment","src":"973:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"983:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"973:6:124"}]},{"nodeType":"YulAssignment","src":"999:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1026:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1022:3:124"},"nodeType":"YulFunctionCall","src":"1022:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1009:12:124"},"nodeType":"YulFunctionCall","src":"1009:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"999:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1050:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1082:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1093:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1078:3:124"},"nodeType":"YulFunctionCall","src":"1078:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1065:12:124"},"nodeType":"YulFunctionCall","src":"1065:33:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"1054:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"1129:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1107:21:124"},"nodeType":"YulFunctionCall","src":"1107:30:124"},"nodeType":"YulExpressionStatement","src":"1107:30:124"},{"nodeType":"YulAssignment","src":"1146:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"1156:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1146:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"504:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"515:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"527:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"535:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"543:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"551:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"559:6:124","type":""}],"src":"435:734:124"},{"body":{"nodeType":"YulBlock","src":"1275:76:124","statements":[{"nodeType":"YulAssignment","src":"1285:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1297:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1293:3:124"},"nodeType":"YulFunctionCall","src":"1293:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1285:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1327:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"1338:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:124"},"nodeType":"YulFunctionCall","src":"1320:25:124"},"nodeType":"YulExpressionStatement","src":"1320:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1244:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1255:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1266:4:124","type":""}],"src":"1174:177:124"},{"body":{"nodeType":"YulBlock","src":"1404:111:124","statements":[{"nodeType":"YulAssignment","src":"1414:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1436:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1423:12:124"},"nodeType":"YulFunctionCall","src":"1423:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1414:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1493:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1502:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1505:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1495:6:124"},"nodeType":"YulFunctionCall","src":"1495:12:124"},"nodeType":"YulExpressionStatement","src":"1495:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1476:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1483:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1472:3:124"},"nodeType":"YulFunctionCall","src":"1472:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1462:2:124"},"nodeType":"YulFunctionCall","src":"1462:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1455:6:124"},"nodeType":"YulFunctionCall","src":"1455:37:124"},"nodeType":"YulIf","src":"1452:57:124"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1383:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1394:5:124","type":""}],"src":"1356:159:124"},{"body":{"nodeType":"YulBlock","src":"1567:109:124","statements":[{"nodeType":"YulAssignment","src":"1577:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1599:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1586:12:124"},"nodeType":"YulFunctionCall","src":"1586:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1577:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1654:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1663:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1666:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1656:6:124"},"nodeType":"YulFunctionCall","src":"1656:12:124"},"nodeType":"YulExpressionStatement","src":"1656:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1628:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1639:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1646:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1635:3:124"},"nodeType":"YulFunctionCall","src":"1635:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1625:2:124"},"nodeType":"YulFunctionCall","src":"1625:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1618:6:124"},"nodeType":"YulFunctionCall","src":"1618:35:124"},"nodeType":"YulIf","src":"1615:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1546:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1557:5:124","type":""}],"src":"1520:156:124"},{"body":{"nodeType":"YulBlock","src":"1867:621:124","statements":[{"body":{"nodeType":"YulBlock","src":"1914:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1916:6:124"},"nodeType":"YulFunctionCall","src":"1916:12:124"},"nodeType":"YulExpressionStatement","src":"1916:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1888:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1897:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1884:3:124"},"nodeType":"YulFunctionCall","src":"1884:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1909:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1880:3:124"},"nodeType":"YulFunctionCall","src":"1880:33:124"},"nodeType":"YulIf","src":"1877:53:124"},{"nodeType":"YulVariableDeclaration","src":"1939:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1965:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1952:12:124"},"nodeType":"YulFunctionCall","src":"1952:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1943:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2009:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1984:24:124"},"nodeType":"YulFunctionCall","src":"1984:31:124"},"nodeType":"YulExpressionStatement","src":"1984:31:124"},{"nodeType":"YulAssignment","src":"2024:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2034:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2024:6:124"}]},{"nodeType":"YulAssignment","src":"2048:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2086:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2071:3:124"},"nodeType":"YulFunctionCall","src":"2071:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2058:12:124"},"nodeType":"YulFunctionCall","src":"2058:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2048:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2099:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2131:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2142:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2127:3:124"},"nodeType":"YulFunctionCall","src":"2127:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2114:12:124"},"nodeType":"YulFunctionCall","src":"2114:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2103:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2180:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2155:24:124"},"nodeType":"YulFunctionCall","src":"2155:33:124"},"nodeType":"YulExpressionStatement","src":"2155:33:124"},{"nodeType":"YulAssignment","src":"2197:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2207:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2197:6:124"}]},{"nodeType":"YulAssignment","src":"2223:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2255:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2266:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2251:3:124"},"nodeType":"YulFunctionCall","src":"2251:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"2233:17:124"},"nodeType":"YulFunctionCall","src":"2233:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2223:6:124"}]},{"nodeType":"YulAssignment","src":"2279:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2306:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2317:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2302:3:124"},"nodeType":"YulFunctionCall","src":"2302:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2289:12:124"},"nodeType":"YulFunctionCall","src":"2289:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2279:6:124"}]},{"nodeType":"YulAssignment","src":"2331:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2373:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2358:3:124"},"nodeType":"YulFunctionCall","src":"2358:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2341:16:124"},"nodeType":"YulFunctionCall","src":"2341:37:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2331:6:124"}]},{"nodeType":"YulAssignment","src":"2387:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2414:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2425:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2410:3:124"},"nodeType":"YulFunctionCall","src":"2410:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2397:12:124"},"nodeType":"YulFunctionCall","src":"2397:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2387:6:124"}]},{"nodeType":"YulAssignment","src":"2439:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2477:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:124"},"nodeType":"YulFunctionCall","src":"2462:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2449:12:124"},"nodeType":"YulFunctionCall","src":"2449:33:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"2439:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1788:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1800:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1808:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1816:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1824:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1832:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1840:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1848:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1856:6:124","type":""}],"src":"1681:807:124"},{"body":{"nodeType":"YulBlock","src":"2625:125:124","statements":[{"nodeType":"YulAssignment","src":"2635:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2647:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:124"},"nodeType":"YulFunctionCall","src":"2643:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2635:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2677:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2692:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2700:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2688:3:124"},"nodeType":"YulFunctionCall","src":"2688:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2670:6:124"},"nodeType":"YulFunctionCall","src":"2670:74:124"},"nodeType":"YulExpressionStatement","src":"2670:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2594:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2605:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2616:4:124","type":""}],"src":"2493:257:124"},{"body":{"nodeType":"YulBlock","src":"2799:75:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2816:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2825:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2832:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2821:3:124"},"nodeType":"YulFunctionCall","src":"2821:46:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2809:6:124"},"nodeType":"YulFunctionCall","src":"2809:59:124"},"nodeType":"YulExpressionStatement","src":"2809:59:124"}]},"name":"abi_encode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2783:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2790:3:124","type":""}],"src":"2755:119:124"},{"body":{"nodeType":"YulBlock","src":"2980:117:124","statements":[{"nodeType":"YulAssignment","src":"2990:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3002:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3013:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2998:3:124"},"nodeType":"YulFunctionCall","src":"2998:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2990:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3032:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3047:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3055:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3043:3:124"},"nodeType":"YulFunctionCall","src":"3043:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3025:6:124"},"nodeType":"YulFunctionCall","src":"3025:66:124"},"nodeType":"YulExpressionStatement","src":"3025:66:124"}]},"name":"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2949:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2960:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2971:4:124","type":""}],"src":"2879:218:124"},{"body":{"nodeType":"YulBlock","src":"3189:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"3235:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3244:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3247:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3237:6:124"},"nodeType":"YulFunctionCall","src":"3237:12:124"},"nodeType":"YulExpressionStatement","src":"3237:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3210:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3219:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3206:3:124"},"nodeType":"YulFunctionCall","src":"3206:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3231:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3202:3:124"},"nodeType":"YulFunctionCall","src":"3202:32:124"},"nodeType":"YulIf","src":"3199:52:124"},{"nodeType":"YulVariableDeclaration","src":"3260:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3273:12:124"},"nodeType":"YulFunctionCall","src":"3273:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3264:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3330:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3305:24:124"},"nodeType":"YulFunctionCall","src":"3305:31:124"},"nodeType":"YulExpressionStatement","src":"3305:31:124"},{"nodeType":"YulAssignment","src":"3345:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3355:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3345:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3369:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3412:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3397:3:124"},"nodeType":"YulFunctionCall","src":"3397:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3384:12:124"},"nodeType":"YulFunctionCall","src":"3384:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3373:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3450:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3425:24:124"},"nodeType":"YulFunctionCall","src":"3425:33:124"},"nodeType":"YulExpressionStatement","src":"3425:33:124"},{"nodeType":"YulAssignment","src":"3467:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3477:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3467:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3147:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3158:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3170:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3178:6:124","type":""}],"src":"3102:388:124"},{"body":{"nodeType":"YulBlock","src":"3563:114:124","statements":[{"body":{"nodeType":"YulBlock","src":"3609:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3618:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3621:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3611:6:124"},"nodeType":"YulFunctionCall","src":"3611:12:124"},"nodeType":"YulExpressionStatement","src":"3611:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3584:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3593:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3580:3:124"},"nodeType":"YulFunctionCall","src":"3580:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3605:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3576:3:124"},"nodeType":"YulFunctionCall","src":"3576:32:124"},"nodeType":"YulIf","src":"3573:52:124"},{"nodeType":"YulAssignment","src":"3634:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3661:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3644:16:124"},"nodeType":"YulFunctionCall","src":"3644:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3634:6:124"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3529:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3540:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3552:6:124","type":""}],"src":"3495:182:124"},{"body":{"nodeType":"YulBlock","src":"3786:279:124","statements":[{"body":{"nodeType":"YulBlock","src":"3832:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3841:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3844:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3834:6:124"},"nodeType":"YulFunctionCall","src":"3834:12:124"},"nodeType":"YulExpressionStatement","src":"3834:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3807:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3816:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3803:3:124"},"nodeType":"YulFunctionCall","src":"3803:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3828:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3799:3:124"},"nodeType":"YulFunctionCall","src":"3799:32:124"},"nodeType":"YulIf","src":"3796:52:124"},{"nodeType":"YulVariableDeclaration","src":"3857:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3883:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3870:12:124"},"nodeType":"YulFunctionCall","src":"3870:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3861:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3927:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3902:24:124"},"nodeType":"YulFunctionCall","src":"3902:31:124"},"nodeType":"YulExpressionStatement","src":"3902:31:124"},{"nodeType":"YulAssignment","src":"3942:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3952:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3942:6:124"}]},{"nodeType":"YulAssignment","src":"3966:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3993:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4004:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3989:3:124"},"nodeType":"YulFunctionCall","src":"3989:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3976:12:124"},"nodeType":"YulFunctionCall","src":"3976:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3966:6:124"}]},{"nodeType":"YulAssignment","src":"4017:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4044:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4055:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4040:3:124"},"nodeType":"YulFunctionCall","src":"4040:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4027:12:124"},"nodeType":"YulFunctionCall","src":"4027:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4017:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3736:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3747:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3759:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3767:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3775:6:124","type":""}],"src":"3682:383:124"},{"body":{"nodeType":"YulBlock","src":"4140:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"4186:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4195:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4198:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4188:6:124"},"nodeType":"YulFunctionCall","src":"4188:12:124"},"nodeType":"YulExpressionStatement","src":"4188:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4161:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4157:3:124"},"nodeType":"YulFunctionCall","src":"4157:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4182:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4153:3:124"},"nodeType":"YulFunctionCall","src":"4153:32:124"},"nodeType":"YulIf","src":"4150:52:124"},{"nodeType":"YulAssignment","src":"4211:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4234:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4221:12:124"},"nodeType":"YulFunctionCall","src":"4221:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4211:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4106:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4117:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4129:6:124","type":""}],"src":"4070:180:124"},{"body":{"nodeType":"YulBlock","src":"4325:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"4371:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4380:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4383:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4373:6:124"},"nodeType":"YulFunctionCall","src":"4373:12:124"},"nodeType":"YulExpressionStatement","src":"4373:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4346:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4355:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4342:3:124"},"nodeType":"YulFunctionCall","src":"4342:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4367:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4338:3:124"},"nodeType":"YulFunctionCall","src":"4338:32:124"},"nodeType":"YulIf","src":"4335:52:124"},{"nodeType":"YulVariableDeclaration","src":"4396:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4422:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4409:12:124"},"nodeType":"YulFunctionCall","src":"4409:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4400:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4466:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4441:24:124"},"nodeType":"YulFunctionCall","src":"4441:31:124"},"nodeType":"YulExpressionStatement","src":"4441:31:124"},{"nodeType":"YulAssignment","src":"4481:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4491:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4481:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4291:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4302:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4314:6:124","type":""}],"src":"4255:247:124"},{"body":{"nodeType":"YulBlock","src":"4574:29:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4583:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4594:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4588:5:124"},"nodeType":"YulFunctionCall","src":"4588:12:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4576:6:124"},"nodeType":"YulFunctionCall","src":"4576:25:124"},"nodeType":"YulExpressionStatement","src":"4576:25:124"}]},"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4558:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4565:3:124","type":""}],"src":"4507:96:124"},{"body":{"nodeType":"YulBlock","src":"4651:53:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4668:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4677:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4684:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4673:3:124"},"nodeType":"YulFunctionCall","src":"4673:24:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4661:6:124"},"nodeType":"YulFunctionCall","src":"4661:37:124"},"nodeType":"YulExpressionStatement","src":"4661:37:124"}]},"name":"abi_encode_uint40","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4635:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4642:3:124","type":""}],"src":"4608:96:124"},{"body":{"nodeType":"YulBlock","src":"4752:47:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4769:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4778:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4785:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4774:3:124"},"nodeType":"YulFunctionCall","src":"4774:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4762:6:124"},"nodeType":"YulFunctionCall","src":"4762:31:124"},"nodeType":"YulExpressionStatement","src":"4762:31:124"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4736:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4743:3:124","type":""}],"src":"4709:90:124"},{"body":{"nodeType":"YulBlock","src":"4848:83:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4865:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4874:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4881:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4870:3:124"},"nodeType":"YulFunctionCall","src":"4870:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4858:6:124"},"nodeType":"YulFunctionCall","src":"4858:67:124"},"nodeType":"YulExpressionStatement","src":"4858:67:124"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4832:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4839:3:124","type":""}],"src":"4804:127:124"},{"body":{"nodeType":"YulBlock","src":"5097:1948:124","statements":[{"nodeType":"YulAssignment","src":"5107:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5119:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5130:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5115:3:124"},"nodeType":"YulFunctionCall","src":"5115:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5107:4:124"}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5191:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5185:5:124"},"nodeType":"YulFunctionCall","src":"5185:13:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5200:9:124"}],"functionName":{"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulIdentifier","src":"5143:41:124"},"nodeType":"YulFunctionCall","src":"5143:67:124"},"nodeType":"YulExpressionStatement","src":"5143:67:124"},{"nodeType":"YulVariableDeclaration","src":"5219:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5249:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5257:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5245:3:124"},"nodeType":"YulFunctionCall","src":"5245:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5239:5:124"},"nodeType":"YulFunctionCall","src":"5239:24:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5223:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5291:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5309:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5320:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5305:3:124"},"nodeType":"YulFunctionCall","src":"5305:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5272:18:124"},"nodeType":"YulFunctionCall","src":"5272:54:124"},"nodeType":"YulExpressionStatement","src":"5272:54:124"},{"nodeType":"YulVariableDeclaration","src":"5335:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5367:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5375:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5363:3:124"},"nodeType":"YulFunctionCall","src":"5363:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5357:5:124"},"nodeType":"YulFunctionCall","src":"5357:24:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"5339:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"5409:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5429:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5440:4:124","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5425:3:124"},"nodeType":"YulFunctionCall","src":"5425:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5390:18:124"},"nodeType":"YulFunctionCall","src":"5390:56:124"},"nodeType":"YulExpressionStatement","src":"5390:56:124"},{"nodeType":"YulVariableDeclaration","src":"5455:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5487:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5495:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5483:3:124"},"nodeType":"YulFunctionCall","src":"5483:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5477:5:124"},"nodeType":"YulFunctionCall","src":"5477:24:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"5459:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"5529:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5549:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5560:4:124","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5545:3:124"},"nodeType":"YulFunctionCall","src":"5545:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5510:18:124"},"nodeType":"YulFunctionCall","src":"5510:56:124"},"nodeType":"YulExpressionStatement","src":"5510:56:124"},{"nodeType":"YulVariableDeclaration","src":"5575:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5607:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5615:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5603:3:124"},"nodeType":"YulFunctionCall","src":"5603:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5597:5:124"},"nodeType":"YulFunctionCall","src":"5597:24:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"5579:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"5649:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5669:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5680:4:124","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5665:3:124"},"nodeType":"YulFunctionCall","src":"5665:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5630:18:124"},"nodeType":"YulFunctionCall","src":"5630:56:124"},"nodeType":"YulExpressionStatement","src":"5630:56:124"},{"nodeType":"YulVariableDeclaration","src":"5695:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5727:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5735:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5723:3:124"},"nodeType":"YulFunctionCall","src":"5723:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5717:5:124"},"nodeType":"YulFunctionCall","src":"5717:24:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"5699:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"5769:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5789:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5800:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5785:3:124"},"nodeType":"YulFunctionCall","src":"5785:20:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5750:18:124"},"nodeType":"YulFunctionCall","src":"5750:56:124"},"nodeType":"YulExpressionStatement","src":"5750:56:124"},{"nodeType":"YulVariableDeclaration","src":"5815:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5847:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5855:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5843:3:124"},"nodeType":"YulFunctionCall","src":"5843:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5837:5:124"},"nodeType":"YulFunctionCall","src":"5837:24:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"5819:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"5888:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5908:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5919:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5904:3:124"},"nodeType":"YulFunctionCall","src":"5904:20:124"}],"functionName":{"name":"abi_encode_uint40","nodeType":"YulIdentifier","src":"5870:17:124"},"nodeType":"YulFunctionCall","src":"5870:55:124"},"nodeType":"YulExpressionStatement","src":"5870:55:124"},{"nodeType":"YulVariableDeclaration","src":"5934:46:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5966:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5974:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5962:3:124"},"nodeType":"YulFunctionCall","src":"5962:17:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5956:5:124"},"nodeType":"YulFunctionCall","src":"5956:24:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"5938:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"6007:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6027:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6038:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6023:3:124"},"nodeType":"YulFunctionCall","src":"6023:20:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"5989:17:124"},"nodeType":"YulFunctionCall","src":"5989:55:124"},"nodeType":"YulExpressionStatement","src":"5989:55:124"},{"nodeType":"YulVariableDeclaration","src":"6053:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6063:6:124","type":"","value":"0x0100"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6057:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6078:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6110:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6118:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6106:3:124"},"nodeType":"YulFunctionCall","src":"6106:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6100:5:124"},"nodeType":"YulFunctionCall","src":"6100:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"6082:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"6150:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6170:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6181:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6166:3:124"},"nodeType":"YulFunctionCall","src":"6166:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6131:18:124"},"nodeType":"YulFunctionCall","src":"6131:54:124"},"nodeType":"YulExpressionStatement","src":"6131:54:124"},{"nodeType":"YulVariableDeclaration","src":"6194:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6204:6:124","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6198:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6219:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6259:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6247:3:124"},"nodeType":"YulFunctionCall","src":"6247:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6241:5:124"},"nodeType":"YulFunctionCall","src":"6241:22:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"6223:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"6291:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6311:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6322:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6307:3:124"},"nodeType":"YulFunctionCall","src":"6307:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6272:18:124"},"nodeType":"YulFunctionCall","src":"6272:54:124"},"nodeType":"YulExpressionStatement","src":"6272:54:124"},{"nodeType":"YulVariableDeclaration","src":"6335:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6345:6:124","type":"","value":"0x0140"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6339:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6360:44:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6392:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6400:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6388:3:124"},"nodeType":"YulFunctionCall","src":"6388:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6382:5:124"},"nodeType":"YulFunctionCall","src":"6382:22:124"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"6364:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"6432:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6452:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6463:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6448:3:124"},"nodeType":"YulFunctionCall","src":"6448:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6413:18:124"},"nodeType":"YulFunctionCall","src":"6413:54:124"},"nodeType":"YulExpressionStatement","src":"6413:54:124"},{"nodeType":"YulVariableDeclaration","src":"6476:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6486:6:124","type":"","value":"0x0160"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6480:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6501:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6534:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6542:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6530:3:124"},"nodeType":"YulFunctionCall","src":"6530:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6524:5:124"},"nodeType":"YulFunctionCall","src":"6524:22:124"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"6505:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"6574:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6595:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"6606:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6591:3:124"},"nodeType":"YulFunctionCall","src":"6591:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6555:18:124"},"nodeType":"YulFunctionCall","src":"6555:55:124"},"nodeType":"YulExpressionStatement","src":"6555:55:124"},{"nodeType":"YulVariableDeclaration","src":"6619:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6629:6:124","type":"","value":"0x0180"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6623:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6644:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6677:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6685:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6673:3:124"},"nodeType":"YulFunctionCall","src":"6673:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6667:5:124"},"nodeType":"YulFunctionCall","src":"6667:22:124"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"6648:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"6717:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6738:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"6749:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6734:3:124"},"nodeType":"YulFunctionCall","src":"6734:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6698:18:124"},"nodeType":"YulFunctionCall","src":"6698:55:124"},"nodeType":"YulExpressionStatement","src":"6698:55:124"},{"nodeType":"YulVariableDeclaration","src":"6762:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6772:6:124","type":"","value":"0x01a0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6766:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6787:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6820:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"6828:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6816:3:124"},"nodeType":"YulFunctionCall","src":"6816:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6810:5:124"},"nodeType":"YulFunctionCall","src":"6810:22:124"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"6791:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"6860:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6881:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"6892:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6877:3:124"},"nodeType":"YulFunctionCall","src":"6877:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6841:18:124"},"nodeType":"YulFunctionCall","src":"6841:55:124"},"nodeType":"YulExpressionStatement","src":"6841:55:124"},{"nodeType":"YulVariableDeclaration","src":"6905:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6915:6:124","type":"","value":"0x01c0"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"6909:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6930:45:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6963:6:124"},{"name":"_7","nodeType":"YulIdentifier","src":"6971:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6959:3:124"},"nodeType":"YulFunctionCall","src":"6959:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6953:5:124"},"nodeType":"YulFunctionCall","src":"6953:22:124"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"6934:15:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"7003:15:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7024:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"7035:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7020:3:124"},"nodeType":"YulFunctionCall","src":"7020:18:124"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6984:18:124"},"nodeType":"YulFunctionCall","src":"6984:55:124"},"nodeType":"YulExpressionStatement","src":"6984:55:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5066:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5077:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5088:4:124","type":""}],"src":"4936:2109:124"},{"body":{"nodeType":"YulBlock","src":"7122:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"7171:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7180:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7183:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7173:6:124"},"nodeType":"YulFunctionCall","src":"7173:12:124"},"nodeType":"YulExpressionStatement","src":"7173:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7150:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7158:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7146:3:124"},"nodeType":"YulFunctionCall","src":"7146:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7165:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7142:3:124"},"nodeType":"YulFunctionCall","src":"7142:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7135:6:124"},"nodeType":"YulFunctionCall","src":"7135:35:124"},"nodeType":"YulIf","src":"7132:55:124"},{"nodeType":"YulAssignment","src":"7196:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7219:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7206:12:124"},"nodeType":"YulFunctionCall","src":"7206:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7196:6:124"}]},{"body":{"nodeType":"YulBlock","src":"7269:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7278:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7281:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7271:6:124"},"nodeType":"YulFunctionCall","src":"7271:12:124"},"nodeType":"YulExpressionStatement","src":"7271:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7241:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7249:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7238:2:124"},"nodeType":"YulFunctionCall","src":"7238:30:124"},"nodeType":"YulIf","src":"7235:50:124"},{"nodeType":"YulAssignment","src":"7294:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7310:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7318:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7306:3:124"},"nodeType":"YulFunctionCall","src":"7306:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7294:8:124"}]},{"body":{"nodeType":"YulBlock","src":"7375:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7384:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7387:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7377:6:124"},"nodeType":"YulFunctionCall","src":"7377:12:124"},"nodeType":"YulExpressionStatement","src":"7377:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7346:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"7354:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7342:3:124"},"nodeType":"YulFunctionCall","src":"7342:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"7363:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7338:3:124"},"nodeType":"YulFunctionCall","src":"7338:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"7370:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7335:2:124"},"nodeType":"YulFunctionCall","src":"7335:39:124"},"nodeType":"YulIf","src":"7332:59:124"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7085:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7093:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7101:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7111:6:124","type":""}],"src":"7050:347:124"},{"body":{"nodeType":"YulBlock","src":"7558:671:124","statements":[{"body":{"nodeType":"YulBlock","src":"7605:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7614:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7617:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7607:6:124"},"nodeType":"YulFunctionCall","src":"7607:12:124"},"nodeType":"YulExpressionStatement","src":"7607:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7579:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7588:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7575:3:124"},"nodeType":"YulFunctionCall","src":"7575:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7600:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7571:3:124"},"nodeType":"YulFunctionCall","src":"7571:33:124"},"nodeType":"YulIf","src":"7568:53:124"},{"nodeType":"YulVariableDeclaration","src":"7630:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7656:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7643:12:124"},"nodeType":"YulFunctionCall","src":"7643:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7634:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7700:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7675:24:124"},"nodeType":"YulFunctionCall","src":"7675:31:124"},"nodeType":"YulExpressionStatement","src":"7675:31:124"},{"nodeType":"YulAssignment","src":"7715:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7725:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7715:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7739:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7771:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7782:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7767:3:124"},"nodeType":"YulFunctionCall","src":"7767:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7754:12:124"},"nodeType":"YulFunctionCall","src":"7754:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7743:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7820:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7795:24:124"},"nodeType":"YulFunctionCall","src":"7795:33:124"},"nodeType":"YulExpressionStatement","src":"7795:33:124"},{"nodeType":"YulAssignment","src":"7837:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7847:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7837:6:124"}]},{"nodeType":"YulAssignment","src":"7863:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7890:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7901:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7886:3:124"},"nodeType":"YulFunctionCall","src":"7886:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7873:12:124"},"nodeType":"YulFunctionCall","src":"7873:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7863:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7914:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7945:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7956:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7941:3:124"},"nodeType":"YulFunctionCall","src":"7941:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7928:12:124"},"nodeType":"YulFunctionCall","src":"7928:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"7918:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8003:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8012:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8015:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8005:6:124"},"nodeType":"YulFunctionCall","src":"8005:12:124"},"nodeType":"YulExpressionStatement","src":"8005:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7975:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7983:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7972:2:124"},"nodeType":"YulFunctionCall","src":"7972:30:124"},"nodeType":"YulIf","src":"7969:50:124"},{"nodeType":"YulVariableDeclaration","src":"8028:84:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8084:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"8095:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8080:3:124"},"nodeType":"YulFunctionCall","src":"8080:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8104:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8054:25:124"},"nodeType":"YulFunctionCall","src":"8054:58:124"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"8032:8:124","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"8042:8:124","type":""}]},{"nodeType":"YulAssignment","src":"8121:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"8131:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8121:6:124"}]},{"nodeType":"YulAssignment","src":"8148:18:124","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"8158:8:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8148:6:124"}]},{"nodeType":"YulAssignment","src":"8175:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8207:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8218:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8203:3:124"},"nodeType":"YulFunctionCall","src":"8203:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8185:17:124"},"nodeType":"YulFunctionCall","src":"8185:38:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8175:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7484:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7495:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7507:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7515:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7523:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7531:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7539:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7547:6:124","type":""}],"src":"7402:827:124"},{"body":{"nodeType":"YulBlock","src":"8413:83:124","statements":[{"nodeType":"YulAssignment","src":"8423:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8446:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8431:3:124"},"nodeType":"YulFunctionCall","src":"8431:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8423:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8465:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8482:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8476:5:124"},"nodeType":"YulFunctionCall","src":"8476:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8458:6:124"},"nodeType":"YulFunctionCall","src":"8458:32:124"},"nodeType":"YulExpressionStatement","src":"8458:32:124"}]},"name":"abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8382:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8393:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8404:4:124","type":""}],"src":"8234:262:124"},{"body":{"nodeType":"YulBlock","src":"8570:115:124","statements":[{"body":{"nodeType":"YulBlock","src":"8616:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8625:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8628:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8618:6:124"},"nodeType":"YulFunctionCall","src":"8618:12:124"},"nodeType":"YulExpressionStatement","src":"8618:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8591:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8600:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8587:3:124"},"nodeType":"YulFunctionCall","src":"8587:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8612:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8583:3:124"},"nodeType":"YulFunctionCall","src":"8583:32:124"},"nodeType":"YulIf","src":"8580:52:124"},{"nodeType":"YulAssignment","src":"8641:38:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8669:9:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8651:17:124"},"nodeType":"YulFunctionCall","src":"8651:28:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8641:6:124"}]}]},"name":"abi_decode_tuple_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8536:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8547:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8559:6:124","type":""}],"src":"8501:184:124"},{"body":{"nodeType":"YulBlock","src":"8791:125:124","statements":[{"nodeType":"YulAssignment","src":"8801:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8813:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8824:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8809:3:124"},"nodeType":"YulFunctionCall","src":"8809:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8801:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8843:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8858:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8866:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8854:3:124"},"nodeType":"YulFunctionCall","src":"8854:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8836:6:124"},"nodeType":"YulFunctionCall","src":"8836:74:124"},"nodeType":"YulExpressionStatement","src":"8836:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8760:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8771:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8782:4:124","type":""}],"src":"8690:226:124"},{"body":{"nodeType":"YulBlock","src":"9042:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"9089:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9098:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9101:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9091:6:124"},"nodeType":"YulFunctionCall","src":"9091:12:124"},"nodeType":"YulExpressionStatement","src":"9091:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9063:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9072:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9059:3:124"},"nodeType":"YulFunctionCall","src":"9059:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9084:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9055:3:124"},"nodeType":"YulFunctionCall","src":"9055:33:124"},"nodeType":"YulIf","src":"9052:53:124"},{"nodeType":"YulVariableDeclaration","src":"9114:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9140:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9127:12:124"},"nodeType":"YulFunctionCall","src":"9127:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9118:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9184:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9159:24:124"},"nodeType":"YulFunctionCall","src":"9159:31:124"},"nodeType":"YulExpressionStatement","src":"9159:31:124"},{"nodeType":"YulAssignment","src":"9199:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9209:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9199:6:124"}]},{"nodeType":"YulAssignment","src":"9223:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9250:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9261:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9246:3:124"},"nodeType":"YulFunctionCall","src":"9246:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9233:12:124"},"nodeType":"YulFunctionCall","src":"9233:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9223:6:124"}]},{"nodeType":"YulAssignment","src":"9274:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9301:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9312:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9297:3:124"},"nodeType":"YulFunctionCall","src":"9297:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9284:12:124"},"nodeType":"YulFunctionCall","src":"9284:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9274:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9325:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9357:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9368:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9353:3:124"},"nodeType":"YulFunctionCall","src":"9353:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9340:12:124"},"nodeType":"YulFunctionCall","src":"9340:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9329:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9406:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9381:24:124"},"nodeType":"YulFunctionCall","src":"9381:33:124"},"nodeType":"YulExpressionStatement","src":"9381:33:124"},{"nodeType":"YulAssignment","src":"9423:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9433:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9423:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8995:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9007:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9015:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9023:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9031:6:124","type":""}],"src":"8921:525:124"},{"body":{"nodeType":"YulBlock","src":"9535:298:124","statements":[{"body":{"nodeType":"YulBlock","src":"9581:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9590:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9593:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9583:6:124"},"nodeType":"YulFunctionCall","src":"9583:12:124"},"nodeType":"YulExpressionStatement","src":"9583:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9556:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9565:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9552:3:124"},"nodeType":"YulFunctionCall","src":"9552:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9577:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9548:3:124"},"nodeType":"YulFunctionCall","src":"9548:32:124"},"nodeType":"YulIf","src":"9545:52:124"},{"nodeType":"YulVariableDeclaration","src":"9606:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9632:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9619:12:124"},"nodeType":"YulFunctionCall","src":"9619:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9610:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9676:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9651:24:124"},"nodeType":"YulFunctionCall","src":"9651:31:124"},"nodeType":"YulExpressionStatement","src":"9651:31:124"},{"nodeType":"YulAssignment","src":"9691:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9701:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9691:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9715:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9747:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9758:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9743:3:124"},"nodeType":"YulFunctionCall","src":"9743:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9730:12:124"},"nodeType":"YulFunctionCall","src":"9730:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9719:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9793:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"9771:21:124"},"nodeType":"YulFunctionCall","src":"9771:30:124"},"nodeType":"YulExpressionStatement","src":"9771:30:124"},{"nodeType":"YulAssignment","src":"9810:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9820:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9810:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9493:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9504:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9516:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9524:6:124","type":""}],"src":"9451:382:124"},{"body":{"nodeType":"YulBlock","src":"9958:409:124","statements":[{"body":{"nodeType":"YulBlock","src":"10005:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10014:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10017:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10007:6:124"},"nodeType":"YulFunctionCall","src":"10007:12:124"},"nodeType":"YulExpressionStatement","src":"10007:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9979:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9988:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9975:3:124"},"nodeType":"YulFunctionCall","src":"9975:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10000:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9971:3:124"},"nodeType":"YulFunctionCall","src":"9971:33:124"},"nodeType":"YulIf","src":"9968:53:124"},{"nodeType":"YulVariableDeclaration","src":"10030:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10056:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10043:12:124"},"nodeType":"YulFunctionCall","src":"10043:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10034:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10100:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10075:24:124"},"nodeType":"YulFunctionCall","src":"10075:31:124"},"nodeType":"YulExpressionStatement","src":"10075:31:124"},{"nodeType":"YulAssignment","src":"10115:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10125:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10115:6:124"}]},{"nodeType":"YulAssignment","src":"10139:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10166:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10177:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10162:3:124"},"nodeType":"YulFunctionCall","src":"10162:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10149:12:124"},"nodeType":"YulFunctionCall","src":"10149:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10139:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"10190:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10222:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10233:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10218:3:124"},"nodeType":"YulFunctionCall","src":"10218:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10205:12:124"},"nodeType":"YulFunctionCall","src":"10205:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10194:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10271:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10246:24:124"},"nodeType":"YulFunctionCall","src":"10246:33:124"},"nodeType":"YulExpressionStatement","src":"10246:33:124"},{"nodeType":"YulAssignment","src":"10288:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10298:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10288:6:124"}]},{"nodeType":"YulAssignment","src":"10314:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10346:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10357:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10342:3:124"},"nodeType":"YulFunctionCall","src":"10342:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"10324:17:124"},"nodeType":"YulFunctionCall","src":"10324:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"10314:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9900:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9911:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9923:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9931:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9939:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9947:6:124","type":""}],"src":"9838:529:124"},{"body":{"nodeType":"YulBlock","src":"10476:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"10522:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10531:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10534:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10524:6:124"},"nodeType":"YulFunctionCall","src":"10524:12:124"},"nodeType":"YulExpressionStatement","src":"10524:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10497:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10506:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10493:3:124"},"nodeType":"YulFunctionCall","src":"10493:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10518:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10489:3:124"},"nodeType":"YulFunctionCall","src":"10489:32:124"},"nodeType":"YulIf","src":"10486:52:124"},{"nodeType":"YulVariableDeclaration","src":"10547:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10573:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10560:12:124"},"nodeType":"YulFunctionCall","src":"10560:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10551:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10617:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10592:24:124"},"nodeType":"YulFunctionCall","src":"10592:31:124"},"nodeType":"YulExpressionStatement","src":"10592:31:124"},{"nodeType":"YulAssignment","src":"10632:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"10642:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10632:6:124"}]},{"nodeType":"YulAssignment","src":"10656:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10683:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10694:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10679:3:124"},"nodeType":"YulFunctionCall","src":"10679:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10666:12:124"},"nodeType":"YulFunctionCall","src":"10666:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10656:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"10707:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10739:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10750:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10735:3:124"},"nodeType":"YulFunctionCall","src":"10735:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10722:12:124"},"nodeType":"YulFunctionCall","src":"10722:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10711:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10788:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10763:24:124"},"nodeType":"YulFunctionCall","src":"10763:33:124"},"nodeType":"YulExpressionStatement","src":"10763:33:124"},{"nodeType":"YulAssignment","src":"10805:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10815:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10805:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10426:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10437:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10449:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10457:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10465:6:124","type":""}],"src":"10372:456:124"},{"body":{"nodeType":"YulBlock","src":"10883:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"10893:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10913:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10907:5:124"},"nodeType":"YulFunctionCall","src":"10907:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10897:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10935:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"10940:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10928:6:124"},"nodeType":"YulFunctionCall","src":"10928:19:124"},"nodeType":"YulExpressionStatement","src":"10928:19:124"},{"nodeType":"YulVariableDeclaration","src":"10956:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10965:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10960:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11027:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"11041:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11051:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11045:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11083:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"11088:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11079:3:124"},"nodeType":"YulFunctionCall","src":"11079:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11092:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11075:3:124"},"nodeType":"YulFunctionCall","src":"11075:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11111:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"11118:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11107:3:124"},"nodeType":"YulFunctionCall","src":"11107:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11122:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11103:3:124"},"nodeType":"YulFunctionCall","src":"11103:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11097:5:124"},"nodeType":"YulFunctionCall","src":"11097:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11068:6:124"},"nodeType":"YulFunctionCall","src":"11068:59:124"},"nodeType":"YulExpressionStatement","src":"11068:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10986:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"10989:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10983:2:124"},"nodeType":"YulFunctionCall","src":"10983:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10997:21:124","statements":[{"nodeType":"YulAssignment","src":"10999:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11008:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"11011:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11004:3:124"},"nodeType":"YulFunctionCall","src":"11004:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10999:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"10979:3:124","statements":[]},"src":"10975:162:124"},{"body":{"nodeType":"YulBlock","src":"11171:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11200:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"11205:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11196:3:124"},"nodeType":"YulFunctionCall","src":"11196:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"11214:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11192:3:124"},"nodeType":"YulFunctionCall","src":"11192:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"11221:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11185:6:124"},"nodeType":"YulFunctionCall","src":"11185:38:124"},"nodeType":"YulExpressionStatement","src":"11185:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11152:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"11155:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11149:2:124"},"nodeType":"YulFunctionCall","src":"11149:13:124"},"nodeType":"YulIf","src":"11146:87:124"},{"nodeType":"YulAssignment","src":"11242:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11257:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11270:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11278:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11266:3:124"},"nodeType":"YulFunctionCall","src":"11266:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"11283:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11262:3:124"},"nodeType":"YulFunctionCall","src":"11262:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11253:3:124"},"nodeType":"YulFunctionCall","src":"11253:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"11353:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11249:3:124"},"nodeType":"YulFunctionCall","src":"11249:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11242:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10860:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10867:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10875:3:124","type":""}],"src":"10833:531:124"},{"body":{"nodeType":"YulBlock","src":"11534:530:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11551:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11562:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11544:6:124"},"nodeType":"YulFunctionCall","src":"11544:21:124"},"nodeType":"YulExpressionStatement","src":"11544:21:124"},{"nodeType":"YulVariableDeclaration","src":"11574:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11584:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11578:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11610:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11621:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11606:3:124"},"nodeType":"YulFunctionCall","src":"11606:18:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11636:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11630:5:124"},"nodeType":"YulFunctionCall","src":"11630:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11645:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11626:3:124"},"nodeType":"YulFunctionCall","src":"11626:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11599:6:124"},"nodeType":"YulFunctionCall","src":"11599:50:124"},"nodeType":"YulExpressionStatement","src":"11599:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11669:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11680:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11665:3:124"},"nodeType":"YulFunctionCall","src":"11665:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11699:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11707:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11695:3:124"},"nodeType":"YulFunctionCall","src":"11695:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11689:5:124"},"nodeType":"YulFunctionCall","src":"11689:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11713:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11685:3:124"},"nodeType":"YulFunctionCall","src":"11685:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11658:6:124"},"nodeType":"YulFunctionCall","src":"11658:59:124"},"nodeType":"YulExpressionStatement","src":"11658:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11737:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11748:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11733:3:124"},"nodeType":"YulFunctionCall","src":"11733:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11767:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11775:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11763:3:124"},"nodeType":"YulFunctionCall","src":"11763:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11757:5:124"},"nodeType":"YulFunctionCall","src":"11757:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11781:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11753:3:124"},"nodeType":"YulFunctionCall","src":"11753:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11726:6:124"},"nodeType":"YulFunctionCall","src":"11726:59:124"},"nodeType":"YulExpressionStatement","src":"11726:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11805:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11816:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11801:3:124"},"nodeType":"YulFunctionCall","src":"11801:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11836:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11844:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11832:3:124"},"nodeType":"YulFunctionCall","src":"11832:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11826:5:124"},"nodeType":"YulFunctionCall","src":"11826:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"11850:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11822:3:124"},"nodeType":"YulFunctionCall","src":"11822:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11794:6:124"},"nodeType":"YulFunctionCall","src":"11794:100:124"},"nodeType":"YulExpressionStatement","src":"11794:100:124"},{"nodeType":"YulVariableDeclaration","src":"11903:43:124","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11933:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11941:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11929:3:124"},"nodeType":"YulFunctionCall","src":"11929:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11923:5:124"},"nodeType":"YulFunctionCall","src":"11923:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"11907:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11966:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11977:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11962:3:124"},"nodeType":"YulFunctionCall","src":"11962:20:124"},{"kind":"number","nodeType":"YulLiteral","src":"11984:4:124","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11955:6:124"},"nodeType":"YulFunctionCall","src":"11955:34:124"},"nodeType":"YulExpressionStatement","src":"11955:34:124"},{"nodeType":"YulAssignment","src":"11998:60:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"12024:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:124"},"nodeType":"YulFunctionCall","src":"12038:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12006:17:124"},"nodeType":"YulFunctionCall","src":"12006:52:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11998:4:124"}]}]},"name":"abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11503:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11514:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11525:4:124","type":""}],"src":"11369:695:124"},{"body":{"nodeType":"YulBlock","src":"12207:675:124","statements":[{"body":{"nodeType":"YulBlock","src":"12254:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12263:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12266:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12256:6:124"},"nodeType":"YulFunctionCall","src":"12256:12:124"},"nodeType":"YulExpressionStatement","src":"12256:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12228:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12237:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12224:3:124"},"nodeType":"YulFunctionCall","src":"12224:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"12249:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12220:3:124"},"nodeType":"YulFunctionCall","src":"12220:33:124"},"nodeType":"YulIf","src":"12217:53:124"},{"nodeType":"YulVariableDeclaration","src":"12279:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12305:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12292:12:124"},"nodeType":"YulFunctionCall","src":"12292:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12283:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12349:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12324:24:124"},"nodeType":"YulFunctionCall","src":"12324:31:124"},"nodeType":"YulExpressionStatement","src":"12324:31:124"},{"nodeType":"YulAssignment","src":"12364:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"12374:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12364:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12388:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12420:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12431:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12416:3:124"},"nodeType":"YulFunctionCall","src":"12416:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12403:12:124"},"nodeType":"YulFunctionCall","src":"12403:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12392:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12469:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12444:24:124"},"nodeType":"YulFunctionCall","src":"12444:33:124"},"nodeType":"YulExpressionStatement","src":"12444:33:124"},{"nodeType":"YulAssignment","src":"12486:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"12496:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"12486:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12512:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12544:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12555:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12540:3:124"},"nodeType":"YulFunctionCall","src":"12540:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12527:12:124"},"nodeType":"YulFunctionCall","src":"12527:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"12516:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"12593:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12568:24:124"},"nodeType":"YulFunctionCall","src":"12568:33:124"},"nodeType":"YulExpressionStatement","src":"12568:33:124"},{"nodeType":"YulAssignment","src":"12610:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"12620:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"12610:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12636:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12668:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12679:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12664:3:124"},"nodeType":"YulFunctionCall","src":"12664:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12651:12:124"},"nodeType":"YulFunctionCall","src":"12651:32:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"12640:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"12717:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12692:24:124"},"nodeType":"YulFunctionCall","src":"12692:33:124"},"nodeType":"YulExpressionStatement","src":"12692:33:124"},{"nodeType":"YulAssignment","src":"12734:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"12744:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"12734:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12760:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12792:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12803:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12788:3:124"},"nodeType":"YulFunctionCall","src":"12788:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12775:12:124"},"nodeType":"YulFunctionCall","src":"12775:33:124"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"12764:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"12842:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12817:24:124"},"nodeType":"YulFunctionCall","src":"12817:33:124"},"nodeType":"YulExpressionStatement","src":"12817:33:124"},{"nodeType":"YulAssignment","src":"12859:17:124","value":{"name":"value_4","nodeType":"YulIdentifier","src":"12869:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"12859:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12141:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12152:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12164:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12172:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12180:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12188:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12196:6:124","type":""}],"src":"12069:813:124"},{"body":{"nodeType":"YulBlock","src":"12974:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"13020:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13029:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13032:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13022:6:124"},"nodeType":"YulFunctionCall","src":"13022:12:124"},"nodeType":"YulExpressionStatement","src":"13022:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12995:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13004:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12991:3:124"},"nodeType":"YulFunctionCall","src":"12991:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13016:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12987:3:124"},"nodeType":"YulFunctionCall","src":"12987:32:124"},"nodeType":"YulIf","src":"12984:52:124"},{"nodeType":"YulVariableDeclaration","src":"13045:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13071:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13058:12:124"},"nodeType":"YulFunctionCall","src":"13058:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13049:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13115:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13090:24:124"},"nodeType":"YulFunctionCall","src":"13090:31:124"},"nodeType":"YulExpressionStatement","src":"13090:31:124"},{"nodeType":"YulAssignment","src":"13130:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13140:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13130:6:124"}]},{"nodeType":"YulAssignment","src":"13154:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13181:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13192:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13177:3:124"},"nodeType":"YulFunctionCall","src":"13177:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13164:12:124"},"nodeType":"YulFunctionCall","src":"13164:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13154:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12932:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12943:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12955:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12963:6:124","type":""}],"src":"12887:315:124"},{"body":{"nodeType":"YulBlock","src":"13291:283:124","statements":[{"body":{"nodeType":"YulBlock","src":"13340:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13349:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13352:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13342:6:124"},"nodeType":"YulFunctionCall","src":"13342:12:124"},"nodeType":"YulExpressionStatement","src":"13342:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13319:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13327:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13315:3:124"},"nodeType":"YulFunctionCall","src":"13315:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"13334:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13311:3:124"},"nodeType":"YulFunctionCall","src":"13311:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13304:6:124"},"nodeType":"YulFunctionCall","src":"13304:35:124"},"nodeType":"YulIf","src":"13301:55:124"},{"nodeType":"YulAssignment","src":"13365:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13388:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13375:12:124"},"nodeType":"YulFunctionCall","src":"13375:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"13365:6:124"}]},{"body":{"nodeType":"YulBlock","src":"13438:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13447:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13450:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13440:6:124"},"nodeType":"YulFunctionCall","src":"13440:12:124"},"nodeType":"YulExpressionStatement","src":"13440:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13410:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13418:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13407:2:124"},"nodeType":"YulFunctionCall","src":"13407:30:124"},"nodeType":"YulIf","src":"13404:50:124"},{"nodeType":"YulAssignment","src":"13463:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13479:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13487:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13475:3:124"},"nodeType":"YulFunctionCall","src":"13475:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"13463:8:124"}]},{"body":{"nodeType":"YulBlock","src":"13552:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13561:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13564:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13554:6:124"},"nodeType":"YulFunctionCall","src":"13554:12:124"},"nodeType":"YulExpressionStatement","src":"13554:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13515:6:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13527:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"13530:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13523:3:124"},"nodeType":"YulFunctionCall","src":"13523:14:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13511:3:124"},"nodeType":"YulFunctionCall","src":"13511:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"13540:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13507:3:124"},"nodeType":"YulFunctionCall","src":"13507:38:124"},{"name":"end","nodeType":"YulIdentifier","src":"13547:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13504:2:124"},"nodeType":"YulFunctionCall","src":"13504:47:124"},"nodeType":"YulIf","src":"13501:67:124"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13254:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"13262:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"13270:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"13280:6:124","type":""}],"src":"13207:367:124"},{"body":{"nodeType":"YulBlock","src":"13684:332:124","statements":[{"body":{"nodeType":"YulBlock","src":"13730:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13739:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13742:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13732:6:124"},"nodeType":"YulFunctionCall","src":"13732:12:124"},"nodeType":"YulExpressionStatement","src":"13732:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13705:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13714:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13701:3:124"},"nodeType":"YulFunctionCall","src":"13701:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13697:3:124"},"nodeType":"YulFunctionCall","src":"13697:32:124"},"nodeType":"YulIf","src":"13694:52:124"},{"nodeType":"YulVariableDeclaration","src":"13755:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13782:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13769:12:124"},"nodeType":"YulFunctionCall","src":"13769:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"13759:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13835:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13844:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13847:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13837:6:124"},"nodeType":"YulFunctionCall","src":"13837:12:124"},"nodeType":"YulExpressionStatement","src":"13837:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13807:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13815:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13804:2:124"},"nodeType":"YulFunctionCall","src":"13804:30:124"},"nodeType":"YulIf","src":"13801:50:124"},{"nodeType":"YulVariableDeclaration","src":"13860:96:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13928:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"13939:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13924:3:124"},"nodeType":"YulFunctionCall","src":"13924:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13948:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"13886:37:124"},"nodeType":"YulFunctionCall","src":"13886:70:124"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"13864:8:124","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"13874:8:124","type":""}]},{"nodeType":"YulAssignment","src":"13965:18:124","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"13975:8:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13965:6:124"}]},{"nodeType":"YulAssignment","src":"13992:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"14002:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13992:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13642:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13653:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13665:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13673:6:124","type":""}],"src":"13579:437:124"},{"body":{"nodeType":"YulBlock","src":"14158:461:124","statements":[{"body":{"nodeType":"YulBlock","src":"14205:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14214:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14217:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14207:6:124"},"nodeType":"YulFunctionCall","src":"14207:12:124"},"nodeType":"YulExpressionStatement","src":"14207:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14179:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14188:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14175:3:124"},"nodeType":"YulFunctionCall","src":"14175:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14200:3:124","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14171:3:124"},"nodeType":"YulFunctionCall","src":"14171:33:124"},"nodeType":"YulIf","src":"14168:53:124"},{"nodeType":"YulVariableDeclaration","src":"14230:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14256:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14243:12:124"},"nodeType":"YulFunctionCall","src":"14243:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14234:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14300:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14275:24:124"},"nodeType":"YulFunctionCall","src":"14275:31:124"},"nodeType":"YulExpressionStatement","src":"14275:31:124"},{"nodeType":"YulAssignment","src":"14315:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14325:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14315:6:124"}]},{"nodeType":"YulAssignment","src":"14339:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14366:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14377:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14362:3:124"},"nodeType":"YulFunctionCall","src":"14362:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14349:12:124"},"nodeType":"YulFunctionCall","src":"14349:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14339:6:124"}]},{"nodeType":"YulAssignment","src":"14390:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14417:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14428:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14413:3:124"},"nodeType":"YulFunctionCall","src":"14413:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14400:12:124"},"nodeType":"YulFunctionCall","src":"14400:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"14390:6:124"}]},{"nodeType":"YulAssignment","src":"14441:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14473:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14484:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14469:3:124"},"nodeType":"YulFunctionCall","src":"14469:18:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"14451:17:124"},"nodeType":"YulFunctionCall","src":"14451:37:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"14441:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"14497:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14529:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14540:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14525:3:124"},"nodeType":"YulFunctionCall","src":"14525:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14512:12:124"},"nodeType":"YulFunctionCall","src":"14512:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"14501:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14579:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14554:24:124"},"nodeType":"YulFunctionCall","src":"14554:33:124"},"nodeType":"YulExpressionStatement","src":"14554:33:124"},{"nodeType":"YulAssignment","src":"14596:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"14606:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"14596:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14092:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14103:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14115:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14123:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14131:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14139:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14147:6:124","type":""}],"src":"14021:598:124"},{"body":{"nodeType":"YulBlock","src":"14920:1276:124","statements":[{"body":{"nodeType":"YulBlock","src":"14967:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14976:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14979:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14969:6:124"},"nodeType":"YulFunctionCall","src":"14969:12:124"},"nodeType":"YulExpressionStatement","src":"14969:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14941:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14950:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14937:3:124"},"nodeType":"YulFunctionCall","src":"14937:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14962:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14933:3:124"},"nodeType":"YulFunctionCall","src":"14933:33:124"},"nodeType":"YulIf","src":"14930:53:124"},{"nodeType":"YulAssignment","src":"14992:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15021:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15002:18:124"},"nodeType":"YulFunctionCall","src":"15002:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14992:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"15040:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15050:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15044:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15121:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15130:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15133:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15123:6:124"},"nodeType":"YulFunctionCall","src":"15123:12:124"},"nodeType":"YulExpressionStatement","src":"15123:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15100:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15111:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15096:3:124"},"nodeType":"YulFunctionCall","src":"15096:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15083:12:124"},"nodeType":"YulFunctionCall","src":"15083:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15117:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15080:2:124"},"nodeType":"YulFunctionCall","src":"15080:40:124"},"nodeType":"YulIf","src":"15077:60:124"},{"nodeType":"YulVariableDeclaration","src":"15146:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15214:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15242:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15253:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15238:3:124"},"nodeType":"YulFunctionCall","src":"15238:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15225:12:124"},"nodeType":"YulFunctionCall","src":"15225:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15210:3:124"},"nodeType":"YulFunctionCall","src":"15210:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15260:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15172:37:124"},"nodeType":"YulFunctionCall","src":"15172:96:124"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"15150:8:124","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"15160:8:124","type":""}]},{"nodeType":"YulAssignment","src":"15277:18:124","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"15287:8:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"15277:6:124"}]},{"nodeType":"YulAssignment","src":"15304:18:124","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"15314:8:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"15304:6:124"}]},{"body":{"nodeType":"YulBlock","src":"15375:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15384:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15387:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15377:6:124"},"nodeType":"YulFunctionCall","src":"15377:12:124"},"nodeType":"YulExpressionStatement","src":"15377:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15354:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15365:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15350:3:124"},"nodeType":"YulFunctionCall","src":"15350:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15337:12:124"},"nodeType":"YulFunctionCall","src":"15337:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15371:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15334:2:124"},"nodeType":"YulFunctionCall","src":"15334:40:124"},"nodeType":"YulIf","src":"15331:60:124"},{"nodeType":"YulVariableDeclaration","src":"15400:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15468:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15496:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15507:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15492:3:124"},"nodeType":"YulFunctionCall","src":"15492:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15479:12:124"},"nodeType":"YulFunctionCall","src":"15479:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15464:3:124"},"nodeType":"YulFunctionCall","src":"15464:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15514:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15426:37:124"},"nodeType":"YulFunctionCall","src":"15426:96:124"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"15404:8:124","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"15414:8:124","type":""}]},{"nodeType":"YulAssignment","src":"15531:18:124","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"15541:8:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"15531:6:124"}]},{"nodeType":"YulAssignment","src":"15558:18:124","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"15568:8:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"15558:6:124"}]},{"body":{"nodeType":"YulBlock","src":"15629:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15638:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15641:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15631:6:124"},"nodeType":"YulFunctionCall","src":"15631:12:124"},"nodeType":"YulExpressionStatement","src":"15631:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15608:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15619:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15604:3:124"},"nodeType":"YulFunctionCall","src":"15604:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15591:12:124"},"nodeType":"YulFunctionCall","src":"15591:32:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15625:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15588:2:124"},"nodeType":"YulFunctionCall","src":"15588:40:124"},"nodeType":"YulIf","src":"15585:60:124"},{"nodeType":"YulVariableDeclaration","src":"15654:122:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15722:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15750:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15761:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15746:3:124"},"nodeType":"YulFunctionCall","src":"15746:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15733:12:124"},"nodeType":"YulFunctionCall","src":"15733:32:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15718:3:124"},"nodeType":"YulFunctionCall","src":"15718:48:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15768:7:124"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15680:37:124"},"nodeType":"YulFunctionCall","src":"15680:96:124"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"15658:8:124","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"15668:8:124","type":""}]},{"nodeType":"YulAssignment","src":"15785:18:124","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"15795:8:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"15785:6:124"}]},{"nodeType":"YulAssignment","src":"15812:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"15822:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"15812:6:124"}]},{"nodeType":"YulAssignment","src":"15839:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15883:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15868:3:124"},"nodeType":"YulFunctionCall","src":"15868:19:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15849:18:124"},"nodeType":"YulFunctionCall","src":"15849:39:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"15839:6:124"}]},{"body":{"nodeType":"YulBlock","src":"15942:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15951:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15954:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15944:6:124"},"nodeType":"YulFunctionCall","src":"15944:12:124"},"nodeType":"YulExpressionStatement","src":"15944:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15920:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15931:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15916:3:124"},"nodeType":"YulFunctionCall","src":"15916:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15903:12:124"},"nodeType":"YulFunctionCall","src":"15903:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15938:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15900:2:124"},"nodeType":"YulFunctionCall","src":"15900:41:124"},"nodeType":"YulIf","src":"15897:61:124"},{"nodeType":"YulVariableDeclaration","src":"15967:111:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16023:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16062:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16047:3:124"},"nodeType":"YulFunctionCall","src":"16047:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16034:12:124"},"nodeType":"YulFunctionCall","src":"16034:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16019:3:124"},"nodeType":"YulFunctionCall","src":"16019:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16070:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"15993:25:124"},"nodeType":"YulFunctionCall","src":"15993:85:124"},"variables":[{"name":"value8_1","nodeType":"YulTypedName","src":"15971:8:124","type":""},{"name":"value9_1","nodeType":"YulTypedName","src":"15981:8:124","type":""}]},{"nodeType":"YulAssignment","src":"16087:18:124","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"16097:8:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"16087:6:124"}]},{"nodeType":"YulAssignment","src":"16114:18:124","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"16124:8:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"16114:6:124"}]},{"nodeType":"YulAssignment","src":"16141:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16185:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16170:3:124"},"nodeType":"YulFunctionCall","src":"16170:19:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"16152:17:124"},"nodeType":"YulFunctionCall","src":"16152:38:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"16141:7:124"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14805:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14816:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14828:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14836:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14844:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14852:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14860:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14868:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"14876:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"14884:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"14892:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"14900:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"14908:7:124","type":""}],"src":"14624:1572:124"},{"body":{"nodeType":"YulBlock","src":"16250:139:124","statements":[{"nodeType":"YulAssignment","src":"16260:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"16282:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16269:12:124"},"nodeType":"YulFunctionCall","src":"16269:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16260:5:124"}]},{"body":{"nodeType":"YulBlock","src":"16367:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16376:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16379:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16369:6:124"},"nodeType":"YulFunctionCall","src":"16369:12:124"},"nodeType":"YulExpressionStatement","src":"16369:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16311:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16322:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16329:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16318:3:124"},"nodeType":"YulFunctionCall","src":"16318:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16308:2:124"},"nodeType":"YulFunctionCall","src":"16308:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16301:6:124"},"nodeType":"YulFunctionCall","src":"16301:65:124"},"nodeType":"YulIf","src":"16298:85:124"}]},"name":"abi_decode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"16229:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16240:5:124","type":""}],"src":"16201:188:124"},{"body":{"nodeType":"YulBlock","src":"16481:173:124","statements":[{"body":{"nodeType":"YulBlock","src":"16527:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16536:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16539:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16529:6:124"},"nodeType":"YulFunctionCall","src":"16529:12:124"},"nodeType":"YulExpressionStatement","src":"16529:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16502:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"16511:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16498:3:124"},"nodeType":"YulFunctionCall","src":"16498:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"16523:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16494:3:124"},"nodeType":"YulFunctionCall","src":"16494:32:124"},"nodeType":"YulIf","src":"16491:52:124"},{"nodeType":"YulAssignment","src":"16552:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16581:9:124"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"16562:18:124"},"nodeType":"YulFunctionCall","src":"16562:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16552:6:124"}]},{"nodeType":"YulAssignment","src":"16600:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16633:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16644:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16629:3:124"},"nodeType":"YulFunctionCall","src":"16629:18:124"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"16610:18:124"},"nodeType":"YulFunctionCall","src":"16610:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"16600:6:124"}]}]},"name":"abi_decode_tuple_t_uint128t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16439:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16450:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16462:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16470:6:124","type":""}],"src":"16394:260:124"},{"body":{"nodeType":"YulBlock","src":"16900:294:124","statements":[{"nodeType":"YulAssignment","src":"16910:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16922:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16933:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16918:3:124"},"nodeType":"YulFunctionCall","src":"16918:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16910:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16953:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"16964:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16946:6:124"},"nodeType":"YulFunctionCall","src":"16946:25:124"},"nodeType":"YulExpressionStatement","src":"16946:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16991:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17002:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16987:3:124"},"nodeType":"YulFunctionCall","src":"16987:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"17007:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16980:6:124"},"nodeType":"YulFunctionCall","src":"16980:34:124"},"nodeType":"YulExpressionStatement","src":"16980:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17034:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17045:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17030:3:124"},"nodeType":"YulFunctionCall","src":"17030:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"17050:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17023:6:124"},"nodeType":"YulFunctionCall","src":"17023:34:124"},"nodeType":"YulExpressionStatement","src":"17023:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17077:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17088:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17073:3:124"},"nodeType":"YulFunctionCall","src":"17073:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"17093:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17066:6:124"},"nodeType":"YulFunctionCall","src":"17066:34:124"},"nodeType":"YulExpressionStatement","src":"17066:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17120:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17131:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17116:3:124"},"nodeType":"YulFunctionCall","src":"17116:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"17137:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17109:6:124"},"nodeType":"YulFunctionCall","src":"17109:35:124"},"nodeType":"YulExpressionStatement","src":"17109:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17164:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17175:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17160:3:124"},"nodeType":"YulFunctionCall","src":"17160:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"17181:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17153:6:124"},"nodeType":"YulFunctionCall","src":"17153:35:124"},"nodeType":"YulExpressionStatement","src":"17153:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16829:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"16840:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"16848:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16856:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16864:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16872:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16880:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16891:4:124","type":""}],"src":"16659:535:124"},{"body":{"nodeType":"YulBlock","src":"17384:83:124","statements":[{"nodeType":"YulAssignment","src":"17394:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17417:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17402:3:124"},"nodeType":"YulFunctionCall","src":"17402:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17394:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17436:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17453:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17447:5:124"},"nodeType":"YulFunctionCall","src":"17447:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17429:6:124"},"nodeType":"YulFunctionCall","src":"17429:32:124"},"nodeType":"YulExpressionStatement","src":"17429:32:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17353:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17364:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17375:4:124","type":""}],"src":"17199:268:124"},{"body":{"nodeType":"YulBlock","src":"17573:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"17619:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17628:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17631:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17621:6:124"},"nodeType":"YulFunctionCall","src":"17621:12:124"},"nodeType":"YulExpressionStatement","src":"17621:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17594:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"17603:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17590:3:124"},"nodeType":"YulFunctionCall","src":"17590:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"17615:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17586:3:124"},"nodeType":"YulFunctionCall","src":"17586:32:124"},"nodeType":"YulIf","src":"17583:52:124"},{"nodeType":"YulVariableDeclaration","src":"17644:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17670:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17657:12:124"},"nodeType":"YulFunctionCall","src":"17657:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17648:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17714:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"17689:24:124"},"nodeType":"YulFunctionCall","src":"17689:31:124"},"nodeType":"YulExpressionStatement","src":"17689:31:124"},{"nodeType":"YulAssignment","src":"17729:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"17739:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17729:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17539:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17550:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17562:6:124","type":""}],"src":"17472:278:124"},{"body":{"nodeType":"YulBlock","src":"17859:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"17905:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17914:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17917:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17907:6:124"},"nodeType":"YulFunctionCall","src":"17907:12:124"},"nodeType":"YulExpressionStatement","src":"17907:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17880:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"17889:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17876:3:124"},"nodeType":"YulFunctionCall","src":"17876:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"17901:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17872:3:124"},"nodeType":"YulFunctionCall","src":"17872:32:124"},"nodeType":"YulIf","src":"17869:52:124"},{"nodeType":"YulVariableDeclaration","src":"17930:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17956:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17943:12:124"},"nodeType":"YulFunctionCall","src":"17943:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17934:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18000:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"17975:24:124"},"nodeType":"YulFunctionCall","src":"17975:31:124"},"nodeType":"YulExpressionStatement","src":"17975:31:124"},{"nodeType":"YulAssignment","src":"18015:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"18025:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18015:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"18039:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18071:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18082:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18067:3:124"},"nodeType":"YulFunctionCall","src":"18067:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18054:12:124"},"nodeType":"YulFunctionCall","src":"18054:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"18043:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"18120:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18095:24:124"},"nodeType":"YulFunctionCall","src":"18095:33:124"},"nodeType":"YulExpressionStatement","src":"18095:33:124"},{"nodeType":"YulAssignment","src":"18137:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"18147:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"18137:6:124"}]},{"nodeType":"YulAssignment","src":"18163:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18190:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18201:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18186:3:124"},"nodeType":"YulFunctionCall","src":"18186:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18173:12:124"},"nodeType":"YulFunctionCall","src":"18173:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"18163:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17809:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17820:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17832:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17840:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17848:6:124","type":""}],"src":"17755:456:124"},{"body":{"nodeType":"YulBlock","src":"18367:530:124","statements":[{"nodeType":"YulVariableDeclaration","src":"18377:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18387:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18381:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18398:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18416:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18427:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18412:3:124"},"nodeType":"YulFunctionCall","src":"18412:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"18402:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18446:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18457:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18439:6:124"},"nodeType":"YulFunctionCall","src":"18439:21:124"},"nodeType":"YulExpressionStatement","src":"18439:21:124"},{"nodeType":"YulVariableDeclaration","src":"18469:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"18480:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"18473:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18495:27:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18515:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18509:5:124"},"nodeType":"YulFunctionCall","src":"18509:13:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"18499:6:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"18538:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"18546:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18531:6:124"},"nodeType":"YulFunctionCall","src":"18531:22:124"},"nodeType":"YulExpressionStatement","src":"18531:22:124"},{"nodeType":"YulAssignment","src":"18562:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18573:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18584:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18569:3:124"},"nodeType":"YulFunctionCall","src":"18569:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18562:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"18596:29:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18614:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18622:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18610:3:124"},"nodeType":"YulFunctionCall","src":"18610:15:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"18600:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18634:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18643:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"18638:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"18702:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18723:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18738:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18732:5:124"},"nodeType":"YulFunctionCall","src":"18732:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"18747:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18728:3:124"},"nodeType":"YulFunctionCall","src":"18728:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18716:6:124"},"nodeType":"YulFunctionCall","src":"18716:75:124"},"nodeType":"YulExpressionStatement","src":"18716:75:124"},{"nodeType":"YulAssignment","src":"18804:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18815:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18820:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18811:3:124"},"nodeType":"YulFunctionCall","src":"18811:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18804:3:124"}]},{"nodeType":"YulAssignment","src":"18836:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18850:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18858:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18846:3:124"},"nodeType":"YulFunctionCall","src":"18846:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18836:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18664:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"18667:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18661:2:124"},"nodeType":"YulFunctionCall","src":"18661:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"18675:18:124","statements":[{"nodeType":"YulAssignment","src":"18677:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18686:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"18689:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18682:3:124"},"nodeType":"YulFunctionCall","src":"18682:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"18677:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"18657:3:124","statements":[]},"src":"18653:218:124"},{"nodeType":"YulAssignment","src":"18880:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"18888:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18880:4:124"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18336:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18347:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18358:4:124","type":""}],"src":"18216:681:124"},{"body":{"nodeType":"YulBlock","src":"18934:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18951:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18954:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18944:6:124"},"nodeType":"YulFunctionCall","src":"18944:88:124"},"nodeType":"YulExpressionStatement","src":"18944:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19048:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19051:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19041:6:124"},"nodeType":"YulFunctionCall","src":"19041:15:124"},"nodeType":"YulExpressionStatement","src":"19041:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19072:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19075:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19065:6:124"},"nodeType":"YulFunctionCall","src":"19065:15:124"},"nodeType":"YulExpressionStatement","src":"19065:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"18902:184:124"},{"body":{"nodeType":"YulBlock","src":"19137:207:124","statements":[{"nodeType":"YulAssignment","src":"19147:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19163:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19157:5:124"},"nodeType":"YulFunctionCall","src":"19157:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19147:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19175:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19197:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"19205:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19193:3:124"},"nodeType":"YulFunctionCall","src":"19193:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19179:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"19285:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19287:16:124"},"nodeType":"YulFunctionCall","src":"19287:18:124"},"nodeType":"YulExpressionStatement","src":"19287:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19228:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"19240:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19225:2:124"},"nodeType":"YulFunctionCall","src":"19225:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19264:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19276:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19261:2:124"},"nodeType":"YulFunctionCall","src":"19261:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19222:2:124"},"nodeType":"YulFunctionCall","src":"19222:62:124"},"nodeType":"YulIf","src":"19219:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19323:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19327:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19316:6:124"},"nodeType":"YulFunctionCall","src":"19316:22:124"},"nodeType":"YulExpressionStatement","src":"19316:22:124"}]},"name":"allocate_memory_5591","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19126:6:124","type":""}],"src":"19091:253:124"},{"body":{"nodeType":"YulBlock","src":"19394:289:124","statements":[{"nodeType":"YulAssignment","src":"19404:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19420:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19414:5:124"},"nodeType":"YulFunctionCall","src":"19414:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19404:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19432:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19454:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"19470:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"19476:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19466:3:124"},"nodeType":"YulFunctionCall","src":"19466:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"19481:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19462:3:124"},"nodeType":"YulFunctionCall","src":"19462:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19450:3:124"},"nodeType":"YulFunctionCall","src":"19450:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19436:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"19624:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19626:16:124"},"nodeType":"YulFunctionCall","src":"19626:18:124"},"nodeType":"YulExpressionStatement","src":"19626:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19567:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"19579:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19564:2:124"},"nodeType":"YulFunctionCall","src":"19564:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19603:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19615:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19600:2:124"},"nodeType":"YulFunctionCall","src":"19600:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19561:2:124"},"nodeType":"YulFunctionCall","src":"19561:62:124"},"nodeType":"YulIf","src":"19558:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19662:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19666:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19655:6:124"},"nodeType":"YulFunctionCall","src":"19655:22:124"},"nodeType":"YulExpressionStatement","src":"19655:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"19374:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19383:6:124","type":""}],"src":"19349:334:124"},{"body":{"nodeType":"YulBlock","src":"19805:1371:124","statements":[{"body":{"nodeType":"YulBlock","src":"19851:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19860:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19863:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19853:6:124"},"nodeType":"YulFunctionCall","src":"19853:12:124"},"nodeType":"YulExpressionStatement","src":"19853:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19826:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"19835:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19822:3:124"},"nodeType":"YulFunctionCall","src":"19822:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"19847:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19818:3:124"},"nodeType":"YulFunctionCall","src":"19818:32:124"},"nodeType":"YulIf","src":"19815:52:124"},{"nodeType":"YulAssignment","src":"19876:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19903:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"19886:16:124"},"nodeType":"YulFunctionCall","src":"19886:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19876:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"19922:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"19932:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19926:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19943:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19974:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19985:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19970:3:124"},"nodeType":"YulFunctionCall","src":"19970:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"19957:12:124"},"nodeType":"YulFunctionCall","src":"19957:32:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"19947:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19998:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"20008:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"20002:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20053:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20062:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20065:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20055:6:124"},"nodeType":"YulFunctionCall","src":"20055:12:124"},"nodeType":"YulExpressionStatement","src":"20055:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20041:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20049:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20038:2:124"},"nodeType":"YulFunctionCall","src":"20038:14:124"},"nodeType":"YulIf","src":"20035:34:124"},{"nodeType":"YulVariableDeclaration","src":"20078:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20092:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"20103:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20088:3:124"},"nodeType":"YulFunctionCall","src":"20088:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"20082:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20150:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20159:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20162:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20152:6:124"},"nodeType":"YulFunctionCall","src":"20152:12:124"},"nodeType":"YulExpressionStatement","src":"20152:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20130:7:124"},{"name":"_3","nodeType":"YulIdentifier","src":"20139:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20126:3:124"},"nodeType":"YulFunctionCall","src":"20126:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"20144:4:124","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20122:3:124"},"nodeType":"YulFunctionCall","src":"20122:27:124"},"nodeType":"YulIf","src":"20119:47:124"},{"nodeType":"YulVariableDeclaration","src":"20175:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_5591","nodeType":"YulIdentifier","src":"20188:20:124"},"nodeType":"YulFunctionCall","src":"20188:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"20179:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20226:5:124"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20251:2:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20233:17:124"},"nodeType":"YulFunctionCall","src":"20233:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20219:6:124"},"nodeType":"YulFunctionCall","src":"20219:36:124"},"nodeType":"YulExpressionStatement","src":"20219:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20275:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20282:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20271:3:124"},"nodeType":"YulFunctionCall","src":"20271:14:124"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20309:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20313:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20305:3:124"},"nodeType":"YulFunctionCall","src":"20305:11:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20287:17:124"},"nodeType":"YulFunctionCall","src":"20287:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20264:6:124"},"nodeType":"YulFunctionCall","src":"20264:54:124"},"nodeType":"YulExpressionStatement","src":"20264:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20338:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"20345:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20334:3:124"},"nodeType":"YulFunctionCall","src":"20334:14:124"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20372:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20376:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20368:3:124"},"nodeType":"YulFunctionCall","src":"20368:11:124"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20350:17:124"},"nodeType":"YulFunctionCall","src":"20350:30:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20327:6:124"},"nodeType":"YulFunctionCall","src":"20327:54:124"},"nodeType":"YulExpressionStatement","src":"20327:54:124"},{"nodeType":"YulVariableDeclaration","src":"20390:40:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20422:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20426:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20418:3:124"},"nodeType":"YulFunctionCall","src":"20418:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20405:12:124"},"nodeType":"YulFunctionCall","src":"20405:25:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"20394:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20464:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20439:24:124"},"nodeType":"YulFunctionCall","src":"20439:33:124"},"nodeType":"YulExpressionStatement","src":"20439:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20492:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"20499:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20488:3:124"},"nodeType":"YulFunctionCall","src":"20488:14:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"20504:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20481:6:124"},"nodeType":"YulFunctionCall","src":"20481:31:124"},"nodeType":"YulExpressionStatement","src":"20481:31:124"},{"nodeType":"YulVariableDeclaration","src":"20521:42:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20554:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20558:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20550:3:124"},"nodeType":"YulFunctionCall","src":"20550:12:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20537:12:124"},"nodeType":"YulFunctionCall","src":"20537:26:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"20525:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20594:6:124"},"nodeType":"YulFunctionCall","src":"20594:12:124"},"nodeType":"YulExpressionStatement","src":"20594:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"20578:8:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20588:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20575:2:124"},"nodeType":"YulFunctionCall","src":"20575:16:124"},"nodeType":"YulIf","src":"20572:36:124"},{"nodeType":"YulVariableDeclaration","src":"20617:27:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20631:2:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"20635:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20627:3:124"},"nodeType":"YulFunctionCall","src":"20627:17:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"20621:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20692:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20701:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20704:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20694:6:124"},"nodeType":"YulFunctionCall","src":"20694:12:124"},"nodeType":"YulExpressionStatement","src":"20694:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20671:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20675:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20667:3:124"},"nodeType":"YulFunctionCall","src":"20667:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20682:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20663:3:124"},"nodeType":"YulFunctionCall","src":"20663:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20656:6:124"},"nodeType":"YulFunctionCall","src":"20656:35:124"},"nodeType":"YulIf","src":"20653:55:124"},{"nodeType":"YulVariableDeclaration","src":"20717:26:124","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20740:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20727:12:124"},"nodeType":"YulFunctionCall","src":"20727:16:124"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"20721:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"20766:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"20768:16:124"},"nodeType":"YulFunctionCall","src":"20768:18:124"},"nodeType":"YulExpressionStatement","src":"20768:18:124"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"20758:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20762:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20755:2:124"},"nodeType":"YulFunctionCall","src":"20755:10:124"},"nodeType":"YulIf","src":"20752:36:124"},{"nodeType":"YulVariableDeclaration","src":"20797:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"20838:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"20842:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20834:3:124"},"nodeType":"YulFunctionCall","src":"20834:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"20849:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20830:3:124"},"nodeType":"YulFunctionCall","src":"20830:86:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20918:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20826:3:124"},"nodeType":"YulFunctionCall","src":"20826:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"20810:15:124"},"nodeType":"YulFunctionCall","src":"20810:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"20801:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"20938:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"20945:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20931:6:124"},"nodeType":"YulFunctionCall","src":"20931:17:124"},"nodeType":"YulExpressionStatement","src":"20931:17:124"},{"body":{"nodeType":"YulBlock","src":"20994:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21003:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21006:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20996:6:124"},"nodeType":"YulFunctionCall","src":"20996:12:124"},"nodeType":"YulExpressionStatement","src":"20996:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20971:2:124"},{"name":"_5","nodeType":"YulIdentifier","src":"20975:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20967:3:124"},"nodeType":"YulFunctionCall","src":"20967:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20980:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20963:3:124"},"nodeType":"YulFunctionCall","src":"20963:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20985:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20960:2:124"},"nodeType":"YulFunctionCall","src":"20960:33:124"},"nodeType":"YulIf","src":"20957:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21036:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21043:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21032:3:124"},"nodeType":"YulFunctionCall","src":"21032:14:124"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21052:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21056:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21048:3:124"},"nodeType":"YulFunctionCall","src":"21048:11:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21061:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"21019:12:124"},"nodeType":"YulFunctionCall","src":"21019:45:124"},"nodeType":"YulExpressionStatement","src":"21019:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21088:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21095:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21084:3:124"},"nodeType":"YulFunctionCall","src":"21084:14:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21100:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21080:3:124"},"nodeType":"YulFunctionCall","src":"21080:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"21105:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21073:6:124"},"nodeType":"YulFunctionCall","src":"21073:34:124"},"nodeType":"YulExpressionStatement","src":"21073:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21127:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"21134:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21123:3:124"},"nodeType":"YulFunctionCall","src":"21123:15:124"},{"name":"array","nodeType":"YulIdentifier","src":"21140:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21116:6:124"},"nodeType":"YulFunctionCall","src":"21116:30:124"},"nodeType":"YulExpressionStatement","src":"21116:30:124"},{"nodeType":"YulAssignment","src":"21155:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"21165:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21155:6:124"}]}]},"name":"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19763:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"19774:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"19786:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19794:6:124","type":""}],"src":"19688:1488:124"},{"body":{"nodeType":"YulBlock","src":"21336:581:124","statements":[{"body":{"nodeType":"YulBlock","src":"21383:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21392:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21395:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21385:6:124"},"nodeType":"YulFunctionCall","src":"21385:12:124"},"nodeType":"YulExpressionStatement","src":"21385:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21357:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"21366:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21353:3:124"},"nodeType":"YulFunctionCall","src":"21353:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"21378:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21349:3:124"},"nodeType":"YulFunctionCall","src":"21349:33:124"},"nodeType":"YulIf","src":"21346:53:124"},{"nodeType":"YulVariableDeclaration","src":"21408:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21434:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21421:12:124"},"nodeType":"YulFunctionCall","src":"21421:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"21412:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21478:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21453:24:124"},"nodeType":"YulFunctionCall","src":"21453:31:124"},"nodeType":"YulExpressionStatement","src":"21453:31:124"},{"nodeType":"YulAssignment","src":"21493:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"21503:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21493:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"21517:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21549:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21560:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21545:3:124"},"nodeType":"YulFunctionCall","src":"21545:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21532:12:124"},"nodeType":"YulFunctionCall","src":"21532:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"21521:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"21598:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21573:24:124"},"nodeType":"YulFunctionCall","src":"21573:33:124"},"nodeType":"YulExpressionStatement","src":"21573:33:124"},{"nodeType":"YulAssignment","src":"21615:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"21625:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21615:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"21641:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21673:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21684:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21669:3:124"},"nodeType":"YulFunctionCall","src":"21669:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21656:12:124"},"nodeType":"YulFunctionCall","src":"21656:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"21645:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"21722:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21697:24:124"},"nodeType":"YulFunctionCall","src":"21697:33:124"},"nodeType":"YulExpressionStatement","src":"21697:33:124"},{"nodeType":"YulAssignment","src":"21739:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"21749:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"21739:6:124"}]},{"nodeType":"YulAssignment","src":"21765:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21792:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21803:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21788:3:124"},"nodeType":"YulFunctionCall","src":"21788:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21775:12:124"},"nodeType":"YulFunctionCall","src":"21775:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"21765:6:124"}]},{"nodeType":"YulAssignment","src":"21816:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21843:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21854:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21839:3:124"},"nodeType":"YulFunctionCall","src":"21839:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21826:12:124"},"nodeType":"YulFunctionCall","src":"21826:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"21816:6:124"}]},{"nodeType":"YulAssignment","src":"21868:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21906:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21891:3:124"},"nodeType":"YulFunctionCall","src":"21891:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21878:12:124"},"nodeType":"YulFunctionCall","src":"21878:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"21868:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21262:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21273:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21285:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21293:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21301:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21309:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21317:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21325:6:124","type":""}],"src":"21181:736:124"},{"body":{"nodeType":"YulBlock","src":"22109:616:124","statements":[{"body":{"nodeType":"YulBlock","src":"22156:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22165:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22168:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22158:6:124"},"nodeType":"YulFunctionCall","src":"22158:12:124"},"nodeType":"YulExpressionStatement","src":"22158:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22130:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"22139:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22126:3:124"},"nodeType":"YulFunctionCall","src":"22126:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"22151:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22122:3:124"},"nodeType":"YulFunctionCall","src":"22122:33:124"},"nodeType":"YulIf","src":"22119:53:124"},{"nodeType":"YulVariableDeclaration","src":"22181:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22207:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22194:12:124"},"nodeType":"YulFunctionCall","src":"22194:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22185:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22251:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22226:24:124"},"nodeType":"YulFunctionCall","src":"22226:31:124"},"nodeType":"YulExpressionStatement","src":"22226:31:124"},{"nodeType":"YulAssignment","src":"22266:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"22276:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22266:6:124"}]},{"nodeType":"YulAssignment","src":"22290:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22317:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22328:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22313:3:124"},"nodeType":"YulFunctionCall","src":"22313:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22300:12:124"},"nodeType":"YulFunctionCall","src":"22300:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"22290:6:124"}]},{"nodeType":"YulAssignment","src":"22341:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22368:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22379:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22364:3:124"},"nodeType":"YulFunctionCall","src":"22364:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22351:12:124"},"nodeType":"YulFunctionCall","src":"22351:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"22341:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"22392:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22424:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22435:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22420:3:124"},"nodeType":"YulFunctionCall","src":"22420:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22407:12:124"},"nodeType":"YulFunctionCall","src":"22407:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22396:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22473:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22448:24:124"},"nodeType":"YulFunctionCall","src":"22448:33:124"},"nodeType":"YulExpressionStatement","src":"22448:33:124"},{"nodeType":"YulAssignment","src":"22490:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"22500:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"22490:6:124"}]},{"nodeType":"YulAssignment","src":"22516:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22543:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22554:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22539:3:124"},"nodeType":"YulFunctionCall","src":"22539:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22526:12:124"},"nodeType":"YulFunctionCall","src":"22526:33:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"22516:6:124"}]},{"nodeType":"YulAssignment","src":"22568:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22599:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22610:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22595:3:124"},"nodeType":"YulFunctionCall","src":"22595:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"22578:16:124"},"nodeType":"YulFunctionCall","src":"22578:37:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"22568:6:124"}]},{"nodeType":"YulAssignment","src":"22624:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22651:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22662:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22647:3:124"},"nodeType":"YulFunctionCall","src":"22647:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22634:12:124"},"nodeType":"YulFunctionCall","src":"22634:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"22624:6:124"}]},{"nodeType":"YulAssignment","src":"22676:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22703:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22714:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22699:3:124"},"nodeType":"YulFunctionCall","src":"22699:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22686:12:124"},"nodeType":"YulFunctionCall","src":"22686:33:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"22676:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22019:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22030:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22042:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22050:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22058:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22066:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22074:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22082:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"22090:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"22098:6:124","type":""}],"src":"21922:803:124"},{"body":{"nodeType":"YulBlock","src":"22861:348:124","statements":[{"nodeType":"YulVariableDeclaration","src":"22871:33:124","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22885:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"22894:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22881:3:124"},"nodeType":"YulFunctionCall","src":"22881:23:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22875:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"22928:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22937:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22940:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22930:6:124"},"nodeType":"YulFunctionCall","src":"22930:12:124"},"nodeType":"YulExpressionStatement","src":"22930:12:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"22920:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"22924:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22916:3:124"},"nodeType":"YulFunctionCall","src":"22916:11:124"},"nodeType":"YulIf","src":"22913:31:124"},{"nodeType":"YulVariableDeclaration","src":"22953:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22979:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22966:12:124"},"nodeType":"YulFunctionCall","src":"22966:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22957:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23023:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22998:24:124"},"nodeType":"YulFunctionCall","src":"22998:31:124"},"nodeType":"YulExpressionStatement","src":"22998:31:124"},{"nodeType":"YulAssignment","src":"23038:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"23048:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23038:6:124"}]},{"body":{"nodeType":"YulBlock","src":"23150:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23159:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23162:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23152:6:124"},"nodeType":"YulFunctionCall","src":"23152:12:124"},"nodeType":"YulExpressionStatement","src":"23152:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"23073:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"23077:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23069:3:124"},"nodeType":"YulFunctionCall","src":"23069:75:124"},{"kind":"number","nodeType":"YulLiteral","src":"23146:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23065:3:124"},"nodeType":"YulFunctionCall","src":"23065:84:124"},"nodeType":"YulIf","src":"23062:104:124"},{"nodeType":"YulAssignment","src":"23175:28:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23189:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23200:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23185:3:124"},"nodeType":"YulFunctionCall","src":"23185:18:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"23175:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22819:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22830:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22842:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22850:6:124","type":""}],"src":"22730:479:124"},{"body":{"nodeType":"YulBlock","src":"23313:89:124","statements":[{"nodeType":"YulAssignment","src":"23323:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23335:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23346:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23331:3:124"},"nodeType":"YulFunctionCall","src":"23331:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23323:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23365:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23380:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"23388:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23376:3:124"},"nodeType":"YulFunctionCall","src":"23376:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23358:6:124"},"nodeType":"YulFunctionCall","src":"23358:38:124"},"nodeType":"YulExpressionStatement","src":"23358:38:124"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23282:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23293:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23304:4:124","type":""}],"src":"23214:188:124"},{"body":{"nodeType":"YulBlock","src":"23488:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"23534:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23543:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23546:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23536:6:124"},"nodeType":"YulFunctionCall","src":"23536:12:124"},"nodeType":"YulExpressionStatement","src":"23536:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23509:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"23518:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23505:3:124"},"nodeType":"YulFunctionCall","src":"23505:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"23530:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23501:3:124"},"nodeType":"YulFunctionCall","src":"23501:32:124"},"nodeType":"YulIf","src":"23498:52:124"},{"nodeType":"YulVariableDeclaration","src":"23559:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23578:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23572:5:124"},"nodeType":"YulFunctionCall","src":"23572:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23563:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23622:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"23597:24:124"},"nodeType":"YulFunctionCall","src":"23597:31:124"},"nodeType":"YulExpressionStatement","src":"23597:31:124"},{"nodeType":"YulAssignment","src":"23637:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"23647:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23637:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23454:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23465:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23477:6:124","type":""}],"src":"23407:251:124"},{"body":{"nodeType":"YulBlock","src":"23704:50:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"23721:3:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23740:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23733:6:124"},"nodeType":"YulFunctionCall","src":"23733:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23726:6:124"},"nodeType":"YulFunctionCall","src":"23726:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23714:6:124"},"nodeType":"YulFunctionCall","src":"23714:34:124"},"nodeType":"YulExpressionStatement","src":"23714:34:124"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23688:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"23695:3:124","type":""}],"src":"23663:91:124"},{"body":{"nodeType":"YulBlock","src":"23801:33:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"23810:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23819:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"23826:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23815:3:124"},"nodeType":"YulFunctionCall","src":"23815:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23803:6:124"},"nodeType":"YulFunctionCall","src":"23803:29:124"},"nodeType":"YulExpressionStatement","src":"23803:29:124"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23785:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"23792:3:124","type":""}],"src":"23759:75:124"},{"body":{"nodeType":"YulBlock","src":"24344:1162:124","statements":[{"nodeType":"YulAssignment","src":"24354:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24366:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24377:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24362:3:124"},"nodeType":"YulFunctionCall","src":"24362:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24354:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24397:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"24408:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24390:6:124"},"nodeType":"YulFunctionCall","src":"24390:25:124"},"nodeType":"YulExpressionStatement","src":"24390:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24446:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24431:3:124"},"nodeType":"YulFunctionCall","src":"24431:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"24451:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24424:6:124"},"nodeType":"YulFunctionCall","src":"24424:34:124"},"nodeType":"YulExpressionStatement","src":"24424:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24478:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24489:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24474:3:124"},"nodeType":"YulFunctionCall","src":"24474:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"24494:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24467:6:124"},"nodeType":"YulFunctionCall","src":"24467:34:124"},"nodeType":"YulExpressionStatement","src":"24467:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24521:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24532:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24517:3:124"},"nodeType":"YulFunctionCall","src":"24517:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"24537:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24510:6:124"},"nodeType":"YulFunctionCall","src":"24510:34:124"},"nodeType":"YulExpressionStatement","src":"24510:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24564:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24575:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24560:3:124"},"nodeType":"YulFunctionCall","src":"24560:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24587:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24581:5:124"},"nodeType":"YulFunctionCall","src":"24581:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24553:6:124"},"nodeType":"YulFunctionCall","src":"24553:42:124"},"nodeType":"YulExpressionStatement","src":"24553:42:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24615:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24626:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24611:3:124"},"nodeType":"YulFunctionCall","src":"24611:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24642:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24650:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24638:3:124"},"nodeType":"YulFunctionCall","src":"24638:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24632:5:124"},"nodeType":"YulFunctionCall","src":"24632:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24604:6:124"},"nodeType":"YulFunctionCall","src":"24604:51:124"},"nodeType":"YulExpressionStatement","src":"24604:51:124"},{"nodeType":"YulVariableDeclaration","src":"24664:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24694:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24702:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24690:3:124"},"nodeType":"YulFunctionCall","src":"24690:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24684:5:124"},"nodeType":"YulFunctionCall","src":"24684:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"24668:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24715:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"24725:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24719:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24787:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24798:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24783:3:124"},"nodeType":"YulFunctionCall","src":"24783:19:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"24808:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"24822:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24804:3:124"},"nodeType":"YulFunctionCall","src":"24804:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24776:6:124"},"nodeType":"YulFunctionCall","src":"24776:50:124"},"nodeType":"YulExpressionStatement","src":"24776:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24846:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24857:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24842:3:124"},"nodeType":"YulFunctionCall","src":"24842:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24877:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24885:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24873:3:124"},"nodeType":"YulFunctionCall","src":"24873:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24867:5:124"},"nodeType":"YulFunctionCall","src":"24867:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"24891:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24863:3:124"},"nodeType":"YulFunctionCall","src":"24863:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24835:6:124"},"nodeType":"YulFunctionCall","src":"24835:60:124"},"nodeType":"YulExpressionStatement","src":"24835:60:124"},{"nodeType":"YulVariableDeclaration","src":"24904:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24936:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24944:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24932:3:124"},"nodeType":"YulFunctionCall","src":"24932:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24926:5:124"},"nodeType":"YulFunctionCall","src":"24926:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"24908:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24958:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"24968:3:124","type":"","value":"256"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"24962:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"24999:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25019:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"25030:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25015:3:124"},"nodeType":"YulFunctionCall","src":"25015:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"24980:18:124"},"nodeType":"YulFunctionCall","src":"24980:54:124"},"nodeType":"YulExpressionStatement","src":"24980:54:124"},{"nodeType":"YulVariableDeclaration","src":"25043:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25075:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25083:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25071:3:124"},"nodeType":"YulFunctionCall","src":"25071:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25065:5:124"},"nodeType":"YulFunctionCall","src":"25065:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"25047:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"25113:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25133:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25144:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25129:3:124"},"nodeType":"YulFunctionCall","src":"25129:19:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"25097:15:124"},"nodeType":"YulFunctionCall","src":"25097:52:124"},"nodeType":"YulExpressionStatement","src":"25097:52:124"},{"nodeType":"YulVariableDeclaration","src":"25158:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25190:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25198:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25186:3:124"},"nodeType":"YulFunctionCall","src":"25186:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25180:5:124"},"nodeType":"YulFunctionCall","src":"25180:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"25162:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"25231:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25251:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25262:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25247:3:124"},"nodeType":"YulFunctionCall","src":"25247:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25212:18:124"},"nodeType":"YulFunctionCall","src":"25212:55:124"},"nodeType":"YulExpressionStatement","src":"25212:55:124"},{"nodeType":"YulVariableDeclaration","src":"25276:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25308:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25316:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25304:3:124"},"nodeType":"YulFunctionCall","src":"25304:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25298:5:124"},"nodeType":"YulFunctionCall","src":"25298:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"25280:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"25347:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25378:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25363:3:124"},"nodeType":"YulFunctionCall","src":"25363:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"25330:16:124"},"nodeType":"YulFunctionCall","src":"25330:53:124"},"nodeType":"YulExpressionStatement","src":"25330:53:124"},{"nodeType":"YulVariableDeclaration","src":"25392:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25424:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"25432:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25420:3:124"},"nodeType":"YulFunctionCall","src":"25420:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25414:5:124"},"nodeType":"YulFunctionCall","src":"25414:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"25396:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"25464:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25484:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25495:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25480:3:124"},"nodeType":"YulFunctionCall","src":"25480:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25445:18:124"},"nodeType":"YulFunctionCall","src":"25445:55:124"},"nodeType":"YulExpressionStatement","src":"25445:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24281:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"24292:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"24300:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24308:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24316:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24324:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24335:4:124","type":""}],"src":"23839:1667:124"},{"body":{"nodeType":"YulBlock","src":"25776:428:124","statements":[{"nodeType":"YulAssignment","src":"25786:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25798:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25809:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25794:3:124"},"nodeType":"YulFunctionCall","src":"25794:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25786:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"25822:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"25832:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25826:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25890:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25905:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25913:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25901:3:124"},"nodeType":"YulFunctionCall","src":"25901:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25883:6:124"},"nodeType":"YulFunctionCall","src":"25883:34:124"},"nodeType":"YulExpressionStatement","src":"25883:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25937:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25948:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25933:3:124"},"nodeType":"YulFunctionCall","src":"25933:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25957:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25965:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25953:3:124"},"nodeType":"YulFunctionCall","src":"25953:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25926:6:124"},"nodeType":"YulFunctionCall","src":"25926:43:124"},"nodeType":"YulExpressionStatement","src":"25926:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25989:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26000:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25985:3:124"},"nodeType":"YulFunctionCall","src":"25985:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"26005:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25978:6:124"},"nodeType":"YulFunctionCall","src":"25978:34:124"},"nodeType":"YulExpressionStatement","src":"25978:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26032:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26043:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26028:3:124"},"nodeType":"YulFunctionCall","src":"26028:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"26048:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26021:6:124"},"nodeType":"YulFunctionCall","src":"26021:34:124"},"nodeType":"YulExpressionStatement","src":"26021:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26075:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26086:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26071:3:124"},"nodeType":"YulFunctionCall","src":"26071:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26096:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26104:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26092:3:124"},"nodeType":"YulFunctionCall","src":"26092:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26064:6:124"},"nodeType":"YulFunctionCall","src":"26064:46:124"},"nodeType":"YulExpressionStatement","src":"26064:46:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26130:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26141:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26126:3:124"},"nodeType":"YulFunctionCall","src":"26126:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"26147:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26119:6:124"},"nodeType":"YulFunctionCall","src":"26119:35:124"},"nodeType":"YulExpressionStatement","src":"26119:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26185:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26170:3:124"},"nodeType":"YulFunctionCall","src":"26170:19:124"},{"name":"value6","nodeType":"YulIdentifier","src":"26191:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26163:6:124"},"nodeType":"YulFunctionCall","src":"26163:35:124"},"nodeType":"YulExpressionStatement","src":"26163:35:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25697:9:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"25708:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"25716:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"25724:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25732:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25740:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25748:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25756:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25767:4:124","type":""}],"src":"25511:693:124"},{"body":{"nodeType":"YulBlock","src":"26591:485:124","statements":[{"nodeType":"YulAssignment","src":"26601:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26613:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26624:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26609:3:124"},"nodeType":"YulFunctionCall","src":"26609:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26601:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26644:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"26655:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26637:6:124"},"nodeType":"YulFunctionCall","src":"26637:25:124"},"nodeType":"YulExpressionStatement","src":"26637:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26682:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26693:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26678:3:124"},"nodeType":"YulFunctionCall","src":"26678:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"26698:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26671:6:124"},"nodeType":"YulFunctionCall","src":"26671:34:124"},"nodeType":"YulExpressionStatement","src":"26671:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26725:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26736:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26721:3:124"},"nodeType":"YulFunctionCall","src":"26721:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"26741:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26714:6:124"},"nodeType":"YulFunctionCall","src":"26714:34:124"},"nodeType":"YulExpressionStatement","src":"26714:34:124"},{"nodeType":"YulVariableDeclaration","src":"26757:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"26767:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26761:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26829:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26840:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26825:3:124"},"nodeType":"YulFunctionCall","src":"26825:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26855:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26849:5:124"},"nodeType":"YulFunctionCall","src":"26849:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"26864:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26845:3:124"},"nodeType":"YulFunctionCall","src":"26845:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26818:6:124"},"nodeType":"YulFunctionCall","src":"26818:50:124"},"nodeType":"YulExpressionStatement","src":"26818:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26888:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26899:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26884:3:124"},"nodeType":"YulFunctionCall","src":"26884:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26915:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26923:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26911:3:124"},"nodeType":"YulFunctionCall","src":"26911:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26905:5:124"},"nodeType":"YulFunctionCall","src":"26905:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26877:6:124"},"nodeType":"YulFunctionCall","src":"26877:51:124"},"nodeType":"YulExpressionStatement","src":"26877:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26948:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26959:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26944:3:124"},"nodeType":"YulFunctionCall","src":"26944:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26979:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26987:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26975:3:124"},"nodeType":"YulFunctionCall","src":"26975:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26969:5:124"},"nodeType":"YulFunctionCall","src":"26969:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"26993:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26965:3:124"},"nodeType":"YulFunctionCall","src":"26965:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26937:6:124"},"nodeType":"YulFunctionCall","src":"26937:60:124"},"nodeType":"YulExpressionStatement","src":"26937:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27017:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27028:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27013:3:124"},"nodeType":"YulFunctionCall","src":"27013:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27048:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"27056:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27044:3:124"},"nodeType":"YulFunctionCall","src":"27044:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27038:5:124"},"nodeType":"YulFunctionCall","src":"27038:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"27062:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27034:3:124"},"nodeType":"YulFunctionCall","src":"27034:35:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27006:6:124"},"nodeType":"YulFunctionCall","src":"27006:64:124"},"nodeType":"YulExpressionStatement","src":"27006:64:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26536:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26547:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26555:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26563:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26571:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26582:4:124","type":""}],"src":"26209:867:124"},{"body":{"nodeType":"YulBlock","src":"27202:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27219:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27230:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27212:6:124"},"nodeType":"YulFunctionCall","src":"27212:21:124"},"nodeType":"YulExpressionStatement","src":"27212:21:124"},{"nodeType":"YulAssignment","src":"27242:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27268:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27280:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27291:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27276:3:124"},"nodeType":"YulFunctionCall","src":"27276:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"27250:17:124"},"nodeType":"YulFunctionCall","src":"27250:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27242:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27171:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27182:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27193:4:124","type":""}],"src":"27081:220:124"},{"body":{"nodeType":"YulBlock","src":"27831:481:124","statements":[{"nodeType":"YulAssignment","src":"27841:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27853:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27864:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27849:3:124"},"nodeType":"YulFunctionCall","src":"27849:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27841:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27884:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"27895:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27877:6:124"},"nodeType":"YulFunctionCall","src":"27877:25:124"},"nodeType":"YulExpressionStatement","src":"27877:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27922:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27933:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27918:3:124"},"nodeType":"YulFunctionCall","src":"27918:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"27938:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27911:6:124"},"nodeType":"YulFunctionCall","src":"27911:34:124"},"nodeType":"YulExpressionStatement","src":"27911:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27965:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"27976:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27961:3:124"},"nodeType":"YulFunctionCall","src":"27961:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"27981:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27954:6:124"},"nodeType":"YulFunctionCall","src":"27954:34:124"},"nodeType":"YulExpressionStatement","src":"27954:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28008:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28019:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28004:3:124"},"nodeType":"YulFunctionCall","src":"28004:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"28024:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27997:6:124"},"nodeType":"YulFunctionCall","src":"27997:34:124"},"nodeType":"YulExpressionStatement","src":"27997:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28062:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28047:3:124"},"nodeType":"YulFunctionCall","src":"28047:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"28068:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28040:6:124"},"nodeType":"YulFunctionCall","src":"28040:35:124"},"nodeType":"YulExpressionStatement","src":"28040:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28095:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28106:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28091:3:124"},"nodeType":"YulFunctionCall","src":"28091:19:124"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28118:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28112:5:124"},"nodeType":"YulFunctionCall","src":"28112:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28084:6:124"},"nodeType":"YulFunctionCall","src":"28084:42:124"},"nodeType":"YulExpressionStatement","src":"28084:42:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28146:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28157:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28142:3:124"},"nodeType":"YulFunctionCall","src":"28142:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28177:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"28185:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28173:3:124"},"nodeType":"YulFunctionCall","src":"28173:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28167:5:124"},"nodeType":"YulFunctionCall","src":"28167:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"28191:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28163:3:124"},"nodeType":"YulFunctionCall","src":"28163:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28135:6:124"},"nodeType":"YulFunctionCall","src":"28135:100:124"},"nodeType":"YulExpressionStatement","src":"28135:100:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28255:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28266:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28251:3:124"},"nodeType":"YulFunctionCall","src":"28251:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28286:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"28294:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28282:3:124"},"nodeType":"YulFunctionCall","src":"28282:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28276:5:124"},"nodeType":"YulFunctionCall","src":"28276:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"28300:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28272:3:124"},"nodeType":"YulFunctionCall","src":"28272:33:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28244:6:124"},"nodeType":"YulFunctionCall","src":"28244:62:124"},"nodeType":"YulExpressionStatement","src":"28244:62:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27760:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"27771:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"27779:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"27787:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"27795:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"27803:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27811:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27822:4:124","type":""}],"src":"27306:1006:124"},{"body":{"nodeType":"YulBlock","src":"28349:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28366:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28369:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28359:6:124"},"nodeType":"YulFunctionCall","src":"28359:88:124"},"nodeType":"YulExpressionStatement","src":"28359:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28463:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"28466:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28456:6:124"},"nodeType":"YulFunctionCall","src":"28456:15:124"},"nodeType":"YulExpressionStatement","src":"28456:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28487:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28490:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28480:6:124"},"nodeType":"YulFunctionCall","src":"28480:15:124"},"nodeType":"YulExpressionStatement","src":"28480:15:124"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"28317:184:124"},{"body":{"nodeType":"YulBlock","src":"28564:243:124","statements":[{"body":{"nodeType":"YulBlock","src":"28606:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28627:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28630:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28620:6:124"},"nodeType":"YulFunctionCall","src":"28620:88:124"},"nodeType":"YulExpressionStatement","src":"28620:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28728:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"28731:4:124","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28721:6:124"},"nodeType":"YulFunctionCall","src":"28721:15:124"},"nodeType":"YulExpressionStatement","src":"28721:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28756:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28759:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28749:6:124"},"nodeType":"YulFunctionCall","src":"28749:15:124"},"nodeType":"YulExpressionStatement","src":"28749:15:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28587:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"28594:1:124","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"28584:2:124"},"nodeType":"YulFunctionCall","src":"28584:12:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28577:6:124"},"nodeType":"YulFunctionCall","src":"28577:20:124"},"nodeType":"YulIf","src":"28574:200:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28790:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"28795:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28783:6:124"},"nodeType":"YulFunctionCall","src":"28783:18:124"},"nodeType":"YulExpressionStatement","src":"28783:18:124"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"28548:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"28555:3:124","type":""}],"src":"28506:301:124"},{"body":{"nodeType":"YulBlock","src":"29192:616:124","statements":[{"nodeType":"YulAssignment","src":"29202:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29214:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29225:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29210:3:124"},"nodeType":"YulFunctionCall","src":"29210:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29202:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29245:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"29256:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29238:6:124"},"nodeType":"YulFunctionCall","src":"29238:25:124"},"nodeType":"YulExpressionStatement","src":"29238:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29283:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29294:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29279:3:124"},"nodeType":"YulFunctionCall","src":"29279:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"29299:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29272:6:124"},"nodeType":"YulFunctionCall","src":"29272:34:124"},"nodeType":"YulExpressionStatement","src":"29272:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29326:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29337:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29322:3:124"},"nodeType":"YulFunctionCall","src":"29322:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"29342:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29315:6:124"},"nodeType":"YulFunctionCall","src":"29315:34:124"},"nodeType":"YulExpressionStatement","src":"29315:34:124"},{"nodeType":"YulVariableDeclaration","src":"29358:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"29368:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"29362:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29430:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29441:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29426:3:124"},"nodeType":"YulFunctionCall","src":"29426:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29456:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29450:5:124"},"nodeType":"YulFunctionCall","src":"29450:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"29465:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29446:3:124"},"nodeType":"YulFunctionCall","src":"29446:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29419:6:124"},"nodeType":"YulFunctionCall","src":"29419:50:124"},"nodeType":"YulExpressionStatement","src":"29419:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29489:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29500:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29485:3:124"},"nodeType":"YulFunctionCall","src":"29485:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29516:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29524:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29512:3:124"},"nodeType":"YulFunctionCall","src":"29512:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29506:5:124"},"nodeType":"YulFunctionCall","src":"29506:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29478:6:124"},"nodeType":"YulFunctionCall","src":"29478:51:124"},"nodeType":"YulExpressionStatement","src":"29478:51:124"},{"nodeType":"YulVariableDeclaration","src":"29538:42:124","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29568:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29576:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29564:3:124"},"nodeType":"YulFunctionCall","src":"29564:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29558:5:124"},"nodeType":"YulFunctionCall","src":"29558:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"29542:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"29622:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29651:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29636:3:124"},"nodeType":"YulFunctionCall","src":"29636:19:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"29589:32:124"},"nodeType":"YulFunctionCall","src":"29589:67:124"},"nodeType":"YulExpressionStatement","src":"29589:67:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29676:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29687:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29672:3:124"},"nodeType":"YulFunctionCall","src":"29672:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29707:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29715:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29703:3:124"},"nodeType":"YulFunctionCall","src":"29703:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29697:5:124"},"nodeType":"YulFunctionCall","src":"29697:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"29721:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29693:3:124"},"nodeType":"YulFunctionCall","src":"29693:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29665:6:124"},"nodeType":"YulFunctionCall","src":"29665:60:124"},"nodeType":"YulExpressionStatement","src":"29665:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29745:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29756:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29741:3:124"},"nodeType":"YulFunctionCall","src":"29741:19:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29786:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"29794:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29782:3:124"},"nodeType":"YulFunctionCall","src":"29782:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29776:5:124"},"nodeType":"YulFunctionCall","src":"29776:23:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29769:6:124"},"nodeType":"YulFunctionCall","src":"29769:31:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29762:6:124"},"nodeType":"YulFunctionCall","src":"29762:39:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29734:6:124"},"nodeType":"YulFunctionCall","src":"29734:68:124"},"nodeType":"YulExpressionStatement","src":"29734:68:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29137:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29148:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29156:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29164:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29172:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29183:4:124","type":""}],"src":"28812:996:124"},{"body":{"nodeType":"YulBlock","src":"29894:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"29940:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29949:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29952:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29942:6:124"},"nodeType":"YulFunctionCall","src":"29942:12:124"},"nodeType":"YulExpressionStatement","src":"29942:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29915:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"29924:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29911:3:124"},"nodeType":"YulFunctionCall","src":"29911:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"29936:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29907:3:124"},"nodeType":"YulFunctionCall","src":"29907:32:124"},"nodeType":"YulIf","src":"29904:52:124"},{"nodeType":"YulAssignment","src":"29965:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29981:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29975:5:124"},"nodeType":"YulFunctionCall","src":"29975:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"29965:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29860:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"29871:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"29883:6:124","type":""}],"src":"29813:184:124"},{"body":{"nodeType":"YulBlock","src":"30246:716:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30263:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"30274:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30256:6:124"},"nodeType":"YulFunctionCall","src":"30256:25:124"},"nodeType":"YulExpressionStatement","src":"30256:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30301:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30312:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30297:3:124"},"nodeType":"YulFunctionCall","src":"30297:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"30317:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30290:6:124"},"nodeType":"YulFunctionCall","src":"30290:30:124"},"nodeType":"YulExpressionStatement","src":"30290:30:124"},{"nodeType":"YulVariableDeclaration","src":"30329:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"30339:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"30333:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30412:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30397:3:124"},"nodeType":"YulFunctionCall","src":"30397:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30427:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30421:5:124"},"nodeType":"YulFunctionCall","src":"30421:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"30436:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30417:3:124"},"nodeType":"YulFunctionCall","src":"30417:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30390:6:124"},"nodeType":"YulFunctionCall","src":"30390:50:124"},"nodeType":"YulExpressionStatement","src":"30390:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30460:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30471:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30456:3:124"},"nodeType":"YulFunctionCall","src":"30456:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30490:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30498:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30486:3:124"},"nodeType":"YulFunctionCall","src":"30486:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30480:5:124"},"nodeType":"YulFunctionCall","src":"30480:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"30504:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30476:3:124"},"nodeType":"YulFunctionCall","src":"30476:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30449:6:124"},"nodeType":"YulFunctionCall","src":"30449:59:124"},"nodeType":"YulExpressionStatement","src":"30449:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30528:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30539:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30524:3:124"},"nodeType":"YulFunctionCall","src":"30524:19:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30555:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30563:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30551:3:124"},"nodeType":"YulFunctionCall","src":"30551:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30545:5:124"},"nodeType":"YulFunctionCall","src":"30545:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30517:6:124"},"nodeType":"YulFunctionCall","src":"30517:51:124"},"nodeType":"YulExpressionStatement","src":"30517:51:124"},{"nodeType":"YulVariableDeclaration","src":"30577:42:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30607:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30615:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30603:3:124"},"nodeType":"YulFunctionCall","src":"30603:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30597:5:124"},"nodeType":"YulFunctionCall","src":"30597:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"30581:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30639:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30650:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30635:3:124"},"nodeType":"YulFunctionCall","src":"30635:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"30656:4:124","type":"","value":"0xe0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30628:6:124"},"nodeType":"YulFunctionCall","src":"30628:33:124"},"nodeType":"YulExpressionStatement","src":"30628:33:124"},{"nodeType":"YulVariableDeclaration","src":"30670:66:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"30702:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30720:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30731:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30716:3:124"},"nodeType":"YulFunctionCall","src":"30716:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"30684:17:124"},"nodeType":"YulFunctionCall","src":"30684:52:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"30674:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30756:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30767:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30752:3:124"},"nodeType":"YulFunctionCall","src":"30752:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30787:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30795:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30783:3:124"},"nodeType":"YulFunctionCall","src":"30783:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30777:5:124"},"nodeType":"YulFunctionCall","src":"30777:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"30802:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30773:3:124"},"nodeType":"YulFunctionCall","src":"30773:36:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30745:6:124"},"nodeType":"YulFunctionCall","src":"30745:65:124"},"nodeType":"YulExpressionStatement","src":"30745:65:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30830:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30841:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30826:3:124"},"nodeType":"YulFunctionCall","src":"30826:20:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30858:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30866:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30854:3:124"},"nodeType":"YulFunctionCall","src":"30854:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30848:5:124"},"nodeType":"YulFunctionCall","src":"30848:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30819:6:124"},"nodeType":"YulFunctionCall","src":"30819:53:124"},"nodeType":"YulExpressionStatement","src":"30819:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30892:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"30903:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30888:3:124"},"nodeType":"YulFunctionCall","src":"30888:19:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30919:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"30927:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30915:3:124"},"nodeType":"YulFunctionCall","src":"30915:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30909:5:124"},"nodeType":"YulFunctionCall","src":"30909:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30881:6:124"},"nodeType":"YulFunctionCall","src":"30881:52:124"},"nodeType":"YulExpressionStatement","src":"30881:52:124"},{"nodeType":"YulAssignment","src":"30942:14:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"30950:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30942:4:124"}]}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30207:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"30218:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"30226:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30237:4:124","type":""}],"src":"30002:960:124"},{"body":{"nodeType":"YulBlock","src":"31454:545:124","statements":[{"nodeType":"YulAssignment","src":"31464:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31476:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31487:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31472:3:124"},"nodeType":"YulFunctionCall","src":"31472:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31464:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31507:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"31518:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31500:6:124"},"nodeType":"YulFunctionCall","src":"31500:25:124"},"nodeType":"YulExpressionStatement","src":"31500:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31545:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31556:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31541:3:124"},"nodeType":"YulFunctionCall","src":"31541:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"31561:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31534:6:124"},"nodeType":"YulFunctionCall","src":"31534:34:124"},"nodeType":"YulExpressionStatement","src":"31534:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31599:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31584:3:124"},"nodeType":"YulFunctionCall","src":"31584:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"31604:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31577:6:124"},"nodeType":"YulFunctionCall","src":"31577:34:124"},"nodeType":"YulExpressionStatement","src":"31577:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31642:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31627:3:124"},"nodeType":"YulFunctionCall","src":"31627:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"31647:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31620:6:124"},"nodeType":"YulFunctionCall","src":"31620:34:124"},"nodeType":"YulExpressionStatement","src":"31620:34:124"},{"nodeType":"YulVariableDeclaration","src":"31663:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"31673:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"31667:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31735:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31746:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31731:3:124"},"nodeType":"YulFunctionCall","src":"31731:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"31756:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"31764:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31752:3:124"},"nodeType":"YulFunctionCall","src":"31752:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31724:6:124"},"nodeType":"YulFunctionCall","src":"31724:44:124"},"nodeType":"YulExpressionStatement","src":"31724:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31788:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31799:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31784:3:124"},"nodeType":"YulFunctionCall","src":"31784:19:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"31819:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31812:6:124"},"nodeType":"YulFunctionCall","src":"31812:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31805:6:124"},"nodeType":"YulFunctionCall","src":"31805:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31777:6:124"},"nodeType":"YulFunctionCall","src":"31777:51:124"},"nodeType":"YulExpressionStatement","src":"31777:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31848:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31859:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31844:3:124"},"nodeType":"YulFunctionCall","src":"31844:19:124"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"31869:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31877:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31865:3:124"},"nodeType":"YulFunctionCall","src":"31865:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31837:6:124"},"nodeType":"YulFunctionCall","src":"31837:48:124"},"nodeType":"YulExpressionStatement","src":"31837:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31905:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31916:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31901:3:124"},"nodeType":"YulFunctionCall","src":"31901:19:124"},{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"31926:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"31934:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31922:3:124"},"nodeType":"YulFunctionCall","src":"31922:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31894:6:124"},"nodeType":"YulFunctionCall","src":"31894:44:124"},"nodeType":"YulExpressionStatement","src":"31894:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31958:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"31969:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31954:3:124"},"nodeType":"YulFunctionCall","src":"31954:19:124"},{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"31979:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"31987:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31975:3:124"},"nodeType":"YulFunctionCall","src":"31975:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31947:6:124"},"nodeType":"YulFunctionCall","src":"31947:46:124"},"nodeType":"YulExpressionStatement","src":"31947:46:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"31359:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"31370:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"31378:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"31386:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"31394:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"31402:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"31410:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"31418:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"31426:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"31434:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"31445:4:124","type":""}],"src":"30967:1032:124"},{"body":{"nodeType":"YulBlock","src":"32246:211:124","statements":[{"nodeType":"YulAssignment","src":"32256:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32268:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32279:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32264:3:124"},"nodeType":"YulFunctionCall","src":"32264:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32256:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32298:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"32309:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32291:6:124"},"nodeType":"YulFunctionCall","src":"32291:25:124"},"nodeType":"YulExpressionStatement","src":"32291:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32336:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32347:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32332:3:124"},"nodeType":"YulFunctionCall","src":"32332:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"32352:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32325:6:124"},"nodeType":"YulFunctionCall","src":"32325:34:124"},"nodeType":"YulExpressionStatement","src":"32325:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32379:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32390:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32375:3:124"},"nodeType":"YulFunctionCall","src":"32375:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"32399:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"32407:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32395:3:124"},"nodeType":"YulFunctionCall","src":"32395:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32368:6:124"},"nodeType":"YulFunctionCall","src":"32368:83:124"},"nodeType":"YulExpressionStatement","src":"32368:83:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32199:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32210:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32218:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32226:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32237:4:124","type":""}],"src":"32004:453:124"},{"body":{"nodeType":"YulBlock","src":"32928:658:124","statements":[{"nodeType":"YulAssignment","src":"32938:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32950:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"32961:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32946:3:124"},"nodeType":"YulFunctionCall","src":"32946:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32938:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32981:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"32992:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32974:6:124"},"nodeType":"YulFunctionCall","src":"32974:25:124"},"nodeType":"YulExpressionStatement","src":"32974:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33019:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33030:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33015:3:124"},"nodeType":"YulFunctionCall","src":"33015:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"33035:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33008:6:124"},"nodeType":"YulFunctionCall","src":"33008:34:124"},"nodeType":"YulExpressionStatement","src":"33008:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33062:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33073:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33058:3:124"},"nodeType":"YulFunctionCall","src":"33058:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"33078:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33051:6:124"},"nodeType":"YulFunctionCall","src":"33051:34:124"},"nodeType":"YulExpressionStatement","src":"33051:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33105:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33116:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33101:3:124"},"nodeType":"YulFunctionCall","src":"33101:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"33121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33094:6:124"},"nodeType":"YulFunctionCall","src":"33094:34:124"},"nodeType":"YulExpressionStatement","src":"33094:34:124"},{"nodeType":"YulVariableDeclaration","src":"33137:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"33147:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"33141:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33209:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33220:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33205:3:124"},"nodeType":"YulFunctionCall","src":"33205:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33236:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33230:5:124"},"nodeType":"YulFunctionCall","src":"33230:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"33245:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33226:3:124"},"nodeType":"YulFunctionCall","src":"33226:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33198:6:124"},"nodeType":"YulFunctionCall","src":"33198:51:124"},"nodeType":"YulExpressionStatement","src":"33198:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33269:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33280:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33265:3:124"},"nodeType":"YulFunctionCall","src":"33265:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33296:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33304:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33292:3:124"},"nodeType":"YulFunctionCall","src":"33292:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33286:5:124"},"nodeType":"YulFunctionCall","src":"33286:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33258:6:124"},"nodeType":"YulFunctionCall","src":"33258:51:124"},"nodeType":"YulExpressionStatement","src":"33258:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33329:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33340:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33325:3:124"},"nodeType":"YulFunctionCall","src":"33325:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33360:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33368:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33356:3:124"},"nodeType":"YulFunctionCall","src":"33356:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33350:5:124"},"nodeType":"YulFunctionCall","src":"33350:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"33374:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33346:3:124"},"nodeType":"YulFunctionCall","src":"33346:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33318:6:124"},"nodeType":"YulFunctionCall","src":"33318:60:124"},"nodeType":"YulExpressionStatement","src":"33318:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33398:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33409:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33394:3:124"},"nodeType":"YulFunctionCall","src":"33394:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33425:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33433:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33421:3:124"},"nodeType":"YulFunctionCall","src":"33421:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33415:5:124"},"nodeType":"YulFunctionCall","src":"33415:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33387:6:124"},"nodeType":"YulFunctionCall","src":"33387:51:124"},"nodeType":"YulExpressionStatement","src":"33387:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33458:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33469:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33454:3:124"},"nodeType":"YulFunctionCall","src":"33454:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33489:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33497:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33485:3:124"},"nodeType":"YulFunctionCall","src":"33485:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33479:5:124"},"nodeType":"YulFunctionCall","src":"33479:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"33504:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33475:3:124"},"nodeType":"YulFunctionCall","src":"33475:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33447:6:124"},"nodeType":"YulFunctionCall","src":"33447:61:124"},"nodeType":"YulExpressionStatement","src":"33447:61:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33528:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"33539:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33524:3:124"},"nodeType":"YulFunctionCall","src":"33524:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33559:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"33567:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33555:3:124"},"nodeType":"YulFunctionCall","src":"33555:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33549:5:124"},"nodeType":"YulFunctionCall","src":"33549:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"33574:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33545:3:124"},"nodeType":"YulFunctionCall","src":"33545:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33517:6:124"},"nodeType":"YulFunctionCall","src":"33517:63:124"},"nodeType":"YulExpressionStatement","src":"33517:63:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32865:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"32876:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"32884:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32892:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32900:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32908:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32919:4:124","type":""}],"src":"32462:1124:124"},{"body":{"nodeType":"YulBlock","src":"33979:430:124","statements":[{"nodeType":"YulAssignment","src":"33989:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34001:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34012:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33997:3:124"},"nodeType":"YulFunctionCall","src":"33997:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33989:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34032:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"34043:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34025:6:124"},"nodeType":"YulFunctionCall","src":"34025:25:124"},"nodeType":"YulExpressionStatement","src":"34025:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34070:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34081:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34066:3:124"},"nodeType":"YulFunctionCall","src":"34066:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"34086:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34059:6:124"},"nodeType":"YulFunctionCall","src":"34059:34:124"},"nodeType":"YulExpressionStatement","src":"34059:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34113:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34124:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34109:3:124"},"nodeType":"YulFunctionCall","src":"34109:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"34129:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34102:6:124"},"nodeType":"YulFunctionCall","src":"34102:34:124"},"nodeType":"YulExpressionStatement","src":"34102:34:124"},{"nodeType":"YulVariableDeclaration","src":"34145:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"34155:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"34149:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34217:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34228:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34213:3:124"},"nodeType":"YulFunctionCall","src":"34213:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"34237:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34245:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34233:3:124"},"nodeType":"YulFunctionCall","src":"34233:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34206:6:124"},"nodeType":"YulFunctionCall","src":"34206:43:124"},"nodeType":"YulExpressionStatement","src":"34206:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34269:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34280:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34265:3:124"},"nodeType":"YulFunctionCall","src":"34265:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"34286:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34258:6:124"},"nodeType":"YulFunctionCall","src":"34258:35:124"},"nodeType":"YulExpressionStatement","src":"34258:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34313:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34324:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34309:3:124"},"nodeType":"YulFunctionCall","src":"34309:19:124"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"34334:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"34342:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34330:3:124"},"nodeType":"YulFunctionCall","src":"34330:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34302:6:124"},"nodeType":"YulFunctionCall","src":"34302:44:124"},"nodeType":"YulExpressionStatement","src":"34302:44:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34366:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"34377:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34362:3:124"},"nodeType":"YulFunctionCall","src":"34362:19:124"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"34387:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34395:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34383:3:124"},"nodeType":"YulFunctionCall","src":"34383:19:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34355:6:124"},"nodeType":"YulFunctionCall","src":"34355:48:124"},"nodeType":"YulExpressionStatement","src":"34355:48:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33900:9:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"33911:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"33919:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"33927:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"33935:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"33943:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"33951:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"33959:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33970:4:124","type":""}],"src":"33591:818:124"},{"body":{"nodeType":"YulBlock","src":"34469:382:124","statements":[{"nodeType":"YulAssignment","src":"34479:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34493:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"34496:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"34489:3:124"},"nodeType":"YulFunctionCall","src":"34489:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"34479:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"34510:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34540:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"34546:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34536:3:124"},"nodeType":"YulFunctionCall","src":"34536:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"34514:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"34587:31:124","statements":[{"nodeType":"YulAssignment","src":"34589:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"34603:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34611:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34599:3:124"},"nodeType":"YulFunctionCall","src":"34599:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"34589:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"34567:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"34560:6:124"},"nodeType":"YulFunctionCall","src":"34560:26:124"},"nodeType":"YulIf","src":"34557:61:124"},{"body":{"nodeType":"YulBlock","src":"34677:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34698:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34701:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34691:6:124"},"nodeType":"YulFunctionCall","src":"34691:88:124"},"nodeType":"YulExpressionStatement","src":"34691:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34799:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"34802:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34792:6:124"},"nodeType":"YulFunctionCall","src":"34792:15:124"},"nodeType":"YulExpressionStatement","src":"34792:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34827:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34830:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"34820:6:124"},"nodeType":"YulFunctionCall","src":"34820:15:124"},"nodeType":"YulExpressionStatement","src":"34820:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"34633:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"34656:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"34664:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"34653:2:124"},"nodeType":"YulFunctionCall","src":"34653:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"34630:2:124"},"nodeType":"YulFunctionCall","src":"34630:38:124"},"nodeType":"YulIf","src":"34627:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"34449:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"34458:6:124","type":""}],"src":"34414:437:124"},{"body":{"nodeType":"YulBlock","src":"35170:746:124","statements":[{"nodeType":"YulAssignment","src":"35180:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35192:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35203:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35188:3:124"},"nodeType":"YulFunctionCall","src":"35188:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"35180:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35223:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"35234:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35216:6:124"},"nodeType":"YulFunctionCall","src":"35216:25:124"},"nodeType":"YulExpressionStatement","src":"35216:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35261:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35272:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35257:3:124"},"nodeType":"YulFunctionCall","src":"35257:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"35277:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35250:6:124"},"nodeType":"YulFunctionCall","src":"35250:34:124"},"nodeType":"YulExpressionStatement","src":"35250:34:124"},{"nodeType":"YulVariableDeclaration","src":"35293:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"35303:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"35297:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35365:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35376:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35361:3:124"},"nodeType":"YulFunctionCall","src":"35361:18:124"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35391:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35385:5:124"},"nodeType":"YulFunctionCall","src":"35385:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35400:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35381:3:124"},"nodeType":"YulFunctionCall","src":"35381:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35354:6:124"},"nodeType":"YulFunctionCall","src":"35354:50:124"},"nodeType":"YulExpressionStatement","src":"35354:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35424:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35435:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35420:3:124"},"nodeType":"YulFunctionCall","src":"35420:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35454:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35462:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35450:3:124"},"nodeType":"YulFunctionCall","src":"35450:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35444:5:124"},"nodeType":"YulFunctionCall","src":"35444:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35468:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35440:3:124"},"nodeType":"YulFunctionCall","src":"35440:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35413:6:124"},"nodeType":"YulFunctionCall","src":"35413:59:124"},"nodeType":"YulExpressionStatement","src":"35413:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35492:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35503:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35488:3:124"},"nodeType":"YulFunctionCall","src":"35488:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35523:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35531:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35519:3:124"},"nodeType":"YulFunctionCall","src":"35519:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35513:5:124"},"nodeType":"YulFunctionCall","src":"35513:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35537:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35509:3:124"},"nodeType":"YulFunctionCall","src":"35509:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35481:6:124"},"nodeType":"YulFunctionCall","src":"35481:60:124"},"nodeType":"YulExpressionStatement","src":"35481:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35561:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35572:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35557:3:124"},"nodeType":"YulFunctionCall","src":"35557:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35592:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35600:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35588:3:124"},"nodeType":"YulFunctionCall","src":"35588:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35582:5:124"},"nodeType":"YulFunctionCall","src":"35582:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35606:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35578:3:124"},"nodeType":"YulFunctionCall","src":"35578:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35550:6:124"},"nodeType":"YulFunctionCall","src":"35550:60:124"},"nodeType":"YulExpressionStatement","src":"35550:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35630:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35641:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35626:3:124"},"nodeType":"YulFunctionCall","src":"35626:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35661:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35669:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35657:3:124"},"nodeType":"YulFunctionCall","src":"35657:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35651:5:124"},"nodeType":"YulFunctionCall","src":"35651:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"35676:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35647:3:124"},"nodeType":"YulFunctionCall","src":"35647:32:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35619:6:124"},"nodeType":"YulFunctionCall","src":"35619:61:124"},"nodeType":"YulExpressionStatement","src":"35619:61:124"},{"nodeType":"YulVariableDeclaration","src":"35689:43:124","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35719:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35727:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35715:3:124"},"nodeType":"YulFunctionCall","src":"35715:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35709:5:124"},"nodeType":"YulFunctionCall","src":"35709:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"35693:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"35759:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35777:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35788:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35773:3:124"},"nodeType":"YulFunctionCall","src":"35773:19:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"35741:17:124"},"nodeType":"YulFunctionCall","src":"35741:52:124"},"nodeType":"YulExpressionStatement","src":"35741:52:124"},{"nodeType":"YulVariableDeclaration","src":"35802:45:124","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35834:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"35842:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35830:3:124"},"nodeType":"YulFunctionCall","src":"35830:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35824:5:124"},"nodeType":"YulFunctionCall","src":"35824:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"35806:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"35874:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35894:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"35905:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35890:3:124"},"nodeType":"YulFunctionCall","src":"35890:19:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"35856:17:124"},"nodeType":"YulFunctionCall","src":"35856:54:124"},"nodeType":"YulExpressionStatement","src":"35856:54:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35123:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"35134:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"35142:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"35150:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"35161:4:124","type":""}],"src":"34856:1060:124"},{"body":{"nodeType":"YulBlock","src":"35999:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"36045:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36054:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36057:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"36047:6:124"},"nodeType":"YulFunctionCall","src":"36047:12:124"},"nodeType":"YulExpressionStatement","src":"36047:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"36020:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"36029:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36016:3:124"},"nodeType":"YulFunctionCall","src":"36016:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"36041:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"36012:3:124"},"nodeType":"YulFunctionCall","src":"36012:32:124"},"nodeType":"YulIf","src":"36009:52:124"},{"nodeType":"YulVariableDeclaration","src":"36070:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36089:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36083:5:124"},"nodeType":"YulFunctionCall","src":"36083:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"36074:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"36130:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"36108:21:124"},"nodeType":"YulFunctionCall","src":"36108:28:124"},"nodeType":"YulExpressionStatement","src":"36108:28:124"},{"nodeType":"YulAssignment","src":"36145:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"36155:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"36145:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35965:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"35976:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"35988:6:124","type":""}],"src":"35921:245:124"},{"body":{"nodeType":"YulBlock","src":"36203:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36220:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36223:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36213:6:124"},"nodeType":"YulFunctionCall","src":"36213:88:124"},"nodeType":"YulExpressionStatement","src":"36213:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36317:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"36320:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36310:6:124"},"nodeType":"YulFunctionCall","src":"36310:15:124"},"nodeType":"YulExpressionStatement","src":"36310:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36341:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36344:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"36334:6:124"},"nodeType":"YulFunctionCall","src":"36334:15:124"},"nodeType":"YulExpressionStatement","src":"36334:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"36171:184:124"},{"body":{"nodeType":"YulBlock","src":"36406:151:124","statements":[{"nodeType":"YulVariableDeclaration","src":"36416:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"36426:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"36420:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"36441:29:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"36460:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36467:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36456:3:124"},"nodeType":"YulFunctionCall","src":"36456:14:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"36445:7:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"36498:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"36500:16:124"},"nodeType":"YulFunctionCall","src":"36500:18:124"},"nodeType":"YulExpressionStatement","src":"36500:18:124"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"36485:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"36494:2:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"36482:2:124"},"nodeType":"YulFunctionCall","src":"36482:15:124"},"nodeType":"YulIf","src":"36479:41:124"},{"nodeType":"YulAssignment","src":"36529:22:124","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"36540:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"36549:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36536:3:124"},"nodeType":"YulFunctionCall","src":"36536:15:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"36529:3:124"}]}]},"name":"increment_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"36388:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"36398:3:124","type":""}],"src":"36360:197:124"},{"body":{"nodeType":"YulBlock","src":"36838:281:124","statements":[{"nodeType":"YulAssignment","src":"36848:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36860:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36871:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36856:3:124"},"nodeType":"YulFunctionCall","src":"36856:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"36848:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36891:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"36902:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36884:6:124"},"nodeType":"YulFunctionCall","src":"36884:25:124"},"nodeType":"YulExpressionStatement","src":"36884:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36929:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36940:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36925:3:124"},"nodeType":"YulFunctionCall","src":"36925:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"36945:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36918:6:124"},"nodeType":"YulFunctionCall","src":"36918:34:124"},"nodeType":"YulExpressionStatement","src":"36918:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36972:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"36983:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36968:3:124"},"nodeType":"YulFunctionCall","src":"36968:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36992:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"37000:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36988:3:124"},"nodeType":"YulFunctionCall","src":"36988:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36961:6:124"},"nodeType":"YulFunctionCall","src":"36961:83:124"},"nodeType":"YulExpressionStatement","src":"36961:83:124"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"37086:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37098:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37109:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37094:3:124"},"nodeType":"YulFunctionCall","src":"37094:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"37053:32:124"},"nodeType":"YulFunctionCall","src":"37053:60:124"},"nodeType":"YulExpressionStatement","src":"37053:60:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36783:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"36794:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"36802:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"36810:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"36818:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36829:4:124","type":""}],"src":"36562:557:124"},{"body":{"nodeType":"YulBlock","src":"37373:610:124","statements":[{"nodeType":"YulVariableDeclaration","src":"37383:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37412:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37397:3:124"},"nodeType":"YulFunctionCall","src":"37397:18:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"37387:6:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37431:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"37442:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37424:6:124"},"nodeType":"YulFunctionCall","src":"37424:25:124"},"nodeType":"YulExpressionStatement","src":"37424:25:124"},{"nodeType":"YulVariableDeclaration","src":"37458:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"37468:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"37462:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37490:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37501:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37486:3:124"},"nodeType":"YulFunctionCall","src":"37486:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"37506:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37479:6:124"},"nodeType":"YulFunctionCall","src":"37479:30:124"},"nodeType":"YulExpressionStatement","src":"37479:30:124"},{"nodeType":"YulVariableDeclaration","src":"37518:17:124","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"37529:6:124"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"37522:3:124","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"37551:6:124"},{"name":"value2","nodeType":"YulIdentifier","src":"37559:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37544:6:124"},"nodeType":"YulFunctionCall","src":"37544:22:124"},"nodeType":"YulExpressionStatement","src":"37544:22:124"},{"nodeType":"YulAssignment","src":"37575:25:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37586:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"37597:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37582:3:124"},"nodeType":"YulFunctionCall","src":"37582:18:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"37575:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"37609:20:124","value":{"name":"value1","nodeType":"YulIdentifier","src":"37623:6:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"37613:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"37638:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"37647:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"37642:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"37706:251:124","statements":[{"nodeType":"YulVariableDeclaration","src":"37720:33:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37746:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"37733:12:124"},"nodeType":"YulFunctionCall","src":"37733:20:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"37724:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37791:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"37766:24:124"},"nodeType":"YulFunctionCall","src":"37766:31:124"},"nodeType":"YulExpressionStatement","src":"37766:31:124"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"37817:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37826:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"37833:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37822:3:124"},"nodeType":"YulFunctionCall","src":"37822:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37810:6:124"},"nodeType":"YulFunctionCall","src":"37810:67:124"},"nodeType":"YulExpressionStatement","src":"37810:67:124"},{"nodeType":"YulAssignment","src":"37890:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"37901:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37906:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37897:3:124"},"nodeType":"YulFunctionCall","src":"37897:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"37890:3:124"}]},{"nodeType":"YulAssignment","src":"37922:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37936:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"37944:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37932:3:124"},"nodeType":"YulFunctionCall","src":"37932:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37922:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"37668:1:124"},{"name":"value2","nodeType":"YulIdentifier","src":"37671:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"37665:2:124"},"nodeType":"YulFunctionCall","src":"37665:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"37679:18:124","statements":[{"nodeType":"YulAssignment","src":"37681:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"37690:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"37693:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37686:3:124"},"nodeType":"YulFunctionCall","src":"37686:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"37681:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"37661:3:124","statements":[]},"src":"37657:300:124"},{"nodeType":"YulAssignment","src":"37966:11:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"37974:3:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37966:4:124"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37326:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"37337:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"37345:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"37353:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37364:4:124","type":""}],"src":"37124:859:124"},{"body":{"nodeType":"YulBlock","src":"38450:1498:124","statements":[{"nodeType":"YulAssignment","src":"38460:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38472:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38483:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38468:3:124"},"nodeType":"YulFunctionCall","src":"38468:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"38460:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38503:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"38514:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38496:6:124"},"nodeType":"YulFunctionCall","src":"38496:25:124"},"nodeType":"YulExpressionStatement","src":"38496:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38541:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38552:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38537:3:124"},"nodeType":"YulFunctionCall","src":"38537:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"38557:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38530:6:124"},"nodeType":"YulFunctionCall","src":"38530:34:124"},"nodeType":"YulExpressionStatement","src":"38530:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38584:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38595:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38580:3:124"},"nodeType":"YulFunctionCall","src":"38580:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"38600:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38573:6:124"},"nodeType":"YulFunctionCall","src":"38573:34:124"},"nodeType":"YulExpressionStatement","src":"38573:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38627:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38638:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38623:3:124"},"nodeType":"YulFunctionCall","src":"38623:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"38643:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38616:6:124"},"nodeType":"YulFunctionCall","src":"38616:34:124"},"nodeType":"YulExpressionStatement","src":"38616:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38684:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38678:5:124"},"nodeType":"YulFunctionCall","src":"38678:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38697:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38708:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38693:3:124"},"nodeType":"YulFunctionCall","src":"38693:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38659:18:124"},"nodeType":"YulFunctionCall","src":"38659:54:124"},"nodeType":"YulExpressionStatement","src":"38659:54:124"},{"nodeType":"YulVariableDeclaration","src":"38722:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38752:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38748:3:124"},"nodeType":"YulFunctionCall","src":"38748:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38742:5:124"},"nodeType":"YulFunctionCall","src":"38742:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"38726:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"38792:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38810:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38821:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38806:3:124"},"nodeType":"YulFunctionCall","src":"38806:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38773:18:124"},"nodeType":"YulFunctionCall","src":"38773:53:124"},"nodeType":"YulExpressionStatement","src":"38773:53:124"},{"nodeType":"YulVariableDeclaration","src":"38835:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38867:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38875:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38863:3:124"},"nodeType":"YulFunctionCall","src":"38863:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38857:5:124"},"nodeType":"YulFunctionCall","src":"38857:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"38839:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"38907:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38927:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38938:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38923:3:124"},"nodeType":"YulFunctionCall","src":"38923:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38888:18:124"},"nodeType":"YulFunctionCall","src":"38888:55:124"},"nodeType":"YulExpressionStatement","src":"38888:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38963:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"38974:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38959:3:124"},"nodeType":"YulFunctionCall","src":"38959:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38990:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"38998:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38986:3:124"},"nodeType":"YulFunctionCall","src":"38986:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38980:5:124"},"nodeType":"YulFunctionCall","src":"38980:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38952:6:124"},"nodeType":"YulFunctionCall","src":"38952:51:124"},"nodeType":"YulExpressionStatement","src":"38952:51:124"},{"nodeType":"YulVariableDeclaration","src":"39012:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39044:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39052:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39040:3:124"},"nodeType":"YulFunctionCall","src":"39040:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39034:5:124"},"nodeType":"YulFunctionCall","src":"39034:23:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"39016:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39066:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39076:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"39070:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"39121:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39141:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39152:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39137:3:124"},"nodeType":"YulFunctionCall","src":"39137:18:124"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"39088:32:124"},"nodeType":"YulFunctionCall","src":"39088:68:124"},"nodeType":"YulExpressionStatement","src":"39088:68:124"},{"nodeType":"YulVariableDeclaration","src":"39165:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39197:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39205:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39193:3:124"},"nodeType":"YulFunctionCall","src":"39193:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39187:5:124"},"nodeType":"YulFunctionCall","src":"39187:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"39169:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39219:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39229:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"39223:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"39259:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39279:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"39290:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39275:3:124"},"nodeType":"YulFunctionCall","src":"39275:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"39241:17:124"},"nodeType":"YulFunctionCall","src":"39241:53:124"},"nodeType":"YulExpressionStatement","src":"39241:53:124"},{"nodeType":"YulVariableDeclaration","src":"39303:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39335:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39343:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39331:3:124"},"nodeType":"YulFunctionCall","src":"39331:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39325:5:124"},"nodeType":"YulFunctionCall","src":"39325:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"39307:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39357:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39367:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"39361:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"39395:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39415:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"39426:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39411:3:124"},"nodeType":"YulFunctionCall","src":"39411:18:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"39379:15:124"},"nodeType":"YulFunctionCall","src":"39379:51:124"},"nodeType":"YulExpressionStatement","src":"39379:51:124"},{"nodeType":"YulVariableDeclaration","src":"39439:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39459:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"39467:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39455:3:124"},"nodeType":"YulFunctionCall","src":"39455:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39449:5:124"},"nodeType":"YulFunctionCall","src":"39449:23:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"39443:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39481:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"39491:3:124","type":"","value":"352"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"39485:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39514:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"39525:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39510:3:124"},"nodeType":"YulFunctionCall","src":"39510:18:124"},{"name":"_4","nodeType":"YulIdentifier","src":"39530:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39503:6:124"},"nodeType":"YulFunctionCall","src":"39503:30:124"},"nodeType":"YulExpressionStatement","src":"39503:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39553:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39564:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39549:3:124"},"nodeType":"YulFunctionCall","src":"39549:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39580:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"39588:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39576:3:124"},"nodeType":"YulFunctionCall","src":"39576:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39570:5:124"},"nodeType":"YulFunctionCall","src":"39570:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39542:6:124"},"nodeType":"YulFunctionCall","src":"39542:51:124"},"nodeType":"YulExpressionStatement","src":"39542:51:124"},{"nodeType":"YulVariableDeclaration","src":"39602:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39634:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"39642:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39630:3:124"},"nodeType":"YulFunctionCall","src":"39630:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39624:5:124"},"nodeType":"YulFunctionCall","src":"39624:22:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"39606:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"39674:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39694:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39705:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39690:3:124"},"nodeType":"YulFunctionCall","src":"39690:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39655:18:124"},"nodeType":"YulFunctionCall","src":"39655:55:124"},"nodeType":"YulExpressionStatement","src":"39655:55:124"},{"nodeType":"YulVariableDeclaration","src":"39719:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39751:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"39759:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39747:3:124"},"nodeType":"YulFunctionCall","src":"39747:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39741:5:124"},"nodeType":"YulFunctionCall","src":"39741:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"39723:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"39789:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39809:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39820:3:124","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39805:3:124"},"nodeType":"YulFunctionCall","src":"39805:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"39772:16:124"},"nodeType":"YulFunctionCall","src":"39772:53:124"},"nodeType":"YulExpressionStatement","src":"39772:53:124"},{"nodeType":"YulVariableDeclaration","src":"39834:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39866:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"39874:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39862:3:124"},"nodeType":"YulFunctionCall","src":"39862:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39856:5:124"},"nodeType":"YulFunctionCall","src":"39856:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"39838:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"39906:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39926:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"39937:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39922:3:124"},"nodeType":"YulFunctionCall","src":"39922:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39887:18:124"},"nodeType":"YulFunctionCall","src":"39887:55:124"},"nodeType":"YulExpressionStatement","src":"39887:55:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"38387:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"38398:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"38406:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"38414:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"38422:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"38430:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"38441:4:124","type":""}],"src":"37988:1960:124"},{"body":{"nodeType":"YulBlock","src":"40014:423:124","statements":[{"nodeType":"YulVariableDeclaration","src":"40024:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40044:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40038:5:124"},"nodeType":"YulFunctionCall","src":"40038:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"40028:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40066:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"40071:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40059:6:124"},"nodeType":"YulFunctionCall","src":"40059:19:124"},"nodeType":"YulExpressionStatement","src":"40059:19:124"},{"nodeType":"YulVariableDeclaration","src":"40087:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40097:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"40091:2:124","type":""}]},{"nodeType":"YulAssignment","src":"40110:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40121:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40126:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40117:3:124"},"nodeType":"YulFunctionCall","src":"40117:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40110:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"40138:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40156:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40163:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40152:3:124"},"nodeType":"YulFunctionCall","src":"40152:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"40142:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40175:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40184:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"40179:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"40243:169:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40264:3:124"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40279:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40273:5:124"},"nodeType":"YulFunctionCall","src":"40273:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"40288:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"40269:3:124"},"nodeType":"YulFunctionCall","src":"40269:62:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40257:6:124"},"nodeType":"YulFunctionCall","src":"40257:75:124"},"nodeType":"YulExpressionStatement","src":"40257:75:124"},{"nodeType":"YulAssignment","src":"40345:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40356:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40361:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40352:3:124"},"nodeType":"YulFunctionCall","src":"40352:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40345:3:124"}]},{"nodeType":"YulAssignment","src":"40377:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40391:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40399:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40387:3:124"},"nodeType":"YulFunctionCall","src":"40387:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40377:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40205:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"40208:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"40202:2:124"},"nodeType":"YulFunctionCall","src":"40202:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"40216:18:124","statements":[{"nodeType":"YulAssignment","src":"40218:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40227:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"40230:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40223:3:124"},"nodeType":"YulFunctionCall","src":"40223:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"40218:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"40198:3:124","statements":[]},"src":"40194:218:124"},{"nodeType":"YulAssignment","src":"40421:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"40428:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"40421:3:124"}]}]},"name":"abi_encode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"39991:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"39998:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"40006:3:124","type":""}],"src":"39953:484:124"},{"body":{"nodeType":"YulBlock","src":"40503:374:124","statements":[{"nodeType":"YulVariableDeclaration","src":"40513:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40533:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40527:5:124"},"nodeType":"YulFunctionCall","src":"40527:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"40517:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40555:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"40560:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40548:6:124"},"nodeType":"YulFunctionCall","src":"40548:19:124"},"nodeType":"YulExpressionStatement","src":"40548:19:124"},{"nodeType":"YulVariableDeclaration","src":"40576:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40586:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"40580:2:124","type":""}]},{"nodeType":"YulAssignment","src":"40599:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40610:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40615:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40606:3:124"},"nodeType":"YulFunctionCall","src":"40606:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40599:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"40627:28:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40645:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40652:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40641:3:124"},"nodeType":"YulFunctionCall","src":"40641:14:124"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"40631:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40664:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"40673:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"40668:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"40732:120:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40753:3:124"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40764:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40758:5:124"},"nodeType":"YulFunctionCall","src":"40758:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40746:6:124"},"nodeType":"YulFunctionCall","src":"40746:26:124"},"nodeType":"YulExpressionStatement","src":"40746:26:124"},{"nodeType":"YulAssignment","src":"40785:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40796:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40801:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40792:3:124"},"nodeType":"YulFunctionCall","src":"40792:12:124"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40785:3:124"}]},{"nodeType":"YulAssignment","src":"40817:25:124","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40831:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"40839:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40827:3:124"},"nodeType":"YulFunctionCall","src":"40827:15:124"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40817:6:124"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40694:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"40697:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"40691:2:124"},"nodeType":"YulFunctionCall","src":"40691:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"40705:18:124","statements":[{"nodeType":"YulAssignment","src":"40707:14:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40716:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"40719:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40712:3:124"},"nodeType":"YulFunctionCall","src":"40712:9:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"40707:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"40687:3:124","statements":[]},"src":"40683:169:124"},{"nodeType":"YulAssignment","src":"40861:10:124","value":{"name":"pos","nodeType":"YulIdentifier","src":"40868:3:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"40861:3:124"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"40480:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"40487:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"40495:3:124","type":""}],"src":"40442:435:124"},{"body":{"nodeType":"YulBlock","src":"41336:2157:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41353:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"41364:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41346:6:124"},"nodeType":"YulFunctionCall","src":"41346:25:124"},"nodeType":"YulExpressionStatement","src":"41346:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41391:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41402:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41387:3:124"},"nodeType":"YulFunctionCall","src":"41387:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"41407:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41380:6:124"},"nodeType":"YulFunctionCall","src":"41380:34:124"},"nodeType":"YulExpressionStatement","src":"41380:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41434:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41445:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41430:3:124"},"nodeType":"YulFunctionCall","src":"41430:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"41450:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41423:6:124"},"nodeType":"YulFunctionCall","src":"41423:34:124"},"nodeType":"YulExpressionStatement","src":"41423:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41477:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41488:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41473:3:124"},"nodeType":"YulFunctionCall","src":"41473:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"41493:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41466:6:124"},"nodeType":"YulFunctionCall","src":"41466:34:124"},"nodeType":"YulExpressionStatement","src":"41466:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41520:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41531:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41516:3:124"},"nodeType":"YulFunctionCall","src":"41516:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"41537:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41509:6:124"},"nodeType":"YulFunctionCall","src":"41509:32:124"},"nodeType":"YulExpressionStatement","src":"41509:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41575:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41569:5:124"},"nodeType":"YulFunctionCall","src":"41569:13:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41599:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41584:3:124"},"nodeType":"YulFunctionCall","src":"41584:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"41550:18:124"},"nodeType":"YulFunctionCall","src":"41550:54:124"},"nodeType":"YulExpressionStatement","src":"41550:54:124"},{"nodeType":"YulVariableDeclaration","src":"41613:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41643:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"41651:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41639:3:124"},"nodeType":"YulFunctionCall","src":"41639:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41633:5:124"},"nodeType":"YulFunctionCall","src":"41633:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"41617:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41664:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41674:6:124","type":"","value":"0x01c0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"41668:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41700:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41711:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41696:3:124"},"nodeType":"YulFunctionCall","src":"41696:19:124"},{"name":"_1","nodeType":"YulIdentifier","src":"41717:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41689:6:124"},"nodeType":"YulFunctionCall","src":"41689:31:124"},"nodeType":"YulExpressionStatement","src":"41689:31:124"},{"nodeType":"YulVariableDeclaration","src":"41729:77:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"41772:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41790:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41801:3:124","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41786:3:124"},"nodeType":"YulFunctionCall","src":"41786:19:124"}],"functionName":{"name":"abi_encode_array_address_dyn","nodeType":"YulIdentifier","src":"41743:28:124"},"nodeType":"YulFunctionCall","src":"41743:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"41733:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41815:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41847:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"41855:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41843:3:124"},"nodeType":"YulFunctionCall","src":"41843:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41837:5:124"},"nodeType":"YulFunctionCall","src":"41837:22:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"41819:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41868:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"41878:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"41872:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41964:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"41975:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41960:3:124"},"nodeType":"YulFunctionCall","src":"41960:19:124"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"41989:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"41997:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"41985:3:124"},"nodeType":"YulFunctionCall","src":"41985:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"42009:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41981:3:124"},"nodeType":"YulFunctionCall","src":"41981:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41953:6:124"},"nodeType":"YulFunctionCall","src":"41953:60:124"},"nodeType":"YulExpressionStatement","src":"41953:60:124"},{"nodeType":"YulVariableDeclaration","src":"42022:66:124","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"42065:14:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"42081:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"42036:28:124"},"nodeType":"YulFunctionCall","src":"42036:52:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"42026:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42097:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42129:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42137:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42125:3:124"},"nodeType":"YulFunctionCall","src":"42125:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42119:5:124"},"nodeType":"YulFunctionCall","src":"42119:22:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"42101:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42150:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42160:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"42154:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42183:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"42194:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42179:3:124"},"nodeType":"YulFunctionCall","src":"42179:18:124"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"42207:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"42215:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42203:3:124"},"nodeType":"YulFunctionCall","src":"42203:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"42227:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42199:3:124"},"nodeType":"YulFunctionCall","src":"42199:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42172:6:124"},"nodeType":"YulFunctionCall","src":"42172:59:124"},"nodeType":"YulExpressionStatement","src":"42172:59:124"},{"nodeType":"YulVariableDeclaration","src":"42240:66:124","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"42283:14:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"42299:6:124"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"42254:28:124"},"nodeType":"YulFunctionCall","src":"42254:52:124"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"42244:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42315:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42347:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42355:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42343:3:124"},"nodeType":"YulFunctionCall","src":"42343:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42337:5:124"},"nodeType":"YulFunctionCall","src":"42337:23:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"42319:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42369:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42379:3:124","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"42373:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"42410:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42430:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"42441:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42426:3:124"},"nodeType":"YulFunctionCall","src":"42426:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"42391:18:124"},"nodeType":"YulFunctionCall","src":"42391:54:124"},"nodeType":"YulExpressionStatement","src":"42391:54:124"},{"nodeType":"YulVariableDeclaration","src":"42454:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42486:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42494:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42482:3:124"},"nodeType":"YulFunctionCall","src":"42482:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42476:5:124"},"nodeType":"YulFunctionCall","src":"42476:23:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"42458:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42508:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42518:3:124","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"42512:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42541:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"42552:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42537:3:124"},"nodeType":"YulFunctionCall","src":"42537:18:124"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"42565:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"42573:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42561:3:124"},"nodeType":"YulFunctionCall","src":"42561:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"42585:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42557:3:124"},"nodeType":"YulFunctionCall","src":"42557:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42530:6:124"},"nodeType":"YulFunctionCall","src":"42530:59:124"},"nodeType":"YulExpressionStatement","src":"42530:59:124"},{"nodeType":"YulVariableDeclaration","src":"42598:55:124","value":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"42630:14:124"},{"name":"tail_3","nodeType":"YulIdentifier","src":"42646:6:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"42612:17:124"},"nodeType":"YulFunctionCall","src":"42612:41:124"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"42602:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42662:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42694:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42702:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42690:3:124"},"nodeType":"YulFunctionCall","src":"42690:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42684:5:124"},"nodeType":"YulFunctionCall","src":"42684:23:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"42666:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42716:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42726:3:124","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"42720:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"42756:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42776:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"42787:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42772:3:124"},"nodeType":"YulFunctionCall","src":"42772:18:124"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"42738:17:124"},"nodeType":"YulFunctionCall","src":"42738:53:124"},"nodeType":"YulExpressionStatement","src":"42738:53:124"},{"nodeType":"YulVariableDeclaration","src":"42800:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42820:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"42828:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42816:3:124"},"nodeType":"YulFunctionCall","src":"42816:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42810:5:124"},"nodeType":"YulFunctionCall","src":"42810:23:124"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"42804:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42842:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42852:3:124","type":"","value":"384"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"42846:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42875:9:124"},{"name":"_8","nodeType":"YulIdentifier","src":"42886:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42871:3:124"},"nodeType":"YulFunctionCall","src":"42871:18:124"},{"name":"_7","nodeType":"YulIdentifier","src":"42891:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42864:6:124"},"nodeType":"YulFunctionCall","src":"42864:30:124"},"nodeType":"YulExpressionStatement","src":"42864:30:124"},{"nodeType":"YulVariableDeclaration","src":"42903:32:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42923:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"42931:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42919:3:124"},"nodeType":"YulFunctionCall","src":"42919:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42913:5:124"},"nodeType":"YulFunctionCall","src":"42913:22:124"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"42907:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42944:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"42955:3:124","type":"","value":"416"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"42948:3:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42978:9:124"},{"name":"_10","nodeType":"YulIdentifier","src":"42989:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42974:3:124"},"nodeType":"YulFunctionCall","src":"42974:19:124"},{"name":"_9","nodeType":"YulIdentifier","src":"42995:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42967:6:124"},"nodeType":"YulFunctionCall","src":"42967:31:124"},"nodeType":"YulExpressionStatement","src":"42967:31:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43018:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"43029:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43014:3:124"},"nodeType":"YulFunctionCall","src":"43014:18:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43044:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"43052:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43040:3:124"},"nodeType":"YulFunctionCall","src":"43040:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43034:5:124"},"nodeType":"YulFunctionCall","src":"43034:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43007:6:124"},"nodeType":"YulFunctionCall","src":"43007:50:124"},"nodeType":"YulExpressionStatement","src":"43007:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43077:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43088:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43073:3:124"},"nodeType":"YulFunctionCall","src":"43073:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43104:6:124"},{"name":"_5","nodeType":"YulIdentifier","src":"43112:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43100:3:124"},"nodeType":"YulFunctionCall","src":"43100:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43094:5:124"},"nodeType":"YulFunctionCall","src":"43094:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43066:6:124"},"nodeType":"YulFunctionCall","src":"43066:51:124"},"nodeType":"YulExpressionStatement","src":"43066:51:124"},{"nodeType":"YulVariableDeclaration","src":"43126:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43158:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"43166:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43154:3:124"},"nodeType":"YulFunctionCall","src":"43154:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43148:5:124"},"nodeType":"YulFunctionCall","src":"43148:22:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"43130:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"43198:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43218:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43229:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43214:3:124"},"nodeType":"YulFunctionCall","src":"43214:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"43179:18:124"},"nodeType":"YulFunctionCall","src":"43179:55:124"},"nodeType":"YulExpressionStatement","src":"43179:55:124"},{"nodeType":"YulVariableDeclaration","src":"43243:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43275:6:124"},{"name":"_8","nodeType":"YulIdentifier","src":"43283:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43271:3:124"},"nodeType":"YulFunctionCall","src":"43271:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43265:5:124"},"nodeType":"YulFunctionCall","src":"43265:22:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"43247:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"43313:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43333:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43344:3:124","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43329:3:124"},"nodeType":"YulFunctionCall","src":"43329:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"43296:16:124"},"nodeType":"YulFunctionCall","src":"43296:53:124"},"nodeType":"YulExpressionStatement","src":"43296:53:124"},{"nodeType":"YulVariableDeclaration","src":"43358:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43390:6:124"},{"name":"_10","nodeType":"YulIdentifier","src":"43398:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43386:3:124"},"nodeType":"YulFunctionCall","src":"43386:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43380:5:124"},"nodeType":"YulFunctionCall","src":"43380:23:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"43362:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"43428:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43448:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43459:3:124","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43444:3:124"},"nodeType":"YulFunctionCall","src":"43444:19:124"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"43412:15:124"},"nodeType":"YulFunctionCall","src":"43412:52:124"},"nodeType":"YulExpressionStatement","src":"43412:52:124"},{"nodeType":"YulAssignment","src":"43473:14:124","value":{"name":"tail_4","nodeType":"YulIdentifier","src":"43481:6:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"43473:4:124"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"41273:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"41284:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"41292:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"41300:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"41308:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"41316:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"41327:4:124","type":""}],"src":"40882:2611:124"},{"body":{"nodeType":"YulBlock","src":"43918:592:124","statements":[{"nodeType":"YulAssignment","src":"43928:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43940:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"43951:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43936:3:124"},"nodeType":"YulFunctionCall","src":"43936:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"43928:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43971:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"43982:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43964:6:124"},"nodeType":"YulFunctionCall","src":"43964:25:124"},"nodeType":"YulExpressionStatement","src":"43964:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44009:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44020:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44005:3:124"},"nodeType":"YulFunctionCall","src":"44005:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"44025:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43998:6:124"},"nodeType":"YulFunctionCall","src":"43998:34:124"},"nodeType":"YulExpressionStatement","src":"43998:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44052:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44063:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44048:3:124"},"nodeType":"YulFunctionCall","src":"44048:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"44068:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44041:6:124"},"nodeType":"YulFunctionCall","src":"44041:34:124"},"nodeType":"YulExpressionStatement","src":"44041:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44095:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44106:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44091:3:124"},"nodeType":"YulFunctionCall","src":"44091:18:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44123:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44117:5:124"},"nodeType":"YulFunctionCall","src":"44117:13:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44111:5:124"},"nodeType":"YulFunctionCall","src":"44111:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44084:6:124"},"nodeType":"YulFunctionCall","src":"44084:48:124"},"nodeType":"YulExpressionStatement","src":"44084:48:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44152:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44163:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44148:3:124"},"nodeType":"YulFunctionCall","src":"44148:19:124"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44179:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44187:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44175:3:124"},"nodeType":"YulFunctionCall","src":"44175:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44169:5:124"},"nodeType":"YulFunctionCall","src":"44169:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44141:6:124"},"nodeType":"YulFunctionCall","src":"44141:51:124"},"nodeType":"YulExpressionStatement","src":"44141:51:124"},{"nodeType":"YulVariableDeclaration","src":"44201:42:124","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44231:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44239:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44227:3:124"},"nodeType":"YulFunctionCall","src":"44227:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44221:5:124"},"nodeType":"YulFunctionCall","src":"44221:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"44205:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"44252:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"44262:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"44256:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44324:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44335:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44320:3:124"},"nodeType":"YulFunctionCall","src":"44320:19:124"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"44345:12:124"},{"name":"_1","nodeType":"YulIdentifier","src":"44359:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"44341:3:124"},"nodeType":"YulFunctionCall","src":"44341:21:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44313:6:124"},"nodeType":"YulFunctionCall","src":"44313:50:124"},"nodeType":"YulExpressionStatement","src":"44313:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44383:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44394:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44379:3:124"},"nodeType":"YulFunctionCall","src":"44379:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44414:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44422:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44410:3:124"},"nodeType":"YulFunctionCall","src":"44410:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44404:5:124"},"nodeType":"YulFunctionCall","src":"44404:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"44428:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"44400:3:124"},"nodeType":"YulFunctionCall","src":"44400:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44372:6:124"},"nodeType":"YulFunctionCall","src":"44372:60:124"},"nodeType":"YulExpressionStatement","src":"44372:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44452:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44463:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44448:3:124"},"nodeType":"YulFunctionCall","src":"44448:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44483:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"44491:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44479:3:124"},"nodeType":"YulFunctionCall","src":"44479:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44473:5:124"},"nodeType":"YulFunctionCall","src":"44473:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"44498:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"44469:3:124"},"nodeType":"YulFunctionCall","src":"44469:34:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44441:6:124"},"nodeType":"YulFunctionCall","src":"44441:63:124"},"nodeType":"YulExpressionStatement","src":"44441:63:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"43863:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"43874:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"43882:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"43890:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"43898:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"43909:4:124","type":""}],"src":"43498:1012:124"},{"body":{"nodeType":"YulBlock","src":"44681:326:124","statements":[{"body":{"nodeType":"YulBlock","src":"44728:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"44737:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"44740:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"44730:6:124"},"nodeType":"YulFunctionCall","src":"44730:12:124"},"nodeType":"YulExpressionStatement","src":"44730:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"44702:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"44711:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"44698:3:124"},"nodeType":"YulFunctionCall","src":"44698:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"44723:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"44694:3:124"},"nodeType":"YulFunctionCall","src":"44694:33:124"},"nodeType":"YulIf","src":"44691:53:124"},{"nodeType":"YulAssignment","src":"44753:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44769:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44763:5:124"},"nodeType":"YulFunctionCall","src":"44763:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"44753:6:124"}]},{"nodeType":"YulAssignment","src":"44788:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44808:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44819:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44804:3:124"},"nodeType":"YulFunctionCall","src":"44804:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44798:5:124"},"nodeType":"YulFunctionCall","src":"44798:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"44788:6:124"}]},{"nodeType":"YulAssignment","src":"44832:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44852:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44863:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44848:3:124"},"nodeType":"YulFunctionCall","src":"44848:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44842:5:124"},"nodeType":"YulFunctionCall","src":"44842:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"44832:6:124"}]},{"nodeType":"YulAssignment","src":"44876:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44896:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44907:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44892:3:124"},"nodeType":"YulFunctionCall","src":"44892:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44886:5:124"},"nodeType":"YulFunctionCall","src":"44886:25:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"44876:6:124"}]},{"nodeType":"YulAssignment","src":"44920:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44940:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44951:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44936:3:124"},"nodeType":"YulFunctionCall","src":"44936:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44930:5:124"},"nodeType":"YulFunctionCall","src":"44930:26:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"44920:6:124"}]},{"nodeType":"YulAssignment","src":"44965:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44985:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"44996:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44981:3:124"},"nodeType":"YulFunctionCall","src":"44981:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44975:5:124"},"nodeType":"YulFunctionCall","src":"44975:26:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"44965:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"44607:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"44618:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"44630:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"44638:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"44646:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"44654:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"44662:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"44670:6:124","type":""}],"src":"44515:492:124"},{"body":{"nodeType":"YulBlock","src":"45186:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45203:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45214:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45196:6:124"},"nodeType":"YulFunctionCall","src":"45196:21:124"},"nodeType":"YulExpressionStatement","src":"45196:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45237:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45248:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45233:3:124"},"nodeType":"YulFunctionCall","src":"45233:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"45253:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45226:6:124"},"nodeType":"YulFunctionCall","src":"45226:30:124"},"nodeType":"YulExpressionStatement","src":"45226:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45276:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45287:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45272:3:124"},"nodeType":"YulFunctionCall","src":"45272:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"45292:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45265:6:124"},"nodeType":"YulFunctionCall","src":"45265:62:124"},"nodeType":"YulExpressionStatement","src":"45265:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45347:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45358:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45343:3:124"},"nodeType":"YulFunctionCall","src":"45343:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"45363:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45336:6:124"},"nodeType":"YulFunctionCall","src":"45336:44:124"},"nodeType":"YulExpressionStatement","src":"45336:44:124"},{"nodeType":"YulAssignment","src":"45389:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45401:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45412:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45397:3:124"},"nodeType":"YulFunctionCall","src":"45397:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"45389:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45163:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45177:4:124","type":""}],"src":"45012:410:124"},{"body":{"nodeType":"YulBlock","src":"45619:241:124","statements":[{"nodeType":"YulAssignment","src":"45629:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45641:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45652:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45637:3:124"},"nodeType":"YulFunctionCall","src":"45637:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"45629:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45671:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"45682:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45664:6:124"},"nodeType":"YulFunctionCall","src":"45664:25:124"},"nodeType":"YulExpressionStatement","src":"45664:25:124"},{"nodeType":"YulVariableDeclaration","src":"45698:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"45708:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"45702:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45770:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45781:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45766:3:124"},"nodeType":"YulFunctionCall","src":"45766:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"45790:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45798:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45786:3:124"},"nodeType":"YulFunctionCall","src":"45786:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45759:6:124"},"nodeType":"YulFunctionCall","src":"45759:43:124"},"nodeType":"YulExpressionStatement","src":"45759:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"45833:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45818:3:124"},"nodeType":"YulFunctionCall","src":"45818:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"45842:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"45850:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45838:3:124"},"nodeType":"YulFunctionCall","src":"45838:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45811:6:124"},"nodeType":"YulFunctionCall","src":"45811:43:124"},"nodeType":"YulExpressionStatement","src":"45811:43:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45572:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45583:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"45591:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"45599:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45610:4:124","type":""}],"src":"45427:433:124"},{"body":{"nodeType":"YulBlock","src":"46030:241:124","statements":[{"nodeType":"YulAssignment","src":"46040:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46052:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46063:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46048:3:124"},"nodeType":"YulFunctionCall","src":"46048:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46040:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"46075:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"46085:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"46079:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46143:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"46158:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46166:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46154:3:124"},"nodeType":"YulFunctionCall","src":"46154:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46136:6:124"},"nodeType":"YulFunctionCall","src":"46136:34:124"},"nodeType":"YulExpressionStatement","src":"46136:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46190:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46201:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46186:3:124"},"nodeType":"YulFunctionCall","src":"46186:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"46210:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"46218:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46206:3:124"},"nodeType":"YulFunctionCall","src":"46206:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46179:6:124"},"nodeType":"YulFunctionCall","src":"46179:43:124"},"nodeType":"YulExpressionStatement","src":"46179:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46242:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"46253:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46238:3:124"},"nodeType":"YulFunctionCall","src":"46238:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"46258:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46231:6:124"},"nodeType":"YulFunctionCall","src":"46231:34:124"},"nodeType":"YulExpressionStatement","src":"46231:34:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45983:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45994:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"46002:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"46010:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"46021:4:124","type":""}],"src":"45865:406:124"},{"body":{"nodeType":"YulBlock","src":"46325:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"46347:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"46349:16:124"},"nodeType":"YulFunctionCall","src":"46349:18:124"},"nodeType":"YulExpressionStatement","src":"46349:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"46341:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"46344:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"46338:2:124"},"nodeType":"YulFunctionCall","src":"46338:8:124"},"nodeType":"YulIf","src":"46335:34:124"},{"nodeType":"YulAssignment","src":"46378:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"46390:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"46393:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"46386:3:124"},"nodeType":"YulFunctionCall","src":"46386:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"46378:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"46307:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"46310:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"46316:4:124","type":""}],"src":"46276:125:124"},{"body":{"nodeType":"YulBlock","src":"46438:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46455:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"46458:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46448:6:124"},"nodeType":"YulFunctionCall","src":"46448:88:124"},"nodeType":"YulExpressionStatement","src":"46448:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46552:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"46555:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46545:6:124"},"nodeType":"YulFunctionCall","src":"46545:15:124"},"nodeType":"YulExpressionStatement","src":"46545:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46576:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"46579:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"46569:6:124"},"nodeType":"YulFunctionCall","src":"46569:15:124"},"nodeType":"YulExpressionStatement","src":"46569:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"46406:184:124"},{"body":{"nodeType":"YulBlock","src":"46642:148:124","statements":[{"body":{"nodeType":"YulBlock","src":"46733:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"46735:16:124"},"nodeType":"YulFunctionCall","src":"46735:18:124"},"nodeType":"YulExpressionStatement","src":"46735:18:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"46658:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"46665:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"46655:2:124"},"nodeType":"YulFunctionCall","src":"46655:77:124"},"nodeType":"YulIf","src":"46652:103:124"},{"nodeType":"YulAssignment","src":"46764:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"46775:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"46782:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46771:3:124"},"nodeType":"YulFunctionCall","src":"46771:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"46764:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"46624:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"46634:3:124","type":""}],"src":"46595:195:124"},{"body":{"nodeType":"YulBlock","src":"47288:1027:124","statements":[{"nodeType":"YulAssignment","src":"47298:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47310:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47321:3:124","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47306:3:124"},"nodeType":"YulFunctionCall","src":"47306:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"47298:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47341:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"47352:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47334:6:124"},"nodeType":"YulFunctionCall","src":"47334:25:124"},"nodeType":"YulExpressionStatement","src":"47334:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47379:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47390:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47375:3:124"},"nodeType":"YulFunctionCall","src":"47375:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"47395:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47368:6:124"},"nodeType":"YulFunctionCall","src":"47368:34:124"},"nodeType":"YulExpressionStatement","src":"47368:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47422:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47433:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47418:3:124"},"nodeType":"YulFunctionCall","src":"47418:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"47438:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47411:6:124"},"nodeType":"YulFunctionCall","src":"47411:34:124"},"nodeType":"YulExpressionStatement","src":"47411:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47465:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47476:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47461:3:124"},"nodeType":"YulFunctionCall","src":"47461:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"47481:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47454:6:124"},"nodeType":"YulFunctionCall","src":"47454:34:124"},"nodeType":"YulExpressionStatement","src":"47454:34:124"},{"nodeType":"YulVariableDeclaration","src":"47497:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"47507:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"47501:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47569:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47580:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47565:3:124"},"nodeType":"YulFunctionCall","src":"47565:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47596:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47590:5:124"},"nodeType":"YulFunctionCall","src":"47590:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"47605:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"47586:3:124"},"nodeType":"YulFunctionCall","src":"47586:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47558:6:124"},"nodeType":"YulFunctionCall","src":"47558:51:124"},"nodeType":"YulExpressionStatement","src":"47558:51:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47629:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47640:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47625:3:124"},"nodeType":"YulFunctionCall","src":"47625:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47660:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47668:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47656:3:124"},"nodeType":"YulFunctionCall","src":"47656:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47650:5:124"},"nodeType":"YulFunctionCall","src":"47650:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"47674:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"47646:3:124"},"nodeType":"YulFunctionCall","src":"47646:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47618:6:124"},"nodeType":"YulFunctionCall","src":"47618:60:124"},"nodeType":"YulExpressionStatement","src":"47618:60:124"},{"nodeType":"YulVariableDeclaration","src":"47687:42:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47717:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47725:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47713:3:124"},"nodeType":"YulFunctionCall","src":"47713:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47707:5:124"},"nodeType":"YulFunctionCall","src":"47707:22:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"47691:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"47757:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47775:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47786:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47771:3:124"},"nodeType":"YulFunctionCall","src":"47771:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"47738:18:124"},"nodeType":"YulFunctionCall","src":"47738:53:124"},"nodeType":"YulExpressionStatement","src":"47738:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47822:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47807:3:124"},"nodeType":"YulFunctionCall","src":"47807:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47838:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47846:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47834:3:124"},"nodeType":"YulFunctionCall","src":"47834:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47828:5:124"},"nodeType":"YulFunctionCall","src":"47828:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47800:6:124"},"nodeType":"YulFunctionCall","src":"47800:51:124"},"nodeType":"YulExpressionStatement","src":"47800:51:124"},{"nodeType":"YulVariableDeclaration","src":"47860:33:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47880:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"47888:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47876:3:124"},"nodeType":"YulFunctionCall","src":"47876:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47870:5:124"},"nodeType":"YulFunctionCall","src":"47870:23:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"47864:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"47902:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"47912:3:124","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"47906:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47935:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"47946:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47931:3:124"},"nodeType":"YulFunctionCall","src":"47931:18:124"},{"name":"_2","nodeType":"YulIdentifier","src":"47951:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47924:6:124"},"nodeType":"YulFunctionCall","src":"47924:30:124"},"nodeType":"YulExpressionStatement","src":"47924:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47974:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"47985:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47970:3:124"},"nodeType":"YulFunctionCall","src":"47970:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48001:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48009:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47997:3:124"},"nodeType":"YulFunctionCall","src":"47997:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47991:5:124"},"nodeType":"YulFunctionCall","src":"47991:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47963:6:124"},"nodeType":"YulFunctionCall","src":"47963:52:124"},"nodeType":"YulExpressionStatement","src":"47963:52:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48035:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48046:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48031:3:124"},"nodeType":"YulFunctionCall","src":"48031:19:124"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48062:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48070:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48058:3:124"},"nodeType":"YulFunctionCall","src":"48058:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48052:5:124"},"nodeType":"YulFunctionCall","src":"48052:23:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48024:6:124"},"nodeType":"YulFunctionCall","src":"48024:52:124"},"nodeType":"YulExpressionStatement","src":"48024:52:124"},{"nodeType":"YulVariableDeclaration","src":"48085:45:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48117:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48125:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48113:3:124"},"nodeType":"YulFunctionCall","src":"48113:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48107:5:124"},"nodeType":"YulFunctionCall","src":"48107:23:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"48089:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"48158:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48178:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48189:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48174:3:124"},"nodeType":"YulFunctionCall","src":"48174:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"48139:18:124"},"nodeType":"YulFunctionCall","src":"48139:55:124"},"nodeType":"YulExpressionStatement","src":"48139:55:124"},{"nodeType":"YulVariableDeclaration","src":"48203:44:124","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48235:6:124"},{"name":"_3","nodeType":"YulIdentifier","src":"48243:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48231:3:124"},"nodeType":"YulFunctionCall","src":"48231:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48225:5:124"},"nodeType":"YulFunctionCall","src":"48225:22:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"48207:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"48273:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48293:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48304:3:124","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48289:3:124"},"nodeType":"YulFunctionCall","src":"48289:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"48256:16:124"},"nodeType":"YulFunctionCall","src":"48256:53:124"},"nodeType":"YulExpressionStatement","src":"48256:53:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"47225:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"47236:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"47244:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"47252:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"47260:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"47268:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"47279:4:124","type":""}],"src":"46795:1520:124"},{"body":{"nodeType":"YulBlock","src":"48568:299:124","statements":[{"nodeType":"YulAssignment","src":"48578:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48590:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48601:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48586:3:124"},"nodeType":"YulFunctionCall","src":"48586:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"48578:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48621:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"48632:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48614:6:124"},"nodeType":"YulFunctionCall","src":"48614:25:124"},"nodeType":"YulExpressionStatement","src":"48614:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48659:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48670:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48655:3:124"},"nodeType":"YulFunctionCall","src":"48655:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"48679:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"48687:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48675:3:124"},"nodeType":"YulFunctionCall","src":"48675:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48648:6:124"},"nodeType":"YulFunctionCall","src":"48648:83:124"},"nodeType":"YulExpressionStatement","src":"48648:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48751:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48762:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48747:3:124"},"nodeType":"YulFunctionCall","src":"48747:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"48767:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48740:6:124"},"nodeType":"YulFunctionCall","src":"48740:34:124"},"nodeType":"YulExpressionStatement","src":"48740:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48794:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48805:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48790:3:124"},"nodeType":"YulFunctionCall","src":"48790:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"48810:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48783:6:124"},"nodeType":"YulFunctionCall","src":"48783:34:124"},"nodeType":"YulExpressionStatement","src":"48783:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48837:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"48848:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48833:3:124"},"nodeType":"YulFunctionCall","src":"48833:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"48854:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48826:6:124"},"nodeType":"YulFunctionCall","src":"48826:35:124"},"nodeType":"YulExpressionStatement","src":"48826:35:124"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"48505:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"48516:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"48524:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"48532:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"48540:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"48548:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"48559:4:124","type":""}],"src":"48320:547:124"},{"body":{"nodeType":"YulBlock","src":"49061:168:124","statements":[{"nodeType":"YulAssignment","src":"49071:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49083:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49094:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49079:3:124"},"nodeType":"YulFunctionCall","src":"49079:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"49071:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49113:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"49124:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49106:6:124"},"nodeType":"YulFunctionCall","src":"49106:25:124"},"nodeType":"YulExpressionStatement","src":"49106:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49151:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"49162:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49147:3:124"},"nodeType":"YulFunctionCall","src":"49147:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"49171:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"49179:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49167:3:124"},"nodeType":"YulFunctionCall","src":"49167:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49140:6:124"},"nodeType":"YulFunctionCall","src":"49140:83:124"},"nodeType":"YulExpressionStatement","src":"49140:83:124"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49022:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"49033:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"49041:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"49052:4:124","type":""}],"src":"48872:357:124"},{"body":{"nodeType":"YulBlock","src":"49395:49:124","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"49412:4:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"49431:5:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"49418:12:124"},"nodeType":"YulFunctionCall","src":"49418:19:124"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"49405:6:124"},"nodeType":"YulFunctionCall","src":"49405:33:124"},"nodeType":"YulExpressionStatement","src":"49405:33:124"}]},"name":"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"49378:4:124","type":""},{"name":"value","nodeType":"YulTypedName","src":"49384:5:124","type":""}],"src":"49234:210:124"},{"body":{"nodeType":"YulBlock","src":"49501:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"49620:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"49622:16:124"},"nodeType":"YulFunctionCall","src":"49622:18:124"},"nodeType":"YulExpressionStatement","src":"49622:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49532:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49525:6:124"},"nodeType":"YulFunctionCall","src":"49525:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49518:6:124"},"nodeType":"YulFunctionCall","src":"49518:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49540:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49547:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"49615:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"49543:3:124"},"nodeType":"YulFunctionCall","src":"49543:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"49537:2:124"},"nodeType":"YulFunctionCall","src":"49537:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49514:3:124"},"nodeType":"YulFunctionCall","src":"49514:105:124"},"nodeType":"YulIf","src":"49511:131:124"},{"nodeType":"YulAssignment","src":"49651:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49666:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"49669:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"49662:3:124"},"nodeType":"YulFunctionCall","src":"49662:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"49651:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49480:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"49483:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"49489:7:124","type":""}],"src":"49449:228:124"},{"body":{"nodeType":"YulBlock","src":"49714:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49731:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49734:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49724:6:124"},"nodeType":"YulFunctionCall","src":"49724:88:124"},"nodeType":"YulExpressionStatement","src":"49724:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49828:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"49831:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49821:6:124"},"nodeType":"YulFunctionCall","src":"49821:15:124"},"nodeType":"YulExpressionStatement","src":"49821:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49852:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49855:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"49845:6:124"},"nodeType":"YulFunctionCall","src":"49845:15:124"},"nodeType":"YulExpressionStatement","src":"49845:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"49682:184:124"},{"body":{"nodeType":"YulBlock","src":"49919:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"49946:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"49948:16:124"},"nodeType":"YulFunctionCall","src":"49948:18:124"},"nodeType":"YulExpressionStatement","src":"49948:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49935:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49942:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"49938:3:124"},"nodeType":"YulFunctionCall","src":"49938:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"49932:2:124"},"nodeType":"YulFunctionCall","src":"49932:13:124"},"nodeType":"YulIf","src":"49929:39:124"},{"nodeType":"YulAssignment","src":"49977:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49988:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"49991:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49984:3:124"},"nodeType":"YulFunctionCall","src":"49984:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"49977:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49902:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"49905:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"49911:3:124","type":""}],"src":"49871:128:124"},{"body":{"nodeType":"YulBlock","src":"50050:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"50081:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50102:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50105:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50095:6:124"},"nodeType":"YulFunctionCall","src":"50095:88:124"},"nodeType":"YulExpressionStatement","src":"50095:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50203:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"50206:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50196:6:124"},"nodeType":"YulFunctionCall","src":"50196:15:124"},"nodeType":"YulExpressionStatement","src":"50196:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50231:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50234:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"50224:6:124"},"nodeType":"YulFunctionCall","src":"50224:15:124"},"nodeType":"YulExpressionStatement","src":"50224:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"50070:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"50063:6:124"},"nodeType":"YulFunctionCall","src":"50063:9:124"},"nodeType":"YulIf","src":"50060:189:124"},{"nodeType":"YulAssignment","src":"50258:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50267:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"50270:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"50263:3:124"},"nodeType":"YulFunctionCall","src":"50263:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"50258:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"50035:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"50038:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"50044:1:124","type":""}],"src":"50004:274:124"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_bool(value_3)\n        value4 := value_3\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5282__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint128(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_struct_ReserveConfigurationMap(value, pos)\n    { mstore(pos, mload(value)) }\n    function abi_encode_uint40(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffff))\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_memory_ptr__to_t_struct$_ReserveData_$23909_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 480)\n        abi_encode_struct_ReserveConfigurationMap(mload(value0), headStart)\n        let memberValue0 := mload(add(value0, 0x20))\n        abi_encode_uint128(memberValue0, add(headStart, 0x20))\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_uint128(memberValue0_1, add(headStart, 0x40))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_uint128(memberValue0_2, add(headStart, 0x60))\n        let memberValue0_3 := mload(add(value0, 0x80))\n        abi_encode_uint128(memberValue0_3, add(headStart, 0x80))\n        let memberValue0_4 := mload(add(value0, 0xa0))\n        abi_encode_uint128(memberValue0_4, add(headStart, 0xa0))\n        let memberValue0_5 := mload(add(value0, 0xc0))\n        abi_encode_uint40(memberValue0_5, add(headStart, 0xc0))\n        let memberValue0_6 := mload(add(value0, 0xe0))\n        abi_encode_uint16(memberValue0_6, add(headStart, 0xe0))\n        let _1 := 0x0100\n        let memberValue0_7 := mload(add(value0, _1))\n        abi_encode_address(memberValue0_7, add(headStart, _1))\n        let _2 := 0x0120\n        let memberValue0_8 := mload(add(value0, _2))\n        abi_encode_address(memberValue0_8, add(headStart, _2))\n        let _3 := 0x0140\n        let memberValue0_9 := mload(add(value0, _3))\n        abi_encode_address(memberValue0_9, add(headStart, _3))\n        let _4 := 0x0160\n        let memberValue0_10 := mload(add(value0, _4))\n        abi_encode_address(memberValue0_10, add(headStart, _4))\n        let _5 := 0x0180\n        let memberValue0_11 := mload(add(value0, _5))\n        abi_encode_uint128(memberValue0_11, add(headStart, _5))\n        let _6 := 0x01a0\n        let memberValue0_12 := mload(add(value0, _6))\n        abi_encode_uint128(memberValue0_12, add(headStart, _6))\n        let _7 := 0x01c0\n        let memberValue0_13 := mload(add(value0, _7))\n        abi_encode_uint128(memberValue0_13, add(headStart, _7))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := abi_decode_uint16(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_struct$_UserConfigurationMap_$23916_memory_ptr__to_t_struct$_UserConfigurationMap_$23916_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint16(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_struct$_EModeCategory_$23927_memory_ptr__to_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let _1 := 0xffff\n        mstore(add(headStart, 32), and(mload(value0), _1))\n        mstore(add(headStart, 64), and(mload(add(value0, 32)), _1))\n        mstore(add(headStart, 96), and(mload(add(value0, 64)), _1))\n        mstore(add(headStart, 128), and(mload(add(value0, 96)), 0xffffffffffffffffffffffffffffffffffffffff))\n        let memberValue0 := mload(add(value0, 128))\n        mstore(add(headStart, 0xa0), 0xa0)\n        tail := abi_encode_string(memberValue0, add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        let value_3 := calldataload(add(headStart, 96))\n        validator_revert_address(value_3)\n        value3 := value_3\n        let value_4 := calldataload(add(headStart, 128))\n        validator_revert_address(value_4)\n        value4 := value_4\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_uint16(add(headStart, 96))\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        value4 := value_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 32)), _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 32))), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        if gt(calldataload(add(headStart, 64)), _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 64))), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        if gt(calldataload(add(headStart, 96)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 96))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        value7 := abi_decode_address(add(headStart, 128))\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value8_1, value9_1 := abi_decode_bytes_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value8 := value8_1\n        value9 := value9_1\n        value10 := abi_decode_uint16(add(headStart, 192))\n    }\n    function abi_decode_uint128(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint128t_uint128(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint128(headStart)\n        value1 := abi_decode_uint128(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_5591() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_uint8t_struct$_EModeCategory_$23927_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if slt(sub(dataEnd, _3), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_5591()\n        mstore(value, abi_decode_uint16(_3))\n        mstore(add(value, _1), abi_decode_uint16(add(_3, _1)))\n        mstore(add(value, 64), abi_decode_uint16(add(_3, 64)))\n        let value_1 := calldataload(add(_3, 96))\n        validator_revert_address(value_1)\n        mstore(add(value, 96), value_1)\n        let offset_1 := calldataload(add(_3, 128))\n        if gt(offset_1, _2) { revert(0, 0) }\n        let _4 := add(_3, offset_1)\n        if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n        let _5 := calldataload(_4)\n        if gt(_5, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_5, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _5)\n        if gt(add(add(_4, _5), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_4, _1), _5)\n        mstore(add(add(array, _5), _1), 0)\n        mstore(add(value, 128), array)\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$23912_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32) { revert(0, 0) }\n        value1 := add(headStart, 32)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$23992_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), mload(value4))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        let memberValue0 := mload(add(value4, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 192), and(memberValue0, _1))\n        mstore(add(headStart, 224), and(mload(add(value4, 96)), _1))\n        let memberValue0_1 := mload(add(value4, 128))\n        let _2 := 256\n        abi_encode_address(memberValue0_1, add(headStart, _2))\n        let memberValue0_2 := mload(add(value4, 160))\n        abi_encode_bool(memberValue0_2, add(headStart, 288))\n        let memberValue0_3 := mload(add(value4, 192))\n        abi_encode_address(memberValue0_3, add(headStart, 320))\n        let memberValue0_4 := mload(add(value4, 224))\n        abi_encode_uint8(memberValue0_4, add(headStart, 352))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$24001_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        mstore(add(headStart, 160), and(mload(add(value3, 64)), _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), 0xffff))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$24059_memory_ptr__fromStack_library_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), mload(value5))\n        mstore(add(headStart, 192), and(mload(add(value5, 32)), 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 224), and(mload(add(value5, 64)), 0xff))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteRepayParams_$24039_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$24039_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        abi_encode_enum_InterestRateMode(memberValue0, add(headStart, 160))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), iszero(iszero(mload(add(value3, 128)))))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$24125_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value1), _1))\n        mstore(add(headStart, 96), and(mload(add(value1, 32)), _1))\n        mstore(add(headStart, 128), mload(add(value1, 64)))\n        let memberValue0 := mload(add(value1, 96))\n        mstore(add(headStart, 160), 0xe0)\n        let tail_1 := abi_encode_string(memberValue0, add(headStart, 288))\n        mstore(add(headStart, 192), and(mload(add(value1, 128)), 0xffff))\n        mstore(add(headStart, 0xe0), mload(add(value1, 160)))\n        mstore(add(headStart, 256), mload(add(value1, 192)))\n        tail := tail_1\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(value4, _1))\n        mstore(add(headStart, 160), iszero(iszero(value5)))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n        mstore(add(headStart, 224), and(value7, _1))\n        mstore(add(headStart, 256), and(value8, 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$24052_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 320)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        mstore(add(headStart, 192), and(mload(add(value4, 64)), _1))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        mstore(add(headStart, 256), and(mload(add(value4, 128)), _1))\n        mstore(add(headStart, 288), and(mload(add(value4, 160)), 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), and(value5, _1))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$24226_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$24226_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value2), _1))\n        mstore(add(headStart, 96), and(mload(add(value2, 32)), _1))\n        mstore(add(headStart, 128), and(mload(add(value2, 64)), _1))\n        mstore(add(headStart, 160), and(mload(add(value2, 96)), _1))\n        mstore(add(headStart, 192), and(mload(add(value2, 128)), _1))\n        let memberValue0 := mload(add(value2, 160))\n        abi_encode_uint16(memberValue0, add(headStart, 224))\n        let memberValue0_1 := mload(add(value2, 192))\n        abi_encode_uint16(memberValue0_1, add(headStart, 256))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint16(value) -> ret\n    {\n        let _1 := 0xffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_struct$_UserConfigurationMap_$23916_storage_t_address_t_enum$_InterestRateMode_$23931__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        abi_encode_enum_InterestRateMode(value3, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        mstore(tail_1, value2)\n        pos := add(headStart, 96)\n        let srcPtr := value1\n        let i := 0\n        for { } lt(i, value2) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_address(value)\n            mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$24027_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 512)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        abi_encode_address(mload(value4), add(headStart, 128))\n        let memberValue0 := mload(add(value4, 32))\n        abi_encode_address(memberValue0, add(headStart, 160))\n        let memberValue0_1 := mload(add(value4, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let memberValue0_2 := mload(add(value4, 128))\n        let _1 := 256\n        abi_encode_enum_InterestRateMode(memberValue0_2, add(headStart, _1))\n        let memberValue0_3 := mload(add(value4, 160))\n        let _2 := 288\n        abi_encode_uint16(memberValue0_3, add(headStart, _2))\n        let memberValue0_4 := mload(add(value4, 192))\n        let _3 := 320\n        abi_encode_bool(memberValue0_4, add(headStart, _3))\n        let _4 := mload(add(value4, 224))\n        let _5 := 352\n        mstore(add(headStart, _5), _4)\n        mstore(add(headStart, 384), mload(add(value4, _1)))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 416))\n        let memberValue0_6 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_6, add(headStart, 448))\n        let memberValue0_7 := mload(add(value4, _5))\n        abi_encode_address(memberValue0_7, add(headStart, 480))\n    }\n    function abi_encode_array_address_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_UserConfigurationMap_$23916_storage_t_struct$_FlashloanParams_$24110_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$24110_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 160)\n        abi_encode_address(mload(value4), add(headStart, 160))\n        let memberValue0 := mload(add(value4, 32))\n        let _1 := 0x01c0\n        mstore(add(headStart, 192), _1)\n        let tail_1 := abi_encode_array_address_dyn(memberValue0, add(headStart, 608))\n        let memberValue0_1 := mload(add(value4, 64))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60\n        mstore(add(headStart, 224), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_array_uint256_dyn(memberValue0_1, tail_1)\n        let memberValue0_2 := mload(add(value4, 96))\n        let _3 := 256\n        mstore(add(headStart, _3), add(sub(tail_2, headStart), _2))\n        let tail_3 := abi_encode_array_uint256_dyn(memberValue0_2, tail_2)\n        let memberValue0_3 := mload(add(value4, 128))\n        let _4 := 288\n        abi_encode_address(memberValue0_3, add(headStart, _4))\n        let memberValue0_4 := mload(add(value4, 160))\n        let _5 := 320\n        mstore(add(headStart, _5), add(sub(tail_3, headStart), _2))\n        let tail_4 := abi_encode_string(memberValue0_4, tail_3)\n        let memberValue0_5 := mload(add(value4, 192))\n        let _6 := 352\n        abi_encode_uint16(memberValue0_5, add(headStart, _6))\n        let _7 := mload(add(value4, 224))\n        let _8 := 384\n        mstore(add(headStart, _8), _7)\n        let _9 := mload(add(value4, _3))\n        let _10 := 416\n        mstore(add(headStart, _10), _9)\n        mstore(add(headStart, _1), mload(add(value4, _4)))\n        mstore(add(headStart, 480), mload(add(value4, _5)))\n        let memberValue0_6 := mload(add(value4, _6))\n        abi_encode_address(memberValue0_6, add(headStart, 512))\n        let memberValue0_7 := mload(add(value4, _8))\n        abi_encode_uint8(memberValue0_7, add(headStart, 544))\n        let memberValue0_8 := mload(add(value4, _10))\n        abi_encode_bool(memberValue0_8, add(headStart, 576))\n        tail := tail_4\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$24150_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), mload(mload(value3)))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 160), and(memberValue0, _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), and(mload(add(value3, 128)), 0xff))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$23927_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$23916_storage_$_t_struct$_FinalizeTransferParams_$24078_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$24078_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), and(mload(add(value4, 32)), _1))\n        let memberValue0 := mload(add(value4, 64))\n        abi_encode_address(memberValue0, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let _2 := mload(add(value4, 128))\n        let _3 := 256\n        mstore(add(headStart, _3), _2)\n        mstore(add(headStart, 288), mload(add(value4, 160)))\n        mstore(add(headStart, 320), mload(add(value4, 192)))\n        let memberValue0_1 := mload(add(value4, 224))\n        abi_encode_address(memberValue0_1, add(headStart, 352))\n        let memberValue0_2 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_2, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$23909_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$23909_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$23912_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$23912_storage(slot, value)\n    {\n        sstore(slot, calldataload(value))\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"25195":[{"length":32,"start":854},{"length":32,"start":2638},{"length":32,"start":2880},{"length":32,"start":4163},{"length":32,"start":5734},{"length":32,"start":6668},{"length":32,"start":8477},{"length":32,"start":8686},{"length":32,"start":9281},{"length":32,"start":10044},{"length":32,"start":10651},{"length":32,"start":12306},{"length":32,"start":13839},{"length":32,"start":14262},{"length":32,"start":14659}]},"linkReferences":{"contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4510},{"length":20,"start":5277},{"length":20,"start":7949},{"length":20,"start":8112},{"length":20,"start":11038},{"length":20,"start":13245}]},"contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7152},{"length":20,"start":12744}]},"contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4029}]},"contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5176},{"length":20,"start":9693}]},"contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":2468}]},"contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":6436},{"length":20,"start":7510},{"length":20,"start":8065},{"length":20,"start":10002},{"length":20,"start":11163},{"length":20,"start":12861}]},"contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3446},{"length":20,"start":5620},{"length":20,"start":6262},{"length":20,"start":6474},{"length":20,"start":12132}]}},"object":"608060405234801561001057600080fd5b50600436106103095760003560e01c80637a708e921161019c578063d15e0053116100ee578063e82fec2f11610097578063ee3e210b11610071578063ee3e210b1461096d578063f51e435b14610980578063f8119d511461099357600080fd5b8063e82fec2f14610922578063e8eda9df146106da578063eddf1b791461093457600080fd5b8063d5ed3933116100c8578063d5ed3933146108e9578063d65dc7a1146108fc578063e43e88a11461090f57600080fd5b8063d15e0053146108ae578063d1946dbc146108c1578063d579ea7d146108d657600080fd5b8063bcb6e52211610150578063c4d66de81161012a578063c4d66de814610875578063cd11238214610888578063cea9d26f1461089b57600080fd5b8063bcb6e522146107d3578063bf92857c146107e6578063c44b11f71461082657600080fd5b80639cd19996116101815780639cd199961461079a578063a415bcad146107ad578063ab9c4b5d146107c057600080fd5b80637a708e921461077457806394ba89a21461078757600080fd5b8063386497fd11610260578063617ba0371161020957806369a933a5116101e357806369a933a5146107135780636a99c036146107265780636c6f6ae11461075457600080fd5b8063617ba037146106da57806363c9b860146106ed57806369328dec1461070057600080fd5b8063527517971161023a578063527517971461067a578063573ade81146106b45780635a3b74b9146106c757600080fd5b8063386497fd146105f657806342b0b77c146106095780634417a5831461061c57600080fd5b80631d2118f9116102c25780632dad97d41161029c5780632dad97d4146104025780633036b4391461041557806335ea6a751461042857600080fd5b80631d2118f9146103d4578063272d9072146103e757806328530a47146103ef57600080fd5b806302c205f0116102f357806302c205f01461033e5780630542975c14610351578063074b2e431461039d57600080fd5b8062a718a91461030e5780630148170e14610323575b600080fd5b61032161031c366004613e1b565b6109a2565b005b61032b600181565b6040519081526020015b60405180910390f35b61032161034c366004613ea6565b610c1d565b6103787f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610335565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff9091168152602001610335565b6103216103e2366004613f25565b610dcd565b60395461032b565b6103216103fd366004613f5e565b610fbb565b61032b610410366004613f79565b61119a565b610321610423366004613fae565b6112de565b6105e9610436366004613fc7565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091525073ffffffffffffffffffffffffffffffffffffffff90811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103359190613fe4565b61032b610604366004613fc7565b6112eb565b6103216106173660046141aa565b61131f565b61066b61062a366004613fc7565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260358352819020815192830190915254815290565b60405190518152602001610335565b61037861068836600461422c565b61ffff1660009081526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61032b6106c2366004614247565b611499565b6103216106d5366004614291565b6115f2565b6103216106e83660046142bf565b6117c7565b6103216106fb366004613fc7565b6118ca565b61032b61070e366004614310565b611946565b6103216107213660046142bf565b611b65565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166103b3565b610767610762366004613f5e565b611c12565b60405161033591906143bd565b610321610782366004614420565b611d4c565b610321610795366004614483565b611ed8565b6103216107a83660046144f4565b611f59565b6103216107bb366004614536565b611fae565b6103216107ce366004614575565b612294565b6103216107e136600461468f565b61264d565b6107f96107f4366004613fc7565b612684565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610335565b61066b610834366004613fc7565b604080516020808201835260009182905273ffffffffffffffffffffffffffffffffffffffff93909316815260348352819020815192830190915254815290565b610321610883366004613fc7565b6128b3565b610321610896366004613f25565b612ab7565b6103216108a93660046146c2565b612b40565b61032b6108bc366004613fc7565b612bed565b6108c9612c1b565b6040516103359190614703565b6103216108e4366004614804565b612d57565b6103216108f736600461493c565b612ec3565b61032b61090a366004613f79565b61314a565b61032161091d366004613fc7565b6131ea565b603b5467ffffffffffffffff1661032b565b61032b610942366004613fc7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205460ff1690565b61032b61097b3660046149a1565b61325f565b61032161098e3660046149e7565b61343a565b60405160808152602001610335565b73__$f598c634f2d943205ac23f707b80075cbb$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adb9190614a46565b73ffffffffffffffffffffffffffffffffffffffff90811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190614a46565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610be6959493929190614a63565b60006040518083038186803b158015610bfe57600080fd5b505af4158015610c12573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff89169063d505accf9060e401600060405180830381600087803b158015610caf57600080fd5b505af1158015610cc3573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff86811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e40160006040518083038186803b158015610dab57600080fd5b505af4158015610dbf573d6000803e3d6000fd5b505050505050505050505050565b610dd56135f6565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff16151580610ef657506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73__$e4b9550ff526a295e1233dea02821b9004$__635d5dc3136034603660376038603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d09190614a46565b73ffffffffffffffffffffffffffffffffffffffff1681526020018960ff168152506040518763ffffffff1660e01b81526004016111679695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a08501529182015173ffffffffffffffffffffffffffffffffffffffff1660c0840152015160ff1660e08201526101000190565b60006040518083038186803b15801561117f57600080fd5b505af4158015611193573d6000803e3d6000fd5b5050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808a73ffffffffffffffffffffffffffffffffffffffff16815260200189815260200188600281111561123857611238614b57565b600281111561124957611249614b57565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526112939493929190600401614bc1565b602060405180830381865af41580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190614c34565b90505b9392505050565b6112e66135f6565b603955565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061131990613724565b92915050565b60006040518060e001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116604080870191909152911660609094019390935273ffffffffffffffffffffffffffffffffffffffff8a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__9163a1fe0e8d91611460918590600401614c4d565b60006040518083038186803b15801561147857600080fd5b505af415801561148c573d6000803e3d6000fd5b5050505050505050505050565b600073__$c3724b8d563dc83a94e797176cddecb3b9$__6340e95de660346036603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561153757611537614b57565b600281111561154857611548614b57565b815273ffffffffffffffffffffffffffffffffffffffff891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526115a89493929190600401614bc1565b602060405180830381865af41580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190614c34565b95945050505050565b73__$db79717e66442ee197e8271d032a066e34$__63bf697a26603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208787603b60089054906101000a900461ffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f39190614a46565b336000908152603860205260409081902054905160e08b901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019990995260248901979097526044880195909552606487019390935273ffffffffffffffffffffffffffffffffffffffff9182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b1580156117ab57600080fd5b505af41580156117bf573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$db79717e66442ee197e8271d032a066e34$__90631913f1619060e4015b60006040518083038186803b1580156118ac57600080fd5b505af41580156118c0573d6000803e3d6000fd5b5050505050505050565b6118d26135f6565b6040517f9cf57023000000000000000000000000000000000000000000000000000000008152603460048201526036602482015273ffffffffffffffffffffffffffffffffffffffff8216604482015273__$563c746fa3df0f1858d85f6ef4258864be$__90639cf5702390606401611167565b600073__$db79717e66442ee197e8271d032a066e34$__63186dea44603460366037603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a999190614a46565b73ffffffffffffffffffffffffffffffffffffffff9081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a001511661012482015261014401611293565b611b6d6137b4565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$b06080f092f400a43662c3f835a4d9baa8$__90630413c86f9060e401611894565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff8082168352620100008204811694830194909452640100000000810490931693810193909352660100000000000090910473ffffffffffffffffffffffffffffffffffffffff166060830152600181018054608084019190611cc390614cd8565b80601f0160208091040260200160405190810160405280929190818152602001828054611cef90614cd8565b8015611d3c5780601f10611d1157610100808354040283529160200191611d3c565b820191906000526020600020905b815481529060010190602001808311611d1f57829003601f168201915b5050505050815250509050919050565b611d546135f6565b73__$563c746fa3df0f1858d85f6ef4258864be$__6369fc1bdf603460366040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001603b60089054906101000a900461ffff1661ffff168152602001611e2b608090565b61ffff168152506040518463ffffffff1660e01b8152600401611e5093929190614d26565b602060405180830381865af4158015611e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e919190614db6565b1561119357603b805468010000000000000000900461ffff16906008611eb683614e02565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603460209081526040808320338452603590925290912073__$c3724b8d563dc83a94e797176cddecb3b9$__9163eac4d7039185856002811115611f3a57611f3a614b57565b6040518563ffffffff1660e01b81526004016117939493929190614e24565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$563c746fa3df0f1858d85f6ef4258864be$__906348c2ca8c906117939060349086908690600401614e5b565b73__$c3724b8d563dc83a94e797176cddecb3b9$__631e6473f9603460366037603560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a600281111561208557612085614b57565b600281111561209657612096614b57565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a09093019273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121899190614a46565b73ffffffffffffffffffffffffffffffffffffffff90811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190614a46565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b8152600401610be6959493929190614ec0565b6000604051806101c001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a085015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa1580156124d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f89190614a46565b6040517ffa50f29700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063fa50f29790602401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190614db6565b1515905273ffffffffffffffffffffffffffffffffffffffff86166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$d5ddd09ae98762b8929dd85e54b218e259$__91632e7263ea9161260f91603491603691603791908890600401615069565b60006040518083038186803b15801561262757600080fd5b505af415801561263b573d6000803e3d6000fd5b50505050505050505050505050505050565b6126556135f6565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b6040805173ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$563c746fa3df0f1858d85f6ef4258864be$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a69190614a46565b73ffffffffffffffffffffffffffffffffffffffff90811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af415801561287b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289f919061520f565b949c939b5091995097509550909350915050565b6001805460ff16806128c45750303b155b806128d0575060005481115b61295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610e57565b60015460ff1615801561299957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525090612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c41790558015612ab257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$c3724b8d563dc83a94e797176cddecb3b9$__90636973f74490606401611793565b612b48613941565b6040517f87b322b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044810182905273__$563c746fa3df0f1858d85f6ef4258864be$__906387b322b29060640160006040518083038186803b158015612bd057600080fd5b505af4158015612be4573d6000803e3d6000fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260346020526040812061131990613ace565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff811115612c4d57612c4d61475d565b604051908082528060200260200182016040528015612c76578160200160208202803683370190505b50905060005b83811015612d4d5760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612d2d5760008181526036602052604090205473ffffffffffffffffffffffffffffffffffffffff1682612cde8584615259565b81518110612cee57612cee615270565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d3b565b82612d378161529f565b9350505b80612d458161529f565b915050612c7c565b5091038152919050565b612d5f6135f6565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5060ff8216600090815260376020908152604091829020835181548386015194860151606087015173ffffffffffffffffffffffffffffffffffffffff166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416929094169190911791909117949094161792909217825560808301518051849392611193926001850192910190613d42565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260346020908152604091829020600401548251808401909352600283527f3131000000000000000000000000000000000000000000000000000000000000918301919091529091163314612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5073__$db79717e66442ee197e8271d032a066e34$__638a5dadd160346036603760356040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561307b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309f9190614a46565b73ffffffffffffffffffffffffffffffffffffffff90811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526131129594939291906004016152d8565b60006040518083038186803b15801561312a57600080fd5b505af415801561313e573d6000803e3d6000fd5b50505050505050505050565b60006131546137b4565b73ffffffffffffffffffffffffffffffffffffffff84166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$b06080f092f400a43662c3f835a4d9baa8$__90638e7432489060a401611293565b6131f26135f6565b6040517f1e3b41450000000000000000000000000000000000000000000000000000000081526034600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015273__$563c746fa3df0f1858d85f6ef4258864be$__90631e3b414590604401611167565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c4810182905260009073ffffffffffffffffffffffffffffffffffffffff8a169063d505accf9060e401600060405180830381600087803b1580156132f457600080fd5b505af1158015613308573d6000803e3d6000fd5b5050505060006040518060a001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189600281111561334d5761334d614b57565b600281111561335e5761335e614b57565b815273ffffffffffffffffffffffffffffffffffffffff89166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$c3724b8d563dc83a94e797176cddecb3b9$__916340e95de6916133eb916034916036918790600401614bc1565b602060405180830381865af4158015613408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342c9190614c34565b9a9950505050505050505050565b6134426135f6565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166134c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff1615158061355a57506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e005473ffffffffffffffffffffffffffffffffffffffff8381169116145b6040518060400160405280600281526020017f3832000000000000000000000000000000000000000000000000000000000000815250906135c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b5073ffffffffffffffffffffffffffffffffffffffff91909116600090815260346020526040902090359055565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369c9190614a46565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b50565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561376a575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546112d7906fffffffffffffffffffffffffffffffff808216916137a8917001000000000000000000000000000000009091041684613b52565b90613b5f565b50919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561381f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138439190614a46565b6040517f726600ce00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff919091169063726600ce90602401602060405180830381865afa1580156138af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d39190614db6565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d09190614a46565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9190911690637be53ca190602401602060405180830381865afa158015613a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a609190614db6565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579190614b44565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613b14575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546112d7906fffffffffffffffffffffffffffffffff808216916137a8917001000000000000000000000000000000009091041684613bb6565b60006112d7838342613bfb565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517613b9457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080613bca64ffffffffff841642615259565b613bd490856153b4565b6301e1338090049050613bf3816b033b2e3c9fd0803ce8000000615420565b949350505050565b600080613c0f64ffffffffff851684615259565b905080613c2b576b033b2e3c9fd0803ce80000009150506112d7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511613c61576000613c66565b600285035b925066038882915c4000613c7a8a80613b5f565b81613c8757613c876153f1565b0491506301e13380613c99838b613b5f565b81613ca657613ca66153f1565b049050600082613cb686886153b4565b613cc091906153b4565b60029004905060008285613cd4888a6153b4565b613cde91906153b4565b613ce891906153b4565b60069004905080826301e13380613cff8a8f6153b4565b613d099190615438565b613d1f906b033b2e3c9fd0803ce8000000615420565b613d299190615420565b613d339190615420565b9b9a5050505050505050505050565b828054613d4e90614cd8565b90600052602060002090601f016020900481019282613d705760008555613db6565b82601f10613d8957805160ff1916838001178555613db6565b82800160010185558215613db6579182015b82811115613db6578251825591602001919060010190613d9b565b50613dc2929150613dc6565b5090565b5b80821115613dc25760008155600101613dc7565b73ffffffffffffffffffffffffffffffffffffffff8116811461372157600080fd5b8035613e0881613ddb565b919050565b801515811461372157600080fd5b600080600080600060a08688031215613e3357600080fd5b8535613e3e81613ddb565b94506020860135613e4e81613ddb565b93506040860135613e5e81613ddb565b9250606086013591506080860135613e7581613e0d565b809150509295509295909350565b803561ffff81168114613e0857600080fd5b803560ff81168114613e0857600080fd5b600080600080600080600080610100898b031215613ec357600080fd5b8835613ece81613ddb565b9750602089013596506040890135613ee581613ddb565b9550613ef360608a01613e83565b945060808901359350613f0860a08a01613e95565b925060c0890135915060e089013590509295985092959890939650565b60008060408385031215613f3857600080fd5b8235613f4381613ddb565b91506020830135613f5381613ddb565b809150509250929050565b600060208284031215613f7057600080fd5b6112d782613e95565b600080600060608486031215613f8e57600080fd5b8335613f9981613ddb565b95602085013595506040909401359392505050565b600060208284031215613fc057600080fd5b5035919050565b600060208284031215613fd957600080fd5b81356112d781613ddb565b81515181526101e08101602083015161401160208401826fffffffffffffffffffffffffffffffff169052565b50604083015161403560408401826fffffffffffffffffffffffffffffffff169052565b50606083015161405960608401826fffffffffffffffffffffffffffffffff169052565b50608083015161407d60808401826fffffffffffffffffffffffffffffffff169052565b5060a08301516140a160a08401826fffffffffffffffffffffffffffffffff169052565b5060c08301516140ba60c084018264ffffffffff169052565b5060e08301516140d060e084018261ffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f84011261417357600080fd5b50813567ffffffffffffffff81111561418b57600080fd5b6020830191508360208285010111156141a357600080fd5b9250929050565b60008060008060008060a087890312156141c357600080fd5b86356141ce81613ddb565b955060208701356141de81613ddb565b945060408701359350606087013567ffffffffffffffff81111561420157600080fd5b61420d89828a01614161565b9094509250614220905060808801613e83565b90509295509295509295565b60006020828403121561423e57600080fd5b6112d782613e83565b6000806000806080858703121561425d57600080fd5b843561426881613ddb565b93506020850135925060408501359150606085013561428681613ddb565b939692955090935050565b600080604083850312156142a457600080fd5b82356142af81613ddb565b91506020830135613f5381613e0d565b600080600080608085870312156142d557600080fd5b84356142e081613ddb565b93506020850135925060408501356142f781613ddb565b915061430560608601613e83565b905092959194509250565b60008060006060848603121561432557600080fd5b833561433081613ddb565b925060208401359150604084013561434781613ddb565b809150509250925092565b6000815180845260005b818110156143785760208185018101518683018201520161435c565b8181111561438a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff8084511660208401528060208501511660408401528060408501511660608401525073ffffffffffffffffffffffffffffffffffffffff6060840151166080830152608083015160a080840152613bf360c0840182614352565b600080600080600060a0868803121561443857600080fd5b853561444381613ddb565b9450602086013561445381613ddb565b9350604086013561446381613ddb565b9250606086013561447381613ddb565b91506080860135613e7581613ddb565b6000806040838503121561449657600080fd5b82356144a181613ddb565b946020939093013593505050565b60008083601f8401126144c157600080fd5b50813567ffffffffffffffff8111156144d957600080fd5b6020830191508360208260051b85010111156141a357600080fd5b6000806020838503121561450757600080fd5b823567ffffffffffffffff81111561451e57600080fd5b61452a858286016144af565b90969095509350505050565b600080600080600060a0868803121561454e57600080fd5b853561455981613ddb565b9450602086013593506040860135925061447360608701613e83565b600080600080600080600080600080600060e08c8e03121561459657600080fd5b61459f8c613dfd565b9a5067ffffffffffffffff8060208e013511156145bb57600080fd5b6145cb8e60208f01358f016144af565b909b50995060408d01358110156145e157600080fd5b6145f18e60408f01358f016144af565b909950975060608d013581101561460757600080fd5b6146178e60608f01358f016144af565b909750955061462860808e01613dfd565b94508060a08e0135111561463b57600080fd5b5061464c8d60a08e01358e01614161565b909350915061465d60c08d01613e83565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff81168114613e0857600080fd5b600080604083850312156146a257600080fd5b6146ab8361466f565b91506146b96020840161466f565b90509250929050565b6000806000606084860312156146d757600080fd5b83356146e281613ddb565b925060208401356146f281613ddb565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561475157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161471f565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156147af576147af61475d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156147fc576147fc61475d565b604052919050565b6000806040838503121561481757600080fd5b61482083613e95565b915060208084013567ffffffffffffffff8082111561483e57600080fd5b9085019060a0828803121561485257600080fd5b61485a61478c565b61486383613e83565b8152614870848401613e83565b8482015261488060408401613e83565b6040820152606083013561489381613ddb565b60608201526080830135828111156148aa57600080fd5b80840193505087601f8401126148bf57600080fd5b8235828111156148d1576148d161475d565b614901857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016147b5565b9250808352888582860101111561491757600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c0878903121561495557600080fd5b863561496081613ddb565b9550602087013561497081613ddb565b9450604087013561498081613ddb565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b0312156149be57600080fd5b88356149c981613ddb565b975060208901359650604089013595506060890135613ef381613ddb565b60008082840360408112156149fb57600080fd5b8335614a0681613ddb565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215614a3857600080fd5b506020830190509250929050565b600060208284031215614a5857600080fd5b81516112d781613ddb565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a0830152604083015173ffffffffffffffffffffffffffffffffffffffff80821660c08501528060608601511660e085015250506080830151610100614aeb8185018373ffffffffffffffffffffffffffffffffffffffff169052565b60a0850151151561012085015260c085015173ffffffffffffffffffffffffffffffffffffffff90811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b6020815260006112d76020830184614352565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614bbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006101008201905085825284602083015283604083015273ffffffffffffffffffffffffffffffffffffffff808451166060840152602084015160808401526040840151614c1360a0850182614b86565b5060608401511660c0830152608090920151151560e0909101529392505050565b600060208284031215614c4657600080fd5b5051919050565b82815260406020820152600073ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401525060408301516080830152606083015160e060a0840152614ca8610120840182614352565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c90821680614cec57607f821691505b602082108114156137ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006101208201905084825283602083015273ffffffffffffffffffffffffffffffffffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a0830151614d9c60e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b600060208284031215614dc857600080fd5b81516112d781613e0d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff80831681811415614e1a57614e1a614dd3565b6001019392505050565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff83166040820152608081016115e96060830184614b86565b83815260406020808301829052908201839052600090849060608401835b86811015614eb4578335614e8c81613ddb565b73ffffffffffffffffffffffffffffffffffffffff1682529282019290820190600101614e79565b50979650505050505050565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e08301526080830151610100614f5c81850183614b86565b60a08501519150610120614f758186018461ffff169052565b60c08601519250610140614f8c8187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e08501529050614b39565b600081518084526020808501945080840160005b8381101561502e57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614ffc565b509495945050505050565b600081518084526020808501945080840160005b8381101561502e5781518752958201959082019060010161504d565b85815284602082015283604082015282606082015260a060808201526150a860a08201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516101c08060c08501526150c6610260850183614fe8565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e08701526151028483615039565b9350606087015191506101008187860301818801526151218584615039565b94506080880151925061012061514e8189018573ffffffffffffffffffffffffffffffffffffffff169052565b60a089015193506101408389880301818a015261516b8786614352565b965060c08a015194506101609350615188848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b015196506151e26102008b018873ffffffffffffffffffffffffffffffffffffffff169052565b8a015160ff81166102208b015295506151f9915050565b8701518015156102408801529250614eb4915050565b60008060008060008060c0878903121561522857600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008282101561526b5761526b614dd3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152d1576152d1614dd3565b5060010190565b60006101a08201905086825285602083015284604083015283606083015273ffffffffffffffffffffffffffffffffffffffff8084511660808401528060208501511660a084015250604083015161534860c084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e085015191506153a061016085018373ffffffffffffffffffffffffffffffffffffffff169052565b84015160ff81166101808501529050614b39565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153ec576153ec614dd3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000821982111561543357615433614dd3565b500190565b60008261546e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea264697066735822122080aadf89d3e671d640d0df3da4ce810529e5e059dd15f51852bbce03f60f26c164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x309 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A708E92 GT PUSH2 0x19C JUMPI DUP1 PUSH4 0xD15E0053 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEE3E210B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0x96D JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0x980 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0x993 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0x922 JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x6DA JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0x934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5ED3933 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0x8E9 JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0x8FC JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0x90F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x8AE JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x8C1 JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x8D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x875 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x888 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x89B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x7D3 JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x826 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CD19996 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x79A JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x7AD JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x7C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x774 JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x787 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD GT PUSH2 0x260 JUMPI DUP1 PUSH4 0x617BA037 GT PUSH2 0x209 JUMPI DUP1 PUSH4 0x69A933A5 GT PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x726 JUMPI DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x617BA037 EQ PUSH2 0x6DA JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x6ED JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x700 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x23A JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x67A JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x6B4 JUMPI DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x6C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD EQ PUSH2 0x5F6 JUMPI DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x609 JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x61C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 GT PUSH2 0x2C2 JUMPI DUP1 PUSH4 0x2DAD97D4 GT PUSH2 0x29C JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x402 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x428 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x272D9072 EQ PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x3EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C205F0 GT PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x39D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x323 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x321 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x3E1B JUMP JUMPDEST PUSH2 0x9A2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x32B PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x321 PUSH2 0x34C CALLDATASIZE PUSH1 0x4 PUSH2 0x3EA6 JUMP JUMPDEST PUSH2 0xC1D JUMP JUMPDEST PUSH2 0x378 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x3E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F25 JUMP JUMPDEST PUSH2 0xDCD JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x32B JUMP JUMPDEST PUSH2 0x321 PUSH2 0x3FD CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5E JUMP JUMPDEST PUSH2 0xFBB JUMP JUMPDEST PUSH2 0x32B PUSH2 0x410 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F79 JUMP JUMPDEST PUSH2 0x119A JUMP JUMPDEST PUSH2 0x321 PUSH2 0x423 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FAE JUMP JUMPDEST PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x5E9 PUSH2 0x436 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x3FE4 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x604 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x12EB JUMP JUMPDEST PUSH2 0x321 PUSH2 0x617 CALLDATASIZE PUSH1 0x4 PUSH2 0x41AA JUMP JUMPDEST PUSH2 0x131F JUMP JUMPDEST PUSH2 0x66B PUSH2 0x62A CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x378 PUSH2 0x688 CALLDATASIZE PUSH1 0x4 PUSH2 0x422C JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x6C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4247 JUMP JUMPDEST PUSH2 0x1499 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4291 JUMP JUMPDEST PUSH2 0x15F2 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x42BF JUMP JUMPDEST PUSH2 0x17C7 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6FB CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x18CA JUMP JUMPDEST PUSH2 0x32B PUSH2 0x70E CALLDATASIZE PUSH1 0x4 PUSH2 0x4310 JUMP JUMPDEST PUSH2 0x1946 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x721 CALLDATASIZE PUSH1 0x4 PUSH2 0x42BF JUMP JUMPDEST PUSH2 0x1B65 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x767 PUSH2 0x762 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5E JUMP JUMPDEST PUSH2 0x1C12 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x43BD JUMP JUMPDEST PUSH2 0x321 PUSH2 0x782 CALLDATASIZE PUSH1 0x4 PUSH2 0x4420 JUMP JUMPDEST PUSH2 0x1D4C JUMP JUMPDEST PUSH2 0x321 PUSH2 0x795 CALLDATASIZE PUSH1 0x4 PUSH2 0x4483 JUMP JUMPDEST PUSH2 0x1ED8 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x44F4 JUMP JUMPDEST PUSH2 0x1F59 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7BB CALLDATASIZE PUSH1 0x4 PUSH2 0x4536 JUMP JUMPDEST PUSH2 0x1FAE JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7CE CALLDATASIZE PUSH1 0x4 PUSH2 0x4575 JUMP JUMPDEST PUSH2 0x2294 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x468F JUMP JUMPDEST PUSH2 0x264D JUMP JUMPDEST PUSH2 0x7F9 PUSH2 0x7F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x66B PUSH2 0x834 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x883 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x28B3 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x896 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F25 JUMP JUMPDEST PUSH2 0x2AB7 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0x2B40 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x8BC CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x2BED JUMP JUMPDEST PUSH2 0x8C9 PUSH2 0x2C1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x4703 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4804 JUMP JUMPDEST PUSH2 0x2D57 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x493C JUMP JUMPDEST PUSH2 0x2EC3 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x90A CALLDATASIZE PUSH1 0x4 PUSH2 0x3F79 JUMP JUMPDEST PUSH2 0x314A JUMP JUMPDEST PUSH2 0x321 PUSH2 0x91D CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH2 0x31EA JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x32B JUMP JUMPDEST PUSH2 0x32B PUSH2 0x942 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FC7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x97B CALLDATASIZE PUSH1 0x4 PUSH2 0x49A1 JUMP JUMPDEST PUSH2 0x325F JUMP JUMPDEST PUSH2 0x321 PUSH2 0x98E CALLDATASIZE PUSH1 0x4 PUSH2 0x49E7 JUMP JUMPDEST PUSH2 0x343A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xADB SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBAD SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBE6 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4A63 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xC12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xCC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xDBF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xDD5 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xE60 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0xEF6 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xF64 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10D0 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1167 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1193 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1238 JUMPI PUSH2 0x1238 PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1249 JUMPI PUSH2 0x1249 PUSH2 0x4B57 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1293 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4BC1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x12B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12D4 SWAP2 SWAP1 PUSH2 0x4C34 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x12E6 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1319 SWAP1 PUSH2 0x3724 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x1460 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4C4D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x148C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1537 JUMPI PUSH2 0x1537 PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1548 JUMPI PUSH2 0x1548 PUSH2 0x4B57 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x15A8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4BC1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x15C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15E9 SWAP2 SWAP1 PUSH2 0x4C34 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16F3 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x18C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18D2 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9CF5702300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x9CF57023 SWAP1 PUSH1 0x64 ADD PUSH2 0x1167 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A99 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x1B6D PUSH2 0x37B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1894 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1CC3 SWAP1 PUSH2 0x4CD8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1CEF SWAP1 PUSH2 0x4CD8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1D3C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1D11 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1D3C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1D1F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D54 PUSH2 0x35F6 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E2B PUSH1 0x80 SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E50 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D26 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1E6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E91 SWAP2 SWAP1 PUSH2 0x4DB6 JUMP JUMPDEST ISZERO PUSH2 0x1193 JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x1EB6 DUP4 PUSH2 0x4E02 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1F3A JUMPI PUSH2 0x1F3A PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1793 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4E24 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x1793 SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4E5B JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2085 JUMPI PUSH2 0x2085 PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2096 JUMPI PUSH2 0x2096 PUSH2 0x4B57 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2165 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2189 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2237 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x225B SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBE6 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4EC0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24F8 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2564 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2588 SWAP2 SWAP1 PUSH2 0x4DB6 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x260F SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5069 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2627 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x263B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2655 PUSH2 0x35F6 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2782 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27A6 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x287B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x289F SWAP2 SWAP1 PUSH2 0x520F JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x28C4 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x28D0 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x295C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xE57 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2999 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2A56 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2AB2 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x1793 JUMP JUMPDEST PUSH2 0x2B48 PUSH2 0x3941 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2BE4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1319 SWAP1 PUSH2 0x3ACE JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2C4D JUMPI PUSH2 0x2C4D PUSH2 0x475D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2C76 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2D4D JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2D2D JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH2 0x2CDE DUP6 DUP5 PUSH2 0x5259 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2CEE JUMPI PUSH2 0x2CEE PUSH2 0x5270 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2D3B JUMP JUMPDEST DUP3 PUSH2 0x2D37 DUP2 PUSH2 0x529F JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2D45 DUP2 PUSH2 0x529F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2C7C JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2D5F PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x2DCE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x1193 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x3D42 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x2F61 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x307B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x309F SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x3112 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x52D8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x312A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x313E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3154 PUSH2 0x37B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x31F2 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x1167 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3308 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x334D JUMPI PUSH2 0x334D PUSH2 0x4B57 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x335E JUMPI PUSH2 0x335E PUSH2 0x4B57 JUMP JUMPDEST DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x33EB SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4BC1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3408 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x342C SWAP2 SWAP1 PUSH2 0x4C34 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3442 PUSH2 0x35F6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x34C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x355A JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x35C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 CALLDATALOAD SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3678 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x369C SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3721 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x376A JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x12D7 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x37A8 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3B52 JUMP JUMPDEST SWAP1 PUSH2 0x3B5F JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x381F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3843 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38D3 SWAP2 SWAP1 PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3721 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39D0 SWAP2 SWAP1 PUSH2 0x4A46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A3C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A60 SWAP2 SWAP1 PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3721 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE57 SWAP2 SWAP1 PUSH2 0x4B44 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3B14 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x12D7 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x37A8 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3BB6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12D7 DUP4 DUP4 TIMESTAMP PUSH2 0x3BFB JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3B94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3BCA PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5259 JUMP JUMPDEST PUSH2 0x3BD4 SWAP1 DUP6 PUSH2 0x53B4 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x3BF3 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5420 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3C0F PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5259 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3C2B JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x12D7 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x3C61 JUMPI PUSH1 0x0 PUSH2 0x3C66 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3C7A DUP11 DUP1 PUSH2 0x3B5F JUMP JUMPDEST DUP2 PUSH2 0x3C87 JUMPI PUSH2 0x3C87 PUSH2 0x53F1 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3C99 DUP4 DUP12 PUSH2 0x3B5F JUMP JUMPDEST DUP2 PUSH2 0x3CA6 JUMPI PUSH2 0x3CA6 PUSH2 0x53F1 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x3CB6 DUP7 DUP9 PUSH2 0x53B4 JUMP JUMPDEST PUSH2 0x3CC0 SWAP2 SWAP1 PUSH2 0x53B4 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x3CD4 DUP9 DUP11 PUSH2 0x53B4 JUMP JUMPDEST PUSH2 0x3CDE SWAP2 SWAP1 PUSH2 0x53B4 JUMP JUMPDEST PUSH2 0x3CE8 SWAP2 SWAP1 PUSH2 0x53B4 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x3CFF DUP11 DUP16 PUSH2 0x53B4 JUMP JUMPDEST PUSH2 0x3D09 SWAP2 SWAP1 PUSH2 0x5438 JUMP JUMPDEST PUSH2 0x3D1F SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x5420 JUMP JUMPDEST PUSH2 0x3D29 SWAP2 SWAP1 PUSH2 0x5420 JUMP JUMPDEST PUSH2 0x3D33 SWAP2 SWAP1 PUSH2 0x5420 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x3D4E SWAP1 PUSH2 0x4CD8 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x3D70 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3DB6 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3D89 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3DB6 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3DB6 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3DB6 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3D9B JUMP JUMPDEST POP PUSH2 0x3DC2 SWAP3 SWAP2 POP PUSH2 0x3DC6 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x3DC2 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3DC7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3721 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3E08 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3721 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3E33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3E3E DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3E4E DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3E5E DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3E75 DUP2 PUSH2 0x3E0D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3E08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3E08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3EC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3ECE DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3EE5 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 POP PUSH2 0x3EF3 PUSH1 0x60 DUP11 ADD PUSH2 0x3E83 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3F08 PUSH1 0xA0 DUP11 ADD PUSH2 0x3E95 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3F43 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3F53 DUP2 PUSH2 0x3DDB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D7 DUP3 PUSH2 0x3E95 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3F8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3F99 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12D7 DUP2 PUSH2 0x3DDB JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x4011 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4035 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x4059 PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x407D PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x40A1 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x40BA PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x40D0 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x41A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x41C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x41CE DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x41DE DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4201 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x420D DUP10 DUP3 DUP11 ADD PUSH2 0x4161 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x4220 SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x3E83 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x423E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D7 DUP3 PUSH2 0x3E83 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x425D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4268 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4286 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x42A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x42AF DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3F53 DUP2 PUSH2 0x3E0D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x42D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x42E0 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x42F7 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 POP PUSH2 0x4305 PUSH1 0x60 DUP7 ADD PUSH2 0x3E83 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4330 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x4347 DUP2 PUSH2 0x3DDB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4378 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x435C JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x438A JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x3BF3 PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x4352 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4443 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4453 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4463 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4473 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3E75 DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x44A1 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x44C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x44D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x41A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4507 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x451E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x452A DUP6 DUP3 DUP7 ADD PUSH2 0x44AF JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x454E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4559 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4473 PUSH1 0x60 DUP8 ADD PUSH2 0x3E83 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x4596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x459F DUP13 PUSH2 0x3DFD JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x45BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45CB DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x44AF JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x45E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45F1 DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x44AF JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4607 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4617 DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x44AF JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x4628 PUSH1 0x80 DUP15 ADD PUSH2 0x3DFD JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x463B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x464C DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x4161 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x465D PUSH1 0xC0 DUP14 ADD PUSH2 0x3E83 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3E08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x46A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46AB DUP4 PUSH2 0x466F JUMP JUMPDEST SWAP2 POP PUSH2 0x46B9 PUSH1 0x20 DUP5 ADD PUSH2 0x466F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x46D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x46E2 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x46F2 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4751 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x471F JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x47AF JUMPI PUSH2 0x47AF PUSH2 0x475D JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x47FC JUMPI PUSH2 0x47FC PUSH2 0x475D JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4817 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4820 DUP4 PUSH2 0x3E95 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x483E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x4852 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x485A PUSH2 0x478C JUMP JUMPDEST PUSH2 0x4863 DUP4 PUSH2 0x3E83 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4870 DUP5 DUP5 ADD PUSH2 0x3E83 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x4880 PUSH1 0x40 DUP5 ADD PUSH2 0x3E83 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x4893 DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x48AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x48BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x48D1 JUMPI PUSH2 0x48D1 PUSH2 0x475D JUMP JUMPDEST PUSH2 0x4901 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x47B5 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x4917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4955 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x4960 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x4970 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x4980 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x49BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x49C9 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3EF3 DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x49FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4A06 DUP2 PUSH2 0x3DDB JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x4A38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4A58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12D7 DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4AEB DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x12D7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4352 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x4BBD JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x4C13 PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x4B86 JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x4CA8 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x4352 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x4CEC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x37AE JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4D9C PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4DC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12D7 DUP2 PUSH2 0x3E0D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4E1A JUMPI PUSH2 0x4E1A PUSH2 0x4DD3 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x15E9 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4B86 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x4EB4 JUMPI DUP4 CALLDATALOAD PUSH2 0x4E8C DUP2 PUSH2 0x3DDB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4E79 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4F5C DUP2 DUP6 ADD DUP4 PUSH2 0x4B86 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x4F75 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x4F8C DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x4B39 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x502E JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4FFC JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x502E JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x504D JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x50A8 PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x50C6 PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x4FE8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x5102 DUP5 DUP4 PUSH2 0x5039 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x5121 DUP6 DUP5 PUSH2 0x5039 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x514E DUP2 DUP10 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x516B DUP8 DUP7 PUSH2 0x4352 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x5188 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x51E2 PUSH2 0x200 DUP12 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x51F9 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x4EB4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x5228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x526B JUMPI PUSH2 0x526B PUSH2 0x4DD3 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x52D1 JUMPI PUSH2 0x52D1 PUSH2 0x4DD3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5348 PUSH1 0xC0 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x53A0 PUSH2 0x160 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x4B39 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x53EC JUMPI PUSH2 0x53EC PUSH2 0x4DD3 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5433 JUMPI PUSH2 0x5433 PUSH2 0x4DD3 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x546E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP1 0xAA 0xDF DUP10 0xD3 0xE6 PUSH18 0xD640D0DF3DA4CE810529E5E059DD15F51852 0xBB 0xCE SUB 0xF6 0xF 0x26 0xC1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1828:19453:112:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755;;;;;;:::i;:::-;;:::i;:::-;;1941:43;;1981:3;1941:43;;;;;1320:25:124;;;1308:2;1293:18;1941:43:112;;;;;;;;5034:654;;;;;;:::i;:::-;;:::i;1988:58::-;;;;;;;;2700:42:124;2688:55;;;2670:74;;2658:2;2643:18;1988:58:112;2493:257:124;15738:122:112;15833:22;;;;15738:122;;;3055:34:124;3043:47;;;3025:66;;3013:2;2998:18;15738:122:112;2879:218:124;17958:385:112;;;;;;:::i;:::-;;:::i;15596:114::-;15687:18;;15596:114;;19799:411;;;;;;:::i;:::-;;:::i;8616:509::-;;;;;;:::i;:::-;;:::i;18772:152::-;;;;;;:::i;:::-;;:::i;12875:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13005:16:112;;;;;;;;:9;:16;;;;;;;;;12998:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;;;;;;-1:-1:-1;12998:23:112;;;;12875:151;;;;;;;;:::i;14397:168::-;;;;;;:::i;:::-;;:::i;12077:604::-;;;;;;:::i;:::-;;:::i;14010:167::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;14154:18:112;;;;;;;:12;:18;;;;;14147:25;;;;;;;;;;;;14010:167;;;;8476:13:124;;8458:32;;8446:2;8431:18;14010:167:112;8234:262:124;15288:109:112;;;;;;:::i;:::-;15375:17;;15353:7;15375:17;;;:13;:17;;;;;;;;;15288:109;7220:523;;;;;;:::i;:::-;;:::i;9651:404::-;;;;;;:::i;:::-;;:::i;4601:405::-;;;;;;:::i;:::-;;:::i;17775:155::-;;;;;;:::i;:::-;;:::i;5716:559::-;;;;;;:::i;:::-;;:::i;3961:334::-;;;;;;:::i;:::-;;:::i;15888:133::-;15989:27;;;;;;;15888:133;;19613:158;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17013:734::-;;;;;;:::i;:::-;;:::i;9153:268::-;;;;;;:::i;:::-;;:::i;12709:138::-;;;;;;:::i;:::-;;:::i;6303:889::-;;;;;;:::i;:::-;;:::i;10866:1183::-;;;;;;:::i;:::-;;:::i;18952:278::-;;;;;;:::i;:::-;;:::i;13054:721::-;;;;;;:::i;:::-;;:::i;:::-;;;;16946:25:124;;;17002:2;16987:18;;16980:34;;;;17030:18;;;17023:34;;;;17088:2;17073:18;;17066:34;17131:3;17116:19;;17109:35;17175:3;17160:19;;17153:35;16933:3;16918:19;13054:721:112;16659:535:124;13803:179:112;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;13947:16:112;;;;;;;:9;:16;;;;;13940:37;;;;;;;;;;;;13803:179;3720:213;;;;;;:::i;:::-;;:::i;9449:174::-;;;;;;:::i;:::-;;:::i;20602:180::-;;;;;;:::i;:::-;;:::i;14205:164::-;;;;;;:::i;:::-;;:::i;14593:667::-;;;:::i;:::-;;;;;;;:::i;19258:327::-;;;;;;:::i;:::-;;:::i;16211:774::-;;;;;;:::i;:::-;;:::i;4323:250::-;;;;;;:::i;:::-;;:::i;20394:180::-;;;;;;:::i;:::-;;:::i;15425:143::-;15532:31;;;;15425:143;;20238:128;;;;;;:::i;:::-;20336:25;;20314:7;20336:25;;;:19;:25;;;;;;;;;20238:128;7771:817;;;;;;:::i;:::-;;:::i;18371:373::-;;;;;;:::i;:::-;;:::i;16049:134::-;;;5284:3:88;23358:38:124;;23346:2;23331:18;16049:134:112;23214:188:124;10083:755:112;10261:16;:39;10308:9;10325:13;10346:12;10366:16;10390:437;;;;;;;;10454:14;;;;;;;;;;;10390:437;;;;;;10491:11;10390:437;;;;10529:15;10390:437;;;;;;10565:9;10390:437;;;;;;10590:4;10390:437;;;;;;10619:13;10390:437;;;;;;10655:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:437;;;;;;10719:25;;;;;;;:19;10390:437;10719:25;;;;;;;;;;;10390:437;;;;10775:43;;;;;;;10390:437;;;;;10775:18;:41;;;;;;:43;;;;;10390:437;10775:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:437;;;;;10261:572;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755;;;;;:::o;5034:654::-;5265:150;;;;;5303:10;5265:150;;;25883:34:124;5329:4:112;25933:18:124;;;25926:43;25985:18;;;25978:34;;;26028:18;;;26021:34;;;26104:4;26092:17;;26071:19;;;26064:46;26126:19;;;26119:35;;;26170:19;;;26163:35;;;5265:30:112;;;;;;25794:19:124;;5265:150:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;5492:24:112;;;;;;;;:12;:24;;;;;;;;;5524:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5421:262;;;;;5454:9;5421:262;;;26637:25:124;5471:13:112;26678:18:124;;;26671:34;26721:18;;;26714:34;;;;26849:13;;26845:22;;26825:18;;;26818:50;26905:22;26884:19;;;26877:51;26969:22;;26965:31;;;26944:19;;;26937:60;27038:22;27034:35;;;27013:19;;;27006:64;5421:11:112;;:25;;26609:19:124;;5421:262:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:654;;;;;;;;:::o;17958:385::-;2178:23;:21;:23::i;:::-;18143:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;18122:19:::1;::::0;::::1;18114:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;18187:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18215:16:112::1;::::0;;:13:::1;:16;::::0;;;:25:::1;::::0;;::::1;:16:::0;::::1;:25;18187:53;18242:23;;;;;;;;;;;;;;;;::::0;18179:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18272:16:112::1;::::0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:44:::1;;:66:::0;;;::::1;::::0;;;::::1;;::::0;;17958:385::o;19799:411::-;19871:10;:30;19909:9;19926:13;19947:16;19971:19;19998:12;:24;20011:10;19998:24;;;;;;;;;;;;;;;20030:169;;;;;;;;20091:14;;;;;;;;;;;20030:169;;;;;;20123:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20030:169;;;;;;20180:10;20030:169;;;;;19871:334;;;;;;;;;;;;;;;;;;;27877:25:124;;;27933:2;27918:18;;;27911:34;;;;27976:2;27961:18;;;27954:34;;;;28019:2;28004:18;;27997:34;;;;28062:3;28047:19;;28040:35;28112:13;;28106:3;28091:19;;28084:42;28173:15;;;28167:22;28191:42;28163:71;28157:3;28142:19;;28135:100;28282:15;28276:22;28300:4;28272:33;28266:3;28251:19;;28244:62;27864:3;27849:19;;27306:1006;19871:334:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19799:411;:::o;8616:509::-;8748:7;8776:11;:24;8810:9;8829:13;8852:12;:24;8865:10;8852:24;;;;;;;;;;;;;;;8886:226;;;;;;;;8934:5;8886:226;;;;;;8959:6;8886:226;;;;9022:16;8995:44;;;;;;;;:::i;:::-;8886:226;;;;;;;;:::i;:::-;;;9063:10;8886:226;;;;9097:4;8886:226;;;;;8776:344;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8763:357;;8616:509;;;;;;:::o;18772:152::-;2178:23;:21;:23::i;:::-;18887:18:::1;:32:::0;18772:152::o;14397:168::-;14524:16;;;14502:7;14524:16;;;:9;:16;;;;;:36;;:34;:36::i;:::-;14517:43;14397:168;-1:-1:-1;;14397:168:112:o;12077:604::-;12256:50;12309:293;;;;;;;;12366:15;12309:293;;;;;;12396:5;12309:293;;;;;;12417:6;12309:293;;;;12439:6;;12309:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12309:293:112;;;-1:-1:-1;;;12309:293:112;;;;;;;;;;;12515:27;;;;;;;;12309:293;;;;;;;;12573:22;;12309:293;;;;;;;;12646:16;;;;;:9;:16;;;;;12608:68;;;;;12256:346;;-1:-1:-1;12608:14:112;;:37;;:68;;12256:346;;12608:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12250:431;12077:604;;;;;;:::o;7220:523::-;7365:7;7393:11;:24;7427:9;7446:13;7469:12;:24;7482:10;7469:24;;;;;;;;;;;;;;;7503:227;;;;;;;;7551:5;7503:227;;;;;;7576:6;7503:227;;;;7639:16;7612:44;;;;;;;;:::i;:::-;7503:227;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;7503:227:112;;;;;7393:345;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7380:358;7220:523;-1:-1:-1;;;;;7220:523:112:o;9651:404::-;9769:11;:41;9818:9;9835:13;9856:16;9880:12;:24;9893:10;9880:24;;;;;;;;;;;;;;;9912:5;9925:15;9948:14;;;;;;;;;;;9970:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10033:10;10013:31;;;;:19;:31;;;;;;;;9769:281;;;;;;;;;;;;;31500:25:124;;;;31541:18;;;31534:34;;;;31584:18;;;31577:34;;;;31627:18;;;31620:34;;;;31673:42;31752:15;;;31731:19;;;31724:44;31812:14;31805:22;31784:19;;;31777:51;31877:6;31865:19;;;31844;;;31837:48;31922:15;31901:19;;;31894:44;10013:31:112;;31954:19:124;;;31947:46;31472:19;;9769:281:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9651:404;;:::o;4601:405::-;4810:24;;;;;;;;:12;:24;;;;;;;;;4842:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:262;;;;;4772:9;4739:262;;;26637:25:124;4789:13:112;26678:18:124;;;26671:34;26721:18;;;26714:34;;;;26849:13;;26845:22;;26825:18;;;26818:50;26905:22;26884:19;;;26877:51;26969:22;;26965:31;;;26944:19;;;26937:60;27038:22;27034:35;;;27013:19;;;27006:64;4739:11:112;;:25;;26609:19:124;;4739:262:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:405;;;;:::o;17775:155::-;2178:23;:21;:23::i;:::-;17864:61:::1;::::0;;;;17893:9:::1;17864:61;::::0;::::1;32291:25:124::0;17904:13:112::1;32332:18:124::0;;;32325:34;32407:42;32395:55;;32375:18;;;32368:83;17864:9:112::1;::::0;:28:::1;::::0;32264:18:124;;17864:61:112::1;32004:453:124::0;5716:559:112;5826:7;5854:11;:27;5891:9;5910:13;5933:16;5959:12;:24;5972:10;5959:24;;;;;;;;;;;;;;;5993:269;;;;;;;;6044:5;5993:269;;;;;;6069:6;5993:269;;;;6091:2;5993:269;;;;;;6120:14;;;;;;;;;;;5993:269;;;;;;6154:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5993:269;;;;;;6240:10;6220:31;;;;:19;5993:269;6220:31;;;;;;;;;;;;;5993:269;;;;;;;5854:416;;;;;;;;;;;;;32974:25:124;;;;33015:18;;;33008:34;;;;33058:18;;;33051:34;;;;33101:18;;;33094:34;;;;33230:13;;33226:22;;33205:19;;;33198:51;33292:15;;;33286:22;33265:19;;;33258:51;33356:15;;;33350:22;33346:31;;33325:19;;;33318:60;33116:2;33421:15;;33415:22;33394:19;;;33387:51;33220:3;33485:16;;33479:23;33475:32;33454:19;;;33447:61;33280:3;33555:16;33549:23;33545:34;33524:19;;;33517:63;32946:19;;5854:416:112;32462:1124:124;3961:334:112;2468:13;:11;:13::i;:::-;4195:24:::1;::::0;;::::1;;::::0;;;:12:::1;:24;::::0;;;;;;4118:172;;;;;4157:9:::1;4118:172;::::0;::::1;34025:25:124::0;4174:13:112::1;34066:18:124::0;;;34059:34;34109:18;;;34102:34;;;;34233:15;;;34213:18;;;34206:43;34265:19;;;34258:35;;;34309:19;;;34302:44;34395:6;34383:19;;34362;;;34355:48;4118:11:112::1;::::0;:31:::1;::::0;33997:19:124;;4118:172:112::1;33591:818:124::0;19613:158:112;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19746:20:112;;;;;;;:16;:20;;;;;;;;;19739:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19613:158;;;:::o;17013:734::-;2178:23;:21;:23::i;:::-;17253:9:::1;:28;17291:9;17310:13;17333:364;;;;;;;;17380:5;17333:364;;;;;;17412:13;17333:364;;;;;;17456:17;17333:364;;;;;;17506:19;17333:364;;;;;;17566:27;17333:364;;;;;;17620:14;;;;;;;;;;;17333:364;;;;;;17665:21;5284:3:88::0;;16049:134:112;17665:21:::1;17333:364;;;;::::0;17253:452:::1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17242:501;;;17720:14;:16:::0;;;;::::1;;;::::0;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;17013:734:::0;;;;;:::o;9153:268::-;9297:16;;;;;;;:9;:16;;;;;;;;9334:10;9321:24;;:12;:24;;;;;;9252:11;;:37;;9307:5;9393:16;9366:44;;;;;;;;:::i;:::-;9252:164;;;;;;;;;;;;;;;;;;:::i;12709:138::-;12792:50;;;;;:9;;:31;;:50;;12824:9;;12835:6;;;;12792:50;;;:::i;6303:889::-;6471:11;:25;6504:9;6521:13;6542:16;6566:12;:24;6579:10;6566:24;;;;;;;;;;;;;;;6598:583;;;;;;;;6645:5;6598:583;;;;;;6666:10;6598:583;;;;;;6698:10;6598:583;;;;;;6726:6;6598:583;;;;6787:16;6760:44;;;;;;;;:::i;:::-;6598:583;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;6869:4;6598:583;;;;;;;;6915:31;;;;;6598:583;;;;6971:14;;;;;;6598:583;;;;7003:35;;;;;;;6598:583;;;;;7003:33;:18;:33;;;;:35;;;;;6598:583;;7003:35;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6598:583;;;;;;7067:31;;;;;;;:19;6598:583;7067:31;;;;;;;;;;;6598:583;;;;7129:43;;;;;;;6598:583;;;;;7129:18;:41;;;;;;:43;;;;;6598:583;7129:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6598:583;;;;;6471:716;;;;;;;;;;;;;;;;;;;:::i;10866:1183::-;11129:44;11176:711;;;;;;;;11227:15;11176:711;;;;;;11258:6;;11176:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;11281:7;;;;;;11176:711;;;11281:7;;11176:711;11281:7;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;11315:17;;;;;;11176:711;;;11315:17;;11176:711;11315:17;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:112;;;-1:-1:-1;11176:711:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11378:6;;;;;;11176:711;;11378:6;;;;11176:711;;;;;;;;-1:-1:-1;11176:711:112;;;-1:-1:-1;;;11176:711:112;;;;;;;;;;;;11454:27;;;;;;;;11176:711;;;;;;;;11512:22;;11176:711;;;;11574:31;;;;;11176:711;;;;11628:14;;;;;;11176:711;;;;;11677:18;11176:711;;;;;;;;11723:31;;;;;:19;:31;;;;;;;;;11176:711;;;;11801:34;;;;;;;11454:27;11176:711;;;;11801:32;;:34;;;;;11176:711;11801:34;;;;;;11176:711;11801:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11789:91;;;;;11862:10;11789:91;;;2670:74:124;11789:63:112;;;;;;;;2643:18:124;;11789:91:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11176:711;;;;11995:24;;;;;;;:12;:24;;;;;;;11894:150;;;;;11129:758;;-1:-1:-1;11894:14:112;;:31;;:150;;11933:9;;11950:13;;11971:16;;11995:24;11129:758;;11894:150;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11123:926;10866:1183;;;;;;;;;;;:::o;18952:278::-;2178:23;:21;:23::i;:::-;19117:46:::1;19169:56:::0;;::::1;::::0;::::1;19117:46:::0;::::1;19169:56;19117:22;19169:56:::0;18952:278::o;13054:721::-;13494:268;;;13559:18;;;;13171:27;13559:18;;;:12;:18;;;;;;;13494:268;;;;;;;;;;;;;;13604:14;;;;;;;13494:268;;;;;;;;;;;13660:35;;;;;;;13171:27;;;;;;;;;;;;13381:9;;:35;;13426:9;;13445:13;;13468:16;;-1:-1:-1;13494:268:112;;;13660:18;:33;;;;:35;;;;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13494:268;;;;;;13726:25;;;;;;;:19;13494:268;13726:25;;;;;;;;;;;;;13494:268;;;;;;;13381:389;;;;;;;;;;;;;43964:25:124;;;;44005:18;;;43998:34;;;;44048:18;;;44041:34;;;;44117:13;;44111:20;44091:18;;;44084:48;44175:15;;;44169:22;44148:19;;;44141:51;44227:15;;;44221:22;44341:21;;44320:19;;;44313:50;44106:2;44410:15;;44404:22;44400:31;;;44379:19;;;44372:60;44163:3;44479:16;;;44473:23;44469:34;44448:19;;;44441:63;43936:19;;13381:389:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13368:402;;;;-1:-1:-1;13368:402:112;;-1:-1:-1;13368:402:112;-1:-1:-1;13368:402:112;-1:-1:-1;13368:402:112;;-1:-1:-1;13054:721:112;-1:-1:-1;;13054:721:112:o;3720:213::-;1981:3;1217:12:87;;;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;45214:2:124;1202:146:87;;;45196:21:124;45253:2;45233:18;;;45226:30;45292:34;45272:18;;;45265:62;45363:16;45343:18;;;45336:44;45397:19;;1202:146:87;45012:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;3828:18:112::1;3816:30;;:8;:30;;;3848:33;;;;;;;;;;;;;;;;::::0;3808:74:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3888:31:112::1;:40:::0;;;::::1;3922:6;3888:40;::::0;;1506:55:87;;;;1534:12;:20;;;;;;1506:55;1158:407;;3720:213:112;:::o;9449:174::-;9588:16;;;;;;;;:9;:16;;;;;;;9543:75;;;;;;;;45664:25:124;;;;45766:18;;;45759:43;;;;45838:15;;;45818:18;;;45811:43;9543:11:112;;:44;;45637:18:124;;9543:75:112;45427:433:124;20602:180:112;2330:16;:14;:16::i;:::-;20729:48:::1;::::0;;;;46085:42:124;46154:15;;;20729:48:112::1;::::0;::::1;46136:34:124::0;46206:15;;46186:18;;;46179:43;46238:18;;;46231:34;;;20729:9:112::1;::::0;:29:::1;::::0;46048:18:124;;20729:48:112::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20602:180:::0;;;:::o;14205:164::-;14326:16;;;14304:7;14326:16;;;:9;:16;;;;;:38;;:36;:38::i;14593:667::-;14712:14;;14660:16;;14712:14;;;;;14684:25;;14712:14;14802:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14802:32:112;;14770:64;;14846:9;14841:221;14865:17;14861:1;:21;14841:221;;;14929:1;14901:16;;;:13;:16;;;;;;:30;:16;:30;14897:159;;14984:16;;;;:13;:16;;;;;;;;14943:12;14956:24;14960:20;14998:1;14956:24;:::i;:::-;14943:38;;;;;;;;:::i;:::-;;;;;;:57;;;;;;;;;;;14897:159;;;15025:22;;;;:::i;:::-;;;;14897:159;14884:3;;;;:::i;:::-;;;;14841:221;;;-1:-1:-1;15180:44:112;;15159:66;;15166:12;14593:667;-1:-1:-1;14593:667:112:o;19258:327::-;2178:23;:21;:23::i;:::-;19512:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;19503:7:::1;::::0;::::1;19495:48;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19549:20:112::1;::::0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;;;;:31;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19572:8;;19549:20;:31:::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;16211:774::-:0;16428:16;;;;;;;;:9;:16;;;;;;;;;:30;;;16460:24;;;;;;;;;;;;;;;;;;;;;16428:30;16414:10;:44;16406:79;;;;;;;;;;;;;:::i;:::-;;16491:11;:35;16534:9;16551:13;16572:16;16596:12;16616:358;;;;;;;;16666:5;16616:358;;;;;;16687:4;16616:358;;;;;;16705:2;16616:358;;;;;;16725:6;16616:358;;;;16760:17;16616:358;;;;16804:15;16616:358;;;;16844:14;;;;;;;;;;;16616:358;;;;;;16876:18;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16616:358;;;;;;16940:25;;;;;;:19;16616:358;16940:25;;;;;;;;;;;16616:358;;;;;;16491:489;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16211:774;;;;;;:::o;4323:250::-;4451:7;2468:13;:11;:13::i;:::-;4511:16:::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;4549:18:::1;::::0;4479:89;;;;;::::1;::::0;::::1;48614:25:124::0;;;;48655:18;;;48648:83;;;;48747:18;;;48740:34;;;48790:18;;;48783:34;;;48833:19;;;48826:35;4479:11:112::1;::::0;:31:::1;::::0;48586:19:124;;4479:89:112::1;48320:547:124::0;20394:180:112;2178:23;:21;:23::i;:::-;20507:62:::1;::::0;;;;20552:9:::1;20507:62;::::0;::::1;49106:25:124::0;49179:42;49167:55;;49147:18;;;49140:83;20507:9:112::1;::::0;:44:::1;::::0;49079:18:124;;20507:62:112::1;48872:357:124::0;7771:817:112;8032:166;;;;;8072:10;8032:166;;;25883:34:124;8100:4:112;25933:18:124;;;25926:43;25985:18;;;25978:34;;;26028:18;;;26021:34;;;26104:4;26092:17;;26071:19;;;26064:46;26126:19;;;26119:35;;;26170:19;;;26163:35;;;8009:7:112;;8032:30;;;;;;25794:19:124;;8032:166:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8218:42;8263:215;;;;;;;;8309:5;8263:215;;;;;;8332:6;8263:215;;;;8393:16;8366:44;;;;;;;;:::i;:::-;8263:215;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;8263:215:112;;;;;;;8544:24;;;:12;:24;;;;;8493:84;;;;;8218:260;;-1:-1:-1;8493:11:112;;:24;;:84;;8518:9;;8529:13;;8218:260;;8493:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8486:91;7771:817;-1:-1:-1;;;;;;;;;;7771:817:112:o;18371:373::-;2178:23;:21;:23::i;:::-;18564:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;18543:19:::1;::::0;::::1;18535:59;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18608:16:112::1;::::0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18636:16:112::1;::::0;;:13:::1;:16;::::0;;;:25:::1;::::0;;::::1;:16:::0;::::1;:25;18608:53;18663:23;;;;;;;;;;;;;;;;::::0;18600:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;18693:16:112::1;::::0;;;::::1;;::::0;;;:9:::1;:16;::::0;;;;49418:19:124;;49405:33;;18371:373:112:o;2497:184::-;2617:10;2573:54;;:18;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;2635:35;;;;;;;;;;;;;;;;;2558:118;;;;;;;;;;;;;;:::i;:::-;;2497:184::o;2809:545:102:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:102;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;:::-;:90;;:139::i;3005:345::-;2915:439;2809:545;;;:::o;2876:177:112:-;2954:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2942:68;;;;;2999:10;2942:68;;;2670:74:124;2942:56:112;;;;;;;;2643:18:124;;2942:68:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3018:24;;;;;;;;;;;;;;;;;2927:121;;;;;;;;;;;;;;:::i;2685:187::-;2766:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2754:71;;;;;2814:10;2754:71;;;2670:74:124;2754:59:112;;;;;;;;2643:18:124;;2754:71:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2833:28;;;;;;;;;;;;;;;;;2739:128;;;;;;;;;;;;;;:::i;1895:528:102:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:102;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;3142:212:105:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;700:334:105:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:105;961:25;704:4:107;1006:23:105;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:105:o;1780:972::-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:154:124;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:134;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:118::-;398:5;391:13;384:21;377:5;374:32;364:60;;420:1;417;410:12;435:734;527:6;535;543;551;559;612:3;600:9;591:7;587:23;583:33;580:53;;;629:1;626;619:12;580:53;668:9;655:23;687:31;712:5;687:31;:::i;:::-;737:5;-1:-1:-1;794:2:124;779:18;;766:32;807:33;766:32;807:33;:::i;:::-;859:7;-1:-1:-1;918:2:124;903:18;;890:32;931:33;890:32;931:33;:::i;:::-;983:7;-1:-1:-1;1037:2:124;1022:18;;1009:32;;-1:-1:-1;1093:3:124;1078:19;;1065:33;1107:30;1065:33;1107:30;:::i;:::-;1156:7;1146:17;;;435:734;;;;;;;;:::o;1356:159::-;1423:20;;1483:6;1472:18;;1462:29;;1452:57;;1505:1;1502;1495:12;1520:156;1586:20;;1646:4;1635:16;;1625:27;;1615:55;;1666:1;1663;1656:12;1681:807;1800:6;1808;1816;1824;1832;1840;1848;1856;1909:3;1897:9;1888:7;1884:23;1880:33;1877:53;;;1926:1;1923;1916:12;1877:53;1965:9;1952:23;1984:31;2009:5;1984:31;:::i;:::-;2034:5;-1:-1:-1;2086:2:124;2071:18;;2058:32;;-1:-1:-1;2142:2:124;2127:18;;2114:32;2155:33;2114:32;2155:33;:::i;:::-;2207:7;-1:-1:-1;2233:37:124;2266:2;2251:18;;2233:37;:::i;:::-;2223:47;;2317:3;2306:9;2302:19;2289:33;2279:43;;2341:37;2373:3;2362:9;2358:19;2341:37;:::i;:::-;2331:47;;2425:3;2414:9;2410:19;2397:33;2387:43;;2477:3;2466:9;2462:19;2449:33;2439:43;;1681:807;;;;;;;;;;;:::o;3102:388::-;3170:6;3178;3231:2;3219:9;3210:7;3206:23;3202:32;3199:52;;;3247:1;3244;3237:12;3199:52;3286:9;3273:23;3305:31;3330:5;3305:31;:::i;:::-;3355:5;-1:-1:-1;3412:2:124;3397:18;;3384:32;3425:33;3384:32;3425:33;:::i;:::-;3477:7;3467:17;;;3102:388;;;;;:::o;3495:182::-;3552:6;3605:2;3593:9;3584:7;3580:23;3576:32;3573:52;;;3621:1;3618;3611:12;3573:52;3644:27;3661:9;3644:27;:::i;3682:383::-;3759:6;3767;3775;3828:2;3816:9;3807:7;3803:23;3799:32;3796:52;;;3844:1;3841;3834:12;3796:52;3883:9;3870:23;3902:31;3927:5;3902:31;:::i;:::-;3952:5;4004:2;3989:18;;3976:32;;-1:-1:-1;4055:2:124;4040:18;;;4027:32;;3682:383;-1:-1:-1;;;3682:383:124:o;4070:180::-;4129:6;4182:2;4170:9;4161:7;4157:23;4153:32;4150:52;;;4198:1;4195;4188:12;4150:52;-1:-1:-1;4221:23:124;;4070:180;-1:-1:-1;4070:180:124:o;4255:247::-;4314:6;4367:2;4355:9;4346:7;4342:23;4338:32;4335:52;;;4383:1;4380;4373:12;4335:52;4422:9;4409:23;4441:31;4466:5;4441:31;:::i;4936:2109::-;5185:13;;4588:12;4576:25;;5130:3;5115:19;;5257:4;5249:6;5245:17;5239:24;5272:54;5320:4;5309:9;5305:20;5291:12;2832:34;2821:46;2809:59;;2755:119;5272:54;;5375:4;5367:6;5363:17;5357:24;5390:56;5440:4;5429:9;5425:20;5409:14;2832:34;2821:46;2809:59;;2755:119;5390:56;;5495:4;5487:6;5483:17;5477:24;5510:56;5560:4;5549:9;5545:20;5529:14;2832:34;2821:46;2809:59;;2755:119;5510:56;;5615:4;5607:6;5603:17;5597:24;5630:56;5680:4;5669:9;5665:20;5649:14;2832:34;2821:46;2809:59;;2755:119;5630:56;;5735:4;5727:6;5723:17;5717:24;5750:56;5800:4;5789:9;5785:20;5769:14;2832:34;2821:46;2809:59;;2755:119;5750:56;;5855:4;5847:6;5843:17;5837:24;5870:55;5919:4;5908:9;5904:20;5888:14;4684:12;4673:24;4661:37;;4608:96;5870:55;;5974:4;5966:6;5962:17;5956:24;5989:55;6038:4;6027:9;6023:20;6007:14;4785:6;4774:18;4762:31;;4709:90;5989:55;-1:-1:-1;6063:6:124;6106:15;;;6100:22;4881:42;4870:54;;;6166:18;;;4858:67;;;;6204:6;6247:15;;;6241:22;4870:54;;6307:18;;;4858:67;6345:6;6388:15;;;6382:22;4870:54;;6448:18;;;4858:67;6486:6;6530:15;;;6524:22;4870:54;;;6591:18;;;4858:67;6629:6;6673:15;;;6667:22;2832:34;2821:46;;;6734:18;;;2809:59;;;;6772:6;6816:15;;;6810:22;2821:46;;6877:18;;;2809:59;6915:6;6959:15;;;6953:22;2821:46;7020:18;;;;2809:59;;;;4936:2109;:::o;7050:347::-;7101:8;7111:6;7165:3;7158:4;7150:6;7146:17;7142:27;7132:55;;7183:1;7180;7173:12;7132:55;-1:-1:-1;7206:20:124;;7249:18;7238:30;;7235:50;;;7281:1;7278;7271:12;7235:50;7318:4;7310:6;7306:17;7294:29;;7370:3;7363:4;7354:6;7346;7342:19;7338:30;7335:39;7332:59;;;7387:1;7384;7377:12;7332:59;7050:347;;;;;:::o;7402:827::-;7507:6;7515;7523;7531;7539;7547;7600:3;7588:9;7579:7;7575:23;7571:33;7568:53;;;7617:1;7614;7607:12;7568:53;7656:9;7643:23;7675:31;7700:5;7675:31;:::i;:::-;7725:5;-1:-1:-1;7782:2:124;7767:18;;7754:32;7795:33;7754:32;7795:33;:::i;:::-;7847:7;-1:-1:-1;7901:2:124;7886:18;;7873:32;;-1:-1:-1;7956:2:124;7941:18;;7928:32;7983:18;7972:30;;7969:50;;;8015:1;8012;8005:12;7969:50;8054:58;8104:7;8095:6;8084:9;8080:22;8054:58;:::i;:::-;8131:8;;-1:-1:-1;8028:84:124;-1:-1:-1;8185:38:124;;-1:-1:-1;8218:3:124;8203:19;;8185:38;:::i;:::-;8175:48;;7402:827;;;;;;;;:::o;8501:184::-;8559:6;8612:2;8600:9;8591:7;8587:23;8583:32;8580:52;;;8628:1;8625;8618:12;8580:52;8651:28;8669:9;8651:28;:::i;8921:525::-;9007:6;9015;9023;9031;9084:3;9072:9;9063:7;9059:23;9055:33;9052:53;;;9101:1;9098;9091:12;9052:53;9140:9;9127:23;9159:31;9184:5;9159:31;:::i;:::-;9209:5;-1:-1:-1;9261:2:124;9246:18;;9233:32;;-1:-1:-1;9312:2:124;9297:18;;9284:32;;-1:-1:-1;9368:2:124;9353:18;;9340:32;9381:33;9340:32;9381:33;:::i;:::-;8921:525;;;;-1:-1:-1;8921:525:124;;-1:-1:-1;;8921:525:124:o;9451:382::-;9516:6;9524;9577:2;9565:9;9556:7;9552:23;9548:32;9545:52;;;9593:1;9590;9583:12;9545:52;9632:9;9619:23;9651:31;9676:5;9651:31;:::i;:::-;9701:5;-1:-1:-1;9758:2:124;9743:18;;9730:32;9771:30;9730:32;9771:30;:::i;9838:529::-;9923:6;9931;9939;9947;10000:3;9988:9;9979:7;9975:23;9971:33;9968:53;;;10017:1;10014;10007:12;9968:53;10056:9;10043:23;10075:31;10100:5;10075:31;:::i;:::-;10125:5;-1:-1:-1;10177:2:124;10162:18;;10149:32;;-1:-1:-1;10233:2:124;10218:18;;10205:32;10246:33;10205:32;10246:33;:::i;:::-;10298:7;-1:-1:-1;10324:37:124;10357:2;10342:18;;10324:37;:::i;:::-;10314:47;;9838:529;;;;;;;:::o;10372:456::-;10449:6;10457;10465;10518:2;10506:9;10497:7;10493:23;10489:32;10486:52;;;10534:1;10531;10524:12;10486:52;10573:9;10560:23;10592:31;10617:5;10592:31;:::i;:::-;10642:5;-1:-1:-1;10694:2:124;10679:18;;10666:32;;-1:-1:-1;10750:2:124;10735:18;;10722:32;10763:33;10722:32;10763:33;:::i;:::-;10815:7;10805:17;;;10372:456;;;;;:::o;10833:531::-;10875:3;10913:5;10907:12;10940:6;10935:3;10928:19;10965:1;10975:162;10989:6;10986:1;10983:13;10975:162;;;11051:4;11107:13;;;11103:22;;11097:29;11079:11;;;11075:20;;11068:59;11004:12;10975:162;;;11155:6;11152:1;11149:13;11146:87;;;11221:1;11214:4;11205:6;11200:3;11196:16;11192:27;11185:38;11146:87;-1:-1:-1;11278:2:124;11266:15;11283:66;11262:88;11253:98;;;;11353:4;11249:109;;10833:531;-1:-1:-1;;10833:531:124:o;11369:695::-;11562:2;11551:9;11544:21;11525:4;11584:6;11645:2;11636:6;11630:13;11626:22;11621:2;11610:9;11606:18;11599:50;11713:2;11707;11699:6;11695:15;11689:22;11685:31;11680:2;11669:9;11665:18;11658:59;11781:2;11775;11767:6;11763:15;11757:22;11753:31;11748:2;11737:9;11733:18;11726:59;;11850:42;11844:2;11836:6;11832:15;11826:22;11822:71;11816:3;11805:9;11801:19;11794:100;11941:3;11933:6;11929:16;11923:23;11984:4;11977;11966:9;11962:20;11955:34;12006:52;12053:3;12042:9;12038:19;12024:12;12006:52;:::i;12069:813::-;12164:6;12172;12180;12188;12196;12249:3;12237:9;12228:7;12224:23;12220:33;12217:53;;;12266:1;12263;12256:12;12217:53;12305:9;12292:23;12324:31;12349:5;12324:31;:::i;:::-;12374:5;-1:-1:-1;12431:2:124;12416:18;;12403:32;12444:33;12403:32;12444:33;:::i;:::-;12496:7;-1:-1:-1;12555:2:124;12540:18;;12527:32;12568:33;12527:32;12568:33;:::i;:::-;12620:7;-1:-1:-1;12679:2:124;12664:18;;12651:32;12692:33;12651:32;12692:33;:::i;:::-;12744:7;-1:-1:-1;12803:3:124;12788:19;;12775:33;12817;12775;12817;:::i;12887:315::-;12955:6;12963;13016:2;13004:9;12995:7;12991:23;12987:32;12984:52;;;13032:1;13029;13022:12;12984:52;13071:9;13058:23;13090:31;13115:5;13090:31;:::i;:::-;13140:5;13192:2;13177:18;;;;13164:32;;-1:-1:-1;;;12887:315:124:o;13207:367::-;13270:8;13280:6;13334:3;13327:4;13319:6;13315:17;13311:27;13301:55;;13352:1;13349;13342:12;13301:55;-1:-1:-1;13375:20:124;;13418:18;13407:30;;13404:50;;;13450:1;13447;13440:12;13404:50;13487:4;13479:6;13475:17;13463:29;;13547:3;13540:4;13530:6;13527:1;13523:14;13515:6;13511:27;13507:38;13504:47;13501:67;;;13564:1;13561;13554:12;13579:437;13665:6;13673;13726:2;13714:9;13705:7;13701:23;13697:32;13694:52;;;13742:1;13739;13732:12;13694:52;13782:9;13769:23;13815:18;13807:6;13804:30;13801:50;;;13847:1;13844;13837:12;13801:50;13886:70;13948:7;13939:6;13928:9;13924:22;13886:70;:::i;:::-;13975:8;;13860:96;;-1:-1:-1;13579:437:124;-1:-1:-1;;;;13579:437:124:o;14021:598::-;14115:6;14123;14131;14139;14147;14200:3;14188:9;14179:7;14175:23;14171:33;14168:53;;;14217:1;14214;14207:12;14168:53;14256:9;14243:23;14275:31;14300:5;14275:31;:::i;:::-;14325:5;-1:-1:-1;14377:2:124;14362:18;;14349:32;;-1:-1:-1;14428:2:124;14413:18;;14400:32;;-1:-1:-1;14451:37:124;14484:2;14469:18;;14451:37;:::i;14624:1572::-;14828:6;14836;14844;14852;14860;14868;14876;14884;14892;14900;14908:7;14962:3;14950:9;14941:7;14937:23;14933:33;14930:53;;;14979:1;14976;14969:12;14930:53;15002:29;15021:9;15002:29;:::i;:::-;14992:39;;15050:18;15117:2;15111;15100:9;15096:18;15083:32;15080:40;15077:60;;;15133:1;15130;15123:12;15077:60;15172:96;15260:7;15253:2;15242:9;15238:18;15225:32;15214:9;15210:48;15172:96;:::i;:::-;15287:8;;-1:-1:-1;15314:8:124;-1:-1:-1;15365:2:124;15350:18;;15337:32;15334:40;-1:-1:-1;15331:60:124;;;15387:1;15384;15377:12;15331:60;15426:96;15514:7;15507:2;15496:9;15492:18;15479:32;15468:9;15464:48;15426:96;:::i;:::-;15541:8;;-1:-1:-1;15568:8:124;-1:-1:-1;15619:2:124;15604:18;;15591:32;15588:40;-1:-1:-1;15585:60:124;;;15641:1;15638;15631:12;15585:60;15680:96;15768:7;15761:2;15750:9;15746:18;15733:32;15722:9;15718:48;15680:96;:::i;:::-;15795:8;;-1:-1:-1;15822:8:124;-1:-1:-1;15849:39:124;15883:3;15868:19;;15849:39;:::i;:::-;15839:49;;15938:2;15931:3;15920:9;15916:19;15903:33;15900:41;15897:61;;;15954:1;15951;15944:12;15897:61;;15993:85;16070:7;16062:3;16051:9;16047:19;16034:33;16023:9;16019:49;15993:85;:::i;:::-;16097:8;;-1:-1:-1;16124:8:124;-1:-1:-1;16152:38:124;16185:3;16170:19;;16152:38;:::i;:::-;16141:49;;14624:1572;;;;;;;;;;;;;;:::o;16201:188::-;16269:20;;16329:34;16318:46;;16308:57;;16298:85;;16379:1;16376;16369:12;16394:260;16462:6;16470;16523:2;16511:9;16502:7;16498:23;16494:32;16491:52;;;16539:1;16536;16529:12;16491:52;16562:29;16581:9;16562:29;:::i;:::-;16552:39;;16610:38;16644:2;16633:9;16629:18;16610:38;:::i;:::-;16600:48;;16394:260;;;;;:::o;17755:456::-;17832:6;17840;17848;17901:2;17889:9;17880:7;17876:23;17872:32;17869:52;;;17917:1;17914;17907:12;17869:52;17956:9;17943:23;17975:31;18000:5;17975:31;:::i;:::-;18025:5;-1:-1:-1;18082:2:124;18067:18;;18054:32;18095:33;18054:32;18095:33;:::i;:::-;17755:456;;18147:7;;-1:-1:-1;;;18201:2:124;18186:18;;;;18173:32;;17755:456::o;18216:681::-;18387:2;18439:21;;;18509:13;;18412:18;;;18531:22;;;18358:4;;18387:2;18610:15;;;;18584:2;18569:18;;;18358:4;18653:218;18667:6;18664:1;18661:13;18653:218;;;18732:13;;18747:42;18728:62;18716:75;;18846:15;;;;18811:12;;;;18689:1;18682:9;18653:218;;;-1:-1:-1;18888:3:124;;18216:681;-1:-1:-1;;;;;;18216:681:124:o;18902:184::-;18954:77;18951:1;18944:88;19051:4;19048:1;19041:15;19075:4;19072:1;19065:15;19091:253;19163:2;19157:9;19205:4;19193:17;;19240:18;19225:34;;19261:22;;;19222:62;19219:88;;;19287:18;;:::i;:::-;19323:2;19316:22;19091:253;:::o;19349:334::-;19420:2;19414:9;19476:2;19466:13;;19481:66;19462:86;19450:99;;19579:18;19564:34;;19600:22;;;19561:62;19558:88;;;19626:18;;:::i;:::-;19662:2;19655:22;19349:334;;-1:-1:-1;19349:334:124:o;19688:1488::-;19786:6;19794;19847:2;19835:9;19826:7;19822:23;19818:32;19815:52;;;19863:1;19860;19853:12;19815:52;19886:27;19903:9;19886:27;:::i;:::-;19876:37;;19932:2;19985;19974:9;19970:18;19957:32;20008:18;20049:2;20041:6;20038:14;20035:34;;;20065:1;20062;20055:12;20035:34;20088:22;;;;20144:4;20126:16;;;20122:27;20119:47;;;20162:1;20159;20152:12;20119:47;20188:22;;:::i;:::-;20233:21;20251:2;20233:21;:::i;:::-;20226:5;20219:36;20287:30;20313:2;20309;20305:11;20287:30;:::i;:::-;20282:2;20275:5;20271:14;20264:54;20350:30;20376:2;20372;20368:11;20350:30;:::i;:::-;20345:2;20338:5;20334:14;20327:54;20426:2;20422;20418:11;20405:25;20439:33;20464:7;20439:33;:::i;:::-;20499:2;20488:14;;20481:31;20558:3;20550:12;;20537:26;20575:16;;;20572:36;;;20604:1;20601;20594:12;20572:36;20635:8;20631:2;20627:17;20617:27;;;20682:7;20675:4;20671:2;20667:13;20663:27;20653:55;;20704:1;20701;20694:12;20653:55;20740:2;20727:16;20762:2;20758;20755:10;20752:36;;;20768:18;;:::i;:::-;20810:112;20918:2;20849:66;20842:4;20838:2;20834:13;20830:86;20826:95;20810:112;:::i;:::-;20797:125;;20945:2;20938:5;20931:17;20985:7;20980:2;20975;20971;20967:11;20963:20;20960:33;20957:53;;;21006:1;21003;20996:12;20957:53;21061:2;21056;21052;21048:11;21043:2;21036:5;21032:14;21019:45;21105:1;21100:2;21095;21088:5;21084:14;21080:23;21073:34;;21140:5;21134:3;21127:5;21123:15;21116:30;21165:5;21155:15;;;;;;19688:1488;;;;;:::o;21181:736::-;21285:6;21293;21301;21309;21317;21325;21378:3;21366:9;21357:7;21353:23;21349:33;21346:53;;;21395:1;21392;21385:12;21346:53;21434:9;21421:23;21453:31;21478:5;21453:31;:::i;:::-;21503:5;-1:-1:-1;21560:2:124;21545:18;;21532:32;21573:33;21532:32;21573:33;:::i;:::-;21625:7;-1:-1:-1;21684:2:124;21669:18;;21656:32;21697:33;21656:32;21697:33;:::i;:::-;21181:736;;;;-1:-1:-1;21749:7:124;;21803:2;21788:18;;21775:32;;-1:-1:-1;21854:3:124;21839:19;;21826:33;;21906:3;21891:19;;;21878:33;;-1:-1:-1;21181:736:124;-1:-1:-1;;21181:736:124:o;21922:803::-;22042:6;22050;22058;22066;22074;22082;22090;22098;22151:3;22139:9;22130:7;22126:23;22122:33;22119:53;;;22168:1;22165;22158:12;22119:53;22207:9;22194:23;22226:31;22251:5;22226:31;:::i;:::-;22276:5;-1:-1:-1;22328:2:124;22313:18;;22300:32;;-1:-1:-1;22379:2:124;22364:18;;22351:32;;-1:-1:-1;22435:2:124;22420:18;;22407:32;22448:33;22407:32;22448:33;:::i;22730:479::-;22842:6;22850;22894:9;22885:7;22881:23;22924:2;22920;22916:11;22913:31;;;22940:1;22937;22930:12;22913:31;22979:9;22966:23;22998:31;23023:5;22998:31;:::i;:::-;23048:5;-1:-1:-1;23146:2:124;23077:66;23069:75;;23065:84;23062:104;;;23162:1;23159;23152:12;23062:104;;23200:2;23189:9;23185:18;23175:28;;22730:479;;;;;:::o;23407:251::-;23477:6;23530:2;23518:9;23509:7;23505:23;23501:32;23498:52;;;23546:1;23543;23536:12;23498:52;23578:9;23572:16;23597:31;23622:5;23597:31;:::i;23839:1667::-;24335:4;24377:3;24366:9;24362:19;24354:27;;24408:6;24397:9;24390:25;24451:6;24446:2;24435:9;24431:18;24424:34;24494:6;24489:2;24478:9;24474:18;24467:34;24537:6;24532:2;24521:9;24517:18;24510:34;24587:6;24581:13;24575:3;24564:9;24560:19;24553:42;24650:2;24642:6;24638:15;24632:22;24626:3;24615:9;24611:19;24604:51;24702:2;24694:6;24690:15;24684:22;24725:42;24822:2;24808:12;24804:21;24798:3;24787:9;24783:19;24776:50;24891:2;24885;24877:6;24873:15;24867:22;24863:31;24857:3;24846:9;24842:19;24835:60;;;24944:3;24936:6;24932:16;24926:23;24968:3;24980:54;25030:2;25019:9;25015:18;24999:14;4881:42;4870:54;4858:67;;4804:127;24980:54;25083:3;25071:16;;25065:23;23733:13;23726:21;25144:3;25129:19;;23714:34;25198:3;25186:16;;25180:23;4881:42;4870:54;;;25262:3;25247:19;;4858:67;25316:3;25304:16;;25298:23;23826:4;23815:16;25378:3;25363:19;;23803:29;25420:15;;;25414:22;4870:54;;;25495:3;25480:19;;4858:67;25414:22;-1:-1:-1;25445:55:124;;23839:1667;;;;;;;;:::o;27081:220::-;27230:2;27219:9;27212:21;27193:4;27250:45;27291:2;27280:9;27276:18;27268:6;27250:45;:::i;28317:184::-;28369:77;28366:1;28359:88;28466:4;28463:1;28456:15;28490:4;28487:1;28480:15;28506:301;28594:1;28587:5;28584:12;28574:200;;28630:77;28627:1;28620:88;28731:4;28728:1;28721:15;28759:4;28756:1;28749:15;28574:200;28783:18;;28506:301::o;28812:996::-;29183:4;29225:3;29214:9;29210:19;29202:27;;29256:6;29245:9;29238:25;29299:6;29294:2;29283:9;29279:18;29272:34;29342:6;29337:2;29326:9;29322:18;29315:34;29368:42;29465:2;29456:6;29450:13;29446:22;29441:2;29430:9;29426:18;29419:50;29524:2;29516:6;29512:15;29506:22;29500:3;29489:9;29485:19;29478:51;29576:2;29568:6;29564:15;29558:22;29589:67;29651:3;29640:9;29636:19;29622:12;29589:67;:::i;:::-;-1:-1:-1;29715:2:124;29703:15;;29697:22;29693:31;29687:3;29672:19;;29665:60;29794:3;29782:16;;;29776:23;29769:31;29762:39;29756:3;29741:19;;;29734:68;28812:996;;-1:-1:-1;;;28812:996:124:o;29813:184::-;29883:6;29936:2;29924:9;29915:7;29911:23;29907:32;29904:52;;;29952:1;29949;29942:12;29904:52;-1:-1:-1;29975:16:124;;29813:184;-1:-1:-1;29813:184:124:o;30002:960::-;30274:6;30263:9;30256:25;30317:2;30312;30301:9;30297:18;30290:30;30237:4;30339:42;30436:2;30427:6;30421:13;30417:22;30412:2;30401:9;30397:18;30390:50;30504:2;30498;30490:6;30486:15;30480:22;30476:31;30471:2;30460:9;30456:18;30449:59;;30563:2;30555:6;30551:15;30545:22;30539:3;30528:9;30524:19;30517:51;30615:2;30607:6;30603:15;30597:22;30656:4;30650:3;30639:9;30635:19;30628:33;30684:52;30731:3;30720:9;30716:19;30702:12;30684:52;:::i;:::-;30670:66;;30802:6;30795:3;30787:6;30783:16;30777:23;30773:36;30767:3;30756:9;30752:19;30745:65;30866:3;30858:6;30854:16;30848:23;30841:4;30830:9;30826:20;30819:53;30927:3;30919:6;30915:16;30909:23;30903:3;30892:9;30888:19;30881:52;30950:6;30942:14;;;30002:960;;;;;:::o;34414:437::-;34493:1;34489:12;;;;34536;;;34557:61;;34611:4;34603:6;34599:17;34589:27;;34557:61;34664:2;34656:6;34653:14;34633:18;34630:38;34627:218;;;34701:77;34698:1;34691:88;34802:4;34799:1;34792:15;34830:4;34827:1;34820:15;34856:1060;35161:4;35203:3;35192:9;35188:19;35180:27;;35234:6;35223:9;35216:25;35277:6;35272:2;35261:9;35257:18;35250:34;35303:42;35400:2;35391:6;35385:13;35381:22;35376:2;35365:9;35361:18;35354:50;35468:2;35462;35454:6;35450:15;35444:22;35440:31;35435:2;35424:9;35420:18;35413:59;35537:2;35531;35523:6;35519:15;35513:22;35509:31;35503:3;35492:9;35488:19;35481:60;35606:2;35600;35592:6;35588:15;35582:22;35578:31;35572:3;35561:9;35557:19;35550:60;35676:2;35669:3;35661:6;35657:16;35651:23;35647:32;35641:3;35630:9;35626:19;35619:61;;35727:3;35719:6;35715:16;35709:23;35741:52;35788:3;35777:9;35773:19;35759:12;4785:6;4774:18;4762:31;;4709:90;35741:52;-1:-1:-1;35842:3:124;35830:16;;35824:23;4785:6;4774:18;;35905:3;35890:19;;4762:31;35856:54;34856:1060;;;;;;:::o;35921:245::-;35988:6;36041:2;36029:9;36020:7;36016:23;36012:32;36009:52;;;36057:1;36054;36047:12;36009:52;36089:9;36083:16;36108:28;36130:5;36108:28;:::i;36171:184::-;36223:77;36220:1;36213:88;36320:4;36317:1;36310:15;36344:4;36341:1;36334:15;36360:197;36398:3;36426:6;36467:2;36460:5;36456:14;36494:2;36485:7;36482:15;36479:41;;;36500:18;;:::i;:::-;36549:1;36536:15;;36360:197;-1:-1:-1;;;36360:197:124:o;36562:557::-;36884:25;;;36940:2;36925:18;;36918:34;;;37000:42;36988:55;;36983:2;36968:18;;36961:83;36871:3;36856:19;;37053:60;37109:2;37094:18;;37086:6;37053:60;:::i;37124:859::-;37424:25;;;37412:2;37468;37486:18;;;37479:30;;;37397:18;;;37544:22;;;37364:4;;37623:6;;37597:2;37582:18;;37364:4;37657:300;37671:6;37668:1;37665:13;37657:300;;;37746:6;37733:20;37766:31;37791:5;37766:31;:::i;:::-;37833:42;37822:54;37810:67;;37932:15;;;;37897:12;;;;37693:1;37686:9;37657:300;;;-1:-1:-1;37974:3:124;37124:859;-1:-1:-1;;;;;;;37124:859:124:o;37988:1960::-;38496:25;;;38552:2;38537:18;;38530:34;;;38595:2;38580:18;;38573:34;;;38638:2;38623:18;;38616:34;;;38678:13;;4881:42;4870:54;38708:3;38693:19;;4858:67;38483:3;38468:19;;38760:2;38748:15;;38742:22;4881:42;4870:54;;38821:3;38806:19;;4858:67;-1:-1:-1;38875:2:124;38863:15;;38857:22;4881:42;4870:54;;38938:3;38923:19;;4858:67;38888:55;38998:2;38990:6;38986:15;38980:22;38974:3;38963:9;38959:19;38952:51;39052:3;39044:6;39040:16;39034:23;39076:3;39088:68;39152:2;39141:9;39137:18;39121:14;39088:68;:::i;:::-;39205:3;39197:6;39193:16;39187:23;39165:45;;39229:3;39241:53;39290:2;39279:9;39275:18;39259:14;4785:6;4774:18;4762:31;;4709:90;39241:53;39343:3;39335:6;39331:16;39325:23;39303:45;;39367:3;39379:51;39426:2;39415:9;39411:18;39395:14;23733:13;23726:21;23714:34;;23663:91;39379:51;39467:3;39455:16;;39449:23;39491:3;39510:18;;;39503:30;;;;39576:15;;;39570:22;39564:3;39549:19;;39542:51;39630:15;;;39624:22;4881:42;4870:54;;;39705:3;39690:19;;4858:67;39747:15;;;39741:22;23826:4;23815:16;39820:3;39805:19;;23803:29;39862:15;;;39856:22;4870:54;;;39937:3;39922:19;;4858:67;39856:22;-1:-1:-1;39887:55:124;4804:127;39953:484;40006:3;40044:5;40038:12;40071:6;40066:3;40059:19;40097:4;40126:2;40121:3;40117:12;40110:19;;40163:2;40156:5;40152:14;40184:1;40194:218;40208:6;40205:1;40202:13;40194:218;;;40273:13;;40288:42;40269:62;40257:75;;40352:12;;;;40387:15;;;;40230:1;40223:9;40194:218;;;-1:-1:-1;40428:3:124;;39953:484;-1:-1:-1;;;;;39953:484:124:o;40442:435::-;40495:3;40533:5;40527:12;40560:6;40555:3;40548:19;40586:4;40615:2;40610:3;40606:12;40599:19;;40652:2;40645:5;40641:14;40673:1;40683:169;40697:6;40694:1;40691:13;40683:169;;;40758:13;;40746:26;;40792:12;;;;40827:15;;;;40719:1;40712:9;40683:169;;40882:2611;41364:6;41353:9;41346:25;41407:6;41402:2;41391:9;41387:18;41380:34;41450:6;41445:2;41434:9;41430:18;41423:34;41493:6;41488:2;41477:9;41473:18;41466:34;41537:3;41531;41520:9;41516:19;41509:32;41550:54;41599:3;41588:9;41584:19;41575:6;41569:13;4881:42;4870:54;4858:67;;4804:127;41550:54;41327:4;41651:2;41643:6;41639:15;41633:22;41674:6;41717:2;41711:3;41700:9;41696:19;41689:31;41743:63;41801:3;41790:9;41786:19;41772:12;41743:63;:::i;:::-;41729:77;;41855:2;41847:6;41843:15;41837:22;41878:66;42009:2;41997:9;41989:6;41985:22;41981:31;41975:3;41964:9;41960:19;41953:60;42036:52;42081:6;42065:14;42036:52;:::i;:::-;42022:66;;42137:2;42129:6;42125:15;42119:22;42097:44;;42160:3;42227:2;42215:9;42207:6;42203:22;42199:31;42194:2;42183:9;42179:18;42172:59;42254:52;42299:6;42283:14;42254:52;:::i;:::-;42240:66;;42355:3;42347:6;42343:16;42337:23;42315:45;;42379:3;42391:54;42441:2;42430:9;42426:18;42410:14;4881:42;4870:54;4858:67;;4804:127;42391:54;42494:3;42486:6;42482:16;42476:23;42454:45;;42518:3;42585:2;42573:9;42565:6;42561:22;42557:31;42552:2;42541:9;42537:18;42530:59;42612:41;42646:6;42630:14;42612:41;:::i;:::-;42598:55;;42702:3;42694:6;42690:16;42684:23;42662:45;;42726:3;42716:13;;42738:53;42787:2;42776:9;42772:18;42756:14;4785:6;4774:18;4762:31;;4709:90;42738:53;42828:3;42820:6;42816:16;42810:23;42800:33;;42852:3;42891:2;42886;42875:9;42871:18;42864:30;42931:2;42923:6;42919:15;42913:22;42903:32;;42955:3;42944:14;;42995:2;42989:3;42978:9;42974:19;42967:31;43052:2;43044:6;43040:15;43034:22;43029:2;43018:9;43014:18;43007:50;43112:2;43104:6;43100:15;43094:22;43088:3;43077:9;43073:19;43066:51;43166:2;43158:6;43154:15;43148:22;43126:44;;43179:55;43229:3;43218:9;43214:19;43198:14;4881:42;4870:54;4858:67;;4804:127;43179:55;43271:15;;43265:22;23826:4;23815:16;;43344:3;43329:19;;23803:29;43265:22;-1:-1:-1;43296:53:124;;-1:-1:-1;;23759:75:124;43296:53;43386:16;;43380:23;23733:13;;23726:21;43459:3;43444:19;;23714:34;43380:23;-1:-1:-1;43412:52:124;;-1:-1:-1;;23663:91:124;44515:492;44630:6;44638;44646;44654;44662;44670;44723:3;44711:9;44702:7;44698:23;44694:33;44691:53;;;44740:1;44737;44730:12;44691:53;44769:9;44763:16;44753:26;;44819:2;44808:9;44804:18;44798:25;44788:35;;44863:2;44852:9;44848:18;44842:25;44832:35;;44907:2;44896:9;44892:18;44886:25;44876:35;;44951:3;44940:9;44936:19;44930:26;44920:36;;44996:3;44985:9;44981:19;44975:26;44965:36;;44515:492;;;;;;;;:::o;46276:125::-;46316:4;46344:1;46341;46338:8;46335:34;;;46349:18;;:::i;:::-;-1:-1:-1;46386:9:124;;46276:125::o;46406:184::-;46458:77;46455:1;46448:88;46555:4;46552:1;46545:15;46579:4;46576:1;46569:15;46595:195;46634:3;46665:66;46658:5;46655:77;46652:103;;;46735:18;;:::i;:::-;-1:-1:-1;46782:1:124;46771:13;;46595:195::o;46795:1520::-;47279:4;47321:3;47310:9;47306:19;47298:27;;47352:6;47341:9;47334:25;47395:6;47390:2;47379:9;47375:18;47368:34;47438:6;47433:2;47422:9;47418:18;47411:34;47481:6;47476:2;47465:9;47461:18;47454:34;47507:42;47605:2;47596:6;47590:13;47586:22;47580:3;47569:9;47565:19;47558:51;47674:2;47668;47660:6;47656:15;47650:22;47646:31;47640:3;47629:9;47625:19;47618:60;;47725:2;47717:6;47713:15;47707:22;47738:53;47786:3;47775:9;47771:19;47757:12;4881:42;4870:54;4858:67;;4804:127;47738:53;;47846:2;47838:6;47834:15;47828:22;47822:3;47811:9;47807:19;47800:51;47888:3;47880:6;47876:16;47870:23;47912:3;47951:2;47946;47935:9;47931:18;47924:30;48009:3;48001:6;47997:16;47991:23;47985:3;47974:9;47970:19;47963:52;48070:3;48062:6;48058:16;48052:23;48046:3;48035:9;48031:19;48024:52;48125:3;48117:6;48113:16;48107:23;48085:45;;48139:55;48189:3;48178:9;48174:19;48158:14;4881:42;4870:54;4858:67;;4804:127;48139:55;48231:15;;48225:22;23826:4;23815:16;;48304:3;48289:19;;23803:29;48225:22;-1:-1:-1;48256:53:124;23759:75;49449:228;49489:7;49615:1;49547:66;49543:74;49540:1;49537:81;49532:1;49525:9;49518:17;49514:105;49511:131;;;49622:18;;:::i;:::-;-1:-1:-1;49662:9:124;;49449:228::o;49682:184::-;49734:77;49731:1;49724:88;49831:4;49828:1;49821:15;49855:4;49852:1;49845:15;49871:128;49911:3;49942:1;49938:6;49935:1;49932:13;49929:39;;;49948:18;;:::i;:::-;-1:-1:-1;49984:9:124;;49871:128::o;50004:274::-;50044:1;50070;50060:189;;50105:77;50102:1;50095:88;50206:4;50203:1;50196:15;50234:4;50231:1;50224:15;50060:189;-1:-1:-1;50263:9:124;;50004:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"4334600","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","BRIDGE_PROTOCOL_FEE()":"2372","FLASHLOAN_PREMIUM_TOTAL()":"2409","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"2407","MAX_NUMBER_RESERVES()":"287","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"2354","POOL_REVISION()":"276","backUnbacked(address,uint256,uint256)":"infinite","borrow(address,uint256,uint256,uint16,address)":"infinite","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"infinite","deposit(address,uint256,address,uint16)":"infinite","dropReserve(address)":"infinite","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"infinite","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"infinite","flashLoanSimple(address,address,uint256,bytes,uint16)":"infinite","getConfiguration(address)":"2703","getEModeCategoryData(uint8)":"infinite","getReserveAddressById(uint16)":"2596","getReserveData(address)":"23122","getReserveNormalizedIncome(address)":"infinite","getReserveNormalizedVariableDebt(address)":"infinite","getReservesList()":"infinite","getUserAccountData(address)":"infinite","getUserConfiguration(address)":"2704","getUserEMode(address)":"2613","initReserve(address,address,address,address,address)":"infinite","initialize(address)":"infinite","liquidationCall(address,address,address,uint256,bool)":"infinite","mintToTreasury(address[])":"infinite","mintUnbacked(address,uint256,address,uint16)":"infinite","rebalanceStableBorrowRate(address,address)":"infinite","repay(address,uint256,uint256,address)":"infinite","repayWithATokens(address,uint256,uint256)":"infinite","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","resetIsolationModeTotalDebt(address)":"infinite","setConfiguration(address,(uint256))":"infinite","setReserveInterestRateStrategyAddress(address,address)":"infinite","setUserEMode(uint8)":"infinite","setUserUseReserveAsCollateral(address,bool)":"infinite","supply(address,uint256,address,uint16)":"infinite","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"infinite","swapBorrowRateMode(address,uint256)":"infinite","updateBridgeProtocolFee(uint256)":"infinite","updateFlashloanPremiums(uint128,uint128)":"infinite","withdraw(address,uint256,address)":"infinite"},"internal":{"_onlyBridge()":"infinite","_onlyPoolAdmin()":"infinite","_onlyPoolConfigurator()":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BRIDGE_PROTOCOL_FEE()":"272d9072","FLASHLOAN_PREMIUM_TOTAL()":"074b2e43","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"6a99c036","MAX_NUMBER_RESERVES()":"f8119d51","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"e82fec2f","POOL_REVISION()":"0148170e","backUnbacked(address,uint256,uint256)":"d65dc7a1","borrow(address,uint256,uint256,uint16,address)":"a415bcad","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"d579ea7d","deposit(address,uint256,address,uint16)":"e8eda9df","dropReserve(address)":"63c9b860","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"d5ed3933","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"ab9c4b5d","flashLoanSimple(address,address,uint256,bytes,uint16)":"42b0b77c","getConfiguration(address)":"c44b11f7","getEModeCategoryData(uint8)":"6c6f6ae1","getReserveAddressById(uint16)":"52751797","getReserveData(address)":"35ea6a75","getReserveNormalizedIncome(address)":"d15e0053","getReserveNormalizedVariableDebt(address)":"386497fd","getReservesList()":"d1946dbc","getUserAccountData(address)":"bf92857c","getUserConfiguration(address)":"4417a583","getUserEMode(address)":"eddf1b79","initReserve(address,address,address,address,address)":"7a708e92","initialize(address)":"c4d66de8","liquidationCall(address,address,address,uint256,bool)":"00a718a9","mintToTreasury(address[])":"9cd19996","mintUnbacked(address,uint256,address,uint16)":"69a933a5","rebalanceStableBorrowRate(address,address)":"cd112382","repay(address,uint256,uint256,address)":"573ade81","repayWithATokens(address,uint256,uint256)":"2dad97d4","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"ee3e210b","rescueTokens(address,address,uint256)":"cea9d26f","resetIsolationModeTotalDebt(address)":"e43e88a1","setConfiguration(address,(uint256))":"f51e435b","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setUserEMode(uint8)":"28530a47","setUserUseReserveAsCollateral(address,bool)":"5a3b74b9","supply(address,uint256,address,uint16)":"617ba037","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"02c205f0","swapBorrowRateMode(address,uint256)":"94ba89a2","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiums(uint128,uint128)":"bcb6e522","withdraw(address,uint256,address)":"69328dec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TOTAL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TO_PROTOCOL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUMBER_RESERVES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"category\",\"type\":\"tuple\"}],\"name\":\"configureEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"interestRateModes\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoanSimple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"}],\"name\":\"getEModeCategoryData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"getReserveAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentStableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"}],\"internalType\":\"struct DataTypes.ReserveData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserAccountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalCollateralBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebtBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableBorrowsBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.UserConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserEMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"resetIsolationModeTotalDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"setUserEMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumTotal\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiums\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific marketAll admin functions are callable by the PoolConfigurator contract defined also in the   PoolAddressesProvider\",\"kind\":\"dev\",\"methods\":{\"BRIDGE_PROTOCOL_FEE()\":{\"returns\":{\"_0\":\"The bridge fee sent to the protocol treasury\"}},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"returns\":{\"_0\":\"The total fee on flashloans\"}},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"returns\":{\"_0\":\"The flashloan fee sent to the protocol treasury\"}},\"MAX_NUMBER_RESERVES()\":{\"returns\":{\"_0\":\"The maximum number of reserves supported\"}},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"returns\":{\"_0\":\"The percentage of available liquidity to borrow, expressed in bps\"}},\"backUnbacked(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees\"},\"returns\":{\"_0\":\"The backed amount\"}},\"borrow(address,uint256,uint256,uint16,address)\":{\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"details\":\"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets\",\"params\":{\"config\":\"The configuration of the category\",\"id\":\"The id of the category\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider contract\"}},\"deposit(address,uint256,address,uint16)\":{\"details\":\"Deprecated: maintained for compatibility purposes\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"dropReserve(address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Only callable by the overlying aToken of the `asset`\",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"asset\":\"The address of the underlying asset of the aToken\",\"balanceFromBefore\":\"The aToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The aToken balance of the `to` user before the transfer\",\"from\":\"The user from which the aTokens are transferred\",\"to\":\"The user receiving the aTokens\"}},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amounts\":\"The amounts of the assets being flash-borrowed\",\"assets\":\"The addresses of the assets being flash-borrowed\",\"interestRateModes\":\"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\",\"onBehalfOf\":\"The address  that will receive the debt in the case of using on `modes` 1 or 2\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amount\":\"The amount of the asset being flash-borrowed\",\"asset\":\"The address of the asset being flash-borrowed\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"getConfiguration(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve\"}},\"getEModeCategoryData(uint8)\":{\"params\":{\"id\":\"The id of the category\"},\"returns\":{\"_0\":\"The configuration data of the category\"}},\"getReserveAddressById(uint16)\":{\"params\":{\"id\":\"The id of the reserve as stored in the DataTypes.ReserveData struct\"},\"returns\":{\"_0\":\"The address of the reserve associated with id\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The state and configuration data of the reserve\"}},\"getReserveNormalizedIncome(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve's normalized income\"}},\"getReserveNormalizedVariableDebt(address)\":{\"details\":\"WARNING: This function is intended to be used primarily by the protocol itself to get a \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReservesList()\":{\"details\":\"It does not include dropped reserves\",\"returns\":{\"_0\":\"The addresses of the underlying assets of the initialized reserves\"}},\"getUserAccountData(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"getUserConfiguration(address)\":{\"params\":{\"user\":\"The user address\"},\"returns\":{\"_0\":\"The configuration of the user\"}},\"getUserEMode(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The eMode id\"}},\"initReserve(address,address,address,address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"aTokenAddress\":\"The address of the aToken that will be assigned to the reserve\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy contract\",\"stableDebtAddress\":\"The address of the StableDebtToken that will be assigned to the reserve\",\"variableDebtAddress\":\"The address of the VariableDebtToken that will be assigned to the reserve\"}},\"initialize(address)\":{\"details\":\"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider\"}},\"liquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"mintToTreasury(address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"rebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"}},\"repay(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(address,uint256,uint256)\":{\"details\":\"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"resetIsolationModeTotalDebt(address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\"}},\"setConfiguration(address,(uint256))\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"configuration\":\"The new configuration bitmap\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"rateStrategyAddress\":\"The address of the interest rate strategy contract\"}},\"setUserEMode(uint8)\":{\"params\":{\"categoryId\":\"The id of the category\"}},\"setUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset supplied\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"}},\"supply(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"swapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"bridgeProtocolFee\":\"The part of the premium sent to the protocol treasury\"}},\"updateFlashloanPremiums(uint128,uint128)\":{\"details\":\"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract\",\"params\":{\"flashLoanPremiumToProtocol\":\"The part of the premium sent to the protocol treasury, expressed in bps\",\"flashLoanPremiumTotal\":\"The total premium, expressed in bps\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider\"}}},\"title\":\"Pool contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider connected to this contract\"},\"BRIDGE_PROTOCOL_FEE()\":{\"notice\":\"Returns the part of the bridge fees sent to protocol\"},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"notice\":\"Returns the total fee on flash loans\"},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"notice\":\"Returns the part of the flashloan fees sent to protocol\"},\"MAX_NUMBER_RESERVES()\":{\"notice\":\"Returns the maximum number of reserves supported to be listed in this Pool\"},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"notice\":\"Returns the percentage of available liquidity that can be borrowed at once at stable rate\"},\"backUnbacked(address,uint256,uint256)\":{\"notice\":\"Back the current unbacked underlying with `amount` and pay `fee`.\"},\"borrow(address,uint256,uint256,uint16,address)\":{\"notice\":\"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`\"},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"notice\":\"Configures a new category for the eMode.\"},\"deposit(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"dropReserve(address)\":{\"notice\":\"Drop a reserve\"},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Validates and finalizes an aToken transfer\"},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"getConfiguration(address)\":{\"notice\":\"Returns the configuration of the reserve\"},\"getEModeCategoryData(uint8)\":{\"notice\":\"Returns the data of an eMode category\"},\"getReserveAddressById(uint16)\":{\"notice\":\"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\"},\"getReserveData(address)\":{\"notice\":\"Returns the state and configuration of the reserve\"},\"getReserveNormalizedIncome(address)\":{\"notice\":\"Returns the normalized income of the reserve\"},\"getReserveNormalizedVariableDebt(address)\":{\"notice\":\"Returns the normalized variable debt per unit of asset\"},\"getReservesList()\":{\"notice\":\"Returns the list of the underlying assets of all the initialized reserves\"},\"getUserAccountData(address)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"getUserConfiguration(address)\":{\"notice\":\"Returns the configuration of the user across all the reserves\"},\"getUserEMode(address)\":{\"notice\":\"Returns the eMode the user is using\"},\"initReserve(address,address,address,address,address)\":{\"notice\":\"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy\"},\"initialize(address)\":{\"notice\":\"Initializes the Pool.\"},\"liquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\"},\"mintToTreasury(address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"mintUnbacked(address,uint256,address,uint16)\":{\"notice\":\"Mints an `amount` of aTokens to the `onBehalfOf`\"},\"rebalanceStableBorrowRate(address,address)\":{\"notice\":\"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough\"},\"repay(address,uint256,uint256,address)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\"},\"repayWithATokens(address,uint256,uint256)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\"},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"resetIsolationModeTotalDebt(address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"},\"setConfiguration(address,(uint256))\":{\"notice\":\"Sets the configuration bitmap of the reserve as a whole\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Updates the address of the interest rate strategy contract\"},\"setUserEMode(uint8)\":{\"notice\":\"Allows a user to use the protocol in eMode\"},\"setUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Allows suppliers to enable/disable a specific supplied asset as collateral\"},\"supply(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"swapBorrowRateMode(address,uint256)\":{\"notice\":\"Allows a borrower to swap his debt between stable and variable mode, or vice versa\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the protocol fee on the bridging\"},\"updateFlashloanPremiums(uint128,uint128)\":{\"notice\":\"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury\"},\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"}},\"notice\":\"Main point of interaction with an Aave protocol's market - Users can:   # Supply   # Withdraw   # Borrow   # Repay   # Swap their loans between variable and stable rate   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions   # Liquidate positions   # Execute Flash Loans\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/pool/Pool.sol\":\"Pool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n  /**\\n   * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n   *\\n   * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n   * {RoleAdminChanged} not being emitted signaling this.\\n   *\\n   * _Available since v3.1._\\n   */\\n  event RoleAdminChanged(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\n\\n  /**\\n   * @dev Emitted when `account` is granted `role`.\\n   *\\n   * `sender` is the account that originated the contract call, an admin role\\n   * bearer except when using {AccessControl-_setupRole}.\\n   */\\n  event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Emitted when `account` is revoked `role`.\\n   *\\n   * `sender` is the account that originated the contract call:\\n   *   - if using `revokeRole`, it is the admin role bearer\\n   *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n   */\\n  event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n  /**\\n   * @dev Returns the admin role that controls `role`. See {grantRole} and\\n   * {revokeRole}.\\n   *\\n   * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n  /**\\n   * @dev Grants `role` to `account`.\\n   *\\n   * If `account` had not been already granted `role`, emits a {RoleGranted}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function grantRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from `account`.\\n   *\\n   * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must have ``role``'s admin role.\\n   */\\n  function revokeRole(bytes32 role, address account) external;\\n\\n  /**\\n   * @dev Revokes `role` from the calling account.\\n   *\\n   * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n   * purpose is to provide a mechanism for accounts to lose their privileges\\n   * if they are compromised (such as when a trusted device is misplaced).\\n   *\\n   * If the calling account had been granted `role`, emits a {RoleRevoked}\\n   * event.\\n   *\\n   * Requirements:\\n   *\\n   * - the caller must be `account`.\\n   */\\n  function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {PoolStorage} from './PoolStorage.sol';\\n\\n/**\\n * @title Pool contract\\n * @author Aave\\n * @notice Main point of interaction with an Aave protocol's market\\n * - Users can:\\n *   # Supply\\n *   # Withdraw\\n *   # Borrow\\n *   # Repay\\n *   # Swap their loans between variable and stable rate\\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\\n *   # Liquidate positions\\n *   # Execute Flash Loans\\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\\n *   PoolAddressesProvider\\n */\\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\\n  using ReserveLogic for DataTypes.ReserveData;\\n\\n  uint256 public constant POOL_REVISION = 0x1;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Only pool configurator can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolConfigurator() {\\n    _onlyPoolConfigurator();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only bridge can call functions marked by this modifier.\\n   */\\n  modifier onlyBridge() {\\n    _onlyBridge();\\n    _;\\n  }\\n\\n  function _onlyPoolConfigurator() internal view virtual {\\n    require(\\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\\n    );\\n  }\\n\\n  function _onlyPoolAdmin() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyBridge() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\\n      Errors.CALLER_NOT_BRIDGE\\n    );\\n  }\\n\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return POOL_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /**\\n   * @notice Initializes the Pool.\\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\\n   * PoolAddressesProvider of the market.\\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\\n    _maxStableRateBorrowSizePercent = 0.25e4;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override onlyBridge {\\n    BridgeLogic.executeMintUnbacked(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      asset,\\n      amount,\\n      onBehalfOf,\\n      referralCode\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external virtual override onlyBridge returns (uint256) {\\n    return\\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supply(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) public virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override {\\n    IERC20WithPermit(asset).permit(\\n      msg.sender,\\n      address(this),\\n      amount,\\n      deadline,\\n      permitV,\\n      permitR,\\n      permitS\\n    );\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) public virtual override returns (uint256) {\\n    return\\n      SupplyLogic.executeWithdraw(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteWithdrawParams({\\n          asset: asset,\\n          amount: amount,\\n          to: to,\\n          reservesCount: _reservesCount,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[msg.sender]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) public virtual override {\\n    BorrowLogic.executeBorrow(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteBorrowParams({\\n        asset: asset,\\n        user: msg.sender,\\n        onBehalfOf: onBehalfOf,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        referralCode: referralCode,\\n        releaseUnderlying: true,\\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[onBehalfOf],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: onBehalfOf,\\n          useATokens: false\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override returns (uint256) {\\n    {\\n      IERC20WithPermit(asset).permit(\\n        msg.sender,\\n        address(this),\\n        amount,\\n        deadline,\\n        permitV,\\n        permitR,\\n        permitS\\n      );\\n    }\\n    {\\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\\n        asset: asset,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        onBehalfOf: onBehalfOf,\\n        useATokens: false\\n      });\\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: msg.sender,\\n          useATokens: true\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\\n    BorrowLogic.executeSwapBorrowRateMode(\\n      _reserves[asset],\\n      _usersConfig[msg.sender],\\n      asset,\\n      DataTypes.InterestRateMode(interestRateMode)\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) public virtual override {\\n    SupplyLogic.executeUseReserveAsCollateral(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[msg.sender],\\n      asset,\\n      useAsCollateral,\\n      _reservesCount,\\n      ADDRESSES_PROVIDER.getPriceOracle(),\\n      _usersEModeCategory[msg.sender]\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) public virtual override {\\n    LiquidationLogic.executeLiquidationCall(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig,\\n      _eModeCategories,\\n      DataTypes.ExecuteLiquidationCallParams({\\n        reservesCount: _reservesCount,\\n        debtToCover: debtToCover,\\n        collateralAsset: collateralAsset,\\n        debtAsset: debtAsset,\\n        user: user,\\n        receiveAToken: receiveAToken,\\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[user],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\\n      receiverAddress: receiverAddress,\\n      assets: assets,\\n      amounts: amounts,\\n      interestRateModes: interestRateModes,\\n      onBehalfOf: onBehalfOf,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n      reservesCount: _reservesCount,\\n      addressesProvider: address(ADDRESSES_PROVIDER),\\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\\n        msg.sender\\n      )\\n    });\\n\\n    FlashLoanLogic.executeFlashLoan(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      flashParams\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\\n      receiverAddress: receiverAddress,\\n      asset: asset,\\n      amount: amount,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\\n    });\\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintToTreasury(address[] calldata assets) external virtual override {\\n    PoolLogic.executeMintToTreasury(_reserves, assets);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveData(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\\n    return _reserves[asset];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    virtual\\n    override\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    return\\n      PoolLogic.executeGetUserAccountData(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: _usersConfig[user],\\n          reservesCount: _reservesCount,\\n          user: user,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[user]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getConfiguration(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\\n    return _reserves[asset].configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserConfiguration(\\n    address user\\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\\n    return _usersConfig[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedIncome(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedIncome();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedVariableDebt(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedDebt();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReservesList() external view virtual override returns (address[] memory) {\\n    uint256 reservesListCount = _reservesCount;\\n    uint256 droppedReservesCount = 0;\\n    address[] memory reservesList = new address[](reservesListCount);\\n\\n    for (uint256 i = 0; i < reservesListCount; i++) {\\n      if (_reservesList[i] != address(0)) {\\n        reservesList[i - droppedReservesCount] = _reservesList[i];\\n      } else {\\n        droppedReservesCount++;\\n      }\\n    }\\n\\n    // Reduces the length of the reserves array by `droppedReservesCount`\\n    assembly {\\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\\n    }\\n    return reservesList;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveAddressById(uint16 id) external view returns (address) {\\n    return _reservesList[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\\n    return _maxStableRateBorrowSizePercent;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\\n    return _bridgeProtocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumTotal;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external virtual override {\\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\\n    SupplyLogic.executeFinalizeTransfer(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig,\\n      DataTypes.FinalizeTransferParams({\\n        asset: asset,\\n        from: from,\\n        to: to,\\n        amount: amount,\\n        balanceFromBefore: balanceFromBefore,\\n        balanceToBefore: balanceToBefore,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        fromEModeCategory: _usersEModeCategory[from]\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    if (\\n      PoolLogic.executeInitReserve(\\n        _reserves,\\n        _reservesList,\\n        DataTypes.InitReserveParams({\\n          asset: asset,\\n          aTokenAddress: aTokenAddress,\\n          stableDebtAddress: stableDebtAddress,\\n          variableDebtAddress: variableDebtAddress,\\n          interestRateStrategyAddress: interestRateStrategyAddress,\\n          reservesCount: _reservesCount,\\n          maxNumberReserves: MAX_NUMBER_RESERVES()\\n        })\\n      )\\n    ) {\\n      _reservesCount++;\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].configuration = configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateBridgeProtocolFee(\\n    uint256 protocolFee\\n  ) external virtual override onlyPoolConfigurator {\\n    _bridgeProtocolFee = protocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external virtual override onlyPoolConfigurator {\\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function configureEModeCategory(\\n    uint8 id,\\n    DataTypes.EModeCategory memory category\\n  ) external virtual override onlyPoolConfigurator {\\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\\n    _eModeCategories[id] = category;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getEModeCategoryData(\\n    uint8 id\\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\\n    return _eModeCategories[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserEMode(uint8 categoryId) external virtual override {\\n    EModeLogic.executeSetUserEMode(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersEModeCategory,\\n      _usersConfig[msg.sender],\\n      DataTypes.ExecuteSetUserEModeParams({\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        categoryId: categoryId\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserEMode(address user) external view virtual override returns (uint256) {\\n    return _usersEModeCategory[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function resetIsolationModeTotalDebt(\\n    address asset\\n  ) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rescueTokens(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external virtual override onlyPoolAdmin {\\n    PoolLogic.executeRescueTokens(token, to, amount);\\n  }\\n\\n  /// @inheritdoc IPool\\n  /// @dev Deprecated: maintained for compatibility purposes\\n  function deposit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x3eeaa96fc9df64e0f7e85e48849549957d528ed005ebce43de9c277d662b1d37\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":28257,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_reserves","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(ReserveData)23909_storage)"},{"astId":28262,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_usersConfig","offset":0,"slot":"53","type":"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)"},{"astId":28266,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_reservesList","offset":0,"slot":"54","type":"t_mapping(t_uint256,t_address)"},{"astId":28271,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_eModeCategories","offset":0,"slot":"55","type":"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)"},{"astId":28275,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_usersEModeCategory","offset":0,"slot":"56","type":"t_mapping(t_address,t_uint8)"},{"astId":28277,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_bridgeProtocolFee","offset":0,"slot":"57","type":"t_uint256"},{"astId":28279,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_flashLoanPremiumTotal","offset":0,"slot":"58","type":"t_uint128"},{"astId":28281,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_flashLoanPremiumToProtocol","offset":16,"slot":"58","type":"t_uint128"},{"astId":28283,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_maxStableRateBorrowSizePercent","offset":0,"slot":"59","type":"t_uint64"},{"astId":28285,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"_reservesCount","offset":8,"slot":"59","type":"t_uint16"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_struct(ReserveData)23909_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.ReserveData)","numberOfBytes":"32","value":"t_struct(ReserveData)23909_storage"},"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.UserConfigurationMap)","numberOfBytes":"32","value":"t_struct(UserConfigurationMap)23916_storage"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)":{"encoding":"mapping","key":"t_uint8","label":"mapping(uint8 => struct DataTypes.EModeCategory)","numberOfBytes":"32","value":"t_struct(EModeCategory)23927_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(EModeCategory)23927_storage":{"encoding":"inplace","label":"struct DataTypes.EModeCategory","members":[{"astId":23918,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"ltv","offset":0,"slot":"0","type":"t_uint16"},{"astId":23920,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"liquidationThreshold","offset":2,"slot":"0","type":"t_uint16"},{"astId":23922,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"liquidationBonus","offset":4,"slot":"0","type":"t_uint16"},{"astId":23924,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"priceSource","offset":6,"slot":"0","type":"t_address"},{"astId":23926,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"label","offset":0,"slot":"1","type":"t_string_storage"}],"numberOfBytes":"64"},"t_struct(ReserveConfigurationMap)23912_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":23911,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_struct(ReserveData)23909_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveData","members":[{"astId":23880,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)23912_storage"},{"astId":23882,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"liquidityIndex","offset":0,"slot":"1","type":"t_uint128"},{"astId":23884,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"currentLiquidityRate","offset":16,"slot":"1","type":"t_uint128"},{"astId":23886,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"variableBorrowIndex","offset":0,"slot":"2","type":"t_uint128"},{"astId":23888,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"currentVariableBorrowRate","offset":16,"slot":"2","type":"t_uint128"},{"astId":23890,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"currentStableBorrowRate","offset":0,"slot":"3","type":"t_uint128"},{"astId":23892,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"lastUpdateTimestamp","offset":16,"slot":"3","type":"t_uint40"},{"astId":23894,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"id","offset":21,"slot":"3","type":"t_uint16"},{"astId":23896,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"aTokenAddress","offset":0,"slot":"4","type":"t_address"},{"astId":23898,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"stableDebtTokenAddress","offset":0,"slot":"5","type":"t_address"},{"astId":23900,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"variableDebtTokenAddress","offset":0,"slot":"6","type":"t_address"},{"astId":23902,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"interestRateStrategyAddress","offset":0,"slot":"7","type":"t_address"},{"astId":23904,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"accruedToTreasury","offset":0,"slot":"8","type":"t_uint128"},{"astId":23906,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"unbacked","offset":16,"slot":"8","type":"t_uint128"},{"astId":23908,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"isolationModeTotalDebt","offset":0,"slot":"9","type":"t_uint128"}],"numberOfBytes":"320"},"t_struct(UserConfigurationMap)23916_storage":{"encoding":"inplace","label":"struct DataTypes.UserConfigurationMap","members":[{"astId":23915,"contract":"contracts/protocol/pool/Pool.sol:Pool","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider connected to this contract"},"BRIDGE_PROTOCOL_FEE()":{"notice":"Returns the part of the bridge fees sent to protocol"},"FLASHLOAN_PREMIUM_TOTAL()":{"notice":"Returns the total fee on flash loans"},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"notice":"Returns the part of the flashloan fees sent to protocol"},"MAX_NUMBER_RESERVES()":{"notice":"Returns the maximum number of reserves supported to be listed in this Pool"},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"notice":"Returns the percentage of available liquidity that can be borrowed at once at stable rate"},"backUnbacked(address,uint256,uint256)":{"notice":"Back the current unbacked underlying with `amount` and pay `fee`."},"borrow(address,uint256,uint256,uint16,address)":{"notice":"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`"},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"notice":"Configures a new category for the eMode."},"deposit(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"dropReserve(address)":{"notice":"Drop a reserve"},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"notice":"Validates and finalizes an aToken transfer"},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"getConfiguration(address)":{"notice":"Returns the configuration of the reserve"},"getEModeCategoryData(uint8)":{"notice":"Returns the data of an eMode category"},"getReserveAddressById(uint16)":{"notice":"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct"},"getReserveData(address)":{"notice":"Returns the state and configuration of the reserve"},"getReserveNormalizedIncome(address)":{"notice":"Returns the normalized income of the reserve"},"getReserveNormalizedVariableDebt(address)":{"notice":"Returns the normalized variable debt per unit of asset"},"getReservesList()":{"notice":"Returns the list of the underlying assets of all the initialized reserves"},"getUserAccountData(address)":{"notice":"Returns the user account data across all the reserves"},"getUserConfiguration(address)":{"notice":"Returns the configuration of the user across all the reserves"},"getUserEMode(address)":{"notice":"Returns the eMode the user is using"},"initReserve(address,address,address,address,address)":{"notice":"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy"},"initialize(address)":{"notice":"Initializes the Pool."},"liquidationCall(address,address,address,uint256,bool)":{"notice":"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk"},"mintToTreasury(address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"mintUnbacked(address,uint256,address,uint16)":{"notice":"Mints an `amount` of aTokens to the `onBehalfOf`"},"rebalanceStableBorrowRate(address,address)":{"notice":"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough"},"repay(address,uint256,uint256,address)":{"notice":"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address"},"repayWithATokens(address,uint256,uint256)":{"notice":"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens"},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"notice":"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"resetIsolationModeTotalDebt(address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"},"setConfiguration(address,(uint256))":{"notice":"Sets the configuration bitmap of the reserve as a whole"},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Updates the address of the interest rate strategy contract"},"setUserEMode(uint8)":{"notice":"Allows a user to use the protocol in eMode"},"setUserUseReserveAsCollateral(address,bool)":{"notice":"Allows suppliers to enable/disable a specific supplied asset as collateral"},"supply(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"swapBorrowRateMode(address,uint256)":{"notice":"Allows a borrower to swap his debt between stable and variable mode, or vice versa"},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the protocol fee on the bridging"},"updateFlashloanPremiums(uint128,uint128)":{"notice":"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury"},"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"}},"notice":"Main point of interaction with an Aave protocol's market - Users can:   # Supply   # Withdraw   # Borrow   # Repay   # Swap their loans between variable and stable rate   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions   # Liquidate positions   # Execute Flash Loans","version":1}}},"contracts/protocol/pool/PoolConfigurator.sol":{"PoolConfigurator":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ATokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldBorrowCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"BorrowCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"borrowable","type":"bool"}],"name":"BorrowableInIsolationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBridgeProtocolFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"BridgeProtocolFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"CollateralConfigurationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldDebtCeiling","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"DebtCeilingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint8","name":"oldCategoryId","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"EModeAssetCategoryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"categoryId","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"indexed":false,"internalType":"address","name":"oracle","type":"address"},{"indexed":false,"internalType":"string","name":"label","type":"string"}],"name":"EModeCategoryAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumToProtocol","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"FlashloanPremiumToProtocolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumTotal","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"FlashloanPremiumTotalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"LiquidationProtocolFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"ReserveActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"}],"name":"ReserveDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldReserveFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"ReserveFactorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveFlashLoaning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"frozen","type":"bool"}],"name":"ReserveFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"aToken","type":"address"},{"indexed":false,"internalType":"address","name":"stableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"variableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"ReserveInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"oldStrategy","type":"address"},{"indexed":false,"internalType":"address","name":"newStrategy","type":"address"}],"name":"ReserveInterestRateStrategyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ReservePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveStableRateBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"oldState","type":"bool"},{"indexed":false,"internalType":"bool","name":"newState","type":"bool"}],"name":"SiloedBorrowingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"StableDebtTokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldSupplyCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"SupplyCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldUnbackedMintCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"UnbackedMintCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"VariableDebtTokenUpgraded","type":"event"},{"inputs":[],"name":"CONFIGURATOR_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"configureReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"aTokenImpl","type":"address"},{"internalType":"address","name":"stableDebtTokenImpl","type":"address"},{"internalType":"address","name":"variableDebtTokenImpl","type":"address"},{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"string","name":"variableDebtTokenName","type":"string"},{"internalType":"string","name":"variableDebtTokenSymbol","type":"string"},{"internalType":"string","name":"stableDebtTokenName","type":"string"},{"internalType":"string","name":"stableDebtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.InitReserveInput[]","name":"input","type":"tuple[]"}],"name":"initReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"setAssetEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"setBorrowCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"borrowable","type":"bool"}],"name":"setBorrowableInIsolation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"setDebtCeiling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"},{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"string","name":"label","type":"string"}],"name":"setEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setLiquidationProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPoolPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setReserveActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveFlashLoaning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"freeze","type":"bool"}],"name":"setReserveFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"newRateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"paused","type":"bool"}],"name":"setReservePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveStableRateBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"newSiloed","type":"bool"}],"name":"setSiloedBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"setUnbackedMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateATokenInput","name":"input","type":"tuple"}],"name":"updateAToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiumToProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"updateFlashloanPremiumTotal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateStableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateVariableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Implements the configuration methods for the Aave protocol","kind":"dev","methods":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":{"details":"All the values are expressed in bps. A value of 10000, results in 100.00%The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus","params":{"asset":"The address of the underlying asset of the reserve","liquidationBonus":"The bonus liquidators receive to liquidate this asset","liquidationThreshold":"The threshold at which loans using this asset as collateral will be considered undercollateralized","ltv":"The loan to value of the asset when used as collateral"}},"dropReserve(address)":{"params":{"asset":"The address of the reserve to drop"}},"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":{"params":{"input":"The array of initialization parameters"}},"setAssetEModeCategory(address,uint8)":{"params":{"asset":"The address of the underlying asset of the reserve","newCategoryId":"The new category id of the asset"}},"setBorrowCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newBorrowCap":"The new borrow cap of the reserve"}},"setBorrowableInIsolation(address,bool)":{"details":"When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed amount will be accumulated in the isolated collateral's total debt exposureOnly assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep consistency in the debt ceiling calculations","params":{"asset":"The address of the underlying asset of the reserve","borrowable":"True if the asset should be borrowable in isolation, false otherwise"}},"setDebtCeiling(address,uint256)":{"params":{"newDebtCeiling":"The new debt ceiling"}},"setEModeCategory(uint8,uint16,uint16,uint16,address,string)":{"details":"If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and overcollateralization of the users using this category.The new ltv and liquidation threshold must be greater than the base ltvs and liquidation thresholds of all assets within the eMode category","params":{"categoryId":"The id of the category to be configured","label":"A label identifying the category","liquidationBonus":"The liquidation bonus associated with the category","liquidationThreshold":"The liquidation threshold associated with the category","ltv":"The ltv associated with the category","oracle":"The oracle associated with the category"}},"setLiquidationProtocolFee(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newFee":"The new liquidation protocol fee of the reserve, expressed in bps"}},"setPoolPause(bool)":{"params":{"paused":"True if protocol needs to be paused, false otherwise"}},"setReserveActive(address,bool)":{"params":{"active":"True if the reserve needs to be active, false otherwise","asset":"The address of the underlying asset of the reserve"}},"setReserveBorrowing(address,bool)":{"details":"Can only be disabled (set to false) if stable borrowing is disabled","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if borrowing needs to be enabled, false otherwise"}},"setReserveFactor(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newReserveFactor":"The new reserve factor of the reserve"}},"setReserveFlashLoaning(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if flashloans need to be enabled, false otherwise"}},"setReserveFreeze(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","freeze":"True if the reserve needs to be frozen, false otherwise"}},"setReserveInterestRateStrategyAddress(address,address)":{"params":{"asset":"The address of the underlying asset of the reserve","newRateStrategyAddress":"The address of the new interest strategy contract"}},"setReservePause(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","paused":"True if pausing the reserve, false if unpausing"}},"setReserveStableRateBorrowing(address,bool)":{"details":"Can only be enabled (set to true) if borrowing is enabled","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if stable rate borrowing needs to be enabled, false otherwise"}},"setSiloedBorrowing(address,bool)":{"params":{"siloed":"The new siloed borrowing state"}},"setSupplyCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newSupplyCap":"The new supply cap of the reserve"}},"setUnbackedMintCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newUnbackedMintCap":"The new unbacked mint cap of the reserve"}},"updateAToken((address,address,address,string,string,address,bytes))":{"details":"Updates the aToken implementation for the reserve.","params":{"input":"The aToken update parameters"}},"updateBridgeProtocolFee(uint256)":{"params":{"newBridgeProtocolFee":"The part of the fee sent to the protocol treasury, expressed in bps"}},"updateFlashloanPremiumToProtocol(uint128)":{"details":"Expressed in bpsThe premium to protocol is calculated on the total flashloan premium","params":{"newFlashloanPremiumToProtocol":"The part of the flashloan premium sent to the protocol treasury"}},"updateFlashloanPremiumTotal(uint128)":{"details":"Expressed in bpsThe premium is calculated on the total amount borrowed","params":{"newFlashloanPremiumTotal":"The total flashloan premium"}},"updateStableDebtToken((address,address,string,string,address,bytes))":{"params":{"input":"The stableDebtToken update parameters"}},"updateVariableDebtToken((address,address,string,string,address,bytes))":{"params":{"input":"The variableDebtToken update parameters"}}},"title":"PoolConfigurator","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{"contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"ConfiguratorLogic":[{"length":20,"start":1111},{"length":20,"start":6183},{"length":20,"start":9570},{"length":20,"start":10638}]}},"object":"60806040526000805534801561001457600080fd5b50615ecb80620000256000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637af635a611610104578063aeb4fcc1116100a2578063c4d66de811610071578063c4d66de8146103b8578063d14a0983146103cb578063d4fe3f99146103de578063f213ef0e146103f157600080fd5b8063aeb4fcc11461036c578063b736aaeb1461037f578063bb01c37c14610392578063c19d61e4146103a557600080fd5b80638a751a60116100de5780638a751a601461032057806396e957c414610333578063a7fa83b714610346578063ad4e64321461035957600080fd5b80637af635a6146102e05780637c4e560b146102fa5780638a4936761461030d57600080fd5b806348d9fba91161017157806363c9b8601161014b57806363c9b86014610294578063682cf264146102a75780637626cde3146102ba5780637641f3d9146102cd57600080fd5b806348d9fba91461025b5780634b4e67531461026e578063571f03e51461028157600080fd5b80631df970bd116101ad5780631df970bd1461020f57806326d2cec2146102225780633036b4391461023557806338ae0cc31461024857600080fd5b806302fb45e6146101d4578063145f5892146101e95780631d2118f9146101fc575b600080fd5b6101e76101e2366004614dc3565b610404565b005b6101e76101f7366004614e6d565b6104d5565b6101e761020a366004614e99565b61066f565b6101e761021d366004614ef0565b6107f4565b6101e7610230366004614e6d565b610a90565b6101e7610243366004614f14565b610c8f565b6101e7610256366004614f3b565b610e59565b6101e7610269366004614f3b565b610fe4565b6101e761027c366004614e6d565b611170565b6101e761028f366004614e6d565b61136f565b6101e76102a2366004614f69565b6114ff565b6101e76102b5366004614f3b565b6115d0565b6101e76102c8366004614f86565b6117cf565b6101e76102db366004614fc1565b611874565b6102e8600181565b60405190815260200160405180910390f35b6101e7610308366004614fde565b6119c6565b6101e761031b366004614ef0565b611d50565b6101e761032e366004614f3b565b611fdb565b6101e7610341366004614f3b565b6121de565b6101e7610354366004614f3b565b61235d565b6101e7610367366004614f86565b61250a565b6101e761037a366004614e6d565b61257c565b6101e761038d366004614f3b565b6127a9565b6101e76103a0366004615019565b612936565b6101e76103b3366004615075565b6129a8565b6101e76103c6366004614f69565b61301c565b6101e76103d9366004614e6d565b613235565b6101e76103ec366004615143565b6133c5565b6101e76103ff366004614f3b565b6136a4565b61040c613823565b60355473ffffffffffffffffffffffffffffffffffffffff1660005b828110156104cf5773__$3ddc574512022f331a6a4c7e4bbb5c67b6$__63df59b8b28386868581811061045d5761045d615178565b905060200281019061046f91906151a7565b6040518363ffffffff1660e01b815260040161048c929190615299565b60006040518083038186803b1580156104a457600080fd5b505af41580156104b8573d6000803e3d6000fd5b5050505080806104c790615548565b915050610428565b50505050565b6104dd613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561054e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057291906156b5565b805190915060b01c640fffffffff1661058b8284613c75565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156105ff57600080fd5b505af1158015610613573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507f09808b1fc5abde94edf02fdde393bea0d2e4795999ba31695472848638b5c29f9250015b60405180910390a250505050565b610677613a4e565b6035546040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009216906335ea6a75906024016101e060405180830381865afa1580156106e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070d9190615707565b6101608101516035546040517f1d2118f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015293945091921690631d2118f990604401600060405180830381600087803b15801561078b57600080fd5b505af115801561079f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff85811682528781166020830152881693507fdb8dada53709ce4988154324196790c2e4a60c377e1256790946f83b87db3c33925001610661565b6107fc613d19565b60408051808201909152600281527f313900000000000000000000000000000000000000000000000000000000000060208201526127106fffffffffffffffffffffffffffffffff83161115610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b60405180910390fd5b50603554604080517f6a99c036000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691636a99c0369160048083019260209291908290030181865afa1580156108f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091d91906158b3565b603554604080517f074b2e43000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff9091169163bcb6e52291839163074b2e43916004808201926020929091908290030181865afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc91906158b3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff91821660048201529085166024820152604401600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8086168252861660208201527fe7e0c75e1fc2d0bd83dc85d59f085b3e763107c392fb368e85572b292f1f557693500190505b60405180910390a15050565b610a98613a4e565b60408051808201909152600281527f37300000000000000000000000000000000000000000000000000000000000006020820152612710821115610b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f91906156b5565b805190915060981c61ffff16610bb58284613eac565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b158015610c2957600080fd5b505af1158015610c3d573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fb5b0a963825337808b6e3154de8e98027595a5cad4219bb3a9bc55b192f4b391925001610661565b610c97613d19565b60408051808201909152600281527f32320000000000000000000000000000000000000000000000000000000000006020820152612710821115610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50603554604080517f272d9072000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163272d90729160048083019260209291908290030181865afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d91906158d0565b6035546040517f3036b4390000000000000000000000000000000000000000000000000000000081526004810185905291925073ffffffffffffffffffffffffffffffffffffffff1690633036b43990602401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610e1e573d6000803e3d6000fd5b505060408051848152602081018690527f30b17cb587a89089d003457c432f73e22aeee93de425e92224ba01080260ecd99350019050610a84565b610e61613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef691906156b5565b9050610f028183613f4d565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b158015610f7657600080fd5b505af1158015610f8a573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8716815285151560208201527f74adf6aaf58c08bc4f993640385e136522375ea3d1589a10d02adbb906c67d1c935001905060405180910390a1505050565b610fec613f92565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906156b5565b905061108d81836141b9565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fe188d542a5f11925d3a3af33703cdd30a43cb3e8066a3cf68b1b57f61a5a94b583604051611163911515815260200190565b60405180910390a2505050565b611178613a4e565b60408051808201909152600281527f363700000000000000000000000000000000000000000000000000000000000060208201526127108211156111e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561125b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127f91906156b5565b805190915060401c61ffff1661129582846141fe565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561130957600080fd5b505af115801561131d573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fb46e2b82b0c2cf3d7d9dece53635e165c53e0eaa7a44f904d61a2b7174826aef925001610661565b611377613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156113e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140c91906156b5565b805190915060741c640fffffffff16611425828461429f565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561149957600080fd5b505af11580156114ad573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507f0263602682188540a2d633561c0b4453b7d8566285e99f9f6018b8ef2facef49925001610661565b611507613d19565b6035546040517f63c9b86000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906363c9b86090602401600060405180830381600087803b15801561157457600080fd5b505af1158015611588573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507feeec4c06f7adad215cbdb4d2960896c83c26aedce02dde76d36fa28588d62da49150600090a250565b6115d8613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d91906156b5565b9050816116ef57805160408051808201909152600281527f383800000000000000000000000000000000000000000000000000000000000060208201529067080000000000000016156116ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b505b6116f98183614343565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b15801561176d57600080fd5b505af1158015611781573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f2443ba28e8d1d88d531a3d90b981816a4f3b3c7f1fd4085c6029e81d1b7a570d83604051611163911515815260200190565b6117d7613d19565b6035546040517ff5b50e7000000000000000000000000000000000000000000000000000000000815273__$3ddc574512022f331a6a4c7e4bbb5c67b6$__9163f5b50e70916118419173ffffffffffffffffffffffffffffffffffffffff169085906004016158e9565b60006040518083038186803b15801561185957600080fd5b505af415801561186d573d6000803e3d6000fd5b5050505050565b61187c614388565b603554604080517fd1946dbc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163d1946dbc91600480830192869291908290030181865afa1580156118eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261193191908101906159ee565b905060005b81518110156119c157600073ffffffffffffffffffffffffffffffffffffffff1682828151811061196957611969615178565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16146119af576119af8282815181106119a1576119a1615178565b602002602001015184610fe4565b806119b981615548565b915050611936565b505050565b6119ce613a4e565b60408051808201909152600281527f3230000000000000000000000000000000000000000000000000000000000000602082015282841115611a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600092169063c44b11f790602401602060405180830381865afa158015611aaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad391906156b5565b90508215611bcf5760408051808201909152600281527f323000000000000000000000000000000000000000000000000000000000000060208201526127108311611b4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50612710611b59848461451b565b11156040518060400160405280600281526020017f323000000000000000000000000000000000000000000000000000000000000081525090611bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50611c46565b60408051808201909152600281527f323000000000000000000000000000000000000000000000000000000000000060208201528215611c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50611c468561455e565b611c50818561470f565b611c5a81846147aa565b611c64818361484b565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050604080518781526020810187905290810185905273ffffffffffffffffffffffffffffffffffffffff881692507f637febbda9275aea2e85c0ff690444c8d87eb2e8339bbede9715abcc89cb0995915060600160405180910390a25050505050565b611d58613d19565b60408051808201909152600281527f313900000000000000000000000000000000000000000000000000000000000060208201526127106fffffffffffffffffffffffffffffffff83161115611ddb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50603554604080517f074b2e43000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163074b2e439160048083019260209291908290030181865afa158015611e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7091906158b3565b603554604080517f6a99c036000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff9091169163bcb6e5229185918491636a99c0369160048083019260209291908290030181865afa158015611eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1091906158b3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526fffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015611f7957600080fd5b505af1158015611f8d573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8086168252861660208201527f71aba182c9d0529b516de7a78bed74d49c207ef7e152f52f7ea5d8730138f6439350019050610a84565b611fe3613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207891906156b5565b905081156120fe5780516704000000000000001615156040518060400160405280600281526020017f3330000000000000000000000000000000000000000000000000000000000000815250906120fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b505b61210881836148ec565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b15801561217c57600080fd5b505af1158015612190573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f0b64d0941719acd363f1a6be3d8525d8ec9d71738f7445aabcd88d7939b472e783604051611163911515815260200190565b6121e6613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227b91906156b5565b90506122878183614931565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156122fb57600080fd5b505af115801561230f573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f0c4443d258a350d27dc50c378b2ebf165e6469725f786d21b30cab16823f558783604051611163911515815260200190565b612365613a4e565b80156123745761237482614976565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240991906156b5565b90506000612421825167400000000000000016151590565b905061242d8284614b0c565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156124a157600080fd5b505af11580156124b5573d6000803e3d6000fd5b5050604080518415158152861515602082015273ffffffffffffffffffffffffffffffffffffffff881693507f842a280b07e8e502a9101f32a3b768ebaba3655556dd674f0831900861fc674b925001610661565b612512613d19565b6035546040517fb0f0935500000000000000000000000000000000000000000000000000000000815273__$3ddc574512022f331a6a4c7e4bbb5c67b6$__9163b0f09355916118419173ffffffffffffffffffffffffffffffffffffffff169085906004016158e9565b612584613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156125f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261991906156b5565b805190915060d41c64ffffffffff1680612636576126368461455e565b6126408284614b51565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156126b457600080fd5b505af11580156126c8573d6000803e3d6000fd5b50505050826000141561275b576035546040517fe43e88a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063e43e88a190602401600060405180830381600087803b15801561274257600080fd5b505af1158015612756573d6000803e3d6000fd5b505050505b604080518281526020810185905273ffffffffffffffffffffffffffffffffffffffff8616917f6824a6c7fbc10d2979b1f1ccf2dd4ed0436541679a661dedb5c10bd4be8306829101610661565b6127b1613d19565b806127bf576127bf8261455e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285491906156b5565b90506128608183614bf5565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156128d457600080fd5b505af11580156128e8573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fc36c7d11ba01a5869d52aa4a3781939dab851cbc9ee6e7fdcedc7d58898a3f1e83604051611163911515815260200190565b61293e613d19565b6035546040517fb13c96a800000000000000000000000000000000000000000000000000000000815273__$3ddc574512022f331a6a4c7e4bbb5c67b6$__9163b13c96a8916118419173ffffffffffffffffffffffffffffffffffffffff16908590600401615aa0565b6129b0613a4e565b60408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261ffff8716612a20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5060408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261ffff8616612a91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b508461ffff168661ffff1611156040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5060408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261271061ffff861611612b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50612710612b9661ffff87811690871661451b565b11156040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612c06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50603554604080517fd1946dbc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163d1946dbc91600480830192869291908290030181865afa158015612c76573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612cbc91908101906159ee565b905060005b8151811015612ea457603554825160009173ffffffffffffffffffffffffffffffffffffffff169063c44b11f790859085908110612d0157612d01615178565b60200260200101516040518263ffffffff1660e01b8152600401612d41919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015612d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8291906156b5565b805190915060a81c60ff168a60ff161415612e9157805161ffff168961ffff16116040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50805160101c61ffff168861ffff16116040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b505b5080612e9c81615548565b915050612cc1565b50603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d579ea7d896040518060a001604052808b61ffff1681526020018a61ffff1681526020018961ffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152612f9b929190600401615bdf565b600060405180830381600087803b158015612fb557600080fd5b505af1158015612fc9573d6000803e3d6000fd5b505050508760ff167f0acf8b4a3cace10779798a89a206a0ae73a71b63acdd3be2801d39c2ef7ab3cb88888888888860405161300a96959493929190615c55565b60405180910390a25050505050505050565b6001805460ff168061302d5750303b155b80613039575060005481115b6130c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840161087f565b60015460ff1615801561310257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516908117909155604080517f026b1d5f000000000000000000000000000000000000000000000000000000008152905163026b1d5f916004808201926020929091908290030181865afa158015613199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bd9190615ca1565b603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905580156119c157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b61323d613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906156b5565b805190915060501c640fffffffff166132eb8284614c3a565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561335f57600080fd5b505af1158015613373573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fc51aca575985d521c5072ad11549bad77013bb786d57f30f94b40ed8f8dc9bc4925001610661565b6133cd613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561343e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346291906156b5565b905060ff8216156135ac576035546040517f6c6f6ae100000000000000000000000000000000000000000000000000000000815260ff8416600482015260009173ffffffffffffffffffffffffffffffffffffffff1690636c6f6ae190602401600060405180830381865afa1580156134df573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526135259190810190615cbe565b825190915060101c61ffff16816020015161ffff16116040518060400160405280600281526020017f3137000000000000000000000000000000000000000000000000000000000000815250906135a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50505b805160009060a81c60ff1690506135c68260ff8516614cde565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561363a57600080fd5b505af115801561364e573d6000803e3d6000fd5b50506040805160ff80861682528716602082015273ffffffffffffffffffffffffffffffffffffffff881693507f5bb69795b6a2ea222d73a5f8939c23471a1f85a99c7ca43c207f1b71f10c6264925001610661565b6136ac613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561371d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374191906156b5565b905061374d8183614d7e565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156137c157600080fd5b505af11580156137d5573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fc8ff3cc5b0fddaa3e6ebbbd7438f43393e4ea30e88b80ad016c1bc094655034d83604051611163911515815260200190565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b79190615ca1565b6040517f13ee32e000000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906313ee32e090602401602060405180830381865afa158015613924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139489190615de9565b806139dc57506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156139b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139dc9190615de9565b6040518060400160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5050565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae29190615ca1565b6040517f674b5e4d00000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff82169063674b5e4d90602401602060405180830381865afa158015613b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b739190615de9565b80613c0757506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015613be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c079190615de9565b6040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b60408051808201909152600281527f37320000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115613ce9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517ffffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b179052565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dad9190615ca1565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015613e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3e9190615de9565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b60408051808201909152600281527f3730000000000000000000000000000000000000000000000000000000000000602082015261ffff821115613f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff1660989190911b179052565b603d81613f5b576000613f5e565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffff1660ff9190911690911b1790915250565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015614002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140269190615ca1565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015614093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b79190615de9565b8061414b57506040517f2500f2b600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690632500f2b690602401602060405180830381865afa158015614127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414b9190615de9565b6040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b603c816141c75760006141ca565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3637000000000000000000000000000000000000000000000000000000000000602082015261ffff82111561426f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1660409190911b179052565b60408051808201909152600281527f36390000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115614313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff1660749190911b179052565b603a81614351576000614354565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff1660ff9190911690911b1790915250565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa1580156143f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061441c9190615ca1565b6040517f2500f2b600000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690632500f2b690602401602060405180830381865afa158015614489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144ad9190615de9565b6040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761455057600080fd5b506127109102611388010490565b600080603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e860accb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145f29190615ca1565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a759060240161018060405180830381865afa158015614661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146859190615e06565b50505050505050505092509250508060001480156146a1575081155b6040518060400160405280600281526020017f3138000000000000000000000000000000000000000000000000000000000000815250906104cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b60408051808201909152600281527f3633000000000000000000000000000000000000000000000000000000000000602082015261ffff821115614780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016179052565b60408051808201909152600281527f3634000000000000000000000000000000000000000000000000000000000000602082015261ffff82111561481b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1660109190911b179052565b60408051808201909152600281527f3635000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156148bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1660209190911b179052565b603b816148fa5760006148fd565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff1660ff9190911690911b1790915250565b60398161493f576000614942565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b603454604080517fe860accb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163e860accb9160048083019260209291908290030181865afa1580156149e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a0a9190615ca1565b6040517f4d44ac4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529190911690634d44ac4f90602401602060405180830381865afa158015614a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a9c91906158d0565b60408051808201909152600281527f3930000000000000000000000000000000000000000000000000000000000000602082015290915081156119c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b603e81614b1a576000614b1d565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3733000000000000000000000000000000000000000000000000000000000000602082015264ffffffffff821115614bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517ff0000000000fffffffffffffffffffffffffffffffffffffffffffffffffffff1660d49190911b179052565b603881614c03576000614c06565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f36380000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115614cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517ffffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffff1660509190911b179052565b60408051808201909152600281527f3731000000000000000000000000000000000000000000000000000000000000602082015260ff821115614d4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1660a89190911b179052565b603f81614d8c576000614d8f565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff1660ff9190911690911b1790915250565b60008060208385031215614dd657600080fd5b823567ffffffffffffffff80821115614dee57600080fd5b818501915085601f830112614e0257600080fd5b813581811115614e1157600080fd5b8660208260051b8501011115614e2657600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114614e5a57600080fd5b50565b8035614e6881614e38565b919050565b60008060408385031215614e8057600080fd5b8235614e8b81614e38565b946020939093013593505050565b60008060408385031215614eac57600080fd5b8235614eb781614e38565b91506020830135614ec781614e38565b809150509250929050565b6fffffffffffffffffffffffffffffffff81168114614e5a57600080fd5b600060208284031215614f0257600080fd5b8135614f0d81614ed2565b9392505050565b600060208284031215614f2657600080fd5b5035919050565b8015158114614e5a57600080fd5b60008060408385031215614f4e57600080fd5b8235614f5981614e38565b91506020830135614ec781614f2d565b600060208284031215614f7b57600080fd5b8135614f0d81614e38565b600060208284031215614f9857600080fd5b813567ffffffffffffffff811115614faf57600080fd5b820160c08185031215614f0d57600080fd5b600060208284031215614fd357600080fd5b8135614f0d81614f2d565b60008060008060808587031215614ff457600080fd5b8435614fff81614e38565b966020860135965060408601359560600135945092505050565b60006020828403121561502b57600080fd5b813567ffffffffffffffff81111561504257600080fd5b820160e08185031215614f0d57600080fd5b803560ff81168114614e6857600080fd5b61ffff81168114614e5a57600080fd5b600080600080600080600060c0888a03121561509057600080fd5b61509988615054565b965060208801356150a981615065565b955060408801356150b981615065565b945060608801356150c981615065565b935060808801356150d981614e38565b925060a088013567ffffffffffffffff808211156150f657600080fd5b818a0191508a601f83011261510a57600080fd5b81358181111561511957600080fd5b8b602082850101111561512b57600080fd5b60208301945080935050505092959891949750929550565b6000806040838503121561515657600080fd5b823561516181614e38565b915061516f60208401615054565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe218336030181126151db57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261521a57600080fd5b830160208101925035905067ffffffffffffffff81111561523a57600080fd5b80360383131561524957600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526152e3604082016152c984614e5d565b73ffffffffffffffffffffffffffffffffffffffff169052565b60006152f160208401614e5d565b73ffffffffffffffffffffffffffffffffffffffff16606083015261531860408401614e5d565b73ffffffffffffffffffffffffffffffffffffffff16608083015261533f60608401615054565b60ff1660a083015261535360808401614e5d565b73ffffffffffffffffffffffffffffffffffffffff1660c083015261537a60a08401614e5d565b73ffffffffffffffffffffffffffffffffffffffff1660e08301526153a160c08401614e5d565b6101006153c58185018373ffffffffffffffffffffffffffffffffffffffff169052565b6153d160e08601614e5d565b91506101206153f78186018473ffffffffffffffffffffffffffffffffffffffff169052565b615403828701876151e5565b935091506101e0610140818188015261542161022088018686615250565b945061542f838901896151e5565b945092507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06101608189880301818a015261546b878787615250565b9650615479838b018b6151e5565b9650945061018092508189880301838a0152615496878787615250565b96506154a4818b018b6151e5565b96509450506101a08189880301818a01526154c0878787615250565b96506154ce838b018b6151e5565b965094506101c092508189880301838a01526154eb878787615250565b96506154f9818b018b6151e5565b9650945050808887030183890152615512868686615250565b9550615520828a018a6151e5565b95509350808887030161020089015250505061553d838383615250565b979650505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156155fb576155fb6155a8565b60405290565b60405160a0810167ffffffffffffffff811182821017156155fb576155fb6155a8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561566b5761566b6155a8565b604052919050565b60006020828403121561568557600080fd5b6040516020810181811067ffffffffffffffff821117156156a8576156a86155a8565b6040529151825250919050565b6000602082840312156156c757600080fd5b614f0d8383615673565b8051614e6881614ed2565b805164ffffffffff81168114614e6857600080fd5b8051614e6881615065565b8051614e6881614e38565b60006101e0828403121561571a57600080fd5b6157226155d7565b61572c8484615673565b815261573a602084016156d1565b602082015261574b604084016156d1565b604082015261575c606084016156d1565b606082015261576d608084016156d1565b608082015261577e60a084016156d1565b60a082015261578f60c084016156dc565b60c08201526157a060e084016156f1565b60e08201526101006157b38185016156fc565b908201526101206157c58482016156fc565b908201526101406157d78482016156fc565b908201526101606157e98482016156fc565b908201526101806157fb8482016156d1565b908201526101a061580d8482016156d1565b908201526101c061581f8482016156d1565b908201529392505050565b60005b8381101561584557818101518382015260200161582d565b838111156104cf5750506000910152565b6000815180845261586e81602086016020860161582a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614f0d6020830184615856565b6000602082840312156158c557600080fd5b8151614f0d81614ed2565b6000602082840312156158e257600080fd5b5051919050565b600073ffffffffffffffffffffffffffffffffffffffff808516835260406020840152833561591781614e38565b81166040840152602084013561592c81614e38565b16606083015261593f60408401846151e5565b60c0608085015261595561010085018284615250565b91505061596560608501856151e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808685030160a087015261599b848385615250565b93506159a960808801614e5d565b73ffffffffffffffffffffffffffffffffffffffff811660c088015292506159d460a08801886151e5565b93509150808685030160e08701525061553d838383615250565b60006020808385031215615a0157600080fd5b825167ffffffffffffffff80821115615a1957600080fd5b818501915085601f830112615a2d57600080fd5b815181811115615a3f57615a3f6155a8565b8060051b9150615a50848301615624565b8181529183018401918481019088841115615a6a57600080fd5b938501935b83851015615a945784519250615a8483614e38565b8282529385019390850190615a6f565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8085168352604060208401528335615ace81614e38565b166040830152615ae060208401614e5d565b73ffffffffffffffffffffffffffffffffffffffff166060830152615b0760408401614e5d565b73ffffffffffffffffffffffffffffffffffffffff166080830152615b2f60608401846151e5565b60e060a0850152615b4561012085018284615250565b915050615b5560808501856151e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808685030160c0870152615b8b848385615250565b9350615b9960a08801614e5d565b73ffffffffffffffffffffffffffffffffffffffff811660e08801529250615bc460c08801886151e5565b9350915080868503016101008701525061553d838383615250565b60ff8316815260406020820152600061ffff8084511660408401528060208501511660608401528060408501511660808401525073ffffffffffffffffffffffffffffffffffffffff60608401511660a0830152608083015160a060c0840152615c4c60e0840182615856565b95945050505050565b600061ffff8089168352808816602084015280871660408401525073ffffffffffffffffffffffffffffffffffffffff8516606083015260a06080830152615a9460a083018486615250565b600060208284031215615cb357600080fd5b8151614f0d81614e38565b60006020808385031215615cd157600080fd5b825167ffffffffffffffff80821115615ce957600080fd5b9084019060a08287031215615cfd57600080fd5b615d05615601565b8251615d1081615065565b815282840151615d1f81615065565b818501526040830151615d3181615065565b60408201526060830151615d4481614e38565b6060820152608083015182811115615d5b57600080fd5b80840193505086601f840112615d7057600080fd5b825182811115615d8257615d826155a8565b615db2857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615624565b92508083528785828601011115615dc857600080fd5b615dd78186850187870161582a565b50608081019190915295945050505050565b600060208284031215615dfb57600080fd5b8151614f0d81614f2d565b6000806000806000806000806000806000806101808d8f031215615e2957600080fd5b8c519b5060208d01519a5060408d0151995060608d0151985060808d0151975060a08d0151965060c08d0151955060e08d015194506101008d015193506101208d015192506101408d01519150615e836101608e016156dc565b90509295989b509295989b509295989b56fea264697066735822122001dac2e7ba1c03f36af015a9940a8249669c16fe14a56cc365e85fa9f7f0b8a764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5ECB DUP1 PUSH3 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7AF635A6 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xAEB4FCC1 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD14A0983 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0xD4FE3F99 EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0xF213EF0E EQ PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAEB4FCC1 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0xB736AAEB EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0xBB01C37C EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xC19D61E4 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8A751A60 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x8A751A60 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x96E957C4 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xA7FA83B7 EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xAD4E6432 EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7AF635A6 EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x7C4E560B EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x8A493676 EQ PUSH2 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x48D9FBA9 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x63C9B860 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x294 JUMPI DUP1 PUSH4 0x682CF264 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x7626CDE3 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x7641F3D9 EQ PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x48D9FBA9 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x4B4E6753 EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0x571F03E5 EQ PUSH2 0x281 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1DF970BD GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x1DF970BD EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x26D2CEC2 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x38AE0CC3 EQ PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2FB45E6 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x145F5892 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x1FC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x1E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4DC3 JUMP JUMPDEST PUSH2 0x404 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E7 PUSH2 0x1F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x4D5 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x20A CALLDATASIZE PUSH1 0x4 PUSH2 0x4E99 JUMP JUMPDEST PUSH2 0x66F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x21D CALLDATASIZE PUSH1 0x4 PUSH2 0x4EF0 JUMP JUMPDEST PUSH2 0x7F4 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x230 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0xA90 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F14 JUMP JUMPDEST PUSH2 0xC8F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x256 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0xE59 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x269 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0xFE4 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x136F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F69 JUMP JUMPDEST PUSH2 0x14FF JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x15D0 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F86 JUMP JUMPDEST PUSH2 0x17CF JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2DB CALLDATASIZE PUSH1 0x4 PUSH2 0x4FC1 JUMP JUMPDEST PUSH2 0x1874 JUMP JUMPDEST PUSH2 0x2E8 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E7 PUSH2 0x308 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FDE JUMP JUMPDEST PUSH2 0x19C6 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x31B CALLDATASIZE PUSH1 0x4 PUSH2 0x4EF0 JUMP JUMPDEST PUSH2 0x1D50 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x1FDB JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x341 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x21DE JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x235D JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x367 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F86 JUMP JUMPDEST PUSH2 0x250A JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x37A CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x257C JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x38D CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x27A9 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5019 JUMP JUMPDEST PUSH2 0x2936 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5075 JUMP JUMPDEST PUSH2 0x29A8 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F69 JUMP JUMPDEST PUSH2 0x301C JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x3235 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3EC CALLDATASIZE PUSH1 0x4 PUSH2 0x5143 JUMP JUMPDEST PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x36A4 JUMP JUMPDEST PUSH2 0x40C PUSH2 0x3823 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH20 0x0 PUSH4 0xDF59B8B2 DUP4 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x45D JUMPI PUSH2 0x45D PUSH2 0x5178 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x46F SWAP2 SWAP1 PUSH2 0x51A7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48C SWAP3 SWAP2 SWAP1 PUSH2 0x5299 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x4C7 SWAP1 PUSH2 0x5548 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x428 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4DD PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x54E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x572 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x58B DUP3 DUP5 PUSH2 0x3C75 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x613 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x9808B1FC5ABDE94EDF02FDDE393BEA0D2E4795999BA31695472848638B5C29F SWAP3 POP ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH2 0x677 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x70D SWAP2 SWAP1 PUSH2 0x5707 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x1D2118F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 AND SWAP1 PUSH4 0x1D2118F9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x79F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP9 AND SWAP4 POP PUSH32 0xDB8DADA53709CE4988154324196790C2E4A60C377E1256790946F83B87DB3C33 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x7FC PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND GT ISZERO PUSH2 0x888 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A99C03600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x6A99C036 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x91D SWAP2 SWAP1 PUSH2 0x58B3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x74B2E4300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0xBCB6E522 SWAP2 DUP4 SWAP2 PUSH4 0x74B2E43 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x998 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9BC SWAP2 SWAP1 PUSH2 0x58B3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xE7E0C75E1FC2D0BD83DC85D59F085B3E763107C392FB368E85572B292F1F5576 SWAP4 POP ADD SWAP1 POP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0xA98 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0xB09 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB7B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB9F SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0xBB5 DUP3 DUP5 PUSH2 0x3EAC JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xB5B0A963825337808B6E3154DE8E98027595A5CAD4219BB3A9BC55B192F4B391 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0xC97 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0xD08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x272D907200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x272D9072 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD9D SWAP2 SWAP1 PUSH2 0x58D0 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x3036B43900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP2 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x3036B439 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH32 0x30B17CB587A89089D003457C432F73E22AEEE93DE425E92224BA01080260ECD9 SWAP4 POP ADD SWAP1 POP PUSH2 0xA84 JUMP JUMPDEST PUSH2 0xE61 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xED2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEF6 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0xF02 DUP2 DUP4 PUSH2 0x3F4D JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF8A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE DUP6 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x74ADF6AAF58C08BC4F993640385E136522375EA3D1589A10D02ADBB906C67D1C SWAP4 POP ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH2 0xFEC PUSH2 0x3F92 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x105D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1081 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x108D DUP2 DUP4 PUSH2 0x41B9 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1115 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE188D542A5F11925D3A3AF33703CDD30A43CB3E8066A3CF68B1B57F61A5A94B5 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH2 0x1178 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0x11E9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x125B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x127F SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x40 SHR PUSH2 0xFFFF AND PUSH2 0x1295 DUP3 DUP5 PUSH2 0x41FE JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x131D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xB46E2B82B0C2CF3D7D9DECE53635E165C53E0EAA7A44F904D61A2B7174826AEF SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x1377 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x140C SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x1425 DUP3 DUP5 PUSH2 0x429F JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x14AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x263602682188540A2D633561C0B4453B7D8566285E99F9F6018B8EF2FACEF49 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x1507 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x63C9B86000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x63C9B860 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1588 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP3 POP PUSH32 0xEEEC4C06F7ADAD215CBDB4D2960896C83C26AEDCE02DDE76D36FA28588D62DA4 SWAP2 POP PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x15D8 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1649 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x166D SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x16EF JUMPI DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3838000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH8 0x800000000000000 AND ISZERO PUSH2 0x16ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP JUMPDEST PUSH2 0x16F9 DUP2 DUP4 PUSH2 0x4343 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1781 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2443BA28E8D1D88D531A3D90B981816A4F3B3C7F1FD4085C6029E81D1B7A570D DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x17D7 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF5B50E7000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xF5B50E70 SWAP2 PUSH2 0x1841 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x58E9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1859 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x186D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x187C PUSH2 0x4388 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD1946DBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xD1946DBC SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 DUP7 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1931 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x59EE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x19C1 JUMPI PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1969 JUMPI PUSH2 0x1969 PUSH2 0x5178 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x19AF JUMPI PUSH2 0x19AF DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x19A1 JUMPI PUSH2 0x19A1 PUSH2 0x5178 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0xFE4 JUMP JUMPDEST DUP1 PUSH2 0x19B9 DUP2 PUSH2 0x5548 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1936 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x19CE PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 DUP5 GT ISZERO PUSH2 0x1A3D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AAF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AD3 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP DUP3 ISZERO PUSH2 0x1BCF JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP4 GT PUSH2 0x1B4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH2 0x2710 PUSH2 0x1B59 DUP5 DUP5 PUSH2 0x451B JUMP JUMPDEST GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1BC9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH2 0x1C46 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0x1C3C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH2 0x1C46 DUP6 PUSH2 0x455E JUMP JUMPDEST PUSH2 0x1C50 DUP2 DUP6 PUSH2 0x470F JUMP JUMPDEST PUSH2 0x1C5A DUP2 DUP5 PUSH2 0x47AA JUMP JUMPDEST PUSH2 0x1C64 DUP2 DUP4 PUSH2 0x484B JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP8 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP3 POP PUSH32 0x637FEBBDA9275AEA2E85C0FF690444C8D87EB2E8339BBEDE9715ABCC89CB0995 SWAP2 POP PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1D58 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND GT ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x74B2E4300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x74B2E43 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E70 SWAP2 SWAP1 PUSH2 0x58B3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A99C03600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0xBCB6E522 SWAP2 DUP6 SWAP2 DUP5 SWAP2 PUSH4 0x6A99C036 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F10 SWAP2 SWAP1 PUSH2 0x58B3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F8D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x71ABA182C9D0529B516DE7A78BED74D49C207EF7E152F52F7EA5D8730138F643 SWAP4 POP ADD SWAP1 POP PUSH2 0xA84 JUMP JUMPDEST PUSH2 0x1FE3 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2054 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2078 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP DUP2 ISZERO PUSH2 0x20FE JUMPI DUP1 MLOAD PUSH8 0x400000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x20FC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP JUMPDEST PUSH2 0x2108 DUP2 DUP4 PUSH2 0x48EC JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x217C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2190 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB64D0941719ACD363F1A6BE3D8525D8EC9D71738F7445AABCD88D7939B472E7 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x21E6 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2257 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x227B SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x2287 DUP2 DUP4 PUSH2 0x4931 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x230F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC4443D258A350D27DC50C378B2EBF165E6469725F786D21B30CAB16823F5587 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x2365 PUSH2 0x3A4E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2374 JUMPI PUSH2 0x2374 DUP3 PUSH2 0x4976 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2409 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2421 DUP3 MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x242D DUP3 DUP5 PUSH2 0x4B0C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 ISZERO ISZERO DUP2 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x842A280B07E8E502A9101F32A3B768EBABA3655556DD674F0831900861FC674B SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x2512 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB0F0935500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xB0F09355 SWAP2 PUSH2 0x1841 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x58E9 JUMP JUMPDEST PUSH2 0x2584 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2619 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND DUP1 PUSH2 0x2636 JUMPI PUSH2 0x2636 DUP5 PUSH2 0x455E JUMP JUMPDEST PUSH2 0x2640 DUP3 DUP5 PUSH2 0x4B51 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26C8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH1 0x0 EQ ISZERO PUSH2 0x275B JUMPI PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE43E88A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xE43E88A1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2742 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2756 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP2 PUSH32 0x6824A6C7FBC10D2979B1F1CCF2DD4ED0436541679A661DEDB5C10BD4BE830682 SWAP2 ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x27B1 PUSH2 0x3D19 JUMP JUMPDEST DUP1 PUSH2 0x27BF JUMPI PUSH2 0x27BF DUP3 PUSH2 0x455E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2854 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x2860 DUP2 DUP4 PUSH2 0x4BF5 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC36C7D11BA01A5869D52AA4A3781939DAB851CBC9EE6E7FDCEDC7D58898A3F1E DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x293E PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB13C96A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xB13C96A8 SWAP2 PUSH2 0x1841 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5AA0 JUMP JUMPDEST PUSH2 0x29B0 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP8 AND PUSH2 0x2A20 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP7 AND PUSH2 0x2A91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP5 PUSH2 0xFFFF AND DUP7 PUSH2 0xFFFF AND GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2B0C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH2 0xFFFF DUP7 AND GT PUSH2 0x2B81 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH2 0x2710 PUSH2 0x2B96 PUSH2 0xFFFF DUP8 DUP2 AND SWAP1 DUP8 AND PUSH2 0x451B JUMP JUMPDEST GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2C06 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD1946DBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xD1946DBC SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 DUP7 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2CBC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x59EE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x2EA4 JUMPI PUSH1 0x35 SLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xC44B11F7 SWAP1 DUP6 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x2D01 JUMPI PUSH2 0x2D01 PUSH2 0x5178 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2D41 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D82 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xA8 SHR PUSH1 0xFF AND DUP11 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2E91 JUMPI DUP1 MLOAD PUSH2 0xFFFF AND DUP10 PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2E11 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP1 MLOAD PUSH1 0x10 SHR PUSH2 0xFFFF AND DUP9 PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2E8F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x2E9C DUP2 PUSH2 0x5548 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2CC1 JUMP JUMPDEST POP PUSH1 0x35 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD579EA7D DUP10 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP2 MSTORE POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x2F9B SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5BDF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2FC9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP8 PUSH1 0xFF AND PUSH32 0xACF8B4A3CACE10779798A89A206A0AE73A71B63ACDD3BE2801D39C2EF7AB3CB DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x300A SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5C55 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x302D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x3039 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x30C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x87F JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x3102 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x26B1D5F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x26B1D5F SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3199 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31BD SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x19C1 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x323D PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32D2 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x32EB DUP3 DUP5 PUSH2 0x4C3A JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x335F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3373 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xC51ACA575985D521C5072AD11549BAD77013BB786D57F30F94B40ED8F8DC9BC4 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x33CD PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x343E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3462 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x35AC JUMPI PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6C6F6AE100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x6C6F6AE1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x3525 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5CBE JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP PUSH1 0x10 SHR PUSH2 0xFFFF AND DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3137000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x35A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP POP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xA8 SHR PUSH1 0xFF AND SWAP1 POP PUSH2 0x35C6 DUP3 PUSH1 0xFF DUP6 AND PUSH2 0x4CDE JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x363A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x364E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF DUP1 DUP7 AND DUP3 MSTORE DUP8 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x5BB69795B6A2EA222D73A5F8939C23471A1F85A99C7CA43C207F1B71F10C6264 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x36AC PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x371D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3741 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x374D DUP2 DUP4 PUSH2 0x4D7E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC8FF3CC5B0FDDAA3E6EBBBD7438F43393E4EA30E88B80AD016C1BC094655034D DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3893 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38B7 SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x13EE32E000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x13EE32E0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3924 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3948 SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST DUP1 PUSH2 0x39DC JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39DC SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3ABE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AE2 SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x674B5E4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x674B5E4D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B73 SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST DUP1 PUSH2 0x3C07 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BE3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3C07 SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3CE9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xB0 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3DAD SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E3E SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x3F1D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x98 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3D DUP2 PUSH2 0x3F5B JUMPI PUSH1 0x0 PUSH2 0x3F5E JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4002 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4026 SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4093 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x40B7 SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST DUP1 PUSH2 0x414B JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x2500F2B600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x2500F2B6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4127 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x414B SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3300000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x3C DUP2 PUSH2 0x41C7 JUMPI PUSH1 0x0 PUSH2 0x41CA JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x426F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF AND PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4313 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x74 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3A DUP2 PUSH2 0x4351 JUMPI PUSH1 0x0 PUSH2 0x4354 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x43F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x441C SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x2500F2B600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x2500F2B6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4489 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x44AD SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x34 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE860ACCB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x45CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x45F2 SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x180 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4661 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4685 SWAP2 SWAP1 PUSH2 0x5E06 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP SWAP3 POP SWAP3 POP POP DUP1 PUSH1 0x0 EQ DUP1 ISZERO PUSH2 0x46A1 JUMPI POP DUP2 ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3138000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x4CF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x4780 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x481B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF AND PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x48BC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF AND PUSH1 0x20 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3B DUP2 PUSH2 0x48FA JUMPI PUSH1 0x0 PUSH2 0x48FD JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0x493F JUMPI PUSH1 0x0 PUSH2 0x4942 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xE860ACCB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xE860ACCB SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x49E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A0A SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4D44AC4F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4D44AC4F SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A78 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A9C SWAP2 SWAP1 PUSH2 0x58D0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3930000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 ISZERO PUSH2 0x19C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x3E DUP2 PUSH2 0x4B1A JUMPI PUSH1 0x0 PUSH2 0x4B1D JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3733000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4BC5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xD4 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x38 DUP2 PUSH2 0x4C03 JUMPI PUSH1 0x0 PUSH2 0x4C06 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4CAE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF AND PUSH1 0x50 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0x4D4E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3F DUP2 PUSH2 0x4D8C JUMPI PUSH1 0x0 PUSH2 0x4D8F JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4DD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4DEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4E11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4E5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x4E68 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4E80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4E8B DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4EAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4EB7 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4EC7 DUP2 PUSH2 0x4E38 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4E5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4F0D DUP2 PUSH2 0x4ED2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4E5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4F4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4F59 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4EC7 DUP2 PUSH2 0x4F2D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4F0D DUP2 PUSH2 0x4E38 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4FAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xC0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x4F0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4FD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4F0D DUP2 PUSH2 0x4F2D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4FF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4FFF DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP6 PUSH1 0x60 ADD CALLDATALOAD SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x502B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5042 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xE0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x4F0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x4E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x4E5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xC0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5090 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5099 DUP9 PUSH2 0x5054 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x50A9 DUP2 PUSH2 0x5065 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x50B9 DUP2 PUSH2 0x5065 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x50C9 DUP2 PUSH2 0x5065 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x50D9 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x50F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP DUP11 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x510A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x512B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5156 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5161 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP2 POP PUSH2 0x516F PUSH1 0x20 DUP5 ADD PUSH2 0x5054 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE21 DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x51DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x521A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x523A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x5249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x52E3 PUSH1 0x40 DUP3 ADD PUSH2 0x52C9 DUP5 PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x52F1 PUSH1 0x20 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x5318 PUSH1 0x40 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x533F PUSH1 0x60 DUP5 ADD PUSH2 0x5054 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x5353 PUSH1 0x80 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x537A PUSH1 0xA0 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x53A1 PUSH1 0xC0 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH2 0x100 PUSH2 0x53C5 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x53D1 PUSH1 0xE0 DUP7 ADD PUSH2 0x4E5D JUMP JUMPDEST SWAP2 POP PUSH2 0x120 PUSH2 0x53F7 DUP2 DUP7 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x5403 DUP3 DUP8 ADD DUP8 PUSH2 0x51E5 JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0x1E0 PUSH2 0x140 DUP2 DUP2 DUP9 ADD MSTORE PUSH2 0x5421 PUSH2 0x220 DUP9 ADD DUP7 DUP7 PUSH2 0x5250 JUMP JUMPDEST SWAP5 POP PUSH2 0x542F DUP4 DUP10 ADD DUP10 PUSH2 0x51E5 JUMP JUMPDEST SWAP5 POP SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 PUSH2 0x160 DUP2 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x546B DUP8 DUP8 DUP8 PUSH2 0x5250 JUMP JUMPDEST SWAP7 POP PUSH2 0x5479 DUP4 DUP12 ADD DUP12 PUSH2 0x51E5 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH2 0x180 SWAP3 POP DUP2 DUP10 DUP9 SUB ADD DUP4 DUP11 ADD MSTORE PUSH2 0x5496 DUP8 DUP8 DUP8 PUSH2 0x5250 JUMP JUMPDEST SWAP7 POP PUSH2 0x54A4 DUP2 DUP12 ADD DUP12 PUSH2 0x51E5 JUMP JUMPDEST SWAP7 POP SWAP5 POP POP PUSH2 0x1A0 DUP2 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x54C0 DUP8 DUP8 DUP8 PUSH2 0x5250 JUMP JUMPDEST SWAP7 POP PUSH2 0x54CE DUP4 DUP12 ADD DUP12 PUSH2 0x51E5 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH2 0x1C0 SWAP3 POP DUP2 DUP10 DUP9 SUB ADD DUP4 DUP11 ADD MSTORE PUSH2 0x54EB DUP8 DUP8 DUP8 PUSH2 0x5250 JUMP JUMPDEST SWAP7 POP PUSH2 0x54F9 DUP2 DUP12 ADD DUP12 PUSH2 0x51E5 JUMP JUMPDEST SWAP7 POP SWAP5 POP POP DUP1 DUP9 DUP8 SUB ADD DUP4 DUP10 ADD MSTORE PUSH2 0x5512 DUP7 DUP7 DUP7 PUSH2 0x5250 JUMP JUMPDEST SWAP6 POP PUSH2 0x5520 DUP3 DUP11 ADD DUP11 PUSH2 0x51E5 JUMP JUMPDEST SWAP6 POP SWAP4 POP DUP1 DUP9 DUP8 SUB ADD PUSH2 0x200 DUP10 ADD MSTORE POP POP POP PUSH2 0x553D DUP4 DUP4 DUP4 PUSH2 0x5250 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x55A1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x55FB JUMPI PUSH2 0x55FB PUSH2 0x55A8 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x55FB JUMPI PUSH2 0x55FB PUSH2 0x55A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x566B JUMPI PUSH2 0x566B PUSH2 0x55A8 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5685 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x56A8 JUMPI PUSH2 0x56A8 PUSH2 0x55A8 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x56C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F0D DUP4 DUP4 PUSH2 0x5673 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4E68 DUP2 PUSH2 0x4ED2 JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x4E68 DUP2 PUSH2 0x5065 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4E68 DUP2 PUSH2 0x4E38 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x571A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5722 PUSH2 0x55D7 JUMP JUMPDEST PUSH2 0x572C DUP5 DUP5 PUSH2 0x5673 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x573A PUSH1 0x20 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x574B PUSH1 0x40 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x575C PUSH1 0x60 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x576D PUSH1 0x80 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x577E PUSH1 0xA0 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x578F PUSH1 0xC0 DUP5 ADD PUSH2 0x56DC JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x57A0 PUSH1 0xE0 DUP5 ADD PUSH2 0x56F1 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x57B3 DUP2 DUP6 ADD PUSH2 0x56FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x57C5 DUP5 DUP3 ADD PUSH2 0x56FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x57D7 DUP5 DUP3 ADD PUSH2 0x56FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x57E9 DUP5 DUP3 ADD PUSH2 0x56FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x57FB DUP5 DUP3 ADD PUSH2 0x56D1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x580D DUP5 DUP3 ADD PUSH2 0x56D1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x581F DUP5 DUP3 ADD PUSH2 0x56D1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5845 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x582D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4CF JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x586E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x582A JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4F0D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4F0D DUP2 PUSH2 0x4ED2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP4 CALLDATALOAD PUSH2 0x5917 DUP2 PUSH2 0x4E38 JUMP JUMPDEST DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x592C DUP2 PUSH2 0x4E38 JUMP JUMPDEST AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x593F PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x51E5 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x5955 PUSH2 0x100 DUP6 ADD DUP3 DUP5 PUSH2 0x5250 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5965 PUSH1 0x60 DUP6 ADD DUP6 PUSH2 0x51E5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x599B DUP5 DUP4 DUP6 PUSH2 0x5250 JUMP JUMPDEST SWAP4 POP PUSH2 0x59A9 PUSH1 0x80 DUP9 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x59D4 PUSH1 0xA0 DUP9 ADD DUP9 PUSH2 0x51E5 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE POP PUSH2 0x553D DUP4 DUP4 DUP4 PUSH2 0x5250 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5A01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5A19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5A2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x5A3F JUMPI PUSH2 0x5A3F PUSH2 0x55A8 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x5A50 DUP5 DUP4 ADD PUSH2 0x5624 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x5A6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x5A94 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x5A84 DUP4 PUSH2 0x4E38 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x5A6F JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP4 CALLDATALOAD PUSH2 0x5ACE DUP2 PUSH2 0x4E38 JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x5AE0 PUSH1 0x20 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x5B07 PUSH1 0x40 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x5B2F PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x51E5 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x5B45 PUSH2 0x120 DUP6 ADD DUP3 DUP5 PUSH2 0x5250 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5B55 PUSH1 0x80 DUP6 ADD DUP6 PUSH2 0x51E5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x5B8B DUP5 DUP4 DUP6 PUSH2 0x5250 JUMP JUMPDEST SWAP4 POP PUSH2 0x5B99 PUSH1 0xA0 DUP9 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xE0 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x5BC4 PUSH1 0xC0 DUP9 ADD DUP9 PUSH2 0x51E5 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH2 0x100 DUP8 ADD MSTORE POP PUSH2 0x553D DUP4 DUP4 DUP4 PUSH2 0x5250 JUMP JUMPDEST PUSH1 0xFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x5C4C PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x5856 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP10 AND DUP4 MSTORE DUP1 DUP9 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP8 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x5A94 PUSH1 0xA0 DUP4 ADD DUP5 DUP7 PUSH2 0x5250 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5CB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4F0D DUP2 PUSH2 0x4E38 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5CE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP5 ADD SWAP1 PUSH1 0xA0 DUP3 DUP8 SUB SLT ISZERO PUSH2 0x5CFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D05 PUSH2 0x5601 JUMP JUMPDEST DUP3 MLOAD PUSH2 0x5D10 DUP2 PUSH2 0x5065 JUMP JUMPDEST DUP2 MSTORE DUP3 DUP5 ADD MLOAD PUSH2 0x5D1F DUP2 PUSH2 0x5065 JUMP JUMPDEST DUP2 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5D31 DUP2 PUSH2 0x5065 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x5D44 DUP2 PUSH2 0x4E38 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x5D5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP7 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x5D70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x5D82 JUMPI PUSH2 0x5D82 PUSH2 0x55A8 JUMP JUMPDEST PUSH2 0x5DB2 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x5624 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP8 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x5DC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5DD7 DUP2 DUP7 DUP6 ADD DUP8 DUP8 ADD PUSH2 0x582A JUMP JUMPDEST POP PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5DFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4F0D DUP2 PUSH2 0x4F2D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x180 DUP14 DUP16 SUB SLT ISZERO PUSH2 0x5E29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP13 MLOAD SWAP12 POP PUSH1 0x20 DUP14 ADD MLOAD SWAP11 POP PUSH1 0x40 DUP14 ADD MLOAD SWAP10 POP PUSH1 0x60 DUP14 ADD MLOAD SWAP9 POP PUSH1 0x80 DUP14 ADD MLOAD SWAP8 POP PUSH1 0xA0 DUP14 ADD MLOAD SWAP7 POP PUSH1 0xC0 DUP14 ADD MLOAD SWAP6 POP PUSH1 0xE0 DUP14 ADD MLOAD SWAP5 POP PUSH2 0x100 DUP14 ADD MLOAD SWAP4 POP PUSH2 0x120 DUP14 ADD MLOAD SWAP3 POP PUSH2 0x140 DUP14 ADD MLOAD SWAP2 POP PUSH2 0x5E83 PUSH2 0x160 DUP15 ADD PUSH2 0x56DC JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD 0xDA 0xC2 0xE7 0xBA SHR SUB RETURN PUSH11 0xF015A9940A8249669C16FE EQ 0xA5 PUSH13 0xC365E85FA9F7F0B8A764736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"1063:18368:113:-:0;;;928:1:87;886:43;;1063:18368:113;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@CONFIGURATOR_REVISION_26674":{"entryPoint":null,"id":26674,"parameterSlots":0,"returnSlots":0},"@_checkNoBorrowers_28095":{"entryPoint":18806,"id":28095,"parameterSlots":1,"returnSlots":0},"@_checkNoSuppliers_28070":{"entryPoint":17758,"id":28070,"parameterSlots":1,"returnSlots":0},"@_onlyAssetListingOrPoolAdmins_28199":{"entryPoint":14371,"id":28199,"parameterSlots":0,"returnSlots":0},"@_onlyEmergencyAdmin_28141":{"entryPoint":17288,"id":28141,"parameterSlots":0,"returnSlots":0},"@_onlyPoolAdmin_28118":{"entryPoint":15641,"id":28118,"parameterSlots":0,"returnSlots":0},"@_onlyPoolOrEmergencyAdmin_28170":{"entryPoint":16274,"id":28170,"parameterSlots":0,"returnSlots":0},"@_onlyRiskOrPoolAdmins_28228":{"entryPoint":14926,"id":28228,"parameterSlots":0,"returnSlots":0},"@configureReserveAsCollateral_26976":{"entryPoint":6598,"id":26976,"parameterSlots":4,"returnSlots":0},"@dropReserve_26764":{"entryPoint":5375,"id":26764,"parameterSlots":1,"returnSlots":0},"@getBorrowCap_13564":{"entryPoint":null,"id":13564,"parameterSlots":1,"returnSlots":1},"@getBorrowingEnabled_13410":{"entryPoint":null,"id":13410,"parameterSlots":1,"returnSlots":1},"@getDebtCeiling_13668":{"entryPoint":null,"id":13668,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_13824":{"entryPoint":null,"id":13824,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_13720":{"entryPoint":null,"id":13720,"parameterSlots":1,"returnSlots":1},"@getLiquidationThreshold_13006":{"entryPoint":null,"id":13006,"parameterSlots":1,"returnSlots":1},"@getLtv_12954":{"entryPoint":null,"id":12954,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_13512":{"entryPoint":null,"id":13512,"parameterSlots":1,"returnSlots":1},"@getRevision_26684":{"entryPoint":null,"id":26684,"parameterSlots":0,"returnSlots":1},"@getSiloedBorrowing_13360":{"entryPoint":null,"id":13360,"parameterSlots":1,"returnSlots":1},"@getStableRateBorrowingEnabled_13460":{"entryPoint":null,"id":13460,"parameterSlots":1,"returnSlots":1},"@getSupplyCap_13616":{"entryPoint":null,"id":13616,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_13772":{"entryPoint":null,"id":13772,"parameterSlots":1,"returnSlots":1},"@initReserves_26744":{"entryPoint":1028,"id":26744,"parameterSlots":2,"returnSlots":0},"@initialize_26705":{"entryPoint":12316,"id":26705,"parameterSlots":1,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@percentMul_23713":{"entryPoint":17691,"id":23713,"parameterSlots":2,"returnSlots":1},"@setActive_13141":{"entryPoint":19445,"id":13141,"parameterSlots":2,"returnSlots":0},"@setAssetEModeCategory_27789":{"entryPoint":13253,"id":27789,"parameterSlots":2,"returnSlots":0},"@setBorrowCap_13545":{"entryPoint":19514,"id":13545,"parameterSlots":2,"returnSlots":0},"@setBorrowCap_27458":{"entryPoint":12853,"id":27458,"parameterSlots":2,"returnSlots":0},"@setBorrowableInIsolation_13291":{"entryPoint":16205,"id":13291,"parameterSlots":2,"returnSlots":0},"@setBorrowableInIsolation_27194":{"entryPoint":3673,"id":27194,"parameterSlots":2,"returnSlots":0},"@setBorrowingEnabled_13391":{"entryPoint":17219,"id":13391,"parameterSlots":2,"returnSlots":0},"@setDebtCeiling_13649":{"entryPoint":19281,"id":13649,"parameterSlots":2,"returnSlots":0},"@setDebtCeiling_27357":{"entryPoint":9596,"id":27357,"parameterSlots":2,"returnSlots":0},"@setEModeCategory_13805":{"entryPoint":19678,"id":13805,"parameterSlots":2,"returnSlots":0},"@setEModeCategory_27713":{"entryPoint":10664,"id":27713,"parameterSlots":7,"returnSlots":0},"@setFlashLoanEnabled_13855":{"entryPoint":19838,"id":13855,"parameterSlots":2,"returnSlots":0},"@setFrozen_13191":{"entryPoint":18737,"id":13191,"parameterSlots":2,"returnSlots":0},"@setLiquidationBonus_13039":{"entryPoint":18507,"id":13039,"parameterSlots":2,"returnSlots":0},"@setLiquidationProtocolFee_13701":{"entryPoint":16044,"id":13701,"parameterSlots":2,"returnSlots":0},"@setLiquidationProtocolFee_27561":{"entryPoint":2704,"id":27561,"parameterSlots":2,"returnSlots":0},"@setLiquidationThreshold_12987":{"entryPoint":18346,"id":12987,"parameterSlots":2,"returnSlots":0},"@setLtv_12938":{"entryPoint":18191,"id":12938,"parameterSlots":2,"returnSlots":0},"@setPaused_13241":{"entryPoint":16825,"id":13241,"parameterSlots":2,"returnSlots":0},"@setPoolPause_27925":{"entryPoint":6260,"id":27925,"parameterSlots":1,"returnSlots":0},"@setReserveActive_27114":{"entryPoint":10153,"id":27114,"parameterSlots":2,"returnSlots":0},"@setReserveBorrowing_26871":{"entryPoint":5584,"id":26871,"parameterSlots":2,"returnSlots":0},"@setReserveFactor_13493":{"entryPoint":16894,"id":13493,"parameterSlots":2,"returnSlots":0},"@setReserveFactor_27290":{"entryPoint":4464,"id":27290,"parameterSlots":2,"returnSlots":0},"@setReserveFlashLoaning_27067":{"entryPoint":13988,"id":27067,"parameterSlots":2,"returnSlots":0},"@setReserveFreeze_27154":{"entryPoint":8670,"id":27154,"parameterSlots":2,"returnSlots":0},"@setReserveInterestRateStrategyAddress_27876":{"entryPoint":1647,"id":27876,"parameterSlots":2,"returnSlots":0},"@setReservePause_27234":{"entryPoint":4068,"id":27234,"parameterSlots":2,"returnSlots":0},"@setReserveStableRateBorrowing_27027":{"entryPoint":8155,"id":27027,"parameterSlots":2,"returnSlots":0},"@setSiloedBorrowing_13341":{"entryPoint":19212,"id":13341,"parameterSlots":2,"returnSlots":0},"@setSiloedBorrowing_27411":{"entryPoint":9053,"id":27411,"parameterSlots":2,"returnSlots":0},"@setStableRateBorrowingEnabled_13441":{"entryPoint":18668,"id":13441,"parameterSlots":2,"returnSlots":0},"@setSupplyCap_13597":{"entryPoint":17055,"id":13597,"parameterSlots":2,"returnSlots":0},"@setSupplyCap_27505":{"entryPoint":4975,"id":27505,"parameterSlots":2,"returnSlots":0},"@setUnbackedMintCap_13753":{"entryPoint":15477,"id":13753,"parameterSlots":2,"returnSlots":0},"@setUnbackedMintCap_27836":{"entryPoint":1237,"id":27836,"parameterSlots":2,"returnSlots":0},"@updateAToken_26782":{"entryPoint":10550,"id":26782,"parameterSlots":1,"returnSlots":0},"@updateBridgeProtocolFee_27961":{"entryPoint":3215,"id":27961,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiumToProtocol_28039":{"entryPoint":2036,"id":28039,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiumTotal_28000":{"entryPoint":7504,"id":28000,"parameterSlots":1,"returnSlots":0},"@updateStableDebtToken_26800":{"entryPoint":6095,"id":26800,"parameterSlots":1,"returnSlots":0},"@updateVariableDebtToken_26818":{"entryPoint":9482,"id":26818,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":20061,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":22268,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":22131,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":20329,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":23713,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":20121,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_bool":{"entryPoint":20283,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":20077,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint256":{"entryPoint":20446,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint8":{"entryPoint":20803,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory":{"entryPoint":23022,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_InitReserveInput_$23846_calldata_ptr_$dyn_calldata_ptr":{"entryPoint":19907,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool":{"entryPoint":20417,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":24041,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_EModeCategory_$23927_memory_ptr_fromMemory":{"entryPoint":23742,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory":{"entryPoint":22197,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory":{"entryPoint":22279,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_UpdateATokenInput_$23861_calldata_ptr":{"entryPoint":20505,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr":{"entryPoint":20358,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128":{"entryPoint":20208,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128_fromMemory":{"entryPoint":22707,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":20244,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":22736,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":24070,"id":null,"parameterSlots":2,"returnSlots":12},"abi_decode_tuple_t_uint8t_uint16t_uint16t_uint16t_addresst_string_calldata_ptr":{"entryPoint":20597,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_uint128_fromMemory":{"entryPoint":22225,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":22257,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":22236,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":20564,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":22614,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":21072,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_InitReserveInput_$23846_calldata_ptr__to_t_address_t_struct$_InitReserveInput_$23846_memory_ptr__fromStack_library_reversed":{"entryPoint":21145,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_UpdateATokenInput_$23861_calldata_ptr__to_t_address_t_struct$_UpdateATokenInput_$23861_memory_ptr__fromStack_library_reversed":{"entryPoint":23200,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr__to_t_address_t_struct$_UpdateDebtTokenInput_$23874_memory_ptr__fromStack_library_reversed":{"entryPoint":22761,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":22688,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_address_t_string_calldata_ptr__to_t_uint256_t_uint256_t_uint256_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23637,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8_t_struct$_EModeCategory_$23927_memory_ptr__to_t_uint8_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed":{"entryPoint":23519,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint8_t_uint8__to_t_uint8_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"access_calldata_tail_t_struct$_InitReserveInput_$23846_calldata_ptr":{"entryPoint":20903,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":22052,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3396":{"entryPoint":21975,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_3398":{"entryPoint":22017,"id":null,"parameterSlots":0,"returnSlots":1},"calldata_access_string_calldata":{"entryPoint":20965,"id":null,"parameterSlots":2,"returnSlots":2},"copy_memory_to_memory":{"entryPoint":22570,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":21832,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":20856,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":21928,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":20024,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":20269,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint128":{"entryPoint":20178,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint16":{"entryPoint":20581,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:29837:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"156:510:124","statements":[{"body":{"nodeType":"YulBlock","src":"202:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"211:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"214:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"204:6:124"},"nodeType":"YulFunctionCall","src":"204:12:124"},"nodeType":"YulExpressionStatement","src":"204:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"177:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"186:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"173:3:124"},"nodeType":"YulFunctionCall","src":"173:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"198:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"169:3:124"},"nodeType":"YulFunctionCall","src":"169:32:124"},"nodeType":"YulIf","src":"166:52:124"},{"nodeType":"YulVariableDeclaration","src":"227:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"254:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:124"},"nodeType":"YulFunctionCall","src":"241:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"231:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"273:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"283:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"277:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"328:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"337:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"340:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"330:6:124"},"nodeType":"YulFunctionCall","src":"330:12:124"},"nodeType":"YulExpressionStatement","src":"330:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"316:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"324:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"313:2:124"},"nodeType":"YulFunctionCall","src":"313:14:124"},"nodeType":"YulIf","src":"310:34:124"},{"nodeType":"YulVariableDeclaration","src":"353:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"367:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"378:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"363:3:124"},"nodeType":"YulFunctionCall","src":"363:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"357:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"433:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"442:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"445:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"435:6:124"},"nodeType":"YulFunctionCall","src":"435:12:124"},"nodeType":"YulExpressionStatement","src":"435:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"412:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"416:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"408:3:124"},"nodeType":"YulFunctionCall","src":"408:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"423:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"404:3:124"},"nodeType":"YulFunctionCall","src":"404:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"397:6:124"},"nodeType":"YulFunctionCall","src":"397:35:124"},"nodeType":"YulIf","src":"394:55:124"},{"nodeType":"YulVariableDeclaration","src":"458:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"485:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"472:12:124"},"nodeType":"YulFunctionCall","src":"472:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"462:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"515:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"524:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"527:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"517:6:124"},"nodeType":"YulFunctionCall","src":"517:12:124"},"nodeType":"YulExpressionStatement","src":"517:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"503:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"511:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"500:2:124"},"nodeType":"YulFunctionCall","src":"500:14:124"},"nodeType":"YulIf","src":"497:34:124"},{"body":{"nodeType":"YulBlock","src":"589:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"598:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"591:6:124"},"nodeType":"YulFunctionCall","src":"591:12:124"},"nodeType":"YulExpressionStatement","src":"591:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"554:2:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"562:1:124","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"565:6:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"558:3:124"},"nodeType":"YulFunctionCall","src":"558:14:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"550:3:124"},"nodeType":"YulFunctionCall","src":"550:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"575:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"546:3:124"},"nodeType":"YulFunctionCall","src":"546:32:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"580:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"543:2:124"},"nodeType":"YulFunctionCall","src":"543:45:124"},"nodeType":"YulIf","src":"540:65:124"},{"nodeType":"YulAssignment","src":"614:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"628:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"632:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"624:3:124"},"nodeType":"YulFunctionCall","src":"624:11:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"614:6:124"}]},{"nodeType":"YulAssignment","src":"644:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"654:6:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"644:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_InitReserveInput_$23846_calldata_ptr_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"114:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"125:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"137:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"145:6:124","type":""}],"src":"14:652:124"},{"body":{"nodeType":"YulBlock","src":"716:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"803:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"812:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"815:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"805:6:124"},"nodeType":"YulFunctionCall","src":"805:12:124"},"nodeType":"YulExpressionStatement","src":"805:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"739:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"750:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"757:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"746:3:124"},"nodeType":"YulFunctionCall","src":"746:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"736:2:124"},"nodeType":"YulFunctionCall","src":"736:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"729:6:124"},"nodeType":"YulFunctionCall","src":"729:73:124"},"nodeType":"YulIf","src":"726:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"705:5:124","type":""}],"src":"671:154:124"},{"body":{"nodeType":"YulBlock","src":"879:85:124","statements":[{"nodeType":"YulAssignment","src":"889:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"911:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"898:12:124"},"nodeType":"YulFunctionCall","src":"898:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"889:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"952:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"927:24:124"},"nodeType":"YulFunctionCall","src":"927:31:124"},"nodeType":"YulExpressionStatement","src":"927:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"858:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"869:5:124","type":""}],"src":"830:134:124"},{"body":{"nodeType":"YulBlock","src":"1056:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1102:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1111:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1114:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1104:6:124"},"nodeType":"YulFunctionCall","src":"1104:12:124"},"nodeType":"YulExpressionStatement","src":"1104:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1077:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1086:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1073:3:124"},"nodeType":"YulFunctionCall","src":"1073:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1098:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1069:3:124"},"nodeType":"YulFunctionCall","src":"1069:32:124"},"nodeType":"YulIf","src":"1066:52:124"},{"nodeType":"YulVariableDeclaration","src":"1127:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1153:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1140:12:124"},"nodeType":"YulFunctionCall","src":"1140:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1131:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1197:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1172:24:124"},"nodeType":"YulFunctionCall","src":"1172:31:124"},"nodeType":"YulExpressionStatement","src":"1172:31:124"},{"nodeType":"YulAssignment","src":"1212:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1222:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1212:6:124"}]},{"nodeType":"YulAssignment","src":"1236:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1263:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1274:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1259:3:124"},"nodeType":"YulFunctionCall","src":"1259:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1246:12:124"},"nodeType":"YulFunctionCall","src":"1246:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1236:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1014:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1025:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1037:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1045:6:124","type":""}],"src":"969:315:124"},{"body":{"nodeType":"YulBlock","src":"1376:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"1422:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1431:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1434:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1424:6:124"},"nodeType":"YulFunctionCall","src":"1424:12:124"},"nodeType":"YulExpressionStatement","src":"1424:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1397:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1406:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1393:3:124"},"nodeType":"YulFunctionCall","src":"1393:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1418:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1389:3:124"},"nodeType":"YulFunctionCall","src":"1389:32:124"},"nodeType":"YulIf","src":"1386:52:124"},{"nodeType":"YulVariableDeclaration","src":"1447:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1473:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1460:12:124"},"nodeType":"YulFunctionCall","src":"1460:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1451:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1517:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1492:24:124"},"nodeType":"YulFunctionCall","src":"1492:31:124"},"nodeType":"YulExpressionStatement","src":"1492:31:124"},{"nodeType":"YulAssignment","src":"1532:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1542:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1532:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"1556:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1599:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1584:3:124"},"nodeType":"YulFunctionCall","src":"1584:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1571:12:124"},"nodeType":"YulFunctionCall","src":"1571:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1560:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1637:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1612:24:124"},"nodeType":"YulFunctionCall","src":"1612:33:124"},"nodeType":"YulExpressionStatement","src":"1612:33:124"},{"nodeType":"YulAssignment","src":"1654:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1664:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1654:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1334:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1345:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1357:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1365:6:124","type":""}],"src":"1289:388:124"},{"body":{"nodeType":"YulBlock","src":"1727:101:124","statements":[{"body":{"nodeType":"YulBlock","src":"1806:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1815:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1818:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1808:6:124"},"nodeType":"YulFunctionCall","src":"1808:12:124"},"nodeType":"YulExpressionStatement","src":"1808:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1750:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1761:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1768:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1757:3:124"},"nodeType":"YulFunctionCall","src":"1757:46:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1747:2:124"},"nodeType":"YulFunctionCall","src":"1747:57:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1740:6:124"},"nodeType":"YulFunctionCall","src":"1740:65:124"},"nodeType":"YulIf","src":"1737:85:124"}]},"name":"validator_revert_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1716:5:124","type":""}],"src":"1682:146:124"},{"body":{"nodeType":"YulBlock","src":"1903:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"1949:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1958:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1961:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1951:6:124"},"nodeType":"YulFunctionCall","src":"1951:12:124"},"nodeType":"YulExpressionStatement","src":"1951:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1924:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1933:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1920:3:124"},"nodeType":"YulFunctionCall","src":"1920:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1945:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1916:3:124"},"nodeType":"YulFunctionCall","src":"1916:32:124"},"nodeType":"YulIf","src":"1913:52:124"},{"nodeType":"YulVariableDeclaration","src":"1974:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2000:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1987:12:124"},"nodeType":"YulFunctionCall","src":"1987:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1978:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2044:5:124"}],"functionName":{"name":"validator_revert_uint128","nodeType":"YulIdentifier","src":"2019:24:124"},"nodeType":"YulFunctionCall","src":"2019:31:124"},"nodeType":"YulExpressionStatement","src":"2019:31:124"},{"nodeType":"YulAssignment","src":"2059:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2069:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2059:6:124"}]}]},"name":"abi_decode_tuple_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1869:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1880:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1892:6:124","type":""}],"src":"1833:247:124"},{"body":{"nodeType":"YulBlock","src":"2155:110:124","statements":[{"body":{"nodeType":"YulBlock","src":"2201:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2210:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2213:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2203:6:124"},"nodeType":"YulFunctionCall","src":"2203:12:124"},"nodeType":"YulExpressionStatement","src":"2203:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2176:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2185:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2172:3:124"},"nodeType":"YulFunctionCall","src":"2172:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2197:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2168:3:124"},"nodeType":"YulFunctionCall","src":"2168:32:124"},"nodeType":"YulIf","src":"2165:52:124"},{"nodeType":"YulAssignment","src":"2226:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2249:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2236:12:124"},"nodeType":"YulFunctionCall","src":"2236:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2226:6:124"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2121:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2132:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2144:6:124","type":""}],"src":"2085:180:124"},{"body":{"nodeType":"YulBlock","src":"2312:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"2366:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2375:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2378:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2368:6:124"},"nodeType":"YulFunctionCall","src":"2368:12:124"},"nodeType":"YulExpressionStatement","src":"2368:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2335:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2356:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2349:6:124"},"nodeType":"YulFunctionCall","src":"2349:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2342:6:124"},"nodeType":"YulFunctionCall","src":"2342:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2332:2:124"},"nodeType":"YulFunctionCall","src":"2332:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2325:6:124"},"nodeType":"YulFunctionCall","src":"2325:40:124"},"nodeType":"YulIf","src":"2322:60:124"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2301:5:124","type":""}],"src":"2270:118:124"},{"body":{"nodeType":"YulBlock","src":"2477:298:124","statements":[{"body":{"nodeType":"YulBlock","src":"2523:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2532:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2535:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2525:6:124"},"nodeType":"YulFunctionCall","src":"2525:12:124"},"nodeType":"YulExpressionStatement","src":"2525:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2498:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2507:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2494:3:124"},"nodeType":"YulFunctionCall","src":"2494:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2519:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2490:3:124"},"nodeType":"YulFunctionCall","src":"2490:32:124"},"nodeType":"YulIf","src":"2487:52:124"},{"nodeType":"YulVariableDeclaration","src":"2548:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2561:12:124"},"nodeType":"YulFunctionCall","src":"2561:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2552:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2618:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2593:24:124"},"nodeType":"YulFunctionCall","src":"2593:31:124"},"nodeType":"YulExpressionStatement","src":"2593:31:124"},{"nodeType":"YulAssignment","src":"2633:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2643:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2633:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2657:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2689:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2700:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2685:3:124"},"nodeType":"YulFunctionCall","src":"2685:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2672:12:124"},"nodeType":"YulFunctionCall","src":"2672:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2661:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2735:7:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"2713:21:124"},"nodeType":"YulFunctionCall","src":"2713:30:124"},"nodeType":"YulExpressionStatement","src":"2713:30:124"},{"nodeType":"YulAssignment","src":"2752:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2762:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2752:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2435:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2446:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2458:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2466:6:124","type":""}],"src":"2393:382:124"},{"body":{"nodeType":"YulBlock","src":"2850:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"2896:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2905:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2908:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2898:6:124"},"nodeType":"YulFunctionCall","src":"2898:12:124"},"nodeType":"YulExpressionStatement","src":"2898:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2871:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2880:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2867:3:124"},"nodeType":"YulFunctionCall","src":"2867:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2892:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2863:3:124"},"nodeType":"YulFunctionCall","src":"2863:32:124"},"nodeType":"YulIf","src":"2860:52:124"},{"nodeType":"YulVariableDeclaration","src":"2921:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2947:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2934:12:124"},"nodeType":"YulFunctionCall","src":"2934:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2925:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2991:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2966:24:124"},"nodeType":"YulFunctionCall","src":"2966:31:124"},"nodeType":"YulExpressionStatement","src":"2966:31:124"},{"nodeType":"YulAssignment","src":"3006:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3016:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3006:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2816:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2827:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2839:6:124","type":""}],"src":"2780:247:124"},{"body":{"nodeType":"YulBlock","src":"3143:290:124","statements":[{"body":{"nodeType":"YulBlock","src":"3189:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3198:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3201:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3191:6:124"},"nodeType":"YulFunctionCall","src":"3191:12:124"},"nodeType":"YulExpressionStatement","src":"3191:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3164:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3173:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3160:3:124"},"nodeType":"YulFunctionCall","src":"3160:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3185:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3156:3:124"},"nodeType":"YulFunctionCall","src":"3156:32:124"},"nodeType":"YulIf","src":"3153:52:124"},{"nodeType":"YulVariableDeclaration","src":"3214:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3241:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3228:12:124"},"nodeType":"YulFunctionCall","src":"3228:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3218:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3294:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3303:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3306:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3296:6:124"},"nodeType":"YulFunctionCall","src":"3296:12:124"},"nodeType":"YulExpressionStatement","src":"3296:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3266:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3274:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3263:2:124"},"nodeType":"YulFunctionCall","src":"3263:30:124"},"nodeType":"YulIf","src":"3260:50:124"},{"nodeType":"YulVariableDeclaration","src":"3319:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3333:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"3344:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3329:3:124"},"nodeType":"YulFunctionCall","src":"3329:22:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3323:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3390:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3399:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3402:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3392:6:124"},"nodeType":"YulFunctionCall","src":"3392:12:124"},"nodeType":"YulExpressionStatement","src":"3392:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3371:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3380:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3367:3:124"},"nodeType":"YulFunctionCall","src":"3367:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"3385:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3363:3:124"},"nodeType":"YulFunctionCall","src":"3363:26:124"},"nodeType":"YulIf","src":"3360:46:124"},{"nodeType":"YulAssignment","src":"3415:12:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"3425:2:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3415:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3109:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3120:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3132:6:124","type":""}],"src":"3032:401:124"},{"body":{"nodeType":"YulBlock","src":"3505:174:124","statements":[{"body":{"nodeType":"YulBlock","src":"3551:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3560:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3563:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3553:6:124"},"nodeType":"YulFunctionCall","src":"3553:12:124"},"nodeType":"YulExpressionStatement","src":"3553:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3526:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3535:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3522:3:124"},"nodeType":"YulFunctionCall","src":"3522:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3547:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3518:3:124"},"nodeType":"YulFunctionCall","src":"3518:32:124"},"nodeType":"YulIf","src":"3515:52:124"},{"nodeType":"YulVariableDeclaration","src":"3576:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3602:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3589:12:124"},"nodeType":"YulFunctionCall","src":"3589:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3580:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3643:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"3621:21:124"},"nodeType":"YulFunctionCall","src":"3621:28:124"},"nodeType":"YulExpressionStatement","src":"3621:28:124"},{"nodeType":"YulAssignment","src":"3658:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3668:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3658:6:124"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3471:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3482:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3494:6:124","type":""}],"src":"3438:241:124"},{"body":{"nodeType":"YulBlock","src":"3785:76:124","statements":[{"nodeType":"YulAssignment","src":"3795:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3807:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3818:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3803:3:124"},"nodeType":"YulFunctionCall","src":"3803:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3795:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3848:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3830:6:124"},"nodeType":"YulFunctionCall","src":"3830:25:124"},"nodeType":"YulExpressionStatement","src":"3830:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3754:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3765:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3776:4:124","type":""}],"src":"3684:177:124"},{"body":{"nodeType":"YulBlock","src":"3987:331:124","statements":[{"body":{"nodeType":"YulBlock","src":"4034:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4043:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4046:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4036:6:124"},"nodeType":"YulFunctionCall","src":"4036:12:124"},"nodeType":"YulExpressionStatement","src":"4036:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4008:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4017:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4004:3:124"},"nodeType":"YulFunctionCall","src":"4004:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4029:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4000:3:124"},"nodeType":"YulFunctionCall","src":"4000:33:124"},"nodeType":"YulIf","src":"3997:53:124"},{"nodeType":"YulVariableDeclaration","src":"4059:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4085:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4072:12:124"},"nodeType":"YulFunctionCall","src":"4072:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4063:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4129:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4104:24:124"},"nodeType":"YulFunctionCall","src":"4104:31:124"},"nodeType":"YulExpressionStatement","src":"4104:31:124"},{"nodeType":"YulAssignment","src":"4144:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4154:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4144:6:124"}]},{"nodeType":"YulAssignment","src":"4168:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4195:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4206:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4191:3:124"},"nodeType":"YulFunctionCall","src":"4191:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4178:12:124"},"nodeType":"YulFunctionCall","src":"4178:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4168:6:124"}]},{"nodeType":"YulAssignment","src":"4219:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4246:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4257:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4242:3:124"},"nodeType":"YulFunctionCall","src":"4242:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4229:12:124"},"nodeType":"YulFunctionCall","src":"4229:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4219:6:124"}]},{"nodeType":"YulAssignment","src":"4270:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4297:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4308:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4293:3:124"},"nodeType":"YulFunctionCall","src":"4293:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4280:12:124"},"nodeType":"YulFunctionCall","src":"4280:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4270:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3929:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3940:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3952:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3960:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3968:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3976:6:124","type":""}],"src":"3866:452:124"},{"body":{"nodeType":"YulBlock","src":"4431:290:124","statements":[{"body":{"nodeType":"YulBlock","src":"4477:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4486:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4489:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4479:6:124"},"nodeType":"YulFunctionCall","src":"4479:12:124"},"nodeType":"YulExpressionStatement","src":"4479:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4452:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4461:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4448:3:124"},"nodeType":"YulFunctionCall","src":"4448:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4473:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4444:3:124"},"nodeType":"YulFunctionCall","src":"4444:32:124"},"nodeType":"YulIf","src":"4441:52:124"},{"nodeType":"YulVariableDeclaration","src":"4502:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4529:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4516:12:124"},"nodeType":"YulFunctionCall","src":"4516:23:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4506:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4582:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4591:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4594:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4584:6:124"},"nodeType":"YulFunctionCall","src":"4584:12:124"},"nodeType":"YulExpressionStatement","src":"4584:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4554:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4562:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4551:2:124"},"nodeType":"YulFunctionCall","src":"4551:30:124"},"nodeType":"YulIf","src":"4548:50:124"},{"nodeType":"YulVariableDeclaration","src":"4607:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4621:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"4632:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4617:3:124"},"nodeType":"YulFunctionCall","src":"4617:22:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4611:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"4678:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4687:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4690:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4680:6:124"},"nodeType":"YulFunctionCall","src":"4680:12:124"},"nodeType":"YulExpressionStatement","src":"4680:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4659:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"4668:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4655:3:124"},"nodeType":"YulFunctionCall","src":"4655:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"4673:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4651:3:124"},"nodeType":"YulFunctionCall","src":"4651:26:124"},"nodeType":"YulIf","src":"4648:46:124"},{"nodeType":"YulAssignment","src":"4703:12:124","value":{"name":"_1","nodeType":"YulIdentifier","src":"4713:2:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4703:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_UpdateATokenInput_$23861_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4397:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4408:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4420:6:124","type":""}],"src":"4323:398:124"},{"body":{"nodeType":"YulBlock","src":"4773:109:124","statements":[{"nodeType":"YulAssignment","src":"4783:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4805:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4792:12:124"},"nodeType":"YulFunctionCall","src":"4792:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4783:5:124"}]},{"body":{"nodeType":"YulBlock","src":"4860:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4869:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4872:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4862:6:124"},"nodeType":"YulFunctionCall","src":"4862:12:124"},"nodeType":"YulExpressionStatement","src":"4862:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4834:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4845:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4852:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4841:3:124"},"nodeType":"YulFunctionCall","src":"4841:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4831:2:124"},"nodeType":"YulFunctionCall","src":"4831:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4824:6:124"},"nodeType":"YulFunctionCall","src":"4824:35:124"},"nodeType":"YulIf","src":"4821:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4752:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4763:5:124","type":""}],"src":"4726:156:124"},{"body":{"nodeType":"YulBlock","src":"4931:73:124","statements":[{"body":{"nodeType":"YulBlock","src":"4982:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4991:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4994:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4984:6:124"},"nodeType":"YulFunctionCall","src":"4984:12:124"},"nodeType":"YulExpressionStatement","src":"4984:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4954:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4965:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"4972:6:124","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4961:3:124"},"nodeType":"YulFunctionCall","src":"4961:18:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4951:2:124"},"nodeType":"YulFunctionCall","src":"4951:29:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4944:6:124"},"nodeType":"YulFunctionCall","src":"4944:37:124"},"nodeType":"YulIf","src":"4941:57:124"}]},"name":"validator_revert_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4920:5:124","type":""}],"src":"4887:117:124"},{"body":{"nodeType":"YulBlock","src":"5179:1047:124","statements":[{"body":{"nodeType":"YulBlock","src":"5226:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5235:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5238:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5228:6:124"},"nodeType":"YulFunctionCall","src":"5228:12:124"},"nodeType":"YulExpressionStatement","src":"5228:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5200:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5209:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5196:3:124"},"nodeType":"YulFunctionCall","src":"5196:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5221:3:124","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5192:3:124"},"nodeType":"YulFunctionCall","src":"5192:33:124"},"nodeType":"YulIf","src":"5189:53:124"},{"nodeType":"YulAssignment","src":"5251:37:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5278:9:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"5261:16:124"},"nodeType":"YulFunctionCall","src":"5261:27:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5251:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5297:45:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5327:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5338:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5323:3:124"},"nodeType":"YulFunctionCall","src":"5323:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5310:12:124"},"nodeType":"YulFunctionCall","src":"5310:32:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5301:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5375:5:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"5351:23:124"},"nodeType":"YulFunctionCall","src":"5351:30:124"},"nodeType":"YulExpressionStatement","src":"5351:30:124"},{"nodeType":"YulAssignment","src":"5390:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5400:5:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5390:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5414:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5446:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5457:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5442:3:124"},"nodeType":"YulFunctionCall","src":"5442:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5429:12:124"},"nodeType":"YulFunctionCall","src":"5429:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5418:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5494:7:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"5470:23:124"},"nodeType":"YulFunctionCall","src":"5470:32:124"},"nodeType":"YulExpressionStatement","src":"5470:32:124"},{"nodeType":"YulAssignment","src":"5511:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5521:7:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5511:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5537:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5569:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5580:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5565:3:124"},"nodeType":"YulFunctionCall","src":"5565:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5552:12:124"},"nodeType":"YulFunctionCall","src":"5552:32:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"5541:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"5617:7:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"5593:23:124"},"nodeType":"YulFunctionCall","src":"5593:32:124"},"nodeType":"YulExpressionStatement","src":"5593:32:124"},{"nodeType":"YulAssignment","src":"5634:17:124","value":{"name":"value_2","nodeType":"YulIdentifier","src":"5644:7:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5634:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5660:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5692:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5703:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5688:3:124"},"nodeType":"YulFunctionCall","src":"5688:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5675:12:124"},"nodeType":"YulFunctionCall","src":"5675:33:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"5664:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"5742:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5717:24:124"},"nodeType":"YulFunctionCall","src":"5717:33:124"},"nodeType":"YulExpressionStatement","src":"5717:33:124"},{"nodeType":"YulAssignment","src":"5759:17:124","value":{"name":"value_3","nodeType":"YulIdentifier","src":"5769:7:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5759:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5785:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5816:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5827:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5812:3:124"},"nodeType":"YulFunctionCall","src":"5812:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5799:12:124"},"nodeType":"YulFunctionCall","src":"5799:33:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5789:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5841:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"5851:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5845:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"5896:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5905:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5908:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5898:6:124"},"nodeType":"YulFunctionCall","src":"5898:12:124"},"nodeType":"YulExpressionStatement","src":"5898:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5884:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"5892:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5881:2:124"},"nodeType":"YulFunctionCall","src":"5881:14:124"},"nodeType":"YulIf","src":"5878:34:124"},{"nodeType":"YulVariableDeclaration","src":"5921:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5935:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"5946:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5931:3:124"},"nodeType":"YulFunctionCall","src":"5931:22:124"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5925:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6001:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6010:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6013:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6003:6:124"},"nodeType":"YulFunctionCall","src":"6003:12:124"},"nodeType":"YulExpressionStatement","src":"6003:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5980:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"5984:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5976:3:124"},"nodeType":"YulFunctionCall","src":"5976:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5991:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5972:3:124"},"nodeType":"YulFunctionCall","src":"5972:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5965:6:124"},"nodeType":"YulFunctionCall","src":"5965:35:124"},"nodeType":"YulIf","src":"5962:55:124"},{"nodeType":"YulVariableDeclaration","src":"6026:30:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6053:2:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6040:12:124"},"nodeType":"YulFunctionCall","src":"6040:16:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6030:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6083:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6092:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6095:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6085:6:124"},"nodeType":"YulFunctionCall","src":"6085:12:124"},"nodeType":"YulExpressionStatement","src":"6085:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6071:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6079:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6068:2:124"},"nodeType":"YulFunctionCall","src":"6068:14:124"},"nodeType":"YulIf","src":"6065:34:124"},{"body":{"nodeType":"YulBlock","src":"6149:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6158:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6161:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6151:6:124"},"nodeType":"YulFunctionCall","src":"6151:12:124"},"nodeType":"YulExpressionStatement","src":"6151:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6122:2:124"},{"name":"length","nodeType":"YulIdentifier","src":"6126:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6118:3:124"},"nodeType":"YulFunctionCall","src":"6118:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"6135:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6114:3:124"},"nodeType":"YulFunctionCall","src":"6114:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6140:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6111:2:124"},"nodeType":"YulFunctionCall","src":"6111:37:124"},"nodeType":"YulIf","src":"6108:57:124"},{"nodeType":"YulAssignment","src":"6174:21:124","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6188:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"6192:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6184:3:124"},"nodeType":"YulFunctionCall","src":"6184:11:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"6174:6:124"}]},{"nodeType":"YulAssignment","src":"6204:16:124","value":{"name":"length","nodeType":"YulIdentifier","src":"6214:6:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"6204:6:124"}]}]},"name":"abi_decode_tuple_t_uint8t_uint16t_uint16t_uint16t_addresst_string_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5097:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5108:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5120:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5128:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5136:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5144:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5152:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"5160:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"5168:6:124","type":""}],"src":"5009:1217:124"},{"body":{"nodeType":"YulBlock","src":"6332:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"6378:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6387:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6390:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6380:6:124"},"nodeType":"YulFunctionCall","src":"6380:12:124"},"nodeType":"YulExpressionStatement","src":"6380:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6353:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6362:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6349:3:124"},"nodeType":"YulFunctionCall","src":"6349:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6374:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6345:3:124"},"nodeType":"YulFunctionCall","src":"6345:32:124"},"nodeType":"YulIf","src":"6342:52:124"},{"nodeType":"YulVariableDeclaration","src":"6403:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6429:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6416:12:124"},"nodeType":"YulFunctionCall","src":"6416:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6407:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6473:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6448:24:124"},"nodeType":"YulFunctionCall","src":"6448:31:124"},"nodeType":"YulExpressionStatement","src":"6448:31:124"},{"nodeType":"YulAssignment","src":"6488:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6498:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6488:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6298:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6309:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6321:6:124","type":""}],"src":"6231:278:124"},{"body":{"nodeType":"YulBlock","src":"6599:232:124","statements":[{"body":{"nodeType":"YulBlock","src":"6645:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6654:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6657:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6647:6:124"},"nodeType":"YulFunctionCall","src":"6647:12:124"},"nodeType":"YulExpressionStatement","src":"6647:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6620:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6629:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6616:3:124"},"nodeType":"YulFunctionCall","src":"6616:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6641:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6612:3:124"},"nodeType":"YulFunctionCall","src":"6612:32:124"},"nodeType":"YulIf","src":"6609:52:124"},{"nodeType":"YulVariableDeclaration","src":"6670:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6696:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6683:12:124"},"nodeType":"YulFunctionCall","src":"6683:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6674:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6740:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6715:24:124"},"nodeType":"YulFunctionCall","src":"6715:31:124"},"nodeType":"YulExpressionStatement","src":"6715:31:124"},{"nodeType":"YulAssignment","src":"6755:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6765:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6755:6:124"}]},{"nodeType":"YulAssignment","src":"6779:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6810:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6821:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6806:3:124"},"nodeType":"YulFunctionCall","src":"6806:18:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"6789:16:124"},"nodeType":"YulFunctionCall","src":"6789:36:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6779:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6557:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6568:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6580:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6588:6:124","type":""}],"src":"6514:317:124"},{"body":{"nodeType":"YulBlock","src":"6868:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6885:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6888:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6878:6:124"},"nodeType":"YulFunctionCall","src":"6878:88:124"},"nodeType":"YulExpressionStatement","src":"6878:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6982:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6985:4:124","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6975:6:124"},"nodeType":"YulFunctionCall","src":"6975:15:124"},"nodeType":"YulExpressionStatement","src":"6975:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7006:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7009:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6999:6:124"},"nodeType":"YulFunctionCall","src":"6999:15:124"},"nodeType":"YulExpressionStatement","src":"6999:15:124"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"6836:184:124"},{"body":{"nodeType":"YulBlock","src":"7137:281:124","statements":[{"nodeType":"YulVariableDeclaration","src":"7147:51:124","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"7186:11:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7173:12:124"},"nodeType":"YulFunctionCall","src":"7173:25:124"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"7151:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7346:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7355:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7358:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7348:6:124"},"nodeType":"YulFunctionCall","src":"7348:12:124"},"nodeType":"YulExpressionStatement","src":"7348:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7221:18:124"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7249:12:124"},"nodeType":"YulFunctionCall","src":"7249:14:124"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7265:8:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7245:3:124"},"nodeType":"YulFunctionCall","src":"7245:29:124"},{"kind":"number","nodeType":"YulLiteral","src":"7276:66:124","type":"","value":"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe21"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7241:3:124"},"nodeType":"YulFunctionCall","src":"7241:102:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7217:3:124"},"nodeType":"YulFunctionCall","src":"7217:127:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7210:6:124"},"nodeType":"YulFunctionCall","src":"7210:135:124"},"nodeType":"YulIf","src":"7207:155:124"},{"nodeType":"YulAssignment","src":"7371:41:124","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"7383:8:124"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7393:18:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7379:3:124"},"nodeType":"YulFunctionCall","src":"7379:33:124"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"7371:4:124"}]}]},"name":"access_calldata_tail_t_struct$_InitReserveInput_$23846_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"7102:8:124","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"7112:11:124","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"7128:4:124","type":""}],"src":"7025:393:124"},{"body":{"nodeType":"YulBlock","src":"7467:83:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7484:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7493:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7500:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7489:3:124"},"nodeType":"YulFunctionCall","src":"7489:54:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7477:6:124"},"nodeType":"YulFunctionCall","src":"7477:67:124"},"nodeType":"YulExpressionStatement","src":"7477:67:124"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7451:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7458:3:124","type":""}],"src":"7423:127:124"},{"body":{"nodeType":"YulBlock","src":"7597:33:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7606:3:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7615:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"7622:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7611:3:124"},"nodeType":"YulFunctionCall","src":"7611:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7599:6:124"},"nodeType":"YulFunctionCall","src":"7599:29:124"},"nodeType":"YulExpressionStatement","src":"7599:29:124"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7581:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7588:3:124","type":""}],"src":"7555:75:124"},{"body":{"nodeType":"YulBlock","src":"7712:486:124","statements":[{"nodeType":"YulVariableDeclaration","src":"7722:43:124","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"7761:3:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7748:12:124"},"nodeType":"YulFunctionCall","src":"7748:17:124"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"7726:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7913:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7922:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7925:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7915:6:124"},"nodeType":"YulFunctionCall","src":"7915:12:124"},"nodeType":"YulExpressionStatement","src":"7915:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7788:18:124"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7816:12:124"},"nodeType":"YulFunctionCall","src":"7816:14:124"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7832:8:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7812:3:124"},"nodeType":"YulFunctionCall","src":"7812:29:124"},{"kind":"number","nodeType":"YulLiteral","src":"7843:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7808:3:124"},"nodeType":"YulFunctionCall","src":"7808:102:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7784:3:124"},"nodeType":"YulFunctionCall","src":"7784:127:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7777:6:124"},"nodeType":"YulFunctionCall","src":"7777:135:124"},"nodeType":"YulIf","src":"7774:155:124"},{"nodeType":"YulVariableDeclaration","src":"7938:48:124","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7957:18:124"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7977:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7953:3:124"},"nodeType":"YulFunctionCall","src":"7953:33:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7942:7:124","type":""}]},{"nodeType":"YulAssignment","src":"7995:31:124","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8018:7:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8005:12:124"},"nodeType":"YulFunctionCall","src":"8005:21:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7995:6:124"}]},{"nodeType":"YulAssignment","src":"8035:27:124","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8048:7:124"},{"kind":"number","nodeType":"YulLiteral","src":"8057:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8044:3:124"},"nodeType":"YulFunctionCall","src":"8044:18:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8035:5:124"}]},{"body":{"nodeType":"YulBlock","src":"8105:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8114:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8117:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8107:6:124"},"nodeType":"YulFunctionCall","src":"8107:12:124"},"nodeType":"YulExpressionStatement","src":"8107:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8077:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8085:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8074:2:124"},"nodeType":"YulFunctionCall","src":"8074:30:124"},"nodeType":"YulIf","src":"8071:50:124"},{"body":{"nodeType":"YulBlock","src":"8176:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8185:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8188:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8178:6:124"},"nodeType":"YulFunctionCall","src":"8178:12:124"},"nodeType":"YulExpressionStatement","src":"8178:12:124"}]},"condition":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"8137:8:124"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"8151:12:124"},"nodeType":"YulFunctionCall","src":"8151:14:124"},{"name":"length","nodeType":"YulIdentifier","src":"8167:6:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8147:3:124"},"nodeType":"YulFunctionCall","src":"8147:27:124"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"8133:3:124"},"nodeType":"YulFunctionCall","src":"8133:42:124"},"nodeType":"YulIf","src":"8130:62:124"}]},"name":"calldata_access_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"7676:8:124","type":""},{"name":"ptr","nodeType":"YulTypedName","src":"7686:3:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7694:5:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7701:6:124","type":""}],"src":"7635:563:124"},{"body":{"nodeType":"YulBlock","src":"8270:259:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8287:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"8292:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8280:6:124"},"nodeType":"YulFunctionCall","src":"8280:19:124"},"nodeType":"YulExpressionStatement","src":"8280:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8325:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"8330:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8321:3:124"},"nodeType":"YulFunctionCall","src":"8321:14:124"},{"name":"start","nodeType":"YulIdentifier","src":"8337:5:124"},{"name":"length","nodeType":"YulIdentifier","src":"8344:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"8308:12:124"},"nodeType":"YulFunctionCall","src":"8308:43:124"},"nodeType":"YulExpressionStatement","src":"8308:43:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8375:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"8380:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8371:3:124"},"nodeType":"YulFunctionCall","src":"8371:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"8389:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8367:3:124"},"nodeType":"YulFunctionCall","src":"8367:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"8396:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8360:6:124"},"nodeType":"YulFunctionCall","src":"8360:38:124"},"nodeType":"YulExpressionStatement","src":"8360:38:124"},{"nodeType":"YulAssignment","src":"8407:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8422:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8435:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8443:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8431:3:124"},"nodeType":"YulFunctionCall","src":"8431:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"8448:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8427:3:124"},"nodeType":"YulFunctionCall","src":"8427:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8418:3:124"},"nodeType":"YulFunctionCall","src":"8418:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"8518:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8414:3:124"},"nodeType":"YulFunctionCall","src":"8414:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8407:3:124"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"8239:5:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"8246:6:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8254:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8262:3:124","type":""}],"src":"8203:326:124"},{"body":{"nodeType":"YulBlock","src":"8757:3174:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8774:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8789:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8797:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8785:3:124"},"nodeType":"YulFunctionCall","src":"8785:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8767:6:124"},"nodeType":"YulFunctionCall","src":"8767:74:124"},"nodeType":"YulExpressionStatement","src":"8767:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8861:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8872:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8857:3:124"},"nodeType":"YulFunctionCall","src":"8857:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"8877:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8850:6:124"},"nodeType":"YulFunctionCall","src":"8850:30:124"},"nodeType":"YulExpressionStatement","src":"8850:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8927:6:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8908:18:124"},"nodeType":"YulFunctionCall","src":"8908:26:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8940:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8951:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8936:3:124"},"nodeType":"YulFunctionCall","src":"8936:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"8889:18:124"},"nodeType":"YulFunctionCall","src":"8889:66:124"},"nodeType":"YulExpressionStatement","src":"8889:66:124"},{"nodeType":"YulVariableDeclaration","src":"8964:55:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9007:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9015:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9003:3:124"},"nodeType":"YulFunctionCall","src":"9003:15:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8984:18:124"},"nodeType":"YulFunctionCall","src":"8984:35:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"8968:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"9047:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9065:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9076:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9061:3:124"},"nodeType":"YulFunctionCall","src":"9061:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9028:18:124"},"nodeType":"YulFunctionCall","src":"9028:52:124"},"nodeType":"YulExpressionStatement","src":"9028:52:124"},{"nodeType":"YulVariableDeclaration","src":"9089:57:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9134:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9142:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9130:3:124"},"nodeType":"YulFunctionCall","src":"9130:15:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9111:18:124"},"nodeType":"YulFunctionCall","src":"9111:35:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"9093:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"9174:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9194:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9205:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9190:3:124"},"nodeType":"YulFunctionCall","src":"9190:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9155:18:124"},"nodeType":"YulFunctionCall","src":"9155:55:124"},"nodeType":"YulExpressionStatement","src":"9155:55:124"},{"nodeType":"YulVariableDeclaration","src":"9219:55:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9262:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9270:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9258:3:124"},"nodeType":"YulFunctionCall","src":"9258:15:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"9241:16:124"},"nodeType":"YulFunctionCall","src":"9241:33:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"9223:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"9300:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9320:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9331:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9316:3:124"},"nodeType":"YulFunctionCall","src":"9316:19:124"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"9283:16:124"},"nodeType":"YulFunctionCall","src":"9283:53:124"},"nodeType":"YulExpressionStatement","src":"9283:53:124"},{"nodeType":"YulVariableDeclaration","src":"9345:58:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9390:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9398:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9386:3:124"},"nodeType":"YulFunctionCall","src":"9386:16:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9367:18:124"},"nodeType":"YulFunctionCall","src":"9367:36:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"9349:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"9431:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9451:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9462:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9447:3:124"},"nodeType":"YulFunctionCall","src":"9447:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9412:18:124"},"nodeType":"YulFunctionCall","src":"9412:55:124"},"nodeType":"YulExpressionStatement","src":"9412:55:124"},{"nodeType":"YulVariableDeclaration","src":"9476:58:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9521:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9529:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9517:3:124"},"nodeType":"YulFunctionCall","src":"9517:16:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9498:18:124"},"nodeType":"YulFunctionCall","src":"9498:36:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"9480:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"9562:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9582:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9593:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9578:3:124"},"nodeType":"YulFunctionCall","src":"9578:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9543:18:124"},"nodeType":"YulFunctionCall","src":"9543:55:124"},"nodeType":"YulExpressionStatement","src":"9543:55:124"},{"nodeType":"YulVariableDeclaration","src":"9607:58:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9652:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9660:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9648:3:124"},"nodeType":"YulFunctionCall","src":"9648:16:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9629:18:124"},"nodeType":"YulFunctionCall","src":"9629:36:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"9611:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9674:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9684:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9678:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"9715:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9735:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9746:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9731:3:124"},"nodeType":"YulFunctionCall","src":"9731:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9696:18:124"},"nodeType":"YulFunctionCall","src":"9696:54:124"},"nodeType":"YulExpressionStatement","src":"9696:54:124"},{"nodeType":"YulVariableDeclaration","src":"9759:58:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9804:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9812:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9800:3:124"},"nodeType":"YulFunctionCall","src":"9800:16:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9781:18:124"},"nodeType":"YulFunctionCall","src":"9781:36:124"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"9763:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9826:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9836:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"9830:2:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"9867:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9887:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"9898:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9883:3:124"},"nodeType":"YulFunctionCall","src":"9883:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9848:18:124"},"nodeType":"YulFunctionCall","src":"9848:54:124"},"nodeType":"YulExpressionStatement","src":"9848:54:124"},{"nodeType":"YulVariableDeclaration","src":"9911:92:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9979:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9991:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9999:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9987:3:124"},"nodeType":"YulFunctionCall","src":"9987:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"9947:31:124"},"nodeType":"YulFunctionCall","src":"9947:56:124"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"9915:14:124","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"9931:12:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10012:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10022:6:124","type":"","value":"0x01e0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"10016:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10037:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10047:3:124","type":"","value":"320"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"10041:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10070:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"10081:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10066:3:124"},"nodeType":"YulFunctionCall","src":"10066:18:124"},{"name":"_3","nodeType":"YulIdentifier","src":"10086:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10059:6:124"},"nodeType":"YulFunctionCall","src":"10059:30:124"},"nodeType":"YulExpressionStatement","src":"10059:30:124"},{"nodeType":"YulVariableDeclaration","src":"10098:91:124","value":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"10139:14:124"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"10155:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10173:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10184:3:124","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10169:3:124"},"nodeType":"YulFunctionCall","src":"10169:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10112:26:124"},"nodeType":"YulFunctionCall","src":"10112:77:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10102:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10198:94:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10268:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10280:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"10288:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10276:3:124"},"nodeType":"YulFunctionCall","src":"10276:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"10236:31:124"},"nodeType":"YulFunctionCall","src":"10236:56:124"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"10202:14:124","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"10218:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10301:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10311:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"10305:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10386:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10396:3:124","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"10390:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10419:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"10430:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10415:3:124"},"nodeType":"YulFunctionCall","src":"10415:18:124"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10443:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10451:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10439:3:124"},"nodeType":"YulFunctionCall","src":"10439:22:124"},{"name":"_5","nodeType":"YulIdentifier","src":"10463:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10435:3:124"},"nodeType":"YulFunctionCall","src":"10435:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10408:6:124"},"nodeType":"YulFunctionCall","src":"10408:59:124"},"nodeType":"YulExpressionStatement","src":"10408:59:124"},{"nodeType":"YulVariableDeclaration","src":"10476:80:124","value":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"10517:14:124"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"10533:14:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10549:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10490:26:124"},"nodeType":"YulFunctionCall","src":"10490:66:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10480:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10565:94:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10635:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10647:6:124"},{"name":"_4","nodeType":"YulIdentifier","src":"10655:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10643:3:124"},"nodeType":"YulFunctionCall","src":"10643:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"10603:31:124"},"nodeType":"YulFunctionCall","src":"10603:56:124"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"10569:14:124","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"10585:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10668:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10678:3:124","type":"","value":"384"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"10672:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10701:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"10712:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10697:3:124"},"nodeType":"YulFunctionCall","src":"10697:18:124"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10725:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10733:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10721:3:124"},"nodeType":"YulFunctionCall","src":"10721:22:124"},{"name":"_5","nodeType":"YulIdentifier","src":"10745:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10717:3:124"},"nodeType":"YulFunctionCall","src":"10717:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10690:6:124"},"nodeType":"YulFunctionCall","src":"10690:59:124"},"nodeType":"YulExpressionStatement","src":"10690:59:124"},{"nodeType":"YulVariableDeclaration","src":"10758:80:124","value":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"10799:14:124"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"10815:14:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10831:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10772:26:124"},"nodeType":"YulFunctionCall","src":"10772:66:124"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"10762:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10847:95:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10918:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10930:6:124"},{"name":"_6","nodeType":"YulIdentifier","src":"10938:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10926:3:124"},"nodeType":"YulFunctionCall","src":"10926:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"10886:31:124"},"nodeType":"YulFunctionCall","src":"10886:56:124"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"10851:15:124","type":""},{"name":"memberValue1_3","nodeType":"YulTypedName","src":"10868:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10951:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"10961:3:124","type":"","value":"416"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"10955:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10984:9:124"},{"name":"_8","nodeType":"YulIdentifier","src":"10995:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10980:3:124"},"nodeType":"YulFunctionCall","src":"10980:18:124"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"11008:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11016:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11004:3:124"},"nodeType":"YulFunctionCall","src":"11004:22:124"},{"name":"_5","nodeType":"YulIdentifier","src":"11028:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11000:3:124"},"nodeType":"YulFunctionCall","src":"11000:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10973:6:124"},"nodeType":"YulFunctionCall","src":"10973:59:124"},"nodeType":"YulExpressionStatement","src":"10973:59:124"},{"nodeType":"YulVariableDeclaration","src":"11041:81:124","value":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"11082:15:124"},{"name":"memberValue1_3","nodeType":"YulIdentifier","src":"11099:14:124"},{"name":"tail_3","nodeType":"YulIdentifier","src":"11115:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11055:26:124"},"nodeType":"YulFunctionCall","src":"11055:67:124"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"11045:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11131:95:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11202:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11214:6:124"},{"name":"_7","nodeType":"YulIdentifier","src":"11222:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11210:3:124"},"nodeType":"YulFunctionCall","src":"11210:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"11170:31:124"},"nodeType":"YulFunctionCall","src":"11170:56:124"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"11135:15:124","type":""},{"name":"memberValue1_4","nodeType":"YulTypedName","src":"11152:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11235:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11245:3:124","type":"","value":"448"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"11239:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11268:9:124"},{"name":"_9","nodeType":"YulIdentifier","src":"11279:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11264:3:124"},"nodeType":"YulFunctionCall","src":"11264:18:124"},{"arguments":[{"arguments":[{"name":"tail_4","nodeType":"YulIdentifier","src":"11292:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11300:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11288:3:124"},"nodeType":"YulFunctionCall","src":"11288:22:124"},{"name":"_5","nodeType":"YulIdentifier","src":"11312:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11284:3:124"},"nodeType":"YulFunctionCall","src":"11284:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11257:6:124"},"nodeType":"YulFunctionCall","src":"11257:59:124"},"nodeType":"YulExpressionStatement","src":"11257:59:124"},{"nodeType":"YulVariableDeclaration","src":"11325:81:124","value":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"11366:15:124"},{"name":"memberValue1_4","nodeType":"YulIdentifier","src":"11383:14:124"},{"name":"tail_4","nodeType":"YulIdentifier","src":"11399:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11339:26:124"},"nodeType":"YulFunctionCall","src":"11339:67:124"},"variables":[{"name":"tail_5","nodeType":"YulTypedName","src":"11329:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11415:95:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11486:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11498:6:124"},{"name":"_8","nodeType":"YulIdentifier","src":"11506:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11494:3:124"},"nodeType":"YulFunctionCall","src":"11494:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"11454:31:124"},"nodeType":"YulFunctionCall","src":"11454:56:124"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"11419:15:124","type":""},{"name":"memberValue1_5","nodeType":"YulTypedName","src":"11436:14:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11530:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"11541:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11526:3:124"},"nodeType":"YulFunctionCall","src":"11526:18:124"},{"arguments":[{"arguments":[{"name":"tail_5","nodeType":"YulIdentifier","src":"11554:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11562:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11550:3:124"},"nodeType":"YulFunctionCall","src":"11550:22:124"},{"name":"_5","nodeType":"YulIdentifier","src":"11574:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11546:3:124"},"nodeType":"YulFunctionCall","src":"11546:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11519:6:124"},"nodeType":"YulFunctionCall","src":"11519:59:124"},"nodeType":"YulExpressionStatement","src":"11519:59:124"},{"nodeType":"YulVariableDeclaration","src":"11587:81:124","value":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"11628:15:124"},{"name":"memberValue1_5","nodeType":"YulIdentifier","src":"11645:14:124"},{"name":"tail_5","nodeType":"YulIdentifier","src":"11661:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11601:26:124"},"nodeType":"YulFunctionCall","src":"11601:67:124"},"variables":[{"name":"tail_6","nodeType":"YulTypedName","src":"11591:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11677:95:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11748:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11760:6:124"},{"name":"_9","nodeType":"YulIdentifier","src":"11768:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11756:3:124"},"nodeType":"YulFunctionCall","src":"11756:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"11716:31:124"},"nodeType":"YulFunctionCall","src":"11716:56:124"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"11681:15:124","type":""},{"name":"memberValue1_6","nodeType":"YulTypedName","src":"11698:14:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11792:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11803:3:124","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11788:3:124"},"nodeType":"YulFunctionCall","src":"11788:19:124"},{"arguments":[{"arguments":[{"name":"tail_6","nodeType":"YulIdentifier","src":"11817:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11825:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11813:3:124"},"nodeType":"YulFunctionCall","src":"11813:22:124"},{"name":"_5","nodeType":"YulIdentifier","src":"11837:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11809:3:124"},"nodeType":"YulFunctionCall","src":"11809:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11781:6:124"},"nodeType":"YulFunctionCall","src":"11781:60:124"},"nodeType":"YulExpressionStatement","src":"11781:60:124"},{"nodeType":"YulAssignment","src":"11850:75:124","value":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"11885:15:124"},{"name":"memberValue1_6","nodeType":"YulIdentifier","src":"11902:14:124"},{"name":"tail_6","nodeType":"YulIdentifier","src":"11918:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11858:26:124"},"nodeType":"YulFunctionCall","src":"11858:67:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11850:4:124"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_InitReserveInput_$23846_calldata_ptr__to_t_address_t_struct$_InitReserveInput_$23846_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8718:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8729:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8737:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8748:4:124","type":""}],"src":"8534:3397:124"},{"body":{"nodeType":"YulBlock","src":"11983:302:124","statements":[{"body":{"nodeType":"YulBlock","src":"12082:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12103:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12106:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12096:6:124"},"nodeType":"YulFunctionCall","src":"12096:88:124"},"nodeType":"YulExpressionStatement","src":"12096:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12204:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12207:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12197:6:124"},"nodeType":"YulFunctionCall","src":"12197:15:124"},"nodeType":"YulExpressionStatement","src":"12197:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12232:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12235:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12225:6:124"},"nodeType":"YulFunctionCall","src":"12225:15:124"},"nodeType":"YulExpressionStatement","src":"12225:15:124"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11999:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"12006:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11996:2:124"},"nodeType":"YulFunctionCall","src":"11996:77:124"},"nodeType":"YulIf","src":"11993:257:124"},{"nodeType":"YulAssignment","src":"12259:20:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12270:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"12277:1:124","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12266:3:124"},"nodeType":"YulFunctionCall","src":"12266:13:124"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"12259:3:124"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11965:5:124","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"11975:3:124","type":""}],"src":"11936:349:124"},{"body":{"nodeType":"YulBlock","src":"12391:125:124","statements":[{"nodeType":"YulAssignment","src":"12401:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12413:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12424:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12409:3:124"},"nodeType":"YulFunctionCall","src":"12409:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12401:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12443:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12458:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12466:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12454:3:124"},"nodeType":"YulFunctionCall","src":"12454:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12436:6:124"},"nodeType":"YulFunctionCall","src":"12436:74:124"},"nodeType":"YulExpressionStatement","src":"12436:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12360:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12371:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12382:4:124","type":""}],"src":"12290:226:124"},{"body":{"nodeType":"YulBlock","src":"12553:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12570:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12573:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12563:6:124"},"nodeType":"YulFunctionCall","src":"12563:88:124"},"nodeType":"YulExpressionStatement","src":"12563:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12667:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12670:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12660:6:124"},"nodeType":"YulFunctionCall","src":"12660:15:124"},"nodeType":"YulExpressionStatement","src":"12660:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12691:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12694:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12684:6:124"},"nodeType":"YulFunctionCall","src":"12684:15:124"},"nodeType":"YulExpressionStatement","src":"12684:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"12521:184:124"},{"body":{"nodeType":"YulBlock","src":"12756:206:124","statements":[{"nodeType":"YulAssignment","src":"12766:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12782:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12776:5:124"},"nodeType":"YulFunctionCall","src":"12776:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"12766:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"12794:34:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"12816:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12824:3:124","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12812:3:124"},"nodeType":"YulFunctionCall","src":"12812:16:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"12798:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"12903:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"12905:16:124"},"nodeType":"YulFunctionCall","src":"12905:18:124"},"nodeType":"YulExpressionStatement","src":"12905:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12846:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"12858:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12843:2:124"},"nodeType":"YulFunctionCall","src":"12843:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12882:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"12894:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12879:2:124"},"nodeType":"YulFunctionCall","src":"12879:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"12840:2:124"},"nodeType":"YulFunctionCall","src":"12840:62:124"},"nodeType":"YulIf","src":"12837:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12941:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12945:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12934:6:124"},"nodeType":"YulFunctionCall","src":"12934:22:124"},"nodeType":"YulExpressionStatement","src":"12934:22:124"}]},"name":"allocate_memory_3396","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"12745:6:124","type":""}],"src":"12710:252:124"},{"body":{"nodeType":"YulBlock","src":"13013:207:124","statements":[{"nodeType":"YulAssignment","src":"13023:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13039:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13033:5:124"},"nodeType":"YulFunctionCall","src":"13033:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13023:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13051:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13073:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13081:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13069:3:124"},"nodeType":"YulFunctionCall","src":"13069:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"13055:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13161:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13163:16:124"},"nodeType":"YulFunctionCall","src":"13163:18:124"},"nodeType":"YulExpressionStatement","src":"13163:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13104:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"13116:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13101:2:124"},"nodeType":"YulFunctionCall","src":"13101:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13140:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"13152:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13137:2:124"},"nodeType":"YulFunctionCall","src":"13137:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"13098:2:124"},"nodeType":"YulFunctionCall","src":"13098:62:124"},"nodeType":"YulIf","src":"13095:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13199:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13203:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13192:6:124"},"nodeType":"YulFunctionCall","src":"13192:22:124"},"nodeType":"YulExpressionStatement","src":"13192:22:124"}]},"name":"allocate_memory_3398","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"13002:6:124","type":""}],"src":"12967:253:124"},{"body":{"nodeType":"YulBlock","src":"13270:289:124","statements":[{"nodeType":"YulAssignment","src":"13280:19:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13296:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13290:5:124"},"nodeType":"YulFunctionCall","src":"13290:9:124"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13280:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"13308:117:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13330:6:124"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"13346:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"13352:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13342:3:124"},"nodeType":"YulFunctionCall","src":"13342:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"13357:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13338:3:124"},"nodeType":"YulFunctionCall","src":"13338:86:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13326:3:124"},"nodeType":"YulFunctionCall","src":"13326:99:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"13312:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13500:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13502:16:124"},"nodeType":"YulFunctionCall","src":"13502:18:124"},"nodeType":"YulExpressionStatement","src":"13502:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13443:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"13455:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13440:2:124"},"nodeType":"YulFunctionCall","src":"13440:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13479:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"13491:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13476:2:124"},"nodeType":"YulFunctionCall","src":"13476:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"13437:2:124"},"nodeType":"YulFunctionCall","src":"13437:62:124"},"nodeType":"YulIf","src":"13434:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13538:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13542:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13531:6:124"},"nodeType":"YulFunctionCall","src":"13531:22:124"},"nodeType":"YulExpressionStatement","src":"13531:22:124"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"13250:4:124","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"13259:6:124","type":""}],"src":"13225:334:124"},{"body":{"nodeType":"YulBlock","src":"13655:335:124","statements":[{"body":{"nodeType":"YulBlock","src":"13699:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13708:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13711:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13701:6:124"},"nodeType":"YulFunctionCall","src":"13701:12:124"},"nodeType":"YulExpressionStatement","src":"13701:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"13676:3:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13681:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13672:3:124"},"nodeType":"YulFunctionCall","src":"13672:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"13693:4:124","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13668:3:124"},"nodeType":"YulFunctionCall","src":"13668:30:124"},"nodeType":"YulIf","src":"13665:50:124"},{"nodeType":"YulVariableDeclaration","src":"13724:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13744:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13738:5:124"},"nodeType":"YulFunctionCall","src":"13738:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"13728:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13756:35:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13778:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13786:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13774:3:124"},"nodeType":"YulFunctionCall","src":"13774:17:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"13760:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13866:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13868:16:124"},"nodeType":"YulFunctionCall","src":"13868:18:124"},"nodeType":"YulExpressionStatement","src":"13868:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13809:10:124"},{"kind":"number","nodeType":"YulLiteral","src":"13821:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13806:2:124"},"nodeType":"YulFunctionCall","src":"13806:34:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13845:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"13857:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13842:2:124"},"nodeType":"YulFunctionCall","src":"13842:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"13803:2:124"},"nodeType":"YulFunctionCall","src":"13803:62:124"},"nodeType":"YulIf","src":"13800:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13904:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13908:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13897:6:124"},"nodeType":"YulFunctionCall","src":"13897:22:124"},"nodeType":"YulExpressionStatement","src":"13897:22:124"},{"nodeType":"YulAssignment","src":"13928:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"13937:6:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"13928:5:124"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13959:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13973:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13967:5:124"},"nodeType":"YulFunctionCall","src":"13967:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13952:6:124"},"nodeType":"YulFunctionCall","src":"13952:32:124"},"nodeType":"YulExpressionStatement","src":"13952:32:124"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13626:9:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"13637:3:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"13645:5:124","type":""}],"src":"13564:426:124"},{"body":{"nodeType":"YulBlock","src":"14118:159:124","statements":[{"body":{"nodeType":"YulBlock","src":"14164:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14173:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14176:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14166:6:124"},"nodeType":"YulFunctionCall","src":"14166:12:124"},"nodeType":"YulExpressionStatement","src":"14166:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14139:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14148:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14135:3:124"},"nodeType":"YulFunctionCall","src":"14135:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14160:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14131:3:124"},"nodeType":"YulFunctionCall","src":"14131:32:124"},"nodeType":"YulIf","src":"14128:52:124"},{"nodeType":"YulAssignment","src":"14189:82:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14252:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14263:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"14199:52:124"},"nodeType":"YulFunctionCall","src":"14199:72:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14189:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14084:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14095:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14107:6:124","type":""}],"src":"13995:282:124"},{"body":{"nodeType":"YulBlock","src":"14495:175:124","statements":[{"nodeType":"YulAssignment","src":"14505:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14517:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14528:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14513:3:124"},"nodeType":"YulFunctionCall","src":"14513:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14505:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14547:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14562:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14570:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14558:3:124"},"nodeType":"YulFunctionCall","src":"14558:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14540:6:124"},"nodeType":"YulFunctionCall","src":"14540:74:124"},"nodeType":"YulExpressionStatement","src":"14540:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14634:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14645:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14630:3:124"},"nodeType":"YulFunctionCall","src":"14630:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14656:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14650:5:124"},"nodeType":"YulFunctionCall","src":"14650:13:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14623:6:124"},"nodeType":"YulFunctionCall","src":"14623:41:124"},"nodeType":"YulExpressionStatement","src":"14623:41:124"}]},"name":"abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14456:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14467:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14475:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14486:4:124","type":""}],"src":"14282:388:124"},{"body":{"nodeType":"YulBlock","src":"14804:119:124","statements":[{"nodeType":"YulAssignment","src":"14814:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14826:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14837:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14822:3:124"},"nodeType":"YulFunctionCall","src":"14822:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14814:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14856:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"14867:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14849:6:124"},"nodeType":"YulFunctionCall","src":"14849:25:124"},"nodeType":"YulExpressionStatement","src":"14849:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14894:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14905:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14890:3:124"},"nodeType":"YulFunctionCall","src":"14890:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14910:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14883:6:124"},"nodeType":"YulFunctionCall","src":"14883:34:124"},"nodeType":"YulExpressionStatement","src":"14883:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14765:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14776:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14784:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14795:4:124","type":""}],"src":"14675:248:124"},{"body":{"nodeType":"YulBlock","src":"14988:78:124","statements":[{"nodeType":"YulAssignment","src":"14998:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15013:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15007:5:124"},"nodeType":"YulFunctionCall","src":"15007:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"14998:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15054:5:124"}],"functionName":{"name":"validator_revert_uint128","nodeType":"YulIdentifier","src":"15029:24:124"},"nodeType":"YulFunctionCall","src":"15029:31:124"},"nodeType":"YulExpressionStatement","src":"15029:31:124"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"14967:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"14978:5:124","type":""}],"src":"14928:138:124"},{"body":{"nodeType":"YulBlock","src":"15130:110:124","statements":[{"nodeType":"YulAssignment","src":"15140:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15155:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15149:5:124"},"nodeType":"YulFunctionCall","src":"15149:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15140:5:124"}]},{"body":{"nodeType":"YulBlock","src":"15218:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15227:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15230:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15220:6:124"},"nodeType":"YulFunctionCall","src":"15220:12:124"},"nodeType":"YulExpressionStatement","src":"15220:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15184:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15195:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"15202:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15191:3:124"},"nodeType":"YulFunctionCall","src":"15191:24:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"15181:2:124"},"nodeType":"YulFunctionCall","src":"15181:35:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"15174:6:124"},"nodeType":"YulFunctionCall","src":"15174:43:124"},"nodeType":"YulIf","src":"15171:63:124"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"15109:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15120:5:124","type":""}],"src":"15071:169:124"},{"body":{"nodeType":"YulBlock","src":"15304:77:124","statements":[{"nodeType":"YulAssignment","src":"15314:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15329:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15323:5:124"},"nodeType":"YulFunctionCall","src":"15323:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15314:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15369:5:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"15345:23:124"},"nodeType":"YulFunctionCall","src":"15345:30:124"},"nodeType":"YulExpressionStatement","src":"15345:30:124"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"15283:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15294:5:124","type":""}],"src":"15245:136:124"},{"body":{"nodeType":"YulBlock","src":"15446:78:124","statements":[{"nodeType":"YulAssignment","src":"15456:22:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15471:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15465:5:124"},"nodeType":"YulFunctionCall","src":"15465:13:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15456:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15512:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"15487:24:124"},"nodeType":"YulFunctionCall","src":"15487:31:124"},"nodeType":"YulExpressionStatement","src":"15487:31:124"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"15425:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15436:5:124","type":""}],"src":"15386:138:124"},{"body":{"nodeType":"YulBlock","src":"15640:1541:124","statements":[{"body":{"nodeType":"YulBlock","src":"15687:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15696:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15699:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15689:6:124"},"nodeType":"YulFunctionCall","src":"15689:12:124"},"nodeType":"YulExpressionStatement","src":"15689:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15661:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"15670:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15657:3:124"},"nodeType":"YulFunctionCall","src":"15657:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"15682:3:124","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15653:3:124"},"nodeType":"YulFunctionCall","src":"15653:33:124"},"nodeType":"YulIf","src":"15650:53:124"},{"nodeType":"YulVariableDeclaration","src":"15712:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_3396","nodeType":"YulIdentifier","src":"15725:20:124"},"nodeType":"YulFunctionCall","src":"15725:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"15716:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15763:5:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15823:9:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15834:7:124"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"15770:52:124"},"nodeType":"YulFunctionCall","src":"15770:72:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15756:6:124"},"nodeType":"YulFunctionCall","src":"15756:87:124"},"nodeType":"YulExpressionStatement","src":"15756:87:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15863:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"15870:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15859:3:124"},"nodeType":"YulFunctionCall","src":"15859:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15909:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15920:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15905:3:124"},"nodeType":"YulFunctionCall","src":"15905:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"15875:29:124"},"nodeType":"YulFunctionCall","src":"15875:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15852:6:124"},"nodeType":"YulFunctionCall","src":"15852:73:124"},"nodeType":"YulExpressionStatement","src":"15852:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15945:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"15952:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15941:3:124"},"nodeType":"YulFunctionCall","src":"15941:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15991:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16002:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15987:3:124"},"nodeType":"YulFunctionCall","src":"15987:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"15957:29:124"},"nodeType":"YulFunctionCall","src":"15957:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15934:6:124"},"nodeType":"YulFunctionCall","src":"15934:73:124"},"nodeType":"YulExpressionStatement","src":"15934:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16027:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16034:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16023:3:124"},"nodeType":"YulFunctionCall","src":"16023:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16073:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16084:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16069:3:124"},"nodeType":"YulFunctionCall","src":"16069:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16039:29:124"},"nodeType":"YulFunctionCall","src":"16039:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16016:6:124"},"nodeType":"YulFunctionCall","src":"16016:73:124"},"nodeType":"YulExpressionStatement","src":"16016:73:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16109:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16116:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16105:3:124"},"nodeType":"YulFunctionCall","src":"16105:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16156:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16167:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16152:3:124"},"nodeType":"YulFunctionCall","src":"16152:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16122:29:124"},"nodeType":"YulFunctionCall","src":"16122:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16098:6:124"},"nodeType":"YulFunctionCall","src":"16098:75:124"},"nodeType":"YulExpressionStatement","src":"16098:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16193:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16200:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16189:3:124"},"nodeType":"YulFunctionCall","src":"16189:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16240:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16251:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16236:3:124"},"nodeType":"YulFunctionCall","src":"16236:19:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16206:29:124"},"nodeType":"YulFunctionCall","src":"16206:50:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16182:6:124"},"nodeType":"YulFunctionCall","src":"16182:75:124"},"nodeType":"YulExpressionStatement","src":"16182:75:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16277:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16284:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16273:3:124"},"nodeType":"YulFunctionCall","src":"16273:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16323:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16334:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16319:3:124"},"nodeType":"YulFunctionCall","src":"16319:19:124"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"16290:28:124"},"nodeType":"YulFunctionCall","src":"16290:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16266:6:124"},"nodeType":"YulFunctionCall","src":"16266:74:124"},"nodeType":"YulExpressionStatement","src":"16266:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16360:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"16367:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16356:3:124"},"nodeType":"YulFunctionCall","src":"16356:15:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16417:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16402:3:124"},"nodeType":"YulFunctionCall","src":"16402:19:124"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"16373:28:124"},"nodeType":"YulFunctionCall","src":"16373:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16349:6:124"},"nodeType":"YulFunctionCall","src":"16349:74:124"},"nodeType":"YulExpressionStatement","src":"16349:74:124"},{"nodeType":"YulVariableDeclaration","src":"16432:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16442:3:124","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16436:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16465:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16472:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16461:3:124"},"nodeType":"YulFunctionCall","src":"16461:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16511:9:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16522:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16507:3:124"},"nodeType":"YulFunctionCall","src":"16507:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"16477:29:124"},"nodeType":"YulFunctionCall","src":"16477:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16454:6:124"},"nodeType":"YulFunctionCall","src":"16454:73:124"},"nodeType":"YulExpressionStatement","src":"16454:73:124"},{"nodeType":"YulVariableDeclaration","src":"16536:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16546:3:124","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"16540:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16569:5:124"},{"name":"_2","nodeType":"YulIdentifier","src":"16576:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16565:3:124"},"nodeType":"YulFunctionCall","src":"16565:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16615:9:124"},{"name":"_2","nodeType":"YulIdentifier","src":"16626:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16611:3:124"},"nodeType":"YulFunctionCall","src":"16611:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"16581:29:124"},"nodeType":"YulFunctionCall","src":"16581:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16558:6:124"},"nodeType":"YulFunctionCall","src":"16558:73:124"},"nodeType":"YulExpressionStatement","src":"16558:73:124"},{"nodeType":"YulVariableDeclaration","src":"16640:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16650:3:124","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"16644:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16673:5:124"},{"name":"_3","nodeType":"YulIdentifier","src":"16680:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16669:3:124"},"nodeType":"YulFunctionCall","src":"16669:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16719:9:124"},{"name":"_3","nodeType":"YulIdentifier","src":"16730:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16715:3:124"},"nodeType":"YulFunctionCall","src":"16715:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"16685:29:124"},"nodeType":"YulFunctionCall","src":"16685:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16662:6:124"},"nodeType":"YulFunctionCall","src":"16662:73:124"},"nodeType":"YulExpressionStatement","src":"16662:73:124"},{"nodeType":"YulVariableDeclaration","src":"16744:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16754:3:124","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"16748:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16777:5:124"},{"name":"_4","nodeType":"YulIdentifier","src":"16784:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16773:3:124"},"nodeType":"YulFunctionCall","src":"16773:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16823:9:124"},{"name":"_4","nodeType":"YulIdentifier","src":"16834:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16819:3:124"},"nodeType":"YulFunctionCall","src":"16819:18:124"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"16789:29:124"},"nodeType":"YulFunctionCall","src":"16789:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16766:6:124"},"nodeType":"YulFunctionCall","src":"16766:73:124"},"nodeType":"YulExpressionStatement","src":"16766:73:124"},{"nodeType":"YulVariableDeclaration","src":"16848:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16858:3:124","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"16852:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16881:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"16888:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16877:3:124"},"nodeType":"YulFunctionCall","src":"16877:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16927:9:124"},{"name":"_5","nodeType":"YulIdentifier","src":"16938:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16923:3:124"},"nodeType":"YulFunctionCall","src":"16923:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16893:29:124"},"nodeType":"YulFunctionCall","src":"16893:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16870:6:124"},"nodeType":"YulFunctionCall","src":"16870:73:124"},"nodeType":"YulExpressionStatement","src":"16870:73:124"},{"nodeType":"YulVariableDeclaration","src":"16952:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16962:3:124","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"16956:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16985:5:124"},{"name":"_6","nodeType":"YulIdentifier","src":"16992:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16981:3:124"},"nodeType":"YulFunctionCall","src":"16981:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17031:9:124"},{"name":"_6","nodeType":"YulIdentifier","src":"17042:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17027:3:124"},"nodeType":"YulFunctionCall","src":"17027:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16997:29:124"},"nodeType":"YulFunctionCall","src":"16997:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16974:6:124"},"nodeType":"YulFunctionCall","src":"16974:73:124"},"nodeType":"YulExpressionStatement","src":"16974:73:124"},{"nodeType":"YulVariableDeclaration","src":"17056:13:124","value":{"kind":"number","nodeType":"YulLiteral","src":"17066:3:124","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"17060:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17089:5:124"},{"name":"_7","nodeType":"YulIdentifier","src":"17096:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17085:3:124"},"nodeType":"YulFunctionCall","src":"17085:14:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17135:9:124"},{"name":"_7","nodeType":"YulIdentifier","src":"17146:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17131:3:124"},"nodeType":"YulFunctionCall","src":"17131:18:124"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"17101:29:124"},"nodeType":"YulFunctionCall","src":"17101:49:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17078:6:124"},"nodeType":"YulFunctionCall","src":"17078:73:124"},"nodeType":"YulExpressionStatement","src":"17078:73:124"},{"nodeType":"YulAssignment","src":"17160:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"17170:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17160:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15606:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15617:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15629:6:124","type":""}],"src":"15529:1652:124"},{"body":{"nodeType":"YulBlock","src":"17315:198:124","statements":[{"nodeType":"YulAssignment","src":"17325:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17337:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17348:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17333:3:124"},"nodeType":"YulFunctionCall","src":"17333:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17325:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"17360:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"17370:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17364:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17428:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17443:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"17451:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17439:3:124"},"nodeType":"YulFunctionCall","src":"17439:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17421:6:124"},"nodeType":"YulFunctionCall","src":"17421:34:124"},"nodeType":"YulExpressionStatement","src":"17421:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17475:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"17486:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17471:3:124"},"nodeType":"YulFunctionCall","src":"17471:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"17495:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"17503:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17491:3:124"},"nodeType":"YulFunctionCall","src":"17491:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17464:6:124"},"nodeType":"YulFunctionCall","src":"17464:43:124"},"nodeType":"YulExpressionStatement","src":"17464:43:124"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17276:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17287:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17295:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17306:4:124","type":""}],"src":"17186:327:124"},{"body":{"nodeType":"YulBlock","src":"17571:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"17581:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"17590:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"17585:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"17650:63:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"17675:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"17680:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17671:3:124"},"nodeType":"YulFunctionCall","src":"17671:11:124"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"17694:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"17699:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17690:3:124"},"nodeType":"YulFunctionCall","src":"17690:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17684:5:124"},"nodeType":"YulFunctionCall","src":"17684:18:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17664:6:124"},"nodeType":"YulFunctionCall","src":"17664:39:124"},"nodeType":"YulExpressionStatement","src":"17664:39:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17611:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"17614:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17608:2:124"},"nodeType":"YulFunctionCall","src":"17608:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17622:19:124","statements":[{"nodeType":"YulAssignment","src":"17624:15:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17633:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"17636:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17629:3:124"},"nodeType":"YulFunctionCall","src":"17629:10:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"17624:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"17604:3:124","statements":[]},"src":"17600:113:124"},{"body":{"nodeType":"YulBlock","src":"17739:31:124","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"17752:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"17757:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17748:3:124"},"nodeType":"YulFunctionCall","src":"17748:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"17766:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17741:6:124"},"nodeType":"YulFunctionCall","src":"17741:27:124"},"nodeType":"YulExpressionStatement","src":"17741:27:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17728:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"17731:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17725:2:124"},"nodeType":"YulFunctionCall","src":"17725:13:124"},"nodeType":"YulIf","src":"17722:48:124"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"17549:3:124","type":""},{"name":"dst","nodeType":"YulTypedName","src":"17554:3:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"17559:6:124","type":""}],"src":"17518:258:124"},{"body":{"nodeType":"YulBlock","src":"17831:267:124","statements":[{"nodeType":"YulVariableDeclaration","src":"17841:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17861:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17855:5:124"},"nodeType":"YulFunctionCall","src":"17855:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"17845:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17883:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"17888:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17876:6:124"},"nodeType":"YulFunctionCall","src":"17876:19:124"},"nodeType":"YulExpressionStatement","src":"17876:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17930:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"17937:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17926:3:124"},"nodeType":"YulFunctionCall","src":"17926:16:124"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17948:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"17953:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17944:3:124"},"nodeType":"YulFunctionCall","src":"17944:14:124"},{"name":"length","nodeType":"YulIdentifier","src":"17960:6:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"17904:21:124"},"nodeType":"YulFunctionCall","src":"17904:63:124"},"nodeType":"YulExpressionStatement","src":"17904:63:124"},{"nodeType":"YulAssignment","src":"17976:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17991:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"18004:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"18012:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18000:3:124"},"nodeType":"YulFunctionCall","src":"18000:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"18017:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17996:3:124"},"nodeType":"YulFunctionCall","src":"17996:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17987:3:124"},"nodeType":"YulFunctionCall","src":"17987:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"18087:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17983:3:124"},"nodeType":"YulFunctionCall","src":"17983:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"17976:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"17808:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"17815:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17823:3:124","type":""}],"src":"17781:317:124"},{"body":{"nodeType":"YulBlock","src":"18224:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18241:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18252:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18234:6:124"},"nodeType":"YulFunctionCall","src":"18234:21:124"},"nodeType":"YulExpressionStatement","src":"18234:21:124"},{"nodeType":"YulAssignment","src":"18264:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18290:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18302:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18313:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18298:3:124"},"nodeType":"YulFunctionCall","src":"18298:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"18272:17:124"},"nodeType":"YulFunctionCall","src":"18272:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18264:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18193:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18204:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18215:4:124","type":""}],"src":"18103:220:124"},{"body":{"nodeType":"YulBlock","src":"18409:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"18455:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18464:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18467:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18457:6:124"},"nodeType":"YulFunctionCall","src":"18457:12:124"},"nodeType":"YulExpressionStatement","src":"18457:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18430:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"18439:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18426:3:124"},"nodeType":"YulFunctionCall","src":"18426:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"18451:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18422:3:124"},"nodeType":"YulFunctionCall","src":"18422:32:124"},"nodeType":"YulIf","src":"18419:52:124"},{"nodeType":"YulVariableDeclaration","src":"18480:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18499:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18493:5:124"},"nodeType":"YulFunctionCall","src":"18493:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"18484:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18543:5:124"}],"functionName":{"name":"validator_revert_uint128","nodeType":"YulIdentifier","src":"18518:24:124"},"nodeType":"YulFunctionCall","src":"18518:31:124"},"nodeType":"YulExpressionStatement","src":"18518:31:124"},{"nodeType":"YulAssignment","src":"18558:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"18568:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18558:6:124"}]}]},"name":"abi_decode_tuple_t_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18375:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18386:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18398:6:124","type":""}],"src":"18328:251:124"},{"body":{"nodeType":"YulBlock","src":"18713:190:124","statements":[{"nodeType":"YulAssignment","src":"18723:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18735:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18746:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18731:3:124"},"nodeType":"YulFunctionCall","src":"18731:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18723:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"18758:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"18768:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18762:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18818:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18833:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18841:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18829:3:124"},"nodeType":"YulFunctionCall","src":"18829:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18811:6:124"},"nodeType":"YulFunctionCall","src":"18811:34:124"},"nodeType":"YulExpressionStatement","src":"18811:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"18876:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18861:3:124"},"nodeType":"YulFunctionCall","src":"18861:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18885:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"18893:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18881:3:124"},"nodeType":"YulFunctionCall","src":"18881:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18854:6:124"},"nodeType":"YulFunctionCall","src":"18854:43:124"},"nodeType":"YulExpressionStatement","src":"18854:43:124"}]},"name":"abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18674:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18685:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18693:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18704:4:124","type":""}],"src":"18584:319:124"},{"body":{"nodeType":"YulBlock","src":"18989:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"19035:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19044:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19047:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19037:6:124"},"nodeType":"YulFunctionCall","src":"19037:12:124"},"nodeType":"YulExpressionStatement","src":"19037:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19010:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"19019:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19006:3:124"},"nodeType":"YulFunctionCall","src":"19006:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"19031:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19002:3:124"},"nodeType":"YulFunctionCall","src":"19002:32:124"},"nodeType":"YulIf","src":"18999:52:124"},{"nodeType":"YulAssignment","src":"19060:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19076:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19070:5:124"},"nodeType":"YulFunctionCall","src":"19070:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19060:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18955:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18966:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18978:6:124","type":""}],"src":"18908:184:124"},{"body":{"nodeType":"YulBlock","src":"19220:184:124","statements":[{"nodeType":"YulAssignment","src":"19230:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19242:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19253:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19238:3:124"},"nodeType":"YulFunctionCall","src":"19238:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19230:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19272:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19287:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"19295:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19283:3:124"},"nodeType":"YulFunctionCall","src":"19283:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19265:6:124"},"nodeType":"YulFunctionCall","src":"19265:74:124"},"nodeType":"YulExpressionStatement","src":"19265:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19359:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19370:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19355:3:124"},"nodeType":"YulFunctionCall","src":"19355:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19389:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19382:6:124"},"nodeType":"YulFunctionCall","src":"19382:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19375:6:124"},"nodeType":"YulFunctionCall","src":"19375:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19348:6:124"},"nodeType":"YulFunctionCall","src":"19348:50:124"},"nodeType":"YulExpressionStatement","src":"19348:50:124"}]},"name":"abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19181:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19192:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19200:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19211:4:124","type":""}],"src":"19097:307:124"},{"body":{"nodeType":"YulBlock","src":"19504:92:124","statements":[{"nodeType":"YulAssignment","src":"19514:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19526:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19537:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19522:3:124"},"nodeType":"YulFunctionCall","src":"19522:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19514:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19556:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19581:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19574:6:124"},"nodeType":"YulFunctionCall","src":"19574:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19567:6:124"},"nodeType":"YulFunctionCall","src":"19567:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19549:6:124"},"nodeType":"YulFunctionCall","src":"19549:41:124"},"nodeType":"YulExpressionStatement","src":"19549:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19473:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19484:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19495:4:124","type":""}],"src":"19409:187:124"},{"body":{"nodeType":"YulBlock","src":"19832:1404:124","statements":[{"nodeType":"YulVariableDeclaration","src":"19842:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"19852:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19846:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19910:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19925:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"19933:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19921:3:124"},"nodeType":"YulFunctionCall","src":"19921:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19903:6:124"},"nodeType":"YulFunctionCall","src":"19903:34:124"},"nodeType":"YulExpressionStatement","src":"19903:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19957:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"19968:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19953:3:124"},"nodeType":"YulFunctionCall","src":"19953:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"19973:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19946:6:124"},"nodeType":"YulFunctionCall","src":"19946:30:124"},"nodeType":"YulExpressionStatement","src":"19946:30:124"},{"nodeType":"YulVariableDeclaration","src":"19985:33:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20011:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"19998:12:124"},"nodeType":"YulFunctionCall","src":"19998:20:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"19989:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20052:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20027:24:124"},"nodeType":"YulFunctionCall","src":"20027:31:124"},"nodeType":"YulExpressionStatement","src":"20027:31:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20078:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"20089:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20074:3:124"},"nodeType":"YulFunctionCall","src":"20074:18:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20098:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20105:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20094:3:124"},"nodeType":"YulFunctionCall","src":"20094:14:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20067:6:124"},"nodeType":"YulFunctionCall","src":"20067:42:124"},"nodeType":"YulExpressionStatement","src":"20067:42:124"},{"nodeType":"YulVariableDeclaration","src":"20118:44:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20150:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"20158:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20146:3:124"},"nodeType":"YulFunctionCall","src":"20146:15:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20133:12:124"},"nodeType":"YulFunctionCall","src":"20133:29:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"20122:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20196:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20171:24:124"},"nodeType":"YulFunctionCall","src":"20171:33:124"},"nodeType":"YulExpressionStatement","src":"20171:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20224:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"20235:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20220:3:124"},"nodeType":"YulFunctionCall","src":"20220:18:124"},{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20244:7:124"},{"name":"_1","nodeType":"YulIdentifier","src":"20253:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20240:3:124"},"nodeType":"YulFunctionCall","src":"20240:16:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20213:6:124"},"nodeType":"YulFunctionCall","src":"20213:44:124"},"nodeType":"YulExpressionStatement","src":"20213:44:124"},{"nodeType":"YulVariableDeclaration","src":"20266:90:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20332:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20344:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"20352:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20340:3:124"},"nodeType":"YulFunctionCall","src":"20340:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"20300:31:124"},"nodeType":"YulFunctionCall","src":"20300:56:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"20270:12:124","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"20284:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20376:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"20387:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20372:3:124"},"nodeType":"YulFunctionCall","src":"20372:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"20393:4:124","type":"","value":"0xc0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20365:6:124"},"nodeType":"YulFunctionCall","src":"20365:33:124"},"nodeType":"YulExpressionStatement","src":"20365:33:124"},{"nodeType":"YulVariableDeclaration","src":"20407:89:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"20448:12:124"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"20462:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20480:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"20491:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20476:3:124"},"nodeType":"YulFunctionCall","src":"20476:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"20421:26:124"},"nodeType":"YulFunctionCall","src":"20421:75:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"20411:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20505:94:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20575:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20587:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"20595:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20583:3:124"},"nodeType":"YulFunctionCall","src":"20583:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"20543:31:124"},"nodeType":"YulFunctionCall","src":"20543:56:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"20509:14:124","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"20525:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20608:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"20618:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"20612:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20704:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"20715:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20700:3:124"},"nodeType":"YulFunctionCall","src":"20700:19:124"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"20729:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"20737:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20725:3:124"},"nodeType":"YulFunctionCall","src":"20725:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"20749:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20721:3:124"},"nodeType":"YulFunctionCall","src":"20721:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20693:6:124"},"nodeType":"YulFunctionCall","src":"20693:60:124"},"nodeType":"YulExpressionStatement","src":"20693:60:124"},{"nodeType":"YulVariableDeclaration","src":"20762:80:124","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"20803:14:124"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"20819:14:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"20835:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"20776:26:124"},"nodeType":"YulFunctionCall","src":"20776:66:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"20766:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20851:58:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20896:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"20904:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20892:3:124"},"nodeType":"YulFunctionCall","src":"20892:16:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"20873:18:124"},"nodeType":"YulFunctionCall","src":"20873:36:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"20855:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"20937:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20957:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"20968:4:124","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20953:3:124"},"nodeType":"YulFunctionCall","src":"20953:20:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"20918:18:124"},"nodeType":"YulFunctionCall","src":"20918:56:124"},"nodeType":"YulExpressionStatement","src":"20918:56:124"},{"nodeType":"YulVariableDeclaration","src":"20983:95:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"21053:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"21065:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"21073:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21061:3:124"},"nodeType":"YulFunctionCall","src":"21061:16:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"21021:31:124"},"nodeType":"YulFunctionCall","src":"21021:57:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"20987:14:124","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"21003:14:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21098:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"21109:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21094:3:124"},"nodeType":"YulFunctionCall","src":"21094:19:124"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"21123:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"21131:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21119:3:124"},"nodeType":"YulFunctionCall","src":"21119:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"21143:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21115:3:124"},"nodeType":"YulFunctionCall","src":"21115:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21087:6:124"},"nodeType":"YulFunctionCall","src":"21087:60:124"},"nodeType":"YulExpressionStatement","src":"21087:60:124"},{"nodeType":"YulAssignment","src":"21156:74:124","value":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"21191:14:124"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"21207:14:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"21223:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"21164:26:124"},"nodeType":"YulFunctionCall","src":"21164:66:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21156:4:124"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr__to_t_address_t_struct$_UpdateDebtTokenInput_$23874_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19793:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19804:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19812:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19823:4:124","type":""}],"src":"19601:1635:124"},{"body":{"nodeType":"YulBlock","src":"21347:905:124","statements":[{"nodeType":"YulVariableDeclaration","src":"21357:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"21367:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21361:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21414:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21423:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21426:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21416:6:124"},"nodeType":"YulFunctionCall","src":"21416:12:124"},"nodeType":"YulExpressionStatement","src":"21416:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21389:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"21398:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21385:3:124"},"nodeType":"YulFunctionCall","src":"21385:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21410:2:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21381:3:124"},"nodeType":"YulFunctionCall","src":"21381:32:124"},"nodeType":"YulIf","src":"21378:52:124"},{"nodeType":"YulVariableDeclaration","src":"21439:30:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21459:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21453:5:124"},"nodeType":"YulFunctionCall","src":"21453:16:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"21443:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"21478:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"21488:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"21482:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21533:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21542:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21545:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21535:6:124"},"nodeType":"YulFunctionCall","src":"21535:12:124"},"nodeType":"YulExpressionStatement","src":"21535:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"21521:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"21529:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21518:2:124"},"nodeType":"YulFunctionCall","src":"21518:14:124"},"nodeType":"YulIf","src":"21515:34:124"},{"nodeType":"YulVariableDeclaration","src":"21558:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21572:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"21583:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21568:3:124"},"nodeType":"YulFunctionCall","src":"21568:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"21562:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21638:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21647:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21650:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21640:6:124"},"nodeType":"YulFunctionCall","src":"21640:12:124"},"nodeType":"YulExpressionStatement","src":"21640:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21617:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"21621:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21613:3:124"},"nodeType":"YulFunctionCall","src":"21613:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21628:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21609:3:124"},"nodeType":"YulFunctionCall","src":"21609:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21602:6:124"},"nodeType":"YulFunctionCall","src":"21602:35:124"},"nodeType":"YulIf","src":"21599:55:124"},{"nodeType":"YulVariableDeclaration","src":"21663:19:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21679:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21673:5:124"},"nodeType":"YulFunctionCall","src":"21673:9:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"21667:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21705:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"21707:16:124"},"nodeType":"YulFunctionCall","src":"21707:18:124"},"nodeType":"YulExpressionStatement","src":"21707:18:124"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21697:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"21701:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21694:2:124"},"nodeType":"YulFunctionCall","src":"21694:10:124"},"nodeType":"YulIf","src":"21691:36:124"},{"nodeType":"YulVariableDeclaration","src":"21736:20:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21750:1:124","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"21753:2:124"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21746:3:124"},"nodeType":"YulFunctionCall","src":"21746:10:124"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"21740:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"21765:39:124","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"21796:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21800:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21792:3:124"},"nodeType":"YulFunctionCall","src":"21792:11:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"21776:15:124"},"nodeType":"YulFunctionCall","src":"21776:28:124"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"21769:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"21813:16:124","value":{"name":"dst","nodeType":"YulIdentifier","src":"21826:3:124"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"21817:5:124","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"21845:3:124"},{"name":"_4","nodeType":"YulIdentifier","src":"21850:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21838:6:124"},"nodeType":"YulFunctionCall","src":"21838:15:124"},"nodeType":"YulExpressionStatement","src":"21838:15:124"},{"nodeType":"YulAssignment","src":"21862:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"21873:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21878:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21869:3:124"},"nodeType":"YulFunctionCall","src":"21869:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"21862:3:124"}]},{"nodeType":"YulVariableDeclaration","src":"21890:34:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21912:2:124"},{"name":"_5","nodeType":"YulIdentifier","src":"21916:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21908:3:124"},"nodeType":"YulFunctionCall","src":"21908:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"21921:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21904:3:124"},"nodeType":"YulFunctionCall","src":"21904:20:124"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"21894:6:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"21956:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21965:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21968:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21958:6:124"},"nodeType":"YulFunctionCall","src":"21958:12:124"},"nodeType":"YulExpressionStatement","src":"21958:12:124"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"21939:6:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21947:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21936:2:124"},"nodeType":"YulFunctionCall","src":"21936:19:124"},"nodeType":"YulIf","src":"21933:39:124"},{"nodeType":"YulVariableDeclaration","src":"21981:22:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21996:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"22000:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21992:3:124"},"nodeType":"YulFunctionCall","src":"21992:11:124"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"21985:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"22068:154:124","statements":[{"nodeType":"YulVariableDeclaration","src":"22082:23:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"22101:3:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22095:5:124"},"nodeType":"YulFunctionCall","src":"22095:10:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22086:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22143:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22118:24:124"},"nodeType":"YulFunctionCall","src":"22118:31:124"},"nodeType":"YulExpressionStatement","src":"22118:31:124"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"22169:3:124"},{"name":"value","nodeType":"YulIdentifier","src":"22174:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22162:6:124"},"nodeType":"YulFunctionCall","src":"22162:18:124"},"nodeType":"YulExpressionStatement","src":"22162:18:124"},{"nodeType":"YulAssignment","src":"22193:19:124","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"22204:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"22209:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22200:3:124"},"nodeType":"YulFunctionCall","src":"22200:12:124"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"22193:3:124"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"22023:3:124"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"22028:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"22020:2:124"},"nodeType":"YulFunctionCall","src":"22020:15:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"22036:23:124","statements":[{"nodeType":"YulAssignment","src":"22038:19:124","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"22049:3:124"},{"name":"_1","nodeType":"YulIdentifier","src":"22054:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22045:3:124"},"nodeType":"YulFunctionCall","src":"22045:12:124"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"22038:3:124"}]}]},"pre":{"nodeType":"YulBlock","src":"22016:3:124","statements":[]},"src":"22012:210:124"},{"nodeType":"YulAssignment","src":"22231:15:124","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"22241:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22231:6:124"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21313:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21324:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21336:6:124","type":""}],"src":"21241:1011:124"},{"body":{"nodeType":"YulBlock","src":"22414:162:124","statements":[{"nodeType":"YulAssignment","src":"22424:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22436:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22447:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22432:3:124"},"nodeType":"YulFunctionCall","src":"22432:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22424:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22466:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"22477:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22459:6:124"},"nodeType":"YulFunctionCall","src":"22459:25:124"},"nodeType":"YulExpressionStatement","src":"22459:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22504:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22515:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22500:3:124"},"nodeType":"YulFunctionCall","src":"22500:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"22520:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22493:6:124"},"nodeType":"YulFunctionCall","src":"22493:34:124"},"nodeType":"YulExpressionStatement","src":"22493:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22547:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22558:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22543:3:124"},"nodeType":"YulFunctionCall","src":"22543:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"22563:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22536:6:124"},"nodeType":"YulFunctionCall","src":"22536:34:124"},"nodeType":"YulExpressionStatement","src":"22536:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22367:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22378:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22386:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22394:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22405:4:124","type":""}],"src":"22257:319:124"},{"body":{"nodeType":"YulBlock","src":"22698:151:124","statements":[{"nodeType":"YulAssignment","src":"22708:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22720:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22731:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22716:3:124"},"nodeType":"YulFunctionCall","src":"22716:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22708:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22750:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"22775:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22768:6:124"},"nodeType":"YulFunctionCall","src":"22768:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22761:6:124"},"nodeType":"YulFunctionCall","src":"22761:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22743:6:124"},"nodeType":"YulFunctionCall","src":"22743:41:124"},"nodeType":"YulExpressionStatement","src":"22743:41:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22804:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"22815:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22800:3:124"},"nodeType":"YulFunctionCall","src":"22800:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"22834:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22827:6:124"},"nodeType":"YulFunctionCall","src":"22827:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22820:6:124"},"nodeType":"YulFunctionCall","src":"22820:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22793:6:124"},"nodeType":"YulFunctionCall","src":"22793:50:124"},"nodeType":"YulExpressionStatement","src":"22793:50:124"}]},"name":"abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22659:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22670:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22678:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22689:4:124","type":""}],"src":"22581:268:124"},{"body":{"nodeType":"YulBlock","src":"23079:1516:124","statements":[{"nodeType":"YulVariableDeclaration","src":"23089:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"23099:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"23093:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23157:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23172:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"23180:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23168:3:124"},"nodeType":"YulFunctionCall","src":"23168:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23150:6:124"},"nodeType":"YulFunctionCall","src":"23150:34:124"},"nodeType":"YulExpressionStatement","src":"23150:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23204:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23215:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23200:3:124"},"nodeType":"YulFunctionCall","src":"23200:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"23220:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23193:6:124"},"nodeType":"YulFunctionCall","src":"23193:30:124"},"nodeType":"YulExpressionStatement","src":"23193:30:124"},{"nodeType":"YulVariableDeclaration","src":"23232:33:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23258:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23245:12:124"},"nodeType":"YulFunctionCall","src":"23245:20:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23236:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23299:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"23274:24:124"},"nodeType":"YulFunctionCall","src":"23274:31:124"},"nodeType":"YulExpressionStatement","src":"23274:31:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23325:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23336:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23321:3:124"},"nodeType":"YulFunctionCall","src":"23321:18:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23345:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"23352:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23341:3:124"},"nodeType":"YulFunctionCall","src":"23341:14:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23314:6:124"},"nodeType":"YulFunctionCall","src":"23314:42:124"},"nodeType":"YulExpressionStatement","src":"23314:42:124"},{"nodeType":"YulVariableDeclaration","src":"23365:55:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23408:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"23416:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23404:3:124"},"nodeType":"YulFunctionCall","src":"23404:15:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"23385:18:124"},"nodeType":"YulFunctionCall","src":"23385:35:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"23369:12:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"23448:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23466:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23477:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23462:3:124"},"nodeType":"YulFunctionCall","src":"23462:18:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"23429:18:124"},"nodeType":"YulFunctionCall","src":"23429:52:124"},"nodeType":"YulExpressionStatement","src":"23429:52:124"},{"nodeType":"YulVariableDeclaration","src":"23490:57:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23535:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"23543:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23531:3:124"},"nodeType":"YulFunctionCall","src":"23531:15:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"23512:18:124"},"nodeType":"YulFunctionCall","src":"23512:35:124"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"23494:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"23575:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23595:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23606:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23591:3:124"},"nodeType":"YulFunctionCall","src":"23591:19:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"23556:18:124"},"nodeType":"YulFunctionCall","src":"23556:55:124"},"nodeType":"YulExpressionStatement","src":"23556:55:124"},{"nodeType":"YulVariableDeclaration","src":"23620:92:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23688:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23700:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"23708:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23696:3:124"},"nodeType":"YulFunctionCall","src":"23696:15:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"23656:31:124"},"nodeType":"YulFunctionCall","src":"23656:56:124"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"23624:14:124","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"23640:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23732:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23743:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23728:3:124"},"nodeType":"YulFunctionCall","src":"23728:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"23749:4:124","type":"","value":"0xe0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23721:6:124"},"nodeType":"YulFunctionCall","src":"23721:33:124"},"nodeType":"YulExpressionStatement","src":"23721:33:124"},{"nodeType":"YulVariableDeclaration","src":"23763:91:124","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"23804:14:124"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"23820:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23838:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"23849:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23834:3:124"},"nodeType":"YulFunctionCall","src":"23834:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"23777:26:124"},"nodeType":"YulFunctionCall","src":"23777:77:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"23767:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"23863:95:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23933:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23945:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"23953:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23941:3:124"},"nodeType":"YulFunctionCall","src":"23941:16:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"23901:31:124"},"nodeType":"YulFunctionCall","src":"23901:57:124"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"23867:14:124","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"23883:14:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"23967:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"23977:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"23971:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24063:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24074:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24059:3:124"},"nodeType":"YulFunctionCall","src":"24059:19:124"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"24088:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"24096:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24084:3:124"},"nodeType":"YulFunctionCall","src":"24084:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"24108:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24080:3:124"},"nodeType":"YulFunctionCall","src":"24080:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24052:6:124"},"nodeType":"YulFunctionCall","src":"24052:60:124"},"nodeType":"YulExpressionStatement","src":"24052:60:124"},{"nodeType":"YulVariableDeclaration","src":"24121:80:124","value":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"24162:14:124"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"24178:14:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"24194:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"24135:26:124"},"nodeType":"YulFunctionCall","src":"24135:66:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"24125:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24210:58:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24255:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24263:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24251:3:124"},"nodeType":"YulFunctionCall","src":"24251:16:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"24232:18:124"},"nodeType":"YulFunctionCall","src":"24232:36:124"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"24214:14:124","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"24296:14:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24316:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24327:4:124","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24312:3:124"},"nodeType":"YulFunctionCall","src":"24312:20:124"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"24277:18:124"},"nodeType":"YulFunctionCall","src":"24277:56:124"},"nodeType":"YulExpressionStatement","src":"24277:56:124"},{"nodeType":"YulVariableDeclaration","src":"24342:95:124","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24412:6:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24424:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24432:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24420:3:124"},"nodeType":"YulFunctionCall","src":"24420:16:124"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"24380:31:124"},"nodeType":"YulFunctionCall","src":"24380:57:124"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"24346:14:124","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"24362:14:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24457:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24468:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24453:3:124"},"nodeType":"YulFunctionCall","src":"24453:19:124"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"24482:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"24490:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24478:3:124"},"nodeType":"YulFunctionCall","src":"24478:22:124"},{"name":"_2","nodeType":"YulIdentifier","src":"24502:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24474:3:124"},"nodeType":"YulFunctionCall","src":"24474:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24446:6:124"},"nodeType":"YulFunctionCall","src":"24446:60:124"},"nodeType":"YulExpressionStatement","src":"24446:60:124"},{"nodeType":"YulAssignment","src":"24515:74:124","value":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"24550:14:124"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"24566:14:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"24582:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"24523:26:124"},"nodeType":"YulFunctionCall","src":"24523:66:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24515:4:124"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_UpdateATokenInput_$23861_calldata_ptr__to_t_address_t_struct$_UpdateATokenInput_$23861_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23040:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23051:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23059:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23070:4:124","type":""}],"src":"22854:1741:124"},{"body":{"nodeType":"YulBlock","src":"24789:585:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24806:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24821:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"24829:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24817:3:124"},"nodeType":"YulFunctionCall","src":"24817:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24799:6:124"},"nodeType":"YulFunctionCall","src":"24799:36:124"},"nodeType":"YulExpressionStatement","src":"24799:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24855:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24866:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24851:3:124"},"nodeType":"YulFunctionCall","src":"24851:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"24871:2:124","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24844:6:124"},"nodeType":"YulFunctionCall","src":"24844:30:124"},"nodeType":"YulExpressionStatement","src":"24844:30:124"},{"nodeType":"YulVariableDeclaration","src":"24883:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"24893:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24887:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24919:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24930:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24915:3:124"},"nodeType":"YulFunctionCall","src":"24915:18:124"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24945:6:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24939:5:124"},"nodeType":"YulFunctionCall","src":"24939:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"24954:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24935:3:124"},"nodeType":"YulFunctionCall","src":"24935:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24908:6:124"},"nodeType":"YulFunctionCall","src":"24908:50:124"},"nodeType":"YulExpressionStatement","src":"24908:50:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24978:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"24989:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24974:3:124"},"nodeType":"YulFunctionCall","src":"24974:18:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25008:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25016:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25004:3:124"},"nodeType":"YulFunctionCall","src":"25004:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24998:5:124"},"nodeType":"YulFunctionCall","src":"24998:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25022:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24994:3:124"},"nodeType":"YulFunctionCall","src":"24994:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24967:6:124"},"nodeType":"YulFunctionCall","src":"24967:59:124"},"nodeType":"YulExpressionStatement","src":"24967:59:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25046:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25057:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25042:3:124"},"nodeType":"YulFunctionCall","src":"25042:19:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25077:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25085:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25073:3:124"},"nodeType":"YulFunctionCall","src":"25073:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25067:5:124"},"nodeType":"YulFunctionCall","src":"25067:22:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25091:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25063:3:124"},"nodeType":"YulFunctionCall","src":"25063:31:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25035:6:124"},"nodeType":"YulFunctionCall","src":"25035:60:124"},"nodeType":"YulExpressionStatement","src":"25035:60:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25115:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25126:4:124","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25111:3:124"},"nodeType":"YulFunctionCall","src":"25111:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25147:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25155:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25143:3:124"},"nodeType":"YulFunctionCall","src":"25143:15:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25137:5:124"},"nodeType":"YulFunctionCall","src":"25137:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"25161:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25133:3:124"},"nodeType":"YulFunctionCall","src":"25133:71:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25104:6:124"},"nodeType":"YulFunctionCall","src":"25104:101:124"},"nodeType":"YulExpressionStatement","src":"25104:101:124"},{"nodeType":"YulVariableDeclaration","src":"25214:43:124","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25244:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25252:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25240:3:124"},"nodeType":"YulFunctionCall","src":"25240:16:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25234:5:124"},"nodeType":"YulFunctionCall","src":"25234:23:124"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"25218:12:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25277:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25288:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25273:3:124"},"nodeType":"YulFunctionCall","src":"25273:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"25294:4:124","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25266:6:124"},"nodeType":"YulFunctionCall","src":"25266:33:124"},"nodeType":"YulExpressionStatement","src":"25266:33:124"},{"nodeType":"YulAssignment","src":"25308:60:124","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"25334:12:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25352:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25363:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25348:3:124"},"nodeType":"YulFunctionCall","src":"25348:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"25316:17:124"},"nodeType":"YulFunctionCall","src":"25316:52:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25308:4:124"}]}]},"name":"abi_encode_tuple_t_uint8_t_struct$_EModeCategory_$23927_memory_ptr__to_t_uint8_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24750:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24761:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24769:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24780:4:124","type":""}],"src":"24600:774:124"},{"body":{"nodeType":"YulBlock","src":"25619:392:124","statements":[{"nodeType":"YulVariableDeclaration","src":"25629:16:124","value":{"kind":"number","nodeType":"YulLiteral","src":"25639:6:124","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25633:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25661:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25676:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25684:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25672:3:124"},"nodeType":"YulFunctionCall","src":"25672:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25654:6:124"},"nodeType":"YulFunctionCall","src":"25654:34:124"},"nodeType":"YulExpressionStatement","src":"25654:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25708:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25719:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25704:3:124"},"nodeType":"YulFunctionCall","src":"25704:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25728:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25736:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25724:3:124"},"nodeType":"YulFunctionCall","src":"25724:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25697:6:124"},"nodeType":"YulFunctionCall","src":"25697:43:124"},"nodeType":"YulExpressionStatement","src":"25697:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25760:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25771:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25756:3:124"},"nodeType":"YulFunctionCall","src":"25756:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"25780:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"25788:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25776:3:124"},"nodeType":"YulFunctionCall","src":"25776:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25749:6:124"},"nodeType":"YulFunctionCall","src":"25749:43:124"},"nodeType":"YulExpressionStatement","src":"25749:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25812:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25823:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25808:3:124"},"nodeType":"YulFunctionCall","src":"25808:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"25832:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"25840:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25828:3:124"},"nodeType":"YulFunctionCall","src":"25828:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25801:6:124"},"nodeType":"YulFunctionCall","src":"25801:83:124"},"nodeType":"YulExpressionStatement","src":"25801:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25904:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"25915:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25900:3:124"},"nodeType":"YulFunctionCall","src":"25900:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"25921:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25893:6:124"},"nodeType":"YulFunctionCall","src":"25893:32:124"},"nodeType":"YulExpressionStatement","src":"25893:32:124"},{"nodeType":"YulAssignment","src":"25934:71:124","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25969:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"25977:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25989:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26000:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25985:3:124"},"nodeType":"YulFunctionCall","src":"25985:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"25942:26:124"},"nodeType":"YulFunctionCall","src":"25942:63:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25934:4:124"}]}]},"name":"abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_address_t_string_calldata_ptr__to_t_uint256_t_uint256_t_uint256_t_address_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25548:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"25559:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"25567:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25575:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25583:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25591:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25599:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25610:4:124","type":""}],"src":"25379:632:124"},{"body":{"nodeType":"YulBlock","src":"26190:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26207:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26218:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26200:6:124"},"nodeType":"YulFunctionCall","src":"26200:21:124"},"nodeType":"YulExpressionStatement","src":"26200:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26241:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26252:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26237:3:124"},"nodeType":"YulFunctionCall","src":"26237:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"26257:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26230:6:124"},"nodeType":"YulFunctionCall","src":"26230:30:124"},"nodeType":"YulExpressionStatement","src":"26230:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26280:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26291:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26276:3:124"},"nodeType":"YulFunctionCall","src":"26276:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"26296:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26269:6:124"},"nodeType":"YulFunctionCall","src":"26269:62:124"},"nodeType":"YulExpressionStatement","src":"26269:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26351:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26362:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26347:3:124"},"nodeType":"YulFunctionCall","src":"26347:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"26367:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26340:6:124"},"nodeType":"YulFunctionCall","src":"26340:44:124"},"nodeType":"YulExpressionStatement","src":"26340:44:124"},{"nodeType":"YulAssignment","src":"26393:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26405:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26416:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26401:3:124"},"nodeType":"YulFunctionCall","src":"26401:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26393:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26167:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26181:4:124","type":""}],"src":"26016:410:124"},{"body":{"nodeType":"YulBlock","src":"26512:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"26558:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26567:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26570:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"26560:6:124"},"nodeType":"YulFunctionCall","src":"26560:12:124"},"nodeType":"YulExpressionStatement","src":"26560:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"26533:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"26542:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26529:3:124"},"nodeType":"YulFunctionCall","src":"26529:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"26554:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"26525:3:124"},"nodeType":"YulFunctionCall","src":"26525:32:124"},"nodeType":"YulIf","src":"26522:52:124"},{"nodeType":"YulVariableDeclaration","src":"26583:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26602:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26596:5:124"},"nodeType":"YulFunctionCall","src":"26596:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"26587:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"26646:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"26621:24:124"},"nodeType":"YulFunctionCall","src":"26621:31:124"},"nodeType":"YulExpressionStatement","src":"26621:31:124"},{"nodeType":"YulAssignment","src":"26661:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"26671:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"26661:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26478:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"26489:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"26501:6:124","type":""}],"src":"26431:251:124"},{"body":{"nodeType":"YulBlock","src":"26784:87:124","statements":[{"nodeType":"YulAssignment","src":"26794:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26806:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"26817:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26802:3:124"},"nodeType":"YulFunctionCall","src":"26802:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26794:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26836:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26851:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"26859:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26847:3:124"},"nodeType":"YulFunctionCall","src":"26847:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26829:6:124"},"nodeType":"YulFunctionCall","src":"26829:36:124"},"nodeType":"YulExpressionStatement","src":"26829:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26753:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26764:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26775:4:124","type":""}],"src":"26687:184:124"},{"body":{"nodeType":"YulBlock","src":"26989:1434:124","statements":[{"nodeType":"YulVariableDeclaration","src":"26999:12:124","value":{"kind":"number","nodeType":"YulLiteral","src":"27009:2:124","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"27003:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"27056:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27065:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27068:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27058:6:124"},"nodeType":"YulFunctionCall","src":"27058:12:124"},"nodeType":"YulExpressionStatement","src":"27058:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"27031:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"27040:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27027:3:124"},"nodeType":"YulFunctionCall","src":"27027:23:124"},{"name":"_1","nodeType":"YulIdentifier","src":"27052:2:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"27023:3:124"},"nodeType":"YulFunctionCall","src":"27023:32:124"},"nodeType":"YulIf","src":"27020:52:124"},{"nodeType":"YulVariableDeclaration","src":"27081:30:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27101:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27095:5:124"},"nodeType":"YulFunctionCall","src":"27095:16:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"27085:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"27120:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"27130:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"27124:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"27175:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27184:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27187:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27177:6:124"},"nodeType":"YulFunctionCall","src":"27177:12:124"},"nodeType":"YulExpressionStatement","src":"27177:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"27163:6:124"},{"name":"_2","nodeType":"YulIdentifier","src":"27171:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"27160:2:124"},"nodeType":"YulFunctionCall","src":"27160:14:124"},"nodeType":"YulIf","src":"27157:34:124"},{"nodeType":"YulVariableDeclaration","src":"27200:32:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27214:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"27225:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27210:3:124"},"nodeType":"YulFunctionCall","src":"27210:22:124"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"27204:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"27272:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27281:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27284:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27274:6:124"},"nodeType":"YulFunctionCall","src":"27274:12:124"},"nodeType":"YulExpressionStatement","src":"27274:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"27252:7:124"},{"name":"_3","nodeType":"YulIdentifier","src":"27261:2:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27248:3:124"},"nodeType":"YulFunctionCall","src":"27248:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"27266:4:124","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"27244:3:124"},"nodeType":"YulFunctionCall","src":"27244:27:124"},"nodeType":"YulIf","src":"27241:47:124"},{"nodeType":"YulVariableDeclaration","src":"27297:35:124","value":{"arguments":[],"functionName":{"name":"allocate_memory_3398","nodeType":"YulIdentifier","src":"27310:20:124"},"nodeType":"YulFunctionCall","src":"27310:22:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"27301:5:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"27341:24:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27362:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27356:5:124"},"nodeType":"YulFunctionCall","src":"27356:9:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"27345:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"27398:7:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"27374:23:124"},"nodeType":"YulFunctionCall","src":"27374:32:124"},"nodeType":"YulExpressionStatement","src":"27374:32:124"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27422:5:124"},{"name":"value_1","nodeType":"YulIdentifier","src":"27429:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27415:6:124"},"nodeType":"YulFunctionCall","src":"27415:22:124"},"nodeType":"YulExpressionStatement","src":"27415:22:124"},{"nodeType":"YulVariableDeclaration","src":"27446:33:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27471:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"27475:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27467:3:124"},"nodeType":"YulFunctionCall","src":"27467:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27461:5:124"},"nodeType":"YulFunctionCall","src":"27461:18:124"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"27450:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"27512:7:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"27488:23:124"},"nodeType":"YulFunctionCall","src":"27488:32:124"},"nodeType":"YulExpressionStatement","src":"27488:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27540:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"27547:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27536:3:124"},"nodeType":"YulFunctionCall","src":"27536:14:124"},{"name":"value_2","nodeType":"YulIdentifier","src":"27552:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27529:6:124"},"nodeType":"YulFunctionCall","src":"27529:31:124"},"nodeType":"YulExpressionStatement","src":"27529:31:124"},{"nodeType":"YulVariableDeclaration","src":"27569:33:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27594:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"27598:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27590:3:124"},"nodeType":"YulFunctionCall","src":"27590:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27584:5:124"},"nodeType":"YulFunctionCall","src":"27584:18:124"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"27573:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"27635:7:124"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"27611:23:124"},"nodeType":"YulFunctionCall","src":"27611:32:124"},"nodeType":"YulExpressionStatement","src":"27611:32:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27663:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"27670:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27659:3:124"},"nodeType":"YulFunctionCall","src":"27659:14:124"},{"name":"value_3","nodeType":"YulIdentifier","src":"27675:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27652:6:124"},"nodeType":"YulFunctionCall","src":"27652:31:124"},"nodeType":"YulExpressionStatement","src":"27652:31:124"},{"nodeType":"YulVariableDeclaration","src":"27692:33:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27717:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"27721:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27713:3:124"},"nodeType":"YulFunctionCall","src":"27713:11:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27707:5:124"},"nodeType":"YulFunctionCall","src":"27707:18:124"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"27696:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"27759:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"27734:24:124"},"nodeType":"YulFunctionCall","src":"27734:33:124"},"nodeType":"YulExpressionStatement","src":"27734:33:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27787:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"27794:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27783:3:124"},"nodeType":"YulFunctionCall","src":"27783:14:124"},{"name":"value_4","nodeType":"YulIdentifier","src":"27799:7:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27776:6:124"},"nodeType":"YulFunctionCall","src":"27776:31:124"},"nodeType":"YulExpressionStatement","src":"27776:31:124"},{"nodeType":"YulVariableDeclaration","src":"27816:35:124","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27842:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"27846:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27838:3:124"},"nodeType":"YulFunctionCall","src":"27838:12:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27832:5:124"},"nodeType":"YulFunctionCall","src":"27832:19:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"27820:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"27880:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27889:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27892:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27882:6:124"},"nodeType":"YulFunctionCall","src":"27882:12:124"},"nodeType":"YulExpressionStatement","src":"27882:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"27866:8:124"},{"name":"_2","nodeType":"YulIdentifier","src":"27876:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"27863:2:124"},"nodeType":"YulFunctionCall","src":"27863:16:124"},"nodeType":"YulIf","src":"27860:36:124"},{"nodeType":"YulVariableDeclaration","src":"27905:27:124","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27919:2:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"27923:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27915:3:124"},"nodeType":"YulFunctionCall","src":"27915:17:124"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"27909:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"27980:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27989:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27992:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27982:6:124"},"nodeType":"YulFunctionCall","src":"27982:12:124"},"nodeType":"YulExpressionStatement","src":"27982:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"27959:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"27963:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27955:3:124"},"nodeType":"YulFunctionCall","src":"27955:13:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"27970:7:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"27951:3:124"},"nodeType":"YulFunctionCall","src":"27951:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27944:6:124"},"nodeType":"YulFunctionCall","src":"27944:35:124"},"nodeType":"YulIf","src":"27941:55:124"},{"nodeType":"YulVariableDeclaration","src":"28005:19:124","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"28021:2:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28015:5:124"},"nodeType":"YulFunctionCall","src":"28015:9:124"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"28009:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"28047:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"28049:16:124"},"nodeType":"YulFunctionCall","src":"28049:18:124"},"nodeType":"YulExpressionStatement","src":"28049:18:124"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"28039:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"28043:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"28036:2:124"},"nodeType":"YulFunctionCall","src":"28036:10:124"},"nodeType":"YulIf","src":"28033:36:124"},{"nodeType":"YulVariableDeclaration","src":"28078:125:124","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"28119:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"28123:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28115:3:124"},"nodeType":"YulFunctionCall","src":"28115:13:124"},{"kind":"number","nodeType":"YulLiteral","src":"28130:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28111:3:124"},"nodeType":"YulFunctionCall","src":"28111:86:124"},{"name":"_1","nodeType":"YulIdentifier","src":"28199:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28107:3:124"},"nodeType":"YulFunctionCall","src":"28107:95:124"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"28091:15:124"},"nodeType":"YulFunctionCall","src":"28091:112:124"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"28082:5:124","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"28219:5:124"},{"name":"_5","nodeType":"YulIdentifier","src":"28226:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28212:6:124"},"nodeType":"YulFunctionCall","src":"28212:17:124"},"nodeType":"YulExpressionStatement","src":"28212:17:124"},{"body":{"nodeType":"YulBlock","src":"28275:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28284:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28287:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28277:6:124"},"nodeType":"YulFunctionCall","src":"28277:12:124"},"nodeType":"YulExpressionStatement","src":"28277:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"28252:2:124"},{"name":"_5","nodeType":"YulIdentifier","src":"28256:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28248:3:124"},"nodeType":"YulFunctionCall","src":"28248:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"28261:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28244:3:124"},"nodeType":"YulFunctionCall","src":"28244:20:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"28266:7:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"28241:2:124"},"nodeType":"YulFunctionCall","src":"28241:33:124"},"nodeType":"YulIf","src":"28238:53:124"},{"expression":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"28326:2:124"},{"name":"_1","nodeType":"YulIdentifier","src":"28330:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28322:3:124"},"nodeType":"YulFunctionCall","src":"28322:11:124"},{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"28339:5:124"},{"name":"_1","nodeType":"YulIdentifier","src":"28346:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28335:3:124"},"nodeType":"YulFunctionCall","src":"28335:14:124"},{"name":"_5","nodeType":"YulIdentifier","src":"28351:2:124"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"28300:21:124"},"nodeType":"YulFunctionCall","src":"28300:54:124"},"nodeType":"YulExpressionStatement","src":"28300:54:124"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28374:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"28381:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28370:3:124"},"nodeType":"YulFunctionCall","src":"28370:15:124"},{"name":"array","nodeType":"YulIdentifier","src":"28387:5:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28363:6:124"},"nodeType":"YulFunctionCall","src":"28363:30:124"},"nodeType":"YulExpressionStatement","src":"28363:30:124"},{"nodeType":"YulAssignment","src":"28402:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"28412:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"28402:6:124"}]}]},"name":"abi_decode_tuple_t_struct$_EModeCategory_$23927_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26955:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"26966:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"26978:6:124","type":""}],"src":"26876:1547:124"},{"body":{"nodeType":"YulBlock","src":"28549:141:124","statements":[{"nodeType":"YulAssignment","src":"28559:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28571:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28582:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28567:3:124"},"nodeType":"YulFunctionCall","src":"28567:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28559:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28601:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28616:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"28624:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28612:3:124"},"nodeType":"YulFunctionCall","src":"28612:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28594:6:124"},"nodeType":"YulFunctionCall","src":"28594:36:124"},"nodeType":"YulExpressionStatement","src":"28594:36:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28650:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"28661:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28646:3:124"},"nodeType":"YulFunctionCall","src":"28646:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"28670:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"28678:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28666:3:124"},"nodeType":"YulFunctionCall","src":"28666:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28639:6:124"},"nodeType":"YulFunctionCall","src":"28639:45:124"},"nodeType":"YulExpressionStatement","src":"28639:45:124"}]},"name":"abi_encode_tuple_t_uint8_t_uint8__to_t_uint8_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"28510:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"28521:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"28529:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"28540:4:124","type":""}],"src":"28428:262:124"},{"body":{"nodeType":"YulBlock","src":"28773:167:124","statements":[{"body":{"nodeType":"YulBlock","src":"28819:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28828:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28831:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28821:6:124"},"nodeType":"YulFunctionCall","src":"28821:12:124"},"nodeType":"YulExpressionStatement","src":"28821:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"28794:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"28803:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28790:3:124"},"nodeType":"YulFunctionCall","src":"28790:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"28815:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"28786:3:124"},"nodeType":"YulFunctionCall","src":"28786:32:124"},"nodeType":"YulIf","src":"28783:52:124"},{"nodeType":"YulVariableDeclaration","src":"28844:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28863:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28857:5:124"},"nodeType":"YulFunctionCall","src":"28857:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"28848:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28904:5:124"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"28882:21:124"},"nodeType":"YulFunctionCall","src":"28882:28:124"},"nodeType":"YulExpressionStatement","src":"28882:28:124"},{"nodeType":"YulAssignment","src":"28919:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"28929:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"28919:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"28739:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"28750:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"28762:6:124","type":""}],"src":"28695:245:124"},{"body":{"nodeType":"YulBlock","src":"29214:621:124","statements":[{"body":{"nodeType":"YulBlock","src":"29261:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29270:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29273:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29263:6:124"},"nodeType":"YulFunctionCall","src":"29263:12:124"},"nodeType":"YulExpressionStatement","src":"29263:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29235:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"29244:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29231:3:124"},"nodeType":"YulFunctionCall","src":"29231:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"29256:3:124","type":"","value":"384"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29227:3:124"},"nodeType":"YulFunctionCall","src":"29227:33:124"},"nodeType":"YulIf","src":"29224:53:124"},{"nodeType":"YulAssignment","src":"29286:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29302:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29296:5:124"},"nodeType":"YulFunctionCall","src":"29296:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"29286:6:124"}]},{"nodeType":"YulAssignment","src":"29321:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29341:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29352:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29337:3:124"},"nodeType":"YulFunctionCall","src":"29337:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29331:5:124"},"nodeType":"YulFunctionCall","src":"29331:25:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"29321:6:124"}]},{"nodeType":"YulAssignment","src":"29365:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29385:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29396:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29381:3:124"},"nodeType":"YulFunctionCall","src":"29381:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29375:5:124"},"nodeType":"YulFunctionCall","src":"29375:25:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"29365:6:124"}]},{"nodeType":"YulAssignment","src":"29409:35:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29429:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29440:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29425:3:124"},"nodeType":"YulFunctionCall","src":"29425:18:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29419:5:124"},"nodeType":"YulFunctionCall","src":"29419:25:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"29409:6:124"}]},{"nodeType":"YulAssignment","src":"29453:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29473:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29484:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29469:3:124"},"nodeType":"YulFunctionCall","src":"29469:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29463:5:124"},"nodeType":"YulFunctionCall","src":"29463:26:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"29453:6:124"}]},{"nodeType":"YulAssignment","src":"29498:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29518:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29529:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29514:3:124"},"nodeType":"YulFunctionCall","src":"29514:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29508:5:124"},"nodeType":"YulFunctionCall","src":"29508:26:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"29498:6:124"}]},{"nodeType":"YulAssignment","src":"29543:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29563:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29574:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29559:3:124"},"nodeType":"YulFunctionCall","src":"29559:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29553:5:124"},"nodeType":"YulFunctionCall","src":"29553:26:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"29543:6:124"}]},{"nodeType":"YulAssignment","src":"29588:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29608:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29619:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29604:3:124"},"nodeType":"YulFunctionCall","src":"29604:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29598:5:124"},"nodeType":"YulFunctionCall","src":"29598:26:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"29588:6:124"}]},{"nodeType":"YulAssignment","src":"29633:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29653:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29664:3:124","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29649:3:124"},"nodeType":"YulFunctionCall","src":"29649:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29643:5:124"},"nodeType":"YulFunctionCall","src":"29643:26:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"29633:6:124"}]},{"nodeType":"YulAssignment","src":"29678:36:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29698:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29709:3:124","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29694:3:124"},"nodeType":"YulFunctionCall","src":"29694:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29688:5:124"},"nodeType":"YulFunctionCall","src":"29688:26:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"29678:6:124"}]},{"nodeType":"YulAssignment","src":"29723:37:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29744:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29755:3:124","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29740:3:124"},"nodeType":"YulFunctionCall","src":"29740:19:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29734:5:124"},"nodeType":"YulFunctionCall","src":"29734:26:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"29723:7:124"}]},{"nodeType":"YulAssignment","src":"29769:60:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29813:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"29824:3:124","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29809:3:124"},"nodeType":"YulFunctionCall","src":"29809:19:124"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"29780:28:124"},"nodeType":"YulFunctionCall","src":"29780:49:124"},"variableNames":[{"name":"value11","nodeType":"YulIdentifier","src":"29769:7:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29090:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"29101:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"29113:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29121:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29129:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29137:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"29145:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"29153:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"29161:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"29169:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"29177:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"29185:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"29193:7:124","type":""},{"name":"value11","nodeType":"YulTypedName","src":"29202:7:124","type":""}],"src":"28945:890:124"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_array$_t_struct$_InitReserveInput_$23846_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 32), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 32)\n        value1 := length\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function validator_revert_uint128(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint128(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 192) { revert(0, 0) }\n        value0 := _1\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_struct$_UpdateATokenInput_$23861_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 224) { revert(0, 0) }\n        value0 := _1\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function validator_revert_uint16(value)\n    {\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint8t_uint16t_uint16t_uint16t_addresst_string_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_uint16(value)\n        value1 := value\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_uint16(value_1)\n        value2 := value_1\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_uint16(value_2)\n        value3 := value_2\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_address(value_3)\n        value4 := value_3\n        let offset := calldataload(add(headStart, 160))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value5 := add(_2, 32)\n        value6 := length\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint8(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := abi_decode_uint8(add(headStart, 32))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_InitReserveInput_$23846_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe21))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function calldata_access_string_calldata(base_ref, ptr) -> value, length\n    {\n        let rel_offset_of_tail := calldataload(ptr)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(0, 0) }\n        let value_1 := add(rel_offset_of_tail, base_ref)\n        length := calldataload(value_1)\n        value := add(value_1, 0x20)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        if sgt(base_ref, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_InitReserveInput_$23846_calldata_ptr__to_t_address_t_struct$_InitReserveInput_$23846_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), 64)\n        abi_encode_address(abi_decode_address(value1), add(headStart, 64))\n        let memberValue0 := abi_decode_address(add(value1, 32))\n        abi_encode_address(memberValue0, add(headStart, 96))\n        let memberValue0_1 := abi_decode_address(add(value1, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 128))\n        let memberValue0_2 := abi_decode_uint8(add(value1, 96))\n        abi_encode_uint8(memberValue0_2, add(headStart, 160))\n        let memberValue0_3 := abi_decode_address(add(value1, 128))\n        abi_encode_address(memberValue0_3, add(headStart, 192))\n        let memberValue0_4 := abi_decode_address(add(value1, 160))\n        abi_encode_address(memberValue0_4, add(headStart, 224))\n        let memberValue0_5 := abi_decode_address(add(value1, 192))\n        let _1 := 256\n        abi_encode_address(memberValue0_5, add(headStart, _1))\n        let memberValue0_6 := abi_decode_address(add(value1, 224))\n        let _2 := 288\n        abi_encode_address(memberValue0_6, add(headStart, _2))\n        let memberValue0_7, memberValue1 := calldata_access_string_calldata(value1, add(value1, _1))\n        let _3 := 0x01e0\n        let _4 := 320\n        mstore(add(headStart, _4), _3)\n        let tail_1 := abi_encode_string_calldata(memberValue0_7, memberValue1, add(headStart, 544))\n        let memberValue0_8, memberValue1_1 := calldata_access_string_calldata(value1, add(value1, _2))\n        let _5 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0\n        let _6 := 352\n        mstore(add(headStart, _6), add(sub(tail_1, headStart), _5))\n        let tail_2 := abi_encode_string_calldata(memberValue0_8, memberValue1_1, tail_1)\n        let memberValue0_9, memberValue1_2 := calldata_access_string_calldata(value1, add(value1, _4))\n        let _7 := 384\n        mstore(add(headStart, _7), add(sub(tail_2, headStart), _5))\n        let tail_3 := abi_encode_string_calldata(memberValue0_9, memberValue1_2, tail_2)\n        let memberValue0_10, memberValue1_3 := calldata_access_string_calldata(value1, add(value1, _6))\n        let _8 := 416\n        mstore(add(headStart, _8), add(sub(tail_3, headStart), _5))\n        let tail_4 := abi_encode_string_calldata(memberValue0_10, memberValue1_3, tail_3)\n        let memberValue0_11, memberValue1_4 := calldata_access_string_calldata(value1, add(value1, _7))\n        let _9 := 448\n        mstore(add(headStart, _9), add(sub(tail_4, headStart), _5))\n        let tail_5 := abi_encode_string_calldata(memberValue0_11, memberValue1_4, tail_4)\n        let memberValue0_12, memberValue1_5 := calldata_access_string_calldata(value1, add(value1, _8))\n        mstore(add(headStart, _3), add(sub(tail_5, headStart), _5))\n        let tail_6 := abi_encode_string_calldata(memberValue0_12, memberValue1_5, tail_5)\n        let memberValue0_13, memberValue1_6 := calldata_access_string_calldata(value1, add(value1, _9))\n        mstore(add(headStart, 512), add(sub(tail_6, headStart), _5))\n        tail := abi_encode_string_calldata(memberValue0_13, memberValue1_6, tail_6)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3396() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_3398() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_tuple_t_struct$_ReserveConfigurationMap_$23912_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$23912_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), mload(value1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_uint128(value)\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_uint16(value)\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$23909_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_3396()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint128_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_UpdateDebtTokenInput_$23874_calldata_ptr__to_t_address_t_struct$_UpdateDebtTokenInput_$23874_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), 64)\n        let value := calldataload(value1)\n        validator_revert_address(value)\n        mstore(add(headStart, 64), and(value, _1))\n        let value_1 := calldataload(add(value1, 32))\n        validator_revert_address(value_1)\n        mstore(add(headStart, 96), and(value_1, _1))\n        let memberValue0, memberValue1 := calldata_access_string_calldata(value1, add(value1, 64))\n        mstore(add(headStart, 128), 0xc0)\n        let tail_1 := abi_encode_string_calldata(memberValue0, memberValue1, add(headStart, 256))\n        let memberValue0_1, memberValue1_1 := calldata_access_string_calldata(value1, add(value1, 96))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0\n        mstore(add(headStart, 160), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_string_calldata(memberValue0_1, memberValue1_1, tail_1)\n        let memberValue0_2 := abi_decode_address(add(value1, 128))\n        abi_encode_address(memberValue0_2, add(headStart, 0xc0))\n        let memberValue0_3, memberValue1_2 := calldata_access_string_calldata(value1, add(value1, 160))\n        mstore(add(headStart, 224), add(sub(tail_2, headStart), _2))\n        tail := abi_encode_string_calldata(memberValue0_3, memberValue1_2, tail_2)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := mload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := mload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073_t_struct$_UpdateATokenInput_$23861_calldata_ptr__to_t_address_t_struct$_UpdateATokenInput_$23861_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), 64)\n        let value := calldataload(value1)\n        validator_revert_address(value)\n        mstore(add(headStart, 64), and(value, _1))\n        let memberValue0 := abi_decode_address(add(value1, 32))\n        abi_encode_address(memberValue0, add(headStart, 96))\n        let memberValue0_1 := abi_decode_address(add(value1, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 128))\n        let memberValue0_2, memberValue1 := calldata_access_string_calldata(value1, add(value1, 96))\n        mstore(add(headStart, 160), 0xe0)\n        let tail_1 := abi_encode_string_calldata(memberValue0_2, memberValue1, add(headStart, 288))\n        let memberValue0_3, memberValue1_1 := calldata_access_string_calldata(value1, add(value1, 128))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0\n        mstore(add(headStart, 192), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_string_calldata(memberValue0_3, memberValue1_1, tail_1)\n        let memberValue0_4 := abi_decode_address(add(value1, 160))\n        abi_encode_address(memberValue0_4, add(headStart, 0xe0))\n        let memberValue0_5, memberValue1_2 := calldata_access_string_calldata(value1, add(value1, 192))\n        mstore(add(headStart, 256), add(sub(tail_2, headStart), _2))\n        tail := abi_encode_string_calldata(memberValue0_5, memberValue1_2, tail_2)\n    }\n    function abi_encode_tuple_t_uint8_t_struct$_EModeCategory_$23927_memory_ptr__to_t_uint8_t_struct$_EModeCategory_$23927_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xff))\n        mstore(add(headStart, 32), 64)\n        let _1 := 0xffff\n        mstore(add(headStart, 64), and(mload(value1), _1))\n        mstore(add(headStart, 96), and(mload(add(value1, 32)), _1))\n        mstore(add(headStart, 128), and(mload(add(value1, 64)), _1))\n        mstore(add(headStart, 0xa0), and(mload(add(value1, 96)), 0xffffffffffffffffffffffffffffffffffffffff))\n        let memberValue0 := mload(add(value1, 128))\n        mstore(add(headStart, 192), 0xa0)\n        tail := abi_encode_string(memberValue0, add(headStart, 224))\n    }\n    function abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_address_t_string_calldata_ptr__to_t_uint256_t_uint256_t_uint256_t_address_t_string_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_string_calldata(value4, value5, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_struct$_EModeCategory_$23927_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if slt(sub(dataEnd, _3), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_3398()\n        let value_1 := mload(_3)\n        validator_revert_uint16(value_1)\n        mstore(value, value_1)\n        let value_2 := mload(add(_3, _1))\n        validator_revert_uint16(value_2)\n        mstore(add(value, _1), value_2)\n        let value_3 := mload(add(_3, 64))\n        validator_revert_uint16(value_3)\n        mstore(add(value, 64), value_3)\n        let value_4 := mload(add(_3, 96))\n        validator_revert_address(value_4)\n        mstore(add(value, 96), value_4)\n        let offset_1 := mload(add(_3, 128))\n        if gt(offset_1, _2) { revert(0, 0) }\n        let _4 := add(_3, offset_1)\n        if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n        let _5 := mload(_4)\n        if gt(_5, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_5, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _5)\n        if gt(add(add(_4, _5), _1), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_4, _1), add(array, _1), _5)\n        mstore(add(value, 128), array)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint8_t_uint8__to_t_uint8_t_uint8__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11\n    {\n        if slt(sub(dataEnd, headStart), 384) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := mload(add(headStart, 256))\n        value9 := mload(add(headStart, 288))\n        value10 := mload(add(headStart, 320))\n        value11 := abi_decode_uint40_fromMemory(add(headStart, 352))\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{"contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"ConfiguratorLogic":[{"length":20,"start":1074},{"length":20,"start":6146},{"length":20,"start":9533},{"length":20,"start":10601}]}},"object":"608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637af635a611610104578063aeb4fcc1116100a2578063c4d66de811610071578063c4d66de8146103b8578063d14a0983146103cb578063d4fe3f99146103de578063f213ef0e146103f157600080fd5b8063aeb4fcc11461036c578063b736aaeb1461037f578063bb01c37c14610392578063c19d61e4146103a557600080fd5b80638a751a60116100de5780638a751a601461032057806396e957c414610333578063a7fa83b714610346578063ad4e64321461035957600080fd5b80637af635a6146102e05780637c4e560b146102fa5780638a4936761461030d57600080fd5b806348d9fba91161017157806363c9b8601161014b57806363c9b86014610294578063682cf264146102a75780637626cde3146102ba5780637641f3d9146102cd57600080fd5b806348d9fba91461025b5780634b4e67531461026e578063571f03e51461028157600080fd5b80631df970bd116101ad5780631df970bd1461020f57806326d2cec2146102225780633036b4391461023557806338ae0cc31461024857600080fd5b806302fb45e6146101d4578063145f5892146101e95780631d2118f9146101fc575b600080fd5b6101e76101e2366004614dc3565b610404565b005b6101e76101f7366004614e6d565b6104d5565b6101e761020a366004614e99565b61066f565b6101e761021d366004614ef0565b6107f4565b6101e7610230366004614e6d565b610a90565b6101e7610243366004614f14565b610c8f565b6101e7610256366004614f3b565b610e59565b6101e7610269366004614f3b565b610fe4565b6101e761027c366004614e6d565b611170565b6101e761028f366004614e6d565b61136f565b6101e76102a2366004614f69565b6114ff565b6101e76102b5366004614f3b565b6115d0565b6101e76102c8366004614f86565b6117cf565b6101e76102db366004614fc1565b611874565b6102e8600181565b60405190815260200160405180910390f35b6101e7610308366004614fde565b6119c6565b6101e761031b366004614ef0565b611d50565b6101e761032e366004614f3b565b611fdb565b6101e7610341366004614f3b565b6121de565b6101e7610354366004614f3b565b61235d565b6101e7610367366004614f86565b61250a565b6101e761037a366004614e6d565b61257c565b6101e761038d366004614f3b565b6127a9565b6101e76103a0366004615019565b612936565b6101e76103b3366004615075565b6129a8565b6101e76103c6366004614f69565b61301c565b6101e76103d9366004614e6d565b613235565b6101e76103ec366004615143565b6133c5565b6101e76103ff366004614f3b565b6136a4565b61040c613823565b60355473ffffffffffffffffffffffffffffffffffffffff1660005b828110156104cf5773__$3ddc574512022f331a6a4c7e4bbb5c67b6$__63df59b8b28386868581811061045d5761045d615178565b905060200281019061046f91906151a7565b6040518363ffffffff1660e01b815260040161048c929190615299565b60006040518083038186803b1580156104a457600080fd5b505af41580156104b8573d6000803e3d6000fd5b5050505080806104c790615548565b915050610428565b50505050565b6104dd613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561054e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057291906156b5565b805190915060b01c640fffffffff1661058b8284613c75565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156105ff57600080fd5b505af1158015610613573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507f09808b1fc5abde94edf02fdde393bea0d2e4795999ba31695472848638b5c29f9250015b60405180910390a250505050565b610677613a4e565b6035546040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009216906335ea6a75906024016101e060405180830381865afa1580156106e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070d9190615707565b6101608101516035546040517f1d2118f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015293945091921690631d2118f990604401600060405180830381600087803b15801561078b57600080fd5b505af115801561079f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff85811682528781166020830152881693507fdb8dada53709ce4988154324196790c2e4a60c377e1256790946f83b87db3c33925001610661565b6107fc613d19565b60408051808201909152600281527f313900000000000000000000000000000000000000000000000000000000000060208201526127106fffffffffffffffffffffffffffffffff83161115610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b60405180910390fd5b50603554604080517f6a99c036000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691636a99c0369160048083019260209291908290030181865afa1580156108f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091d91906158b3565b603554604080517f074b2e43000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff9091169163bcb6e52291839163074b2e43916004808201926020929091908290030181865afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc91906158b3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff91821660048201529085166024820152604401600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8086168252861660208201527fe7e0c75e1fc2d0bd83dc85d59f085b3e763107c392fb368e85572b292f1f557693500190505b60405180910390a15050565b610a98613a4e565b60408051808201909152600281527f37300000000000000000000000000000000000000000000000000000000000006020820152612710821115610b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f91906156b5565b805190915060981c61ffff16610bb58284613eac565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b158015610c2957600080fd5b505af1158015610c3d573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fb5b0a963825337808b6e3154de8e98027595a5cad4219bb3a9bc55b192f4b391925001610661565b610c97613d19565b60408051808201909152600281527f32320000000000000000000000000000000000000000000000000000000000006020820152612710821115610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50603554604080517f272d9072000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163272d90729160048083019260209291908290030181865afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d91906158d0565b6035546040517f3036b4390000000000000000000000000000000000000000000000000000000081526004810185905291925073ffffffffffffffffffffffffffffffffffffffff1690633036b43990602401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610e1e573d6000803e3d6000fd5b505060408051848152602081018690527f30b17cb587a89089d003457c432f73e22aeee93de425e92224ba01080260ecd99350019050610a84565b610e61613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef691906156b5565b9050610f028183613f4d565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b158015610f7657600080fd5b505af1158015610f8a573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8716815285151560208201527f74adf6aaf58c08bc4f993640385e136522375ea3d1589a10d02adbb906c67d1c935001905060405180910390a1505050565b610fec613f92565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906156b5565b905061108d81836141b9565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fe188d542a5f11925d3a3af33703cdd30a43cb3e8066a3cf68b1b57f61a5a94b583604051611163911515815260200190565b60405180910390a2505050565b611178613a4e565b60408051808201909152600281527f363700000000000000000000000000000000000000000000000000000000000060208201526127108211156111e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561125b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127f91906156b5565b805190915060401c61ffff1661129582846141fe565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561130957600080fd5b505af115801561131d573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fb46e2b82b0c2cf3d7d9dece53635e165c53e0eaa7a44f904d61a2b7174826aef925001610661565b611377613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156113e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140c91906156b5565b805190915060741c640fffffffff16611425828461429f565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561149957600080fd5b505af11580156114ad573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507f0263602682188540a2d633561c0b4453b7d8566285e99f9f6018b8ef2facef49925001610661565b611507613d19565b6035546040517f63c9b86000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906363c9b86090602401600060405180830381600087803b15801561157457600080fd5b505af1158015611588573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507feeec4c06f7adad215cbdb4d2960896c83c26aedce02dde76d36fa28588d62da49150600090a250565b6115d8613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d91906156b5565b9050816116ef57805160408051808201909152600281527f383800000000000000000000000000000000000000000000000000000000000060208201529067080000000000000016156116ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b505b6116f98183614343565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b15801561176d57600080fd5b505af1158015611781573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f2443ba28e8d1d88d531a3d90b981816a4f3b3c7f1fd4085c6029e81d1b7a570d83604051611163911515815260200190565b6117d7613d19565b6035546040517ff5b50e7000000000000000000000000000000000000000000000000000000000815273__$3ddc574512022f331a6a4c7e4bbb5c67b6$__9163f5b50e70916118419173ffffffffffffffffffffffffffffffffffffffff169085906004016158e9565b60006040518083038186803b15801561185957600080fd5b505af415801561186d573d6000803e3d6000fd5b5050505050565b61187c614388565b603554604080517fd1946dbc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163d1946dbc91600480830192869291908290030181865afa1580156118eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261193191908101906159ee565b905060005b81518110156119c157600073ffffffffffffffffffffffffffffffffffffffff1682828151811061196957611969615178565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16146119af576119af8282815181106119a1576119a1615178565b602002602001015184610fe4565b806119b981615548565b915050611936565b505050565b6119ce613a4e565b60408051808201909152600281527f3230000000000000000000000000000000000000000000000000000000000000602082015282841115611a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600092169063c44b11f790602401602060405180830381865afa158015611aaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad391906156b5565b90508215611bcf5760408051808201909152600281527f323000000000000000000000000000000000000000000000000000000000000060208201526127108311611b4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50612710611b59848461451b565b11156040518060400160405280600281526020017f323000000000000000000000000000000000000000000000000000000000000081525090611bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50611c46565b60408051808201909152600281527f323000000000000000000000000000000000000000000000000000000000000060208201528215611c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50611c468561455e565b611c50818561470f565b611c5a81846147aa565b611c64818361484b565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050604080518781526020810187905290810185905273ffffffffffffffffffffffffffffffffffffffff881692507f637febbda9275aea2e85c0ff690444c8d87eb2e8339bbede9715abcc89cb0995915060600160405180910390a25050505050565b611d58613d19565b60408051808201909152600281527f313900000000000000000000000000000000000000000000000000000000000060208201526127106fffffffffffffffffffffffffffffffff83161115611ddb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50603554604080517f074b2e43000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163074b2e439160048083019260209291908290030181865afa158015611e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7091906158b3565b603554604080517f6a99c036000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff9091169163bcb6e5229185918491636a99c0369160048083019260209291908290030181865afa158015611eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1091906158b3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526fffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015611f7957600080fd5b505af1158015611f8d573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8086168252861660208201527f71aba182c9d0529b516de7a78bed74d49c207ef7e152f52f7ea5d8730138f6439350019050610a84565b611fe3613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207891906156b5565b905081156120fe5780516704000000000000001615156040518060400160405280600281526020017f3330000000000000000000000000000000000000000000000000000000000000815250906120fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b505b61210881836148ec565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b15801561217c57600080fd5b505af1158015612190573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f0b64d0941719acd363f1a6be3d8525d8ec9d71738f7445aabcd88d7939b472e783604051611163911515815260200190565b6121e6613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227b91906156b5565b90506122878183614931565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156122fb57600080fd5b505af115801561230f573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f0c4443d258a350d27dc50c378b2ebf165e6469725f786d21b30cab16823f558783604051611163911515815260200190565b612365613a4e565b80156123745761237482614976565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240991906156b5565b90506000612421825167400000000000000016151590565b905061242d8284614b0c565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156124a157600080fd5b505af11580156124b5573d6000803e3d6000fd5b5050604080518415158152861515602082015273ffffffffffffffffffffffffffffffffffffffff881693507f842a280b07e8e502a9101f32a3b768ebaba3655556dd674f0831900861fc674b925001610661565b612512613d19565b6035546040517fb0f0935500000000000000000000000000000000000000000000000000000000815273__$3ddc574512022f331a6a4c7e4bbb5c67b6$__9163b0f09355916118419173ffffffffffffffffffffffffffffffffffffffff169085906004016158e9565b612584613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156125f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261991906156b5565b805190915060d41c64ffffffffff1680612636576126368461455e565b6126408284614b51565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156126b457600080fd5b505af11580156126c8573d6000803e3d6000fd5b50505050826000141561275b576035546040517fe43e88a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063e43e88a190602401600060405180830381600087803b15801561274257600080fd5b505af1158015612756573d6000803e3d6000fd5b505050505b604080518281526020810185905273ffffffffffffffffffffffffffffffffffffffff8616917f6824a6c7fbc10d2979b1f1ccf2dd4ed0436541679a661dedb5c10bd4be8306829101610661565b6127b1613d19565b806127bf576127bf8261455e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285491906156b5565b90506128608183614bf5565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156128d457600080fd5b505af11580156128e8573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fc36c7d11ba01a5869d52aa4a3781939dab851cbc9ee6e7fdcedc7d58898a3f1e83604051611163911515815260200190565b61293e613d19565b6035546040517fb13c96a800000000000000000000000000000000000000000000000000000000815273__$3ddc574512022f331a6a4c7e4bbb5c67b6$__9163b13c96a8916118419173ffffffffffffffffffffffffffffffffffffffff16908590600401615aa0565b6129b0613a4e565b60408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261ffff8716612a20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5060408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261ffff8616612a91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b508461ffff168661ffff1611156040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5060408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261271061ffff861611612b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50612710612b9661ffff87811690871661451b565b11156040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612c06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50603554604080517fd1946dbc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163d1946dbc91600480830192869291908290030181865afa158015612c76573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612cbc91908101906159ee565b905060005b8151811015612ea457603554825160009173ffffffffffffffffffffffffffffffffffffffff169063c44b11f790859085908110612d0157612d01615178565b60200260200101516040518263ffffffff1660e01b8152600401612d41919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015612d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8291906156b5565b805190915060a81c60ff168a60ff161415612e9157805161ffff168961ffff16116040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50805160101c61ffff168861ffff16116040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b505b5080612e9c81615548565b915050612cc1565b50603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d579ea7d896040518060a001604052808b61ffff1681526020018a61ffff1681526020018961ffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152612f9b929190600401615bdf565b600060405180830381600087803b158015612fb557600080fd5b505af1158015612fc9573d6000803e3d6000fd5b505050508760ff167f0acf8b4a3cace10779798a89a206a0ae73a71b63acdd3be2801d39c2ef7ab3cb88888888888860405161300a96959493929190615c55565b60405180910390a25050505050505050565b6001805460ff168061302d5750303b155b80613039575060005481115b6130c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840161087f565b60015460ff1615801561310257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516908117909155604080517f026b1d5f000000000000000000000000000000000000000000000000000000008152905163026b1d5f916004808201926020929091908290030181865afa158015613199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bd9190615ca1565b603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905580156119c157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b61323d613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906156b5565b805190915060501c640fffffffff166132eb8284614c3a565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561335f57600080fd5b505af1158015613373573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fc51aca575985d521c5072ad11549bad77013bb786d57f30f94b40ed8f8dc9bc4925001610661565b6133cd613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561343e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346291906156b5565b905060ff8216156135ac576035546040517f6c6f6ae100000000000000000000000000000000000000000000000000000000815260ff8416600482015260009173ffffffffffffffffffffffffffffffffffffffff1690636c6f6ae190602401600060405180830381865afa1580156134df573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526135259190810190615cbe565b825190915060101c61ffff16816020015161ffff16116040518060400160405280600281526020017f3137000000000000000000000000000000000000000000000000000000000000815250906135a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b50505b805160009060a81c60ff1690506135c68260ff8516614cde565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561363a57600080fd5b505af115801561364e573d6000803e3d6000fd5b50506040805160ff80861682528716602082015273ffffffffffffffffffffffffffffffffffffffff881693507f5bb69795b6a2ea222d73a5f8939c23471a1f85a99c7ca43c207f1b71f10c6264925001610661565b6136ac613a4e565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561371d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374191906156b5565b905061374d8183614d7e565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156137c157600080fd5b505af11580156137d5573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fc8ff3cc5b0fddaa3e6ebbbd7438f43393e4ea30e88b80ad016c1bc094655034d83604051611163911515815260200190565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b79190615ca1565b6040517f13ee32e000000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906313ee32e090602401602060405180830381865afa158015613924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139489190615de9565b806139dc57506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156139b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139dc9190615de9565b6040518060400160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5050565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae29190615ca1565b6040517f674b5e4d00000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff82169063674b5e4d90602401602060405180830381865afa158015613b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b739190615de9565b80613c0757506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015613be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c079190615de9565b6040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b60408051808201909152600281527f37320000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115613ce9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517ffffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b179052565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dad9190615ca1565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015613e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3e9190615de9565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b60408051808201909152600281527f3730000000000000000000000000000000000000000000000000000000000000602082015261ffff821115613f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff1660989190911b179052565b603d81613f5b576000613f5e565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffff1660ff9190911690911b1790915250565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015614002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140269190615ca1565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015614093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b79190615de9565b8061414b57506040517f2500f2b600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690632500f2b690602401602060405180830381865afa158015614127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414b9190615de9565b6040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b603c816141c75760006141ca565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3637000000000000000000000000000000000000000000000000000000000000602082015261ffff82111561426f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1660409190911b179052565b60408051808201909152600281527f36390000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115614313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff1660749190911b179052565b603a81614351576000614354565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff1660ff9190911690911b1790915250565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa1580156143f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061441c9190615ca1565b6040517f2500f2b600000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690632500f2b690602401602060405180830381865afa158015614489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144ad9190615de9565b6040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525090613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761455057600080fd5b506127109102611388010490565b600080603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e860accb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145f29190615ca1565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a759060240161018060405180830381865afa158015614661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146859190615e06565b50505050505050505092509250508060001480156146a1575081155b6040518060400160405280600281526020017f3138000000000000000000000000000000000000000000000000000000000000815250906104cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b60408051808201909152600281527f3633000000000000000000000000000000000000000000000000000000000000602082015261ffff821115614780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016179052565b60408051808201909152600281527f3634000000000000000000000000000000000000000000000000000000000000602082015261ffff82111561481b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1660109190911b179052565b60408051808201909152600281527f3635000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156148bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1660209190911b179052565b603b816148fa5760006148fd565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff1660ff9190911690911b1790915250565b60398161493f576000614942565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b603454604080517fe860accb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163e860accb9160048083019260209291908290030181865afa1580156149e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a0a9190615ca1565b6040517f4d44ac4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529190911690634d44ac4f90602401602060405180830381865afa158015614a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a9c91906158d0565b60408051808201909152600281527f3930000000000000000000000000000000000000000000000000000000000000602082015290915081156119c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b603e81614b1a576000614b1d565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3733000000000000000000000000000000000000000000000000000000000000602082015264ffffffffff821115614bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517ff0000000000fffffffffffffffffffffffffffffffffffffffffffffffffffff1660d49190911b179052565b603881614c03576000614c06565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f36380000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115614cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517ffffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffff1660509190911b179052565b60408051808201909152600281527f3731000000000000000000000000000000000000000000000000000000000000602082015260ff821115614d4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f91906158a0565b5081517fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1660a89190911b179052565b603f81614d8c576000614d8f565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff1660ff9190911690911b1790915250565b60008060208385031215614dd657600080fd5b823567ffffffffffffffff80821115614dee57600080fd5b818501915085601f830112614e0257600080fd5b813581811115614e1157600080fd5b8660208260051b8501011115614e2657600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114614e5a57600080fd5b50565b8035614e6881614e38565b919050565b60008060408385031215614e8057600080fd5b8235614e8b81614e38565b946020939093013593505050565b60008060408385031215614eac57600080fd5b8235614eb781614e38565b91506020830135614ec781614e38565b809150509250929050565b6fffffffffffffffffffffffffffffffff81168114614e5a57600080fd5b600060208284031215614f0257600080fd5b8135614f0d81614ed2565b9392505050565b600060208284031215614f2657600080fd5b5035919050565b8015158114614e5a57600080fd5b60008060408385031215614f4e57600080fd5b8235614f5981614e38565b91506020830135614ec781614f2d565b600060208284031215614f7b57600080fd5b8135614f0d81614e38565b600060208284031215614f9857600080fd5b813567ffffffffffffffff811115614faf57600080fd5b820160c08185031215614f0d57600080fd5b600060208284031215614fd357600080fd5b8135614f0d81614f2d565b60008060008060808587031215614ff457600080fd5b8435614fff81614e38565b966020860135965060408601359560600135945092505050565b60006020828403121561502b57600080fd5b813567ffffffffffffffff81111561504257600080fd5b820160e08185031215614f0d57600080fd5b803560ff81168114614e6857600080fd5b61ffff81168114614e5a57600080fd5b600080600080600080600060c0888a03121561509057600080fd5b61509988615054565b965060208801356150a981615065565b955060408801356150b981615065565b945060608801356150c981615065565b935060808801356150d981614e38565b925060a088013567ffffffffffffffff808211156150f657600080fd5b818a0191508a601f83011261510a57600080fd5b81358181111561511957600080fd5b8b602082850101111561512b57600080fd5b60208301945080935050505092959891949750929550565b6000806040838503121561515657600080fd5b823561516181614e38565b915061516f60208401615054565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe218336030181126151db57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261521a57600080fd5b830160208101925035905067ffffffffffffffff81111561523a57600080fd5b80360383131561524957600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526152e3604082016152c984614e5d565b73ffffffffffffffffffffffffffffffffffffffff169052565b60006152f160208401614e5d565b73ffffffffffffffffffffffffffffffffffffffff16606083015261531860408401614e5d565b73ffffffffffffffffffffffffffffffffffffffff16608083015261533f60608401615054565b60ff1660a083015261535360808401614e5d565b73ffffffffffffffffffffffffffffffffffffffff1660c083015261537a60a08401614e5d565b73ffffffffffffffffffffffffffffffffffffffff1660e08301526153a160c08401614e5d565b6101006153c58185018373ffffffffffffffffffffffffffffffffffffffff169052565b6153d160e08601614e5d565b91506101206153f78186018473ffffffffffffffffffffffffffffffffffffffff169052565b615403828701876151e5565b935091506101e0610140818188015261542161022088018686615250565b945061542f838901896151e5565b945092507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06101608189880301818a015261546b878787615250565b9650615479838b018b6151e5565b9650945061018092508189880301838a0152615496878787615250565b96506154a4818b018b6151e5565b96509450506101a08189880301818a01526154c0878787615250565b96506154ce838b018b6151e5565b965094506101c092508189880301838a01526154eb878787615250565b96506154f9818b018b6151e5565b9650945050808887030183890152615512868686615250565b9550615520828a018a6151e5565b95509350808887030161020089015250505061553d838383615250565b979650505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156155fb576155fb6155a8565b60405290565b60405160a0810167ffffffffffffffff811182821017156155fb576155fb6155a8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561566b5761566b6155a8565b604052919050565b60006020828403121561568557600080fd5b6040516020810181811067ffffffffffffffff821117156156a8576156a86155a8565b6040529151825250919050565b6000602082840312156156c757600080fd5b614f0d8383615673565b8051614e6881614ed2565b805164ffffffffff81168114614e6857600080fd5b8051614e6881615065565b8051614e6881614e38565b60006101e0828403121561571a57600080fd5b6157226155d7565b61572c8484615673565b815261573a602084016156d1565b602082015261574b604084016156d1565b604082015261575c606084016156d1565b606082015261576d608084016156d1565b608082015261577e60a084016156d1565b60a082015261578f60c084016156dc565b60c08201526157a060e084016156f1565b60e08201526101006157b38185016156fc565b908201526101206157c58482016156fc565b908201526101406157d78482016156fc565b908201526101606157e98482016156fc565b908201526101806157fb8482016156d1565b908201526101a061580d8482016156d1565b908201526101c061581f8482016156d1565b908201529392505050565b60005b8381101561584557818101518382015260200161582d565b838111156104cf5750506000910152565b6000815180845261586e81602086016020860161582a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614f0d6020830184615856565b6000602082840312156158c557600080fd5b8151614f0d81614ed2565b6000602082840312156158e257600080fd5b5051919050565b600073ffffffffffffffffffffffffffffffffffffffff808516835260406020840152833561591781614e38565b81166040840152602084013561592c81614e38565b16606083015261593f60408401846151e5565b60c0608085015261595561010085018284615250565b91505061596560608501856151e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808685030160a087015261599b848385615250565b93506159a960808801614e5d565b73ffffffffffffffffffffffffffffffffffffffff811660c088015292506159d460a08801886151e5565b93509150808685030160e08701525061553d838383615250565b60006020808385031215615a0157600080fd5b825167ffffffffffffffff80821115615a1957600080fd5b818501915085601f830112615a2d57600080fd5b815181811115615a3f57615a3f6155a8565b8060051b9150615a50848301615624565b8181529183018401918481019088841115615a6a57600080fd5b938501935b83851015615a945784519250615a8483614e38565b8282529385019390850190615a6f565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8085168352604060208401528335615ace81614e38565b166040830152615ae060208401614e5d565b73ffffffffffffffffffffffffffffffffffffffff166060830152615b0760408401614e5d565b73ffffffffffffffffffffffffffffffffffffffff166080830152615b2f60608401846151e5565b60e060a0850152615b4561012085018284615250565b915050615b5560808501856151e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808685030160c0870152615b8b848385615250565b9350615b9960a08801614e5d565b73ffffffffffffffffffffffffffffffffffffffff811660e08801529250615bc460c08801886151e5565b9350915080868503016101008701525061553d838383615250565b60ff8316815260406020820152600061ffff8084511660408401528060208501511660608401528060408501511660808401525073ffffffffffffffffffffffffffffffffffffffff60608401511660a0830152608083015160a060c0840152615c4c60e0840182615856565b95945050505050565b600061ffff8089168352808816602084015280871660408401525073ffffffffffffffffffffffffffffffffffffffff8516606083015260a06080830152615a9460a083018486615250565b600060208284031215615cb357600080fd5b8151614f0d81614e38565b60006020808385031215615cd157600080fd5b825167ffffffffffffffff80821115615ce957600080fd5b9084019060a08287031215615cfd57600080fd5b615d05615601565b8251615d1081615065565b815282840151615d1f81615065565b818501526040830151615d3181615065565b60408201526060830151615d4481614e38565b6060820152608083015182811115615d5b57600080fd5b80840193505086601f840112615d7057600080fd5b825182811115615d8257615d826155a8565b615db2857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615624565b92508083528785828601011115615dc857600080fd5b615dd78186850187870161582a565b50608081019190915295945050505050565b600060208284031215615dfb57600080fd5b8151614f0d81614f2d565b6000806000806000806000806000806000806101808d8f031215615e2957600080fd5b8c519b5060208d01519a5060408d0151995060608d0151985060808d0151975060a08d0151965060c08d0151955060e08d015194506101008d015193506101208d015192506101408d01519150615e836101608e016156dc565b90509295989b509295989b509295989b56fea264697066735822122001dac2e7ba1c03f36af015a9940a8249669c16fe14a56cc365e85fa9f7f0b8a764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7AF635A6 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xAEB4FCC1 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD14A0983 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0xD4FE3F99 EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0xF213EF0E EQ PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAEB4FCC1 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0xB736AAEB EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0xBB01C37C EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xC19D61E4 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8A751A60 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x8A751A60 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x96E957C4 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xA7FA83B7 EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xAD4E6432 EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7AF635A6 EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x7C4E560B EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x8A493676 EQ PUSH2 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x48D9FBA9 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x63C9B860 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x294 JUMPI DUP1 PUSH4 0x682CF264 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x7626CDE3 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x7641F3D9 EQ PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x48D9FBA9 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x4B4E6753 EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0x571F03E5 EQ PUSH2 0x281 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1DF970BD GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x1DF970BD EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x26D2CEC2 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x38AE0CC3 EQ PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2FB45E6 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x145F5892 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x1FC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x1E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4DC3 JUMP JUMPDEST PUSH2 0x404 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E7 PUSH2 0x1F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x4D5 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x20A CALLDATASIZE PUSH1 0x4 PUSH2 0x4E99 JUMP JUMPDEST PUSH2 0x66F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x21D CALLDATASIZE PUSH1 0x4 PUSH2 0x4EF0 JUMP JUMPDEST PUSH2 0x7F4 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x230 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0xA90 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F14 JUMP JUMPDEST PUSH2 0xC8F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x256 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0xE59 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x269 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0xFE4 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x136F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F69 JUMP JUMPDEST PUSH2 0x14FF JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x15D0 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F86 JUMP JUMPDEST PUSH2 0x17CF JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2DB CALLDATASIZE PUSH1 0x4 PUSH2 0x4FC1 JUMP JUMPDEST PUSH2 0x1874 JUMP JUMPDEST PUSH2 0x2E8 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E7 PUSH2 0x308 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FDE JUMP JUMPDEST PUSH2 0x19C6 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x31B CALLDATASIZE PUSH1 0x4 PUSH2 0x4EF0 JUMP JUMPDEST PUSH2 0x1D50 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x1FDB JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x341 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x21DE JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x235D JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x367 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F86 JUMP JUMPDEST PUSH2 0x250A JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x37A CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x257C JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x38D CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x27A9 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5019 JUMP JUMPDEST PUSH2 0x2936 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5075 JUMP JUMPDEST PUSH2 0x29A8 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F69 JUMP JUMPDEST PUSH2 0x301C JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E6D JUMP JUMPDEST PUSH2 0x3235 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3EC CALLDATASIZE PUSH1 0x4 PUSH2 0x5143 JUMP JUMPDEST PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3B JUMP JUMPDEST PUSH2 0x36A4 JUMP JUMPDEST PUSH2 0x40C PUSH2 0x3823 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH20 0x0 PUSH4 0xDF59B8B2 DUP4 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x45D JUMPI PUSH2 0x45D PUSH2 0x5178 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x46F SWAP2 SWAP1 PUSH2 0x51A7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48C SWAP3 SWAP2 SWAP1 PUSH2 0x5299 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x4C7 SWAP1 PUSH2 0x5548 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x428 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4DD PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x54E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x572 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x58B DUP3 DUP5 PUSH2 0x3C75 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x613 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x9808B1FC5ABDE94EDF02FDDE393BEA0D2E4795999BA31695472848638B5C29F SWAP3 POP ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH2 0x677 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x70D SWAP2 SWAP1 PUSH2 0x5707 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x1D2118F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 AND SWAP1 PUSH4 0x1D2118F9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x79F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP9 AND SWAP4 POP PUSH32 0xDB8DADA53709CE4988154324196790C2E4A60C377E1256790946F83B87DB3C33 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x7FC PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND GT ISZERO PUSH2 0x888 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A99C03600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x6A99C036 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x91D SWAP2 SWAP1 PUSH2 0x58B3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x74B2E4300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0xBCB6E522 SWAP2 DUP4 SWAP2 PUSH4 0x74B2E43 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x998 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9BC SWAP2 SWAP1 PUSH2 0x58B3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xE7E0C75E1FC2D0BD83DC85D59F085B3E763107C392FB368E85572B292F1F5576 SWAP4 POP ADD SWAP1 POP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0xA98 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0xB09 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB7B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB9F SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0xBB5 DUP3 DUP5 PUSH2 0x3EAC JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xB5B0A963825337808B6E3154DE8E98027595A5CAD4219BB3A9BC55B192F4B391 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0xC97 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0xD08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x272D907200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x272D9072 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD9D SWAP2 SWAP1 PUSH2 0x58D0 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x3036B43900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP2 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x3036B439 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH32 0x30B17CB587A89089D003457C432F73E22AEEE93DE425E92224BA01080260ECD9 SWAP4 POP ADD SWAP1 POP PUSH2 0xA84 JUMP JUMPDEST PUSH2 0xE61 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xED2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEF6 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0xF02 DUP2 DUP4 PUSH2 0x3F4D JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF8A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE DUP6 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x74ADF6AAF58C08BC4F993640385E136522375EA3D1589A10D02ADBB906C67D1C SWAP4 POP ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH2 0xFEC PUSH2 0x3F92 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x105D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1081 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x108D DUP2 DUP4 PUSH2 0x41B9 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1115 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE188D542A5F11925D3A3AF33703CDD30A43CB3E8066A3CF68B1B57F61A5A94B5 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH2 0x1178 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0x11E9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x125B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x127F SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x40 SHR PUSH2 0xFFFF AND PUSH2 0x1295 DUP3 DUP5 PUSH2 0x41FE JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x131D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xB46E2B82B0C2CF3D7D9DECE53635E165C53E0EAA7A44F904D61A2B7174826AEF SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x1377 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x140C SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x1425 DUP3 DUP5 PUSH2 0x429F JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x14AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x263602682188540A2D633561C0B4453B7D8566285E99F9F6018B8EF2FACEF49 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x1507 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x63C9B86000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x63C9B860 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1588 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP3 POP PUSH32 0xEEEC4C06F7ADAD215CBDB4D2960896C83C26AEDCE02DDE76D36FA28588D62DA4 SWAP2 POP PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x15D8 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1649 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x166D SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x16EF JUMPI DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3838000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH8 0x800000000000000 AND ISZERO PUSH2 0x16ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP JUMPDEST PUSH2 0x16F9 DUP2 DUP4 PUSH2 0x4343 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1781 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2443BA28E8D1D88D531A3D90B981816A4F3B3C7F1FD4085C6029E81D1B7A570D DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x17D7 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF5B50E7000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xF5B50E70 SWAP2 PUSH2 0x1841 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x58E9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1859 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x186D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x187C PUSH2 0x4388 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD1946DBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xD1946DBC SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 DUP7 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1931 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x59EE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x19C1 JUMPI PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1969 JUMPI PUSH2 0x1969 PUSH2 0x5178 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x19AF JUMPI PUSH2 0x19AF DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x19A1 JUMPI PUSH2 0x19A1 PUSH2 0x5178 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0xFE4 JUMP JUMPDEST DUP1 PUSH2 0x19B9 DUP2 PUSH2 0x5548 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1936 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x19CE PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 DUP5 GT ISZERO PUSH2 0x1A3D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AAF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AD3 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP DUP3 ISZERO PUSH2 0x1BCF JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP4 GT PUSH2 0x1B4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH2 0x2710 PUSH2 0x1B59 DUP5 DUP5 PUSH2 0x451B JUMP JUMPDEST GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1BC9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH2 0x1C46 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0x1C3C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH2 0x1C46 DUP6 PUSH2 0x455E JUMP JUMPDEST PUSH2 0x1C50 DUP2 DUP6 PUSH2 0x470F JUMP JUMPDEST PUSH2 0x1C5A DUP2 DUP5 PUSH2 0x47AA JUMP JUMPDEST PUSH2 0x1C64 DUP2 DUP4 PUSH2 0x484B JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP8 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP3 POP PUSH32 0x637FEBBDA9275AEA2E85C0FF690444C8D87EB2E8339BBEDE9715ABCC89CB0995 SWAP2 POP PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1D58 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND GT ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x74B2E4300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x74B2E43 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E70 SWAP2 SWAP1 PUSH2 0x58B3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A99C03600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0xBCB6E522 SWAP2 DUP6 SWAP2 DUP5 SWAP2 PUSH4 0x6A99C036 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F10 SWAP2 SWAP1 PUSH2 0x58B3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F8D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x71ABA182C9D0529B516DE7A78BED74D49C207EF7E152F52F7EA5D8730138F643 SWAP4 POP ADD SWAP1 POP PUSH2 0xA84 JUMP JUMPDEST PUSH2 0x1FE3 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2054 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2078 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP DUP2 ISZERO PUSH2 0x20FE JUMPI DUP1 MLOAD PUSH8 0x400000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x20FC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP JUMPDEST PUSH2 0x2108 DUP2 DUP4 PUSH2 0x48EC JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x217C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2190 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB64D0941719ACD363F1A6BE3D8525D8EC9D71738F7445AABCD88D7939B472E7 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x21E6 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2257 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x227B SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x2287 DUP2 DUP4 PUSH2 0x4931 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x230F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC4443D258A350D27DC50C378B2EBF165E6469725F786D21B30CAB16823F5587 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x2365 PUSH2 0x3A4E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2374 JUMPI PUSH2 0x2374 DUP3 PUSH2 0x4976 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2409 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2421 DUP3 MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x242D DUP3 DUP5 PUSH2 0x4B0C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 ISZERO ISZERO DUP2 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x842A280B07E8E502A9101F32A3B768EBABA3655556DD674F0831900861FC674B SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x2512 PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB0F0935500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xB0F09355 SWAP2 PUSH2 0x1841 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x58E9 JUMP JUMPDEST PUSH2 0x2584 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2619 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND DUP1 PUSH2 0x2636 JUMPI PUSH2 0x2636 DUP5 PUSH2 0x455E JUMP JUMPDEST PUSH2 0x2640 DUP3 DUP5 PUSH2 0x4B51 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26C8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH1 0x0 EQ ISZERO PUSH2 0x275B JUMPI PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE43E88A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xE43E88A1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2742 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2756 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP2 PUSH32 0x6824A6C7FBC10D2979B1F1CCF2DD4ED0436541679A661DEDB5C10BD4BE830682 SWAP2 ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x27B1 PUSH2 0x3D19 JUMP JUMPDEST DUP1 PUSH2 0x27BF JUMPI PUSH2 0x27BF DUP3 PUSH2 0x455E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2854 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x2860 DUP2 DUP4 PUSH2 0x4BF5 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC36C7D11BA01A5869D52AA4A3781939DAB851CBC9EE6E7FDCEDC7D58898A3F1E DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x293E PUSH2 0x3D19 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB13C96A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xB13C96A8 SWAP2 PUSH2 0x1841 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5AA0 JUMP JUMPDEST PUSH2 0x29B0 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP8 AND PUSH2 0x2A20 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP7 AND PUSH2 0x2A91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP5 PUSH2 0xFFFF AND DUP7 PUSH2 0xFFFF AND GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2B0C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH2 0xFFFF DUP7 AND GT PUSH2 0x2B81 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH2 0x2710 PUSH2 0x2B96 PUSH2 0xFFFF DUP8 DUP2 AND SWAP1 DUP8 AND PUSH2 0x451B JUMP JUMPDEST GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2C06 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD1946DBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xD1946DBC SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 DUP7 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2CBC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x59EE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x2EA4 JUMPI PUSH1 0x35 SLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xC44B11F7 SWAP1 DUP6 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x2D01 JUMPI PUSH2 0x2D01 PUSH2 0x5178 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2D41 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D82 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xA8 SHR PUSH1 0xFF AND DUP11 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2E91 JUMPI DUP1 MLOAD PUSH2 0xFFFF AND DUP10 PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2E11 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP1 MLOAD PUSH1 0x10 SHR PUSH2 0xFFFF AND DUP9 PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2E8F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x2E9C DUP2 PUSH2 0x5548 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2CC1 JUMP JUMPDEST POP PUSH1 0x35 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD579EA7D DUP10 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP2 MSTORE POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x2F9B SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5BDF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2FC9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP8 PUSH1 0xFF AND PUSH32 0xACF8B4A3CACE10779798A89A206A0AE73A71B63ACDD3BE2801D39C2EF7AB3CB DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x300A SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5C55 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x302D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x3039 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x30C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x87F JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x3102 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x26B1D5F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x26B1D5F SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3199 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31BD SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x19C1 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x323D PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32D2 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x32EB DUP3 DUP5 PUSH2 0x4C3A JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x335F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3373 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xC51ACA575985D521C5072AD11549BAD77013BB786D57F30F94B40ED8F8DC9BC4 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x33CD PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x343E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3462 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x35AC JUMPI PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6C6F6AE100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x6C6F6AE1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x3525 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5CBE JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP PUSH1 0x10 SHR PUSH2 0xFFFF AND DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3137000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x35A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP POP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xA8 SHR PUSH1 0xFF AND SWAP1 POP PUSH2 0x35C6 DUP3 PUSH1 0xFF DUP6 AND PUSH2 0x4CDE JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x363A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x364E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF DUP1 DUP7 AND DUP3 MSTORE DUP8 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x5BB69795B6A2EA222D73A5F8939C23471A1F85A99C7CA43C207F1B71F10C6264 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x36AC PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x371D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3741 SWAP2 SWAP1 PUSH2 0x56B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x374D DUP2 DUP4 PUSH2 0x4D7E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC8FF3CC5B0FDDAA3E6EBBBD7438F43393E4EA30E88B80AD016C1BC094655034D DUP4 PUSH1 0x40 MLOAD PUSH2 0x1163 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3893 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38B7 SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x13EE32E000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x13EE32E0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3924 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3948 SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST DUP1 PUSH2 0x39DC JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39DC SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3ABE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AE2 SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x674B5E4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x674B5E4D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B73 SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST DUP1 PUSH2 0x3C07 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BE3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3C07 SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3CE9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xB0 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3DAD SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E3E SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x3F1D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x98 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3D DUP2 PUSH2 0x3F5B JUMPI PUSH1 0x0 PUSH2 0x3F5E JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4002 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4026 SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4093 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x40B7 SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST DUP1 PUSH2 0x414B JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x2500F2B600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x2500F2B6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4127 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x414B SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3300000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x3C DUP2 PUSH2 0x41C7 JUMPI PUSH1 0x0 PUSH2 0x41CA JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x426F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF AND PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4313 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x74 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3A DUP2 PUSH2 0x4351 JUMPI PUSH1 0x0 PUSH2 0x4354 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x43F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x441C SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x2500F2B600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x2500F2B6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4489 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x44AD SWAP2 SWAP1 PUSH2 0x5DE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3A4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x34 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE860ACCB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x45CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x45F2 SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x180 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4661 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4685 SWAP2 SWAP1 PUSH2 0x5E06 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP SWAP3 POP SWAP3 POP POP DUP1 PUSH1 0x0 EQ DUP1 ISZERO PUSH2 0x46A1 JUMPI POP DUP2 ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3138000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x4CF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x4780 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x481B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF AND PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x48BC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF AND PUSH1 0x20 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3B DUP2 PUSH2 0x48FA JUMPI PUSH1 0x0 PUSH2 0x48FD JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0x493F JUMPI PUSH1 0x0 PUSH2 0x4942 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xE860ACCB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xE860ACCB SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x49E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A0A SWAP2 SWAP1 PUSH2 0x5CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4D44AC4F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4D44AC4F SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A78 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A9C SWAP2 SWAP1 PUSH2 0x58D0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3930000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 ISZERO PUSH2 0x19C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST PUSH1 0x3E DUP2 PUSH2 0x4B1A JUMPI PUSH1 0x0 PUSH2 0x4B1D JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3733000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4BC5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xD4 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x38 DUP2 PUSH2 0x4C03 JUMPI PUSH1 0x0 PUSH2 0x4C06 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4CAE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF AND PUSH1 0x50 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0x4D4E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x87F SWAP2 SWAP1 PUSH2 0x58A0 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3F DUP2 PUSH2 0x4D8C JUMPI PUSH1 0x0 PUSH2 0x4D8F JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4DD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4DEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4E11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4E5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x4E68 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4E80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4E8B DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4EAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4EB7 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4EC7 DUP2 PUSH2 0x4E38 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4E5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4F0D DUP2 PUSH2 0x4ED2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4E5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4F4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4F59 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4EC7 DUP2 PUSH2 0x4F2D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4F0D DUP2 PUSH2 0x4E38 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4FAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xC0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x4F0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4FD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4F0D DUP2 PUSH2 0x4F2D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4FF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4FFF DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP6 PUSH1 0x60 ADD CALLDATALOAD SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x502B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5042 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xE0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x4F0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x4E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x4E5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xC0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5090 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5099 DUP9 PUSH2 0x5054 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x50A9 DUP2 PUSH2 0x5065 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x50B9 DUP2 PUSH2 0x5065 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x50C9 DUP2 PUSH2 0x5065 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x50D9 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x50F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP DUP11 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x510A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x512B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5156 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5161 DUP2 PUSH2 0x4E38 JUMP JUMPDEST SWAP2 POP PUSH2 0x516F PUSH1 0x20 DUP5 ADD PUSH2 0x5054 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE21 DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x51DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x521A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x523A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x5249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x52E3 PUSH1 0x40 DUP3 ADD PUSH2 0x52C9 DUP5 PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x52F1 PUSH1 0x20 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x5318 PUSH1 0x40 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x533F PUSH1 0x60 DUP5 ADD PUSH2 0x5054 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x5353 PUSH1 0x80 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x537A PUSH1 0xA0 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x53A1 PUSH1 0xC0 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH2 0x100 PUSH2 0x53C5 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x53D1 PUSH1 0xE0 DUP7 ADD PUSH2 0x4E5D JUMP JUMPDEST SWAP2 POP PUSH2 0x120 PUSH2 0x53F7 DUP2 DUP7 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x5403 DUP3 DUP8 ADD DUP8 PUSH2 0x51E5 JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0x1E0 PUSH2 0x140 DUP2 DUP2 DUP9 ADD MSTORE PUSH2 0x5421 PUSH2 0x220 DUP9 ADD DUP7 DUP7 PUSH2 0x5250 JUMP JUMPDEST SWAP5 POP PUSH2 0x542F DUP4 DUP10 ADD DUP10 PUSH2 0x51E5 JUMP JUMPDEST SWAP5 POP SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 PUSH2 0x160 DUP2 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x546B DUP8 DUP8 DUP8 PUSH2 0x5250 JUMP JUMPDEST SWAP7 POP PUSH2 0x5479 DUP4 DUP12 ADD DUP12 PUSH2 0x51E5 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH2 0x180 SWAP3 POP DUP2 DUP10 DUP9 SUB ADD DUP4 DUP11 ADD MSTORE PUSH2 0x5496 DUP8 DUP8 DUP8 PUSH2 0x5250 JUMP JUMPDEST SWAP7 POP PUSH2 0x54A4 DUP2 DUP12 ADD DUP12 PUSH2 0x51E5 JUMP JUMPDEST SWAP7 POP SWAP5 POP POP PUSH2 0x1A0 DUP2 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x54C0 DUP8 DUP8 DUP8 PUSH2 0x5250 JUMP JUMPDEST SWAP7 POP PUSH2 0x54CE DUP4 DUP12 ADD DUP12 PUSH2 0x51E5 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH2 0x1C0 SWAP3 POP DUP2 DUP10 DUP9 SUB ADD DUP4 DUP11 ADD MSTORE PUSH2 0x54EB DUP8 DUP8 DUP8 PUSH2 0x5250 JUMP JUMPDEST SWAP7 POP PUSH2 0x54F9 DUP2 DUP12 ADD DUP12 PUSH2 0x51E5 JUMP JUMPDEST SWAP7 POP SWAP5 POP POP DUP1 DUP9 DUP8 SUB ADD DUP4 DUP10 ADD MSTORE PUSH2 0x5512 DUP7 DUP7 DUP7 PUSH2 0x5250 JUMP JUMPDEST SWAP6 POP PUSH2 0x5520 DUP3 DUP11 ADD DUP11 PUSH2 0x51E5 JUMP JUMPDEST SWAP6 POP SWAP4 POP DUP1 DUP9 DUP8 SUB ADD PUSH2 0x200 DUP10 ADD MSTORE POP POP POP PUSH2 0x553D DUP4 DUP4 DUP4 PUSH2 0x5250 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x55A1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x55FB JUMPI PUSH2 0x55FB PUSH2 0x55A8 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x55FB JUMPI PUSH2 0x55FB PUSH2 0x55A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x566B JUMPI PUSH2 0x566B PUSH2 0x55A8 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5685 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x56A8 JUMPI PUSH2 0x56A8 PUSH2 0x55A8 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x56C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F0D DUP4 DUP4 PUSH2 0x5673 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4E68 DUP2 PUSH2 0x4ED2 JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x4E68 DUP2 PUSH2 0x5065 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4E68 DUP2 PUSH2 0x4E38 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x571A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5722 PUSH2 0x55D7 JUMP JUMPDEST PUSH2 0x572C DUP5 DUP5 PUSH2 0x5673 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x573A PUSH1 0x20 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x574B PUSH1 0x40 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x575C PUSH1 0x60 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x576D PUSH1 0x80 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x577E PUSH1 0xA0 DUP5 ADD PUSH2 0x56D1 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x578F PUSH1 0xC0 DUP5 ADD PUSH2 0x56DC JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x57A0 PUSH1 0xE0 DUP5 ADD PUSH2 0x56F1 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x57B3 DUP2 DUP6 ADD PUSH2 0x56FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x57C5 DUP5 DUP3 ADD PUSH2 0x56FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x57D7 DUP5 DUP3 ADD PUSH2 0x56FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x57E9 DUP5 DUP3 ADD PUSH2 0x56FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x57FB DUP5 DUP3 ADD PUSH2 0x56D1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x580D DUP5 DUP3 ADD PUSH2 0x56D1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x581F DUP5 DUP3 ADD PUSH2 0x56D1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5845 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x582D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4CF JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x586E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x582A JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4F0D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4F0D DUP2 PUSH2 0x4ED2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP4 CALLDATALOAD PUSH2 0x5917 DUP2 PUSH2 0x4E38 JUMP JUMPDEST DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x592C DUP2 PUSH2 0x4E38 JUMP JUMPDEST AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x593F PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x51E5 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x5955 PUSH2 0x100 DUP6 ADD DUP3 DUP5 PUSH2 0x5250 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5965 PUSH1 0x60 DUP6 ADD DUP6 PUSH2 0x51E5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x599B DUP5 DUP4 DUP6 PUSH2 0x5250 JUMP JUMPDEST SWAP4 POP PUSH2 0x59A9 PUSH1 0x80 DUP9 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x59D4 PUSH1 0xA0 DUP9 ADD DUP9 PUSH2 0x51E5 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE POP PUSH2 0x553D DUP4 DUP4 DUP4 PUSH2 0x5250 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5A01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5A19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5A2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x5A3F JUMPI PUSH2 0x5A3F PUSH2 0x55A8 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x5A50 DUP5 DUP4 ADD PUSH2 0x5624 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x5A6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x5A94 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x5A84 DUP4 PUSH2 0x4E38 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x5A6F JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP4 CALLDATALOAD PUSH2 0x5ACE DUP2 PUSH2 0x4E38 JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x5AE0 PUSH1 0x20 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x5B07 PUSH1 0x40 DUP5 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x5B2F PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x51E5 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x5B45 PUSH2 0x120 DUP6 ADD DUP3 DUP5 PUSH2 0x5250 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5B55 PUSH1 0x80 DUP6 ADD DUP6 PUSH2 0x51E5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x5B8B DUP5 DUP4 DUP6 PUSH2 0x5250 JUMP JUMPDEST SWAP4 POP PUSH2 0x5B99 PUSH1 0xA0 DUP9 ADD PUSH2 0x4E5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xE0 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x5BC4 PUSH1 0xC0 DUP9 ADD DUP9 PUSH2 0x51E5 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH2 0x100 DUP8 ADD MSTORE POP PUSH2 0x553D DUP4 DUP4 DUP4 PUSH2 0x5250 JUMP JUMPDEST PUSH1 0xFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x5C4C PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x5856 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP10 AND DUP4 MSTORE DUP1 DUP9 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP8 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x5A94 PUSH1 0xA0 DUP4 ADD DUP5 DUP7 PUSH2 0x5250 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5CB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4F0D DUP2 PUSH2 0x4E38 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5CE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP5 ADD SWAP1 PUSH1 0xA0 DUP3 DUP8 SUB SLT ISZERO PUSH2 0x5CFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D05 PUSH2 0x5601 JUMP JUMPDEST DUP3 MLOAD PUSH2 0x5D10 DUP2 PUSH2 0x5065 JUMP JUMPDEST DUP2 MSTORE DUP3 DUP5 ADD MLOAD PUSH2 0x5D1F DUP2 PUSH2 0x5065 JUMP JUMPDEST DUP2 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5D31 DUP2 PUSH2 0x5065 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x5D44 DUP2 PUSH2 0x4E38 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x5D5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP7 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x5D70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x5D82 JUMPI PUSH2 0x5D82 PUSH2 0x55A8 JUMP JUMPDEST PUSH2 0x5DB2 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x5624 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP8 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x5DC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5DD7 DUP2 DUP7 DUP6 ADD DUP8 DUP8 ADD PUSH2 0x582A JUMP JUMPDEST POP PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5DFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4F0D DUP2 PUSH2 0x4F2D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x180 DUP14 DUP16 SUB SLT ISZERO PUSH2 0x5E29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP13 MLOAD SWAP12 POP PUSH1 0x20 DUP14 ADD MLOAD SWAP11 POP PUSH1 0x40 DUP14 ADD MLOAD SWAP10 POP PUSH1 0x60 DUP14 ADD MLOAD SWAP9 POP PUSH1 0x80 DUP14 ADD MLOAD SWAP8 POP PUSH1 0xA0 DUP14 ADD MLOAD SWAP7 POP PUSH1 0xC0 DUP14 ADD MLOAD SWAP6 POP PUSH1 0xE0 DUP14 ADD MLOAD SWAP5 POP PUSH2 0x100 DUP14 ADD MLOAD SWAP4 POP PUSH2 0x120 DUP14 ADD MLOAD SWAP3 POP PUSH2 0x140 DUP14 ADD MLOAD SWAP2 POP PUSH2 0x5E83 PUSH2 0x160 DUP15 ADD PUSH2 0x56DC JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD 0xDA 0xC2 0xE7 0xBA SHR SUB RETURN PUSH11 0xF015A9940A8249669C16FE EQ 0xA5 PUSH13 0xC365E85FA9F7F0B8A764736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"1063:18368:113:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2579:291;;;;;;:::i;:::-;;:::i;:::-;;14628:476;;;;;;:::i;:::-;;:::i;15144:::-;;;;;;:::i;:::-;;:::i;16997:564::-;;;;;;:::i;:::-;;:::i;11219:542::-;;;;;;:::i;:::-;;:::i;15986:425::-;;;;;;:::i;:::-;;:::i;7759:378::-;;;;;;:::i;:::-;;:::i;8177:317::-;;;;;;:::i;:::-;;:::i;8534:556::-;;;;;;:::i;:::-;;:::i;10757:422::-;;;;;;:::i;:::-;;:::i;2910:135::-;;;;;;:::i;:::-;;:::i;3794:457::-;;;;;;:::i;:::-;;:::i;3306:202::-;;;;;;:::i;:::-;;:::i;15660:286::-;;;;;;:::i;:::-;;:::i;2166:51::-;;2214:3;2166:51;;;;;3830:25:124;;;3818:2;3803:18;2166:51:113;;;;;;;4291:1762;;;;;;:::i;:::-;;:::i;16451:506::-;;;;;;:::i;:::-;;:::i;6093:484::-;;;;;;:::i;:::-;;:::i;7403:316::-;;;;;;:::i;:::-;;:::i;9767:488::-;;;;;;:::i;:::-;;:::i;3548:206::-;;;;;;:::i;:::-;;:::i;9130:597::-;;;;;;:::i;:::-;;:::i;7011:352::-;;;;;;:::i;:::-;;:::i;3085:181::-;;;;;;:::i;:::-;;:::i;11801:1999::-;;;;;;:::i;:::-;;:::i;2378:161::-;;;;;;:::i;:::-;;:::i;10295:422::-;;;;;;:::i;:::-;;:::i;13840:748::-;;;;;;:::i;:::-;;:::i;6617:354::-;;;;;;:::i;:::-;;:::i;2579:291::-;1952:31;:29;:31::i;:::-;2739:5:::1;::::0;::::1;;2720:16;2750:116;2770:16:::0;;::::1;2750:116;;;2801:17;:36;2838:10;2850:5;;2856:1;2850:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2801:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2788:3;;;;;:::i;:::-;;;;2750:116;;;;2714:156;2579:291:::0;;:::o;14628:476::-;2127:23;:21;:23::i;:::-;14813:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;14813:29:113::1;::::0;::::1;12436:74:124::0;14756:54:113::1;::::0;14813:5:::1;::::0;:22:::1;::::0;12409:18:124;;14813:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19491:9:88::0;;;;-1:-1:-1;4411:3:88;19490:77;;;14917:52:113::1;19491:9:88::0;14950:18:113;14917:32:::1;:52::i;:::-;14975:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;14975:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;14975:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;14975:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15030:69:113::1;::::0;;14849:25:124;;;14905:2;14890:18;;14883:34;;;15030:69:113::1;::::0;::::1;::::0;-1:-1:-1;15030:69:113::1;::::0;-1:-1:-1;14822:18:124;15030:69:113::1;;;;;;;;14750:354;;14628:476:::0;;:::o;15144:::-;2127:23;:21;:23::i;:::-;15334:5:::1;::::0;:27:::1;::::0;;;;:5:::1;12454:55:124::0;;;15334:27:113::1;::::0;::::1;12436:74:124::0;15295:36:113::1;::::0;15334:5:::1;::::0;:20:::1;::::0;12409:18:124;;15334:27:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15400:35;::::0;::::1;::::0;15441:5:::1;::::0;:74:::1;::::0;;;;:5:::1;17439:15:124::0;;;15441:74:113::1;::::0;::::1;17421:34:124::0;17491:15;;;17471:18;;;17464:43;15400:35:113;;-1:-1:-1;15400:35:113;;15441:5:::1;::::0;:43:::1;::::0;17333:18:124;;15441:74:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15526:89:113::1;::::0;;::::1;17439:15:124::0;;;17421:34;;17491:15;;;17486:2;17471:18;;17464:43;15526:89:113;::::1;::::0;-1:-1:-1;15526:89:113::1;::::0;-1:-1:-1;17333:18:124;15526:89:113::1;17186:327:124::0;16997:564:113;1435:16;:14;:16::i;:::-;17212:32:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:106::1;17139:65:113;::::0;::::1;;;17124:126;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;17296:5:113::1;::::0;:37:::1;::::0;;;;;;;17256::::1;::::0;17296:5:::1;;::::0;:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:5;:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17339:5;::::0;17369:31:::1;::::0;;;;;;;17256:77;;-1:-1:-1;17339:5:113::1;::::0;;::::1;::::0;:29:::1;::::0;:5;;17369:29:::1;::::0;:31:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;17339:5;17369:31:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17339:93;::::0;;::::1;::::0;;;;;;18768:34:124;18829:15;;;17339:93:113::1;::::0;::::1;18811:34:124::0;18881:15;;;18861:18;;;18854:43;18731:18;;17339:93:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17443:113:113::1;::::0;;18768:34:124;18829:15;;;18811:34;;18881:15;;18876:2;18861:18;;18854:43;17443:113:113::1;::::0;-1:-1:-1;18731:18:124;;-1:-1:-1;17443:113:113::1;;;;;;;;17118:443;16997:564:::0;:::o;11219:542::-;2127:23;:21;:23::i;:::-;11394:39:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:106::1;11350:42:113::0;::::1;;11342:92;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;11497:5:113::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;11497:29:113::1;::::0;::::1;12436:74:124::0;11440:54:113::1;::::0;11497:5:::1;::::0;:22:::1;::::0;12409:18:124;;11497:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18604:9:88::0;;;;-1:-1:-1;4270:3:88;18603:91;;;11596:47:113::1;18604:9:88::0;11636:6:113;11596:39:::1;:47::i;:::-;11649:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;11649:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;11649:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;11649:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11704:52:113::1;::::0;;14849:25:124;;;14905:2;14890:18;;14883:34;;;11704:52:113::1;::::0;::::1;::::0;-1:-1:-1;11704:52:113::1;::::0;-1:-1:-1;14822:18:124;11704:52:113::1;14675:248:124::0;15986:425:113;1435:16;:14;:16::i;:::-;16166:34:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:106::1;16102:56:113::0;::::1;;16087:119;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16243:5:113::1;::::0;:27:::1;::::0;;;;;;;16212:28:::1;::::0;16243:5:::1;;::::0;:25:::1;::::0;:27:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:5;:27:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16276:5;::::0;:51:::1;::::0;;;;::::1;::::0;::::1;3830:25:124::0;;;16212:58:113;;-1:-1:-1;16276:5:113::1;;::::0;:29:::1;::::0;3803:18:124;;16276:51:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16338:68:113::1;::::0;;14849:25:124;;;14905:2;14890:18;;14883:34;;;16338:68:113::1;::::0;-1:-1:-1;14822:18:124;;-1:-1:-1;16338:68:113::1;14675:248:124::0;7759:378:113;2127:23;:21;:23::i;:::-;7939:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;7939:29:113::1;::::0;::::1;12436:74:124::0;7882:54:113::1;::::0;7939:5:::1;::::0;:22:::1;::::0;12409:18:124;;7939:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7882:86:::0;-1:-1:-1;7974:50:113::1;7882:86:::0;8013:10;7974:38:::1;:50::i;:::-;8030:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;8030:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;8030:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;8030:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8085:47:113::1;::::0;;19295:42:124;19283:55;;19265:74;;19382:14;;19375:22;19370:2;19355:18;;19348:50;8085:47:113::1;::::0;-1:-1:-1;19238:18:124;;-1:-1:-1;8085:47:113::1;;;;;;;7876:261;7759:378:::0;;:::o;8177:317::-;1764:27;:25;:27::i;:::-;8334:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;8334:29:113::1;::::0;::::1;12436:74:124::0;8277:54:113::1;::::0;8334:5:::1;::::0;:22:::1;::::0;12409:18:124;;8334:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8277:86:::0;-1:-1:-1;8369:31:113::1;8277:86:::0;8393:6;8369:23:::1;:31::i;:::-;8406:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;8406:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;8406:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;8406:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8475:5;8461:28;;;8482:6;8461:28;;;;19574:14:124::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;8461:28:113::1;;;;;;;;8271:223;8177:317:::0;;:::o;8534:556::-;2127:23;:21;:23::i;:::-;8720:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:106::1;8666:52:113::0;::::1;;8658:92;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8813:5:113::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;8813:29:113::1;::::0;::::1;12436:74:124::0;8756:54:113::1;::::0;8813:5:::1;::::0;:22:::1;::::0;12409:18:124;;8813:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15238:9:88::0;;;;-1:-1:-1;4063:2:88;15237:71;;;8913:48:113::1;15238:9:88::0;8944:16:113;8913:30:::1;:48::i;:::-;8967:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;8967:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;8967:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;8967:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;9022:63:113::1;::::0;;14849:25:124;;;14905:2;14890:18;;14883:34;;;9022:63:113::1;::::0;::::1;::::0;-1:-1:-1;9022:63:113::1;::::0;-1:-1:-1;14822:18:124;9022:63:113::1;14675:248:124::0;10757:422:113;2127:23;:21;:23::i;:::-;10930:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;10930:29:113::1;::::0;::::1;12436:74:124::0;10873:54:113::1;::::0;10930:5:::1;::::0;:22:::1;::::0;12409:18:124;;10930:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16762:9:88::0;;;;-1:-1:-1;4191:3:88;16761:63;;;11022:40:113::1;16762:9:88::0;11049:12:113;11022:26:::1;:40::i;:::-;11068:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;11068:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;11068:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;11068:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11123:51:113::1;::::0;;14849:25:124;;;14905:2;14890:18;;14883:34;;;11123:51:113::1;::::0;::::1;::::0;-1:-1:-1;11123:51:113::1;::::0;-1:-1:-1;14822:18:124;11123:51:113::1;14675:248:124::0;2910:135:113;1435:16;:14;:16::i;:::-;2984:5:::1;::::0;:24:::1;::::0;;;;:5:::1;12454:55:124::0;;;2984:24:113::1;::::0;::::1;12436:74:124::0;2984:5:113;;::::1;::::0;:17:::1;::::0;12409:18:124;;2984:24:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3019:21:113::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;3019:21:113::1;::::0;-1:-1:-1;3019:21:113;;::::1;2910:135:::0;:::o;3794:457::-;2127:23;:21;:23::i;:::-;3954:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;3954:29:113::1;::::0;::::1;12436:74:124::0;3897:54:113::1;::::0;3954:5:::1;::::0;:22:::1;::::0;12409:18:124;;3954:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3897:86;;3994:7;3989:117;;14434:9:88::0;;4067:31:113::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;14446:22:88;14434:34;14433:41;4011:88:113::1;;;;;;;;;;;;;:::i;:::-;;3989:117;4111:42;:13:::0;4145:7;4111:33:::1;:42::i;:::-;4159:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;4159:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;4159:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;4159:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4231:5;4214:32;;;4238:7;4214:32;;;;19574:14:124::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;3306:202:113;1435:16;:14;:16::i;:::-;3490:5:::1;::::0;3443:60:::1;::::0;;;;:17:::1;::::0;:46:::1;::::0;:60:::1;::::0;3490:5:::1;;::::0;3497;;3443:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3306:202:::0;:::o;15660:286::-;1590:21;:19;:21::i;:::-;15766:5:::1;::::0;:23:::1;::::0;;;;;;;15738:25:::1;::::0;15766:5:::1;;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;15738:25;;15766:23;;;;;;;:5;:23:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;15738:51;;15801:9;15796:146;15820:8;:15;15816:1;:19;15796:146;;;15877:1;15854:25;;:8;15863:1;15854:11;;;;;;;;:::i;:::-;;;;;;;:25;;;15850:86;;15891:36;15907:8;15916:1;15907:11;;;;;;;;:::i;:::-;;;;;;;15920:6;15891:15;:36::i;:::-;15837:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15796:146;;;;15732:214;15660:286:::0;:::o;4291:1762::-;2127:23;:21;:23::i;:::-;4704:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;4675:27;;::::1;;4667:67;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;4798:5:113::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;4798:29:113::1;::::0;::::1;12436:74:124::0;4741:54:113::1;::::0;4798:5:::1;::::0;:22:::1;::::0;12409:18:124;;4798:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4741:86:::0;-1:-1:-1;4838:25:113;;4834:916:::1;;5082:29;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:106::1;5029:51:113::0;::::1;5021:91;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;524:3:106::1;5326:49:113;:20:::0;5358:16;5326:31:::1;:49::i;:::-;:85;;5421:29;;;;;;;;;;;;;;;;::::0;5309:149:::1;;;;;;;;;;;;;;:::i;:::-;;4834:916;;;5510:29;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;5487:21;;5479:61:::1;;;;;;;;;;;;;:::i;:::-;;5719:24;5737:5;5719:17;:24::i;:::-;5756:25;:13:::0;5777:3;5756:20:::1;:25::i;:::-;5787:59;:13:::0;5825:20;5787:37:::1;:59::i;:::-;5852:51;:13:::0;5886:16;5852:33:::1;:51::i;:::-;5910:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;5910:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;5910:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;5910:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5966:82:113::1;::::0;;22459:25:124;;;22515:2;22500:18;;22493:34;;;22543:18;;;22536:34;;;5966:82:113::1;::::0;::::1;::::0;-1:-1:-1;5966:82:113::1;::::0;-1:-1:-1;22447:2:124;22432:18;5966:82:113::1;;;;;;;4472:1581;4291:1762:::0;;;;:::o;16451:506::-;1435:16;:14;:16::i;:::-;16651:32:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:106::1;16583:60:113;::::0;::::1;;;16568:121;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16730:5:113::1;::::0;:31:::1;::::0;;;;;;;16695:32:::1;::::0;16730:5:::1;;::::0;:29:::1;::::0;:31:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:5;:31:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16767:5;::::0;16823:37:::1;::::0;;;;;;;16695:66;;-1:-1:-1;16767:5:113::1;::::0;;::::1;::::0;:29:::1;::::0;16797:24;;16767:5;;16823:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;16767:5;16823:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16767:94;::::0;;::::1;::::0;;;;;;18768:34:124;18829:15;;;16767:94:113::1;::::0;::::1;18811:34:124::0;18881:15;;18861:18;;;18854:43;18731:18;;16767:94:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16872:80:113::1;::::0;;18768:34:124;18829:15;;;18811:34;;18881:15;;18876:2;18861:18;;18854:43;16872:80:113::1;::::0;-1:-1:-1;18731:18:124;;-1:-1:-1;16872:80:113::1;18584:319:124::0;6093:484:113;2127:23;:21;:23::i;:::-;6275:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;6275:29:113::1;::::0;::::1;12436:74:124::0;6218:54:113::1;::::0;6275:5:::1;::::0;:22:::1;::::0;12409:18:124;;6275:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6218:86;;6314:7;6310:102;;;13598:9:88::0;;13610:15;13598:27;13597:34;;6376:28:113::1;;;;;;;;;;;;;;;;::::0;6331:74:::1;;;;;;;;;;;;;;:::i;:::-;;6310:102;6417:52;:13:::0;6461:7;6417:43:::1;:52::i;:::-;6475:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;6475:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;6475:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;6475:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6557:5;6530:42;;;6564:7;6530:42;;;;19574:14:124::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;7403:316:113;2127:23;:21;:23::i;:::-;7559:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;7559:29:113::1;::::0;::::1;12436:74:124::0;7502:54:113::1;::::0;7559:5:::1;::::0;:22:::1;::::0;12409:18:124;;7559:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7502:86:::0;-1:-1:-1;7594:31:113::1;7502:86:::0;7618:6;7594:23:::1;:31::i;:::-;7631:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;7631:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;7631:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;7631:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7700:5;7686:28;;;7707:6;7686:28;;;;19574:14:124::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;9767:488:113;2127:23;:21;:23::i;:::-;9887:9:::1;9883:54;;;9906:24;9924:5;9906:17;:24::i;:::-;9999:5;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;9999:29:113::1;::::0;::::1;12436:74:124::0;9942:54:113::1;::::0;9999:5:::1;::::0;:22:::1;::::0;12409:18:124;;9999:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9942:86;;10035:14;10052:34;:13;12837:9:88::0;12849:22;12837:34;12836:41;;;12711:171;10052:34:113::1;10035:51:::0;-1:-1:-1;10093:43:113::1;:13:::0;10126:9;10093:32:::1;:43::i;:::-;10143:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;10143:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;10143:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;10143:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10199:51:113::1;::::0;;22768:14:124;;22761:22;22743:41;;22827:14;;22820:22;22815:2;22800:18;;22793:50;10199:51:113::1;::::0;::::1;::::0;-1:-1:-1;10199:51:113::1;::::0;-1:-1:-1;22716:18:124;10199:51:113::1;22581:268:124::0;3548:206:113;1435:16;:14;:16::i;:::-;3736:5:::1;::::0;3687:62:::1;::::0;;;;:17:::1;::::0;:48:::1;::::0;:62:::1;::::0;3736:5:::1;;::::0;3743;;3687:62:::1;;;:::i;9130:597::-:0;2127:23;:21;:23::i;:::-;9307:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;9307:29:113::1;::::0;::::1;12436:74:124::0;9250:54:113::1;::::0;9307:5:::1;::::0;:22:::1;::::0;12409:18:124;;9307:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17634:9:88::0;;;;-1:-1:-1;4478:3:88;17633:67;;;;9404:64:113::1;;9437:24;9455:5;9437:17;:24::i;:::-;9473:44;:13:::0;9502:14;9473:28:::1;:44::i;:::-;9523:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;9523:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;9523:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;9523:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9578:14;9596:1;9578:19;9574:80;;;9607:5;::::0;:40:::1;::::0;;;;:5:::1;12454:55:124::0;;;9607:40:113::1;::::0;::::1;12436:74:124::0;9607:5:113;;::::1;::::0;:33:::1;::::0;12409:18:124;;9607:40:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9574:80;9665:57;::::0;;14849:25:124;;;14905:2;14890:18;;14883:34;;;9665:57:113::1;::::0;::::1;::::0;::::1;::::0;14822:18:124;9665:57:113::1;14675:248:124::0;7011:352:113;1435:16;:14;:16::i;:::-;7108:6:::1;7103:37;;7116:24;7134:5;7116:17;:24::i;:::-;7203:5;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;7203:29:113::1;::::0;::::1;12436:74:124::0;7146:54:113::1;::::0;7203:5:::1;::::0;:22:::1;::::0;12409:18:124;;7203:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7146:86:::0;-1:-1:-1;7238:31:113::1;7146:86:::0;7262:6;7238:23:::1;:31::i;:::-;7275:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;7275:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;7275:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;7275:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7344:5;7330:28;;;7351:6;7330:28;;;;19574:14:124::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;3085:181:113;1435:16;:14;:16::i;:::-;3248:5:::1;::::0;3210:51:::1;::::0;;;;:17:::1;::::0;:37:::1;::::0;:51:::1;::::0;3248:5:::1;;::::0;3255;;3210:51:::1;;;:::i;11801:1999::-:0;2127:23;:21;:23::i;:::-;12041:36:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;12031:8:::1;::::0;::::1;12023:55;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12119:36:113::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;12092:25:::1;::::0;::::1;12084:72;;;;;;;;;;;;;:::i;:::-;;12370:20;12363:27;;:3;:27;;;;12392:36;;;;;;;;;;;;;;;;::::0;12355:74:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12509:36:113::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:106::1;12450:51:113;::::0;::::1;;12435:116;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;524:3:106::1;12759:58:113;;:29:::0;;::::1;::::0;:58;::::1;:40;:58::i;:::-;:102;;12869:36;;;;;;;;;;;;;;;;::::0;12744:167:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12946:5:113::1;::::0;:23:::1;::::0;;;;;;;12918:25:::1;::::0;12946:5:::1;;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;12918:25;;12946:23;;;;;;;:5;:23:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;12918:51;;12980:9;12975:455;12999:8;:15;12995:1;:19;12975:455;;;13086:5;::::0;13109:11;;13029:54:::1;::::0;13086:5:::1;;::::0;:22:::1;::::0;13109:8;;13118:1;;13109:11;::::1;;;;;:::i;:::-;;;;;;;13086:35;;;;;;;;;;;;;;12466:42:124::0;12454:55;;;;12436:74;;12424:2;12409:18;;12290:226;13086:35:113::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20324:9:88::0;;13029:92:113;;-1:-1:-1;4339:3:88;20323:71;;;13133:10:113::1;:46;;;13129:295;;;5872:9:88::0;;5884;5872:21;13199:3:113::1;:28;;;13229:36;;;;;;;;;;;;;;;;::::0;13191:75:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;6707:9:88;;3298:2;6706:85;;;13295:20:113::1;:62;;;13369:36;;;;;;;;;;;;;;;;::::0;13276:139:::1;;;;;;;;;;;;;;:::i;:::-;;13129:295;-1:-1:-1::0;13016:3:113;::::1;::::0;::::1;:::i;:::-;;;;12975:455;;;;13436:5;;;;;;;;;;;:28;;;13472:10;13490:198;;;;;;;;13529:3;13490:198;;;;;;13564:20;13490:198;;;;;;13612:16;13490:198;;;;;;13651:6;13490:198;;;;;;13674:5;;13490:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;13490:198:113;;-1:-1:-1;13436:258:113::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13724:10;13705:90;;;13736:3;13741:20;13763:16;13781:6;13789:5;;13705:90;;;;;;;;;;;:::i;:::-;;;;;;;;12017:1783;11801:1999:::0;;;;;;;:::o;2378:161::-;2214:3;1217:12:87;;;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;26218:2:124;1202:146:87;;;26200:21:124;26257:2;26237:18;;;26230:30;26296:34;26276:18;;;26269:62;26367:16;26347:18;;;26340:44;26401:19;;1202:146:87;26016:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2456:18:113::1;:29:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2505:28:::1;::::0;;;;;;;:26:::1;::::0;:28:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;2456:29;2505:28:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2491:5;:43:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1506:55:87;;;;1534:12;:20;;;;;;1158:407;;2378:161:113;:::o;10295:422::-;2127:23;:21;:23::i;:::-;10468:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;10468:29:113::1;::::0;::::1;12436:74:124::0;10411:54:113::1;::::0;10468:5:::1;::::0;:22:::1;::::0;12409:18:124;;10468:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16004:9:88::0;;;;-1:-1:-1;4127:2:88;16003:63;;;10560:40:113::1;16004:9:88::0;10587:12:113;10560:26:::1;:40::i;:::-;10606:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;10606:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;10606:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;10606:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10661:51:113::1;::::0;;14849:25:124;;;14905:2;14890:18;;14883:34;;;10661:51:113::1;::::0;::::1;::::0;-1:-1:-1;10661:51:113::1;::::0;-1:-1:-1;14822:18:124;10661:51:113::1;14675:248:124::0;13840:748:113;2127:23;:21;:23::i;:::-;14021:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;14021:29:113::1;::::0;::::1;12436:74:124::0;13964:54:113::1;::::0;14021:5:::1;::::0;:22:::1;::::0;12409:18:124;;14021:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13964:86:::0;-1:-1:-1;14061:18:113::1;::::0;::::1;::::0;14057:284:::1;;14135:5;::::0;:41:::1;::::0;;;;26859:4:124;26847:17;;14135:41:113::1;::::0;::::1;26829:36:124::0;14089:43:113::1;::::0;14135:5:::1;;::::0;:26:::1;::::0;26802:18:124;;14135:41:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;6707:9:88::0;;14089:87:113;;-1:-1:-1;3298:2:88;6706:85;;;14201:12:113::1;:33;;;:75;;;14286:40;;;;;;;;;;;;;;;;::::0;14184:150:::1;;;;;;;;;;;;;;:::i;:::-;;14081:260;14057:284;20324:9:88::0;;14346:21:113::1;::::0;4339:3:88;20323:71;;;14346:56:113;-1:-1:-1;14408:45:113::1;:13:::0;:45:::1;::::0;::::1;:30;:45::i;:::-;14459:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;14459:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;14459:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;14459:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;14514:69:113::1;::::0;;28624:4:124;28612:17;;;28594:36;;28666:17;;28661:2;28646:18;;28639:45;14514:69:113::1;::::0;::::1;::::0;-1:-1:-1;14514:69:113::1;::::0;-1:-1:-1;28567:18:124;14514:69:113::1;28428:262:124::0;6617:354:113;2127:23;:21;:23::i;:::-;6792:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:124::0;;;6792:29:113::1;::::0;::::1;12436:74:124::0;6735:54:113::1;::::0;6792:5:::1;::::0;:22:::1;::::0;12409:18:124;;6792:29:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6735:86:::0;-1:-1:-1;6828:42:113::1;6735:86:::0;6862:7;6828:33:::1;:42::i;:::-;6876:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:124::0;;;6876:44:113::1;::::0;::::1;14540:74:124::0;14650:13;;14630:18;;;14623:41;6876:5:113;;::::1;::::0;:22:::1;::::0;14513:18:124;;6876:44:113::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6951:5;6931:35;;;6958:7;6931:35;;;;19574:14:124::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;18854:298:113;18952:18;;:34;;;;;;;;18915:22;;18952:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19008:42;;;;;19039:10;19008:42;;;12436:74:124;18915:72:113;;-1:-1:-1;19008:30:113;;;;;;12409:18:124;;19008:42:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;-1:-1:-1;19054:34:113;;;;;19077:10;19054:34;;;12436:74:124;19054:22:113;;;;;;12409:18:124;;19054:34:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19096:45;;;;;;;;;;;;;;;;;18993:154;;;;;;;;;;;;;;:::i;:::-;;18909:243;18854:298::o;19156:273::-;19246:18;;:34;;;;;;;;19209:22;;19246:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19302;;;;;19325:10;19302:34;;;12436:74:124;19209:72:113;;-1:-1:-1;19302:22:113;;;;;;12409:18:124;;19302:34:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;;-1:-1:-1;19340:34:113;;;;;19363:10;19340:34;;;12436:74:124;19340:22:113;;;;;;12409:18:124;;19340:34:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19382:36;;;;;;;;;;;;;;;;;19287:137;;;;;;;;;;;;;;:::i;18863:353:88:-;19051:32;;;;;;;;;;;;;;;;;5103:11;19003:46;;;18995:89;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19110:9:88;;2905:66;19110:34;4411:3;19155:55;;;;19109:102;19091:120;;18863:353::o;18136:202:113:-;18219:18;;:34;;;;;;;;18182:22;;18219:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18268;;;;;18291:10;18268:34;;;12436:74:124;18182:72:113;;-1:-1:-1;18268:22:113;;;;;;12409:18:124;;18268:34:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18304:28;;;;;;;;;;;;;;;;;18260:73;;;;;;;;;;;;;;:::i;17890:427:88:-;18119:39;;;;;;;;;;;;;;;;;4978:5;18051:60;;;18036:128;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18190:9:88;;2609:66;18190:41;4270:3;18242:69;;;;18189:123;18171:141;;17890:427::o;10902:279::-;3854:2;11110:10;:18;;11127:1;11110:18;;;11123:1;11110:18;11051:9;;1721:66;11051:40;11102:27;;;;;:73;;;11050:126;11032:144;;;-1:-1:-1;10902:279:88:o;18563:287:113:-;18657:18;;:34;;;;;;;;18620:22;;18657:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18713;;;;;18736:10;18713:34;;;12436:74:124;18620:72:113;;-1:-1:-1;18713:22:113;;;;;;12409:18:124;;18713:34:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;;;-1:-1:-1;18751:39:113;;;;;18779:10;18751:39;;;12436:74:124;18751:27:113;;;;;;12409:18:124;;18751:39:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18798:41;;;;;;;;;;;;;;;;;18698:147;;;;;;;;;;;;;;:::i;9866:213:88:-;3777:2;10026:6;:14;;10039:1;10026:14;;;10035:1;10026:14;9984:9;;1573:66;9984:23;10018;;;;;:55;;;9983:91;9965:109;;;-1:-1:-1;9866:213:88:o;14635:333::-;14814:29;;;;;;;;;;;;;;;;;4778:5;14771:41;;;14763:81;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14870:9:88;;2165:66;14870:31;4063:2;14912:50;;;;14869:94;14851:112;;14635:333::o;16215:289::-;16378:25;;;;;;;;;;;;;;;;;4900:11;16343:33;;;16335:69;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16424:9:88;;2461:66;16424:27;4191:3;16456:42;;;;16423:76;16411:88;;16215:289::o;13078:248::-;3636:2;13264:7;:15;;13278:1;13264:15;;;13274:1;13264:15;13219:9;;1277:66;13219:26;13256:24;;;;;:64;;;13218:103;13200:121;;;-1:-1:-1;13078:248:88:o;18342:217:113:-;18430:18;;:34;;;;;;;;18393:22;;18430:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18479:39;;;;;18507:10;18479:39;;;12436:74:124;18393:72:113;;-1:-1:-1;18479:27:113;;;;;;12409:18:124;;18479:39:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18520:33;;;;;;;;;;;;;;;;;18471:83;;;;;;;;;;;;;;:::i;1005:496:106:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:106;1424:22;;1448;1420:51;1416:75;;1005:496::o;17565:326:113:-;17630:25;17657:20;17724:18;;;;;;;;;;;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17699:93;;;;;:86;12454:55:124;;;17699:93:113;;;12436:74:124;17699:86:113;;;;;;;12409:18:124;;17699:93:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17627:165;;;;;;;;;;;;;;17807:12;17823:1;17807:17;:43;;;;-1:-1:-1;17828:22:113;;17807:43;17852:33;;;;;;;;;;;;;;;;;17799:87;;;;;;;;;;;;;;:::i;5426:197:88:-;5552:18;;;;;;;;;;;;;;;;;4528:5;5530:20;;;5522:49;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5591:9:88;;389:66;5591:20;5590:28;5578:40;;5426:197::o;6068:348::-;6253:28;;;;;;;;;;;;;;;;;4597:5;6207:44;;;6199:83;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6308:9:88;;537:66;6308:38;3298:2;6357:53;;;;6307:104;6289:122;;6068:348::o;6954:316::-;7123:24;;;;;;;;;;;;;;;;;4662:5;7085:36;;;7077:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7174:9:88;;685:66;7174:34;3369:2;7219:45;;;;7173:92;7155:110;;6954:316::o;13856:272::-;3714:2;14059:7;:15;;14073:1;14059:15;;;14069:1;14059:15;14007:9;;1425:66;14007:33;14051:24;;;;;:71;;;14006:117;13988:135;;;-1:-1:-1;13856:272:88:o;9225:213::-;3565:2;9385:6;:14;;9398:1;9385:14;;;9394:1;9385:14;9343:9;;1129:66;9343:23;9377;;;;;:55;;;9342:91;9324:109;;;-1:-1:-1;9225:213:88:o;17895:237:113:-;17995:18;;:40;;;;;;;;17957:17;;17995:18;;;:38;;:40;;;;;;;;;;;;;;:18;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17977:91;;;;;:72;12454:55:124;;;17977:91:113;;;12436:74:124;17977:72:113;;;;;;;12409:18:124;;17977:91:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18098:28;;;;;;;;;;;;;;;;;17957:111;;-1:-1:-1;18082:14:113;;18074:53;;;;;;;;;;;;;:::i;12186:251:88:-;3924:2;12377:6;:14;;12390:1;12377:14;;;12386:1;12377:14;12325:9;;1869:66;12325:33;12369:23;;;;;:62;;;12324:108;12306:126;;;-1:-1:-1;12186:251:88:o;17014:293::-;17177:27;;;;;;;;;;;;;;;;;5169:13;17142:33;;;17134:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17225:9:88;;3053:66;17225:29;4478:3;17259:42;;;;17224:78;17212:90;;17014:293::o;8584:213::-;3502:2;8744:6;:14;;8757:1;8744:14;;;8753:1;8744:14;8702:9;;981:66;8702:23;8736;;;;;:55;;;8701:91;8683:109;;;-1:-1:-1;8584:213:88:o;15457:289::-;15620:25;;;;;;;;;;;;;;;;;4836:11;15585:33;;;15577:69;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15666:9:88;;2313:66;15666:27;4127:2;15698:42;;;;15665:76;15653:88;;15457:289::o;19746:306::-;19915:29;;;;;;;;;;;;;;;;;5040:3;19877:36;;;19869:76;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19965:9:88;;2757:66;19965:31;4339:3;20001:45;;;;19964:83;19952:95;;19746:306::o;20596:274::-;3995:2;20799:16;:24;;20822:1;20799:24;;;20818:1;20799:24;20746:9;;2017:66;20746:34;20791:33;;;;;:73;;;20745:120;20727:138;;;-1:-1:-1;20596:274:88:o;14:652:124:-;137:6;145;198:2;186:9;177:7;173:23;169:32;166:52;;;214:1;211;204:12;166:52;254:9;241:23;283:18;324:2;316:6;313:14;310:34;;;340:1;337;330:12;310:34;378:6;367:9;363:22;353:32;;423:7;416:4;412:2;408:13;404:27;394:55;;445:1;442;435:12;394:55;485:2;472:16;511:2;503:6;500:14;497:34;;;527:1;524;517:12;497:34;580:7;575:2;565:6;562:1;558:14;554:2;550:23;546:32;543:45;540:65;;;601:1;598;591:12;540:65;632:2;624:11;;;;;654:6;;-1:-1:-1;14:652:124;;-1:-1:-1;;;;14:652:124:o;671:154::-;757:42;750:5;746:54;739:5;736:65;726:93;;815:1;812;805:12;726:93;671:154;:::o;830:134::-;898:20;;927:31;898:20;927:31;:::i;:::-;830:134;;;:::o;969:315::-;1037:6;1045;1098:2;1086:9;1077:7;1073:23;1069:32;1066:52;;;1114:1;1111;1104:12;1066:52;1153:9;1140:23;1172:31;1197:5;1172:31;:::i;:::-;1222:5;1274:2;1259:18;;;;1246:32;;-1:-1:-1;;;969:315:124:o;1289:388::-;1357:6;1365;1418:2;1406:9;1397:7;1393:23;1389:32;1386:52;;;1434:1;1431;1424:12;1386:52;1473:9;1460:23;1492:31;1517:5;1492:31;:::i;:::-;1542:5;-1:-1:-1;1599:2:124;1584:18;;1571:32;1612:33;1571:32;1612:33;:::i;:::-;1664:7;1654:17;;;1289:388;;;;;:::o;1682:146::-;1768:34;1761:5;1757:46;1750:5;1747:57;1737:85;;1818:1;1815;1808:12;1833:247;1892:6;1945:2;1933:9;1924:7;1920:23;1916:32;1913:52;;;1961:1;1958;1951:12;1913:52;2000:9;1987:23;2019:31;2044:5;2019:31;:::i;:::-;2069:5;1833:247;-1:-1:-1;;;1833:247:124:o;2085:180::-;2144:6;2197:2;2185:9;2176:7;2172:23;2168:32;2165:52;;;2213:1;2210;2203:12;2165:52;-1:-1:-1;2236:23:124;;2085:180;-1:-1:-1;2085:180:124:o;2270:118::-;2356:5;2349:13;2342:21;2335:5;2332:32;2322:60;;2378:1;2375;2368:12;2393:382;2458:6;2466;2519:2;2507:9;2498:7;2494:23;2490:32;2487:52;;;2535:1;2532;2525:12;2487:52;2574:9;2561:23;2593:31;2618:5;2593:31;:::i;:::-;2643:5;-1:-1:-1;2700:2:124;2685:18;;2672:32;2713:30;2672:32;2713:30;:::i;2780:247::-;2839:6;2892:2;2880:9;2871:7;2867:23;2863:32;2860:52;;;2908:1;2905;2898:12;2860:52;2947:9;2934:23;2966:31;2991:5;2966:31;:::i;3032:401::-;3132:6;3185:2;3173:9;3164:7;3160:23;3156:32;3153:52;;;3201:1;3198;3191:12;3153:52;3241:9;3228:23;3274:18;3266:6;3263:30;3260:50;;;3306:1;3303;3296:12;3260:50;3329:22;;3385:3;3367:16;;;3363:26;3360:46;;;3402:1;3399;3392:12;3438:241;3494:6;3547:2;3535:9;3526:7;3522:23;3518:32;3515:52;;;3563:1;3560;3553:12;3515:52;3602:9;3589:23;3621:28;3643:5;3621:28;:::i;3866:452::-;3952:6;3960;3968;3976;4029:3;4017:9;4008:7;4004:23;4000:33;3997:53;;;4046:1;4043;4036:12;3997:53;4085:9;4072:23;4104:31;4129:5;4104:31;:::i;:::-;4154:5;4206:2;4191:18;;4178:32;;-1:-1:-1;4257:2:124;4242:18;;4229:32;;4308:2;4293:18;4280:32;;-1:-1:-1;3866:452:124;-1:-1:-1;;;3866:452:124:o;4323:398::-;4420:6;4473:2;4461:9;4452:7;4448:23;4444:32;4441:52;;;4489:1;4486;4479:12;4441:52;4529:9;4516:23;4562:18;4554:6;4551:30;4548:50;;;4594:1;4591;4584:12;4548:50;4617:22;;4673:3;4655:16;;;4651:26;4648:46;;;4690:1;4687;4680:12;4726:156;4792:20;;4852:4;4841:16;;4831:27;;4821:55;;4872:1;4869;4862:12;4887:117;4972:6;4965:5;4961:18;4954:5;4951:29;4941:57;;4994:1;4991;4984:12;5009:1217;5120:6;5128;5136;5144;5152;5160;5168;5221:3;5209:9;5200:7;5196:23;5192:33;5189:53;;;5238:1;5235;5228:12;5189:53;5261:27;5278:9;5261:27;:::i;:::-;5251:37;;5338:2;5327:9;5323:18;5310:32;5351:30;5375:5;5351:30;:::i;:::-;5400:5;-1:-1:-1;5457:2:124;5442:18;;5429:32;5470;5429;5470;:::i;:::-;5521:7;-1:-1:-1;5580:2:124;5565:18;;5552:32;5593;5552;5593;:::i;:::-;5644:7;-1:-1:-1;5703:3:124;5688:19;;5675:33;5717;5675;5717;:::i;:::-;5769:7;-1:-1:-1;5827:3:124;5812:19;;5799:33;5851:18;5881:14;;;5878:34;;;5908:1;5905;5898:12;5878:34;5946:6;5935:9;5931:22;5921:32;;5991:7;5984:4;5980:2;5976:13;5972:27;5962:55;;6013:1;6010;6003:12;5962:55;6053:2;6040:16;6079:2;6071:6;6068:14;6065:34;;;6095:1;6092;6085:12;6065:34;6140:7;6135:2;6126:6;6122:2;6118:15;6114:24;6111:37;6108:57;;;6161:1;6158;6151:12;6108:57;6192:2;6188;6184:11;6174:21;;6214:6;6204:16;;;;;5009:1217;;;;;;;;;;:::o;6514:317::-;6580:6;6588;6641:2;6629:9;6620:7;6616:23;6612:32;6609:52;;;6657:1;6654;6647:12;6609:52;6696:9;6683:23;6715:31;6740:5;6715:31;:::i;:::-;6765:5;-1:-1:-1;6789:36:124;6821:2;6806:18;;6789:36;:::i;:::-;6779:46;;6514:317;;;;;:::o;6836:184::-;6888:77;6885:1;6878:88;6985:4;6982:1;6975:15;7009:4;7006:1;6999:15;7025:393;7128:4;7186:11;7173:25;7276:66;7265:8;7249:14;7245:29;7241:102;7221:18;7217:127;7207:155;;7358:1;7355;7348:12;7207:155;7379:33;;;;;7025:393;-1:-1:-1;;7025:393:124:o;7635:563::-;7694:5;7701:6;7761:3;7748:17;7843:66;7832:8;7816:14;7812:29;7808:102;7788:18;7784:127;7774:155;;7925:1;7922;7915:12;7774:155;7953:33;;8057:4;8044:18;;;-1:-1:-1;8005:21:124;;-1:-1:-1;8085:18:124;8074:30;;8071:50;;;8117:1;8114;8107:12;8071:50;8167:6;8151:14;8147:27;8137:8;8133:42;8130:62;;;8188:1;8185;8178:12;8130:62;7635:563;;;;;:::o;8203:326::-;8292:6;8287:3;8280:19;8344:6;8337:5;8330:4;8325:3;8321:14;8308:43;;8396:1;8389:4;8380:6;8375:3;8371:16;8367:27;8360:38;8262:3;8518:4;8448:66;8443:2;8435:6;8431:15;8427:88;8422:3;8418:98;8414:109;8407:116;;8203:326;;;;:::o;8534:3397::-;8797:42;8789:6;8785:55;8774:9;8767:74;8877:2;8872;8861:9;8857:18;8850:30;8889:66;8951:2;8940:9;8936:18;8908:26;8927:6;8908:26;:::i;:::-;7500:42;7489:54;7477:67;;7423:127;8889:66;8748:4;8984:35;9015:2;9007:6;9003:15;8984:35;:::i;:::-;7500:42;7489:54;9076:2;9061:18;;7477:67;9111:35;9142:2;9130:15;;9111:35;:::i;:::-;7500:42;7489:54;9205:3;9190:19;;7477:67;9241:33;9270:2;9258:15;;9241:33;:::i;:::-;7622:4;7611:16;9331:3;9316:19;;7599:29;9367:36;9398:3;9386:16;;9367:36;:::i;:::-;7500:42;7489:54;9462:3;9447:19;;7477:67;9498:36;9529:3;9517:16;;9498:36;:::i;:::-;7500:42;7489:54;9593:3;9578:19;;7477:67;9629:36;9660:3;9648:16;;9629:36;:::i;:::-;9684:3;9696:54;9746:2;9735:9;9731:18;9715:14;7500:42;7489:54;7477:67;;7423:127;9696:54;9781:36;9812:3;9804:6;9800:16;9781:36;:::i;:::-;9759:58;;9836:3;9848:54;9898:2;9887:9;9883:18;9867:14;7500:42;7489:54;7477:67;;7423:127;9848:54;9947:56;9999:2;9991:6;9987:15;9979:6;9947:56;:::i;:::-;9911:92;;;;10022:6;10047:3;10086:2;10081;10070:9;10066:18;10059:30;10112:77;10184:3;10173:9;10169:19;10155:12;10139:14;10112:77;:::i;:::-;10098:91;;10236:56;10288:2;10280:6;10276:15;10268:6;10236:56;:::i;:::-;10198:94;;;;10311:66;10396:3;10463:2;10451:9;10443:6;10439:22;10435:31;10430:2;10419:9;10415:18;10408:59;10490:66;10549:6;10533:14;10517;10490:66;:::i;:::-;10476:80;;10603:56;10655:2;10647:6;10643:15;10635:6;10603:56;:::i;:::-;10565:94;;;;10678:3;10668:13;;10745:2;10733:9;10725:6;10721:22;10717:31;10712:2;10701:9;10697:18;10690:59;10772:66;10831:6;10815:14;10799;10772:66;:::i;:::-;10758:80;;10886:56;10938:2;10930:6;10926:15;10918:6;10886:56;:::i;:::-;10847:95;;;;;10961:3;11028:2;11016:9;11008:6;11004:22;11000:31;10995:2;10984:9;10980:18;10973:59;11055:67;11115:6;11099:14;11082:15;11055:67;:::i;:::-;11041:81;;11170:56;11222:2;11214:6;11210:15;11202:6;11170:56;:::i;:::-;11131:95;;;;11245:3;11235:13;;11312:2;11300:9;11292:6;11288:22;11284:31;11279:2;11268:9;11264:18;11257:59;11339:67;11399:6;11383:14;11366:15;11339:67;:::i;:::-;11325:81;;11454:56;11506:2;11498:6;11494:15;11486:6;11454:56;:::i;:::-;11415:95;;;;;11574:2;11562:9;11554:6;11550:22;11546:31;11541:2;11530:9;11526:18;11519:59;11601:67;11661:6;11645:14;11628:15;11601:67;:::i;:::-;11587:81;;11716:56;11768:2;11760:6;11756:15;11748:6;11716:56;:::i;:::-;11677:95;;;;11837:2;11825:9;11817:6;11813:22;11809:31;11803:3;11792:9;11788:19;11781:60;;;;11858:67;11918:6;11902:14;11885:15;11858:67;:::i;:::-;11850:75;8534:3397;-1:-1:-1;;;;;;;8534:3397:124:o;11936:349::-;11975:3;12006:66;11999:5;11996:77;11993:257;;;12106:77;12103:1;12096:88;12207:4;12204:1;12197:15;12235:4;12232:1;12225:15;11993:257;-1:-1:-1;12277:1:124;12266:13;;11936:349::o;12521:184::-;12573:77;12570:1;12563:88;12670:4;12667:1;12660:15;12694:4;12691:1;12684:15;12710:252;12782:2;12776:9;12824:3;12812:16;;12858:18;12843:34;;12879:22;;;12840:62;12837:88;;;12905:18;;:::i;:::-;12941:2;12934:22;12710:252;:::o;12967:253::-;13039:2;13033:9;13081:4;13069:17;;13116:18;13101:34;;13137:22;;;13098:62;13095:88;;;13163:18;;:::i;13225:334::-;13296:2;13290:9;13352:2;13342:13;;13357:66;13338:86;13326:99;;13455:18;13440:34;;13476:22;;;13437:62;13434:88;;;13502:18;;:::i;:::-;13538:2;13531:22;13225:334;;-1:-1:-1;13225:334:124:o;13564:426::-;13645:5;13693:4;13681:9;13676:3;13672:19;13668:30;13665:50;;;13711:1;13708;13701:12;13665:50;13744:2;13738:9;13786:4;13778:6;13774:17;13857:6;13845:10;13842:22;13821:18;13809:10;13806:34;13803:62;13800:88;;;13868:18;;:::i;:::-;13904:2;13897:22;13967:16;;13952:32;;-1:-1:-1;13937:6:124;13564:426;-1:-1:-1;13564:426:124:o;13995:282::-;14107:6;14160:2;14148:9;14139:7;14135:23;14131:32;14128:52;;;14176:1;14173;14166:12;14128:52;14199:72;14263:7;14252:9;14199:72;:::i;14928:138::-;15007:13;;15029:31;15007:13;15029:31;:::i;15071:169::-;15149:13;;15202:12;15191:24;;15181:35;;15171:63;;15230:1;15227;15220:12;15245:136;15323:13;;15345:30;15323:13;15345:30;:::i;15386:138::-;15465:13;;15487:31;15465:13;15487:31;:::i;15529:1652::-;15629:6;15682:3;15670:9;15661:7;15657:23;15653:33;15650:53;;;15699:1;15696;15689:12;15650:53;15725:22;;:::i;:::-;15770:72;15834:7;15823:9;15770:72;:::i;:::-;15763:5;15756:87;15875:49;15920:2;15909:9;15905:18;15875:49;:::i;:::-;15870:2;15863:5;15859:14;15852:73;15957:49;16002:2;15991:9;15987:18;15957:49;:::i;:::-;15952:2;15945:5;15941:14;15934:73;16039:49;16084:2;16073:9;16069:18;16039:49;:::i;:::-;16034:2;16027:5;16023:14;16016:73;16122:50;16167:3;16156:9;16152:19;16122:50;:::i;:::-;16116:3;16109:5;16105:15;16098:75;16206:50;16251:3;16240:9;16236:19;16206:50;:::i;:::-;16200:3;16193:5;16189:15;16182:75;16290:49;16334:3;16323:9;16319:19;16290:49;:::i;:::-;16284:3;16277:5;16273:15;16266:74;16373:49;16417:3;16406:9;16402:19;16373:49;:::i;:::-;16367:3;16360:5;16356:15;16349:74;16442:3;16477:49;16522:2;16511:9;16507:18;16477:49;:::i;:::-;16461:14;;;16454:73;16546:3;16581:49;16611:18;;;16581:49;:::i;:::-;16565:14;;;16558:73;16650:3;16685:49;16715:18;;;16685:49;:::i;:::-;16669:14;;;16662:73;16754:3;16789:49;16819:18;;;16789:49;:::i;:::-;16773:14;;;16766:73;16858:3;16893:49;16923:18;;;16893:49;:::i;:::-;16877:14;;;16870:73;16962:3;16997:49;17027:18;;;16997:49;:::i;:::-;16981:14;;;16974:73;17066:3;17101:49;17131:18;;;17101:49;:::i;:::-;17085:14;;;17078:73;17089:5;15529:1652;-1:-1:-1;;;15529:1652:124:o;17518:258::-;17590:1;17600:113;17614:6;17611:1;17608:13;17600:113;;;17690:11;;;17684:18;17671:11;;;17664:39;17636:2;17629:10;17600:113;;;17731:6;17728:1;17725:13;17722:48;;;-1:-1:-1;;17766:1:124;17748:16;;17741:27;17518:258::o;17781:317::-;17823:3;17861:5;17855:12;17888:6;17883:3;17876:19;17904:63;17960:6;17953:4;17948:3;17944:14;17937:4;17930:5;17926:16;17904:63;:::i;:::-;18012:2;18000:15;18017:66;17996:88;17987:98;;;;18087:4;17983:109;;17781:317;-1:-1:-1;;17781:317:124:o;18103:220::-;18252:2;18241:9;18234:21;18215:4;18272:45;18313:2;18302:9;18298:18;18290:6;18272:45;:::i;18328:251::-;18398:6;18451:2;18439:9;18430:7;18426:23;18422:32;18419:52;;;18467:1;18464;18457:12;18419:52;18499:9;18493:16;18518:31;18543:5;18518:31;:::i;18908:184::-;18978:6;19031:2;19019:9;19010:7;19006:23;19002:32;18999:52;;;19047:1;19044;19037:12;18999:52;-1:-1:-1;19070:16:124;;18908:184;-1:-1:-1;18908:184:124:o;19601:1635::-;19823:4;19852:42;19933:2;19925:6;19921:15;19910:9;19903:34;19973:2;19968;19957:9;19953:18;19946:30;20011:6;19998:20;20027:31;20052:5;20027:31;:::i;:::-;20094:14;;20089:2;20074:18;;20067:42;20158:2;20146:15;;20133:29;20171:33;20133:29;20171:33;:::i;:::-;20240:16;20235:2;20220:18;;20213:44;20300:56;20352:2;20340:15;;20344:6;20300:56;:::i;:::-;20393:4;20387:3;20376:9;20372:19;20365:33;20421:75;20491:3;20480:9;20476:19;20462:12;20448;20421:75;:::i;:::-;20407:89;;;20543:56;20595:2;20587:6;20583:15;20575:6;20543:56;:::i;:::-;20618:66;20749:2;20737:9;20729:6;20725:22;20721:31;20715:3;20704:9;20700:19;20693:60;20776:66;20835:6;20819:14;20803;20776:66;:::i;:::-;20762:80;;20873:36;20904:3;20896:6;20892:16;20873:36;:::i;:::-;7500:42;7489:54;;20968:4;20953:20;;7477:67;20851:58;-1:-1:-1;21021:57:124;21073:3;21065:6;21061:16;21053:6;21021:57;:::i;:::-;20983:95;;;;21143:2;21131:9;21123:6;21119:22;21115:31;21109:3;21098:9;21094:19;21087:60;;21164:66;21223:6;21207:14;21191;21164:66;:::i;21241:1011::-;21336:6;21367:2;21410;21398:9;21389:7;21385:23;21381:32;21378:52;;;21426:1;21423;21416:12;21378:52;21459:9;21453:16;21488:18;21529:2;21521:6;21518:14;21515:34;;;21545:1;21542;21535:12;21515:34;21583:6;21572:9;21568:22;21558:32;;21628:7;21621:4;21617:2;21613:13;21609:27;21599:55;;21650:1;21647;21640:12;21599:55;21679:2;21673:9;21701:2;21697;21694:10;21691:36;;;21707:18;;:::i;:::-;21753:2;21750:1;21746:10;21736:20;;21776:28;21800:2;21796;21792:11;21776:28;:::i;:::-;21838:15;;;21908:11;;;21904:20;;;21869:12;;;;21936:19;;;21933:39;;;21968:1;21965;21958:12;21933:39;21992:11;;;;22012:210;22028:6;22023:3;22020:15;22012:210;;;22101:3;22095:10;22082:23;;22118:31;22143:5;22118:31;:::i;:::-;22162:18;;;22045:12;;;;22200;;;;22012:210;;;22241:5;21241:1011;-1:-1:-1;;;;;;;;21241:1011:124:o;22854:1741::-;23070:4;23099:42;23180:2;23172:6;23168:15;23157:9;23150:34;23220:2;23215;23204:9;23200:18;23193:30;23258:6;23245:20;23274:31;23299:5;23274:31;:::i;:::-;23341:14;23336:2;23321:18;;23314:42;23385:35;23416:2;23404:15;;23385:35;:::i;:::-;7500:42;7489:54;23477:2;23462:18;;7477:67;23512:35;23543:2;23531:15;;23512:35;:::i;:::-;7500:42;7489:54;23606:3;23591:19;;7477:67;23656:56;23708:2;23696:15;;23700:6;23656:56;:::i;:::-;23749:4;23743:3;23732:9;23728:19;23721:33;23777:77;23849:3;23838:9;23834:19;23820:12;23804:14;23777:77;:::i;:::-;23763:91;;;23901:57;23953:3;23945:6;23941:16;23933:6;23901:57;:::i;:::-;23977:66;24108:2;24096:9;24088:6;24084:22;24080:31;24074:3;24063:9;24059:19;24052:60;24135:66;24194:6;24178:14;24162;24135:66;:::i;:::-;24121:80;;24232:36;24263:3;24255:6;24251:16;24232:36;:::i;:::-;7500:42;7489:54;;24327:4;24312:20;;7477:67;24210:58;-1:-1:-1;24380:57:124;24432:3;24424:6;24420:16;24412:6;24380:57;:::i;:::-;24342:95;;;;24502:2;24490:9;24482:6;24478:22;24474:31;24468:3;24457:9;24453:19;24446:60;;24523:66;24582:6;24566:14;24550;24523:66;:::i;24600:774::-;24829:4;24821:6;24817:17;24806:9;24799:36;24871:2;24866;24855:9;24851:18;24844:30;24780:4;24893:6;24954:2;24945:6;24939:13;24935:22;24930:2;24919:9;24915:18;24908:50;25022:2;25016;25008:6;25004:15;24998:22;24994:31;24989:2;24978:9;24974:18;24967:59;25091:2;25085;25077:6;25073:15;25067:22;25063:31;25057:3;25046:9;25042:19;25035:60;;25161:42;25155:2;25147:6;25143:15;25137:22;25133:71;25126:4;25115:9;25111:20;25104:101;25252:3;25244:6;25240:16;25234:23;25294:4;25288:3;25277:9;25273:19;25266:33;25316:52;25363:3;25352:9;25348:19;25334:12;25316:52;:::i;:::-;25308:60;24600:774;-1:-1:-1;;;;;24600:774:124:o;25379:632::-;25610:4;25639:6;25684:2;25676:6;25672:15;25661:9;25654:34;25736:2;25728:6;25724:15;25719:2;25708:9;25704:18;25697:43;25788:2;25780:6;25776:15;25771:2;25760:9;25756:18;25749:43;;25840:42;25832:6;25828:55;25823:2;25812:9;25808:18;25801:83;25921:3;25915;25904:9;25900:19;25893:32;25942:63;26000:3;25989:9;25985:19;25977:6;25969;25942:63;:::i;26431:251::-;26501:6;26554:2;26542:9;26533:7;26529:23;26525:32;26522:52;;;26570:1;26567;26560:12;26522:52;26602:9;26596:16;26621:31;26646:5;26621:31;:::i;26876:1547::-;26978:6;27009:2;27052;27040:9;27031:7;27027:23;27023:32;27020:52;;;27068:1;27065;27058:12;27020:52;27101:9;27095:16;27130:18;27171:2;27163:6;27160:14;27157:34;;;27187:1;27184;27177:12;27157:34;27210:22;;;;27266:4;27248:16;;;27244:27;27241:47;;;27284:1;27281;27274:12;27241:47;27310:22;;:::i;:::-;27362:2;27356:9;27374:32;27398:7;27374:32;:::i;:::-;27415:22;;27467:11;;;27461:18;27488:32;27461:18;27488:32;:::i;:::-;27536:14;;;27529:31;27598:2;27590:11;;27584:18;27611:32;27584:18;27611:32;:::i;:::-;27670:2;27659:14;;27652:31;27721:2;27713:11;;27707:18;27734:33;27707:18;27734:33;:::i;:::-;27794:2;27783:14;;27776:31;27846:3;27838:12;;27832:19;27863:16;;;27860:36;;;27892:1;27889;27882:12;27860:36;27923:8;27919:2;27915:17;27905:27;;;27970:7;27963:4;27959:2;27955:13;27951:27;27941:55;;27992:1;27989;27982:12;27941:55;28021:2;28015:9;28043:2;28039;28036:10;28033:36;;;28049:18;;:::i;:::-;28091:112;28199:2;28130:66;28123:4;28119:2;28115:13;28111:86;28107:95;28091:112;:::i;:::-;28078:125;;28226:2;28219:5;28212:17;28266:7;28261:2;28256;28252;28248:11;28244:20;28241:33;28238:53;;;28287:1;28284;28277:12;28238:53;28300:54;28351:2;28346;28339:5;28335:14;28330:2;28326;28322:11;28300:54;:::i;:::-;-1:-1:-1;28381:3:124;28370:15;;28363:30;;;;28374:5;26876:1547;-1:-1:-1;;;;;26876:1547:124:o;28695:245::-;28762:6;28815:2;28803:9;28794:7;28790:23;28786:32;28783:52;;;28831:1;28828;28821:12;28783:52;28863:9;28857:16;28882:28;28904:5;28882:28;:::i;28945:890::-;29113:6;29121;29129;29137;29145;29153;29161;29169;29177;29185;29193:7;29202;29256:3;29244:9;29235:7;29231:23;29227:33;29224:53;;;29273:1;29270;29263:12;29224:53;29302:9;29296:16;29286:26;;29352:2;29341:9;29337:18;29331:25;29321:35;;29396:2;29385:9;29381:18;29375:25;29365:35;;29440:2;29429:9;29425:18;29419:25;29409:35;;29484:3;29473:9;29469:19;29463:26;29453:36;;29529:3;29518:9;29514:19;29508:26;29498:36;;29574:3;29563:9;29559:19;29553:26;29543:36;;29619:3;29608:9;29604:19;29598:26;29588:36;;29664:3;29653:9;29649:19;29643:26;29633:36;;29709:3;29698:9;29694:19;29688:26;29678:36;;29755:3;29744:9;29740:19;29734:26;29723:37;;29780:49;29824:3;29813:9;29809:19;29780:49;:::i;:::-;29769:60;;28945:890;;;;;;;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"4853400","executionCost":"10736","totalCost":"4864136"},"external":{"CONFIGURATOR_REVISION()":"229","configureReserveAsCollateral(address,uint256,uint256,uint256)":"infinite","dropReserve(address)":"infinite","initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":"infinite","initialize(address)":"infinite","setAssetEModeCategory(address,uint8)":"infinite","setBorrowCap(address,uint256)":"infinite","setBorrowableInIsolation(address,bool)":"infinite","setDebtCeiling(address,uint256)":"infinite","setEModeCategory(uint8,uint16,uint16,uint16,address,string)":"infinite","setLiquidationProtocolFee(address,uint256)":"infinite","setPoolPause(bool)":"infinite","setReserveActive(address,bool)":"infinite","setReserveBorrowing(address,bool)":"infinite","setReserveFactor(address,uint256)":"infinite","setReserveFlashLoaning(address,bool)":"infinite","setReserveFreeze(address,bool)":"infinite","setReserveInterestRateStrategyAddress(address,address)":"infinite","setReservePause(address,bool)":"infinite","setReserveStableRateBorrowing(address,bool)":"infinite","setSiloedBorrowing(address,bool)":"infinite","setSupplyCap(address,uint256)":"infinite","setUnbackedMintCap(address,uint256)":"infinite","updateAToken((address,address,address,string,string,address,bytes))":"infinite","updateBridgeProtocolFee(uint256)":"infinite","updateFlashloanPremiumToProtocol(uint128)":"infinite","updateFlashloanPremiumTotal(uint128)":"infinite","updateStableDebtToken((address,address,string,string,address,bytes))":"infinite","updateVariableDebtToken((address,address,string,string,address,bytes))":"infinite"},"internal":{"_checkNoBorrowers(address)":"infinite","_checkNoSuppliers(address)":"infinite","_onlyAssetListingOrPoolAdmins()":"infinite","_onlyEmergencyAdmin()":"infinite","_onlyPoolAdmin()":"infinite","_onlyPoolOrEmergencyAdmin()":"infinite","_onlyRiskOrPoolAdmins()":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"CONFIGURATOR_REVISION()":"7af635a6","configureReserveAsCollateral(address,uint256,uint256,uint256)":"7c4e560b","dropReserve(address)":"63c9b860","initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":"02fb45e6","initialize(address)":"c4d66de8","setAssetEModeCategory(address,uint8)":"d4fe3f99","setBorrowCap(address,uint256)":"d14a0983","setBorrowableInIsolation(address,bool)":"38ae0cc3","setDebtCeiling(address,uint256)":"aeb4fcc1","setEModeCategory(uint8,uint16,uint16,uint16,address,string)":"c19d61e4","setLiquidationProtocolFee(address,uint256)":"26d2cec2","setPoolPause(bool)":"7641f3d9","setReserveActive(address,bool)":"b736aaeb","setReserveBorrowing(address,bool)":"682cf264","setReserveFactor(address,uint256)":"4b4e6753","setReserveFlashLoaning(address,bool)":"f213ef0e","setReserveFreeze(address,bool)":"96e957c4","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setReservePause(address,bool)":"48d9fba9","setReserveStableRateBorrowing(address,bool)":"8a751a60","setSiloedBorrowing(address,bool)":"a7fa83b7","setSupplyCap(address,uint256)":"571f03e5","setUnbackedMintCap(address,uint256)":"145f5892","updateAToken((address,address,address,string,string,address,bytes))":"bb01c37c","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiumToProtocol(uint128)":"1df970bd","updateFlashloanPremiumTotal(uint128)":"8a493676","updateStableDebtToken((address,address,string,string,address,bytes))":"7626cde3","updateVariableDebtToken((address,address,string,string,address,bytes))":"ad4e6432"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ATokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBorrowCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"BorrowCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"borrowable\",\"type\":\"bool\"}],\"name\":\"BorrowableInIsolationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBridgeProtocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"BridgeProtocolFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"CollateralConfigurationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDebtCeiling\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDebtCeiling\",\"type\":\"uint256\"}],\"name\":\"DebtCeilingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oldCategoryId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newCategoryId\",\"type\":\"uint8\"}],\"name\":\"EModeAssetCategoryChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"EModeCategoryAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldFlashloanPremiumToProtocol\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"FlashloanPremiumToProtocolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldFlashloanPremiumTotal\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumTotal\",\"type\":\"uint128\"}],\"name\":\"FlashloanPremiumTotalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"LiquidationProtocolFeeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"ReserveActive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveBorrowing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"ReserveDropped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactor\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactor\",\"type\":\"uint256\"}],\"name\":\"ReserveFactorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveFlashLoaning\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"frozen\",\"type\":\"bool\"}],\"name\":\"ReserveFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"variableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"ReserveInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldStrategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newStrategy\",\"type\":\"address\"}],\"name\":\"ReserveInterestRateStrategyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ReservePaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveStableRateBorrowing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldState\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newState\",\"type\":\"bool\"}],\"name\":\"SiloedBorrowingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"StableDebtTokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldSupplyCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"SupplyCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldUnbackedMintCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newUnbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"UnbackedMintCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"VariableDebtTokenUpgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CONFIGURATOR_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"configureReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"aTokenImpl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"underlyingAssetDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.InitReserveInput[]\",\"name\":\"input\",\"type\":\"tuple[]\"}],\"name\":\"initReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"newCategoryId\",\"type\":\"uint8\"}],\"name\":\"setAssetEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"setBorrowCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"borrowable\",\"type\":\"bool\"}],\"name\":\"setBorrowableInIsolation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newDebtCeiling\",\"type\":\"uint256\"}],\"name\":\"setDebtCeiling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"setEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"setLiquidationProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setPoolPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"setReserveActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newReserveFactor\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveFlashLoaning\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"freeze\",\"type\":\"bool\"}],\"name\":\"setReserveFreeze\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setReservePause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveStableRateBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"newSiloed\",\"type\":\"bool\"}],\"name\":\"setSiloedBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"setSupplyCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newUnbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"setUnbackedMintCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateATokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateAToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiumToProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumTotal\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiumTotal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateDebtTokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateStableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateDebtTokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateVariableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Implements the configuration methods for the Aave protocol\",\"kind\":\"dev\",\"methods\":{\"configureReserveAsCollateral(address,uint256,uint256,uint256)\":{\"details\":\"All the values are expressed in bps. A value of 10000, results in 100.00%The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"liquidationBonus\":\"The bonus liquidators receive to liquidate this asset\",\"liquidationThreshold\":\"The threshold at which loans using this asset as collateral will be considered undercollateralized\",\"ltv\":\"The loan to value of the asset when used as collateral\"}},\"dropReserve(address)\":{\"params\":{\"asset\":\"The address of the reserve to drop\"}},\"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])\":{\"params\":{\"input\":\"The array of initialization parameters\"}},\"setAssetEModeCategory(address,uint8)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newCategoryId\":\"The new category id of the asset\"}},\"setBorrowCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newBorrowCap\":\"The new borrow cap of the reserve\"}},\"setBorrowableInIsolation(address,bool)\":{\"details\":\"When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed amount will be accumulated in the isolated collateral's total debt exposureOnly assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep consistency in the debt ceiling calculations\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"borrowable\":\"True if the asset should be borrowable in isolation, false otherwise\"}},\"setDebtCeiling(address,uint256)\":{\"params\":{\"newDebtCeiling\":\"The new debt ceiling\"}},\"setEModeCategory(uint8,uint16,uint16,uint16,address,string)\":{\"details\":\"If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and overcollateralization of the users using this category.The new ltv and liquidation threshold must be greater than the base ltvs and liquidation thresholds of all assets within the eMode category\",\"params\":{\"categoryId\":\"The id of the category to be configured\",\"label\":\"A label identifying the category\",\"liquidationBonus\":\"The liquidation bonus associated with the category\",\"liquidationThreshold\":\"The liquidation threshold associated with the category\",\"ltv\":\"The ltv associated with the category\",\"oracle\":\"The oracle associated with the category\"}},\"setLiquidationProtocolFee(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newFee\":\"The new liquidation protocol fee of the reserve, expressed in bps\"}},\"setPoolPause(bool)\":{\"params\":{\"paused\":\"True if protocol needs to be paused, false otherwise\"}},\"setReserveActive(address,bool)\":{\"params\":{\"active\":\"True if the reserve needs to be active, false otherwise\",\"asset\":\"The address of the underlying asset of the reserve\"}},\"setReserveBorrowing(address,bool)\":{\"details\":\"Can only be disabled (set to false) if stable borrowing is disabled\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if borrowing needs to be enabled, false otherwise\"}},\"setReserveFactor(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newReserveFactor\":\"The new reserve factor of the reserve\"}},\"setReserveFlashLoaning(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if flashloans need to be enabled, false otherwise\"}},\"setReserveFreeze(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"freeze\":\"True if the reserve needs to be frozen, false otherwise\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newRateStrategyAddress\":\"The address of the new interest strategy contract\"}},\"setReservePause(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"paused\":\"True if pausing the reserve, false if unpausing\"}},\"setReserveStableRateBorrowing(address,bool)\":{\"details\":\"Can only be enabled (set to true) if borrowing is enabled\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if stable rate borrowing needs to be enabled, false otherwise\"}},\"setSiloedBorrowing(address,bool)\":{\"params\":{\"siloed\":\"The new siloed borrowing state\"}},\"setSupplyCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newSupplyCap\":\"The new supply cap of the reserve\"}},\"setUnbackedMintCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newUnbackedMintCap\":\"The new unbacked mint cap of the reserve\"}},\"updateAToken((address,address,address,string,string,address,bytes))\":{\"details\":\"Updates the aToken implementation for the reserve.\",\"params\":{\"input\":\"The aToken update parameters\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"newBridgeProtocolFee\":\"The part of the fee sent to the protocol treasury, expressed in bps\"}},\"updateFlashloanPremiumToProtocol(uint128)\":{\"details\":\"Expressed in bpsThe premium to protocol is calculated on the total flashloan premium\",\"params\":{\"newFlashloanPremiumToProtocol\":\"The part of the flashloan premium sent to the protocol treasury\"}},\"updateFlashloanPremiumTotal(uint128)\":{\"details\":\"Expressed in bpsThe premium is calculated on the total amount borrowed\",\"params\":{\"newFlashloanPremiumTotal\":\"The total flashloan premium\"}},\"updateStableDebtToken((address,address,string,string,address,bytes))\":{\"params\":{\"input\":\"The stableDebtToken update parameters\"}},\"updateVariableDebtToken((address,address,string,string,address,bytes))\":{\"params\":{\"input\":\"The variableDebtToken update parameters\"}}},\"title\":\"PoolConfigurator\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"configureReserveAsCollateral(address,uint256,uint256,uint256)\":{\"notice\":\"Configures the reserve collateralization parameters.\"},\"dropReserve(address)\":{\"notice\":\"Drops a reserve entirely.\"},\"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])\":{\"notice\":\"Initializes multiple reserves.\"},\"setAssetEModeCategory(address,uint8)\":{\"notice\":\"Assign an efficiency mode (eMode) category to asset.\"},\"setBorrowCap(address,uint256)\":{\"notice\":\"Updates the borrow cap of a reserve.\"},\"setBorrowableInIsolation(address,bool)\":{\"notice\":\"Sets the borrowable in isolation flag for the reserve.\"},\"setDebtCeiling(address,uint256)\":{\"notice\":\"Sets the debt ceiling for an asset.\"},\"setEModeCategory(uint8,uint16,uint16,uint16,address,string)\":{\"notice\":\"Adds a new efficiency mode (eMode) category.\"},\"setLiquidationProtocolFee(address,uint256)\":{\"notice\":\"Updates the liquidation protocol fee of reserve.\"},\"setPoolPause(bool)\":{\"notice\":\"Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions are suspended.\"},\"setReserveActive(address,bool)\":{\"notice\":\"Activate or deactivate a reserve\"},\"setReserveBorrowing(address,bool)\":{\"notice\":\"Configures borrowing on a reserve.\"},\"setReserveFactor(address,uint256)\":{\"notice\":\"Updates the reserve factor of a reserve.\"},\"setReserveFlashLoaning(address,bool)\":{\"notice\":\"Enable or disable flashloans on a reserve\"},\"setReserveFreeze(address,bool)\":{\"notice\":\"Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Sets the interest rate strategy of a reserve.\"},\"setReservePause(address,bool)\":{\"notice\":\"Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay, swap interest rate, liquidate, atoken transfers).\"},\"setReserveStableRateBorrowing(address,bool)\":{\"notice\":\"Enable or disable stable rate borrowing on a reserve.\"},\"setSiloedBorrowing(address,bool)\":{\"notice\":\"Sets siloed borrowing for an asset\"},\"setSupplyCap(address,uint256)\":{\"notice\":\"Updates the supply cap of a reserve.\"},\"setUnbackedMintCap(address,uint256)\":{\"notice\":\"Updates the unbacked mint cap of reserve.\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the bridge fee collected by the protocol reserves.\"},\"updateFlashloanPremiumToProtocol(uint128)\":{\"notice\":\"Updates the flash loan premium collected by protocol reserves\"},\"updateFlashloanPremiumTotal(uint128)\":{\"notice\":\"Updates the total flash loan premium. Total flash loan premium consists of two parts: - A part is sent to aToken holders as extra balance - A part is collected by the protocol reserves\"},\"updateStableDebtToken((address,address,string,string,address,bytes))\":{\"notice\":\"Updates the stable debt token implementation for the reserve.\"},\"updateVariableDebtToken((address,address,string,string,address,bytes))\":{\"notice\":\"Updates the variable debt token implementation for the asset.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/pool/PoolConfigurator.sol\":\"PoolConfigurator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize, which returns 0 for contracts in\\n    // construction, since the code is only stored at the end of the\\n    // constructor execution.\\n\\n    uint256 size;\\n    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\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, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\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   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\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   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\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 {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\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 Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title IPoolConfigurator\\n * @author Aave\\n * @notice Defines the basic interface for a Pool configurator.\\n */\\ninterface IPoolConfigurator {\\n  /**\\n   * @dev Emitted when a reserve is initialized.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aToken The address of the associated aToken contract\\n   * @param stableDebtToken The address of the associated stable rate debt token\\n   * @param variableDebtToken The address of the associated variable rate debt token\\n   * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve\\n   */\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when borrowing is enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing is enabled, false otherwise\\n   */\\n  event ReserveBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when flashloans are enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans are enabled, false otherwise\\n   */\\n  event ReserveFlashLoaning(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when the collateralization risk parameters for the specified asset are updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  event CollateralConfigurationChanged(\\n    address indexed asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  );\\n\\n  /**\\n   * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing is enabled, false otherwise\\n   */\\n  event ReserveStableRateBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when a reserve is activated or deactivated\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if reserve is active, false otherwise\\n   */\\n  event ReserveActive(address indexed asset, bool active);\\n\\n  /**\\n   * @dev Emitted when a reserve is frozen or unfrozen\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param frozen True if reserve is frozen, false otherwise\\n   */\\n  event ReserveFrozen(address indexed asset, bool frozen);\\n\\n  /**\\n   * @dev Emitted when a reserve is paused or unpaused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if reserve is paused, false otherwise\\n   */\\n  event ReservePaused(address indexed asset, bool paused);\\n\\n  /**\\n   * @dev Emitted when a reserve is dropped.\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  event ReserveDropped(address indexed asset);\\n\\n  /**\\n   * @dev Emitted when a reserve factor is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldReserveFactor The old reserve factor, expressed in bps\\n   * @param newReserveFactor The new reserve factor, expressed in bps\\n   */\\n  event ReserveFactorChanged(\\n    address indexed asset,\\n    uint256 oldReserveFactor,\\n    uint256 newReserveFactor\\n  );\\n\\n  /**\\n   * @dev Emitted when the borrow cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldBorrowCap The old borrow cap\\n   * @param newBorrowCap The new borrow cap\\n   */\\n  event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);\\n\\n  /**\\n   * @dev Emitted when the supply cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldSupplyCap The old supply cap\\n   * @param newSupplyCap The new supply cap\\n   */\\n  event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);\\n\\n  /**\\n   * @dev Emitted when the liquidation protocol fee of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldFee The old liquidation protocol fee, expressed in bps\\n   * @param newFee The new liquidation protocol fee, expressed in bps\\n   */\\n  event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);\\n\\n  /**\\n   * @dev Emitted when the unbacked mint cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldUnbackedMintCap The old unbacked mint cap\\n   * @param newUnbackedMintCap The new unbacked mint cap\\n   */\\n  event UnbackedMintCapChanged(\\n    address indexed asset,\\n    uint256 oldUnbackedMintCap,\\n    uint256 newUnbackedMintCap\\n  );\\n\\n  /**\\n   * @dev Emitted when the category of an asset in eMode is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldCategoryId The old eMode asset category\\n   * @param newCategoryId The new eMode asset category\\n   */\\n  event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);\\n\\n  /**\\n   * @dev Emitted when a new eMode category is added.\\n   * @param categoryId The new eMode category id\\n   * @param ltv The ltv for the asset category in eMode\\n   * @param liquidationThreshold The liquidationThreshold for the asset category in eMode\\n   * @param liquidationBonus The liquidationBonus for the asset category in eMode\\n   * @param oracle The optional address of the price oracle specific for this category\\n   * @param label A human readable identifier for the category\\n   */\\n  event EModeCategoryAdded(\\n    uint8 indexed categoryId,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus,\\n    address oracle,\\n    string label\\n  );\\n\\n  /**\\n   * @dev Emitted when a reserve interest strategy contract is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldStrategy The address of the old interest strategy contract\\n   * @param newStrategy The address of the new interest strategy contract\\n   */\\n  event ReserveInterestRateStrategyChanged(\\n    address indexed asset,\\n    address oldStrategy,\\n    address newStrategy\\n  );\\n\\n  /**\\n   * @dev Emitted when an aToken implementation is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The aToken proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a stable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The stable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a variable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The variable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the debt ceiling of an asset is set.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldDebtCeiling The old debt ceiling\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);\\n\\n  /**\\n   * @dev Emitted when the the siloed borrowing state for an asset is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldState The old siloed borrowing state\\n   * @param newState The new siloed borrowing state\\n   */\\n  event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);\\n\\n  /**\\n   * @dev Emitted when the bridge protocol fee is updated.\\n   * @param oldBridgeProtocolFee The old protocol fee, expressed in bps\\n   * @param newBridgeProtocolFee The new protocol fee, expressed in bps\\n   */\\n  event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);\\n\\n  /**\\n   * @dev Emitted when the total premium on flashloans is updated.\\n   * @param oldFlashloanPremiumTotal The old premium, expressed in bps\\n   * @param newFlashloanPremiumTotal The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumTotalUpdated(\\n    uint128 oldFlashloanPremiumTotal,\\n    uint128 newFlashloanPremiumTotal\\n  );\\n\\n  /**\\n   * @dev Emitted when the part of the premium that goes to protocol is updated.\\n   * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\\n   * @param newFlashloanPremiumToProtocol The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumToProtocolUpdated(\\n    uint128 oldFlashloanPremiumToProtocol,\\n    uint128 newFlashloanPremiumToProtocol\\n  );\\n\\n  /**\\n   * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the reserve is borrowable in isolation, false otherwise\\n   */\\n  event BorrowableInIsolationChanged(address asset, bool borrowable);\\n\\n  /**\\n   * @notice Initializes multiple reserves.\\n   * @param input The array of initialization parameters\\n   */\\n  function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;\\n\\n  /**\\n   * @dev Updates the aToken implementation for the reserve.\\n   * @param input The aToken update parameters\\n   */\\n  function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;\\n\\n  /**\\n   * @notice Updates the stable debt token implementation for the reserve.\\n   * @param input The stableDebtToken update parameters\\n   */\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Updates the variable debt token implementation for the asset.\\n   * @param input The variableDebtToken update parameters\\n   */\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Configures borrowing on a reserve.\\n   * @dev Can only be disabled (set to false) if stable borrowing is disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Configures the reserve collateralization parameters.\\n   * @dev All the values are expressed in bps. A value of 10000, results in 100.00%\\n   * @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external;\\n\\n  /**\\n   * @notice Enable or disable stable rate borrowing on a reserve.\\n   * @dev Can only be enabled (set to true) if borrowing is enabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveStableRateBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Enable or disable flashloans on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans need to be enabled, false otherwise\\n   */\\n  function setReserveFlashLoaning(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Activate or deactivate a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if the reserve needs to be active, false otherwise\\n   */\\n  function setReserveActive(address asset, bool active) external;\\n\\n  /**\\n   * @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\\n   * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param freeze True if the reserve needs to be frozen, false otherwise\\n   */\\n  function setReserveFreeze(address asset, bool freeze) external;\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\\n   * borrowed amount will be accumulated in the isolated collateral's total debt exposure\\n   * @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the asset should be borrowable in isolation, false otherwise\\n   */\\n  function setBorrowableInIsolation(address asset, bool borrowable) external;\\n\\n  /**\\n   * @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\\n   * swap interest rate, liquidate, atoken transfers).\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if pausing the reserve, false if unpausing\\n   */\\n  function setReservePause(address asset, bool paused) external;\\n\\n  /**\\n   * @notice Updates the reserve factor of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newReserveFactor The new reserve factor of the reserve\\n   */\\n  function setReserveFactor(address asset, uint256 newReserveFactor) external;\\n\\n  /**\\n   * @notice Sets the interest rate strategy of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newRateStrategyAddress The address of the new interest strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\\n   * are suspended.\\n   * @param paused True if protocol needs to be paused, false otherwise\\n   */\\n  function setPoolPause(bool paused) external;\\n\\n  /**\\n   * @notice Updates the borrow cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newBorrowCap The new borrow cap of the reserve\\n   */\\n  function setBorrowCap(address asset, uint256 newBorrowCap) external;\\n\\n  /**\\n   * @notice Updates the supply cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newSupplyCap The new supply cap of the reserve\\n   */\\n  function setSupplyCap(address asset, uint256 newSupplyCap) external;\\n\\n  /**\\n   * @notice Updates the liquidation protocol fee of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newFee The new liquidation protocol fee of the reserve, expressed in bps\\n   */\\n  function setLiquidationProtocolFee(address asset, uint256 newFee) external;\\n\\n  /**\\n   * @notice Updates the unbacked mint cap of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newUnbackedMintCap The new unbacked mint cap of the reserve\\n   */\\n  function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;\\n\\n  /**\\n   * @notice Assign an efficiency mode (eMode) category to asset.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newCategoryId The new category id of the asset\\n   */\\n  function setAssetEModeCategory(address asset, uint8 newCategoryId) external;\\n\\n  /**\\n   * @notice Adds a new efficiency mode (eMode) category.\\n   * @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\\n   * overcollateralization of the users using this category.\\n   * @dev The new ltv and liquidation threshold must be greater than the base\\n   * ltvs and liquidation thresholds of all assets within the eMode category\\n   * @param categoryId The id of the category to be configured\\n   * @param ltv The ltv associated with the category\\n   * @param liquidationThreshold The liquidation threshold associated with the category\\n   * @param liquidationBonus The liquidation bonus associated with the category\\n   * @param oracle The oracle associated with the category\\n   * @param label A label identifying the category\\n   */\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external;\\n\\n  /**\\n   * @notice Drops a reserve entirely.\\n   * @param asset The address of the reserve to drop\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the bridge fee collected by the protocol reserves.\\n   * @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps\\n   */\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates the total flash loan premium.\\n   * Total flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra balance\\n   * - A part is collected by the protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium is calculated on the total amount borrowed\\n   * @param newFlashloanPremiumTotal The total flashloan premium\\n   */\\n  function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;\\n\\n  /**\\n   * @notice Updates the flash loan premium collected by protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium to protocol is calculated on the total flashloan premium\\n   * @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury\\n   */\\n  function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;\\n\\n  /**\\n   * @notice Sets the debt ceiling for an asset.\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  function setDebtCeiling(address asset, uint256 newDebtCeiling) external;\\n\\n  /**\\n   * @notice Sets siloed borrowing for an asset\\n   * @param siloed The new siloed borrowing state\\n   */\\n  function setSiloedBorrowing(address asset, bool siloed) external;\\n}\\n\",\"keccak256\":\"0xd9083035ef01cdab5f60a04f817f3449814f37d5ade136a3d4734447ede04d71\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ConfiguratorLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';\\nimport {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';\\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title ConfiguratorLogic library\\n * @author Aave\\n * @notice Implements the functions to initialize reserves and update aTokens and debtTokens\\n */\\nlibrary ConfiguratorLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPoolConfigurator` for descriptions\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\\n   * @dev Emits the `ReserveInitialized` event\\n   * @param pool The Pool in which the reserve will be initialized\\n   * @param input The needed parameters for the initialization\\n   */\\n  function executeInitReserve(\\n    IPool pool,\\n    ConfiguratorInputTypes.InitReserveInput calldata input\\n  ) public {\\n    address aTokenProxyAddress = _initTokenWithProxy(\\n      input.aTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableAToken.initialize.selector,\\n        pool,\\n        input.treasury,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.aTokenName,\\n        input.aTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address stableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.stableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.stableDebtTokenName,\\n        input.stableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address variableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.variableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.variableDebtTokenName,\\n        input.variableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    pool.initReserve(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);\\n\\n    currentConfig.setDecimals(input.underlyingAssetDecimals);\\n\\n    currentConfig.setActive(true);\\n    currentConfig.setPaused(false);\\n    currentConfig.setFrozen(false);\\n\\n    pool.setConfiguration(input.underlyingAsset, currentConfig);\\n\\n    emit ReserveInitialized(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the aToken implementation and initializes it\\n   * @dev Emits the `ATokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the aToken\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateAToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableAToken.initialize.selector,\\n      cachedPool,\\n      input.treasury,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);\\n\\n    emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);\\n  }\\n\\n  /**\\n   * @notice Updates the stable debt token implementation and initializes it\\n   * @dev Emits the `StableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the stable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateStableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit StableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the variable debt token implementation and initializes it\\n   * @dev Emits the `VariableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the variable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateVariableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit VariableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Creates a new proxy and initializes the implementation\\n   * @param implementation The address of the implementation\\n   * @param initParams The parameters that is passed to the implementation to initialize\\n   * @return The address of initialized proxy\\n   */\\n  function _initTokenWithProxy(\\n    address implementation,\\n    bytes memory initParams\\n  ) internal returns (address) {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(\\n        address(this)\\n      );\\n\\n    proxy.initialize(implementation, initParams);\\n\\n    return address(proxy);\\n  }\\n\\n  /**\\n   * @notice Upgrades the implementation and makes call to the proxy\\n   * @dev The call is used to initialize the new implementation.\\n   * @param proxyAddress The address of the proxy\\n   * @param implementation The address of the new implementation\\n   * @param  initParams The parameters to the call after the upgrade\\n   */\\n  function _upgradeTokenImplementation(\\n    address proxyAddress,\\n    address implementation,\\n    bytes memory initParams\\n  ) internal {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(\\n        payable(proxyAddress)\\n      );\\n\\n    proxy.upgradeToAndCall(implementation, initParams);\\n  }\\n}\\n\",\"keccak256\":\"0xfbf8cf6a8cbfb4c0624f76f1607ec76a58b7320e662309806ee79d6728b78fb7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/PoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {ConfiguratorLogic} from '../libraries/logic/ConfiguratorLogic.sol';\\nimport {ConfiguratorInputTypes} from '../libraries/types/ConfiguratorInputTypes.sol';\\nimport {IPoolConfigurator} from '../../interfaces/IPoolConfigurator.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {IPoolDataProvider} from '../../interfaces/IPoolDataProvider.sol';\\n\\n/**\\n * @title PoolConfigurator\\n * @author Aave\\n * @dev Implements the configuration methods for the Aave protocol\\n */\\ncontract PoolConfigurator is VersionedInitializable, IPoolConfigurator {\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  IPoolAddressesProvider internal _addressesProvider;\\n  IPool internal _pool;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only emergency admin can call functions marked by this modifier.\\n   */\\n  modifier onlyEmergencyAdmin() {\\n    _onlyEmergencyAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only emergency or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyEmergencyOrPoolAdmin() {\\n    _onlyPoolOrEmergencyAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyAssetListingOrPoolAdmins() {\\n    _onlyAssetListingOrPoolAdmins();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only risk or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyRiskOrPoolAdmins() {\\n    _onlyRiskOrPoolAdmins();\\n    _;\\n  }\\n\\n  uint256 public constant CONFIGURATOR_REVISION = 0x1;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return CONFIGURATOR_REVISION;\\n  }\\n\\n  function initialize(IPoolAddressesProvider provider) public initializer {\\n    _addressesProvider = provider;\\n    _pool = IPool(_addressesProvider.getPool());\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function initReserves(\\n    ConfiguratorInputTypes.InitReserveInput[] calldata input\\n  ) external override onlyAssetListingOrPoolAdmins {\\n    IPool cachedPool = _pool;\\n    for (uint256 i = 0; i < input.length; i++) {\\n      ConfiguratorLogic.executeInitReserve(cachedPool, input[i]);\\n    }\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function dropReserve(address asset) external override onlyPoolAdmin {\\n    _pool.dropReserve(asset);\\n    emit ReserveDropped(asset);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateAToken(\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateAToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateStableDebtToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateVariableDebtToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveBorrowing(address asset, bool enabled) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    if (!enabled) {\\n      require(!currentConfig.getStableRateBorrowingEnabled(), Errors.STABLE_BORROWING_ENABLED);\\n    }\\n    currentConfig.setBorrowingEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveBorrowing(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external override onlyRiskOrPoolAdmins {\\n    //validation of the parameters: the LTV can\\n    //only be lower or equal than the liquidation threshold\\n    //(otherwise a loan against the asset would cause instantaneous liquidation)\\n    require(ltv <= liquidationThreshold, Errors.INVALID_RESERVE_PARAMS);\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    if (liquidationThreshold != 0) {\\n      //liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less\\n      //collateral than needed to cover the debt\\n      require(liquidationBonus > PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_PARAMS);\\n\\n      //if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\\n      //a loan is taken there is enough collateral available to cover the liquidation bonus\\n      require(\\n        liquidationThreshold.percentMul(liquidationBonus) <= PercentageMath.PERCENTAGE_FACTOR,\\n        Errors.INVALID_RESERVE_PARAMS\\n      );\\n    } else {\\n      require(liquidationBonus == 0, Errors.INVALID_RESERVE_PARAMS);\\n      //if the liquidation threshold is being set to 0,\\n      // the reserve is being disabled as collateral. To do so,\\n      //we need to ensure no liquidity is supplied\\n      _checkNoSuppliers(asset);\\n    }\\n\\n    currentConfig.setLtv(ltv);\\n    currentConfig.setLiquidationThreshold(liquidationThreshold);\\n    currentConfig.setLiquidationBonus(liquidationBonus);\\n\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    emit CollateralConfigurationChanged(asset, ltv, liquidationThreshold, liquidationBonus);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveStableRateBorrowing(\\n    address asset,\\n    bool enabled\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    if (enabled) {\\n      require(currentConfig.getBorrowingEnabled(), Errors.BORROWING_NOT_ENABLED);\\n    }\\n    currentConfig.setStableRateBorrowingEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveStableRateBorrowing(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFlashLoaning(\\n    address asset,\\n    bool enabled\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    currentConfig.setFlashLoanEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFlashLoaning(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveActive(address asset, bool active) external override onlyPoolAdmin {\\n    if (!active) _checkNoSuppliers(asset);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setActive(active);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveActive(asset, active);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFreeze(address asset, bool freeze) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setFrozen(freeze);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFrozen(asset, freeze);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setBorrowableInIsolation(\\n    address asset,\\n    bool borrowable\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setBorrowableInIsolation(borrowable);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit BorrowableInIsolationChanged(asset, borrowable);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReservePause(address asset, bool paused) public override onlyEmergencyOrPoolAdmin {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setPaused(paused);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReservePaused(asset, paused);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFactor(\\n    address asset,\\n    uint256 newReserveFactor\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(newReserveFactor <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldReserveFactor = currentConfig.getReserveFactor();\\n    currentConfig.setReserveFactor(newReserveFactor);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFactorChanged(asset, oldReserveFactor, newReserveFactor);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setDebtCeiling(\\n    address asset,\\n    uint256 newDebtCeiling\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    uint256 oldDebtCeiling = currentConfig.getDebtCeiling();\\n    if (oldDebtCeiling == 0) {\\n      _checkNoSuppliers(asset);\\n    }\\n    currentConfig.setDebtCeiling(newDebtCeiling);\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    if (newDebtCeiling == 0) {\\n      _pool.resetIsolationModeTotalDebt(asset);\\n    }\\n\\n    emit DebtCeilingChanged(asset, oldDebtCeiling, newDebtCeiling);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setSiloedBorrowing(\\n    address asset,\\n    bool newSiloed\\n  ) external override onlyRiskOrPoolAdmins {\\n    if (newSiloed) {\\n      _checkNoBorrowers(asset);\\n    }\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    bool oldSiloed = currentConfig.getSiloedBorrowing();\\n\\n    currentConfig.setSiloedBorrowing(newSiloed);\\n\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    emit SiloedBorrowingChanged(asset, oldSiloed, newSiloed);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setBorrowCap(\\n    address asset,\\n    uint256 newBorrowCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldBorrowCap = currentConfig.getBorrowCap();\\n    currentConfig.setBorrowCap(newBorrowCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit BorrowCapChanged(asset, oldBorrowCap, newBorrowCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setSupplyCap(\\n    address asset,\\n    uint256 newSupplyCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldSupplyCap = currentConfig.getSupplyCap();\\n    currentConfig.setSupplyCap(newSupplyCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit SupplyCapChanged(asset, oldSupplyCap, newSupplyCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setLiquidationProtocolFee(\\n    address asset,\\n    uint256 newFee\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(newFee <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_LIQUIDATION_PROTOCOL_FEE);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldFee = currentConfig.getLiquidationProtocolFee();\\n    currentConfig.setLiquidationProtocolFee(newFee);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit LiquidationProtocolFeeChanged(asset, oldFee, newFee);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(ltv != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n    require(liquidationThreshold != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n\\n    // validation of the parameters: the LTV can\\n    // only be lower or equal than the liquidation threshold\\n    // (otherwise a loan against the asset would cause instantaneous liquidation)\\n    require(ltv <= liquidationThreshold, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n    require(\\n      liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\\n    );\\n\\n    // if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\\n    // a loan is taken there is enough collateral available to cover the liquidation bonus\\n    require(\\n      uint256(liquidationThreshold).percentMul(liquidationBonus) <=\\n        PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\\n    );\\n\\n    address[] memory reserves = _pool.getReservesList();\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(reserves[i]);\\n      if (categoryId == currentConfig.getEModeCategory()) {\\n        require(ltv > currentConfig.getLtv(), Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n        require(\\n          liquidationThreshold > currentConfig.getLiquidationThreshold(),\\n          Errors.INVALID_EMODE_CATEGORY_PARAMS\\n        );\\n      }\\n    }\\n\\n    _pool.configureEModeCategory(\\n      categoryId,\\n      DataTypes.EModeCategory({\\n        ltv: ltv,\\n        liquidationThreshold: liquidationThreshold,\\n        liquidationBonus: liquidationBonus,\\n        priceSource: oracle,\\n        label: label\\n      })\\n    );\\n    emit EModeCategoryAdded(categoryId, ltv, liquidationThreshold, liquidationBonus, oracle, label);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setAssetEModeCategory(\\n    address asset,\\n    uint8 newCategoryId\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    if (newCategoryId != 0) {\\n      DataTypes.EModeCategory memory categoryData = _pool.getEModeCategoryData(newCategoryId);\\n      require(\\n        categoryData.liquidationThreshold > currentConfig.getLiquidationThreshold(),\\n        Errors.INVALID_EMODE_CATEGORY_ASSIGNMENT\\n      );\\n    }\\n    uint256 oldCategoryId = currentConfig.getEModeCategory();\\n    currentConfig.setEModeCategory(newCategoryId);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit EModeAssetCategoryChanged(asset, uint8(oldCategoryId), newCategoryId);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setUnbackedMintCap(\\n    address asset,\\n    uint256 newUnbackedMintCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldUnbackedMintCap = currentConfig.getUnbackedMintCap();\\n    currentConfig.setUnbackedMintCap(newUnbackedMintCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit UnbackedMintCapChanged(asset, oldUnbackedMintCap, newUnbackedMintCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveData memory reserve = _pool.getReserveData(asset);\\n    address oldRateStrategyAddress = reserve.interestRateStrategyAddress;\\n    _pool.setReserveInterestRateStrategyAddress(asset, newRateStrategyAddress);\\n    emit ReserveInterestRateStrategyChanged(asset, oldRateStrategyAddress, newRateStrategyAddress);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setPoolPause(bool paused) external override onlyEmergencyAdmin {\\n    address[] memory reserves = _pool.getReservesList();\\n\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      if (reserves[i] != address(0)) {\\n        setReservePause(reserves[i], paused);\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external override onlyPoolAdmin {\\n    require(\\n      newBridgeProtocolFee <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.BRIDGE_PROTOCOL_FEE_INVALID\\n    );\\n    uint256 oldBridgeProtocolFee = _pool.BRIDGE_PROTOCOL_FEE();\\n    _pool.updateBridgeProtocolFee(newBridgeProtocolFee);\\n    emit BridgeProtocolFeeUpdated(oldBridgeProtocolFee, newBridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateFlashloanPremiumTotal(\\n    uint128 newFlashloanPremiumTotal\\n  ) external override onlyPoolAdmin {\\n    require(\\n      newFlashloanPremiumTotal <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.FLASHLOAN_PREMIUM_INVALID\\n    );\\n    uint128 oldFlashloanPremiumTotal = _pool.FLASHLOAN_PREMIUM_TOTAL();\\n    _pool.updateFlashloanPremiums(newFlashloanPremiumTotal, _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL());\\n    emit FlashloanPremiumTotalUpdated(oldFlashloanPremiumTotal, newFlashloanPremiumTotal);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateFlashloanPremiumToProtocol(\\n    uint128 newFlashloanPremiumToProtocol\\n  ) external override onlyPoolAdmin {\\n    require(\\n      newFlashloanPremiumToProtocol <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.FLASHLOAN_PREMIUM_INVALID\\n    );\\n    uint128 oldFlashloanPremiumToProtocol = _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL();\\n    _pool.updateFlashloanPremiums(_pool.FLASHLOAN_PREMIUM_TOTAL(), newFlashloanPremiumToProtocol);\\n    emit FlashloanPremiumToProtocolUpdated(\\n      oldFlashloanPremiumToProtocol,\\n      newFlashloanPremiumToProtocol\\n    );\\n  }\\n\\n  function _checkNoSuppliers(address asset) internal view {\\n    (, uint256 accruedToTreasury, uint256 totalATokens, , , , , , , , , ) = IPoolDataProvider(\\n      _addressesProvider.getPoolDataProvider()\\n    ).getReserveData(asset);\\n\\n    require(totalATokens == 0 && accruedToTreasury == 0, Errors.RESERVE_LIQUIDITY_NOT_ZERO);\\n  }\\n\\n  function _checkNoBorrowers(address asset) internal view {\\n    uint256 totalDebt = IPoolDataProvider(_addressesProvider.getPoolDataProvider()).getTotalDebt(\\n      asset\\n    );\\n    require(totalDebt == 0, Errors.RESERVE_DEBT_NOT_ZERO);\\n  }\\n\\n  function _onlyPoolAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n  }\\n\\n  function _onlyEmergencyAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isEmergencyAdmin(msg.sender), Errors.CALLER_NOT_EMERGENCY_ADMIN);\\n  }\\n\\n  function _onlyPoolOrEmergencyAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isPoolAdmin(msg.sender) || aclManager.isEmergencyAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_OR_EMERGENCY_ADMIN\\n    );\\n  }\\n\\n  function _onlyAssetListingOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyRiskOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isRiskAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_RISK_OR_POOL_ADMIN\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x1842366a68e5295a64ff36326bf6055647749bedcd219ca9e385c90c09488edd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":26628,"contract":"contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"_addressesProvider","offset":0,"slot":"52","type":"t_contract(IPoolAddressesProvider)5282"},{"astId":26631,"contract":"contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"_pool","offset":0,"slot":"53","type":"t_contract(IPool)5073"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IPool)5073":{"encoding":"inplace","label":"contract IPool","numberOfBytes":"20"},"t_contract(IPoolAddressesProvider)5282":{"encoding":"inplace","label":"contract IPoolAddressesProvider","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":{"notice":"Configures the reserve collateralization parameters."},"dropReserve(address)":{"notice":"Drops a reserve entirely."},"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":{"notice":"Initializes multiple reserves."},"setAssetEModeCategory(address,uint8)":{"notice":"Assign an efficiency mode (eMode) category to asset."},"setBorrowCap(address,uint256)":{"notice":"Updates the borrow cap of a reserve."},"setBorrowableInIsolation(address,bool)":{"notice":"Sets the borrowable in isolation flag for the reserve."},"setDebtCeiling(address,uint256)":{"notice":"Sets the debt ceiling for an asset."},"setEModeCategory(uint8,uint16,uint16,uint16,address,string)":{"notice":"Adds a new efficiency mode (eMode) category."},"setLiquidationProtocolFee(address,uint256)":{"notice":"Updates the liquidation protocol fee of reserve."},"setPoolPause(bool)":{"notice":"Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions are suspended."},"setReserveActive(address,bool)":{"notice":"Activate or deactivate a reserve"},"setReserveBorrowing(address,bool)":{"notice":"Configures borrowing on a reserve."},"setReserveFactor(address,uint256)":{"notice":"Updates the reserve factor of a reserve."},"setReserveFlashLoaning(address,bool)":{"notice":"Enable or disable flashloans on a reserve"},"setReserveFreeze(address,bool)":{"notice":"Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow or rate swap but allows repayments, liquidations, rate rebalances and withdrawals."},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Sets the interest rate strategy of a reserve."},"setReservePause(address,bool)":{"notice":"Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay, swap interest rate, liquidate, atoken transfers)."},"setReserveStableRateBorrowing(address,bool)":{"notice":"Enable or disable stable rate borrowing on a reserve."},"setSiloedBorrowing(address,bool)":{"notice":"Sets siloed borrowing for an asset"},"setSupplyCap(address,uint256)":{"notice":"Updates the supply cap of a reserve."},"setUnbackedMintCap(address,uint256)":{"notice":"Updates the unbacked mint cap of reserve."},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the bridge fee collected by the protocol reserves."},"updateFlashloanPremiumToProtocol(uint128)":{"notice":"Updates the flash loan premium collected by protocol reserves"},"updateFlashloanPremiumTotal(uint128)":{"notice":"Updates the total flash loan premium. Total flash loan premium consists of two parts: - A part is sent to aToken holders as extra balance - A part is collected by the protocol reserves"},"updateStableDebtToken((address,address,string,string,address,bytes))":{"notice":"Updates the stable debt token implementation for the reserve."},"updateVariableDebtToken((address,address,string,string,address,bytes))":{"notice":"Updates the variable debt token implementation for the asset."}},"version":1}}},"contracts/protocol/pool/PoolStorage.sol":{"PoolStorage":{"abi":[],"devdoc":{"author":"Aave","details":"It defines the storage layout of the Pool contract.","kind":"dev","methods":{},"title":"PoolStorage","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220db8b825c6c488bbf55640693d12eeea3b2a7c6e121919e3c4bed9cd8c394288d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB DUP12 DUP3 0x5C PUSH13 0x488BBF55640693D12EEEA3B2A7 0xC6 0xE1 0x21 SWAP2 SWAP15 EXTCODECOPY 0x4B 0xED SWAP13 0xD8 0xC3 SWAP5 0x28 DUP14 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"528:1683:114:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220db8b825c6c488bbf55640693d12eeea3b2a7c6e121919e3c4bed9cd8c394288d64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB DUP12 DUP3 0x5C PUSH13 0x488BBF55640693D12EEEA3B2A7 0xC6 0xE1 0x21 SWAP2 SWAP15 EXTCODECOPY 0x4B 0xED SWAP13 0xD8 0xC3 SWAP5 0x28 DUP14 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"528:1683:114:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"66","totalCost":"12666"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"details\":\"It defines the storage layout of the Pool contract.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PoolStorage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract used as storage of the Pool contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/pool/PoolStorage.sol\":\"PoolStorage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":28257,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_reserves","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(ReserveData)23909_storage)"},{"astId":28262,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_usersConfig","offset":0,"slot":"1","type":"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)"},{"astId":28266,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_reservesList","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_address)"},{"astId":28271,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_eModeCategories","offset":0,"slot":"3","type":"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)"},{"astId":28275,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_usersEModeCategory","offset":0,"slot":"4","type":"t_mapping(t_address,t_uint8)"},{"astId":28277,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_bridgeProtocolFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":28279,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_flashLoanPremiumTotal","offset":0,"slot":"6","type":"t_uint128"},{"astId":28281,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_flashLoanPremiumToProtocol","offset":16,"slot":"6","type":"t_uint128"},{"astId":28283,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_maxStableRateBorrowSizePercent","offset":0,"slot":"7","type":"t_uint64"},{"astId":28285,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_reservesCount","offset":8,"slot":"7","type":"t_uint16"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_struct(ReserveData)23909_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.ReserveData)","numberOfBytes":"32","value":"t_struct(ReserveData)23909_storage"},"t_mapping(t_address,t_struct(UserConfigurationMap)23916_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.UserConfigurationMap)","numberOfBytes":"32","value":"t_struct(UserConfigurationMap)23916_storage"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint8,t_struct(EModeCategory)23927_storage)":{"encoding":"mapping","key":"t_uint8","label":"mapping(uint8 => struct DataTypes.EModeCategory)","numberOfBytes":"32","value":"t_struct(EModeCategory)23927_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(EModeCategory)23927_storage":{"encoding":"inplace","label":"struct DataTypes.EModeCategory","members":[{"astId":23918,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"ltv","offset":0,"slot":"0","type":"t_uint16"},{"astId":23920,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"liquidationThreshold","offset":2,"slot":"0","type":"t_uint16"},{"astId":23922,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"liquidationBonus","offset":4,"slot":"0","type":"t_uint16"},{"astId":23924,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"priceSource","offset":6,"slot":"0","type":"t_address"},{"astId":23926,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"label","offset":0,"slot":"1","type":"t_string_storage"}],"numberOfBytes":"64"},"t_struct(ReserveConfigurationMap)23912_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":23911,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_struct(ReserveData)23909_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveData","members":[{"astId":23880,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)23912_storage"},{"astId":23882,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"liquidityIndex","offset":0,"slot":"1","type":"t_uint128"},{"astId":23884,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"currentLiquidityRate","offset":16,"slot":"1","type":"t_uint128"},{"astId":23886,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"variableBorrowIndex","offset":0,"slot":"2","type":"t_uint128"},{"astId":23888,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"currentVariableBorrowRate","offset":16,"slot":"2","type":"t_uint128"},{"astId":23890,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"currentStableBorrowRate","offset":0,"slot":"3","type":"t_uint128"},{"astId":23892,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"lastUpdateTimestamp","offset":16,"slot":"3","type":"t_uint40"},{"astId":23894,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"id","offset":21,"slot":"3","type":"t_uint16"},{"astId":23896,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"aTokenAddress","offset":0,"slot":"4","type":"t_address"},{"astId":23898,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"stableDebtTokenAddress","offset":0,"slot":"5","type":"t_address"},{"astId":23900,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"variableDebtTokenAddress","offset":0,"slot":"6","type":"t_address"},{"astId":23902,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"interestRateStrategyAddress","offset":0,"slot":"7","type":"t_address"},{"astId":23904,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"accruedToTreasury","offset":0,"slot":"8","type":"t_uint128"},{"astId":23906,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"unbacked","offset":16,"slot":"8","type":"t_uint128"},{"astId":23908,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"isolationModeTotalDebt","offset":0,"slot":"9","type":"t_uint128"}],"numberOfBytes":"320"},"t_struct(UserConfigurationMap)23916_storage":{"encoding":"inplace","label":"struct DataTypes.UserConfigurationMap","members":[{"astId":23915,"contract":"contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"notice":"Contract used as storage of the Pool contract.","version":1}}},"contracts/protocol/tokenization/AToken.sol":{"AToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"ATOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","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":"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","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":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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 `amount` 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 amount of tokens owned by `account`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"title":"Aave ERC20 AToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_28371":{"entryPoint":null,"id":28371,"parameterSlots":1,"returnSlots":0},"@_30705":{"entryPoint":null,"id":30705,"parameterSlots":0,"returnSlots":0},"@_30916":{"entryPoint":null,"id":30916,"parameterSlots":4,"returnSlots":0},"@_31331":{"entryPoint":null,"id":31331,"parameterSlots":4,"returnSlots":0},"@_31495":{"entryPoint":null,"id":31495,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":541,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":580,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":516,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:50:124"},"nodeType":"YulIf","src":"76:70:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:138:124"},{"body":{"nodeType":"YulBlock","src":"252:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:124"},"nodeType":"YulFunctionCall","src":"300:12:124"},"nodeType":"YulExpressionStatement","src":"300:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:124"},"nodeType":"YulFunctionCall","src":"269:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:124"},"nodeType":"YulFunctionCall","src":"265:32:124"},"nodeType":"YulIf","src":"262:52:124"},{"nodeType":"YulVariableDeclaration","src":"323:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:124"},"nodeType":"YulFunctionCall","src":"336:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:124"},"nodeType":"YulFunctionCall","src":"361:38:124"},"nodeType":"YulExpressionStatement","src":"361:38:124"},{"nodeType":"YulAssignment","src":"408:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:124","type":""}],"src":"157:272:124"},{"body":{"nodeType":"YulBlock","src":"546:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:124"},"nodeType":"YulFunctionCall","src":"594:12:124"},"nodeType":"YulExpressionStatement","src":"594:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:32:124"},"nodeType":"YulIf","src":"556:52:124"},{"nodeType":"YulVariableDeclaration","src":"617:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:124"},"nodeType":"YulFunctionCall","src":"630:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:124"},"nodeType":"YulFunctionCall","src":"655:38:124"},"nodeType":"YulExpressionStatement","src":"655:38:124"},{"nodeType":"YulAssignment","src":"702:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:124","type":""}],"src":"434:289:124"},{"body":{"nodeType":"YulBlock","src":"783:325:124","statements":[{"nodeType":"YulAssignment","src":"793:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:124"},"nodeType":"YulFunctionCall","src":"803:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:124","statements":[{"nodeType":"YulAssignment","src":"903:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:124"},"nodeType":"YulFunctionCall","src":"913:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:124"},"nodeType":"YulFunctionCall","src":"874:26:124"},"nodeType":"YulIf","src":"871:61:124"},{"body":{"nodeType":"YulBlock","src":"991:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:124"},"nodeType":"YulFunctionCall","src":"1015:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:31:124"},"nodeType":"YulExpressionStatement","src":"1005:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:124"},"nodeType":"YulFunctionCall","src":"1049:15:124"},"nodeType":"YulExpressionStatement","src":"1049:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:124"},"nodeType":"YulFunctionCall","src":"1077:15:124"},"nodeType":"YulExpressionStatement","src":"1077:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:124"},"nodeType":"YulFunctionCall","src":"967:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:124"},"nodeType":"YulFunctionCall","src":"944:38:124"},"nodeType":"YulIf","src":"941:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:124","type":""}],"src":"728:380:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b50604051620038ea380380620038ea83398101604081905262000038916200021d565b806040518060400160405280600b81526020016a105513d2d15397d253541360aa1b8152506040518060400160405280600b81526020016a105513d2d15397d253541360aa1b81525060008383838383838383836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f091906200021d565b6001600160a01b03166080528251620001119060379060208601906200015e565b508151620001279060389060208501906200015e565b506039805460ff191660ff9290921691909117905550506001600160a01b031660a05250504660c052506200028195505050505050565b8280546200016c9062000244565b90600052602060002090601f016020900481019282620001905760008555620001db565b82601f10620001ab57805160ff1916838001178555620001db565b82800160010185558215620001db579182015b82811115620001db578251825591602001919060010190620001be565b50620001e9929150620001ed565b5090565b5b80821115620001e95760008155600101620001ee565b6001600160a01b03811681146200021a57600080fd5b50565b6000602082840312156200023057600080fd5b81516200023d8162000204565b9392505050565b600181811c908216806200025957607f821691505b602082108114156200027b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516135d7620003136000396000611ccb0152600081816103bc0152818161071d0152818161088201528181610a8101528181610c9b01528181610d6801528181610e2a01528181610f0d01528181610f8d015281816110b501528181611707015281816119d70152818161238001526124f701526000818161113c01526117c601526135d76000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b604051610240919061303e565b60405180910390f35b61025c61025736600461308d565b6106a0565b6040519015158152602001610240565b6102b961027a3660046130b9565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613130565b610795565b005b6102d661030f3660046130b9565b610b52565b61025c610322366004613224565b610b91565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c11565b61025c61037936600461308d565b610c20565b6102ff61038c36600461308d565b610c64565b6102ff61039f366004613224565b610d31565b6102d66103b23660046130b9565b610ddb565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff610470366004613265565b610ed6565b6102d66104833660046130b9565b610fcf565b610233610ffa565b61025c61049e36600461308d565b611009565b61025c6104b136600461308d565b61104d565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d6611070565b61025c610508366004613287565b61107b565b6102ff61051b366004613224565b611138565b6102ff61052e3660046132cd565b611376565b6102ff610541366004613287565b6116d0565b6102d661055436600461333b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a3660046130b9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f63660046130b9565b6117c2565b6102ff610609366004613224565b6119a0565b60606037805461061d90613374565b80601f016020809104026020016040519081016040528092919081815260200182805461064990613374565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611a52565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078891906133c2565b8290611ac0565b91505090565b6001805460ff16806107a65750303b155b806107b2575060005481115b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061097d88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1792505050565b6109bc86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2a92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a79611b3d565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0c99989796959493929190613424565b60405180910390a38015610b4357600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9d83611c02565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfb91879190610bf6906fffffffffffffffffffffffffffffffff8616906134ce565b611a52565b610c06858583611ca8565b506001949350505050565b6000610c1b611cc7565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf69086906134e5565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50603d54610d2d9073ffffffffffffffffffffffffffffffffffffffff168383611d00565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8b917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9791906133c2565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611ac0565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5081610f84575050565b603c54610fca907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611dd3565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8b565b60606038805461061d90613374565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf69086906134ce565b60008061105983611c02565b9050611066338583611ca8565b5060019392505050565b6000610c1b60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061112f85858585611dd3565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c991906134fd565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a919061351a565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906112c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff86811691161415611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50610dd573ffffffffffffffffffffffffffffffffffffffff85168484611d00565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166113f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a60205260408120549061149b610c11565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e0016040516020818303038152906040528051906020012060405160200161155c9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156115e2573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b506116948260016134e5565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a60205260409020556116c5898989611a52565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061178184848484612014565b73ffffffffffffffffffffffffffffffffffffffff83163014610dd557603d54610dd59073ffffffffffffffffffffffffffffffffffffffff168484611d00565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185391906134fd565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e4919061351a565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50610fca8383836000612332565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611af557600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2d906037906020840190612f43565b8051610d2d906038906020840190612f43565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b686125ae565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611ca4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083a565b5090565b610fca8383836fffffffffffffffffffffffffffffffff166001612332565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611cf85750603b5490565b610c1b611b3d565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611d63573d6000803e3d6000fd5b50611d6d846125b8565b610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083a565b600080611de08484612684565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611eac918491700100000000000000000000000000000000900416611ac0565b611eb68387611ac0565b611ec091906134ce565b9050611ecb85611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f3387611f2e85611c02565b6126c3565b6000611f3f82886134e5565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa191815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006120208383612684565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161208f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916120ec918491700100000000000000000000000000000000900416611ac0565b6120f68386611ac0565b61210091906134ce565b905061210b84611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121738761216e85611c02565b61283f565b8481111561225257600061218786836134ce565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121e991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350612329565b600061225e82876134ce565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122c091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed91906133c2565b9050600061243382610ed08973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050600061247983610ed08973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050612487888888866128a3565b8415612554576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561253b57600080fd5b505af115801561254f573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda866661259a8987612684565b60408051918252602082018890520161231f565b6060610c1b61060e565b60006125f8565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156126375760208114612671576126327f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125bf565b61267e565b823b612668576126687f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125bf565b6001915061267e565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126a857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546126e26fffffffffffffffffffffffffffffffff8316826134e5565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612727838261353c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612838576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561282457600080fd5b505af11580156116c5573d6000803e3d6000fd5b5050505050565b60365461285e6fffffffffffffffffffffffffffffffff8316826134ce565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166127278382613570565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916128ff918491700100000000000000000000000000000000900416611ac0565b6129098385611ac0565b61291391906134ce565b905060006129558673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054919250906129b090839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611ac0565b6129ba8387611ac0565b6129c491906134ce565b90506129cf85611c02565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a2e85611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612aa08888612a9b612a968a8a612684565b611c02565b612c98565b8215612b4f5760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612b8b5750600081115b15612c395760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161231f91815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612cda8282613570565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612d4e838261353c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f3b576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612e4e57600080fd5b505af1158015612e62573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612329576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f2157600080fd5b505af1158015612f35573d6000803e3d6000fd5b50505050505b505050505050565b828054612f4f90613374565b90600052602060002090601f016020900481019282612f715760008555612fb7565b82601f10612f8a57805160ff1916838001178555612fb7565b82800160010185558215612fb7579182015b82811115612fb7578251825591602001919060010190612f9c565b50611ca49291505b80821115611ca45760008155600101612fbf565b6000815180845260005b81811015612ff957602081850181015186830182015201612fdd565b8181111561300b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130516020830184612fd3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461307a57600080fd5b50565b803561308881613058565b919050565b600080604083850312156130a057600080fd5b82356130ab81613058565b946020939093013593505050565b6000602082840312156130cb57600080fd5b813561305181613058565b803560ff8116811461308857600080fd5b60008083601f8401126130f957600080fd5b50813567ffffffffffffffff81111561311157600080fd5b60208301915083602082850101111561312957600080fd5b9250929050565b60008060008060008060008060008060006101008c8e03121561315257600080fd5b61315b8c61307d565b9a5061316960208d0161307d565b995061317760408d0161307d565b985061318560608d0161307d565b975061319360808d016130d6565b965067ffffffffffffffff8060a08e013511156131af57600080fd5b6131bf8e60a08f01358f016130e7565b909750955060c08d01358110156131d557600080fd5b6131e58e60c08f01358f016130e7565b909550935060e08d01358110156131fb57600080fd5b5061320c8d60e08e01358e016130e7565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561323957600080fd5b833561324481613058565b9250602084013561325481613058565b929592945050506040919091013590565b6000806040838503121561327857600080fd5b50508035926020909101359150565b6000806000806080858703121561329d57600080fd5b84356132a881613058565b935060208501356132b881613058565b93969395505050506040820135916060013590565b600080600080600080600060e0888a0312156132e857600080fd5b87356132f381613058565b9650602088013561330381613058565b9550604088013594506060880135935061331f608089016130d6565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561334e57600080fd5b823561335981613058565b9150602083013561336981613058565b809150509250929050565b600181811c9082168061338857607f821691505b6020821081141561267e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156133d457600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c0606083015261346760c08301888a6133db565b828103608084015261347a8187896133db565b905082810360a084015261348f8185876133db565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134e0576134e061349f565b500390565b600082198211156134f8576134f861349f565b500190565b60006020828403121561350f57600080fd5b815161305181613058565b60006020828403121561352c57600080fd5b8151801515811461305157600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156135675761356761349f565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156135995761359961349f565b03939250505056fea2646970667358221220c3dec47a8f72b8a7f7388406f63cddbe90d3a10f0f6fbda03774d394a55cd27e64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x38EA CODESIZE SUB DUP1 PUSH3 0x38EA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x21D JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF0 SWAP2 SWAP1 PUSH3 0x21D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE DUP3 MLOAD PUSH3 0x111 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x15E JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x127 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x15E JUMP JUMPDEST POP PUSH1 0x39 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP POP CHAINID PUSH1 0xC0 MSTORE POP PUSH3 0x281 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x16C SWAP1 PUSH3 0x244 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x190 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1DB JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1AB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1DB JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1DB JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1DB JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1BE JUMP JUMPDEST POP PUSH3 0x1E9 SWAP3 SWAP2 POP PUSH3 0x1ED JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1E9 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1EE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x23D DUP2 PUSH3 0x204 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x259 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x27B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x35D7 PUSH3 0x313 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1CCB ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3BC ADD MSTORE DUP2 DUP2 PUSH2 0x71D ADD MSTORE DUP2 DUP2 PUSH2 0x882 ADD MSTORE DUP2 DUP2 PUSH2 0xA81 ADD MSTORE DUP2 DUP2 PUSH2 0xC9B ADD MSTORE DUP2 DUP2 PUSH2 0xD68 ADD MSTORE DUP2 DUP2 PUSH2 0xE2A ADD MSTORE DUP2 DUP2 PUSH2 0xF0D ADD MSTORE DUP2 DUP2 PUSH2 0xF8D ADD MSTORE DUP2 DUP2 PUSH2 0x10B5 ADD MSTORE DUP2 DUP2 PUSH2 0x1707 ADD MSTORE DUP2 DUP2 PUSH2 0x19D7 ADD MSTORE DUP2 DUP2 PUSH2 0x2380 ADD MSTORE PUSH2 0x24F7 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x113C ADD MSTORE PUSH2 0x17C6 ADD MSTORE PUSH2 0x35D7 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3130 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xB52 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC11 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0xC20 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0xC64 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0xD31 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xDDB JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x3265 JUMP JUMPDEST PUSH2 0xED6 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xFCF JUMP JUMPDEST PUSH2 0x233 PUSH2 0xFFA JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x1009 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x104D JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x3287 JUMP JUMPDEST PUSH2 0x107B JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0x1138 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x32CD JUMP JUMPDEST PUSH2 0x1376 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3287 JUMP JUMPDEST PUSH2 0x16D0 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x333B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0x17C2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0x19A0 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3374 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x3374 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1A52 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1AC0 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x7A6 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B2 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x843 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x880 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x97D DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B17 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BC DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B2A SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA79 PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0C SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3424 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB43 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9D DUP4 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFB SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF6 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x34CE JUMP JUMPDEST PUSH2 0x1A52 JUMP JUMPDEST PUSH2 0xC06 DUP6 DUP6 DUP4 PUSH2 0x1CA8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B PUSH2 0x1CC7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF6 SWAP1 DUP7 SWAP1 PUSH2 0x34E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2D SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D00 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8B SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE73 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE97 SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF7A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP DUP2 PUSH2 0xF84 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0xFCA SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1DD3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3374 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF6 SWAP1 DUP7 SWAP1 PUSH2 0x34CE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1059 DUP4 PUSH2 0x1C02 JUMP JUMPDEST SWAP1 POP PUSH2 0x1066 CALLER DUP6 DUP4 PUSH2 0x1CA8 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1122 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x112F DUP6 DUP6 DUP6 DUP6 PUSH2 0x1DD3 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11C9 SWAP2 SWAP1 PUSH2 0x34FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1236 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125A SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x12C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1354 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0xDD5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D00 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x13F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x146B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x149B PUSH2 0xC11 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x155C SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1688 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x1694 DUP3 PUSH1 0x1 PUSH2 0x34E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x16C5 DUP10 DUP10 DUP10 PUSH2 0x1A52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1774 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x1781 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2014 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0xDD5 JUMPI PUSH1 0x3D SLOAD PUSH2 0xDD5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D00 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1853 SWAP2 SWAP1 PUSH2 0x34FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E4 SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1952 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A44 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0xFCA DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2332 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1AF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2D SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F43 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2D SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F43 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1B68 PUSH2 0x25AE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFCA DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2332 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1CF8 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1B PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1D63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D6D DUP5 PUSH2 0x25B8 JUMP JUMPDEST PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DE0 DUP5 DUP5 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1E4F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1EAC SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1EB6 DUP4 DUP8 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1EC0 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x1ECB DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F33 DUP8 PUSH2 0x1F2E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x26C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F3F DUP3 DUP9 PUSH2 0x34E5 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FA1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2020 DUP4 DUP4 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x208F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x20EC SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x20F6 DUP4 DUP7 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2100 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x210B DUP5 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2173 DUP8 PUSH2 0x216E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x283F JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x2252 JUMPI PUSH1 0x0 PUSH2 0x2187 DUP7 DUP4 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x21E9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x2329 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x225E DUP3 DUP8 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x22C0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23ED SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2433 DUP3 PUSH2 0xED0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2479 DUP4 PUSH2 0xED0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2487 DUP9 DUP9 DUP9 DUP7 PUSH2 0x28A3 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x2554 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x253B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x254F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x259A DUP10 DUP8 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x231F JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1B PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F8 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2637 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x2671 JUMPI PUSH2 0x2632 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25BF JUMP JUMPDEST PUSH2 0x267E JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x2668 JUMPI PUSH2 0x2668 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x267E JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x26E2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34E5 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2727 DUP4 DUP3 PUSH2 0x353C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2838 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2824 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x285E PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34CE JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2727 DUP4 DUP3 PUSH2 0x3570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x28FF SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2909 DUP4 DUP6 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2913 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2955 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29B0 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x29BA DUP4 DUP8 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x29C4 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x29CF DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A2E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AA0 DUP9 DUP9 PUSH2 0x2A9B PUSH2 0x2A96 DUP11 DUP11 PUSH2 0x2684 JUMP JUMPDEST PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x2C98 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2B4F JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B8B JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C39 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x231F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CDA DUP3 DUP3 PUSH2 0x3570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2D4E DUP4 DUP3 PUSH2 0x353C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F3B JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2329 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2F4F SWAP1 PUSH2 0x3374 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2F71 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2FB7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2F8A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2FB7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2FB7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2FB7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2F9C JUMP JUMPDEST POP PUSH2 0x1CA4 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2FBF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2FF9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2FDD JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x300B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3051 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FD3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x307A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3088 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x30AB DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3051 DUP2 PUSH2 0x3058 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3088 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x30F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x3152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x315B DUP13 PUSH2 0x307D JUMP JUMPDEST SWAP11 POP PUSH2 0x3169 PUSH1 0x20 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP10 POP PUSH2 0x3177 PUSH1 0x40 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP9 POP PUSH2 0x3185 PUSH1 0x60 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP8 POP PUSH2 0x3193 PUSH1 0x80 DUP14 ADD PUSH2 0x30D6 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x31AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31BF DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E7 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E5 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E7 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x320C DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x30E7 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3244 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3254 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x329D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32A8 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x32B8 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x32E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x32F3 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3303 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x331F PUSH1 0x80 DUP10 ADD PUSH2 0x30D6 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x334E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3359 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3369 DUP2 PUSH2 0x3058 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x3388 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x267E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3467 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x33DB JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x347A DUP2 DUP8 DUP10 PUSH2 0x33DB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x348F DUP2 DUP6 DUP8 PUSH2 0x33DB JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34E0 JUMPI PUSH2 0x34E0 PUSH2 0x349F JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x34F8 JUMPI PUSH2 0x34F8 PUSH2 0x349F JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x350F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3051 DUP2 PUSH2 0x3058 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x352C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3051 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3567 JUMPI PUSH2 0x3567 PUSH2 0x349F JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3599 JUMPI PUSH2 0x3599 PUSH2 0x349F JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC3 0xDE 0xC4 PUSH27 0x8F72B8A7F7388406F63CDDBE90D3A10F0F6FBDA03774D394A55CD2 PUSH31 0x64736F6C634300080A00330000000000000000000000000000000000000000 ","sourceMap":"1116:7178:115:-:0;;;928:1:87;886:43;;1803:144:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1858:4;988:195:123;;;;;;;;;;;;;-1:-1:-1;;;988:195:123;;;;;;;;;;;;;;;;-1:-1:-1;;;988:195:123;;;1894:1:115;1116:4:123;1122;1128:6;1136:8;817:4:122;823;829:6;837:8;2780:4:121;-1:-1:-1;;;;;2780:23:121;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:121;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:121;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:121;:20;;-1:-1:-1;;2851:20:121;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:121;;;-1:-1:-1;;630:13:120;619:24;;-1:-1:-1;1116:7178:115;;-1:-1:-1;;;;;;1116:7178:115;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1116:7178:115;;;-1:-1:-1;1116:7178:115;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:124;-1:-1:-1;;;;;96:31:124;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:124:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;1116:7178:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ATOKEN_REVISION_28341":{"entryPoint":null,"id":28341,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_28877":{"entryPoint":3089,"id":28877,"parameterSlots":0,"returnSlots":1},"@DOMAIN_SEPARATOR_30723":{"entryPoint":7367,"id":30723,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_30682":{"entryPoint":null,"id":30682,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_28338":{"entryPoint":null,"id":28338,"parameterSlots":0,"returnSlots":0},"@POOL_30880":{"entryPoint":null,"id":30880,"parameterSlots":0,"returnSlots":0},"@RESERVE_TREASURY_ADDRESS_28628":{"entryPoint":null,"id":28628,"parameterSlots":0,"returnSlots":1},"@UNDERLYING_ASSET_ADDRESS_28638":{"entryPoint":null,"id":28638,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_28905":{"entryPoint":9646,"id":28905,"parameterSlots":0,"returnSlots":1},"@_approve_31266":{"entryPoint":6738,"id":31266,"parameterSlots":3,"returnSlots":0},"@_burnScaled_31772":{"entryPoint":8212,"id":31772,"parameterSlots":4,"returnSlots":0},"@_burn_31449":{"entryPoint":10303,"id":31449,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_30766":{"entryPoint":6973,"id":30766,"parameterSlots":0,"returnSlots":1},"@_mintScaled_31654":{"entryPoint":7635,"id":31654,"parameterSlots":4,"returnSlots":1},"@_mint_31390":{"entryPoint":9923,"id":31390,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_31299":{"entryPoint":null,"id":31299,"parameterSlots":1,"returnSlots":0},"@_setName_31277":{"entryPoint":6935,"id":31277,"parameterSlots":1,"returnSlots":0},"@_setSymbol_31288":{"entryPoint":6954,"id":31288,"parameterSlots":1,"returnSlots":0},"@_transfer_28844":{"entryPoint":9010,"id":28844,"parameterSlots":4,"returnSlots":0},"@_transfer_28863":{"entryPoint":7336,"id":28863,"parameterSlots":3,"returnSlots":0},"@_transfer_31241":{"entryPoint":11416,"id":31241,"parameterSlots":3,"returnSlots":0},"@_transfer_31916":{"entryPoint":10403,"id":31916,"parameterSlots":4,"returnSlots":0},"@allowance_31040":{"entryPoint":null,"id":31040,"parameterSlots":2,"returnSlots":1},"@approve_31061":{"entryPoint":1696,"id":31061,"parameterSlots":2,"returnSlots":1},"@balanceOf_28587":{"entryPoint":3547,"id":28587,"parameterSlots":1,"returnSlots":1},"@balanceOf_30971":{"entryPoint":null,"id":30971,"parameterSlots":1,"returnSlots":1},"@burn_28515":{"entryPoint":5840,"id":28515,"parameterSlots":4,"returnSlots":0},"@decimals_30946":{"entryPoint":null,"id":30946,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_31157":{"entryPoint":4105,"id":31157,"parameterSlots":2,"returnSlots":1},"@getIncentivesController_30981":{"entryPoint":null,"id":30981,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":9656,"id":117,"parameterSlots":1,"returnSlots":1},"@getPreviousIndex_31558":{"entryPoint":null,"id":31558,"parameterSlots":1,"returnSlots":1},"@getRevision_28355":{"entryPoint":null,"id":28355,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_31531":{"entryPoint":null,"id":31531,"parameterSlots":1,"returnSlots":2},"@handleRepayment_28672":{"entryPoint":3377,"id":28672,"parameterSlots":3,"returnSlots":0},"@increaseAllowance_31130":{"entryPoint":3104,"id":31130,"parameterSlots":2,"returnSlots":1},"@initialize_28451":{"entryPoint":1941,"id":28451,"parameterSlots":11,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@mintToTreasury_28543":{"entryPoint":3798,"id":28543,"parameterSlots":2,"returnSlots":0},"@mint_28476":{"entryPoint":4219,"id":28476,"parameterSlots":4,"returnSlots":1},"@name_30926":{"entryPoint":1550,"id":30926,"parameterSlots":0,"returnSlots":1},"@nonces_28894":{"entryPoint":4047,"id":28894,"parameterSlots":1,"returnSlots":1},"@nonces_30736":{"entryPoint":null,"id":30736,"parameterSlots":1,"returnSlots":1},"@permit_28767":{"entryPoint":4982,"id":28767,"parameterSlots":7,"returnSlots":0},"@rayDiv_23792":{"entryPoint":9860,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":6848,"id":23780,"parameterSlots":2,"returnSlots":1},"@rescueTokens_28935":{"entryPoint":4408,"id":28935,"parameterSlots":3,"returnSlots":0},"@safeTransfer_78":{"entryPoint":7424,"id":78,"parameterSlots":3,"returnSlots":0},"@scaledBalanceOf_31510":{"entryPoint":2898,"id":31510,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_31543":{"entryPoint":4208,"id":31543,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_30995":{"entryPoint":6082,"id":30995,"parameterSlots":1,"returnSlots":0},"@symbol_30936":{"entryPoint":4090,"id":30936,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7170,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_28618":{"entryPoint":1718,"id":28618,"parameterSlots":0,"returnSlots":1},"@totalSupply_30956":{"entryPoint":null,"id":30956,"parameterSlots":0,"returnSlots":1},"@transferFrom_31103":{"entryPoint":2961,"id":31103,"parameterSlots":3,"returnSlots":1},"@transferOnLiquidation_28564":{"entryPoint":6560,"id":28564,"parameterSlots":3,"returnSlots":0},"@transferUnderlyingTo_28658":{"entryPoint":3172,"id":28658,"parameterSlots":2,"returnSlots":0},"@transfer_31022":{"entryPoint":4173,"id":31022,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":12413,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":12519,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":12473,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":13565,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":13115,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":12836,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":12935,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":13005,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":12429,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13594,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr":{"entryPoint":12592,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":13250,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":12901,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint8":{"entryPoint":12502,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":12243,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":13275,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13348,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12350,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":13628,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13541,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":13680,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13518,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13172,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":13471,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":12376,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16120:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"820:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:124"},"nodeType":"YulFunctionCall","src":"909:12:124"},"nodeType":"YulExpressionStatement","src":"909:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:124"},"nodeType":"YulFunctionCall","src":"840:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:73:124"},"nodeType":"YulIf","src":"830:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:124","type":""}],"src":"775:154:124"},{"body":{"nodeType":"YulBlock","src":"983:85:124","statements":[{"nodeType":"YulAssignment","src":"993:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:124"},"nodeType":"YulFunctionCall","src":"1002:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:124"},"nodeType":"YulFunctionCall","src":"1031:31:124"},"nodeType":"YulExpressionStatement","src":"1031:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:124","type":""}],"src":"934:134:124"},{"body":{"nodeType":"YulBlock","src":"1160:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:124"},"nodeType":"YulFunctionCall","src":"1208:12:124"},"nodeType":"YulExpressionStatement","src":"1208:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:124"},"nodeType":"YulFunctionCall","src":"1177:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:124"},"nodeType":"YulFunctionCall","src":"1173:32:124"},"nodeType":"YulIf","src":"1170:52:124"},{"nodeType":"YulVariableDeclaration","src":"1231:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:124"},"nodeType":"YulFunctionCall","src":"1244:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:124"},"nodeType":"YulFunctionCall","src":"1276:31:124"},"nodeType":"YulExpressionStatement","src":"1276:31:124"},{"nodeType":"YulAssignment","src":"1316:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:124"}]},{"nodeType":"YulAssignment","src":"1340:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:124","type":""}],"src":"1073:315:124"},{"body":{"nodeType":"YulBlock","src":"1488:92:124","statements":[{"nodeType":"YulAssignment","src":"1498:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:124"},"nodeType":"YulFunctionCall","src":"1558:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:124"},"nodeType":"YulFunctionCall","src":"1551:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:41:124"},"nodeType":"YulExpressionStatement","src":"1533:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:124","type":""}],"src":"1393:187:124"},{"body":{"nodeType":"YulBlock","src":"1655:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:124"},"nodeType":"YulFunctionCall","src":"1703:12:124"},"nodeType":"YulExpressionStatement","src":"1703:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:124"},"nodeType":"YulFunctionCall","src":"1672:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:124"},"nodeType":"YulFunctionCall","src":"1668:32:124"},"nodeType":"YulIf","src":"1665:52:124"},{"nodeType":"YulVariableDeclaration","src":"1726:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:124"},"nodeType":"YulFunctionCall","src":"1739:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:124"},"nodeType":"YulFunctionCall","src":"1771:31:124"},"nodeType":"YulExpressionStatement","src":"1771:31:124"},{"nodeType":"YulAssignment","src":"1811:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:124","type":""}],"src":"1585:247:124"},{"body":{"nodeType":"YulBlock","src":"1966:119:124","statements":[{"nodeType":"YulAssignment","src":"1976:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:124"},"nodeType":"YulFunctionCall","src":"1984:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:124"},"nodeType":"YulFunctionCall","src":"2011:25:124"},"nodeType":"YulExpressionStatement","src":"2011:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:124"},"nodeType":"YulFunctionCall","src":"2052:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:124"},"nodeType":"YulFunctionCall","src":"2045:34:124"},"nodeType":"YulExpressionStatement","src":"2045:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:124","type":""}],"src":"1837:248:124"},{"body":{"nodeType":"YulBlock","src":"2191:76:124","statements":[{"nodeType":"YulAssignment","src":"2201:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:124"},"nodeType":"YulFunctionCall","src":"2209:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2201:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2254:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2236:6:124"},"nodeType":"YulFunctionCall","src":"2236:25:124"},"nodeType":"YulExpressionStatement","src":"2236:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2160:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2171:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2182:4:124","type":""}],"src":"2090:177:124"},{"body":{"nodeType":"YulBlock","src":"2319:109:124","statements":[{"nodeType":"YulAssignment","src":"2329:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2351:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2338:12:124"},"nodeType":"YulFunctionCall","src":"2338:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2329:5:124"}]},{"body":{"nodeType":"YulBlock","src":"2406:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2415:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2418:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2408:6:124"},"nodeType":"YulFunctionCall","src":"2408:12:124"},"nodeType":"YulExpressionStatement","src":"2408:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2380:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2391:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2398:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2387:3:124"},"nodeType":"YulFunctionCall","src":"2387:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2377:2:124"},"nodeType":"YulFunctionCall","src":"2377:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2370:6:124"},"nodeType":"YulFunctionCall","src":"2370:35:124"},"nodeType":"YulIf","src":"2367:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2298:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2309:5:124","type":""}],"src":"2272:156:124"},{"body":{"nodeType":"YulBlock","src":"2506:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"2555:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2564:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2567:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2557:6:124"},"nodeType":"YulFunctionCall","src":"2557:12:124"},"nodeType":"YulExpressionStatement","src":"2557:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2534:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2542:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2530:3:124"},"nodeType":"YulFunctionCall","src":"2530:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"2549:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2526:3:124"},"nodeType":"YulFunctionCall","src":"2526:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2519:6:124"},"nodeType":"YulFunctionCall","src":"2519:35:124"},"nodeType":"YulIf","src":"2516:55:124"},{"nodeType":"YulAssignment","src":"2580:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2603:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2590:12:124"},"nodeType":"YulFunctionCall","src":"2590:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2580:6:124"}]},{"body":{"nodeType":"YulBlock","src":"2653:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2662:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2665:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2655:6:124"},"nodeType":"YulFunctionCall","src":"2655:12:124"},"nodeType":"YulExpressionStatement","src":"2655:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2625:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2633:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2622:2:124"},"nodeType":"YulFunctionCall","src":"2622:30:124"},"nodeType":"YulIf","src":"2619:50:124"},{"nodeType":"YulAssignment","src":"2678:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2694:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2702:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2690:3:124"},"nodeType":"YulFunctionCall","src":"2690:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2678:8:124"}]},{"body":{"nodeType":"YulBlock","src":"2759:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:124"},"nodeType":"YulFunctionCall","src":"2761:12:124"},"nodeType":"YulExpressionStatement","src":"2761:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2730:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"2738:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2726:3:124"},"nodeType":"YulFunctionCall","src":"2726:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"2747:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:124"},"nodeType":"YulFunctionCall","src":"2722:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"2754:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2719:2:124"},"nodeType":"YulFunctionCall","src":"2719:39:124"},"nodeType":"YulIf","src":"2716:59:124"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2469:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2477:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2485:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"2495:6:124","type":""}],"src":"2433:348:124"},{"body":{"nodeType":"YulBlock","src":"3081:1119:124","statements":[{"body":{"nodeType":"YulBlock","src":"3128:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3137:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3140:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3130:6:124"},"nodeType":"YulFunctionCall","src":"3130:12:124"},"nodeType":"YulExpressionStatement","src":"3130:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3102:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3098:3:124"},"nodeType":"YulFunctionCall","src":"3098:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3123:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3094:3:124"},"nodeType":"YulFunctionCall","src":"3094:33:124"},"nodeType":"YulIf","src":"3091:53:124"},{"nodeType":"YulAssignment","src":"3153:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3163:18:124"},"nodeType":"YulFunctionCall","src":"3163:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3153:6:124"}]},{"nodeType":"YulAssignment","src":"3201:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3245:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:124"},"nodeType":"YulFunctionCall","src":"3230:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3211:18:124"},"nodeType":"YulFunctionCall","src":"3211:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3201:6:124"}]},{"nodeType":"YulAssignment","src":"3258:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3291:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3302:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3287:3:124"},"nodeType":"YulFunctionCall","src":"3287:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3268:18:124"},"nodeType":"YulFunctionCall","src":"3268:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3258:6:124"}]},{"nodeType":"YulAssignment","src":"3315:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3348:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3359:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3344:3:124"},"nodeType":"YulFunctionCall","src":"3344:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3325:18:124"},"nodeType":"YulFunctionCall","src":"3325:38:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3315:6:124"}]},{"nodeType":"YulAssignment","src":"3372:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3403:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3414:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3399:3:124"},"nodeType":"YulFunctionCall","src":"3399:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3382:16:124"},"nodeType":"YulFunctionCall","src":"3382:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3372:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3428:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3438:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3432:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3510:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:124"},"nodeType":"YulFunctionCall","src":"3512:12:124"},"nodeType":"YulExpressionStatement","src":"3512:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3499:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:124"},"nodeType":"YulFunctionCall","src":"3484:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:124"},"nodeType":"YulFunctionCall","src":"3471:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3506:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3468:2:124"},"nodeType":"YulFunctionCall","src":"3468:41:124"},"nodeType":"YulIf","src":"3465:61:124"},{"nodeType":"YulVariableDeclaration","src":"3535:112:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3592:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3620:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3631:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3616:3:124"},"nodeType":"YulFunctionCall","src":"3616:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3603:12:124"},"nodeType":"YulFunctionCall","src":"3603:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3588:3:124"},"nodeType":"YulFunctionCall","src":"3588:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3639:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3561:26:124"},"nodeType":"YulFunctionCall","src":"3561:86:124"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"3539:8:124","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"3549:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3656:18:124","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"3666:8:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:124"}]},{"nodeType":"YulAssignment","src":"3683:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3693:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3683:6:124"}]},{"body":{"nodeType":"YulBlock","src":"3755:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3764:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3767:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3757:6:124"},"nodeType":"YulFunctionCall","src":"3757:12:124"},"nodeType":"YulExpressionStatement","src":"3757:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3733:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3744:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3729:3:124"},"nodeType":"YulFunctionCall","src":"3729:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3716:12:124"},"nodeType":"YulFunctionCall","src":"3716:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3751:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3713:2:124"},"nodeType":"YulFunctionCall","src":"3713:41:124"},"nodeType":"YulIf","src":"3710:61:124"},{"nodeType":"YulVariableDeclaration","src":"3780:112:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:124"},"nodeType":"YulFunctionCall","src":"3861:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3848:12:124"},"nodeType":"YulFunctionCall","src":"3848:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3833:3:124"},"nodeType":"YulFunctionCall","src":"3833:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3884:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3806:26:124"},"nodeType":"YulFunctionCall","src":"3806:86:124"},"variables":[{"name":"value7_1","nodeType":"YulTypedName","src":"3784:8:124","type":""},{"name":"value8_1","nodeType":"YulTypedName","src":"3794:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3901:18:124","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"3911:8:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3901:6:124"}]},{"nodeType":"YulAssignment","src":"3928:18:124","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"3938:8:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"3928:6:124"}]},{"body":{"nodeType":"YulBlock","src":"4000:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4009:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4012:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4002:6:124"},"nodeType":"YulFunctionCall","src":"4002:12:124"},"nodeType":"YulExpressionStatement","src":"4002:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3978:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3989:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3974:3:124"},"nodeType":"YulFunctionCall","src":"3974:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3961:12:124"},"nodeType":"YulFunctionCall","src":"3961:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3996:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3958:2:124"},"nodeType":"YulFunctionCall","src":"3958:41:124"},"nodeType":"YulIf","src":"3955:61:124"},{"nodeType":"YulVariableDeclaration","src":"4025:113:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4083:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4111:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4122:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4107:3:124"},"nodeType":"YulFunctionCall","src":"4107:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4094:12:124"},"nodeType":"YulFunctionCall","src":"4094:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4079:3:124"},"nodeType":"YulFunctionCall","src":"4079:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4130:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"4052:26:124"},"nodeType":"YulFunctionCall","src":"4052:86:124"},"variables":[{"name":"value9_1","nodeType":"YulTypedName","src":"4029:8:124","type":""},{"name":"value10_1","nodeType":"YulTypedName","src":"4039:9:124","type":""}]},{"nodeType":"YulAssignment","src":"4147:18:124","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"4157:8:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"4147:6:124"}]},{"nodeType":"YulAssignment","src":"4174:20:124","value":{"name":"value10_1","nodeType":"YulIdentifier","src":"4185:9:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"4174:7:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2966:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2977:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2989:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2997:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3005:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3013:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3021:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3029:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3037:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3045:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3053:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3061:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"3069:7:124","type":""}],"src":"2786:1414:124"},{"body":{"nodeType":"YulBlock","src":"4309:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"4355:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4364:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4367:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4357:6:124"},"nodeType":"YulFunctionCall","src":"4357:12:124"},"nodeType":"YulExpressionStatement","src":"4357:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4330:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4339:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4326:3:124"},"nodeType":"YulFunctionCall","src":"4326:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4351:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4322:3:124"},"nodeType":"YulFunctionCall","src":"4322:32:124"},"nodeType":"YulIf","src":"4319:52:124"},{"nodeType":"YulVariableDeclaration","src":"4380:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4406:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4393:12:124"},"nodeType":"YulFunctionCall","src":"4393:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4384:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4450:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4425:24:124"},"nodeType":"YulFunctionCall","src":"4425:31:124"},"nodeType":"YulExpressionStatement","src":"4425:31:124"},{"nodeType":"YulAssignment","src":"4465:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4475:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4465:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4489:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4532:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:124"},"nodeType":"YulFunctionCall","src":"4517:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4504:12:124"},"nodeType":"YulFunctionCall","src":"4504:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4493:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4570:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4545:24:124"},"nodeType":"YulFunctionCall","src":"4545:33:124"},"nodeType":"YulExpressionStatement","src":"4545:33:124"},{"nodeType":"YulAssignment","src":"4587:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4597:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4587:6:124"}]},{"nodeType":"YulAssignment","src":"4613:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4651:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:124"},"nodeType":"YulFunctionCall","src":"4636:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4623:12:124"},"nodeType":"YulFunctionCall","src":"4623:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4613:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4259:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4270:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4282:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4290:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4298:6:124","type":""}],"src":"4205:456:124"},{"body":{"nodeType":"YulBlock","src":"4767:76:124","statements":[{"nodeType":"YulAssignment","src":"4777:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4789:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4785:3:124"},"nodeType":"YulFunctionCall","src":"4785:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4777:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4819:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"4830:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:124"},"nodeType":"YulFunctionCall","src":"4812:25:124"},"nodeType":"YulExpressionStatement","src":"4812:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4736:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4747:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4758:4:124","type":""}],"src":"4666:177:124"},{"body":{"nodeType":"YulBlock","src":"4945:87:124","statements":[{"nodeType":"YulAssignment","src":"4955:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4967:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4978:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4963:3:124"},"nodeType":"YulFunctionCall","src":"4963:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4955:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4997:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5012:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5020:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5008:3:124"},"nodeType":"YulFunctionCall","src":"5008:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4990:6:124"},"nodeType":"YulFunctionCall","src":"4990:36:124"},"nodeType":"YulExpressionStatement","src":"4990:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4914:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4925:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4936:4:124","type":""}],"src":"4848:184:124"},{"body":{"nodeType":"YulBlock","src":"5152:125:124","statements":[{"nodeType":"YulAssignment","src":"5162:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5185:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5170:3:124"},"nodeType":"YulFunctionCall","src":"5170:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5162:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5204:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5219:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5227:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5215:3:124"},"nodeType":"YulFunctionCall","src":"5215:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5197:6:124"},"nodeType":"YulFunctionCall","src":"5197:74:124"},"nodeType":"YulExpressionStatement","src":"5197:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5121:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5132:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5143:4:124","type":""}],"src":"5037:240:124"},{"body":{"nodeType":"YulBlock","src":"5417:125:124","statements":[{"nodeType":"YulAssignment","src":"5427:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5439:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5450:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5435:3:124"},"nodeType":"YulFunctionCall","src":"5435:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5427:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5469:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5484:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5492:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5480:3:124"},"nodeType":"YulFunctionCall","src":"5480:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5462:6:124"},"nodeType":"YulFunctionCall","src":"5462:74:124"},"nodeType":"YulExpressionStatement","src":"5462:74:124"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5386:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5397:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5408:4:124","type":""}],"src":"5282:260:124"},{"body":{"nodeType":"YulBlock","src":"5666:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5683:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5694:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5676:6:124"},"nodeType":"YulFunctionCall","src":"5676:21:124"},"nodeType":"YulExpressionStatement","src":"5676:21:124"},{"nodeType":"YulAssignment","src":"5706:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5732:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5744:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5755:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5740:3:124"},"nodeType":"YulFunctionCall","src":"5740:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5714:17:124"},"nodeType":"YulFunctionCall","src":"5714:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5706:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5635:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5646:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5657:4:124","type":""}],"src":"5547:218:124"},{"body":{"nodeType":"YulBlock","src":"5857:161:124","statements":[{"body":{"nodeType":"YulBlock","src":"5903:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5912:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5915:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5905:6:124"},"nodeType":"YulFunctionCall","src":"5905:12:124"},"nodeType":"YulExpressionStatement","src":"5905:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5878:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5887:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5874:3:124"},"nodeType":"YulFunctionCall","src":"5874:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5899:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5870:3:124"},"nodeType":"YulFunctionCall","src":"5870:32:124"},"nodeType":"YulIf","src":"5867:52:124"},{"nodeType":"YulAssignment","src":"5928:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5951:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5938:12:124"},"nodeType":"YulFunctionCall","src":"5938:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5928:6:124"}]},{"nodeType":"YulAssignment","src":"5970:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5997:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6008:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5993:3:124"},"nodeType":"YulFunctionCall","src":"5993:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5980:12:124"},"nodeType":"YulFunctionCall","src":"5980:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5970:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5815:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5826:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5838:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:124","type":""}],"src":"5770:248:124"},{"body":{"nodeType":"YulBlock","src":"6124:125:124","statements":[{"nodeType":"YulAssignment","src":"6134:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6146:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6157:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6142:3:124"},"nodeType":"YulFunctionCall","src":"6142:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6134:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6176:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6191:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6199:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6187:3:124"},"nodeType":"YulFunctionCall","src":"6187:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6169:6:124"},"nodeType":"YulFunctionCall","src":"6169:74:124"},"nodeType":"YulExpressionStatement","src":"6169:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6093:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6104:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6115:4:124","type":""}],"src":"6023:226:124"},{"body":{"nodeType":"YulBlock","src":"6375:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"6422:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6431:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6434:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6424:6:124"},"nodeType":"YulFunctionCall","src":"6424:12:124"},"nodeType":"YulExpressionStatement","src":"6424:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6396:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6405:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6392:3:124"},"nodeType":"YulFunctionCall","src":"6392:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6417:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6388:3:124"},"nodeType":"YulFunctionCall","src":"6388:33:124"},"nodeType":"YulIf","src":"6385:53:124"},{"nodeType":"YulVariableDeclaration","src":"6447:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6473:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:124"},"nodeType":"YulFunctionCall","src":"6460:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6451:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6517:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6492:24:124"},"nodeType":"YulFunctionCall","src":"6492:31:124"},"nodeType":"YulExpressionStatement","src":"6492:31:124"},{"nodeType":"YulAssignment","src":"6532:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6542:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6532:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6556:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6599:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6584:3:124"},"nodeType":"YulFunctionCall","src":"6584:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6571:12:124"},"nodeType":"YulFunctionCall","src":"6571:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6560:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6637:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6612:24:124"},"nodeType":"YulFunctionCall","src":"6612:33:124"},"nodeType":"YulExpressionStatement","src":"6612:33:124"},{"nodeType":"YulAssignment","src":"6654:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6664:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6654:6:124"}]},{"nodeType":"YulAssignment","src":"6680:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6707:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6703:3:124"},"nodeType":"YulFunctionCall","src":"6703:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6690:12:124"},"nodeType":"YulFunctionCall","src":"6690:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6680:6:124"}]},{"nodeType":"YulAssignment","src":"6731:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6758:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6769:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6754:3:124"},"nodeType":"YulFunctionCall","src":"6754:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6741:12:124"},"nodeType":"YulFunctionCall","src":"6741:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6731:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6317:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6328:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6340:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6348:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6356:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6364:6:124","type":""}],"src":"6254:525:124"},{"body":{"nodeType":"YulBlock","src":"6954:564:124","statements":[{"body":{"nodeType":"YulBlock","src":"7001:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7010:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7013:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7003:6:124"},"nodeType":"YulFunctionCall","src":"7003:12:124"},"nodeType":"YulExpressionStatement","src":"7003:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6975:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6984:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6971:3:124"},"nodeType":"YulFunctionCall","src":"6971:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6996:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6967:3:124"},"nodeType":"YulFunctionCall","src":"6967:33:124"},"nodeType":"YulIf","src":"6964:53:124"},{"nodeType":"YulVariableDeclaration","src":"7026:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7052:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7039:12:124"},"nodeType":"YulFunctionCall","src":"7039:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7030:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7096:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7071:24:124"},"nodeType":"YulFunctionCall","src":"7071:31:124"},"nodeType":"YulExpressionStatement","src":"7071:31:124"},{"nodeType":"YulAssignment","src":"7111:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7121:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7111:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7135:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7167:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7178:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:124"},"nodeType":"YulFunctionCall","src":"7163:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7150:12:124"},"nodeType":"YulFunctionCall","src":"7150:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7139:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7216:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7191:24:124"},"nodeType":"YulFunctionCall","src":"7191:33:124"},"nodeType":"YulExpressionStatement","src":"7191:33:124"},{"nodeType":"YulAssignment","src":"7233:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7243:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7233:6:124"}]},{"nodeType":"YulAssignment","src":"7259:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7286:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7297:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7282:3:124"},"nodeType":"YulFunctionCall","src":"7282:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7269:12:124"},"nodeType":"YulFunctionCall","src":"7269:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7259:6:124"}]},{"nodeType":"YulAssignment","src":"7310:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7337:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7348:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7333:3:124"},"nodeType":"YulFunctionCall","src":"7333:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7320:12:124"},"nodeType":"YulFunctionCall","src":"7320:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7310:6:124"}]},{"nodeType":"YulAssignment","src":"7361:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7392:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7403:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:124"},"nodeType":"YulFunctionCall","src":"7388:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7371:16:124"},"nodeType":"YulFunctionCall","src":"7371:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7361:6:124"}]},{"nodeType":"YulAssignment","src":"7417:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7444:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7455:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7440:3:124"},"nodeType":"YulFunctionCall","src":"7440:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7427:12:124"},"nodeType":"YulFunctionCall","src":"7427:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7417:6:124"}]},{"nodeType":"YulAssignment","src":"7469:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7496:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7507:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7492:3:124"},"nodeType":"YulFunctionCall","src":"7492:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7479:12:124"},"nodeType":"YulFunctionCall","src":"7479:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7469:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6872:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6883:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6895:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6903:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6911:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6919:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6927:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6935:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6943:6:124","type":""}],"src":"6784:734:124"},{"body":{"nodeType":"YulBlock","src":"7610:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"7656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7658:6:124"},"nodeType":"YulFunctionCall","src":"7658:12:124"},"nodeType":"YulExpressionStatement","src":"7658:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7631:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7640:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7627:3:124"},"nodeType":"YulFunctionCall","src":"7627:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7652:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7623:3:124"},"nodeType":"YulFunctionCall","src":"7623:32:124"},"nodeType":"YulIf","src":"7620:52:124"},{"nodeType":"YulVariableDeclaration","src":"7681:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7707:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7694:12:124"},"nodeType":"YulFunctionCall","src":"7694:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7685:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7751:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7726:24:124"},"nodeType":"YulFunctionCall","src":"7726:31:124"},"nodeType":"YulExpressionStatement","src":"7726:31:124"},{"nodeType":"YulAssignment","src":"7766:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7776:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7766:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7790:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7833:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7818:3:124"},"nodeType":"YulFunctionCall","src":"7818:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7805:12:124"},"nodeType":"YulFunctionCall","src":"7805:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7794:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7871:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7846:24:124"},"nodeType":"YulFunctionCall","src":"7846:33:124"},"nodeType":"YulExpressionStatement","src":"7846:33:124"},{"nodeType":"YulAssignment","src":"7888:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7898:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7888:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7568:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7579:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7591:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7599:6:124","type":""}],"src":"7523:388:124"},{"body":{"nodeType":"YulBlock","src":"8020:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"8066:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8075:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8078:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8068:6:124"},"nodeType":"YulFunctionCall","src":"8068:12:124"},"nodeType":"YulExpressionStatement","src":"8068:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8041:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8050:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8037:3:124"},"nodeType":"YulFunctionCall","src":"8037:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8062:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8033:3:124"},"nodeType":"YulFunctionCall","src":"8033:32:124"},"nodeType":"YulIf","src":"8030:52:124"},{"nodeType":"YulVariableDeclaration","src":"8091:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8117:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8104:12:124"},"nodeType":"YulFunctionCall","src":"8104:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8095:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8161:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8136:24:124"},"nodeType":"YulFunctionCall","src":"8136:31:124"},"nodeType":"YulExpressionStatement","src":"8136:31:124"},{"nodeType":"YulAssignment","src":"8176:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"8186:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7986:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7997:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8009:6:124","type":""}],"src":"7916:281:124"},{"body":{"nodeType":"YulBlock","src":"8257:382:124","statements":[{"nodeType":"YulAssignment","src":"8267:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8281:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"8284:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8277:3:124"},"nodeType":"YulFunctionCall","src":"8277:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8267:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8298:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"8328:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"8334:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8324:3:124"},"nodeType":"YulFunctionCall","src":"8324:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"8302:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8375:31:124","statements":[{"nodeType":"YulAssignment","src":"8377:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8391:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8387:3:124"},"nodeType":"YulFunctionCall","src":"8387:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8377:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8355:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8348:6:124"},"nodeType":"YulFunctionCall","src":"8348:26:124"},"nodeType":"YulIf","src":"8345:61:124"},{"body":{"nodeType":"YulBlock","src":"8465:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8486:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8489:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8479:6:124"},"nodeType":"YulFunctionCall","src":"8479:88:124"},"nodeType":"YulExpressionStatement","src":"8479:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8587:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8590:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8580:6:124"},"nodeType":"YulFunctionCall","src":"8580:15:124"},"nodeType":"YulExpressionStatement","src":"8580:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8615:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8618:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8608:6:124"},"nodeType":"YulFunctionCall","src":"8608:15:124"},"nodeType":"YulExpressionStatement","src":"8608:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8421:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8444:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8452:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8441:2:124"},"nodeType":"YulFunctionCall","src":"8441:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8418:2:124"},"nodeType":"YulFunctionCall","src":"8418:38:124"},"nodeType":"YulIf","src":"8415:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"8237:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"8246:6:124","type":""}],"src":"8202:437:124"},{"body":{"nodeType":"YulBlock","src":"8725:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"8771:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8780:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8783:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8773:6:124"},"nodeType":"YulFunctionCall","src":"8773:12:124"},"nodeType":"YulExpressionStatement","src":"8773:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8746:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8755:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8742:3:124"},"nodeType":"YulFunctionCall","src":"8742:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8738:3:124"},"nodeType":"YulFunctionCall","src":"8738:32:124"},"nodeType":"YulIf","src":"8735:52:124"},{"nodeType":"YulAssignment","src":"8796:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8812:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8806:5:124"},"nodeType":"YulFunctionCall","src":"8806:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8796:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8691:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8702:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8714:6:124","type":""}],"src":"8644:184:124"},{"body":{"nodeType":"YulBlock","src":"9007:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9024:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9035:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9017:6:124"},"nodeType":"YulFunctionCall","src":"9017:21:124"},"nodeType":"YulExpressionStatement","src":"9017:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9058:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9069:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9054:3:124"},"nodeType":"YulFunctionCall","src":"9054:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9047:6:124"},"nodeType":"YulFunctionCall","src":"9047:30:124"},"nodeType":"YulExpressionStatement","src":"9047:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9097:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9108:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9093:3:124"},"nodeType":"YulFunctionCall","src":"9093:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"9113:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9086:6:124"},"nodeType":"YulFunctionCall","src":"9086:62:124"},"nodeType":"YulExpressionStatement","src":"9086:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9179:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9164:3:124"},"nodeType":"YulFunctionCall","src":"9164:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"9184:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9157:6:124"},"nodeType":"YulFunctionCall","src":"9157:44:124"},"nodeType":"YulExpressionStatement","src":"9157:44:124"},{"nodeType":"YulAssignment","src":"9210:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9222:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9233:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9218:3:124"},"nodeType":"YulFunctionCall","src":"9218:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9210:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8998:4:124","type":""}],"src":"8833:410:124"},{"body":{"nodeType":"YulBlock","src":"9315:259:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9332:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9337:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9325:6:124"},"nodeType":"YulFunctionCall","src":"9325:19:124"},"nodeType":"YulExpressionStatement","src":"9325:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9370:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"9375:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:124"},"nodeType":"YulFunctionCall","src":"9366:14:124"},{"name":"start","nodeType":"YulIdentifier","src":"9382:5:124"},{"name":"length","nodeType":"YulIdentifier","src":"9389:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9353:12:124"},"nodeType":"YulFunctionCall","src":"9353:43:124"},"nodeType":"YulExpressionStatement","src":"9353:43:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9420:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9425:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9416:3:124"},"nodeType":"YulFunctionCall","src":"9416:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"9434:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9412:3:124"},"nodeType":"YulFunctionCall","src":"9412:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"9441:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9405:6:124"},"nodeType":"YulFunctionCall","src":"9405:38:124"},"nodeType":"YulExpressionStatement","src":"9405:38:124"},{"nodeType":"YulAssignment","src":"9452:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9467:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9480:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9476:3:124"},"nodeType":"YulFunctionCall","src":"9476:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"9493:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9472:3:124"},"nodeType":"YulFunctionCall","src":"9472:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9463:3:124"},"nodeType":"YulFunctionCall","src":"9463:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"9563:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9459:3:124"},"nodeType":"YulFunctionCall","src":"9459:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9452:3:124"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"9284:5:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"9291:6:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9299:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9307:3:124","type":""}],"src":"9248:326:124"},{"body":{"nodeType":"YulBlock","src":"9904:603:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9914:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9924:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9918:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9982:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9997:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10005:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9993:3:124"},"nodeType":"YulFunctionCall","src":"9993:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9975:6:124"},"nodeType":"YulFunctionCall","src":"9975:34:124"},"nodeType":"YulExpressionStatement","src":"9975:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10029:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10040:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10025:3:124"},"nodeType":"YulFunctionCall","src":"10025:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10049:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10057:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10045:3:124"},"nodeType":"YulFunctionCall","src":"10045:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10018:6:124"},"nodeType":"YulFunctionCall","src":"10018:43:124"},"nodeType":"YulExpressionStatement","src":"10018:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10081:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10092:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10077:3:124"},"nodeType":"YulFunctionCall","src":"10077:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10101:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10109:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10097:3:124"},"nodeType":"YulFunctionCall","src":"10097:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10070:6:124"},"nodeType":"YulFunctionCall","src":"10070:45:124"},"nodeType":"YulExpressionStatement","src":"10070:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10135:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10146:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10131:3:124"},"nodeType":"YulFunctionCall","src":"10131:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"10151:3:124","type":"","value":"192"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10124:6:124"},"nodeType":"YulFunctionCall","src":"10124:31:124"},"nodeType":"YulExpressionStatement","src":"10124:31:124"},{"nodeType":"YulVariableDeclaration","src":"10164:77:124","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10205:6:124"},{"name":"value4","nodeType":"YulIdentifier","src":"10213:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10225:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10236:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10221:3:124"},"nodeType":"YulFunctionCall","src":"10221:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10178:26:124"},"nodeType":"YulFunctionCall","src":"10178:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10261:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10272:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10257:3:124"},"nodeType":"YulFunctionCall","src":"10257:19:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10282:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10290:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10278:3:124"},"nodeType":"YulFunctionCall","src":"10278:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10250:6:124"},"nodeType":"YulFunctionCall","src":"10250:51:124"},"nodeType":"YulExpressionStatement","src":"10250:51:124"},{"nodeType":"YulVariableDeclaration","src":"10310:64:124","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10351:6:124"},{"name":"value6","nodeType":"YulIdentifier","src":"10359:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10367:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10324:26:124"},"nodeType":"YulFunctionCall","src":"10324:50:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10314:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10405:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:124"},"nodeType":"YulFunctionCall","src":"10390:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10415:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10423:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10411:3:124"},"nodeType":"YulFunctionCall","src":"10411:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10383:6:124"},"nodeType":"YulFunctionCall","src":"10383:51:124"},"nodeType":"YulExpressionStatement","src":"10383:51:124"},{"nodeType":"YulAssignment","src":"10443:58:124","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10478:6:124"},{"name":"value8","nodeType":"YulIdentifier","src":"10486:6:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10494:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10451:26:124"},"nodeType":"YulFunctionCall","src":"10451:50:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10443:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9809:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"9820:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"9828:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"9836:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"9844:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9852:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9860:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9868:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9876:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9884:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9895:4:124","type":""}],"src":"9579:928:124"},{"body":{"nodeType":"YulBlock","src":"10544:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10561:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10564:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10554:6:124"},"nodeType":"YulFunctionCall","src":"10554:88:124"},"nodeType":"YulExpressionStatement","src":"10554:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10658:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10661:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10651:6:124"},"nodeType":"YulFunctionCall","src":"10651:15:124"},"nodeType":"YulExpressionStatement","src":"10651:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10682:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10685:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10675:6:124"},"nodeType":"YulFunctionCall","src":"10675:15:124"},"nodeType":"YulExpressionStatement","src":"10675:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10512:184:124"},{"body":{"nodeType":"YulBlock","src":"10750:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"10772:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10774:16:124"},"nodeType":"YulFunctionCall","src":"10774:18:124"},"nodeType":"YulExpressionStatement","src":"10774:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10766:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10769:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10763:2:124"},"nodeType":"YulFunctionCall","src":"10763:8:124"},"nodeType":"YulIf","src":"10760:34:124"},{"nodeType":"YulAssignment","src":"10803:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10815:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10818:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10811:3:124"},"nodeType":"YulFunctionCall","src":"10811:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10803:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10732:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"10735:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10741:4:124","type":""}],"src":"10701:125:124"},{"body":{"nodeType":"YulBlock","src":"10879:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"10906:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10908:16:124"},"nodeType":"YulFunctionCall","src":"10908:18:124"},"nodeType":"YulExpressionStatement","src":"10908:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10895:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10902:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10898:3:124"},"nodeType":"YulFunctionCall","src":"10898:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10892:2:124"},"nodeType":"YulFunctionCall","src":"10892:13:124"},"nodeType":"YulIf","src":"10889:39:124"},{"nodeType":"YulAssignment","src":"10937:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10948:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10951:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10944:3:124"},"nodeType":"YulFunctionCall","src":"10944:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"10937:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10862:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"10865:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"10871:3:124","type":""}],"src":"10831:128:124"},{"body":{"nodeType":"YulBlock","src":"11045:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"11091:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11100:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11103:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11093:6:124"},"nodeType":"YulFunctionCall","src":"11093:12:124"},"nodeType":"YulExpressionStatement","src":"11093:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11066:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11075:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11062:3:124"},"nodeType":"YulFunctionCall","src":"11062:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11087:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11058:3:124"},"nodeType":"YulFunctionCall","src":"11058:32:124"},"nodeType":"YulIf","src":"11055:52:124"},{"nodeType":"YulVariableDeclaration","src":"11116:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11135:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11129:5:124"},"nodeType":"YulFunctionCall","src":"11129:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11120:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11179:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11154:24:124"},"nodeType":"YulFunctionCall","src":"11154:31:124"},"nodeType":"YulExpressionStatement","src":"11154:31:124"},{"nodeType":"YulAssignment","src":"11194:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11204:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11194:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11011:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11022:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11034:6:124","type":""}],"src":"10964:251:124"},{"body":{"nodeType":"YulBlock","src":"11298:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"11344:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11353:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11356:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11346:6:124"},"nodeType":"YulFunctionCall","src":"11346:12:124"},"nodeType":"YulExpressionStatement","src":"11346:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11319:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11328:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11315:3:124"},"nodeType":"YulFunctionCall","src":"11315:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11340:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11311:3:124"},"nodeType":"YulFunctionCall","src":"11311:32:124"},"nodeType":"YulIf","src":"11308:52:124"},{"nodeType":"YulVariableDeclaration","src":"11369:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11388:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11382:5:124"},"nodeType":"YulFunctionCall","src":"11382:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11373:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11451:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11460:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11463:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11453:6:124"},"nodeType":"YulFunctionCall","src":"11453:12:124"},"nodeType":"YulExpressionStatement","src":"11453:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11420:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11441:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11434:6:124"},"nodeType":"YulFunctionCall","src":"11434:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11427:6:124"},"nodeType":"YulFunctionCall","src":"11427:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11417:2:124"},"nodeType":"YulFunctionCall","src":"11417:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11410:6:124"},"nodeType":"YulFunctionCall","src":"11410:40:124"},"nodeType":"YulIf","src":"11407:60:124"},{"nodeType":"YulAssignment","src":"11476:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11486:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11476:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11264:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11275:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11287:6:124","type":""}],"src":"11220:277:124"},{"body":{"nodeType":"YulBlock","src":"11743:373:124","statements":[{"nodeType":"YulAssignment","src":"11753:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11765:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11776:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11761:3:124"},"nodeType":"YulFunctionCall","src":"11761:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11753:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11796:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11807:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11789:6:124"},"nodeType":"YulFunctionCall","src":"11789:25:124"},"nodeType":"YulExpressionStatement","src":"11789:25:124"},{"nodeType":"YulVariableDeclaration","src":"11823:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11833:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11827:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11906:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11891:3:124"},"nodeType":"YulFunctionCall","src":"11891:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11915:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11923:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11911:3:124"},"nodeType":"YulFunctionCall","src":"11911:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11884:6:124"},"nodeType":"YulFunctionCall","src":"11884:43:124"},"nodeType":"YulExpressionStatement","src":"11884:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11947:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11958:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11943:3:124"},"nodeType":"YulFunctionCall","src":"11943:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11967:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11975:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11963:3:124"},"nodeType":"YulFunctionCall","src":"11963:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11936:6:124"},"nodeType":"YulFunctionCall","src":"11936:43:124"},"nodeType":"YulExpressionStatement","src":"11936:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11999:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12010:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11995:3:124"},"nodeType":"YulFunctionCall","src":"11995:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12015:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11988:6:124"},"nodeType":"YulFunctionCall","src":"11988:34:124"},"nodeType":"YulExpressionStatement","src":"11988:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:124"},"nodeType":"YulFunctionCall","src":"12038:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"12059:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12031:6:124"},"nodeType":"YulFunctionCall","src":"12031:35:124"},"nodeType":"YulExpressionStatement","src":"12031:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12086:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12097:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12082:3:124"},"nodeType":"YulFunctionCall","src":"12082:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12103:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12075:6:124"},"nodeType":"YulFunctionCall","src":"12075:35:124"},"nodeType":"YulExpressionStatement","src":"12075:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11672:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11683:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11691:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11699:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11707:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11715:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11723:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11734:4:124","type":""}],"src":"11502:614:124"},{"body":{"nodeType":"YulBlock","src":"12369:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12386:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12391:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12379:6:124"},"nodeType":"YulFunctionCall","src":"12379:79:124"},"nodeType":"YulExpressionStatement","src":"12379:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12478:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12483:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:124"},"nodeType":"YulFunctionCall","src":"12474:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12487:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:124"},"nodeType":"YulFunctionCall","src":"12467:27:124"},"nodeType":"YulExpressionStatement","src":"12467:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12514:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12519:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12510:3:124"},"nodeType":"YulFunctionCall","src":"12510:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"12524:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12503:6:124"},"nodeType":"YulFunctionCall","src":"12503:28:124"},"nodeType":"YulExpressionStatement","src":"12503:28:124"},{"nodeType":"YulAssignment","src":"12540:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12551:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12556:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12547:3:124"},"nodeType":"YulFunctionCall","src":"12547:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12540:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12337:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12342:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12350:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12361:3:124","type":""}],"src":"12121:444:124"},{"body":{"nodeType":"YulBlock","src":"12751:217:124","statements":[{"nodeType":"YulAssignment","src":"12761:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12773:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12784:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12769:3:124"},"nodeType":"YulFunctionCall","src":"12769:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12761:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12804:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12815:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12797:6:124"},"nodeType":"YulFunctionCall","src":"12797:25:124"},"nodeType":"YulExpressionStatement","src":"12797:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12842:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12853:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12838:3:124"},"nodeType":"YulFunctionCall","src":"12838:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12862:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12870:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12858:3:124"},"nodeType":"YulFunctionCall","src":"12858:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12831:6:124"},"nodeType":"YulFunctionCall","src":"12831:45:124"},"nodeType":"YulExpressionStatement","src":"12831:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12896:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12907:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12892:3:124"},"nodeType":"YulFunctionCall","src":"12892:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12912:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12885:6:124"},"nodeType":"YulFunctionCall","src":"12885:34:124"},"nodeType":"YulExpressionStatement","src":"12885:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12939:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12950:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12935:3:124"},"nodeType":"YulFunctionCall","src":"12935:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12955:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12928:6:124"},"nodeType":"YulFunctionCall","src":"12928:34:124"},"nodeType":"YulExpressionStatement","src":"12928:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12696:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12707:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12715:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12723:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12731:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12742:4:124","type":""}],"src":"12570:398:124"},{"body":{"nodeType":"YulBlock","src":"13186:299:124","statements":[{"nodeType":"YulAssignment","src":"13196:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13208:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13219:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13204:3:124"},"nodeType":"YulFunctionCall","src":"13204:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13196:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13239:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"13250:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13232:6:124"},"nodeType":"YulFunctionCall","src":"13232:25:124"},"nodeType":"YulExpressionStatement","src":"13232:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13288:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13273:3:124"},"nodeType":"YulFunctionCall","src":"13273:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"13293:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13266:6:124"},"nodeType":"YulFunctionCall","src":"13266:34:124"},"nodeType":"YulExpressionStatement","src":"13266:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13320:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13331:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13316:3:124"},"nodeType":"YulFunctionCall","src":"13316:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"13336:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13309:6:124"},"nodeType":"YulFunctionCall","src":"13309:34:124"},"nodeType":"YulExpressionStatement","src":"13309:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13363:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13374:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13359:3:124"},"nodeType":"YulFunctionCall","src":"13359:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"13379:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13352:6:124"},"nodeType":"YulFunctionCall","src":"13352:34:124"},"nodeType":"YulExpressionStatement","src":"13352:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13417:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13402:3:124"},"nodeType":"YulFunctionCall","src":"13402:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13427:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13435:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13423:3:124"},"nodeType":"YulFunctionCall","src":"13423:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13395:6:124"},"nodeType":"YulFunctionCall","src":"13395:84:124"},"nodeType":"YulExpressionStatement","src":"13395:84:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13123:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13134:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13142:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13150:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13158:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13166:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13177:4:124","type":""}],"src":"12973:512:124"},{"body":{"nodeType":"YulBlock","src":"13664:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13681:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13692:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13674:6:124"},"nodeType":"YulFunctionCall","src":"13674:21:124"},"nodeType":"YulExpressionStatement","src":"13674:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13715:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13711:3:124"},"nodeType":"YulFunctionCall","src":"13711:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"13731:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13704:6:124"},"nodeType":"YulFunctionCall","src":"13704:30:124"},"nodeType":"YulExpressionStatement","src":"13704:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13754:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13765:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13750:3:124"},"nodeType":"YulFunctionCall","src":"13750:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"13770:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13743:6:124"},"nodeType":"YulFunctionCall","src":"13743:62:124"},"nodeType":"YulExpressionStatement","src":"13743:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13825:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13836:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13821:3:124"},"nodeType":"YulFunctionCall","src":"13821:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"13841:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13814:6:124"},"nodeType":"YulFunctionCall","src":"13814:37:124"},"nodeType":"YulExpressionStatement","src":"13814:37:124"},{"nodeType":"YulAssignment","src":"13860:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13883:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13868:3:124"},"nodeType":"YulFunctionCall","src":"13868:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13860:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13641:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13655:4:124","type":""}],"src":"13490:403:124"},{"body":{"nodeType":"YulBlock","src":"14072:171:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14089:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14100:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14082:6:124"},"nodeType":"YulFunctionCall","src":"14082:21:124"},"nodeType":"YulExpressionStatement","src":"14082:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14123:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14134:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14119:3:124"},"nodeType":"YulFunctionCall","src":"14119:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14139:2:124","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14112:6:124"},"nodeType":"YulFunctionCall","src":"14112:30:124"},"nodeType":"YulExpressionStatement","src":"14112:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14162:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14173:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14158:3:124"},"nodeType":"YulFunctionCall","src":"14158:18:124"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"14178:23:124","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14151:6:124"},"nodeType":"YulFunctionCall","src":"14151:51:124"},"nodeType":"YulExpressionStatement","src":"14151:51:124"},{"nodeType":"YulAssignment","src":"14211:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14223:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14234:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14219:3:124"},"nodeType":"YulFunctionCall","src":"14219:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14211:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14049:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14063:4:124","type":""}],"src":"13898:345:124"},{"body":{"nodeType":"YulBlock","src":"14405:162:124","statements":[{"nodeType":"YulAssignment","src":"14415:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14427:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14438:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14423:3:124"},"nodeType":"YulFunctionCall","src":"14423:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14415:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14457:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"14468:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14450:6:124"},"nodeType":"YulFunctionCall","src":"14450:25:124"},"nodeType":"YulExpressionStatement","src":"14450:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14495:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14506:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14491:3:124"},"nodeType":"YulFunctionCall","src":"14491:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14511:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14484:6:124"},"nodeType":"YulFunctionCall","src":"14484:34:124"},"nodeType":"YulExpressionStatement","src":"14484:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14538:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14549:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14534:3:124"},"nodeType":"YulFunctionCall","src":"14534:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"14554:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14527:6:124"},"nodeType":"YulFunctionCall","src":"14527:34:124"},"nodeType":"YulExpressionStatement","src":"14527:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14358:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14369:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14377:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14385:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14396:4:124","type":""}],"src":"14248:319:124"},{"body":{"nodeType":"YulBlock","src":"14813:382:124","statements":[{"nodeType":"YulAssignment","src":"14823:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14835:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14846:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14831:3:124"},"nodeType":"YulFunctionCall","src":"14831:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14823:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"14859:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"14869:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14863:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14927:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14942:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"14950:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14938:3:124"},"nodeType":"YulFunctionCall","src":"14938:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14920:6:124"},"nodeType":"YulFunctionCall","src":"14920:34:124"},"nodeType":"YulExpressionStatement","src":"14920:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14974:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14985:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14970:3:124"},"nodeType":"YulFunctionCall","src":"14970:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14994:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15002:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14990:3:124"},"nodeType":"YulFunctionCall","src":"14990:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14963:6:124"},"nodeType":"YulFunctionCall","src":"14963:43:124"},"nodeType":"YulExpressionStatement","src":"14963:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15026:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15037:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15022:3:124"},"nodeType":"YulFunctionCall","src":"15022:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15046:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15054:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15042:3:124"},"nodeType":"YulFunctionCall","src":"15042:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15015:6:124"},"nodeType":"YulFunctionCall","src":"15015:43:124"},"nodeType":"YulExpressionStatement","src":"15015:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15078:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15089:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15074:3:124"},"nodeType":"YulFunctionCall","src":"15074:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"15094:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15067:6:124"},"nodeType":"YulFunctionCall","src":"15067:34:124"},"nodeType":"YulExpressionStatement","src":"15067:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15121:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15132:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15117:3:124"},"nodeType":"YulFunctionCall","src":"15117:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"15138:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15110:6:124"},"nodeType":"YulFunctionCall","src":"15110:35:124"},"nodeType":"YulExpressionStatement","src":"15110:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15165:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15176:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15161:3:124"},"nodeType":"YulFunctionCall","src":"15161:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"15182:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15154:6:124"},"nodeType":"YulFunctionCall","src":"15154:35:124"},"nodeType":"YulExpressionStatement","src":"15154:35:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14742:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14753:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14761:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14769:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14777:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14785:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14793:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14804:4:124","type":""}],"src":"14572:623:124"},{"body":{"nodeType":"YulBlock","src":"15248:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15258:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15268:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15262:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15311:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15326:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15329:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15322:3:124"},"nodeType":"YulFunctionCall","src":"15322:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15315:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15341:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15356:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15359:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15352:3:124"},"nodeType":"YulFunctionCall","src":"15352:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15345:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15396:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15398:16:124"},"nodeType":"YulFunctionCall","src":"15398:18:124"},"nodeType":"YulExpressionStatement","src":"15398:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15377:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15386:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15390:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15382:3:124"},"nodeType":"YulFunctionCall","src":"15382:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15374:2:124"},"nodeType":"YulFunctionCall","src":"15374:21:124"},"nodeType":"YulIf","src":"15371:47:124"},{"nodeType":"YulAssignment","src":"15427:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15438:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15443:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15434:3:124"},"nodeType":"YulFunctionCall","src":"15434:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15427:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15231:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15234:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15240:3:124","type":""}],"src":"15200:253:124"},{"body":{"nodeType":"YulBlock","src":"15615:252:124","statements":[{"nodeType":"YulAssignment","src":"15625:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:124"},"nodeType":"YulFunctionCall","src":"15633:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15625:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15667:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15682:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15690:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15678:3:124"},"nodeType":"YulFunctionCall","src":"15678:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15660:6:124"},"nodeType":"YulFunctionCall","src":"15660:74:124"},"nodeType":"YulExpressionStatement","src":"15660:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15754:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15765:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15750:3:124"},"nodeType":"YulFunctionCall","src":"15750:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"15770:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15743:6:124"},"nodeType":"YulFunctionCall","src":"15743:34:124"},"nodeType":"YulExpressionStatement","src":"15743:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15797:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15808:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15793:3:124"},"nodeType":"YulFunctionCall","src":"15793:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15817:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15825:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15813:3:124"},"nodeType":"YulFunctionCall","src":"15813:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15786:6:124"},"nodeType":"YulFunctionCall","src":"15786:75:124"},"nodeType":"YulExpressionStatement","src":"15786:75:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15568:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15579:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15587:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15595:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15606:4:124","type":""}],"src":"15458:409:124"},{"body":{"nodeType":"YulBlock","src":"15921:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:124"},"nodeType":"YulFunctionCall","src":"15995:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:124"},"nodeType":"YulFunctionCall","src":"16025:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16060:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16062:16:124"},"nodeType":"YulFunctionCall","src":"16062:18:124"},"nodeType":"YulExpressionStatement","src":"16062:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16055:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16047:2:124"},"nodeType":"YulFunctionCall","src":"16047:12:124"},"nodeType":"YulIf","src":"16044:38:124"},{"nodeType":"YulAssignment","src":"16091:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16103:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16108:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16099:3:124"},"nodeType":"YulFunctionCall","src":"16099:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16091:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15903:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15906:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15912:4:124","type":""}],"src":"15872:246:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        if gt(calldataload(add(headStart, 192)), _1) { revert(0, 0) }\n        let value7_1, value8_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 192))), dataEnd)\n        value7 := value7_1\n        value8 := value8_1\n        if gt(calldataload(add(headStart, 224)), _1) { revert(0, 0) }\n        let value9_1, value10_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 224))), dataEnd)\n        value9 := value9_1\n        value10 := value10_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), 192)\n        let tail_1 := abi_encode_string_calldata(value3, value4, add(headStart, 192))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value5, value6, tail_1)\n        mstore(add(headStart, 160), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value7, value8, tail_2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"30695":[{"length":32,"start":7371}],"30877":[{"length":32,"start":4412},{"length":32,"start":6086}],"30880":[{"length":32,"start":956},{"length":32,"start":1821},{"length":32,"start":2178},{"length":32,"start":2689},{"length":32,"start":3227},{"length":32,"start":3432},{"length":32,"start":3626},{"length":32,"start":3853},{"length":32,"start":3981},{"length":32,"start":4277},{"length":32,"start":5895},{"length":32,"start":6615},{"length":32,"start":9088},{"length":32,"start":9463}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b604051610240919061303e565b60405180910390f35b61025c61025736600461308d565b6106a0565b6040519015158152602001610240565b6102b961027a3660046130b9565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613130565b610795565b005b6102d661030f3660046130b9565b610b52565b61025c610322366004613224565b610b91565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c11565b61025c61037936600461308d565b610c20565b6102ff61038c36600461308d565b610c64565b6102ff61039f366004613224565b610d31565b6102d66103b23660046130b9565b610ddb565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff610470366004613265565b610ed6565b6102d66104833660046130b9565b610fcf565b610233610ffa565b61025c61049e36600461308d565b611009565b61025c6104b136600461308d565b61104d565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d6611070565b61025c610508366004613287565b61107b565b6102ff61051b366004613224565b611138565b6102ff61052e3660046132cd565b611376565b6102ff610541366004613287565b6116d0565b6102d661055436600461333b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a3660046130b9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f63660046130b9565b6117c2565b6102ff610609366004613224565b6119a0565b60606037805461061d90613374565b80601f016020809104026020016040519081016040528092919081815260200182805461064990613374565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611a52565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078891906133c2565b8290611ac0565b91505090565b6001805460ff16806107a65750303b155b806107b2575060005481115b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061097d88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1792505050565b6109bc86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2a92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a79611b3d565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0c99989796959493929190613424565b60405180910390a38015610b4357600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9d83611c02565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfb91879190610bf6906fffffffffffffffffffffffffffffffff8616906134ce565b611a52565b610c06858583611ca8565b506001949350505050565b6000610c1b611cc7565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf69086906134e5565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50603d54610d2d9073ffffffffffffffffffffffffffffffffffffffff168383611d00565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8b917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9791906133c2565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611ac0565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5081610f84575050565b603c54610fca907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611dd3565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8b565b60606038805461061d90613374565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf69086906134ce565b60008061105983611c02565b9050611066338583611ca8565b5060019392505050565b6000610c1b60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061112f85858585611dd3565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c991906134fd565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a919061351a565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906112c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff86811691161415611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50610dd573ffffffffffffffffffffffffffffffffffffffff85168484611d00565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166113f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a60205260408120549061149b610c11565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e0016040516020818303038152906040528051906020012060405160200161155c9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156115e2573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b506116948260016134e5565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a60205260409020556116c5898989611a52565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061178184848484612014565b73ffffffffffffffffffffffffffffffffffffffff83163014610dd557603d54610dd59073ffffffffffffffffffffffffffffffffffffffff168484611d00565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185391906134fd565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e4919061351a565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50610fca8383836000612332565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611af557600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2d906037906020840190612f43565b8051610d2d906038906020840190612f43565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b686125ae565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611ca4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083a565b5090565b610fca8383836fffffffffffffffffffffffffffffffff166001612332565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611cf85750603b5490565b610c1b611b3d565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611d63573d6000803e3d6000fd5b50611d6d846125b8565b610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083a565b600080611de08484612684565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611eac918491700100000000000000000000000000000000900416611ac0565b611eb68387611ac0565b611ec091906134ce565b9050611ecb85611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f3387611f2e85611c02565b6126c3565b6000611f3f82886134e5565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa191815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006120208383612684565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161208f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916120ec918491700100000000000000000000000000000000900416611ac0565b6120f68386611ac0565b61210091906134ce565b905061210b84611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121738761216e85611c02565b61283f565b8481111561225257600061218786836134ce565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121e991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350612329565b600061225e82876134ce565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122c091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed91906133c2565b9050600061243382610ed08973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050600061247983610ed08973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050612487888888866128a3565b8415612554576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561253b57600080fd5b505af115801561254f573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda866661259a8987612684565b60408051918252602082018890520161231f565b6060610c1b61060e565b60006125f8565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156126375760208114612671576126327f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125bf565b61267e565b823b612668576126687f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125bf565b6001915061267e565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126a857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546126e26fffffffffffffffffffffffffffffffff8316826134e5565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612727838261353c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612838576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561282457600080fd5b505af11580156116c5573d6000803e3d6000fd5b5050505050565b60365461285e6fffffffffffffffffffffffffffffffff8316826134ce565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166127278382613570565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916128ff918491700100000000000000000000000000000000900416611ac0565b6129098385611ac0565b61291391906134ce565b905060006129558673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054919250906129b090839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611ac0565b6129ba8387611ac0565b6129c491906134ce565b90506129cf85611c02565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a2e85611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612aa08888612a9b612a968a8a612684565b611c02565b612c98565b8215612b4f5760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612b8b5750600081115b15612c395760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161231f91815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612cda8282613570565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612d4e838261353c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f3b576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612e4e57600080fd5b505af1158015612e62573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612329576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f2157600080fd5b505af1158015612f35573d6000803e3d6000fd5b50505050505b505050505050565b828054612f4f90613374565b90600052602060002090601f016020900481019282612f715760008555612fb7565b82601f10612f8a57805160ff1916838001178555612fb7565b82800160010185558215612fb7579182015b82811115612fb7578251825591602001919060010190612f9c565b50611ca49291505b80821115611ca45760008155600101612fbf565b6000815180845260005b81811015612ff957602081850181015186830182015201612fdd565b8181111561300b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130516020830184612fd3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461307a57600080fd5b50565b803561308881613058565b919050565b600080604083850312156130a057600080fd5b82356130ab81613058565b946020939093013593505050565b6000602082840312156130cb57600080fd5b813561305181613058565b803560ff8116811461308857600080fd5b60008083601f8401126130f957600080fd5b50813567ffffffffffffffff81111561311157600080fd5b60208301915083602082850101111561312957600080fd5b9250929050565b60008060008060008060008060008060006101008c8e03121561315257600080fd5b61315b8c61307d565b9a5061316960208d0161307d565b995061317760408d0161307d565b985061318560608d0161307d565b975061319360808d016130d6565b965067ffffffffffffffff8060a08e013511156131af57600080fd5b6131bf8e60a08f01358f016130e7565b909750955060c08d01358110156131d557600080fd5b6131e58e60c08f01358f016130e7565b909550935060e08d01358110156131fb57600080fd5b5061320c8d60e08e01358e016130e7565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561323957600080fd5b833561324481613058565b9250602084013561325481613058565b929592945050506040919091013590565b6000806040838503121561327857600080fd5b50508035926020909101359150565b6000806000806080858703121561329d57600080fd5b84356132a881613058565b935060208501356132b881613058565b93969395505050506040820135916060013590565b600080600080600080600060e0888a0312156132e857600080fd5b87356132f381613058565b9650602088013561330381613058565b9550604088013594506060880135935061331f608089016130d6565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561334e57600080fd5b823561335981613058565b9150602083013561336981613058565b809150509250929050565b600181811c9082168061338857607f821691505b6020821081141561267e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156133d457600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c0606083015261346760c08301888a6133db565b828103608084015261347a8187896133db565b905082810360a084015261348f8185876133db565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134e0576134e061349f565b500390565b600082198211156134f8576134f861349f565b500190565b60006020828403121561350f57600080fd5b815161305181613058565b60006020828403121561352c57600080fd5b8151801515811461305157600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156135675761356761349f565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156135995761359961349f565b03939250505056fea2646970667358221220c3dec47a8f72b8a7f7388406f63cddbe90d3a10f0f6fbda03774d394a55cd27e64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3130 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xB52 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC11 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0xC20 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0xC64 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0xD31 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xDDB JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x3265 JUMP JUMPDEST PUSH2 0xED6 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xFCF JUMP JUMPDEST PUSH2 0x233 PUSH2 0xFFA JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x1009 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x104D JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x3287 JUMP JUMPDEST PUSH2 0x107B JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0x1138 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x32CD JUMP JUMPDEST PUSH2 0x1376 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3287 JUMP JUMPDEST PUSH2 0x16D0 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x333B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0x17C2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0x19A0 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3374 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x3374 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1A52 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1AC0 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x7A6 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B2 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x843 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x880 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x97D DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B17 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BC DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B2A SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA79 PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0C SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3424 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB43 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9D DUP4 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFB SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF6 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x34CE JUMP JUMPDEST PUSH2 0x1A52 JUMP JUMPDEST PUSH2 0xC06 DUP6 DUP6 DUP4 PUSH2 0x1CA8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B PUSH2 0x1CC7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF6 SWAP1 DUP7 SWAP1 PUSH2 0x34E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2D SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D00 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8B SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE73 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE97 SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF7A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP DUP2 PUSH2 0xF84 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0xFCA SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1DD3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3374 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF6 SWAP1 DUP7 SWAP1 PUSH2 0x34CE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1059 DUP4 PUSH2 0x1C02 JUMP JUMPDEST SWAP1 POP PUSH2 0x1066 CALLER DUP6 DUP4 PUSH2 0x1CA8 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1122 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x112F DUP6 DUP6 DUP6 DUP6 PUSH2 0x1DD3 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11C9 SWAP2 SWAP1 PUSH2 0x34FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1236 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125A SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x12C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1354 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0xDD5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D00 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x13F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x146B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x149B PUSH2 0xC11 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x155C SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1688 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x1694 DUP3 PUSH1 0x1 PUSH2 0x34E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x16C5 DUP10 DUP10 DUP10 PUSH2 0x1A52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1774 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x1781 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2014 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0xDD5 JUMPI PUSH1 0x3D SLOAD PUSH2 0xDD5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D00 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1853 SWAP2 SWAP1 PUSH2 0x34FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E4 SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1952 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A44 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0xFCA DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2332 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1AF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2D SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F43 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2D SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F43 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1B68 PUSH2 0x25AE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFCA DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2332 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1CF8 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1B PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1D63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D6D DUP5 PUSH2 0x25B8 JUMP JUMPDEST PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DE0 DUP5 DUP5 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1E4F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1EAC SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1EB6 DUP4 DUP8 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1EC0 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x1ECB DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F33 DUP8 PUSH2 0x1F2E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x26C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F3F DUP3 DUP9 PUSH2 0x34E5 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FA1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2020 DUP4 DUP4 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x208F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x20EC SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x20F6 DUP4 DUP7 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2100 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x210B DUP5 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2173 DUP8 PUSH2 0x216E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x283F JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x2252 JUMPI PUSH1 0x0 PUSH2 0x2187 DUP7 DUP4 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x21E9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x2329 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x225E DUP3 DUP8 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x22C0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23ED SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2433 DUP3 PUSH2 0xED0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2479 DUP4 PUSH2 0xED0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2487 DUP9 DUP9 DUP9 DUP7 PUSH2 0x28A3 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x2554 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x253B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x254F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x259A DUP10 DUP8 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x231F JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1B PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F8 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2637 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x2671 JUMPI PUSH2 0x2632 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25BF JUMP JUMPDEST PUSH2 0x267E JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x2668 JUMPI PUSH2 0x2668 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x267E JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x26E2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34E5 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2727 DUP4 DUP3 PUSH2 0x353C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2838 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2824 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x285E PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34CE JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2727 DUP4 DUP3 PUSH2 0x3570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x28FF SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2909 DUP4 DUP6 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2913 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2955 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29B0 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x29BA DUP4 DUP8 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x29C4 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x29CF DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A2E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AA0 DUP9 DUP9 PUSH2 0x2A9B PUSH2 0x2A96 DUP11 DUP11 PUSH2 0x2684 JUMP JUMPDEST PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x2C98 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2B4F JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B8B JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C39 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x231F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CDA DUP3 DUP3 PUSH2 0x3570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2D4E DUP4 DUP3 PUSH2 0x353C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F3B JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2329 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2F4F SWAP1 PUSH2 0x3374 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2F71 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2FB7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2F8A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2FB7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2FB7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2FB7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2F9C JUMP JUMPDEST POP PUSH2 0x1CA4 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2FBF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2FF9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2FDD JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x300B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3051 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FD3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x307A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3088 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x30AB DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3051 DUP2 PUSH2 0x3058 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3088 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x30F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x3152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x315B DUP13 PUSH2 0x307D JUMP JUMPDEST SWAP11 POP PUSH2 0x3169 PUSH1 0x20 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP10 POP PUSH2 0x3177 PUSH1 0x40 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP9 POP PUSH2 0x3185 PUSH1 0x60 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP8 POP PUSH2 0x3193 PUSH1 0x80 DUP14 ADD PUSH2 0x30D6 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x31AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31BF DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E7 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E5 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E7 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x320C DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x30E7 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3244 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3254 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x329D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32A8 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x32B8 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x32E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x32F3 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3303 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x331F PUSH1 0x80 DUP10 ADD PUSH2 0x30D6 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x334E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3359 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3369 DUP2 PUSH2 0x3058 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x3388 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x267E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3467 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x33DB JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x347A DUP2 DUP8 DUP10 PUSH2 0x33DB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x348F DUP2 DUP6 DUP8 PUSH2 0x33DB JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34E0 JUMPI PUSH2 0x34E0 PUSH2 0x349F JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x34F8 JUMPI PUSH2 0x34F8 PUSH2 0x349F JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x350F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3051 DUP2 PUSH2 0x3058 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x352C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3051 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3567 JUMPI PUSH2 0x3567 PUSH2 0x349F JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3599 JUMPI PUSH2 0x3599 PUSH2 0x349F JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC3 0xDE 0xC4 PUSH27 0x8F72B8A7F7388406F63CDDBE90D3A10F0F6FBDA03774D394A55CD2 PUSH31 0x64736F6C634300080A00330000000000000000000000000000000000000000 ","sourceMap":"1116:7178:115:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4534:158;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:124;;1551:22;1533:41;;1521:2;1506:18;4534:158:121;1393:187:124;1386:173:123;;;;;;:::i;:::-;3518:19:121;;1479:7:123;3518:19:121;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:123;;;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:123;1837:248:124;1450:45:115;;1492:3;1450:45;;;;;2236:25:124;;;2224:2;2209:18;1450:45:115;2090:177:124;4276:307:115;;;:::i;1990:850::-;;;;;;:::i;:::-;;:::i;:::-;;1225:119:123;;;;;;:::i;:::-;;:::i;4721:327:121:-;;;;;;:::i;:::-;;:::i;1304:141:115:-;;1350:95;1304:141;;3178:86:121;3250:9;;3178:86;;3250:9;;;;4990:36:124;;4978:2;4963:18;3178:86:121;4848:184:124;7503:130:115;;;:::i;5296:204:121:-;;;;;;:::i;:::-;;:::i;4888:161:115:-;;;;;;:::i;:::-;;:::i;5079:163::-;;;;;;:::i;:::-;;:::i;4035:212::-;;;;;;:::i;:::-;;:::i;2408:27:121:-;;;;;;;;5227:42:124;5215:55;;;5197:74;;5185:2;5170:18;2408:27:121;5037:240:124;3691:132:121;3797:21;;;;;;;3691:132;;192:50:120;;232:10;;;;;;;;;;;;;;;;;192:50;;3484:196:115;;;;;;:::i;:::-;;:::i;7782:128::-;;;;;;:::i;:::-;;:::i;3051:90:121:-;;;:::i;5758:226::-;;;;;;:::i;:::-;;:::i;4106:213::-;;;;;;:::i;:::-;;:::i;4613:104:115:-;4703:9;;;;4613:104;;4747:111;4837:16;;;;4747:111;;1601:113:123;;;:::i;2870:215:115:-;;;;;;:::i;:::-;;:::i;8069:223::-;;;;;;:::i;:::-;;:::i;5272:755::-;;;;;;:::i;:::-;;:::i;3115:339::-;;;;;;:::i;:::-;;:::i;4348:157:121:-;;;;;;:::i;:::-;4473:18;;;;4451:7;4473:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4348:157;1756:138:123;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:121;;;;;;:::i;:::-;;:::i;3710:296:115:-;;;;;;:::i;:::-;;:::i;2930:84:121:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4534:158::-;4619:4;4631:39;678:10:4;4654:7:121;4663:6;4631:8;:39::i;:::-;-1:-1:-1;4683:4:121;4534:158;;;;:::o;4276:307:115:-;4364:7;4379:27;4409:19;3376:12:121;;;3293:100;4409:19:115;4379:49;-1:-1:-1;4439:24:115;4435:53;;4480:1;4473:8;;;4276:307;:::o;4435:53::-;4560:16;;4528:49;;;;;:31;4560:16;;;4528:49;;;5197:74:124;4501:77:115;;4528:4;:31;;;;5170:18:124;;4528:49:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:19;;:26;:77::i;:::-;4494:84;;;4276:307;:::o;1990:850::-;1492:3;1217:12:87;;;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;9035:2:124;1202:146:87;;;9017:21:124;9074:2;9054:18;;;9047:30;9113:34;9093:18;;;9086:62;9184:16;9164:18;;;9157:44;9218:19;;1202:146:87;;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2334:4:115::1;2314:24;;:16;:24;;;2340:34;;;;;;;;;;;;;;;;::::0;2306:69:::1;;;;;;;;;;;;;;:::i;:::-;;2381:20;2390:10;;2381:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2381:8:115::1;::::0;-1:-1:-1;;;2381:20:115:i:1;:::-;2407:24;2418:12;;2407:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2407:10:115::1;::::0;-1:-1:-1;;;2407:24:115:i:1;:::-;7979:9:121::0;:23;;;;;;;;;;2472:9:115::1;:20:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;2498:16:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;2538:21:::1;:44:::0;;;;::::1;2472:20;2538:44;::::0;;;::::1;::::0;;;::::1;::::0;;2608:27:::1;:25;:27::i;:::-;2589:16;:46;;;;2697:4;2647:188;;2666:15;2647:188;;;2710:8;2734:20;2763:14;2785:10;;2803:12;;2823:6;;2647:188;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1990:850:115;;;;;;;;;;;:::o;1225:119:123:-;3518:19:121;;;1296:7:123;3518:19:121;;;:10;:19;;;;;:27;;;1318:21:123;1311:28;1225:119;-1:-1:-1;;1225:119:123:o;4721:327:121:-;4845:4;4857:18;4878;:6;:16;:18::i;:::-;4933:19;;;;;;;:11;:19;;;;;;;;678:10:4;4933:33:121;;;;;;;;;4857:39;;-1:-1:-1;4902:78:121;;4911:6;;678:10:4;4933:46:121;;;;;;;:::i;:::-;4902:8;:78::i;:::-;4986:40;4996:6;5004:9;5015:10;4986:9;:40::i;:::-;-1:-1:-1;5039:4:121;;4721:327;-1:-1:-1;;;;4721:327:121:o;7503:130:115:-;7582:7;7604:24;:22;:24::i;:::-;7597:31;;7503:130;:::o;5296:204:121:-;678:10:4;5386:4:121;5430:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5386:4;;5398:80;;5421:7;;5430:47;;5467:10;;5430:47;:::i;4888:161:115:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4998:16:115::1;::::0;4991:53:::1;::::0;4998:16:::1;;5029:6:::0;5037;4991:37:::1;:53::i;:::-;4888:161:::0;;:::o;5079:163::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;5079:163:115;;;:::o;4035:212::-;4224:16;;4192:49;;;;;:31;4224:16;;;4192:49;;;5197:74:124;4141:7:115;;4163:79;;4192:4;:31;;;;;;5170:18:124;;4192:49:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3518:19:121;;;3496:7;3518:19;;;:10;:19;;;;;:27;;;4163:21:115;:28;;:79::i;3484:196::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3584:11:115;3580:38:::1;;4888:161:::0;;:::o;3580:38::-:1;3650:9;::::0;3623:52:::1;::::0;3643:4:::1;::::0;3650:9:::1;;3661:6:::0;3669:5;3623:11:::1;:52::i;:::-;;3484:196:::0;;:::o;7782:128::-;1342:14:120;;;7864:7:115;1342:14:120;;;:7;:14;;;;;;7886:19:115;1260:101:120;3051:90:121;3101:13;3129:7;3122:14;;;;;:::i;5758:226::-;678:10:4;5865:4:121;5909:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5865:4;;5877:85;;5900:7;;5909:52;;5946:15;;5909:52;:::i;4106:213::-;4194:4;4206:18;4227;:6;:16;:18::i;:::-;4206:39;-1:-1:-1;4251:46:121;678:10:4;4275:9:121;4286:10;4251:9;:46::i;:::-;-1:-1:-1;4310:4:121;;4106:213;-1:-1:-1;;;4106:213:121:o;1601:113:123:-;1668:7;1690:19;3376:12:121;;;3293:100;2870:215:115;1519:26:121;;;;;;;;;;;;;;;;;3015:4:115;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3034:46:115::1;3046:6;3054:10;3066:6;3074:5;3034:11;:46::i;:::-;3027:53:::0;2870:215;-1:-1:-1;;;;;2870:215:115:o;8069:223::-;1211:22:121;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8189:16:115::1;::::0;8207:35:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;8189:16:::1;8180:25:::0;;::::1;8189:16:::0;::::1;8180:25;;8172:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8249:38:115::1;:26;::::0;::::1;8276:2:::0;8280:6;8249:26:::1;:38::i;5272:755::-:0;5469:29;;;;;;;;;;;;;;;;;5448:19;;;5440:59;;;;;;;;;;;;;:::i;:::-;;5563:8;5544:15;:27;;5573:25;;;;;;;;;;;;;;;;;5536:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5633:14:115;;;5605:25;5633:14;;;:7;:14;;;;;;;5733:18;:16;:18::i;:::-;5771:79;;;1350:95;5771:79;;;11789:25:124;11833:42;11911:15;;;11891:18;;;11884:43;;;;11963:15;;;11943:18;;;11936:43;11995:18;;;11988:34;;;12038:19;;;12031:35;;;12082:19;;;12075:35;;;11761:19;;5771:79:115;;;;;;;;;;;;5761:90;;;;;;5687:172;;;;;;;;12391:66:124;12379:79;;12483:1;12474:11;;12467:27;;;;12519:2;12510:12;;12503:28;12556:2;12547:12;;12121:444;5687:172:115;;;;;;;;;;;;;;5670:195;;5687:172;5670:195;;;;5888:26;;;;;;;;;12797:25:124;;;12870:4;12858:17;;12838:18;;;12831:45;;;;12892:18;;;12885:34;;;12935:18;;;12928:34;;;5670:195:115;-1:-1:-1;5888:26:115;;12769:19:124;;5888:26:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35;;:5;:35;;;5916:24;;;;;;;;;;;;;;;;;5871:70;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5964:21:115;:17;5984:1;5964:21;:::i;:::-;5947:14;;;;;;;:7;:14;;;;;:38;5991:31;5955:5;6007:7;6016:5;5991:8;:31::i;:::-;5434:593;;5272:755;;;;;;;:::o;3115:339::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3265:54:115::1;3277:4;3283:20;3305:6;3313:5;3265:11;:54::i;:::-;3329:37;::::0;::::1;3361:4;3329:37;3325:125;;3383:16;::::0;3376:67:::1;::::0;3383:16:::1;;3414:20:::0;3436:6;3376:37:::1;:67::i;3938:139:121:-:0;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:121::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3710:296:115:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3968:33:115::1;3978:4;3984:2;3988:5;3995;3968:9;:33::i;7235:173:121:-:0;7324:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7371:32;;2236:25:124;;;7371:32:121;;2209:18:124;7371:32:121;;;;;;;7235:173;;;:::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;7513:76:121:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;1475:298:120:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13232:25:124;;;;13273:18;;;13266:34;;;;1674:26:120;13316:18:124;;;13309:34;1712:13:120;13359:18:124;;;13352:34;1745:4:120;13402:19:124;;;13395:84;13204:19;;1582:178:120;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;13692:2:124;1635:78:12;;;13674:21:124;13731:2;13711:18;;;13704:30;13770:34;13750:18;;;13743:62;13841:9;13821:18;;;13814:37;13868:19;;1635:78:12;13490:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;7213:131:115:-;7306:33;7316:4;7322:2;7326:6;7306:33;;7334:4;7306:9;:33::i;867:185:120:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:120;;;867:185::o;939:69::-;1020:27;:25;:27::i;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;14100:2:124;1031:62:1;;;14082:21:124;14139:2;14119:18;;;14112:30;14178:23;14158:18;;;14151:51;14219:18;;1031:62:1;13898:345:124;2295:763:123;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:123;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;2543:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;2543:21:123;2662:59;;3518:27:121;;2683:37:123;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;2236:25:124;;2224:2;2209:18;;2090:177;2900:46:123;;;;;;;;2957:62;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;2957:62:123;;;;;;;;;;;14438:2:124;14423:18;2957:62:123;;;;;;;-1:-1:-1;;3034:18:123;;2295:763;-1:-1:-1;;;;;;2295:763:123:o;3512:888::-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:123;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;3719:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;3719:21:123;3832:53;;3518:27:121;;3853:31:123;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;2236:25:124;;2224:2;2209:18;;2090:177;4092:40:123;;;;;;;;4145:54;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4145:54:123;;;;;;;;14438:2:124;14423:18;4145:54:123;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;2236:25:124;;2224:2;2209:18;;2090:177;4280:40:123;;;;;;;;4333:56;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4333:56:123;;;;;;;;;;;14438:2:124;14423:18;4333:56:123;;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;6387:592:115:-;6512:16;;6551:48;;;;;6512:16;;;;6551:48;;;5197:74:124;;;6512:16:115;6486:23;;6551:4;:31;;;;;;5170:18:124;;6551:48:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6535:64;;6606:25;6634:35;6663:5;6634:21;6650:4;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6634:35:115;6606:63;;6675:23;6701:33;6728:5;6701:19;6717:2;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6701:33:115;6675:59;;6741:40;6757:4;6763:2;6767:6;6775:5;6741:15;:40::i;:::-;6792:8;6788:121;;;6810:92;;;;;:21;14938:15:124;;;6810:92:115;;;14920:34:124;14990:15;;;14970:18;;;14963:43;15042:15;;;15022:18;;;15015:43;15074:18;;;15067:34;;;15117:19;;;15110:35;;;15161:19;;;15154:35;;;6810:4:115;:21;;;;14831:19:124;;6810:92:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:121;6920:54;;;;;;;;6946:20;:6;6960:5;6946:13;:20::i;:::-;6920:54;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;1984:18;6920:54:115;1837:248:124;7943:96:115;8000:13;8028:6;:4;:6::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1069:519:122:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15678:55:124;;;1495:82:122;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;1495:38:122;;;;;15633:18:124;;1495:82:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;4767:1203:123:-;3518:19:121;;;4867:27:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;4867::123;5000:61;;3518:27:121;;5027:33:123;;;;5000:26;:61::i;:::-;4958:33;:19;4985:5;4958:26;:33::i;:::-;:103;;;;:::i;:::-;4926:135;;5068:30;5101:26;5117:9;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;5101:26:123;5243:21;;;5133:32;5243:21;;;:10;:21;;;;;:36;5068:59;;-1:-1:-1;5133:32:123;5213:67;;5068:59;;5243:36;;;;;5213:29;:67::i;:::-;5168:36;:22;5198:5;5168:29;:36::i;:::-;:112;;;;:::i;:::-;5133:147;;5323:17;:5;:15;:17::i;:::-;5287:18;;;;;;;:10;:18;;;;;:53;;;;;;;;;;;;;;;;5385:17;:5;:15;:17::i;:::-;5346:21;;;;;;;:10;:21;;;;;:56;;;;;;;;;;;;;;;;5409:68;5425:6;5357:9;5444:32;:20;:6;5458:5;5444:13;:20::i;:::-;:30;:32::i;:::-;5409:15;:68::i;:::-;5488:25;;5484:194;;5528:51;;2236:25:124;;;5528:51:123;;;;5545:1;;5528:51;;2224:2:124;2209:18;5528:51:123;;;;;;;5592:79;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5592:79:123;;;;;;678:10:4;;5592:79:123;;;;;14438:2:124;5592:79:123;;;5484:194;5698:9;5688:19;;:6;:19;;;;:51;;;;;5738:1;5711:24;:28;5688:51;5684:235;;;5754:57;;2236:25:124;;;5754:57:123;;;;5771:1;;5754:57;;2224:2:124;2209:18;5754:57:123;;;;;;;5824:88;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5824:88:123;;;;;;678:10:4;;5824:88:123;;;;;14438:2:124;5824:88:123;;;5684:235;5947:9;5930:35;;5939:6;5930:35;;;5958:6;5930:35;;;;2236:25:124;;2224:2;2209:18;;2090:177;6215:772:121;6335:18;;;6308:24;6335:18;;;:10;:18;;;;;:26;;;6396:25;6415:6;6335:26;6396:25;:::i;:::-;6367:18;;;;;;;;:10;:18;;;;;;:54;;;;;;;;;;;6457:21;;;;;;:29;;6524:28;6546:6;6457:29;6524:28;:::i;:::-;6492:21;;;;;;;;:10;:21;;;;;:60;;;;;;;;;;;;;;;;6613:21;;6492:60;6613:21;;;6644:48;;6640:343;;6731:12;;6751:84;;;;;:38;15678:55:124;;;6751:84:121;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6751:38:121;;;;;15633:18:124;;6751:84:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6857:9;6847:19;;:6;:19;;;6843:134;;6878:90;;;;;:38;15678:55:124;;;6878:90:121;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6878:38:121;;;;;15633:18:124;;6878:90:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6694:289;6640:343;6302:685;;;6215:772;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:124;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:124:o;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:124:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2272:156::-;2338:20;;2398:4;2387:16;;2377:27;;2367:55;;2418:1;2415;2408:12;2433:348;2485:8;2495:6;2549:3;2542:4;2534:6;2530:17;2526:27;2516:55;;2567:1;2564;2557:12;2516:55;-1:-1:-1;2590:20:124;;2633:18;2622:30;;2619:50;;;2665:1;2662;2655:12;2619:50;2702:4;2694:6;2690:17;2678:29;;2754:3;2747:4;2738:6;2730;2726:19;2722:30;2719:39;2716:59;;;2771:1;2768;2761:12;2716:59;2433:348;;;;;:::o;2786:1414::-;2989:6;2997;3005;3013;3021;3029;3037;3045;3053;3061;3069:7;3123:3;3111:9;3102:7;3098:23;3094:33;3091:53;;;3140:1;3137;3130:12;3091:53;3163:29;3182:9;3163:29;:::i;:::-;3153:39;;3211:38;3245:2;3234:9;3230:18;3211:38;:::i;:::-;3201:48;;3268:38;3302:2;3291:9;3287:18;3268:38;:::i;:::-;3258:48;;3325:38;3359:2;3348:9;3344:18;3325:38;:::i;:::-;3315:48;;3382:37;3414:3;3403:9;3399:19;3382:37;:::i;:::-;3372:47;;3438:18;3506:2;3499:3;3488:9;3484:19;3471:33;3468:41;3465:61;;;3522:1;3519;3512:12;3465:61;3561:86;3639:7;3631:3;3620:9;3616:19;3603:33;3592:9;3588:49;3561:86;:::i;:::-;3666:8;;-1:-1:-1;3693:8:124;-1:-1:-1;3744:3:124;3729:19;;3716:33;3713:41;-1:-1:-1;3710:61:124;;;3767:1;3764;3757:12;3710:61;3806:86;3884:7;3876:3;3865:9;3861:19;3848:33;3837:9;3833:49;3806:86;:::i;:::-;3911:8;;-1:-1:-1;3938:8:124;-1:-1:-1;3989:3:124;3974:19;;3961:33;3958:41;-1:-1:-1;3955:61:124;;;4012:1;4009;4002:12;3955:61;;4052:86;4130:7;4122:3;4111:9;4107:19;4094:33;4083:9;4079:49;4052:86;:::i;:::-;4157:8;4147:18;;4185:9;4174:20;;;;2786:1414;;;;;;;;;;;;;;:::o;4205:456::-;4282:6;4290;4298;4351:2;4339:9;4330:7;4326:23;4322:32;4319:52;;;4367:1;4364;4357:12;4319:52;4406:9;4393:23;4425:31;4450:5;4425:31;:::i;:::-;4475:5;-1:-1:-1;4532:2:124;4517:18;;4504:32;4545:33;4504:32;4545:33;:::i;:::-;4205:456;;4597:7;;-1:-1:-1;;;4651:2:124;4636:18;;;;4623:32;;4205:456::o;5770:248::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;-1:-1:-1;;5938:23:124;;;6008:2;5993:18;;;5980:32;;-1:-1:-1;5770:248:124:o;6254:525::-;6340:6;6348;6356;6364;6417:3;6405:9;6396:7;6392:23;6388:33;6385:53;;;6434:1;6431;6424:12;6385:53;6473:9;6460:23;6492:31;6517:5;6492:31;:::i;:::-;6542:5;-1:-1:-1;6599:2:124;6584:18;;6571:32;6612:33;6571:32;6612:33;:::i;:::-;6254:525;;6664:7;;-1:-1:-1;;;;6718:2:124;6703:18;;6690:32;;6769:2;6754:18;6741:32;;6254:525::o;6784:734::-;6895:6;6903;6911;6919;6927;6935;6943;6996:3;6984:9;6975:7;6971:23;6967:33;6964:53;;;7013:1;7010;7003:12;6964:53;7052:9;7039:23;7071:31;7096:5;7071:31;:::i;:::-;7121:5;-1:-1:-1;7178:2:124;7163:18;;7150:32;7191:33;7150:32;7191:33;:::i;:::-;7243:7;-1:-1:-1;7297:2:124;7282:18;;7269:32;;-1:-1:-1;7348:2:124;7333:18;;7320:32;;-1:-1:-1;7371:37:124;7403:3;7388:19;;7371:37;:::i;:::-;7361:47;;7455:3;7444:9;7440:19;7427:33;7417:43;;7507:3;7496:9;7492:19;7479:33;7469:43;;6784:734;;;;;;;;;;:::o;7523:388::-;7591:6;7599;7652:2;7640:9;7631:7;7627:23;7623:32;7620:52;;;7668:1;7665;7658:12;7620:52;7707:9;7694:23;7726:31;7751:5;7726:31;:::i;:::-;7776:5;-1:-1:-1;7833:2:124;7818:18;;7805:32;7846:33;7805:32;7846:33;:::i;:::-;7898:7;7888:17;;;7523:388;;;;;:::o;8202:437::-;8281:1;8277:12;;;;8324;;;8345:61;;8399:4;8391:6;8387:17;8377:27;;8345:61;8452:2;8444:6;8441:14;8421:18;8418:38;8415:218;;;8489:77;8486:1;8479:88;8590:4;8587:1;8580:15;8618:4;8615:1;8608:15;8644:184;8714:6;8767:2;8755:9;8746:7;8742:23;8738:32;8735:52;;;8783:1;8780;8773:12;8735:52;-1:-1:-1;8806:16:124;;8644:184;-1:-1:-1;8644:184:124:o;9248:326::-;9337:6;9332:3;9325:19;9389:6;9382:5;9375:4;9370:3;9366:14;9353:43;;9441:1;9434:4;9425:6;9420:3;9416:16;9412:27;9405:38;9307:3;9563:4;9493:66;9488:2;9480:6;9476:15;9472:88;9467:3;9463:98;9459:109;9452:116;;9248:326;;;;:::o;9579:928::-;9895:4;9924:42;10005:2;9997:6;9993:15;9982:9;9975:34;10057:2;10049:6;10045:15;10040:2;10029:9;10025:18;10018:43;;10109:4;10101:6;10097:17;10092:2;10081:9;10077:18;10070:45;10151:3;10146:2;10135:9;10131:18;10124:31;10178:63;10236:3;10225:9;10221:19;10213:6;10205;10178:63;:::i;:::-;10290:9;10282:6;10278:22;10272:3;10261:9;10257:19;10250:51;10324:50;10367:6;10359;10351;10324:50;:::i;:::-;10310:64;;10423:9;10415:6;10411:22;10405:3;10394:9;10390:19;10383:51;10451:50;10494:6;10486;10478;10451:50;:::i;:::-;10443:58;9579:928;-1:-1:-1;;;;;;;;;;;;9579:928:124:o;10512:184::-;10564:77;10561:1;10554:88;10661:4;10658:1;10651:15;10685:4;10682:1;10675:15;10701:125;10741:4;10769:1;10766;10763:8;10760:34;;;10774:18;;:::i;:::-;-1:-1:-1;10811:9:124;;10701:125::o;10831:128::-;10871:3;10902:1;10898:6;10895:1;10892:13;10889:39;;;10908:18;;:::i;:::-;-1:-1:-1;10944:9:124;;10831:128::o;10964:251::-;11034:6;11087:2;11075:9;11066:7;11062:23;11058:32;11055:52;;;11103:1;11100;11093:12;11055:52;11135:9;11129:16;11154:31;11179:5;11154:31;:::i;11220:277::-;11287:6;11340:2;11328:9;11319:7;11315:23;11311:32;11308:52;;;11356:1;11353;11346:12;11308:52;11388:9;11382:16;11441:5;11434:13;11427:21;11420:5;11417:32;11407:60;;11463:1;11460;11453:12;15200:253;15240:3;15268:34;15329:2;15326:1;15322:10;15359:2;15356:1;15352:10;15390:3;15386:2;15382:12;15377:3;15374:21;15371:47;;;15398:18;;:::i;:::-;15434:13;;15200:253;-1:-1:-1;;;;15200:253:124:o;15872:246::-;15912:4;15941:34;16025:10;;;;15995;;16047:12;;;16044:38;;;16062:18;;:::i;:::-;16099:13;;15872:246;-1:-1:-1;;;15872:246:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"2756600","executionCost":"infinite","totalCost":"infinite"},"external":{"ATOKEN_REVISION()":"308","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"241","POOL()":"infinite","RESERVE_TREASURY_ADDRESS()":"2396","UNDERLYING_ASSET_ADDRESS()":"2418","allowance(address,address)":"infinite","approve(address,uint256)":"24565","balanceOf(address)":"infinite","burn(address,address,uint256,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"26864","getIncentivesController()":"2429","getPreviousIndex(address)":"2590","getScaledUserBalanceAndSupply(address)":"4737","handleRepayment(address,address,uint256)":"infinite","increaseAllowance(address,uint256)":"26934","initialize(address,address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","mintToTreasury(uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2631","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","scaledBalanceOf(address)":"2626","scaledTotalSupply()":"2375","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOnLiquidation(address,address,uint256)":"infinite","transferUnderlyingTo(address,uint256)":"infinite"},"internal":{"_EIP712BaseId()":"infinite","_transfer(address,address,uint128)":"infinite","_transfer(address,address,uint256,bool)":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"ATOKEN_REVISION()":"0bd7ad3b","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","POOL()":"7535d246","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"ATOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"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\":\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"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\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\"},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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 `amount` 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 amount of tokens owned by `account`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"title\":\"Aave ERC20 AToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"notice\":\"Implementation of the interest bearing token for the Aave protocol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/AToken.sol\":\"AToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/AToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAToken} from '../../interfaces/IAToken.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\n\\n/**\\n * @title Aave ERC20 AToken\\n * @author Aave\\n * @notice Implementation of the interest bearing token for the Aave protocol\\n */\\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  uint256 public constant ATOKEN_REVISION = 0x1;\\n\\n  address internal _treasury;\\n  address internal _underlyingAsset;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return ATOKEN_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableAToken\\n  function initialize(\\n    IPool initializingPool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) public virtual override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(aTokenName);\\n    _setSymbol(aTokenSymbol);\\n    _setDecimals(aTokenDecimals);\\n\\n    _treasury = treasury;\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      treasury,\\n      address(incentivesController),\\n      aTokenDecimals,\\n      aTokenName,\\n      aTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool) {\\n    return _mintScaled(caller, onBehalfOf, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function burn(\\n    address from,\\n    address receiverOfUnderlying,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool {\\n    _burnScaled(from, receiverOfUnderlying, amount, index);\\n    if (receiverOfUnderlying != address(this)) {\\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\\n    }\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\\n    if (amount == 0) {\\n      return;\\n    }\\n    _mintScaled(address(POOL), _treasury, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferOnLiquidation(\\n    address from,\\n    address to,\\n    uint256 value\\n  ) external virtual override onlyPool {\\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\\n    // so no need to emit a specific event here\\n    _transfer(from, to, value, false);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(\\n    address user\\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    uint256 currentSupplyScaled = super.totalSupply();\\n\\n    if (currentSupplyScaled == 0) {\\n      return 0;\\n    }\\n\\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\\n    return _treasury;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function handleRepayment(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount\\n  ) external virtual override onlyPool {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IAToken\\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 override {\\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @notice Transfers the aTokens between two users. Validates the transfer\\n   * (ie checks for valid HF after the transfer) if required\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   * @param validate True if the transfer needs to be validated, false otherwise\\n   */\\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\\n    address underlyingAsset = _underlyingAsset;\\n\\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\\n\\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\\n\\n    super._transfer(from, to, amount, index);\\n\\n    if (validate) {\\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\\n    }\\n\\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\\n  }\\n\\n  /**\\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\\n    _transfer(from, to, amount, true);\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\\n   */\\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\\n    return super.DOMAIN_SEPARATOR();\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\\n   */\\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\\n    return super.nonces(owner);\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x2bebbe5c8078e3d300b67d27ed2ac6695f9d17d7c52f0f22879a04353a5c7db1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30857,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_userState","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_allowances","offset":0,"slot":"53","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_totalSupply","offset":0,"slot":"54","type":"t_uint256"},{"astId":30867,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_name","offset":0,"slot":"55","type":"t_string_storage"},{"astId":30869,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_symbol","offset":0,"slot":"56","type":"t_string_storage"},{"astId":30871,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_decimals","offset":0,"slot":"57","type":"t_uint8"},{"astId":30874,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_incentivesController","offset":1,"slot":"57","type":"t_contract(IAaveIncentivesController)4000"},{"astId":30691,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_nonces","offset":0,"slot":"58","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_domainSeparator","offset":0,"slot":"59","type":"t_bytes32"},{"astId":28343,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_treasury","offset":0,"slot":"60","type":"t_address"},{"astId":28345,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"_underlyingAsset","offset":0,"slot":"61","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/protocol/tokenization/AToken.sol:AToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"notice":"Implementation of the interest bearing token for the Aave protocol","version":1}}},"contracts/protocol/tokenization/DelegationAwareAToken.sol":{"DelegationAwareAToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegatee","type":"address"}],"name":"DelegateUnderlyingTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"ATOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegateUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","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":"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","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":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"The underlying asset needs to be compatible with the COMP delegation interface","events":{"DelegateUnderlyingTo(address)":{"details":"Emitted when underlying voting power is delegated","params":{"delegatee":"The address of the delegatee"}}},"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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 `amount` 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 amount of tokens owned by `account`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"delegateUnderlyingTo(address)":{"params":{"delegatee":"The address that will receive the delegation"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"title":"DelegationAwareAToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_28371":{"entryPoint":null,"id":28371,"parameterSlots":1,"returnSlots":0},"@_28963":{"entryPoint":null,"id":28963,"parameterSlots":1,"returnSlots":0},"@_30705":{"entryPoint":null,"id":30705,"parameterSlots":0,"returnSlots":0},"@_30916":{"entryPoint":null,"id":30916,"parameterSlots":4,"returnSlots":0},"@_31331":{"entryPoint":null,"id":31331,"parameterSlots":4,"returnSlots":0},"@_31495":{"entryPoint":null,"id":31495,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":543,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":582,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":518,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:50:124"},"nodeType":"YulIf","src":"76:70:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:138:124"},{"body":{"nodeType":"YulBlock","src":"252:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:124"},"nodeType":"YulFunctionCall","src":"300:12:124"},"nodeType":"YulExpressionStatement","src":"300:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:124"},"nodeType":"YulFunctionCall","src":"269:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:124"},"nodeType":"YulFunctionCall","src":"265:32:124"},"nodeType":"YulIf","src":"262:52:124"},{"nodeType":"YulVariableDeclaration","src":"323:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:124"},"nodeType":"YulFunctionCall","src":"336:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:124"},"nodeType":"YulFunctionCall","src":"361:38:124"},"nodeType":"YulExpressionStatement","src":"361:38:124"},{"nodeType":"YulAssignment","src":"408:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:124","type":""}],"src":"157:272:124"},{"body":{"nodeType":"YulBlock","src":"546:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:124"},"nodeType":"YulFunctionCall","src":"594:12:124"},"nodeType":"YulExpressionStatement","src":"594:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:32:124"},"nodeType":"YulIf","src":"556:52:124"},{"nodeType":"YulVariableDeclaration","src":"617:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:124"},"nodeType":"YulFunctionCall","src":"630:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:124"},"nodeType":"YulFunctionCall","src":"655:38:124"},"nodeType":"YulExpressionStatement","src":"655:38:124"},{"nodeType":"YulAssignment","src":"702:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:124","type":""}],"src":"434:289:124"},{"body":{"nodeType":"YulBlock","src":"783:325:124","statements":[{"nodeType":"YulAssignment","src":"793:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:124"},"nodeType":"YulFunctionCall","src":"803:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:124","statements":[{"nodeType":"YulAssignment","src":"903:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:124"},"nodeType":"YulFunctionCall","src":"913:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:124"},"nodeType":"YulFunctionCall","src":"874:26:124"},"nodeType":"YulIf","src":"871:61:124"},{"body":{"nodeType":"YulBlock","src":"991:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:124"},"nodeType":"YulFunctionCall","src":"1015:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:31:124"},"nodeType":"YulExpressionStatement","src":"1005:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:124"},"nodeType":"YulFunctionCall","src":"1049:15:124"},"nodeType":"YulExpressionStatement","src":"1049:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:124"},"nodeType":"YulFunctionCall","src":"1077:15:124"},"nodeType":"YulExpressionStatement","src":"1077:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:124"},"nodeType":"YulFunctionCall","src":"967:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:124"},"nodeType":"YulFunctionCall","src":"944:38:124"},"nodeType":"YulIf","src":"941:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:124","type":""}],"src":"728:380:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b5060405162003b7c38038062003b7c83398101604081905262000038916200021f565b80806040518060400160405280600b81526020016a105513d2d15397d253541360aa1b8152506040518060400160405280600b81526020016a105513d2d15397d253541360aa1b81525060008383838383838383836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f191906200021f565b6001600160a01b031660805282516200011290603790602086019062000160565b5081516200012890603890602085019062000160565b506039805460ff191660ff9290921691909117905550506001600160a01b031660a05250504660c05250620002839650505050505050565b8280546200016e9062000246565b90600052602060002090601f016020900481019282620001925760008555620001dd565b82601f10620001ad57805160ff1916838001178555620001dd565b82800160010185558215620001dd579182015b82811115620001dd578251825591602001919060010190620001c0565b50620001eb929150620001ef565b5090565b5b80821115620001eb5760008155600101620001f0565b6001600160a01b03811681146200021c57600080fd5b50565b6000602082840312156200023257600080fd5b81516200023f8162000206565b9392505050565b600181811c908216806200025b57607f821691505b602082108114156200027d57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516138606200031c6000396000611f540152600081816103ea0152818161074b015281816108b001528181610aaf01528181610f2401528181610ff1015281816110b301528181611196015281816112160152818161133e0152818161199001528181611c60015281816126090152612780015260008181610c43015281816113c50152611a4f01526138606000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c806375d2641311610145578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e0753986146105ba578063e655dbd814610616578063f866c3191461062957600080fd5b8063d7020d0a14610561578063dd62ed3e1461057457600080fd5b8063b1bf962d14610520578063b3f1c93d14610528578063cea9d26f1461053b578063d505accf1461054e57600080fd5b806395d89b4111610114578063a9059cbb116100f9578063a9059cbb146104d1578063ae167335146104e4578063b16a19de1461050257600080fd5b806395d89b41146104b6578063a457c2d7146104be57600080fd5b806375d264131461043157806378160376146104545780637df5bd3b146104905780637ecebe00146104a357600080fd5b80632f114618116101d857806339509351116101a75780636fd976761161018c5780636fd97676146103bf57806370a08231146103d25780637535d246146103e557600080fd5b806339509351146103995780634efecaa5146103ac57600080fd5b80632f1146181461034257806330adf81f14610355578063313ce5671461037c5780633644e5151461039157600080fd5b806318160ddd1161021457806318160ddd146102ff578063183fb413146103075780631da24f3e1461031c57806323b872dd1461032f57600080fd5b806306fdde0314610246578063095ea7b3146102645780630afbcdc9146102875780630bd7ad3b146102e9575b600080fd5b61024e61063c565b60405161025b91906132c7565b60405180910390f35b610277610272366004613316565b6106ce565b604051901515815260200161025b565b6102d4610295366004613342565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b6040805192835260208301919091520161025b565b6102f1600181565b60405190815260200161025b565b6102f16106e4565b61031a6103153660046133b9565b6107c3565b005b6102f161032a366004613342565b610b80565b61027761033d3660046134ad565b610bbf565b61031a610350366004613342565b610c3f565b6102f17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff909116815260200161025b565b6102f1610e9a565b6102776103a7366004613316565b610ea9565b61031a6103ba366004613316565b610eed565b61031a6103cd3660046134ad565b610fba565b6102f16103e0366004613342565b611064565b61040c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161025b565b603954610100900473ffffffffffffffffffffffffffffffffffffffff1661040c565b61024e6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61031a61049e3660046134ee565b61115f565b6102f16104b1366004613342565b611258565b61024e611283565b6102776104cc366004613316565b611292565b6102776104df366004613316565b6112d6565b603c5473ffffffffffffffffffffffffffffffffffffffff1661040c565b603d5473ffffffffffffffffffffffffffffffffffffffff1661040c565b6102f16112f9565b610277610536366004613510565b611304565b61031a6105493660046134ad565b6113c1565b61031a61055c366004613556565b6115ff565b61031a61056f366004613510565b611959565b6102f16105823660046135c4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102f16105c8366004613342565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61031a610624366004613342565b611a4b565b61031a6106373660046134ad565b611c29565b60606037805461064b906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610677906135fd565b80156106c45780601f10610699576101008083540402835291602001916106c4565b820191906000526020600020905b8154815290600101906020018083116106a757829003601f168201915b5050505050905090565b60006106db338484611cdb565b50600192915050565b6000806106f060365490565b9050806106ff57600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526107bd917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b6919061364b565b8290611d49565b91505090565b6001805460ff16806107d45750303b155b806107e0575060005481115b610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff161580156108ae57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b506109ab88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da092505050565b6109ea86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611db392505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610aa7611dc6565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b3a999897969594939291906136ad565b60405180910390a38015610b7157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610bcb83611e8b565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610c2991879190610c24906fffffffffffffffffffffffffffffffff861690613757565b611cdb565b610c34858583611f31565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd0919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d61919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d546040517f5c19a95c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015290911690635c19a95c90602401600060405180830381600087803b158015610e3d57600080fd5b505af1158015610e51573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff851692507fc7a5523bfd09724fd56950e708e523ad6a61ab165b8e997a31d42357a77f0e0f9150600090a25050565b6000610ea4611f50565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106db918590610c249086906137ad565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d54610fb69073ffffffffffffffffffffffffffffffffffffffff168383611f89565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610bb9917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611120919061364b565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611d49565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b508161120d575050565b603c54611253907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16848461205c565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610bb9565b60606038805461064b906135fd565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106db918590610c24908690613757565b6000806112e283611e8b565b90506112ef338583611f31565b5060019392505050565b6000610ea460365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b506113b88585858561205c565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611452919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156114bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e3919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff868116911614156115dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061105e73ffffffffffffffffffffffffffffffffffffffff85168484611f89565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8816611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50834211156040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a602052604081205490611724610e9a565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e001604051602081830303815290604052805190602001206040516020016117e59291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561186b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061191d8260016137ad565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a602052604090205561194e898989611cdb565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50611a0a8484848461229d565b73ffffffffffffffffffffffffffffffffffffffff8316301461105e57603d5461105e9073ffffffffffffffffffffffffffffffffffffffff168484611f89565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adc919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061125383838360006125bb565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611d7e57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610fb69060379060208401906131cc565b8051610fb69060389060208401906131cc565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611df1612837565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610868565b5090565b6112538383836fffffffffffffffffffffffffffffffff1660016125bb565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611f815750603b5490565b610ea4611dc6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611fec573d6000803e3d6000fd5b50611ff684612841565b61105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610868565b600080612069848461290d565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816120d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612135918491700100000000000000000000000000000000900416611d49565b61213f8387611d49565b6121499190613757565b905061215485611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121bc876121b785611e8b565b61294c565b60006121c882886137ad565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161222a91815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006122a9838361290d565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612375918491700100000000000000000000000000000000900416611d49565b61237f8386611d49565b6123899190613757565b905061239484611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556123fc876123f785611e8b565b612ac8565b848111156124db5760006124108683613757565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161247291815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a3506125b2565b60006124e78287613757565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161254991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015612652573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612676919061364b565b905060006126bc826111598973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b90506000612702836111598973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b905061271088888886612b2c565b84156127dd576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b1580156127c457600080fd5b505af11580156127d8573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda8666612823898761290d565b6040805191825260208201889052016125a8565b6060610ea461063c565b6000612881565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156128c057602081146128fa576128bb7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f612848565b612907565b823b6128f1576128f17f475076323a206e6f74206120636f6e74726163740000000000000000000000006014612848565b60019150612907565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561293157600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60365461296b6fffffffffffffffffffffffffffffffff8316826137ad565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166129b083826137c5565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612ac1576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015612aad57600080fd5b505af115801561194e573d6000803e3d6000fd5b5050505050565b603654612ae76fffffffffffffffffffffffffffffffff831682613757565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166129b083826137f9565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612b88918491700100000000000000000000000000000000900416611d49565b612b928385611d49565b612b9c9190613757565b90506000612bde8673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205491925090612c3990839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611d49565b612c438387611d49565b612c4d9190613757565b9050612c5885611e8b565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612cb785611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612d298888612d24612d1f8a8a61290d565b611e8b565b612f21565b8215612dd85760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612e145750600081115b15612ec25760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516125a891815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612f6382826137f9565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612fd783826137c5565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff939093169290921790915560395461010090041680156131c4576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b1580156130d757600080fd5b505af11580156130eb573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146125b2576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b1580156131aa57600080fd5b505af11580156131be573d6000803e3d6000fd5b50505050505b505050505050565b8280546131d8906135fd565b90600052602060002090601f0160209004810192826131fa5760008555613240565b82601f1061321357805160ff1916838001178555613240565b82800160010185558215613240579182015b82811115613240578251825591602001919060010190613225565b50611f2d9291505b80821115611f2d5760008155600101613248565b6000815180845260005b8181101561328257602081850181015186830182015201613266565b81811115613294576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006132da602083018461325c565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461330357600080fd5b50565b8035613311816132e1565b919050565b6000806040838503121561332957600080fd5b8235613334816132e1565b946020939093013593505050565b60006020828403121561335457600080fd5b81356132da816132e1565b803560ff8116811461331157600080fd5b60008083601f84011261338257600080fd5b50813567ffffffffffffffff81111561339a57600080fd5b6020830191508360208285010111156133b257600080fd5b9250929050565b60008060008060008060008060008060006101008c8e0312156133db57600080fd5b6133e48c613306565b9a506133f260208d01613306565b995061340060408d01613306565b985061340e60608d01613306565b975061341c60808d0161335f565b965067ffffffffffffffff8060a08e0135111561343857600080fd5b6134488e60a08f01358f01613370565b909750955060c08d013581101561345e57600080fd5b61346e8e60c08f01358f01613370565b909550935060e08d013581101561348457600080fd5b506134958d60e08e01358e01613370565b81935080925050509295989b509295989b9093969950565b6000806000606084860312156134c257600080fd5b83356134cd816132e1565b925060208401356134dd816132e1565b929592945050506040919091013590565b6000806040838503121561350157600080fd5b50508035926020909101359150565b6000806000806080858703121561352657600080fd5b8435613531816132e1565b93506020850135613541816132e1565b93969395505050506040820135916060013590565b600080600080600080600060e0888a03121561357157600080fd5b873561357c816132e1565b9650602088013561358c816132e1565b955060408801359450606088013593506135a86080890161335f565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156135d757600080fd5b82356135e2816132e1565b915060208301356135f2816132e1565b809150509250929050565b600181811c9082168061361157607f821691505b60208210811415612907577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561365d57600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c060608301526136f060c08301888a613664565b8281036080840152613703818789613664565b905082810360a0840152613718818587613664565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561376957613769613728565b500390565b60006020828403121561378057600080fd5b81516132da816132e1565b60006020828403121561379d57600080fd5b815180151581146132da57600080fd5b600082198211156137c0576137c0613728565b500190565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156137f0576137f0613728565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561382257613822613728565b03939250505056fea26469706673582212203822603964a4bb9d03aa8b8dee583f3aaf86bdf3d5528dac1f72310fbdfd1b7c64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3B7C CODESIZE SUB DUP1 PUSH3 0x3B7C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x21F JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF1 SWAP2 SWAP1 PUSH3 0x21F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE DUP3 MLOAD PUSH3 0x112 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x128 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP PUSH1 0x39 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP POP CHAINID PUSH1 0xC0 MSTORE POP PUSH3 0x283 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x16E SWAP1 PUSH3 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x192 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1AD JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1DD JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1DD JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1C0 JUMP JUMPDEST POP PUSH3 0x1EB SWAP3 SWAP2 POP PUSH3 0x1EF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1EB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x23F DUP2 PUSH3 0x206 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x25B JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x27D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x3860 PUSH3 0x31C PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1F54 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3EA ADD MSTORE DUP2 DUP2 PUSH2 0x74B ADD MSTORE DUP2 DUP2 PUSH2 0x8B0 ADD MSTORE DUP2 DUP2 PUSH2 0xAAF ADD MSTORE DUP2 DUP2 PUSH2 0xF24 ADD MSTORE DUP2 DUP2 PUSH2 0xFF1 ADD MSTORE DUP2 DUP2 PUSH2 0x10B3 ADD MSTORE DUP2 DUP2 PUSH2 0x1196 ADD MSTORE DUP2 DUP2 PUSH2 0x1216 ADD MSTORE DUP2 DUP2 PUSH2 0x133E ADD MSTORE DUP2 DUP2 PUSH2 0x1990 ADD MSTORE DUP2 DUP2 PUSH2 0x1C60 ADD MSTORE DUP2 DUP2 PUSH2 0x2609 ADD MSTORE PUSH2 0x2780 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0xC43 ADD MSTORE DUP2 DUP2 PUSH2 0x13C5 ADD MSTORE PUSH2 0x1A4F ADD MSTORE PUSH2 0x3860 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x241 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x75D26413 GT PUSH2 0x145 JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x616 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x561 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x520 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x528 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4E4 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x75D26413 EQ PUSH2 0x431 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F114618 GT PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x39509351 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x6FD97676 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x3AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F114618 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24E PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x25B SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x277 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x6CE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2D4 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x6E4 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0x33B9 JUMP JUMPDEST PUSH2 0x7C3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2F1 PUSH2 0x32A CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xB80 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x33D CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x31A PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x2F1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0xE9A JUMP JUMPDEST PUSH2 0x277 PUSH2 0x3A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0xEA9 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x3BA CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0xEED JUMP JUMPDEST PUSH2 0x31A PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1064 JUMP JUMPDEST PUSH2 0x40C PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH2 0x24E PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x34EE JUMP JUMPDEST PUSH2 0x115F JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1258 JUMP JUMPDEST PUSH2 0x24E PUSH2 0x1283 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x4CC CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x1292 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x4DF CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x12D6 JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x12F9 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x536 CALLDATASIZE PUSH1 0x4 PUSH2 0x3510 JUMP JUMPDEST PUSH2 0x1304 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x549 CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0x13C1 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x55C CALLDATASIZE PUSH1 0x4 PUSH2 0x3556 JUMP JUMPDEST PUSH2 0x15FF JUMP JUMPDEST PUSH2 0x31A PUSH2 0x56F CALLDATASIZE PUSH1 0x4 PUSH2 0x3510 JUMP JUMPDEST PUSH2 0x1959 JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x582 CALLDATASIZE PUSH1 0x4 PUSH2 0x35C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x5C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x624 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1A4B JUMP JUMPDEST PUSH2 0x31A PUSH2 0x637 CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0x1C29 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x64B SWAP1 PUSH2 0x35FD JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x677 SWAP1 PUSH2 0x35FD JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x699 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DB CALLER DUP5 DUP5 PUSH2 0x1CDB JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6F0 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6FF JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x7BD SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x792 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7B6 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1D49 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x7D4 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7E0 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x871 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x8AE JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x96B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x9AB DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DA0 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9EA DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DB3 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xAA7 PUSH2 0x1DC6 JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB3A SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x36AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB71 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBCB DUP4 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xC29 SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xC24 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x3757 JUMP JUMPDEST PUSH2 0x1CDB JUMP JUMPDEST PUSH2 0xC34 DUP6 DUP6 DUP4 PUSH2 0x1F31 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCD0 SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD61 SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xDCF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x5C19A95C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x5C19A95C SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP3 POP PUSH32 0xC7A5523BFD09724FD56950E708E523AD6A61AB165B8E997A31D42357A77F0E0F SWAP2 POP PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEA4 PUSH2 0x1F50 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6DB SWAP2 DUP6 SWAP1 PUSH2 0xC24 SWAP1 DUP7 SWAP1 PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xFB6 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1F89 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x105E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xBB9 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1120 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1203 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP DUP2 PUSH2 0x120D JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0x1253 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x205C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xBB9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x64B SWAP1 PUSH2 0x35FD JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6DB SWAP2 DUP6 SWAP1 PUSH2 0xC24 SWAP1 DUP7 SWAP1 PUSH2 0x3757 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12E2 DUP4 PUSH2 0x1E8B JUMP JUMPDEST SWAP1 POP PUSH2 0x12EF CALLER DUP6 DUP4 PUSH2 0x1F31 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEA4 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x13AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x13B8 DUP6 DUP6 DUP6 DUP6 PUSH2 0x205C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x142E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1452 SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14E3 SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1551 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x15DD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x105E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x1681 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x16F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x1724 PUSH2 0xE9A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17E5 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x186B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1911 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x191D DUP3 PUSH1 0x1 PUSH2 0x37AD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x194E DUP10 DUP10 DUP10 PUSH2 0x1CDB JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x19FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x1A0A DUP5 DUP5 DUP5 DUP5 PUSH2 0x229D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0x105E JUMPI PUSH1 0x3D SLOAD PUSH2 0x105E SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1ADC SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B6D SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1BDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1CCD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x1253 DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x25BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFB6 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x31CC JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFB6 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x31CC JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1DF1 PUSH2 0x2837 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1F2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x868 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1253 DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x25BB JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1F81 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xEA4 PUSH2 0x1DC6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1FEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1FF6 DUP5 PUSH2 0x2841 JUMP JUMPDEST PUSH2 0x105E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2069 DUP5 DUP5 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x20D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2135 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x213F DUP4 DUP8 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2149 SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2154 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x21BC DUP8 PUSH2 0x21B7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x294C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21C8 DUP3 DUP9 PUSH2 0x37AD JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x222A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22A9 DUP4 DUP4 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x2318 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2375 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x237F DUP4 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2389 SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2394 DUP5 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x23FC DUP8 PUSH2 0x23F7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x2AC8 JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x24DB JUMPI PUSH1 0x0 PUSH2 0x2410 DUP7 DUP4 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2472 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x25B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24E7 DUP3 DUP8 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2549 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2652 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2676 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x26BC DUP3 PUSH2 0x1159 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2702 DUP4 PUSH2 0x1159 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2710 DUP9 DUP9 DUP9 DUP7 PUSH2 0x2B2C JUMP JUMPDEST DUP5 ISZERO PUSH2 0x27DD JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x2823 DUP10 DUP8 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x25A8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xEA4 PUSH2 0x63C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2881 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x28C0 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x28FA JUMPI PUSH2 0x28BB PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x2848 JUMP JUMPDEST PUSH2 0x2907 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x28F1 JUMPI PUSH2 0x28F1 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x2848 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2907 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x296B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29B0 DUP4 DUP3 PUSH2 0x37C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2AC1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x194E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2AE7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x3757 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29B0 DUP4 DUP3 PUSH2 0x37F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2B88 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2B92 DUP4 DUP6 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2B9C SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2BDE DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2C39 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2C43 DUP4 DUP8 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2C4D SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C58 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2CB7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2D29 DUP9 DUP9 PUSH2 0x2D24 PUSH2 0x2D1F DUP11 DUP11 PUSH2 0x290D JUMP JUMPDEST PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x2F21 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2DD8 JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2E14 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2EC2 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x25A8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2F63 DUP3 DUP3 PUSH2 0x37F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2FD7 DUP4 DUP3 PUSH2 0x37C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x31C4 JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x25B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x31BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x31D8 SWAP1 PUSH2 0x35FD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x31FA JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3240 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3213 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3240 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3240 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3240 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3225 JUMP JUMPDEST POP PUSH2 0x1F2D SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1F2D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3248 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3282 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x3266 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3294 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x32DA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x325C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3311 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3334 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x32DA DUP2 PUSH2 0x32E1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x339A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x33B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x33DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x33E4 DUP13 PUSH2 0x3306 JUMP JUMPDEST SWAP11 POP PUSH2 0x33F2 PUSH1 0x20 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP10 POP PUSH2 0x3400 PUSH1 0x40 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP9 POP PUSH2 0x340E PUSH1 0x60 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP8 POP PUSH2 0x341C PUSH1 0x80 DUP14 ADD PUSH2 0x335F JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x3438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3448 DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3370 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x345E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x346E DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3370 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x3484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3495 DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3370 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x34C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x34CD DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x34DD DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3531 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3541 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x357C DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x358C DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x35A8 PUSH1 0x80 DUP10 ADD PUSH2 0x335F JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x35E2 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x35F2 DUP2 PUSH2 0x32E1 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x3611 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2907 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x365D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x36F0 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x3664 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x3703 DUP2 DUP8 DUP10 PUSH2 0x3664 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3718 DUP2 DUP6 DUP8 PUSH2 0x3664 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3769 JUMPI PUSH2 0x3769 PUSH2 0x3728 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3780 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x32DA DUP2 PUSH2 0x32E1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x379D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x32DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x37C0 JUMPI PUSH2 0x37C0 PUSH2 0x3728 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x37F0 JUMPI PUSH2 0x37F0 PUSH2 0x3728 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3822 JUMPI PUSH2 0x3822 PUSH2 0x3728 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE 0x22 PUSH1 0x39 PUSH5 0xA4BB9D03AA DUP12 DUP14 0xEE PC EXTCODEHASH GASPRICE 0xAF DUP7 0xBD RETURN 0xD5 MSTORE DUP14 0xAC 0x1F PUSH19 0x310FBDFD1B7C64736F6C634300080A00330000 ","sourceMap":"464:734:116:-:0;;;928:1:87;886:43;;775:74:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;806:4;1858::115;988:195:123;;;;;;;;;;;;;-1:-1:-1;;;988:195:123;;;;;;;;;;;;;;;;-1:-1:-1;;;988:195:123;;;1894:1:115;1116:4:123;1122;1128:6;1136:8;817:4:122;823;829:6;837:8;2780:4:121;-1:-1:-1;;;;;2780:23:121;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:121;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:121;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:121;:20;;-1:-1:-1;;2851:20:121;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:121;;;-1:-1:-1;;630:13:120;619:24;;-1:-1:-1;464:734:116;;-1:-1:-1;;;;;;;464:734:116;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;464:734:116;;;-1:-1:-1;464:734:116;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:124;-1:-1:-1;;;;;96:31:124;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:124:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;464:734:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ATOKEN_REVISION_28341":{"entryPoint":null,"id":28341,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_28877":{"entryPoint":3738,"id":28877,"parameterSlots":0,"returnSlots":1},"@DOMAIN_SEPARATOR_30723":{"entryPoint":8016,"id":30723,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_30682":{"entryPoint":null,"id":30682,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_28338":{"entryPoint":null,"id":28338,"parameterSlots":0,"returnSlots":0},"@POOL_30880":{"entryPoint":null,"id":30880,"parameterSlots":0,"returnSlots":0},"@RESERVE_TREASURY_ADDRESS_28628":{"entryPoint":null,"id":28628,"parameterSlots":0,"returnSlots":1},"@UNDERLYING_ASSET_ADDRESS_28638":{"entryPoint":null,"id":28638,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_28905":{"entryPoint":10295,"id":28905,"parameterSlots":0,"returnSlots":1},"@_approve_31266":{"entryPoint":7387,"id":31266,"parameterSlots":3,"returnSlots":0},"@_burnScaled_31772":{"entryPoint":8861,"id":31772,"parameterSlots":4,"returnSlots":0},"@_burn_31449":{"entryPoint":10952,"id":31449,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_30766":{"entryPoint":7622,"id":30766,"parameterSlots":0,"returnSlots":1},"@_mintScaled_31654":{"entryPoint":8284,"id":31654,"parameterSlots":4,"returnSlots":1},"@_mint_31390":{"entryPoint":10572,"id":31390,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_31299":{"entryPoint":null,"id":31299,"parameterSlots":1,"returnSlots":0},"@_setName_31277":{"entryPoint":7584,"id":31277,"parameterSlots":1,"returnSlots":0},"@_setSymbol_31288":{"entryPoint":7603,"id":31288,"parameterSlots":1,"returnSlots":0},"@_transfer_28844":{"entryPoint":9659,"id":28844,"parameterSlots":4,"returnSlots":0},"@_transfer_28863":{"entryPoint":7985,"id":28863,"parameterSlots":3,"returnSlots":0},"@_transfer_31241":{"entryPoint":12065,"id":31241,"parameterSlots":3,"returnSlots":0},"@_transfer_31916":{"entryPoint":11052,"id":31916,"parameterSlots":4,"returnSlots":0},"@allowance_31040":{"entryPoint":null,"id":31040,"parameterSlots":2,"returnSlots":1},"@approve_31061":{"entryPoint":1742,"id":31061,"parameterSlots":2,"returnSlots":1},"@balanceOf_28587":{"entryPoint":4196,"id":28587,"parameterSlots":1,"returnSlots":1},"@balanceOf_30971":{"entryPoint":null,"id":30971,"parameterSlots":1,"returnSlots":1},"@burn_28515":{"entryPoint":6489,"id":28515,"parameterSlots":4,"returnSlots":0},"@decimals_30946":{"entryPoint":null,"id":30946,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_31157":{"entryPoint":4754,"id":31157,"parameterSlots":2,"returnSlots":1},"@delegateUnderlyingTo_28983":{"entryPoint":3135,"id":28983,"parameterSlots":1,"returnSlots":0},"@getIncentivesController_30981":{"entryPoint":null,"id":30981,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":10305,"id":117,"parameterSlots":1,"returnSlots":1},"@getPreviousIndex_31558":{"entryPoint":null,"id":31558,"parameterSlots":1,"returnSlots":1},"@getRevision_28355":{"entryPoint":null,"id":28355,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_31531":{"entryPoint":null,"id":31531,"parameterSlots":1,"returnSlots":2},"@handleRepayment_28672":{"entryPoint":4026,"id":28672,"parameterSlots":3,"returnSlots":0},"@increaseAllowance_31130":{"entryPoint":3753,"id":31130,"parameterSlots":2,"returnSlots":1},"@initialize_28451":{"entryPoint":1987,"id":28451,"parameterSlots":11,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@mintToTreasury_28543":{"entryPoint":4447,"id":28543,"parameterSlots":2,"returnSlots":0},"@mint_28476":{"entryPoint":4868,"id":28476,"parameterSlots":4,"returnSlots":1},"@name_30926":{"entryPoint":1596,"id":30926,"parameterSlots":0,"returnSlots":1},"@nonces_28894":{"entryPoint":4696,"id":28894,"parameterSlots":1,"returnSlots":1},"@nonces_30736":{"entryPoint":null,"id":30736,"parameterSlots":1,"returnSlots":1},"@permit_28767":{"entryPoint":5631,"id":28767,"parameterSlots":7,"returnSlots":0},"@rayDiv_23792":{"entryPoint":10509,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":7497,"id":23780,"parameterSlots":2,"returnSlots":1},"@rescueTokens_28935":{"entryPoint":5057,"id":28935,"parameterSlots":3,"returnSlots":0},"@safeTransfer_78":{"entryPoint":8073,"id":78,"parameterSlots":3,"returnSlots":0},"@scaledBalanceOf_31510":{"entryPoint":2944,"id":31510,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_31543":{"entryPoint":4857,"id":31543,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_30995":{"entryPoint":6731,"id":30995,"parameterSlots":1,"returnSlots":0},"@symbol_30936":{"entryPoint":4739,"id":30936,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7819,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_28618":{"entryPoint":1764,"id":28618,"parameterSlots":0,"returnSlots":1},"@totalSupply_30956":{"entryPoint":null,"id":30956,"parameterSlots":0,"returnSlots":1},"@transferFrom_31103":{"entryPoint":3007,"id":31103,"parameterSlots":3,"returnSlots":1},"@transferOnLiquidation_28564":{"entryPoint":7209,"id":28564,"parameterSlots":3,"returnSlots":0},"@transferUnderlyingTo_28658":{"entryPoint":3821,"id":28658,"parameterSlots":2,"returnSlots":0},"@transfer_31022":{"entryPoint":4822,"id":31022,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":13062,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":13168,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":13122,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":14190,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":13764,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":13485,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":13584,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":13654,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":13078,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":14219,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr":{"entryPoint":13241,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":13899,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":13550,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint8":{"entryPoint":13151,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":12892,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":13924,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13997,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12999,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":14277,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":14253,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":14329,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":14167,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13821,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":14120,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":13025,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16120:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"820:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:124"},"nodeType":"YulFunctionCall","src":"909:12:124"},"nodeType":"YulExpressionStatement","src":"909:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:124"},"nodeType":"YulFunctionCall","src":"840:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:73:124"},"nodeType":"YulIf","src":"830:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:124","type":""}],"src":"775:154:124"},{"body":{"nodeType":"YulBlock","src":"983:85:124","statements":[{"nodeType":"YulAssignment","src":"993:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:124"},"nodeType":"YulFunctionCall","src":"1002:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:124"},"nodeType":"YulFunctionCall","src":"1031:31:124"},"nodeType":"YulExpressionStatement","src":"1031:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:124","type":""}],"src":"934:134:124"},{"body":{"nodeType":"YulBlock","src":"1160:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:124"},"nodeType":"YulFunctionCall","src":"1208:12:124"},"nodeType":"YulExpressionStatement","src":"1208:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:124"},"nodeType":"YulFunctionCall","src":"1177:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:124"},"nodeType":"YulFunctionCall","src":"1173:32:124"},"nodeType":"YulIf","src":"1170:52:124"},{"nodeType":"YulVariableDeclaration","src":"1231:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:124"},"nodeType":"YulFunctionCall","src":"1244:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:124"},"nodeType":"YulFunctionCall","src":"1276:31:124"},"nodeType":"YulExpressionStatement","src":"1276:31:124"},{"nodeType":"YulAssignment","src":"1316:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:124"}]},{"nodeType":"YulAssignment","src":"1340:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:124","type":""}],"src":"1073:315:124"},{"body":{"nodeType":"YulBlock","src":"1488:92:124","statements":[{"nodeType":"YulAssignment","src":"1498:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:124"},"nodeType":"YulFunctionCall","src":"1558:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:124"},"nodeType":"YulFunctionCall","src":"1551:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:41:124"},"nodeType":"YulExpressionStatement","src":"1533:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:124","type":""}],"src":"1393:187:124"},{"body":{"nodeType":"YulBlock","src":"1655:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:124"},"nodeType":"YulFunctionCall","src":"1703:12:124"},"nodeType":"YulExpressionStatement","src":"1703:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:124"},"nodeType":"YulFunctionCall","src":"1672:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:124"},"nodeType":"YulFunctionCall","src":"1668:32:124"},"nodeType":"YulIf","src":"1665:52:124"},{"nodeType":"YulVariableDeclaration","src":"1726:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:124"},"nodeType":"YulFunctionCall","src":"1739:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:124"},"nodeType":"YulFunctionCall","src":"1771:31:124"},"nodeType":"YulExpressionStatement","src":"1771:31:124"},{"nodeType":"YulAssignment","src":"1811:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:124","type":""}],"src":"1585:247:124"},{"body":{"nodeType":"YulBlock","src":"1966:119:124","statements":[{"nodeType":"YulAssignment","src":"1976:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:124"},"nodeType":"YulFunctionCall","src":"1984:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:124"},"nodeType":"YulFunctionCall","src":"2011:25:124"},"nodeType":"YulExpressionStatement","src":"2011:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:124"},"nodeType":"YulFunctionCall","src":"2052:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:124"},"nodeType":"YulFunctionCall","src":"2045:34:124"},"nodeType":"YulExpressionStatement","src":"2045:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:124","type":""}],"src":"1837:248:124"},{"body":{"nodeType":"YulBlock","src":"2191:76:124","statements":[{"nodeType":"YulAssignment","src":"2201:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:124"},"nodeType":"YulFunctionCall","src":"2209:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2201:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2254:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2236:6:124"},"nodeType":"YulFunctionCall","src":"2236:25:124"},"nodeType":"YulExpressionStatement","src":"2236:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2160:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2171:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2182:4:124","type":""}],"src":"2090:177:124"},{"body":{"nodeType":"YulBlock","src":"2319:109:124","statements":[{"nodeType":"YulAssignment","src":"2329:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2351:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2338:12:124"},"nodeType":"YulFunctionCall","src":"2338:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2329:5:124"}]},{"body":{"nodeType":"YulBlock","src":"2406:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2415:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2418:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2408:6:124"},"nodeType":"YulFunctionCall","src":"2408:12:124"},"nodeType":"YulExpressionStatement","src":"2408:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2380:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2391:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2398:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2387:3:124"},"nodeType":"YulFunctionCall","src":"2387:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2377:2:124"},"nodeType":"YulFunctionCall","src":"2377:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2370:6:124"},"nodeType":"YulFunctionCall","src":"2370:35:124"},"nodeType":"YulIf","src":"2367:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2298:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2309:5:124","type":""}],"src":"2272:156:124"},{"body":{"nodeType":"YulBlock","src":"2506:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"2555:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2564:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2567:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2557:6:124"},"nodeType":"YulFunctionCall","src":"2557:12:124"},"nodeType":"YulExpressionStatement","src":"2557:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2534:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2542:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2530:3:124"},"nodeType":"YulFunctionCall","src":"2530:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"2549:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2526:3:124"},"nodeType":"YulFunctionCall","src":"2526:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2519:6:124"},"nodeType":"YulFunctionCall","src":"2519:35:124"},"nodeType":"YulIf","src":"2516:55:124"},{"nodeType":"YulAssignment","src":"2580:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2603:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2590:12:124"},"nodeType":"YulFunctionCall","src":"2590:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2580:6:124"}]},{"body":{"nodeType":"YulBlock","src":"2653:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2662:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2665:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2655:6:124"},"nodeType":"YulFunctionCall","src":"2655:12:124"},"nodeType":"YulExpressionStatement","src":"2655:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2625:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2633:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2622:2:124"},"nodeType":"YulFunctionCall","src":"2622:30:124"},"nodeType":"YulIf","src":"2619:50:124"},{"nodeType":"YulAssignment","src":"2678:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2694:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"2702:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2690:3:124"},"nodeType":"YulFunctionCall","src":"2690:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2678:8:124"}]},{"body":{"nodeType":"YulBlock","src":"2759:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:124"},"nodeType":"YulFunctionCall","src":"2761:12:124"},"nodeType":"YulExpressionStatement","src":"2761:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2730:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"2738:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2726:3:124"},"nodeType":"YulFunctionCall","src":"2726:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"2747:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:124"},"nodeType":"YulFunctionCall","src":"2722:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"2754:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2719:2:124"},"nodeType":"YulFunctionCall","src":"2719:39:124"},"nodeType":"YulIf","src":"2716:59:124"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2469:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"2477:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2485:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"2495:6:124","type":""}],"src":"2433:348:124"},{"body":{"nodeType":"YulBlock","src":"3081:1119:124","statements":[{"body":{"nodeType":"YulBlock","src":"3128:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3137:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3140:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3130:6:124"},"nodeType":"YulFunctionCall","src":"3130:12:124"},"nodeType":"YulExpressionStatement","src":"3130:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3102:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3098:3:124"},"nodeType":"YulFunctionCall","src":"3098:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3123:3:124","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3094:3:124"},"nodeType":"YulFunctionCall","src":"3094:33:124"},"nodeType":"YulIf","src":"3091:53:124"},{"nodeType":"YulAssignment","src":"3153:39:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3163:18:124"},"nodeType":"YulFunctionCall","src":"3163:29:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3153:6:124"}]},{"nodeType":"YulAssignment","src":"3201:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3245:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:124"},"nodeType":"YulFunctionCall","src":"3230:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3211:18:124"},"nodeType":"YulFunctionCall","src":"3211:38:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3201:6:124"}]},{"nodeType":"YulAssignment","src":"3258:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3291:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3302:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3287:3:124"},"nodeType":"YulFunctionCall","src":"3287:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3268:18:124"},"nodeType":"YulFunctionCall","src":"3268:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3258:6:124"}]},{"nodeType":"YulAssignment","src":"3315:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3348:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3359:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3344:3:124"},"nodeType":"YulFunctionCall","src":"3344:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3325:18:124"},"nodeType":"YulFunctionCall","src":"3325:38:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3315:6:124"}]},{"nodeType":"YulAssignment","src":"3372:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3403:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3414:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3399:3:124"},"nodeType":"YulFunctionCall","src":"3399:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3382:16:124"},"nodeType":"YulFunctionCall","src":"3382:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3372:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3428:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"3438:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3432:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"3510:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:124"},"nodeType":"YulFunctionCall","src":"3512:12:124"},"nodeType":"YulExpressionStatement","src":"3512:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3499:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:124"},"nodeType":"YulFunctionCall","src":"3484:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:124"},"nodeType":"YulFunctionCall","src":"3471:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3506:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3468:2:124"},"nodeType":"YulFunctionCall","src":"3468:41:124"},"nodeType":"YulIf","src":"3465:61:124"},{"nodeType":"YulVariableDeclaration","src":"3535:112:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3592:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3620:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3631:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3616:3:124"},"nodeType":"YulFunctionCall","src":"3616:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3603:12:124"},"nodeType":"YulFunctionCall","src":"3603:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3588:3:124"},"nodeType":"YulFunctionCall","src":"3588:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3639:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3561:26:124"},"nodeType":"YulFunctionCall","src":"3561:86:124"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"3539:8:124","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"3549:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3656:18:124","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"3666:8:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:124"}]},{"nodeType":"YulAssignment","src":"3683:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3693:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3683:6:124"}]},{"body":{"nodeType":"YulBlock","src":"3755:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3764:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3767:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3757:6:124"},"nodeType":"YulFunctionCall","src":"3757:12:124"},"nodeType":"YulExpressionStatement","src":"3757:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3733:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3744:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3729:3:124"},"nodeType":"YulFunctionCall","src":"3729:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3716:12:124"},"nodeType":"YulFunctionCall","src":"3716:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3751:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3713:2:124"},"nodeType":"YulFunctionCall","src":"3713:41:124"},"nodeType":"YulIf","src":"3710:61:124"},{"nodeType":"YulVariableDeclaration","src":"3780:112:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:124"},"nodeType":"YulFunctionCall","src":"3861:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3848:12:124"},"nodeType":"YulFunctionCall","src":"3848:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3833:3:124"},"nodeType":"YulFunctionCall","src":"3833:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3884:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3806:26:124"},"nodeType":"YulFunctionCall","src":"3806:86:124"},"variables":[{"name":"value7_1","nodeType":"YulTypedName","src":"3784:8:124","type":""},{"name":"value8_1","nodeType":"YulTypedName","src":"3794:8:124","type":""}]},{"nodeType":"YulAssignment","src":"3901:18:124","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"3911:8:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3901:6:124"}]},{"nodeType":"YulAssignment","src":"3928:18:124","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"3938:8:124"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"3928:6:124"}]},{"body":{"nodeType":"YulBlock","src":"4000:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4009:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4012:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4002:6:124"},"nodeType":"YulFunctionCall","src":"4002:12:124"},"nodeType":"YulExpressionStatement","src":"4002:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3978:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3989:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3974:3:124"},"nodeType":"YulFunctionCall","src":"3974:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3961:12:124"},"nodeType":"YulFunctionCall","src":"3961:33:124"},{"name":"_1","nodeType":"YulIdentifier","src":"3996:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3958:2:124"},"nodeType":"YulFunctionCall","src":"3958:41:124"},"nodeType":"YulIf","src":"3955:61:124"},{"nodeType":"YulVariableDeclaration","src":"4025:113:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4083:9:124"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4111:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4122:3:124","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4107:3:124"},"nodeType":"YulFunctionCall","src":"4107:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4094:12:124"},"nodeType":"YulFunctionCall","src":"4094:33:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4079:3:124"},"nodeType":"YulFunctionCall","src":"4079:49:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4130:7:124"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"4052:26:124"},"nodeType":"YulFunctionCall","src":"4052:86:124"},"variables":[{"name":"value9_1","nodeType":"YulTypedName","src":"4029:8:124","type":""},{"name":"value10_1","nodeType":"YulTypedName","src":"4039:9:124","type":""}]},{"nodeType":"YulAssignment","src":"4147:18:124","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"4157:8:124"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"4147:6:124"}]},{"nodeType":"YulAssignment","src":"4174:20:124","value":{"name":"value10_1","nodeType":"YulIdentifier","src":"4185:9:124"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"4174:7:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2966:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2977:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2989:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2997:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3005:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3013:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3021:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3029:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3037:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3045:6:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3053:6:124","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3061:6:124","type":""},{"name":"value10","nodeType":"YulTypedName","src":"3069:7:124","type":""}],"src":"2786:1414:124"},{"body":{"nodeType":"YulBlock","src":"4309:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"4355:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4364:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4367:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4357:6:124"},"nodeType":"YulFunctionCall","src":"4357:12:124"},"nodeType":"YulExpressionStatement","src":"4357:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4330:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4339:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4326:3:124"},"nodeType":"YulFunctionCall","src":"4326:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4351:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4322:3:124"},"nodeType":"YulFunctionCall","src":"4322:32:124"},"nodeType":"YulIf","src":"4319:52:124"},{"nodeType":"YulVariableDeclaration","src":"4380:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4406:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4393:12:124"},"nodeType":"YulFunctionCall","src":"4393:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4384:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4450:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4425:24:124"},"nodeType":"YulFunctionCall","src":"4425:31:124"},"nodeType":"YulExpressionStatement","src":"4425:31:124"},{"nodeType":"YulAssignment","src":"4465:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4475:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4465:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4489:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4532:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:124"},"nodeType":"YulFunctionCall","src":"4517:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4504:12:124"},"nodeType":"YulFunctionCall","src":"4504:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4493:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4570:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4545:24:124"},"nodeType":"YulFunctionCall","src":"4545:33:124"},"nodeType":"YulExpressionStatement","src":"4545:33:124"},{"nodeType":"YulAssignment","src":"4587:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4597:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4587:6:124"}]},{"nodeType":"YulAssignment","src":"4613:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4651:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:124"},"nodeType":"YulFunctionCall","src":"4636:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4623:12:124"},"nodeType":"YulFunctionCall","src":"4623:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4613:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4259:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4270:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4282:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4290:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4298:6:124","type":""}],"src":"4205:456:124"},{"body":{"nodeType":"YulBlock","src":"4767:76:124","statements":[{"nodeType":"YulAssignment","src":"4777:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4789:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4785:3:124"},"nodeType":"YulFunctionCall","src":"4785:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4777:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4819:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"4830:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:124"},"nodeType":"YulFunctionCall","src":"4812:25:124"},"nodeType":"YulExpressionStatement","src":"4812:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4736:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4747:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4758:4:124","type":""}],"src":"4666:177:124"},{"body":{"nodeType":"YulBlock","src":"4945:87:124","statements":[{"nodeType":"YulAssignment","src":"4955:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4967:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4978:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4963:3:124"},"nodeType":"YulFunctionCall","src":"4963:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4955:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4997:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5012:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5020:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5008:3:124"},"nodeType":"YulFunctionCall","src":"5008:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4990:6:124"},"nodeType":"YulFunctionCall","src":"4990:36:124"},"nodeType":"YulExpressionStatement","src":"4990:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4914:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4925:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4936:4:124","type":""}],"src":"4848:184:124"},{"body":{"nodeType":"YulBlock","src":"5152:125:124","statements":[{"nodeType":"YulAssignment","src":"5162:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5174:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5185:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5170:3:124"},"nodeType":"YulFunctionCall","src":"5170:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5162:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5204:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5219:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5227:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5215:3:124"},"nodeType":"YulFunctionCall","src":"5215:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5197:6:124"},"nodeType":"YulFunctionCall","src":"5197:74:124"},"nodeType":"YulExpressionStatement","src":"5197:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5121:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5132:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5143:4:124","type":""}],"src":"5037:240:124"},{"body":{"nodeType":"YulBlock","src":"5417:125:124","statements":[{"nodeType":"YulAssignment","src":"5427:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5439:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5450:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5435:3:124"},"nodeType":"YulFunctionCall","src":"5435:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5427:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5469:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5484:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5492:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5480:3:124"},"nodeType":"YulFunctionCall","src":"5480:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5462:6:124"},"nodeType":"YulFunctionCall","src":"5462:74:124"},"nodeType":"YulExpressionStatement","src":"5462:74:124"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5386:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5397:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5408:4:124","type":""}],"src":"5282:260:124"},{"body":{"nodeType":"YulBlock","src":"5666:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5683:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5694:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5676:6:124"},"nodeType":"YulFunctionCall","src":"5676:21:124"},"nodeType":"YulExpressionStatement","src":"5676:21:124"},{"nodeType":"YulAssignment","src":"5706:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5732:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5744:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5755:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5740:3:124"},"nodeType":"YulFunctionCall","src":"5740:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5714:17:124"},"nodeType":"YulFunctionCall","src":"5714:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5706:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5635:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5646:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5657:4:124","type":""}],"src":"5547:218:124"},{"body":{"nodeType":"YulBlock","src":"5857:161:124","statements":[{"body":{"nodeType":"YulBlock","src":"5903:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5912:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5915:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5905:6:124"},"nodeType":"YulFunctionCall","src":"5905:12:124"},"nodeType":"YulExpressionStatement","src":"5905:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5878:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5887:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5874:3:124"},"nodeType":"YulFunctionCall","src":"5874:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5899:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5870:3:124"},"nodeType":"YulFunctionCall","src":"5870:32:124"},"nodeType":"YulIf","src":"5867:52:124"},{"nodeType":"YulAssignment","src":"5928:33:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5951:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5938:12:124"},"nodeType":"YulFunctionCall","src":"5938:23:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5928:6:124"}]},{"nodeType":"YulAssignment","src":"5970:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5997:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6008:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5993:3:124"},"nodeType":"YulFunctionCall","src":"5993:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5980:12:124"},"nodeType":"YulFunctionCall","src":"5980:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5970:6:124"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5815:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5826:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5838:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:124","type":""}],"src":"5770:248:124"},{"body":{"nodeType":"YulBlock","src":"6124:125:124","statements":[{"nodeType":"YulAssignment","src":"6134:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6146:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6157:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6142:3:124"},"nodeType":"YulFunctionCall","src":"6142:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6134:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6176:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6191:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6199:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6187:3:124"},"nodeType":"YulFunctionCall","src":"6187:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6169:6:124"},"nodeType":"YulFunctionCall","src":"6169:74:124"},"nodeType":"YulExpressionStatement","src":"6169:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6093:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6104:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6115:4:124","type":""}],"src":"6023:226:124"},{"body":{"nodeType":"YulBlock","src":"6375:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"6422:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6431:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6434:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6424:6:124"},"nodeType":"YulFunctionCall","src":"6424:12:124"},"nodeType":"YulExpressionStatement","src":"6424:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6396:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6405:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6392:3:124"},"nodeType":"YulFunctionCall","src":"6392:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6417:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6388:3:124"},"nodeType":"YulFunctionCall","src":"6388:33:124"},"nodeType":"YulIf","src":"6385:53:124"},{"nodeType":"YulVariableDeclaration","src":"6447:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6473:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:124"},"nodeType":"YulFunctionCall","src":"6460:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6451:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6517:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6492:24:124"},"nodeType":"YulFunctionCall","src":"6492:31:124"},"nodeType":"YulExpressionStatement","src":"6492:31:124"},{"nodeType":"YulAssignment","src":"6532:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6542:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6532:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6556:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6588:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6599:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6584:3:124"},"nodeType":"YulFunctionCall","src":"6584:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6571:12:124"},"nodeType":"YulFunctionCall","src":"6571:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6560:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6637:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6612:24:124"},"nodeType":"YulFunctionCall","src":"6612:33:124"},"nodeType":"YulExpressionStatement","src":"6612:33:124"},{"nodeType":"YulAssignment","src":"6654:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6664:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6654:6:124"}]},{"nodeType":"YulAssignment","src":"6680:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6707:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6703:3:124"},"nodeType":"YulFunctionCall","src":"6703:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6690:12:124"},"nodeType":"YulFunctionCall","src":"6690:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6680:6:124"}]},{"nodeType":"YulAssignment","src":"6731:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6758:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6769:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6754:3:124"},"nodeType":"YulFunctionCall","src":"6754:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6741:12:124"},"nodeType":"YulFunctionCall","src":"6741:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6731:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6317:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6328:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6340:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6348:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6356:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6364:6:124","type":""}],"src":"6254:525:124"},{"body":{"nodeType":"YulBlock","src":"6954:564:124","statements":[{"body":{"nodeType":"YulBlock","src":"7001:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7010:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7013:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7003:6:124"},"nodeType":"YulFunctionCall","src":"7003:12:124"},"nodeType":"YulExpressionStatement","src":"7003:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6975:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6984:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6971:3:124"},"nodeType":"YulFunctionCall","src":"6971:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6996:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6967:3:124"},"nodeType":"YulFunctionCall","src":"6967:33:124"},"nodeType":"YulIf","src":"6964:53:124"},{"nodeType":"YulVariableDeclaration","src":"7026:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7052:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7039:12:124"},"nodeType":"YulFunctionCall","src":"7039:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7030:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7096:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7071:24:124"},"nodeType":"YulFunctionCall","src":"7071:31:124"},"nodeType":"YulExpressionStatement","src":"7071:31:124"},{"nodeType":"YulAssignment","src":"7111:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7121:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7111:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7135:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7167:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7178:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:124"},"nodeType":"YulFunctionCall","src":"7163:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7150:12:124"},"nodeType":"YulFunctionCall","src":"7150:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7139:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7216:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7191:24:124"},"nodeType":"YulFunctionCall","src":"7191:33:124"},"nodeType":"YulExpressionStatement","src":"7191:33:124"},{"nodeType":"YulAssignment","src":"7233:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7243:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7233:6:124"}]},{"nodeType":"YulAssignment","src":"7259:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7286:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7297:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7282:3:124"},"nodeType":"YulFunctionCall","src":"7282:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7269:12:124"},"nodeType":"YulFunctionCall","src":"7269:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7259:6:124"}]},{"nodeType":"YulAssignment","src":"7310:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7337:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7348:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7333:3:124"},"nodeType":"YulFunctionCall","src":"7333:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7320:12:124"},"nodeType":"YulFunctionCall","src":"7320:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7310:6:124"}]},{"nodeType":"YulAssignment","src":"7361:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7392:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7403:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:124"},"nodeType":"YulFunctionCall","src":"7388:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7371:16:124"},"nodeType":"YulFunctionCall","src":"7371:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7361:6:124"}]},{"nodeType":"YulAssignment","src":"7417:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7444:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7455:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7440:3:124"},"nodeType":"YulFunctionCall","src":"7440:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7427:12:124"},"nodeType":"YulFunctionCall","src":"7427:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7417:6:124"}]},{"nodeType":"YulAssignment","src":"7469:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7496:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7507:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7492:3:124"},"nodeType":"YulFunctionCall","src":"7492:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7479:12:124"},"nodeType":"YulFunctionCall","src":"7479:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7469:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6872:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6883:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6895:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6903:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6911:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6919:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6927:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6935:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6943:6:124","type":""}],"src":"6784:734:124"},{"body":{"nodeType":"YulBlock","src":"7610:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"7656:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7665:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7668:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7658:6:124"},"nodeType":"YulFunctionCall","src":"7658:12:124"},"nodeType":"YulExpressionStatement","src":"7658:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7631:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7640:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7627:3:124"},"nodeType":"YulFunctionCall","src":"7627:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7652:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7623:3:124"},"nodeType":"YulFunctionCall","src":"7623:32:124"},"nodeType":"YulIf","src":"7620:52:124"},{"nodeType":"YulVariableDeclaration","src":"7681:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7707:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7694:12:124"},"nodeType":"YulFunctionCall","src":"7694:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7685:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7751:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7726:24:124"},"nodeType":"YulFunctionCall","src":"7726:31:124"},"nodeType":"YulExpressionStatement","src":"7726:31:124"},{"nodeType":"YulAssignment","src":"7766:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7776:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7766:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7790:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7822:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7833:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7818:3:124"},"nodeType":"YulFunctionCall","src":"7818:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7805:12:124"},"nodeType":"YulFunctionCall","src":"7805:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7794:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7871:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7846:24:124"},"nodeType":"YulFunctionCall","src":"7846:33:124"},"nodeType":"YulExpressionStatement","src":"7846:33:124"},{"nodeType":"YulAssignment","src":"7888:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7898:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7888:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7568:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7579:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7591:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7599:6:124","type":""}],"src":"7523:388:124"},{"body":{"nodeType":"YulBlock","src":"8020:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"8066:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8075:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8078:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8068:6:124"},"nodeType":"YulFunctionCall","src":"8068:12:124"},"nodeType":"YulExpressionStatement","src":"8068:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8041:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8050:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8037:3:124"},"nodeType":"YulFunctionCall","src":"8037:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8062:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8033:3:124"},"nodeType":"YulFunctionCall","src":"8033:32:124"},"nodeType":"YulIf","src":"8030:52:124"},{"nodeType":"YulVariableDeclaration","src":"8091:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8117:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8104:12:124"},"nodeType":"YulFunctionCall","src":"8104:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8095:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8161:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8136:24:124"},"nodeType":"YulFunctionCall","src":"8136:31:124"},"nodeType":"YulExpressionStatement","src":"8136:31:124"},{"nodeType":"YulAssignment","src":"8176:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"8186:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7986:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7997:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8009:6:124","type":""}],"src":"7916:281:124"},{"body":{"nodeType":"YulBlock","src":"8257:382:124","statements":[{"nodeType":"YulAssignment","src":"8267:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8281:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"8284:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8277:3:124"},"nodeType":"YulFunctionCall","src":"8277:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8267:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8298:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"8328:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"8334:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8324:3:124"},"nodeType":"YulFunctionCall","src":"8324:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"8302:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8375:31:124","statements":[{"nodeType":"YulAssignment","src":"8377:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8391:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8387:3:124"},"nodeType":"YulFunctionCall","src":"8387:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8377:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8355:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8348:6:124"},"nodeType":"YulFunctionCall","src":"8348:26:124"},"nodeType":"YulIf","src":"8345:61:124"},{"body":{"nodeType":"YulBlock","src":"8465:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8486:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8489:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8479:6:124"},"nodeType":"YulFunctionCall","src":"8479:88:124"},"nodeType":"YulExpressionStatement","src":"8479:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8587:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8590:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8580:6:124"},"nodeType":"YulFunctionCall","src":"8580:15:124"},"nodeType":"YulExpressionStatement","src":"8580:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8615:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8618:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8608:6:124"},"nodeType":"YulFunctionCall","src":"8608:15:124"},"nodeType":"YulExpressionStatement","src":"8608:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8421:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8444:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8452:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8441:2:124"},"nodeType":"YulFunctionCall","src":"8441:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8418:2:124"},"nodeType":"YulFunctionCall","src":"8418:38:124"},"nodeType":"YulIf","src":"8415:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"8237:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"8246:6:124","type":""}],"src":"8202:437:124"},{"body":{"nodeType":"YulBlock","src":"8725:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"8771:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8780:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8783:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8773:6:124"},"nodeType":"YulFunctionCall","src":"8773:12:124"},"nodeType":"YulExpressionStatement","src":"8773:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8746:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8755:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8742:3:124"},"nodeType":"YulFunctionCall","src":"8742:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8738:3:124"},"nodeType":"YulFunctionCall","src":"8738:32:124"},"nodeType":"YulIf","src":"8735:52:124"},{"nodeType":"YulAssignment","src":"8796:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8812:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8806:5:124"},"nodeType":"YulFunctionCall","src":"8806:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8796:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8691:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8702:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8714:6:124","type":""}],"src":"8644:184:124"},{"body":{"nodeType":"YulBlock","src":"9007:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9024:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9035:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9017:6:124"},"nodeType":"YulFunctionCall","src":"9017:21:124"},"nodeType":"YulExpressionStatement","src":"9017:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9058:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9069:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9054:3:124"},"nodeType":"YulFunctionCall","src":"9054:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9047:6:124"},"nodeType":"YulFunctionCall","src":"9047:30:124"},"nodeType":"YulExpressionStatement","src":"9047:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9097:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9108:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9093:3:124"},"nodeType":"YulFunctionCall","src":"9093:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"9113:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9086:6:124"},"nodeType":"YulFunctionCall","src":"9086:62:124"},"nodeType":"YulExpressionStatement","src":"9086:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9168:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9179:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9164:3:124"},"nodeType":"YulFunctionCall","src":"9164:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"9184:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9157:6:124"},"nodeType":"YulFunctionCall","src":"9157:44:124"},"nodeType":"YulExpressionStatement","src":"9157:44:124"},{"nodeType":"YulAssignment","src":"9210:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9222:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9233:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9218:3:124"},"nodeType":"YulFunctionCall","src":"9218:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9210:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8998:4:124","type":""}],"src":"8833:410:124"},{"body":{"nodeType":"YulBlock","src":"9315:259:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9332:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9337:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9325:6:124"},"nodeType":"YulFunctionCall","src":"9325:19:124"},"nodeType":"YulExpressionStatement","src":"9325:19:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9370:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"9375:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:124"},"nodeType":"YulFunctionCall","src":"9366:14:124"},{"name":"start","nodeType":"YulIdentifier","src":"9382:5:124"},{"name":"length","nodeType":"YulIdentifier","src":"9389:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9353:12:124"},"nodeType":"YulFunctionCall","src":"9353:43:124"},"nodeType":"YulExpressionStatement","src":"9353:43:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9420:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"9425:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9416:3:124"},"nodeType":"YulFunctionCall","src":"9416:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"9434:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9412:3:124"},"nodeType":"YulFunctionCall","src":"9412:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"9441:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9405:6:124"},"nodeType":"YulFunctionCall","src":"9405:38:124"},"nodeType":"YulExpressionStatement","src":"9405:38:124"},{"nodeType":"YulAssignment","src":"9452:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9467:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9480:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9476:3:124"},"nodeType":"YulFunctionCall","src":"9476:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"9493:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9472:3:124"},"nodeType":"YulFunctionCall","src":"9472:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9463:3:124"},"nodeType":"YulFunctionCall","src":"9463:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"9563:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9459:3:124"},"nodeType":"YulFunctionCall","src":"9459:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9452:3:124"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"9284:5:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"9291:6:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9299:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9307:3:124","type":""}],"src":"9248:326:124"},{"body":{"nodeType":"YulBlock","src":"9904:603:124","statements":[{"nodeType":"YulVariableDeclaration","src":"9914:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"9924:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9918:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9982:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9997:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10005:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9993:3:124"},"nodeType":"YulFunctionCall","src":"9993:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9975:6:124"},"nodeType":"YulFunctionCall","src":"9975:34:124"},"nodeType":"YulExpressionStatement","src":"9975:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10029:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10040:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10025:3:124"},"nodeType":"YulFunctionCall","src":"10025:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10049:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"10057:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10045:3:124"},"nodeType":"YulFunctionCall","src":"10045:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10018:6:124"},"nodeType":"YulFunctionCall","src":"10018:43:124"},"nodeType":"YulExpressionStatement","src":"10018:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10081:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10092:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10077:3:124"},"nodeType":"YulFunctionCall","src":"10077:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10101:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10109:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10097:3:124"},"nodeType":"YulFunctionCall","src":"10097:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10070:6:124"},"nodeType":"YulFunctionCall","src":"10070:45:124"},"nodeType":"YulExpressionStatement","src":"10070:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10135:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10146:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10131:3:124"},"nodeType":"YulFunctionCall","src":"10131:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"10151:3:124","type":"","value":"192"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10124:6:124"},"nodeType":"YulFunctionCall","src":"10124:31:124"},"nodeType":"YulExpressionStatement","src":"10124:31:124"},{"nodeType":"YulVariableDeclaration","src":"10164:77:124","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10205:6:124"},{"name":"value4","nodeType":"YulIdentifier","src":"10213:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10225:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10236:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10221:3:124"},"nodeType":"YulFunctionCall","src":"10221:19:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10178:26:124"},"nodeType":"YulFunctionCall","src":"10178:63:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10261:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10272:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10257:3:124"},"nodeType":"YulFunctionCall","src":"10257:19:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10282:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10290:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10278:3:124"},"nodeType":"YulFunctionCall","src":"10278:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10250:6:124"},"nodeType":"YulFunctionCall","src":"10250:51:124"},"nodeType":"YulExpressionStatement","src":"10250:51:124"},{"nodeType":"YulVariableDeclaration","src":"10310:64:124","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10351:6:124"},{"name":"value6","nodeType":"YulIdentifier","src":"10359:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10367:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10324:26:124"},"nodeType":"YulFunctionCall","src":"10324:50:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10314:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10405:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:124"},"nodeType":"YulFunctionCall","src":"10390:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10415:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10423:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10411:3:124"},"nodeType":"YulFunctionCall","src":"10411:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10383:6:124"},"nodeType":"YulFunctionCall","src":"10383:51:124"},"nodeType":"YulExpressionStatement","src":"10383:51:124"},{"nodeType":"YulAssignment","src":"10443:58:124","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10478:6:124"},{"name":"value8","nodeType":"YulIdentifier","src":"10486:6:124"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10494:6:124"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10451:26:124"},"nodeType":"YulFunctionCall","src":"10451:50:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10443:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9809:9:124","type":""},{"name":"value8","nodeType":"YulTypedName","src":"9820:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"9828:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"9836:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"9844:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9852:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9860:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9868:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9876:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9884:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9895:4:124","type":""}],"src":"9579:928:124"},{"body":{"nodeType":"YulBlock","src":"10544:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10561:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10564:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10554:6:124"},"nodeType":"YulFunctionCall","src":"10554:88:124"},"nodeType":"YulExpressionStatement","src":"10554:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10658:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10661:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10651:6:124"},"nodeType":"YulFunctionCall","src":"10651:15:124"},"nodeType":"YulExpressionStatement","src":"10651:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10682:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10685:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10675:6:124"},"nodeType":"YulFunctionCall","src":"10675:15:124"},"nodeType":"YulExpressionStatement","src":"10675:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10512:184:124"},{"body":{"nodeType":"YulBlock","src":"10750:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"10772:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10774:16:124"},"nodeType":"YulFunctionCall","src":"10774:18:124"},"nodeType":"YulExpressionStatement","src":"10774:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10766:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10769:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10763:2:124"},"nodeType":"YulFunctionCall","src":"10763:8:124"},"nodeType":"YulIf","src":"10760:34:124"},{"nodeType":"YulAssignment","src":"10803:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10815:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"10818:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10811:3:124"},"nodeType":"YulFunctionCall","src":"10811:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10803:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10732:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"10735:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10741:4:124","type":""}],"src":"10701:125:124"},{"body":{"nodeType":"YulBlock","src":"10912:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"10958:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10967:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10970:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10960:6:124"},"nodeType":"YulFunctionCall","src":"10960:12:124"},"nodeType":"YulExpressionStatement","src":"10960:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10933:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"10942:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10929:3:124"},"nodeType":"YulFunctionCall","src":"10929:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"10954:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10925:3:124"},"nodeType":"YulFunctionCall","src":"10925:32:124"},"nodeType":"YulIf","src":"10922:52:124"},{"nodeType":"YulVariableDeclaration","src":"10983:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11002:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10996:5:124"},"nodeType":"YulFunctionCall","src":"10996:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10987:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11046:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11021:24:124"},"nodeType":"YulFunctionCall","src":"11021:31:124"},"nodeType":"YulExpressionStatement","src":"11021:31:124"},{"nodeType":"YulAssignment","src":"11061:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11071:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11061:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10878:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10889:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10901:6:124","type":""}],"src":"10831:251:124"},{"body":{"nodeType":"YulBlock","src":"11165:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"11211:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11220:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11223:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11213:6:124"},"nodeType":"YulFunctionCall","src":"11213:12:124"},"nodeType":"YulExpressionStatement","src":"11213:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11186:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11195:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11182:3:124"},"nodeType":"YulFunctionCall","src":"11182:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11207:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11178:3:124"},"nodeType":"YulFunctionCall","src":"11178:32:124"},"nodeType":"YulIf","src":"11175:52:124"},{"nodeType":"YulVariableDeclaration","src":"11236:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11255:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11249:5:124"},"nodeType":"YulFunctionCall","src":"11249:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11240:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"11318:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11327:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11330:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11320:6:124"},"nodeType":"YulFunctionCall","src":"11320:12:124"},"nodeType":"YulExpressionStatement","src":"11320:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11287:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11308:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11301:6:124"},"nodeType":"YulFunctionCall","src":"11301:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11294:6:124"},"nodeType":"YulFunctionCall","src":"11294:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11284:2:124"},"nodeType":"YulFunctionCall","src":"11284:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11277:6:124"},"nodeType":"YulFunctionCall","src":"11277:40:124"},"nodeType":"YulIf","src":"11274:60:124"},{"nodeType":"YulAssignment","src":"11343:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"11353:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11343:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11131:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11142:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11154:6:124","type":""}],"src":"11087:277:124"},{"body":{"nodeType":"YulBlock","src":"11417:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"11444:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11446:16:124"},"nodeType":"YulFunctionCall","src":"11446:18:124"},"nodeType":"YulExpressionStatement","src":"11446:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11433:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11440:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11436:3:124"},"nodeType":"YulFunctionCall","src":"11436:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11430:2:124"},"nodeType":"YulFunctionCall","src":"11430:13:124"},"nodeType":"YulIf","src":"11427:39:124"},{"nodeType":"YulAssignment","src":"11475:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11486:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11489:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11482:3:124"},"nodeType":"YulFunctionCall","src":"11482:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11475:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11400:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11403:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11409:3:124","type":""}],"src":"11369:128:124"},{"body":{"nodeType":"YulBlock","src":"11743:373:124","statements":[{"nodeType":"YulAssignment","src":"11753:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11765:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11776:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11761:3:124"},"nodeType":"YulFunctionCall","src":"11761:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11753:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11796:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11807:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11789:6:124"},"nodeType":"YulFunctionCall","src":"11789:25:124"},"nodeType":"YulExpressionStatement","src":"11789:25:124"},{"nodeType":"YulVariableDeclaration","src":"11823:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"11833:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11827:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11895:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11906:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11891:3:124"},"nodeType":"YulFunctionCall","src":"11891:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11915:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11923:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11911:3:124"},"nodeType":"YulFunctionCall","src":"11911:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11884:6:124"},"nodeType":"YulFunctionCall","src":"11884:43:124"},"nodeType":"YulExpressionStatement","src":"11884:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11947:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11958:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11943:3:124"},"nodeType":"YulFunctionCall","src":"11943:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11967:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"11975:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11963:3:124"},"nodeType":"YulFunctionCall","src":"11963:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11936:6:124"},"nodeType":"YulFunctionCall","src":"11936:43:124"},"nodeType":"YulExpressionStatement","src":"11936:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11999:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12010:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11995:3:124"},"nodeType":"YulFunctionCall","src":"11995:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12015:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11988:6:124"},"nodeType":"YulFunctionCall","src":"11988:34:124"},"nodeType":"YulExpressionStatement","src":"11988:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:124"},"nodeType":"YulFunctionCall","src":"12038:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"12059:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12031:6:124"},"nodeType":"YulFunctionCall","src":"12031:35:124"},"nodeType":"YulExpressionStatement","src":"12031:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12086:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12097:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12082:3:124"},"nodeType":"YulFunctionCall","src":"12082:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12103:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12075:6:124"},"nodeType":"YulFunctionCall","src":"12075:35:124"},"nodeType":"YulExpressionStatement","src":"12075:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11672:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11683:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11691:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11699:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11707:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11715:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11723:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11734:4:124","type":""}],"src":"11502:614:124"},{"body":{"nodeType":"YulBlock","src":"12369:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12386:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12391:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12379:6:124"},"nodeType":"YulFunctionCall","src":"12379:79:124"},"nodeType":"YulExpressionStatement","src":"12379:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12478:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12483:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:124"},"nodeType":"YulFunctionCall","src":"12474:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12487:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:124"},"nodeType":"YulFunctionCall","src":"12467:27:124"},"nodeType":"YulExpressionStatement","src":"12467:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12514:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12519:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12510:3:124"},"nodeType":"YulFunctionCall","src":"12510:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"12524:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12503:6:124"},"nodeType":"YulFunctionCall","src":"12503:28:124"},"nodeType":"YulExpressionStatement","src":"12503:28:124"},{"nodeType":"YulAssignment","src":"12540:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12551:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"12556:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12547:3:124"},"nodeType":"YulFunctionCall","src":"12547:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12540:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12337:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12342:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12350:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12361:3:124","type":""}],"src":"12121:444:124"},{"body":{"nodeType":"YulBlock","src":"12751:217:124","statements":[{"nodeType":"YulAssignment","src":"12761:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12773:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12784:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12769:3:124"},"nodeType":"YulFunctionCall","src":"12769:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12761:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12804:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12815:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12797:6:124"},"nodeType":"YulFunctionCall","src":"12797:25:124"},"nodeType":"YulExpressionStatement","src":"12797:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12842:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12853:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12838:3:124"},"nodeType":"YulFunctionCall","src":"12838:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12862:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12870:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12858:3:124"},"nodeType":"YulFunctionCall","src":"12858:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12831:6:124"},"nodeType":"YulFunctionCall","src":"12831:45:124"},"nodeType":"YulExpressionStatement","src":"12831:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12896:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12907:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12892:3:124"},"nodeType":"YulFunctionCall","src":"12892:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12912:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12885:6:124"},"nodeType":"YulFunctionCall","src":"12885:34:124"},"nodeType":"YulExpressionStatement","src":"12885:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12939:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12950:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12935:3:124"},"nodeType":"YulFunctionCall","src":"12935:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12955:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12928:6:124"},"nodeType":"YulFunctionCall","src":"12928:34:124"},"nodeType":"YulExpressionStatement","src":"12928:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12696:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12707:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12715:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12723:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12731:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12742:4:124","type":""}],"src":"12570:398:124"},{"body":{"nodeType":"YulBlock","src":"13186:299:124","statements":[{"nodeType":"YulAssignment","src":"13196:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13208:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13219:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13204:3:124"},"nodeType":"YulFunctionCall","src":"13204:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13196:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13239:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"13250:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13232:6:124"},"nodeType":"YulFunctionCall","src":"13232:25:124"},"nodeType":"YulExpressionStatement","src":"13232:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13288:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13273:3:124"},"nodeType":"YulFunctionCall","src":"13273:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"13293:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13266:6:124"},"nodeType":"YulFunctionCall","src":"13266:34:124"},"nodeType":"YulExpressionStatement","src":"13266:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13320:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13331:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13316:3:124"},"nodeType":"YulFunctionCall","src":"13316:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"13336:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13309:6:124"},"nodeType":"YulFunctionCall","src":"13309:34:124"},"nodeType":"YulExpressionStatement","src":"13309:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13363:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13374:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13359:3:124"},"nodeType":"YulFunctionCall","src":"13359:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"13379:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13352:6:124"},"nodeType":"YulFunctionCall","src":"13352:34:124"},"nodeType":"YulExpressionStatement","src":"13352:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13417:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13402:3:124"},"nodeType":"YulFunctionCall","src":"13402:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13427:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13435:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13423:3:124"},"nodeType":"YulFunctionCall","src":"13423:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13395:6:124"},"nodeType":"YulFunctionCall","src":"13395:84:124"},"nodeType":"YulExpressionStatement","src":"13395:84:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13123:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13134:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13142:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13150:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13158:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13166:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13177:4:124","type":""}],"src":"12973:512:124"},{"body":{"nodeType":"YulBlock","src":"13664:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13681:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13692:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13674:6:124"},"nodeType":"YulFunctionCall","src":"13674:21:124"},"nodeType":"YulExpressionStatement","src":"13674:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13715:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13711:3:124"},"nodeType":"YulFunctionCall","src":"13711:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"13731:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13704:6:124"},"nodeType":"YulFunctionCall","src":"13704:30:124"},"nodeType":"YulExpressionStatement","src":"13704:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13754:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13765:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13750:3:124"},"nodeType":"YulFunctionCall","src":"13750:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"13770:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13743:6:124"},"nodeType":"YulFunctionCall","src":"13743:62:124"},"nodeType":"YulExpressionStatement","src":"13743:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13825:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13836:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13821:3:124"},"nodeType":"YulFunctionCall","src":"13821:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"13841:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13814:6:124"},"nodeType":"YulFunctionCall","src":"13814:37:124"},"nodeType":"YulExpressionStatement","src":"13814:37:124"},{"nodeType":"YulAssignment","src":"13860:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13872:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13883:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13868:3:124"},"nodeType":"YulFunctionCall","src":"13868:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13860:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13641:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13655:4:124","type":""}],"src":"13490:403:124"},{"body":{"nodeType":"YulBlock","src":"14072:171:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14089:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14100:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14082:6:124"},"nodeType":"YulFunctionCall","src":"14082:21:124"},"nodeType":"YulExpressionStatement","src":"14082:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14123:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14134:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14119:3:124"},"nodeType":"YulFunctionCall","src":"14119:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14139:2:124","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14112:6:124"},"nodeType":"YulFunctionCall","src":"14112:30:124"},"nodeType":"YulExpressionStatement","src":"14112:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14162:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14173:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14158:3:124"},"nodeType":"YulFunctionCall","src":"14158:18:124"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"14178:23:124","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14151:6:124"},"nodeType":"YulFunctionCall","src":"14151:51:124"},"nodeType":"YulExpressionStatement","src":"14151:51:124"},{"nodeType":"YulAssignment","src":"14211:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14223:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14234:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14219:3:124"},"nodeType":"YulFunctionCall","src":"14219:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14211:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14049:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14063:4:124","type":""}],"src":"13898:345:124"},{"body":{"nodeType":"YulBlock","src":"14405:162:124","statements":[{"nodeType":"YulAssignment","src":"14415:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14427:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14438:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14423:3:124"},"nodeType":"YulFunctionCall","src":"14423:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14415:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14457:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"14468:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14450:6:124"},"nodeType":"YulFunctionCall","src":"14450:25:124"},"nodeType":"YulExpressionStatement","src":"14450:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14495:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14506:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14491:3:124"},"nodeType":"YulFunctionCall","src":"14491:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14511:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14484:6:124"},"nodeType":"YulFunctionCall","src":"14484:34:124"},"nodeType":"YulExpressionStatement","src":"14484:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14538:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14549:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14534:3:124"},"nodeType":"YulFunctionCall","src":"14534:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"14554:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14527:6:124"},"nodeType":"YulFunctionCall","src":"14527:34:124"},"nodeType":"YulExpressionStatement","src":"14527:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14358:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14369:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14377:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14385:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14396:4:124","type":""}],"src":"14248:319:124"},{"body":{"nodeType":"YulBlock","src":"14813:382:124","statements":[{"nodeType":"YulAssignment","src":"14823:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14835:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14846:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14831:3:124"},"nodeType":"YulFunctionCall","src":"14831:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14823:4:124"}]},{"nodeType":"YulVariableDeclaration","src":"14859:52:124","value":{"kind":"number","nodeType":"YulLiteral","src":"14869:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14863:2:124","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14927:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14942:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"14950:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14938:3:124"},"nodeType":"YulFunctionCall","src":"14938:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14920:6:124"},"nodeType":"YulFunctionCall","src":"14920:34:124"},"nodeType":"YulExpressionStatement","src":"14920:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14974:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14985:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14970:3:124"},"nodeType":"YulFunctionCall","src":"14970:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14994:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15002:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14990:3:124"},"nodeType":"YulFunctionCall","src":"14990:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14963:6:124"},"nodeType":"YulFunctionCall","src":"14963:43:124"},"nodeType":"YulExpressionStatement","src":"14963:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15026:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15037:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15022:3:124"},"nodeType":"YulFunctionCall","src":"15022:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15046:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15054:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15042:3:124"},"nodeType":"YulFunctionCall","src":"15042:15:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15015:6:124"},"nodeType":"YulFunctionCall","src":"15015:43:124"},"nodeType":"YulExpressionStatement","src":"15015:43:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15078:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15089:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15074:3:124"},"nodeType":"YulFunctionCall","src":"15074:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"15094:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15067:6:124"},"nodeType":"YulFunctionCall","src":"15067:34:124"},"nodeType":"YulExpressionStatement","src":"15067:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15121:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15132:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15117:3:124"},"nodeType":"YulFunctionCall","src":"15117:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"15138:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15110:6:124"},"nodeType":"YulFunctionCall","src":"15110:35:124"},"nodeType":"YulExpressionStatement","src":"15110:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15165:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15176:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15161:3:124"},"nodeType":"YulFunctionCall","src":"15161:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"15182:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15154:6:124"},"nodeType":"YulFunctionCall","src":"15154:35:124"},"nodeType":"YulExpressionStatement","src":"15154:35:124"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14742:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14753:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14761:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14769:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14777:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14785:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14793:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14804:4:124","type":""}],"src":"14572:623:124"},{"body":{"nodeType":"YulBlock","src":"15248:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15258:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15268:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15262:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15311:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15326:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15329:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15322:3:124"},"nodeType":"YulFunctionCall","src":"15322:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15315:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15341:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15356:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15359:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15352:3:124"},"nodeType":"YulFunctionCall","src":"15352:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15345:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15396:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15398:16:124"},"nodeType":"YulFunctionCall","src":"15398:18:124"},"nodeType":"YulExpressionStatement","src":"15398:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15377:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15386:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15390:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15382:3:124"},"nodeType":"YulFunctionCall","src":"15382:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15374:2:124"},"nodeType":"YulFunctionCall","src":"15374:21:124"},"nodeType":"YulIf","src":"15371:47:124"},{"nodeType":"YulAssignment","src":"15427:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15438:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15443:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15434:3:124"},"nodeType":"YulFunctionCall","src":"15434:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15427:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15231:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15234:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15240:3:124","type":""}],"src":"15200:253:124"},{"body":{"nodeType":"YulBlock","src":"15615:252:124","statements":[{"nodeType":"YulAssignment","src":"15625:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:124"},"nodeType":"YulFunctionCall","src":"15633:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15625:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15667:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15682:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15690:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15678:3:124"},"nodeType":"YulFunctionCall","src":"15678:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15660:6:124"},"nodeType":"YulFunctionCall","src":"15660:74:124"},"nodeType":"YulExpressionStatement","src":"15660:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15754:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15765:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15750:3:124"},"nodeType":"YulFunctionCall","src":"15750:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"15770:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15743:6:124"},"nodeType":"YulFunctionCall","src":"15743:34:124"},"nodeType":"YulExpressionStatement","src":"15743:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15797:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15808:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15793:3:124"},"nodeType":"YulFunctionCall","src":"15793:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15817:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15825:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15813:3:124"},"nodeType":"YulFunctionCall","src":"15813:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15786:6:124"},"nodeType":"YulFunctionCall","src":"15786:75:124"},"nodeType":"YulExpressionStatement","src":"15786:75:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15568:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15579:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15587:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15595:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15606:4:124","type":""}],"src":"15458:409:124"},{"body":{"nodeType":"YulBlock","src":"15921:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:124"},"nodeType":"YulFunctionCall","src":"15995:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:124"},"nodeType":"YulFunctionCall","src":"16025:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16060:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16062:16:124"},"nodeType":"YulFunctionCall","src":"16062:18:124"},"nodeType":"YulExpressionStatement","src":"16062:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16055:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16047:2:124"},"nodeType":"YulFunctionCall","src":"16047:12:124"},"nodeType":"YulIf","src":"16044:38:124"},{"nodeType":"YulAssignment","src":"16091:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16103:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16108:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16099:3:124"},"nodeType":"YulFunctionCall","src":"16099:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16091:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15903:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15906:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15912:4:124","type":""}],"src":"15872:246:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_addresst_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        if gt(calldataload(add(headStart, 192)), _1) { revert(0, 0) }\n        let value7_1, value8_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 192))), dataEnd)\n        value7 := value7_1\n        value8 := value8_1\n        if gt(calldataload(add(headStart, 224)), _1) { revert(0, 0) }\n        let value9_1, value10_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 224))), dataEnd)\n        value9 := value9_1\n        value10 := value10_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), 192)\n        let tail_1 := abi_encode_string_calldata(value3, value4, add(headStart, 192))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value5, value6, tail_1)\n        mstore(add(headStart, 160), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value7, value8, tail_2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"30695":[{"length":32,"start":8020}],"30877":[{"length":32,"start":3139},{"length":32,"start":5061},{"length":32,"start":6735}],"30880":[{"length":32,"start":1002},{"length":32,"start":1867},{"length":32,"start":2224},{"length":32,"start":2735},{"length":32,"start":3876},{"length":32,"start":4081},{"length":32,"start":4275},{"length":32,"start":4502},{"length":32,"start":4630},{"length":32,"start":4926},{"length":32,"start":6544},{"length":32,"start":7264},{"length":32,"start":9737},{"length":32,"start":10112}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102415760003560e01c806375d2641311610145578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e0753986146105ba578063e655dbd814610616578063f866c3191461062957600080fd5b8063d7020d0a14610561578063dd62ed3e1461057457600080fd5b8063b1bf962d14610520578063b3f1c93d14610528578063cea9d26f1461053b578063d505accf1461054e57600080fd5b806395d89b4111610114578063a9059cbb116100f9578063a9059cbb146104d1578063ae167335146104e4578063b16a19de1461050257600080fd5b806395d89b41146104b6578063a457c2d7146104be57600080fd5b806375d264131461043157806378160376146104545780637df5bd3b146104905780637ecebe00146104a357600080fd5b80632f114618116101d857806339509351116101a75780636fd976761161018c5780636fd97676146103bf57806370a08231146103d25780637535d246146103e557600080fd5b806339509351146103995780634efecaa5146103ac57600080fd5b80632f1146181461034257806330adf81f14610355578063313ce5671461037c5780633644e5151461039157600080fd5b806318160ddd1161021457806318160ddd146102ff578063183fb413146103075780631da24f3e1461031c57806323b872dd1461032f57600080fd5b806306fdde0314610246578063095ea7b3146102645780630afbcdc9146102875780630bd7ad3b146102e9575b600080fd5b61024e61063c565b60405161025b91906132c7565b60405180910390f35b610277610272366004613316565b6106ce565b604051901515815260200161025b565b6102d4610295366004613342565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b6040805192835260208301919091520161025b565b6102f1600181565b60405190815260200161025b565b6102f16106e4565b61031a6103153660046133b9565b6107c3565b005b6102f161032a366004613342565b610b80565b61027761033d3660046134ad565b610bbf565b61031a610350366004613342565b610c3f565b6102f17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff909116815260200161025b565b6102f1610e9a565b6102776103a7366004613316565b610ea9565b61031a6103ba366004613316565b610eed565b61031a6103cd3660046134ad565b610fba565b6102f16103e0366004613342565b611064565b61040c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161025b565b603954610100900473ffffffffffffffffffffffffffffffffffffffff1661040c565b61024e6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61031a61049e3660046134ee565b61115f565b6102f16104b1366004613342565b611258565b61024e611283565b6102776104cc366004613316565b611292565b6102776104df366004613316565b6112d6565b603c5473ffffffffffffffffffffffffffffffffffffffff1661040c565b603d5473ffffffffffffffffffffffffffffffffffffffff1661040c565b6102f16112f9565b610277610536366004613510565b611304565b61031a6105493660046134ad565b6113c1565b61031a61055c366004613556565b6115ff565b61031a61056f366004613510565b611959565b6102f16105823660046135c4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102f16105c8366004613342565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61031a610624366004613342565b611a4b565b61031a6106373660046134ad565b611c29565b60606037805461064b906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610677906135fd565b80156106c45780601f10610699576101008083540402835291602001916106c4565b820191906000526020600020905b8154815290600101906020018083116106a757829003601f168201915b5050505050905090565b60006106db338484611cdb565b50600192915050565b6000806106f060365490565b9050806106ff57600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526107bd917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b6919061364b565b8290611d49565b91505090565b6001805460ff16806107d45750303b155b806107e0575060005481115b610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff161580156108ae57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b506109ab88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da092505050565b6109ea86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611db392505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610aa7611dc6565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b3a999897969594939291906136ad565b60405180910390a38015610b7157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610bcb83611e8b565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610c2991879190610c24906fffffffffffffffffffffffffffffffff861690613757565b611cdb565b610c34858583611f31565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd0919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d61919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d546040517f5c19a95c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015290911690635c19a95c90602401600060405180830381600087803b158015610e3d57600080fd5b505af1158015610e51573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff851692507fc7a5523bfd09724fd56950e708e523ad6a61ab165b8e997a31d42357a77f0e0f9150600090a25050565b6000610ea4611f50565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106db918590610c249086906137ad565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d54610fb69073ffffffffffffffffffffffffffffffffffffffff168383611f89565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610bb9917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611120919061364b565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611d49565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b508161120d575050565b603c54611253907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16848461205c565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610bb9565b60606038805461064b906135fd565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106db918590610c24908690613757565b6000806112e283611e8b565b90506112ef338583611f31565b5060019392505050565b6000610ea460365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b506113b88585858561205c565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611452919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156114bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e3919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff868116911614156115dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061105e73ffffffffffffffffffffffffffffffffffffffff85168484611f89565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8816611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50834211156040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a602052604081205490611724610e9a565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e001604051602081830303815290604052805190602001206040516020016117e59291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561186b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061191d8260016137ad565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a602052604090205561194e898989611cdb565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50611a0a8484848461229d565b73ffffffffffffffffffffffffffffffffffffffff8316301461105e57603d5461105e9073ffffffffffffffffffffffffffffffffffffffff168484611f89565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adc919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061125383838360006125bb565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611d7e57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610fb69060379060208401906131cc565b8051610fb69060389060208401906131cc565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611df1612837565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610868565b5090565b6112538383836fffffffffffffffffffffffffffffffff1660016125bb565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611f815750603b5490565b610ea4611dc6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611fec573d6000803e3d6000fd5b50611ff684612841565b61105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610868565b600080612069848461290d565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816120d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612135918491700100000000000000000000000000000000900416611d49565b61213f8387611d49565b6121499190613757565b905061215485611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121bc876121b785611e8b565b61294c565b60006121c882886137ad565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161222a91815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006122a9838361290d565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612375918491700100000000000000000000000000000000900416611d49565b61237f8386611d49565b6123899190613757565b905061239484611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556123fc876123f785611e8b565b612ac8565b848111156124db5760006124108683613757565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161247291815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a3506125b2565b60006124e78287613757565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161254991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015612652573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612676919061364b565b905060006126bc826111598973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b90506000612702836111598973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b905061271088888886612b2c565b84156127dd576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b1580156127c457600080fd5b505af11580156127d8573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda8666612823898761290d565b6040805191825260208201889052016125a8565b6060610ea461063c565b6000612881565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156128c057602081146128fa576128bb7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f612848565b612907565b823b6128f1576128f17f475076323a206e6f74206120636f6e74726163740000000000000000000000006014612848565b60019150612907565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561293157600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60365461296b6fffffffffffffffffffffffffffffffff8316826137ad565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166129b083826137c5565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612ac1576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015612aad57600080fd5b505af115801561194e573d6000803e3d6000fd5b5050505050565b603654612ae76fffffffffffffffffffffffffffffffff831682613757565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166129b083826137f9565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612b88918491700100000000000000000000000000000000900416611d49565b612b928385611d49565b612b9c9190613757565b90506000612bde8673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205491925090612c3990839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611d49565b612c438387611d49565b612c4d9190613757565b9050612c5885611e8b565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612cb785611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612d298888612d24612d1f8a8a61290d565b611e8b565b612f21565b8215612dd85760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612e145750600081115b15612ec25760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516125a891815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612f6382826137f9565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612fd783826137c5565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff939093169290921790915560395461010090041680156131c4576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b1580156130d757600080fd5b505af11580156130eb573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146125b2576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b1580156131aa57600080fd5b505af11580156131be573d6000803e3d6000fd5b50505050505b505050505050565b8280546131d8906135fd565b90600052602060002090601f0160209004810192826131fa5760008555613240565b82601f1061321357805160ff1916838001178555613240565b82800160010185558215613240579182015b82811115613240578251825591602001919060010190613225565b50611f2d9291505b80821115611f2d5760008155600101613248565b6000815180845260005b8181101561328257602081850181015186830182015201613266565b81811115613294576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006132da602083018461325c565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461330357600080fd5b50565b8035613311816132e1565b919050565b6000806040838503121561332957600080fd5b8235613334816132e1565b946020939093013593505050565b60006020828403121561335457600080fd5b81356132da816132e1565b803560ff8116811461331157600080fd5b60008083601f84011261338257600080fd5b50813567ffffffffffffffff81111561339a57600080fd5b6020830191508360208285010111156133b257600080fd5b9250929050565b60008060008060008060008060008060006101008c8e0312156133db57600080fd5b6133e48c613306565b9a506133f260208d01613306565b995061340060408d01613306565b985061340e60608d01613306565b975061341c60808d0161335f565b965067ffffffffffffffff8060a08e0135111561343857600080fd5b6134488e60a08f01358f01613370565b909750955060c08d013581101561345e57600080fd5b61346e8e60c08f01358f01613370565b909550935060e08d013581101561348457600080fd5b506134958d60e08e01358e01613370565b81935080925050509295989b509295989b9093969950565b6000806000606084860312156134c257600080fd5b83356134cd816132e1565b925060208401356134dd816132e1565b929592945050506040919091013590565b6000806040838503121561350157600080fd5b50508035926020909101359150565b6000806000806080858703121561352657600080fd5b8435613531816132e1565b93506020850135613541816132e1565b93969395505050506040820135916060013590565b600080600080600080600060e0888a03121561357157600080fd5b873561357c816132e1565b9650602088013561358c816132e1565b955060408801359450606088013593506135a86080890161335f565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156135d757600080fd5b82356135e2816132e1565b915060208301356135f2816132e1565b809150509250929050565b600181811c9082168061361157607f821691505b60208210811415612907577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561365d57600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c060608301526136f060c08301888a613664565b8281036080840152613703818789613664565b905082810360a0840152613718818587613664565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561376957613769613728565b500390565b60006020828403121561378057600080fd5b81516132da816132e1565b60006020828403121561379d57600080fd5b815180151581146132da57600080fd5b600082198211156137c0576137c0613728565b500190565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156137f0576137f0613728565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561382257613822613728565b03939250505056fea26469706673582212203822603964a4bb9d03aa8b8dee583f3aaf86bdf3d5528dac1f72310fbdfd1b7c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x241 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x75D26413 GT PUSH2 0x145 JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x616 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x561 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x520 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x528 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4E4 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x75D26413 EQ PUSH2 0x431 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F114618 GT PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x39509351 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x6FD97676 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x3AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F114618 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24E PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x25B SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x277 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x6CE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2D4 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x6E4 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0x33B9 JUMP JUMPDEST PUSH2 0x7C3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2F1 PUSH2 0x32A CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xB80 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x33D CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x31A PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x2F1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0xE9A JUMP JUMPDEST PUSH2 0x277 PUSH2 0x3A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0xEA9 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x3BA CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0xEED JUMP JUMPDEST PUSH2 0x31A PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1064 JUMP JUMPDEST PUSH2 0x40C PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH2 0x24E PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x34EE JUMP JUMPDEST PUSH2 0x115F JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1258 JUMP JUMPDEST PUSH2 0x24E PUSH2 0x1283 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x4CC CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x1292 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x4DF CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x12D6 JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x12F9 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x536 CALLDATASIZE PUSH1 0x4 PUSH2 0x3510 JUMP JUMPDEST PUSH2 0x1304 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x549 CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0x13C1 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x55C CALLDATASIZE PUSH1 0x4 PUSH2 0x3556 JUMP JUMPDEST PUSH2 0x15FF JUMP JUMPDEST PUSH2 0x31A PUSH2 0x56F CALLDATASIZE PUSH1 0x4 PUSH2 0x3510 JUMP JUMPDEST PUSH2 0x1959 JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x582 CALLDATASIZE PUSH1 0x4 PUSH2 0x35C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x5C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x624 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1A4B JUMP JUMPDEST PUSH2 0x31A PUSH2 0x637 CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0x1C29 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x64B SWAP1 PUSH2 0x35FD JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x677 SWAP1 PUSH2 0x35FD JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x699 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DB CALLER DUP5 DUP5 PUSH2 0x1CDB JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6F0 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6FF JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x7BD SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x792 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7B6 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1D49 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x7D4 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7E0 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x871 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x8AE JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x96B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x9AB DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DA0 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9EA DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DB3 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xAA7 PUSH2 0x1DC6 JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB3A SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x36AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB71 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBCB DUP4 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xC29 SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xC24 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x3757 JUMP JUMPDEST PUSH2 0x1CDB JUMP JUMPDEST PUSH2 0xC34 DUP6 DUP6 DUP4 PUSH2 0x1F31 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCD0 SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD61 SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xDCF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x5C19A95C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x5C19A95C SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP3 POP PUSH32 0xC7A5523BFD09724FD56950E708E523AD6A61AB165B8E997A31D42357A77F0E0F SWAP2 POP PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEA4 PUSH2 0x1F50 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6DB SWAP2 DUP6 SWAP1 PUSH2 0xC24 SWAP1 DUP7 SWAP1 PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xFB6 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1F89 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x105E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xBB9 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1120 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1203 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP DUP2 PUSH2 0x120D JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0x1253 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x205C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xBB9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x64B SWAP1 PUSH2 0x35FD JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x6DB SWAP2 DUP6 SWAP1 PUSH2 0xC24 SWAP1 DUP7 SWAP1 PUSH2 0x3757 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12E2 DUP4 PUSH2 0x1E8B JUMP JUMPDEST SWAP1 POP PUSH2 0x12EF CALLER DUP6 DUP4 PUSH2 0x1F31 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEA4 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x13AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x13B8 DUP6 DUP6 DUP6 DUP6 PUSH2 0x205C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x142E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1452 SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14E3 SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1551 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x15DD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x105E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x1681 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x16F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x1724 PUSH2 0xE9A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17E5 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x186B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1911 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x191D DUP3 PUSH1 0x1 PUSH2 0x37AD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x194E DUP10 DUP10 DUP10 PUSH2 0x1CDB JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x19FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x1A0A DUP5 DUP5 DUP5 DUP5 PUSH2 0x229D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0x105E JUMPI PUSH1 0x3D SLOAD PUSH2 0x105E SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1ADC SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B6D SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1BDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1CCD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x1253 DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x25BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFB6 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x31CC JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFB6 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x31CC JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1DF1 PUSH2 0x2837 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1F2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x868 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1253 DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x25BB JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1F81 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xEA4 PUSH2 0x1DC6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1FEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1FF6 DUP5 PUSH2 0x2841 JUMP JUMPDEST PUSH2 0x105E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2069 DUP5 DUP5 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x20D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2135 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x213F DUP4 DUP8 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2149 SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2154 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x21BC DUP8 PUSH2 0x21B7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x294C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21C8 DUP3 DUP9 PUSH2 0x37AD JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x222A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22A9 DUP4 DUP4 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x2318 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2375 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x237F DUP4 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2389 SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2394 DUP5 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x23FC DUP8 PUSH2 0x23F7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x2AC8 JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x24DB JUMPI PUSH1 0x0 PUSH2 0x2410 DUP7 DUP4 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2472 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x25B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24E7 DUP3 DUP8 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2549 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2652 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2676 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x26BC DUP3 PUSH2 0x1159 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2702 DUP4 PUSH2 0x1159 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2710 DUP9 DUP9 DUP9 DUP7 PUSH2 0x2B2C JUMP JUMPDEST DUP5 ISZERO PUSH2 0x27DD JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x2823 DUP10 DUP8 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x25A8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xEA4 PUSH2 0x63C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2881 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x28C0 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x28FA JUMPI PUSH2 0x28BB PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x2848 JUMP JUMPDEST PUSH2 0x2907 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x28F1 JUMPI PUSH2 0x28F1 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x2848 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2907 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x296B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29B0 DUP4 DUP3 PUSH2 0x37C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2AC1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x194E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2AE7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x3757 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29B0 DUP4 DUP3 PUSH2 0x37F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2B88 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2B92 DUP4 DUP6 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2B9C SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2BDE DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2C39 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2C43 DUP4 DUP8 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2C4D SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C58 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2CB7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2D29 DUP9 DUP9 PUSH2 0x2D24 PUSH2 0x2D1F DUP11 DUP11 PUSH2 0x290D JUMP JUMPDEST PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x2F21 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2DD8 JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2E14 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2EC2 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x25A8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2F63 DUP3 DUP3 PUSH2 0x37F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2FD7 DUP4 DUP3 PUSH2 0x37C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x31C4 JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x25B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x31BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x31D8 SWAP1 PUSH2 0x35FD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x31FA JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3240 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3213 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3240 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3240 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3240 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3225 JUMP JUMPDEST POP PUSH2 0x1F2D SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1F2D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3248 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3282 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x3266 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3294 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x32DA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x325C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3311 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3334 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x32DA DUP2 PUSH2 0x32E1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x339A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x33B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x33DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x33E4 DUP13 PUSH2 0x3306 JUMP JUMPDEST SWAP11 POP PUSH2 0x33F2 PUSH1 0x20 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP10 POP PUSH2 0x3400 PUSH1 0x40 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP9 POP PUSH2 0x340E PUSH1 0x60 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP8 POP PUSH2 0x341C PUSH1 0x80 DUP14 ADD PUSH2 0x335F JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x3438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3448 DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3370 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x345E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x346E DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3370 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x3484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3495 DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3370 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x34C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x34CD DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x34DD DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3531 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3541 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x357C DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x358C DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x35A8 PUSH1 0x80 DUP10 ADD PUSH2 0x335F JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x35E2 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x35F2 DUP2 PUSH2 0x32E1 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x3611 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2907 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x365D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x36F0 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x3664 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x3703 DUP2 DUP8 DUP10 PUSH2 0x3664 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3718 DUP2 DUP6 DUP8 PUSH2 0x3664 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3769 JUMPI PUSH2 0x3769 PUSH2 0x3728 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3780 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x32DA DUP2 PUSH2 0x32E1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x379D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x32DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x37C0 JUMPI PUSH2 0x37C0 PUSH2 0x3728 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x37F0 JUMPI PUSH2 0x37F0 PUSH2 0x3728 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3822 JUMPI PUSH2 0x3822 PUSH2 0x3728 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE 0x22 PUSH1 0x39 PUSH5 0xA4BB9D03AA DUP12 DUP14 0xEE PC EXTCODEHASH GASPRICE 0xAF DUP7 0xBD RETURN 0xD5 MSTORE DUP14 0xAC 0x1F PUSH19 0x310FBDFD1B7C64736F6C634300080A00330000 ","sourceMap":"464:734:116:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4534:158;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:124;;1551:22;1533:41;;1521:2;1506:18;4534:158:121;1393:187:124;1386:173:123;;;;;;:::i;:::-;3518:19:121;;1479:7:123;3518:19:121;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:123;;;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:123;1837:248:124;1450:45:115;;1492:3;1450:45;;;;;2236:25:124;;;2224:2;2209:18;1450:45:115;2090:177:124;4276:307:115;;;:::i;1990:850::-;;;;;;:::i;:::-;;:::i;:::-;;1225:119:123;;;;;;:::i;:::-;;:::i;4721:327:121:-;;;;;;:::i;:::-;;:::i;1017:179:116:-;;;;;;:::i;:::-;;:::i;1304:141:115:-;;1350:95;1304:141;;3178:86:121;3250:9;;3178:86;;3250:9;;;;4990:36:124;;4978:2;4963:18;3178:86:121;4848:184:124;7503:130:115;;;:::i;5296:204:121:-;;;;;;:::i;:::-;;:::i;4888:161:115:-;;;;;;:::i;:::-;;:::i;5079:163::-;;;;;;:::i;:::-;;:::i;4035:212::-;;;;;;:::i;:::-;;:::i;2408:27:121:-;;;;;;;;5227:42:124;5215:55;;;5197:74;;5185:2;5170:18;2408:27:121;5037:240:124;3691:132:121;3797:21;;;;;;;3691:132;;192:50:120;;232:10;;;;;;;;;;;;;;;;;192:50;;3484:196:115;;;;;;:::i;:::-;;:::i;7782:128::-;;;;;;:::i;:::-;;:::i;3051:90:121:-;;;:::i;5758:226::-;;;;;;:::i;:::-;;:::i;4106:213::-;;;;;;:::i;:::-;;:::i;4613:104:115:-;4703:9;;;;4613:104;;4747:111;4837:16;;;;4747:111;;1601:113:123;;;:::i;2870:215:115:-;;;;;;:::i;:::-;;:::i;8069:223::-;;;;;;:::i;:::-;;:::i;5272:755::-;;;;;;:::i;:::-;;:::i;3115:339::-;;;;;;:::i;:::-;;:::i;4348:157:121:-;;;;;;:::i;:::-;4473:18;;;;4451:7;4473:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4348:157;1756:138:123;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:121;;;;;;:::i;:::-;;:::i;3710:296:115:-;;;;;;:::i;:::-;;:::i;2930:84:121:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4534:158::-;4619:4;4631:39;678:10:4;4654:7:121;4663:6;4631:8;:39::i;:::-;-1:-1:-1;4683:4:121;4534:158;;;;:::o;4276:307:115:-;4364:7;4379:27;4409:19;3376:12:121;;;3293:100;4409:19:115;4379:49;-1:-1:-1;4439:24:115;4435:53;;4480:1;4473:8;;;4276:307;:::o;4435:53::-;4560:16;;4528:49;;;;;:31;4560:16;;;4528:49;;;5197:74:124;4501:77:115;;4528:4;:31;;;;5170:18:124;;4528:49:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:19;;:26;:77::i;:::-;4494:84;;;4276:307;:::o;1990:850::-;1492:3;1217:12:87;;;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;9035:2:124;1202:146:87;;;9017:21:124;9074:2;9054:18;;;9047:30;9113:34;9093:18;;;9086:62;9184:16;9164:18;;;9157:44;9218:19;;1202:146:87;;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2334:4:115::1;2314:24;;:16;:24;;;2340:34;;;;;;;;;;;;;;;;::::0;2306:69:::1;;;;;;;;;;;;;;:::i;:::-;;2381:20;2390:10;;2381:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2381:8:115::1;::::0;-1:-1:-1;;;2381:20:115:i:1;:::-;2407:24;2418:12;;2407:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2407:10:115::1;::::0;-1:-1:-1;;;2407:24:115:i:1;:::-;7979:9:121::0;:23;;;;;;;;;;2472:9:115::1;:20:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;2498:16:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;2538:21:::1;:44:::0;;;;::::1;2472:20;2538:44;::::0;;;::::1;::::0;;;::::1;::::0;;2608:27:::1;:25;:27::i;:::-;2589:16;:46;;;;2697:4;2647:188;;2666:15;2647:188;;;2710:8;2734:20;2763:14;2785:10;;2803:12;;2823:6;;2647:188;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1990:850:115;;;;;;;;;;;:::o;1225:119:123:-;3518:19:121;;;1296:7:123;3518:19:121;;;:10;:19;;;;;:27;;;1318:21:123;1311:28;1225:119;-1:-1:-1;;1225:119:123:o;4721:327:121:-;4845:4;4857:18;4878;:6;:16;:18::i;:::-;4933:19;;;;;;;:11;:19;;;;;;;;678:10:4;4933:33:121;;;;;;;;;4857:39;;-1:-1:-1;4902:78:121;;4911:6;;678:10:4;4933:46:121;;;;;;;:::i;:::-;4902:8;:78::i;:::-;4986:40;4996:6;5004:9;5015:10;4986:9;:40::i;:::-;-1:-1:-1;5039:4:121;;4721:327;-1:-1:-1;;;;4721:327:121:o;1017:179:116:-;1211:22:121;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1112:16:116::1;::::0;1095:54:::1;::::0;;;;1112:16:::1;5215:55:124::0;;;1095:54:116::1;::::0;::::1;5197:74:124::0;1112:16:116;;::::1;::::0;1095:43:::1;::::0;5170:18:124;;1095:54:116::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1160:31:116::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;1160:31:116::1;::::0;-1:-1:-1;1160:31:116;;::::1;1205:169:121::0;1017:179:116;:::o;7503:130:115:-;7582:7;7604:24;:22;:24::i;:::-;7597:31;;7503:130;:::o;5296:204:121:-;678:10:4;5386:4:121;5430:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5386:4;;5398:80;;5421:7;;5430:47;;5467:10;;5430:47;:::i;4888:161:115:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4998:16:115::1;::::0;4991:53:::1;::::0;4998:16:::1;;5029:6:::0;5037;4991:37:::1;:53::i;:::-;4888:161:::0;;:::o;5079:163::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;5079:163:115;;;:::o;4035:212::-;4224:16;;4192:49;;;;;:31;4224:16;;;4192:49;;;5197:74:124;4141:7:115;;4163:79;;4192:4;:31;;;;;;5170:18:124;;4192:49:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3518:19:121;;;3496:7;3518:19;;;:10;:19;;;;;:27;;;4163:21:115;:28;;:79::i;3484:196::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3584:11:115;3580:38:::1;;4888:161:::0;;:::o;3580:38::-:1;3650:9;::::0;3623:52:::1;::::0;3643:4:::1;::::0;3650:9:::1;;3661:6:::0;3669:5;3623:11:::1;:52::i;:::-;;3484:196:::0;;:::o;7782:128::-;1342:14:120;;;7864:7:115;1342:14:120;;;:7;:14;;;;;;7886:19:115;1260:101:120;3051:90:121;3101:13;3129:7;3122:14;;;;;:::i;5758:226::-;678:10:4;5865:4:121;5909:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5865:4;;5877:85;;5900:7;;5909:52;;5946:15;;5909:52;:::i;4106:213::-;4194:4;4206:18;4227;:6;:16;:18::i;:::-;4206:39;-1:-1:-1;4251:46:121;678:10:4;4275:9:121;4286:10;4251:9;:46::i;:::-;-1:-1:-1;4310:4:121;;4106:213;-1:-1:-1;;;4106:213:121:o;1601:113:123:-;1668:7;1690:19;3376:12:121;;;3293:100;2870:215:115;1519:26:121;;;;;;;;;;;;;;;;;3015:4:115;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3034:46:115::1;3046:6;3054:10;3066:6;3074:5;3034:11;:46::i;:::-;3027:53:::0;2870:215;-1:-1:-1;;;;;2870:215:115:o;8069:223::-;1211:22:121;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8189:16:115::1;::::0;8207:35:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;8189:16:::1;8180:25:::0;;::::1;8189:16:::0;::::1;8180:25;;8172:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8249:38:115::1;:26;::::0;::::1;8276:2:::0;8280:6;8249:26:::1;:38::i;5272:755::-:0;5469:29;;;;;;;;;;;;;;;;;5448:19;;;5440:59;;;;;;;;;;;;;:::i;:::-;;5563:8;5544:15;:27;;5573:25;;;;;;;;;;;;;;;;;5536:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5633:14:115;;;5605:25;5633:14;;;:7;:14;;;;;;;5733:18;:16;:18::i;:::-;5771:79;;;1350:95;5771:79;;;11789:25:124;11833:42;11911:15;;;11891:18;;;11884:43;;;;11963:15;;;11943:18;;;11936:43;11995:18;;;11988:34;;;12038:19;;;12031:35;;;12082:19;;;12075:35;;;11761:19;;5771:79:115;;;;;;;;;;;;5761:90;;;;;;5687:172;;;;;;;;12391:66:124;12379:79;;12483:1;12474:11;;12467:27;;;;12519:2;12510:12;;12503:28;12556:2;12547:12;;12121:444;5687:172:115;;;;;;;;;;;;;;5670:195;;5687:172;5670:195;;;;5888:26;;;;;;;;;12797:25:124;;;12870:4;12858:17;;12838:18;;;12831:45;;;;12892:18;;;12885:34;;;12935:18;;;12928:34;;;5670:195:115;-1:-1:-1;5888:26:115;;12769:19:124;;5888:26:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35;;:5;:35;;;5916:24;;;;;;;;;;;;;;;;;5871:70;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5964:21:115;:17;5984:1;5964:21;:::i;:::-;5947:14;;;;;;;:7;:14;;;;;:38;5991:31;5955:5;6007:7;6016:5;5991:8;:31::i;:::-;5434:593;;5272:755;;;;;;;:::o;3115:339::-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3265:54:115::1;3277:4;3283:20;3305:6;3313:5;3265:11;:54::i;:::-;3329:37;::::0;::::1;3361:4;3329:37;3325:125;;3383:16;::::0;3376:67:::1;::::0;3383:16:::1;;3414:20:::0;3436:6;3376:37:::1;:67::i;3938:139:121:-:0;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;5170:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:121::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3710:296:115:-;1519:26:121;;;;;;;;;;;;;;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3968:33:115::1;3978:4;3984:2;3988:5;3995;3968:9;:33::i;7235:173:121:-:0;7324:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7371:32;;2236:25:124;;;7371:32:121;;2209:18:124;7371:32:121;;;;;;;7235:173;;;:::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;7513:76:121:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;1475:298:120:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13232:25:124;;;;13273:18;;;13266:34;;;;1674:26:120;13316:18:124;;;13309:34;1712:13:120;13359:18:124;;;13352:34;1745:4:120;13402:19:124;;;13395:84;13204:19;;1582:178:120;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;13692:2:124;1635:78:12;;;13674:21:124;13731:2;13711:18;;;13704:30;13770:34;13750:18;;;13743:62;13841:9;13821:18;;;13814:37;13868:19;;1635:78:12;13490:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;7213:131:115:-;7306:33;7316:4;7322:2;7326:6;7306:33;;7334:4;7306:9;:33::i;867:185:120:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:120;;;867:185::o;939:69::-;1020:27;:25;:27::i;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;14100:2:124;1031:62:1;;;14082:21:124;14139:2;14119:18;;;14112:30;14178:23;14158:18;;;14151:51;14219:18;;1031:62:1;13898:345:124;2295:763:123;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:123;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;2543:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;2543:21:123;2662:59;;3518:27:121;;2683:37:123;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;2236:25:124;;2224:2;2209:18;;2090:177;2900:46:123;;;;;;;;2957:62;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;2957:62:123;;;;;;;;;;;14438:2:124;14423:18;2957:62:123;;;;;;;-1:-1:-1;;3034:18:123;;2295:763;-1:-1:-1;;;;;;2295:763:123:o;3512:888::-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:123;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;3719:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;3719:21:123;3832:53;;3518:27:121;;3853:31:123;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;2236:25:124;;2224:2;2209:18;;2090:177;4092:40:123;;;;;;;;4145:54;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4145:54:123;;;;;;;;14438:2:124;14423:18;4145:54:123;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;2236:25:124;;2224:2;2209:18;;2090:177;4280:40:123;;;;;;;;4333:56;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4333:56:123;;;;;;;;;;;14438:2:124;14423:18;4333:56:123;;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;6387:592:115:-;6512:16;;6551:48;;;;;6512:16;;;;6551:48;;;5197:74:124;;;6512:16:115;6486:23;;6551:4;:31;;;;;;5170:18:124;;6551:48:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6535:64;;6606:25;6634:35;6663:5;6634:21;6650:4;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6634:35:115;6606:63;;6675:23;6701:33;6728:5;6701:19;6717:2;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6701:33:115;6675:59;;6741:40;6757:4;6763:2;6767:6;6775:5;6741:15;:40::i;:::-;6792:8;6788:121;;;6810:92;;;;;:21;14938:15:124;;;6810:92:115;;;14920:34:124;14990:15;;;14970:18;;;14963:43;15042:15;;;15022:18;;;15015:43;15074:18;;;15067:34;;;15117:19;;;15110:35;;;15161:19;;;15154:35;;;6810:4:115;:21;;;;14831:19:124;;6810:92:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:121;6920:54;;;;;;;;6946:20;:6;6960:5;6946:13;:20::i;:::-;6920:54;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;1984:18;6920:54:115;1837:248:124;7943:96:115;8000:13;8028:6;:4;:6::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1069:519:122:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15678:55:124;;;1495:82:122;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;1495:38:122;;;;;15633:18:124;;1495:82:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;4767:1203:123:-;3518:19:121;;;4867:27:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;4867::123;5000:61;;3518:27:121;;5027:33:123;;;;5000:26;:61::i;:::-;4958:33;:19;4985:5;4958:26;:33::i;:::-;:103;;;;:::i;:::-;4926:135;;5068:30;5101:26;5117:9;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;5101:26:123;5243:21;;;5133:32;5243:21;;;:10;:21;;;;;:36;5068:59;;-1:-1:-1;5133:32:123;5213:67;;5068:59;;5243:36;;;;;5213:29;:67::i;:::-;5168:36;:22;5198:5;5168:29;:36::i;:::-;:112;;;;:::i;:::-;5133:147;;5323:17;:5;:15;:17::i;:::-;5287:18;;;;;;;:10;:18;;;;;:53;;;;;;;;;;;;;;;;5385:17;:5;:15;:17::i;:::-;5346:21;;;;;;;:10;:21;;;;;:56;;;;;;;;;;;;;;;;5409:68;5425:6;5357:9;5444:32;:20;:6;5458:5;5444:13;:20::i;:::-;:30;:32::i;:::-;5409:15;:68::i;:::-;5488:25;;5484:194;;5528:51;;2236:25:124;;;5528:51:123;;;;5545:1;;5528:51;;2224:2:124;2209:18;5528:51:123;;;;;;;5592:79;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5592:79:123;;;;;;678:10:4;;5592:79:123;;;;;14438:2:124;5592:79:123;;;5484:194;5698:9;5688:19;;:6;:19;;;;:51;;;;;5738:1;5711:24;:28;5688:51;5684:235;;;5754:57;;2236:25:124;;;5754:57:123;;;;5771:1;;5754:57;;2224:2:124;2209:18;5754:57:123;;;;;;;5824:88;;;14450:25:124;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5824:88:123;;;;;;678:10:4;;5824:88:123;;;;;14438:2:124;5824:88:123;;;5684:235;5947:9;5930:35;;5939:6;5930:35;;;5958:6;5930:35;;;;2236:25:124;;2224:2;2209:18;;2090:177;6215:772:121;6335:18;;;6308:24;6335:18;;;:10;:18;;;;;:26;;;6396:25;6415:6;6335:26;6396:25;:::i;:::-;6367:18;;;;;;;;:10;:18;;;;;;:54;;;;;;;;;;;6457:21;;;;;;:29;;6524:28;6546:6;6457:29;6524:28;:::i;:::-;6492:21;;;;;;;;:10;:21;;;;;:60;;;;;;;;;;;;;;;;6613:21;;6492:60;6613:21;;;6644:48;;6640:343;;6731:12;;6751:84;;;;;:38;15678:55:124;;;6751:84:121;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6751:38:121;;;;;15633:18:124;;6751:84:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6857:9;6847:19;;:6;:19;;;6843:134;;6878:90;;;;;:38;15678:55:124;;;6878:90:121;;;15660:74:124;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6878:38:121;;;;;15633:18:124;;6878:90:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6694:289;6640:343;6302:685;;;6215:772;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:124;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:124:o;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:124:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2272:156::-;2338:20;;2398:4;2387:16;;2377:27;;2367:55;;2418:1;2415;2408:12;2433:348;2485:8;2495:6;2549:3;2542:4;2534:6;2530:17;2526:27;2516:55;;2567:1;2564;2557:12;2516:55;-1:-1:-1;2590:20:124;;2633:18;2622:30;;2619:50;;;2665:1;2662;2655:12;2619:50;2702:4;2694:6;2690:17;2678:29;;2754:3;2747:4;2738:6;2730;2726:19;2722:30;2719:39;2716:59;;;2771:1;2768;2761:12;2716:59;2433:348;;;;;:::o;2786:1414::-;2989:6;2997;3005;3013;3021;3029;3037;3045;3053;3061;3069:7;3123:3;3111:9;3102:7;3098:23;3094:33;3091:53;;;3140:1;3137;3130:12;3091:53;3163:29;3182:9;3163:29;:::i;:::-;3153:39;;3211:38;3245:2;3234:9;3230:18;3211:38;:::i;:::-;3201:48;;3268:38;3302:2;3291:9;3287:18;3268:38;:::i;:::-;3258:48;;3325:38;3359:2;3348:9;3344:18;3325:38;:::i;:::-;3315:48;;3382:37;3414:3;3403:9;3399:19;3382:37;:::i;:::-;3372:47;;3438:18;3506:2;3499:3;3488:9;3484:19;3471:33;3468:41;3465:61;;;3522:1;3519;3512:12;3465:61;3561:86;3639:7;3631:3;3620:9;3616:19;3603:33;3592:9;3588:49;3561:86;:::i;:::-;3666:8;;-1:-1:-1;3693:8:124;-1:-1:-1;3744:3:124;3729:19;;3716:33;3713:41;-1:-1:-1;3710:61:124;;;3767:1;3764;3757:12;3710:61;3806:86;3884:7;3876:3;3865:9;3861:19;3848:33;3837:9;3833:49;3806:86;:::i;:::-;3911:8;;-1:-1:-1;3938:8:124;-1:-1:-1;3989:3:124;3974:19;;3961:33;3958:41;-1:-1:-1;3955:61:124;;;4012:1;4009;4002:12;3955:61;;4052:86;4130:7;4122:3;4111:9;4107:19;4094:33;4083:9;4079:49;4052:86;:::i;:::-;4157:8;4147:18;;4185:9;4174:20;;;;2786:1414;;;;;;;;;;;;;;:::o;4205:456::-;4282:6;4290;4298;4351:2;4339:9;4330:7;4326:23;4322:32;4319:52;;;4367:1;4364;4357:12;4319:52;4406:9;4393:23;4425:31;4450:5;4425:31;:::i;:::-;4475:5;-1:-1:-1;4532:2:124;4517:18;;4504:32;4545:33;4504:32;4545:33;:::i;:::-;4205:456;;4597:7;;-1:-1:-1;;;4651:2:124;4636:18;;;;4623:32;;4205:456::o;5770:248::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;-1:-1:-1;;5938:23:124;;;6008:2;5993:18;;;5980:32;;-1:-1:-1;5770:248:124:o;6254:525::-;6340:6;6348;6356;6364;6417:3;6405:9;6396:7;6392:23;6388:33;6385:53;;;6434:1;6431;6424:12;6385:53;6473:9;6460:23;6492:31;6517:5;6492:31;:::i;:::-;6542:5;-1:-1:-1;6599:2:124;6584:18;;6571:32;6612:33;6571:32;6612:33;:::i;:::-;6254:525;;6664:7;;-1:-1:-1;;;;6718:2:124;6703:18;;6690:32;;6769:2;6754:18;6741:32;;6254:525::o;6784:734::-;6895:6;6903;6911;6919;6927;6935;6943;6996:3;6984:9;6975:7;6971:23;6967:33;6964:53;;;7013:1;7010;7003:12;6964:53;7052:9;7039:23;7071:31;7096:5;7071:31;:::i;:::-;7121:5;-1:-1:-1;7178:2:124;7163:18;;7150:32;7191:33;7150:32;7191:33;:::i;:::-;7243:7;-1:-1:-1;7297:2:124;7282:18;;7269:32;;-1:-1:-1;7348:2:124;7333:18;;7320:32;;-1:-1:-1;7371:37:124;7403:3;7388:19;;7371:37;:::i;:::-;7361:47;;7455:3;7444:9;7440:19;7427:33;7417:43;;7507:3;7496:9;7492:19;7479:33;7469:43;;6784:734;;;;;;;;;;:::o;7523:388::-;7591:6;7599;7652:2;7640:9;7631:7;7627:23;7623:32;7620:52;;;7668:1;7665;7658:12;7620:52;7707:9;7694:23;7726:31;7751:5;7726:31;:::i;:::-;7776:5;-1:-1:-1;7833:2:124;7818:18;;7805:32;7846:33;7805:32;7846:33;:::i;:::-;7898:7;7888:17;;;7523:388;;;;;:::o;8202:437::-;8281:1;8277:12;;;;8324;;;8345:61;;8399:4;8391:6;8387:17;8377:27;;8345:61;8452:2;8444:6;8441:14;8421:18;8418:38;8415:218;;;8489:77;8486:1;8479:88;8590:4;8587:1;8580:15;8618:4;8615:1;8608:15;8644:184;8714:6;8767:2;8755:9;8746:7;8742:23;8738:32;8735:52;;;8783:1;8780;8773:12;8735:52;-1:-1:-1;8806:16:124;;8644:184;-1:-1:-1;8644:184:124:o;9248:326::-;9337:6;9332:3;9325:19;9389:6;9382:5;9375:4;9370:3;9366:14;9353:43;;9441:1;9434:4;9425:6;9420:3;9416:16;9412:27;9405:38;9307:3;9563:4;9493:66;9488:2;9480:6;9476:15;9472:88;9467:3;9463:98;9459:109;9452:116;;9248:326;;;;:::o;9579:928::-;9895:4;9924:42;10005:2;9997:6;9993:15;9982:9;9975:34;10057:2;10049:6;10045:15;10040:2;10029:9;10025:18;10018:43;;10109:4;10101:6;10097:17;10092:2;10081:9;10077:18;10070:45;10151:3;10146:2;10135:9;10131:18;10124:31;10178:63;10236:3;10225:9;10221:19;10213:6;10205;10178:63;:::i;:::-;10290:9;10282:6;10278:22;10272:3;10261:9;10257:19;10250:51;10324:50;10367:6;10359;10351;10324:50;:::i;:::-;10310:64;;10423:9;10415:6;10411:22;10405:3;10394:9;10390:19;10383:51;10451:50;10494:6;10486;10478;10451:50;:::i;:::-;10443:58;9579:928;-1:-1:-1;;;;;;;;;;;;9579:928:124:o;10512:184::-;10564:77;10561:1;10554:88;10661:4;10658:1;10651:15;10685:4;10682:1;10675:15;10701:125;10741:4;10769:1;10766;10763:8;10760:34;;;10774:18;;:::i;:::-;-1:-1:-1;10811:9:124;;10701:125::o;10831:251::-;10901:6;10954:2;10942:9;10933:7;10929:23;10925:32;10922:52;;;10970:1;10967;10960:12;10922:52;11002:9;10996:16;11021:31;11046:5;11021:31;:::i;11087:277::-;11154:6;11207:2;11195:9;11186:7;11182:23;11178:32;11175:52;;;11223:1;11220;11213:12;11175:52;11255:9;11249:16;11308:5;11301:13;11294:21;11287:5;11284:32;11274:60;;11330:1;11327;11320:12;11369:128;11409:3;11440:1;11436:6;11433:1;11430:13;11427:39;;;11446:18;;:::i;:::-;-1:-1:-1;11482:9:124;;11369:128::o;15200:253::-;15240:3;15268:34;15329:2;15326:1;15322:10;15359:2;15356:1;15352:10;15390:3;15386:2;15382:12;15377:3;15374:21;15371:47;;;15398:18;;:::i;:::-;15434:13;;15200:253;-1:-1:-1;;;;15200:253:124:o;15872:246::-;15912:4;15941:34;16025:10;;;;15995;;16047:12;;;16044:38;;;16062:18;;:::i;:::-;16099:13;;15872:246;-1:-1:-1;;;15872:246:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"2886400","executionCost":"infinite","totalCost":"infinite"},"external":{"ATOKEN_REVISION()":"308","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"263","POOL()":"infinite","RESERVE_TREASURY_ADDRESS()":"2396","UNDERLYING_ASSET_ADDRESS()":"2418","allowance(address,address)":"infinite","approve(address,uint256)":"24565","balanceOf(address)":"infinite","burn(address,address,uint256,uint256)":"infinite","decimals()":"2379","decreaseAllowance(address,uint256)":"26909","delegateUnderlyingTo(address)":"infinite","getIncentivesController()":"2364","getPreviousIndex(address)":"2590","getScaledUserBalanceAndSupply(address)":"4737","handleRepayment(address,address,uint256)":"infinite","increaseAllowance(address,uint256)":"26890","initialize(address,address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","mintToTreasury(uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2653","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","scaledBalanceOf(address)":"2626","scaledTotalSupply()":"2375","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOnLiquidation(address,address,uint256)":"infinite","transferUnderlyingTo(address,uint256)":"infinite"}},"methodIdentifiers":{"ATOKEN_REVISION()":"0bd7ad3b","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","POOL()":"7535d246","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegateUnderlyingTo(address)":"2f114618","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"DelegateUnderlyingTo\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"ATOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegateUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"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\":\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"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\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"The underlying asset needs to be compatible with the COMP delegation interface\",\"events\":{\"DelegateUnderlyingTo(address)\":{\"details\":\"Emitted when underlying voting power is delegated\",\"params\":{\"delegatee\":\"The address of the delegatee\"}}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\"},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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 `amount` 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 amount of tokens owned by `account`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"delegateUnderlyingTo(address)\":{\"params\":{\"delegatee\":\"The address that will receive the delegation\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"title\":\"DelegationAwareAToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"delegateUnderlyingTo(address)\":{\"notice\":\"Delegates voting power of the underlying asset to a `delegatee` address\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"notice\":\"AToken enabled to delegate voting power of the underlying asset to a different address\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/DelegationAwareAToken.sol\":\"DelegationAwareAToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IDelegationToken\\n * @author Aave\\n * @notice Implements an interface for tokens with delegation COMP/UNI compatible\\n */\\ninterface IDelegationToken {\\n  /**\\n   * @notice Delegate voting power to a delegatee\\n   * @param delegatee The address of the delegatee\\n   */\\n  function delegate(address delegatee) external;\\n}\\n\",\"keccak256\":\"0xefaf5afc40d517357085677322396a6864a28d9bdbd664643a7a4723a45e4427\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/AToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAToken} from '../../interfaces/IAToken.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\n\\n/**\\n * @title Aave ERC20 AToken\\n * @author Aave\\n * @notice Implementation of the interest bearing token for the Aave protocol\\n */\\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  uint256 public constant ATOKEN_REVISION = 0x1;\\n\\n  address internal _treasury;\\n  address internal _underlyingAsset;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return ATOKEN_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableAToken\\n  function initialize(\\n    IPool initializingPool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) public virtual override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(aTokenName);\\n    _setSymbol(aTokenSymbol);\\n    _setDecimals(aTokenDecimals);\\n\\n    _treasury = treasury;\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      treasury,\\n      address(incentivesController),\\n      aTokenDecimals,\\n      aTokenName,\\n      aTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool) {\\n    return _mintScaled(caller, onBehalfOf, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function burn(\\n    address from,\\n    address receiverOfUnderlying,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool {\\n    _burnScaled(from, receiverOfUnderlying, amount, index);\\n    if (receiverOfUnderlying != address(this)) {\\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\\n    }\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\\n    if (amount == 0) {\\n      return;\\n    }\\n    _mintScaled(address(POOL), _treasury, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferOnLiquidation(\\n    address from,\\n    address to,\\n    uint256 value\\n  ) external virtual override onlyPool {\\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\\n    // so no need to emit a specific event here\\n    _transfer(from, to, value, false);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(\\n    address user\\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    uint256 currentSupplyScaled = super.totalSupply();\\n\\n    if (currentSupplyScaled == 0) {\\n      return 0;\\n    }\\n\\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\\n    return _treasury;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function handleRepayment(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount\\n  ) external virtual override onlyPool {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IAToken\\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 override {\\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @notice Transfers the aTokens between two users. Validates the transfer\\n   * (ie checks for valid HF after the transfer) if required\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   * @param validate True if the transfer needs to be validated, false otherwise\\n   */\\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\\n    address underlyingAsset = _underlyingAsset;\\n\\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\\n\\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\\n\\n    super._transfer(from, to, amount, index);\\n\\n    if (validate) {\\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\\n    }\\n\\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\\n  }\\n\\n  /**\\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\\n    _transfer(from, to, amount, true);\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\\n   */\\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\\n    return super.DOMAIN_SEPARATOR();\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\\n   */\\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\\n    return super.nonces(owner);\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x2bebbe5c8078e3d300b67d27ed2ac6695f9d17d7c52f0f22879a04353a5c7db1\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/DelegationAwareAToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IDelegationToken} from '../../interfaces/IDelegationToken.sol';\\nimport {AToken} from './AToken.sol';\\n\\n/**\\n * @title DelegationAwareAToken\\n * @author Aave\\n * @notice AToken enabled to delegate voting power of the underlying asset to a different address\\n * @dev The underlying asset needs to be compatible with the COMP delegation interface\\n */\\ncontract DelegationAwareAToken is AToken {\\n  /**\\n   * @dev Emitted when underlying voting power is delegated\\n   * @param delegatee The address of the delegatee\\n   */\\n  event DelegateUnderlyingTo(address indexed delegatee);\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(IPool pool) AToken(pool) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Delegates voting power of the underlying asset to a `delegatee` address\\n   * @param delegatee The address that will receive the delegation\\n   */\\n  function delegateUnderlyingTo(address delegatee) external onlyPoolAdmin {\\n    IDelegationToken(_underlyingAsset).delegate(delegatee);\\n    emit DelegateUnderlyingTo(delegatee);\\n  }\\n}\\n\",\"keccak256\":\"0xacd4f7046b3feee80c89e87adfd994762f720df4e36f4320330005c2082bb061\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30857,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_userState","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_allowances","offset":0,"slot":"53","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_totalSupply","offset":0,"slot":"54","type":"t_uint256"},{"astId":30867,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_name","offset":0,"slot":"55","type":"t_string_storage"},{"astId":30869,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_symbol","offset":0,"slot":"56","type":"t_string_storage"},{"astId":30871,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_decimals","offset":0,"slot":"57","type":"t_uint8"},{"astId":30874,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_incentivesController","offset":1,"slot":"57","type":"t_contract(IAaveIncentivesController)4000"},{"astId":30691,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_nonces","offset":0,"slot":"58","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_domainSeparator","offset":0,"slot":"59","type":"t_bytes32"},{"astId":28343,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_treasury","offset":0,"slot":"60","type":"t_address"},{"astId":28345,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_underlyingAsset","offset":0,"slot":"61","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"delegateUnderlyingTo(address)":{"notice":"Delegates voting power of the underlying asset to a `delegatee` address"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"notice":"AToken enabled to delegate voting power of the underlying asset to a different address","version":1}}},"contracts/protocol/tokenization/StableDebtToken.sol":{"StableDebtToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Mint","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":"DEBT_TOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"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":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAverageStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyAndAvgRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"user","type":"address"}],"name":"principalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Transfer and approve functionalities are disabled since its a non-transferable token","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"burn(address,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned","params":{"amount":"The amount of debt tokens getting burned","from":"The address from which the debt will be burned"},"returns":{"_0":"The total stable debt","_1":"The average stable borrow rate"}},"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"getAverageStableRate()":{"returns":{"_0":"The average stable rate"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getSupplyData()":{"returns":{"_0":"The principal","_1":"The total supply","_2":"The average stable rate","_3":"The timestamp of the last update"}},"getTotalSupplyAndAvgRate()":{"returns":{"_0":"The total supply","_1":"The average rate"}},"getTotalSupplyLastUpdated()":{"returns":{"_0":"The timestamp"}},"getUserLastUpdated(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The timestamp"}},"getUserStableRate(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The stable rate of the user"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt","params":{"amount":"The amount of debt tokens to mint","onBehalfOf":"The address receiving the debt tokens","rate":"The rate of the debt being minted","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if it is the first borrow, false otherwise","_1":"The total stable debt","_2":"The average stable borrow rate"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}},"principalBalanceOf(address)":{"returns":{"_0":"The debt balance of the user since the last burn/mint action"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance."}},"title":"StableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_29052":{"entryPoint":null,"id":29052,"parameterSlots":1,"returnSlots":0},"@_30482":{"entryPoint":null,"id":30482,"parameterSlots":0,"returnSlots":0},"@_30705":{"entryPoint":null,"id":30705,"parameterSlots":0,"returnSlots":0},"@_30916":{"entryPoint":null,"id":30916,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":564,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":603,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":539,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:50:124"},"nodeType":"YulIf","src":"76:70:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:138:124"},{"body":{"nodeType":"YulBlock","src":"252:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:124"},"nodeType":"YulFunctionCall","src":"300:12:124"},"nodeType":"YulExpressionStatement","src":"300:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:124"},"nodeType":"YulFunctionCall","src":"269:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:124"},"nodeType":"YulFunctionCall","src":"265:32:124"},"nodeType":"YulIf","src":"262:52:124"},{"nodeType":"YulVariableDeclaration","src":"323:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:124"},"nodeType":"YulFunctionCall","src":"336:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:124"},"nodeType":"YulFunctionCall","src":"361:38:124"},"nodeType":"YulExpressionStatement","src":"361:38:124"},{"nodeType":"YulAssignment","src":"408:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:124","type":""}],"src":"157:272:124"},{"body":{"nodeType":"YulBlock","src":"546:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:124"},"nodeType":"YulFunctionCall","src":"594:12:124"},"nodeType":"YulExpressionStatement","src":"594:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:32:124"},"nodeType":"YulIf","src":"556:52:124"},{"nodeType":"YulVariableDeclaration","src":"617:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:124"},"nodeType":"YulFunctionCall","src":"630:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:124"},"nodeType":"YulFunctionCall","src":"655:38:124"},"nodeType":"YulExpressionStatement","src":"655:38:124"},{"nodeType":"YulAssignment","src":"702:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:124","type":""}],"src":"434:289:124"},{"body":{"nodeType":"YulBlock","src":"783:325:124","statements":[{"nodeType":"YulAssignment","src":"793:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:124"},"nodeType":"YulFunctionCall","src":"803:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:124","statements":[{"nodeType":"YulAssignment","src":"903:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:124"},"nodeType":"YulFunctionCall","src":"913:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:124"},"nodeType":"YulFunctionCall","src":"874:26:124"},"nodeType":"YulIf","src":"871:61:124"},{"body":{"nodeType":"YulBlock","src":"991:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:124"},"nodeType":"YulFunctionCall","src":"1015:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:31:124"},"nodeType":"YulExpressionStatement","src":"1005:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:124"},"nodeType":"YulFunctionCall","src":"1049:15:124"},"nodeType":"YulExpressionStatement","src":"1049:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:124"},"nodeType":"YulFunctionCall","src":"1077:15:124"},"nodeType":"YulExpressionStatement","src":"1077:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:124"},"nodeType":"YulFunctionCall","src":"967:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:124"},"nodeType":"YulFunctionCall","src":"944:38:124"},"nodeType":"YulIf","src":"941:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:124","type":""}],"src":"728:380:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b5060405162002caf38038062002caf833981016040819052620000389162000234565b806040518060400160405280601681526020017f535441424c455f444542545f544f4b454e5f494d504c000000000000000000008152506040518060400160405280601681526020017f535441424c455f444542545f544f4b454e5f494d504c0000000000000000000081525060004660808181525050836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000114919062000234565b6001600160a01b031660a05282516200013590603b90602086019062000175565b5081516200014b90603c90602085019062000175565b50603d805460ff191660ff9290921691909117905550506001600160a01b031660c0525062000298565b82805462000183906200025b565b90600052602060002090601f016020900481019282620001a75760008555620001f2565b82601f10620001c257805160ff1916838001178555620001f2565b82800160010185558215620001f2579182015b82811115620001f2578251825591602001919060010190620001d5565b506200020092915062000204565b5090565b5b8082111562000200576000815560010162000205565b6001600160a01b03811681146200023157600080fd5b50565b6000602082840312156200024757600080fd5b815162000254816200021b565b9392505050565b600181811c908216806200027057607f821691505b602082108114156200029257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516129cb620002e46000396000818161030501528181610c4501528181611144015281816116a201526117fd015260006118c901526000610abd01526129cb6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806390f6fcf21161012a578063c04a8a10116100bd578063e655dbd81161008c578063e78c9b3b11610071578063e78c9b3b146105b5578063f3bfc73814610611578063f731e9be1461063857600080fd5b8063e655dbd81461057f578063e74848901461059257600080fd5b8063c04a8a1014610503578063c222ec8a14610516578063c634dfaa14610529578063dd62ed3e1461057157600080fd5b8063a9059cbb116100f9578063a9059cbb1461022e578063b16a19de146104ad578063b3f1c93d146104cb578063b9a7b622146104fb57600080fd5b806390f6fcf21461046357806395d89b411461047d5780639dc29fac14610485578063a457c2d71461022e57600080fd5b80636bd76d24116101a25780637816037611610171578063781603761461036f57806379774338146103ab57806379ce6b8c146103da5780637ecebe001461042d57600080fd5b80636bd76d24146102a757806370a08231146102ed5780637535d2461461030057806375d264131461034c57600080fd5b806323b872dd116101de57806323b872dd1461027c578063313ce5671461028a5780633644e5151461029f578063395093511461022e57600080fd5b806306fdde0314610210578063095ea7b31461022e5780630b52d5581461025157806318160ddd14610266575b600080fd5b610218610640565b604051610225919061233c565b60405180910390f35b61024161023c36600461237f565b6106d2565b6040519015158152602001610225565b61026461025f3660046123bc565b610742565b005b61026e610a93565b604051908152602001610225565b61024161023c36600461242a565b603d5460405160ff9091168152602001610225565b61026e610ab9565b61026e6102b536600461246b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61026e6102fb3660046124a4565b610af2565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff16610327565b6102186040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103b3610b9e565b6040805194855260208501939093529183015264ffffffffff166060820152608001610225565b6104176103e83660046124a4565b73ffffffffffffffffffffffffffffffffffffffff166000908152603e602052604090205464ffffffffff1690565b60405164ffffffffff9091168152602001610225565b61026e61043b3660046124a4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b603f546fffffffffffffffffffffffffffffffff1661026e565b610218610bfa565b61049861049336600461237f565b610c09565b60408051928352602083019190915201610225565b60375473ffffffffffffffffffffffffffffffffffffffff16610327565b6104de6104d93660046124c1565b611129565b604080519315158452602084019290925290820152606001610225565b61026e600181565b61026461051136600461237f565b6115ab565b610264610524366004612623565b6115ba565b61026e6105373660046124a4565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61026e61023c36600461246b565b61026461058d3660046124a4565b6118c5565b603f54700100000000000000000000000000000000900464ffffffffff16610417565b61026e6105c33660046124a4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61026e7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b610498611aa3565b6060603b805461064f906126f8565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906126f8565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526000916107399160040161233c565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166107c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50834211156040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525090610837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b5073ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205490610867610ab9565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c0016040516020818303038152906040528051906020012060405160200161091f9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156109a5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50610a5782600161277b565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260346020526040902055610a88898989611ace565b505050505050505050565b603f54600090610ab4906fffffffffffffffffffffffffffffffff16611b45565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610aea575060355490565b610ab4611b94565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041681610b51575060009392505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603e6020526040812054610b8990839064ffffffffff16611c59565b9050610b958382611c6d565b95945050505050565b603f546000908190819081906fffffffffffffffffffffffffffffffff16610bc5603a5490565b610bce82611b45565b603f549197909650919450700100000000000000000000000000000000900464ffffffffff1692509050565b6060603c805461064f906126f8565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50600080610cbf86611cc4565b92509250506000610cce610a93565b73ffffffffffffffffffffffffffffffffffffffff881660009081526038602052604081205491925090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16888411610d5957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a55610e53565b610d638985612793565b603a81905591506000610d93610d7886611d49565b603f546fffffffffffffffffffffffffffffffff1690611c6d565b90506000610daa610da38c611d49565b8490611c6d565b9050818110610de957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a8190559450610e50565b610e0d610e08610df886611d49565b610e028486612793565b90611d64565b611da3565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905594505b50505b85891415610ecb5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff169055603e909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169055610f20565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff160217905588851115611049576000610f788a87612793565b9050610f858b8287611e49565b60405181815273ffffffffffffffffffffffffffffffffffffffff8c16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018390526080810185905260a0810184905273ffffffffffffffffffffffffffffffffffffffff8c169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350611119565b6000611055868b612793565b90506110628b8287611fba565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018590526080810184905273ffffffffffffffffffffffffffffffffffffffff8c16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b50955093505050505b9250929050565b6000808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906111ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b506112246040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112625761126287898861200a565b60008061126e89611cc4565b925092505061127b610a93565b808452603f546fffffffffffffffffffffffffffffffff1660a08501526112a390899061277b565b603a81905560208401526112b688611d49565b60408481019190915273ffffffffffffffffffffffffffffffffffffffff8a1660009081526038602052205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16606084015261135261132261131d8a8561277b565b611d49565b6040850151611331908a611c6d565b61134861133d86611d49565b606088015190611c6d565b610e02919061277b565b6080840181905261136290611da3565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000969091168602179055603e825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16908117909155603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16919093021790915583015161146190610e089061143690611d49565b6040860151611446908b90611c6d565b6113486114568860000151611d49565b60a089015190611c6d565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905560a084015260006114b2828a61277b565b90506114c38a828660000151611e49565b60405181815273ffffffffffffffffffffffffffffffffffffffff8b16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360808085015160a080870151602080890151604080518881529283018a9052820188905260608201949094529384015282015273ffffffffffffffffffffffffffffffffffffffff808c1691908d16907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a35050602082015160a0909201519015999198509650945050505050565b6115b6338383611ace565b5050565b6001805460ff16806115cb5750303b155b806115d7575060005481115b611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60015460ff161580156116a057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061175d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50611767866120ca565b611770856120dd565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a16171790556117f5611b94565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051611882969594939291906127aa565b60405180910390a380156118b957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611932573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611956919061284a565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190612867565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b603f5460009081906fffffffffffffffffffffffffffffffff16611ac681611b45565b939092509050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600080611b51603a5490565b905080611b615750600092915050565b6000611b8084603f60109054906101000a900464ffffffffff16611c59565b9050611b8c8282611c6d565b949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bbf6120f0565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000611c668383426120fa565b9392505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611ca257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080611d088573ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b905080611d2057600080600093509350935050611d42565b6000611d2b86610af2565b90508181611d398282612793565b94509450945050505b9193909250565b633b9aca008181029081048214611d5f57600080fd5b919050565b600081156b033b2e3c9fd0803ce800000060028404190484111715611d8857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611e45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b6000611e5483611da3565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e998282612889565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d5461010090041615611fb357603d546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018690526fffffffffffffffffffffffffffffffff84166044830152610100909204909116906331873e2e90606401600060405180830381600087803b158015611f9f57600080fd5b505af1158015610a88573d6000803e3d6000fd5b5050505050565b6000611fc583611da3565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9982826128bd565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260366020908152604080832093861683529290529081205461204a908390612793565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1906120bc9086815260200190565b60405180910390a450505050565b80516115b690603b906020840190612241565b80516115b690603c906020840190612241565b6060610ab4610640565b60008061210e64ffffffffff851684612793565b90508061212a576b033b2e3c9fd0803ce8000000915050611c66565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511612160576000612165565b600285035b925066038882915c40006121798a80611c6d565b81612186576121866128ee565b0491506301e13380612198838b611c6d565b816121a5576121a56128ee565b0490506000826121b5868861291d565b6121bf919061291d565b600290049050600082856121d3888a61291d565b6121dd919061291d565b6121e7919061291d565b60069004905080826301e133806121fe8a8f61291d565b612208919061295a565b61221e906b033b2e3c9fd0803ce800000061277b565b612228919061277b565b612232919061277b565b9b9a5050505050505050505050565b82805461224d906126f8565b90600052602060002090601f01602090048101928261226f57600085556122b5565b82601f1061228857805160ff19168380011785556122b5565b828001600101855582156122b5579182015b828111156122b557825182559160200191906001019061229a565b50611e459291505b80821115611e4557600081556001016122bd565b6000815180845260005b818110156122f7576020818501810151868301820152016122db565b81811115612309576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c6660208301846122d1565b73ffffffffffffffffffffffffffffffffffffffff8116811461237157600080fd5b50565b8035611d5f8161234f565b6000806040838503121561239257600080fd5b823561239d8161234f565b946020939093013593505050565b803560ff81168114611d5f57600080fd5b600080600080600080600060e0888a0312156123d757600080fd5b87356123e28161234f565b965060208801356123f28161234f565b9550604088013594506060880135935061240e608089016123ab565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561243f57600080fd5b833561244a8161234f565b9250602084013561245a8161234f565b929592945050506040919091013590565b6000806040838503121561247e57600080fd5b82356124898161234f565b915060208301356124998161234f565b809150509250929050565b6000602082840312156124b657600080fd5b8135611c668161234f565b600080600080608085870312156124d757600080fd5b84356124e28161234f565b935060208501356124f28161234f565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261254757600080fd5b813567ffffffffffffffff8082111561256257612562612507565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125a8576125a8612507565b816040528381528660208588010111156125c157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f8401126125f357600080fd5b50813567ffffffffffffffff81111561260b57600080fd5b60208301915083602082850101111561112257600080fd5b60008060008060008060008060e0898b03121561263f57600080fd5b883561264a8161234f565b9750602089013561265a8161234f565b965061266860408a01612374565b955061267660608a016123ab565b9450608089013567ffffffffffffffff8082111561269357600080fd5b61269f8c838d01612536565b955060a08b01359150808211156126b557600080fd5b6126c18c838d01612536565b945060c08b01359150808211156126d757600080fd5b506126e48b828c016125e1565b999c989b5096995094979396929594505050565b600181811c9082168061270c57607f821691505b60208210811415612746577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561278e5761278e61274c565b500190565b6000828210156127a5576127a561274c565b500390565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a0604082015260006127e260a08301876122d1565b82810360608401526127f481876122d1565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b60006020828403121561285c57600080fd5b8151611c668161234f565b60006020828403121561287957600080fd5b81518015158114611c6657600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156128b4576128b461274c565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156128e6576128e661274c565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129555761295561274c565b500290565b600082612990577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212208a96cc31172a645845e36b7b1797b3d710a42ebd5d093ccc7a8accfee126cfa664736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2CAF CODESIZE SUB DUP1 PUSH3 0x2CAF DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x234 JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441424C455F444542545F544F4B454E5F494D504C00000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441424C455F444542545F544F4B454E5F494D504C00000000000000000000 DUP2 MSTORE POP PUSH1 0x0 CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x114 SWAP2 SWAP1 PUSH3 0x234 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE DUP3 MLOAD PUSH3 0x135 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x175 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x14B SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x175 JUMP JUMPDEST POP PUSH1 0x3D DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x298 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x183 SWAP1 PUSH3 0x25B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x1A7 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1F2 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1C2 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1F2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1F2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1F2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1D5 JUMP JUMPDEST POP PUSH3 0x200 SWAP3 SWAP2 POP PUSH3 0x204 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x200 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x205 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x254 DUP2 PUSH3 0x21B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x270 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x292 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x29CB PUSH3 0x2E4 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x305 ADD MSTORE DUP2 DUP2 PUSH2 0xC45 ADD MSTORE DUP2 DUP2 PUSH2 0x1144 ADD MSTORE DUP2 DUP2 PUSH2 0x16A2 ADD MSTORE PUSH2 0x17FD ADD MSTORE PUSH1 0x0 PUSH2 0x18C9 ADD MSTORE PUSH1 0x0 PUSH2 0xABD ADD MSTORE PUSH2 0x29CB PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90F6FCF2 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC04A8A10 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xE655DBD8 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE78C9B3B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE78C9B3B EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF731E9BE EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xE7484890 EQ PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC634DFAA EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90F6FCF2 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x78160376 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x79774338 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x79CE6B8C EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x266 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x218 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x225 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x23BC JUMP JUMPDEST PUSH2 0x742 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26E PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x242A JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x246B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH2 0xAF2 JUMP JUMPDEST PUSH2 0x327 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x218 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0xB9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x43B CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x26E JUMP JUMPDEST PUSH2 0x218 PUSH2 0xBFA JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0xC09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x4DE PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x24C1 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x264 PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2623 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST PUSH2 0x26E PUSH2 0x537 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x246B JUMP JUMPDEST PUSH2 0x264 PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH2 0x18C5 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x417 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x5C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1AA3 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26F8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x67B SWAP1 PUSH2 0x26F8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x69D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C8 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6AB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x739 SWAP2 PUSH1 0x4 ADD PUSH2 0x233C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x867 PUSH2 0xAB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x91F SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0xA57 DUP3 PUSH1 0x1 PUSH2 0x277B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xA88 DUP10 DUP10 DUP10 PUSH2 0x1ACE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 PUSH2 0xAB4 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B45 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAEA JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAB4 PUSH2 0x1B94 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND DUP2 PUSH2 0xB51 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB89 SWAP1 DUP4 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C59 JUMP JUMPDEST SWAP1 POP PUSH2 0xB95 DUP4 DUP3 PUSH2 0x1C6D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC5 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBCE DUP3 PUSH2 0x1B45 JUMP JUMPDEST PUSH1 0x3F SLOAD SWAP2 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26F8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCB2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0xCBF DUP7 PUSH2 0x1CC4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH1 0x0 PUSH2 0xCCE PUSH2 0xA93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 DUP2 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP5 GT PUSH2 0xD59 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A SSTORE PUSH2 0xE53 JUMP JUMPDEST PUSH2 0xD63 DUP10 DUP6 PUSH2 0x2793 JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP2 POP PUSH1 0x0 PUSH2 0xD93 PUSH2 0xD78 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x1C6D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0xDA3 DUP13 PUSH2 0x1D49 JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1C6D JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0xDE9 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP5 POP PUSH2 0xE50 JUMP JUMPDEST PUSH2 0xE0D PUSH2 0xE08 PUSH2 0xDF8 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0xE02 DUP5 DUP7 PUSH2 0x2793 JUMP JUMPDEST SWAP1 PUSH2 0x1D64 JUMP JUMPDEST PUSH2 0x1DA3 JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE SWAP5 POP JUMPDEST POP POP JUMPDEST DUP6 DUP10 EQ ISZERO PUSH2 0xECB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH1 0x3E SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND SWAP1 SSTORE PUSH2 0xF20 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE DUP9 DUP6 GT ISZERO PUSH2 0x1049 JUMPI PUSH1 0x0 PUSH2 0xF78 DUP11 DUP8 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP PUSH2 0xF85 DUP12 DUP3 DUP8 PUSH2 0x1E49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 DUP2 SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1119 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1055 DUP7 DUP12 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP PUSH2 0x1062 DUP12 DUP3 DUP8 PUSH2 0x1FBA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH32 0x44BD20A79E993BDCC7CBEDF54A3B4D19FB78490124B6B90D04FE3242EEA579E8 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP SWAP6 POP SWAP4 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0x1224 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1262 JUMPI PUSH2 0x1262 DUP8 DUP10 DUP9 PUSH2 0x200A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x126E DUP10 PUSH2 0x1CC4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x127B PUSH2 0xA93 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x12A3 SWAP1 DUP10 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12B6 DUP9 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1352 PUSH2 0x1322 PUSH2 0x131D DUP11 DUP6 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD PUSH2 0x1331 SWAP1 DUP11 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x133D DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0xE02 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE PUSH2 0x1362 SWAP1 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP7 SWAP1 SWAP2 AND DUP7 MUL OR SWAP1 SSTORE PUSH1 0x3E DUP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 SWAP4 MUL OR SWAP1 SWAP2 SSTORE DUP4 ADD MLOAD PUSH2 0x1461 SWAP1 PUSH2 0xE08 SWAP1 PUSH2 0x1436 SWAP1 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x1446 SWAP1 DUP12 SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x1456 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x0 PUSH2 0x14B2 DUP3 DUP11 PUSH2 0x277B JUMP JUMPDEST SWAP1 POP PUSH2 0x14C3 DUP11 DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x1E49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x80 DUP1 DUP6 ADD MLOAD PUSH1 0xA0 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP1 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP11 SWAP1 MSTORE DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 ISZERO SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 CALLER DUP4 DUP4 PUSH2 0x1ACE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x15CB JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x15D7 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x1663 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x175D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0x1767 DUP7 PUSH2 0x20CA JUMP JUMPDEST PUSH2 0x1770 DUP6 PUSH2 0x20DD JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0x17F5 PUSH2 0x1B94 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1882 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27AA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x18B9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1932 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1956 SWAP2 SWAP1 PUSH2 0x284A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19E7 SWAP2 SWAP1 PUSH2 0x2867 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A55 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC6 DUP2 PUSH2 0x1B45 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B51 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1B61 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B80 DUP5 PUSH1 0x3F PUSH1 0x10 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C59 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B8C DUP3 DUP3 PUSH2 0x1C6D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BBF PUSH2 0x20F0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C66 DUP4 DUP4 TIMESTAMP PUSH2 0x20FA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1CA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1D08 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1D20 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x1D42 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2B DUP7 PUSH2 0xAF2 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH2 0x1D39 DUP3 DUP3 PUSH2 0x2793 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP POP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1D88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E45 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E54 DUP4 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E99 DUP3 DUP3 PUSH2 0x2889 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND ISZERO PUSH2 0x1FB3 JUMPI PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FC5 DUP4 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E99 DUP3 DUP3 PUSH2 0x28BD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x204A SWAP1 DUP4 SWAP1 PUSH2 0x2793 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x20BC SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2241 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2241 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAB4 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x210E PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x212A JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1C66 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2160 JUMPI PUSH1 0x0 PUSH2 0x2165 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x2179 DUP11 DUP1 PUSH2 0x1C6D JUMP JUMPDEST DUP2 PUSH2 0x2186 JUMPI PUSH2 0x2186 PUSH2 0x28EE JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x2198 DUP4 DUP12 PUSH2 0x1C6D JUMP JUMPDEST DUP2 PUSH2 0x21A5 JUMPI PUSH2 0x21A5 PUSH2 0x28EE JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x21B5 DUP7 DUP9 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21BF SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x21D3 DUP9 DUP11 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21DD SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21E7 SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x21FE DUP11 DUP16 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x2208 SWAP2 SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x221E SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x2228 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x2232 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x224D SWAP1 PUSH2 0x26F8 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x226F JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x22B5 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2288 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x22B5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x22B5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x22B5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x229A JUMP JUMPDEST POP PUSH2 0x1E45 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E45 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22BD JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x22F7 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x22DB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x2309 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C66 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x22D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D5F DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2392 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x239D DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x23D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x23E2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x23F2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x240E PUSH1 0x80 DUP10 ADD PUSH2 0x23AB JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x244A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x245A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x247E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2489 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2499 DUP2 PUSH2 0x234F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C66 DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x24E2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x24F2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2562 JUMPI PUSH2 0x2562 PUSH2 0x2507 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x25A8 JUMPI PUSH2 0x25A8 PUSH2 0x2507 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x25C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x260B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x263F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x264A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x265A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP7 POP PUSH2 0x2668 PUSH1 0x40 DUP11 ADD PUSH2 0x2374 JUMP JUMPDEST SWAP6 POP PUSH2 0x2676 PUSH1 0x60 DUP11 ADD PUSH2 0x23AB JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x269F DUP13 DUP4 DUP14 ADD PUSH2 0x2536 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C1 DUP13 DUP4 DUP14 ADD PUSH2 0x2536 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E4 DUP12 DUP3 DUP13 ADD PUSH2 0x25E1 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x270C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2746 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x278E JUMPI PUSH2 0x278E PUSH2 0x274C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x27A5 JUMPI PUSH2 0x27A5 PUSH2 0x274C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27E2 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x22D1 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x27F4 DUP2 DUP8 PUSH2 0x22D1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x285C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C66 DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2879 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x28B4 JUMPI PUSH2 0x28B4 PUSH2 0x274C JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x28E6 JUMPI PUSH2 0x28E6 PUSH2 0x274C JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2955 JUMPI PUSH2 0x2955 PUSH2 0x274C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2990 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP11 SWAP7 0xCC BALANCE OR 0x2A PUSH5 0x5845E36B7B OR SWAP8 0xB3 0xD7 LT LOG4 0x2E 0xBD 0x5D MULMOD EXTCODECOPY 0xCC PUSH27 0x8ACCFEE126CFA664736F6C634300080A0033000000000000000000 ","sourceMap":"1216:11978:117:-:0;;;928:1:87;886:43;;1787:164:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1853:4;2671:222:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:1:117;630:13:120;619:24;;;;;;2780:4:121;-1:-1:-1;;;;;2780:23:121;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:121;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:121;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:121;:20;;-1:-1:-1;;2851:20:121;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:121;;;-1:-1:-1;1216:11978:117;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1216:11978:117;;;-1:-1:-1;1216:11978:117;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:124;-1:-1:-1;;;;;96:31:124;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:124:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;1216:11978:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_TOKEN_REVISION_29028":{"entryPoint":null,"id":29028,"parameterSlots":0,"returnSlots":0},"@DELEGATION_WITH_SIG_TYPEHASH_30473":{"entryPoint":null,"id":30473,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_30723":{"entryPoint":2745,"id":30723,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_30682":{"entryPoint":null,"id":30682,"parameterSlots":0,"returnSlots":0},"@POOL_30880":{"entryPoint":null,"id":30880,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_ASSET_ADDRESS_29809":{"entryPoint":null,"id":29809,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_29959":{"entryPoint":8432,"id":29959,"parameterSlots":0,"returnSlots":1},"@_approveDelegation_30636":{"entryPoint":6862,"id":30636,"parameterSlots":3,"returnSlots":0},"@_burn_29948":{"entryPoint":8122,"id":29948,"parameterSlots":3,"returnSlots":0},"@_calcTotalSupply_29844":{"entryPoint":6981,"id":29844,"parameterSlots":1,"returnSlots":1},"@_calculateBalanceIncrease_29714":{"entryPoint":7364,"id":29714,"parameterSlots":1,"returnSlots":3},"@_calculateDomainSeparator_30766":{"entryPoint":7060,"id":30766,"parameterSlots":0,"returnSlots":1},"@_decreaseBorrowAllowance_30672":{"entryPoint":8202,"id":30672,"parameterSlots":3,"returnSlots":0},"@_mint_29896":{"entryPoint":7753,"id":29896,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_31299":{"entryPoint":null,"id":31299,"parameterSlots":1,"returnSlots":0},"@_setName_31277":{"entryPoint":8394,"id":31277,"parameterSlots":1,"returnSlots":0},"@_setSymbol_31288":{"entryPoint":8413,"id":31288,"parameterSlots":1,"returnSlots":0},"@allowance_29992":{"entryPoint":null,"id":29992,"parameterSlots":2,"returnSlots":1},"@approveDelegation_30499":{"entryPoint":5547,"id":30499,"parameterSlots":2,"returnSlots":0},"@approve_30008":{"entryPoint":1746,"id":30008,"parameterSlots":2,"returnSlots":1},"@balanceOf_29220":{"entryPoint":2802,"id":29220,"parameterSlots":1,"returnSlots":1},"@balanceOf_30971":{"entryPoint":null,"id":30971,"parameterSlots":1,"returnSlots":1},"@borrowAllowance_30610":{"entryPoint":null,"id":30610,"parameterSlots":2,"returnSlots":1},"@burn_29671":{"entryPoint":3081,"id":29671,"parameterSlots":2,"returnSlots":2},"@calculateCompoundedInterest_23673":{"entryPoint":8442,"id":23673,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_23691":{"entryPoint":7257,"id":23691,"parameterSlots":2,"returnSlots":1},"@decimals_30946":{"entryPoint":null,"id":30946,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_30058":{"entryPoint":null,"id":30058,"parameterSlots":2,"returnSlots":1},"@delegationWithSig_30592":{"entryPoint":1858,"id":30592,"parameterSlots":7,"returnSlots":0},"@getAverageStableRate_29145":{"entryPoint":null,"id":29145,"parameterSlots":0,"returnSlots":1},"@getIncentivesController_30981":{"entryPoint":null,"id":30981,"parameterSlots":0,"returnSlots":1},"@getRevision_29135":{"entryPoint":null,"id":29135,"parameterSlots":0,"returnSlots":1},"@getSupplyData_29742":{"entryPoint":2974,"id":29742,"parameterSlots":0,"returnSlots":4},"@getTotalSupplyAndAvgRate_29762":{"entryPoint":6819,"id":29762,"parameterSlots":0,"returnSlots":2},"@getTotalSupplyLastUpdated_29784":{"entryPoint":null,"id":29784,"parameterSlots":0,"returnSlots":1},"@getUserLastUpdated_29159":{"entryPoint":null,"id":29159,"parameterSlots":1,"returnSlots":1},"@getUserStableRate_29174":{"entryPoint":null,"id":29174,"parameterSlots":1,"returnSlots":1},"@increaseAllowance_30042":{"entryPoint":null,"id":30042,"parameterSlots":2,"returnSlots":1},"@initialize_29125":{"entryPoint":5562,"id":29125,"parameterSlots":8,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@mint_29444":{"entryPoint":4393,"id":29444,"parameterSlots":4,"returnSlots":3},"@name_30926":{"entryPoint":1600,"id":30926,"parameterSlots":0,"returnSlots":1},"@nonces_30736":{"entryPoint":null,"id":30736,"parameterSlots":1,"returnSlots":1},"@principalBalanceOf_29799":{"entryPoint":null,"id":29799,"parameterSlots":1,"returnSlots":1},"@rayDiv_23792":{"entryPoint":7524,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":7277,"id":23780,"parameterSlots":2,"returnSlots":1},"@setIncentivesController_30995":{"entryPoint":6341,"id":30995,"parameterSlots":1,"returnSlots":0},"@symbol_30936":{"entryPoint":3066,"id":30936,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7587,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_29774":{"entryPoint":2707,"id":29774,"parameterSlots":0,"returnSlots":1},"@totalSupply_30956":{"entryPoint":null,"id":30956,"parameterSlots":0,"returnSlots":1},"@transferFrom_30026":{"entryPoint":null,"id":30026,"parameterSlots":3,"returnSlots":1},"@transfer_29976":{"entryPoint":null,"id":29976,"parameterSlots":2,"returnSlots":1},"@wadToRay_23812":{"entryPoint":7497,"id":23812,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":9076,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":9697,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_string":{"entryPoint":9526,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":9380,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10314,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":9323,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":9258,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":9409,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":9148,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":9087,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10343,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr":{"entryPoint":9763,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_uint8":{"entryPoint":9131,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":8913,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":10154,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":9020,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":10377,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":10107,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":10586,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":10525,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":10429,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10131,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":9976,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":10060,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":10478,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":9479,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":9039,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:17494:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"820:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:124"},"nodeType":"YulFunctionCall","src":"909:12:124"},"nodeType":"YulExpressionStatement","src":"909:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:124"},"nodeType":"YulFunctionCall","src":"840:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:73:124"},"nodeType":"YulIf","src":"830:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:124","type":""}],"src":"775:154:124"},{"body":{"nodeType":"YulBlock","src":"983:85:124","statements":[{"nodeType":"YulAssignment","src":"993:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:124"},"nodeType":"YulFunctionCall","src":"1002:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:124"},"nodeType":"YulFunctionCall","src":"1031:31:124"},"nodeType":"YulExpressionStatement","src":"1031:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:124","type":""}],"src":"934:134:124"},{"body":{"nodeType":"YulBlock","src":"1160:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:124"},"nodeType":"YulFunctionCall","src":"1208:12:124"},"nodeType":"YulExpressionStatement","src":"1208:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:124"},"nodeType":"YulFunctionCall","src":"1177:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:124"},"nodeType":"YulFunctionCall","src":"1173:32:124"},"nodeType":"YulIf","src":"1170:52:124"},{"nodeType":"YulVariableDeclaration","src":"1231:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:124"},"nodeType":"YulFunctionCall","src":"1244:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:124"},"nodeType":"YulFunctionCall","src":"1276:31:124"},"nodeType":"YulExpressionStatement","src":"1276:31:124"},{"nodeType":"YulAssignment","src":"1316:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:124"}]},{"nodeType":"YulAssignment","src":"1340:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:124","type":""}],"src":"1073:315:124"},{"body":{"nodeType":"YulBlock","src":"1488:92:124","statements":[{"nodeType":"YulAssignment","src":"1498:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:124"},"nodeType":"YulFunctionCall","src":"1558:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:124"},"nodeType":"YulFunctionCall","src":"1551:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:41:124"},"nodeType":"YulExpressionStatement","src":"1533:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:124","type":""}],"src":"1393:187:124"},{"body":{"nodeType":"YulBlock","src":"1632:109:124","statements":[{"nodeType":"YulAssignment","src":"1642:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1664:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1651:12:124"},"nodeType":"YulFunctionCall","src":"1651:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1642:5:124"}]},{"body":{"nodeType":"YulBlock","src":"1719:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1728:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1731:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1721:6:124"},"nodeType":"YulFunctionCall","src":"1721:12:124"},"nodeType":"YulExpressionStatement","src":"1721:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1693:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1704:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"1711:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1700:3:124"},"nodeType":"YulFunctionCall","src":"1700:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1690:2:124"},"nodeType":"YulFunctionCall","src":"1690:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1683:6:124"},"nodeType":"YulFunctionCall","src":"1683:35:124"},"nodeType":"YulIf","src":"1680:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1611:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1622:5:124","type":""}],"src":"1585:156:124"},{"body":{"nodeType":"YulBlock","src":"1916:564:124","statements":[{"body":{"nodeType":"YulBlock","src":"1963:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1972:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1975:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1965:6:124"},"nodeType":"YulFunctionCall","src":"1965:12:124"},"nodeType":"YulExpressionStatement","src":"1965:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1937:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1946:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1933:3:124"},"nodeType":"YulFunctionCall","src":"1933:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1958:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1929:3:124"},"nodeType":"YulFunctionCall","src":"1929:33:124"},"nodeType":"YulIf","src":"1926:53:124"},{"nodeType":"YulVariableDeclaration","src":"1988:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2014:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2001:12:124"},"nodeType":"YulFunctionCall","src":"2001:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1992:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2058:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2033:24:124"},"nodeType":"YulFunctionCall","src":"2033:31:124"},"nodeType":"YulExpressionStatement","src":"2033:31:124"},{"nodeType":"YulAssignment","src":"2073:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2083:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2073:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2097:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2129:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2140:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2125:3:124"},"nodeType":"YulFunctionCall","src":"2125:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2112:12:124"},"nodeType":"YulFunctionCall","src":"2112:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2101:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2178:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2153:24:124"},"nodeType":"YulFunctionCall","src":"2153:33:124"},"nodeType":"YulExpressionStatement","src":"2153:33:124"},{"nodeType":"YulAssignment","src":"2195:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2205:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2195:6:124"}]},{"nodeType":"YulAssignment","src":"2221:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2248:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2259:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2244:3:124"},"nodeType":"YulFunctionCall","src":"2244:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2231:12:124"},"nodeType":"YulFunctionCall","src":"2231:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2221:6:124"}]},{"nodeType":"YulAssignment","src":"2272:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2299:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2310:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2295:3:124"},"nodeType":"YulFunctionCall","src":"2295:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2282:12:124"},"nodeType":"YulFunctionCall","src":"2282:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2272:6:124"}]},{"nodeType":"YulAssignment","src":"2323:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2354:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2365:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2350:3:124"},"nodeType":"YulFunctionCall","src":"2350:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2333:16:124"},"nodeType":"YulFunctionCall","src":"2333:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2323:6:124"}]},{"nodeType":"YulAssignment","src":"2379:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2406:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2417:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2402:3:124"},"nodeType":"YulFunctionCall","src":"2402:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2389:12:124"},"nodeType":"YulFunctionCall","src":"2389:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2379:6:124"}]},{"nodeType":"YulAssignment","src":"2431:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2458:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2469:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2454:3:124"},"nodeType":"YulFunctionCall","src":"2454:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2441:12:124"},"nodeType":"YulFunctionCall","src":"2441:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2431:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1834:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1845:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1857:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1865:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1873:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1881:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1889:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1897:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1905:6:124","type":""}],"src":"1746:734:124"},{"body":{"nodeType":"YulBlock","src":"2586:76:124","statements":[{"nodeType":"YulAssignment","src":"2596:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2608:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2619:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2604:3:124"},"nodeType":"YulFunctionCall","src":"2604:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2596:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2638:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2649:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2631:6:124"},"nodeType":"YulFunctionCall","src":"2631:25:124"},"nodeType":"YulExpressionStatement","src":"2631:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2555:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2566:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2577:4:124","type":""}],"src":"2485:177:124"},{"body":{"nodeType":"YulBlock","src":"2771:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"2817:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2826:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2829:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2819:6:124"},"nodeType":"YulFunctionCall","src":"2819:12:124"},"nodeType":"YulExpressionStatement","src":"2819:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2792:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2801:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2788:3:124"},"nodeType":"YulFunctionCall","src":"2788:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2813:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2784:3:124"},"nodeType":"YulFunctionCall","src":"2784:32:124"},"nodeType":"YulIf","src":"2781:52:124"},{"nodeType":"YulVariableDeclaration","src":"2842:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2868:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2855:12:124"},"nodeType":"YulFunctionCall","src":"2855:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2846:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2912:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2887:24:124"},"nodeType":"YulFunctionCall","src":"2887:31:124"},"nodeType":"YulExpressionStatement","src":"2887:31:124"},{"nodeType":"YulAssignment","src":"2927:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2937:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2927:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2951:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2983:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2994:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2979:3:124"},"nodeType":"YulFunctionCall","src":"2979:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2966:12:124"},"nodeType":"YulFunctionCall","src":"2966:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2955:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3032:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3007:24:124"},"nodeType":"YulFunctionCall","src":"3007:33:124"},"nodeType":"YulExpressionStatement","src":"3007:33:124"},{"nodeType":"YulAssignment","src":"3049:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3059:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3049:6:124"}]},{"nodeType":"YulAssignment","src":"3075:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3102:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3113:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3098:3:124"},"nodeType":"YulFunctionCall","src":"3098:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3085:12:124"},"nodeType":"YulFunctionCall","src":"3085:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3075:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2721:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2732:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2744:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2752:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2760:6:124","type":""}],"src":"2667:456:124"},{"body":{"nodeType":"YulBlock","src":"3225:87:124","statements":[{"nodeType":"YulAssignment","src":"3235:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3247:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3258:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3243:3:124"},"nodeType":"YulFunctionCall","src":"3243:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3235:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3277:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3292:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3300:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3288:3:124"},"nodeType":"YulFunctionCall","src":"3288:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3270:6:124"},"nodeType":"YulFunctionCall","src":"3270:36:124"},"nodeType":"YulExpressionStatement","src":"3270:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3194:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3205:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3216:4:124","type":""}],"src":"3128:184:124"},{"body":{"nodeType":"YulBlock","src":"3418:76:124","statements":[{"nodeType":"YulAssignment","src":"3428:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3440:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3451:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3436:3:124"},"nodeType":"YulFunctionCall","src":"3436:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3428:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3470:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3481:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3463:6:124"},"nodeType":"YulFunctionCall","src":"3463:25:124"},"nodeType":"YulExpressionStatement","src":"3463:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3387:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3398:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3409:4:124","type":""}],"src":"3317:177:124"},{"body":{"nodeType":"YulBlock","src":"3586:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"3632:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3641:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3644:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3634:6:124"},"nodeType":"YulFunctionCall","src":"3634:12:124"},"nodeType":"YulExpressionStatement","src":"3634:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3607:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3616:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3603:3:124"},"nodeType":"YulFunctionCall","src":"3603:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3628:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3599:3:124"},"nodeType":"YulFunctionCall","src":"3599:32:124"},"nodeType":"YulIf","src":"3596:52:124"},{"nodeType":"YulVariableDeclaration","src":"3657:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3683:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3670:12:124"},"nodeType":"YulFunctionCall","src":"3670:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3661:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3727:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3702:24:124"},"nodeType":"YulFunctionCall","src":"3702:31:124"},"nodeType":"YulExpressionStatement","src":"3702:31:124"},{"nodeType":"YulAssignment","src":"3742:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3752:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3742:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3766:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3798:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3809:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3794:3:124"},"nodeType":"YulFunctionCall","src":"3794:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3781:12:124"},"nodeType":"YulFunctionCall","src":"3781:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3770:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3847:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3822:24:124"},"nodeType":"YulFunctionCall","src":"3822:33:124"},"nodeType":"YulExpressionStatement","src":"3822:33:124"},{"nodeType":"YulAssignment","src":"3864:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3874:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3864:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3544:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3555:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3567:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3575:6:124","type":""}],"src":"3499:388:124"},{"body":{"nodeType":"YulBlock","src":"3962:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"4008:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4017:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4020:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4010:6:124"},"nodeType":"YulFunctionCall","src":"4010:12:124"},"nodeType":"YulExpressionStatement","src":"4010:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3983:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3992:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3979:3:124"},"nodeType":"YulFunctionCall","src":"3979:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4004:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3975:3:124"},"nodeType":"YulFunctionCall","src":"3975:32:124"},"nodeType":"YulIf","src":"3972:52:124"},{"nodeType":"YulVariableDeclaration","src":"4033:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4059:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4046:12:124"},"nodeType":"YulFunctionCall","src":"4046:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4037:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4103:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4078:24:124"},"nodeType":"YulFunctionCall","src":"4078:31:124"},"nodeType":"YulExpressionStatement","src":"4078:31:124"},{"nodeType":"YulAssignment","src":"4118:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4128:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4118:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3928:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3939:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3951:6:124","type":""}],"src":"3892:247:124"},{"body":{"nodeType":"YulBlock","src":"4259:125:124","statements":[{"nodeType":"YulAssignment","src":"4269:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4281:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4292:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4277:3:124"},"nodeType":"YulFunctionCall","src":"4277:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4269:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4311:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4326:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4334:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4322:3:124"},"nodeType":"YulFunctionCall","src":"4322:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4304:6:124"},"nodeType":"YulFunctionCall","src":"4304:74:124"},"nodeType":"YulExpressionStatement","src":"4304:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4228:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4239:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4250:4:124","type":""}],"src":"4144:240:124"},{"body":{"nodeType":"YulBlock","src":"4524:125:124","statements":[{"nodeType":"YulAssignment","src":"4534:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4546:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4557:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4542:3:124"},"nodeType":"YulFunctionCall","src":"4542:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4534:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4576:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4591:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4599:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4587:3:124"},"nodeType":"YulFunctionCall","src":"4587:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4569:6:124"},"nodeType":"YulFunctionCall","src":"4569:74:124"},"nodeType":"YulExpressionStatement","src":"4569:74:124"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4493:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4504:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4515:4:124","type":""}],"src":"4389:260:124"},{"body":{"nodeType":"YulBlock","src":"4773:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4790:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4801:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4783:6:124"},"nodeType":"YulFunctionCall","src":"4783:21:124"},"nodeType":"YulExpressionStatement","src":"4783:21:124"},{"nodeType":"YulAssignment","src":"4813:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4839:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4851:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4862:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4847:3:124"},"nodeType":"YulFunctionCall","src":"4847:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"4821:17:124"},"nodeType":"YulFunctionCall","src":"4821:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4813:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4742:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4753:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4764:4:124","type":""}],"src":"4654:218:124"},{"body":{"nodeType":"YulBlock","src":"5060:225:124","statements":[{"nodeType":"YulAssignment","src":"5070:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5082:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5093:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5078:3:124"},"nodeType":"YulFunctionCall","src":"5078:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5070:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5113:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"5124:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5106:6:124"},"nodeType":"YulFunctionCall","src":"5106:25:124"},"nodeType":"YulExpressionStatement","src":"5106:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5151:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5162:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5147:3:124"},"nodeType":"YulFunctionCall","src":"5147:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"5167:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5140:6:124"},"nodeType":"YulFunctionCall","src":"5140:34:124"},"nodeType":"YulExpressionStatement","src":"5140:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5194:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5205:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5190:3:124"},"nodeType":"YulFunctionCall","src":"5190:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"5210:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5183:6:124"},"nodeType":"YulFunctionCall","src":"5183:34:124"},"nodeType":"YulExpressionStatement","src":"5183:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5237:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5248:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5233:3:124"},"nodeType":"YulFunctionCall","src":"5233:18:124"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"5257:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5265:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5253:3:124"},"nodeType":"YulFunctionCall","src":"5253:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5226:6:124"},"nodeType":"YulFunctionCall","src":"5226:53:124"},"nodeType":"YulExpressionStatement","src":"5226:53:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5005:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5016:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5024:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5032:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5040:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5051:4:124","type":""}],"src":"4877:408:124"},{"body":{"nodeType":"YulBlock","src":"5389:95:124","statements":[{"nodeType":"YulAssignment","src":"5399:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5411:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5422:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5407:3:124"},"nodeType":"YulFunctionCall","src":"5407:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5399:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5441:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5456:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5464:12:124","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5452:3:124"},"nodeType":"YulFunctionCall","src":"5452:25:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5434:6:124"},"nodeType":"YulFunctionCall","src":"5434:44:124"},"nodeType":"YulExpressionStatement","src":"5434:44:124"}]},"name":"abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5358:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5369:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5380:4:124","type":""}],"src":"5290:194:124"},{"body":{"nodeType":"YulBlock","src":"5618:119:124","statements":[{"nodeType":"YulAssignment","src":"5628:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5640:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5651:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:124"},"nodeType":"YulFunctionCall","src":"5636:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5628:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5670:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"5681:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5663:6:124"},"nodeType":"YulFunctionCall","src":"5663:25:124"},"nodeType":"YulExpressionStatement","src":"5663:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5708:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5719:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5704:3:124"},"nodeType":"YulFunctionCall","src":"5704:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"5724:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5697:6:124"},"nodeType":"YulFunctionCall","src":"5697:34:124"},"nodeType":"YulExpressionStatement","src":"5697:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5579:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5590:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5598:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5609:4:124","type":""}],"src":"5489:248:124"},{"body":{"nodeType":"YulBlock","src":"5843:125:124","statements":[{"nodeType":"YulAssignment","src":"5853:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5876:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5861:3:124"},"nodeType":"YulFunctionCall","src":"5861:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5853:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5895:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5910:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5918:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5906:3:124"},"nodeType":"YulFunctionCall","src":"5906:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5888:6:124"},"nodeType":"YulFunctionCall","src":"5888:74:124"},"nodeType":"YulExpressionStatement","src":"5888:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5812:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5823:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5834:4:124","type":""}],"src":"5742:226:124"},{"body":{"nodeType":"YulBlock","src":"6094:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"6141:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6150:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6153:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6143:6:124"},"nodeType":"YulFunctionCall","src":"6143:12:124"},"nodeType":"YulExpressionStatement","src":"6143:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6115:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"6124:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6111:3:124"},"nodeType":"YulFunctionCall","src":"6111:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"6136:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6107:3:124"},"nodeType":"YulFunctionCall","src":"6107:33:124"},"nodeType":"YulIf","src":"6104:53:124"},{"nodeType":"YulVariableDeclaration","src":"6166:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6192:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6179:12:124"},"nodeType":"YulFunctionCall","src":"6179:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6170:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6236:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6211:24:124"},"nodeType":"YulFunctionCall","src":"6211:31:124"},"nodeType":"YulExpressionStatement","src":"6211:31:124"},{"nodeType":"YulAssignment","src":"6251:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"6261:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"6275:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6307:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6318:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6303:3:124"},"nodeType":"YulFunctionCall","src":"6303:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6290:12:124"},"nodeType":"YulFunctionCall","src":"6290:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6279:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6356:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6331:24:124"},"nodeType":"YulFunctionCall","src":"6331:33:124"},"nodeType":"YulExpressionStatement","src":"6331:33:124"},{"nodeType":"YulAssignment","src":"6373:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6383:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6373:6:124"}]},{"nodeType":"YulAssignment","src":"6399:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6426:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6437:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6422:3:124"},"nodeType":"YulFunctionCall","src":"6422:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6409:12:124"},"nodeType":"YulFunctionCall","src":"6409:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6399:6:124"}]},{"nodeType":"YulAssignment","src":"6450:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6477:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6488:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6473:3:124"},"nodeType":"YulFunctionCall","src":"6473:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:124"},"nodeType":"YulFunctionCall","src":"6460:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6450:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6036:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6047:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6059:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6067:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6075:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6083:6:124","type":""}],"src":"5973:525:124"},{"body":{"nodeType":"YulBlock","src":"6654:178:124","statements":[{"nodeType":"YulAssignment","src":"6664:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6676:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6687:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6672:3:124"},"nodeType":"YulFunctionCall","src":"6672:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6664:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6706:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6731:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6724:6:124"},"nodeType":"YulFunctionCall","src":"6724:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6717:6:124"},"nodeType":"YulFunctionCall","src":"6717:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6699:6:124"},"nodeType":"YulFunctionCall","src":"6699:41:124"},"nodeType":"YulExpressionStatement","src":"6699:41:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6760:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6771:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6756:3:124"},"nodeType":"YulFunctionCall","src":"6756:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"6776:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6749:6:124"},"nodeType":"YulFunctionCall","src":"6749:34:124"},"nodeType":"YulExpressionStatement","src":"6749:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6803:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6814:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6799:3:124"},"nodeType":"YulFunctionCall","src":"6799:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"6819:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6792:6:124"},"nodeType":"YulFunctionCall","src":"6792:34:124"},"nodeType":"YulExpressionStatement","src":"6792:34:124"}]},"name":"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6607:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6618:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6626:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6634:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6645:4:124","type":""}],"src":"6503:329:124"},{"body":{"nodeType":"YulBlock","src":"6869:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6886:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6889:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6879:6:124"},"nodeType":"YulFunctionCall","src":"6879:88:124"},"nodeType":"YulExpressionStatement","src":"6879:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6983:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6986:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6976:6:124"},"nodeType":"YulFunctionCall","src":"6976:15:124"},"nodeType":"YulExpressionStatement","src":"6976:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7007:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7010:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7000:6:124"},"nodeType":"YulFunctionCall","src":"7000:15:124"},"nodeType":"YulExpressionStatement","src":"7000:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6837:184:124"},{"body":{"nodeType":"YulBlock","src":"7079:725:124","statements":[{"body":{"nodeType":"YulBlock","src":"7128:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7137:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7140:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7130:6:124"},"nodeType":"YulFunctionCall","src":"7130:12:124"},"nodeType":"YulExpressionStatement","src":"7130:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7107:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7115:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7103:3:124"},"nodeType":"YulFunctionCall","src":"7103:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7122:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7099:3:124"},"nodeType":"YulFunctionCall","src":"7099:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7092:6:124"},"nodeType":"YulFunctionCall","src":"7092:35:124"},"nodeType":"YulIf","src":"7089:55:124"},{"nodeType":"YulVariableDeclaration","src":"7153:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7176:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7163:12:124"},"nodeType":"YulFunctionCall","src":"7163:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7157:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7192:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7202:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7196:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7243:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7245:16:124"},"nodeType":"YulFunctionCall","src":"7245:18:124"},"nodeType":"YulExpressionStatement","src":"7245:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7235:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"7239:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7232:2:124"},"nodeType":"YulFunctionCall","src":"7232:10:124"},"nodeType":"YulIf","src":"7229:36:124"},{"nodeType":"YulVariableDeclaration","src":"7274:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"7284:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7278:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7359:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7379:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7373:5:124"},"nodeType":"YulFunctionCall","src":"7373:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7363:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7391:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7413:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7437:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"7441:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7433:3:124"},"nodeType":"YulFunctionCall","src":"7433:13:124"},{"name":"_3","nodeType":"YulIdentifier","src":"7448:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7429:3:124"},"nodeType":"YulFunctionCall","src":"7429:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"7453:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7425:3:124"},"nodeType":"YulFunctionCall","src":"7425:31:124"},{"name":"_3","nodeType":"YulIdentifier","src":"7458:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7421:3:124"},"nodeType":"YulFunctionCall","src":"7421:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7409:3:124"},"nodeType":"YulFunctionCall","src":"7409:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7395:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"7521:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7523:16:124"},"nodeType":"YulFunctionCall","src":"7523:18:124"},"nodeType":"YulExpressionStatement","src":"7523:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7480:10:124"},{"name":"_2","nodeType":"YulIdentifier","src":"7492:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7477:2:124"},"nodeType":"YulFunctionCall","src":"7477:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7500:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7512:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7497:2:124"},"nodeType":"YulFunctionCall","src":"7497:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7474:2:124"},"nodeType":"YulFunctionCall","src":"7474:46:124"},"nodeType":"YulIf","src":"7471:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7559:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7563:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7552:6:124"},"nodeType":"YulFunctionCall","src":"7552:22:124"},"nodeType":"YulExpressionStatement","src":"7552:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7590:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7598:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7583:6:124"},"nodeType":"YulFunctionCall","src":"7583:18:124"},"nodeType":"YulExpressionStatement","src":"7583:18:124"},{"body":{"nodeType":"YulBlock","src":"7649:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7658:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7661:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7651:6:124"},"nodeType":"YulFunctionCall","src":"7651:12:124"},"nodeType":"YulExpressionStatement","src":"7651:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7624:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7632:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7620:3:124"},"nodeType":"YulFunctionCall","src":"7620:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"7637:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7616:3:124"},"nodeType":"YulFunctionCall","src":"7616:26:124"},{"name":"end","nodeType":"YulIdentifier","src":"7644:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7613:2:124"},"nodeType":"YulFunctionCall","src":"7613:35:124"},"nodeType":"YulIf","src":"7610:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7691:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7699:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7687:3:124"},"nodeType":"YulFunctionCall","src":"7687:17:124"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7710:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7718:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7706:3:124"},"nodeType":"YulFunctionCall","src":"7706:17:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7725:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"7674:12:124"},"nodeType":"YulFunctionCall","src":"7674:54:124"},"nodeType":"YulExpressionStatement","src":"7674:54:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7752:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7760:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7748:3:124"},"nodeType":"YulFunctionCall","src":"7748:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"7765:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7744:3:124"},"nodeType":"YulFunctionCall","src":"7744:26:124"},{"kind":"number","nodeType":"YulLiteral","src":"7772:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7737:6:124"},"nodeType":"YulFunctionCall","src":"7737:37:124"},"nodeType":"YulExpressionStatement","src":"7737:37:124"},{"nodeType":"YulAssignment","src":"7783:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7792:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7783:5:124"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7053:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7061:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"7069:5:124","type":""}],"src":"7026:778:124"},{"body":{"nodeType":"YulBlock","src":"7881:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"7930:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7939:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7942:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7932:6:124"},"nodeType":"YulFunctionCall","src":"7932:12:124"},"nodeType":"YulExpressionStatement","src":"7932:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7909:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7917:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7905:3:124"},"nodeType":"YulFunctionCall","src":"7905:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7924:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7901:3:124"},"nodeType":"YulFunctionCall","src":"7901:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7894:6:124"},"nodeType":"YulFunctionCall","src":"7894:35:124"},"nodeType":"YulIf","src":"7891:55:124"},{"nodeType":"YulAssignment","src":"7955:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7978:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7965:12:124"},"nodeType":"YulFunctionCall","src":"7965:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7955:6:124"}]},{"body":{"nodeType":"YulBlock","src":"8028:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8037:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8040:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8030:6:124"},"nodeType":"YulFunctionCall","src":"8030:12:124"},"nodeType":"YulExpressionStatement","src":"8030:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8000:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8008:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7997:2:124"},"nodeType":"YulFunctionCall","src":"7997:30:124"},"nodeType":"YulIf","src":"7994:50:124"},{"nodeType":"YulAssignment","src":"8053:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8069:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"8077:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8065:3:124"},"nodeType":"YulFunctionCall","src":"8065:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"8053:8:124"}]},{"body":{"nodeType":"YulBlock","src":"8134:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8143:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8146:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8136:6:124"},"nodeType":"YulFunctionCall","src":"8136:12:124"},"nodeType":"YulExpressionStatement","src":"8136:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8105:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"8113:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8101:3:124"},"nodeType":"YulFunctionCall","src":"8101:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"8122:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8097:3:124"},"nodeType":"YulFunctionCall","src":"8097:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"8129:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8094:2:124"},"nodeType":"YulFunctionCall","src":"8094:39:124"},"nodeType":"YulIf","src":"8091:59:124"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7844:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7852:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7860:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7870:6:124","type":""}],"src":"7809:347:124"},{"body":{"nodeType":"YulBlock","src":"8418:1045:124","statements":[{"body":{"nodeType":"YulBlock","src":"8465:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8474:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8477:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8467:6:124"},"nodeType":"YulFunctionCall","src":"8467:12:124"},"nodeType":"YulExpressionStatement","src":"8467:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8439:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8448:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8435:3:124"},"nodeType":"YulFunctionCall","src":"8435:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8460:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8431:3:124"},"nodeType":"YulFunctionCall","src":"8431:33:124"},"nodeType":"YulIf","src":"8428:53:124"},{"nodeType":"YulVariableDeclaration","src":"8490:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8516:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8503:12:124"},"nodeType":"YulFunctionCall","src":"8503:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8494:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8560:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8535:24:124"},"nodeType":"YulFunctionCall","src":"8535:31:124"},"nodeType":"YulExpressionStatement","src":"8535:31:124"},{"nodeType":"YulAssignment","src":"8575:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"8585:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8575:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8599:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8642:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8627:3:124"},"nodeType":"YulFunctionCall","src":"8627:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8614:12:124"},"nodeType":"YulFunctionCall","src":"8614:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"8603:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8680:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8655:24:124"},"nodeType":"YulFunctionCall","src":"8655:33:124"},"nodeType":"YulExpressionStatement","src":"8655:33:124"},{"nodeType":"YulAssignment","src":"8697:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8707:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8697:6:124"}]},{"nodeType":"YulAssignment","src":"8723:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8756:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8752:3:124"},"nodeType":"YulFunctionCall","src":"8752:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8733:18:124"},"nodeType":"YulFunctionCall","src":"8733:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8723:6:124"}]},{"nodeType":"YulAssignment","src":"8780:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8811:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8822:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8807:3:124"},"nodeType":"YulFunctionCall","src":"8807:18:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8790:16:124"},"nodeType":"YulFunctionCall","src":"8790:36:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8780:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8835:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8866:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8877:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8862:3:124"},"nodeType":"YulFunctionCall","src":"8862:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8849:12:124"},"nodeType":"YulFunctionCall","src":"8849:33:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8839:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8891:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8901:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8895:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8946:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8955:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8958:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8948:6:124"},"nodeType":"YulFunctionCall","src":"8948:12:124"},"nodeType":"YulExpressionStatement","src":"8948:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8934:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8942:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8931:2:124"},"nodeType":"YulFunctionCall","src":"8931:14:124"},"nodeType":"YulIf","src":"8928:34:124"},{"nodeType":"YulAssignment","src":"8971:60:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9003:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"9014:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8999:3:124"},"nodeType":"YulFunctionCall","src":"8999:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9023:7:124"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8981:17:124"},"nodeType":"YulFunctionCall","src":"8981:50:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8971:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9040:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9073:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9084:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9069:3:124"},"nodeType":"YulFunctionCall","src":"9069:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9056:12:124"},"nodeType":"YulFunctionCall","src":"9056:33:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"9044:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9118:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9127:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9130:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9120:6:124"},"nodeType":"YulFunctionCall","src":"9120:12:124"},"nodeType":"YulExpressionStatement","src":"9120:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"9104:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9114:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9101:2:124"},"nodeType":"YulFunctionCall","src":"9101:16:124"},"nodeType":"YulIf","src":"9098:36:124"},{"nodeType":"YulAssignment","src":"9143:62:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9175:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"9186:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9171:3:124"},"nodeType":"YulFunctionCall","src":"9171:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9197:7:124"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"9153:17:124"},"nodeType":"YulFunctionCall","src":"9153:52:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"9143:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9214:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9247:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9258:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9243:3:124"},"nodeType":"YulFunctionCall","src":"9243:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9230:12:124"},"nodeType":"YulFunctionCall","src":"9230:33:124"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"9218:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9292:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9301:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9304:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9294:6:124"},"nodeType":"YulFunctionCall","src":"9294:12:124"},"nodeType":"YulExpressionStatement","src":"9294:12:124"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"9278:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"9288:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9275:2:124"},"nodeType":"YulFunctionCall","src":"9275:16:124"},"nodeType":"YulIf","src":"9272:36:124"},{"nodeType":"YulVariableDeclaration","src":"9317:86:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9373:9:124"},{"name":"offset_2","nodeType":"YulIdentifier","src":"9384:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9369:3:124"},"nodeType":"YulFunctionCall","src":"9369:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9395:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"9343:25:124"},"nodeType":"YulFunctionCall","src":"9343:60:124"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"9321:8:124","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"9331:8:124","type":""}]},{"nodeType":"YulAssignment","src":"9412:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"9422:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"9412:6:124"}]},{"nodeType":"YulAssignment","src":"9439:18:124","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"9449:8:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"9439:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8328:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8339:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8351:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8359:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8367:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8375:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8383:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8391:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"8399:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"8407:6:124","type":""}],"src":"8161:1302:124"},{"body":{"nodeType":"YulBlock","src":"9572:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"9618:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9627:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9630:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9620:6:124"},"nodeType":"YulFunctionCall","src":"9620:12:124"},"nodeType":"YulExpressionStatement","src":"9620:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9593:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9602:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9589:3:124"},"nodeType":"YulFunctionCall","src":"9589:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9614:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9585:3:124"},"nodeType":"YulFunctionCall","src":"9585:32:124"},"nodeType":"YulIf","src":"9582:52:124"},{"nodeType":"YulVariableDeclaration","src":"9643:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9669:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9656:12:124"},"nodeType":"YulFunctionCall","src":"9656:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9647:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9713:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9688:24:124"},"nodeType":"YulFunctionCall","src":"9688:31:124"},"nodeType":"YulExpressionStatement","src":"9688:31:124"},{"nodeType":"YulAssignment","src":"9728:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9738:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9728:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9538:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9549:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9561:6:124","type":""}],"src":"9468:281:124"},{"body":{"nodeType":"YulBlock","src":"9809:382:124","statements":[{"nodeType":"YulAssignment","src":"9819:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9833:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"9836:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9829:3:124"},"nodeType":"YulFunctionCall","src":"9829:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9819:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9850:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"9880:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"9886:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9876:3:124"},"nodeType":"YulFunctionCall","src":"9876:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"9854:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9927:31:124","statements":[{"nodeType":"YulAssignment","src":"9929:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9943:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9951:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9939:3:124"},"nodeType":"YulFunctionCall","src":"9939:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9929:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9907:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9900:6:124"},"nodeType":"YulFunctionCall","src":"9900:26:124"},"nodeType":"YulIf","src":"9897:61:124"},{"body":{"nodeType":"YulBlock","src":"10017:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10038:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10041:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10031:6:124"},"nodeType":"YulFunctionCall","src":"10031:88:124"},"nodeType":"YulExpressionStatement","src":"10031:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10139:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10142:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10132:6:124"},"nodeType":"YulFunctionCall","src":"10132:15:124"},"nodeType":"YulExpressionStatement","src":"10132:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10167:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10170:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10160:6:124"},"nodeType":"YulFunctionCall","src":"10160:15:124"},"nodeType":"YulExpressionStatement","src":"10160:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9973:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9996:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10004:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9993:2:124"},"nodeType":"YulFunctionCall","src":"9993:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9970:2:124"},"nodeType":"YulFunctionCall","src":"9970:38:124"},"nodeType":"YulIf","src":"9967:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"9789:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"9798:6:124","type":""}],"src":"9754:437:124"},{"body":{"nodeType":"YulBlock","src":"10409:299:124","statements":[{"nodeType":"YulAssignment","src":"10419:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10431:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10442:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10427:3:124"},"nodeType":"YulFunctionCall","src":"10427:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10419:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10462:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"10473:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10455:6:124"},"nodeType":"YulFunctionCall","src":"10455:25:124"},"nodeType":"YulExpressionStatement","src":"10455:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10500:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10511:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10496:3:124"},"nodeType":"YulFunctionCall","src":"10496:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10520:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10528:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10516:3:124"},"nodeType":"YulFunctionCall","src":"10516:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10489:6:124"},"nodeType":"YulFunctionCall","src":"10489:83:124"},"nodeType":"YulExpressionStatement","src":"10489:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10592:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10603:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10588:3:124"},"nodeType":"YulFunctionCall","src":"10588:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"10608:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10581:6:124"},"nodeType":"YulFunctionCall","src":"10581:34:124"},"nodeType":"YulExpressionStatement","src":"10581:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10635:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10646:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10631:3:124"},"nodeType":"YulFunctionCall","src":"10631:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"10651:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10624:6:124"},"nodeType":"YulFunctionCall","src":"10624:34:124"},"nodeType":"YulExpressionStatement","src":"10624:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10678:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10689:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10674:3:124"},"nodeType":"YulFunctionCall","src":"10674:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"10695:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10667:6:124"},"nodeType":"YulFunctionCall","src":"10667:35:124"},"nodeType":"YulExpressionStatement","src":"10667:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10346:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10357:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10365:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10373:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10381:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10389:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10400:4:124","type":""}],"src":"10196:512:124"},{"body":{"nodeType":"YulBlock","src":"10961:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10978:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10983:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10971:6:124"},"nodeType":"YulFunctionCall","src":"10971:79:124"},"nodeType":"YulExpressionStatement","src":"10971:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11070:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"11075:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11066:3:124"},"nodeType":"YulFunctionCall","src":"11066:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11079:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11059:6:124"},"nodeType":"YulFunctionCall","src":"11059:27:124"},"nodeType":"YulExpressionStatement","src":"11059:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11106:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"11111:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11102:3:124"},"nodeType":"YulFunctionCall","src":"11102:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"11116:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11095:6:124"},"nodeType":"YulFunctionCall","src":"11095:28:124"},"nodeType":"YulExpressionStatement","src":"11095:28:124"},{"nodeType":"YulAssignment","src":"11132:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11143:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"11148:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11139:3:124"},"nodeType":"YulFunctionCall","src":"11139:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11132:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10929:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10934:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10942:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10953:3:124","type":""}],"src":"10713:444:124"},{"body":{"nodeType":"YulBlock","src":"11343:217:124","statements":[{"nodeType":"YulAssignment","src":"11353:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11365:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11376:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11361:3:124"},"nodeType":"YulFunctionCall","src":"11361:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11353:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11396:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11407:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11389:6:124"},"nodeType":"YulFunctionCall","src":"11389:25:124"},"nodeType":"YulExpressionStatement","src":"11389:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11434:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11445:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11430:3:124"},"nodeType":"YulFunctionCall","src":"11430:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11454:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11462:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11450:3:124"},"nodeType":"YulFunctionCall","src":"11450:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11423:6:124"},"nodeType":"YulFunctionCall","src":"11423:45:124"},"nodeType":"YulExpressionStatement","src":"11423:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11499:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11484:3:124"},"nodeType":"YulFunctionCall","src":"11484:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"11504:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11477:6:124"},"nodeType":"YulFunctionCall","src":"11477:34:124"},"nodeType":"YulExpressionStatement","src":"11477:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11531:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11542:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11527:3:124"},"nodeType":"YulFunctionCall","src":"11527:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"11547:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11520:6:124"},"nodeType":"YulFunctionCall","src":"11520:34:124"},"nodeType":"YulExpressionStatement","src":"11520:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11288:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11299:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11307:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11315:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11323:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11334:4:124","type":""}],"src":"11162:398:124"},{"body":{"nodeType":"YulBlock","src":"11597:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11614:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11617:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11607:6:124"},"nodeType":"YulFunctionCall","src":"11607:88:124"},"nodeType":"YulExpressionStatement","src":"11607:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11711:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11714:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11704:6:124"},"nodeType":"YulFunctionCall","src":"11704:15:124"},"nodeType":"YulExpressionStatement","src":"11704:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11735:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11738:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11728:6:124"},"nodeType":"YulFunctionCall","src":"11728:15:124"},"nodeType":"YulExpressionStatement","src":"11728:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11565:184:124"},{"body":{"nodeType":"YulBlock","src":"11802:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"11829:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11831:16:124"},"nodeType":"YulFunctionCall","src":"11831:18:124"},"nodeType":"YulExpressionStatement","src":"11831:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11818:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11825:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11821:3:124"},"nodeType":"YulFunctionCall","src":"11821:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11815:2:124"},"nodeType":"YulFunctionCall","src":"11815:13:124"},"nodeType":"YulIf","src":"11812:39:124"},{"nodeType":"YulAssignment","src":"11860:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11871:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11874:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11867:3:124"},"nodeType":"YulFunctionCall","src":"11867:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11860:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11785:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11788:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11794:3:124","type":""}],"src":"11754:128:124"},{"body":{"nodeType":"YulBlock","src":"11936:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"11958:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11960:16:124"},"nodeType":"YulFunctionCall","src":"11960:18:124"},"nodeType":"YulExpressionStatement","src":"11960:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11952:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11955:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11949:2:124"},"nodeType":"YulFunctionCall","src":"11949:8:124"},"nodeType":"YulIf","src":"11946:34:124"},{"nodeType":"YulAssignment","src":"11989:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12001:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"12004:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11997:3:124"},"nodeType":"YulFunctionCall","src":"11997:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11989:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11918:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11921:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11927:4:124","type":""}],"src":"11887:125:124"},{"body":{"nodeType":"YulBlock","src":"12258:294:124","statements":[{"nodeType":"YulAssignment","src":"12268:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12280:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12291:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12276:3:124"},"nodeType":"YulFunctionCall","src":"12276:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12268:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12311:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12322:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12304:6:124"},"nodeType":"YulFunctionCall","src":"12304:25:124"},"nodeType":"YulExpressionStatement","src":"12304:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12349:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12360:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12345:3:124"},"nodeType":"YulFunctionCall","src":"12345:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"12365:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12338:6:124"},"nodeType":"YulFunctionCall","src":"12338:34:124"},"nodeType":"YulExpressionStatement","src":"12338:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12392:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12403:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12388:3:124"},"nodeType":"YulFunctionCall","src":"12388:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12408:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12381:6:124"},"nodeType":"YulFunctionCall","src":"12381:34:124"},"nodeType":"YulExpressionStatement","src":"12381:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12435:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12446:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12431:3:124"},"nodeType":"YulFunctionCall","src":"12431:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12451:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12424:6:124"},"nodeType":"YulFunctionCall","src":"12424:34:124"},"nodeType":"YulExpressionStatement","src":"12424:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12478:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12489:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:124"},"nodeType":"YulFunctionCall","src":"12474:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"12495:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:124"},"nodeType":"YulFunctionCall","src":"12467:35:124"},"nodeType":"YulExpressionStatement","src":"12467:35:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12522:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12533:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12518:3:124"},"nodeType":"YulFunctionCall","src":"12518:19:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12539:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12511:6:124"},"nodeType":"YulFunctionCall","src":"12511:35:124"},"nodeType":"YulExpressionStatement","src":"12511:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12187:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12198:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12206:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12214:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12222:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12230:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12238:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12249:4:124","type":""}],"src":"12017:535:124"},{"body":{"nodeType":"YulBlock","src":"12770:250:124","statements":[{"nodeType":"YulAssignment","src":"12780:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12792:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12803:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12788:3:124"},"nodeType":"YulFunctionCall","src":"12788:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12780:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12823:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"12834:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12816:6:124"},"nodeType":"YulFunctionCall","src":"12816:25:124"},"nodeType":"YulExpressionStatement","src":"12816:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12861:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12872:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12857:3:124"},"nodeType":"YulFunctionCall","src":"12857:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"12877:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12850:6:124"},"nodeType":"YulFunctionCall","src":"12850:34:124"},"nodeType":"YulExpressionStatement","src":"12850:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12904:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12915:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12900:3:124"},"nodeType":"YulFunctionCall","src":"12900:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"12920:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12893:6:124"},"nodeType":"YulFunctionCall","src":"12893:34:124"},"nodeType":"YulExpressionStatement","src":"12893:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12947:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12958:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12943:3:124"},"nodeType":"YulFunctionCall","src":"12943:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"12963:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12936:6:124"},"nodeType":"YulFunctionCall","src":"12936:34:124"},"nodeType":"YulExpressionStatement","src":"12936:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12990:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13001:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12986:3:124"},"nodeType":"YulFunctionCall","src":"12986:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"13007:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12979:6:124"},"nodeType":"YulFunctionCall","src":"12979:35:124"},"nodeType":"YulExpressionStatement","src":"12979:35:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12707:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12718:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12726:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12734:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12742:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12750:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12761:4:124","type":""}],"src":"12557:463:124"},{"body":{"nodeType":"YulBlock","src":"13199:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13216:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13227:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13209:6:124"},"nodeType":"YulFunctionCall","src":"13209:21:124"},"nodeType":"YulExpressionStatement","src":"13209:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13250:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13261:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13246:3:124"},"nodeType":"YulFunctionCall","src":"13246:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"13266:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13239:6:124"},"nodeType":"YulFunctionCall","src":"13239:30:124"},"nodeType":"YulExpressionStatement","src":"13239:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13289:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13300:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13285:3:124"},"nodeType":"YulFunctionCall","src":"13285:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"13305:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13278:6:124"},"nodeType":"YulFunctionCall","src":"13278:62:124"},"nodeType":"YulExpressionStatement","src":"13278:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13360:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13371:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13356:3:124"},"nodeType":"YulFunctionCall","src":"13356:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"13376:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13349:6:124"},"nodeType":"YulFunctionCall","src":"13349:44:124"},"nodeType":"YulExpressionStatement","src":"13349:44:124"},{"nodeType":"YulAssignment","src":"13402:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13414:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13425:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13410:3:124"},"nodeType":"YulFunctionCall","src":"13410:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13402:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13176:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13190:4:124","type":""}],"src":"13025:410:124"},{"body":{"nodeType":"YulBlock","src":"13717:688:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13734:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13749:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13757:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13745:3:124"},"nodeType":"YulFunctionCall","src":"13745:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13727:6:124"},"nodeType":"YulFunctionCall","src":"13727:74:124"},"nodeType":"YulExpressionStatement","src":"13727:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13821:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13832:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13817:3:124"},"nodeType":"YulFunctionCall","src":"13817:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13841:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13849:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13837:3:124"},"nodeType":"YulFunctionCall","src":"13837:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13810:6:124"},"nodeType":"YulFunctionCall","src":"13810:45:124"},"nodeType":"YulExpressionStatement","src":"13810:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13875:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13886:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13871:3:124"},"nodeType":"YulFunctionCall","src":"13871:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"13891:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13864:6:124"},"nodeType":"YulFunctionCall","src":"13864:31:124"},"nodeType":"YulExpressionStatement","src":"13864:31:124"},{"nodeType":"YulVariableDeclaration","src":"13904:60:124","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"13936:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13948:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13959:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13944:3:124"},"nodeType":"YulFunctionCall","src":"13944:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"13918:17:124"},"nodeType":"YulFunctionCall","src":"13918:46:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"13908:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13984:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13995:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13980:3:124"},"nodeType":"YulFunctionCall","src":"13980:18:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"14004:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14012:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14000:3:124"},"nodeType":"YulFunctionCall","src":"14000:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13973:6:124"},"nodeType":"YulFunctionCall","src":"13973:50:124"},"nodeType":"YulExpressionStatement","src":"13973:50:124"},{"nodeType":"YulVariableDeclaration","src":"14032:47:124","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14064:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"14072:6:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"14046:17:124"},"nodeType":"YulFunctionCall","src":"14046:33:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"14036:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14099:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14110:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14095:3:124"},"nodeType":"YulFunctionCall","src":"14095:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14120:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14128:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14116:3:124"},"nodeType":"YulFunctionCall","src":"14116:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14088:6:124"},"nodeType":"YulFunctionCall","src":"14088:51:124"},"nodeType":"YulExpressionStatement","src":"14088:51:124"},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14155:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"14163:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14148:6:124"},"nodeType":"YulFunctionCall","src":"14148:22:124"},"nodeType":"YulExpressionStatement","src":"14148:22:124"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14196:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14204:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14192:3:124"},"nodeType":"YulFunctionCall","src":"14192:15:124"},{"name":"value4","nodeType":"YulIdentifier","src":"14209:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"14217:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"14179:12:124"},"nodeType":"YulFunctionCall","src":"14179:45:124"},"nodeType":"YulExpressionStatement","src":"14179:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14248:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"14256:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14244:3:124"},"nodeType":"YulFunctionCall","src":"14244:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"14265:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14240:3:124"},"nodeType":"YulFunctionCall","src":"14240:28:124"},{"kind":"number","nodeType":"YulLiteral","src":"14270:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14233:6:124"},"nodeType":"YulFunctionCall","src":"14233:39:124"},"nodeType":"YulExpressionStatement","src":"14233:39:124"},{"nodeType":"YulAssignment","src":"14281:118:124","value":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14297:6:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"14313:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14321:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14309:3:124"},"nodeType":"YulFunctionCall","src":"14309:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"14326:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14305:3:124"},"nodeType":"YulFunctionCall","src":"14305:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14293:3:124"},"nodeType":"YulFunctionCall","src":"14293:101:124"},{"kind":"number","nodeType":"YulLiteral","src":"14396:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14289:3:124"},"nodeType":"YulFunctionCall","src":"14289:110:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14281:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13646:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"13657:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13665:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13673:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13681:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13689:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13697:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13708:4:124","type":""}],"src":"13440:965:124"},{"body":{"nodeType":"YulBlock","src":"14491:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"14537:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14546:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14549:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14539:6:124"},"nodeType":"YulFunctionCall","src":"14539:12:124"},"nodeType":"YulExpressionStatement","src":"14539:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14512:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14521:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14508:3:124"},"nodeType":"YulFunctionCall","src":"14508:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14533:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14504:3:124"},"nodeType":"YulFunctionCall","src":"14504:32:124"},"nodeType":"YulIf","src":"14501:52:124"},{"nodeType":"YulVariableDeclaration","src":"14562:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14581:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14575:5:124"},"nodeType":"YulFunctionCall","src":"14575:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14566:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14625:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14600:24:124"},"nodeType":"YulFunctionCall","src":"14600:31:124"},"nodeType":"YulExpressionStatement","src":"14600:31:124"},{"nodeType":"YulAssignment","src":"14640:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14650:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14640:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14457:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14468:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14480:6:124","type":""}],"src":"14410:251:124"},{"body":{"nodeType":"YulBlock","src":"14744:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"14790:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14799:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14802:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14792:6:124"},"nodeType":"YulFunctionCall","src":"14792:12:124"},"nodeType":"YulExpressionStatement","src":"14792:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14765:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"14774:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14761:3:124"},"nodeType":"YulFunctionCall","src":"14761:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"14786:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14757:3:124"},"nodeType":"YulFunctionCall","src":"14757:32:124"},"nodeType":"YulIf","src":"14754:52:124"},{"nodeType":"YulVariableDeclaration","src":"14815:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14834:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14828:5:124"},"nodeType":"YulFunctionCall","src":"14828:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14819:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"14897:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14906:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14909:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14899:6:124"},"nodeType":"YulFunctionCall","src":"14899:12:124"},"nodeType":"YulExpressionStatement","src":"14899:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14866:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14887:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14880:6:124"},"nodeType":"YulFunctionCall","src":"14880:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14873:6:124"},"nodeType":"YulFunctionCall","src":"14873:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14863:2:124"},"nodeType":"YulFunctionCall","src":"14863:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14856:6:124"},"nodeType":"YulFunctionCall","src":"14856:40:124"},"nodeType":"YulIf","src":"14853:60:124"},{"nodeType":"YulAssignment","src":"14922:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"14932:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14922:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14710:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14721:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14733:6:124","type":""}],"src":"14666:277:124"},{"body":{"nodeType":"YulBlock","src":"15161:299:124","statements":[{"nodeType":"YulAssignment","src":"15171:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15194:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15179:3:124"},"nodeType":"YulFunctionCall","src":"15179:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15171:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15214:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"15225:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15207:6:124"},"nodeType":"YulFunctionCall","src":"15207:25:124"},"nodeType":"YulExpressionStatement","src":"15207:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15252:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15263:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15248:3:124"},"nodeType":"YulFunctionCall","src":"15248:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"15268:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15241:6:124"},"nodeType":"YulFunctionCall","src":"15241:34:124"},"nodeType":"YulExpressionStatement","src":"15241:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15295:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15306:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15291:3:124"},"nodeType":"YulFunctionCall","src":"15291:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"15311:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15284:6:124"},"nodeType":"YulFunctionCall","src":"15284:34:124"},"nodeType":"YulExpressionStatement","src":"15284:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15338:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15349:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15334:3:124"},"nodeType":"YulFunctionCall","src":"15334:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"15354:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15327:6:124"},"nodeType":"YulFunctionCall","src":"15327:34:124"},"nodeType":"YulExpressionStatement","src":"15327:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15381:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15392:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15377:3:124"},"nodeType":"YulFunctionCall","src":"15377:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"15402:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15410:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15398:3:124"},"nodeType":"YulFunctionCall","src":"15398:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15370:6:124"},"nodeType":"YulFunctionCall","src":"15370:84:124"},"nodeType":"YulExpressionStatement","src":"15370:84:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15098:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15109:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15117:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15125:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15133:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15141:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15152:4:124","type":""}],"src":"14948:512:124"},{"body":{"nodeType":"YulBlock","src":"15639:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15656:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15667:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15649:6:124"},"nodeType":"YulFunctionCall","src":"15649:21:124"},"nodeType":"YulExpressionStatement","src":"15649:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15690:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15701:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15686:3:124"},"nodeType":"YulFunctionCall","src":"15686:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"15706:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15679:6:124"},"nodeType":"YulFunctionCall","src":"15679:30:124"},"nodeType":"YulExpressionStatement","src":"15679:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15729:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15740:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15725:3:124"},"nodeType":"YulFunctionCall","src":"15725:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"15745:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15718:6:124"},"nodeType":"YulFunctionCall","src":"15718:62:124"},"nodeType":"YulExpressionStatement","src":"15718:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15800:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15811:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15796:3:124"},"nodeType":"YulFunctionCall","src":"15796:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15816:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15789:6:124"},"nodeType":"YulFunctionCall","src":"15789:37:124"},"nodeType":"YulExpressionStatement","src":"15789:37:124"},{"nodeType":"YulAssignment","src":"15835:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15847:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15858:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15843:3:124"},"nodeType":"YulFunctionCall","src":"15843:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15835:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15616:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15630:4:124","type":""}],"src":"15465:403:124"},{"body":{"nodeType":"YulBlock","src":"15921:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:124"},"nodeType":"YulFunctionCall","src":"15995:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:124"},"nodeType":"YulFunctionCall","src":"16025:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16069:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16071:16:124"},"nodeType":"YulFunctionCall","src":"16071:18:124"},"nodeType":"YulExpressionStatement","src":"16071:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"16059:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16063:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16055:3:124"},"nodeType":"YulFunctionCall","src":"16055:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16047:2:124"},"nodeType":"YulFunctionCall","src":"16047:21:124"},"nodeType":"YulIf","src":"16044:47:124"},{"nodeType":"YulAssignment","src":"16100:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16111:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16116:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16107:3:124"},"nodeType":"YulFunctionCall","src":"16107:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"16100:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15904:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15907:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15913:3:124","type":""}],"src":"15873:253:124"},{"body":{"nodeType":"YulBlock","src":"16288:252:124","statements":[{"nodeType":"YulAssignment","src":"16298:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16310:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16321:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16306:3:124"},"nodeType":"YulFunctionCall","src":"16306:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16298:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16340:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16355:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16363:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16351:3:124"},"nodeType":"YulFunctionCall","src":"16351:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16333:6:124"},"nodeType":"YulFunctionCall","src":"16333:74:124"},"nodeType":"YulExpressionStatement","src":"16333:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16427:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16438:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16423:3:124"},"nodeType":"YulFunctionCall","src":"16423:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"16443:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16416:6:124"},"nodeType":"YulFunctionCall","src":"16416:34:124"},"nodeType":"YulExpressionStatement","src":"16416:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16470:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"16481:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16466:3:124"},"nodeType":"YulFunctionCall","src":"16466:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"16490:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"16498:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16486:3:124"},"nodeType":"YulFunctionCall","src":"16486:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16459:6:124"},"nodeType":"YulFunctionCall","src":"16459:75:124"},"nodeType":"YulExpressionStatement","src":"16459:75:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16241:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16252:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16260:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16268:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16279:4:124","type":""}],"src":"16131:409:124"},{"body":{"nodeType":"YulBlock","src":"16594:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"16604:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"16614:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16608:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16657:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16672:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16675:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16668:3:124"},"nodeType":"YulFunctionCall","src":"16668:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"16661:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16687:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16702:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"16705:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16698:3:124"},"nodeType":"YulFunctionCall","src":"16698:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16691:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"16733:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16735:16:124"},"nodeType":"YulFunctionCall","src":"16735:18:124"},"nodeType":"YulExpressionStatement","src":"16735:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16723:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16728:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16720:2:124"},"nodeType":"YulFunctionCall","src":"16720:12:124"},"nodeType":"YulIf","src":"16717:38:124"},{"nodeType":"YulAssignment","src":"16764:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16776:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"16781:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16772:3:124"},"nodeType":"YulFunctionCall","src":"16772:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16764:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"16576:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"16579:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"16585:4:124","type":""}],"src":"16545:246:124"},{"body":{"nodeType":"YulBlock","src":"16828:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16845:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16848:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16838:6:124"},"nodeType":"YulFunctionCall","src":"16838:88:124"},"nodeType":"YulExpressionStatement","src":"16838:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16942:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16945:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16935:6:124"},"nodeType":"YulFunctionCall","src":"16935:15:124"},"nodeType":"YulExpressionStatement","src":"16935:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16966:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16969:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16959:6:124"},"nodeType":"YulFunctionCall","src":"16959:15:124"},"nodeType":"YulExpressionStatement","src":"16959:15:124"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"16796:184:124"},{"body":{"nodeType":"YulBlock","src":"17037:176:124","statements":[{"body":{"nodeType":"YulBlock","src":"17156:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17158:16:124"},"nodeType":"YulFunctionCall","src":"17158:18:124"},"nodeType":"YulExpressionStatement","src":"17158:18:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17068:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17061:6:124"},"nodeType":"YulFunctionCall","src":"17061:9:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17054:6:124"},"nodeType":"YulFunctionCall","src":"17054:17:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17076:1:124"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17083:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"17151:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17079:3:124"},"nodeType":"YulFunctionCall","src":"17079:74:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17073:2:124"},"nodeType":"YulFunctionCall","src":"17073:81:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17050:3:124"},"nodeType":"YulFunctionCall","src":"17050:105:124"},"nodeType":"YulIf","src":"17047:131:124"},{"nodeType":"YulAssignment","src":"17187:20:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17202:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"17205:1:124"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"17198:3:124"},"nodeType":"YulFunctionCall","src":"17198:9:124"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"17187:7:124"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17016:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"17019:1:124","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"17025:7:124","type":""}],"src":"16985:228:124"},{"body":{"nodeType":"YulBlock","src":"17264:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"17295:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17316:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17319:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17309:6:124"},"nodeType":"YulFunctionCall","src":"17309:88:124"},"nodeType":"YulExpressionStatement","src":"17309:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17417:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"17420:4:124","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17410:6:124"},"nodeType":"YulFunctionCall","src":"17410:15:124"},"nodeType":"YulExpressionStatement","src":"17410:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17445:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17448:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17438:6:124"},"nodeType":"YulFunctionCall","src":"17438:15:124"},"nodeType":"YulExpressionStatement","src":"17438:15:124"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17284:1:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17277:6:124"},"nodeType":"YulFunctionCall","src":"17277:9:124"},"nodeType":"YulIf","src":"17274:189:124"},{"nodeType":"YulAssignment","src":"17472:14:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17481:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"17484:1:124"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17477:3:124"},"nodeType":"YulFunctionCall","src":"17477:9:124"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"17472:1:124"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17249:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"17252:1:124","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"17258:1:124","type":""}],"src":"17218:274:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value5 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 192))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_2), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_string(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value3, tail_1)\n        mstore(add(headStart, 128), sub(tail_2, headStart))\n        mstore(tail_2, value5)\n        calldatacopy(add(tail_2, 32), value4, value5)\n        mstore(add(add(tail_2, value5), 32), 0)\n        tail := add(add(tail_2, and(add(value5, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"30695":[{"length":32,"start":2749}],"30877":[{"length":32,"start":6345}],"30880":[{"length":32,"start":773},{"length":32,"start":3141},{"length":32,"start":4420},{"length":32,"start":5794},{"length":32,"start":6141}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061020b5760003560e01c806390f6fcf21161012a578063c04a8a10116100bd578063e655dbd81161008c578063e78c9b3b11610071578063e78c9b3b146105b5578063f3bfc73814610611578063f731e9be1461063857600080fd5b8063e655dbd81461057f578063e74848901461059257600080fd5b8063c04a8a1014610503578063c222ec8a14610516578063c634dfaa14610529578063dd62ed3e1461057157600080fd5b8063a9059cbb116100f9578063a9059cbb1461022e578063b16a19de146104ad578063b3f1c93d146104cb578063b9a7b622146104fb57600080fd5b806390f6fcf21461046357806395d89b411461047d5780639dc29fac14610485578063a457c2d71461022e57600080fd5b80636bd76d24116101a25780637816037611610171578063781603761461036f57806379774338146103ab57806379ce6b8c146103da5780637ecebe001461042d57600080fd5b80636bd76d24146102a757806370a08231146102ed5780637535d2461461030057806375d264131461034c57600080fd5b806323b872dd116101de57806323b872dd1461027c578063313ce5671461028a5780633644e5151461029f578063395093511461022e57600080fd5b806306fdde0314610210578063095ea7b31461022e5780630b52d5581461025157806318160ddd14610266575b600080fd5b610218610640565b604051610225919061233c565b60405180910390f35b61024161023c36600461237f565b6106d2565b6040519015158152602001610225565b61026461025f3660046123bc565b610742565b005b61026e610a93565b604051908152602001610225565b61024161023c36600461242a565b603d5460405160ff9091168152602001610225565b61026e610ab9565b61026e6102b536600461246b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61026e6102fb3660046124a4565b610af2565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff16610327565b6102186040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103b3610b9e565b6040805194855260208501939093529183015264ffffffffff166060820152608001610225565b6104176103e83660046124a4565b73ffffffffffffffffffffffffffffffffffffffff166000908152603e602052604090205464ffffffffff1690565b60405164ffffffffff9091168152602001610225565b61026e61043b3660046124a4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b603f546fffffffffffffffffffffffffffffffff1661026e565b610218610bfa565b61049861049336600461237f565b610c09565b60408051928352602083019190915201610225565b60375473ffffffffffffffffffffffffffffffffffffffff16610327565b6104de6104d93660046124c1565b611129565b604080519315158452602084019290925290820152606001610225565b61026e600181565b61026461051136600461237f565b6115ab565b610264610524366004612623565b6115ba565b61026e6105373660046124a4565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61026e61023c36600461246b565b61026461058d3660046124a4565b6118c5565b603f54700100000000000000000000000000000000900464ffffffffff16610417565b61026e6105c33660046124a4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61026e7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b610498611aa3565b6060603b805461064f906126f8565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906126f8565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526000916107399160040161233c565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166107c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50834211156040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525090610837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b5073ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205490610867610ab9565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c0016040516020818303038152906040528051906020012060405160200161091f9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156109a5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50610a5782600161277b565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260346020526040902055610a88898989611ace565b505050505050505050565b603f54600090610ab4906fffffffffffffffffffffffffffffffff16611b45565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610aea575060355490565b610ab4611b94565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041681610b51575060009392505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603e6020526040812054610b8990839064ffffffffff16611c59565b9050610b958382611c6d565b95945050505050565b603f546000908190819081906fffffffffffffffffffffffffffffffff16610bc5603a5490565b610bce82611b45565b603f549197909650919450700100000000000000000000000000000000900464ffffffffff1692509050565b6060603c805461064f906126f8565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50600080610cbf86611cc4565b92509250506000610cce610a93565b73ffffffffffffffffffffffffffffffffffffffff881660009081526038602052604081205491925090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16888411610d5957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a55610e53565b610d638985612793565b603a81905591506000610d93610d7886611d49565b603f546fffffffffffffffffffffffffffffffff1690611c6d565b90506000610daa610da38c611d49565b8490611c6d565b9050818110610de957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a8190559450610e50565b610e0d610e08610df886611d49565b610e028486612793565b90611d64565b611da3565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905594505b50505b85891415610ecb5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff169055603e909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169055610f20565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff160217905588851115611049576000610f788a87612793565b9050610f858b8287611e49565b60405181815273ffffffffffffffffffffffffffffffffffffffff8c16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018390526080810185905260a0810184905273ffffffffffffffffffffffffffffffffffffffff8c169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350611119565b6000611055868b612793565b90506110628b8287611fba565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018590526080810184905273ffffffffffffffffffffffffffffffffffffffff8c16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b50955093505050505b9250929050565b6000808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906111ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b506112246040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112625761126287898861200a565b60008061126e89611cc4565b925092505061127b610a93565b808452603f546fffffffffffffffffffffffffffffffff1660a08501526112a390899061277b565b603a81905560208401526112b688611d49565b60408481019190915273ffffffffffffffffffffffffffffffffffffffff8a1660009081526038602052205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16606084015261135261132261131d8a8561277b565b611d49565b6040850151611331908a611c6d565b61134861133d86611d49565b606088015190611c6d565b610e02919061277b565b6080840181905261136290611da3565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000969091168602179055603e825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16908117909155603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16919093021790915583015161146190610e089061143690611d49565b6040860151611446908b90611c6d565b6113486114568860000151611d49565b60a089015190611c6d565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905560a084015260006114b2828a61277b565b90506114c38a828660000151611e49565b60405181815273ffffffffffffffffffffffffffffffffffffffff8b16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360808085015160a080870151602080890151604080518881529283018a9052820188905260608201949094529384015282015273ffffffffffffffffffffffffffffffffffffffff808c1691908d16907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a35050602082015160a0909201519015999198509650945050505050565b6115b6338383611ace565b5050565b6001805460ff16806115cb5750303b155b806115d7575060005481115b611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60015460ff161580156116a057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061175d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50611767866120ca565b611770856120dd565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a16171790556117f5611b94565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051611882969594939291906127aa565b60405180910390a380156118b957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611932573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611956919061284a565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190612867565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b603f5460009081906fffffffffffffffffffffffffffffffff16611ac681611b45565b939092509050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600080611b51603a5490565b905080611b615750600092915050565b6000611b8084603f60109054906101000a900464ffffffffff16611c59565b9050611b8c8282611c6d565b949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bbf6120f0565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000611c668383426120fa565b9392505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611ca257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080611d088573ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b905080611d2057600080600093509350935050611d42565b6000611d2b86610af2565b90508181611d398282612793565b94509450945050505b9193909250565b633b9aca008181029081048214611d5f57600080fd5b919050565b600081156b033b2e3c9fd0803ce800000060028404190484111715611d8857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611e45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b6000611e5483611da3565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e998282612889565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d5461010090041615611fb357603d546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018690526fffffffffffffffffffffffffffffffff84166044830152610100909204909116906331873e2e90606401600060405180830381600087803b158015611f9f57600080fd5b505af1158015610a88573d6000803e3d6000fd5b5050505050565b6000611fc583611da3565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9982826128bd565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260366020908152604080832093861683529290529081205461204a908390612793565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1906120bc9086815260200190565b60405180910390a450505050565b80516115b690603b906020840190612241565b80516115b690603c906020840190612241565b6060610ab4610640565b60008061210e64ffffffffff851684612793565b90508061212a576b033b2e3c9fd0803ce8000000915050611c66565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511612160576000612165565b600285035b925066038882915c40006121798a80611c6d565b81612186576121866128ee565b0491506301e13380612198838b611c6d565b816121a5576121a56128ee565b0490506000826121b5868861291d565b6121bf919061291d565b600290049050600082856121d3888a61291d565b6121dd919061291d565b6121e7919061291d565b60069004905080826301e133806121fe8a8f61291d565b612208919061295a565b61221e906b033b2e3c9fd0803ce800000061277b565b612228919061277b565b612232919061277b565b9b9a5050505050505050505050565b82805461224d906126f8565b90600052602060002090601f01602090048101928261226f57600085556122b5565b82601f1061228857805160ff19168380011785556122b5565b828001600101855582156122b5579182015b828111156122b557825182559160200191906001019061229a565b50611e459291505b80821115611e4557600081556001016122bd565b6000815180845260005b818110156122f7576020818501810151868301820152016122db565b81811115612309576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c6660208301846122d1565b73ffffffffffffffffffffffffffffffffffffffff8116811461237157600080fd5b50565b8035611d5f8161234f565b6000806040838503121561239257600080fd5b823561239d8161234f565b946020939093013593505050565b803560ff81168114611d5f57600080fd5b600080600080600080600060e0888a0312156123d757600080fd5b87356123e28161234f565b965060208801356123f28161234f565b9550604088013594506060880135935061240e608089016123ab565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561243f57600080fd5b833561244a8161234f565b9250602084013561245a8161234f565b929592945050506040919091013590565b6000806040838503121561247e57600080fd5b82356124898161234f565b915060208301356124998161234f565b809150509250929050565b6000602082840312156124b657600080fd5b8135611c668161234f565b600080600080608085870312156124d757600080fd5b84356124e28161234f565b935060208501356124f28161234f565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261254757600080fd5b813567ffffffffffffffff8082111561256257612562612507565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125a8576125a8612507565b816040528381528660208588010111156125c157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f8401126125f357600080fd5b50813567ffffffffffffffff81111561260b57600080fd5b60208301915083602082850101111561112257600080fd5b60008060008060008060008060e0898b03121561263f57600080fd5b883561264a8161234f565b9750602089013561265a8161234f565b965061266860408a01612374565b955061267660608a016123ab565b9450608089013567ffffffffffffffff8082111561269357600080fd5b61269f8c838d01612536565b955060a08b01359150808211156126b557600080fd5b6126c18c838d01612536565b945060c08b01359150808211156126d757600080fd5b506126e48b828c016125e1565b999c989b5096995094979396929594505050565b600181811c9082168061270c57607f821691505b60208210811415612746577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561278e5761278e61274c565b500190565b6000828210156127a5576127a561274c565b500390565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a0604082015260006127e260a08301876122d1565b82810360608401526127f481876122d1565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b60006020828403121561285c57600080fd5b8151611c668161234f565b60006020828403121561287957600080fd5b81518015158114611c6657600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156128b4576128b461274c565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156128e6576128e661274c565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129555761295561274c565b500290565b600082612990577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212208a96cc31172a645845e36b7b1797b3d710a42ebd5d093ccc7a8accfee126cfa664736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90F6FCF2 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC04A8A10 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xE655DBD8 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE78C9B3B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE78C9B3B EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF731E9BE EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xE7484890 EQ PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC634DFAA EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90F6FCF2 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x78160376 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x79774338 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x79CE6B8C EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x266 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x218 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x225 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x23BC JUMP JUMPDEST PUSH2 0x742 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26E PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x242A JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x246B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH2 0xAF2 JUMP JUMPDEST PUSH2 0x327 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x218 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0xB9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x43B CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x26E JUMP JUMPDEST PUSH2 0x218 PUSH2 0xBFA JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0xC09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x4DE PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x24C1 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x264 PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2623 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST PUSH2 0x26E PUSH2 0x537 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x246B JUMP JUMPDEST PUSH2 0x264 PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH2 0x18C5 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x417 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x5C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1AA3 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26F8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x67B SWAP1 PUSH2 0x26F8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x69D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C8 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6AB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x739 SWAP2 PUSH1 0x4 ADD PUSH2 0x233C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x867 PUSH2 0xAB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x91F SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0xA57 DUP3 PUSH1 0x1 PUSH2 0x277B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xA88 DUP10 DUP10 DUP10 PUSH2 0x1ACE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 PUSH2 0xAB4 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B45 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAEA JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAB4 PUSH2 0x1B94 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND DUP2 PUSH2 0xB51 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB89 SWAP1 DUP4 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C59 JUMP JUMPDEST SWAP1 POP PUSH2 0xB95 DUP4 DUP3 PUSH2 0x1C6D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC5 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBCE DUP3 PUSH2 0x1B45 JUMP JUMPDEST PUSH1 0x3F SLOAD SWAP2 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26F8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCB2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0xCBF DUP7 PUSH2 0x1CC4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH1 0x0 PUSH2 0xCCE PUSH2 0xA93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 DUP2 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP5 GT PUSH2 0xD59 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A SSTORE PUSH2 0xE53 JUMP JUMPDEST PUSH2 0xD63 DUP10 DUP6 PUSH2 0x2793 JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP2 POP PUSH1 0x0 PUSH2 0xD93 PUSH2 0xD78 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x1C6D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0xDA3 DUP13 PUSH2 0x1D49 JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1C6D JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0xDE9 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP5 POP PUSH2 0xE50 JUMP JUMPDEST PUSH2 0xE0D PUSH2 0xE08 PUSH2 0xDF8 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0xE02 DUP5 DUP7 PUSH2 0x2793 JUMP JUMPDEST SWAP1 PUSH2 0x1D64 JUMP JUMPDEST PUSH2 0x1DA3 JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE SWAP5 POP JUMPDEST POP POP JUMPDEST DUP6 DUP10 EQ ISZERO PUSH2 0xECB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH1 0x3E SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND SWAP1 SSTORE PUSH2 0xF20 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE DUP9 DUP6 GT ISZERO PUSH2 0x1049 JUMPI PUSH1 0x0 PUSH2 0xF78 DUP11 DUP8 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP PUSH2 0xF85 DUP12 DUP3 DUP8 PUSH2 0x1E49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 DUP2 SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1119 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1055 DUP7 DUP12 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP PUSH2 0x1062 DUP12 DUP3 DUP8 PUSH2 0x1FBA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH32 0x44BD20A79E993BDCC7CBEDF54A3B4D19FB78490124B6B90D04FE3242EEA579E8 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP SWAP6 POP SWAP4 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0x1224 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1262 JUMPI PUSH2 0x1262 DUP8 DUP10 DUP9 PUSH2 0x200A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x126E DUP10 PUSH2 0x1CC4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x127B PUSH2 0xA93 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x12A3 SWAP1 DUP10 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12B6 DUP9 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1352 PUSH2 0x1322 PUSH2 0x131D DUP11 DUP6 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD PUSH2 0x1331 SWAP1 DUP11 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x133D DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0xE02 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE PUSH2 0x1362 SWAP1 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP7 SWAP1 SWAP2 AND DUP7 MUL OR SWAP1 SSTORE PUSH1 0x3E DUP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 SWAP4 MUL OR SWAP1 SWAP2 SSTORE DUP4 ADD MLOAD PUSH2 0x1461 SWAP1 PUSH2 0xE08 SWAP1 PUSH2 0x1436 SWAP1 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x1446 SWAP1 DUP12 SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x1456 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x0 PUSH2 0x14B2 DUP3 DUP11 PUSH2 0x277B JUMP JUMPDEST SWAP1 POP PUSH2 0x14C3 DUP11 DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x1E49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x80 DUP1 DUP6 ADD MLOAD PUSH1 0xA0 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP1 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP11 SWAP1 MSTORE DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 ISZERO SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 CALLER DUP4 DUP4 PUSH2 0x1ACE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x15CB JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x15D7 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x1663 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x175D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0x1767 DUP7 PUSH2 0x20CA JUMP JUMPDEST PUSH2 0x1770 DUP6 PUSH2 0x20DD JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0x17F5 PUSH2 0x1B94 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1882 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27AA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x18B9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1932 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1956 SWAP2 SWAP1 PUSH2 0x284A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19E7 SWAP2 SWAP1 PUSH2 0x2867 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A55 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC6 DUP2 PUSH2 0x1B45 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B51 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1B61 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B80 DUP5 PUSH1 0x3F PUSH1 0x10 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C59 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B8C DUP3 DUP3 PUSH2 0x1C6D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BBF PUSH2 0x20F0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C66 DUP4 DUP4 TIMESTAMP PUSH2 0x20FA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1CA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1D08 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1D20 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x1D42 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2B DUP7 PUSH2 0xAF2 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH2 0x1D39 DUP3 DUP3 PUSH2 0x2793 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP POP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1D88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E45 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E54 DUP4 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E99 DUP3 DUP3 PUSH2 0x2889 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND ISZERO PUSH2 0x1FB3 JUMPI PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FC5 DUP4 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E99 DUP3 DUP3 PUSH2 0x28BD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x204A SWAP1 DUP4 SWAP1 PUSH2 0x2793 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x20BC SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2241 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2241 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAB4 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x210E PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x212A JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1C66 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2160 JUMPI PUSH1 0x0 PUSH2 0x2165 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x2179 DUP11 DUP1 PUSH2 0x1C6D JUMP JUMPDEST DUP2 PUSH2 0x2186 JUMPI PUSH2 0x2186 PUSH2 0x28EE JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x2198 DUP4 DUP12 PUSH2 0x1C6D JUMP JUMPDEST DUP2 PUSH2 0x21A5 JUMPI PUSH2 0x21A5 PUSH2 0x28EE JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x21B5 DUP7 DUP9 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21BF SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x21D3 DUP9 DUP11 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21DD SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21E7 SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x21FE DUP11 DUP16 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x2208 SWAP2 SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x221E SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x2228 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x2232 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x224D SWAP1 PUSH2 0x26F8 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x226F JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x22B5 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2288 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x22B5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x22B5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x22B5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x229A JUMP JUMPDEST POP PUSH2 0x1E45 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E45 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22BD JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x22F7 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x22DB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x2309 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C66 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x22D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D5F DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2392 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x239D DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x23D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x23E2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x23F2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x240E PUSH1 0x80 DUP10 ADD PUSH2 0x23AB JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x244A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x245A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x247E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2489 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2499 DUP2 PUSH2 0x234F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C66 DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x24E2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x24F2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2562 JUMPI PUSH2 0x2562 PUSH2 0x2507 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x25A8 JUMPI PUSH2 0x25A8 PUSH2 0x2507 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x25C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x260B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x263F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x264A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x265A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP7 POP PUSH2 0x2668 PUSH1 0x40 DUP11 ADD PUSH2 0x2374 JUMP JUMPDEST SWAP6 POP PUSH2 0x2676 PUSH1 0x60 DUP11 ADD PUSH2 0x23AB JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x269F DUP13 DUP4 DUP14 ADD PUSH2 0x2536 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C1 DUP13 DUP4 DUP14 ADD PUSH2 0x2536 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E4 DUP12 DUP3 DUP13 ADD PUSH2 0x25E1 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x270C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2746 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x278E JUMPI PUSH2 0x278E PUSH2 0x274C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x27A5 JUMPI PUSH2 0x27A5 PUSH2 0x274C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27E2 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x22D1 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x27F4 DUP2 DUP8 PUSH2 0x22D1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x285C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C66 DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2879 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x28B4 JUMPI PUSH2 0x28B4 PUSH2 0x274C JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x28E6 JUMPI PUSH2 0x28E6 PUSH2 0x274C JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2955 JUMPI PUSH2 0x2955 PUSH2 0x274C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2990 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP11 SWAP7 0xCC BALANCE OR 0x2A PUSH5 0x5845E36B7B OR SWAP8 0xB3 0xD7 LT LOG4 0x2E 0xBD 0x5D MULMOD EXTCODECOPY 0xCC PUSH27 0x8ACCFEE126CFA664736F6C634300080A0033000000000000000000 ","sourceMap":"1216:11978:117:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12646:125:117;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:124;;1551:22;1533:41;;1521:2;1506:18;12646:125:117;1393:187:124;1424:823:119;;;;;;:::i;:::-;;:::i;:::-;;9656:120:117;;;:::i;:::-;;;2631:25:124;;;2619:2;2604:18;9656:120:117;2485:177:124;12775:139:117;;;;;;:::i;3178:86:121:-;3250:9;;3178:86;;3250:9;;;;3270:36:124;;3258:2;3243:18;3178:86:121;3128:184:124;867:185:120;;;:::i;2292:165:119:-;;;;;;:::i;:::-;2417:27;;;;2395:7;2417:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2292:165;3477:433:117;;;;;;:::i;:::-;;:::i;2408:27:121:-;;;;;;;;4334:42:124;4322:55;;;4304:74;;4292:2;4277:18;2408:27:121;4144:240:124;3691:132:121;3797:21;;;;;;;3691:132;;192:50:120;;232:10;;;;;;;;;;;;;;;;;192:50;;9182:228:117;;;:::i;:::-;;;;5106:25:124;;;5162:2;5147:18;;5140:34;;;;5190:18;;;5183:34;5265:12;5253:25;5248:2;5233:18;;5226:53;5093:3;5078:19;9182:228:117;4877:408:124;3145:125:117;;;;;;:::i;:::-;3248:17;;3227:6;3248:17;;;:11;:17;;;;;;;;;3145:125;;;;5464:12:124;5452:25;;;5434:44;;5422:2;5407:18;3145:125:117;5290:194:124;1260:101:120;;;;;;:::i;:::-;1342:14;;1320:7;1342:14;;;:7;:14;;;;;;;1260:101;2993:113:117;3087:14;;;;2993:113;;3051:90:121;;;:::i;5927:2487:117:-;;;;;;:::i;:::-;;:::i;:::-;;;;5663:25:124;;;5719:2;5704:18;;5697:34;;;;5636:18;5927:2487:117;5489:248:124;10139:111:117;10229:16;;;;10139:111;;4149:1739;;;;;;:::i;:::-;;:::i;:::-;;;;6724:14:124;;6717:22;6699:41;;6771:2;6756:18;;6749:34;;;;6799:18;;;6792:34;6687:2;6672:18;4149:1739:117;6503:329:124;1362:49:117;;1408:3;1362:49;;1237:142:119;;;;;;:::i;:::-;;:::i;1997:803:117:-;;;;;;:::i;:::-;;:::i;9970:130::-;;;;;;:::i;:::-;3518:19:121;;10052:7:117;3518:19:121;;;:10;:19;;;;;:27;;;;9970:130:117;12507:135;;;;;;:::i;3938:139:121:-;;;;;;:::i;:::-;;:::i;9815:116:117:-;9905:21;;;;;;;9815:116;;3309:139;;;;;;:::i;:::-;3412:16;;3390:7;3412:16;;;:10;:16;;;;;:31;;;;;;;3309:139;897:153:119;;956:94;897:153;;9449:178:117;;;:::i;2930:84:121:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;12646:125:117:-;12735:30;;;;;;;;;;;;;;;;12728:38;;;;;12716:4;;12728:38;;;;;:::i;:::-;;;;;;;;1424:823:119;1633:29;;;;;;;;;;;;;;;;;1608:23;;;1600:63;;;;;;;;;;;;;:::i;:::-;;1727:8;1708:15;:27;;1737:25;;;;;;;;;;;;;;;;;1700:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1797:18:119;;;1769:25;1797:18;;;:7;:18;;;;;;;1901;:16;:18::i;:::-;1950:87;;;956:94;1950:87;;;10455:25:124;10528:42;10516:55;;10496:18;;;10489:83;;;;10588:18;;;10581:34;;;10631:18;;;10624:34;;;10674:19;;;10667:35;;;10427:19;;1950:87:119;;;;;;;;;;;;1929:118;;;;;;1855:200;;;;;;;;10983:66:124;10971:79;;11075:1;11066:11;;11059:27;;;;11111:2;11102:12;;11095:28;11148:2;11139:12;;10713:444;1855:200:119;;;;;;;;;;;;;;1838:223;;1855:200;1838:223;;;;2088:26;;;;;;;;;11389:25:124;;;11462:4;11450:17;;11430:18;;;11423:45;;;;11484:18;;;11477:34;;;11527:18;;;11520:34;;;1838:223:119;-1:-1:-1;2088:26:119;;11361:19:124;;2088:26:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:39;;:9;:39;;;2116:24;;;;;;;;;;;;;;;;;2067:74;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2168:21:119;:17;2188:1;2168:21;:::i;:::-;2147:18;;;;;;;:7;:18;;;;;:42;2195:47;2155:9;2225;2236:5;2195:18;:47::i;:::-;1594:653;;1424:823;;;;;;;:::o;9656:120:117:-;9756:14;;9717:7;;9739:32;;9756:14;;9739:16;:32::i;:::-;9732:39;;9656:120;:::o;867:185:120:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:120;;;867:185::o;939:69::-;1020:27;:25;:27::i;3477:433:117:-;3518:19:121;;;3551:7:117;3518:19:121;;;:10;:19;;;;;:27;;;;;;3642:34:117;;;;3518:27:121;3682:48:117;;-1:-1:-1;3722:1:117;;3477:433;-1:-1:-1;;;3477:433:117:o;3682:48::-;3826:20;;;3735:25;3826:20;;;:11;:20;;;;;;3763:89;;3808:10;;3826:20;;3763:37;:89::i;:::-;3735:117;-1:-1:-1;3865:40:117;:14;3735:117;3865:21;:40::i;:::-;3858:47;3477:433;-1:-1:-1;;;;;3477:433:117:o;9182:228::-;9298:14;;9239:7;;;;;;;;9298:14;;9326:19;3376:12:121;;;3293:100;9326:19:117;9347:25;9364:7;9347:16;:25::i;:::-;9383:21;;9318:87;;;;-1:-1:-1;9374:7:117;;-1:-1:-1;9383:21:117;;;;;;-1:-1:-1;9182:228:117;-1:-1:-1;9182:228:117:o;3051:90:121:-;3101:13;3129:7;3122:14;;;;;:::i;5927:2487:117:-;1519:26:121;;;;;;;;;;;;;;;;;6027:7:117;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;6054:22:117::1;6078:23:::0;6105:31:::1;6131:4;6105:25;:31::i;:::-;6051:85;;;;;6143:22;6168:13;:11;:13::i;:::-;6275:16;::::0;::::1;6187:25;6275:16:::0;;;:10:::1;:16;::::0;;;;:31;6143:38;;-1:-1:-1;6187:25:117;;;6275:31;;::::1;;;6621:24:::0;;::::1;6617:786;;6655:14;:18:::0;;;::::1;::::0;;6672:1:::1;6681:12;:16:::0;6617:786:::1;;;6746:23;6763:6:::0;6746:14;:23:::1;:::i;:::-;6731:12;:38;;;6718:51;;6777:17;6797:57;6828:25;:14;:23;:25::i;:::-;6805:14;::::0;::::1;;::::0;6797:30:::1;:57::i;:::-;6777:77;;6862:18;6883:40;6905:17;:6;:15;:17::i;:::-;6883:14:::0;;:21:::1;:40::i;:::-;6862:61;;7164:9;7150:10;:23;7146:251;;7220:14;:18:::0;;;::::1;::::0;;7237:1:::1;7205:12;:33:::0;;;7237:1;-1:-1:-1;7146:251:117::1;;;7300:88;7312:54;7344:21;:10;:19;:21::i;:::-;7313:22;7325:10:::0;7313:9;:22:::1;:::i;:::-;7312:31:::0;::::1;:54::i;:::-;7300:86;:88::i;:::-;7283:14;:105:::0;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;7146:251:117::1;6710:693;;6617:786;7423:14;7413:6;:24;7409:206;;;7447:16;::::0;::::1;7481:1;7447:16:::0;;;:10:::1;:16;::::0;;;;;;;:35;;::::1;;::::0;;7490:11:::1;:17:::0;;;;;:21;;;::::1;::::0;;7409:206:::1;;;7565:17;::::0;::::1;;::::0;;;:11:::1;:17;::::0;;;;:43;;;::::1;7592:15;7565:43;;;::::0;;7409:206:::1;7651:21;:47:::0;;;::::1;::::0;7682:15:::1;7651:47;;;;::::0;;7709:24;;::::1;7705:660;;;7743:20;7766:24;7784:6:::0;7766:15;:24:::1;:::i;:::-;7743:47;;7798:41;7804:4;7810:12;7824:14;7798:5;:41::i;:::-;7852:40;::::0;2631:25:124;;;7852:40:117::1;::::0;::::1;::::0;7869:1:::1;::::0;7852:40:::1;::::0;2619:2:124;2604:18;7852:40:117::1;;;;;;;7905:182;::::0;;12304:25:124;;;12360:2;12345:18;;12338:34;;;12388:18;;;12381:34;;;12446:2;12431:18;;12424:34;;;12489:3;12474:19;;12467:35;;;12533:3;12518:19;;12511:35;;;7905:182:117::1;::::0;::::1;::::0;;;::::1;::::0;12291:3:124;12276:19;7905:182:117::1;;;;;;;7735:359;7705:660;;;8108:20;8131:24;8140:15:::0;8131:6;:24:::1;:::i;:::-;8108:47;;8163:41;8169:4;8175:12;8189:14;8163:5;:41::i;:::-;8217:40;::::0;2631:25:124;;;8240:1:117::1;::::0;8217:40:::1;::::0;::::1;::::0;::::1;::::0;2619:2:124;2604:18;8217:40:117::1;;;;;;;8270:88;::::0;;12816:25:124;;;12872:2;12857:18;;12850:34;;;12900:18;;;12893:34;;;12958:2;12943:18;;12936:34;;;13001:3;12986:19;;12979:35;;;8270:88:117::1;::::0;::::1;::::0;::::1;::::0;12803:3:124;12788:19;8270:88:117::1;;;;;;;8100:265;7705:660;-1:-1:-1::0;8379:10:117;-1:-1:-1;8391:17:117;-1:-1:-1;;;;1552:1:121::1;5927:2487:117::0;;;;;:::o;4149:1739::-;4291:4;;;1488:29:121;1512:4;1488:29;678:10:4;1488:29:121;;;1519:26;;;;;;;;;;;;;;;;;1480:66;;;;;;;;;;;;;;:::i;:::-;;4321:25:117::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4321:25:117::1;4365:10;4357:18;;:4;:18;;;4353:89;;4385:50;4410:10;4422:4;4428:6;4385:24;:50::i;:::-;4451:22;4475:23:::0;4502:37:::1;4528:10;4502:25;:37::i;:::-;4448:91;;;;;4568:13;:11;:13::i;:::-;4546:35:::0;;;4615:14:::1;::::0;::::1;;4587:25;::::0;::::1;:42:::0;4668:28:::1;::::0;4690:6;;4668:28:::1;:::i;:::-;4653:12;:43:::0;;;4635:15:::1;::::0;::::1;:61:::0;4722:17:::1;:6:::0;:15:::1;:17::i;:::-;4703:16;::::0;;::::1;:36:::0;;;;4771:22:::1;::::0;::::1;;::::0;;;:10:::1;:22;::::0;;:37;;;::::1;;;4746:22;::::0;::::1;:62:::0;4836:141:::1;4940:36;4941:23;4958:6:::0;4941:14;:23:::1;:::i;:::-;4940:34;:36::i;:::-;4902:16;::::0;::::1;::::0;:29:::1;::::0;4926:4;4902:23:::1;:29::i;:::-;4837:56;4867:25;:14;:23;:25::i;:::-;4837:22;::::0;::::1;::::0;;:29:::1;:56::i;:::-;:94;;;;:::i;4836:141::-;4814:19;::::0;::::1;:163:::0;;;5024:31:::1;::::0;:29:::1;:31::i;:::-;4984:22;::::0;::::1;;::::0;;;:10:::1;:22;::::0;;;;;;;:71;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;;5117:11:::1;:23:::0;;;;;:49;;;::::1;5150:15;5117:49;;::::0;;::::1;::::0;;;5093:21:::1;:73:::0;;;::::1;::::0;;;::::1;;::::0;;;5390:15;::::1;::::0;5268:167:::1;::::0;5276:141:::1;::::0;5390:26:::1;::::0;:24:::1;:26::i;:::-;5364:16;::::0;::::1;::::0;5352:29:::1;::::0;:4;;:11:::1;:29::i;:::-;5277:64;5310:30;:4;:19;;;:28;:30::i;:::-;5277:25;::::0;::::1;::::0;;:32:::1;:64::i;5268:167::-;5251:14;:184:::0;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;5223:25:::1;::::0;::::1;:212:::0;-1:-1:-1;5465:24:117::1;5474:15:::0;5465:6;:24:::1;:::i;:::-;5442:47;;5495:52;5501:10;5513:12;5527:4;:19;;;5495:5;:52::i;:::-;5559:46;::::0;2631:25:124;;;5559:46:117::1;::::0;::::1;::::0;5576:1:::1;::::0;5559:46:::1;::::0;2619:2:124;2604:18;5559:46:117::1;;;;;;;5723:19;::::0;;::::1;::::0;5750:25:::1;::::0;;::::1;::::0;5783:15:::1;::::0;;::::1;::::0;5616:188:::1;::::0;;12304:25:124;;;12345:18;;;12338:34;;;12388:18;;12381:34;;;12446:2;12431:18;;12424:34;;;;12474:19;;;12467:35;12518:19;;12511:35;5616:188:117::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;12291:3:124;12276:19;5616:188:117::1;;;;;;;-1:-1:-1::0;;5840:15:117::1;::::0;::::1;::::0;5857:25:::1;::::0;;::::1;::::0;5819:19;;;5840:15;;-1:-1:-1;5857:25:117;-1:-1:-1;4149:1739:117;-1:-1:-1;;;;;4149:1739:117:o;1237:142:119:-;1323:51;678:10:4;1356:9:119;1367:6;1323:18;:51::i;:::-;1237:142;;:::o;1997:803:117:-;1408:3;1217:12:87;;;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;13227:2:124;1202:146:87;;;13209:21:124;13266:2;13246:18;;;13239:30;13305:34;13285:18;;;13278:62;13376:16;13356:18;;;13349:44;13410:19;;1202:146:87;13025:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2318:4:117::1;2298:24;;:16;:24;;;2324:34;;;;;;;;;;;;;;;;::::0;2290:69:::1;;;;;;;;;;;;;;:::i;:::-;;2365:23;2374:13;2365:8;:23::i;:::-;2394:27;2405:15;2394:10;:27::i;:::-;7979:9:121::0;:23;;2465:16:117::1;:34:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2505:44;::::1;2465:34;2505:44;::::0;;;;7979:23:121;;;2505:44:117;::::1;::::0;;2575:27:::1;:25;:27::i;:::-;2556:16;:46;;;;2664:4;2614:181;;2633:15;2614:181;;;2685:20;2714:17;2739:13;2760:15;2783:6;;2614:181;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1997:803:117;;;;;;;;:::o;3938:139:121:-;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;4304:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;4277:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:121::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;9449:178:117:-;9559:14;;9517:7;;;;9559:14;;9587:25;9559:14;9587:16;:25::i;:::-;9579:43;9614:7;;-1:-1:-1;9449:178:117;-1:-1:-1;9449:178:117:o;2749:233:119:-;2846:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;:48;;;2952:16;;2905:72;;2631:25:124;;;2952:16:119;;;2846:39;;:28;2905:72;;2604:18:124;2905:72:119;;;;;;;2749:233;;;:::o;10454:363:117:-;10520:7;10535:23;10561:19;3376:12:121;;;3293:100;10561:19:117;10535:45;-1:-1:-1;10591:20:117;10587:49;;-1:-1:-1;10628:1:117;;10454:363;-1:-1:-1;;10454:363:117:o;10587:49::-;10642:25;10670:87;10715:7;10730:21;;;;;;;;;;;10670:37;:87::i;:::-;10642:115;-1:-1:-1;10771:41:117;:15;10642:115;10771:22;:41::i;:::-;10764:48;10454:363;-1:-1:-1;;;;10454:363:117:o;1475:298:120:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;15207:25:124;;;;15248:18;;;15241:34;;;;1674:26:120;15291:18:124;;;15284:34;1712:13:120;15334:18:124;;;15327:34;1745:4:120;15377:19:124;;;15370:84;15179:19;;1582:178:120;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;3142:212:105:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;:::-;3271:78;3142:212;-1:-1:-1;;;3142:212:105:o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;8712:431:117:-;8792:7;8801;8810;8825:32;8860:21;8876:4;3518:19:121;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;8860:21:117;8825:56;-1:-1:-1;8892:29:117;8888:66;;8939:1;8942;8945;8931:16;;;;;;;;;8888:66;8960:27;8990:15;9000:4;8990:9;:15::i;:::-;8960:45;-1:-1:-1;9027:24:117;8960:45;9086:46;9027:24;8960:45;9086:46;:::i;:::-;9012:126;;;;;;;;8712:431;;;;;;:::o;3901:247:107:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;2840:322::-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;15667:2:124;1635:78:12;;;15649:21:124;15706:2;15686:18;;;15679:30;15745:34;15725:18;;;15718:62;15816:9;15796:18;;;15789:37;15843:19;;1635:78:12;15465:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;11051:407:117:-;11138:18;11159;:6;:16;:18::i;:::-;11211:19;;;11183:25;11211:19;;;:10;:19;;;;;:27;11138:39;;-1:-1:-1;11211:27:117;;11274:30;11138:39;11211:27;11274:30;:::i;:::-;11244:19;;;;;;;;:10;:19;;;;;:60;;;;;;;;;;;;;;;;11323:21;;11244:60;11323:21;;;11315:44;11311:143;;11369:21;;:78;;;;;:21;16351:55:124;;;11369:78:117;;;16333:74:124;16423:18;;;16416:34;;;16498;16486:47;;16466:18;;;16459:75;11369:21:117;;;;;;;;:34;;16306:18:124;;11369:78:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11311:143;11132:326;;11051:407;;;:::o;11687:::-;11774:18;11795;:6;:16;:18::i;:::-;11847:19;;;11819:25;11847:19;;;:10;:19;;;;;:27;11774:39;;-1:-1:-1;11847:27:117;;11910:30;11774:39;11847:27;11910:30;:::i;3288:330:119:-;3414:28;;;;3391:20;3414:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;3456:6;;3414:48;:::i;:::-;3469:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;3582:16;;3535:78;;3391:71;;-1:-1:-1;3582:16:119;;;3535:78;;;;3391:71;2631:25:124;;2619:2;2604:18;;2485:177;3535:78:119;;;;;;;;3385:233;3288:330;;;:::o;7513:76:121:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;12127:96:117:-;12184:13;12212:6;:4;:6::i;1780:972:105:-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:105;2038:50;;704:4:107;2060:21:105;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:105;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:105;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:105;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:105;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:105;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:107;2674:48:105;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:105:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:124;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:124:o;1585:156::-;1651:20;;1711:4;1700:16;;1690:27;;1680:55;;1731:1;1728;1721:12;1746:734;1857:6;1865;1873;1881;1889;1897;1905;1958:3;1946:9;1937:7;1933:23;1929:33;1926:53;;;1975:1;1972;1965:12;1926:53;2014:9;2001:23;2033:31;2058:5;2033:31;:::i;:::-;2083:5;-1:-1:-1;2140:2:124;2125:18;;2112:32;2153:33;2112:32;2153:33;:::i;:::-;2205:7;-1:-1:-1;2259:2:124;2244:18;;2231:32;;-1:-1:-1;2310:2:124;2295:18;;2282:32;;-1:-1:-1;2333:37:124;2365:3;2350:19;;2333:37;:::i;:::-;2323:47;;2417:3;2406:9;2402:19;2389:33;2379:43;;2469:3;2458:9;2454:19;2441:33;2431:43;;1746:734;;;;;;;;;;:::o;2667:456::-;2744:6;2752;2760;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2868:9;2855:23;2887:31;2912:5;2887:31;:::i;:::-;2937:5;-1:-1:-1;2994:2:124;2979:18;;2966:32;3007:33;2966:32;3007:33;:::i;:::-;2667:456;;3059:7;;-1:-1:-1;;;3113:2:124;3098:18;;;;3085:32;;2667:456::o;3499:388::-;3567:6;3575;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3683:9;3670:23;3702:31;3727:5;3702:31;:::i;:::-;3752:5;-1:-1:-1;3809:2:124;3794:18;;3781:32;3822:33;3781:32;3822:33;:::i;:::-;3874:7;3864:17;;;3499:388;;;;;:::o;3892:247::-;3951:6;4004:2;3992:9;3983:7;3979:23;3975:32;3972:52;;;4020:1;4017;4010:12;3972:52;4059:9;4046:23;4078:31;4103:5;4078:31;:::i;5973:525::-;6059:6;6067;6075;6083;6136:3;6124:9;6115:7;6111:23;6107:33;6104:53;;;6153:1;6150;6143:12;6104:53;6192:9;6179:23;6211:31;6236:5;6211:31;:::i;:::-;6261:5;-1:-1:-1;6318:2:124;6303:18;;6290:32;6331:33;6290:32;6331:33;:::i;:::-;5973:525;;6383:7;;-1:-1:-1;;;;6437:2:124;6422:18;;6409:32;;6488:2;6473:18;6460:32;;5973:525::o;6837:184::-;6889:77;6886:1;6879:88;6986:4;6983:1;6976:15;7010:4;7007:1;7000:15;7026:778;7069:5;7122:3;7115:4;7107:6;7103:17;7099:27;7089:55;;7140:1;7137;7130:12;7089:55;7176:6;7163:20;7202:18;7239:2;7235;7232:10;7229:36;;;7245:18;;:::i;:::-;7379:2;7373:9;7441:4;7433:13;;7284:66;7429:22;;;7453:2;7425:31;7421:40;7409:53;;;7477:18;;;7497:22;;;7474:46;7471:72;;;7523:18;;:::i;:::-;7563:10;7559:2;7552:22;7598:2;7590:6;7583:18;7644:3;7637:4;7632:2;7624:6;7620:15;7616:26;7613:35;7610:55;;;7661:1;7658;7651:12;7610:55;7725:2;7718:4;7710:6;7706:17;7699:4;7691:6;7687:17;7674:54;7772:1;7765:4;7760:2;7752:6;7748:15;7744:26;7737:37;7792:6;7783:15;;;;;;7026:778;;;;:::o;7809:347::-;7860:8;7870:6;7924:3;7917:4;7909:6;7905:17;7901:27;7891:55;;7942:1;7939;7932:12;7891:55;-1:-1:-1;7965:20:124;;8008:18;7997:30;;7994:50;;;8040:1;8037;8030:12;7994:50;8077:4;8069:6;8065:17;8053:29;;8129:3;8122:4;8113:6;8105;8101:19;8097:30;8094:39;8091:59;;;8146:1;8143;8136:12;8161:1302;8351:6;8359;8367;8375;8383;8391;8399;8407;8460:3;8448:9;8439:7;8435:23;8431:33;8428:53;;;8477:1;8474;8467:12;8428:53;8516:9;8503:23;8535:31;8560:5;8535:31;:::i;:::-;8585:5;-1:-1:-1;8642:2:124;8627:18;;8614:32;8655:33;8614:32;8655:33;:::i;:::-;8707:7;-1:-1:-1;8733:38:124;8767:2;8752:18;;8733:38;:::i;:::-;8723:48;;8790:36;8822:2;8811:9;8807:18;8790:36;:::i;:::-;8780:46;;8877:3;8866:9;8862:19;8849:33;8901:18;8942:2;8934:6;8931:14;8928:34;;;8958:1;8955;8948:12;8928:34;8981:50;9023:7;9014:6;9003:9;8999:22;8981:50;:::i;:::-;8971:60;;9084:3;9073:9;9069:19;9056:33;9040:49;;9114:2;9104:8;9101:16;9098:36;;;9130:1;9127;9120:12;9098:36;9153:52;9197:7;9186:8;9175:9;9171:24;9153:52;:::i;:::-;9143:62;;9258:3;9247:9;9243:19;9230:33;9214:49;;9288:2;9278:8;9275:16;9272:36;;;9304:1;9301;9294:12;9272:36;;9343:60;9395:7;9384:8;9373:9;9369:24;9343:60;:::i;:::-;8161:1302;;;;-1:-1:-1;8161:1302:124;;-1:-1:-1;8161:1302:124;;;;;;9422:8;-1:-1:-1;;;8161:1302:124:o;9754:437::-;9833:1;9829:12;;;;9876;;;9897:61;;9951:4;9943:6;9939:17;9929:27;;9897:61;10004:2;9996:6;9993:14;9973:18;9970:38;9967:218;;;10041:77;10038:1;10031:88;10142:4;10139:1;10132:15;10170:4;10167:1;10160:15;9967:218;;9754:437;;;:::o;11565:184::-;11617:77;11614:1;11607:88;11714:4;11711:1;11704:15;11738:4;11735:1;11728:15;11754:128;11794:3;11825:1;11821:6;11818:1;11815:13;11812:39;;;11831:18;;:::i;:::-;-1:-1:-1;11867:9:124;;11754:128::o;11887:125::-;11927:4;11955:1;11952;11949:8;11946:34;;;11960:18;;:::i;:::-;-1:-1:-1;11997:9:124;;11887:125::o;13440:965::-;13757:42;13749:6;13745:55;13734:9;13727:74;13849:4;13841:6;13837:17;13832:2;13821:9;13817:18;13810:45;13891:3;13886:2;13875:9;13871:18;13864:31;13708:4;13918:46;13959:3;13948:9;13944:19;13936:6;13918:46;:::i;:::-;14012:9;14004:6;14000:22;13995:2;13984:9;13980:18;13973:50;14046:33;14072:6;14064;14046:33;:::i;:::-;14032:47;;14128:9;14120:6;14116:22;14110:3;14099:9;14095:19;14088:51;14163:6;14155;14148:22;14217:6;14209;14204:2;14196:6;14192:15;14179:45;14270:1;14265:2;14256:6;14248;14244:19;14240:28;14233:39;14396:2;14326:66;14321:2;14313:6;14309:15;14305:88;14297:6;14293:101;14289:110;14281:118;;;13440:965;;;;;;;;;:::o;14410:251::-;14480:6;14533:2;14521:9;14512:7;14508:23;14504:32;14501:52;;;14549:1;14546;14539:12;14501:52;14581:9;14575:16;14600:31;14625:5;14600:31;:::i;14666:277::-;14733:6;14786:2;14774:9;14765:7;14761:23;14757:32;14754:52;;;14802:1;14799;14792:12;14754:52;14834:9;14828:16;14887:5;14880:13;14873:21;14866:5;14863:32;14853:60;;14909:1;14906;14899:12;15873:253;15913:3;15941:34;16002:2;15999:1;15995:10;16032:2;16029:1;16025:10;16063:3;16059:2;16055:12;16050:3;16047:21;16044:47;;;16071:18;;:::i;:::-;16107:13;;15873:253;-1:-1:-1;;;;15873:253:124:o;16545:246::-;16585:4;16614:34;16698:10;;;;16668;;16720:12;;;16717:38;;;16735:18;;:::i;:::-;16772:13;;16545:246;-1:-1:-1;;;16545:246:124:o;16796:184::-;16848:77;16845:1;16838:88;16945:4;16942:1;16935:15;16969:4;16966:1;16959:15;16985:228;17025:7;17151:1;17083:66;17079:74;17076:1;17073:81;17068:1;17061:9;17054:17;17050:105;17047:131;;;17158:18;;:::i;:::-;-1:-1:-1;17198:9:124;;16985:228::o;17218:274::-;17258:1;17284;17274:189;;17319:77;17316:1;17309:88;17420:4;17417:1;17410:15;17448:4;17445:1;17438:15;17274:189;-1:-1:-1;17477:9:124;;17218:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"2139800","executionCost":"infinite","totalCost":"infinite"},"external":{"DEBT_TOKEN_REVISION()":"306","DELEGATION_WITH_SIG_TYPEHASH()":"283","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","POOL()":"infinite","UNDERLYING_ASSET_ADDRESS()":"2374","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","approveDelegation(address,uint256)":"26966","balanceOf(address)":"infinite","borrowAllowance(address,address)":"infinite","burn(address,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"infinite","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","getAverageStableRate()":"2344","getIncentivesController()":"2430","getSupplyData()":"infinite","getTotalSupplyAndAvgRate()":"infinite","getTotalSupplyLastUpdated()":"2407","getUserLastUpdated(address)":"2611","getUserStableRate(address)":"2590","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2618","principalBalanceOf(address)":"2602","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"_EIP712BaseId()":"infinite","_burn(address,uint256,uint256)":"infinite","_calcTotalSupply(uint256)":"infinite","_calculateBalanceIncrease(address)":"infinite","_mint(address,uint256,uint256)":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"DEBT_TOKEN_REVISION()":"b9a7b622","DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","POOL()":"7535d246","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveDelegation(address,uint256)":"c04a8a10","balanceOf(address)":"70a08231","borrowAllowance(address,address)":"6bd76d24","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","getAverageStableRate()":"90f6fcf2","getIncentivesController()":"75d26413","getSupplyData()":"79774338","getTotalSupplyAndAvgRate()":"f731e9be","getTotalSupplyLastUpdated()":"e7484890","getUserLastUpdated(address)":"79ce6b8c","getUserStableRate(address)":"e78c9b3b","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","name()":"06fdde03","nonces(address)":"7ecebe00","principalBalanceOf(address)":"c634dfaa","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"DEBT_TOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"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\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAverageStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyAndAvgRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"principalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Transfer and approve functionalities are disabled since its a non-transferable token\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"burn(address,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned\",\"params\":{\"amount\":\"The amount of debt tokens getting burned\",\"from\":\"The address from which the debt will be burned\"},\"returns\":{\"_0\":\"The total stable debt\",\"_1\":\"The average stable borrow rate\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"getAverageStableRate()\":{\"returns\":{\"_0\":\"The average stable rate\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getSupplyData()\":{\"returns\":{\"_0\":\"The principal\",\"_1\":\"The total supply\",\"_2\":\"The average stable rate\",\"_3\":\"The timestamp of the last update\"}},\"getTotalSupplyAndAvgRate()\":{\"returns\":{\"_0\":\"The total supply\",\"_1\":\"The average rate\"}},\"getTotalSupplyLastUpdated()\":{\"returns\":{\"_0\":\"The timestamp\"}},\"getUserLastUpdated(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The timestamp\"}},\"getUserStableRate(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The stable rate of the user\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt\",\"params\":{\"amount\":\"The amount of debt tokens to mint\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"rate\":\"The rate of the debt being minted\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if it is the first borrow, false otherwise\",\"_1\":\"The total stable debt\",\"_2\":\"The average stable borrow rate\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}},\"principalBalanceOf(address)\":{\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.\"}},\"title\":\"StableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"burn(address,uint256)\":{\"notice\":\"Burns debt of `user`\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"getAverageStableRate()\":{\"notice\":\"Returns the average rate of all the stable rate loans.\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getSupplyData()\":{\"notice\":\"Returns the principal, the total supply, the average stable rate and the timestamp for the last update\"},\"getTotalSupplyAndAvgRate()\":{\"notice\":\"Returns the total supply and the average stable rate\"},\"getTotalSupplyLastUpdated()\":{\"notice\":\"Returns the timestamp of the last update of the total supply\"},\"getUserLastUpdated(address)\":{\"notice\":\"Returns the timestamp of the last update of the user\"},\"getUserStableRate(address)\":{\"notice\":\"Returns the stable rate of the user debt\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address.\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"},\"principalBalanceOf(address)\":{\"notice\":\"Returns the principal debt balance of the user\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Implements a stable debt token to track the borrowing positions of users at stable rate mode\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/StableDebtToken.sol\":\"StableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/StableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {MathUtils} from '../libraries/math/MathUtils.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\\nimport {IStableDebtToken} from '../../interfaces/IStableDebtToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title StableDebtToken\\n * @author Aave\\n * @notice Implements a stable debt token to track the borrowing positions of users\\n * at stable rate mode\\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\\n */\\ncontract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\\n\\n  // Map of users address and the timestamp of their last update (userAddress => lastUpdateTimestamp)\\n  mapping(address => uint40) internal _timestamps;\\n\\n  uint128 internal _avgStableRate;\\n\\n  // Timestamp of the last update of the total supply\\n  uint40 internal _totalSupplyTimestamp;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) DebtTokenBase() IncentivizedERC20(pool, 'STABLE_DEBT_TOKEN_IMPL', 'STABLE_DEBT_TOKEN_IMPL', 0) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableDebtToken\\n  function initialize(\\n    IPool initializingPool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(debtTokenName);\\n    _setSymbol(debtTokenSymbol);\\n    _setDecimals(debtTokenDecimals);\\n\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      address(incentivesController),\\n      debtTokenDecimals,\\n      debtTokenName,\\n      debtTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return DEBT_TOKEN_REVISION;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getAverageStableRate() external view virtual override returns (uint256) {\\n    return _avgStableRate;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getUserLastUpdated(address user) external view virtual override returns (uint40) {\\n    return _timestamps[user];\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getUserStableRate(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    uint256 accountBalance = super.balanceOf(account);\\n    uint256 stableRate = _userState[account].additionalData;\\n    if (accountBalance == 0) {\\n      return 0;\\n    }\\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\\n      stableRate,\\n      _timestamps[account]\\n    );\\n    return accountBalance.rayMul(cumulatedInterest);\\n  }\\n\\n  struct MintLocalVars {\\n    uint256 previousSupply;\\n    uint256 nextSupply;\\n    uint256 amountInRay;\\n    uint256 currentStableRate;\\n    uint256 nextStableRate;\\n    uint256 currentAvgStableRate;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external virtual override onlyPool returns (bool, uint256, uint256) {\\n    MintLocalVars memory vars;\\n\\n    if (user != onBehalfOf) {\\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\\n    }\\n\\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(onBehalfOf);\\n\\n    vars.previousSupply = totalSupply();\\n    vars.currentAvgStableRate = _avgStableRate;\\n    vars.nextSupply = _totalSupply = vars.previousSupply + amount;\\n\\n    vars.amountInRay = amount.wadToRay();\\n\\n    vars.currentStableRate = _userState[onBehalfOf].additionalData;\\n    vars.nextStableRate = (vars.currentStableRate.rayMul(currentBalance.wadToRay()) +\\n      vars.amountInRay.rayMul(rate)).rayDiv((currentBalance + amount).wadToRay());\\n\\n    _userState[onBehalfOf].additionalData = vars.nextStableRate.toUint128();\\n\\n    //solium-disable-next-line\\n    _totalSupplyTimestamp = _timestamps[onBehalfOf] = uint40(block.timestamp);\\n\\n    // Calculates the updated average stable rate\\n    vars.currentAvgStableRate = _avgStableRate = (\\n      (vars.currentAvgStableRate.rayMul(vars.previousSupply.wadToRay()) +\\n        rate.rayMul(vars.amountInRay)).rayDiv(vars.nextSupply.wadToRay())\\n    ).toUint128();\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    _mint(onBehalfOf, amountToMint, vars.previousSupply);\\n\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(\\n      user,\\n      onBehalfOf,\\n      amountToMint,\\n      currentBalance,\\n      balanceIncrease,\\n      vars.nextStableRate,\\n      vars.currentAvgStableRate,\\n      vars.nextSupply\\n    );\\n\\n    return (currentBalance == 0, vars.nextSupply, vars.currentAvgStableRate);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function burn(\\n    address from,\\n    uint256 amount\\n  ) external virtual override onlyPool returns (uint256, uint256) {\\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(from);\\n\\n    uint256 previousSupply = totalSupply();\\n    uint256 nextAvgStableRate = 0;\\n    uint256 nextSupply = 0;\\n    uint256 userStableRate = _userState[from].additionalData;\\n\\n    // Since the total supply and each single user debt accrue separately,\\n    // there might be accumulation errors so that the last borrower repaying\\n    // might actually try to repay more than the available debt supply.\\n    // In this case we simply set the total supply and the avg stable rate to 0\\n    if (previousSupply <= amount) {\\n      _avgStableRate = 0;\\n      _totalSupply = 0;\\n    } else {\\n      nextSupply = _totalSupply = previousSupply - amount;\\n      uint256 firstTerm = uint256(_avgStableRate).rayMul(previousSupply.wadToRay());\\n      uint256 secondTerm = userStableRate.rayMul(amount.wadToRay());\\n\\n      // For the same reason described above, when the last user is repaying it might\\n      // happen that user rate * user balance > avg rate * total supply. In that case,\\n      // we simply set the avg rate to 0\\n      if (secondTerm >= firstTerm) {\\n        nextAvgStableRate = _totalSupply = _avgStableRate = 0;\\n      } else {\\n        nextAvgStableRate = _avgStableRate = (\\n          (firstTerm - secondTerm).rayDiv(nextSupply.wadToRay())\\n        ).toUint128();\\n      }\\n    }\\n\\n    if (amount == currentBalance) {\\n      _userState[from].additionalData = 0;\\n      _timestamps[from] = 0;\\n    } else {\\n      //solium-disable-next-line\\n      _timestamps[from] = uint40(block.timestamp);\\n    }\\n    //solium-disable-next-line\\n    _totalSupplyTimestamp = uint40(block.timestamp);\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      _mint(from, amountToMint, previousSupply);\\n      emit Transfer(address(0), from, amountToMint);\\n      emit Mint(\\n        from,\\n        from,\\n        amountToMint,\\n        currentBalance,\\n        balanceIncrease,\\n        userStableRate,\\n        nextAvgStableRate,\\n        nextSupply\\n      );\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      _burn(from, amountToBurn, previousSupply);\\n      emit Transfer(from, address(0), amountToBurn);\\n      emit Burn(from, amountToBurn, currentBalance, balanceIncrease, nextAvgStableRate, nextSupply);\\n    }\\n\\n    return (nextSupply, nextAvgStableRate);\\n  }\\n\\n  /**\\n   * @notice Calculates the increase in balance since the last user interaction\\n   * @param user The address of the user for which the interest is being accumulated\\n   * @return The previous principal balance\\n   * @return The new principal balance\\n   * @return The balance increase\\n   */\\n  function _calculateBalanceIncrease(\\n    address user\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 previousPrincipalBalance = super.balanceOf(user);\\n\\n    if (previousPrincipalBalance == 0) {\\n      return (0, 0, 0);\\n    }\\n\\n    uint256 newPrincipalBalance = balanceOf(user);\\n\\n    return (\\n      previousPrincipalBalance,\\n      newPrincipalBalance,\\n      newPrincipalBalance - previousPrincipalBalance\\n    );\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getSupplyData() external view override returns (uint256, uint256, uint256, uint40) {\\n    uint256 avgRate = _avgStableRate;\\n    return (super.totalSupply(), _calcTotalSupply(avgRate), avgRate, _totalSupplyTimestamp);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getTotalSupplyAndAvgRate() external view override returns (uint256, uint256) {\\n    uint256 avgRate = _avgStableRate;\\n    return (_calcTotalSupply(avgRate), avgRate);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _calcTotalSupply(_avgStableRate);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getTotalSupplyLastUpdated() external view override returns (uint40) {\\n    return _totalSupplyTimestamp;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function principalBalanceOf(address user) external view virtual override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /**\\n   * @notice Calculates the total supply\\n   * @param avgRate The average rate at which the total supply increases\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function _calcTotalSupply(uint256 avgRate) internal view returns (uint256) {\\n    uint256 principalSupply = super.totalSupply();\\n\\n    if (principalSupply == 0) {\\n      return 0;\\n    }\\n\\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\\n      avgRate,\\n      _totalSupplyTimestamp\\n    );\\n\\n    return principalSupply.rayMul(cumulatedInterest);\\n  }\\n\\n  /**\\n   * @notice Mints stable debt tokens to a user\\n   * @param account The account receiving the debt tokens\\n   * @param amount The amount being minted\\n   * @param oldTotalSupply The total supply before the minting event\\n   */\\n  function _mint(address account, uint256 amount, uint256 oldTotalSupply) internal {\\n    uint128 castAmount = amount.toUint128();\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + castAmount;\\n\\n    if (address(_incentivesController) != address(0)) {\\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns stable debt tokens of a user\\n   * @param account The user getting his debt burned\\n   * @param amount The amount being burned\\n   * @param oldTotalSupply The total supply before the burning event\\n   */\\n  function _burn(address account, uint256 amount, uint256 oldTotalSupply) internal {\\n    uint128 castAmount = amount.toUint128();\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - castAmount;\\n\\n    if (address(_incentivesController) != address(0)) {\\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /**\\n   * @dev Being non transferrable, the debt token does not implement any of the\\n   * standard ERC20 functions for transfer and allowance.\\n   */\\n  function transfer(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function allowance(address, address) external view virtual override returns (uint256) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function approve(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n}\\n\",\"keccak256\":\"0xe27a3879a8d414bbe000b6e392458abc521550db3649b4bf63f9ba23fe42b180\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30691,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":30468,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30475,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"},{"astId":30857,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_userState","offset":0,"slot":"56","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_allowances","offset":0,"slot":"57","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_totalSupply","offset":0,"slot":"58","type":"t_uint256"},{"astId":30867,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_name","offset":0,"slot":"59","type":"t_string_storage"},{"astId":30869,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_symbol","offset":0,"slot":"60","type":"t_string_storage"},{"astId":30871,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_decimals","offset":0,"slot":"61","type":"t_uint8"},{"astId":30874,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_incentivesController","offset":1,"slot":"61","type":"t_contract(IAaveIncentivesController)4000"},{"astId":29032,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_timestamps","offset":0,"slot":"62","type":"t_mapping(t_address,t_uint40)"},{"astId":29034,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_avgStableRate","offset":0,"slot":"63","type":"t_uint128"},{"astId":29036,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_totalSupplyTimestamp","offset":16,"slot":"63","type":"t_uint40"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint40)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint40)","numberOfBytes":"32","value":"t_uint40"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"burn(address,uint256)":{"notice":"Burns debt of `user`"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"getAverageStableRate()":{"notice":"Returns the average rate of all the stable rate loans."},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getSupplyData()":{"notice":"Returns the principal, the total supply, the average stable rate and the timestamp for the last update"},"getTotalSupplyAndAvgRate()":{"notice":"Returns the total supply and the average stable rate"},"getTotalSupplyLastUpdated()":{"notice":"Returns the timestamp of the last update of the total supply"},"getUserLastUpdated(address)":{"notice":"Returns the timestamp of the last update of the user"},"getUserStableRate(address)":{"notice":"Returns the stable rate of the user debt"},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address."},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"},"principalBalanceOf(address)":{"notice":"Returns the principal debt balance of the user"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Implements a stable debt token to track the borrowing positions of users at stable rate mode","version":1}}},"contracts/protocol/tokenization/VariableDebtToken.sol":{"VariableDebtToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"DEBT_TOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Transfer and approve functionalities are disabled since its a non-transferable token","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"burn(address,uint256,uint256)":{"details":"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount getting burned","from":"The address from which the debt will be burned","index":"The variable debt index of the reserve"},"returns":{"_0":"The scaled total debt of the reserve"}},"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of debt being minted","index":"The variable debt index of the reserve","onBehalfOf":"The address receiving the debt tokens","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if the previous balance of the user is 0, false otherwise","_1":"The scaled total debt of the reserve"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance."}},"title":"VariableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_30117":{"entryPoint":null,"id":30117,"parameterSlots":1,"returnSlots":0},"@_30482":{"entryPoint":null,"id":30482,"parameterSlots":0,"returnSlots":0},"@_30705":{"entryPoint":null,"id":30705,"parameterSlots":0,"returnSlots":0},"@_30916":{"entryPoint":null,"id":30916,"parameterSlots":4,"returnSlots":0},"@_31331":{"entryPoint":null,"id":31331,"parameterSlots":4,"returnSlots":0},"@_31495":{"entryPoint":null,"id":31495,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory":{"entryPoint":581,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":620,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":556,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:124","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:124"},"nodeType":"YulFunctionCall","src":"132:12:124"},"nodeType":"YulExpressionStatement","src":"132:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:124"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:124","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:124","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:124"},"nodeType":"YulFunctionCall","src":"111:11:124"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:124","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:124"},"nodeType":"YulFunctionCall","src":"107:19:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:124"},"nodeType":"YulFunctionCall","src":"96:31:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:124"},"nodeType":"YulFunctionCall","src":"86:42:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:124"},"nodeType":"YulFunctionCall","src":"79:50:124"},"nodeType":"YulIf","src":"76:70:124"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:124","type":""}],"src":"14:138:124"},{"body":{"nodeType":"YulBlock","src":"252:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:124"},"nodeType":"YulFunctionCall","src":"300:12:124"},"nodeType":"YulExpressionStatement","src":"300:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:124"},"nodeType":"YulFunctionCall","src":"269:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:124"},"nodeType":"YulFunctionCall","src":"265:32:124"},"nodeType":"YulIf","src":"262:52:124"},{"nodeType":"YulVariableDeclaration","src":"323:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:124"},"nodeType":"YulFunctionCall","src":"336:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:124"},"nodeType":"YulFunctionCall","src":"361:38:124"},"nodeType":"YulExpressionStatement","src":"361:38:124"},{"nodeType":"YulAssignment","src":"408:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:124","type":""}],"src":"157:272:124"},{"body":{"nodeType":"YulBlock","src":"546:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:124"},"nodeType":"YulFunctionCall","src":"594:12:124"},"nodeType":"YulExpressionStatement","src":"594:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:124"},"nodeType":"YulFunctionCall","src":"563:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:124"},"nodeType":"YulFunctionCall","src":"559:32:124"},"nodeType":"YulIf","src":"556:52:124"},{"nodeType":"YulVariableDeclaration","src":"617:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:124"},"nodeType":"YulFunctionCall","src":"630:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:124"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:124"},"nodeType":"YulFunctionCall","src":"655:38:124"},"nodeType":"YulExpressionStatement","src":"655:38:124"},{"nodeType":"YulAssignment","src":"702:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:124","type":""}],"src":"434:289:124"},{"body":{"nodeType":"YulBlock","src":"783:325:124","statements":[{"nodeType":"YulAssignment","src":"793:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:124"},"nodeType":"YulFunctionCall","src":"803:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:124","statements":[{"nodeType":"YulAssignment","src":"903:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:124"},"nodeType":"YulFunctionCall","src":"913:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:124"},"nodeType":"YulFunctionCall","src":"874:26:124"},"nodeType":"YulIf","src":"871:61:124"},{"body":{"nodeType":"YulBlock","src":"991:111:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:124","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:124","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:124","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:124"},"nodeType":"YulFunctionCall","src":"1015:20:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:124"},"nodeType":"YulFunctionCall","src":"1005:31:124"},"nodeType":"YulExpressionStatement","src":"1005:31:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:124"},"nodeType":"YulFunctionCall","src":"1049:15:124"},"nodeType":"YulExpressionStatement","src":"1049:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:124"},"nodeType":"YulFunctionCall","src":"1077:15:124"},"nodeType":"YulExpressionStatement","src":"1077:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:124"},"nodeType":"YulFunctionCall","src":"967:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:124"},"nodeType":"YulFunctionCall","src":"944:38:124"},"nodeType":"YulIf","src":"941:161:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:124","type":""}],"src":"728:380:124"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5282_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b50604051620027be380380620027be833981016040819052620000389162000245565b806040518060400160405280601881526020017f5641524941424c455f444542545f544f4b454e5f494d504c00000000000000008152506040518060400160405280601881526020017f5641524941424c455f444542545f544f4b454e5f494d504c0000000000000000815250600083838383838383834660808181525050836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011c919062000245565b6001600160a01b031660a05282516200013d90603b90602086019062000186565b5081516200015390603c90602085019062000186565b50603d805460ff191660ff9290921691909117905550506001600160a01b031660c05250620002a9975050505050505050565b82805462000194906200026c565b90600052602060002090601f016020900481019282620001b8576000855562000203565b82601f10620001d357805160ff191683800117855562000203565b8280016001018555821562000203579182015b8281111562000203578251825591602001919060010190620001e6565b506200021192915062000215565b5090565b5b8082111562000211576000815560010162000216565b6001600160a01b03811681146200024257600080fd5b50565b6000602082840312156200025857600080fd5b815162000265816200022c565b9392505050565b600181811c908216806200028157607f821691505b60208210811415620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516124bb620003036000396000818161037e01528181610a3901528181610b7f01528181610c4e01528181610e1201528181610f6d015261124d0152600061103901526000610ab801526124bb6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063b9a7b622116100a2578063e075398611610071578063e0753986146104ee578063e655dbd81461054a578063f3bfc7381461055d578063f5298aca1461058457600080fd5b8063b9a7b622146104b2578063c04a8a10146104ba578063c222ec8a146104cd578063dd62ed3e146104e057600080fd5b8063a9059cbb116100de578063a9059cbb146101fd578063b16a19de14610462578063b1bf962d14610480578063b3f1c93d1461048857600080fd5b80637ecebe001461042457806395d89b411461045a578063a457c2d7146101fd57600080fd5b8063313ce5671161017c57806370a082311161014b57806370a08231146103665780637535d2461461037957806375d26413146103c557806378160376146103e857600080fd5b8063313ce567146103035780633644e5151461031857806339509351146101fd5780636bd76d241461032057600080fd5b80630b52d558116101b85780630b52d5581461028257806318160ddd146102975780631da24f3e146102ad57806323b872dd146102f557600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630afbcdc914610220575b600080fd5b6101e7610597565b6040516101f49190611e79565b60405180910390f35b61021061020b366004611ec1565b610629565b60405190151581526020016101f4565b61026d61022e366004611eed565b73ffffffffffffffffffffffffffffffffffffffff16600090815260386020526040902054603a546fffffffffffffffffffffffffffffffff90911691565b604080519283526020830191909152016101f4565b610295610290366004611f1b565b610699565b005b61029f6109ea565b6040519081526020016101f4565b61029f6102bb366004611eed565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61021061020b366004611f89565b603d5460405160ff90911681526020016101f4565b61029f610ab4565b61029f61032e366004611fca565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61029f610374366004611eed565b610aed565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff166103a0565b6101e76040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61029f610432366004611eed565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b6101e7610bf8565b60375473ffffffffffffffffffffffffffffffffffffffff166103a0565b61029f610c07565b61049b610496366004612003565b610c12565b6040805192151583526020830191909152016101f4565b61029f600181565b6102956104c8366004611ec1565b610d1b565b6102956104db36600461216c565b610d2a565b61029f61020b366004611fca565b61029f6104fc366004611eed565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b610295610558366004611eed565b611035565b61029f7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b61029f610592366004612241565b611213565b6060603b80546105a690612276565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290612276565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815260009161069091600401611e79565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881661071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054906107be610ab4565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c001604051602081830303815290604052805190602001206040516020016108769291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156108fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b506109ae8260016122f9565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603460205260409020556109df8989896112d8565b505050505050505050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610aaf917f00000000000000000000000000000000000000000000000000000000000000009091169063386497fd90602401602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190612311565b603a549061134f565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ae5575060355490565b610aaf6113a6565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff1680610b335750600092915050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152610bf1917f0000000000000000000000000000000000000000000000000000000000000000169063386497fd90602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612311565b829061134f565b9392505050565b6060603c80546105a690612276565b6000610aaf603a5490565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610cfa57610cfa85878661146b565b610d068686868661152b565b610d0e610c07565b9150915094509492505050565b610d263383836112d8565b5050565b6001805460ff1680610d3b5750303b155b80610d47575060005481115b610dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610690565b60015460ff16158015610e1057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525090610ecd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b50610ed78661176c565b610ee08561177f565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a1617179055610f656113a6565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051610ff29695949392919061232a565b60405180910390a3801561102957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c691906123ca565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611133573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115791906123e7565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b506112c88460008585611792565b6112d0610c07565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761138457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d1611aaf565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526036602090815260408083209386168352929052908120546114ab908390612409565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19061151d9086815260200190565b60405180910390a450505050565b6000806115388484611ab9565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816115a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161160491849170010000000000000000000000000000000090041661134f565b61160e838761134f565b6116189190612409565b905061162385611af8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905561168b8761168685611af8565b611b9e565b600061169782886122f9565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116f991815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b8051610d2690603b906020840190611d7e565b8051610d2690603c906020840190611d7e565b600061179e8383611ab9565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161180d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161186a91849170010000000000000000000000000000000090041661134f565b611874838661134f565b61187e9190612409565b905061188984611af8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556118f1876118ec85611af8565b611d1a565b848111156119d05760006119058683612409565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196791815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611aa6565b60006119dc8287612409565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a3e91815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909060600160405180910390a3505b50505050505050565b6060610aaf610597565b600081156b033b2e3c9fd0803ce800000060028404190484111715611add57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610690565b5090565b603a54611bbd6fffffffffffffffffffffffffffffffff8316826122f9565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c028382612420565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d546101009004168015611d13576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015611cff57600080fd5b505af11580156109df573d6000803e3d6000fd5b5050505050565b603a54611d396fffffffffffffffffffffffffffffffff831682612409565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c028382612454565b828054611d8a90612276565b90600052602060002090601f016020900481019282611dac5760008555611df2565b82601f10611dc557805160ff1916838001178555611df2565b82800160010185558215611df2579182015b82811115611df2578251825591602001919060010190611dd7565b50611b9a9291505b80821115611b9a5760008155600101611dfa565b6000815180845260005b81811015611e3457602081850181015186830182015201611e18565b81811115611e46576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf16020830184611e0e565b73ffffffffffffffffffffffffffffffffffffffff81168114611eae57600080fd5b50565b8035611ebc81611e8c565b919050565b60008060408385031215611ed457600080fd5b8235611edf81611e8c565b946020939093013593505050565b600060208284031215611eff57600080fd5b8135610bf181611e8c565b803560ff81168114611ebc57600080fd5b600080600080600080600060e0888a031215611f3657600080fd5b8735611f4181611e8c565b96506020880135611f5181611e8c565b95506040880135945060608801359350611f6d60808901611f0a565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215611f9e57600080fd5b8335611fa981611e8c565b92506020840135611fb981611e8c565b929592945050506040919091013590565b60008060408385031215611fdd57600080fd5b8235611fe881611e8c565b91506020830135611ff881611e8c565b809150509250929050565b6000806000806080858703121561201957600080fd5b843561202481611e8c565b9350602085013561203481611e8c565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261208957600080fd5b813567ffffffffffffffff808211156120a4576120a4612049565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156120ea576120ea612049565b8160405283815286602085880101111561210357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f84011261213557600080fd5b50813567ffffffffffffffff81111561214d57600080fd5b60208301915083602082850101111561216557600080fd5b9250929050565b60008060008060008060008060e0898b03121561218857600080fd5b883561219381611e8c565b975060208901356121a381611e8c565b96506121b160408a01611eb1565b95506121bf60608a01611f0a565b9450608089013567ffffffffffffffff808211156121dc57600080fd5b6121e88c838d01612078565b955060a08b01359150808211156121fe57600080fd5b61220a8c838d01612078565b945060c08b013591508082111561222057600080fd5b5061222d8b828c01612123565b999c989b5096995094979396929594505050565b60008060006060848603121561225657600080fd5b833561226181611e8c565b95602085013595506040909401359392505050565b600181811c9082168061228a57607f821691505b602082108114156122c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561230c5761230c6122ca565b500190565b60006020828403121561232357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a06040820152600061236260a0830187611e0e565b82810360608401526123748187611e0e565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b6000602082840312156123dc57600080fd5b8151610bf181611e8c565b6000602082840312156123f957600080fd5b81518015158114610bf157600080fd5b60008282101561241b5761241b6122ca565b500390565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561244b5761244b6122ca565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561247d5761247d6122ca565b03939250505056fea26469706673582212208c26f709abec806abf23a180dc9b2d4a72a1949f588c15cbbd49912617d13a4a64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x27BE CODESIZE SUB DUP1 PUSH3 0x27BE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x245 JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5641524941424C455F444542545F544F4B454E5F494D504C0000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5641524941424C455F444542545F544F4B454E5F494D504C0000000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x11C SWAP2 SWAP1 PUSH3 0x245 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE DUP3 MLOAD PUSH3 0x13D SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x186 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x153 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x186 JUMP JUMPDEST POP PUSH1 0x3D DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x2A9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x194 SWAP1 PUSH3 0x26C JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x1B8 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x203 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1D3 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x203 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x203 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x203 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1E6 JUMP JUMPDEST POP PUSH3 0x211 SWAP3 SWAP2 POP PUSH3 0x215 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x211 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x216 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x265 DUP2 PUSH3 0x22C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x281 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x2A3 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x24BB PUSH3 0x303 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x37E ADD MSTORE DUP2 DUP2 PUSH2 0xA39 ADD MSTORE DUP2 DUP2 PUSH2 0xB7F ADD MSTORE DUP2 DUP2 PUSH2 0xC4E ADD MSTORE DUP2 DUP2 PUSH2 0xE12 ADD MSTORE DUP2 DUP2 PUSH2 0xF6D ADD MSTORE PUSH2 0x124D ADD MSTORE PUSH1 0x0 PUSH2 0x1039 ADD MSTORE PUSH1 0x0 PUSH2 0xAB8 ADD MSTORE PUSH2 0x24BB PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xB9A7B622 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x55D JUMPI DUP1 PUSH4 0xF5298ACA EQ PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x303 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB52D558 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x220 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC1 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x26D PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1B JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x29F PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x2BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xAB4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST PUSH2 0x3A0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x1E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x432 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0xBF8 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xC07 JUMP JUMPDEST PUSH2 0x49B PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x2003 JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC1 JUMP JUMPDEST PUSH2 0xD1B JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x216C JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x29F PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCA JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x558 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH2 0x1035 JUMP JUMPDEST PUSH2 0x29F PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x2241 JUMP JUMPDEST PUSH2 0x1213 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2276 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x2276 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x690 SWAP2 PUSH1 0x4 ADD PUSH2 0x1E79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x71B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x7BE PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x876 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0x9AE DUP3 PUSH1 0x1 PUSH2 0x22F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x9DF DUP10 DUP10 DUP10 PUSH2 0x12D8 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xAAF SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA82 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAA6 SWAP2 SWAP1 PUSH2 0x2311 JUMP JUMPDEST PUSH1 0x3A SLOAD SWAP1 PUSH2 0x134F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAE5 JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAAF PUSH2 0x13A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0xBF1 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBEA SWAP2 SWAP1 PUSH2 0x2311 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x134F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2276 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAAF PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCFA JUMPI PUSH2 0xCFA DUP6 DUP8 DUP7 PUSH2 0x146B JUMP JUMPDEST PUSH2 0xD06 DUP7 DUP7 DUP7 DUP7 PUSH2 0x152B JUMP JUMPDEST PUSH2 0xD0E PUSH2 0xC07 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD26 CALLER DUP4 DUP4 PUSH2 0x12D8 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0xD3B JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0xD47 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xDD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE10 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xECD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0xED7 DUP7 PUSH2 0x176C JUMP JUMPDEST PUSH2 0xEE0 DUP6 PUSH2 0x177F JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0xF65 PUSH2 0x13A6 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0xFF2 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x232A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x1029 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C6 SWAP2 SWAP1 PUSH2 0x23CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1133 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1157 SWAP2 SWAP1 PUSH2 0x23E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x12BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0x12C8 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1792 JUMP JUMPDEST PUSH2 0x12D0 PUSH2 0xC07 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x13D1 PUSH2 0x1AAF JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x14AB SWAP1 DUP4 SWAP1 PUSH2 0x2409 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x151D SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1538 DUP5 DUP5 PUSH2 0x1AB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x15A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1604 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x134F JUMP JUMPDEST PUSH2 0x160E DUP4 DUP8 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x1618 SWAP2 SWAP1 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH2 0x1623 DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x168B DUP8 PUSH2 0x1686 DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x1B9E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1697 DUP3 DUP9 PUSH2 0x22F9 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x16F9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D7E JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D7E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x179E DUP4 DUP4 PUSH2 0x1AB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x180D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x186A SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x134F JUMP JUMPDEST PUSH2 0x1874 DUP4 DUP7 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x187E SWAP2 SWAP1 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH2 0x1889 DUP5 PUSH2 0x1AF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x18F1 DUP8 PUSH2 0x18EC DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x1D1A JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x19D0 JUMPI PUSH1 0x0 PUSH2 0x1905 DUP7 DUP4 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1967 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1AA6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DC DUP3 DUP8 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1A3E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAAF PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1ADD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1B9A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1BBD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x22F9 JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C02 DUP4 DUP3 PUSH2 0x2420 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x1D13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1D39 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x2409 JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C02 DUP4 DUP3 PUSH2 0x2454 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1D8A SWAP1 PUSH2 0x2276 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1DAC JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x1DF2 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1DC5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1DF2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1DF2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1DF2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1DD7 JUMP JUMPDEST POP PUSH2 0x1B9A SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B9A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E34 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1E18 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1E46 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E0E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1EBC DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1ED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1EDF DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1EFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1EBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1F36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1F41 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x1F51 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1F6D PUSH1 0x80 DUP10 ADD PUSH2 0x1F0A JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1F9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FA9 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FB9 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FE8 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1FF8 DUP2 PUSH2 0x1E8C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2019 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2024 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x2034 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2089 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x20A4 JUMPI PUSH2 0x20A4 PUSH2 0x2049 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x20EA JUMPI PUSH2 0x20EA PUSH2 0x2049 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2103 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x2188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x2193 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x21A3 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP7 POP PUSH2 0x21B1 PUSH1 0x40 DUP11 ADD PUSH2 0x1EB1 JUMP JUMPDEST SWAP6 POP PUSH2 0x21BF PUSH1 0x60 DUP11 ADD PUSH2 0x1F0A JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21E8 DUP13 DUP4 DUP14 ADD PUSH2 0x2078 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x21FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x220A DUP13 DUP4 DUP14 ADD PUSH2 0x2078 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x222D DUP12 DUP3 DUP13 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2261 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x228A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x22C4 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x230C JUMPI PUSH2 0x230C PUSH2 0x22CA JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2362 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x1E0E JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2374 DUP2 DUP8 PUSH2 0x1E0E JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x241B JUMPI PUSH2 0x241B PUSH2 0x22CA JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x244B JUMPI PUSH2 0x244B PUSH2 0x22CA JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x247D JUMPI PUSH2 0x247D PUSH2 0x22CA JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0x26 0xF7 MULMOD 0xAB 0xEC DUP1 PUSH11 0xBF23A180DC9B2D4A72A194 SWAP16 PC DUP13 ISZERO 0xCB 0xBD 0x49 SWAP2 0x26 OR 0xD1 GASPRICE 0x4A PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1177:3875:118:-:0;;;928:1:87;886:43;;1471:183:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1550:4;988:195:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1612:1:118;1116:4:123;1122;1128:6;1136:8;817:4:122;823;829:6;837:8;630:13:120;619:24;;;;;;2780:4:121;-1:-1:-1;;;;;2780:23:121;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:121;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:121;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:121;:20;;-1:-1:-1;;2851:20:121;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:121;;;-1:-1:-1;1177:3875:118;;-1:-1:-1;;;;;;;;1177:3875:118;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1177:3875:118;;;-1:-1:-1;1177:3875:118;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:124;-1:-1:-1;;;;;96:31:124;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:124:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;1177:3875:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_TOKEN_REVISION_30101":{"entryPoint":null,"id":30101,"parameterSlots":0,"returnSlots":0},"@DELEGATION_WITH_SIG_TYPEHASH_30473":{"entryPoint":null,"id":30473,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_30723":{"entryPoint":2740,"id":30723,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_30682":{"entryPoint":null,"id":30682,"parameterSlots":0,"returnSlots":0},"@POOL_30880":{"entryPoint":null,"id":30880,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_ASSET_ADDRESS_30440":{"entryPoint":null,"id":30440,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_30331":{"entryPoint":6831,"id":30331,"parameterSlots":0,"returnSlots":1},"@_approveDelegation_30636":{"entryPoint":4824,"id":30636,"parameterSlots":3,"returnSlots":0},"@_burnScaled_31772":{"entryPoint":6034,"id":31772,"parameterSlots":4,"returnSlots":0},"@_burn_31449":{"entryPoint":7450,"id":31449,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_30766":{"entryPoint":5030,"id":30766,"parameterSlots":0,"returnSlots":1},"@_decreaseBorrowAllowance_30672":{"entryPoint":5227,"id":30672,"parameterSlots":3,"returnSlots":0},"@_mintScaled_31654":{"entryPoint":5419,"id":31654,"parameterSlots":4,"returnSlots":1},"@_mint_31390":{"entryPoint":7070,"id":31390,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_31299":{"entryPoint":null,"id":31299,"parameterSlots":1,"returnSlots":0},"@_setName_31277":{"entryPoint":5996,"id":31277,"parameterSlots":1,"returnSlots":0},"@_setSymbol_31288":{"entryPoint":6015,"id":31288,"parameterSlots":1,"returnSlots":0},"@allowance_30364":{"entryPoint":null,"id":30364,"parameterSlots":2,"returnSlots":1},"@approveDelegation_30499":{"entryPoint":3355,"id":30499,"parameterSlots":2,"returnSlots":0},"@approve_30380":{"entryPoint":1577,"id":30380,"parameterSlots":2,"returnSlots":1},"@balanceOf_30232":{"entryPoint":2797,"id":30232,"parameterSlots":1,"returnSlots":1},"@balanceOf_30971":{"entryPoint":null,"id":30971,"parameterSlots":1,"returnSlots":1},"@borrowAllowance_30610":{"entryPoint":null,"id":30610,"parameterSlots":2,"returnSlots":1},"@burn_30302":{"entryPoint":4627,"id":30302,"parameterSlots":3,"returnSlots":1},"@decimals_30946":{"entryPoint":null,"id":30946,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_30430":{"entryPoint":null,"id":30430,"parameterSlots":2,"returnSlots":1},"@delegationWithSig_30592":{"entryPoint":1689,"id":30592,"parameterSlots":7,"returnSlots":0},"@getIncentivesController_30981":{"entryPoint":null,"id":30981,"parameterSlots":0,"returnSlots":1},"@getPreviousIndex_31558":{"entryPoint":null,"id":31558,"parameterSlots":1,"returnSlots":1},"@getRevision_30200":{"entryPoint":null,"id":30200,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_31531":{"entryPoint":null,"id":31531,"parameterSlots":1,"returnSlots":2},"@increaseAllowance_30414":{"entryPoint":null,"id":30414,"parameterSlots":2,"returnSlots":1},"@initialize_30190":{"entryPoint":3370,"id":30190,"parameterSlots":8,"returnSlots":0},"@isConstructor_12745":{"entryPoint":null,"id":12745,"parameterSlots":0,"returnSlots":1},"@mint_30273":{"entryPoint":3090,"id":30273,"parameterSlots":4,"returnSlots":2},"@name_30926":{"entryPoint":1431,"id":30926,"parameterSlots":0,"returnSlots":1},"@nonces_30736":{"entryPoint":null,"id":30736,"parameterSlots":1,"returnSlots":1},"@rayDiv_23792":{"entryPoint":6841,"id":23792,"parameterSlots":2,"returnSlots":1},"@rayMul_23780":{"entryPoint":4943,"id":23780,"parameterSlots":2,"returnSlots":1},"@scaledBalanceOf_31510":{"entryPoint":null,"id":31510,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_31543":{"entryPoint":3079,"id":31543,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_30995":{"entryPoint":4149,"id":30995,"parameterSlots":1,"returnSlots":0},"@symbol_30936":{"entryPoint":3064,"id":30936,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":6904,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_30320":{"entryPoint":2538,"id":30320,"parameterSlots":0,"returnSlots":1},"@totalSupply_30956":{"entryPoint":null,"id":30956,"parameterSlots":0,"returnSlots":1},"@transferFrom_30398":{"entryPoint":null,"id":30398,"parameterSlots":3,"returnSlots":1},"@transfer_30348":{"entryPoint":null,"id":30348,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":7857,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":8483,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_string":{"entryPoint":8312,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":7917,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":9162,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":8138,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":8073,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":8195,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":7963,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":7873,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":8769,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":9191,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr":{"entryPoint":8556,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8977,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint8":{"entryPoint":7946,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":7694,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":9002,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":7801,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":9248,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":8953,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":9300,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9225,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":8822,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":8906,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8265,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7820,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16003:124","statements":[{"nodeType":"YulBlock","src":"6:3:124","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:124","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:124","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:124"},"nodeType":"YulFunctionCall","src":"88:12:124"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:124","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:124"},"nodeType":"YulFunctionCall","src":"109:19:124"},"nodeType":"YulExpressionStatement","src":"109:19:124"},{"nodeType":"YulVariableDeclaration","src":"137:10:124","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:124","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:124","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:124","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:124","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:124"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:124"},"nodeType":"YulFunctionCall","src":"260:11:124"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:124"},"nodeType":"YulFunctionCall","src":"256:20:124"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:124"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:124"},"nodeType":"YulFunctionCall","src":"288:13:124"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:124"},"nodeType":"YulFunctionCall","src":"284:22:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:124"},"nodeType":"YulFunctionCall","src":"278:29:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:124"},"nodeType":"YulFunctionCall","src":"249:59:124"},"nodeType":"YulExpressionStatement","src":"249:59:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:124"},"nodeType":"YulFunctionCall","src":"164:13:124"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:124","statements":[{"nodeType":"YulAssignment","src":"180:17:124","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:124"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:124"},"nodeType":"YulFunctionCall","src":"185:12:124"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:124"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:124","statements":[]},"src":"156:162:124"},{"body":{"nodeType":"YulBlock","src":"352:62:124","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:124"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:124"},"nodeType":"YulFunctionCall","src":"377:16:124"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:124"},"nodeType":"YulFunctionCall","src":"373:27:124"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:124"},"nodeType":"YulFunctionCall","src":"366:38:124"},"nodeType":"YulExpressionStatement","src":"366:38:124"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:124"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:124"},"nodeType":"YulFunctionCall","src":"330:13:124"},"nodeType":"YulIf","src":"327:87:124"},{"nodeType":"YulAssignment","src":"423:116:124","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:124"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:124"},"nodeType":"YulFunctionCall","src":"447:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:124"},"nodeType":"YulFunctionCall","src":"443:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:124"},"nodeType":"YulFunctionCall","src":"434:98:124"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:124"},"nodeType":"YulFunctionCall","src":"430:109:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:124"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:124","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:124","type":""}],"src":"14:531:124"},{"body":{"nodeType":"YulBlock","src":"671:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:124"},"nodeType":"YulFunctionCall","src":"681:21:124"},"nodeType":"YulExpressionStatement","src":"681:21:124"},{"nodeType":"YulAssignment","src":"711:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:124"},"nodeType":"YulFunctionCall","src":"745:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:124"},"nodeType":"YulFunctionCall","src":"719:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:124"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:124","type":""}],"src":"550:220:124"},{"body":{"nodeType":"YulBlock","src":"820:109:124","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:124"},"nodeType":"YulFunctionCall","src":"909:12:124"},"nodeType":"YulExpressionStatement","src":"909:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:124"},"nodeType":"YulFunctionCall","src":"850:54:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:124"},"nodeType":"YulFunctionCall","src":"840:65:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:124"},"nodeType":"YulFunctionCall","src":"833:73:124"},"nodeType":"YulIf","src":"830:93:124"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:124","type":""}],"src":"775:154:124"},{"body":{"nodeType":"YulBlock","src":"983:85:124","statements":[{"nodeType":"YulAssignment","src":"993:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:124"},"nodeType":"YulFunctionCall","src":"1002:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:124"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:124"},"nodeType":"YulFunctionCall","src":"1031:31:124"},"nodeType":"YulExpressionStatement","src":"1031:31:124"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:124","type":""}],"src":"934:134:124"},{"body":{"nodeType":"YulBlock","src":"1160:228:124","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:124"},"nodeType":"YulFunctionCall","src":"1208:12:124"},"nodeType":"YulExpressionStatement","src":"1208:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:124"},"nodeType":"YulFunctionCall","src":"1177:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:124"},"nodeType":"YulFunctionCall","src":"1173:32:124"},"nodeType":"YulIf","src":"1170:52:124"},{"nodeType":"YulVariableDeclaration","src":"1231:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:124"},"nodeType":"YulFunctionCall","src":"1244:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:124"},"nodeType":"YulFunctionCall","src":"1276:31:124"},"nodeType":"YulExpressionStatement","src":"1276:31:124"},{"nodeType":"YulAssignment","src":"1316:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:124"}]},{"nodeType":"YulAssignment","src":"1340:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:124"},"nodeType":"YulFunctionCall","src":"1363:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:124"},"nodeType":"YulFunctionCall","src":"1350:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:124","type":""}],"src":"1073:315:124"},{"body":{"nodeType":"YulBlock","src":"1488:92:124","statements":[{"nodeType":"YulAssignment","src":"1498:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:124"},"nodeType":"YulFunctionCall","src":"1506:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:124"},"nodeType":"YulFunctionCall","src":"1558:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:124"},"nodeType":"YulFunctionCall","src":"1551:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:124"},"nodeType":"YulFunctionCall","src":"1533:41:124"},"nodeType":"YulExpressionStatement","src":"1533:41:124"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:124","type":""}],"src":"1393:187:124"},{"body":{"nodeType":"YulBlock","src":"1655:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:124"},"nodeType":"YulFunctionCall","src":"1703:12:124"},"nodeType":"YulExpressionStatement","src":"1703:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:124"},"nodeType":"YulFunctionCall","src":"1672:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:124"},"nodeType":"YulFunctionCall","src":"1668:32:124"},"nodeType":"YulIf","src":"1665:52:124"},{"nodeType":"YulVariableDeclaration","src":"1726:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:124"},"nodeType":"YulFunctionCall","src":"1739:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:124"},"nodeType":"YulFunctionCall","src":"1771:31:124"},"nodeType":"YulExpressionStatement","src":"1771:31:124"},{"nodeType":"YulAssignment","src":"1811:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:124"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:124","type":""}],"src":"1585:247:124"},{"body":{"nodeType":"YulBlock","src":"1966:119:124","statements":[{"nodeType":"YulAssignment","src":"1976:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:124"},"nodeType":"YulFunctionCall","src":"1984:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:124"},"nodeType":"YulFunctionCall","src":"2011:25:124"},"nodeType":"YulExpressionStatement","src":"2011:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:124"},"nodeType":"YulFunctionCall","src":"2052:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:124"},"nodeType":"YulFunctionCall","src":"2045:34:124"},"nodeType":"YulExpressionStatement","src":"2045:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:124","type":""}],"src":"1837:248:124"},{"body":{"nodeType":"YulBlock","src":"2137:109:124","statements":[{"nodeType":"YulAssignment","src":"2147:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2169:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2156:12:124"},"nodeType":"YulFunctionCall","src":"2156:20:124"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2147:5:124"}]},{"body":{"nodeType":"YulBlock","src":"2224:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2233:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2236:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2226:6:124"},"nodeType":"YulFunctionCall","src":"2226:12:124"},"nodeType":"YulExpressionStatement","src":"2226:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2198:5:124"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2209:5:124"},{"kind":"number","nodeType":"YulLiteral","src":"2216:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2205:3:124"},"nodeType":"YulFunctionCall","src":"2205:16:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2195:2:124"},"nodeType":"YulFunctionCall","src":"2195:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2188:6:124"},"nodeType":"YulFunctionCall","src":"2188:35:124"},"nodeType":"YulIf","src":"2185:55:124"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2116:6:124","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2127:5:124","type":""}],"src":"2090:156:124"},{"body":{"nodeType":"YulBlock","src":"2421:564:124","statements":[{"body":{"nodeType":"YulBlock","src":"2468:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2477:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2480:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2470:6:124"},"nodeType":"YulFunctionCall","src":"2470:12:124"},"nodeType":"YulExpressionStatement","src":"2470:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2442:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"2451:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2438:3:124"},"nodeType":"YulFunctionCall","src":"2438:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"2463:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2434:3:124"},"nodeType":"YulFunctionCall","src":"2434:33:124"},"nodeType":"YulIf","src":"2431:53:124"},{"nodeType":"YulVariableDeclaration","src":"2493:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2519:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2506:12:124"},"nodeType":"YulFunctionCall","src":"2506:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2497:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2563:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2538:24:124"},"nodeType":"YulFunctionCall","src":"2538:31:124"},"nodeType":"YulExpressionStatement","src":"2538:31:124"},{"nodeType":"YulAssignment","src":"2578:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"2588:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2578:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"2602:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2634:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2645:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2630:3:124"},"nodeType":"YulFunctionCall","src":"2630:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2617:12:124"},"nodeType":"YulFunctionCall","src":"2617:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2606:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2683:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2658:24:124"},"nodeType":"YulFunctionCall","src":"2658:33:124"},"nodeType":"YulExpressionStatement","src":"2658:33:124"},{"nodeType":"YulAssignment","src":"2700:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2710:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2700:6:124"}]},{"nodeType":"YulAssignment","src":"2726:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2753:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2764:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2749:3:124"},"nodeType":"YulFunctionCall","src":"2749:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2736:12:124"},"nodeType":"YulFunctionCall","src":"2736:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2726:6:124"}]},{"nodeType":"YulAssignment","src":"2777:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2804:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2815:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2800:3:124"},"nodeType":"YulFunctionCall","src":"2800:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2787:12:124"},"nodeType":"YulFunctionCall","src":"2787:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2777:6:124"}]},{"nodeType":"YulAssignment","src":"2828:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2859:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2870:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2855:3:124"},"nodeType":"YulFunctionCall","src":"2855:19:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2838:16:124"},"nodeType":"YulFunctionCall","src":"2838:37:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2828:6:124"}]},{"nodeType":"YulAssignment","src":"2884:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2911:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2922:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2907:3:124"},"nodeType":"YulFunctionCall","src":"2907:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2894:12:124"},"nodeType":"YulFunctionCall","src":"2894:33:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2884:6:124"}]},{"nodeType":"YulAssignment","src":"2936:43:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2963:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"2974:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2959:3:124"},"nodeType":"YulFunctionCall","src":"2959:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2946:12:124"},"nodeType":"YulFunctionCall","src":"2946:33:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2936:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2339:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2350:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2362:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2370:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2378:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2386:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2394:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2402:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"2410:6:124","type":""}],"src":"2251:734:124"},{"body":{"nodeType":"YulBlock","src":"3091:76:124","statements":[{"nodeType":"YulAssignment","src":"3101:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3113:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3124:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3109:3:124"},"nodeType":"YulFunctionCall","src":"3109:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3101:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3143:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3154:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3136:6:124"},"nodeType":"YulFunctionCall","src":"3136:25:124"},"nodeType":"YulExpressionStatement","src":"3136:25:124"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3060:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3071:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3082:4:124","type":""}],"src":"2990:177:124"},{"body":{"nodeType":"YulBlock","src":"3276:352:124","statements":[{"body":{"nodeType":"YulBlock","src":"3322:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3331:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3334:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3324:6:124"},"nodeType":"YulFunctionCall","src":"3324:12:124"},"nodeType":"YulExpressionStatement","src":"3324:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3297:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"3306:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3293:3:124"},"nodeType":"YulFunctionCall","src":"3293:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"3318:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3289:3:124"},"nodeType":"YulFunctionCall","src":"3289:32:124"},"nodeType":"YulIf","src":"3286:52:124"},{"nodeType":"YulVariableDeclaration","src":"3347:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3373:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3360:12:124"},"nodeType":"YulFunctionCall","src":"3360:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3351:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3417:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3392:24:124"},"nodeType":"YulFunctionCall","src":"3392:31:124"},"nodeType":"YulExpressionStatement","src":"3392:31:124"},{"nodeType":"YulAssignment","src":"3432:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"3442:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3432:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"3456:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3499:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:124"},"nodeType":"YulFunctionCall","src":"3484:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:124"},"nodeType":"YulFunctionCall","src":"3471:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3460:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3537:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3512:24:124"},"nodeType":"YulFunctionCall","src":"3512:33:124"},"nodeType":"YulExpressionStatement","src":"3512:33:124"},{"nodeType":"YulAssignment","src":"3554:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3564:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3554:6:124"}]},{"nodeType":"YulAssignment","src":"3580:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3607:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3618:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3603:3:124"},"nodeType":"YulFunctionCall","src":"3603:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3590:12:124"},"nodeType":"YulFunctionCall","src":"3590:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3580:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3226:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3237:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3249:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3257:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3265:6:124","type":""}],"src":"3172:456:124"},{"body":{"nodeType":"YulBlock","src":"3730:87:124","statements":[{"nodeType":"YulAssignment","src":"3740:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3752:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3763:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3748:3:124"},"nodeType":"YulFunctionCall","src":"3748:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3740:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3782:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3797:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"3805:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3793:3:124"},"nodeType":"YulFunctionCall","src":"3793:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3775:6:124"},"nodeType":"YulFunctionCall","src":"3775:36:124"},"nodeType":"YulExpressionStatement","src":"3775:36:124"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3699:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3710:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3721:4:124","type":""}],"src":"3633:184:124"},{"body":{"nodeType":"YulBlock","src":"3923:76:124","statements":[{"nodeType":"YulAssignment","src":"3933:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3945:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"3956:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3941:3:124"},"nodeType":"YulFunctionCall","src":"3941:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3933:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3975:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"3986:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3968:6:124"},"nodeType":"YulFunctionCall","src":"3968:25:124"},"nodeType":"YulExpressionStatement","src":"3968:25:124"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3892:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3903:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3914:4:124","type":""}],"src":"3822:177:124"},{"body":{"nodeType":"YulBlock","src":"4091:301:124","statements":[{"body":{"nodeType":"YulBlock","src":"4137:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4146:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4149:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4139:6:124"},"nodeType":"YulFunctionCall","src":"4139:12:124"},"nodeType":"YulExpressionStatement","src":"4139:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4112:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"4121:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4108:3:124"},"nodeType":"YulFunctionCall","src":"4108:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"4133:2:124","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4104:3:124"},"nodeType":"YulFunctionCall","src":"4104:32:124"},"nodeType":"YulIf","src":"4101:52:124"},{"nodeType":"YulVariableDeclaration","src":"4162:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4188:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4175:12:124"},"nodeType":"YulFunctionCall","src":"4175:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4166:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4232:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4207:24:124"},"nodeType":"YulFunctionCall","src":"4207:31:124"},"nodeType":"YulExpressionStatement","src":"4207:31:124"},{"nodeType":"YulAssignment","src":"4247:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"4257:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4247:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"4271:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4303:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4314:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4299:3:124"},"nodeType":"YulFunctionCall","src":"4299:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4286:12:124"},"nodeType":"YulFunctionCall","src":"4286:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4275:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4352:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4327:24:124"},"nodeType":"YulFunctionCall","src":"4327:33:124"},"nodeType":"YulExpressionStatement","src":"4327:33:124"},{"nodeType":"YulAssignment","src":"4369:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4379:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4369:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4049:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4060:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4072:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4080:6:124","type":""}],"src":"4004:388:124"},{"body":{"nodeType":"YulBlock","src":"4512:125:124","statements":[{"nodeType":"YulAssignment","src":"4522:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4534:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4545:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4530:3:124"},"nodeType":"YulFunctionCall","src":"4530:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4522:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4564:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4579:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4587:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4575:3:124"},"nodeType":"YulFunctionCall","src":"4575:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4557:6:124"},"nodeType":"YulFunctionCall","src":"4557:74:124"},"nodeType":"YulExpressionStatement","src":"4557:74:124"}]},"name":"abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4481:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4492:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4503:4:124","type":""}],"src":"4397:240:124"},{"body":{"nodeType":"YulBlock","src":"4777:125:124","statements":[{"nodeType":"YulAssignment","src":"4787:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4799:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"4810:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4795:3:124"},"nodeType":"YulFunctionCall","src":"4795:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4787:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4829:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4844:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"4852:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4840:3:124"},"nodeType":"YulFunctionCall","src":"4840:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4822:6:124"},"nodeType":"YulFunctionCall","src":"4822:74:124"},"nodeType":"YulExpressionStatement","src":"4822:74:124"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4746:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4757:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4768:4:124","type":""}],"src":"4642:260:124"},{"body":{"nodeType":"YulBlock","src":"5026:99:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5043:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5054:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5036:6:124"},"nodeType":"YulFunctionCall","src":"5036:21:124"},"nodeType":"YulExpressionStatement","src":"5036:21:124"},{"nodeType":"YulAssignment","src":"5066:53:124","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5092:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5104:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5115:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5100:3:124"},"nodeType":"YulFunctionCall","src":"5100:18:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5074:17:124"},"nodeType":"YulFunctionCall","src":"5074:45:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5066:4:124"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4995:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5006:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5017:4:124","type":""}],"src":"4907:218:124"},{"body":{"nodeType":"YulBlock","src":"5231:125:124","statements":[{"nodeType":"YulAssignment","src":"5241:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5253:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5264:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5249:3:124"},"nodeType":"YulFunctionCall","src":"5249:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5241:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5283:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5298:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"5306:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5294:3:124"},"nodeType":"YulFunctionCall","src":"5294:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5276:6:124"},"nodeType":"YulFunctionCall","src":"5276:74:124"},"nodeType":"YulExpressionStatement","src":"5276:74:124"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5200:9:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5211:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5222:4:124","type":""}],"src":"5130:226:124"},{"body":{"nodeType":"YulBlock","src":"5482:404:124","statements":[{"body":{"nodeType":"YulBlock","src":"5529:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5538:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5541:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5531:6:124"},"nodeType":"YulFunctionCall","src":"5531:12:124"},"nodeType":"YulExpressionStatement","src":"5531:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5503:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"5512:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5499:3:124"},"nodeType":"YulFunctionCall","src":"5499:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"5524:3:124","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5495:3:124"},"nodeType":"YulFunctionCall","src":"5495:33:124"},"nodeType":"YulIf","src":"5492:53:124"},{"nodeType":"YulVariableDeclaration","src":"5554:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5580:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5567:12:124"},"nodeType":"YulFunctionCall","src":"5567:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5558:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5624:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5599:24:124"},"nodeType":"YulFunctionCall","src":"5599:31:124"},"nodeType":"YulExpressionStatement","src":"5599:31:124"},{"nodeType":"YulAssignment","src":"5639:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"5649:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5639:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"5663:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5695:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5706:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5691:3:124"},"nodeType":"YulFunctionCall","src":"5691:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5678:12:124"},"nodeType":"YulFunctionCall","src":"5678:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5667:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5744:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5719:24:124"},"nodeType":"YulFunctionCall","src":"5719:33:124"},"nodeType":"YulExpressionStatement","src":"5719:33:124"},{"nodeType":"YulAssignment","src":"5761:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5771:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5761:6:124"}]},{"nodeType":"YulAssignment","src":"5787:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5814:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5825:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5810:3:124"},"nodeType":"YulFunctionCall","src":"5810:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5797:12:124"},"nodeType":"YulFunctionCall","src":"5797:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5787:6:124"}]},{"nodeType":"YulAssignment","src":"5838:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"5876:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5861:3:124"},"nodeType":"YulFunctionCall","src":"5861:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5848:12:124"},"nodeType":"YulFunctionCall","src":"5848:32:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5838:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5424:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5435:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5447:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5455:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5463:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5471:6:124","type":""}],"src":"5361:525:124"},{"body":{"nodeType":"YulBlock","src":"6014:135:124","statements":[{"nodeType":"YulAssignment","src":"6024:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6036:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6047:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6032:3:124"},"nodeType":"YulFunctionCall","src":"6032:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6024:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6066:9:124"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6091:6:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6084:6:124"},"nodeType":"YulFunctionCall","src":"6084:14:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6077:6:124"},"nodeType":"YulFunctionCall","src":"6077:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6059:6:124"},"nodeType":"YulFunctionCall","src":"6059:41:124"},"nodeType":"YulExpressionStatement","src":"6059:41:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6120:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"6131:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6116:3:124"},"nodeType":"YulFunctionCall","src":"6116:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"6136:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6109:6:124"},"nodeType":"YulFunctionCall","src":"6109:34:124"},"nodeType":"YulExpressionStatement","src":"6109:34:124"}]},"name":"abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5975:9:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5986:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5994:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6005:4:124","type":""}],"src":"5891:258:124"},{"body":{"nodeType":"YulBlock","src":"6186:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6203:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6206:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6196:6:124"},"nodeType":"YulFunctionCall","src":"6196:88:124"},"nodeType":"YulExpressionStatement","src":"6196:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6300:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6303:4:124","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6293:6:124"},"nodeType":"YulFunctionCall","src":"6293:15:124"},"nodeType":"YulExpressionStatement","src":"6293:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6324:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6327:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6317:6:124"},"nodeType":"YulFunctionCall","src":"6317:15:124"},"nodeType":"YulExpressionStatement","src":"6317:15:124"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6154:184:124"},{"body":{"nodeType":"YulBlock","src":"6396:725:124","statements":[{"body":{"nodeType":"YulBlock","src":"6445:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6454:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6457:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6447:6:124"},"nodeType":"YulFunctionCall","src":"6447:12:124"},"nodeType":"YulExpressionStatement","src":"6447:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6424:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"6432:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6420:3:124"},"nodeType":"YulFunctionCall","src":"6420:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"6439:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6416:3:124"},"nodeType":"YulFunctionCall","src":"6416:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6409:6:124"},"nodeType":"YulFunctionCall","src":"6409:35:124"},"nodeType":"YulIf","src":"6406:55:124"},{"nodeType":"YulVariableDeclaration","src":"6470:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6493:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6480:12:124"},"nodeType":"YulFunctionCall","src":"6480:20:124"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6474:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6509:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6519:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6513:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6560:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6562:16:124"},"nodeType":"YulFunctionCall","src":"6562:18:124"},"nodeType":"YulExpressionStatement","src":"6562:18:124"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6552:2:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6556:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6549:2:124"},"nodeType":"YulFunctionCall","src":"6549:10:124"},"nodeType":"YulIf","src":"6546:36:124"},{"nodeType":"YulVariableDeclaration","src":"6591:76:124","value":{"kind":"number","nodeType":"YulLiteral","src":"6601:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6595:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6676:23:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6696:2:124","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6690:5:124"},"nodeType":"YulFunctionCall","src":"6690:9:124"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6680:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6708:71:124","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6730:6:124"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6754:2:124"},{"kind":"number","nodeType":"YulLiteral","src":"6758:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6750:3:124"},"nodeType":"YulFunctionCall","src":"6750:13:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6765:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6746:3:124"},"nodeType":"YulFunctionCall","src":"6746:22:124"},{"kind":"number","nodeType":"YulLiteral","src":"6770:2:124","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6742:3:124"},"nodeType":"YulFunctionCall","src":"6742:31:124"},{"name":"_3","nodeType":"YulIdentifier","src":"6775:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6738:3:124"},"nodeType":"YulFunctionCall","src":"6738:40:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6726:3:124"},"nodeType":"YulFunctionCall","src":"6726:53:124"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6712:10:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"6838:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6840:16:124"},"nodeType":"YulFunctionCall","src":"6840:18:124"},"nodeType":"YulExpressionStatement","src":"6840:18:124"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6797:10:124"},{"name":"_2","nodeType":"YulIdentifier","src":"6809:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6794:2:124"},"nodeType":"YulFunctionCall","src":"6794:18:124"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6817:10:124"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6829:6:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6814:2:124"},"nodeType":"YulFunctionCall","src":"6814:22:124"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6791:2:124"},"nodeType":"YulFunctionCall","src":"6791:46:124"},"nodeType":"YulIf","src":"6788:72:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6876:2:124","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6880:10:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6869:6:124"},"nodeType":"YulFunctionCall","src":"6869:22:124"},"nodeType":"YulExpressionStatement","src":"6869:22:124"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6907:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6915:2:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6900:6:124"},"nodeType":"YulFunctionCall","src":"6900:18:124"},"nodeType":"YulExpressionStatement","src":"6900:18:124"},{"body":{"nodeType":"YulBlock","src":"6966:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6975:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6978:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6968:6:124"},"nodeType":"YulFunctionCall","src":"6968:12:124"},"nodeType":"YulExpressionStatement","src":"6968:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6941:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"6949:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6937:3:124"},"nodeType":"YulFunctionCall","src":"6937:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"6954:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6933:3:124"},"nodeType":"YulFunctionCall","src":"6933:26:124"},{"name":"end","nodeType":"YulIdentifier","src":"6961:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6930:2:124"},"nodeType":"YulFunctionCall","src":"6930:35:124"},"nodeType":"YulIf","src":"6927:55:124"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7008:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7016:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7004:3:124"},"nodeType":"YulFunctionCall","src":"7004:17:124"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7027:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7035:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7023:3:124"},"nodeType":"YulFunctionCall","src":"7023:17:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7042:2:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"6991:12:124"},"nodeType":"YulFunctionCall","src":"6991:54:124"},"nodeType":"YulExpressionStatement","src":"6991:54:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7069:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"7077:2:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7065:3:124"},"nodeType":"YulFunctionCall","src":"7065:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"7082:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7061:3:124"},"nodeType":"YulFunctionCall","src":"7061:26:124"},{"kind":"number","nodeType":"YulLiteral","src":"7089:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7054:6:124"},"nodeType":"YulFunctionCall","src":"7054:37:124"},"nodeType":"YulExpressionStatement","src":"7054:37:124"},{"nodeType":"YulAssignment","src":"7100:15:124","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7109:6:124"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7100:5:124"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6370:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"6378:3:124","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"6386:5:124","type":""}],"src":"6343:778:124"},{"body":{"nodeType":"YulBlock","src":"7198:275:124","statements":[{"body":{"nodeType":"YulBlock","src":"7247:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7256:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7259:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7249:6:124"},"nodeType":"YulFunctionCall","src":"7249:12:124"},"nodeType":"YulExpressionStatement","src":"7249:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7226:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7234:4:124","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7222:3:124"},"nodeType":"YulFunctionCall","src":"7222:17:124"},{"name":"end","nodeType":"YulIdentifier","src":"7241:3:124"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7218:3:124"},"nodeType":"YulFunctionCall","src":"7218:27:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7211:6:124"},"nodeType":"YulFunctionCall","src":"7211:35:124"},"nodeType":"YulIf","src":"7208:55:124"},{"nodeType":"YulAssignment","src":"7272:30:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7295:6:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7282:12:124"},"nodeType":"YulFunctionCall","src":"7282:20:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7272:6:124"}]},{"body":{"nodeType":"YulBlock","src":"7345:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7354:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7357:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7347:6:124"},"nodeType":"YulFunctionCall","src":"7347:12:124"},"nodeType":"YulExpressionStatement","src":"7347:12:124"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7317:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7325:18:124","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7314:2:124"},"nodeType":"YulFunctionCall","src":"7314:30:124"},"nodeType":"YulIf","src":"7311:50:124"},{"nodeType":"YulAssignment","src":"7370:29:124","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7386:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"7394:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7382:3:124"},"nodeType":"YulFunctionCall","src":"7382:17:124"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7370:8:124"}]},{"body":{"nodeType":"YulBlock","src":"7451:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7460:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7463:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7453:6:124"},"nodeType":"YulFunctionCall","src":"7453:12:124"},"nodeType":"YulExpressionStatement","src":"7453:12:124"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7422:6:124"},{"name":"length","nodeType":"YulIdentifier","src":"7430:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7418:3:124"},"nodeType":"YulFunctionCall","src":"7418:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"7439:4:124","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7414:3:124"},"nodeType":"YulFunctionCall","src":"7414:30:124"},{"name":"end","nodeType":"YulIdentifier","src":"7446:3:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7411:2:124"},"nodeType":"YulFunctionCall","src":"7411:39:124"},"nodeType":"YulIf","src":"7408:59:124"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7161:6:124","type":""},{"name":"end","nodeType":"YulTypedName","src":"7169:3:124","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7177:8:124","type":""},{"name":"length","nodeType":"YulTypedName","src":"7187:6:124","type":""}],"src":"7126:347:124"},{"body":{"nodeType":"YulBlock","src":"7735:1045:124","statements":[{"body":{"nodeType":"YulBlock","src":"7782:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7791:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7794:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7784:6:124"},"nodeType":"YulFunctionCall","src":"7784:12:124"},"nodeType":"YulExpressionStatement","src":"7784:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7756:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"7765:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7752:3:124"},"nodeType":"YulFunctionCall","src":"7752:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"7777:3:124","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7748:3:124"},"nodeType":"YulFunctionCall","src":"7748:33:124"},"nodeType":"YulIf","src":"7745:53:124"},{"nodeType":"YulVariableDeclaration","src":"7807:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7833:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7820:12:124"},"nodeType":"YulFunctionCall","src":"7820:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7811:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7877:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7852:24:124"},"nodeType":"YulFunctionCall","src":"7852:31:124"},"nodeType":"YulExpressionStatement","src":"7852:31:124"},{"nodeType":"YulAssignment","src":"7892:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"7902:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7892:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"7916:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7948:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"7959:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7944:3:124"},"nodeType":"YulFunctionCall","src":"7944:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7931:12:124"},"nodeType":"YulFunctionCall","src":"7931:32:124"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7920:7:124","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7997:7:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7972:24:124"},"nodeType":"YulFunctionCall","src":"7972:33:124"},"nodeType":"YulExpressionStatement","src":"7972:33:124"},{"nodeType":"YulAssignment","src":"8014:17:124","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8024:7:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8014:6:124"}]},{"nodeType":"YulAssignment","src":"8040:48:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8073:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8084:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8069:3:124"},"nodeType":"YulFunctionCall","src":"8069:18:124"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8050:18:124"},"nodeType":"YulFunctionCall","src":"8050:38:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8040:6:124"}]},{"nodeType":"YulAssignment","src":"8097:46:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8128:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8139:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8124:3:124"},"nodeType":"YulFunctionCall","src":"8124:18:124"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8107:16:124"},"nodeType":"YulFunctionCall","src":"8107:36:124"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8097:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8152:47:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8183:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8194:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8179:3:124"},"nodeType":"YulFunctionCall","src":"8179:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8166:12:124"},"nodeType":"YulFunctionCall","src":"8166:33:124"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8156:6:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8208:28:124","value":{"kind":"number","nodeType":"YulLiteral","src":"8218:18:124","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8212:2:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8263:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8272:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8275:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8265:6:124"},"nodeType":"YulFunctionCall","src":"8265:12:124"},"nodeType":"YulExpressionStatement","src":"8265:12:124"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8251:6:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8259:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8248:2:124"},"nodeType":"YulFunctionCall","src":"8248:14:124"},"nodeType":"YulIf","src":"8245:34:124"},{"nodeType":"YulAssignment","src":"8288:60:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8320:9:124"},{"name":"offset","nodeType":"YulIdentifier","src":"8331:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8316:3:124"},"nodeType":"YulFunctionCall","src":"8316:22:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8340:7:124"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8298:17:124"},"nodeType":"YulFunctionCall","src":"8298:50:124"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8288:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8357:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8390:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8401:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8386:3:124"},"nodeType":"YulFunctionCall","src":"8386:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8373:12:124"},"nodeType":"YulFunctionCall","src":"8373:33:124"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"8361:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8435:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8444:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8447:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8437:6:124"},"nodeType":"YulFunctionCall","src":"8437:12:124"},"nodeType":"YulExpressionStatement","src":"8437:12:124"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"8421:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8431:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8418:2:124"},"nodeType":"YulFunctionCall","src":"8418:16:124"},"nodeType":"YulIf","src":"8415:36:124"},{"nodeType":"YulAssignment","src":"8460:62:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8492:9:124"},{"name":"offset_1","nodeType":"YulIdentifier","src":"8503:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8488:3:124"},"nodeType":"YulFunctionCall","src":"8488:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8514:7:124"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8470:17:124"},"nodeType":"YulFunctionCall","src":"8470:52:124"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8460:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"8531:49:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8564:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"8575:3:124","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8560:3:124"},"nodeType":"YulFunctionCall","src":"8560:19:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8547:12:124"},"nodeType":"YulFunctionCall","src":"8547:33:124"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"8535:8:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"8609:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8618:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8621:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8611:6:124"},"nodeType":"YulFunctionCall","src":"8611:12:124"},"nodeType":"YulExpressionStatement","src":"8611:12:124"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"8595:8:124"},{"name":"_1","nodeType":"YulIdentifier","src":"8605:2:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8592:2:124"},"nodeType":"YulFunctionCall","src":"8592:16:124"},"nodeType":"YulIf","src":"8589:36:124"},{"nodeType":"YulVariableDeclaration","src":"8634:86:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8690:9:124"},{"name":"offset_2","nodeType":"YulIdentifier","src":"8701:8:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8686:3:124"},"nodeType":"YulFunctionCall","src":"8686:24:124"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8712:7:124"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8660:25:124"},"nodeType":"YulFunctionCall","src":"8660:60:124"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"8638:8:124","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"8648:8:124","type":""}]},{"nodeType":"YulAssignment","src":"8729:18:124","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"8739:8:124"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"8729:6:124"}]},{"nodeType":"YulAssignment","src":"8756:18:124","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"8766:8:124"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"8756:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7645:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7656:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7668:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7676:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7684:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7692:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7700:6:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7708:6:124","type":""},{"name":"value6","nodeType":"YulTypedName","src":"7716:6:124","type":""},{"name":"value7","nodeType":"YulTypedName","src":"7724:6:124","type":""}],"src":"7478:1302:124"},{"body":{"nodeType":"YulBlock","src":"8889:177:124","statements":[{"body":{"nodeType":"YulBlock","src":"8935:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8944:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8947:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8937:6:124"},"nodeType":"YulFunctionCall","src":"8937:12:124"},"nodeType":"YulExpressionStatement","src":"8937:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8910:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"8919:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8906:3:124"},"nodeType":"YulFunctionCall","src":"8906:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"8931:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8902:3:124"},"nodeType":"YulFunctionCall","src":"8902:32:124"},"nodeType":"YulIf","src":"8899:52:124"},{"nodeType":"YulVariableDeclaration","src":"8960:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8986:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8973:12:124"},"nodeType":"YulFunctionCall","src":"8973:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8964:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9030:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9005:24:124"},"nodeType":"YulFunctionCall","src":"9005:31:124"},"nodeType":"YulExpressionStatement","src":"9005:31:124"},{"nodeType":"YulAssignment","src":"9045:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9055:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9045:6:124"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8855:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8866:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8878:6:124","type":""}],"src":"8785:281:124"},{"body":{"nodeType":"YulBlock","src":"9175:279:124","statements":[{"body":{"nodeType":"YulBlock","src":"9221:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9230:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9233:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9223:6:124"},"nodeType":"YulFunctionCall","src":"9223:12:124"},"nodeType":"YulExpressionStatement","src":"9223:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9196:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"9205:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9192:3:124"},"nodeType":"YulFunctionCall","src":"9192:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"9217:2:124","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9188:3:124"},"nodeType":"YulFunctionCall","src":"9188:32:124"},"nodeType":"YulIf","src":"9185:52:124"},{"nodeType":"YulVariableDeclaration","src":"9246:36:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9272:9:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9259:12:124"},"nodeType":"YulFunctionCall","src":"9259:23:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9250:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9316:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9291:24:124"},"nodeType":"YulFunctionCall","src":"9291:31:124"},"nodeType":"YulExpressionStatement","src":"9291:31:124"},{"nodeType":"YulAssignment","src":"9331:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"9341:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9331:6:124"}]},{"nodeType":"YulAssignment","src":"9355:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9382:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9393:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9378:3:124"},"nodeType":"YulFunctionCall","src":"9378:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9365:12:124"},"nodeType":"YulFunctionCall","src":"9365:32:124"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9355:6:124"}]},{"nodeType":"YulAssignment","src":"9406:42:124","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9433:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"9444:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9429:3:124"},"nodeType":"YulFunctionCall","src":"9429:18:124"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9416:12:124"},"nodeType":"YulFunctionCall","src":"9416:32:124"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9406:6:124"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9125:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9136:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9148:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9156:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9164:6:124","type":""}],"src":"9071:383:124"},{"body":{"nodeType":"YulBlock","src":"9514:382:124","statements":[{"nodeType":"YulAssignment","src":"9524:22:124","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9538:1:124","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"9541:4:124"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9534:3:124"},"nodeType":"YulFunctionCall","src":"9534:12:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9524:6:124"}]},{"nodeType":"YulVariableDeclaration","src":"9555:38:124","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"9585:4:124"},{"kind":"number","nodeType":"YulLiteral","src":"9591:1:124","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9581:3:124"},"nodeType":"YulFunctionCall","src":"9581:12:124"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"9559:18:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"9632:31:124","statements":[{"nodeType":"YulAssignment","src":"9634:27:124","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9648:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9656:4:124","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9644:3:124"},"nodeType":"YulFunctionCall","src":"9644:17:124"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9634:6:124"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9612:18:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9605:6:124"},"nodeType":"YulFunctionCall","src":"9605:26:124"},"nodeType":"YulIf","src":"9602:61:124"},{"body":{"nodeType":"YulBlock","src":"9722:168:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9743:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9746:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9736:6:124"},"nodeType":"YulFunctionCall","src":"9736:88:124"},"nodeType":"YulExpressionStatement","src":"9736:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9844:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9847:4:124","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9837:6:124"},"nodeType":"YulFunctionCall","src":"9837:15:124"},"nodeType":"YulExpressionStatement","src":"9837:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9872:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9875:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9865:6:124"},"nodeType":"YulFunctionCall","src":"9865:15:124"},"nodeType":"YulExpressionStatement","src":"9865:15:124"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9678:18:124"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9701:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"9709:2:124","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9698:2:124"},"nodeType":"YulFunctionCall","src":"9698:14:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9675:2:124"},"nodeType":"YulFunctionCall","src":"9675:38:124"},"nodeType":"YulIf","src":"9672:218:124"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"9494:4:124","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"9503:6:124","type":""}],"src":"9459:437:124"},{"body":{"nodeType":"YulBlock","src":"10114:299:124","statements":[{"nodeType":"YulAssignment","src":"10124:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10136:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10147:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10132:3:124"},"nodeType":"YulFunctionCall","src":"10132:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10124:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10167:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"10178:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10160:6:124"},"nodeType":"YulFunctionCall","src":"10160:25:124"},"nodeType":"YulExpressionStatement","src":"10160:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10205:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10216:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10201:3:124"},"nodeType":"YulFunctionCall","src":"10201:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10225:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"10233:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10221:3:124"},"nodeType":"YulFunctionCall","src":"10221:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10194:6:124"},"nodeType":"YulFunctionCall","src":"10194:83:124"},"nodeType":"YulExpressionStatement","src":"10194:83:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10297:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10308:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10293:3:124"},"nodeType":"YulFunctionCall","src":"10293:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"10313:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10286:6:124"},"nodeType":"YulFunctionCall","src":"10286:34:124"},"nodeType":"YulExpressionStatement","src":"10286:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10340:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10351:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10336:3:124"},"nodeType":"YulFunctionCall","src":"10336:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"10356:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10329:6:124"},"nodeType":"YulFunctionCall","src":"10329:34:124"},"nodeType":"YulExpressionStatement","src":"10329:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10383:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"10394:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10379:3:124"},"nodeType":"YulFunctionCall","src":"10379:19:124"},{"name":"value4","nodeType":"YulIdentifier","src":"10400:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10372:6:124"},"nodeType":"YulFunctionCall","src":"10372:35:124"},"nodeType":"YulExpressionStatement","src":"10372:35:124"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10051:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10062:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10070:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10078:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10086:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10094:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10105:4:124","type":""}],"src":"9901:512:124"},{"body":{"nodeType":"YulBlock","src":"10666:196:124","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10683:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10688:66:124","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10676:6:124"},"nodeType":"YulFunctionCall","src":"10676:79:124"},"nodeType":"YulExpressionStatement","src":"10676:79:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10775:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10780:1:124","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10771:3:124"},"nodeType":"YulFunctionCall","src":"10771:11:124"},{"name":"value0","nodeType":"YulIdentifier","src":"10784:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10764:6:124"},"nodeType":"YulFunctionCall","src":"10764:27:124"},"nodeType":"YulExpressionStatement","src":"10764:27:124"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10811:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10816:2:124","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10807:3:124"},"nodeType":"YulFunctionCall","src":"10807:12:124"},{"name":"value1","nodeType":"YulIdentifier","src":"10821:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10800:6:124"},"nodeType":"YulFunctionCall","src":"10800:28:124"},"nodeType":"YulExpressionStatement","src":"10800:28:124"},{"nodeType":"YulAssignment","src":"10837:19:124","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10848:3:124"},{"kind":"number","nodeType":"YulLiteral","src":"10853:2:124","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10844:3:124"},"nodeType":"YulFunctionCall","src":"10844:12:124"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10837:3:124"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10634:3:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10639:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10647:6:124","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10658:3:124","type":""}],"src":"10418:444:124"},{"body":{"nodeType":"YulBlock","src":"11048:217:124","statements":[{"nodeType":"YulAssignment","src":"11058:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11070:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11081:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11066:3:124"},"nodeType":"YulFunctionCall","src":"11066:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11058:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11101:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"11112:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11094:6:124"},"nodeType":"YulFunctionCall","src":"11094:25:124"},"nodeType":"YulExpressionStatement","src":"11094:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11139:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11150:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11135:3:124"},"nodeType":"YulFunctionCall","src":"11135:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11159:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"11167:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11155:3:124"},"nodeType":"YulFunctionCall","src":"11155:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11128:6:124"},"nodeType":"YulFunctionCall","src":"11128:45:124"},"nodeType":"YulExpressionStatement","src":"11128:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11193:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11204:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11189:3:124"},"nodeType":"YulFunctionCall","src":"11189:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"11209:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11182:6:124"},"nodeType":"YulFunctionCall","src":"11182:34:124"},"nodeType":"YulExpressionStatement","src":"11182:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11236:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11247:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11232:3:124"},"nodeType":"YulFunctionCall","src":"11232:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"11252:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11225:6:124"},"nodeType":"YulFunctionCall","src":"11225:34:124"},"nodeType":"YulExpressionStatement","src":"11225:34:124"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10993:9:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11004:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11012:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11020:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11028:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11039:4:124","type":""}],"src":"10867:398:124"},{"body":{"nodeType":"YulBlock","src":"11302:152:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11319:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11322:77:124","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11312:6:124"},"nodeType":"YulFunctionCall","src":"11312:88:124"},"nodeType":"YulExpressionStatement","src":"11312:88:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11416:1:124","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11419:4:124","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11409:6:124"},"nodeType":"YulFunctionCall","src":"11409:15:124"},"nodeType":"YulExpressionStatement","src":"11409:15:124"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11440:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11443:4:124","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11433:6:124"},"nodeType":"YulFunctionCall","src":"11433:15:124"},"nodeType":"YulExpressionStatement","src":"11433:15:124"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11270:184:124"},{"body":{"nodeType":"YulBlock","src":"11507:80:124","statements":[{"body":{"nodeType":"YulBlock","src":"11534:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11536:16:124"},"nodeType":"YulFunctionCall","src":"11536:18:124"},"nodeType":"YulExpressionStatement","src":"11536:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11523:1:124"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11530:1:124"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11526:3:124"},"nodeType":"YulFunctionCall","src":"11526:6:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11520:2:124"},"nodeType":"YulFunctionCall","src":"11520:13:124"},"nodeType":"YulIf","src":"11517:39:124"},{"nodeType":"YulAssignment","src":"11565:16:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11576:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"11579:1:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11572:3:124"},"nodeType":"YulFunctionCall","src":"11572:9:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11565:3:124"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11490:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"11493:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11499:3:124","type":""}],"src":"11459:128:124"},{"body":{"nodeType":"YulBlock","src":"11673:103:124","statements":[{"body":{"nodeType":"YulBlock","src":"11719:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11728:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11731:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11721:6:124"},"nodeType":"YulFunctionCall","src":"11721:12:124"},"nodeType":"YulExpressionStatement","src":"11721:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11694:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"11703:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11690:3:124"},"nodeType":"YulFunctionCall","src":"11690:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"11715:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11686:3:124"},"nodeType":"YulFunctionCall","src":"11686:32:124"},"nodeType":"YulIf","src":"11683:52:124"},{"nodeType":"YulAssignment","src":"11744:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11760:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11754:5:124"},"nodeType":"YulFunctionCall","src":"11754:16:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11744:6:124"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11639:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11650:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11662:6:124","type":""}],"src":"11592:184:124"},{"body":{"nodeType":"YulBlock","src":"11955:236:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11972:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"11983:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11965:6:124"},"nodeType":"YulFunctionCall","src":"11965:21:124"},"nodeType":"YulExpressionStatement","src":"11965:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12006:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12017:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12002:3:124"},"nodeType":"YulFunctionCall","src":"12002:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"12022:2:124","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11995:6:124"},"nodeType":"YulFunctionCall","src":"11995:30:124"},"nodeType":"YulExpressionStatement","src":"11995:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12045:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12056:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12041:3:124"},"nodeType":"YulFunctionCall","src":"12041:18:124"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"12061:34:124","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12034:6:124"},"nodeType":"YulFunctionCall","src":"12034:62:124"},"nodeType":"YulExpressionStatement","src":"12034:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12116:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12127:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12112:3:124"},"nodeType":"YulFunctionCall","src":"12112:18:124"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"12132:16:124","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12105:6:124"},"nodeType":"YulFunctionCall","src":"12105:44:124"},"nodeType":"YulExpressionStatement","src":"12105:44:124"},{"nodeType":"YulAssignment","src":"12158:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12170:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12181:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12166:3:124"},"nodeType":"YulFunctionCall","src":"12166:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12158:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11932:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11946:4:124","type":""}],"src":"11781:410:124"},{"body":{"nodeType":"YulBlock","src":"12473:688:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12490:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12505:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12513:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12501:3:124"},"nodeType":"YulFunctionCall","src":"12501:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12483:6:124"},"nodeType":"YulFunctionCall","src":"12483:74:124"},"nodeType":"YulExpressionStatement","src":"12483:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12577:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12588:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12573:3:124"},"nodeType":"YulFunctionCall","src":"12573:18:124"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12597:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12605:4:124","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12593:3:124"},"nodeType":"YulFunctionCall","src":"12593:17:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12566:6:124"},"nodeType":"YulFunctionCall","src":"12566:45:124"},"nodeType":"YulExpressionStatement","src":"12566:45:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12631:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12642:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12627:3:124"},"nodeType":"YulFunctionCall","src":"12627:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"12647:3:124","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12620:6:124"},"nodeType":"YulFunctionCall","src":"12620:31:124"},"nodeType":"YulExpressionStatement","src":"12620:31:124"},{"nodeType":"YulVariableDeclaration","src":"12660:60:124","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12692:6:124"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12704:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12715:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12700:3:124"},"nodeType":"YulFunctionCall","src":"12700:19:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12674:17:124"},"nodeType":"YulFunctionCall","src":"12674:46:124"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12664:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12740:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12751:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12736:3:124"},"nodeType":"YulFunctionCall","src":"12736:18:124"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12760:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12768:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12756:3:124"},"nodeType":"YulFunctionCall","src":"12756:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12729:6:124"},"nodeType":"YulFunctionCall","src":"12729:50:124"},"nodeType":"YulExpressionStatement","src":"12729:50:124"},{"nodeType":"YulVariableDeclaration","src":"12788:47:124","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"12820:6:124"},{"name":"tail_1","nodeType":"YulIdentifier","src":"12828:6:124"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12802:17:124"},"nodeType":"YulFunctionCall","src":"12802:33:124"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"12792:6:124","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12855:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"12866:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12851:3:124"},"nodeType":"YulFunctionCall","src":"12851:19:124"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12876:6:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"12884:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12872:3:124"},"nodeType":"YulFunctionCall","src":"12872:22:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12844:6:124"},"nodeType":"YulFunctionCall","src":"12844:51:124"},"nodeType":"YulExpressionStatement","src":"12844:51:124"},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12911:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12919:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12904:6:124"},"nodeType":"YulFunctionCall","src":"12904:22:124"},"nodeType":"YulExpressionStatement","src":"12904:22:124"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12952:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"12960:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12948:3:124"},"nodeType":"YulFunctionCall","src":"12948:15:124"},{"name":"value4","nodeType":"YulIdentifier","src":"12965:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"12973:6:124"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"12935:12:124"},"nodeType":"YulFunctionCall","src":"12935:45:124"},"nodeType":"YulExpressionStatement","src":"12935:45:124"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13004:6:124"},{"name":"value5","nodeType":"YulIdentifier","src":"13012:6:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13000:3:124"},"nodeType":"YulFunctionCall","src":"13000:19:124"},{"kind":"number","nodeType":"YulLiteral","src":"13021:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12996:3:124"},"nodeType":"YulFunctionCall","src":"12996:28:124"},{"kind":"number","nodeType":"YulLiteral","src":"13026:1:124","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12989:6:124"},"nodeType":"YulFunctionCall","src":"12989:39:124"},"nodeType":"YulExpressionStatement","src":"12989:39:124"},{"nodeType":"YulAssignment","src":"13037:118:124","value":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13053:6:124"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"13069:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"13077:2:124","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13065:3:124"},"nodeType":"YulFunctionCall","src":"13065:15:124"},{"kind":"number","nodeType":"YulLiteral","src":"13082:66:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13061:3:124"},"nodeType":"YulFunctionCall","src":"13061:88:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13049:3:124"},"nodeType":"YulFunctionCall","src":"13049:101:124"},{"kind":"number","nodeType":"YulLiteral","src":"13152:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13045:3:124"},"nodeType":"YulFunctionCall","src":"13045:110:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13037:4:124"}]}]},"name":"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12402:9:124","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12413:6:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12421:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12429:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12437:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12445:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12453:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12464:4:124","type":""}],"src":"12196:965:124"},{"body":{"nodeType":"YulBlock","src":"13247:170:124","statements":[{"body":{"nodeType":"YulBlock","src":"13293:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13302:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13305:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13295:6:124"},"nodeType":"YulFunctionCall","src":"13295:12:124"},"nodeType":"YulExpressionStatement","src":"13295:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13268:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13264:3:124"},"nodeType":"YulFunctionCall","src":"13264:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13289:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13260:3:124"},"nodeType":"YulFunctionCall","src":"13260:32:124"},"nodeType":"YulIf","src":"13257:52:124"},{"nodeType":"YulVariableDeclaration","src":"13318:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13337:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13331:5:124"},"nodeType":"YulFunctionCall","src":"13331:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13322:5:124","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13381:5:124"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13356:24:124"},"nodeType":"YulFunctionCall","src":"13356:31:124"},"nodeType":"YulExpressionStatement","src":"13356:31:124"},{"nodeType":"YulAssignment","src":"13396:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13406:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13396:6:124"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13213:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13224:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13236:6:124","type":""}],"src":"13166:251:124"},{"body":{"nodeType":"YulBlock","src":"13500:199:124","statements":[{"body":{"nodeType":"YulBlock","src":"13546:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13555:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13558:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13548:6:124"},"nodeType":"YulFunctionCall","src":"13548:12:124"},"nodeType":"YulExpressionStatement","src":"13548:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13521:7:124"},{"name":"headStart","nodeType":"YulIdentifier","src":"13530:9:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13517:3:124"},"nodeType":"YulFunctionCall","src":"13517:23:124"},{"kind":"number","nodeType":"YulLiteral","src":"13542:2:124","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13513:3:124"},"nodeType":"YulFunctionCall","src":"13513:32:124"},"nodeType":"YulIf","src":"13510:52:124"},{"nodeType":"YulVariableDeclaration","src":"13571:29:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13590:9:124"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13584:5:124"},"nodeType":"YulFunctionCall","src":"13584:16:124"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13575:5:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"13653:16:124","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13662:1:124","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13665:1:124","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13655:6:124"},"nodeType":"YulFunctionCall","src":"13655:12:124"},"nodeType":"YulExpressionStatement","src":"13655:12:124"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13622:5:124"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13643:5:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13636:6:124"},"nodeType":"YulFunctionCall","src":"13636:13:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13629:6:124"},"nodeType":"YulFunctionCall","src":"13629:21:124"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13619:2:124"},"nodeType":"YulFunctionCall","src":"13619:32:124"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13612:6:124"},"nodeType":"YulFunctionCall","src":"13612:40:124"},"nodeType":"YulIf","src":"13609:60:124"},{"nodeType":"YulAssignment","src":"13678:15:124","value":{"name":"value","nodeType":"YulIdentifier","src":"13688:5:124"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13678:6:124"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13466:9:124","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13477:7:124","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13489:6:124","type":""}],"src":"13422:277:124"},{"body":{"nodeType":"YulBlock","src":"13917:299:124","statements":[{"nodeType":"YulAssignment","src":"13927:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13939:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"13950:3:124","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13935:3:124"},"nodeType":"YulFunctionCall","src":"13935:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13927:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13970:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"13981:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13963:6:124"},"nodeType":"YulFunctionCall","src":"13963:25:124"},"nodeType":"YulExpressionStatement","src":"13963:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14008:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14019:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14004:3:124"},"nodeType":"YulFunctionCall","src":"14004:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14024:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13997:6:124"},"nodeType":"YulFunctionCall","src":"13997:34:124"},"nodeType":"YulExpressionStatement","src":"13997:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14051:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14062:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14047:3:124"},"nodeType":"YulFunctionCall","src":"14047:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"14067:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14040:6:124"},"nodeType":"YulFunctionCall","src":"14040:34:124"},"nodeType":"YulExpressionStatement","src":"14040:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14094:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14105:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14090:3:124"},"nodeType":"YulFunctionCall","src":"14090:18:124"},{"name":"value3","nodeType":"YulIdentifier","src":"14110:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14083:6:124"},"nodeType":"YulFunctionCall","src":"14083:34:124"},"nodeType":"YulExpressionStatement","src":"14083:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14137:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14148:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14133:3:124"},"nodeType":"YulFunctionCall","src":"14133:19:124"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14158:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"14166:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14154:3:124"},"nodeType":"YulFunctionCall","src":"14154:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14126:6:124"},"nodeType":"YulFunctionCall","src":"14126:84:124"},"nodeType":"YulExpressionStatement","src":"14126:84:124"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13854:9:124","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13865:6:124","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13873:6:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13881:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13889:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13897:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13908:4:124","type":""}],"src":"13704:512:124"},{"body":{"nodeType":"YulBlock","src":"14270:76:124","statements":[{"body":{"nodeType":"YulBlock","src":"14292:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14294:16:124"},"nodeType":"YulFunctionCall","src":"14294:18:124"},"nodeType":"YulExpressionStatement","src":"14294:18:124"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14286:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"14289:1:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14283:2:124"},"nodeType":"YulFunctionCall","src":"14283:8:124"},"nodeType":"YulIf","src":"14280:34:124"},{"nodeType":"YulAssignment","src":"14323:17:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14335:1:124"},{"name":"y","nodeType":"YulIdentifier","src":"14338:1:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14331:3:124"},"nodeType":"YulFunctionCall","src":"14331:9:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"14323:4:124"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14252:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"14255:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"14261:4:124","type":""}],"src":"14221:125:124"},{"body":{"nodeType":"YulBlock","src":"14508:162:124","statements":[{"nodeType":"YulAssignment","src":"14518:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14530:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14541:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14526:3:124"},"nodeType":"YulFunctionCall","src":"14526:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14518:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14560:9:124"},{"name":"value0","nodeType":"YulIdentifier","src":"14571:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14553:6:124"},"nodeType":"YulFunctionCall","src":"14553:25:124"},"nodeType":"YulExpressionStatement","src":"14553:25:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14598:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14609:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14594:3:124"},"nodeType":"YulFunctionCall","src":"14594:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"14614:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14587:6:124"},"nodeType":"YulFunctionCall","src":"14587:34:124"},"nodeType":"YulExpressionStatement","src":"14587:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14641:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14652:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14637:3:124"},"nodeType":"YulFunctionCall","src":"14637:18:124"},{"name":"value2","nodeType":"YulIdentifier","src":"14657:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14630:6:124"},"nodeType":"YulFunctionCall","src":"14630:34:124"},"nodeType":"YulExpressionStatement","src":"14630:34:124"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14461:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14472:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14480:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14488:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14499:4:124","type":""}],"src":"14351:319:124"},{"body":{"nodeType":"YulBlock","src":"14849:229:124","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14866:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14877:2:124","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14859:6:124"},"nodeType":"YulFunctionCall","src":"14859:21:124"},"nodeType":"YulExpressionStatement","src":"14859:21:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14900:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14911:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14896:3:124"},"nodeType":"YulFunctionCall","src":"14896:18:124"},{"kind":"number","nodeType":"YulLiteral","src":"14916:2:124","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14889:6:124"},"nodeType":"YulFunctionCall","src":"14889:30:124"},"nodeType":"YulExpressionStatement","src":"14889:30:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14939:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"14950:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14935:3:124"},"nodeType":"YulFunctionCall","src":"14935:18:124"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"14955:34:124","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14928:6:124"},"nodeType":"YulFunctionCall","src":"14928:62:124"},"nodeType":"YulExpressionStatement","src":"14928:62:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15010:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15021:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15006:3:124"},"nodeType":"YulFunctionCall","src":"15006:18:124"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15026:9:124","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14999:6:124"},"nodeType":"YulFunctionCall","src":"14999:37:124"},"nodeType":"YulExpressionStatement","src":"14999:37:124"},{"nodeType":"YulAssignment","src":"15045:27:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15057:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15068:3:124","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15053:3:124"},"nodeType":"YulFunctionCall","src":"15053:19:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15045:4:124"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14826:9:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14840:4:124","type":""}],"src":"14675:403:124"},{"body":{"nodeType":"YulBlock","src":"15131:205:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15141:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15151:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15145:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15194:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15209:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15212:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15205:3:124"},"nodeType":"YulFunctionCall","src":"15205:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15198:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15224:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15239:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15242:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15235:3:124"},"nodeType":"YulFunctionCall","src":"15235:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15228:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15279:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15281:16:124"},"nodeType":"YulFunctionCall","src":"15281:18:124"},"nodeType":"YulExpressionStatement","src":"15281:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15260:3:124"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15269:2:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15273:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15265:3:124"},"nodeType":"YulFunctionCall","src":"15265:12:124"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15257:2:124"},"nodeType":"YulFunctionCall","src":"15257:21:124"},"nodeType":"YulIf","src":"15254:47:124"},{"nodeType":"YulAssignment","src":"15310:20:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15321:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15326:3:124"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15317:3:124"},"nodeType":"YulFunctionCall","src":"15317:13:124"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15310:3:124"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15114:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15117:1:124","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15123:3:124","type":""}],"src":"15083:253:124"},{"body":{"nodeType":"YulBlock","src":"15498:252:124","statements":[{"nodeType":"YulAssignment","src":"15508:26:124","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15520:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15531:2:124","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15516:3:124"},"nodeType":"YulFunctionCall","src":"15516:18:124"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15508:4:124"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15550:9:124"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15565:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15573:42:124","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15561:3:124"},"nodeType":"YulFunctionCall","src":"15561:55:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15543:6:124"},"nodeType":"YulFunctionCall","src":"15543:74:124"},"nodeType":"YulExpressionStatement","src":"15543:74:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:124","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:124"},"nodeType":"YulFunctionCall","src":"15633:18:124"},{"name":"value1","nodeType":"YulIdentifier","src":"15653:6:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15626:6:124"},"nodeType":"YulFunctionCall","src":"15626:34:124"},"nodeType":"YulExpressionStatement","src":"15626:34:124"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15680:9:124"},{"kind":"number","nodeType":"YulLiteral","src":"15691:2:124","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15676:3:124"},"nodeType":"YulFunctionCall","src":"15676:18:124"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15700:6:124"},{"kind":"number","nodeType":"YulLiteral","src":"15708:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15696:3:124"},"nodeType":"YulFunctionCall","src":"15696:47:124"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15669:6:124"},"nodeType":"YulFunctionCall","src":"15669:75:124"},"nodeType":"YulExpressionStatement","src":"15669:75:124"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15451:9:124","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15462:6:124","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15470:6:124","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15478:6:124","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15489:4:124","type":""}],"src":"15341:409:124"},{"body":{"nodeType":"YulBlock","src":"15804:197:124","statements":[{"nodeType":"YulVariableDeclaration","src":"15814:44:124","value":{"kind":"number","nodeType":"YulLiteral","src":"15824:34:124","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15818:2:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15867:21:124","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15882:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15885:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15878:3:124"},"nodeType":"YulFunctionCall","src":"15878:10:124"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15871:3:124","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15897:21:124","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15912:1:124"},{"name":"_1","nodeType":"YulIdentifier","src":"15915:2:124"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15908:3:124"},"nodeType":"YulFunctionCall","src":"15908:10:124"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15901:3:124","type":""}]},{"body":{"nodeType":"YulBlock","src":"15943:22:124","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15945:16:124"},"nodeType":"YulFunctionCall","src":"15945:18:124"},"nodeType":"YulExpressionStatement","src":"15945:18:124"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15933:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15938:3:124"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15930:2:124"},"nodeType":"YulFunctionCall","src":"15930:12:124"},"nodeType":"YulIf","src":"15927:38:124"},{"nodeType":"YulAssignment","src":"15974:21:124","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15986:3:124"},{"name":"y_1","nodeType":"YulIdentifier","src":"15991:3:124"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15982:3:124"},"nodeType":"YulFunctionCall","src":"15982:13:124"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15974:4:124"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15786:1:124","type":""},{"name":"y","nodeType":"YulTypedName","src":"15789:1:124","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15795:4:124","type":""}],"src":"15755:246:124"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_contract$_IPool_$5073__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$4000__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$5073t_addresst_contract$_IAaveIncentivesController_$4000t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value5 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 192))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_2), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$4000(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_string(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value3, tail_1)\n        mstore(add(headStart, 128), sub(tail_2, headStart))\n        mstore(tail_2, value5)\n        calldatacopy(add(tail_2, 32), value4, value5)\n        mstore(add(add(tail_2, value5), 32), 0)\n        tail := add(add(tail_2, and(add(value5, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":124,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"30695":[{"length":32,"start":2744}],"30877":[{"length":32,"start":4153}],"30880":[{"length":32,"start":894},{"length":32,"start":2617},{"length":32,"start":2943},{"length":32,"start":3150},{"length":32,"start":3602},{"length":32,"start":3949},{"length":32,"start":4685}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063b9a7b622116100a2578063e075398611610071578063e0753986146104ee578063e655dbd81461054a578063f3bfc7381461055d578063f5298aca1461058457600080fd5b8063b9a7b622146104b2578063c04a8a10146104ba578063c222ec8a146104cd578063dd62ed3e146104e057600080fd5b8063a9059cbb116100de578063a9059cbb146101fd578063b16a19de14610462578063b1bf962d14610480578063b3f1c93d1461048857600080fd5b80637ecebe001461042457806395d89b411461045a578063a457c2d7146101fd57600080fd5b8063313ce5671161017c57806370a082311161014b57806370a08231146103665780637535d2461461037957806375d26413146103c557806378160376146103e857600080fd5b8063313ce567146103035780633644e5151461031857806339509351146101fd5780636bd76d241461032057600080fd5b80630b52d558116101b85780630b52d5581461028257806318160ddd146102975780631da24f3e146102ad57806323b872dd146102f557600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630afbcdc914610220575b600080fd5b6101e7610597565b6040516101f49190611e79565b60405180910390f35b61021061020b366004611ec1565b610629565b60405190151581526020016101f4565b61026d61022e366004611eed565b73ffffffffffffffffffffffffffffffffffffffff16600090815260386020526040902054603a546fffffffffffffffffffffffffffffffff90911691565b604080519283526020830191909152016101f4565b610295610290366004611f1b565b610699565b005b61029f6109ea565b6040519081526020016101f4565b61029f6102bb366004611eed565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61021061020b366004611f89565b603d5460405160ff90911681526020016101f4565b61029f610ab4565b61029f61032e366004611fca565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61029f610374366004611eed565b610aed565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff166103a0565b6101e76040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61029f610432366004611eed565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b6101e7610bf8565b60375473ffffffffffffffffffffffffffffffffffffffff166103a0565b61029f610c07565b61049b610496366004612003565b610c12565b6040805192151583526020830191909152016101f4565b61029f600181565b6102956104c8366004611ec1565b610d1b565b6102956104db36600461216c565b610d2a565b61029f61020b366004611fca565b61029f6104fc366004611eed565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b610295610558366004611eed565b611035565b61029f7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b61029f610592366004612241565b611213565b6060603b80546105a690612276565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290612276565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815260009161069091600401611e79565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881661071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054906107be610ab4565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c001604051602081830303815290604052805190602001206040516020016108769291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156108fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b506109ae8260016122f9565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603460205260409020556109df8989896112d8565b505050505050505050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610aaf917f00000000000000000000000000000000000000000000000000000000000000009091169063386497fd90602401602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190612311565b603a549061134f565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ae5575060355490565b610aaf6113a6565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff1680610b335750600092915050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152610bf1917f0000000000000000000000000000000000000000000000000000000000000000169063386497fd90602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612311565b829061134f565b9392505050565b6060603c80546105a690612276565b6000610aaf603a5490565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610cfa57610cfa85878661146b565b610d068686868661152b565b610d0e610c07565b9150915094509492505050565b610d263383836112d8565b5050565b6001805460ff1680610d3b5750303b155b80610d47575060005481115b610dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610690565b60015460ff16158015610e1057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525090610ecd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b50610ed78661176c565b610ee08561177f565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a1617179055610f656113a6565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051610ff29695949392919061232a565b60405180910390a3801561102957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c691906123ca565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611133573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115791906123e7565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b506112c88460008585611792565b6112d0610c07565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761138457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d1611aaf565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526036602090815260408083209386168352929052908120546114ab908390612409565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19061151d9086815260200190565b60405180910390a450505050565b6000806115388484611ab9565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816115a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161160491849170010000000000000000000000000000000090041661134f565b61160e838761134f565b6116189190612409565b905061162385611af8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905561168b8761168685611af8565b611b9e565b600061169782886122f9565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116f991815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b8051610d2690603b906020840190611d7e565b8051610d2690603c906020840190611d7e565b600061179e8383611ab9565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161180d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161186a91849170010000000000000000000000000000000090041661134f565b611874838661134f565b61187e9190612409565b905061188984611af8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556118f1876118ec85611af8565b611d1a565b848111156119d05760006119058683612409565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196791815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611aa6565b60006119dc8287612409565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a3e91815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909060600160405180910390a3505b50505050505050565b6060610aaf610597565b600081156b033b2e3c9fd0803ce800000060028404190484111715611add57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610690565b5090565b603a54611bbd6fffffffffffffffffffffffffffffffff8316826122f9565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c028382612420565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d546101009004168015611d13576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015611cff57600080fd5b505af11580156109df573d6000803e3d6000fd5b5050505050565b603a54611d396fffffffffffffffffffffffffffffffff831682612409565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c028382612454565b828054611d8a90612276565b90600052602060002090601f016020900481019282611dac5760008555611df2565b82601f10611dc557805160ff1916838001178555611df2565b82800160010185558215611df2579182015b82811115611df2578251825591602001919060010190611dd7565b50611b9a9291505b80821115611b9a5760008155600101611dfa565b6000815180845260005b81811015611e3457602081850181015186830182015201611e18565b81811115611e46576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf16020830184611e0e565b73ffffffffffffffffffffffffffffffffffffffff81168114611eae57600080fd5b50565b8035611ebc81611e8c565b919050565b60008060408385031215611ed457600080fd5b8235611edf81611e8c565b946020939093013593505050565b600060208284031215611eff57600080fd5b8135610bf181611e8c565b803560ff81168114611ebc57600080fd5b600080600080600080600060e0888a031215611f3657600080fd5b8735611f4181611e8c565b96506020880135611f5181611e8c565b95506040880135945060608801359350611f6d60808901611f0a565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215611f9e57600080fd5b8335611fa981611e8c565b92506020840135611fb981611e8c565b929592945050506040919091013590565b60008060408385031215611fdd57600080fd5b8235611fe881611e8c565b91506020830135611ff881611e8c565b809150509250929050565b6000806000806080858703121561201957600080fd5b843561202481611e8c565b9350602085013561203481611e8c565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261208957600080fd5b813567ffffffffffffffff808211156120a4576120a4612049565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156120ea576120ea612049565b8160405283815286602085880101111561210357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f84011261213557600080fd5b50813567ffffffffffffffff81111561214d57600080fd5b60208301915083602082850101111561216557600080fd5b9250929050565b60008060008060008060008060e0898b03121561218857600080fd5b883561219381611e8c565b975060208901356121a381611e8c565b96506121b160408a01611eb1565b95506121bf60608a01611f0a565b9450608089013567ffffffffffffffff808211156121dc57600080fd5b6121e88c838d01612078565b955060a08b01359150808211156121fe57600080fd5b61220a8c838d01612078565b945060c08b013591508082111561222057600080fd5b5061222d8b828c01612123565b999c989b5096995094979396929594505050565b60008060006060848603121561225657600080fd5b833561226181611e8c565b95602085013595506040909401359392505050565b600181811c9082168061228a57607f821691505b602082108114156122c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561230c5761230c6122ca565b500190565b60006020828403121561232357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a06040820152600061236260a0830187611e0e565b82810360608401526123748187611e0e565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b6000602082840312156123dc57600080fd5b8151610bf181611e8c565b6000602082840312156123f957600080fd5b81518015158114610bf157600080fd5b60008282101561241b5761241b6122ca565b500390565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561244b5761244b6122ca565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561247d5761247d6122ca565b03939250505056fea26469706673582212208c26f709abec806abf23a180dc9b2d4a72a1949f588c15cbbd49912617d13a4a64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xB9A7B622 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x55D JUMPI DUP1 PUSH4 0xF5298ACA EQ PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x303 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB52D558 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x220 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC1 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x26D PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1B JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x29F PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x2BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xAB4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST PUSH2 0x3A0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x1E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x432 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0xBF8 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xC07 JUMP JUMPDEST PUSH2 0x49B PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x2003 JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC1 JUMP JUMPDEST PUSH2 0xD1B JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x216C JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x29F PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCA JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x558 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH2 0x1035 JUMP JUMPDEST PUSH2 0x29F PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x2241 JUMP JUMPDEST PUSH2 0x1213 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2276 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x2276 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x690 SWAP2 PUSH1 0x4 ADD PUSH2 0x1E79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x71B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x7BE PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x876 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0x9AE DUP3 PUSH1 0x1 PUSH2 0x22F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x9DF DUP10 DUP10 DUP10 PUSH2 0x12D8 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xAAF SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA82 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAA6 SWAP2 SWAP1 PUSH2 0x2311 JUMP JUMPDEST PUSH1 0x3A SLOAD SWAP1 PUSH2 0x134F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAE5 JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAAF PUSH2 0x13A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0xBF1 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBEA SWAP2 SWAP1 PUSH2 0x2311 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x134F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2276 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAAF PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCFA JUMPI PUSH2 0xCFA DUP6 DUP8 DUP7 PUSH2 0x146B JUMP JUMPDEST PUSH2 0xD06 DUP7 DUP7 DUP7 DUP7 PUSH2 0x152B JUMP JUMPDEST PUSH2 0xD0E PUSH2 0xC07 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD26 CALLER DUP4 DUP4 PUSH2 0x12D8 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0xD3B JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0xD47 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xDD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE10 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xECD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0xED7 DUP7 PUSH2 0x176C JUMP JUMPDEST PUSH2 0xEE0 DUP6 PUSH2 0x177F JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0xF65 PUSH2 0x13A6 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0xFF2 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x232A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x1029 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C6 SWAP2 SWAP1 PUSH2 0x23CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1133 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1157 SWAP2 SWAP1 PUSH2 0x23E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x12BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0x12C8 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1792 JUMP JUMPDEST PUSH2 0x12D0 PUSH2 0xC07 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x13D1 PUSH2 0x1AAF JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x14AB SWAP1 DUP4 SWAP1 PUSH2 0x2409 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x151D SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1538 DUP5 DUP5 PUSH2 0x1AB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x15A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1604 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x134F JUMP JUMPDEST PUSH2 0x160E DUP4 DUP8 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x1618 SWAP2 SWAP1 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH2 0x1623 DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x168B DUP8 PUSH2 0x1686 DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x1B9E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1697 DUP3 DUP9 PUSH2 0x22F9 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x16F9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D7E JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D7E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x179E DUP4 DUP4 PUSH2 0x1AB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x180D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x186A SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x134F JUMP JUMPDEST PUSH2 0x1874 DUP4 DUP7 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x187E SWAP2 SWAP1 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH2 0x1889 DUP5 PUSH2 0x1AF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x18F1 DUP8 PUSH2 0x18EC DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x1D1A JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x19D0 JUMPI PUSH1 0x0 PUSH2 0x1905 DUP7 DUP4 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1967 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1AA6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DC DUP3 DUP8 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1A3E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAAF PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1ADD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1B9A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1BBD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x22F9 JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C02 DUP4 DUP3 PUSH2 0x2420 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x1D13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1D39 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x2409 JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C02 DUP4 DUP3 PUSH2 0x2454 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1D8A SWAP1 PUSH2 0x2276 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1DAC JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x1DF2 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1DC5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1DF2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1DF2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1DF2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1DD7 JUMP JUMPDEST POP PUSH2 0x1B9A SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B9A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E34 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1E18 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1E46 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E0E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1EBC DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1ED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1EDF DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1EFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1EBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1F36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1F41 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x1F51 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1F6D PUSH1 0x80 DUP10 ADD PUSH2 0x1F0A JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1F9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FA9 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FB9 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FE8 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1FF8 DUP2 PUSH2 0x1E8C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2019 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2024 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x2034 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2089 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x20A4 JUMPI PUSH2 0x20A4 PUSH2 0x2049 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x20EA JUMPI PUSH2 0x20EA PUSH2 0x2049 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2103 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x2188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x2193 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x21A3 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP7 POP PUSH2 0x21B1 PUSH1 0x40 DUP11 ADD PUSH2 0x1EB1 JUMP JUMPDEST SWAP6 POP PUSH2 0x21BF PUSH1 0x60 DUP11 ADD PUSH2 0x1F0A JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21E8 DUP13 DUP4 DUP14 ADD PUSH2 0x2078 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x21FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x220A DUP13 DUP4 DUP14 ADD PUSH2 0x2078 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x222D DUP12 DUP3 DUP13 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2261 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x228A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x22C4 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x230C JUMPI PUSH2 0x230C PUSH2 0x22CA JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2362 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x1E0E JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2374 DUP2 DUP8 PUSH2 0x1E0E JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x241B JUMPI PUSH2 0x241B PUSH2 0x22CA JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x244B JUMPI PUSH2 0x244B PUSH2 0x22CA JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x247D JUMPI PUSH2 0x247D PUSH2 0x22CA JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0x26 0xF7 MULMOD 0xAB 0xEC DUP1 PUSH11 0xBF23A180DC9B2D4A72A194 SWAP16 PC DUP13 ISZERO 0xCB 0xBD 0x49 SWAP2 0x26 OR 0xD1 GASPRICE 0x4A PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1177:3875:118:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4352:125:118;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:124;;1551:22;1533:41;;1521:2;1506:18;4352:125:118;1393:187:124;1386:173:123;;;;;;:::i;:::-;3518:19:121;;1479:7:123;3518:19:121;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:123;;;;;2011:25:124;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:123;1837:248:124;1424:823:119;;;;;;:::i;:::-;;:::i;:::-;;3629:171:118;;;:::i;:::-;;;3136:25:124;;;3124:2;3109:18;3629:171:118;2990:177:124;1225:119:123;;;;;;:::i;:::-;3518:19:121;;1296:7:123;3518:19:121;;;:10;:19;;;;;:27;;;;1225:119:123;4481:139:118;;;;;;:::i;3178:86:121:-;3250:9;;3178:86;;3250:9;;;;3775:36:124;;3763:2;3748:18;3178:86:121;3633:184:124;867:185:120;;;:::i;2292:165:119:-;;;;;;:::i;:::-;2417:27;;;;2395:7;2417:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2292:165;2686:280:118;;;;;;:::i;:::-;;:::i;2408:27:121:-;;;;;;;;4587:42:124;4575:55;;;4557:74;;4545:2;4530:18;2408:27:121;4397:240:124;3691:132:121;3797:21;;;;;;;3691:132;;192:50:120;;232:10;;;;;;;;;;;;;;;;;192:50;;1260:101;;;;;;:::i;:::-;1342:14;;1320:7;1342:14;;;:7;:14;;;;;;;1260:101;3051:90:121;;;:::i;4939:111:118:-;5029:16;;;;4939:111;;1601:113:123;;;:::i;3007:337:118:-;;;;;;:::i;:::-;;:::i;:::-;;;;6084:14:124;;6077:22;6059:41;;6131:2;6116:18;;6109:34;;;;6032:18;3007:337:118;5891:258:124;1332:49:118;;1378:3;1332:49;;1237:142:119;;;;;;:::i;:::-;;:::i;1700:803:118:-;;;;;;:::i;:::-;;:::i;4213:135::-;;;;;;:::i;1756:138:123:-;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:121;;;;;;:::i;:::-;;:::i;897:153:119:-;;956:94;897:153;;3385:215:118;;;;;;:::i;:::-;;:::i;2930:84:121:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4352:125:118:-;4441:30;;;;;;;;;;;;;;;;4434:38;;;;;4422:4;;4434:38;;;;;:::i;:::-;;;;;;;;1424:823:119;1633:29;;;;;;;;;;;;;;;;;1608:23;;;1600:63;;;;;;;;;;;;;:::i;:::-;;1727:8;1708:15;:27;;1737:25;;;;;;;;;;;;;;;;;1700:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1797:18:119;;;1769:25;1797:18;;;:7;:18;;;;;;;1901;:16;:18::i;:::-;1950:87;;;956:94;1950:87;;;10160:25:124;10233:42;10221:55;;10201:18;;;10194:83;;;;10293:18;;;10286:34;;;10336:18;;;10329:34;;;10379:19;;;10372:35;;;10132:19;;1950:87:119;;;;;;;;;;;;1929:118;;;;;;1855:200;;;;;;;;10688:66:124;10676:79;;10780:1;10771:11;;10764:27;;;;10816:2;10807:12;;10800:28;10853:2;10844:12;;10418:444;1855:200:119;;;;;;;;;;;;;;1838:223;;1855:200;1838:223;;;;2088:26;;;;;;;;;11094:25:124;;;11167:4;11155:17;;11135:18;;;11128:45;;;;11189:18;;;11182:34;;;11232:18;;;11225:34;;;1838:223:119;-1:-1:-1;2088:26:119;;11066:19:124;;2088:26:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:39;;:9;:39;;;2116:24;;;;;;;;;;;;;;;;;2067:74;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2168:21:119;:17;2188:1;2168:21;:::i;:::-;2147:18;;;;;;;:7;:18;;;;;:42;2195:47;2155:9;2225;2236:5;2195:18;:47::i;:::-;1594:653;;1424:823;;;;;;;:::o;3629:171:118:-;3777:16;;3739:55;;;;;:37;3777:16;;;3739:55;;;4557:74:124;3690:7:118;;3712:83;;3739:4;:37;;;;;;4530:18:124;;3739:55:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3376:12:121;;3712:26:118;;:83::i;:::-;3705:90;;3629:171;:::o;867:185:120:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:120;;;867:185::o;939:69::-;1020:27;:25;:27::i;2686:280:118:-;3518:19:121;;;2757:7:118;3518:19:121;;;:10;:19;;;;;:27;;;;2824:47:118;;-1:-1:-1;2863:1:118;;2686:280;-1:-1:-1;;2686:280:118:o;2824:47::-;2943:16;;2905:55;;;;;:37;2943:16;;;2905:55;;;4557:74:124;2884:77:118;;2905:4;:37;;;;4530:18:124;;2905:55:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2884:13;;:20;:77::i;:::-;2877:84;2686:280;-1:-1:-1;;;2686:280:118:o;3051:90:121:-;3101:13;3129:7;3122:14;;;;;:::i;1601:113:123:-;1668:7;1690:19;3376:12:121;;;3293:100;3007:337:118;1519:26:121;;;;;;;;;;;;;;;;;3150:4:118;;;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3183:10:118::1;3175:18;;:4;:18;;;3171:89;;3203:50;3228:10;3240:4;3246:6;3203:24;:50::i;:::-;3273:44;3285:4;3291:10;3303:6;3311:5;3273:11;:44::i;:::-;3319:19;:17;:19::i;:::-;3265:74;;;;3007:337:::0;;;;;;;:::o;1237:142:119:-;1323:51;678:10:4;1356:9:119;1367:6;1323:18;:51::i;:::-;1237:142;;:::o;1700:803:118:-;1378:3;1217:12:87;;;;;:31;;-1:-1:-1;2436:9:87;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;11983:2:124;1202:146:87;;;11965:21:124;12022:2;12002:18;;;11995:30;12061:34;12041:18;;;12034:62;12132:16;12112:18;;;12105:44;12166:19;;1202:146:87;11781:410:124;1202:146:87;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2021:4:118::1;2001:24;;:16;:24;;;2027:34;;;;;;;;;;;;;;;;::::0;1993:69:::1;;;;;;;;;;;;;;:::i;:::-;;2068:23;2077:13;2068:8;:23::i;:::-;2097:27;2108:15;2097:10;:27::i;:::-;7979:9:121::0;:23;;2168:16:118::1;:34:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2208:44;::::1;2168:34;2208:44;::::0;;;;7979:23:121;;;2208:44:118;::::1;::::0;;2278:27:::1;:25;:27::i;:::-;2259:16;:46;;;;2367:4;2317:181;;2336:15;2317:181;;;2388:20;2417:17;2442:13;2463:15;2486:6;;2317:181;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:87::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1700:803:118;;;;;;;;:::o;3938:139:121:-;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;4557:74:124;1211:72:121;;-1:-1:-1;1297:22:121;;;;;;4530:18:124;;1297:34:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:121::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3385:215:118:-;1519:26:121;;;;;;;;;;;;;;;;;3504:7:118;;678:10:4;1512:4:121;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3519:44:118::1;3531:4;3545:1;3549:6;3557:5;3519:11;:44::i;:::-;3576:19;:17;:19::i;:::-;3569:26:::0;3385:215;-1:-1:-1;;;;3385:215:118:o;2749:233:119:-;2846:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;:48;;;2952:16;;2905:72;;3136:25:124;;;2952:16:119;;;2846:39;;:28;2905:72;;3109:18:124;2905:72:119;;;;;;;2749:233;;;:::o;2253:319:107:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:107;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;1475:298:120:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13963:25:124;;;;14004:18;;;13997:34;;;;1674:26:120;14047:18:124;;;14040:34;1712:13:120;14090:18:124;;;14083:34;1745:4:120;14133:19:124;;;14126:84;13935:19;;1582:178:120;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;3288:330:119:-;3414:28;;;;3391:20;3414:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;3456:6;;3414:48;:::i;:::-;3469:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;3582:16;;3535:78;;3391:71;;-1:-1:-1;3582:16:119;;;3535:78;;;;3391:71;3136:25:124;;3124:2;3109:18;;2990:177;3535:78:119;;;;;;;;3385:233;3288:330;;;:::o;2295:763:123:-;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:123;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;2543:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;2543:21:123;2662:59;;3518:27:121;;2683:37:123;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;3136:25:124;;3124:2;3109:18;;2990:177;2900:46:123;;;;;;;;2957:62;;;14553:25:124;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;2957:62:123;;;;;;;;;;;14541:2:124;14526:18;2957:62:123;;;;;;;-1:-1:-1;;3034:18:123;;2295:763;-1:-1:-1;;;;;;2295:763:123:o;7513:76:121:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;3512:888:123:-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:123;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:121;;;3719:21:123;3518:19:121;;;:10;:19;;;;;:27;;;;;;3719:21:123;3832:53;;3518:27:121;;3853:31:123;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;3136:25:124;;3124:2;3109:18;;2990:177;4092:40:123;;;;;;;;4145:54;;;14553:25:124;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;4145:54:123;;;;;;;;14541:2:124;14526:18;4145:54:123;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;3136:25:124;;3124:2;3109:18;;2990:177;4280:40:123;;;;;;;;4333:56;;;14553:25:124;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;4333:56:123;;;;;;;;;;;14541:2:124;14526:18;4333:56:123;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;3833:96:118:-;3890:13;3918:6;:4;:6::i;2840:322:107:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:107;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;14877:2:124;1635:78:12;;;14859:21:124;14916:2;14896:18;;;14889:30;14955:34;14935:18;;;14928:62;15026:9;15006:18;;;14999:37;15053:19;;1635:78:12;14675:403:124;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;1069:519:122:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15561:55:124;;;1495:82:122;;;15543:74:124;15633:18;;;15626:34;;;15708;15696:47;;15676:18;;;15669:75;1495:38:122;;;;;15516:18:124;;1495:82:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:124;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:124;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:124:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:124:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2090:156::-;2156:20;;2216:4;2205:16;;2195:27;;2185:55;;2236:1;2233;2226:12;2251:734;2362:6;2370;2378;2386;2394;2402;2410;2463:3;2451:9;2442:7;2438:23;2434:33;2431:53;;;2480:1;2477;2470:12;2431:53;2519:9;2506:23;2538:31;2563:5;2538:31;:::i;:::-;2588:5;-1:-1:-1;2645:2:124;2630:18;;2617:32;2658:33;2617:32;2658:33;:::i;:::-;2710:7;-1:-1:-1;2764:2:124;2749:18;;2736:32;;-1:-1:-1;2815:2:124;2800:18;;2787:32;;-1:-1:-1;2838:37:124;2870:3;2855:19;;2838:37;:::i;:::-;2828:47;;2922:3;2911:9;2907:19;2894:33;2884:43;;2974:3;2963:9;2959:19;2946:33;2936:43;;2251:734;;;;;;;;;;:::o;3172:456::-;3249:6;3257;3265;3318:2;3306:9;3297:7;3293:23;3289:32;3286:52;;;3334:1;3331;3324:12;3286:52;3373:9;3360:23;3392:31;3417:5;3392:31;:::i;:::-;3442:5;-1:-1:-1;3499:2:124;3484:18;;3471:32;3512:33;3471:32;3512:33;:::i;:::-;3172:456;;3564:7;;-1:-1:-1;;;3618:2:124;3603:18;;;;3590:32;;3172:456::o;4004:388::-;4072:6;4080;4133:2;4121:9;4112:7;4108:23;4104:32;4101:52;;;4149:1;4146;4139:12;4101:52;4188:9;4175:23;4207:31;4232:5;4207:31;:::i;:::-;4257:5;-1:-1:-1;4314:2:124;4299:18;;4286:32;4327:33;4286:32;4327:33;:::i;:::-;4379:7;4369:17;;;4004:388;;;;;:::o;5361:525::-;5447:6;5455;5463;5471;5524:3;5512:9;5503:7;5499:23;5495:33;5492:53;;;5541:1;5538;5531:12;5492:53;5580:9;5567:23;5599:31;5624:5;5599:31;:::i;:::-;5649:5;-1:-1:-1;5706:2:124;5691:18;;5678:32;5719:33;5678:32;5719:33;:::i;:::-;5361:525;;5771:7;;-1:-1:-1;;;;5825:2:124;5810:18;;5797:32;;5876:2;5861:18;5848:32;;5361:525::o;6154:184::-;6206:77;6203:1;6196:88;6303:4;6300:1;6293:15;6327:4;6324:1;6317:15;6343:778;6386:5;6439:3;6432:4;6424:6;6420:17;6416:27;6406:55;;6457:1;6454;6447:12;6406:55;6493:6;6480:20;6519:18;6556:2;6552;6549:10;6546:36;;;6562:18;;:::i;:::-;6696:2;6690:9;6758:4;6750:13;;6601:66;6746:22;;;6770:2;6742:31;6738:40;6726:53;;;6794:18;;;6814:22;;;6791:46;6788:72;;;6840:18;;:::i;:::-;6880:10;6876:2;6869:22;6915:2;6907:6;6900:18;6961:3;6954:4;6949:2;6941:6;6937:15;6933:26;6930:35;6927:55;;;6978:1;6975;6968:12;6927:55;7042:2;7035:4;7027:6;7023:17;7016:4;7008:6;7004:17;6991:54;7089:1;7082:4;7077:2;7069:6;7065:15;7061:26;7054:37;7109:6;7100:15;;;;;;6343:778;;;;:::o;7126:347::-;7177:8;7187:6;7241:3;7234:4;7226:6;7222:17;7218:27;7208:55;;7259:1;7256;7249:12;7208:55;-1:-1:-1;7282:20:124;;7325:18;7314:30;;7311:50;;;7357:1;7354;7347:12;7311:50;7394:4;7386:6;7382:17;7370:29;;7446:3;7439:4;7430:6;7422;7418:19;7414:30;7411:39;7408:59;;;7463:1;7460;7453:12;7408:59;7126:347;;;;;:::o;7478:1302::-;7668:6;7676;7684;7692;7700;7708;7716;7724;7777:3;7765:9;7756:7;7752:23;7748:33;7745:53;;;7794:1;7791;7784:12;7745:53;7833:9;7820:23;7852:31;7877:5;7852:31;:::i;:::-;7902:5;-1:-1:-1;7959:2:124;7944:18;;7931:32;7972:33;7931:32;7972:33;:::i;:::-;8024:7;-1:-1:-1;8050:38:124;8084:2;8069:18;;8050:38;:::i;:::-;8040:48;;8107:36;8139:2;8128:9;8124:18;8107:36;:::i;:::-;8097:46;;8194:3;8183:9;8179:19;8166:33;8218:18;8259:2;8251:6;8248:14;8245:34;;;8275:1;8272;8265:12;8245:34;8298:50;8340:7;8331:6;8320:9;8316:22;8298:50;:::i;:::-;8288:60;;8401:3;8390:9;8386:19;8373:33;8357:49;;8431:2;8421:8;8418:16;8415:36;;;8447:1;8444;8437:12;8415:36;8470:52;8514:7;8503:8;8492:9;8488:24;8470:52;:::i;:::-;8460:62;;8575:3;8564:9;8560:19;8547:33;8531:49;;8605:2;8595:8;8592:16;8589:36;;;8621:1;8618;8611:12;8589:36;;8660:60;8712:7;8701:8;8690:9;8686:24;8660:60;:::i;:::-;7478:1302;;;;-1:-1:-1;7478:1302:124;;-1:-1:-1;7478:1302:124;;;;;;8739:8;-1:-1:-1;;;7478:1302:124:o;9071:383::-;9148:6;9156;9164;9217:2;9205:9;9196:7;9192:23;9188:32;9185:52;;;9233:1;9230;9223:12;9185:52;9272:9;9259:23;9291:31;9316:5;9291:31;:::i;:::-;9341:5;9393:2;9378:18;;9365:32;;-1:-1:-1;9444:2:124;9429:18;;;9416:32;;9071:383;-1:-1:-1;;;9071:383:124:o;9459:437::-;9538:1;9534:12;;;;9581;;;9602:61;;9656:4;9648:6;9644:17;9634:27;;9602:61;9709:2;9701:6;9698:14;9678:18;9675:38;9672:218;;;9746:77;9743:1;9736:88;9847:4;9844:1;9837:15;9875:4;9872:1;9865:15;9672:218;;9459:437;;;:::o;11270:184::-;11322:77;11319:1;11312:88;11419:4;11416:1;11409:15;11443:4;11440:1;11433:15;11459:128;11499:3;11530:1;11526:6;11523:1;11520:13;11517:39;;;11536:18;;:::i;:::-;-1:-1:-1;11572:9:124;;11459:128::o;11592:184::-;11662:6;11715:2;11703:9;11694:7;11690:23;11686:32;11683:52;;;11731:1;11728;11721:12;11683:52;-1:-1:-1;11754:16:124;;11592:184;-1:-1:-1;11592:184:124:o;12196:965::-;12513:42;12505:6;12501:55;12490:9;12483:74;12605:4;12597:6;12593:17;12588:2;12577:9;12573:18;12566:45;12647:3;12642:2;12631:9;12627:18;12620:31;12464:4;12674:46;12715:3;12704:9;12700:19;12692:6;12674:46;:::i;:::-;12768:9;12760:6;12756:22;12751:2;12740:9;12736:18;12729:50;12802:33;12828:6;12820;12802:33;:::i;:::-;12788:47;;12884:9;12876:6;12872:22;12866:3;12855:9;12851:19;12844:51;12919:6;12911;12904:22;12973:6;12965;12960:2;12952:6;12948:15;12935:45;13026:1;13021:2;13012:6;13004;13000:19;12996:28;12989:39;13152:2;13082:66;13077:2;13069:6;13065:15;13061:88;13053:6;13049:101;13045:110;13037:118;;;12196:965;;;;;;;;;:::o;13166:251::-;13236:6;13289:2;13277:9;13268:7;13264:23;13260:32;13257:52;;;13305:1;13302;13295:12;13257:52;13337:9;13331:16;13356:31;13381:5;13356:31;:::i;13422:277::-;13489:6;13542:2;13530:9;13521:7;13517:23;13513:32;13510:52;;;13558:1;13555;13548:12;13510:52;13590:9;13584:16;13643:5;13636:13;13629:21;13622:5;13619:32;13609:60;;13665:1;13662;13655:12;14221:125;14261:4;14289:1;14286;14283:8;14280:34;;;14294:18;;:::i;:::-;-1:-1:-1;14331:9:124;;14221:125::o;15083:253::-;15123:3;15151:34;15212:2;15209:1;15205:10;15242:2;15239:1;15235:10;15273:3;15269:2;15265:12;15260:3;15257:21;15254:47;;;15281:18;;:::i;:::-;15317:13;;15083:253;-1:-1:-1;;;;15083:253:124:o;15755:246::-;15795:4;15824:34;15908:10;;;;15878;;15930:12;;;15927:38;;;15945:18;;:::i;:::-;15982:13;;15755:246;-1:-1:-1;;;15755:246:124:o"},"gasEstimates":{"creation":{"codeDepositCost":"1880600","executionCost":"infinite","totalCost":"infinite"},"external":{"DEBT_TOKEN_REVISION()":"240","DELEGATION_WITH_SIG_TYPEHASH()":"283","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","POOL()":"infinite","UNDERLYING_ASSET_ADDRESS()":"2374","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","approveDelegation(address,uint256)":"26988","balanceOf(address)":"infinite","borrowAllowance(address,address)":"infinite","burn(address,uint256,uint256)":"infinite","decimals()":"2335","decreaseAllowance(address,uint256)":"infinite","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","getIncentivesController()":"2407","getPreviousIndex(address)":"2568","getScaledUserBalanceAndSupply(address)":"4737","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2553","scaledBalanceOf(address)":"2603","scaledTotalSupply()":"2419","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"_EIP712BaseId()":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"DEBT_TOKEN_REVISION()":"b9a7b622","DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","POOL()":"7535d246","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveDelegation(address,uint256)":"c04a8a10","balanceOf(address)":"70a08231","borrowAllowance(address,address)":"6bd76d24","burn(address,uint256,uint256)":"f5298aca","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","name()":"06fdde03","nonces(address)":"7ecebe00","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"DEBT_TOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Transfer and approve functionalities are disabled since its a non-transferable token\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"burn(address,uint256,uint256)\":{\"details\":\"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount getting burned\",\"from\":\"The address from which the debt will be burned\",\"index\":\"The variable debt index of the reserve\"},\"returns\":{\"_0\":\"The scaled total debt of the reserve\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of debt being minted\",\"index\":\"The variable debt index of the reserve\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if the previous balance of the user is 0, false otherwise\",\"_1\":\"The scaled total debt of the reserve\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.\"}},\"title\":\"VariableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"burn(address,uint256,uint256)\":{\"notice\":\"Burns user variable debt\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Implements a variable debt token to track the borrowing positions of users at variable rate mode\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/VariableDebtToken.sol\":\"VariableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/VariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../interfaces/IVariableDebtToken.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\n\\n/**\\n * @title VariableDebtToken\\n * @author Aave\\n * @notice Implements a variable debt token to track the borrowing positions of users\\n * at variable rate mode\\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\\n */\\ncontract VariableDebtToken is DebtTokenBase, ScaledBalanceTokenBase, IVariableDebtToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  )\\n    DebtTokenBase()\\n    ScaledBalanceTokenBase(pool, 'VARIABLE_DEBT_TOKEN_IMPL', 'VARIABLE_DEBT_TOKEN_IMPL', 0)\\n  {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableDebtToken\\n  function initialize(\\n    IPool initializingPool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(debtTokenName);\\n    _setSymbol(debtTokenSymbol);\\n    _setDecimals(debtTokenDecimals);\\n\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      address(incentivesController),\\n      debtTokenDecimals,\\n      debtTokenName,\\n      debtTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return DEBT_TOKEN_REVISION;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address user) public view virtual override returns (uint256) {\\n    uint256 scaledBalance = super.balanceOf(user);\\n\\n    if (scaledBalance == 0) {\\n      return 0;\\n    }\\n\\n    return scaledBalance.rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool, uint256) {\\n    if (user != onBehalfOf) {\\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\\n    }\\n    return (_mintScaled(user, onBehalfOf, amount, index), scaledTotalSupply());\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function burn(\\n    address from,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (uint256) {\\n    _burnScaled(from, address(0), amount, index);\\n    return scaledTotalSupply();\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply().rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /**\\n   * @dev Being non transferrable, the debt token does not implement any of the\\n   * standard ERC20 functions for transfer and allowance.\\n   */\\n  function transfer(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function allowance(address, address) external view virtual override returns (uint256) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function approve(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n}\\n\",\"keccak256\":\"0xd86b1ee620cb0fb2d3db1926f31660cd94c055e17103102e2b13f84c7a65191d\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30691,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":30468,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30475,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"},{"astId":30857,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_userState","offset":0,"slot":"56","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_allowances","offset":0,"slot":"57","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_totalSupply","offset":0,"slot":"58","type":"t_uint256"},{"astId":30867,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_name","offset":0,"slot":"59","type":"t_string_storage"},{"astId":30869,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_symbol","offset":0,"slot":"60","type":"t_string_storage"},{"astId":30871,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_decimals","offset":0,"slot":"61","type":"t_uint8"},{"astId":30874,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_incentivesController","offset":1,"slot":"61","type":"t_contract(IAaveIncentivesController)4000"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"burn(address,uint256,uint256)":{"notice":"Burns user variable debt"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address"},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Implements a variable debt token to track the borrowing positions of users at variable rate mode","version":1}}},"contracts/protocol/tokenization/base/DebtTokenBase.sol":{"DebtTokenBase":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"constructor":{"details":"Constructor."},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}}},"title":"DebtTokenBase","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","approveDelegation(address,uint256)":"c04a8a10","borrowAllowance(address,address)":"6bd76d24","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","nonces(address)":"7ecebe00"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"constructor\":{\"details\":\"Constructor.\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}}},\"title\":\"DebtTokenBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"}},\"notice\":\"Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/base/DebtTokenBase.sol\":\"DebtTokenBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12676,"contract":"contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":12679,"contract":"contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":12749,"contract":"contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":30691,"contract":"contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":30468,"contract":"contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30475,"contract":"contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"}},"notice":"Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken","version":1}}},"contracts/protocol/tokenization/base/EIP712Base.sol":{"EIP712Base":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"constructor":{"details":"Constructor."},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}}},"title":"EIP712Base","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","nonces(address)":"7ecebe00"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"constructor\":{\"details\":\"Constructor.\"},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}}},\"title\":\"EIP712Base\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"}},\"notice\":\"Base contract implementation of EIP712.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/base/EIP712Base.sol\":\"EIP712Base\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":30691,"contract":"contracts/protocol/tokenization/base/EIP712Base.sol:EIP712Base","label":"_nonces","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":30693,"contract":"contracts/protocol/tokenization/base/EIP712Base.sol:EIP712Base","label":"_domainSeparator","offset":0,"slot":"1","type":"t_bytes32"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"}},"notice":"Base contract implementation of EIP712.","version":1}}},"contracts/protocol/tokenization/base/IncentivizedERC20.sol":{"IncentivizedERC20":{"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":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave, inspired by the Openzeppelin ERC20 implementation","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 `amount` 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 amount of tokens owned by `account`."},"constructor":{"details":"Constructor.","params":{"decimals":"The number of decimals of the token","name":"The name of the token","pool":"The reference to the main Pool contract","symbol":"The symbol of the token"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"title":"IncentivizedERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"POOL()":"7535d246","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave, inspired by the Openzeppelin ERC20 implementation\",\"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 `amount` 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 amount of tokens owned by `account`.\"},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"decimals\":\"The number of decimals of the token\",\"name\":\"The name of the token\",\"pool\":\"The reference to the main Pool contract\",\"symbol\":\"The symbol of the token\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"title\":\"IncentivizedERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Basic ERC20 implementation\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":\"IncentivizedERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":30857,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_userState","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":30867,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":30869,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":30871,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":30874,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_incentivesController","offset":1,"slot":"5","type":"t_contract(IAaveIncentivesController)4000"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Basic ERC20 implementation","version":1}}},"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol":{"MintableIncentivizedERC20":{"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":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","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 `amount` 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 amount of tokens owned by `account`."},"constructor":{"details":"Constructor.","params":{"decimals":"The number of decimals of the token","name":"The name of the token","pool":"The reference to the main Pool contract","symbol":"The symbol of the token"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"title":"MintableIncentivizedERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"POOL()":"7535d246","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"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 `amount` 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 amount of tokens owned by `account`.\"},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"decimals\":\"The number of decimals of the token\",\"name\":\"The name of the token\",\"pool\":\"The reference to the main Pool contract\",\"symbol\":\"The symbol of the token\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"title\":\"MintableIncentivizedERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Implements mint and burn functions for IncentivizedERC20\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":\"MintableIncentivizedERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":30857,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_userState","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":30867,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":30869,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":30871,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":30874,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_incentivesController","offset":1,"slot":"5","type":"t_contract(IAaveIncentivesController)4000"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Implements mint and burn functions for IncentivizedERC20","version":1}}},"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol":{"ScaledBalanceTokenBase":{"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":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","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 `amount` 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 amount of tokens owned by `account`."},"constructor":{"details":"Constructor.","params":{"decimals":"The number of decimals of the token","name":"The name of the token","pool":"The reference to the main Pool contract","symbol":"The symbol of the token"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"title":"ScaledBalanceTokenBase","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"POOL()":"7535d246","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"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 `amount` 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 amount of tokens owned by `account`.\"},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"decimals\":\"The number of decimals of the token\",\"name\":\"The name of the token\",\"pool\":\"The reference to the main Pool contract\",\"symbol\":\"The symbol of the token\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"title\":\"ScaledBalanceTokenBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Basic ERC20 implementation of scaled balance token\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":\"ScaledBalanceTokenBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\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 GSN 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 payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev Returns the amount of tokens in existence.\\n   */\\n  function totalSupply() external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the amount of tokens owned by `account`.\\n   */\\n  function balanceOf(address account) external view returns (uint256);\\n\\n  /**\\n   * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n   *\\n   * Returns a boolean value indicating whether the operation succeeded.\\n   *\\n   * Emits a {Transfer} event.\\n   */\\n  function transfer(address recipient, uint256 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n  /**\\n   * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n   * allowance mechanism. `amount` 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 sender, address recipient, uint256 amount) external returns (bool);\\n\\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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\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    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(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    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(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    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(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    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(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    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(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    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\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    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\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    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\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   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\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    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":30857,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_userState","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(UserState)30852_storage)"},{"astId":30863,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":30865,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":30867,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":30869,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":30871,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":30874,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_incentivesController","offset":1,"slot":"5","type":"t_contract(IAaveIncentivesController)4000"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(IAaveIncentivesController)4000":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)30852_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)30852_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)30852_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":30849,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":30851,"contract":"contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Basic ERC20 implementation of scaled balance token","version":1}}}}}}